diff options
Diffstat (limited to 'arch/arm/cpu/armv7')
| -rw-r--r-- | arch/arm/cpu/armv7/omap-common/clocks-common.c | 106 | ||||
| -rw-r--r-- | arch/arm/cpu/armv7/omap-common/emif-common.c | 4 | ||||
| -rw-r--r-- | arch/arm/cpu/armv7/omap-common/hwinit-common.c | 3 | ||||
| -rw-r--r-- | arch/arm/cpu/armv7/omap-common/vc.c | 11 | ||||
| -rw-r--r-- | arch/arm/cpu/armv7/omap4/Makefile | 2 | ||||
| -rw-r--r-- | arch/arm/cpu/armv7/omap4/clocks.c | 199 | ||||
| -rw-r--r-- | arch/arm/cpu/armv7/omap4/hw_data.c | 38 | ||||
| -rw-r--r-- | arch/arm/cpu/armv7/omap4/prcm-regs.c | 295 | ||||
| -rw-r--r-- | arch/arm/cpu/armv7/omap5/Makefile | 2 | ||||
| -rw-r--r-- | arch/arm/cpu/armv7/omap5/clocks.c | 215 | ||||
| -rw-r--r-- | arch/arm/cpu/armv7/omap5/hw_data.c | 38 | ||||
| -rw-r--r-- | arch/arm/cpu/armv7/omap5/prcm-regs.c | 306 | 
12 files changed, 951 insertions, 268 deletions
| diff --git a/arch/arm/cpu/armv7/omap-common/clocks-common.c b/arch/arm/cpu/armv7/omap-common/clocks-common.c index 1f95fba8c..d36fcccaf 100644 --- a/arch/arm/cpu/armv7/omap-common/clocks-common.c +++ b/arch/arm/cpu/armv7/omap-common/clocks-common.c @@ -61,7 +61,7 @@ static inline u32 __get_sys_clk_index(void)  		ind = OMAP_SYS_CLK_IND_38_4_MHZ;  	else {  		/* SYS_CLKSEL - 1 to match the dpll param array indices */ -		ind = (readl(&prcm->cm_sys_clksel) & +		ind = (readl((*prcm)->cm_sys_clksel) &  			CM_SYS_CLKSEL_SYS_CLKSEL_MASK) - 1;  	}  	return ind; @@ -76,7 +76,7 @@ u32 get_sys_clk_freq(void)  	return sys_clk_array[index];  } -static inline void do_bypass_dpll(u32 *const base) +static inline void do_bypass_dpll(u32 const base)  {  	struct dpll_regs *dpll_regs = (struct dpll_regs *)base; @@ -86,17 +86,17 @@ static inline void do_bypass_dpll(u32 *const base)  			CM_CLKMODE_DPLL_EN_SHIFT);  } -static inline void wait_for_bypass(u32 *const base) +static inline void wait_for_bypass(u32 const base)  {  	struct dpll_regs *const dpll_regs = (struct dpll_regs *)base;  	if (!wait_on_value(ST_DPLL_CLK_MASK, 0, &dpll_regs->cm_idlest_dpll,  				LDELAY)) { -		printf("Bypassing DPLL failed %p\n", base); +		printf("Bypassing DPLL failed %x\n", base);  	}  } -static inline void do_lock_dpll(u32 *const base) +static inline void do_lock_dpll(u32 const base)  {  	struct dpll_regs *const dpll_regs = (struct dpll_regs *)base; @@ -105,18 +105,18 @@ static inline void do_lock_dpll(u32 *const base)  		      DPLL_EN_LOCK << CM_CLKMODE_DPLL_EN_SHIFT);  } -static inline void wait_for_lock(u32 *const base) +static inline void wait_for_lock(u32 const base)  {  	struct dpll_regs *const dpll_regs = (struct dpll_regs *)base;  	if (!wait_on_value(ST_DPLL_CLK_MASK, ST_DPLL_CLK_MASK,  		&dpll_regs->cm_idlest_dpll, LDELAY)) { -		printf("DPLL locking failed for %p\n", base); +		printf("DPLL locking failed for %x\n", base);  		hang();  	}  } -inline u32 check_for_lock(u32 *const base) +inline u32 check_for_lock(u32 const base)  {  	struct dpll_regs *const dpll_regs = (struct dpll_regs *)base;  	u32 lock = readl(&dpll_regs->cm_idlest_dpll) & ST_DPLL_CLK_MASK; @@ -124,7 +124,7 @@ inline u32 check_for_lock(u32 *const base)  	return lock;  } -static void do_setup_dpll(u32 *const base, const struct dpll_params *params, +static void do_setup_dpll(u32 const base, const struct dpll_params *params,  				u8 lock, char *dpll)  {  	u32 temp, M, N; @@ -236,24 +236,24 @@ void configure_mpu_dpll(void)  	 */  	if ((omap_rev >= OMAP4460_ES1_0) && (omap_rev < OMAP5430_ES1_0)) {  		mpu_dpll_regs = -			(struct dpll_regs *)&prcm->cm_clkmode_dpll_mpu; -		bypass_dpll(&prcm->cm_clkmode_dpll_mpu); -		clrbits_le32(&prcm->cm_mpu_mpu_clkctrl, +			(struct dpll_regs *)((*prcm)->cm_clkmode_dpll_mpu); +		bypass_dpll((*prcm)->cm_clkmode_dpll_mpu); +		clrbits_le32((*prcm)->cm_mpu_mpu_clkctrl,  			MPU_CLKCTRL_CLKSEL_EMIF_DIV_MODE_MASK); -		setbits_le32(&prcm->cm_mpu_mpu_clkctrl, +		setbits_le32((*prcm)->cm_mpu_mpu_clkctrl,  			MPU_CLKCTRL_CLKSEL_ABE_DIV_MODE_MASK);  		clrbits_le32(&mpu_dpll_regs->cm_clksel_dpll,  			CM_CLKSEL_DCC_EN_MASK);  	} -	setbits_le32(&prcm->cm_mpu_mpu_clkctrl, +	setbits_le32((*prcm)->cm_mpu_mpu_clkctrl,  		MPU_CLKCTRL_CLKSEL_EMIF_DIV_MODE_MASK); -	setbits_le32(&prcm->cm_mpu_mpu_clkctrl, +	setbits_le32((*prcm)->cm_mpu_mpu_clkctrl,  		MPU_CLKCTRL_CLKSEL_ABE_DIV_MODE_MASK);  	params = get_mpu_dpll_params(); -	do_setup_dpll(&prcm->cm_clkmode_dpll_mpu, params, DPLL_LOCK, "mpu"); +	do_setup_dpll((*prcm)->cm_clkmode_dpll_mpu, params, DPLL_LOCK, "mpu");  	debug("MPU DPLL locked\n");  } @@ -277,12 +277,12 @@ static void setup_usb_dpll(void)  	den = (params->n + 1) * 250 * 1000;  	num += den - 1;  	sd_div = num / den; -	clrsetbits_le32(&prcm->cm_clksel_dpll_usb, +	clrsetbits_le32((*prcm)->cm_clksel_dpll_usb,  			CM_CLKSEL_DPLL_DPLL_SD_DIV_MASK,  			sd_div << CM_CLKSEL_DPLL_DPLL_SD_DIV_SHIFT);  	/* Now setup the dpll with the regular function */ -	do_setup_dpll(&prcm->cm_clkmode_dpll_usb, params, DPLL_LOCK, "usb"); +	do_setup_dpll((*prcm)->cm_clkmode_dpll_usb, params, DPLL_LOCK, "usb");  }  #endif @@ -301,21 +301,21 @@ static void setup_dplls(void)  	 * using the FREQ_UPDATE method(freq_update_core())  	 */  	if (emif_sdram_type() == EMIF_SDRAM_TYPE_LPDDR2) -		do_setup_dpll(&prcm->cm_clkmode_dpll_core, params, +		do_setup_dpll((*prcm)->cm_clkmode_dpll_core, params,  							DPLL_NO_LOCK, "core");  	else -		do_setup_dpll(&prcm->cm_clkmode_dpll_core, params, +		do_setup_dpll((*prcm)->cm_clkmode_dpll_core, params,  							DPLL_LOCK, "core");  	/* Set the ratios for CORE_CLK, L3_CLK, L4_CLK */  	temp = (CLKSEL_CORE_X2_DIV_1 << CLKSEL_CORE_SHIFT) |  	    (CLKSEL_L3_CORE_DIV_2 << CLKSEL_L3_SHIFT) |  	    (CLKSEL_L4_L3_DIV_2 << CLKSEL_L4_SHIFT); -	writel(temp, &prcm->cm_clksel_core); +	writel(temp, (*prcm)->cm_clksel_core);  	debug("Core DPLL configured\n");  	/* lock PER dpll */  	params = get_per_dpll_params(); -	do_setup_dpll(&prcm->cm_clkmode_dpll_per, +	do_setup_dpll((*prcm)->cm_clkmode_dpll_per,  			params, DPLL_LOCK, "per");  	debug("PER DPLL locked\n"); @@ -334,11 +334,11 @@ static void setup_non_essential_dplls(void)  	const struct dpll_params *params;  	/* IVA */ -	clrsetbits_le32(&prcm->cm_bypclk_dpll_iva, +	clrsetbits_le32((*prcm)->cm_bypclk_dpll_iva,  		CM_BYPCLK_DPLL_IVA_CLKSEL_MASK, DPLL_IVA_CLKSEL_CORE_X2_DIV_2);  	params = get_iva_dpll_params(); -	do_setup_dpll(&prcm->cm_clkmode_dpll_iva, params, DPLL_LOCK, "iva"); +	do_setup_dpll((*prcm)->cm_clkmode_dpll_iva, params, DPLL_LOCK, "iva");  	/* Configure ABE dpll */  	params = get_abe_dpll_params(); @@ -350,23 +350,23 @@ static void setup_non_essential_dplls(void)  	 * We need to enable some additional options to achieve  	 * 196.608MHz from 32768 Hz  	 */ -	setbits_le32(&prcm->cm_clkmode_dpll_abe, +	setbits_le32((*prcm)->cm_clkmode_dpll_abe,  			CM_CLKMODE_DPLL_DRIFTGUARD_EN_MASK|  			CM_CLKMODE_DPLL_RELOCK_RAMP_EN_MASK|  			CM_CLKMODE_DPLL_LPMODE_EN_MASK|  			CM_CLKMODE_DPLL_REGM4XEN_MASK);  	/* Spend 4 REFCLK cycles at each stage */ -	clrsetbits_le32(&prcm->cm_clkmode_dpll_abe, +	clrsetbits_le32((*prcm)->cm_clkmode_dpll_abe,  			CM_CLKMODE_DPLL_RAMP_RATE_MASK,  			1 << CM_CLKMODE_DPLL_RAMP_RATE_SHIFT);  #endif  	/* Select the right reference clk */ -	clrsetbits_le32(&prcm->cm_abe_pll_ref_clksel, +	clrsetbits_le32((*prcm)->cm_abe_pll_ref_clksel,  			CM_ABE_PLL_REF_CLKSEL_CLKSEL_MASK,  			abe_ref_clk << CM_ABE_PLL_REF_CLKSEL_CLKSEL_SHIFT);  	/* Lock the dpll */ -	do_setup_dpll(&prcm->cm_clkmode_dpll_abe, params, DPLL_LOCK, "abe"); +	do_setup_dpll((*prcm)->cm_clkmode_dpll_abe, params, DPLL_LOCK, "abe");  }  #endif @@ -417,14 +417,14 @@ void do_scale_vcore(u32 vcore_reg, u32 volt_mv)  		printf("Scaling voltage failed for 0x%x\n", vcore_reg);  } -static inline void enable_clock_domain(u32 *const clkctrl_reg, u32 enable_mode) +static inline void enable_clock_domain(u32 const clkctrl_reg, u32 enable_mode)  {  	clrsetbits_le32(clkctrl_reg, CD_CLKCTRL_CLKTRCTRL_MASK,  			enable_mode << CD_CLKCTRL_CLKTRCTRL_SHIFT); -	debug("Enable clock domain - %p\n", clkctrl_reg); +	debug("Enable clock domain - %x\n", clkctrl_reg);  } -static inline void wait_for_clk_enable(u32 *clkctrl_addr) +static inline void wait_for_clk_enable(u32 clkctrl_addr)  {  	u32 clkctrl, idlest = MODULE_CLKCTRL_IDLEST_DISABLED;  	u32 bound = LDELAY; @@ -436,19 +436,19 @@ static inline void wait_for_clk_enable(u32 *clkctrl_addr)  		idlest = (clkctrl & MODULE_CLKCTRL_IDLEST_MASK) >>  			 MODULE_CLKCTRL_IDLEST_SHIFT;  		if (--bound == 0) { -			printf("Clock enable failed for 0x%p idlest 0x%x\n", +			printf("Clock enable failed for 0x%x idlest 0x%x\n",  				clkctrl_addr, clkctrl);  			return;  		}  	}  } -static inline void enable_clock_module(u32 *const clkctrl_addr, u32 enable_mode, +static inline void enable_clock_module(u32 const clkctrl_addr, u32 enable_mode,  				u32 wait_for_enable)  {  	clrsetbits_le32(clkctrl_addr, MODULE_CLKCTRL_MODULEMODE_MASK,  			enable_mode << MODULE_CLKCTRL_MODULEMODE_SHIFT); -	debug("Enable clock module - %p\n", clkctrl_addr); +	debug("Enable clock module - %x\n", clkctrl_addr);  	if (wait_for_enable)  		wait_for_clk_enable(clkctrl_addr);  } @@ -461,10 +461,10 @@ void freq_update_core(void)  	core_dpll_params = get_core_dpll_params();  	/* Put EMIF clock domain in sw wakeup mode */ -	enable_clock_domain(&prcm->cm_memif_clkstctrl, +	enable_clock_domain((*prcm)->cm_memif_clkstctrl,  				CD_CLKCTRL_CLKTRCTRL_SW_WKUP); -	wait_for_clk_enable(&prcm->cm_memif_emif_1_clkctrl); -	wait_for_clk_enable(&prcm->cm_memif_emif_2_clkctrl); +	wait_for_clk_enable((*prcm)->cm_memif_emif_1_clkctrl); +	wait_for_clk_enable((*prcm)->cm_memif_emif_2_clkctrl);  	freq_config1 = SHADOW_FREQ_CONFIG1_FREQ_UPDATE_MASK |  	    SHADOW_FREQ_CONFIG1_DLL_RESET_MASK; @@ -476,9 +476,9 @@ void freq_update_core(void)  			SHADOW_FREQ_CONFIG1_M2_DIV_SHIFT) &  			SHADOW_FREQ_CONFIG1_M2_DIV_MASK; -	writel(freq_config1, &prcm->cm_shadow_freq_config1); +	writel(freq_config1, (*prcm)->cm_shadow_freq_config1);  	if (!wait_on_value(SHADOW_FREQ_CONFIG1_FREQ_UPDATE_MASK, 0, -				&prcm->cm_shadow_freq_config1, LDELAY)) { +			(u32 *) (*prcm)->cm_shadow_freq_config1, LDELAY)) {  		puts("FREQ UPDATE procedure failed!!");  		hang();  	} @@ -490,20 +490,20 @@ void freq_update_core(void)  	 */  	if (omap_rev != OMAP5430_ES1_0) {  		/* Put EMIF clock domain back in hw auto mode */ -		enable_clock_domain(&prcm->cm_memif_clkstctrl, +		enable_clock_domain((*prcm)->cm_memif_clkstctrl,  					CD_CLKCTRL_CLKTRCTRL_HW_AUTO); -		wait_for_clk_enable(&prcm->cm_memif_emif_1_clkctrl); -		wait_for_clk_enable(&prcm->cm_memif_emif_2_clkctrl); +		wait_for_clk_enable((*prcm)->cm_memif_emif_1_clkctrl); +		wait_for_clk_enable((*prcm)->cm_memif_emif_2_clkctrl);  	}  } -void bypass_dpll(u32 *const base) +void bypass_dpll(u32 const base)  {  	do_bypass_dpll(base);  	wait_for_bypass(base);  } -void lock_dpll(u32 *const base) +void lock_dpll(u32 const base)  {  	do_lock_dpll(base);  	wait_for_lock(base); @@ -512,39 +512,39 @@ void lock_dpll(u32 *const base)  void setup_clocks_for_console(void)  {  	/* Do not add any spl_debug prints in this function */ -	clrsetbits_le32(&prcm->cm_l4per_clkstctrl, CD_CLKCTRL_CLKTRCTRL_MASK, +	clrsetbits_le32((*prcm)->cm_l4per_clkstctrl, CD_CLKCTRL_CLKTRCTRL_MASK,  			CD_CLKCTRL_CLKTRCTRL_SW_WKUP <<  			CD_CLKCTRL_CLKTRCTRL_SHIFT);  	/* Enable all UARTs - console will be on one of them */ -	clrsetbits_le32(&prcm->cm_l4per_uart1_clkctrl, +	clrsetbits_le32((*prcm)->cm_l4per_uart1_clkctrl,  			MODULE_CLKCTRL_MODULEMODE_MASK,  			MODULE_CLKCTRL_MODULEMODE_SW_EXPLICIT_EN <<  			MODULE_CLKCTRL_MODULEMODE_SHIFT); -	clrsetbits_le32(&prcm->cm_l4per_uart2_clkctrl, +	clrsetbits_le32((*prcm)->cm_l4per_uart2_clkctrl,  			MODULE_CLKCTRL_MODULEMODE_MASK,  			MODULE_CLKCTRL_MODULEMODE_SW_EXPLICIT_EN <<  			MODULE_CLKCTRL_MODULEMODE_SHIFT); -	clrsetbits_le32(&prcm->cm_l4per_uart3_clkctrl, +	clrsetbits_le32((*prcm)->cm_l4per_uart3_clkctrl,  			MODULE_CLKCTRL_MODULEMODE_MASK,  			MODULE_CLKCTRL_MODULEMODE_SW_EXPLICIT_EN <<  			MODULE_CLKCTRL_MODULEMODE_SHIFT); -	clrsetbits_le32(&prcm->cm_l4per_uart3_clkctrl, +	clrsetbits_le32((*prcm)->cm_l4per_uart3_clkctrl,  			MODULE_CLKCTRL_MODULEMODE_MASK,  			MODULE_CLKCTRL_MODULEMODE_SW_EXPLICIT_EN <<  			MODULE_CLKCTRL_MODULEMODE_SHIFT); -	clrsetbits_le32(&prcm->cm_l4per_clkstctrl, CD_CLKCTRL_CLKTRCTRL_MASK, +	clrsetbits_le32((*prcm)->cm_l4per_clkstctrl, CD_CLKCTRL_CLKTRCTRL_MASK,  			CD_CLKCTRL_CLKTRCTRL_HW_AUTO <<  			CD_CLKCTRL_CLKTRCTRL_SHIFT);  } -void do_enable_clocks(u32 *const *clk_domains, -			    u32 *const *clk_modules_hw_auto, -			    u32 *const *clk_modules_explicit_en, +void do_enable_clocks(u32 const *clk_domains, +			    u32 const *clk_modules_hw_auto, +			    u32 const *clk_modules_explicit_en,  			    u8 wait_for_enable)  {  	u32 i, max = 100; diff --git a/arch/arm/cpu/armv7/omap-common/emif-common.c b/arch/arm/cpu/armv7/omap-common/emif-common.c index 8864abc16..bb37cf314 100644 --- a/arch/arm/cpu/armv7/omap-common/emif-common.c +++ b/arch/arm/cpu/armv7/omap-common/emif-common.c @@ -1289,9 +1289,9 @@ void sdram_init(void)  	if (!(in_sdram || warm_reset())) {  		if (sdram_type == EMIF_SDRAM_TYPE_LPDDR2) -			bypass_dpll(&prcm->cm_clkmode_dpll_core); +			bypass_dpll((*prcm)->cm_clkmode_dpll_core);  		else -			writel(CM_DLL_CTRL_NO_OVERRIDE, &prcm->cm_dll_ctrl); +			writel(CM_DLL_CTRL_NO_OVERRIDE, (*prcm)->cm_dll_ctrl);  	}  	if (!in_sdram) diff --git a/arch/arm/cpu/armv7/omap-common/hwinit-common.c b/arch/arm/cpu/armv7/omap-common/hwinit-common.c index 9ef10bdf2..fff89da57 100644 --- a/arch/arm/cpu/armv7/omap-common/hwinit-common.c +++ b/arch/arm/cpu/armv7/omap-common/hwinit-common.c @@ -32,6 +32,7 @@  #include <asm/arch/sys_proto.h>  #include <asm/sizes.h>  #include <asm/emif.h> +#include <asm/omap_common.h>  DECLARE_GLOBAL_DATA_PTR; @@ -116,6 +117,8 @@ void spl_display_print(void)  void s_init(void)  {  	init_omap_revision(); +	hw_data_init(); +  #ifdef CONFIG_SPL_BUILD  	if (warm_reset() && (omap_revision() <= OMAP5430_ES1_0))  		force_emif_self_refresh(); diff --git a/arch/arm/cpu/armv7/omap-common/vc.c b/arch/arm/cpu/armv7/omap-common/vc.c index a045b7718..e6e5f7893 100644 --- a/arch/arm/cpu/armv7/omap-common/vc.c +++ b/arch/arm/cpu/armv7/omap-common/vc.c @@ -81,13 +81,13 @@ void omap_vc_init(u16 speed_khz)  	cycles_low -= 7;  	val = (cycles_hi << PRM_VC_CFG_I2C_CLK_SCLH_SHIFT) |  	       (cycles_low << PRM_VC_CFG_I2C_CLK_SCLL_SHIFT); -	writel(val, &prcm->prm_vc_cfg_i2c_clk); +	writel(val, (*prcm)->prm_vc_cfg_i2c_clk);  	val = CONFIG_OMAP_VC_I2C_HS_MCODE <<  		PRM_VC_CFG_I2C_MODE_HSMCODE_SHIFT;  	/* No HS mode for now */  	val &= ~PRM_VC_CFG_I2C_MODE_HSMODEEN_BIT; -	writel(val, &prcm->prm_vc_cfg_i2c_mode); +	writel(val, (*prcm)->prm_vc_cfg_i2c_mode);  }  /** @@ -113,14 +113,15 @@ int omap_vc_bypass_send_value(u8 sa, u8 reg_addr, u8 reg_data)  	reg_val = sa << PRM_VC_VAL_BYPASS_SLAVEADDR_SHIFT |  	    reg_addr << PRM_VC_VAL_BYPASS_REGADDR_SHIFT |  	    reg_data << PRM_VC_VAL_BYPASS_DATA_SHIFT; -	writel(reg_val, &prcm->prm_vc_val_bypass); +	writel(reg_val, (*prcm)->prm_vc_val_bypass);  	/* Signal VC to send data */ -	writel(reg_val | PRM_VC_VAL_BYPASS_VALID_BIT, &prcm->prm_vc_val_bypass); +	writel(reg_val | PRM_VC_VAL_BYPASS_VALID_BIT, +				(*prcm)->prm_vc_val_bypass);  	/* Wait on VC to complete transmission */  	do { -		reg_val = readl(&prcm->prm_vc_val_bypass) & +		reg_val = readl((*prcm)->prm_vc_val_bypass) &  				PRM_VC_VAL_BYPASS_VALID_BIT;  		if (!reg_val)  			break; diff --git a/arch/arm/cpu/armv7/omap4/Makefile b/arch/arm/cpu/armv7/omap4/Makefile index 83160a28f..036514895 100644 --- a/arch/arm/cpu/armv7/omap4/Makefile +++ b/arch/arm/cpu/armv7/omap4/Makefile @@ -29,6 +29,8 @@ COBJS	+= sdram_elpida.o  COBJS	+= hwinit.o  COBJS	+= clocks.o  COBJS	+= emif.o +COBJS	+= prcm-regs.o +COBJS	+= hw_data.o  SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c)  OBJS	:= $(addprefix $(obj),$(COBJS) $(SOBJS)) diff --git a/arch/arm/cpu/armv7/omap4/clocks.c b/arch/arm/cpu/armv7/omap4/clocks.c index 12c58033d..9acceb0d4 100644 --- a/arch/arm/cpu/armv7/omap4/clocks.c +++ b/arch/arm/cpu/armv7/omap4/clocks.c @@ -46,8 +46,6 @@  #define puts(s)  #endif /* !CONFIG_SPL_BUILD */ -struct omap4_prcm_regs *const prcm = (struct omap4_prcm_regs *)0x4A004100; -  const u32 sys_clk_array[8] = {  	12000000,	       /* 12 MHz */  	13000000,	       /* 13 MHz */ @@ -176,7 +174,7 @@ static const struct dpll_params usb_dpll_params_1920mhz[NUM_SYS_CLKS] = {  	{25, 0, 2, -1, -1, -1, -1, -1}		/* 38.4 MHz */  }; -void setup_post_dividers(u32 *const base, const struct dpll_params *params) +void setup_post_dividers(u32 const base, const struct dpll_params *params)  {  	struct dpll_regs *const dpll_regs = (struct dpll_regs *)base; @@ -345,54 +343,54 @@ u32 get_offset_code(u32 offset)   */  void enable_basic_clocks(void)  { -	u32 *const clk_domains_essential[] = { -		&prcm->cm_l4per_clkstctrl, -		&prcm->cm_l3init_clkstctrl, -		&prcm->cm_memif_clkstctrl, -		&prcm->cm_l4cfg_clkstctrl, +	u32 const clk_domains_essential[] = { +		(*prcm)->cm_l4per_clkstctrl, +		(*prcm)->cm_l3init_clkstctrl, +		(*prcm)->cm_memif_clkstctrl, +		(*prcm)->cm_l4cfg_clkstctrl,  		0  	}; -	u32 *const clk_modules_hw_auto_essential[] = { -		&prcm->cm_l3_2_gpmc_clkctrl, -		&prcm->cm_memif_emif_1_clkctrl, -		&prcm->cm_memif_emif_2_clkctrl, -		&prcm->cm_l4cfg_l4_cfg_clkctrl, -		&prcm->cm_wkup_gpio1_clkctrl, -		&prcm->cm_l4per_gpio2_clkctrl, -		&prcm->cm_l4per_gpio3_clkctrl, -		&prcm->cm_l4per_gpio4_clkctrl, -		&prcm->cm_l4per_gpio5_clkctrl, -		&prcm->cm_l4per_gpio6_clkctrl, +	u32 const clk_modules_hw_auto_essential[] = { +		(*prcm)->cm_l3_2_gpmc_clkctrl, +		(*prcm)->cm_memif_emif_1_clkctrl, +		(*prcm)->cm_memif_emif_2_clkctrl, +		(*prcm)->cm_l4cfg_l4_cfg_clkctrl, +		(*prcm)->cm_wkup_gpio1_clkctrl, +		(*prcm)->cm_l4per_gpio2_clkctrl, +		(*prcm)->cm_l4per_gpio3_clkctrl, +		(*prcm)->cm_l4per_gpio4_clkctrl, +		(*prcm)->cm_l4per_gpio5_clkctrl, +		(*prcm)->cm_l4per_gpio6_clkctrl,  		0  	}; -	u32 *const clk_modules_explicit_en_essential[] = { -		&prcm->cm_wkup_gptimer1_clkctrl, -		&prcm->cm_l3init_hsmmc1_clkctrl, -		&prcm->cm_l3init_hsmmc2_clkctrl, -		&prcm->cm_l4per_gptimer2_clkctrl, -		&prcm->cm_wkup_wdtimer2_clkctrl, -		&prcm->cm_l4per_uart3_clkctrl, +	u32 const clk_modules_explicit_en_essential[] = { +		(*prcm)->cm_wkup_gptimer1_clkctrl, +		(*prcm)->cm_l3init_hsmmc1_clkctrl, +		(*prcm)->cm_l3init_hsmmc2_clkctrl, +		(*prcm)->cm_l4per_gptimer2_clkctrl, +		(*prcm)->cm_wkup_wdtimer2_clkctrl, +		(*prcm)->cm_l4per_uart3_clkctrl,  		0  	};  	/* Enable optional additional functional clock for GPIO4 */ -	setbits_le32(&prcm->cm_l4per_gpio4_clkctrl, +	setbits_le32((*prcm)->cm_l4per_gpio4_clkctrl,  			GPIO4_CLKCTRL_OPTFCLKEN_MASK);  	/* Enable 96 MHz clock for MMC1 & MMC2 */ -	setbits_le32(&prcm->cm_l3init_hsmmc1_clkctrl, +	setbits_le32((*prcm)->cm_l3init_hsmmc1_clkctrl,  			HSMMC_CLKCTRL_CLKSEL_MASK); -	setbits_le32(&prcm->cm_l3init_hsmmc2_clkctrl, +	setbits_le32((*prcm)->cm_l3init_hsmmc2_clkctrl,  			HSMMC_CLKCTRL_CLKSEL_MASK);  	/* Select 32KHz clock as the source of GPTIMER1 */ -	setbits_le32(&prcm->cm_wkup_gptimer1_clkctrl, +	setbits_le32((*prcm)->cm_wkup_gptimer1_clkctrl,  			GPTIMER1_CLKCTRL_CLKSEL_MASK);  	/* Enable optional 48M functional clock for USB  PHY */ -	setbits_le32(&prcm->cm_l3init_usbphy_clkctrl, +	setbits_le32((*prcm)->cm_l3init_usbphy_clkctrl,  			USBPHY_CLKCTRL_OPTFCLKEN_PHY_48M_MASK);  	do_enable_clocks(clk_domains_essential, @@ -403,26 +401,26 @@ void enable_basic_clocks(void)  void enable_basic_uboot_clocks(void)  { -	u32 *const clk_domains_essential[] = { +	u32 const clk_domains_essential[] = {  		0  	}; -	u32 *const clk_modules_hw_auto_essential[] = { -		&prcm->cm_l3init_hsusbotg_clkctrl, -		&prcm->cm_l3init_usbphy_clkctrl, -		&prcm->cm_l3init_usbphy_clkctrl, -		&prcm->cm_clksel_usb_60mhz, -		&prcm->cm_l3init_hsusbtll_clkctrl, +	u32 const clk_modules_hw_auto_essential[] = { +		(*prcm)->cm_l3init_hsusbotg_clkctrl, +		(*prcm)->cm_l3init_usbphy_clkctrl, +		(*prcm)->cm_l3init_usbphy_clkctrl, +		(*prcm)->cm_clksel_usb_60mhz, +		(*prcm)->cm_l3init_hsusbtll_clkctrl,  		0  	}; -	u32 *const clk_modules_explicit_en_essential[] = { -		&prcm->cm_l4per_mcspi1_clkctrl, -		&prcm->cm_l4per_i2c1_clkctrl, -		&prcm->cm_l4per_i2c2_clkctrl, -		&prcm->cm_l4per_i2c3_clkctrl, -		&prcm->cm_l4per_i2c4_clkctrl, -		&prcm->cm_l3init_hsusbhost_clkctrl, +	u32 const clk_modules_explicit_en_essential[] = { +		(*prcm)->cm_l4per_mcspi1_clkctrl, +		(*prcm)->cm_l4per_i2c1_clkctrl, +		(*prcm)->cm_l4per_i2c2_clkctrl, +		(*prcm)->cm_l4per_i2c3_clkctrl, +		(*prcm)->cm_l4per_i2c4_clkctrl, +		(*prcm)->cm_l3init_hsusbhost_clkctrl,  		0  	}; @@ -438,72 +436,72 @@ void enable_basic_uboot_clocks(void)   */  void enable_non_essential_clocks(void)  { -	u32 *const clk_domains_non_essential[] = { -		&prcm->cm_mpu_m3_clkstctrl, -		&prcm->cm_ivahd_clkstctrl, -		&prcm->cm_dsp_clkstctrl, -		&prcm->cm_dss_clkstctrl, -		&prcm->cm_sgx_clkstctrl, -		&prcm->cm1_abe_clkstctrl, -		&prcm->cm_c2c_clkstctrl, -		&prcm->cm_cam_clkstctrl, -		&prcm->cm_dss_clkstctrl, -		&prcm->cm_sdma_clkstctrl, +	u32 const clk_domains_non_essential[] = { +		(*prcm)->cm_mpu_m3_clkstctrl, +		(*prcm)->cm_ivahd_clkstctrl, +		(*prcm)->cm_dsp_clkstctrl, +		(*prcm)->cm_dss_clkstctrl, +		(*prcm)->cm_sgx_clkstctrl, +		(*prcm)->cm1_abe_clkstctrl, +		(*prcm)->cm_c2c_clkstctrl, +		(*prcm)->cm_cam_clkstctrl, +		(*prcm)->cm_dss_clkstctrl, +		(*prcm)->cm_sdma_clkstctrl,  		0  	}; -	u32 *const clk_modules_hw_auto_non_essential[] = { -		&prcm->cm_l3instr_l3_3_clkctrl, -		&prcm->cm_l3instr_l3_instr_clkctrl, -		&prcm->cm_l3instr_intrconn_wp1_clkctrl, -		&prcm->cm_l3init_hsi_clkctrl, +	u32 const clk_modules_hw_auto_non_essential[] = { +		(*prcm)->cm_l3instr_l3_3_clkctrl, +		(*prcm)->cm_l3instr_l3_instr_clkctrl, +		(*prcm)->cm_l3instr_intrconn_wp1_clkctrl, +		(*prcm)->cm_l3init_hsi_clkctrl,  		0  	}; -	u32 *const clk_modules_explicit_en_non_essential[] = { -		&prcm->cm1_abe_aess_clkctrl, -		&prcm->cm1_abe_pdm_clkctrl, -		&prcm->cm1_abe_dmic_clkctrl, -		&prcm->cm1_abe_mcasp_clkctrl, -		&prcm->cm1_abe_mcbsp1_clkctrl, -		&prcm->cm1_abe_mcbsp2_clkctrl, -		&prcm->cm1_abe_mcbsp3_clkctrl, -		&prcm->cm1_abe_slimbus_clkctrl, -		&prcm->cm1_abe_timer5_clkctrl, -		&prcm->cm1_abe_timer6_clkctrl, -		&prcm->cm1_abe_timer7_clkctrl, -		&prcm->cm1_abe_timer8_clkctrl, -		&prcm->cm1_abe_wdt3_clkctrl, -		&prcm->cm_l4per_gptimer9_clkctrl, -		&prcm->cm_l4per_gptimer10_clkctrl, -		&prcm->cm_l4per_gptimer11_clkctrl, -		&prcm->cm_l4per_gptimer3_clkctrl, -		&prcm->cm_l4per_gptimer4_clkctrl, -		&prcm->cm_l4per_hdq1w_clkctrl, -		&prcm->cm_l4per_mcbsp4_clkctrl, -		&prcm->cm_l4per_mcspi2_clkctrl, -		&prcm->cm_l4per_mcspi3_clkctrl, -		&prcm->cm_l4per_mcspi4_clkctrl, -		&prcm->cm_l4per_mmcsd3_clkctrl, -		&prcm->cm_l4per_mmcsd4_clkctrl, -		&prcm->cm_l4per_mmcsd5_clkctrl, -		&prcm->cm_l4per_uart1_clkctrl, -		&prcm->cm_l4per_uart2_clkctrl, -		&prcm->cm_l4per_uart4_clkctrl, -		&prcm->cm_wkup_keyboard_clkctrl, -		&prcm->cm_wkup_wdtimer2_clkctrl, -		&prcm->cm_cam_iss_clkctrl, -		&prcm->cm_cam_fdif_clkctrl, -		&prcm->cm_dss_dss_clkctrl, -		&prcm->cm_sgx_sgx_clkctrl, +	u32 const clk_modules_explicit_en_non_essential[] = { +		(*prcm)->cm1_abe_aess_clkctrl, +		(*prcm)->cm1_abe_pdm_clkctrl, +		(*prcm)->cm1_abe_dmic_clkctrl, +		(*prcm)->cm1_abe_mcasp_clkctrl, +		(*prcm)->cm1_abe_mcbsp1_clkctrl, +		(*prcm)->cm1_abe_mcbsp2_clkctrl, +		(*prcm)->cm1_abe_mcbsp3_clkctrl, +		(*prcm)->cm1_abe_slimbus_clkctrl, +		(*prcm)->cm1_abe_timer5_clkctrl, +		(*prcm)->cm1_abe_timer6_clkctrl, +		(*prcm)->cm1_abe_timer7_clkctrl, +		(*prcm)->cm1_abe_timer8_clkctrl, +		(*prcm)->cm1_abe_wdt3_clkctrl, +		(*prcm)->cm_l4per_gptimer9_clkctrl, +		(*prcm)->cm_l4per_gptimer10_clkctrl, +		(*prcm)->cm_l4per_gptimer11_clkctrl, +		(*prcm)->cm_l4per_gptimer3_clkctrl, +		(*prcm)->cm_l4per_gptimer4_clkctrl, +		(*prcm)->cm_l4per_hdq1w_clkctrl, +		(*prcm)->cm_l4per_mcbsp4_clkctrl, +		(*prcm)->cm_l4per_mcspi2_clkctrl, +		(*prcm)->cm_l4per_mcspi3_clkctrl, +		(*prcm)->cm_l4per_mcspi4_clkctrl, +		(*prcm)->cm_l4per_mmcsd3_clkctrl, +		(*prcm)->cm_l4per_mmcsd4_clkctrl, +		(*prcm)->cm_l4per_mmcsd5_clkctrl, +		(*prcm)->cm_l4per_uart1_clkctrl, +		(*prcm)->cm_l4per_uart2_clkctrl, +		(*prcm)->cm_l4per_uart4_clkctrl, +		(*prcm)->cm_wkup_keyboard_clkctrl, +		(*prcm)->cm_wkup_wdtimer2_clkctrl, +		(*prcm)->cm_cam_iss_clkctrl, +		(*prcm)->cm_cam_fdif_clkctrl, +		(*prcm)->cm_dss_dss_clkctrl, +		(*prcm)->cm_sgx_sgx_clkctrl,  		0  	};  	/* Enable optional functional clock for ISS */ -	setbits_le32(&prcm->cm_cam_iss_clkctrl, ISS_CLKCTRL_OPTFCLKEN_MASK); +	setbits_le32((*prcm)->cm_cam_iss_clkctrl, ISS_CLKCTRL_OPTFCLKEN_MASK);  	/* Enable all optional functional clocks of DSS */ -	setbits_le32(&prcm->cm_dss_dss_clkctrl, DSS_CLKCTRL_OPTFCLKEN_MASK); +	setbits_le32((*prcm)->cm_dss_dss_clkctrl, DSS_CLKCTRL_OPTFCLKEN_MASK);  	do_enable_clocks(clk_domains_non_essential,  			 clk_modules_hw_auto_non_essential, @@ -511,7 +509,8 @@ void enable_non_essential_clocks(void)  			 0);  	/* Put camera module in no sleep mode */ -	clrsetbits_le32(&prcm->cm_cam_clkstctrl, MODULE_CLKCTRL_MODULEMODE_MASK, +	clrsetbits_le32((*prcm)->cm_cam_clkstctrl, +			MODULE_CLKCTRL_MODULEMODE_MASK,  			CD_CLKCTRL_CLKTRCTRL_NO_SLEEP <<  			MODULE_CLKCTRL_MODULEMODE_SHIFT);  } diff --git a/arch/arm/cpu/armv7/omap4/hw_data.c b/arch/arm/cpu/armv7/omap4/hw_data.c new file mode 100644 index 000000000..3174cc326 --- /dev/null +++ b/arch/arm/cpu/armv7/omap4/hw_data.c @@ -0,0 +1,38 @@ +/* + * + * HW data initialization for OMAP4 + * + * (C) Copyright 2013 + * Texas Instruments, <www.ti.com> + * + * Sricharan R <r.sricharan@ti.com> + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ +#include <common.h> +#include <asm/arch/omap.h> +#include <asm/omap_common.h> + +struct prcm_regs const **prcm = +			(struct prcm_regs const **) OMAP_SRAM_SCRATCH_PRCM_PTR; + +void hw_data_init(void) +{ +	*prcm = &omap4_prcm; +} diff --git a/arch/arm/cpu/armv7/omap4/prcm-regs.c b/arch/arm/cpu/armv7/omap4/prcm-regs.c new file mode 100644 index 000000000..815b9d208 --- /dev/null +++ b/arch/arm/cpu/armv7/omap4/prcm-regs.c @@ -0,0 +1,295 @@ +/* + * + * HW regs data for OMAP4 + * + * (C) Copyright 2013 + * Texas Instruments, <www.ti.com> + * + * Sricharan R <r.sricharan@ti.com> + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +#include <asm/omap_common.h> + +struct prcm_regs const omap4_prcm = { +	/* cm1.ckgen */ +	.cm_clksel_core  = 0x4a004100, +	.cm_clksel_abe = 0x4a004108, +	.cm_dll_ctrl = 0x4a004110, +	.cm_clkmode_dpll_core = 0x4a004120, +	.cm_idlest_dpll_core = 0x4a004124, +	.cm_autoidle_dpll_core = 0x4a004128, +	.cm_clksel_dpll_core = 0x4a00412c, +	.cm_div_m2_dpll_core = 0x4a004130, +	.cm_div_m3_dpll_core = 0x4a004134, +	.cm_div_m4_dpll_core = 0x4a004138, +	.cm_div_m5_dpll_core = 0x4a00413c, +	.cm_div_m6_dpll_core = 0x4a004140, +	.cm_div_m7_dpll_core = 0x4a004144, +	.cm_ssc_deltamstep_dpll_core = 0x4a004148, +	.cm_ssc_modfreqdiv_dpll_core = 0x4a00414c, +	.cm_emu_override_dpll_core = 0x4a004150, +	.cm_clkmode_dpll_mpu = 0x4a004160, +	.cm_idlest_dpll_mpu = 0x4a004164, +	.cm_autoidle_dpll_mpu = 0x4a004168, +	.cm_clksel_dpll_mpu = 0x4a00416c, +	.cm_div_m2_dpll_mpu = 0x4a004170, +	.cm_ssc_deltamstep_dpll_mpu = 0x4a004188, +	.cm_ssc_modfreqdiv_dpll_mpu = 0x4a00418c, +	.cm_bypclk_dpll_mpu = 0x4a00419c, +	.cm_clkmode_dpll_iva = 0x4a0041a0, +	.cm_idlest_dpll_iva = 0x4a0041a4, +	.cm_autoidle_dpll_iva = 0x4a0041a8, +	.cm_clksel_dpll_iva = 0x4a0041ac, +	.cm_div_m4_dpll_iva = 0x4a0041b8, +	.cm_div_m5_dpll_iva = 0x4a0041bc, +	.cm_ssc_deltamstep_dpll_iva = 0x4a0041c8, +	.cm_ssc_modfreqdiv_dpll_iva = 0x4a0041cc, +	.cm_bypclk_dpll_iva = 0x4a0041dc, +	.cm_clkmode_dpll_abe = 0x4a0041e0, +	.cm_idlest_dpll_abe = 0x4a0041e4, +	.cm_autoidle_dpll_abe = 0x4a0041e8, +	.cm_clksel_dpll_abe = 0x4a0041ec, +	.cm_div_m2_dpll_abe = 0x4a0041f0, +	.cm_div_m3_dpll_abe = 0x4a0041f4, +	.cm_ssc_deltamstep_dpll_abe = 0x4a004208, +	.cm_ssc_modfreqdiv_dpll_abe = 0x4a00420c, +	.cm_clkmode_dpll_ddrphy = 0x4a004220, +	.cm_idlest_dpll_ddrphy = 0x4a004224, +	.cm_autoidle_dpll_ddrphy = 0x4a004228, +	.cm_clksel_dpll_ddrphy = 0x4a00422c, +	.cm_div_m2_dpll_ddrphy = 0x4a004230, +	.cm_div_m4_dpll_ddrphy = 0x4a004238, +	.cm_div_m5_dpll_ddrphy = 0x4a00423c, +	.cm_div_m6_dpll_ddrphy = 0x4a004240, +	.cm_ssc_deltamstep_dpll_ddrphy = 0x4a004248, +	.cm_shadow_freq_config1 = 0x4a004260, +	.cm_mpu_mpu_clkctrl = 0x4a004320, + +	/* cm1.dsp */ +	.cm_dsp_clkstctrl = 0x4a004400, +	.cm_dsp_dsp_clkctrl = 0x4a004420, + +	/* cm1.abe */ +	.cm1_abe_clkstctrl = 0x4a004500, +	.cm1_abe_l4abe_clkctrl = 0x4a004520, +	.cm1_abe_aess_clkctrl = 0x4a004528, +	.cm1_abe_pdm_clkctrl = 0x4a004530, +	.cm1_abe_dmic_clkctrl = 0x4a004538, +	.cm1_abe_mcasp_clkctrl = 0x4a004540, +	.cm1_abe_mcbsp1_clkctrl = 0x4a004548, +	.cm1_abe_mcbsp2_clkctrl = 0x4a004550, +	.cm1_abe_mcbsp3_clkctrl = 0x4a004558, +	.cm1_abe_slimbus_clkctrl = 0x4a004560, +	.cm1_abe_timer5_clkctrl = 0x4a004568, +	.cm1_abe_timer6_clkctrl = 0x4a004570, +	.cm1_abe_timer7_clkctrl = 0x4a004578, +	.cm1_abe_timer8_clkctrl = 0x4a004580, +	.cm1_abe_wdt3_clkctrl = 0x4a004588, + +	/* cm2.ckgen */ +	.cm_clksel_mpu_m3_iss_root = 0x4a008100, +	.cm_clksel_usb_60mhz = 0x4a008104, +	.cm_scale_fclk = 0x4a008108, +	.cm_core_dvfs_perf1 = 0x4a008110, +	.cm_core_dvfs_perf2 = 0x4a008114, +	.cm_core_dvfs_perf3 = 0x4a008118, +	.cm_core_dvfs_perf4 = 0x4a00811c, +	.cm_core_dvfs_current = 0x4a008124, +	.cm_iva_dvfs_perf_tesla = 0x4a008128, +	.cm_iva_dvfs_perf_ivahd = 0x4a00812c, +	.cm_iva_dvfs_perf_abe = 0x4a008130, +	.cm_iva_dvfs_current = 0x4a008138, +	.cm_clkmode_dpll_per = 0x4a008140, +	.cm_idlest_dpll_per = 0x4a008144, +	.cm_autoidle_dpll_per = 0x4a008148, +	.cm_clksel_dpll_per = 0x4a00814c, +	.cm_div_m2_dpll_per = 0x4a008150, +	.cm_div_m3_dpll_per = 0x4a008154, +	.cm_div_m4_dpll_per = 0x4a008158, +	.cm_div_m5_dpll_per = 0x4a00815c, +	.cm_div_m6_dpll_per = 0x4a008160, +	.cm_div_m7_dpll_per = 0x4a008164, +	.cm_ssc_deltamstep_dpll_per = 0x4a008168, +	.cm_ssc_modfreqdiv_dpll_per = 0x4a00816c, +	.cm_emu_override_dpll_per = 0x4a008170, +	.cm_clkmode_dpll_usb = 0x4a008180, +	.cm_idlest_dpll_usb = 0x4a008184, +	.cm_autoidle_dpll_usb = 0x4a008188, +	.cm_clksel_dpll_usb = 0x4a00818c, +	.cm_div_m2_dpll_usb = 0x4a008190, +	.cm_ssc_deltamstep_dpll_usb = 0x4a0081a8, +	.cm_ssc_modfreqdiv_dpll_usb = 0x4a0081ac, +	.cm_clkdcoldo_dpll_usb = 0x4a0081b4, +	.cm_clkmode_dpll_unipro = 0x4a0081c0, +	.cm_idlest_dpll_unipro = 0x4a0081c4, +	.cm_autoidle_dpll_unipro = 0x4a0081c8, +	.cm_clksel_dpll_unipro = 0x4a0081cc, +	.cm_div_m2_dpll_unipro = 0x4a0081d0, +	.cm_ssc_deltamstep_dpll_unipro = 0x4a0081e8, +	.cm_ssc_modfreqdiv_dpll_unipro = 0x4a0081ec, + +	/* cm2.core */ +	.cm_l3_1_clkstctrl = 0x4a008700, +	.cm_l3_1_dynamicdep = 0x4a008708, +	.cm_l3_1_l3_1_clkctrl = 0x4a008720, +	.cm_l3_2_clkstctrl = 0x4a008800, +	.cm_l3_2_dynamicdep = 0x4a008808, +	.cm_l3_2_l3_2_clkctrl = 0x4a008820, +	.cm_l3_2_gpmc_clkctrl = 0x4a008828, +	.cm_l3_2_ocmc_ram_clkctrl = 0x4a008830, +	.cm_mpu_m3_clkstctrl = 0x4a008900, +	.cm_mpu_m3_staticdep = 0x4a008904, +	.cm_mpu_m3_dynamicdep = 0x4a008908, +	.cm_mpu_m3_mpu_m3_clkctrl = 0x4a008920, +	.cm_sdma_clkstctrl = 0x4a008a00, +	.cm_sdma_staticdep = 0x4a008a04, +	.cm_sdma_dynamicdep = 0x4a008a08, +	.cm_sdma_sdma_clkctrl = 0x4a008a20, +	.cm_memif_clkstctrl = 0x4a008b00, +	.cm_memif_dmm_clkctrl = 0x4a008b20, +	.cm_memif_emif_fw_clkctrl = 0x4a008b28, +	.cm_memif_emif_1_clkctrl = 0x4a008b30, +	.cm_memif_emif_2_clkctrl = 0x4a008b38, +	.cm_memif_dll_clkctrl = 0x4a008b40, +	.cm_memif_emif_h1_clkctrl = 0x4a008b50, +	.cm_memif_emif_h2_clkctrl = 0x4a008b58, +	.cm_memif_dll_h_clkctrl = 0x4a008b60, +	.cm_c2c_clkstctrl = 0x4a008c00, +	.cm_c2c_staticdep = 0x4a008c04, +	.cm_c2c_dynamicdep = 0x4a008c08, +	.cm_c2c_sad2d_clkctrl = 0x4a008c20, +	.cm_c2c_modem_icr_clkctrl = 0x4a008c28, +	.cm_c2c_sad2d_fw_clkctrl = 0x4a008c30, +	.cm_l4cfg_clkstctrl = 0x4a008d00, +	.cm_l4cfg_dynamicdep = 0x4a008d08, +	.cm_l4cfg_l4_cfg_clkctrl = 0x4a008d20, +	.cm_l4cfg_hw_sem_clkctrl = 0x4a008d28, +	.cm_l4cfg_mailbox_clkctrl = 0x4a008d30, +	.cm_l4cfg_sar_rom_clkctrl = 0x4a008d38, +	.cm_l3instr_clkstctrl = 0x4a008e00, +	.cm_l3instr_l3_3_clkctrl = 0x4a008e20, +	.cm_l3instr_l3_instr_clkctrl = 0x4a008e28, +	.cm_l3instr_intrconn_wp1_clkct = 0x4a008e40, +	.cm_ivahd_clkstctrl = 0x4a008f00, + +	/* cm2.ivahd */ +	.cm_ivahd_ivahd_clkctrl = 0x4a008f20, +	.cm_ivahd_sl2_clkctrl = 0x4a008f28, + +	/* cm2.cam */ +	.cm_cam_clkstctrl = 0x4a009000, +	.cm_cam_iss_clkctrl = 0x4a009020, +	.cm_cam_fdif_clkctrl = 0x4a009028, + +	/* cm2.dss */ +	.cm_dss_clkstctrl = 0x4a009100, +	.cm_dss_dss_clkctrl = 0x4a009120, + +	/* cm2.sgx */ +	.cm_sgx_clkstctrl = 0x4a009200, +	.cm_sgx_sgx_clkctrl = 0x4a009220, + +	/* cm2.l3init */ +	.cm_l3init_clkstctrl = 0x4a009300, +	.cm_l3init_hsmmc1_clkctrl = 0x4a009328, +	.cm_l3init_hsmmc2_clkctrl = 0x4a009330, +	.cm_l3init_hsi_clkctrl = 0x4a009338, +	.cm_l3init_hsusbhost_clkctrl = 0x4a009358, +	.cm_l3init_hsusbotg_clkctrl = 0x4a009360, +	.cm_l3init_hsusbtll_clkctrl = 0x4a009368, +	.cm_l3init_p1500_clkctrl = 0x4a009378, +	.cm_l3init_fsusb_clkctrl = 0x4a0093d0, +	.cm_l3init_usbphy_clkctrl = 0x4a0093e0, + +	/* cm2.l4per */ +	.cm_l4per_clkstctrl = 0x4a009400, +	.cm_l4per_dynamicdep = 0x4a009408, +	.cm_l4per_adc_clkctrl = 0x4a009420, +	.cm_l4per_gptimer10_clkctrl = 0x4a009428, +	.cm_l4per_gptimer11_clkctrl = 0x4a009430, +	.cm_l4per_gptimer2_clkctrl = 0x4a009438, +	.cm_l4per_gptimer3_clkctrl = 0x4a009440, +	.cm_l4per_gptimer4_clkctrl = 0x4a009448, +	.cm_l4per_gptimer9_clkctrl = 0x4a009450, +	.cm_l4per_elm_clkctrl = 0x4a009458, +	.cm_l4per_gpio2_clkctrl = 0x4a009460, +	.cm_l4per_gpio3_clkctrl = 0x4a009468, +	.cm_l4per_gpio4_clkctrl = 0x4a009470, +	.cm_l4per_gpio5_clkctrl = 0x4a009478, +	.cm_l4per_gpio6_clkctrl = 0x4a009480, +	.cm_l4per_hdq1w_clkctrl = 0x4a009488, +	.cm_l4per_hecc1_clkctrl = 0x4a009490, +	.cm_l4per_hecc2_clkctrl = 0x4a009498, +	.cm_l4per_i2c1_clkctrl = 0x4a0094a0, +	.cm_l4per_i2c2_clkctrl = 0x4a0094a8, +	.cm_l4per_i2c3_clkctrl = 0x4a0094b0, +	.cm_l4per_i2c4_clkctrl = 0x4a0094b8, +	.cm_l4per_l4per_clkctrl = 0x4a0094c0, +	.cm_l4per_mcasp2_clkctrl = 0x4a0094d0, +	.cm_l4per_mcasp3_clkctrl = 0x4a0094d8, +	.cm_l4per_mcbsp4_clkctrl = 0x4a0094e0, +	.cm_l4per_mgate_clkctrl = 0x4a0094e8, +	.cm_l4per_mcspi1_clkctrl = 0x4a0094f0, +	.cm_l4per_mcspi2_clkctrl = 0x4a0094f8, +	.cm_l4per_mcspi3_clkctrl = 0x4a009500, +	.cm_l4per_mcspi4_clkctrl = 0x4a009508, +	.cm_l4per_mmcsd3_clkctrl = 0x4a009520, +	.cm_l4per_mmcsd4_clkctrl = 0x4a009528, +	.cm_l4per_msprohg_clkctrl = 0x4a009530, +	.cm_l4per_slimbus2_clkctrl = 0x4a009538, +	.cm_l4per_uart1_clkctrl = 0x4a009540, +	.cm_l4per_uart2_clkctrl = 0x4a009548, +	.cm_l4per_uart3_clkctrl = 0x4a009550, +	.cm_l4per_uart4_clkctrl = 0x4a009558, +	.cm_l4per_mmcsd5_clkctrl = 0x4a009560, +	.cm_l4per_i2c5_clkctrl = 0x4a009568, +	.cm_l4sec_clkstctrl = 0x4a009580, +	.cm_l4sec_staticdep = 0x4a009584, +	.cm_l4sec_dynamicdep = 0x4a009588, +	.cm_l4sec_aes1_clkctrl = 0x4a0095a0, +	.cm_l4sec_aes2_clkctrl = 0x4a0095a8, +	.cm_l4sec_des3des_clkctrl = 0x4a0095b0, +	.cm_l4sec_pkaeip29_clkctrl = 0x4a0095b8, +	.cm_l4sec_rng_clkctrl = 0x4a0095c0, +	.cm_l4sec_sha2md51_clkctrl = 0x4a0095c8, +	.cm_l4sec_cryptodma_clkctrl = 0x4a0095d8, + +	/* l4 wkup regs */ +	.cm_abe_pll_ref_clksel = 0x4a30610c, +	.cm_sys_clksel = 0x4a306110, +	.cm_wkup_clkstctrl = 0x4a307800, +	.cm_wkup_l4wkup_clkctrl = 0x4a307820, +	.cm_wkup_wdtimer1_clkctrl = 0x4a307828, +	.cm_wkup_wdtimer2_clkctrl = 0x4a307830, +	.cm_wkup_gpio1_clkctrl = 0x4a307838, +	.cm_wkup_gptimer1_clkctrl = 0x4a307840, +	.cm_wkup_gptimer12_clkctrl = 0x4a307848, +	.cm_wkup_synctimer_clkctrl = 0x4a307850, +	.cm_wkup_usim_clkctrl = 0x4a307858, +	.cm_wkup_sarram_clkctrl = 0x4a307860, +	.cm_wkup_keyboard_clkctrl = 0x4a307878, +	.cm_wkup_rtc_clkctrl = 0x4a307880, +	.cm_wkup_bandgap_clkctrl = 0x4a307888, +	.prm_vc_val_bypass = 0x4a307ba0, +	.prm_vc_cfg_channel = 0x4a307ba4, +	.prm_vc_cfg_i2c_mode = 0x4a307ba8, +	.prm_vc_cfg_i2c_clk = 0x4a307bac, +}; diff --git a/arch/arm/cpu/armv7/omap5/Makefile b/arch/arm/cpu/armv7/omap5/Makefile index 9b261c4df..81625f6e6 100644 --- a/arch/arm/cpu/armv7/omap5/Makefile +++ b/arch/arm/cpu/armv7/omap5/Makefile @@ -29,6 +29,8 @@ COBJS	+= hwinit.o  COBJS	+= clocks.o  COBJS	+= emif.o  COBJS	+= sdram.o +COBJS	+= prcm-regs.o +COBJS	+= hw_data.o  SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c)  OBJS	:= $(addprefix $(obj),$(COBJS) $(SOBJS)) diff --git a/arch/arm/cpu/armv7/omap5/clocks.c b/arch/arm/cpu/armv7/omap5/clocks.c index 1f3369268..a90f9222c 100644 --- a/arch/arm/cpu/armv7/omap5/clocks.c +++ b/arch/arm/cpu/armv7/omap5/clocks.c @@ -47,8 +47,6 @@  #define puts(s)  #endif -struct omap5_prcm_regs *const prcm = (struct omap5_prcm_regs *)0x4A004100; -  const u32 sys_clk_array[8] = {  	12000000,	       /* 12 MHz */  	0,		       /* NA */ @@ -188,7 +186,7 @@ static const struct dpll_params usb_dpll_params_1920mhz[NUM_SYS_CLKS] = {  	{400, 15, 2, -1, -1, -1, -1, -1, -1, -1}	/* 38.4 MHz */  }; -void setup_post_dividers(u32 *const base, const struct dpll_params *params) +void setup_post_dividers(u32 const base, const struct dpll_params *params)  {  	struct dpll_regs *const dpll_regs = (struct dpll_regs *)base; @@ -282,9 +280,9 @@ void scale_vcores(void)  	if (emif_sdram_type() == EMIF_SDRAM_TYPE_DDR3) {  		/* Configure LDO SRAM "magic" bits */ -		writel(2, &prcm->prm_sldo_core_setup); -		writel(2, &prcm->prm_sldo_mpu_setup); -		writel(2, &prcm->prm_sldo_mm_setup); +		writel(2, (*prcm)->prm_sldo_core_setup); +		writel(2, (*prcm)->prm_sldo_mpu_setup); +		writel(2, (*prcm)->prm_sldo_mm_setup);  	}  } @@ -309,57 +307,57 @@ u32 get_offset_code(u32 volt_offset)   */  void enable_basic_clocks(void)  { -	u32 *const clk_domains_essential[] = { -		&prcm->cm_l4per_clkstctrl, -		&prcm->cm_l3init_clkstctrl, -		&prcm->cm_memif_clkstctrl, -		&prcm->cm_l4cfg_clkstctrl, +	u32 const clk_domains_essential[] = { +		(*prcm)->cm_l4per_clkstctrl, +		(*prcm)->cm_l3init_clkstctrl, +		(*prcm)->cm_memif_clkstctrl, +		(*prcm)->cm_l4cfg_clkstctrl,  		0  	}; -	u32 *const clk_modules_hw_auto_essential[] = { -		&prcm->cm_l3_2_gpmc_clkctrl, -		&prcm->cm_memif_emif_1_clkctrl, -		&prcm->cm_memif_emif_2_clkctrl, -		&prcm->cm_l4cfg_l4_cfg_clkctrl, -		&prcm->cm_wkup_gpio1_clkctrl, -		&prcm->cm_l4per_gpio2_clkctrl, -		&prcm->cm_l4per_gpio3_clkctrl, -		&prcm->cm_l4per_gpio4_clkctrl, -		&prcm->cm_l4per_gpio5_clkctrl, -		&prcm->cm_l4per_gpio6_clkctrl, +	u32 const clk_modules_hw_auto_essential[] = { +		(*prcm)->cm_l3_2_gpmc_clkctrl, +		(*prcm)->cm_memif_emif_1_clkctrl, +		(*prcm)->cm_memif_emif_2_clkctrl, +		(*prcm)->cm_l4cfg_l4_cfg_clkctrl, +		(*prcm)->cm_wkup_gpio1_clkctrl, +		(*prcm)->cm_l4per_gpio2_clkctrl, +		(*prcm)->cm_l4per_gpio3_clkctrl, +		(*prcm)->cm_l4per_gpio4_clkctrl, +		(*prcm)->cm_l4per_gpio5_clkctrl, +		(*prcm)->cm_l4per_gpio6_clkctrl,  		0  	}; -	u32 *const clk_modules_explicit_en_essential[] = { -		&prcm->cm_wkup_gptimer1_clkctrl, -		&prcm->cm_l3init_hsmmc1_clkctrl, -		&prcm->cm_l3init_hsmmc2_clkctrl, -		&prcm->cm_l4per_gptimer2_clkctrl, -		&prcm->cm_wkup_wdtimer2_clkctrl, -		&prcm->cm_l4per_uart3_clkctrl, -		&prcm->cm_l4per_i2c1_clkctrl, +	u32 const clk_modules_explicit_en_essential[] = { +		(*prcm)->cm_wkup_gptimer1_clkctrl, +		(*prcm)->cm_l3init_hsmmc1_clkctrl, +		(*prcm)->cm_l3init_hsmmc2_clkctrl, +		(*prcm)->cm_l4per_gptimer2_clkctrl, +		(*prcm)->cm_wkup_wdtimer2_clkctrl, +		(*prcm)->cm_l4per_uart3_clkctrl, +		(*prcm)->cm_l4per_i2c1_clkctrl,  		0  	};  	/* Enable optional additional functional clock for GPIO4 */ -	setbits_le32(&prcm->cm_l4per_gpio4_clkctrl, +	setbits_le32((*prcm)->cm_l4per_gpio4_clkctrl,  			GPIO4_CLKCTRL_OPTFCLKEN_MASK);  	/* Enable 96 MHz clock for MMC1 & MMC2 */ -	setbits_le32(&prcm->cm_l3init_hsmmc1_clkctrl, +	setbits_le32((*prcm)->cm_l3init_hsmmc1_clkctrl,  			HSMMC_CLKCTRL_CLKSEL_MASK); -	setbits_le32(&prcm->cm_l3init_hsmmc2_clkctrl, +	setbits_le32((*prcm)->cm_l3init_hsmmc2_clkctrl,  			HSMMC_CLKCTRL_CLKSEL_MASK);  	/* Set the correct clock dividers for mmc */ -	setbits_le32(&prcm->cm_l3init_hsmmc1_clkctrl, +	setbits_le32((*prcm)->cm_l3init_hsmmc1_clkctrl,  			HSMMC_CLKCTRL_CLKSEL_DIV_MASK); -	setbits_le32(&prcm->cm_l3init_hsmmc2_clkctrl, +	setbits_le32((*prcm)->cm_l3init_hsmmc2_clkctrl,  			HSMMC_CLKCTRL_CLKSEL_DIV_MASK);  	/* Select 32KHz clock as the source of GPTIMER1 */ -	setbits_le32(&prcm->cm_wkup_gptimer1_clkctrl, +	setbits_le32((*prcm)->cm_wkup_gptimer1_clkctrl,  			GPTIMER1_CLKCTRL_CLKSEL_MASK);  	do_enable_clocks(clk_domains_essential, @@ -368,36 +366,36 @@ void enable_basic_clocks(void)  			 1);  	/* Select 384Mhz for GPU as its the POR for ES1.0 */ -	setbits_le32(&prcm->cm_sgx_sgx_clkctrl, +	setbits_le32((*prcm)->cm_sgx_sgx_clkctrl,  			CLKSEL_GPU_HYD_GCLK_MASK); -	setbits_le32(&prcm->cm_sgx_sgx_clkctrl, +	setbits_le32((*prcm)->cm_sgx_sgx_clkctrl,  			CLKSEL_GPU_CORE_GCLK_MASK);  	/* Enable SCRM OPT clocks for PER and CORE dpll */ -	setbits_le32(&prcm->cm_wkupaon_scrm_clkctrl, +	setbits_le32((*prcm)->cm_wkupaon_scrm_clkctrl,  			OPTFCLKEN_SCRM_PER_MASK); -	setbits_le32(&prcm->cm_wkupaon_scrm_clkctrl, +	setbits_le32((*prcm)->cm_wkupaon_scrm_clkctrl,  			OPTFCLKEN_SCRM_CORE_MASK);  }  void enable_basic_uboot_clocks(void)  { -	u32 *const clk_domains_essential[] = { +	u32 const clk_domains_essential[] = {  		0  	}; -	u32 *const clk_modules_hw_auto_essential[] = { +	u32 const clk_modules_hw_auto_essential[] = {  		0  	}; -	u32 *const clk_modules_explicit_en_essential[] = { -		&prcm->cm_l4per_mcspi1_clkctrl, -		&prcm->cm_l4per_i2c2_clkctrl, -		&prcm->cm_l4per_i2c3_clkctrl, -		&prcm->cm_l4per_i2c4_clkctrl, -		&prcm->cm_l3init_hsusbtll_clkctrl, -		&prcm->cm_l3init_hsusbhost_clkctrl, -		&prcm->cm_l3init_fsusb_clkctrl, +	u32 const clk_modules_explicit_en_essential[] = { +		(*prcm)->cm_l4per_mcspi1_clkctrl, +		(*prcm)->cm_l4per_i2c2_clkctrl, +		(*prcm)->cm_l4per_i2c3_clkctrl, +		(*prcm)->cm_l4per_i2c4_clkctrl, +		(*prcm)->cm_l3init_hsusbtll_clkctrl, +		(*prcm)->cm_l3init_hsusbhost_clkctrl, +		(*prcm)->cm_l3init_fsusb_clkctrl,  		0  	}; @@ -413,75 +411,75 @@ void enable_basic_uboot_clocks(void)   */  void enable_non_essential_clocks(void)  { -	u32 *const clk_domains_non_essential[] = { -		&prcm->cm_mpu_m3_clkstctrl, -		&prcm->cm_ivahd_clkstctrl, -		&prcm->cm_dsp_clkstctrl, -		&prcm->cm_dss_clkstctrl, -		&prcm->cm_sgx_clkstctrl, -		&prcm->cm1_abe_clkstctrl, -		&prcm->cm_c2c_clkstctrl, -		&prcm->cm_cam_clkstctrl, -		&prcm->cm_dss_clkstctrl, -		&prcm->cm_sdma_clkstctrl, +	u32 const clk_domains_non_essential[] = { +		(*prcm)->cm_mpu_m3_clkstctrl, +		(*prcm)->cm_ivahd_clkstctrl, +		(*prcm)->cm_dsp_clkstctrl, +		(*prcm)->cm_dss_clkstctrl, +		(*prcm)->cm_sgx_clkstctrl, +		(*prcm)->cm1_abe_clkstctrl, +		(*prcm)->cm_c2c_clkstctrl, +		(*prcm)->cm_cam_clkstctrl, +		(*prcm)->cm_dss_clkstctrl, +		(*prcm)->cm_sdma_clkstctrl,  		0  	}; -	u32 *const clk_modules_hw_auto_non_essential[] = { -		&prcm->cm_mpu_m3_mpu_m3_clkctrl, -		&prcm->cm_ivahd_ivahd_clkctrl, -		&prcm->cm_ivahd_sl2_clkctrl, -		&prcm->cm_dsp_dsp_clkctrl, -		&prcm->cm_l3instr_l3_3_clkctrl, -		&prcm->cm_l3instr_l3_instr_clkctrl, -		&prcm->cm_l3instr_intrconn_wp1_clkctrl, -		&prcm->cm_l3init_hsi_clkctrl, -		&prcm->cm_l4per_hdq1w_clkctrl, +	u32 const clk_modules_hw_auto_non_essential[] = { +		(*prcm)->cm_mpu_m3_mpu_m3_clkctrl, +		(*prcm)->cm_ivahd_ivahd_clkctrl, +		(*prcm)->cm_ivahd_sl2_clkctrl, +		(*prcm)->cm_dsp_dsp_clkctrl, +		(*prcm)->cm_l3instr_l3_3_clkctrl, +		(*prcm)->cm_l3instr_l3_instr_clkctrl, +		(*prcm)->cm_l3instr_intrconn_wp1_clkctrl, +		(*prcm)->cm_l3init_hsi_clkctrl, +		(*prcm)->cm_l4per_hdq1w_clkctrl,  		0  	}; -	u32 *const clk_modules_explicit_en_non_essential[] = { -		&prcm->cm1_abe_aess_clkctrl, -		&prcm->cm1_abe_pdm_clkctrl, -		&prcm->cm1_abe_dmic_clkctrl, -		&prcm->cm1_abe_mcasp_clkctrl, -		&prcm->cm1_abe_mcbsp1_clkctrl, -		&prcm->cm1_abe_mcbsp2_clkctrl, -		&prcm->cm1_abe_mcbsp3_clkctrl, -		&prcm->cm1_abe_slimbus_clkctrl, -		&prcm->cm1_abe_timer5_clkctrl, -		&prcm->cm1_abe_timer6_clkctrl, -		&prcm->cm1_abe_timer7_clkctrl, -		&prcm->cm1_abe_timer8_clkctrl, -		&prcm->cm1_abe_wdt3_clkctrl, -		&prcm->cm_l4per_gptimer9_clkctrl, -		&prcm->cm_l4per_gptimer10_clkctrl, -		&prcm->cm_l4per_gptimer11_clkctrl, -		&prcm->cm_l4per_gptimer3_clkctrl, -		&prcm->cm_l4per_gptimer4_clkctrl, -		&prcm->cm_l4per_mcspi2_clkctrl, -		&prcm->cm_l4per_mcspi3_clkctrl, -		&prcm->cm_l4per_mcspi4_clkctrl, -		&prcm->cm_l4per_mmcsd3_clkctrl, -		&prcm->cm_l4per_mmcsd4_clkctrl, -		&prcm->cm_l4per_mmcsd5_clkctrl, -		&prcm->cm_l4per_uart1_clkctrl, -		&prcm->cm_l4per_uart2_clkctrl, -		&prcm->cm_l4per_uart4_clkctrl, -		&prcm->cm_wkup_keyboard_clkctrl, -		&prcm->cm_wkup_wdtimer2_clkctrl, -		&prcm->cm_cam_iss_clkctrl, -		&prcm->cm_cam_fdif_clkctrl, -		&prcm->cm_dss_dss_clkctrl, -		&prcm->cm_sgx_sgx_clkctrl, +	u32 const clk_modules_explicit_en_non_essential[] = { +		(*prcm)->cm1_abe_aess_clkctrl, +		(*prcm)->cm1_abe_pdm_clkctrl, +		(*prcm)->cm1_abe_dmic_clkctrl, +		(*prcm)->cm1_abe_mcasp_clkctrl, +		(*prcm)->cm1_abe_mcbsp1_clkctrl, +		(*prcm)->cm1_abe_mcbsp2_clkctrl, +		(*prcm)->cm1_abe_mcbsp3_clkctrl, +		(*prcm)->cm1_abe_slimbus_clkctrl, +		(*prcm)->cm1_abe_timer5_clkctrl, +		(*prcm)->cm1_abe_timer6_clkctrl, +		(*prcm)->cm1_abe_timer7_clkctrl, +		(*prcm)->cm1_abe_timer8_clkctrl, +		(*prcm)->cm1_abe_wdt3_clkctrl, +		(*prcm)->cm_l4per_gptimer9_clkctrl, +		(*prcm)->cm_l4per_gptimer10_clkctrl, +		(*prcm)->cm_l4per_gptimer11_clkctrl, +		(*prcm)->cm_l4per_gptimer3_clkctrl, +		(*prcm)->cm_l4per_gptimer4_clkctrl, +		(*prcm)->cm_l4per_mcspi2_clkctrl, +		(*prcm)->cm_l4per_mcspi3_clkctrl, +		(*prcm)->cm_l4per_mcspi4_clkctrl, +		(*prcm)->cm_l4per_mmcsd3_clkctrl, +		(*prcm)->cm_l4per_mmcsd4_clkctrl, +		(*prcm)->cm_l4per_mmcsd5_clkctrl, +		(*prcm)->cm_l4per_uart1_clkctrl, +		(*prcm)->cm_l4per_uart2_clkctrl, +		(*prcm)->cm_l4per_uart4_clkctrl, +		(*prcm)->cm_wkup_keyboard_clkctrl, +		(*prcm)->cm_wkup_wdtimer2_clkctrl, +		(*prcm)->cm_cam_iss_clkctrl, +		(*prcm)->cm_cam_fdif_clkctrl, +		(*prcm)->cm_dss_dss_clkctrl, +		(*prcm)->cm_sgx_sgx_clkctrl,  		0  	};  	/* Enable optional functional clock for ISS */ -	setbits_le32(&prcm->cm_cam_iss_clkctrl, ISS_CLKCTRL_OPTFCLKEN_MASK); +	setbits_le32((*prcm)->cm_cam_iss_clkctrl, ISS_CLKCTRL_OPTFCLKEN_MASK);  	/* Enable all optional functional clocks of DSS */ -	setbits_le32(&prcm->cm_dss_dss_clkctrl, DSS_CLKCTRL_OPTFCLKEN_MASK); +	setbits_le32((*prcm)->cm_dss_dss_clkctrl, DSS_CLKCTRL_OPTFCLKEN_MASK);  	do_enable_clocks(clk_domains_non_essential,  			 clk_modules_hw_auto_non_essential, @@ -489,7 +487,8 @@ void enable_non_essential_clocks(void)  			 0);  	/* Put camera module in no sleep mode */ -	clrsetbits_le32(&prcm->cm_cam_clkstctrl, MODULE_CLKCTRL_MODULEMODE_MASK, +	clrsetbits_le32((*prcm)->cm_cam_clkstctrl, +			MODULE_CLKCTRL_MODULEMODE_MASK,  			CD_CLKCTRL_CLKTRCTRL_NO_SLEEP <<  			MODULE_CLKCTRL_MODULEMODE_SHIFT);  } diff --git a/arch/arm/cpu/armv7/omap5/hw_data.c b/arch/arm/cpu/armv7/omap5/hw_data.c new file mode 100644 index 000000000..0f1234c1e --- /dev/null +++ b/arch/arm/cpu/armv7/omap5/hw_data.c @@ -0,0 +1,38 @@ +/* + * + * HW data initialization for OMAP5 + * + * (C) Copyright 2013 + * Texas Instruments, <www.ti.com> + * + * Sricharan R <r.sricharan@ti.com> + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ +#include <common.h> +#include <asm/arch/omap.h> +#include <asm/omap_common.h> + +struct prcm_regs const **prcm = +			(struct prcm_regs const **) OMAP_SRAM_SCRATCH_PRCM_PTR; + +void hw_data_init(void) +{ +	*prcm = &omap5_es1_prcm; +} diff --git a/arch/arm/cpu/armv7/omap5/prcm-regs.c b/arch/arm/cpu/armv7/omap5/prcm-regs.c new file mode 100644 index 000000000..cdc486491 --- /dev/null +++ b/arch/arm/cpu/armv7/omap5/prcm-regs.c @@ -0,0 +1,306 @@ +/* + * + * HW regs data for OMAP5 Soc + * + * (C) Copyright 2013 + * Texas Instruments, <www.ti.com> + * + * Sricharan R <r.sricharan@ti.com> + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +#include <asm/omap_common.h> + +struct prcm_regs const omap5_es1_prcm = { +	/* cm1.ckgen */ +	.cm_clksel_core = 0x4a004100, +	.cm_clksel_abe = 0x4a004108, +	.cm_dll_ctrl = 0x4a004110, +	.cm_clkmode_dpll_core = 0x4a004120, +	.cm_idlest_dpll_core = 0x4a004124, +	.cm_autoidle_dpll_core = 0x4a004128, +	.cm_clksel_dpll_core = 0x4a00412c, +	.cm_div_m2_dpll_core = 0x4a004130, +	.cm_div_m3_dpll_core = 0x4a004134, +	.cm_div_h11_dpll_core = 0x4a004138, +	.cm_div_h12_dpll_core = 0x4a00413c, +	.cm_div_h13_dpll_core = 0x4a004140, +	.cm_div_h14_dpll_core = 0x4a004144, +	.cm_ssc_deltamstep_dpll_core = 0x4a004148, +	.cm_ssc_modfreqdiv_dpll_core = 0x4a00414c, +	.cm_emu_override_dpll_core = 0x4a004150, +	.cm_div_h22_dpllcore = 0x4a004154, +	.cm_div_h23_dpll_core = 0x4a004158, +	.cm_clkmode_dpll_mpu = 0x4a004160, +	.cm_idlest_dpll_mpu = 0x4a004164, +	.cm_autoidle_dpll_mpu = 0x4a004168, +	.cm_clksel_dpll_mpu = 0x4a00416c, +	.cm_div_m2_dpll_mpu = 0x4a004170, +	.cm_ssc_deltamstep_dpll_mpu = 0x4a004188, +	.cm_ssc_modfreqdiv_dpll_mpu = 0x4a00418c, +	.cm_bypclk_dpll_mpu = 0x4a00419c, +	.cm_clkmode_dpll_iva = 0x4a0041a0, +	.cm_idlest_dpll_iva = 0x4a0041a4, +	.cm_autoidle_dpll_iva = 0x4a0041a8, +	.cm_clksel_dpll_iva = 0x4a0041ac, +	.cm_div_h11_dpll_iva = 0x4a0041b8, +	.cm_div_h12_dpll_iva = 0x4a0041bc, +	.cm_ssc_deltamstep_dpll_iva = 0x4a0041c8, +	.cm_ssc_modfreqdiv_dpll_iva = 0x4a0041cc, +	.cm_bypclk_dpll_iva = 0x4a0041dc, +	.cm_clkmode_dpll_abe = 0x4a0041e0, +	.cm_idlest_dpll_abe = 0x4a0041e4, +	.cm_autoidle_dpll_abe = 0x4a0041e8, +	.cm_clksel_dpll_abe = 0x4a0041ec, +	.cm_div_m2_dpll_abe = 0x4a0041f0, +	.cm_div_m3_dpll_abe = 0x4a0041f4, +	.cm_ssc_deltamstep_dpll_abe = 0x4a004208, +	.cm_ssc_modfreqdiv_dpll_abe = 0x4a00420c, +	.cm_clkmode_dpll_ddrphy = 0x4a004220, +	.cm_idlest_dpll_ddrphy = 0x4a004224, +	.cm_autoidle_dpll_ddrphy = 0x4a004228, +	.cm_clksel_dpll_ddrphy = 0x4a00422c, +	.cm_div_m2_dpll_ddrphy = 0x4a004230, +	.cm_div_h11_dpll_ddrphy = 0x4a004238, +	.cm_div_h12_dpll_ddrphy = 0x4a00423c, +	.cm_div_h13_dpll_ddrphy = 0x4a004240, +	.cm_ssc_deltamstep_dpll_ddrphy = 0x4a004248, +	.cm_shadow_freq_config1 = 0x4a004260, +	.cm_mpu_mpu_clkctrl = 0x4a004320, + +	/* cm1.dsp */ +	.cm_dsp_clkstctrl = 0x4a004400, +	.cm_dsp_dsp_clkctrl = 0x4a004420, + +	/* cm1.abe */ +	.cm1_abe_clkstctrl = 0x4a004500, +	.cm1_abe_l4abe_clkctrl = 0x4a004520, +	.cm1_abe_aess_clkctrl = 0x4a004528, +	.cm1_abe_pdm_clkctrl = 0x4a004530, +	.cm1_abe_dmic_clkctrl = 0x4a004538, +	.cm1_abe_mcasp_clkctrl = 0x4a004540, +	.cm1_abe_mcbsp1_clkctrl = 0x4a004548, +	.cm1_abe_mcbsp2_clkctrl = 0x4a004550, +	.cm1_abe_mcbsp3_clkctrl = 0x4a004558, +	.cm1_abe_slimbus_clkctrl = 0x4a004560, +	.cm1_abe_timer5_clkctrl = 0x4a004568, +	.cm1_abe_timer6_clkctrl = 0x4a004570, +	.cm1_abe_timer7_clkctrl = 0x4a004578, +	.cm1_abe_timer8_clkctrl = 0x4a004580, +	.cm1_abe_wdt3_clkctrl = 0x4a004588, + +	/* cm2.ckgen */ +	.cm_clksel_mpu_m3_iss_root = 0x4a008100, +	.cm_clksel_usb_60mhz = 0x4a008104, +	.cm_scale_fclk = 0x4a008108, +	.cm_core_dvfs_perf1 = 0x4a008110, +	.cm_core_dvfs_perf2 = 0x4a008114, +	.cm_core_dvfs_perf3 = 0x4a008118, +	.cm_core_dvfs_perf4 = 0x4a00811c, +	.cm_core_dvfs_current = 0x4a008124, +	.cm_iva_dvfs_perf_tesla = 0x4a008128, +	.cm_iva_dvfs_perf_ivahd = 0x4a00812c, +	.cm_iva_dvfs_perf_abe = 0x4a008130, +	.cm_iva_dvfs_current = 0x4a008138, +	.cm_clkmode_dpll_per = 0x4a008140, +	.cm_idlest_dpll_per = 0x4a008144, +	.cm_autoidle_dpll_per = 0x4a008148, +	.cm_clksel_dpll_per = 0x4a00814c, +	.cm_div_m2_dpll_per = 0x4a008150, +	.cm_div_m3_dpll_per = 0x4a008154, +	.cm_div_h11_dpll_per = 0x4a008158, +	.cm_div_h12_dpll_per = 0x4a00815c, +	.cm_div_h14_dpll_per = 0x4a008164, +	.cm_ssc_deltamstep_dpll_per = 0x4a008168, +	.cm_ssc_modfreqdiv_dpll_per = 0x4a00816c, +	.cm_emu_override_dpll_per = 0x4a008170, +	.cm_clkmode_dpll_usb = 0x4a008180, +	.cm_idlest_dpll_usb = 0x4a008184, +	.cm_autoidle_dpll_usb = 0x4a008188, +	.cm_clksel_dpll_usb = 0x4a00818c, +	.cm_div_m2_dpll_usb = 0x4a008190, +	.cm_ssc_deltamstep_dpll_usb = 0x4a0081a8, +	.cm_ssc_modfreqdiv_dpll_usb = 0x4a0081ac, +	.cm_clkdcoldo_dpll_usb = 0x4a0081b4, +	.cm_clkmode_dpll_unipro = 0x4a0081c0, +	.cm_idlest_dpll_unipro = 0x4a0081c4, +	.cm_autoidle_dpll_unipro = 0x4a0081c8, +	.cm_clksel_dpll_unipro = 0x4a0081cc, +	.cm_div_m2_dpll_unipro = 0x4a0081d0, +	.cm_ssc_deltamstep_dpll_unipro = 0x4a0081e8, +	.cm_ssc_modfreqdiv_dpll_unipro = 0x4a0081ec, + +	/* cm2.core */ +	.cm_coreaon_bandgap_clkctrl = 0x4a008648, +	.cm_l3_1_clkstctrl = 0x4a008700, +	.cm_l3_1_dynamicdep = 0x4a008708, +	.cm_l3_1_l3_1_clkctrl = 0x4a008720, +	.cm_l3_2_clkstctrl = 0x4a008800, +	.cm_l3_2_dynamicdep = 0x4a008808, +	.cm_l3_2_l3_2_clkctrl = 0x4a008820, +	.cm_l3_2_gpmc_clkctrl = 0x4a008828, +	.cm_l3_2_ocmc_ram_clkctrl = 0x4a008830, +	.cm_mpu_m3_clkstctrl = 0x4a008900, +	.cm_mpu_m3_staticdep = 0x4a008904, +	.cm_mpu_m3_dynamicdep = 0x4a008908, +	.cm_mpu_m3_mpu_m3_clkctrl = 0x4a008920, +	.cm_sdma_clkstctrl = 0x4a008a00, +	.cm_sdma_staticdep = 0x4a008a04, +	.cm_sdma_dynamicdep = 0x4a008a08, +	.cm_sdma_sdma_clkctrl = 0x4a008a20, +	.cm_memif_clkstctrl = 0x4a008b00, +	.cm_memif_dmm_clkctrl = 0x4a008b20, +	.cm_memif_emif_fw_clkctrl = 0x4a008b28, +	.cm_memif_emif_1_clkctrl = 0x4a008b30, +	.cm_memif_emif_2_clkctrl = 0x4a008b38, +	.cm_memif_dll_clkctrl = 0x4a008b40, +	.cm_memif_emif_h1_clkctrl = 0x4a008b50, +	.cm_memif_emif_h2_clkctrl = 0x4a008b58, +	.cm_memif_dll_h_clkctrl = 0x4a008b60, +	.cm_c2c_clkstctrl = 0x4a008c00, +	.cm_c2c_staticdep = 0x4a008c04, +	.cm_c2c_dynamicdep = 0x4a008c08, +	.cm_c2c_sad2d_clkctrl = 0x4a008c20, +	.cm_c2c_modem_icr_clkctrl = 0x4a008c28, +	.cm_c2c_sad2d_fw_clkctrl = 0x4a008c30, +	.cm_l4cfg_clkstctrl = 0x4a008d00, +	.cm_l4cfg_dynamicdep = 0x4a008d08, +	.cm_l4cfg_l4_cfg_clkctrl = 0x4a008d20, +	.cm_l4cfg_hw_sem_clkctrl = 0x4a008d28, +	.cm_l4cfg_mailbox_clkctrl = 0x4a008d30, +	.cm_l4cfg_sar_rom_clkctrl = 0x4a008d38, +	.cm_l3instr_clkstctrl = 0x4a008e00, +	.cm_l3instr_l3_3_clkctrl = 0x4a008e20, +	.cm_l3instr_l3_instr_clkctrl = 0x4a008e28, +	.cm_l3instr_intrconn_wp1_clkctrl = 0x4a008e40, + +	/* cm2.ivahd */ +	.cm_ivahd_clkstctrl = 0x4a008f00, +	.cm_ivahd_ivahd_clkctrl = 0x4a008f20, +	.cm_ivahd_sl2_clkctrl = 0x4a008f28, + +	/* cm2.cam */ +	.cm_cam_clkstctrl = 0x4a009000, +	.cm_cam_iss_clkctrl = 0x4a009020, +	.cm_cam_fdif_clkctrl = 0x4a009028, + +	/* cm2.dss */ +	.cm_dss_clkstctrl = 0x4a009100, +	.cm_dss_dss_clkctrl = 0x4a009120, + +	/* cm2.sgx */ +	.cm_sgx_clkstctrl = 0x4a009200, +	.cm_sgx_sgx_clkctrl = 0x4a009220, + +	/* cm2.l3init */ +	.cm_l3init_clkstctrl = 0x4a009300, +	.cm_l3init_hsmmc1_clkctrl = 0x4a009328, +	.cm_l3init_hsmmc2_clkctrl = 0x4a009330, +	.cm_l3init_hsi_clkctrl = 0x4a009338, +	.cm_l3init_hsusbhost_clkctrl = 0x4a009358, +	.cm_l3init_hsusbotg_clkctrl = 0x4a009360, +	.cm_l3init_hsusbtll_clkctrl = 0x4a009368, +	.cm_l3init_p1500_clkctrl = 0x4a009378, +	.cm_l3init_fsusb_clkctrl = 0x4a0093d0, +	.cm_l3init_ocp2scp1_clkctrl = 0x4a0093e0, + +	/* cm2.l4per */ +	.cm_l4per_clkstctrl = 0x4a009400, +	.cm_l4per_dynamicdep = 0x4a009408, +	.cm_l4per_adc_clkctrl = 0x4a009420, +	.cm_l4per_gptimer10_clkctrl = 0x4a009428, +	.cm_l4per_gptimer11_clkctrl = 0x4a009430, +	.cm_l4per_gptimer2_clkctrl = 0x4a009438, +	.cm_l4per_gptimer3_clkctrl = 0x4a009440, +	.cm_l4per_gptimer4_clkctrl = 0x4a009448, +	.cm_l4per_gptimer9_clkctrl = 0x4a009450, +	.cm_l4per_elm_clkctrl = 0x4a009458, +	.cm_l4per_gpio2_clkctrl = 0x4a009460, +	.cm_l4per_gpio3_clkctrl = 0x4a009468, +	.cm_l4per_gpio4_clkctrl = 0x4a009470, +	.cm_l4per_gpio5_clkctrl = 0x4a009478, +	.cm_l4per_gpio6_clkctrl = 0x4a009480, +	.cm_l4per_hdq1w_clkctrl = 0x4a009488, +	.cm_l4per_hecc1_clkctrl = 0x4a009490, +	.cm_l4per_hecc2_clkctrl = 0x4a009498, +	.cm_l4per_i2c1_clkctrl = 0x4a0094a0, +	.cm_l4per_i2c2_clkctrl = 0x4a0094a8, +	.cm_l4per_i2c3_clkctrl = 0x4a0094b0, +	.cm_l4per_i2c4_clkctrl = 0x4a0094b8, +	.cm_l4per_l4per_clkctrl = 0x4a0094c0, +	.cm_l4per_mcasp2_clkctrl = 0x4a0094d0, +	.cm_l4per_mcasp3_clkctrl = 0x4a0094d8, +	.cm_l4per_mgate_clkctrl = 0x4a0094e8, +	.cm_l4per_mcspi1_clkctrl = 0x4a0094f0, +	.cm_l4per_mcspi2_clkctrl = 0x4a0094f8, +	.cm_l4per_mcspi3_clkctrl = 0x4a009500, +	.cm_l4per_mcspi4_clkctrl = 0x4a009508, +	.cm_l4per_gpio7_clkctrl = 0x4a009510, +	.cm_l4per_gpio8_clkctrl = 0x4a009518, +	.cm_l4per_mmcsd3_clkctrl = 0x4a009520, +	.cm_l4per_mmcsd4_clkctrl = 0x4a009528, +	.cm_l4per_msprohg_clkctrl = 0x4a009530, +	.cm_l4per_slimbus2_clkctrl = 0x4a009538, +	.cm_l4per_uart1_clkctrl = 0x4a009540, +	.cm_l4per_uart2_clkctrl = 0x4a009548, +	.cm_l4per_uart3_clkctrl = 0x4a009550, +	.cm_l4per_uart4_clkctrl = 0x4a009558, +	.cm_l4per_mmcsd5_clkctrl = 0x4a009560, +	.cm_l4per_i2c5_clkctrl = 0x4a009568, +	.cm_l4per_uart5_clkctrl = 0x4a009570, +	.cm_l4per_uart6_clkctrl = 0x4a009578, +	.cm_l4sec_clkstctrl = 0x4a009580, +	.cm_l4sec_staticdep = 0x4a009584, +	.cm_l4sec_dynamicdep = 0x4a009588, +	.cm_l4sec_aes1_clkctrl = 0x4a0095a0, +	.cm_l4sec_aes2_clkctrl = 0x4a0095a8, +	.cm_l4sec_des3des_clkctrl = 0x4a0095b0, +	.cm_l4sec_pkaeip29_clkctrl = 0x4a0095b8, +	.cm_l4sec_rng_clkctrl = 0x4a0095c0, +	.cm_l4sec_sha2md51_clkctrl = 0x4a0095c8, +	.cm_l4sec_cryptodma_clkctrl = 0x4a0095d8, + +	/* l4 wkup regs */ +	.cm_abe_pll_ref_clksel = 0x4ae0610c, +	.cm_sys_clksel = 0x4ae06110, +	.cm_wkup_clkstctrl = 0x4ae07800, +	.cm_wkup_l4wkup_clkctrl = 0x4ae07820, +	.cm_wkup_wdtimer1_clkctrl = 0x4ae07828, +	.cm_wkup_wdtimer2_clkctrl = 0x4ae07830, +	.cm_wkup_gpio1_clkctrl = 0x4ae07838, +	.cm_wkup_gptimer1_clkctrl = 0x4ae07840, +	.cm_wkup_gptimer12_clkctrl = 0x4ae07848, +	.cm_wkup_synctimer_clkctrl = 0x4ae07850, +	.cm_wkup_usim_clkctrl = 0x4ae07858, +	.cm_wkup_sarram_clkctrl = 0x4ae07860, +	.cm_wkup_keyboard_clkctrl = 0x4ae07878, +	.cm_wkup_rtc_clkctrl = 0x4ae07880, +	.cm_wkup_bandgap_clkctrl = 0x4ae07888, +	.cm_wkupaon_scrm_clkctrl = 0x4ae07890, +	.prm_vc_val_bypass = 0x4ae07ba0, +	.prm_vc_cfg_i2c_mode = 0x4ae07bb4, +	.prm_vc_cfg_i2c_clk = 0x4ae07bb8, +	.prm_sldo_core_setup = 0x4ae07bc4, +	.prm_sldo_core_ctrl = 0x4ae07bc8, +	.prm_sldo_mpu_setup = 0x4ae07bcc, +	.prm_sldo_mpu_ctrl = 0x4ae07bd0, +	.prm_sldo_mm_setup = 0x4ae07bd4, +	.prm_sldo_mm_ctrl = 0x4ae07bd8, +}; |