All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH V2 1/5] remoteproc: fix the wrong default value of is_iomem
@ 2021-07-07  9:40 ` Dong Aisheng
  0 siblings, 0 replies; 26+ messages in thread
From: Dong Aisheng @ 2021-07-07  9:40 UTC (permalink / raw)
  To: linux-remoteproc
  Cc: linux-arm-kernel, ohad, dongas86, bjorn.andersson,
	mathieu.poirier, Dong Aisheng, Peng Fan

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>
Cc: Peng Fan <peng.fan@nxp.com>
Fixes: 40df0a91b2a5 ("remoteproc: add is_iomem to da_to_va")
Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
---
v1->v2:
 * update rproc_copy_segment as well
---
 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 aee657cc08c6..c892f433a323 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 e8078efb3dec..3cd1798f17a3 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] 26+ messages in thread

* [PATCH V2 1/5] remoteproc: fix the wrong default value of is_iomem
@ 2021-07-07  9:40 ` Dong Aisheng
  0 siblings, 0 replies; 26+ messages in thread
From: Dong Aisheng @ 2021-07-07  9:40 UTC (permalink / raw)
  To: linux-remoteproc
  Cc: linux-arm-kernel, ohad, dongas86, bjorn.andersson,
	mathieu.poirier, Dong Aisheng, Peng Fan

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>
Cc: Peng Fan <peng.fan@nxp.com>
Fixes: 40df0a91b2a5 ("remoteproc: add is_iomem to da_to_va")
Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
---
v1->v2:
 * update rproc_copy_segment as well
---
 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 aee657cc08c6..c892f433a323 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 e8078efb3dec..3cd1798f17a3 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


_______________________________________________
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] 26+ messages in thread

* [PATCH V2 2/5] remoteproc: imx_rproc: fix TCM io memory type
  2021-07-07  9:40 ` Dong Aisheng
@ 2021-07-07  9:40   ` Dong Aisheng
  -1 siblings, 0 replies; 26+ messages in thread
From: Dong Aisheng @ 2021-07-07  9:40 UTC (permalink / raw)
  To: linux-remoteproc
  Cc: linux-arm-kernel, ohad, dongas86, bjorn.andersson,
	mathieu.poirier, Dong Aisheng, Peng Fan

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, remoteroc kick will fail.

Cc: Bjorn Andersson <bjorn.andersson@linaro.org>
Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
Cc: Peng Fan <peng.fan@nxp.com>
Fixes: d59eedc0e408 ("remoteproc: imx_rproc: support i.MX8ULP")
Fixes: 79806d32d5aa ("remoteproc: imx_rproc: support i.MX8MN/P")
Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
---
ChangeLog:
v1->v2:
 * using ioremap_wc for non TCM memory
---
 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 d88f76f5305e..71dcc6dd32e4 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] 26+ messages in thread

* [PATCH V2 2/5] remoteproc: imx_rproc: fix TCM io memory type
@ 2021-07-07  9:40   ` Dong Aisheng
  0 siblings, 0 replies; 26+ messages in thread
From: Dong Aisheng @ 2021-07-07  9:40 UTC (permalink / raw)
  To: linux-remoteproc
  Cc: linux-arm-kernel, ohad, dongas86, bjorn.andersson,
	mathieu.poirier, Dong Aisheng, Peng Fan

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, remoteroc kick will fail.

Cc: Bjorn Andersson <bjorn.andersson@linaro.org>
Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
Cc: Peng Fan <peng.fan@nxp.com>
Fixes: d59eedc0e408 ("remoteproc: imx_rproc: support i.MX8ULP")
Fixes: 79806d32d5aa ("remoteproc: imx_rproc: support i.MX8MN/P")
Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
---
ChangeLog:
v1->v2:
 * using ioremap_wc for non TCM memory
---
 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 d88f76f5305e..71dcc6dd32e4 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


_______________________________________________
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] 26+ messages in thread

* [PATCH V2 3/5] remoteproc: imx_rproc: fix ignoring mapping vdev regions
  2021-07-07  9:40 ` Dong Aisheng
@ 2021-07-07  9:40   ` Dong Aisheng
  -1 siblings, 0 replies; 26+ messages in thread
From: Dong Aisheng @ 2021-07-07  9:40 UTC (permalink / raw)
  To: linux-remoteproc
  Cc: linux-arm-kernel, ohad, dongas86, bjorn.andersson,
	mathieu.poirier, Dong Aisheng, Peng Fan

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-by: Peng Fan <peng.fan@nxp.com>
Signed-off-by: Dong Aisheng <aisheng.dong@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 71dcc6dd32e4..abfeac0b1738 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] 26+ messages in thread

* [PATCH V2 3/5] remoteproc: imx_rproc: fix ignoring mapping vdev regions
@ 2021-07-07  9:40   ` Dong Aisheng
  0 siblings, 0 replies; 26+ messages in thread
From: Dong Aisheng @ 2021-07-07  9:40 UTC (permalink / raw)
  To: linux-remoteproc
  Cc: linux-arm-kernel, ohad, dongas86, bjorn.andersson,
	mathieu.poirier, Dong Aisheng, Peng Fan

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-by: Peng Fan <peng.fan@nxp.com>
Signed-off-by: Dong Aisheng <aisheng.dong@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 71dcc6dd32e4..abfeac0b1738 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


_______________________________________________
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] 26+ messages in thread

* [PATCH V2 4/5] remoteproc: imx_rproc: fix rsc-table name
  2021-07-07  9:40 ` Dong Aisheng
@ 2021-07-07  9:40   ` Dong Aisheng
  -1 siblings, 0 replies; 26+ messages in thread
From: Dong Aisheng @ 2021-07-07  9:40 UTC (permalink / raw)
  To: linux-remoteproc
  Cc: linux-arm-kernel, ohad, dongas86, bjorn.andersson,
	mathieu.poirier, Dong Aisheng, Peng Fan

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-by: Peng Fan <peng.fan@nxp.com>
Signed-off-by: Dong Aisheng <aisheng.dong@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 abfeac0b1738..ff620688fad9 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] 26+ messages in thread

* [PATCH V2 4/5] remoteproc: imx_rproc: fix rsc-table name
@ 2021-07-07  9:40   ` Dong Aisheng
  0 siblings, 0 replies; 26+ messages in thread
From: Dong Aisheng @ 2021-07-07  9:40 UTC (permalink / raw)
  To: linux-remoteproc
  Cc: linux-arm-kernel, ohad, dongas86, bjorn.andersson,
	mathieu.poirier, Dong Aisheng, Peng Fan

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-by: Peng Fan <peng.fan@nxp.com>
Signed-off-by: Dong Aisheng <aisheng.dong@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 abfeac0b1738..ff620688fad9 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


_______________________________________________
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] 26+ messages in thread

* [PATCH V2 5/5] remoteproc: imx_rproc: change to ioremap_wc for dram
  2021-07-07  9:40 ` Dong Aisheng
@ 2021-07-07  9:40   ` Dong Aisheng
  -1 siblings, 0 replies; 26+ messages in thread
From: Dong Aisheng @ 2021-07-07  9:40 UTC (permalink / raw)
  To: linux-remoteproc
  Cc: linux-arm-kernel, ohad, dongas86, bjorn.andersson,
	mathieu.poirier, Dong Aisheng, Peng Fan

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>
Fixes: 5e4c1243071d ("remoteproc: imx_rproc: support remote cores booted before Linux Kernel")
Reviewed-by: Peng Fan <peng.fan@nxp.com>
Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
---
v1->v2:
 * new patch
---
 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 ff620688fad9..4ae416ba5080 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] 26+ messages in thread

* [PATCH V2 5/5] remoteproc: imx_rproc: change to ioremap_wc for dram
@ 2021-07-07  9:40   ` Dong Aisheng
  0 siblings, 0 replies; 26+ messages in thread
From: Dong Aisheng @ 2021-07-07  9:40 UTC (permalink / raw)
  To: linux-remoteproc
  Cc: linux-arm-kernel, ohad, dongas86, bjorn.andersson,
	mathieu.poirier, Dong Aisheng, Peng Fan

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>
Fixes: 5e4c1243071d ("remoteproc: imx_rproc: support remote cores booted before Linux Kernel")
Reviewed-by: Peng Fan <peng.fan@nxp.com>
Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
---
v1->v2:
 * new patch
---
 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 ff620688fad9..4ae416ba5080 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


_______________________________________________
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] 26+ messages in thread

* Re: [PATCH V2 5/5] remoteproc: imx_rproc: change to ioremap_wc for dram
  2021-07-07  9:40   ` Dong Aisheng
@ 2021-07-08  8:12     ` Dong Aisheng
  -1 siblings, 0 replies; 26+ messages in thread
From: Dong Aisheng @ 2021-07-08  8:12 UTC (permalink / raw)
  To: Dong Aisheng
  Cc: linux-remoteproc,
	moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, ohad,
	bjorn.andersson, mathieu.poirier, Peng Fan

On Wed, Jul 7, 2021 at 5:41 PM Dong Aisheng <aisheng.dong@nxp.com> wrote:
>
> 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>

[...]

> Fixes: 5e4c1243071d ("remoteproc: imx_rproc: support remote cores booted before Linux Kernel")
> Reviewed-by: Peng Fan <peng.fan@nxp.com>

Above two lines were added by mistake. (copied from patch 4)
I'm going to wait for review comments first and resend with changes if any.

Regards
Aisheng

> Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
> ---
> v1->v2:
>  * new patch
> ---
>  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 ff620688fad9..4ae416ba5080 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] 26+ messages in thread

* Re: [PATCH V2 5/5] remoteproc: imx_rproc: change to ioremap_wc for dram
@ 2021-07-08  8:12     ` Dong Aisheng
  0 siblings, 0 replies; 26+ messages in thread
From: Dong Aisheng @ 2021-07-08  8:12 UTC (permalink / raw)
  To: Dong Aisheng
  Cc: linux-remoteproc,
	moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, ohad,
	bjorn.andersson, mathieu.poirier, Peng Fan

On Wed, Jul 7, 2021 at 5:41 PM Dong Aisheng <aisheng.dong@nxp.com> wrote:
>
> 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>

[...]

> Fixes: 5e4c1243071d ("remoteproc: imx_rproc: support remote cores booted before Linux Kernel")
> Reviewed-by: Peng Fan <peng.fan@nxp.com>

Above two lines were added by mistake. (copied from patch 4)
I'm going to wait for review comments first and resend with changes if any.

Regards
Aisheng

> Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
> ---
> v1->v2:
>  * new patch
> ---
>  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 ff620688fad9..4ae416ba5080 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
>

_______________________________________________
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] 26+ messages in thread

* Re: [PATCH V2 5/5] remoteproc: imx_rproc: change to ioremap_wc for dram
  2021-07-07  9:40   ` Dong Aisheng
@ 2021-07-13 17:06     ` Mathieu Poirier
  -1 siblings, 0 replies; 26+ messages in thread
From: Mathieu Poirier @ 2021-07-13 17:06 UTC (permalink / raw)
  To: Dong Aisheng
  Cc: linux-remoteproc, linux-arm-kernel, ohad, dongas86,
	bjorn.andersson, Peng Fan

On Wed, Jul 07, 2021 at 05:40:33PM +0800, Dong Aisheng wrote:
> 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>
> Fixes: 5e4c1243071d ("remoteproc: imx_rproc: support remote cores booted before Linux Kernel")
> Reviewed-by: Peng Fan <peng.fan@nxp.com>
> Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
> ---
> v1->v2:
>  * new patch

It's a new patch and yet Peng's RB tag is already on it...

> ---
>  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 ff620688fad9..4ae416ba5080 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));

How was it working before?  Will it really work for all platforms and was this
extensively tested?

Peng - I will need an explicit reply from you that you are in agreement with
this change.  I will also need you to review patch 01 and 02 of this set.

Thanks,
Mathieu

>  		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] 26+ messages in thread

* Re: [PATCH V2 5/5] remoteproc: imx_rproc: change to ioremap_wc for dram
@ 2021-07-13 17:06     ` Mathieu Poirier
  0 siblings, 0 replies; 26+ messages in thread
From: Mathieu Poirier @ 2021-07-13 17:06 UTC (permalink / raw)
  To: Dong Aisheng
  Cc: linux-remoteproc, linux-arm-kernel, ohad, dongas86,
	bjorn.andersson, Peng Fan

On Wed, Jul 07, 2021 at 05:40:33PM +0800, Dong Aisheng wrote:
> 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>
> Fixes: 5e4c1243071d ("remoteproc: imx_rproc: support remote cores booted before Linux Kernel")
> Reviewed-by: Peng Fan <peng.fan@nxp.com>
> Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
> ---
> v1->v2:
>  * new patch

It's a new patch and yet Peng's RB tag is already on it...

> ---
>  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 ff620688fad9..4ae416ba5080 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));

How was it working before?  Will it really work for all platforms and was this
extensively tested?

Peng - I will need an explicit reply from you that you are in agreement with
this change.  I will also need you to review patch 01 and 02 of this set.

Thanks,
Mathieu

>  		if (!priv->mem[b].cpu_addr) {
>  			dev_err(dev, "failed to remap %pr\n", &res);
>  			return -ENOMEM;
> -- 
> 2.25.1
> 

_______________________________________________
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] 26+ messages in thread

* RE: [PATCH V2 5/5] remoteproc: imx_rproc: change to ioremap_wc for dram
  2021-07-13 17:06     ` Mathieu Poirier
@ 2021-07-14  0:59       ` Peng Fan
  -1 siblings, 0 replies; 26+ messages in thread
From: Peng Fan @ 2021-07-14  0:59 UTC (permalink / raw)
  To: Mathieu Poirier, Aisheng Dong
  Cc: linux-remoteproc, linux-arm-kernel, ohad, dongas86, bjorn.andersson

Hi Mathieu,

> Subject: Re: [PATCH V2 5/5] remoteproc: imx_rproc: change to ioremap_wc
> for dram
> 
> On Wed, Jul 07, 2021 at 05:40:33PM +0800, Dong Aisheng wrote:
> > 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>
> > Fixes: 5e4c1243071d ("remoteproc: imx_rproc: support remote cores
> > booted before Linux Kernel")
> > Reviewed-by: Peng Fan <peng.fan@nxp.com>
> > Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
> > ---
> > v1->v2:
> >  * new patch
> 
> It's a new patch and yet Peng's RB tag is already on it...

Aisheng's reply in the other email.
"
Above two lines were added by mistake. (copied from patch 4)
I'm going to wait for review comments first and resend with changes if any.

Regards
Aisheng
"

> 
> > ---
> >  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 ff620688fad9..4ae416ba5080
> > 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));
> 
> How was it working before?  

we took all memory used by M-core as io memory, including TCM/SRAM/DRAM.

Will it really work for all platforms and was this
> extensively tested?

Aisheng may confirm, I not test this patchset.

> 
> Peng - I will need an explicit reply from you that you are in agreement with
> this change. 

I not test, but it should work per my understanding.
i.MX TCM area has limitation that not use ioremap_wc, DRAM has no such
limitation. Just think this not deserve a fix tag.

> I will also need you to review patch 01 and 02 of this set.

Sure, I'll review.

Thanks,
Peng.

> 
> Thanks,
> Mathieu
> 
> >  		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] 26+ messages in thread

* RE: [PATCH V2 5/5] remoteproc: imx_rproc: change to ioremap_wc for dram
@ 2021-07-14  0:59       ` Peng Fan
  0 siblings, 0 replies; 26+ messages in thread
From: Peng Fan @ 2021-07-14  0:59 UTC (permalink / raw)
  To: Mathieu Poirier, Aisheng Dong
  Cc: linux-remoteproc, linux-arm-kernel, ohad, dongas86, bjorn.andersson

Hi Mathieu,

> Subject: Re: [PATCH V2 5/5] remoteproc: imx_rproc: change to ioremap_wc
> for dram
> 
> On Wed, Jul 07, 2021 at 05:40:33PM +0800, Dong Aisheng wrote:
> > 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>
> > Fixes: 5e4c1243071d ("remoteproc: imx_rproc: support remote cores
> > booted before Linux Kernel")
> > Reviewed-by: Peng Fan <peng.fan@nxp.com>
> > Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
> > ---
> > v1->v2:
> >  * new patch
> 
> It's a new patch and yet Peng's RB tag is already on it...

Aisheng's reply in the other email.
"
Above two lines were added by mistake. (copied from patch 4)
I'm going to wait for review comments first and resend with changes if any.

Regards
Aisheng
"

> 
> > ---
> >  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 ff620688fad9..4ae416ba5080
> > 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));
> 
> How was it working before?  

we took all memory used by M-core as io memory, including TCM/SRAM/DRAM.

Will it really work for all platforms and was this
> extensively tested?

Aisheng may confirm, I not test this patchset.

> 
> Peng - I will need an explicit reply from you that you are in agreement with
> this change. 

I not test, but it should work per my understanding.
i.MX TCM area has limitation that not use ioremap_wc, DRAM has no such
limitation. Just think this not deserve a fix tag.

> I will also need you to review patch 01 and 02 of this set.

Sure, I'll review.

Thanks,
Peng.

> 
> Thanks,
> Mathieu
> 
> >  		if (!priv->mem[b].cpu_addr) {
> >  			dev_err(dev, "failed to remap %pr\n", &res);
> >  			return -ENOMEM;
> > --
> > 2.25.1
> >

_______________________________________________
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] 26+ messages in thread

* RE: [PATCH V2 1/5] remoteproc: fix the wrong default value of is_iomem
  2021-07-07  9:40 ` Dong Aisheng
@ 2021-07-14  1:01   ` Peng Fan (OSS)
  -1 siblings, 0 replies; 26+ messages in thread
From: Peng Fan (OSS) @ 2021-07-14  1:01 UTC (permalink / raw)
  To: Aisheng Dong, linux-remoteproc
  Cc: linux-arm-kernel, ohad, dongas86, bjorn.andersson, mathieu.poirier

> Subject: [PATCH V2 1/5] remoteproc: fix the wrong default value of is_iomem
> 
> 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>
> Cc: Peng Fan <peng.fan@nxp.com>
> Fixes: 40df0a91b2a5 ("remoteproc: add is_iomem to da_to_va")
> Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
> ---
> v1->v2:
>  * update rproc_copy_segment as well
> ---
>  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 aee657cc08c6..c892f433a323 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 e8078efb3dec..3cd1798f17a3 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;
> --

Reviewed-by: Peng Fan <peng.fan@nxp.com>

> 2.25.1


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

* RE: [PATCH V2 1/5] remoteproc: fix the wrong default value of is_iomem
@ 2021-07-14  1:01   ` Peng Fan (OSS)
  0 siblings, 0 replies; 26+ messages in thread
From: Peng Fan (OSS) @ 2021-07-14  1:01 UTC (permalink / raw)
  To: Aisheng Dong, linux-remoteproc
  Cc: linux-arm-kernel, ohad, dongas86, bjorn.andersson, mathieu.poirier

> Subject: [PATCH V2 1/5] remoteproc: fix the wrong default value of is_iomem
> 
> 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>
> Cc: Peng Fan <peng.fan@nxp.com>
> Fixes: 40df0a91b2a5 ("remoteproc: add is_iomem to da_to_va")
> Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
> ---
> v1->v2:
>  * update rproc_copy_segment as well
> ---
>  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 aee657cc08c6..c892f433a323 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 e8078efb3dec..3cd1798f17a3 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;
> --

Reviewed-by: Peng Fan <peng.fan@nxp.com>

> 2.25.1


_______________________________________________
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] 26+ messages in thread

* RE: [PATCH V2 2/5] remoteproc: imx_rproc: fix TCM io memory type
  2021-07-07  9:40   ` Dong Aisheng
@ 2021-07-14  1:12     ` Peng Fan
  -1 siblings, 0 replies; 26+ messages in thread
From: Peng Fan @ 2021-07-14  1:12 UTC (permalink / raw)
  To: Aisheng Dong, linux-remoteproc
  Cc: linux-arm-kernel, ohad, dongas86, bjorn.andersson, mathieu.poirier

> Subject: [PATCH V2 2/5] remoteproc: imx_rproc: fix TCM io memory type
> 
> 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

missed->missing

> correctly.
> This patch updates remoteproc driver to indicate the TCM on IMX are io
> memories. Without the change, remoteroc kick will fail.

remoteroc->remoteproc

> 
> Cc: Bjorn Andersson <bjorn.andersson@linaro.org>
> Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
> Cc: Peng Fan <peng.fan@nxp.com>
> Fixes: d59eedc0e408 ("remoteproc: imx_rproc: support i.MX8ULP")

Drop this fix. 8ULP only support ROM loaded M33 images, no
chance to let Kernel load M33 image.

> Fixes: 79806d32d5aa ("remoteproc: imx_rproc: support i.MX8MN/P")
> Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
> ---
> ChangeLog:
> v1->v2:
>  * using ioremap_wc for non TCM memory
> ---
>  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 d88f76f5305e..71dcc6dd32e4
> 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;


Besides the upper comments, looks ok to me.
Reviewed-by: Peng Fan <peng.fan@nxp.com>

> --
> 2.25.1


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

* RE: [PATCH V2 2/5] remoteproc: imx_rproc: fix TCM io memory type
@ 2021-07-14  1:12     ` Peng Fan
  0 siblings, 0 replies; 26+ messages in thread
From: Peng Fan @ 2021-07-14  1:12 UTC (permalink / raw)
  To: Aisheng Dong, linux-remoteproc
  Cc: linux-arm-kernel, ohad, dongas86, bjorn.andersson, mathieu.poirier

> Subject: [PATCH V2 2/5] remoteproc: imx_rproc: fix TCM io memory type
> 
> 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

missed->missing

> correctly.
> This patch updates remoteproc driver to indicate the TCM on IMX are io
> memories. Without the change, remoteroc kick will fail.

remoteroc->remoteproc

> 
> Cc: Bjorn Andersson <bjorn.andersson@linaro.org>
> Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
> Cc: Peng Fan <peng.fan@nxp.com>
> Fixes: d59eedc0e408 ("remoteproc: imx_rproc: support i.MX8ULP")

Drop this fix. 8ULP only support ROM loaded M33 images, no
chance to let Kernel load M33 image.

> Fixes: 79806d32d5aa ("remoteproc: imx_rproc: support i.MX8MN/P")
> Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
> ---
> ChangeLog:
> v1->v2:
>  * using ioremap_wc for non TCM memory
> ---
>  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 d88f76f5305e..71dcc6dd32e4
> 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;


Besides the upper comments, looks ok to me.
Reviewed-by: Peng Fan <peng.fan@nxp.com>

> --
> 2.25.1


_______________________________________________
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] 26+ messages in thread

* Re: [PATCH V2 5/5] remoteproc: imx_rproc: change to ioremap_wc for dram
  2021-07-13 17:06     ` Mathieu Poirier
@ 2021-07-14 10:15       ` Dong Aisheng
  -1 siblings, 0 replies; 26+ messages in thread
From: Dong Aisheng @ 2021-07-14 10:15 UTC (permalink / raw)
  To: Mathieu Poirier
  Cc: Dong Aisheng, linux-remoteproc,
	moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE,
	Ohad Ben Cohen, bjorn.andersson, Peng Fan

On Wed, Jul 14, 2021 at 1:06 AM Mathieu Poirier
<mathieu.poirier@linaro.org> wrote:
>
> On Wed, Jul 07, 2021 at 05:40:33PM +0800, Dong Aisheng wrote:
> > 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>
> > Fixes: 5e4c1243071d ("remoteproc: imx_rproc: support remote cores booted before Linux Kernel")
> > Reviewed-by: Peng Fan <peng.fan@nxp.com>
> > Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
> > ---
> > v1->v2:
> >  * new patch
>
> It's a new patch and yet Peng's RB tag is already on it...
>
> > ---
> >  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 ff620688fad9..4ae416ba5080 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));
>
> How was it working before?  Will it really work for all platforms and was this
> extensively tested?

Here it is only used for accessing resource tables in DRAM which is
published by M core.

Why it works before is because:
1. the default memory access in remoteproc core (.e.g memcpy or direct
access by pointer
by CPU) seems also work well even it's device memory type mapped by
devm_ioremap.
e.g. cpu direct access
offset = rproc->table_ptr->offset[i]

2.  It will not work with meset() in rproc_elf_load_segments() which
has cache operations internally.
e.g. arch/arm64/lib/memset.S
However, it's lucky that for IMX cases, the resource table in DRAM are
currently used by early boot
(e.g. uboot/scfw loading M4 firmware), no chance to run into
rproc_elf_load_segments(),
so no issues so far.

Then the question is should we change the mapping type of resource
table mem to normal
memory (ioremap_wc) as remoteproc core are using normal memory accessories?

I guess we should do that, that's how this patch comes out.

Regards
Aisheng

>
> Peng - I will need an explicit reply from you that you are in agreement with
> this change.  I will also need you to review patch 01 and 02 of this set.
>
> Thanks,
> Mathieu
>
> >               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] 26+ messages in thread

* Re: [PATCH V2 5/5] remoteproc: imx_rproc: change to ioremap_wc for dram
@ 2021-07-14 10:15       ` Dong Aisheng
  0 siblings, 0 replies; 26+ messages in thread
From: Dong Aisheng @ 2021-07-14 10:15 UTC (permalink / raw)
  To: Mathieu Poirier
  Cc: Dong Aisheng, linux-remoteproc,
	moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE,
	Ohad Ben Cohen, bjorn.andersson, Peng Fan

On Wed, Jul 14, 2021 at 1:06 AM Mathieu Poirier
<mathieu.poirier@linaro.org> wrote:
>
> On Wed, Jul 07, 2021 at 05:40:33PM +0800, Dong Aisheng wrote:
> > 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>
> > Fixes: 5e4c1243071d ("remoteproc: imx_rproc: support remote cores booted before Linux Kernel")
> > Reviewed-by: Peng Fan <peng.fan@nxp.com>
> > Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
> > ---
> > v1->v2:
> >  * new patch
>
> It's a new patch and yet Peng's RB tag is already on it...
>
> > ---
> >  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 ff620688fad9..4ae416ba5080 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));
>
> How was it working before?  Will it really work for all platforms and was this
> extensively tested?

Here it is only used for accessing resource tables in DRAM which is
published by M core.

Why it works before is because:
1. the default memory access in remoteproc core (.e.g memcpy or direct
access by pointer
by CPU) seems also work well even it's device memory type mapped by
devm_ioremap.
e.g. cpu direct access
offset = rproc->table_ptr->offset[i]

2.  It will not work with meset() in rproc_elf_load_segments() which
has cache operations internally.
e.g. arch/arm64/lib/memset.S
However, it's lucky that for IMX cases, the resource table in DRAM are
currently used by early boot
(e.g. uboot/scfw loading M4 firmware), no chance to run into
rproc_elf_load_segments(),
so no issues so far.

Then the question is should we change the mapping type of resource
table mem to normal
memory (ioremap_wc) as remoteproc core are using normal memory accessories?

I guess we should do that, that's how this patch comes out.

Regards
Aisheng

>
> Peng - I will need an explicit reply from you that you are in agreement with
> this change.  I will also need you to review patch 01 and 02 of this set.
>
> Thanks,
> Mathieu
>
> >               if (!priv->mem[b].cpu_addr) {
> >                       dev_err(dev, "failed to remap %pr\n", &res);
> >                       return -ENOMEM;
> > --
> > 2.25.1
> >

_______________________________________________
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] 26+ messages in thread

* Re: [PATCH V2 5/5] remoteproc: imx_rproc: change to ioremap_wc for dram
  2021-07-14  0:59       ` Peng Fan
@ 2021-07-14 10:21         ` Dong Aisheng
  -1 siblings, 0 replies; 26+ messages in thread
From: Dong Aisheng @ 2021-07-14 10:21 UTC (permalink / raw)
  To: Peng Fan
  Cc: Mathieu Poirier, Aisheng Dong, linux-remoteproc,
	linux-arm-kernel, ohad, bjorn.andersson

On Wed, Jul 14, 2021 at 8:59 AM Peng Fan <peng.fan@nxp.com> wrote:
>
> Hi Mathieu,
>
> > Subject: Re: [PATCH V2 5/5] remoteproc: imx_rproc: change to ioremap_wc
> > for dram
> >
> > On Wed, Jul 07, 2021 at 05:40:33PM +0800, Dong Aisheng wrote:
> > > 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>
> > > Fixes: 5e4c1243071d ("remoteproc: imx_rproc: support remote cores
> > > booted before Linux Kernel")
> > > Reviewed-by: Peng Fan <peng.fan@nxp.com>
> > > Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
> > > ---
> > > v1->v2:
> > >  * new patch
> >
> > It's a new patch and yet Peng's RB tag is already on it...
>
> Aisheng's reply in the other email.
> "
> Above two lines were added by mistake. (copied from patch 4)
> I'm going to wait for review comments first and resend with changes if any.
>
> Regards
> Aisheng
> "
>
> >
> > > ---
> > >  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 ff620688fad9..4ae416ba5080
> > > 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));
> >
> > How was it working before?
>
> we took all memory used by M-core as io memory, including TCM/SRAM/DRAM.
>
> Will it really work for all platforms and was this
> > extensively tested?
>
> Aisheng may confirm, I not test this patchset.
>
> >
> > Peng - I will need an explicit reply from you that you are in agreement with
> > this change.
>
> I not test, but it should work per my understanding.
> i.MX TCM area has limitation that not use ioremap_wc, DRAM has no such
> limitation. Just think this not deserve a fix tag.
>

I tested with MX8MQ, i could find more to test although it should work
theoretically.
Why adding fixes tag is because using normal memory accessories (e.g. memset)
for io memory (device type) may have issues.
Does it make sense?

Regards
Aisheng


> > I will also need you to review patch 01 and 02 of this set.
>
> Sure, I'll review.
>
> Thanks,
> Peng.
>
> >
> > Thanks,
> > Mathieu
> >
> > >             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] 26+ messages in thread

* Re: [PATCH V2 5/5] remoteproc: imx_rproc: change to ioremap_wc for dram
@ 2021-07-14 10:21         ` Dong Aisheng
  0 siblings, 0 replies; 26+ messages in thread
From: Dong Aisheng @ 2021-07-14 10:21 UTC (permalink / raw)
  To: Peng Fan
  Cc: Mathieu Poirier, Aisheng Dong, linux-remoteproc,
	linux-arm-kernel, ohad, bjorn.andersson

On Wed, Jul 14, 2021 at 8:59 AM Peng Fan <peng.fan@nxp.com> wrote:
>
> Hi Mathieu,
>
> > Subject: Re: [PATCH V2 5/5] remoteproc: imx_rproc: change to ioremap_wc
> > for dram
> >
> > On Wed, Jul 07, 2021 at 05:40:33PM +0800, Dong Aisheng wrote:
> > > 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>
> > > Fixes: 5e4c1243071d ("remoteproc: imx_rproc: support remote cores
> > > booted before Linux Kernel")
> > > Reviewed-by: Peng Fan <peng.fan@nxp.com>
> > > Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
> > > ---
> > > v1->v2:
> > >  * new patch
> >
> > It's a new patch and yet Peng's RB tag is already on it...
>
> Aisheng's reply in the other email.
> "
> Above two lines were added by mistake. (copied from patch 4)
> I'm going to wait for review comments first and resend with changes if any.
>
> Regards
> Aisheng
> "
>
> >
> > > ---
> > >  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 ff620688fad9..4ae416ba5080
> > > 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));
> >
> > How was it working before?
>
> we took all memory used by M-core as io memory, including TCM/SRAM/DRAM.
>
> Will it really work for all platforms and was this
> > extensively tested?
>
> Aisheng may confirm, I not test this patchset.
>
> >
> > Peng - I will need an explicit reply from you that you are in agreement with
> > this change.
>
> I not test, but it should work per my understanding.
> i.MX TCM area has limitation that not use ioremap_wc, DRAM has no such
> limitation. Just think this not deserve a fix tag.
>

I tested with MX8MQ, i could find more to test although it should work
theoretically.
Why adding fixes tag is because using normal memory accessories (e.g. memset)
for io memory (device type) may have issues.
Does it make sense?

Regards
Aisheng


> > I will also need you to review patch 01 and 02 of this set.
>
> Sure, I'll review.
>
> Thanks,
> Peng.
>
> >
> > Thanks,
> > Mathieu
> >
> > >             if (!priv->mem[b].cpu_addr) {
> > >                     dev_err(dev, "failed to remap %pr\n", &res);
> > >                     return -ENOMEM;
> > > --
> > > 2.25.1
> > >

_______________________________________________
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] 26+ messages in thread

* Re: [PATCH V2 2/5] remoteproc: imx_rproc: fix TCM io memory type
  2021-07-14  1:12     ` Peng Fan
@ 2021-07-14 10:25       ` Dong Aisheng
  -1 siblings, 0 replies; 26+ messages in thread
From: Dong Aisheng @ 2021-07-14 10:25 UTC (permalink / raw)
  To: Peng Fan
  Cc: Aisheng Dong, linux-remoteproc, linux-arm-kernel, ohad,
	bjorn.andersson, mathieu.poirier

On Wed, Jul 14, 2021 at 9:12 AM Peng Fan <peng.fan@nxp.com> wrote:
>
> > Subject: [PATCH V2 2/5] remoteproc: imx_rproc: fix TCM io memory type
> >
> > 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
>
> missed->missing
>
> > correctly.
> > This patch updates remoteproc driver to indicate the TCM on IMX are io
> > memories. Without the change, remoteroc kick will fail.
>
> remoteroc->remoteproc
>

Will fix, thanks.

> >
> > Cc: Bjorn Andersson <bjorn.andersson@linaro.org>
> > Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
> > Cc: Peng Fan <peng.fan@nxp.com>
> > Fixes: d59eedc0e408 ("remoteproc: imx_rproc: support i.MX8ULP")
>
> Drop this fix. 8ULP only support ROM loaded M33 images, no
> chance to let Kernel load M33 image.

Will drop, thanks

Regards
Aisheng

>
> > Fixes: 79806d32d5aa ("remoteproc: imx_rproc: support i.MX8MN/P")
> > Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
> > ---
> > ChangeLog:
> > v1->v2:
> >  * using ioremap_wc for non TCM memory
> > ---
> >  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 d88f76f5305e..71dcc6dd32e4
> > 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;
>
>
> Besides the upper comments, looks ok to me.
> Reviewed-by: Peng Fan <peng.fan@nxp.com>
>
> > --
> > 2.25.1
>

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

* Re: [PATCH V2 2/5] remoteproc: imx_rproc: fix TCM io memory type
@ 2021-07-14 10:25       ` Dong Aisheng
  0 siblings, 0 replies; 26+ messages in thread
From: Dong Aisheng @ 2021-07-14 10:25 UTC (permalink / raw)
  To: Peng Fan
  Cc: Aisheng Dong, linux-remoteproc, linux-arm-kernel, ohad,
	bjorn.andersson, mathieu.poirier

On Wed, Jul 14, 2021 at 9:12 AM Peng Fan <peng.fan@nxp.com> wrote:
>
> > Subject: [PATCH V2 2/5] remoteproc: imx_rproc: fix TCM io memory type
> >
> > 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
>
> missed->missing
>
> > correctly.
> > This patch updates remoteproc driver to indicate the TCM on IMX are io
> > memories. Without the change, remoteroc kick will fail.
>
> remoteroc->remoteproc
>

Will fix, thanks.

> >
> > Cc: Bjorn Andersson <bjorn.andersson@linaro.org>
> > Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
> > Cc: Peng Fan <peng.fan@nxp.com>
> > Fixes: d59eedc0e408 ("remoteproc: imx_rproc: support i.MX8ULP")
>
> Drop this fix. 8ULP only support ROM loaded M33 images, no
> chance to let Kernel load M33 image.

Will drop, thanks

Regards
Aisheng

>
> > Fixes: 79806d32d5aa ("remoteproc: imx_rproc: support i.MX8MN/P")
> > Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
> > ---
> > ChangeLog:
> > v1->v2:
> >  * using ioremap_wc for non TCM memory
> > ---
> >  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 d88f76f5305e..71dcc6dd32e4
> > 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;
>
>
> Besides the upper comments, looks ok to me.
> Reviewed-by: Peng Fan <peng.fan@nxp.com>
>
> > --
> > 2.25.1
>

_______________________________________________
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] 26+ messages in thread

end of thread, other threads:[~2021-07-14 10:29 UTC | newest]

Thread overview: 26+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-07-07  9:40 [PATCH V2 1/5] remoteproc: fix the wrong default value of is_iomem Dong Aisheng
2021-07-07  9:40 ` Dong Aisheng
2021-07-07  9:40 ` [PATCH V2 2/5] remoteproc: imx_rproc: fix TCM io memory type Dong Aisheng
2021-07-07  9:40   ` Dong Aisheng
2021-07-14  1:12   ` Peng Fan
2021-07-14  1:12     ` Peng Fan
2021-07-14 10:25     ` Dong Aisheng
2021-07-14 10:25       ` Dong Aisheng
2021-07-07  9:40 ` [PATCH V2 3/5] remoteproc: imx_rproc: fix ignoring mapping vdev regions Dong Aisheng
2021-07-07  9:40   ` Dong Aisheng
2021-07-07  9:40 ` [PATCH V2 4/5] remoteproc: imx_rproc: fix rsc-table name Dong Aisheng
2021-07-07  9:40   ` Dong Aisheng
2021-07-07  9:40 ` [PATCH V2 5/5] remoteproc: imx_rproc: change to ioremap_wc for dram Dong Aisheng
2021-07-07  9:40   ` Dong Aisheng
2021-07-08  8:12   ` Dong Aisheng
2021-07-08  8:12     ` Dong Aisheng
2021-07-13 17:06   ` Mathieu Poirier
2021-07-13 17:06     ` Mathieu Poirier
2021-07-14  0:59     ` Peng Fan
2021-07-14  0:59       ` Peng Fan
2021-07-14 10:21       ` Dong Aisheng
2021-07-14 10:21         ` Dong Aisheng
2021-07-14 10:15     ` Dong Aisheng
2021-07-14 10:15       ` Dong Aisheng
2021-07-14  1:01 ` [PATCH V2 1/5] remoteproc: fix the wrong default value of is_iomem Peng Fan (OSS)
2021-07-14  1:01   ` Peng Fan (OSS)

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.