From: Mathieu Poirier <mathieu.poirier@linaro.org>
To: "Peng Fan (OSS)" <peng.fan@oss.nxp.com>
Cc: andersson@kernel.org, robh+dt@kernel.org,
krzysztof.kozlowski+dt@linaro.org, shawnguo@kernel.org,
s.hauer@pengutronix.de, kernel@pengutronix.de,
festevam@gmail.com, linux-imx@nxp.com,
linux-remoteproc@vger.kernel.org, devicetree@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, Peng Fan <peng.fan@nxp.com>
Subject: Re: [PATCH V6 5/7] remoteproc: imx_rproc: support i.MX8QM
Date: Wed, 12 Oct 2022 16:06:17 -0600 [thread overview]
Message-ID: <20221012220617.GC1196937@p14s> (raw)
In-Reply-To: <20220929061704.1571746-6-peng.fan@oss.nxp.com>
On Thu, Sep 29, 2022 at 02:17:02PM +0800, Peng Fan (OSS) wrote:
> From: Peng Fan <peng.fan@nxp.com>
>
> Most logic are same as i.MX8QXP, but i.MX8QM has two general purpose
> M4 cores, the two cores runs independently and they has different resource
s/has/have
> id, different start address from SCFW view.
>
> Signed-off-by: Peng Fan <peng.fan@nxp.com>
With the above:
Reviewed-by: Mathieu Poirier <mathieu.poirier@linaro.org>
> ---
> drivers/remoteproc/imx_rproc.c | 47 +++++++++++++++++++++++++++++++---
> 1 file changed, 44 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/remoteproc/imx_rproc.c b/drivers/remoteproc/imx_rproc.c
> index 7d2e11aed0aa..8175c4c9aa22 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 <dt-bindings/firmware/imx/rsrc.h>
> #include <linux/arm-smccc.h>
> #include <linux/clk.h>
> #include <linux/err.h>
> @@ -75,10 +76,13 @@ struct imx_rproc_mem {
> size_t size;
> };
>
> -/* att flags */
> +/* att flags: lower 16 bits specifying core, higher 16 bits for flags */
> /* M4 own area. Can be mapped at probe */
> -#define ATT_OWN BIT(1)
> -#define ATT_IOMEM BIT(2)
> +#define ATT_OWN BIT(31)
> +#define ATT_IOMEM BIT(30)
> +
> +#define ATT_CORE_MASK 0xffff
> +#define ATT_CORE(I) BIT((I))
>
> static int imx_rproc_detach_pd(struct rproc *rproc);
>
> @@ -101,6 +105,7 @@ struct imx_rproc {
> u32 rsrc_id; /* resource id */
> u32 entry; /* cpu start address */
> int num_pd;
> + u32 core_index;
> struct device **pd_dev;
> struct device_link **pd_dev_link;
> };
> @@ -131,6 +136,19 @@ static const struct imx_rproc_att imx_rproc_att_imx93[] = {
> { 0xD0000000, 0xa0000000, 0x10000000, 0 },
> };
>
> +static const struct imx_rproc_att imx_rproc_att_imx8qm[] = {
> + /* dev addr , sys addr , size , flags */
> + { 0x08000000, 0x08000000, 0x10000000, 0},
> + /* TCML */
> + { 0x1FFE0000, 0x34FE0000, 0x00020000, ATT_OWN | ATT_IOMEM | ATT_CORE(0)},
> + { 0x1FFE0000, 0x38FE0000, 0x00020000, ATT_OWN | ATT_IOMEM | ATT_CORE(1)},
> + /* TCMU */
> + { 0x20000000, 0x35000000, 0x00020000, ATT_OWN | ATT_IOMEM | ATT_CORE(0)},
> + { 0x20000000, 0x39000000, 0x00020000, ATT_OWN | ATT_IOMEM | ATT_CORE(1)},
> + /* DDR (Data) */
> + { 0x80000000, 0x80000000, 0x60000000, 0 },
> +};
> +
> static const struct imx_rproc_att imx_rproc_att_imx8qxp[] = {
> { 0x08000000, 0x08000000, 0x10000000, 0 },
> /* TCML/U */
> @@ -281,6 +299,12 @@ static const struct imx_rproc_dcfg imx_rproc_cfg_imx8mq = {
> .method = IMX_RPROC_MMIO,
> };
>
> +static const struct imx_rproc_dcfg imx_rproc_cfg_imx8qm = {
> + .att = imx_rproc_att_imx8qm,
> + .att_size = ARRAY_SIZE(imx_rproc_att_imx8qm),
> + .method = IMX_RPROC_SCU_API,
> +};
> +
> static const struct imx_rproc_dcfg imx_rproc_cfg_imx8qxp = {
> .att = imx_rproc_att_imx8qxp,
> .att_size = ARRAY_SIZE(imx_rproc_att_imx8qxp),
> @@ -397,6 +421,17 @@ static int imx_rproc_da_to_sys(struct imx_rproc *priv, u64 da,
> for (i = 0; i < dcfg->att_size; i++) {
> const struct imx_rproc_att *att = &dcfg->att[i];
>
> + /*
> + * Ignore entries not belong to current core:
> + * i.MX8QM has dual general M4_[0,1] cores, M4_0's own entries
> + * has "ATT_CORE(0) & BIT(0)" true, M4_1's own entries has
> + * "ATT_CORE(1) & BIT(1)" true.
> + */
> + if (att->flags & ATT_CORE_MASK) {
> + if (!((BIT(priv->core_index)) & (att->flags & ATT_CORE_MASK)))
> + continue;
> + }
> +
> if (da >= att->da && da + len < att->da + att->size) {
> unsigned int offset = da - att->da;
>
> @@ -844,6 +879,11 @@ static int imx_rproc_detect_mode(struct imx_rproc *priv)
> return ret;
> }
>
> + if (priv->rsrc_id == IMX_SC_R_M4_1_PID0)
> + priv->core_index = 1;
> + else
> + priv->core_index = 0;
> +
> /*
> * If Mcore resource is not owned by Acore partition, It is kicked by ROM,
> * and Linux could only do IPC with Mcore and nothing else.
> @@ -1040,6 +1080,7 @@ static const struct of_device_id imx_rproc_of_match[] = {
> { .compatible = "fsl,imx8mn-cm7", .data = &imx_rproc_cfg_imx8mn },
> { .compatible = "fsl,imx8mp-cm7", .data = &imx_rproc_cfg_imx8mn },
> { .compatible = "fsl,imx8qxp-cm4", .data = &imx_rproc_cfg_imx8qxp },
> + { .compatible = "fsl,imx8qm-cm4", .data = &imx_rproc_cfg_imx8qm },
> { .compatible = "fsl,imx8ulp-cm33", .data = &imx_rproc_cfg_imx8ulp },
> { .compatible = "fsl,imx93-cm33", .data = &imx_rproc_cfg_imx93 },
> {},
> --
> 2.37.1
>
WARNING: multiple messages have this Message-ID (diff)
From: Mathieu Poirier <mathieu.poirier@linaro.org>
To: "Peng Fan (OSS)" <peng.fan@oss.nxp.com>
Cc: andersson@kernel.org, robh+dt@kernel.org,
krzysztof.kozlowski+dt@linaro.org, shawnguo@kernel.org,
s.hauer@pengutronix.de, kernel@pengutronix.de,
festevam@gmail.com, linux-imx@nxp.com,
linux-remoteproc@vger.kernel.org, devicetree@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, Peng Fan <peng.fan@nxp.com>
Subject: Re: [PATCH V6 5/7] remoteproc: imx_rproc: support i.MX8QM
Date: Wed, 12 Oct 2022 16:06:17 -0600 [thread overview]
Message-ID: <20221012220617.GC1196937@p14s> (raw)
In-Reply-To: <20220929061704.1571746-6-peng.fan@oss.nxp.com>
On Thu, Sep 29, 2022 at 02:17:02PM +0800, Peng Fan (OSS) wrote:
> From: Peng Fan <peng.fan@nxp.com>
>
> Most logic are same as i.MX8QXP, but i.MX8QM has two general purpose
> M4 cores, the two cores runs independently and they has different resource
s/has/have
> id, different start address from SCFW view.
>
> Signed-off-by: Peng Fan <peng.fan@nxp.com>
With the above:
Reviewed-by: Mathieu Poirier <mathieu.poirier@linaro.org>
> ---
> drivers/remoteproc/imx_rproc.c | 47 +++++++++++++++++++++++++++++++---
> 1 file changed, 44 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/remoteproc/imx_rproc.c b/drivers/remoteproc/imx_rproc.c
> index 7d2e11aed0aa..8175c4c9aa22 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 <dt-bindings/firmware/imx/rsrc.h>
> #include <linux/arm-smccc.h>
> #include <linux/clk.h>
> #include <linux/err.h>
> @@ -75,10 +76,13 @@ struct imx_rproc_mem {
> size_t size;
> };
>
> -/* att flags */
> +/* att flags: lower 16 bits specifying core, higher 16 bits for flags */
> /* M4 own area. Can be mapped at probe */
> -#define ATT_OWN BIT(1)
> -#define ATT_IOMEM BIT(2)
> +#define ATT_OWN BIT(31)
> +#define ATT_IOMEM BIT(30)
> +
> +#define ATT_CORE_MASK 0xffff
> +#define ATT_CORE(I) BIT((I))
>
> static int imx_rproc_detach_pd(struct rproc *rproc);
>
> @@ -101,6 +105,7 @@ struct imx_rproc {
> u32 rsrc_id; /* resource id */
> u32 entry; /* cpu start address */
> int num_pd;
> + u32 core_index;
> struct device **pd_dev;
> struct device_link **pd_dev_link;
> };
> @@ -131,6 +136,19 @@ static const struct imx_rproc_att imx_rproc_att_imx93[] = {
> { 0xD0000000, 0xa0000000, 0x10000000, 0 },
> };
>
> +static const struct imx_rproc_att imx_rproc_att_imx8qm[] = {
> + /* dev addr , sys addr , size , flags */
> + { 0x08000000, 0x08000000, 0x10000000, 0},
> + /* TCML */
> + { 0x1FFE0000, 0x34FE0000, 0x00020000, ATT_OWN | ATT_IOMEM | ATT_CORE(0)},
> + { 0x1FFE0000, 0x38FE0000, 0x00020000, ATT_OWN | ATT_IOMEM | ATT_CORE(1)},
> + /* TCMU */
> + { 0x20000000, 0x35000000, 0x00020000, ATT_OWN | ATT_IOMEM | ATT_CORE(0)},
> + { 0x20000000, 0x39000000, 0x00020000, ATT_OWN | ATT_IOMEM | ATT_CORE(1)},
> + /* DDR (Data) */
> + { 0x80000000, 0x80000000, 0x60000000, 0 },
> +};
> +
> static const struct imx_rproc_att imx_rproc_att_imx8qxp[] = {
> { 0x08000000, 0x08000000, 0x10000000, 0 },
> /* TCML/U */
> @@ -281,6 +299,12 @@ static const struct imx_rproc_dcfg imx_rproc_cfg_imx8mq = {
> .method = IMX_RPROC_MMIO,
> };
>
> +static const struct imx_rproc_dcfg imx_rproc_cfg_imx8qm = {
> + .att = imx_rproc_att_imx8qm,
> + .att_size = ARRAY_SIZE(imx_rproc_att_imx8qm),
> + .method = IMX_RPROC_SCU_API,
> +};
> +
> static const struct imx_rproc_dcfg imx_rproc_cfg_imx8qxp = {
> .att = imx_rproc_att_imx8qxp,
> .att_size = ARRAY_SIZE(imx_rproc_att_imx8qxp),
> @@ -397,6 +421,17 @@ static int imx_rproc_da_to_sys(struct imx_rproc *priv, u64 da,
> for (i = 0; i < dcfg->att_size; i++) {
> const struct imx_rproc_att *att = &dcfg->att[i];
>
> + /*
> + * Ignore entries not belong to current core:
> + * i.MX8QM has dual general M4_[0,1] cores, M4_0's own entries
> + * has "ATT_CORE(0) & BIT(0)" true, M4_1's own entries has
> + * "ATT_CORE(1) & BIT(1)" true.
> + */
> + if (att->flags & ATT_CORE_MASK) {
> + if (!((BIT(priv->core_index)) & (att->flags & ATT_CORE_MASK)))
> + continue;
> + }
> +
> if (da >= att->da && da + len < att->da + att->size) {
> unsigned int offset = da - att->da;
>
> @@ -844,6 +879,11 @@ static int imx_rproc_detect_mode(struct imx_rproc *priv)
> return ret;
> }
>
> + if (priv->rsrc_id == IMX_SC_R_M4_1_PID0)
> + priv->core_index = 1;
> + else
> + priv->core_index = 0;
> +
> /*
> * If Mcore resource is not owned by Acore partition, It is kicked by ROM,
> * and Linux could only do IPC with Mcore and nothing else.
> @@ -1040,6 +1080,7 @@ static const struct of_device_id imx_rproc_of_match[] = {
> { .compatible = "fsl,imx8mn-cm7", .data = &imx_rproc_cfg_imx8mn },
> { .compatible = "fsl,imx8mp-cm7", .data = &imx_rproc_cfg_imx8mn },
> { .compatible = "fsl,imx8qxp-cm4", .data = &imx_rproc_cfg_imx8qxp },
> + { .compatible = "fsl,imx8qm-cm4", .data = &imx_rproc_cfg_imx8qm },
> { .compatible = "fsl,imx8ulp-cm33", .data = &imx_rproc_cfg_imx8ulp },
> { .compatible = "fsl,imx93-cm33", .data = &imx_rproc_cfg_imx93 },
> {},
> --
> 2.37.1
>
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2022-10-12 22:09 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-29 6:16 [PATCH V6 0/7] remoteproc: imx_rproc: support i.MX8QM/QXP Peng Fan (OSS)
2022-09-29 6:16 ` Peng Fan (OSS)
2022-09-29 6:16 ` [PATCH V6 1/7] dt-bindings: remoteproc: imx_rproc: support i.MX8QXP Peng Fan (OSS)
2022-09-29 6:16 ` Peng Fan (OSS)
2022-09-29 6:16 ` [PATCH V6 2/7] dt-bindings: remoteproc: imx_rproc: support i.MX8QM Peng Fan (OSS)
2022-09-29 6:16 ` Peng Fan (OSS)
2022-09-29 6:17 ` [PATCH V6 3/7] remoteproc: imx_rproc: support attaching to i.MX8QXP M4 Peng Fan (OSS)
2022-09-29 6:17 ` Peng Fan (OSS)
2022-10-12 21:23 ` Mathieu Poirier
2022-10-12 21:23 ` Mathieu Poirier
2022-09-29 6:17 ` [PATCH V6 4/7] remoteproc: imx_rproc: support kicking Mcore from Linux for i.MX8QXP Peng Fan (OSS)
2022-09-29 6:17 ` Peng Fan (OSS)
2022-10-12 21:45 ` Mathieu Poirier
2022-10-12 21:45 ` Mathieu Poirier
2022-09-29 6:17 ` [PATCH V6 5/7] remoteproc: imx_rproc: support i.MX8QM Peng Fan (OSS)
2022-09-29 6:17 ` Peng Fan (OSS)
2022-10-12 22:06 ` Mathieu Poirier [this message]
2022-10-12 22:06 ` Mathieu Poirier
2022-09-29 6:17 ` [PATCH V6 6/7] remoteproc: imx_rproc: request mbox channel later Peng Fan (OSS)
2022-09-29 6:17 ` Peng Fan (OSS)
2022-10-12 22:26 ` Mathieu Poirier
2022-10-12 22:26 ` Mathieu Poirier
2022-10-13 13:06 ` Peng Fan
2022-10-13 13:06 ` Peng Fan
2022-09-29 6:17 ` [PATCH V6 7/7] remoteproc: imx_rproc: Enable attach recovery for i.MX8QM/QXP Peng Fan (OSS)
2022-09-29 6:17 ` Peng Fan (OSS)
2022-09-29 23:20 ` Peng Fan
2022-09-29 23:20 ` Peng Fan
2022-10-12 22:32 ` Mathieu Poirier
2022-10-12 22:32 ` Mathieu Poirier
2022-10-13 13:11 ` Peng Fan
2022-10-13 13:11 ` Peng Fan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20221012220617.GC1196937@p14s \
--to=mathieu.poirier@linaro.org \
--cc=andersson@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=festevam@gmail.com \
--cc=kernel@pengutronix.de \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-imx@nxp.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-remoteproc@vger.kernel.org \
--cc=peng.fan@nxp.com \
--cc=peng.fan@oss.nxp.com \
--cc=robh+dt@kernel.org \
--cc=s.hauer@pengutronix.de \
--cc=shawnguo@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.