From mboxrd@z Thu Jan 1 00:00:00 1970 From: Manivannan Sadhasivam Date: Sat, 9 May 2020 15:41:31 +0530 Subject: [PATCH v4 1/2] Actions: OWL: Calculate SDRAM size In-Reply-To: <1589012108-11064-2-git-send-email-amittomer25@gmail.com> References: <1589012108-11064-1-git-send-email-amittomer25@gmail.com> <1589012108-11064-2-git-send-email-amittomer25@gmail.com> Message-ID: <20200509101131.GA818@Mani-XPS-13-9360> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On Sat, May 09, 2020 at 01:45:07PM +0530, Amit Singh Tomar wrote: > 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 Reviewed-by: Manivannan Sadhasivam Thanks, Mani > --- > Changes since v3: > * Fixed S900 support as suggested by Mani. > * Changes the function name to owl_get_ddrcap. > Changes since v2: > * Fixed the variable name so that it can compile > for S900. > Changes since v1: > * added support for S900 > * updated the commit message to reflect common OWL > support. > --- > arch/arm/mach-owl/soc.c | 22 +++++++++++++++++++++- > 1 file changed, 21 insertions(+), 1 deletion(-) > > diff --git a/arch/arm/mach-owl/soc.c b/arch/arm/mach-owl/soc.c > index 409cbd319f20..fcf61d39b63a 100644 > --- a/arch/arm/mach-owl/soc.c > +++ b/arch/arm/mach-owl/soc.c > @@ -13,14 +13,34 @@ > #include > #include > > +#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; > } > > -- > 2.7.4 >