
Hi Daniel,
On 30 April 2017 at 13:22, Daniel Schwierzeck daniel.schwierzeck@gmail.com wrote:
From: Paul Burton paul.burton@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@imgtec.com Signed-off-by: Daniel Schwierzeck daniel.schwierzeck@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