* [PATCH 0/8] remoteproc: imx_rproc: support i.MX7ULP/8MN/8MP
@ 2021-03-22 8:12 ` peng.fan
0 siblings, 0 replies; 22+ messages in thread
From: peng.fan @ 2021-03-22 8:12 UTC (permalink / raw)
To: ohad, bjorn.andersson, mathieu.poirier, o.rempel, robh+dt, devicetree
Cc: shawnguo, s.hauer, kernel, festevam, linux-remoteproc,
linux-arm-kernel, linux-kernel, Peng Fan
From: Peng Fan <peng.fan@nxp.com>
This patchset is to support i.MX7ULP/8MN/8MP, also includes a patch to parse
imx,auto-boot
This patchset depends on [1][2]
[1] https://patchwork.kernel.org/project/linux-remoteproc/patch/20210319104708.7754-1-peng.fan@oss.nxp.com/
[2] https://patchwork.kernel.org/project/linux-remoteproc/patch/20210319104708.7754-2-peng.fan@oss.nxp.com/
Peng Fan (8):
dt-bindings: remoteproc: imx_rproc: add imx,auto-boot property
dt-bindings: remoteproc: imx_rproc: add i.MX7ULP support
dt-bindings: remoteproc: imx_rproc: support i.MX8MN/P
remoteproc: imx_rproc: make clk optional
remoteproc: imx_rproc: parse imx,auto-boot
remoteproc: imx_rproc: initial support for mutilple start/stop method
remoteproc: imx_rproc: support i.MX7ULP
remoteproc: imx_rproc: support i.MX8MN/P
.../bindings/remoteproc/fsl,imx-rproc.yaml | 11 +-
drivers/remoteproc/imx_rproc.c | 158 +++++++++++++++---
2 files changed, 145 insertions(+), 24 deletions(-)
--
2.30.0
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 22+ messages in thread
* [PATCH 1/8] dt-bindings: remoteproc: imx_rproc: add imx,auto-boot property
2021-03-22 8:12 ` peng.fan
@ 2021-03-22 8:12 ` peng.fan
-1 siblings, 0 replies; 22+ messages in thread
From: peng.fan @ 2021-03-22 8:12 UTC (permalink / raw)
To: ohad, bjorn.andersson, mathieu.poirier, o.rempel, robh+dt, devicetree
Cc: shawnguo, s.hauer, kernel, festevam, linux-remoteproc,
linux-arm-kernel, linux-kernel, Peng Fan
From: Peng Fan <peng.fan@nxp.com>
Add an optional property "imx,auto-boot" to indicate remote processor
auto boot.
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
.../devicetree/bindings/remoteproc/fsl,imx-rproc.yaml | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml b/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
index 208a628f8d6c..70aec1a2e86d 100644
--- a/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
+++ b/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
@@ -49,6 +49,12 @@ properties:
minItems: 1
maxItems: 32
+ imx,auto-boot:
+ $ref: /schemas/types.yaml#/definitions/flag
+ description:
+ Indicate whether need to loads the default firmware and starts the remote
+ processor automatically.
+
required:
- compatible
- clocks
--
2.30.0
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH 1/8] dt-bindings: remoteproc: imx_rproc: add imx, auto-boot property
@ 2021-03-22 8:12 ` peng.fan
0 siblings, 0 replies; 22+ messages in thread
From: peng.fan @ 2021-03-22 8:12 UTC (permalink / raw)
To: ohad, bjorn.andersson, mathieu.poirier, o.rempel, robh+dt, devicetree
Cc: shawnguo, s.hauer, kernel, festevam, linux-remoteproc,
linux-arm-kernel, linux-kernel, Peng Fan
From: Peng Fan <peng.fan@nxp.com>
Add an optional property "imx,auto-boot" to indicate remote processor
auto boot.
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
.../devicetree/bindings/remoteproc/fsl,imx-rproc.yaml | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml b/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
index 208a628f8d6c..70aec1a2e86d 100644
--- a/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
+++ b/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
@@ -49,6 +49,12 @@ properties:
minItems: 1
maxItems: 32
+ imx,auto-boot:
+ $ref: /schemas/types.yaml#/definitions/flag
+ description:
+ Indicate whether need to loads the default firmware and starts the remote
+ processor automatically.
+
required:
- compatible
- clocks
--
2.30.0
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 22+ messages in thread
* Re: [PATCH 1/8] dt-bindings: remoteproc: imx_rproc: add imx,auto-boot property
2021-03-22 8:12 ` [PATCH 1/8] dt-bindings: remoteproc: imx_rproc: add imx, auto-boot property peng.fan
@ 2021-03-27 16:47 ` Rob Herring
-1 siblings, 0 replies; 22+ messages in thread
From: Rob Herring @ 2021-03-27 16:47 UTC (permalink / raw)
To: peng.fan
Cc: ohad, bjorn.andersson, mathieu.poirier, o.rempel, devicetree,
shawnguo, s.hauer, kernel, festevam, linux-remoteproc,
linux-arm-kernel, linux-kernel, Peng Fan
On Mon, Mar 22, 2021 at 04:12:36PM +0800, peng.fan@oss.nxp.com wrote:
> From: Peng Fan <peng.fan@nxp.com>
>
> Add an optional property "imx,auto-boot" to indicate remote processor
> auto boot.
>
> Signed-off-by: Peng Fan <peng.fan@nxp.com>
> ---
> .../devicetree/bindings/remoteproc/fsl,imx-rproc.yaml | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml b/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
> index 208a628f8d6c..70aec1a2e86d 100644
> --- a/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
> +++ b/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
> @@ -49,6 +49,12 @@ properties:
> minItems: 1
> maxItems: 32
>
> + imx,auto-boot:
'imx' is not a vendor.
Should be generic?
> + $ref: /schemas/types.yaml#/definitions/flag
> + description:
> + Indicate whether need to loads the default firmware and starts the remote
need to load ...
> + processor automatically.
> +
> required:
> - compatible
> - clocks
> --
> 2.30.0
>
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH 1/8] dt-bindings: remoteproc: imx_rproc: add imx,auto-boot property
@ 2021-03-27 16:47 ` Rob Herring
0 siblings, 0 replies; 22+ messages in thread
From: Rob Herring @ 2021-03-27 16:47 UTC (permalink / raw)
To: peng.fan
Cc: ohad, bjorn.andersson, mathieu.poirier, o.rempel, devicetree,
shawnguo, s.hauer, kernel, festevam, linux-remoteproc,
linux-arm-kernel, linux-kernel, Peng Fan
On Mon, Mar 22, 2021 at 04:12:36PM +0800, peng.fan@oss.nxp.com wrote:
> From: Peng Fan <peng.fan@nxp.com>
>
> Add an optional property "imx,auto-boot" to indicate remote processor
> auto boot.
>
> Signed-off-by: Peng Fan <peng.fan@nxp.com>
> ---
> .../devicetree/bindings/remoteproc/fsl,imx-rproc.yaml | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml b/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
> index 208a628f8d6c..70aec1a2e86d 100644
> --- a/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
> +++ b/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
> @@ -49,6 +49,12 @@ properties:
> minItems: 1
> maxItems: 32
>
> + imx,auto-boot:
'imx' is not a vendor.
Should be generic?
> + $ref: /schemas/types.yaml#/definitions/flag
> + description:
> + Indicate whether need to loads the default firmware and starts the remote
need to load ...
> + processor automatically.
> +
> required:
> - compatible
> - clocks
> --
> 2.30.0
>
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 22+ messages in thread
* [PATCH 2/8] dt-bindings: remoteproc: imx_rproc: add i.MX7ULP support
2021-03-22 8:12 ` peng.fan
@ 2021-03-22 8:12 ` peng.fan
-1 siblings, 0 replies; 22+ messages in thread
From: peng.fan @ 2021-03-22 8:12 UTC (permalink / raw)
To: ohad, bjorn.andersson, mathieu.poirier, o.rempel, robh+dt, devicetree
Cc: shawnguo, s.hauer, kernel, festevam, linux-remoteproc,
linux-arm-kernel, linux-kernel, Peng Fan
From: Peng Fan <peng.fan@nxp.com>
Add i.MX7ULP compatible.
We use i.MX7ULP dual mode and in which case i.MX7ULP A7 core runs under
control of M4 core, M4 core starts by ROM and powers most serivces used
by A7 core, so A7 core has no power to start and stop M4 core. So
clocks and syscon are not required.
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
.../devicetree/bindings/remoteproc/fsl,imx-rproc.yaml | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml b/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
index 70aec1a2e86d..3040420ad6a3 100644
--- a/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
+++ b/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
@@ -18,6 +18,7 @@ properties:
- fsl,imx8mq-cm4
- fsl,imx8mm-cm4
- fsl,imx7d-cm4
+ - fsl,imx7ulp-cm4
- fsl,imx6sx-cm4
clocks:
@@ -57,8 +58,6 @@ properties:
required:
- compatible
- - clocks
- - syscon
additionalProperties: false
--
2.30.0
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH 2/8] dt-bindings: remoteproc: imx_rproc: add i.MX7ULP support
@ 2021-03-22 8:12 ` peng.fan
0 siblings, 0 replies; 22+ messages in thread
From: peng.fan @ 2021-03-22 8:12 UTC (permalink / raw)
To: ohad, bjorn.andersson, mathieu.poirier, o.rempel, robh+dt, devicetree
Cc: shawnguo, s.hauer, kernel, festevam, linux-remoteproc,
linux-arm-kernel, linux-kernel, Peng Fan
From: Peng Fan <peng.fan@nxp.com>
Add i.MX7ULP compatible.
We use i.MX7ULP dual mode and in which case i.MX7ULP A7 core runs under
control of M4 core, M4 core starts by ROM and powers most serivces used
by A7 core, so A7 core has no power to start and stop M4 core. So
clocks and syscon are not required.
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
.../devicetree/bindings/remoteproc/fsl,imx-rproc.yaml | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml b/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
index 70aec1a2e86d..3040420ad6a3 100644
--- a/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
+++ b/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
@@ -18,6 +18,7 @@ properties:
- fsl,imx8mq-cm4
- fsl,imx8mm-cm4
- fsl,imx7d-cm4
+ - fsl,imx7ulp-cm4
- fsl,imx6sx-cm4
clocks:
@@ -57,8 +58,6 @@ properties:
required:
- compatible
- - clocks
- - syscon
additionalProperties: false
--
2.30.0
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH 3/8] dt-bindings: remoteproc: imx_rproc: support i.MX8MN/P
2021-03-22 8:12 ` peng.fan
@ 2021-03-22 8:12 ` peng.fan
-1 siblings, 0 replies; 22+ messages in thread
From: peng.fan @ 2021-03-22 8:12 UTC (permalink / raw)
To: ohad, bjorn.andersson, mathieu.poirier, o.rempel, robh+dt, devicetree
Cc: shawnguo, s.hauer, kernel, festevam, linux-remoteproc,
linux-arm-kernel, linux-kernel, Peng Fan
From: Peng Fan <peng.fan@nxp.com>
Add i.MX8MN/P remote processor(Cortex-M7) compatible string
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml b/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
index 3040420ad6a3..dea92538b983 100644
--- a/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
+++ b/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
@@ -17,6 +17,8 @@ properties:
enum:
- fsl,imx8mq-cm4
- fsl,imx8mm-cm4
+ - fsl,imx8mn-cm7
+ - fsl,imx8mp-cm7
- fsl,imx7d-cm4
- fsl,imx7ulp-cm4
- fsl,imx6sx-cm4
--
2.30.0
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH 3/8] dt-bindings: remoteproc: imx_rproc: support i.MX8MN/P
@ 2021-03-22 8:12 ` peng.fan
0 siblings, 0 replies; 22+ messages in thread
From: peng.fan @ 2021-03-22 8:12 UTC (permalink / raw)
To: ohad, bjorn.andersson, mathieu.poirier, o.rempel, robh+dt, devicetree
Cc: shawnguo, s.hauer, kernel, festevam, linux-remoteproc,
linux-arm-kernel, linux-kernel, Peng Fan
From: Peng Fan <peng.fan@nxp.com>
Add i.MX8MN/P remote processor(Cortex-M7) compatible string
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml b/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
index 3040420ad6a3..dea92538b983 100644
--- a/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
+++ b/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml
@@ -17,6 +17,8 @@ properties:
enum:
- fsl,imx8mq-cm4
- fsl,imx8mm-cm4
+ - fsl,imx8mn-cm7
+ - fsl,imx8mp-cm7
- fsl,imx7d-cm4
- fsl,imx7ulp-cm4
- fsl,imx6sx-cm4
--
2.30.0
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 22+ messages in thread
* Re: [PATCH 3/8] dt-bindings: remoteproc: imx_rproc: support i.MX8MN/P
2021-03-22 8:12 ` peng.fan
@ 2021-03-27 16:51 ` Rob Herring
-1 siblings, 0 replies; 22+ messages in thread
From: Rob Herring @ 2021-03-27 16:51 UTC (permalink / raw)
To: peng.fan
Cc: s.hauer, robh+dt, linux-arm-kernel, o.rempel, bjorn.andersson,
linux-remoteproc, linux-kernel, kernel, devicetree, festevam,
ohad, shawnguo, mathieu.poirier, Peng Fan
On Mon, 22 Mar 2021 16:12:38 +0800, peng.fan@oss.nxp.com wrote:
> From: Peng Fan <peng.fan@nxp.com>
>
> Add i.MX8MN/P remote processor(Cortex-M7) compatible string
>
> Signed-off-by: Peng Fan <peng.fan@nxp.com>
> ---
> Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml | 2 ++
> 1 file changed, 2 insertions(+)
>
Acked-by: Rob Herring <robh@kernel.org>
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH 3/8] dt-bindings: remoteproc: imx_rproc: support i.MX8MN/P
@ 2021-03-27 16:51 ` Rob Herring
0 siblings, 0 replies; 22+ messages in thread
From: Rob Herring @ 2021-03-27 16:51 UTC (permalink / raw)
To: peng.fan
Cc: s.hauer, robh+dt, linux-arm-kernel, o.rempel, bjorn.andersson,
linux-remoteproc, linux-kernel, kernel, devicetree, festevam,
ohad, shawnguo, mathieu.poirier, Peng Fan
On Mon, 22 Mar 2021 16:12:38 +0800, peng.fan@oss.nxp.com wrote:
> From: Peng Fan <peng.fan@nxp.com>
>
> Add i.MX8MN/P remote processor(Cortex-M7) compatible string
>
> Signed-off-by: Peng Fan <peng.fan@nxp.com>
> ---
> Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml | 2 ++
> 1 file changed, 2 insertions(+)
>
Acked-by: Rob Herring <robh@kernel.org>
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 22+ messages in thread
* [PATCH 4/8] remoteproc: imx_rproc: make clk optional
2021-03-22 8:12 ` peng.fan
@ 2021-03-22 8:12 ` peng.fan
-1 siblings, 0 replies; 22+ messages in thread
From: peng.fan @ 2021-03-22 8:12 UTC (permalink / raw)
To: ohad, bjorn.andersson, mathieu.poirier, o.rempel, robh+dt, devicetree
Cc: shawnguo, s.hauer, kernel, festevam, linux-remoteproc,
linux-arm-kernel, linux-kernel, Peng Fan
From: Peng Fan <peng.fan@nxp.com>
To i.MX7ULP, M4 is the master to control everything, so it not need
clk from A7.
Reviewed-by: Richard Zhu <hongxing.zhu@nxp.com>
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
drivers/remoteproc/imx_rproc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/remoteproc/imx_rproc.c b/drivers/remoteproc/imx_rproc.c
index fdaaf7599cc8..e858c1af4353 100644
--- a/drivers/remoteproc/imx_rproc.c
+++ b/drivers/remoteproc/imx_rproc.c
@@ -654,7 +654,7 @@ static int imx_rproc_probe(struct platform_device *pdev)
if (ret)
goto err_put_mbox;
- priv->clk = devm_clk_get(dev, NULL);
+ priv->clk = devm_clk_get_optional(dev, NULL);
if (IS_ERR(priv->clk)) {
dev_err(dev, "Failed to get clock\n");
ret = PTR_ERR(priv->clk);
--
2.30.0
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH 4/8] remoteproc: imx_rproc: make clk optional
@ 2021-03-22 8:12 ` peng.fan
0 siblings, 0 replies; 22+ messages in thread
From: peng.fan @ 2021-03-22 8:12 UTC (permalink / raw)
To: ohad, bjorn.andersson, mathieu.poirier, o.rempel, robh+dt, devicetree
Cc: shawnguo, s.hauer, kernel, festevam, linux-remoteproc,
linux-arm-kernel, linux-kernel, Peng Fan
From: Peng Fan <peng.fan@nxp.com>
To i.MX7ULP, M4 is the master to control everything, so it not need
clk from A7.
Reviewed-by: Richard Zhu <hongxing.zhu@nxp.com>
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
drivers/remoteproc/imx_rproc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/remoteproc/imx_rproc.c b/drivers/remoteproc/imx_rproc.c
index fdaaf7599cc8..e858c1af4353 100644
--- a/drivers/remoteproc/imx_rproc.c
+++ b/drivers/remoteproc/imx_rproc.c
@@ -654,7 +654,7 @@ static int imx_rproc_probe(struct platform_device *pdev)
if (ret)
goto err_put_mbox;
- priv->clk = devm_clk_get(dev, NULL);
+ priv->clk = devm_clk_get_optional(dev, NULL);
if (IS_ERR(priv->clk)) {
dev_err(dev, "Failed to get clock\n");
ret = PTR_ERR(priv->clk);
--
2.30.0
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH 5/8] remoteproc: imx_rproc: parse imx,auto-boot
2021-03-22 8:12 ` peng.fan
@ 2021-03-22 8:12 ` peng.fan
-1 siblings, 0 replies; 22+ messages in thread
From: peng.fan @ 2021-03-22 8:12 UTC (permalink / raw)
To: ohad, bjorn.andersson, mathieu.poirier, o.rempel, robh+dt, devicetree
Cc: shawnguo, s.hauer, kernel, festevam, linux-remoteproc,
linux-arm-kernel, linux-kernel, Peng Fan
From: Peng Fan <peng.fan@nxp.com>
Parse imx,auto-boot to indicate whether need remoteproc framework
auto boot or not.
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
drivers/remoteproc/imx_rproc.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/remoteproc/imx_rproc.c b/drivers/remoteproc/imx_rproc.c
index e858c1af4353..f31b258201c2 100644
--- a/drivers/remoteproc/imx_rproc.c
+++ b/drivers/remoteproc/imx_rproc.c
@@ -673,6 +673,9 @@ static int imx_rproc_probe(struct platform_device *pdev)
INIT_WORK(&priv->rproc_work, imx_rproc_vq_work);
+ if (priv->mode == IMX_RPROC_NORMAL)
+ rproc->auto_boot = of_property_read_bool(np, "imx,auto-boot");
+
ret = rproc_add(rproc);
if (ret) {
dev_err(dev, "rproc_add failed\n");
--
2.30.0
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH 5/8] remoteproc: imx_rproc: parse imx,auto-boot
@ 2021-03-22 8:12 ` peng.fan
0 siblings, 0 replies; 22+ messages in thread
From: peng.fan @ 2021-03-22 8:12 UTC (permalink / raw)
To: ohad, bjorn.andersson, mathieu.poirier, o.rempel, robh+dt, devicetree
Cc: shawnguo, s.hauer, kernel, festevam, linux-remoteproc,
linux-arm-kernel, linux-kernel, Peng Fan
From: Peng Fan <peng.fan@nxp.com>
Parse imx,auto-boot to indicate whether need remoteproc framework
auto boot or not.
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
drivers/remoteproc/imx_rproc.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/remoteproc/imx_rproc.c b/drivers/remoteproc/imx_rproc.c
index e858c1af4353..f31b258201c2 100644
--- a/drivers/remoteproc/imx_rproc.c
+++ b/drivers/remoteproc/imx_rproc.c
@@ -673,6 +673,9 @@ static int imx_rproc_probe(struct platform_device *pdev)
INIT_WORK(&priv->rproc_work, imx_rproc_vq_work);
+ if (priv->mode == IMX_RPROC_NORMAL)
+ rproc->auto_boot = of_property_read_bool(np, "imx,auto-boot");
+
ret = rproc_add(rproc);
if (ret) {
dev_err(dev, "rproc_add failed\n");
--
2.30.0
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH 6/8] remoteproc: imx_rproc: initial support for mutilple start/stop method
2021-03-22 8:12 ` peng.fan
@ 2021-03-22 8:12 ` peng.fan
-1 siblings, 0 replies; 22+ messages in thread
From: peng.fan @ 2021-03-22 8:12 UTC (permalink / raw)
To: ohad, bjorn.andersson, mathieu.poirier, o.rempel, robh+dt, devicetree
Cc: shawnguo, s.hauer, kernel, festevam, linux-remoteproc,
linux-arm-kernel, linux-kernel, Peng Fan
From: Peng Fan <peng.fan@nxp.com>
Add three methods IMX_RPROC_NONE(no need start/stop),
IMX_RPROC_MMIO(start/stop through mmio) and IMX_RPROC_SMC
(start/stop through ARM SMCCC).
The current SoCs supported are all using IMX_RPROC_MMIO, add a restrict
in probe that only SoCs using IMX_RPROC_MMIO needs syscon regmap to
access registers.
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
drivers/remoteproc/imx_rproc.c | 52 +++++++++++++++++++++++-----------
1 file changed, 35 insertions(+), 17 deletions(-)
diff --git a/drivers/remoteproc/imx_rproc.c b/drivers/remoteproc/imx_rproc.c
index f31b258201c2..8e545b654e54 100644
--- a/drivers/remoteproc/imx_rproc.c
+++ b/drivers/remoteproc/imx_rproc.c
@@ -84,6 +84,15 @@ enum imx_rproc_mode {
IMX_RPROC_EARLY_BOOT,
};
+/* Remote core start/stop method */
+enum imx_rproc_method {
+ IMX_RPROC_NONE,
+ /* Through syscon regmap */
+ IMX_RPROC_MMIO,
+ /* Through ARM SMCCC */
+ IMX_RPROC_SMC,
+};
+
struct imx_rproc_dcfg {
u32 src_reg;
u32 src_mask;
@@ -91,6 +100,7 @@ struct imx_rproc_dcfg {
u32 src_stop;
const struct imx_rproc_att *att;
size_t att_size;
+ enum imx_rproc_method method;
};
struct imx_rproc {
@@ -194,6 +204,7 @@ static const struct imx_rproc_dcfg imx_rproc_cfg_imx8mq = {
.src_stop = IMX7D_M4_STOP,
.att = imx_rproc_att_imx8mq,
.att_size = ARRAY_SIZE(imx_rproc_att_imx8mq),
+ .method = IMX_RPROC_MMIO,
};
static const struct imx_rproc_dcfg imx_rproc_cfg_imx7d = {
@@ -203,6 +214,7 @@ static const struct imx_rproc_dcfg imx_rproc_cfg_imx7d = {
.src_stop = IMX7D_M4_STOP,
.att = imx_rproc_att_imx7d,
.att_size = ARRAY_SIZE(imx_rproc_att_imx7d),
+ .method = IMX_RPROC_MMIO,
};
static const struct imx_rproc_dcfg imx_rproc_cfg_imx6sx = {
@@ -212,6 +224,7 @@ static const struct imx_rproc_dcfg imx_rproc_cfg_imx6sx = {
.src_stop = IMX6SX_M4_STOP,
.att = imx_rproc_att_imx6sx,
.att_size = ARRAY_SIZE(imx_rproc_att_imx6sx),
+ .method = IMX_RPROC_MMIO,
};
static int imx_rproc_start(struct rproc *rproc)
@@ -567,16 +580,18 @@ static int imx_rproc_detect_mode(struct imx_rproc *priv)
int ret;
u32 val;
- ret = regmap_read(priv->regmap, dcfg->src_reg, &val);
- if (ret) {
- dev_err(dev, "Failed to read src\n");
- return ret;
- }
+ if (priv->regmap) {
+ ret = regmap_read(priv->regmap, dcfg->src_reg, &val);
+ if (ret) {
+ dev_err(dev, "Failed to read src\n");
+ return ret;
+ }
- if (!(val & dcfg->src_stop))
- priv->mode = IMX_RPROC_EARLY_BOOT;
- else
- priv->mode = IMX_RPROC_NORMAL;
+ if (!(val & dcfg->src_stop))
+ priv->mode = IMX_RPROC_EARLY_BOOT;
+ else
+ priv->mode = IMX_RPROC_NORMAL;
+ }
if (priv->mode == IMX_RPROC_EARLY_BOOT) {
priv->rproc->state = RPROC_DETACHED;
@@ -604,16 +619,9 @@ static int imx_rproc_probe(struct platform_device *pdev)
struct rproc *rproc;
struct regmap_config config = { .name = "imx-rproc" };
const struct imx_rproc_dcfg *dcfg;
- struct regmap *regmap;
+ struct regmap *regmap = NULL;
int ret;
- regmap = syscon_regmap_lookup_by_phandle(np, "syscon");
- if (IS_ERR(regmap)) {
- dev_err(dev, "failed to find syscon\n");
- return PTR_ERR(regmap);
- }
- regmap_attach_dev(dev, regmap, &config);
-
/* set some other name then imx */
rproc = rproc_alloc(dev, "imx-rproc", &imx_rproc_ops,
NULL, sizeof(*priv));
@@ -626,6 +634,16 @@ static int imx_rproc_probe(struct platform_device *pdev)
goto err_put_rproc;
}
+ if (dcfg->method == IMX_RPROC_MMIO) {
+ regmap = syscon_regmap_lookup_by_phandle(np, "syscon");
+ if (IS_ERR(regmap)) {
+ dev_err(dev, "failed to find syscon\n");
+ ret = PTR_ERR(regmap);
+ goto err_put_rproc;
+ }
+ regmap_attach_dev(dev, regmap, &config);
+ }
+
priv = rproc->priv;
priv->rproc = rproc;
priv->regmap = regmap;
--
2.30.0
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH 6/8] remoteproc: imx_rproc: initial support for mutilple start/stop method
@ 2021-03-22 8:12 ` peng.fan
0 siblings, 0 replies; 22+ messages in thread
From: peng.fan @ 2021-03-22 8:12 UTC (permalink / raw)
To: ohad, bjorn.andersson, mathieu.poirier, o.rempel, robh+dt, devicetree
Cc: shawnguo, s.hauer, kernel, festevam, linux-remoteproc,
linux-arm-kernel, linux-kernel, Peng Fan
From: Peng Fan <peng.fan@nxp.com>
Add three methods IMX_RPROC_NONE(no need start/stop),
IMX_RPROC_MMIO(start/stop through mmio) and IMX_RPROC_SMC
(start/stop through ARM SMCCC).
The current SoCs supported are all using IMX_RPROC_MMIO, add a restrict
in probe that only SoCs using IMX_RPROC_MMIO needs syscon regmap to
access registers.
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
drivers/remoteproc/imx_rproc.c | 52 +++++++++++++++++++++++-----------
1 file changed, 35 insertions(+), 17 deletions(-)
diff --git a/drivers/remoteproc/imx_rproc.c b/drivers/remoteproc/imx_rproc.c
index f31b258201c2..8e545b654e54 100644
--- a/drivers/remoteproc/imx_rproc.c
+++ b/drivers/remoteproc/imx_rproc.c
@@ -84,6 +84,15 @@ enum imx_rproc_mode {
IMX_RPROC_EARLY_BOOT,
};
+/* Remote core start/stop method */
+enum imx_rproc_method {
+ IMX_RPROC_NONE,
+ /* Through syscon regmap */
+ IMX_RPROC_MMIO,
+ /* Through ARM SMCCC */
+ IMX_RPROC_SMC,
+};
+
struct imx_rproc_dcfg {
u32 src_reg;
u32 src_mask;
@@ -91,6 +100,7 @@ struct imx_rproc_dcfg {
u32 src_stop;
const struct imx_rproc_att *att;
size_t att_size;
+ enum imx_rproc_method method;
};
struct imx_rproc {
@@ -194,6 +204,7 @@ static const struct imx_rproc_dcfg imx_rproc_cfg_imx8mq = {
.src_stop = IMX7D_M4_STOP,
.att = imx_rproc_att_imx8mq,
.att_size = ARRAY_SIZE(imx_rproc_att_imx8mq),
+ .method = IMX_RPROC_MMIO,
};
static const struct imx_rproc_dcfg imx_rproc_cfg_imx7d = {
@@ -203,6 +214,7 @@ static const struct imx_rproc_dcfg imx_rproc_cfg_imx7d = {
.src_stop = IMX7D_M4_STOP,
.att = imx_rproc_att_imx7d,
.att_size = ARRAY_SIZE(imx_rproc_att_imx7d),
+ .method = IMX_RPROC_MMIO,
};
static const struct imx_rproc_dcfg imx_rproc_cfg_imx6sx = {
@@ -212,6 +224,7 @@ static const struct imx_rproc_dcfg imx_rproc_cfg_imx6sx = {
.src_stop = IMX6SX_M4_STOP,
.att = imx_rproc_att_imx6sx,
.att_size = ARRAY_SIZE(imx_rproc_att_imx6sx),
+ .method = IMX_RPROC_MMIO,
};
static int imx_rproc_start(struct rproc *rproc)
@@ -567,16 +580,18 @@ static int imx_rproc_detect_mode(struct imx_rproc *priv)
int ret;
u32 val;
- ret = regmap_read(priv->regmap, dcfg->src_reg, &val);
- if (ret) {
- dev_err(dev, "Failed to read src\n");
- return ret;
- }
+ if (priv->regmap) {
+ ret = regmap_read(priv->regmap, dcfg->src_reg, &val);
+ if (ret) {
+ dev_err(dev, "Failed to read src\n");
+ return ret;
+ }
- if (!(val & dcfg->src_stop))
- priv->mode = IMX_RPROC_EARLY_BOOT;
- else
- priv->mode = IMX_RPROC_NORMAL;
+ if (!(val & dcfg->src_stop))
+ priv->mode = IMX_RPROC_EARLY_BOOT;
+ else
+ priv->mode = IMX_RPROC_NORMAL;
+ }
if (priv->mode == IMX_RPROC_EARLY_BOOT) {
priv->rproc->state = RPROC_DETACHED;
@@ -604,16 +619,9 @@ static int imx_rproc_probe(struct platform_device *pdev)
struct rproc *rproc;
struct regmap_config config = { .name = "imx-rproc" };
const struct imx_rproc_dcfg *dcfg;
- struct regmap *regmap;
+ struct regmap *regmap = NULL;
int ret;
- regmap = syscon_regmap_lookup_by_phandle(np, "syscon");
- if (IS_ERR(regmap)) {
- dev_err(dev, "failed to find syscon\n");
- return PTR_ERR(regmap);
- }
- regmap_attach_dev(dev, regmap, &config);
-
/* set some other name then imx */
rproc = rproc_alloc(dev, "imx-rproc", &imx_rproc_ops,
NULL, sizeof(*priv));
@@ -626,6 +634,16 @@ static int imx_rproc_probe(struct platform_device *pdev)
goto err_put_rproc;
}
+ if (dcfg->method == IMX_RPROC_MMIO) {
+ regmap = syscon_regmap_lookup_by_phandle(np, "syscon");
+ if (IS_ERR(regmap)) {
+ dev_err(dev, "failed to find syscon\n");
+ ret = PTR_ERR(regmap);
+ goto err_put_rproc;
+ }
+ regmap_attach_dev(dev, regmap, &config);
+ }
+
priv = rproc->priv;
priv->rproc = rproc;
priv->regmap = regmap;
--
2.30.0
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH 7/8] remoteproc: imx_rproc: support i.MX7ULP
2021-03-22 8:12 ` peng.fan
@ 2021-03-22 8:12 ` peng.fan
-1 siblings, 0 replies; 22+ messages in thread
From: peng.fan @ 2021-03-22 8:12 UTC (permalink / raw)
To: ohad, bjorn.andersson, mathieu.poirier, o.rempel, robh+dt, devicetree
Cc: shawnguo, s.hauer, kernel, festevam, linux-remoteproc,
linux-arm-kernel, linux-kernel, Peng Fan
From: Peng Fan <peng.fan@nxp.com>
i.MX7ULP A7 core runs under control of M4 core, M4 core starts by ROM
and powers most serivces used by A7 core, so A7 core has no power to
start and stop M4 core.
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
drivers/remoteproc/imx_rproc.c | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/drivers/remoteproc/imx_rproc.c b/drivers/remoteproc/imx_rproc.c
index 8e545b654e54..79a6b65d60b6 100644
--- a/drivers/remoteproc/imx_rproc.c
+++ b/drivers/remoteproc/imx_rproc.c
@@ -147,6 +147,14 @@ static const struct imx_rproc_att imx_rproc_att_imx8mq[] = {
{ 0x40000000, 0x40000000, 0x80000000, 0 },
};
+static const struct imx_rproc_att imx_rproc_att_imx7ulp[] = {
+ {0x1FFD0000, 0x1FFD0000, 0x30000, ATT_OWN},
+ {0x20000000, 0x20000000, 0x10000, ATT_OWN},
+ {0x2F000000, 0x2F000000, 0x20000, ATT_OWN},
+ {0x2F020000, 0x2F020000, 0x20000, ATT_OWN},
+ {0x60000000, 0x60000000, 0x40000000, 0}
+};
+
static const struct imx_rproc_att imx_rproc_att_imx7d[] = {
/* dev addr , sys addr , size , flags */
/* OCRAM_S (M4 Boot code) - alias */
@@ -207,6 +215,12 @@ static const struct imx_rproc_dcfg imx_rproc_cfg_imx8mq = {
.method = IMX_RPROC_MMIO,
};
+static const struct imx_rproc_dcfg imx_rproc_cfg_imx7ulp = {
+ .att = imx_rproc_att_imx7ulp,
+ .att_size = ARRAY_SIZE(imx_rproc_att_imx7ulp),
+ .method = IMX_RPROC_NONE,
+};
+
static const struct imx_rproc_dcfg imx_rproc_cfg_imx7d = {
.src_reg = IMX7D_SRC_SCR,
.src_mask = IMX7D_M4_RST_MASK,
@@ -593,6 +607,9 @@ static int imx_rproc_detect_mode(struct imx_rproc *priv)
priv->mode = IMX_RPROC_NORMAL;
}
+ if (dcfg->method == IMX_RPROC_NONE)
+ priv->mode = IMX_RPROC_EARLY_BOOT;
+
if (priv->mode == IMX_RPROC_EARLY_BOOT) {
priv->rproc->state = RPROC_DETACHED;
@@ -728,6 +745,7 @@ static int imx_rproc_remove(struct platform_device *pdev)
}
static const struct of_device_id imx_rproc_of_match[] = {
+ { .compatible = "fsl,imx7ulp-cm4", .data = &imx_rproc_cfg_imx7ulp },
{ .compatible = "fsl,imx7d-cm4", .data = &imx_rproc_cfg_imx7d },
{ .compatible = "fsl,imx6sx-cm4", .data = &imx_rproc_cfg_imx6sx },
{ .compatible = "fsl,imx8mq-cm4", .data = &imx_rproc_cfg_imx8mq },
--
2.30.0
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH 7/8] remoteproc: imx_rproc: support i.MX7ULP
@ 2021-03-22 8:12 ` peng.fan
0 siblings, 0 replies; 22+ messages in thread
From: peng.fan @ 2021-03-22 8:12 UTC (permalink / raw)
To: ohad, bjorn.andersson, mathieu.poirier, o.rempel, robh+dt, devicetree
Cc: shawnguo, s.hauer, kernel, festevam, linux-remoteproc,
linux-arm-kernel, linux-kernel, Peng Fan
From: Peng Fan <peng.fan@nxp.com>
i.MX7ULP A7 core runs under control of M4 core, M4 core starts by ROM
and powers most serivces used by A7 core, so A7 core has no power to
start and stop M4 core.
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
drivers/remoteproc/imx_rproc.c | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/drivers/remoteproc/imx_rproc.c b/drivers/remoteproc/imx_rproc.c
index 8e545b654e54..79a6b65d60b6 100644
--- a/drivers/remoteproc/imx_rproc.c
+++ b/drivers/remoteproc/imx_rproc.c
@@ -147,6 +147,14 @@ static const struct imx_rproc_att imx_rproc_att_imx8mq[] = {
{ 0x40000000, 0x40000000, 0x80000000, 0 },
};
+static const struct imx_rproc_att imx_rproc_att_imx7ulp[] = {
+ {0x1FFD0000, 0x1FFD0000, 0x30000, ATT_OWN},
+ {0x20000000, 0x20000000, 0x10000, ATT_OWN},
+ {0x2F000000, 0x2F000000, 0x20000, ATT_OWN},
+ {0x2F020000, 0x2F020000, 0x20000, ATT_OWN},
+ {0x60000000, 0x60000000, 0x40000000, 0}
+};
+
static const struct imx_rproc_att imx_rproc_att_imx7d[] = {
/* dev addr , sys addr , size , flags */
/* OCRAM_S (M4 Boot code) - alias */
@@ -207,6 +215,12 @@ static const struct imx_rproc_dcfg imx_rproc_cfg_imx8mq = {
.method = IMX_RPROC_MMIO,
};
+static const struct imx_rproc_dcfg imx_rproc_cfg_imx7ulp = {
+ .att = imx_rproc_att_imx7ulp,
+ .att_size = ARRAY_SIZE(imx_rproc_att_imx7ulp),
+ .method = IMX_RPROC_NONE,
+};
+
static const struct imx_rproc_dcfg imx_rproc_cfg_imx7d = {
.src_reg = IMX7D_SRC_SCR,
.src_mask = IMX7D_M4_RST_MASK,
@@ -593,6 +607,9 @@ static int imx_rproc_detect_mode(struct imx_rproc *priv)
priv->mode = IMX_RPROC_NORMAL;
}
+ if (dcfg->method == IMX_RPROC_NONE)
+ priv->mode = IMX_RPROC_EARLY_BOOT;
+
if (priv->mode == IMX_RPROC_EARLY_BOOT) {
priv->rproc->state = RPROC_DETACHED;
@@ -728,6 +745,7 @@ static int imx_rproc_remove(struct platform_device *pdev)
}
static const struct of_device_id imx_rproc_of_match[] = {
+ { .compatible = "fsl,imx7ulp-cm4", .data = &imx_rproc_cfg_imx7ulp },
{ .compatible = "fsl,imx7d-cm4", .data = &imx_rproc_cfg_imx7d },
{ .compatible = "fsl,imx6sx-cm4", .data = &imx_rproc_cfg_imx6sx },
{ .compatible = "fsl,imx8mq-cm4", .data = &imx_rproc_cfg_imx8mq },
--
2.30.0
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH 8/8] remoteproc: imx_rproc: support i.MX8MN/P
2021-03-22 8:12 ` peng.fan
@ 2021-03-22 8:12 ` peng.fan
-1 siblings, 0 replies; 22+ messages in thread
From: peng.fan @ 2021-03-22 8:12 UTC (permalink / raw)
To: ohad, bjorn.andersson, mathieu.poirier, o.rempel, robh+dt, devicetree
Cc: shawnguo, s.hauer, kernel, festevam, linux-remoteproc,
linux-arm-kernel, linux-kernel, Peng Fan
From: Peng Fan <peng.fan@nxp.com>
Add i.MX8MN/P remote processor(Cortex-M7) support, we are using ARM
SMCCC to start/stop M core, not using regmap interface.
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
drivers/remoteproc/imx_rproc.c | 89 +++++++++++++++++++++++++++++++---
1 file changed, 82 insertions(+), 7 deletions(-)
diff --git a/drivers/remoteproc/imx_rproc.c b/drivers/remoteproc/imx_rproc.c
index 79a6b65d60b6..948139321330 100644
--- a/drivers/remoteproc/imx_rproc.c
+++ b/drivers/remoteproc/imx_rproc.c
@@ -3,6 +3,7 @@
* Copyright (c) 2017 Pengutronix, Oleksij Rempel <kernel@pengutronix.de>
*/
+#include <linux/arm-smccc.h>
#include <linux/clk.h>
#include <linux/err.h>
#include <linux/interrupt.h>
@@ -50,6 +51,11 @@
#define IMX_RPROC_MEM_MAX 32
+#define IMX_SIP_RPROC 0xC2000005
+#define IMX_SIP_RPROC_START 0x00
+#define IMX_SIP_RPROC_STARTED 0x01
+#define IMX_SIP_RPROC_STOP 0x02
+
/**
* struct imx_rproc_mem - slim internal memory structure
* @cpu_addr: MPU virtual address of the memory region
@@ -119,6 +125,36 @@ struct imx_rproc {
void __iomem *rsc_table;
};
+static const struct imx_rproc_att imx_rproc_att_imx8mn[] = {
+ /* dev addr , sys addr , size , flags */
+ /* ITCM */
+ { 0x00000000, 0x007E0000, 0x00020000, ATT_OWN },
+ /* OCRAM_S */
+ { 0x00180000, 0x00180000, 0x00009000, 0 },
+ /* OCRAM */
+ { 0x00900000, 0x00900000, 0x00020000, 0 },
+ /* OCRAM */
+ { 0x00920000, 0x00920000, 0x00020000, 0 },
+ /* OCRAM */
+ { 0x00940000, 0x00940000, 0x00050000, 0 },
+ /* QSPI Code - alias */
+ { 0x08000000, 0x08000000, 0x08000000, 0 },
+ /* DDR (Code) - alias */
+ { 0x10000000, 0x40000000, 0x0FFE0000, 0 },
+ /* DTCM */
+ { 0x20000000, 0x00800000, 0x00020000, ATT_OWN },
+ /* OCRAM_S - alias */
+ { 0x20180000, 0x00180000, 0x00008000, ATT_OWN },
+ /* OCRAM */
+ { 0x20200000, 0x00900000, 0x00020000, ATT_OWN },
+ /* OCRAM */
+ { 0x20220000, 0x00920000, 0x00020000, ATT_OWN },
+ /* OCRAM */
+ { 0x20240000, 0x00940000, 0x00040000, ATT_OWN },
+ /* DDR (Data) */
+ { 0x40000000, 0x40000000, 0x80000000, 0 },
+};
+
static const struct imx_rproc_att imx_rproc_att_imx8mq[] = {
/* dev addr , sys addr , size , flags */
/* TCML - alias */
@@ -205,6 +241,12 @@ static const struct imx_rproc_att imx_rproc_att_imx6sx[] = {
{ 0x80000000, 0x80000000, 0x60000000, 0 },
};
+static const struct imx_rproc_dcfg imx_rproc_cfg_imx8mn = {
+ .att = imx_rproc_att_imx8mn,
+ .att_size = ARRAY_SIZE(imx_rproc_att_imx8mn),
+ .method = IMX_RPROC_SMC,
+};
+
static const struct imx_rproc_dcfg imx_rproc_cfg_imx8mq = {
.src_reg = IMX7D_SRC_SCR,
.src_mask = IMX7D_M4_RST_MASK,
@@ -246,12 +288,24 @@ static int imx_rproc_start(struct rproc *rproc)
struct imx_rproc *priv = rproc->priv;
const struct imx_rproc_dcfg *dcfg = priv->dcfg;
struct device *dev = priv->dev;
+ struct arm_smccc_res res;
int ret;
- ret = regmap_update_bits(priv->regmap, dcfg->src_reg,
- dcfg->src_mask, dcfg->src_start);
+ switch (dcfg->method) {
+ case IMX_RPROC_MMIO:
+ ret = regmap_update_bits(priv->regmap, dcfg->src_reg, dcfg->src_mask,
+ dcfg->src_start);
+ break;
+ case IMX_RPROC_SMC:
+ arm_smccc_smc(IMX_SIP_RPROC, IMX_SIP_RPROC_START, 0, 0, 0, 0, 0, 0, &res);
+ ret = res.a0;
+ break;
+ default:
+ return -EOPNOTSUPP;
+ }
+
if (ret)
- dev_err(dev, "Failed to enable M4!\n");
+ dev_err(dev, "Failed to enable remote cores!\n");
return ret;
}
@@ -261,12 +315,26 @@ static int imx_rproc_stop(struct rproc *rproc)
struct imx_rproc *priv = rproc->priv;
const struct imx_rproc_dcfg *dcfg = priv->dcfg;
struct device *dev = priv->dev;
+ struct arm_smccc_res res;
int ret;
- ret = regmap_update_bits(priv->regmap, dcfg->src_reg,
- dcfg->src_mask, dcfg->src_stop);
+ switch (dcfg->method) {
+ case IMX_RPROC_MMIO:
+ ret = regmap_update_bits(priv->regmap, dcfg->src_reg, dcfg->src_mask,
+ dcfg->src_stop);
+ break;
+ case IMX_RPROC_SMC:
+ arm_smccc_smc(IMX_SIP_RPROC, IMX_SIP_RPROC_STOP, 0, 0, 0, 0, 0, 0, &res);
+ ret = res.a0;
+ if (res.a1)
+ dev_info(dev, "Not in wfi, force stopped\n");
+ break;
+ default:
+ return -EOPNOTSUPP;
+ }
+
if (ret)
- dev_err(dev, "Failed to stop M4!\n");
+ dev_err(dev, "Failed to stop remote cores\n");
if (priv->mode == IMX_RPROC_EARLY_BOOT)
priv->mode = IMX_RPROC_NORMAL;
@@ -591,6 +659,7 @@ static int imx_rproc_detect_mode(struct imx_rproc *priv)
const struct imx_rproc_dcfg *dcfg = priv->dcfg;
struct rproc *rproc = priv->rproc;
struct device *dev = priv->dev;
+ struct arm_smccc_res res;
int ret;
u32 val;
@@ -607,8 +676,12 @@ static int imx_rproc_detect_mode(struct imx_rproc *priv)
priv->mode = IMX_RPROC_NORMAL;
}
- if (dcfg->method == IMX_RPROC_NONE)
+ if (dcfg->method == IMX_RPROC_NONE) {
priv->mode = IMX_RPROC_EARLY_BOOT;
+ } else if (dcfg->method == IMX_RPROC_SMC) {
+ arm_smccc_smc(IMX_SIP_RPROC, IMX_SIP_RPROC_STARTED, 0, 0, 0, 0, 0, 0, &res);
+ priv->mode = res.a0 ? IMX_RPROC_EARLY_BOOT : IMX_RPROC_NORMAL;
+ }
if (priv->mode == IMX_RPROC_EARLY_BOOT) {
priv->rproc->state = RPROC_DETACHED;
@@ -750,6 +823,8 @@ static const struct of_device_id imx_rproc_of_match[] = {
{ .compatible = "fsl,imx6sx-cm4", .data = &imx_rproc_cfg_imx6sx },
{ .compatible = "fsl,imx8mq-cm4", .data = &imx_rproc_cfg_imx8mq },
{ .compatible = "fsl,imx8mm-cm4", .data = &imx_rproc_cfg_imx8mq },
+ { .compatible = "fsl,imx8mn-cm7", .data = &imx_rproc_cfg_imx8mn },
+ { .compatible = "fsl,imx8mp-cm7", .data = &imx_rproc_cfg_imx8mn },
{},
};
MODULE_DEVICE_TABLE(of, imx_rproc_of_match);
--
2.30.0
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH 8/8] remoteproc: imx_rproc: support i.MX8MN/P
@ 2021-03-22 8:12 ` peng.fan
0 siblings, 0 replies; 22+ messages in thread
From: peng.fan @ 2021-03-22 8:12 UTC (permalink / raw)
To: ohad, bjorn.andersson, mathieu.poirier, o.rempel, robh+dt, devicetree
Cc: shawnguo, s.hauer, kernel, festevam, linux-remoteproc,
linux-arm-kernel, linux-kernel, Peng Fan
From: Peng Fan <peng.fan@nxp.com>
Add i.MX8MN/P remote processor(Cortex-M7) support, we are using ARM
SMCCC to start/stop M core, not using regmap interface.
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
drivers/remoteproc/imx_rproc.c | 89 +++++++++++++++++++++++++++++++---
1 file changed, 82 insertions(+), 7 deletions(-)
diff --git a/drivers/remoteproc/imx_rproc.c b/drivers/remoteproc/imx_rproc.c
index 79a6b65d60b6..948139321330 100644
--- a/drivers/remoteproc/imx_rproc.c
+++ b/drivers/remoteproc/imx_rproc.c
@@ -3,6 +3,7 @@
* Copyright (c) 2017 Pengutronix, Oleksij Rempel <kernel@pengutronix.de>
*/
+#include <linux/arm-smccc.h>
#include <linux/clk.h>
#include <linux/err.h>
#include <linux/interrupt.h>
@@ -50,6 +51,11 @@
#define IMX_RPROC_MEM_MAX 32
+#define IMX_SIP_RPROC 0xC2000005
+#define IMX_SIP_RPROC_START 0x00
+#define IMX_SIP_RPROC_STARTED 0x01
+#define IMX_SIP_RPROC_STOP 0x02
+
/**
* struct imx_rproc_mem - slim internal memory structure
* @cpu_addr: MPU virtual address of the memory region
@@ -119,6 +125,36 @@ struct imx_rproc {
void __iomem *rsc_table;
};
+static const struct imx_rproc_att imx_rproc_att_imx8mn[] = {
+ /* dev addr , sys addr , size , flags */
+ /* ITCM */
+ { 0x00000000, 0x007E0000, 0x00020000, ATT_OWN },
+ /* OCRAM_S */
+ { 0x00180000, 0x00180000, 0x00009000, 0 },
+ /* OCRAM */
+ { 0x00900000, 0x00900000, 0x00020000, 0 },
+ /* OCRAM */
+ { 0x00920000, 0x00920000, 0x00020000, 0 },
+ /* OCRAM */
+ { 0x00940000, 0x00940000, 0x00050000, 0 },
+ /* QSPI Code - alias */
+ { 0x08000000, 0x08000000, 0x08000000, 0 },
+ /* DDR (Code) - alias */
+ { 0x10000000, 0x40000000, 0x0FFE0000, 0 },
+ /* DTCM */
+ { 0x20000000, 0x00800000, 0x00020000, ATT_OWN },
+ /* OCRAM_S - alias */
+ { 0x20180000, 0x00180000, 0x00008000, ATT_OWN },
+ /* OCRAM */
+ { 0x20200000, 0x00900000, 0x00020000, ATT_OWN },
+ /* OCRAM */
+ { 0x20220000, 0x00920000, 0x00020000, ATT_OWN },
+ /* OCRAM */
+ { 0x20240000, 0x00940000, 0x00040000, ATT_OWN },
+ /* DDR (Data) */
+ { 0x40000000, 0x40000000, 0x80000000, 0 },
+};
+
static const struct imx_rproc_att imx_rproc_att_imx8mq[] = {
/* dev addr , sys addr , size , flags */
/* TCML - alias */
@@ -205,6 +241,12 @@ static const struct imx_rproc_att imx_rproc_att_imx6sx[] = {
{ 0x80000000, 0x80000000, 0x60000000, 0 },
};
+static const struct imx_rproc_dcfg imx_rproc_cfg_imx8mn = {
+ .att = imx_rproc_att_imx8mn,
+ .att_size = ARRAY_SIZE(imx_rproc_att_imx8mn),
+ .method = IMX_RPROC_SMC,
+};
+
static const struct imx_rproc_dcfg imx_rproc_cfg_imx8mq = {
.src_reg = IMX7D_SRC_SCR,
.src_mask = IMX7D_M4_RST_MASK,
@@ -246,12 +288,24 @@ static int imx_rproc_start(struct rproc *rproc)
struct imx_rproc *priv = rproc->priv;
const struct imx_rproc_dcfg *dcfg = priv->dcfg;
struct device *dev = priv->dev;
+ struct arm_smccc_res res;
int ret;
- ret = regmap_update_bits(priv->regmap, dcfg->src_reg,
- dcfg->src_mask, dcfg->src_start);
+ switch (dcfg->method) {
+ case IMX_RPROC_MMIO:
+ ret = regmap_update_bits(priv->regmap, dcfg->src_reg, dcfg->src_mask,
+ dcfg->src_start);
+ break;
+ case IMX_RPROC_SMC:
+ arm_smccc_smc(IMX_SIP_RPROC, IMX_SIP_RPROC_START, 0, 0, 0, 0, 0, 0, &res);
+ ret = res.a0;
+ break;
+ default:
+ return -EOPNOTSUPP;
+ }
+
if (ret)
- dev_err(dev, "Failed to enable M4!\n");
+ dev_err(dev, "Failed to enable remote cores!\n");
return ret;
}
@@ -261,12 +315,26 @@ static int imx_rproc_stop(struct rproc *rproc)
struct imx_rproc *priv = rproc->priv;
const struct imx_rproc_dcfg *dcfg = priv->dcfg;
struct device *dev = priv->dev;
+ struct arm_smccc_res res;
int ret;
- ret = regmap_update_bits(priv->regmap, dcfg->src_reg,
- dcfg->src_mask, dcfg->src_stop);
+ switch (dcfg->method) {
+ case IMX_RPROC_MMIO:
+ ret = regmap_update_bits(priv->regmap, dcfg->src_reg, dcfg->src_mask,
+ dcfg->src_stop);
+ break;
+ case IMX_RPROC_SMC:
+ arm_smccc_smc(IMX_SIP_RPROC, IMX_SIP_RPROC_STOP, 0, 0, 0, 0, 0, 0, &res);
+ ret = res.a0;
+ if (res.a1)
+ dev_info(dev, "Not in wfi, force stopped\n");
+ break;
+ default:
+ return -EOPNOTSUPP;
+ }
+
if (ret)
- dev_err(dev, "Failed to stop M4!\n");
+ dev_err(dev, "Failed to stop remote cores\n");
if (priv->mode == IMX_RPROC_EARLY_BOOT)
priv->mode = IMX_RPROC_NORMAL;
@@ -591,6 +659,7 @@ static int imx_rproc_detect_mode(struct imx_rproc *priv)
const struct imx_rproc_dcfg *dcfg = priv->dcfg;
struct rproc *rproc = priv->rproc;
struct device *dev = priv->dev;
+ struct arm_smccc_res res;
int ret;
u32 val;
@@ -607,8 +676,12 @@ static int imx_rproc_detect_mode(struct imx_rproc *priv)
priv->mode = IMX_RPROC_NORMAL;
}
- if (dcfg->method == IMX_RPROC_NONE)
+ if (dcfg->method == IMX_RPROC_NONE) {
priv->mode = IMX_RPROC_EARLY_BOOT;
+ } else if (dcfg->method == IMX_RPROC_SMC) {
+ arm_smccc_smc(IMX_SIP_RPROC, IMX_SIP_RPROC_STARTED, 0, 0, 0, 0, 0, 0, &res);
+ priv->mode = res.a0 ? IMX_RPROC_EARLY_BOOT : IMX_RPROC_NORMAL;
+ }
if (priv->mode == IMX_RPROC_EARLY_BOOT) {
priv->rproc->state = RPROC_DETACHED;
@@ -750,6 +823,8 @@ static const struct of_device_id imx_rproc_of_match[] = {
{ .compatible = "fsl,imx6sx-cm4", .data = &imx_rproc_cfg_imx6sx },
{ .compatible = "fsl,imx8mq-cm4", .data = &imx_rproc_cfg_imx8mq },
{ .compatible = "fsl,imx8mm-cm4", .data = &imx_rproc_cfg_imx8mq },
+ { .compatible = "fsl,imx8mn-cm7", .data = &imx_rproc_cfg_imx8mn },
+ { .compatible = "fsl,imx8mp-cm7", .data = &imx_rproc_cfg_imx8mn },
{},
};
MODULE_DEVICE_TABLE(of, imx_rproc_of_match);
--
2.30.0
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 22+ messages in thread