On 6/3/26 1:02 PM, Peter Robinson wrote:
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.
Did you invert the if (IS_ENABLED...) conditional ?
Was CONFIG_LMB_LIMIT_DMA_BELOW_4G enabled in your config (maybe the
Kconfig entry "default y" part needs to be tweaked to cover these devices?)
If both conditions are met, that should behave like the old code.