From nobody Sun Sep 22 07:26:41 2024 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 53EB2C4167B for ; Fri, 4 Mar 2022 16:15:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240713AbiCDQQZ (ORCPT ); Fri, 4 Mar 2022 11:16:25 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56090 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235671AbiCDQQQ (ORCPT ); Fri, 4 Mar 2022 11:16:16 -0500 Received: from mail-wr1-x42b.google.com (mail-wr1-x42b.google.com [IPv6:2a00:1450:4864:20::42b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 108951B8CB4 for ; Fri, 4 Mar 2022 08:15:28 -0800 (PST) Received: by mail-wr1-x42b.google.com with SMTP id e24so431217wrc.10 for ; Fri, 04 Mar 2022 08:15:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=8Nqj3Wj2afL4vH+AWQbMmnZZbmdqpSeJYR5BS2/Kv0Y=; b=OOS1o/jw7tYZCPMkqoGNeane3XqwRqfkrZVcw7gh/2d4grjXT+DEjE7qawH3IEvUOS KjJIsANa0cft/ebHmTMCPxTg0ND7PA5GXVbZpkAe9fWpLNJfkhz6iIBNBFMXYmLaNMfo fonMddZ/xVAAAyHlU1wySfS63mLMTTTK6gZ3mCbX4nmmBeaccJd6X2bsfzS2nYoP1EbR GrTAnaJ3qvyV9Y4woTsVIZsMYMF/znKif6xNvdbWnqb6M8tvluHkNcrdL1SUlDv1ODmP bRXLomEr0uYQBtlHOnZnz4TdVhWoqzw0Q8fn9jyOvof+Sk/VHY0zASNZJSABovJTPT19 F2tQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=8Nqj3Wj2afL4vH+AWQbMmnZZbmdqpSeJYR5BS2/Kv0Y=; b=BB8zHwz8KcJ/CBAfg+FuVF/DqhossOAD4ji7kZADE5VhzKwLE4ueMobQd5ClOn7Cs1 qJiwLuaDQ3g9+16YFK4AbwK1xsC/WqD2jwCaEIAxQAL4+E5mAdQUbgYrPN9e84CSecfX gb3lHTsilE6uy3U904Kx6kO+d4IQLCPZ5lg6otnXgHXfTHDqQMioxOBNXisZNckAg0nF Y/OsjTj4E3ndKdoaCGTa5l1gezWtRjmBgd1+XP32VOZl6mZxAxEJg22jBWXGAkIj4abe SGggcGlzs47TE+1APGcR47j81rxkDrYzl4xrO2zautPK38UQHxy+ITCFhppFQROM6aJZ vdkg== X-Gm-Message-State: AOAM5339sS2Q/z+IWkfro2DE9TmoIFENVsTy8oOKIq/kIB17HiwLtjbf oEMtOx9z3XsA3n8XE8u8GE4d4A== X-Google-Smtp-Source: ABdhPJzNkPllUg3CGamJ/9qQ6VEA0o7v+Nic7Ku68JBY2CRMOsrZPqCMPRFONhuaEBXE9kW5K1f9Fw== X-Received: by 2002:a05:6000:186d:b0:1e8:49fc:69ce with SMTP id d13-20020a056000186d00b001e849fc69cemr30513168wri.80.1646410526620; Fri, 04 Mar 2022 08:15:26 -0800 (PST) Received: from xps-9300.baylibre (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) by smtp.gmail.com with ESMTPSA id g6-20020a5d5406000000b001f049726044sm4937307wrv.79.2022.03.04.08.15.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Mar 2022 08:15:26 -0800 (PST) From: Alexandre Bailon To: ohad@wizery.com, bjorn.andersson@linaro.org, mathieu.poirier@linaro.org, robh+dt@kernel.or Cc: matthias.bgg@gmail.com, linux-remoteproc@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-kernel@vger.kernel.org, stephane.leprovost@mediatek.com, khilman@baylibre.com, Alexandre Bailon Subject: [PATCH v4 1/7] dt bindings: remoteproc: Add bindings for the MT8183 APU Date: Fri, 4 Mar 2022 17:15:08 +0100 Message-Id: <20220304161514.994128-2-abailon@baylibre.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220304161514.994128-1-abailon@baylibre.com> References: <20220304161514.994128-1-abailon@baylibre.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" This adds dt bindings for the APU present in the MT8183. Signed-off-by: Alexandre Bailon --- .../bindings/remoteproc/mtk,apu.yaml | 122 ++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 Documentation/devicetree/bindings/remoteproc/mtk,apu.ya= ml diff --git a/Documentation/devicetree/bindings/remoteproc/mtk,apu.yaml b/Do= cumentation/devicetree/bindings/remoteproc/mtk,apu.yaml new file mode 100644 index 000000000000..b640aa96d678 --- /dev/null +++ b/Documentation/devicetree/bindings/remoteproc/mtk,apu.yaml @@ -0,0 +1,122 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 + +--- +$id: "http://devicetree.org/schemas/remoteproc/mtk,apu.yaml#" +$schema: "http://devicetree.org/meta-schemas/core.yaml#" + +title: Mediatek AI Processor Unit (APU) + +description: + This document defines the binding for the APU, a co-processor that could + offload the CPU for machine learning and neural network. + +maintainers: + - Alexandre Bailon + +properties: + compatible: + const: mediatek,mt8183-apu + + reg: + maxItems: 1 + + interrupts: + maxItems: 1 + + clocks: + minItems: 3 + maxItems: 3 + + clock-names: + items: + - const: axi + - const: ipu + - const: jtag + + iommus: + maxItems: 3 + + memory-region: + maxItems: 3 + + memory-region-da: + description: + Array of APU device address. This is used to map the APU device addr= ess + to a physical address. + maxItems: 3 + + power-domains: + maxItems: 1 + + pinctrl: + description: pinctrl handles, required to configure pins for JTAG. + + pinctrl-names: + items: + - const: jtag + +required: + - compatible + - reg + - interrupts + - clocks + - clock-names + - iommus + - memory-region + - memory-region-da + - power-domains + +additionalProperties: false + +examples: + - | + #include + #include + #include + #include + + reserved-memory { + #address-cells =3D <1>; + #size-cells =3D <1>; + ranges; + + vdev0buffer: vdev0buffer@52900000 { + compatible =3D "shared-dma-pool"; + reg =3D <0x52900000 0x4000>; + no-map; + }; + + vdev0vring0: vdev0vring0@52904000 { + compatible =3D "shared-dma-pool"; + reg =3D <0x52904000 0x2000>; + no-map; + }; + + vdev0vring1: vdev0vring1@52906000 { + compatible =3D "shared-dma-pool"; + reg =3D <0x52906000 0x2000>; + no-map; + }; + }; + + apu0: apu@19100000 { + compatible =3D "mediatek,mt8183-apu"; + reg =3D <0x19180000 0x14000>; + interrupts =3D ; + + iommus =3D <&iommu M4U_PORT_IMG_IPUO>, + <&iommu M4U_PORT_IMG_IPU3O>, + <&iommu M4U_PORT_IMG_IPUI>; + + clocks =3D <&ipu_core0 CLK_IPU_CORE0_AXI>, + <&ipu_core0 CLK_IPU_CORE0_IPU>, + <&ipu_core0 CLK_IPU_CORE0_JTAG>; + + clock-names =3D "axi", "ipu", "jtag"; + + power-domains =3D <&scpsys MT8183_POWER_DOMAIN_VPU_CORE0>; + memory-region =3D <&vdev0buffer>, <&vdev0vring0>, <&vdev0vring1>; + memory-region-da =3D <0x6fff8000>, <0x6fffc000>, <0x6fffe000>; + }; +... --=20 2.34.1 From nobody Sun Sep 22 07:26:41 2024 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E4167C433EF for ; Fri, 4 Mar 2022 16:15:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240747AbiCDQQ3 (ORCPT ); Fri, 4 Mar 2022 11:16:29 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56174 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240685AbiCDQQR (ORCPT ); Fri, 4 Mar 2022 11:16:17 -0500 Received: from mail-wr1-x430.google.com (mail-wr1-x430.google.com [IPv6:2a00:1450:4864:20::430]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DCAEA1B8CA7 for ; Fri, 4 Mar 2022 08:15:28 -0800 (PST) Received: by mail-wr1-x430.google.com with SMTP id i8so13393732wrr.8 for ; Fri, 04 Mar 2022 08:15:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=qo1oLJMa/Juuiz/8tm0dlUbpsAehCK6hY4TsDvEil64=; b=4ucNsu73371QER1iVg/SYxU4sTtNkFz4mcETt58TIUbIzHX0UQsNiv7/hpQbphueQp uE41tjRPPJVp+8VjH9CzBcNeqohZ/thG3VeH2awR9qE8+VdDciUao7ZtKsklp2Q7HMcS 4MFMXWb80oYj5s6RUBwMkBasfLcAC3kFBfxZDTH2oFa4Zbf2w5MNjrHHTa70XJyYta// iv7RK5ax6bqFepe4Uuz0kwBN6Z2qVletNxzWFgc+MX18zxn024mFy01NHrKFkMHUDCnE c3I369eg/D7s8/pCtCAwrkXnmc9A9qotLgCQpCQn9rmDz/m6r3OM6U6LksGIJuV9Fl5m Qsvw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=qo1oLJMa/Juuiz/8tm0dlUbpsAehCK6hY4TsDvEil64=; b=SxFx1OZqtgVwmwSArVM4fzGDWDxgTeqTdio3O8bN8oKkQ0PhpKXBVV7HGWY+n7S9+n JSq31u8nHxU6luTmm0VT6k2nQDzn8j5nWO9oI1pI6noanSe2S9C+Ar+U01BrMRJEYAVD ULXf2BxozIPU4aocoTtMnMZlX7BulEKjdf9uVJOHgSyu0aCxq48vzrzs8bcDrr9t/Gp8 Rr2xuto48MU6Lnv0H3p5juQKlEaeRhfNVxkcBNvw7pr3we1sCx3rUslKbMpoZBVFuyvL A70xr7zTCtbtb9hiodIrW4ZHbHMj2pybOYlzFR1HrIGf3uC6kMgVHjjiZGDfSx8QBXW9 lahw== X-Gm-Message-State: AOAM533Fqa/ZIqiq3mslTmRDJc3bG1pbdlFRBlB4jpoCIb9iFzCiu1Jk to5Q7XaYcKMJeVUckPMb6Jw/Ow== X-Google-Smtp-Source: ABdhPJypiVdEpBXufX/LYg2TlJODChhaQvP/Mg/mSfLKFI5Q9apmvXFWuBYOHKLyb5PE/15fMYRUaw== X-Received: by 2002:a05:6000:15cb:b0:1ea:7db2:f5bb with SMTP id y11-20020a05600015cb00b001ea7db2f5bbmr29322769wry.709.1646410527460; Fri, 04 Mar 2022 08:15:27 -0800 (PST) Received: from xps-9300.baylibre (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) by smtp.gmail.com with ESMTPSA id g6-20020a5d5406000000b001f049726044sm4937307wrv.79.2022.03.04.08.15.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Mar 2022 08:15:27 -0800 (PST) From: Alexandre Bailon To: ohad@wizery.com, bjorn.andersson@linaro.org, mathieu.poirier@linaro.org, robh+dt@kernel.or Cc: matthias.bgg@gmail.com, linux-remoteproc@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-kernel@vger.kernel.org, stephane.leprovost@mediatek.com, khilman@baylibre.com, Alexandre Bailon Subject: [PATCH v4 2/7] dt-bindings: remoteproc: Add bindings for the MT8365 APU Date: Fri, 4 Mar 2022 17:15:09 +0100 Message-Id: <20220304161514.994128-3-abailon@baylibre.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220304161514.994128-1-abailon@baylibre.com> References: <20220304161514.994128-1-abailon@baylibre.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" This updates the Mediatek APU bindings to support the MT8365. Signed-off-by: Alexandre Bailon --- .../bindings/remoteproc/mtk,apu.yaml | 45 ++++++++++++++++--- 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/Documentation/devicetree/bindings/remoteproc/mtk,apu.yaml b/Do= cumentation/devicetree/bindings/remoteproc/mtk,apu.yaml index b640aa96d678..388352ccb2b5 100644 --- a/Documentation/devicetree/bindings/remoteproc/mtk,apu.yaml +++ b/Documentation/devicetree/bindings/remoteproc/mtk,apu.yaml @@ -16,7 +16,9 @@ maintainers: =20 properties: compatible: - const: mediatek,mt8183-apu + enum: + - mediatek,mt8183-apu + - mediatek,mt8365-apu =20 reg: maxItems: 1 @@ -26,13 +28,11 @@ properties: =20 clocks: minItems: 3 - maxItems: 3 + maxItems: 8 =20 clock-names: - items: - - const: axi - - const: ipu - - const: jtag + minItems: 3 + maxItems: 8 =20 iommus: maxItems: 3 @@ -69,6 +69,39 @@ required: =20 additionalProperties: false =20 +allOf: + - if: + properties: + compatible: + contains: + enum: + - mediatek,mt8183-apu + then: + properties: + clock-names: + items: + - const: axi + - const: ipu + - const: jtag + - if: + properties: + compatible: + contains: + enum: + - mediatek,mt8365-apu + then: + properties: + clock-names: + items: + - const: if_ck + - const: edma + - const: ahb + - const: axi + - const: ipu + - const: jtag + - const: smi_cam + - const: ifr_apu_axi + examples: - | #include --=20 2.34.1 From nobody Sun Sep 22 07:26:41 2024 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 87B42C433FE for ; Fri, 4 Mar 2022 16:15:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240753AbiCDQQa (ORCPT ); Fri, 4 Mar 2022 11:16:30 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56340 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240474AbiCDQQT (ORCPT ); Fri, 4 Mar 2022 11:16:19 -0500 Received: from mail-wr1-x42a.google.com (mail-wr1-x42a.google.com [IPv6:2a00:1450:4864:20::42a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3E87E1B8CB2 for ; Fri, 4 Mar 2022 08:15:30 -0800 (PST) Received: by mail-wr1-x42a.google.com with SMTP id ay10so13432955wrb.6 for ; Fri, 04 Mar 2022 08:15:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=A5BQTOw/sXp3TYshwTZm9beWJAVLkCvWgXDxaIwyMSA=; b=dia3oXp7q/1VjrCfFLkAy+mPg5LwHgobOELdYWi3Z9dN6Shze/dwz/uopWDUgcShMT LWmn7K89YF9pI7AbweONu4D6ImhQY7kdEKga7xxDUMMmLWf+4+pIW0d/XjSVt7VteyCj sFaT+UD8QFdcYk7jfAImoFpyEuGxAskWUOkxEC/qQc2V1uIljxXLI6k4vg0w7k2Wr3ct JPzgjgdLxUeVYY2IRM6RjU+Tyo2eB1rzhIr1uJLJmvyjj9Pp62FqAIy6SaZkQj9YUi7Y yJSre1ellL7hMYy60GkcVEJmkY4x5M2yO0WC5pzb+KbrkLIU73Ci5tWsp56jpRCrSk4g gz2Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=A5BQTOw/sXp3TYshwTZm9beWJAVLkCvWgXDxaIwyMSA=; b=i5+kPt4jlBsU/+b2uVe/UdR3sAGAahDXu++u2iRveq+YpmrnPCxG5NrKRo6xVLpo3V UvaxzjfcWGEb1Dl7a6BTsCp+9AiVw1tvNa4ASamXUGjZKO8RvUgIIM9ItUJaIbNnbFzV NIL6B69qKI1nEobdKX2Vc6b1fqkguZJajdOrJO5MVinsibVotctBua4+j2MsxGG02MHy u3uYtd9/kblagi6FQdCUTsjI01Zb/CjvVyKPTurf7wIkUgFRhPceSJcXZZtjjeklLSeH FSFUzlTyKc7gi5ssQlUw7k4qmBEjL7oHgx4WiQJfFd153+8KxbHTh46OyCA8L3+/iYAx jCEg== X-Gm-Message-State: AOAM530u9FjgBpk1UEzYco+vBD3IUc7QCwaTi9STCB/Lb6EkjpriTnYW x6FHN1cnEVyLLtEf55bxzdbYDg== X-Google-Smtp-Source: ABdhPJy3avM7h1zWOCFAbWXeckRHWDmyJ1lmQgTKMw5y5k07tM3CGmgyGL90bbNcQ5hbA47XiHbodg== X-Received: by 2002:adf:f34c:0:b0:1ef:fde2:6d83 with SMTP id e12-20020adff34c000000b001effde26d83mr15098505wrp.637.1646410528617; Fri, 04 Mar 2022 08:15:28 -0800 (PST) Received: from xps-9300.baylibre (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) by smtp.gmail.com with ESMTPSA id g6-20020a5d5406000000b001f049726044sm4937307wrv.79.2022.03.04.08.15.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Mar 2022 08:15:28 -0800 (PST) From: Alexandre Bailon To: ohad@wizery.com, bjorn.andersson@linaro.org, mathieu.poirier@linaro.org, robh+dt@kernel.or Cc: matthias.bgg@gmail.com, linux-remoteproc@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-kernel@vger.kernel.org, stephane.leprovost@mediatek.com, khilman@baylibre.com, Alexandre Bailon Subject: [PATCH v4 3/7] remoteproc: Add a remoteproc driver for the MT8183's APU Date: Fri, 4 Mar 2022 17:15:10 +0100 Message-Id: <20220304161514.994128-4-abailon@baylibre.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220304161514.994128-1-abailon@baylibre.com> References: <20220304161514.994128-1-abailon@baylibre.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" This adds a driver to control the APU present in the MT8183. This loads the firmware and start the DSP. Signed-off-by: Alexandre Bailon --- drivers/remoteproc/Kconfig | 10 + drivers/remoteproc/Makefile | 1 + drivers/remoteproc/mtk_apu.c | 486 +++++++++++++++++++++++++++++++++++ 3 files changed, 497 insertions(+) create mode 100644 drivers/remoteproc/mtk_apu.c diff --git a/drivers/remoteproc/Kconfig b/drivers/remoteproc/Kconfig index 341156e2a29b..959d24e9492c 100644 --- a/drivers/remoteproc/Kconfig +++ b/drivers/remoteproc/Kconfig @@ -64,6 +64,16 @@ config MTK_SCP =20 It's safe to say N here. =20 +config MTK_APU + tristate "Mediatek APU remoteproc support" + depends on ARCH_MEDIATEK + depends on MTK_IOMMU + help + Say y to support the Mediatek's AI Processing Unit (APU) via + the remote processor framework. + + It's safe to say N here. + config OMAP_REMOTEPROC tristate "OMAP remoteproc support" depends on ARCH_OMAP4 || SOC_OMAP5 || SOC_DRA7XX diff --git a/drivers/remoteproc/Makefile b/drivers/remoteproc/Makefile index 0ac256b6c977..0ab4461c33af 100644 --- a/drivers/remoteproc/Makefile +++ b/drivers/remoteproc/Makefile @@ -15,6 +15,7 @@ obj-$(CONFIG_IMX_REMOTEPROC) +=3D imx_rproc.o obj-$(CONFIG_IMX_DSP_REMOTEPROC) +=3D imx_dsp_rproc.o obj-$(CONFIG_INGENIC_VPU_RPROC) +=3D ingenic_rproc.o obj-$(CONFIG_MTK_SCP) +=3D mtk_scp.o mtk_scp_ipi.o +obj-$(CONFIG_MTK_APU) +=3D mtk_apu.o obj-$(CONFIG_OMAP_REMOTEPROC) +=3D omap_remoteproc.o obj-$(CONFIG_WKUP_M3_RPROC) +=3D wkup_m3_rproc.o obj-$(CONFIG_DA8XX_REMOTEPROC) +=3D da8xx_remoteproc.o diff --git a/drivers/remoteproc/mtk_apu.c b/drivers/remoteproc/mtk_apu.c new file mode 100644 index 000000000000..867b4682b507 --- /dev/null +++ b/drivers/remoteproc/mtk_apu.c @@ -0,0 +1,486 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2020 BayLibre SAS + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "remoteproc_internal.h" + +#define SW_RST (0x0000000C) +#define SW_RST_OCD_HALT_ON_RST BIT(12) +#define SW_RST_IPU_D_RST BIT(8) +#define SW_RST_IPU_B_RST BIT(4) +#define CORE_CTRL (0x00000110) +#define CORE_CTRL_PDEBUG_ENABLE BIT(31) +#define CORE_CTRL_SRAM_64K_iMEM (0x00 << 27) +#define CORE_CTRL_SRAM_96K_iMEM (0x01 << 27) +#define CORE_CTRL_SRAM_128K_iMEM (0x02 << 27) +#define CORE_CTRL_SRAM_192K_iMEM (0x03 << 27) +#define CORE_CTRL_SRAM_256K_iMEM (0x04 << 27) +#define CORE_CTRL_PBCLK_ENABLE BIT(26) +#define CORE_CTRL_RUN_STALL BIT(23) +#define CORE_CTRL_STATE_VECTOR_SELECT BIT(19) +#define CORE_CTRL_PIF_GATED BIT(17) +#define CORE_CTRL_NMI BIT(0) +#define CORE_XTENSA_INT (0x00000114) +#define CORE_CTL_XTENSA_INT (0x00000118) +#define CORE_DEFAULT0 (0x0000013C) +#define CORE_DEFAULT0_QOS_SWAP_0 (0x00 << 28) +#define CORE_DEFAULT0_QOS_SWAP_1 (0x01 << 28) +#define CORE_DEFAULT0_QOS_SWAP_2 (0x02 << 28) +#define CORE_DEFAULT0_QOS_SWAP_3 (0x03 << 28) +#define CORE_DEFAULT0_ARUSER_USE_IOMMU (0x10 << 23) +#define CORE_DEFAULT0_AWUSER_USE_IOMMU (0x10 << 18) +#define CORE_DEFAULT1 (0x00000140) +#define CORE_DEFAULT0_ARUSER_IDMA_USE_IOMMU (0x10 << 0) +#define CORE_DEFAULT0_AWUSER_IDMA_USE_IOMMU (0x10 << 5) +#define CORE_XTENSA_ALTRESETVEC (0x000001F8) + +#define VDEV_MEM_COUNT (3) + +#define APU_RESET_DELAY (27) + +struct mtk_apu_rproc { + struct device *dev; + void __iomem *base; + int irq; + unsigned int num_clks; + struct clk_bulk_data *clks; + struct iommu_domain *domain; + struct list_head mappings; +}; + +static const char * const mt8183_clk_names[] =3D { + "ipu", + "axi", + "jtag" +}; + +static int mtk_apu_iommu_map(struct rproc *rproc, struct rproc_mem_entry *= entry) +{ + struct mtk_apu_rproc *apu_rproc =3D rproc->priv; + struct device *dev =3D rproc->dev.parent; + struct rproc_mem_entry *mapping; + int ret; + u64 pa; + + /* vdev buffer and vring are already mapped */ + if (strstr(entry->name, "vdev")) + return 0; + + mapping =3D kzalloc(sizeof(*mapping), GFP_KERNEL); + if (!mapping) + return -ENOMEM; + + if (!entry->va) + pa =3D entry->dma; + else + pa =3D rproc_va_to_pa(entry->va); + + ret =3D iommu_map(apu_rproc->domain, entry->da, pa, entry->len, entry->fl= ags); + if (ret) { + dev_err(dev, "iommu_map failed: %d\n", ret); + goto free_mapping; + } + + mapping->da =3D entry->da; + mapping->len =3D entry->len; + list_add_tail(&mapping->node, &apu_rproc->mappings); + + return 0; + +free_mapping: + kfree(mapping); + + return ret; +} + +static void mtk_apu_iommu_unmap_all(struct rproc *rproc) +{ + struct mtk_apu_rproc *apu_rproc =3D rproc->priv; + struct device *dev =3D rproc->dev.parent; + struct rproc_mem_entry *entry, *tmp; + + /* clean up iommu mapping entries */ + list_for_each_entry_safe(entry, tmp, &apu_rproc->mappings, node) { + size_t unmapped; + + unmapped =3D iommu_unmap(apu_rproc->domain, entry->da, entry->len); + if (unmapped !=3D entry->len) { + /* nothing much to do besides complaining */ + dev_err(dev, "failed to unmap %zx/%zu\n", entry->len, + unmapped); + } + + list_del(&entry->node); + kfree(entry); + } +} + +static int mtk_apu_rproc_alloc_carveout(struct rproc *rproc, + struct rproc_mem_entry *mem) +{ + int flags =3D IOMMU_READ | IOMMU_READ | IOMMU_NOEXEC; + struct device *dev =3D rproc->dev.parent; + int ret; + + struct iommu_domain *domain =3D iommu_get_domain_for_dev(dev); + + mem->va =3D memremap(mem->dma, mem->len, MEMREMAP_WC); + if (IS_ERR_OR_NULL(mem->va)) { + dev_err(dev, "Unable to map memory region: %pa+%zu\n", + &mem->dma, mem->len); + return PTR_ERR(mem->va); + } + + ret =3D iommu_map(domain, mem->da, mem->dma, mem->len, flags); + if (ret) + memunmap(mem->va); + + return 0; +} + +static int mtk_apu_rproc_release_carveout(struct rproc *rproc, + struct rproc_mem_entry *mem) +{ + struct mtk_apu_rproc *apu_rproc =3D rproc->priv; + struct device *dev =3D apu_rproc->dev; + struct iommu_domain *domain; + size_t unmapped; + + domain =3D iommu_get_domain_for_dev(dev); + unmapped =3D iommu_unmap(domain, mem->da, mem->len); + if (unmapped !=3D mem->len) { + /* nothing much to do besides complaining */ + dev_err(dev, "failed to unmap %zx/%zu\n", mem->len, unmapped); + } + memunmap(mem->va); + + return 0; +} + +static int mtk_apu_rproc_vdev_mem_init(struct rproc *rproc) +{ + struct mtk_apu_rproc *apu_rproc =3D rproc->priv; + struct device *dev =3D apu_rproc->dev; + struct device_node *np =3D dev->of_node; + struct reserved_mem *rmem; + struct rproc_mem_entry *mem; + u32 da[VDEV_MEM_COUNT]; + int ret; + int i; + + ret =3D of_property_read_u32_array(np, "memory-region-da", da, VDEV_MEM_C= OUNT); + if (ret) + return ret; + + for (i =3D 0; i < VDEV_MEM_COUNT; i++) { + struct device_node *target; + char *name; + + target =3D of_parse_phandle(np, "memory-region", i); + if (!target) + return -EINVAL; + + rmem =3D of_reserved_mem_lookup(target); + of_node_put(target); + + if (!rmem) + return -ENOMEM; + + ret =3D strcspn(rmem->name, "@"); + if (!ret) + return -EINVAL; + + name =3D kstrndup(rmem->name, ret, GFP_KERNEL); + if (!name) + return -ENOMEM; + + mem =3D rproc_mem_entry_init(dev, NULL, rmem->base, rmem->size, + da[i], + mtk_apu_rproc_alloc_carveout, + mtk_apu_rproc_release_carveout, + name); + kfree(name); + if (!mem) + return -ENOMEM; + + rproc_add_carveout(rproc, mem); + } + + return 0; +} + +static int mtk_apu_rproc_prepare(struct rproc *rproc) +{ + struct mtk_apu_rproc *apu_rproc =3D rproc->priv; + int ret; + + ret =3D clk_bulk_prepare_enable(apu_rproc->num_clks, apu_rproc->clks); + if (ret) + dev_err(apu_rproc->dev, "Failed to enable clocks\n"); + + ret =3D mtk_apu_rproc_vdev_mem_init(rproc); + if (ret) { + dev_err(apu_rproc->dev, "Failed to init vdev memory\n"); + clk_bulk_disable_unprepare(apu_rproc->num_clks, apu_rproc->clks); + + } + + return ret; +} + +static int mtk_apu_rproc_unprepare(struct rproc *rproc) +{ + struct mtk_apu_rproc *apu_rproc =3D rproc->priv; + + clk_bulk_disable_unprepare(apu_rproc->num_clks, apu_rproc->clks); + + return 0; +} + +static int mtk_apu_rproc_start(struct rproc *rproc) +{ + struct mtk_apu_rproc *apu_rproc =3D rproc->priv; + u32 core_ctrl; + + /* Set reset vector of APU firmware boot address */ + writel(rproc->bootaddr, apu_rproc->base + CORE_XTENSA_ALTRESETVEC); + + /* Turn on the clocks and stall the APU */ + core_ctrl =3D readl(apu_rproc->base + CORE_CTRL); + core_ctrl |=3D CORE_CTRL_PDEBUG_ENABLE | CORE_CTRL_PBCLK_ENABLE | + CORE_CTRL_STATE_VECTOR_SELECT | CORE_CTRL_RUN_STALL | + CORE_CTRL_PIF_GATED; + writel(core_ctrl, apu_rproc->base + CORE_CTRL); + + /* Reset the APU: this requires 27 ns to be effective on any platform */ + writel(SW_RST_OCD_HALT_ON_RST | SW_RST_IPU_B_RST | SW_RST_IPU_D_RST, + apu_rproc->base + SW_RST); + ndelay(APU_RESET_DELAY); + writel(0, apu_rproc->base + SW_RST); + + core_ctrl &=3D ~CORE_CTRL_PIF_GATED; + writel(core_ctrl, apu_rproc->base + CORE_CTRL); + + /* Configure memory accesses to go through the IOMMU */ + writel(CORE_DEFAULT0_AWUSER_USE_IOMMU | CORE_DEFAULT0_ARUSER_USE_IOMMU | + CORE_DEFAULT0_QOS_SWAP_1, apu_rproc->base + CORE_DEFAULT0); + writel(CORE_DEFAULT0_AWUSER_IDMA_USE_IOMMU | + CORE_DEFAULT0_ARUSER_IDMA_USE_IOMMU, + apu_rproc->base + CORE_DEFAULT1); + + /* Release the APU */ + core_ctrl &=3D ~CORE_CTRL_RUN_STALL; + writel(core_ctrl, apu_rproc->base + CORE_CTRL); + + return 0; +} + +static int mtk_apu_rproc_stop(struct rproc *rproc) +{ + struct mtk_apu_rproc *apu_rproc =3D rproc->priv; + u32 core_ctrl; + + core_ctrl =3D readl(apu_rproc->base + CORE_CTRL); + writel(core_ctrl | CORE_CTRL_RUN_STALL, apu_rproc->base + CORE_CTRL); + + mtk_apu_iommu_unmap_all(rproc); + + return 0; +} + +static void mtk_apu_rproc_kick(struct rproc *rproc, int vqid) +{ + struct mtk_apu_rproc *apu_rproc =3D rproc->priv; + + writel(1 << vqid, apu_rproc->base + CORE_CTL_XTENSA_INT); +} + +static int mtk_apu_load(struct rproc *rproc, const struct firmware *fw) + +{ + struct rproc_mem_entry *entry, *tmp; + int ret; + + ret =3D rproc_elf_load_segments(rproc, fw); + if (ret) + return ret; + + list_for_each_entry_safe(entry, tmp, &rproc->carveouts, node) { + ret =3D mtk_apu_iommu_map(rproc, entry); + if (ret) + goto err_unmap_all; + } + + return 0; + +err_unmap_all: + mtk_apu_iommu_unmap_all(rproc); + + return ret; +} + +static const struct rproc_ops mtk_apu_rproc_ops =3D { + .prepare =3D mtk_apu_rproc_prepare, + .unprepare =3D mtk_apu_rproc_unprepare, + .start =3D mtk_apu_rproc_start, + .stop =3D mtk_apu_rproc_stop, + .kick =3D mtk_apu_rproc_kick, + .load =3D mtk_apu_load, + .parse_fw =3D rproc_elf_load_rsc_table, + .find_loaded_rsc_table =3D rproc_elf_find_loaded_rsc_table, + .sanity_check =3D rproc_elf_sanity_check, + .get_boot_addr =3D rproc_elf_get_boot_addr, +}; + +static irqreturn_t mtk_apu_rproc_callback(int irq, void *data) +{ + struct rproc *rproc =3D data; + struct mtk_apu_rproc *apu_rproc =3D (struct mtk_apu_rproc *)rproc->priv; + + writel(1, apu_rproc->base + CORE_XTENSA_INT); + + return IRQ_WAKE_THREAD; +} + +static int mtk_apu_rproc_probe(struct platform_device *pdev) +{ + struct device *dev =3D &pdev->dev; + struct mtk_apu_rproc *apu_rproc; + struct rproc *rproc; + struct resource *res; + int ret; + int i; + + ret =3D of_property_count_elems_of_size(dev->of_node, "memory-region", + sizeof(phandle)); + if (ret !=3D VDEV_MEM_COUNT) + return -EINVAL; + + ret =3D of_property_count_elems_of_size(dev->of_node, "memory-region-da", + sizeof(u32)); + if (ret !=3D VDEV_MEM_COUNT) + return -EINVAL; + + rproc =3D rproc_alloc(dev, dev_name(dev), &mtk_apu_rproc_ops, NULL, + sizeof(*apu_rproc)); + if (!rproc) + return -ENOMEM; + + rproc->recovery_disabled =3D true; + rproc->has_iommu =3D false; + rproc->auto_boot =3D false; + + apu_rproc =3D rproc->priv; + apu_rproc->dev =3D dev; + INIT_LIST_HEAD(&apu_rproc->mappings); + + platform_set_drvdata(pdev, rproc); + + apu_rproc->domain =3D iommu_get_domain_for_dev(dev); + if (!apu_rproc->domain) { + ret =3D -ENODEV; + goto free_rproc; + } + + res =3D platform_get_resource(pdev, IORESOURCE_MEM, 0); + apu_rproc->base =3D devm_ioremap_resource(dev, res); + if (IS_ERR(apu_rproc->base)) { + dev_err(dev, "Failed to map mmio\n"); + ret =3D PTR_ERR(apu_rproc->base); + goto free_rproc; + } + + apu_rproc->irq =3D platform_get_irq(pdev, 0); + if (apu_rproc->irq < 0) { + ret =3D apu_rproc->irq; + goto free_rproc; + } + + apu_rproc->domain =3D iommu_get_domain_for_dev(dev); + if (!apu_rproc->domain) { + ret =3D -ENODEV; + goto free_rproc; + } + + ret =3D devm_request_threaded_irq(dev, apu_rproc->irq, + mtk_apu_rproc_callback, handle_event, + IRQF_SHARED | IRQF_ONESHOT, + NULL, rproc); + if (ret) { + dev_err(dev, "devm_request_threaded_irq error: %d\n", ret); + goto free_rproc; + } + + apu_rproc->num_clks =3D ARRAY_SIZE(mt8183_clk_names); + apu_rproc->clks =3D devm_kcalloc(dev, apu_rproc->num_clks, + sizeof(*apu_rproc->clks), GFP_KERNEL); + for (i =3D 0; i < apu_rproc->num_clks; ++i) + apu_rproc->clks[i].id =3D mt8183_clk_names[i]; + + ret =3D devm_clk_bulk_get(dev, apu_rproc->num_clks, apu_rproc->clks); + if (ret) { + dev_err(dev, "Failed to get clocks\n"); + goto free_rproc; + } + + ret =3D rproc_add(rproc); + if (ret) { + dev_err(dev, "rproc_add failed: %d\n", ret); + goto free_rproc; + } + + return 0; + +free_rproc: + rproc_free(rproc); + + return ret; +} + +static int mtk_apu_rproc_remove(struct platform_device *pdev) +{ + struct rproc *rproc =3D platform_get_drvdata(pdev); + struct mtk_apu_rproc *apu_rproc =3D (struct mtk_apu_rproc *)rproc->priv; + struct device *dev =3D &pdev->dev; + + disable_irq(apu_rproc->irq); + + rproc_del(rproc); + of_reserved_mem_device_release(dev); + rproc_free(rproc); + + return 0; +} + +static const struct of_device_id mtk_apu_rproc_of_match[] =3D { + { .compatible =3D "mediatek,mt8183-apu", }, + { /* sentinel */ }, +}; +MODULE_DEVICE_TABLE(of, mtk_apu_rproc_of_match); + +static struct platform_driver mtk_apu_rproc_driver =3D { + .probe =3D mtk_apu_rproc_probe, + .remove =3D mtk_apu_rproc_remove, + .driver =3D { + .name =3D "mtk_apu-rproc", + .of_match_table =3D of_match_ptr(mtk_apu_rproc_of_match), + }, +}; +module_platform_driver(mtk_apu_rproc_driver); + +MODULE_LICENSE("GPL v2"); +MODULE_AUTHOR("Alexandre Bailon"); +MODULE_DESCRIPTION("MTK APU Remote Processor control driver"); --=20 2.34.1 From nobody Sun Sep 22 07:26:41 2024 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 985B1C433F5 for ; Fri, 4 Mar 2022 16:15:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240758AbiCDQQe (ORCPT ); Fri, 4 Mar 2022 11:16:34 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56368 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240716AbiCDQQT (ORCPT ); Fri, 4 Mar 2022 11:16:19 -0500 Received: from mail-wm1-x32b.google.com (mail-wm1-x32b.google.com [IPv6:2a00:1450:4864:20::32b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4809A1B8CA6 for ; Fri, 4 Mar 2022 08:15:31 -0800 (PST) Received: by mail-wm1-x32b.google.com with SMTP id r187-20020a1c2bc4000000b003810e6b192aso5394036wmr.1 for ; Fri, 04 Mar 2022 08:15:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=DFsuyCOMy/pl+DrmLQk2yMUaSrmiytEYHpzUyHLsV8M=; b=MfM51jgPq7iaGaLlQsyEHm/9ew1UFuusyy1unUC+zh3q+Nmf1L3n9YE7xcAwnx9FCJ XjtkR6AKg8+cAcFPWYX11uhdoCZKFxdDbKBnWuA2daTUlTHTqk86YT+PSJaC/tniMNdH NMr5Cu842/zTYHMn7BZe8/XaTj11PTamnDTomm4/kLFCTM24KBVCEJIiDCGe6yQwZtV9 CaNd7/iKn+K2+Pse/Ff5skhlz4Dk+neOVxd4jbOOX9w+pMODz5V+jzlNFm3NxSOLHR8Q OqpES/+l3HarKWoFkFL3upi6aue2PIPgM1lNOAPpJM+EfwpXtKiA3095r/sMi/nGfNDm DKQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=DFsuyCOMy/pl+DrmLQk2yMUaSrmiytEYHpzUyHLsV8M=; b=SxuhRPP+1i39VUYLtCd2axusNArVA6bXssQYfSRTLRnkOOTiGbV6IJa7cRYxMYy9ym G8OjS18oPVXzuE7g2UdedkeZVw552uzg8f2PsSgp0GWqa2MvW1FejLK/KP3wPo39cusu apPSNGJE4iTBMWy6x5zwrqUiDYfCZ5rAL2XvSqp0GU64tot2BVfJ1grBGpJtUAAcfSl1 LijvPk7+8bpjsSy1B2n7i0AA5uJqVYCuoikiGN3ZY1qMaCOZk8cBrW3U4qUqhaJx/h3I OHBBPD5pMfYK4UqtQfSQvnL+BcwQZCP/SbbFk0epjlFJKFeZRFUCB0Ar0I4wi1nHxNdN cFNA== X-Gm-Message-State: AOAM5323UDY4XpZaCN1Dyb63lm+/oxBoV4nnDb7SgRvzYyE/ybO0itUH lMI8eLuaUsjWRZ6bMdI3KtshTw== X-Google-Smtp-Source: ABdhPJyBJOcBWjTtm8HY+gNhpkU9m234PAZ12suoskfo+8t/6sjPrUd+bewsHN/nHvszJDXwairsFA== X-Received: by 2002:a05:600c:3c9b:b0:380:be98:6204 with SMTP id bg27-20020a05600c3c9b00b00380be986204mr8063300wmb.121.1646410529792; Fri, 04 Mar 2022 08:15:29 -0800 (PST) Received: from xps-9300.baylibre (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) by smtp.gmail.com with ESMTPSA id g6-20020a5d5406000000b001f049726044sm4937307wrv.79.2022.03.04.08.15.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Mar 2022 08:15:29 -0800 (PST) From: Alexandre Bailon To: ohad@wizery.com, bjorn.andersson@linaro.org, mathieu.poirier@linaro.org, robh+dt@kernel.or Cc: matthias.bgg@gmail.com, linux-remoteproc@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-kernel@vger.kernel.org, stephane.leprovost@mediatek.com, khilman@baylibre.com, Alexandre Bailon Subject: [PATCH v4 4/7] remoteproc: mtk_apu: Add support of JTAG Date: Fri, 4 Mar 2022 17:15:11 +0100 Message-Id: <20220304161514.994128-5-abailon@baylibre.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220304161514.994128-1-abailon@baylibre.com> References: <20220304161514.994128-1-abailon@baylibre.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The DSP could be debugged using JTAG. The support of JTAG could enabled at build time and it could be enabled using debugfs. Signed-off-by: Alexandre Bailon --- drivers/remoteproc/Kconfig | 9 +++ drivers/remoteproc/mtk_apu.c | 147 ++++++++++++++++++++++++++++++++++- 2 files changed, 155 insertions(+), 1 deletion(-) diff --git a/drivers/remoteproc/Kconfig b/drivers/remoteproc/Kconfig index 959d24e9492c..28140cf04d8a 100644 --- a/drivers/remoteproc/Kconfig +++ b/drivers/remoteproc/Kconfig @@ -74,6 +74,15 @@ config MTK_APU =20 It's safe to say N here. =20 +config MTK_APU_JTAG + bool "Enable support of JTAG" + depends on MTK_APU + help + Say y to enable support of JTAG. + By default, JTAG will remain disabled until it is enabled using + debugfs: remoteproc/remoteproc0/jtag. Write 1 to enable it and + 0 to disable it. + config OMAP_REMOTEPROC tristate "OMAP remoteproc support" depends on ARCH_OMAP4 || SOC_OMAP5 || SOC_DRA7XX diff --git a/drivers/remoteproc/mtk_apu.c b/drivers/remoteproc/mtk_apu.c index 867b4682b507..3905eb5b7174 100644 --- a/drivers/remoteproc/mtk_apu.c +++ b/drivers/remoteproc/mtk_apu.c @@ -5,12 +5,14 @@ =20 #include #include +#include #include #include #include #include #include #include +#include #include #include #include @@ -45,6 +47,11 @@ #define CORE_DEFAULT1 (0x00000140) #define CORE_DEFAULT0_ARUSER_IDMA_USE_IOMMU (0x10 << 0) #define CORE_DEFAULT0_AWUSER_IDMA_USE_IOMMU (0x10 << 5) +#define CORE_DEFAULT2 (0x00000144) +#define CORE_DEFAULT2_DBG_EN BIT(3) +#define CORE_DEFAULT2_NIDEN BIT(2) +#define CORE_DEFAULT2_SPNIDEN BIT(1) +#define CORE_DEFAULT2_SPIDEN BIT(0) #define CORE_XTENSA_ALTRESETVEC (0x000001F8) =20 #define VDEV_MEM_COUNT (3) @@ -59,6 +66,13 @@ struct mtk_apu_rproc { struct clk_bulk_data *clks; struct iommu_domain *domain; struct list_head mappings; + +#ifdef CONFIG_MTK_APU_JTAG + struct pinctrl *pinctrl; + struct pinctrl_state *pinctrl_jtag; + bool jtag_enabled; + struct mutex jtag_mutex; +#endif }; =20 static const char * const mt8183_clk_names[] =3D { @@ -355,6 +369,133 @@ static irqreturn_t mtk_apu_rproc_callback(int irq, vo= id *data) return IRQ_WAKE_THREAD; } =20 +#ifdef CONFIG_MTK_APU_JTAG + +static int apu_enable_jtag(struct mtk_apu_rproc *apu_rproc) +{ + int ret =3D 0; + + mutex_lock(&apu_rproc->jtag_mutex); + if (apu_rproc->jtag_enabled) + goto err_mutex_unlock; + + writel(CORE_DEFAULT2_SPNIDEN | CORE_DEFAULT2_SPIDEN | + CORE_DEFAULT2_NIDEN | CORE_DEFAULT2_DBG_EN, + apu_rproc->base + CORE_DEFAULT2); + + apu_rproc->jtag_enabled =3D 1; + +err_mutex_unlock: + mutex_unlock(&apu_rproc->jtag_mutex); + + return ret; +} + +static int apu_disable_jtag(struct mtk_apu_rproc *apu_rproc) +{ + int ret =3D 0; + + mutex_lock(&apu_rproc->jtag_mutex); + if (!apu_rproc->jtag_enabled) + goto err_mutex_unlock; + + writel(0, apu_rproc->base + CORE_DEFAULT2); + + apu_rproc->jtag_enabled =3D 0; + +err_mutex_unlock: + mutex_unlock(&apu_rproc->jtag_mutex); + + return ret; +} + +static ssize_t rproc_jtag_read(struct file *filp, char __user *userbuf, + size_t count, loff_t *ppos) +{ + struct rproc *rproc =3D filp->private_data; + struct mtk_apu_rproc *apu_rproc =3D (struct mtk_apu_rproc *)rproc->priv; + char *buf =3D apu_rproc->jtag_enabled ? "enabled\n" : "disabled\n"; + + return simple_read_from_buffer(userbuf, count, ppos, buf, strlen(buf)); +} + +static ssize_t rproc_jtag_write(struct file *filp, const char __user *user= _buf, + size_t count, loff_t *ppos) +{ + struct rproc *rproc =3D filp->private_data; + struct mtk_apu_rproc *apu_rproc =3D (struct mtk_apu_rproc *)rproc->priv; + char buf[10]; + int ret; + + if (count < 1 || count > sizeof(buf)) + return -EINVAL; + + ret =3D copy_from_user(buf, user_buf, count); + if (ret) + return -EFAULT; + + /* remove end of line */ + if (buf[count - 1] =3D=3D '\n') + buf[count - 1] =3D '\0'; + + if (!strncmp(buf, "enabled", count)) + ret =3D apu_enable_jtag(apu_rproc); + else if (!strncmp(buf, "disabled", count)) + ret =3D apu_disable_jtag(apu_rproc); + else + return -EINVAL; + + return ret ? ret : count; +} + +static const struct file_operations rproc_jtag_ops =3D { + .read =3D rproc_jtag_read, + .write =3D rproc_jtag_write, + .open =3D simple_open, +}; + +static int apu_jtag_probe(struct mtk_apu_rproc *apu_rproc) +{ + int ret; + + if (!apu_rproc->rproc->dbg_dir) + return -ENODEV; + + apu_rproc->pinctrl =3D devm_pinctrl_get(apu_rproc->dev); + if (IS_ERR(apu_rproc->pinctrl)) { + dev_warn(apu_rproc->dev, "Failed to find JTAG pinctrl\n"); + return PTR_ERR(apu_rproc->pinctrl); + } + + apu_rproc->pinctrl_jtag =3D pinctrl_lookup_state(apu_rproc->pinctrl, + "jtag"); + if (IS_ERR(apu_rproc->pinctrl_jtag)) + return PTR_ERR(apu_rproc->pinctrl_jtag); + + ret =3D pinctrl_select_state(apu_rproc->pinctrl, + apu_rproc->pinctrl_jtag); + if (ret < 0) + return ret; + + mutex_init(&apu_rproc->jtag_mutex); + + debugfs_create_file("jtag", 0600, apu_rproc->rproc->dbg_dir, + apu_rproc->rproc, &rproc_jtag_ops); + + return 0; +} +#else +static int apu_jtag_probe(struct mtk_apu_rproc *apu_rproc) +{ + return 0; +} + +static int apu_disable_jtag(struct mtk_apu_rproc *apu_rproc) +{ + return 0; +} +#endif /* CONFIG_MTK_APU_JTAG */ + static int mtk_apu_rproc_probe(struct platform_device *pdev) { struct device *dev =3D &pdev->dev; @@ -442,6 +583,10 @@ static int mtk_apu_rproc_probe(struct platform_device = *pdev) goto free_rproc; } =20 + ret =3D apu_jtag_probe(apu_rproc); + if (ret) + dev_warn(dev, "Failed to configure jtag\n"); + return 0; =20 free_rproc: @@ -457,7 +602,7 @@ static int mtk_apu_rproc_remove(struct platform_device = *pdev) struct device *dev =3D &pdev->dev; =20 disable_irq(apu_rproc->irq); - + apu_disable_jtag(apu_rproc); rproc_del(rproc); of_reserved_mem_device_release(dev); rproc_free(rproc); --=20 2.34.1 From nobody Sun Sep 22 07:26:41 2024 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id A58A4C433F5 for ; Fri, 4 Mar 2022 16:15:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240764AbiCDQQl (ORCPT ); Fri, 4 Mar 2022 11:16:41 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56460 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240705AbiCDQQV (ORCPT ); Fri, 4 Mar 2022 11:16:21 -0500 Received: from mail-wr1-x432.google.com (mail-wr1-x432.google.com [IPv6:2a00:1450:4864:20::432]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C17DB1B8CB9 for ; Fri, 4 Mar 2022 08:15:32 -0800 (PST) Received: by mail-wr1-x432.google.com with SMTP id bk29so13441243wrb.4 for ; Fri, 04 Mar 2022 08:15:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=n+My/nqfiMsUFME5jSzdOaKmEvDAySulF7VBL4+IJf4=; b=PnqV9wYmLqfFTc4OFJc5UAuaMvtmWEJJN1yL6Rm7H2Q2mStp4J3ChxMgn06ydCvXyK UVRtV/otmLgWI2azaSmPvS4xLdRkV3dkpCcAM6LMGr8w+AwDloylveLMcJBdDQosT0q5 KPsoJe0mc+UridMf98U3NAi8nlEXwLZWoGI3R2UzOvVn1t8KlwaJZlZvWSBH4JdmARrb akkAOnaXLWabkA7OwsKaB8vjC2N/RQOQJb3V3D7vfckSt1zL+lkoaFiaTEfO/g8DDgbe zgYKdl4HKH63UGK6xrr+AByFwFqoA8+ajW49r1XlNolMOOXw3kyLLtWl1STMzHFKGZZ+ zIiA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=n+My/nqfiMsUFME5jSzdOaKmEvDAySulF7VBL4+IJf4=; b=LWOUfxuChcroXRw10wT7qFTuWJHuc1yV9EuRWu01PbfOMug2WecfPo4VTw5yc8JKnq 2QiQVmNcb89cfVNJbrRf3fcBhaooDTHLd/fWh6+CY+LwUTf7CcuZhfUxrDp0/W4cs/Cg oPoB2mJ6yHpVdMpodNfhF8H5dvkAsB1O9cjOVbGeChidOxuqTj4RPJk/IntGpCiN+fqF tAsyhL0o8VuGNyRSc/okw4FuBb8nZvTlFuJgG+w7qkvffNniD9+2xg+4+y/ehR3+i8/5 GqiQlaONzYw82QND/80/QZfgWqEQkMXJ4BbxnVJRvbqlzVSk2QwxWstkcwOYnllf8whB ar/A== X-Gm-Message-State: AOAM530UAejj+/Ig4NXAMcJ0gXmKGOPuhHk/EV8PUF2dnADQD0HcbNnO IUCGSxLi1VSRv0jXLHiautdmcw== X-Google-Smtp-Source: ABdhPJyfHIvzkrsMlpfQsnDvygOuOwOVs1EDwFq3zpjNDBuNMMUBYWWaEnz39fCgj1Cxh74/FkXKDg== X-Received: by 2002:adf:ef81:0:b0:1f0:95f:30a7 with SMTP id d1-20020adfef81000000b001f0095f30a7mr13676692wro.636.1646410531281; Fri, 04 Mar 2022 08:15:31 -0800 (PST) Received: from xps-9300.baylibre (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) by smtp.gmail.com with ESMTPSA id g6-20020a5d5406000000b001f049726044sm4937307wrv.79.2022.03.04.08.15.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Mar 2022 08:15:30 -0800 (PST) From: Alexandre Bailon To: ohad@wizery.com, bjorn.andersson@linaro.org, mathieu.poirier@linaro.org, robh+dt@kernel.or Cc: matthias.bgg@gmail.com, linux-remoteproc@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-kernel@vger.kernel.org, stephane.leprovost@mediatek.com, khilman@baylibre.com, Julien STEPHAN , Alexandre Bailon Subject: [PATCH v4 5/7] remoteproc: mtk_apu: Use match_data Date: Fri, 4 Mar 2022 17:15:12 +0100 Message-Id: <20220304161514.994128-6-abailon@baylibre.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220304161514.994128-1-abailon@baylibre.com> References: <20220304161514.994128-1-abailon@baylibre.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Julien STEPHAN This commits prepare the driver to be more generic in order to support multiple platform using the compatible property. To do that, put some register values and the clocks names inside private data. Signed-off-by: Julien STEPHAN Signed-off-by: Alexandre Bailon --- drivers/remoteproc/mtk_apu.c | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/drivers/remoteproc/mtk_apu.c b/drivers/remoteproc/mtk_apu.c index 3905eb5b7174..deec51b86ba5 100644 --- a/drivers/remoteproc/mtk_apu.c +++ b/drivers/remoteproc/mtk_apu.c @@ -58,12 +58,20 @@ =20 #define APU_RESET_DELAY (27) =20 +struct mtk_apu_conf { + u32 core_default0; + u32 core_default1; + u32 num_clks; + const char * const *clk_names; +}; + struct mtk_apu_rproc { struct device *dev; void __iomem *base; int irq; unsigned int num_clks; struct clk_bulk_data *clks; + struct mtk_apu_conf *conf; struct iommu_domain *domain; struct list_head mappings; =20 @@ -81,6 +89,13 @@ static const char * const mt8183_clk_names[] =3D { "jtag" }; =20 +static const struct mtk_apu_conf mt8183_conf =3D { + .core_default0 =3D (0x10 << 23) | (0x10 << 18), + .core_default1 =3D (0x10 << 0) | (0x10 << 5), + .num_clks =3D ARRAY_SIZE(mt8183_clk_names), + .clk_names =3D mt8183_clk_names +}; + static int mtk_apu_iommu_map(struct rproc *rproc, struct rproc_mem_entry *= entry) { struct mtk_apu_rproc *apu_rproc =3D rproc->priv; @@ -289,10 +304,9 @@ static int mtk_apu_rproc_start(struct rproc *rproc) writel(core_ctrl, apu_rproc->base + CORE_CTRL); =20 /* Configure memory accesses to go through the IOMMU */ - writel(CORE_DEFAULT0_AWUSER_USE_IOMMU | CORE_DEFAULT0_ARUSER_USE_IOMMU | - CORE_DEFAULT0_QOS_SWAP_1, apu_rproc->base + CORE_DEFAULT0); - writel(CORE_DEFAULT0_AWUSER_IDMA_USE_IOMMU | - CORE_DEFAULT0_ARUSER_IDMA_USE_IOMMU, + writel(apu_rproc->conf->core_default0 | CORE_DEFAULT0_QOS_SWAP_1, + apu_rproc->base + CORE_DEFAULT0); + writel(apu_rproc->conf->core_default1, apu_rproc->base + CORE_DEFAULT1); =20 /* Release the APU */ @@ -565,11 +579,18 @@ static int mtk_apu_rproc_probe(struct platform_device= *pdev) goto free_rproc; } =20 - apu_rproc->num_clks =3D ARRAY_SIZE(mt8183_clk_names); + + apu_rproc->conf =3D (struct mtk_apu_conf *)device_get_match_data(dev); + if (!apu_rproc->conf) { + ret =3D -ENODEV; + goto free_rproc; + } + + apu_rproc->num_clks =3D apu_rproc->conf->num_clks; apu_rproc->clks =3D devm_kcalloc(dev, apu_rproc->num_clks, sizeof(*apu_rproc->clks), GFP_KERNEL); for (i =3D 0; i < apu_rproc->num_clks; ++i) - apu_rproc->clks[i].id =3D mt8183_clk_names[i]; + apu_rproc->clks[i].id =3D apu_rproc->conf->clk_names[i]; =20 ret =3D devm_clk_bulk_get(dev, apu_rproc->num_clks, apu_rproc->clks); if (ret) { @@ -611,7 +632,7 @@ static int mtk_apu_rproc_remove(struct platform_device = *pdev) } =20 static const struct of_device_id mtk_apu_rproc_of_match[] =3D { - { .compatible =3D "mediatek,mt8183-apu", }, + { .compatible =3D "mediatek,mt8183-apu", .data =3D &mt8183_conf }, { /* sentinel */ }, }; MODULE_DEVICE_TABLE(of, mtk_apu_rproc_of_match); --=20 2.34.1 From nobody Sun Sep 22 07:26:41 2024 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id EB5F9C433EF for ; Fri, 4 Mar 2022 16:15:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240722AbiCDQQi (ORCPT ); Fri, 4 Mar 2022 11:16:38 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56460 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240727AbiCDQQW (ORCPT ); Fri, 4 Mar 2022 11:16:22 -0500 Received: from mail-wr1-x42b.google.com (mail-wr1-x42b.google.com [IPv6:2a00:1450:4864:20::42b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BF5DA1B8CBD for ; Fri, 4 Mar 2022 08:15:33 -0800 (PST) Received: by mail-wr1-x42b.google.com with SMTP id k24so3948230wrd.7 for ; Fri, 04 Mar 2022 08:15:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=16aGvyY6fmPhhVYfQXbNCxfZJxOVo7nnrPOm+3Luipg=; b=kN8p92NuWAbYqs8bwZlnLzwcZDbsVEWD4vm0t5XrNfLzL7aH0vHtHEcRtcG0C/1Uu7 9hdsGCdU1rbTrLacXL/Ft91zYh/W1JDQIBszrzrit1TsPj5F50AHGLBhangCud91sOb+ 0xmv5DAhd0EuvQ6glDl85z8F4M80x30xSzPfnpcNAC1bot0hw0gQVwnEHiXptu+KFEVT KtTKvHh8xyMPof3zdp+DP48Co+7DZGEpI3DZVEPQvWJu+Y5HaN7E9H5vK0HfJYoUpwXb uu+Xszyy+It68nNjX8tuaNzrkWGn+hyALM66vu0FpOGsNNU/MyaZYPtYRPeDWog4idkA Hajw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=16aGvyY6fmPhhVYfQXbNCxfZJxOVo7nnrPOm+3Luipg=; b=RPJAxOcIJu+3bl+u34uHEPPJWqV5gVR5T9HOws+rSrTI1N/mkWNqQX931KVVxyV8CP 7CAmNwWSdSlLV2We1IiNXaHkZlYZKXzaJ4wnAoS8YjVmF6N0jgFxFzVwP9+diQ5iYkoP 7MD+WDbijfJr0uOoeZD6nF4V9/tYbyJNEg3njTmDvBMtui5hP8bzwfhfKP8Y8Twgaym0 K2fn4klPA7W4aVKP0CDm/H3u6TJqAmpuoRvYXvf4EKR1DNGC4DNlUcwZGcQTiZ16KEGO BzYiSeLiV2mo8neFlTP7bKChmw+V3Kgoq7D4fOZWLo8YNDN+BCplu/vXRd9Dkkp2LCud Yygw== X-Gm-Message-State: AOAM532fH0SbIO3Eyg95t6rf2ykIHVm7VSAvVAf3P2rAbvFyD9eA90ea nrS1B7hu9j0Wyj32NJPq1IJSuA== X-Google-Smtp-Source: ABdhPJwD4uW+a+b6q8YWzK9KzYjz7dwuWWKnSwI9jSPWBcToFrXnKiJsKNXtvqLT5eUBLCFLIqBmsg== X-Received: by 2002:adf:ed0c:0:b0:1f0:63a5:36aa with SMTP id a12-20020adfed0c000000b001f063a536aamr4767846wro.588.1646410532349; Fri, 04 Mar 2022 08:15:32 -0800 (PST) Received: from xps-9300.baylibre (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) by smtp.gmail.com with ESMTPSA id g6-20020a5d5406000000b001f049726044sm4937307wrv.79.2022.03.04.08.15.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Mar 2022 08:15:31 -0800 (PST) From: Alexandre Bailon To: ohad@wizery.com, bjorn.andersson@linaro.org, mathieu.poirier@linaro.org, robh+dt@kernel.or Cc: matthias.bgg@gmail.com, linux-remoteproc@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-kernel@vger.kernel.org, stephane.leprovost@mediatek.com, khilman@baylibre.com, Julien STEPHAN , Alexandre Bailon Subject: [PATCH v4 6/7] remoteproc: mtk-apu: Add support of MT8365 Date: Fri, 4 Mar 2022 17:15:13 +0100 Message-Id: <20220304161514.994128-7-abailon@baylibre.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220304161514.994128-1-abailon@baylibre.com> References: <20220304161514.994128-1-abailon@baylibre.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Julien STEPHAN This adds support of APU available in the MT8365. Signed-off-by: Julien STEPHAN Signed-off-by: Alexandre Bailon --- drivers/remoteproc/mtk_apu.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/drivers/remoteproc/mtk_apu.c b/drivers/remoteproc/mtk_apu.c index deec51b86ba5..57dd73c63d3f 100644 --- a/drivers/remoteproc/mtk_apu.c +++ b/drivers/remoteproc/mtk_apu.c @@ -96,6 +96,24 @@ static const struct mtk_apu_conf mt8183_conf =3D { .clk_names =3D mt8183_clk_names }; =20 +static const char * const mt8365_clk_names[] =3D { + "if_ck", + "edma", + "ahb", + "axi", + "ipu", + "jtag", + "smi_cam", + "ifr_apu_axi", +}; + +static const struct mtk_apu_conf mt8365_conf =3D { + .core_default0 =3D BIT(26) | BIT(20), + .core_default1 =3D BIT(3) | BIT(7), + .num_clks =3D ARRAY_SIZE(mt8365_clk_names), + .clk_names =3D mt8365_clk_names +}; + static int mtk_apu_iommu_map(struct rproc *rproc, struct rproc_mem_entry *= entry) { struct mtk_apu_rproc *apu_rproc =3D rproc->priv; @@ -633,6 +651,7 @@ static int mtk_apu_rproc_remove(struct platform_device = *pdev) =20 static const struct of_device_id mtk_apu_rproc_of_match[] =3D { { .compatible =3D "mediatek,mt8183-apu", .data =3D &mt8183_conf }, + { .compatible =3D "mediatek,mt8365-apu", .data =3D &mt8365_conf }, { /* sentinel */ }, }; MODULE_DEVICE_TABLE(of, mtk_apu_rproc_of_match); --=20 2.34.1 From nobody Sun Sep 22 07:26:41 2024 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D9347C433EF for ; Fri, 4 Mar 2022 16:15:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238188AbiCDQQn (ORCPT ); Fri, 4 Mar 2022 11:16:43 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56586 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240711AbiCDQQX (ORCPT ); Fri, 4 Mar 2022 11:16:23 -0500 Received: from mail-wr1-x432.google.com (mail-wr1-x432.google.com [IPv6:2a00:1450:4864:20::432]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E39951B8CB2 for ; Fri, 4 Mar 2022 08:15:34 -0800 (PST) Received: by mail-wr1-x432.google.com with SMTP id t11so13429701wrm.5 for ; Fri, 04 Mar 2022 08:15:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=xJskNak95cvJcdUCyQawVbbPcPNz7aQv6i/qtIFC/D0=; b=1py/SiRHzXJFbv03+N9Hala6db1fZOCrZVfBakEeZ1XEqEzCNZ68ScYMDGX6fAyeUO hYeZgwCDOPK/5etYhM6FF8r9BmtRRtkdHxuM6ptY/4J01I0SZKaL44Od/4tjZVDGnMFj REa9Xex5sJEPK0jvhX7ZjrY0JsNUccCEe6WyqWZTYC4U8q+ZiWsj7fVnoA+9zkoj3gjl SEMRy8iuTI7qojEl+wDMmPnofqFSIxB2Q7JMb0bwuUUCK+MZfBo5s9I1XyZ5sUVm1++L XBxUYl0Pkvq9A2mdS3WgiOtdryfXlaz1zQdLnumxQLuwBiYtfBB8mrsBzW07IQ3I+Cpc np3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=xJskNak95cvJcdUCyQawVbbPcPNz7aQv6i/qtIFC/D0=; b=g0GECLVoSl75bWlTLb8H2rlL5H2jU4UsC+3lShOVYBDixEaMjFEtf4RGBKdfCGHIR2 985bAvx4GzMztcT8wN0LCjaS7LsDDsMCqXN5SjziNSKi5xxkaWJ9lizQ48+dAE5GYKXE P+2Y4jRplofUlHt3ACKYu/cop6jMuVv406dyI2p1JDDidf42nEYvze00DFClK6xWMqyx sEqZq53/BYJfhr8dJLy8XzIQasMJlmfVJDZt+K0D175gsAh4iauUg+Obd4IzO1O2qV88 SiFzZvzyklF0h7BQgp53UsR+UxbRIc5KsvaWaK/0k512BF4L+Iolx1em+hjhJAxXSfo2 /0Eg== X-Gm-Message-State: AOAM533lwcL+2klPkK6fHL6Nnvsrz3b3H1jUrCTPt59G3eL3FHI64wfm MISZ7BScbiX0owlgTTQjoCbjJA== X-Google-Smtp-Source: ABdhPJwbTnyZIIz3MhW8i2qeaIJqAT8wW1Pa+ypKCSwBrOZfy77WETAvGz5t2zqL46vAdLT4K0tDtw== X-Received: by 2002:adf:f389:0:b0:1ef:5f0f:cb83 with SMTP id m9-20020adff389000000b001ef5f0fcb83mr26228592wro.26.1646410533312; Fri, 04 Mar 2022 08:15:33 -0800 (PST) Received: from xps-9300.baylibre (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) by smtp.gmail.com with ESMTPSA id g6-20020a5d5406000000b001f049726044sm4937307wrv.79.2022.03.04.08.15.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Mar 2022 08:15:32 -0800 (PST) From: Alexandre Bailon To: ohad@wizery.com, bjorn.andersson@linaro.org, mathieu.poirier@linaro.org, robh+dt@kernel.or Cc: matthias.bgg@gmail.com, linux-remoteproc@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-kernel@vger.kernel.org, stephane.leprovost@mediatek.com, khilman@baylibre.com, Alexandre Bailon Subject: [PATCH v4 7/7] ARM64: mt8183: Add support of APU to mt8183 Date: Fri, 4 Mar 2022 17:15:14 +0100 Message-Id: <20220304161514.994128-8-abailon@baylibre.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220304161514.994128-1-abailon@baylibre.com> References: <20220304161514.994128-1-abailon@baylibre.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" This adds the support of APU to mt8183. Signed-off-by: Alexandre Bailon --- .../boot/dts/mediatek/mt8183-pumpkin.dts | 50 +++++++++++++++++++ arch/arm64/boot/dts/mediatek/mt8183.dtsi | 40 +++++++++++++++ 2 files changed, 90 insertions(+) diff --git a/arch/arm64/boot/dts/mediatek/mt8183-pumpkin.dts b/arch/arm64/b= oot/dts/mediatek/mt8183-pumpkin.dts index ee912825cfc6..155c89c998d3 100644 --- a/arch/arm64/boot/dts/mediatek/mt8183-pumpkin.dts +++ b/arch/arm64/boot/dts/mediatek/mt8183-pumpkin.dts @@ -37,6 +37,42 @@ scp_mem_reserved: scp_mem_region@50000000 { reg =3D <0 0x50000000 0 0x2900000>; no-map; }; + + vdev0buffer: vdev0buffer@52900000 { + compatible =3D "shared-dma-pool"; + reg =3D <0 0x52900000 0 0x4000>; + no-map; + }; + + vdev0vring0: vdev0vring0@52904000 { + compatible =3D "shared-dma-pool"; + reg =3D <0 0x52904000 0 0x2000>; + no-map; + }; + + vdev0vring1: vdev0vring1@52906000 { + compatible =3D "shared-dma-pool"; + reg =3D <0 0x52906000 0 0x2000>; + no-map; + }; + + vdev1buffer: vdev1buffer@52908000 { + compatible =3D "shared-dma-pool"; + reg =3D <0 0x52908000 0 0x4000>; + no-map; + }; + + vdev1vring0: vdev1vring0@5290C000 { + compatible =3D "shared-dma-pool"; + reg =3D <0 0x5290C000 0 0x2000>; + no-map; + }; + + vdev1vring1: vdev1vring1@5290E000 { + compatible =3D "shared-dma-pool"; + reg =3D <0 0x5290E000 0 0x2000>; + no-map; + }; }; =20 leds { @@ -381,3 +417,17 @@ &scp { &dsi0 { status =3D "disabled"; }; + +&apu0 { + memory-region =3D <&vdev0buffer>, <&vdev0vring0>, <&vdev0vring1>; + memory-region-names =3D "vdev0buffer", "vdev0vring0", "vdev0vring1"; + memory-region-da =3D <0x6fff8000>, <0x6fffc000>, <0x6fffe000>; + status =3D "okay"; +}; + +&apu1 { + memory-region =3D <&vdev1buffer>, <&vdev1vring0>, <&vdev1vring1>; + memory-region-names =3D "vdev1buffer", "vdev1vring0", "vdev1vring1"; + memory-region-da =3D <0x6fff0000>, <0x6fff4000>, <0x6fff6000>; + status =3D "okay"; +}; diff --git a/arch/arm64/boot/dts/mediatek/mt8183.dtsi b/arch/arm64/boot/dts= /mediatek/mt8183.dtsi index ba4584faca5a..cb02f57e000d 100644 --- a/arch/arm64/boot/dts/mediatek/mt8183.dtsi +++ b/arch/arm64/boot/dts/mediatek/mt8183.dtsi @@ -1542,12 +1542,52 @@ ipu_adl: syscon@19010000 { #clock-cells =3D <1>; }; =20 + apu0: apu@0x19100000 { + compatible =3D "mediatek,mt8183-apu"; + reg =3D <0 0x19180000 0 0x14000>; + interrupts =3D ; + + iommus =3D <&iommu M4U_PORT_IMG_IPUO>, + <&iommu M4U_PORT_IMG_IPU3O>, + <&iommu M4U_PORT_IMG_IPUI>; + + clocks =3D <&ipu_core0 CLK_IPU_CORE0_AXI>, + <&ipu_core0 CLK_IPU_CORE0_IPU>, + <&ipu_core0 CLK_IPU_CORE0_JTAG>; + + clock-names =3D "axi", "ipu", "jtag"; + + power-domains =3D <&spm MT8183_POWER_DOMAIN_VPU_CORE0>; + + status =3D "disabled"; + }; + ipu_core0: syscon@19180000 { compatible =3D "mediatek,mt8183-ipu_core0", "syscon"; reg =3D <0 0x19180000 0 0x1000>; #clock-cells =3D <1>; }; =20 + apu1: apu@19200000 { + compatible =3D "mediatek,mt8183-apu"; + reg =3D <0 0x19280000 0 0x14000>; + interrupts =3D ; + + iommus =3D <&iommu M4U_PORT_CAM_IPUO>, + <&iommu M4U_PORT_CAM_IPU2O>, + <&iommu M4U_PORT_CAM_IPU3O>; + + clocks =3D <&ipu_core0 CLK_IPU_CORE1_AXI>, + <&ipu_core0 CLK_IPU_CORE1_IPU>, + <&ipu_core0 CLK_IPU_CORE1_JTAG>; + + clock-names =3D "axi", "ipu", "jtag"; + + power-domains =3D <&spm MT8183_POWER_DOMAIN_VPU_CORE1>; + + status =3D "disabled"; + }; + ipu_core1: syscon@19280000 { compatible =3D "mediatek,mt8183-ipu_core1", "syscon"; reg =3D <0 0x19280000 0 0x1000>; --=20 2.34.1