From ced10dbe1c0bcf64108ceb8f9435aa2130e0633d Mon Sep 17 00:00:00 2001 From: Joseph Chen Date: Thu, 31 Oct 2019 14:52:01 +0800 Subject: [PATCH] rockchip: param: add SDRAM_MAX_SIZE as ram top limit This patch handles the boot fail for RK3288 4GB machine. Change-Id: I2be6e532120595a6c10e9e99a779d9ec32f48fb5 Signed-off-by: Joseph Chen --- arch/arm/mach-rockchip/param.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/arch/arm/mach-rockchip/param.c b/arch/arm/mach-rockchip/param.c index 6c944eb4d8..48b4edcf0a 100644 --- a/arch/arm/mach-rockchip/param.c +++ b/arch/arm/mach-rockchip/param.c @@ -234,6 +234,11 @@ int param_parse_bootdev(char **devtype, char **devnum) } #endif +static phys_size_t ddr_mem_get_usable_size(u64 base, u64 size) +{ + return (base + size >= SDRAM_MAX_SIZE) ? (SDRAM_MAX_SIZE - base) : size; +} + struct memblock *param_parse_ddr_mem(int *out_count) { struct udevice *dev; @@ -261,7 +266,9 @@ struct memblock *param_parse_ddr_mem(int *out_count) for (i = 0; i < count; i++) { mem[i].base = t->u.ddr_mem.bank[i]; - mem[i].size = t->u.ddr_mem.bank[i + count]; + mem[i].size = + ddr_mem_get_usable_size(t->u.ddr_mem.bank[i], + t->u.ddr_mem.bank[i + count]); } *out_count = count; @@ -293,7 +300,7 @@ struct memblock *param_parse_ddr_mem(int *out_count) for (i = 0; i < count; i++) { mem[i].base = CONFIG_SYS_SDRAM_BASE; - mem[i].size = ram.size; + mem[i].size = ddr_mem_get_usable_size(mem[i].base, ram.size); } *out_count = count;