linux-remoteproc.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH V4 0/6] remoteproc: elf_loader and imx fix
@ 2021-09-10  9:06 Peng Fan (OSS)
  2021-09-10  9:06 ` [PATCH V4 1/6] remoteproc: elf_loader: fix loading segment when is_iomem true Peng Fan (OSS)
                   ` (5 more replies)
  0 siblings, 6 replies; 12+ messages in thread
From: Peng Fan (OSS) @ 2021-09-10  9:06 UTC (permalink / raw)
  To: ohad, bjorn.andersson, mathieu.poirier, o.rempel
  Cc: shawnguo, s.hauer, kernel, festevam, linux-imx, linux-remoteproc,
	linux-arm-kernel, linux-kernel, aisheng.dong, Peng Fan

From: Peng Fan <peng.fan@nxp.com>

V4:
 Add coverletter
 Spin R-b/T-b tags
 Because the v3 patchset depends on the other patch, so
 include in the patchset now: https://patchwork.kernel.org/project/linux-remoteproc/patch/20210629014752.5659-1-peng.fan@oss.nxp.com/

Dong Aisheng (5):
  remoteproc: fix the wrong default value of is_iomem
  remoteproc: imx_rproc: fix TCM io memory type
  remoteproc: imx_rproc: fix ignoring mapping vdev regions
  remoteproc: imx_rproc: fix rsc-table name
  remoteproc: imx_rproc: change to ioremap_wc for dram

Peng Fan (1):
  remoteproc: elf_loader: fix loading segment when is_iomem true

 drivers/remoteproc/imx_rproc.c             | 43 +++++++++++++---------
 drivers/remoteproc/remoteproc_coredump.c   |  2 +-
 drivers/remoteproc/remoteproc_elf_loader.c |  4 +-
 3 files changed, 28 insertions(+), 21 deletions(-)

-- 
2.25.1


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH V4 1/6] remoteproc: elf_loader: fix loading segment when is_iomem true
  2021-09-10  9:06 [PATCH V4 0/6] remoteproc: elf_loader and imx fix Peng Fan (OSS)
@ 2021-09-10  9:06 ` Peng Fan (OSS)
  2021-09-20 16:23   ` Mathieu Poirier
  2021-09-10  9:06 ` [PATCH V4 2/6] remoteproc: fix the wrong default value of is_iomem Peng Fan (OSS)
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 12+ messages in thread
From: Peng Fan (OSS) @ 2021-09-10  9:06 UTC (permalink / raw)
  To: ohad, bjorn.andersson, mathieu.poirier, o.rempel
  Cc: shawnguo, s.hauer, kernel, festevam, linux-imx, linux-remoteproc,
	linux-arm-kernel, linux-kernel, aisheng.dong, Peng Fan,
	kernel test robot

From: Peng Fan <peng.fan@nxp.com>

It seems luckliy work on i.MX platform, but it is wrong.
Need use memcpy_toio, not memcpy_fromio.

Fixes: 40df0a91b2a52 ("remoteproc: add is_iomem to da_to_va")
Tested-by: Dong Aisheng <aisheng.dong@nxp.com> (i.MX8MQ)
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dong Aisheng <aisheng.dong@nxp.com>
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
 drivers/remoteproc/remoteproc_elf_loader.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/remoteproc/remoteproc_elf_loader.c b/drivers/remoteproc/remoteproc_elf_loader.c
index 469c52e62faff..44e7f9308f4bc 100644
--- a/drivers/remoteproc/remoteproc_elf_loader.c
+++ b/drivers/remoteproc/remoteproc_elf_loader.c
@@ -220,7 +220,7 @@ int rproc_elf_load_segments(struct rproc *rproc, const struct firmware *fw)
 		/* put the segment where the remote processor expects it */
 		if (filesz) {
 			if (is_iomem)
-				memcpy_fromio(ptr, (void __iomem *)(elf_data + offset), filesz);
+				memcpy_toio((void __iomem *)ptr, elf_data + offset, filesz);
 			else
 				memcpy(ptr, elf_data + offset, filesz);
 		}
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH V4 2/6] remoteproc: fix the wrong default value of is_iomem
  2021-09-10  9:06 [PATCH V4 0/6] remoteproc: elf_loader and imx fix Peng Fan (OSS)
  2021-09-10  9:06 ` [PATCH V4 1/6] remoteproc: elf_loader: fix loading segment when is_iomem true Peng Fan (OSS)
@ 2021-09-10  9:06 ` Peng Fan (OSS)
  2021-09-20 16:54   ` Mathieu Poirier
  2021-09-10  9:06 ` [PATCH V4 3/6] remoteproc: imx_rproc: fix TCM io memory type Peng Fan (OSS)
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 12+ messages in thread
From: Peng Fan (OSS) @ 2021-09-10  9:06 UTC (permalink / raw)
  To: ohad, bjorn.andersson, mathieu.poirier, o.rempel
  Cc: shawnguo, s.hauer, kernel, festevam, linux-imx, linux-remoteproc,
	linux-arm-kernel, linux-kernel, aisheng.dong, Peng Fan

From: Dong Aisheng <aisheng.dong@nxp.com>

Currently the is_iomem is a random value in the stack which may
be default to true even on those platforms that not use iomem to
store firmware.

Cc: Bjorn Andersson <bjorn.andersson@linaro.org>
Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
Fixes: 40df0a91b2a5 ("remoteproc: add is_iomem to da_to_va")
Reviewed-and-tested-by: Peng Fan <peng.fan@nxp.com>
Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
 drivers/remoteproc/remoteproc_coredump.c   | 2 +-
 drivers/remoteproc/remoteproc_elf_loader.c | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/remoteproc/remoteproc_coredump.c b/drivers/remoteproc/remoteproc_coredump.c
index aee657cc08c6a..c892f433a323e 100644
--- a/drivers/remoteproc/remoteproc_coredump.c
+++ b/drivers/remoteproc/remoteproc_coredump.c
@@ -152,8 +152,8 @@ static void rproc_copy_segment(struct rproc *rproc, void *dest,
 			       struct rproc_dump_segment *segment,
 			       size_t offset, size_t size)
 {
+	bool is_iomem = false;
 	void *ptr;
-	bool is_iomem;
 
 	if (segment->dump) {
 		segment->dump(rproc, segment, dest, offset, size);
diff --git a/drivers/remoteproc/remoteproc_elf_loader.c b/drivers/remoteproc/remoteproc_elf_loader.c
index 44e7f9308f4bc..d635d19a5aa8a 100644
--- a/drivers/remoteproc/remoteproc_elf_loader.c
+++ b/drivers/remoteproc/remoteproc_elf_loader.c
@@ -178,8 +178,8 @@ int rproc_elf_load_segments(struct rproc *rproc, const struct firmware *fw)
 		u64 filesz = elf_phdr_get_p_filesz(class, phdr);
 		u64 offset = elf_phdr_get_p_offset(class, phdr);
 		u32 type = elf_phdr_get_p_type(class, phdr);
+		bool is_iomem = false;
 		void *ptr;
-		bool is_iomem;
 
 		if (type != PT_LOAD)
 			continue;
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH V4 3/6] remoteproc: imx_rproc: fix TCM io memory type
  2021-09-10  9:06 [PATCH V4 0/6] remoteproc: elf_loader and imx fix Peng Fan (OSS)
  2021-09-10  9:06 ` [PATCH V4 1/6] remoteproc: elf_loader: fix loading segment when is_iomem true Peng Fan (OSS)
  2021-09-10  9:06 ` [PATCH V4 2/6] remoteproc: fix the wrong default value of is_iomem Peng Fan (OSS)
@ 2021-09-10  9:06 ` Peng Fan (OSS)
  2021-09-20 16:59   ` Mathieu Poirier
  2021-09-10  9:06 ` [PATCH V4 4/6] remoteproc: imx_rproc: fix ignoring mapping vdev regions Peng Fan (OSS)
                   ` (2 subsequent siblings)
  5 siblings, 1 reply; 12+ messages in thread
From: Peng Fan (OSS) @ 2021-09-10  9:06 UTC (permalink / raw)
  To: ohad, bjorn.andersson, mathieu.poirier, o.rempel
  Cc: shawnguo, s.hauer, kernel, festevam, linux-imx, linux-remoteproc,
	linux-arm-kernel, linux-kernel, aisheng.dong, Peng Fan

From: Dong Aisheng <aisheng.dong@nxp.com>

is_iomem was introduced in the commit 40df0a91b2a5 ("remoteproc: add
is_iomem to da_to_va"), but the driver seemed missed to provide the io
type correctly.
This patch updates remoteproc driver to indicate the TCM on IMX are io
memories. Without the change, remoteproc kick will fail.

Cc: Bjorn Andersson <bjorn.andersson@linaro.org>
Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
Cc: Peng Fan <peng.fan@nxp.com>
Reviewed-and-tested-by: Peng Fan <peng.fan@nxp.com>
Fixes: 79806d32d5aa ("remoteproc: imx_rproc: support i.MX8MN/P")
Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
 drivers/remoteproc/imx_rproc.c | 35 ++++++++++++++++++++--------------
 1 file changed, 21 insertions(+), 14 deletions(-)

diff --git a/drivers/remoteproc/imx_rproc.c b/drivers/remoteproc/imx_rproc.c
index d88f76f5305eb..71dcc6dd32e40 100644
--- a/drivers/remoteproc/imx_rproc.c
+++ b/drivers/remoteproc/imx_rproc.c
@@ -71,6 +71,7 @@ struct imx_rproc_mem {
 /* att flags */
 /* M4 own area. Can be mapped at probe */
 #define ATT_OWN		BIT(1)
+#define ATT_IOMEM	BIT(2)
 
 /* address translation table */
 struct imx_rproc_att {
@@ -117,7 +118,7 @@ struct imx_rproc {
 static const struct imx_rproc_att imx_rproc_att_imx8mn[] = {
 	/* dev addr , sys addr  , size	    , flags */
 	/* ITCM   */
-	{ 0x00000000, 0x007E0000, 0x00020000, ATT_OWN },
+	{ 0x00000000, 0x007E0000, 0x00020000, ATT_OWN | ATT_IOMEM },
 	/* OCRAM_S */
 	{ 0x00180000, 0x00180000, 0x00009000, 0 },
 	/* OCRAM */
@@ -131,7 +132,7 @@ static const struct imx_rproc_att imx_rproc_att_imx8mn[] = {
 	/* DDR (Code) - alias */
 	{ 0x10000000, 0x40000000, 0x0FFE0000, 0 },
 	/* DTCM */
-	{ 0x20000000, 0x00800000, 0x00020000, ATT_OWN },
+	{ 0x20000000, 0x00800000, 0x00020000, ATT_OWN | ATT_IOMEM },
 	/* OCRAM_S - alias */
 	{ 0x20180000, 0x00180000, 0x00008000, ATT_OWN },
 	/* OCRAM */
@@ -147,7 +148,7 @@ static const struct imx_rproc_att imx_rproc_att_imx8mn[] = {
 static const struct imx_rproc_att imx_rproc_att_imx8mq[] = {
 	/* dev addr , sys addr  , size	    , flags */
 	/* TCML - alias */
-	{ 0x00000000, 0x007e0000, 0x00020000, 0 },
+	{ 0x00000000, 0x007e0000, 0x00020000, ATT_IOMEM},
 	/* OCRAM_S */
 	{ 0x00180000, 0x00180000, 0x00008000, 0 },
 	/* OCRAM */
@@ -159,9 +160,9 @@ static const struct imx_rproc_att imx_rproc_att_imx8mq[] = {
 	/* DDR (Code) - alias */
 	{ 0x10000000, 0x80000000, 0x0FFE0000, 0 },
 	/* TCML */
-	{ 0x1FFE0000, 0x007E0000, 0x00020000, ATT_OWN },
+	{ 0x1FFE0000, 0x007E0000, 0x00020000, ATT_OWN  | ATT_IOMEM},
 	/* TCMU */
-	{ 0x20000000, 0x00800000, 0x00020000, ATT_OWN },
+	{ 0x20000000, 0x00800000, 0x00020000, ATT_OWN  | ATT_IOMEM},
 	/* OCRAM_S */
 	{ 0x20180000, 0x00180000, 0x00008000, ATT_OWN },
 	/* OCRAM */
@@ -199,12 +200,12 @@ static const struct imx_rproc_att imx_rproc_att_imx7d[] = {
 	/* OCRAM_PXP (Code) - alias */
 	{ 0x00940000, 0x00940000, 0x00008000, 0 },
 	/* TCML (Code) */
-	{ 0x1FFF8000, 0x007F8000, 0x00008000, ATT_OWN },
+	{ 0x1FFF8000, 0x007F8000, 0x00008000, ATT_OWN | ATT_IOMEM },
 	/* DDR (Code) - alias, first part of DDR (Data) */
 	{ 0x10000000, 0x80000000, 0x0FFF0000, 0 },
 
 	/* TCMU (Data) */
-	{ 0x20000000, 0x00800000, 0x00008000, ATT_OWN },
+	{ 0x20000000, 0x00800000, 0x00008000, ATT_OWN | ATT_IOMEM },
 	/* OCRAM (Data) */
 	{ 0x20200000, 0x00900000, 0x00020000, 0 },
 	/* OCRAM_EPDC (Data) */
@@ -218,18 +219,18 @@ static const struct imx_rproc_att imx_rproc_att_imx7d[] = {
 static const struct imx_rproc_att imx_rproc_att_imx6sx[] = {
 	/* dev addr , sys addr  , size	    , flags */
 	/* TCML (M4 Boot Code) - alias */
-	{ 0x00000000, 0x007F8000, 0x00008000, 0 },
+	{ 0x00000000, 0x007F8000, 0x00008000, ATT_IOMEM },
 	/* OCRAM_S (Code) */
 	{ 0x00180000, 0x008F8000, 0x00004000, 0 },
 	/* OCRAM_S (Code) - alias */
 	{ 0x00180000, 0x008FC000, 0x00004000, 0 },
 	/* TCML (Code) */
-	{ 0x1FFF8000, 0x007F8000, 0x00008000, ATT_OWN },
+	{ 0x1FFF8000, 0x007F8000, 0x00008000, ATT_OWN | ATT_IOMEM },
 	/* DDR (Code) - alias, first part of DDR (Data) */
 	{ 0x10000000, 0x80000000, 0x0FFF8000, 0 },
 
 	/* TCMU (Data) */
-	{ 0x20000000, 0x00800000, 0x00008000, ATT_OWN },
+	{ 0x20000000, 0x00800000, 0x00008000, ATT_OWN | ATT_IOMEM },
 	/* OCRAM_S (Data) - alias? */
 	{ 0x208F8000, 0x008F8000, 0x00004000, 0 },
 	/* DDR (Data) */
@@ -341,7 +342,7 @@ static int imx_rproc_stop(struct rproc *rproc)
 }
 
 static int imx_rproc_da_to_sys(struct imx_rproc *priv, u64 da,
-			       size_t len, u64 *sys)
+			       size_t len, u64 *sys, bool *is_iomem)
 {
 	const struct imx_rproc_dcfg *dcfg = priv->dcfg;
 	int i;
@@ -354,6 +355,8 @@ static int imx_rproc_da_to_sys(struct imx_rproc *priv, u64 da,
 			unsigned int offset = da - att->da;
 
 			*sys = att->sa + offset;
+			if (is_iomem)
+				*is_iomem = att->flags & ATT_IOMEM;
 			return 0;
 		}
 	}
@@ -377,7 +380,7 @@ static void *imx_rproc_da_to_va(struct rproc *rproc, u64 da, size_t len, bool *i
 	 * On device side we have many aliases, so we need to convert device
 	 * address (M4) to system bus address first.
 	 */
-	if (imx_rproc_da_to_sys(priv, da, len, &sys))
+	if (imx_rproc_da_to_sys(priv, da, len, &sys, is_iomem))
 		return NULL;
 
 	for (i = 0; i < IMX_RPROC_MEM_MAX; i++) {
@@ -553,8 +556,12 @@ static int imx_rproc_addr_init(struct imx_rproc *priv,
 		if (b >= IMX_RPROC_MEM_MAX)
 			break;
 
-		priv->mem[b].cpu_addr = devm_ioremap(&pdev->dev,
-						     att->sa, att->size);
+		if (att->flags & ATT_IOMEM)
+			priv->mem[b].cpu_addr = devm_ioremap(&pdev->dev,
+							     att->sa, att->size);
+		else
+			priv->mem[b].cpu_addr = devm_ioremap_wc(&pdev->dev,
+								att->sa, att->size);
 		if (!priv->mem[b].cpu_addr) {
 			dev_err(dev, "failed to remap %#x bytes from %#x\n", att->size, att->sa);
 			return -ENOMEM;
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH V4 4/6] remoteproc: imx_rproc: fix ignoring mapping vdev regions
  2021-09-10  9:06 [PATCH V4 0/6] remoteproc: elf_loader and imx fix Peng Fan (OSS)
                   ` (2 preceding siblings ...)
  2021-09-10  9:06 ` [PATCH V4 3/6] remoteproc: imx_rproc: fix TCM io memory type Peng Fan (OSS)
@ 2021-09-10  9:06 ` Peng Fan (OSS)
  2021-09-10  9:06 ` [PATCH V4 5/6] remoteproc: imx_rproc: fix rsc-table name Peng Fan (OSS)
  2021-09-10  9:06 ` [PATCH V4 6/6] remoteproc: imx_rproc: change to ioremap_wc for dram Peng Fan (OSS)
  5 siblings, 0 replies; 12+ messages in thread
From: Peng Fan (OSS) @ 2021-09-10  9:06 UTC (permalink / raw)
  To: ohad, bjorn.andersson, mathieu.poirier, o.rempel
  Cc: shawnguo, s.hauer, kernel, festevam, linux-imx, linux-remoteproc,
	linux-arm-kernel, linux-kernel, aisheng.dong, Peng Fan

From: Dong Aisheng <aisheng.dong@nxp.com>

vdev regions are typically named vdev0buffer, vdev0ring0, vdev0ring1 and
etc. Change to strncmp to cover them all.

Fixes: 8f2d8961640f ("remoteproc: imx_rproc: ignore mapping vdev regions")
Reviewed-and-tested-by: Peng Fan <peng.fan@nxp.com>
Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
 drivers/remoteproc/imx_rproc.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/remoteproc/imx_rproc.c b/drivers/remoteproc/imx_rproc.c
index 71dcc6dd32e40..abfeac0b1738d 100644
--- a/drivers/remoteproc/imx_rproc.c
+++ b/drivers/remoteproc/imx_rproc.c
@@ -582,8 +582,8 @@ static int imx_rproc_addr_init(struct imx_rproc *priv,
 		struct resource res;
 
 		node = of_parse_phandle(np, "memory-region", a);
-		/* Not map vdev region */
-		if (!strcmp(node->name, "vdev"))
+		/* Not map vdevbuffer, vdevring region */
+		if (!strncmp(node->name, "vdev", strlen("vdev")))
 			continue;
 		err = of_address_to_resource(node, 0, &res);
 		if (err) {
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH V4 5/6] remoteproc: imx_rproc: fix rsc-table name
  2021-09-10  9:06 [PATCH V4 0/6] remoteproc: elf_loader and imx fix Peng Fan (OSS)
                   ` (3 preceding siblings ...)
  2021-09-10  9:06 ` [PATCH V4 4/6] remoteproc: imx_rproc: fix ignoring mapping vdev regions Peng Fan (OSS)
@ 2021-09-10  9:06 ` Peng Fan (OSS)
  2021-09-10  9:06 ` [PATCH V4 6/6] remoteproc: imx_rproc: change to ioremap_wc for dram Peng Fan (OSS)
  5 siblings, 0 replies; 12+ messages in thread
From: Peng Fan (OSS) @ 2021-09-10  9:06 UTC (permalink / raw)
  To: ohad, bjorn.andersson, mathieu.poirier, o.rempel
  Cc: shawnguo, s.hauer, kernel, festevam, linux-imx, linux-remoteproc,
	linux-arm-kernel, linux-kernel, aisheng.dong, Peng Fan

From: Dong Aisheng <aisheng.dong@nxp.com>

Usually the dash '-'  is preferred in node name.
So far, not dts in upstream kernel, so we just update node name
in driver.

Cc: Bjorn Andersson <bjorn.andersson@linaro.org>
Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
Fixes: 5e4c1243071d ("remoteproc: imx_rproc: support remote cores booted before Linux Kernel")
Reviewed-and-tested-by: Peng Fan <peng.fan@nxp.com>
Signed-off-by: Dong Aisheng <aisheng.dong@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 abfeac0b1738d..ff620688fad94 100644
--- a/drivers/remoteproc/imx_rproc.c
+++ b/drivers/remoteproc/imx_rproc.c
@@ -604,7 +604,7 @@ static int imx_rproc_addr_init(struct imx_rproc *priv,
 		}
 		priv->mem[b].sys_addr = res.start;
 		priv->mem[b].size = resource_size(&res);
-		if (!strcmp(node->name, "rsc_table"))
+		if (!strcmp(node->name, "rsc-table"))
 			priv->rsc_table = priv->mem[b].cpu_addr;
 		b++;
 	}
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH V4 6/6] remoteproc: imx_rproc: change to ioremap_wc for dram
  2021-09-10  9:06 [PATCH V4 0/6] remoteproc: elf_loader and imx fix Peng Fan (OSS)
                   ` (4 preceding siblings ...)
  2021-09-10  9:06 ` [PATCH V4 5/6] remoteproc: imx_rproc: fix rsc-table name Peng Fan (OSS)
@ 2021-09-10  9:06 ` Peng Fan (OSS)
  2021-09-20 17:00   ` Mathieu Poirier
  5 siblings, 1 reply; 12+ messages in thread
From: Peng Fan (OSS) @ 2021-09-10  9:06 UTC (permalink / raw)
  To: ohad, bjorn.andersson, mathieu.poirier, o.rempel
  Cc: shawnguo, s.hauer, kernel, festevam, linux-imx, linux-remoteproc,
	linux-arm-kernel, linux-kernel, aisheng.dong, Peng Fan

From: Dong Aisheng <aisheng.dong@nxp.com>

DRAM is not io memory, so changed to ioremap_wc. This is also
aligned with core io accessories. e.g. memcpy/memset and cpu direct
access.

Cc: Bjorn Andersson <bjorn.andersson@linaro.org>
Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
Cc: Peng Fan <peng.fan@nxp.com>
Reviewed-and-tested-by: Peng Fan <peng.fan@nxp.com>
Signed-off-by: Dong Aisheng <aisheng.dong@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 ff620688fad94..4ae416ba50807 100644
--- a/drivers/remoteproc/imx_rproc.c
+++ b/drivers/remoteproc/imx_rproc.c
@@ -597,7 +597,7 @@ static int imx_rproc_addr_init(struct imx_rproc *priv,
 			break;
 
 		/* Not use resource version, because we might share region */
-		priv->mem[b].cpu_addr = devm_ioremap(&pdev->dev, res.start, resource_size(&res));
+		priv->mem[b].cpu_addr = devm_ioremap_wc(&pdev->dev, res.start, resource_size(&res));
 		if (!priv->mem[b].cpu_addr) {
 			dev_err(dev, "failed to remap %pr\n", &res);
 			return -ENOMEM;
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH V4 1/6] remoteproc: elf_loader: fix loading segment when is_iomem true
  2021-09-10  9:06 ` [PATCH V4 1/6] remoteproc: elf_loader: fix loading segment when is_iomem true Peng Fan (OSS)
@ 2021-09-20 16:23   ` Mathieu Poirier
  0 siblings, 0 replies; 12+ messages in thread
From: Mathieu Poirier @ 2021-09-20 16:23 UTC (permalink / raw)
  To: Peng Fan (OSS)
  Cc: ohad, bjorn.andersson, o.rempel, shawnguo, s.hauer, kernel,
	festevam, linux-imx, linux-remoteproc, linux-arm-kernel,
	linux-kernel, aisheng.dong, Peng Fan, kernel test robot

On Fri, Sep 10, 2021 at 05:06:16PM +0800, Peng Fan (OSS) wrote:
> From: Peng Fan <peng.fan@nxp.com>
> 
> It seems luckliy work on i.MX platform, but it is wrong.
> Need use memcpy_toio, not memcpy_fromio.
> 

Lucky or not I just can't understand how this worked in the first place.

> Fixes: 40df0a91b2a52 ("remoteproc: add is_iomem to da_to_va")

SHA tag should be 12 characters.

> Tested-by: Dong Aisheng <aisheng.dong@nxp.com> (i.MX8MQ)
> Reported-by: kernel test robot <lkp@intel.com>
> Reported-by: Dong Aisheng <aisheng.dong@nxp.com>
> Signed-off-by: Peng Fan <peng.fan@nxp.com>

I will add a CC:stable, fix the title, fix the SHA and pick this patch.

> ---
>  drivers/remoteproc/remoteproc_elf_loader.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/remoteproc/remoteproc_elf_loader.c b/drivers/remoteproc/remoteproc_elf_loader.c
> index 469c52e62faff..44e7f9308f4bc 100644
> --- a/drivers/remoteproc/remoteproc_elf_loader.c
> +++ b/drivers/remoteproc/remoteproc_elf_loader.c
> @@ -220,7 +220,7 @@ int rproc_elf_load_segments(struct rproc *rproc, const struct firmware *fw)
>  		/* put the segment where the remote processor expects it */
>  		if (filesz) {
>  			if (is_iomem)
> -				memcpy_fromio(ptr, (void __iomem *)(elf_data + offset), filesz);
> +				memcpy_toio((void __iomem *)ptr, elf_data + offset, filesz);
>  			else
>  				memcpy(ptr, elf_data + offset, filesz);
>  		}
> -- 
> 2.25.1
> 

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH V4 2/6] remoteproc: fix the wrong default value of is_iomem
  2021-09-10  9:06 ` [PATCH V4 2/6] remoteproc: fix the wrong default value of is_iomem Peng Fan (OSS)
@ 2021-09-20 16:54   ` Mathieu Poirier
  0 siblings, 0 replies; 12+ messages in thread
From: Mathieu Poirier @ 2021-09-20 16:54 UTC (permalink / raw)
  To: Peng Fan (OSS)
  Cc: ohad, bjorn.andersson, o.rempel, shawnguo, s.hauer, kernel,
	festevam, linux-imx, linux-remoteproc, linux-arm-kernel,
	linux-kernel, aisheng.dong, Peng Fan

On Fri, Sep 10, 2021 at 05:06:17PM +0800, Peng Fan (OSS) wrote:
> From: Dong Aisheng <aisheng.dong@nxp.com>
> 
> Currently the is_iomem is a random value in the stack which may
> be default to true even on those platforms that not use iomem to
> store firmware.
> 
> Cc: Bjorn Andersson <bjorn.andersson@linaro.org>
> Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
> Fixes: 40df0a91b2a5 ("remoteproc: add is_iomem to da_to_va")
> Reviewed-and-tested-by: Peng Fan <peng.fan@nxp.com>
> Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
> Signed-off-by: Peng Fan <peng.fan@nxp.com>
> ---
>  drivers/remoteproc/remoteproc_coredump.c   | 2 +-
>  drivers/remoteproc/remoteproc_elf_loader.c | 2 +-
>  2 files changed, 2 insertions(+), 2 deletions(-)
> 

Applied

> diff --git a/drivers/remoteproc/remoteproc_coredump.c b/drivers/remoteproc/remoteproc_coredump.c
> index aee657cc08c6a..c892f433a323e 100644
> --- a/drivers/remoteproc/remoteproc_coredump.c
> +++ b/drivers/remoteproc/remoteproc_coredump.c
> @@ -152,8 +152,8 @@ static void rproc_copy_segment(struct rproc *rproc, void *dest,
>  			       struct rproc_dump_segment *segment,
>  			       size_t offset, size_t size)
>  {
> +	bool is_iomem = false;
>  	void *ptr;
> -	bool is_iomem;
>  
>  	if (segment->dump) {
>  		segment->dump(rproc, segment, dest, offset, size);
> diff --git a/drivers/remoteproc/remoteproc_elf_loader.c b/drivers/remoteproc/remoteproc_elf_loader.c
> index 44e7f9308f4bc..d635d19a5aa8a 100644
> --- a/drivers/remoteproc/remoteproc_elf_loader.c
> +++ b/drivers/remoteproc/remoteproc_elf_loader.c
> @@ -178,8 +178,8 @@ int rproc_elf_load_segments(struct rproc *rproc, const struct firmware *fw)
>  		u64 filesz = elf_phdr_get_p_filesz(class, phdr);
>  		u64 offset = elf_phdr_get_p_offset(class, phdr);
>  		u32 type = elf_phdr_get_p_type(class, phdr);
> +		bool is_iomem = false;
>  		void *ptr;
> -		bool is_iomem;
>  
>  		if (type != PT_LOAD)
>  			continue;
> -- 
> 2.25.1
> 

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH V4 3/6] remoteproc: imx_rproc: fix TCM io memory type
  2021-09-10  9:06 ` [PATCH V4 3/6] remoteproc: imx_rproc: fix TCM io memory type Peng Fan (OSS)
@ 2021-09-20 16:59   ` Mathieu Poirier
  2021-09-21  2:26     ` Peng Fan
  0 siblings, 1 reply; 12+ messages in thread
From: Mathieu Poirier @ 2021-09-20 16:59 UTC (permalink / raw)
  To: Peng Fan (OSS)
  Cc: ohad, bjorn.andersson, o.rempel, shawnguo, s.hauer, kernel,
	festevam, linux-imx, linux-remoteproc, linux-arm-kernel,
	linux-kernel, aisheng.dong, Peng Fan

On Fri, Sep 10, 2021 at 05:06:18PM +0800, Peng Fan (OSS) wrote:
> From: Dong Aisheng <aisheng.dong@nxp.com>
> 
> is_iomem was introduced in the commit 40df0a91b2a5 ("remoteproc: add
> is_iomem to da_to_va"), but the driver seemed missed to provide the io
> type correctly.
> This patch updates remoteproc driver to indicate the TCM on IMX are io
> memories. Without the change, remoteproc kick will fail.

If the kick fails on all these platforms, why was patch 40df0a91b2a5 ever
submitted at all?  To me this is a serious problem that should have been caught
before it got sent to the mailing list.

I have applied this patch but based on the blatant problems this patchset
underscores, how can I trust future patches coming from NXP?

> 
> Cc: Bjorn Andersson <bjorn.andersson@linaro.org>
> Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
> Cc: Peng Fan <peng.fan@nxp.com>
> Reviewed-and-tested-by: Peng Fan <peng.fan@nxp.com>
> Fixes: 79806d32d5aa ("remoteproc: imx_rproc: support i.MX8MN/P")
> Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
> Signed-off-by: Peng Fan <peng.fan@nxp.com>
> ---
>  drivers/remoteproc/imx_rproc.c | 35 ++++++++++++++++++++--------------
>  1 file changed, 21 insertions(+), 14 deletions(-)
> 
> diff --git a/drivers/remoteproc/imx_rproc.c b/drivers/remoteproc/imx_rproc.c
> index d88f76f5305eb..71dcc6dd32e40 100644
> --- a/drivers/remoteproc/imx_rproc.c
> +++ b/drivers/remoteproc/imx_rproc.c
> @@ -71,6 +71,7 @@ struct imx_rproc_mem {
>  /* att flags */
>  /* M4 own area. Can be mapped at probe */
>  #define ATT_OWN		BIT(1)
> +#define ATT_IOMEM	BIT(2)
>  
>  /* address translation table */
>  struct imx_rproc_att {
> @@ -117,7 +118,7 @@ struct imx_rproc {
>  static const struct imx_rproc_att imx_rproc_att_imx8mn[] = {
>  	/* dev addr , sys addr  , size	    , flags */
>  	/* ITCM   */
> -	{ 0x00000000, 0x007E0000, 0x00020000, ATT_OWN },
> +	{ 0x00000000, 0x007E0000, 0x00020000, ATT_OWN | ATT_IOMEM },
>  	/* OCRAM_S */
>  	{ 0x00180000, 0x00180000, 0x00009000, 0 },
>  	/* OCRAM */
> @@ -131,7 +132,7 @@ static const struct imx_rproc_att imx_rproc_att_imx8mn[] = {
>  	/* DDR (Code) - alias */
>  	{ 0x10000000, 0x40000000, 0x0FFE0000, 0 },
>  	/* DTCM */
> -	{ 0x20000000, 0x00800000, 0x00020000, ATT_OWN },
> +	{ 0x20000000, 0x00800000, 0x00020000, ATT_OWN | ATT_IOMEM },
>  	/* OCRAM_S - alias */
>  	{ 0x20180000, 0x00180000, 0x00008000, ATT_OWN },
>  	/* OCRAM */
> @@ -147,7 +148,7 @@ static const struct imx_rproc_att imx_rproc_att_imx8mn[] = {
>  static const struct imx_rproc_att imx_rproc_att_imx8mq[] = {
>  	/* dev addr , sys addr  , size	    , flags */
>  	/* TCML - alias */
> -	{ 0x00000000, 0x007e0000, 0x00020000, 0 },
> +	{ 0x00000000, 0x007e0000, 0x00020000, ATT_IOMEM},
>  	/* OCRAM_S */
>  	{ 0x00180000, 0x00180000, 0x00008000, 0 },
>  	/* OCRAM */
> @@ -159,9 +160,9 @@ static const struct imx_rproc_att imx_rproc_att_imx8mq[] = {
>  	/* DDR (Code) - alias */
>  	{ 0x10000000, 0x80000000, 0x0FFE0000, 0 },
>  	/* TCML */
> -	{ 0x1FFE0000, 0x007E0000, 0x00020000, ATT_OWN },
> +	{ 0x1FFE0000, 0x007E0000, 0x00020000, ATT_OWN  | ATT_IOMEM},
>  	/* TCMU */
> -	{ 0x20000000, 0x00800000, 0x00020000, ATT_OWN },
> +	{ 0x20000000, 0x00800000, 0x00020000, ATT_OWN  | ATT_IOMEM},
>  	/* OCRAM_S */
>  	{ 0x20180000, 0x00180000, 0x00008000, ATT_OWN },
>  	/* OCRAM */
> @@ -199,12 +200,12 @@ static const struct imx_rproc_att imx_rproc_att_imx7d[] = {
>  	/* OCRAM_PXP (Code) - alias */
>  	{ 0x00940000, 0x00940000, 0x00008000, 0 },
>  	/* TCML (Code) */
> -	{ 0x1FFF8000, 0x007F8000, 0x00008000, ATT_OWN },
> +	{ 0x1FFF8000, 0x007F8000, 0x00008000, ATT_OWN | ATT_IOMEM },
>  	/* DDR (Code) - alias, first part of DDR (Data) */
>  	{ 0x10000000, 0x80000000, 0x0FFF0000, 0 },
>  
>  	/* TCMU (Data) */
> -	{ 0x20000000, 0x00800000, 0x00008000, ATT_OWN },
> +	{ 0x20000000, 0x00800000, 0x00008000, ATT_OWN | ATT_IOMEM },
>  	/* OCRAM (Data) */
>  	{ 0x20200000, 0x00900000, 0x00020000, 0 },
>  	/* OCRAM_EPDC (Data) */
> @@ -218,18 +219,18 @@ static const struct imx_rproc_att imx_rproc_att_imx7d[] = {
>  static const struct imx_rproc_att imx_rproc_att_imx6sx[] = {
>  	/* dev addr , sys addr  , size	    , flags */
>  	/* TCML (M4 Boot Code) - alias */
> -	{ 0x00000000, 0x007F8000, 0x00008000, 0 },
> +	{ 0x00000000, 0x007F8000, 0x00008000, ATT_IOMEM },
>  	/* OCRAM_S (Code) */
>  	{ 0x00180000, 0x008F8000, 0x00004000, 0 },
>  	/* OCRAM_S (Code) - alias */
>  	{ 0x00180000, 0x008FC000, 0x00004000, 0 },
>  	/* TCML (Code) */
> -	{ 0x1FFF8000, 0x007F8000, 0x00008000, ATT_OWN },
> +	{ 0x1FFF8000, 0x007F8000, 0x00008000, ATT_OWN | ATT_IOMEM },
>  	/* DDR (Code) - alias, first part of DDR (Data) */
>  	{ 0x10000000, 0x80000000, 0x0FFF8000, 0 },
>  
>  	/* TCMU (Data) */
> -	{ 0x20000000, 0x00800000, 0x00008000, ATT_OWN },
> +	{ 0x20000000, 0x00800000, 0x00008000, ATT_OWN | ATT_IOMEM },
>  	/* OCRAM_S (Data) - alias? */
>  	{ 0x208F8000, 0x008F8000, 0x00004000, 0 },
>  	/* DDR (Data) */
> @@ -341,7 +342,7 @@ static int imx_rproc_stop(struct rproc *rproc)
>  }
>  
>  static int imx_rproc_da_to_sys(struct imx_rproc *priv, u64 da,
> -			       size_t len, u64 *sys)
> +			       size_t len, u64 *sys, bool *is_iomem)
>  {
>  	const struct imx_rproc_dcfg *dcfg = priv->dcfg;
>  	int i;
> @@ -354,6 +355,8 @@ static int imx_rproc_da_to_sys(struct imx_rproc *priv, u64 da,
>  			unsigned int offset = da - att->da;
>  
>  			*sys = att->sa + offset;
> +			if (is_iomem)
> +				*is_iomem = att->flags & ATT_IOMEM;
>  			return 0;
>  		}
>  	}
> @@ -377,7 +380,7 @@ static void *imx_rproc_da_to_va(struct rproc *rproc, u64 da, size_t len, bool *i
>  	 * On device side we have many aliases, so we need to convert device
>  	 * address (M4) to system bus address first.
>  	 */
> -	if (imx_rproc_da_to_sys(priv, da, len, &sys))
> +	if (imx_rproc_da_to_sys(priv, da, len, &sys, is_iomem))
>  		return NULL;
>  
>  	for (i = 0; i < IMX_RPROC_MEM_MAX; i++) {
> @@ -553,8 +556,12 @@ static int imx_rproc_addr_init(struct imx_rproc *priv,
>  		if (b >= IMX_RPROC_MEM_MAX)
>  			break;
>  
> -		priv->mem[b].cpu_addr = devm_ioremap(&pdev->dev,
> -						     att->sa, att->size);
> +		if (att->flags & ATT_IOMEM)
> +			priv->mem[b].cpu_addr = devm_ioremap(&pdev->dev,
> +							     att->sa, att->size);
> +		else
> +			priv->mem[b].cpu_addr = devm_ioremap_wc(&pdev->dev,
> +								att->sa, att->size);
>  		if (!priv->mem[b].cpu_addr) {
>  			dev_err(dev, "failed to remap %#x bytes from %#x\n", att->size, att->sa);
>  			return -ENOMEM;
> -- 
> 2.25.1
> 

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH V4 6/6] remoteproc: imx_rproc: change to ioremap_wc for dram
  2021-09-10  9:06 ` [PATCH V4 6/6] remoteproc: imx_rproc: change to ioremap_wc for dram Peng Fan (OSS)
@ 2021-09-20 17:00   ` Mathieu Poirier
  0 siblings, 0 replies; 12+ messages in thread
From: Mathieu Poirier @ 2021-09-20 17:00 UTC (permalink / raw)
  To: Peng Fan (OSS)
  Cc: ohad, bjorn.andersson, o.rempel, shawnguo, s.hauer, kernel,
	festevam, linux-imx, linux-remoteproc, linux-arm-kernel,
	linux-kernel, aisheng.dong, Peng Fan

On Fri, Sep 10, 2021 at 05:06:21PM +0800, Peng Fan (OSS) wrote:
> From: Dong Aisheng <aisheng.dong@nxp.com>
> 
> DRAM is not io memory, so changed to ioremap_wc. This is also
> aligned with core io accessories. e.g. memcpy/memset and cpu direct
> access.
> 
> Cc: Bjorn Andersson <bjorn.andersson@linaro.org>
> Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
> Cc: Peng Fan <peng.fan@nxp.com>
> Reviewed-and-tested-by: Peng Fan <peng.fan@nxp.com>
> Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
> Signed-off-by: Peng Fan <peng.fan@nxp.com>
> ---
>  drivers/remoteproc/imx_rproc.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)

I have applied patches 4, 5 and 6 of this set.

> 
> diff --git a/drivers/remoteproc/imx_rproc.c b/drivers/remoteproc/imx_rproc.c
> index ff620688fad94..4ae416ba50807 100644
> --- a/drivers/remoteproc/imx_rproc.c
> +++ b/drivers/remoteproc/imx_rproc.c
> @@ -597,7 +597,7 @@ static int imx_rproc_addr_init(struct imx_rproc *priv,
>  			break;
>  
>  		/* Not use resource version, because we might share region */
> -		priv->mem[b].cpu_addr = devm_ioremap(&pdev->dev, res.start, resource_size(&res));
> +		priv->mem[b].cpu_addr = devm_ioremap_wc(&pdev->dev, res.start, resource_size(&res));
>  		if (!priv->mem[b].cpu_addr) {
>  			dev_err(dev, "failed to remap %pr\n", &res);
>  			return -ENOMEM;
> -- 
> 2.25.1
> 

^ permalink raw reply	[flat|nested] 12+ messages in thread

* RE: [PATCH V4 3/6] remoteproc: imx_rproc: fix TCM io memory type
  2021-09-20 16:59   ` Mathieu Poirier
@ 2021-09-21  2:26     ` Peng Fan
  0 siblings, 0 replies; 12+ messages in thread
From: Peng Fan @ 2021-09-21  2:26 UTC (permalink / raw)
  To: Mathieu Poirier, Peng Fan (OSS)
  Cc: ohad, bjorn.andersson, o.rempel, shawnguo, s.hauer, kernel,
	festevam, dl-linux-imx, linux-remoteproc, linux-arm-kernel,
	linux-kernel, Aisheng Dong

> Subject: Re: [PATCH V4 3/6] remoteproc: imx_rproc: fix TCM io memory type
> 
> On Fri, Sep 10, 2021 at 05:06:18PM +0800, Peng Fan (OSS) wrote:
> > From: Dong Aisheng <aisheng.dong@nxp.com>
> >
> > is_iomem was introduced in the commit 40df0a91b2a5 ("remoteproc: add
> > is_iomem to da_to_va"), but the driver seemed missed to provide the io
> > type correctly.
> > This patch updates remoteproc driver to indicate the TCM on IMX are io
> > memories. Without the change, remoteproc kick will fail.
> 
> If the kick fails on all these platforms, why was patch 40df0a91b2a5 ever
> submitted at all?  To me this is a serious problem that should have been
> caught before it got sent to the mailing list.

I know any explanation is pale and feeble. It is shame on me that introduce
the issue.

> 
> I have applied this patch but based on the blatant problems this patchset
> underscores, how can I trust future patches coming from NXP?

There are some differences between NXP 5.10 and upstream remoteproc,
some prerequisites are not ready in upstream, so I move upstream code
to replace NXP 5.10 remoteproc to test in the beginning, there should be
some issues in my test or else. I'll take care in future and build reputation.

Thanks,
Peng.

> 
> >
> > Cc: Bjorn Andersson <bjorn.andersson@linaro.org>
> > Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
> > Cc: Peng Fan <peng.fan@nxp.com>
> > Reviewed-and-tested-by: Peng Fan <peng.fan@nxp.com>
> > Fixes: 79806d32d5aa ("remoteproc: imx_rproc: support i.MX8MN/P")
> > Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
> > Signed-off-by: Peng Fan <peng.fan@nxp.com>
> > ---
> >  drivers/remoteproc/imx_rproc.c | 35
> > ++++++++++++++++++++--------------
> >  1 file changed, 21 insertions(+), 14 deletions(-)
> >
> > diff --git a/drivers/remoteproc/imx_rproc.c
> > b/drivers/remoteproc/imx_rproc.c index d88f76f5305eb..71dcc6dd32e40
> > 100644
> > --- a/drivers/remoteproc/imx_rproc.c
> > +++ b/drivers/remoteproc/imx_rproc.c
> > @@ -71,6 +71,7 @@ struct imx_rproc_mem {
> >  /* att flags */
> >  /* M4 own area. Can be mapped at probe */
> >  #define ATT_OWN		BIT(1)
> > +#define ATT_IOMEM	BIT(2)
> >
> >  /* address translation table */
> >  struct imx_rproc_att {
> > @@ -117,7 +118,7 @@ struct imx_rproc {  static const struct
> > imx_rproc_att imx_rproc_att_imx8mn[] = {
> >  	/* dev addr , sys addr  , size	    , flags */
> >  	/* ITCM   */
> > -	{ 0x00000000, 0x007E0000, 0x00020000, ATT_OWN },
> > +	{ 0x00000000, 0x007E0000, 0x00020000, ATT_OWN | ATT_IOMEM },
> >  	/* OCRAM_S */
> >  	{ 0x00180000, 0x00180000, 0x00009000, 0 },
> >  	/* OCRAM */
> > @@ -131,7 +132,7 @@ static const struct imx_rproc_att
> imx_rproc_att_imx8mn[] = {
> >  	/* DDR (Code) - alias */
> >  	{ 0x10000000, 0x40000000, 0x0FFE0000, 0 },
> >  	/* DTCM */
> > -	{ 0x20000000, 0x00800000, 0x00020000, ATT_OWN },
> > +	{ 0x20000000, 0x00800000, 0x00020000, ATT_OWN | ATT_IOMEM },
> >  	/* OCRAM_S - alias */
> >  	{ 0x20180000, 0x00180000, 0x00008000, ATT_OWN },
> >  	/* OCRAM */
> > @@ -147,7 +148,7 @@ static const struct imx_rproc_att
> > imx_rproc_att_imx8mn[] = {  static const struct imx_rproc_att
> imx_rproc_att_imx8mq[] = {
> >  	/* dev addr , sys addr  , size	    , flags */
> >  	/* TCML - alias */
> > -	{ 0x00000000, 0x007e0000, 0x00020000, 0 },
> > +	{ 0x00000000, 0x007e0000, 0x00020000, ATT_IOMEM},
> >  	/* OCRAM_S */
> >  	{ 0x00180000, 0x00180000, 0x00008000, 0 },
> >  	/* OCRAM */
> > @@ -159,9 +160,9 @@ static const struct imx_rproc_att
> imx_rproc_att_imx8mq[] = {
> >  	/* DDR (Code) - alias */
> >  	{ 0x10000000, 0x80000000, 0x0FFE0000, 0 },
> >  	/* TCML */
> > -	{ 0x1FFE0000, 0x007E0000, 0x00020000, ATT_OWN },
> > +	{ 0x1FFE0000, 0x007E0000, 0x00020000, ATT_OWN  | ATT_IOMEM},
> >  	/* TCMU */
> > -	{ 0x20000000, 0x00800000, 0x00020000, ATT_OWN },
> > +	{ 0x20000000, 0x00800000, 0x00020000, ATT_OWN  | ATT_IOMEM},
> >  	/* OCRAM_S */
> >  	{ 0x20180000, 0x00180000, 0x00008000, ATT_OWN },
> >  	/* OCRAM */
> > @@ -199,12 +200,12 @@ static const struct imx_rproc_att
> imx_rproc_att_imx7d[] = {
> >  	/* OCRAM_PXP (Code) - alias */
> >  	{ 0x00940000, 0x00940000, 0x00008000, 0 },
> >  	/* TCML (Code) */
> > -	{ 0x1FFF8000, 0x007F8000, 0x00008000, ATT_OWN },
> > +	{ 0x1FFF8000, 0x007F8000, 0x00008000, ATT_OWN | ATT_IOMEM },
> >  	/* DDR (Code) - alias, first part of DDR (Data) */
> >  	{ 0x10000000, 0x80000000, 0x0FFF0000, 0 },
> >
> >  	/* TCMU (Data) */
> > -	{ 0x20000000, 0x00800000, 0x00008000, ATT_OWN },
> > +	{ 0x20000000, 0x00800000, 0x00008000, ATT_OWN | ATT_IOMEM },
> >  	/* OCRAM (Data) */
> >  	{ 0x20200000, 0x00900000, 0x00020000, 0 },
> >  	/* OCRAM_EPDC (Data) */
> > @@ -218,18 +219,18 @@ static const struct imx_rproc_att
> > imx_rproc_att_imx7d[] = {  static const struct imx_rproc_att
> imx_rproc_att_imx6sx[] = {
> >  	/* dev addr , sys addr  , size	    , flags */
> >  	/* TCML (M4 Boot Code) - alias */
> > -	{ 0x00000000, 0x007F8000, 0x00008000, 0 },
> > +	{ 0x00000000, 0x007F8000, 0x00008000, ATT_IOMEM },
> >  	/* OCRAM_S (Code) */
> >  	{ 0x00180000, 0x008F8000, 0x00004000, 0 },
> >  	/* OCRAM_S (Code) - alias */
> >  	{ 0x00180000, 0x008FC000, 0x00004000, 0 },
> >  	/* TCML (Code) */
> > -	{ 0x1FFF8000, 0x007F8000, 0x00008000, ATT_OWN },
> > +	{ 0x1FFF8000, 0x007F8000, 0x00008000, ATT_OWN | ATT_IOMEM },
> >  	/* DDR (Code) - alias, first part of DDR (Data) */
> >  	{ 0x10000000, 0x80000000, 0x0FFF8000, 0 },
> >
> >  	/* TCMU (Data) */
> > -	{ 0x20000000, 0x00800000, 0x00008000, ATT_OWN },
> > +	{ 0x20000000, 0x00800000, 0x00008000, ATT_OWN | ATT_IOMEM },
> >  	/* OCRAM_S (Data) - alias? */
> >  	{ 0x208F8000, 0x008F8000, 0x00004000, 0 },
> >  	/* DDR (Data) */
> > @@ -341,7 +342,7 @@ static int imx_rproc_stop(struct rproc *rproc)  }
> >
> >  static int imx_rproc_da_to_sys(struct imx_rproc *priv, u64 da,
> > -			       size_t len, u64 *sys)
> > +			       size_t len, u64 *sys, bool *is_iomem)
> >  {
> >  	const struct imx_rproc_dcfg *dcfg = priv->dcfg;
> >  	int i;
> > @@ -354,6 +355,8 @@ static int imx_rproc_da_to_sys(struct imx_rproc
> *priv, u64 da,
> >  			unsigned int offset = da - att->da;
> >
> >  			*sys = att->sa + offset;
> > +			if (is_iomem)
> > +				*is_iomem = att->flags & ATT_IOMEM;
> >  			return 0;
> >  		}
> >  	}
> > @@ -377,7 +380,7 @@ static void *imx_rproc_da_to_va(struct rproc
> *rproc, u64 da, size_t len, bool *i
> >  	 * On device side we have many aliases, so we need to convert device
> >  	 * address (M4) to system bus address first.
> >  	 */
> > -	if (imx_rproc_da_to_sys(priv, da, len, &sys))
> > +	if (imx_rproc_da_to_sys(priv, da, len, &sys, is_iomem))
> >  		return NULL;
> >
> >  	for (i = 0; i < IMX_RPROC_MEM_MAX; i++) { @@ -553,8 +556,12 @@
> > static int imx_rproc_addr_init(struct imx_rproc *priv,
> >  		if (b >= IMX_RPROC_MEM_MAX)
> >  			break;
> >
> > -		priv->mem[b].cpu_addr = devm_ioremap(&pdev->dev,
> > -						     att->sa, att->size);
> > +		if (att->flags & ATT_IOMEM)
> > +			priv->mem[b].cpu_addr = devm_ioremap(&pdev->dev,
> > +							     att->sa, att->size);
> > +		else
> > +			priv->mem[b].cpu_addr = devm_ioremap_wc(&pdev->dev,
> > +								att->sa, att->size);
> >  		if (!priv->mem[b].cpu_addr) {
> >  			dev_err(dev, "failed to remap %#x bytes from %#x\n", att->size,
> att->sa);
> >  			return -ENOMEM;
> > --
> > 2.25.1
> >

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2021-09-21  3:17 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-10  9:06 [PATCH V4 0/6] remoteproc: elf_loader and imx fix Peng Fan (OSS)
2021-09-10  9:06 ` [PATCH V4 1/6] remoteproc: elf_loader: fix loading segment when is_iomem true Peng Fan (OSS)
2021-09-20 16:23   ` Mathieu Poirier
2021-09-10  9:06 ` [PATCH V4 2/6] remoteproc: fix the wrong default value of is_iomem Peng Fan (OSS)
2021-09-20 16:54   ` Mathieu Poirier
2021-09-10  9:06 ` [PATCH V4 3/6] remoteproc: imx_rproc: fix TCM io memory type Peng Fan (OSS)
2021-09-20 16:59   ` Mathieu Poirier
2021-09-21  2:26     ` Peng Fan
2021-09-10  9:06 ` [PATCH V4 4/6] remoteproc: imx_rproc: fix ignoring mapping vdev regions Peng Fan (OSS)
2021-09-10  9:06 ` [PATCH V4 5/6] remoteproc: imx_rproc: fix rsc-table name Peng Fan (OSS)
2021-09-10  9:06 ` [PATCH V4 6/6] remoteproc: imx_rproc: change to ioremap_wc for dram Peng Fan (OSS)
2021-09-20 17:00   ` Mathieu Poirier

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).