[U-Boot] [PATCH 3/5] sunxi: add 3GiB DRAM detection support in main U-Boot

Icenowy Zheng icenowy at aosc.io
Wed Feb 7 19:35:24 UTC 2018


Some Allwinner SoCs can use 3GiB DRAM (part of 4GiB or larger module).

As the common get_ram_size function cannot detect non-pow-of-2 memory,
add special detect code into the DRAM size code in main U-Boot.

Signed-off-by: Icenowy Zheng <icenowy at aosc.io>
---
 board/sunxi/board.c            | 23 +++++++++++++++++++++++
 include/configs/sunxi-common.h |  2 +-
 2 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/board/sunxi/board.c b/board/sunxi/board.c
index 8891961dcc..8d707cbac2 100644
--- a/board/sunxi/board.c
+++ b/board/sunxi/board.c
@@ -256,7 +256,30 @@ int board_init(void)
 
 int dram_init(void)
 {
+#if PHYS_SDRAM_0_SIZE == (SZ_2G + SZ_1G)
+	/*
+	 * get_ram_size() doesn't support non-pow-of-2 sizes, so the detection
+	 * of 3GiB DRAM is implemented here.
+	 * It just checks whether the DRAM is bigger than 2GiB, as the DRAM
+	 * module is usually 4GiB in this case (and 1GiB is not accessible).
+	 */
+	u32 save_0, save_2g;
+	gd->ram_size = get_ram_size((long *)PHYS_SDRAM_0, SZ_2G);
+	if (gd->ram_size == SZ_2G) {
+		save_0 = readl(PHYS_SDRAM_0);
+		save_2g = readl(PHYS_SDRAM_0 + SZ_2G);
+		writel(0, PHYS_SDRAM_0);
+		writel(0xaa55aa55, PHYS_SDRAM_0 + SZ_2G);
+		dsb();
+		if (readl(PHYS_SDRAM_0) != readl(PHYS_SDRAM_0 + SZ_2G)) {
+			gd->ram_size = SZ_2G + SZ_1G;
+			writel(save_2g, PHYS_SDRAM_0 + SZ_2G);
+		}
+		writel(save_0, PHYS_SDRAM_0);
+	}
+#else
 	gd->ram_size = get_ram_size((long *)PHYS_SDRAM_0, PHYS_SDRAM_0_SIZE);
+#endif
 
 	return 0;
 }
diff --git a/include/configs/sunxi-common.h b/include/configs/sunxi-common.h
index 9b3944ad13..177647e009 100644
--- a/include/configs/sunxi-common.h
+++ b/include/configs/sunxi-common.h
@@ -111,7 +111,7 @@
 
 #define CONFIG_NR_DRAM_BANKS		1
 #define PHYS_SDRAM_0			CONFIG_SYS_SDRAM_BASE
-#define PHYS_SDRAM_0_SIZE		0x80000000 /* 2 GiB */
+#define PHYS_SDRAM_0_SIZE		CONFIG_SUNXI_DRAM_MAX_SIZE
 
 #ifdef CONFIG_AHCI
 #define CONFIG_SCSI_AHCI_PLAT
-- 
2.15.1



More information about the U-Boot mailing list