Hi Stephen, On 23 December 2014 at 10:34, Stephen Warren <swar...@wwwdotorg.org> wrote: > From: Stephen Warren <swar...@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 <swar...@nvidia.com>
Reviewed-by: Simon Glass <s...@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 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot