diff options
Diffstat (limited to 'arch/arm/mach-omap2/control.c')
| -rw-r--r-- | arch/arm/mach-omap2/control.c | 74 | 
1 files changed, 25 insertions, 49 deletions
diff --git a/arch/arm/mach-omap2/control.c b/arch/arm/mach-omap2/control.c index 31e0dfe4a4e..751f3549bf6 100644 --- a/arch/arm/mach-omap2/control.c +++ b/arch/arm/mach-omap2/control.c @@ -46,17 +46,7 @@ struct omap3_scratchpad {  struct omap3_scratchpad_prcm_block {  	u32 prm_clksrc_ctrl;  	u32 prm_clksel; -	u32 cm_clksel_core; -	u32 cm_clksel_wkup; -	u32 cm_clken_pll; -	u32 cm_autoidle_pll; -	u32 cm_clksel1_pll; -	u32 cm_clksel2_pll; -	u32 cm_clksel3_pll; -	u32 cm_clken_pll_mpu; -	u32 cm_autoidle_pll_mpu; -	u32 cm_clksel1_pll_mpu; -	u32 cm_clksel2_pll_mpu; +	u32 cm_contents[11];  	u32 prcm_block_size;  }; @@ -161,32 +151,32 @@ void __iomem *omap_ctrl_base_get(void)  u8 omap_ctrl_readb(u16 offset)  { -	return __raw_readb(OMAP_CTRL_REGADDR(offset)); +	return readb_relaxed(OMAP_CTRL_REGADDR(offset));  }  u16 omap_ctrl_readw(u16 offset)  { -	return __raw_readw(OMAP_CTRL_REGADDR(offset)); +	return readw_relaxed(OMAP_CTRL_REGADDR(offset));  }  u32 omap_ctrl_readl(u16 offset)  { -	return __raw_readl(OMAP_CTRL_REGADDR(offset)); +	return readl_relaxed(OMAP_CTRL_REGADDR(offset));  }  void omap_ctrl_writeb(u8 val, u16 offset)  { -	__raw_writeb(val, OMAP_CTRL_REGADDR(offset)); +	writeb_relaxed(val, OMAP_CTRL_REGADDR(offset));  }  void omap_ctrl_writew(u16 val, u16 offset)  { -	__raw_writew(val, OMAP_CTRL_REGADDR(offset)); +	writew_relaxed(val, OMAP_CTRL_REGADDR(offset));  }  void omap_ctrl_writel(u32 val, u16 offset)  { -	__raw_writel(val, OMAP_CTRL_REGADDR(offset)); +	writel_relaxed(val, OMAP_CTRL_REGADDR(offset));  }  /* @@ -198,12 +188,12 @@ void omap_ctrl_writel(u32 val, u16 offset)  u32 omap4_ctrl_pad_readl(u16 offset)  { -	return __raw_readl(OMAP4_CTRL_PAD_REGADDR(offset)); +	return readl_relaxed(OMAP4_CTRL_PAD_REGADDR(offset));  }  void omap4_ctrl_pad_writel(u32 val, u16 offset)  { -	__raw_writel(val, OMAP4_CTRL_PAD_REGADDR(offset)); +	writel_relaxed(val, OMAP4_CTRL_PAD_REGADDR(offset));  }  #ifdef CONFIG_ARCH_OMAP3 @@ -232,7 +222,7 @@ void omap3_ctrl_write_boot_mode(u8 bootmode)  	 *  	 * XXX This should use some omap_ctrl_writel()-type function  	 */ -	__raw_writel(l, OMAP2_L4_IO_ADDRESS(OMAP343X_SCRATCHPAD + 4)); +	writel_relaxed(l, OMAP2_L4_IO_ADDRESS(OMAP343X_SCRATCHPAD + 4));  }  #endif @@ -295,7 +285,7 @@ void omap3_clear_scratchpad_contents(void)  	if (omap2_prm_read_mod_reg(OMAP3430_GR_MOD, OMAP3_PRM_RSTST_OFFSET) &  	    OMAP3430_GLOBAL_COLD_RST_MASK) {  		for ( ; offset <= max_offset; offset += 0x4) -			__raw_writel(0x0, (v_addr + offset)); +			writel_relaxed(0x0, (v_addr + offset));  		omap2_prm_set_mod_reg_bits(OMAP3430_GLOBAL_COLD_RST_MASK,  					   OMAP3430_GR_MOD,  					   OMAP3_PRM_RSTST_OFFSET); @@ -347,34 +337,9 @@ void omap3_save_scratchpad_contents(void)  	prcm_block_contents.prm_clksel =  		omap2_prm_read_mod_reg(OMAP3430_CCR_MOD,  				       OMAP3_PRM_CLKSEL_OFFSET); -	prcm_block_contents.cm_clksel_core = -			omap2_cm_read_mod_reg(CORE_MOD, CM_CLKSEL); -	prcm_block_contents.cm_clksel_wkup = -			omap2_cm_read_mod_reg(WKUP_MOD, CM_CLKSEL); -	prcm_block_contents.cm_clken_pll = -			omap2_cm_read_mod_reg(PLL_MOD, CM_CLKEN); -	/* -	 * As per erratum i671, ROM code does not respect the PER DPLL -	 * programming scheme if CM_AUTOIDLE_PLL..AUTO_PERIPH_DPLL == 1. -	 * Then,  in anycase, clear these bits to avoid extra latencies. -	 */ -	prcm_block_contents.cm_autoidle_pll = -			omap2_cm_read_mod_reg(PLL_MOD, CM_AUTOIDLE) & -			~OMAP3430_AUTO_PERIPH_DPLL_MASK; -	prcm_block_contents.cm_clksel1_pll = -			omap2_cm_read_mod_reg(PLL_MOD, OMAP3430_CM_CLKSEL1_PLL); -	prcm_block_contents.cm_clksel2_pll = -			omap2_cm_read_mod_reg(PLL_MOD, OMAP3430_CM_CLKSEL2_PLL); -	prcm_block_contents.cm_clksel3_pll = -			omap2_cm_read_mod_reg(PLL_MOD, OMAP3430_CM_CLKSEL3); -	prcm_block_contents.cm_clken_pll_mpu = -			omap2_cm_read_mod_reg(MPU_MOD, OMAP3430_CM_CLKEN_PLL); -	prcm_block_contents.cm_autoidle_pll_mpu = -			omap2_cm_read_mod_reg(MPU_MOD, OMAP3430_CM_AUTOIDLE_PLL); -	prcm_block_contents.cm_clksel1_pll_mpu = -			omap2_cm_read_mod_reg(MPU_MOD, OMAP3430_CM_CLKSEL1_PLL); -	prcm_block_contents.cm_clksel2_pll_mpu = -			omap2_cm_read_mod_reg(MPU_MOD, OMAP3430_CM_CLKSEL2_PLL); + +	omap3_cm_save_scratchpad_contents(prcm_block_contents.cm_contents); +  	prcm_block_contents.prcm_block_size = 0x0;  	/* Populate the SDRC block contents */ @@ -604,4 +569,15 @@ int omap3_ctrl_save_padconf(void)  	return 0;  } +/** + * omap3_ctrl_set_iva_bootmode_idle - sets the IVA2 bootmode to idle + * + * Sets the bootmode for IVA2 to idle. This is needed by the PM code to + * force disable IVA2 so that it does not prevent any low-power states. + */ +void omap3_ctrl_set_iva_bootmode_idle(void) +{ +	omap_ctrl_writel(OMAP3_IVA2_BOOTMOD_IDLE, +			 OMAP343X_CONTROL_IVA2_BOOTMOD); +}  #endif /* CONFIG_ARCH_OMAP3 && CONFIG_PM */  | 
