
On Thu, Jun 14, 2018 at 03:07:25PM +0800, Jason Zhu wrote:
Actually the DRAM is not only seperated in one bank. The DRAM bank information is stored in gd->bd->bi_dram, so reserve lmb according to gd->bd->bi_dram.
Signed-off-by: Jason Zhu jason.zhu@rock-chips.com
common/bootm.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/common/bootm.c b/common/bootm.c index e789f68..46689fa 100644 --- a/common/bootm.c +++ b/common/bootm.c @@ -53,16 +53,23 @@ __weak void board_quiesce_devices(void) #ifdef CONFIG_LMB static void boot_start_lmb(bootm_headers_t *images) {
- lmb_init(&images->lmb);
+#ifdef CONFIG_NR_DRAM_BANKS
- int i;
- for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++) {
lmb_add(&images->lmb, gd->bd->bi_dram[i].start,
gd->bd->bi_dram[i].size);
- }
+#else ulong mem_start; phys_size_t mem_size;
lmb_init(&images->lmb);
mem_start = env_get_bootm_low(); mem_size = env_get_bootm_size();
lmb_add(&images->lmb, (phys_addr_t)mem_start, mem_size);
+#endif arch_lmb_reserve(&images->lmb); board_lmb_reserve(&images->lmb); }
Can you describe a bit how you ran into this problem? Thanks!