[U-Boot] [RESEND PATCH v2 1/6] image: Use ram_top, not bi_memsize, in getenv_bootm_size

Simon Glass sjg at chromium.org
Thu May 4 16:49:55 UTC 2017


Hi Daniel,

On 30 April 2017 at 13:22, Daniel Schwierzeck
<daniel.schwierzeck at gmail.com> wrote:
> From: Paul Burton <paul.burton at imgtec.com>
>
> When determining the region of memory to allow for use by bootm, using
> bi_memstart & adding bi_memsize can cause problems if that leads to an
> integer overflow. For example on some MIPS systems bi_memstart would be
> 0xffffffff80000000 (ie. the start of the MIPS ckseg0 region) and if the
> system has 2GB of memory then the addition would wrap around to 0.
>
> The maximum amount of memory to be used by U-Boot is already accounted
> for by the ram_top field of struct global_data, so make use of that for
> the calculation instead.
>
> Signed-off-by: Paul Burton <paul.burton at imgtec.com>
> Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck at gmail.com>
>
> ---
>
> Changes in v2:
> - also patch ARM specific code to get a consistent behaviour
>
>  common/image.c | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/common/image.c b/common/image.c
> index 0f88984f2d..160c4c6fbc 100644
> --- a/common/image.c
> +++ b/common/image.c
> @@ -494,11 +494,10 @@ phys_size_t getenv_bootm_size(void)
>
>  #if defined(CONFIG_ARM) && defined(CONFIG_NR_DRAM_BANKS)
>         start = gd->bd->bi_dram[0].start;
> -       size = gd->bd->bi_dram[0].size;
>  #else
>         start = gd->bd->bi_memstart;
> -       size = gd->bd->bi_memsize;
>  #endif
> +       size = gd->ram_top - start;
>

I'm a little nervous about this change. For ARM we might have
discontinuous DRAM segments. Can you not set bd->bi_memsize insead?

>         s = getenv("bootm_low");
>         if (s)
> --
> 2.11.0
>

Regards,
Simon


More information about the U-Boot mailing list