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 <anders.roxell@linaro.org> Reviewed-by: Peter Robinson <pbrobinson@gmail.com>
This commit is contained in:
committed by
Peter Robinson
parent
15c719174c
commit
5b702cf4d0
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user