[RFC][PATCH] rpi: Fix DRAM size reporting to show total RAM

Peter Robinson pbrobinson at gmail.com
Tue Nov 25 13:20:22 CET 2025


On Tue, 25 Nov 2025 at 10:25, Anders Roxell <anders.roxell at linaro.org> wrote:
>
> 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 at linaro.org>

Please add details as to why this is RFC? What comments are you actually after?

> ---
>  board/raspberrypi/rpi/rpi.c | 16 +++++++++++++++-
>  1 file changed, 15 insertions(+), 1 deletion(-)
>
> diff --git a/board/raspberrypi/rpi/rpi.c b/board/raspberrypi/rpi/rpi.c
> index 1b0b664fa2b7..0cd45104b3bc 100644
> --- a/board/raspberrypi/rpi/rpi.c
> +++ b/board/raspberrypi/rpi/rpi.c
> @@ -332,13 +332,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
>
> --
> 2.51.0
>


More information about the U-Boot mailing list