On Sat, 30 May 2026 at 16:06, Marek Vasut <[email protected]> wrote: > > On 5/30/26 4:45 PM, Marek Vasut wrote: > > Some architectures can not DMA above 4 GiB boundary, > > limit available memory to memory below 4 GiB boundary. > > > > Signed-off-by: Marek Vasut <[email protected]> > > --- > > Cc: Andrew Goodbody <[email protected]> > > Cc: David Lechner <[email protected]> > > Cc: Heiko Schocher <[email protected]> > > Cc: Heinrich Schuchardt <[email protected]> > > Cc: Holger Brunck <[email protected]> > > Cc: Ilias Apalodimas <[email protected]> > > Cc: Peter Robinson <[email protected]> > > Cc: Quentin Schulz <[email protected]> > > Cc: Simon Glass <[email protected]> > > Cc: Sughosh Ganu <[email protected]> > > Cc: Tom Rini <[email protected]> > > Cc: [email protected] > > --- > > lib/Kconfig | 8 ++++++++ > > lib/lmb.c | 20 +++++++++++++++++++- > > 2 files changed, 27 insertions(+), 1 deletion(-) > > > > diff --git a/lib/Kconfig b/lib/Kconfig > > index 77ebc79e1db..29911068a69 100644 > > --- a/lib/Kconfig > > +++ b/lib/Kconfig > > @@ -1295,6 +1295,14 @@ config SPL_LMB_ARCH_MEM_MAP > > memory map. Enable this config in such scenarios which allow > > architectures and boards to define their own memory map. > > > > +config LMB_LIMIT_DMA_BELOW_4G > > + bool > > + depends on LMB > > + default y if ARCH_BCM283X > > + help > > + Some architectures can not DMA above 4 GiB boundary, > > + limit available memory to memory below 4 GiB boundary. > > + > > config PHANDLE_CHECK_SEQ > > bool "Enable phandle check while getting sequence number" > > help > > diff --git a/lib/lmb.c b/lib/lmb.c > > index 8f12c6ad8e5..a8a988eedc0 100644 > > --- a/lib/lmb.c > > +++ b/lib/lmb.c > > @@ -611,6 +611,7 @@ static __maybe_unused void lmb_reserve_common_spl(void) > > static void lmb_add_memory(void) > > { > > int i; > > + phys_addr_t bank_end; > > phys_size_t size; > > u64 ram_top = gd->ram_top; > > struct bd_info *bd = gd->bd; > > @@ -625,8 +626,25 @@ static void lmb_add_memory(void) > > for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++) { > > size = bd->bi_dram[i].size; > > > > - if (size) > > + if (size) { > > lmb_add(bd->bi_dram[i].start, size); > > + if (IS_ENABLED(CONFIG_LMB_LIMIT_DMA_BELOW_4G)) > > This conditional should be inverted. > > Peter Robinson , can you test this change on RPi ?
That doesn't fix the problem for me on a RPi4 4GB or a RPi5 8Gb. > > + continue; > > + > > + bank_end = bd->bi_dram[i].start + size; > > + > > + /* > > + * Reserve memory above ram_top as > > + * no-overwrite so that it cannot be > > + * allocated > > + */ > > + if (bd->bi_dram[i].start >= ram_top) > > + lmb_reserve(bd->bi_dram[i].start, size, > > + LMB_NOOVERWRITE); > > + else if (bank_end > ram_top) > > + lmb_reserve(ram_top, bank_end - ram_top, > > + LMB_NOOVERWRITE); > > + } > > } > > } > > > > [...]

