aboutsummaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorYe Li2023-04-28 12:08:45 +0800
committerStefano Babic2023-05-21 16:54:41 +0200
commitdace5e9fdc17786a3c4a857e63032d7d012e316d (patch)
treec3d291d230b6572ae9505b937a1e515f682c5828 /arch
parent212a4e19615102277718f6adaa0282b2a69d7320 (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.c21
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;
}