summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnders Roxell <[email protected]>2025-11-25 11:23:58 +0100
committerPeter Robinson <[email protected]>2025-11-28 13:50:51 +0000
commit5b702cf4d09f84f6cfe2989038b67feafe9945ed (patch)
treeeda33e06027f10df8c61fdaadc7ab4c36e3ff03f
parent15c719174cf30c4ef1c5a3638156db8c318fbd18 (diff)
rpi: Fix DRAM size reporting to show total RAM
The VideoCore mailbox GET_ARM_MEMORY only reports the size of the first accessible memory region (~947 MiB on RPi4 with 8GB), not the total RAM. This causes U-Boot to display "DRAM: 947 MiB (total 7.9 GiB)" instead of "DRAM: 7.9 GiB". On Raspberry Pi 4 with 8GB RAM, the memory is split across multiple non-contiguous banks. The dram_init() function only sets gd->ram_size to the first bank size reported by the VideoCore firmware, while fdtdec_setup_memory_banksize() correctly populates all memory banks from the device tree. Fix this by updating gd->ram_size after dram_init_banksize() has populated all memory banks, so it reflects the actual total RAM across all banks. Signed-off-by: Anders Roxell <[email protected]> Reviewed-by: Peter Robinson <[email protected]>
-rw-r--r--board/raspberrypi/rpi/rpi.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/board/raspberrypi/rpi/rpi.c b/board/raspberrypi/rpi/rpi.c
index 6f96c1ebc96..f9b643555dd 100644
--- a/board/raspberrypi/rpi/rpi.c
+++ b/board/raspberrypi/rpi/rpi.c
@@ -334,13 +334,27 @@ int dram_init(void)
#ifdef CONFIG_OF_BOARD
int dram_init_banksize(void)
{
+ phys_addr_t total_size = 0;
+ int i;
int ret;
ret = fdtdec_setup_memory_banksize();
if (ret)
return ret;
- return fdtdec_setup_mem_size_base();
+ ret = fdtdec_setup_mem_size_base();
+ if (ret)
+ return ret;
+
+ /* Update gd->ram_size to reflect total RAM across all banks */
+ for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++) {
+ if (gd->bd->bi_dram[i].size == 0)
+ break;
+ total_size += gd->bd->bi_dram[i].size;
+ }
+ gd->ram_size = total_size;
+
+ return 0;
}
#endif