]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
Actions: OWL: Calculate SDRAM size
authorAmit Singh Tomar <amittomer25@gmail.com>
Sat, 9 May 2020 08:15:07 +0000 (13:45 +0530)
committerTom Rini <trini@konsulko.com>
Tue, 7 Jul 2020 20:09:22 +0000 (16:09 -0400)
Calculate the SDRAM size from DDR capacity register registers instead
of using hard-coded value. This is quite useful to get correct size
on differnt boards based on Actions OWL family of SoCs (S700 and S900).

There is no documentation available that talks about DDR registers, and
this is very much taken from vendor source.

This commit lets Linux boot on Cubieboard7-lite(based on S700).

Signed-off-by: Amit Singh Tomar <amittomer25@gmail.com>
Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
arch/arm/mach-owl/soc.c

index 7d3f6f6285501498a57d580a5c88cdffb22bd28e..fd6ee7c1c0f2b62c77d1cc66f6005d1a180332b4 100644 (file)
 #include <asm/mach-types.h>
 #include <asm/psci.h>
 
+#define DMM_INTERLEAVE_PER_CH_CFG      0xe0290028
+
 DECLARE_GLOBAL_DATA_PTR;
 
+unsigned int owl_get_ddrcap(void)
+{
+       unsigned int val, cap;
+
+       /* ddr capacity register initialized by ddr driver
+        * in early bootloader
+        */
+#if defined(CONFIG_MACH_S700)
+       val = (readl(DMM_INTERLEAVE_PER_CH_CFG) >> 8) & 0x7;
+       cap =  (val + 1) * 256;
+#elif defined(CONFIG_MACH_S900)
+       val = (readl(DMM_INTERLEAVE_PER_CH_CFG) >> 8) & 0xf;
+       cap =  64 * (1 << val);
+#endif
+
+       return cap;
+}
+
 /*
  * dram_init - sets uboots idea of sdram size
  */
 int dram_init(void)
 {
-       gd->ram_size = CONFIG_SYS_SDRAM_SIZE;
+       gd->ram_size = owl_get_ddrcap() * 1024 * 1024;
        return 0;
 }