summaryrefslogtreecommitdiffstats
path: root/arch/arm
diff options
context:
space:
mode:
authorJoacim Zetterling <joacim.zetterling@westermo.com>2022-02-25 15:47:49 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2022-02-28 10:39:52 +0100
commit42d45ef380c5583e36893c377f9194ac28e03fcc (patch)
treec03cc2f46f6859a757b72290607412f0b77a5a0e /arch/arm
parentdad2b5636bd823c1987b6b0c3bb1a80a6f45d838 (diff)
downloadbarebox-42d45ef380c5583e36893c377f9194ac28e03fcc.tar.gz
barebox-42d45ef380c5583e36893c377f9194ac28e03fcc.tar.xz
ARM: imx: Add imx8 support for SDRAM with two or more bank groups
Add bank group size to handle SDRAM with two or more bank groups in one chip. The imx8mn DDR4 has one mem chip with ranks set to 1 and the number of banks is 4 in 2 groups, total of 8 banks. We need two add the DDRC_ADDRMAP8 and do a check DDRC_ADDRMAP8_BG_B0 and DDRC_ADDRMAP8_BG_B1 to get the number of bank groups in the chip. Signed-off-by: Joacim Zetterling <joacim.zetterling@westermo.com> Link: https://lore.barebox.org/20220225144751.4160843-3-joacim.zetterling@westermo.com Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch/arm')
-rw-r--r--arch/arm/mach-imx/esdctl.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/arch/arm/mach-imx/esdctl.c b/arch/arm/mach-imx/esdctl.c
index 8e2d9e0c11..0e11033b81 100644
--- a/arch/arm/mach-imx/esdctl.c
+++ b/arch/arm/mach-imx/esdctl.c
@@ -346,6 +346,9 @@ static int vf610_ddrmc_add_mem(void *mmdcbase, struct imx_esdctl_data *data)
#define DDRC_ADDRMAP7_ROW_B17 GENMASK(11, 8)
#define DDRC_ADDRMAP7_ROW_B16 GENMASK( 3, 0)
+#define DDRC_ADDRMAP8_BG_B1 GENMASK(13, 8)
+#define DDRC_ADDRMAP8_BG_B0 GENMASK(4, 0)
+
static unsigned int
imx_ddrc_count_bits(unsigned int bits, const u8 config[],
unsigned int config_num)
@@ -409,6 +412,13 @@ imx_ddrc_sdram_size(void __iomem *ddrc, const u32 addrmap[],
if (FIELD_GET(DDRC_ADDRMAP1_BANK_B2, addrmap[1]) != 0b11111)
banks++;
+ if (addrmap[8]) {
+ if (FIELD_GET(DDRC_ADDRMAP8_BG_B0, addrmap[8]) != 0b11111)
+ banks++;
+ if (FIELD_GET(DDRC_ADDRMAP8_BG_B1, addrmap[8]) != 0b111111)
+ banks++;
+ }
+
columns = imx_ddrc_count_bits(col_max, col_b, col_b_num);
rows = imx_ddrc_count_bits(row_max, row_b, row_b_num);