[U-Boot] [PATCH 1/3] common: board: support systems with where RAM ends beyond 4GB

Simon Glass sjg at chromium.org
Tue Dec 23 21:01:44 CET 2014


Hi Stephen,

On 23 December 2014 at 10:34, Stephen Warren <swarren at wwwdotorg.org> wrote:
> From: Stephen Warren <swarren at nvidia.com>
>
> Some systems have so much RAM that the end of RAM is beyond 4GB. An
> example would be a Tegra124 system (where RAM starts at 2GB physical)
> that has more than 2GB of RAM.
>
> In this case, we can gd->ram_size to represent the actual RAM size, so
> that the actual RAM size is passed to the OS. This is useful if the OS
> implements LPAE, and can actually use the "extra" RAM.
>
> However, U-Boot does not implement LPAE and so must deal with 32-bit
> physical addresses. To this end, we enhance board_get_usable_ram_top() to
> detect the "over-sized" case, and limit the relocation addres so that it
> fits into 32-bits of physical address space.
>
> Signed-off-by: Stephen Warren <swarren at nvidia.com>

Reviewed-by: Simon Glass <sjg at chromium.org>

> ---
>  common/board_f.c | 12 ++++++++++++
>  1 file changed, 12 insertions(+)
>
> diff --git a/common/board_f.c b/common/board_f.c
> index 98c9c728ce73..c1ada8d62009 100644
> --- a/common/board_f.c
> +++ b/common/board_f.c
> @@ -360,6 +360,18 @@ static int setup_fdt(void)
>  /* Get the top of usable RAM */
>  __weak ulong board_get_usable_ram_top(ulong total_size)
>  {
> +#ifdef CONFIG_SYS_SDRAM_BASE
> +       /*
> +        * Detect whether we have so much RAM it goes past the end of our
> +        * 32-bit address space. If so, clip the usable RAM so it doesn't.
> +        */
> +       if (gd->ram_top < CONFIG_SYS_SDRAM_BASE)
> +               /*
> +                * Will wrap back to top of 32-bit space when reservations
> +                * are made.
> +                */
> +               return 0;

I wonder whether (ulong)(1ULL << 32) would be more portable, but
perhaps it would just be confusing. We can worry about this when we do
more 64-bit things.

> +#endif
>         return gd->ram_top;
>  }
>
> --
> 1.9.1
>

Regards,
Simon


More information about the U-Boot mailing list