* [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