X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=common%2Fmemsize.c;h=66d5be6a1ff3e31a824737cfebde70e48869c69a;hb=cebdfc22da6eb81793b616e855bc4d6d89c1c7a6;hp=d5d13d51bf1fd84f44e8ec8763257f88d8719fd6;hpb=2ae80437fbe0181184ae4b188b89629b902702c6;p=platform%2Fkernel%2Fu-boot.git diff --git a/common/memsize.c b/common/memsize.c index d5d13d5..66d5be6 100644 --- a/common/memsize.c +++ b/common/memsize.c @@ -94,11 +94,25 @@ long get_ram_size(long *base, long maxsize) phys_size_t __weak get_effective_memsize(void) { -#ifndef CONFIG_VERY_BIG_RAM - return gd->ram_size; + phys_size_t ram_size = gd->ram_size; + +#ifdef CONFIG_MPC85xx + /* + * Check for overflow and limit ram size to some representable value. + * It is required that ram_base + ram_size must be representable by + * phys_size_t type and must be aligned by direct access, therefore + * calculate it from last 4kB sector which should work as alignment + * on any platform. + */ + if (gd->ram_base + ram_size < gd->ram_base) + ram_size = ((phys_size_t)~0xfffULL) - gd->ram_base; +#endif + +#ifndef CFG_MAX_MEM_MAPPED + return ram_size; #else /* limit stack to what we can reasonable map */ - return ((gd->ram_size > CONFIG_MAX_MEM_MAPPED) ? - CONFIG_MAX_MEM_MAPPED : gd->ram_size); + return ((ram_size > CFG_MAX_MEM_MAPPED) ? + CFG_MAX_MEM_MAPPED : ram_size); #endif }