summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Chen <chenjh@rock-chips.com>2019-03-27 11:53:16 +0800
committerJoseph Chen <chenjh@rock-chips.com>2019-03-29 18:29:19 +0800
commit356575c3e2938bc78c92d884f8e4b72cfa1963f1 (patch)
tree5aea9474109c2e88abee831ef0a83edf33a228ac
parent623d03d6217fc9b49e4d02fa876d7505d94974f8 (diff)
lib: bidram: handle only-one dram bank available situation
LMB default init lmb->reserved.region[0] as zero. Change-Id: Ib46d9630581bb3a03c5846288b16ae805e3e6944 Signed-off-by: Joseph Chen <chenjh@rock-chips.com>
-rw-r--r--lib/bidram.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/lib/bidram.c b/lib/bidram.c
index d39f5b14ae..b6859150fd 100644
--- a/lib/bidram.c
+++ b/lib/bidram.c
@@ -130,6 +130,20 @@ void bidram_gen_gd_bi_dram(void)
return;
}
+ /*
+ * LBM default init:
+ * lmb->reserved.cnt = 1;
+ * lmb->reserved.region[0].base = 0;
+ * lmb->reserved.region[0].size = 0;
+ *
+ * Here handle that: there is the only one dram bank available.
+ */
+ if (rsv_cnt == 1 && !res_rgn[0].base && !res_rgn[0].size) {
+ gd->bd->bi_dram[0].start = mem_rgn[0].base;
+ gd->bd->bi_dram[0].size = mem_rgn[0].size;
+ goto done;
+ }
+
/* If reserved rgn is not from sdram start */
if (res_rgn[0].base != mem_rgn[0].base) {
gd->bd->bi_dram[idx].start = mem_rgn[0].base;
@@ -209,7 +223,7 @@ static int bidram_core_reserve(enum memblk_id id, const char *mem_name,
/* Check overlap */
list_for_each(node, &bidram->reserved_head) {
mem = list_entry(node, struct memblock, node);
- BIDRAM_D("Reserved: %s 0x%08lx - 0x%08lx\n",
+ BIDRAM_D("Has reserved: %s 0x%08lx - 0x%08lx\n",
mem->attr.name, (ulong)mem->base,
(ulong)(mem->base + mem->size));
if (!strcmp(mem->attr.name, name)) {
@@ -224,6 +238,9 @@ static int bidram_core_reserve(enum memblk_id id, const char *mem_name,
}
}
+ BIDRAM_D("Reserve: \"%s\" 0x%08lx - 0x%08lx\n",
+ name, (ulong)base, (ulong)(base + size));
+
ret = lmb_reserve(&bidram->lmb, base, size);
if (ret >= 0) {
mem = malloc(sizeof(*mem));