public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [PATCH v2 0/2] android: colibri_imx7: reserve DDR memory for Cortex-M4
@ 2019-12-03 12:04 Igor Opaniuk
  2019-12-03 12:04 ` [PATCH v2 1/2] common: fdt_support: add support for setting usable memory Igor Opaniuk
  2019-12-03 12:04 ` [PATCH v2 2/2] board: colibri_imx7: reserve DDR memory for Cortex-M4 Igor Opaniuk
  0 siblings, 2 replies; 5+ messages in thread
From: Igor Opaniuk @ 2019-12-03 12:04 UTC (permalink / raw)
  To: u-boot

i.MX 7's Cortex-M4 core can run from DDR and uses DDR memory for
the rpmsg communication. Both use cases need a fixed location of
memory reserved. For the rpmsg use case the reserved area needs
to be in sync with the kernel's hardcoded vring descriptor location.

Introduce support for adding linux,usable-memory property to carve
out 1MB of memory in case the M4 core is running. Also make sure
that the i.MX 7 specific rpmsg driver does not get loaded in case
we do not carve out memory.

v2:
- fixed build where CONFIG_ARCH_FIXUP_FDT_MEMORY is not set.

Igor Opaniuk (2):
  common: fdt_support: add support for setting usable memory
  board: colibri_imx7: reserve DDR memory for Cortex-M4

 arch/arm/include/asm/mach-imx/sys_proto.h |  2 ++
 board/toradex/colibri_imx7/colibri_imx7.c | 37 +++++++++++++++++++++++
 common/fdt_support.c                      | 35 +++++++++++++++++++++
 include/fdt_support.h                     |  1 +
 4 files changed, 75 insertions(+)

-- 
2.17.1

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

* [PATCH v2 1/2] common: fdt_support: add support for setting usable memory
  2019-12-03 12:04 [PATCH v2 0/2] android: colibri_imx7: reserve DDR memory for Cortex-M4 Igor Opaniuk
@ 2019-12-03 12:04 ` Igor Opaniuk
  2019-12-03 15:02   ` Joakim Tjernlund
  2019-12-03 12:04 ` [PATCH v2 2/2] board: colibri_imx7: reserve DDR memory for Cortex-M4 Igor Opaniuk
  1 sibling, 1 reply; 5+ messages in thread
From: Igor Opaniuk @ 2019-12-03 12:04 UTC (permalink / raw)
  To: u-boot

From: Igor Opaniuk <igor.opaniuk@toradex.com>

Add support for setting linux,usable-memory property in the memory
node of device tree for the kernel [1].

This property holds a base address and size, describing a
limited region in which memory may be considered available for use by
the kernel. Memory outside of this range is not available for use.

[1] https://www.kernel.org/doc/Documentation/devicetree/bindings/chosen.txt

Signed-off-by: Igor Opaniuk <igor.opaniuk@toradex.com>
Signed-off-by: Sanchayan Maity <maitysanchayan@gmail.com>
Signed-off-by: Stefan Agner <stefan.agner@toradex.com>
Reviewed-by: Oleksandr Suvorov <oleksandr.suvorov@toradex.com>
---

 common/fdt_support.c  | 35 +++++++++++++++++++++++++++++++++++
 include/fdt_support.h |  1 +
 2 files changed, 36 insertions(+)

diff --git a/common/fdt_support.c b/common/fdt_support.c
index 6834399039..02cf5c6241 100644
--- a/common/fdt_support.c
+++ b/common/fdt_support.c
@@ -467,6 +467,41 @@ int fdt_fixup_memory_banks(void *blob, u64 start[], u64 size[], int banks)
 	}
 	return 0;
 }
+
+int fdt_set_usable_memory(void *blob, u64 start[], u64 size[], int areas)
+{
+	int err, nodeoffset;
+	int len;
+	u8 tmp[8 * 16]; /* Up to 64-bit address + 64-bit size */
+
+	if (areas > 8) {
+		printf("%s: num areas %d exceeds hardcoded limit %d\n",
+		       __func__, areas, 8);
+		return -1;
+	}
+
+	err = fdt_check_header(blob);
+	if (err < 0) {
+		printf("%s: %s\n", __func__, fdt_strerror(err));
+		return err;
+	}
+
+	/* find or create "/memory" node. */
+	nodeoffset = fdt_find_or_add_subnode(blob, 0, "memory");
+	if (nodeoffset < 0)
+		return nodeoffset;
+
+	len = fdt_pack_reg(blob, tmp, start, size, areas);
+
+	err = fdt_setprop(blob, nodeoffset, "linux,usable-memory", tmp, len);
+	if (err < 0) {
+		printf("WARNING: could not set %s %s.\n",
+		       "reg", fdt_strerror(err));
+		return err;
+	}
+
+	return 0;
+}
 #endif
 
 int fdt_fixup_memory(void *blob, u64 start, u64 size)
diff --git a/include/fdt_support.h b/include/fdt_support.h
index cefb2b2cce..2286ea7793 100644
--- a/include/fdt_support.h
+++ b/include/fdt_support.h
@@ -94,6 +94,7 @@ int fdt_fixup_memory(void *blob, u64 start, u64 size);
  */
 #ifdef CONFIG_ARCH_FIXUP_FDT_MEMORY
 int fdt_fixup_memory_banks(void *blob, u64 start[], u64 size[], int banks);
+int fdt_set_usable_memory(void *blob, u64 start[], u64 size[], int banks);
 #else
 static inline int fdt_fixup_memory_banks(void *blob, u64 start[], u64 size[],
 					 int banks)
-- 
2.17.1

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

* [PATCH v2 2/2] board: colibri_imx7: reserve DDR memory for Cortex-M4
  2019-12-03 12:04 [PATCH v2 0/2] android: colibri_imx7: reserve DDR memory for Cortex-M4 Igor Opaniuk
  2019-12-03 12:04 ` [PATCH v2 1/2] common: fdt_support: add support for setting usable memory Igor Opaniuk
@ 2019-12-03 12:04 ` Igor Opaniuk
  1 sibling, 0 replies; 5+ messages in thread
From: Igor Opaniuk @ 2019-12-03 12:04 UTC (permalink / raw)
  To: u-boot

From: Igor Opaniuk <igor.opaniuk@toradex.com>

i.MX 7's Cortex-M4 core can run from DDR and uses DDR memory for
the rpmsg communication. Both use cases need a fixed location of
memory reserved. For the rpmsg use case the reserved area needs
to be in sync with the kernel's hardcoded vring descriptor location.

Use the linux,usable-memory property to carve out 1MB of memory
in case the M4 core is running. Also make sure that the i.MX 7
specific rpmsg driver does not get loaded in case we do not carve
out memory.

Signed-off-by: Stefan Agner <stefan.agner@toradex.com>
Signed-off-by: Igor Opaniuk <igor.opaniuk@toradex.com>
Reviewed-by: Oleksandr Suvorov <oleksandr.suvorov@toradex.com>
---

 arch/arm/include/asm/mach-imx/sys_proto.h |  2 ++
 board/toradex/colibri_imx7/colibri_imx7.c | 37 +++++++++++++++++++++++
 2 files changed, 39 insertions(+)

diff --git a/arch/arm/include/asm/mach-imx/sys_proto.h b/arch/arm/include/asm/mach-imx/sys_proto.h
index 52c83ba9e4..c9b509e6a7 100644
--- a/arch/arm/include/asm/mach-imx/sys_proto.h
+++ b/arch/arm/include/asm/mach-imx/sys_proto.h
@@ -153,6 +153,8 @@ void init_src(void);
 void init_snvs(void);
 void imx_wdog_disable_powerdown(void);
 
+int arch_auxiliary_core_check_up(u32 core_id);
+
 int board_mmc_get_env_dev(int devno);
 
 int nxp_board_rev(void);
diff --git a/board/toradex/colibri_imx7/colibri_imx7.c b/board/toradex/colibri_imx7/colibri_imx7.c
index c001316591..b0914a9ead 100644
--- a/board/toradex/colibri_imx7/colibri_imx7.c
+++ b/board/toradex/colibri_imx7/colibri_imx7.c
@@ -333,6 +333,43 @@ int checkboard(void)
 #if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP)
 int ft_board_setup(void *blob, bd_t *bd)
 {
+#if defined(CONFIG_IMX_BOOTAUX) && defined(CONFIG_ARCH_FIXUP_FDT_MEMORY)
+	int up;
+
+	up = arch_auxiliary_core_check_up(0);
+	if (up) {
+		int ret;
+		int areas = 1;
+		u64 start[2], size[2];
+
+		/*
+		 * Reserve 1MB of memory for M4 (1MiB is also the minimum
+		 * alignment for Linux due to MMU section size restrictions).
+		 */
+		start[0] = gd->bd->bi_dram[0].start;
+		size[0] = SZ_256M - SZ_1M;
+
+		/* If needed, create a second entry for memory beyond 256M */
+		if (gd->bd->bi_dram[0].size > SZ_256M) {
+			start[1] = gd->bd->bi_dram[0].start + SZ_256M;
+			size[1] = gd->bd->bi_dram[0].size - SZ_256M;
+			areas = 2;
+		}
+
+		ret = fdt_set_usable_memory(blob, start, size, areas);
+		if (ret) {
+			eprintf("Cannot set usable memory\n");
+			return ret;
+		}
+	} else {
+		int off;
+
+		off = fdt_node_offset_by_compatible(blob, -1,
+						    "fsl,imx7d-rpmsg");
+		if (off > 0)
+			fdt_status_disabled(blob, off);
+	}
+#endif
 #if defined(CONFIG_FDT_FIXUP_PARTITIONS)
 	static const struct node_info nodes[] = {
 		{ "fsl,imx7d-gpmi-nand", MTD_DEV_TYPE_NAND, }, /* NAND flash */
-- 
2.17.1

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

* [PATCH v2 1/2] common: fdt_support: add support for setting usable memory
  2019-12-03 12:04 ` [PATCH v2 1/2] common: fdt_support: add support for setting usable memory Igor Opaniuk
@ 2019-12-03 15:02   ` Joakim Tjernlund
  2019-12-04  8:38     ` Igor Opaniuk
  0 siblings, 1 reply; 5+ messages in thread
From: Joakim Tjernlund @ 2019-12-03 15:02 UTC (permalink / raw)
  To: u-boot

On Tue, 2019-12-03 at 14:04 +0200, Igor Opaniuk wrote:
> CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.
> 
> 
> From: Igor Opaniuk <igor.opaniuk@toradex.com>
> 
> Add support for setting linux,usable-memory property in the memory
> node of device tree for the kernel [1].

Isn't this same/similar to fdt_add_mem_rsv() ?

 Jocke

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

* [PATCH v2 1/2] common: fdt_support: add support for setting usable memory
  2019-12-03 15:02   ` Joakim Tjernlund
@ 2019-12-04  8:38     ` Igor Opaniuk
  0 siblings, 0 replies; 5+ messages in thread
From: Igor Opaniuk @ 2019-12-04  8:38 UTC (permalink / raw)
  To: u-boot

Hi Joakim,

On Tue, Dec 3, 2019 at 5:02 PM Joakim Tjernlund
<Joakim.Tjernlund@infinera.com> wrote:
>
> On Tue, 2019-12-03 at 14:04 +0200, Igor Opaniuk wrote:
> > CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.
> >
> >
> > From: Igor Opaniuk <igor.opaniuk@toradex.com>
> >
> > Add support for setting linux,usable-memory property in the memory
> > node of device tree for the kernel [1].
>
> Isn't this same/similar to fdt_add_mem_rsv() ?

I would say they are opposite :)
- linux,usable-memory property let the kernel be aware about all the
memory he can use.
- memreserve - what memory to exclude.

I think both should be helpful.

>
>  Jocke
>

Thanks

-- 
Best regards - Freundliche Grüsse - Meilleures salutations

Igor Opaniuk

mailto: igor.opaniuk at gmail.com
skype: igor.opanyuk
+380 (93) 836 40 67
http://ua.linkedin.com/in/iopaniuk

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

end of thread, other threads:[~2019-12-04  8:38 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-12-03 12:04 [PATCH v2 0/2] android: colibri_imx7: reserve DDR memory for Cortex-M4 Igor Opaniuk
2019-12-03 12:04 ` [PATCH v2 1/2] common: fdt_support: add support for setting usable memory Igor Opaniuk
2019-12-03 15:02   ` Joakim Tjernlund
2019-12-04  8:38     ` Igor Opaniuk
2019-12-03 12:04 ` [PATCH v2 2/2] board: colibri_imx7: reserve DDR memory for Cortex-M4 Igor Opaniuk

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox