diff options
author | Ye Li | 2023-04-28 12:08:45 +0800 |
---|---|---|
committer | Stefano Babic | 2023-05-21 16:54:41 +0200 |
commit | dace5e9fdc17786a3c4a857e63032d7d012e316d (patch) | |
tree | c3d291d230b6572ae9505b937a1e515f682c5828 /arch | |
parent | 212a4e19615102277718f6adaa0282b2a69d7320 (diff) |
imx9: Calculate DDR size from DDRC setting
To avoid using static setting for ECC enabled DDR size, switch
to calculate DDR size from DDRC setting
Signed-off-by: Ye Li <ye.li@nxp.com>
Reviewed-by: Peng Fan <peng.fan@nxp.com>
Reviewed-by: Jacky Bai <ping.bai@nxp.com>
Signed-off-by: Peng Fan <peng.fan@nxp.com>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/mach-imx/imx9/soc.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/arch/arm/mach-imx/imx9/soc.c b/arch/arm/mach-imx/imx9/soc.c index 6ae7e704895..64e8ac610e5 100644 --- a/arch/arm/mach-imx/imx9/soc.c +++ b/arch/arm/mach-imx/imx9/soc.c @@ -36,6 +36,7 @@ #include <asm/arch-imx/cpu.h> #include <asm/mach-imx/s400_api.h> #include <fuse.h> +#include <asm/arch/ddr.h> DECLARE_GLOBAL_DATA_PTR; @@ -327,14 +328,26 @@ void enable_caches(void) __weak int board_phys_sdram_size(phys_size_t *size) { + phys_size_t start, end; + phys_size_t val; + if (!size) return -EINVAL; - *size = PHYS_SDRAM_SIZE; + val = readl(REG_DDR_CS0_BNDS); + start = (val >> 16) << 24; + end = (val & 0xFFFF); + end = end ? end + 1 : 0; + end = end << 24; + *size = end - start; + + val = readl(REG_DDR_CS1_BNDS); + start = (val >> 16) << 24; + end = (val & 0xFFFF); + end = end ? end + 1 : 0; + end = end << 24; + *size += end - start; -#ifdef PHYS_SDRAM_2_SIZE - *size += PHYS_SDRAM_2_SIZE; -#endif return 0; } |