diff options
author | Joacim Zetterling <joacim.zetterling@westermo.com> | 2022-02-25 15:47:49 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2022-02-28 10:39:52 +0100 |
commit | 42d45ef380c5583e36893c377f9194ac28e03fcc (patch) | |
tree | c03cc2f46f6859a757b72290607412f0b77a5a0e /arch/arm | |
parent | dad2b5636bd823c1987b6b0c3bb1a80a6f45d838 (diff) | |
download | barebox-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.c | 10 |
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); |