1d2912cb1SThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only 2918dbcbaSDmitry Baryshkov /* 3918dbcbaSDmitry Baryshkov * linux/arch/arm/mach-pxa/pxa2xx.c 4918dbcbaSDmitry Baryshkov * 5918dbcbaSDmitry Baryshkov * code specific to pxa2xx 6918dbcbaSDmitry Baryshkov * 7918dbcbaSDmitry Baryshkov * Copyright (C) 2008 Dmitry Baryshkov 8918dbcbaSDmitry Baryshkov */ 9918dbcbaSDmitry Baryshkov 10918dbcbaSDmitry Baryshkov #include <linux/module.h> 11918dbcbaSDmitry Baryshkov #include <linux/kernel.h> 12918dbcbaSDmitry Baryshkov #include <linux/device.h> 1323019a73SRob Herring #include <linux/io.h> 14918dbcbaSDmitry Baryshkov 15*e6acc406SArnd Bergmann #include "pxa2xx-regs.h" 164c25c5d2SArnd Bergmann #include "mfp-pxa25x.h" 17fd13f811SArnd Bergmann #include "generic.h" 18*e6acc406SArnd Bergmann #include "reset.h" 19*e6acc406SArnd Bergmann #include "smemc.h" 20fd13f811SArnd Bergmann #include <linux/soc/pxa/smemc.h> 21918dbcbaSDmitry Baryshkov pxa2xx_clear_reset_status(unsigned int mask)2204fef228SEric Miaovoid pxa2xx_clear_reset_status(unsigned int mask) 2304fef228SEric Miao { 2404fef228SEric Miao /* RESET_STATUS_* has a 1:1 mapping with RCSR */ 2504fef228SEric Miao RCSR = mask; 2604fef228SEric Miao } 2704fef228SEric Miao 28fd13f811SArnd Bergmann #define MDCNFG_DRAC2(mdcnfg) (((mdcnfg) >> 21) & 0x3) 29fd13f811SArnd Bergmann #define MDCNFG_DRAC0(mdcnfg) (((mdcnfg) >> 5) & 0x3) 30fd13f811SArnd Bergmann pxa2xx_smemc_get_sdram_rows(void)31fd13f811SArnd Bergmannint pxa2xx_smemc_get_sdram_rows(void) 32fd13f811SArnd Bergmann { 33fd13f811SArnd Bergmann static int sdram_rows; 34fd13f811SArnd Bergmann unsigned int drac2 = 0, drac0 = 0; 35fd13f811SArnd Bergmann u32 mdcnfg; 36fd13f811SArnd Bergmann 37fd13f811SArnd Bergmann if (sdram_rows) 38fd13f811SArnd Bergmann return sdram_rows; 39fd13f811SArnd Bergmann 40fd13f811SArnd Bergmann mdcnfg = readl_relaxed(MDCNFG); 41fd13f811SArnd Bergmann 42fd13f811SArnd Bergmann if (mdcnfg & (MDCNFG_DE2 | MDCNFG_DE3)) 43fd13f811SArnd Bergmann drac2 = MDCNFG_DRAC2(mdcnfg); 44fd13f811SArnd Bergmann 45fd13f811SArnd Bergmann if (mdcnfg & (MDCNFG_DE0 | MDCNFG_DE1)) 46fd13f811SArnd Bergmann drac0 = MDCNFG_DRAC0(mdcnfg); 47fd13f811SArnd Bergmann 48fd13f811SArnd Bergmann sdram_rows = 1 << (11 + max(drac0, drac2)); 49fd13f811SArnd Bergmann return sdram_rows; 50fd13f811SArnd Bergmann } 51