All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jian-Hong Pan <jian-hong@endlessm.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH] rpi4: fix dram bank initialization
Date: Thu,  7 Nov 2019 15:00:53 +0800	[thread overview]
Message-ID: <20191107070052.8303-1-jian-hong@endlessm.com> (raw)

Raspberry Pi's memory address & size cells are defined in FDT's root
node. So, original fdtdec_decode_ram_size() having the cells in memory
node will get wrong size cells which misleads memory's reg parsing and
have wrong memory banks.
This patch provides new decode_ram_size() to parse the memory's reg in
FDT for Raspberry Pi 4.

Fixes: commit 9de5b89e4c89 ("rpi4: enable dram bank initialization")
Signed-off-by: Jian-Hong Pan <jian-hong@endlessm.com>
---
 board/raspberrypi/rpi/rpi.c | 60 +++++++++++++++++++++++++++++++++++--
 1 file changed, 58 insertions(+), 2 deletions(-)

diff --git a/board/raspberrypi/rpi/rpi.c b/board/raspberrypi/rpi/rpi.c
index 9e0abdda31..419fb61db5 100644
--- a/board/raspberrypi/rpi/rpi.c
+++ b/board/raspberrypi/rpi/rpi.c
@@ -314,10 +314,66 @@ int dram_init(void)
 
 #ifdef CONFIG_OF_BOARD
 #ifdef CONFIG_BCM2711
+static int decode_ram_size(const void *blob, phys_size_t *sizep, bd_t *bd)
+{
+	int addr_cells, size_cells;
+	u64 total_size, size, addr;
+	const u32 *cell;
+	int node;
+	int bank;
+	int len;
+
+	/* Raspberry Pi's address and size cells are defined in root node */
+	addr_cells = fdt_address_cells(blob, 0);
+	size_cells = fdt_size_cells(blob, 0);
+
+	node = fdt_path_offset(blob, "/memory");
+	if (node < 0) {
+		debug("No /memory node found\n");
+		return -ENOENT;
+	}
+
+	cell = fdt_getprop(blob, node, "reg", &len);
+	if (!cell) {
+		debug("No reg property found\n");
+		return -ENOENT;
+	}
+
+	if (bd) {
+		memset(bd->bi_dram, '\0', sizeof(bd->bi_dram[0]) *
+						CONFIG_NR_DRAM_BANKS);
+	}
+
+	total_size = 0;
+	for (bank = 0; bank < CONFIG_NR_DRAM_BANKS; bank++) {
+		addr = 0;
+		if (addr_cells == 2)
+			addr += (u64)fdt32_to_cpu(*cell++) << 32UL;
+		addr += fdt32_to_cpu(*cell++);
+		if (bd)
+			bd->bi_dram[bank].start = addr;
+
+		size = 0;
+		if (size_cells == 2)
+			size += (u64)fdt32_to_cpu(*cell++) << 32UL;
+		size += fdt32_to_cpu(*cell++);
+		if (bd)
+			bd->bi_dram[bank].size = size;
+
+		total_size += size;
+	}
+
+	debug("Memory size %llu\n", total_size);
+	if (sizep)
+		*sizep = (phys_size_t)total_size;
+
+	return 0;
+}
+
 int dram_init_banksize(void)
 {
-	return fdtdec_decode_ram_size(gd->fdt_blob, NULL, 0, NULL,
-				     (phys_size_t *)&gd->ram_size, gd->bd);
+	return decode_ram_size(gd->fdt_blob, (phys_size_t *)&gd->ram_size,
+			       gd->bd);
 }
 #endif
 #endif
-- 
2.23.0

             reply	other threads:[~2019-11-07  7:00 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-11-07  7:00 Jian-Hong Pan [this message]
2019-11-07  8:02 ` [U-Boot] [PATCH] rpi4: fix dram bank initialization Matthias Brugger
2019-11-07  8:44   ` Jian-Hong Pan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20191107070052.8303-1-jian-hong@endlessm.com \
    --to=jian-hong@endlessm.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.