Actions: OWL: Calculate SDRAM size

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>
This commit is contained in:
Amit Singh Tomar 2020-05-09 13:45:07 +05:30 committed by Tom Rini
parent 26073f9ed3
commit 3ca564e96e

View File

@ -15,14 +15,34 @@
#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;
}