[PATCH] Revert "common/memsize.c: Fix get_effective_memsize() to check for overflow"

Pali Rohár pali at kernel.org
Fri Jan 6 17:45:43 CET 2023


On Friday 06 January 2023 10:51:43 Tom Rini wrote:
> This reverts commit 777aaaa706bcfe08c284aed06886db7d482af3f8.
> 
> The changes to this generic function, which is intended to help with
> 32bit platforms with large amounts of memory has unintended side effects
> (which in turn lead to boot failures) on other platforms which were
> previously functional.

As mentioned previously, unfortunately this revert breaks 32-bit u-boot
on 36-bit mpc85xx boards with 32-bit e500v2 cores and 4GB DDR module.

Which platforms currently have broken u-boot without this revert? The
only one which was reported is stm32mp but for it there different
workaround patch waiting in the queue.

> Reported-by: Marek Vasut <marex at denx.de>
> Cc: Patrick Delaunay <patrick.delaunay at foss.st.com>
> Cc: Pali Rohár <pali at kernel.org>
> Signed-off-by: Tom Rini <trini at konsulko.com>
> ---
>  common/memsize.c | 18 +++---------------
>  1 file changed, 3 insertions(+), 15 deletions(-)
> 
> diff --git a/common/memsize.c b/common/memsize.c
> index 3c80ad2c8346..31884acca0df 100644
> --- a/common/memsize.c
> +++ b/common/memsize.c
> @@ -94,23 +94,11 @@ long get_ram_size(long *base, long maxsize)
>  
>  phys_size_t __weak get_effective_memsize(void)
>  {
> -	phys_size_t ram_size = gd->ram_size;
> -
> -	/*
> -	 * 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;
> -
>  #ifndef CONFIG_MAX_MEM_MAPPED
> -	return ram_size;
> +	return gd->ram_size;
>  #else
>  	/* limit stack to what we can reasonable map */
> -	return ((ram_size > CONFIG_MAX_MEM_MAPPED) ?
> -		CONFIG_MAX_MEM_MAPPED : ram_size);
> +	return ((gd->ram_size > CONFIG_MAX_MEM_MAPPED) ?
> +		CONFIG_MAX_MEM_MAPPED : gd->ram_size);
>  #endif
>  }
> -- 
> 2.25.1
> 


More information about the U-Boot mailing list