On Thu, Jun 09, 2022 at 01:18:10PM +0200, Ahmad Fatoum wrote: > Add a new of_reserved_mem_walk that can be used to request > reserved memory regions. This avoids e.g. bootm trying to > place the kernel into a reserved region. > > Signed-off-by: Rouven Czerwinski <r.czerwinski@xxxxxxxxxxxxxx> > Signed-off-by: Ahmad Fatoum <a.fatoum@xxxxxxxxxxxxxx> > --- > v1 -> v2: > - don't use of_reserve_entry accounting and instead > directly request memory (Sascha) > --- > common/memory.c | 21 ++++++++++-- > drivers/of/Makefile | 1 + > drivers/of/reserved-mem.c | 71 +++++++++++++++++++++++++++++++++++++++ > include/of.h | 9 +++++ > 4 files changed, 99 insertions(+), 3 deletions(-) > create mode 100644 drivers/of/reserved-mem.c > > diff --git a/common/memory.c b/common/memory.c > index 95995bb6e310..fd782c7f24f6 100644 > --- a/common/memory.c > +++ b/common/memory.c > @@ -3,6 +3,8 @@ > * Copyright (c) 2011 Sascha Hauer <s.hauer@xxxxxxxxxxxxxx>, Pengutronix > */ > > +#define pr_fmt(fmt) "memory: " fmt > + > #include <common.h> > #include <memory.h> > #include <of.h> > @@ -12,6 +14,7 @@ > #include <asm-generic/memory_layout.h> > #include <asm/sections.h> > #include <malloc.h> > +#include <of.h> > > /* > * Begin and End of memory area for malloc(), and current "brk" > @@ -53,9 +56,20 @@ void mem_malloc_init(void *start, void *end) > mem_malloc_initialized = 1; > } > > -#if !defined __SANDBOX__ > +static int request_reservation(const struct resource *res) > +{ > + if (!(res->flags & IORESOURCE_EXCLUSIVE)) > + return 0; > + > + pr_debug("region %s %pa-%pa\n", res->name, &res->start, &res->end); > + > + request_sdram_region(res->name, res->start, resource_size(res)); > + return 0; > +} > + > static int mem_malloc_resource(void) > { > +#if !defined __SANDBOX__ > /* > * Normally it's a bug when one of these fails, > * but we have some setups where some of these > @@ -77,13 +91,14 @@ static int mem_malloc_resource(void) > (unsigned long)&__bss_start, > (unsigned long)&__bss_stop - > (unsigned long)&__bss_start); > +#endif > #ifdef STACK_BASE > request_sdram_region("stack", STACK_BASE, STACK_SIZE); > #endif > - return 0; > + > + return of_reserved_mem_walk(request_reservation); > } > coredevice_initcall(mem_malloc_resource); > -#endif > > static void *sbrk_no_zero(ptrdiff_t increment) > { > diff --git a/drivers/of/Makefile b/drivers/of/Makefile > index ca8da71cb4f0..99b610cba85e 100644 > --- a/drivers/of/Makefile > +++ b/drivers/of/Makefile > @@ -5,6 +5,7 @@ obj-$(CONFIG_OF_GPIO) += of_gpio.o > obj-$(CONFIG_OF_PCI) += of_pci.o > obj-y += partition.o > obj-y += of_net.o > +obj-$(CONFIG_OFDEVICE) += reserved-mem.o Compilation of this file depends on CONFIG_OFDEVICE, but the static inline wrapper or not decision depends on CONFIG_OFTREE. This breaks a number of defconfigs. I took the easiest way out for now and changed to obj-y above to fix this. Sascha -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |