Merge branch 'integration-2.6.38-for-tony' of git://git.pwsan.com/linux-2.6 into omap-for-linus
This commit is contained in:
commit
808601b758
131 changed files with 6952 additions and 4444 deletions
|
@ -823,12 +823,10 @@ int __init omap1_clk_init(void)
|
|||
crystal_type = info->system_clock_type;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_ARCH_OMAP730) || defined(CONFIG_ARCH_OMAP850)
|
||||
ck_ref.rate = 13000000;
|
||||
#elif defined(CONFIG_ARCH_OMAP16XX)
|
||||
if (crystal_type == 2)
|
||||
if (cpu_is_omap7xx())
|
||||
ck_ref.rate = 13000000;
|
||||
if (cpu_is_omap16xx() && crystal_type == 2)
|
||||
ck_ref.rate = 19200000;
|
||||
#endif
|
||||
|
||||
pr_info("Clocks: ARM_SYSST: 0x%04x DPLL_CTL: 0x%04x ARM_CKCTL: "
|
||||
"0x%04x\n", omap_readw(ARM_SYSST), omap_readw(DPLL_CTL),
|
||||
|
@ -883,10 +881,11 @@ int __init omap1_clk_init(void)
|
|||
ck_dpll1.rate / 1000000, (ck_dpll1.rate / 100000) % 10,
|
||||
arm_ck.rate / 1000000, (arm_ck.rate / 100000) % 10);
|
||||
|
||||
#if defined(CONFIG_MACH_OMAP_PERSEUS2) || defined(CONFIG_MACH_OMAP_FSAMPLE)
|
||||
/* Select slicer output as OMAP input clock */
|
||||
omap_writew(omap_readw(OMAP7XX_PCC_UPLD_CTRL) & ~0x1, OMAP7XX_PCC_UPLD_CTRL);
|
||||
#endif
|
||||
if (machine_is_omap_perseus2() || machine_is_omap_fsample()) {
|
||||
/* Select slicer output as OMAP input clock */
|
||||
omap_writew(omap_readw(OMAP7XX_PCC_UPLD_CTRL) & ~0x1,
|
||||
OMAP7XX_PCC_UPLD_CTRL);
|
||||
}
|
||||
|
||||
/* Amstrad Delta wants BCLK high when inactive */
|
||||
if (machine_is_ams_delta())
|
||||
|
|
|
@ -4,19 +4,17 @@
|
|||
|
||||
# Common support
|
||||
obj-y := id.o io.o control.o mux.o devices.o serial.o gpmc.o timer-gp.o pm.o \
|
||||
common.o gpio.o dma.o
|
||||
common.o gpio.o dma.o wd_timer.o
|
||||
|
||||
omap-2-3-common = irq.o sdrc.o prm2xxx_3xxx.o
|
||||
omap-2-3-common = irq.o sdrc.o
|
||||
hwmod-common = omap_hwmod.o \
|
||||
omap_hwmod_common_data.o
|
||||
prcm-common = prcm.o powerdomain.o
|
||||
clock-common = clock.o clock_common_data.o \
|
||||
clockdomain.o clkt_dpll.o \
|
||||
clkt_clksel.o
|
||||
clkt_dpll.o clkt_clksel.o
|
||||
|
||||
obj-$(CONFIG_ARCH_OMAP2) += $(omap-2-3-common) $(prcm-common) $(hwmod-common)
|
||||
obj-$(CONFIG_ARCH_OMAP3) += $(omap-2-3-common) $(prcm-common) $(hwmod-common)
|
||||
obj-$(CONFIG_ARCH_OMAP4) += $(prcm-common) prm44xx.o $(hwmod-common)
|
||||
obj-$(CONFIG_ARCH_OMAP2) += $(omap-2-3-common) $(hwmod-common)
|
||||
obj-$(CONFIG_ARCH_OMAP3) += $(omap-2-3-common) $(hwmod-common)
|
||||
obj-$(CONFIG_ARCH_OMAP4) += prm44xx.o $(hwmod-common)
|
||||
|
||||
obj-$(CONFIG_OMAP_MCBSP) += mcbsp.o
|
||||
|
||||
|
@ -74,10 +72,36 @@ endif
|
|||
endif
|
||||
|
||||
# PRCM
|
||||
obj-$(CONFIG_ARCH_OMAP2) += cm.o
|
||||
obj-$(CONFIG_ARCH_OMAP3) += cm.o
|
||||
obj-$(CONFIG_ARCH_OMAP4) += cm4xxx.o
|
||||
obj-$(CONFIG_ARCH_OMAP2) += prcm.o cm2xxx_3xxx.o prm2xxx_3xxx.o
|
||||
obj-$(CONFIG_ARCH_OMAP3) += prcm.o cm2xxx_3xxx.o prm2xxx_3xxx.o
|
||||
# XXX The presence of cm2xxx_3xxx.o on the line below is temporary and
|
||||
# will be removed once the OMAP4 part of the codebase is converted to
|
||||
# use OMAP4-specific PRCM functions.
|
||||
obj-$(CONFIG_ARCH_OMAP4) += prcm.o cm2xxx_3xxx.o cminst44xx.o \
|
||||
cm44xx.o prcm_mpu44xx.o \
|
||||
prminst44xx.o
|
||||
|
||||
# OMAP powerdomain framework
|
||||
powerdomain-common += powerdomain.o powerdomain-common.o
|
||||
obj-$(CONFIG_ARCH_OMAP2) += $(powerdomain-common) \
|
||||
powerdomain2xxx_3xxx.o \
|
||||
powerdomains2xxx_data.o \
|
||||
powerdomains2xxx_3xxx_data.o
|
||||
obj-$(CONFIG_ARCH_OMAP3) += $(powerdomain-common) \
|
||||
powerdomain2xxx_3xxx.o \
|
||||
powerdomains3xxx_data.o \
|
||||
powerdomains2xxx_3xxx_data.o
|
||||
obj-$(CONFIG_ARCH_OMAP4) += $(powerdomain-common) \
|
||||
powerdomain44xx.o \
|
||||
powerdomains44xx_data.o
|
||||
|
||||
# PRCM clockdomain control
|
||||
obj-$(CONFIG_ARCH_OMAP2) += clockdomain.o \
|
||||
clockdomains2xxx_3xxx_data.o
|
||||
obj-$(CONFIG_ARCH_OMAP3) += clockdomain.o \
|
||||
clockdomains2xxx_3xxx_data.o
|
||||
obj-$(CONFIG_ARCH_OMAP4) += clockdomain.o \
|
||||
clockdomains44xx_data.o
|
||||
# Clock framework
|
||||
obj-$(CONFIG_ARCH_OMAP2) += $(clock-common) clock2xxx.o \
|
||||
clkt2xxx_sys.o \
|
||||
|
|
|
@ -143,7 +143,8 @@ static void __init omap_2430sdp_init_irq(void)
|
|||
{
|
||||
omap_board_config = sdp2430_config;
|
||||
omap_board_config_size = ARRAY_SIZE(sdp2430_config);
|
||||
omap2_init_common_hw(NULL, NULL);
|
||||
omap2_init_common_infrastructure();
|
||||
omap2_init_common_devices(NULL, NULL);
|
||||
omap_init_irq();
|
||||
}
|
||||
|
||||
|
|
|
@ -326,7 +326,8 @@ static void __init omap_3430sdp_init_irq(void)
|
|||
omap_board_config = sdp3430_config;
|
||||
omap_board_config_size = ARRAY_SIZE(sdp3430_config);
|
||||
omap3_pm_init_cpuidle(omap3_cpuidle_params_table);
|
||||
omap2_init_common_hw(hyb18m512160af6_sdrc_params, NULL);
|
||||
omap2_init_common_infrastructure();
|
||||
omap2_init_common_devices(hyb18m512160af6_sdrc_params, NULL);
|
||||
omap_init_irq();
|
||||
}
|
||||
|
||||
|
|
|
@ -73,8 +73,9 @@ static void __init omap_sdp_init_irq(void)
|
|||
{
|
||||
omap_board_config = sdp_config;
|
||||
omap_board_config_size = ARRAY_SIZE(sdp_config);
|
||||
omap2_init_common_hw(h8mbx00u0mer0em_sdrc_params,
|
||||
h8mbx00u0mer0em_sdrc_params);
|
||||
omap2_init_common_infrastructure();
|
||||
omap2_init_common_devices(h8mbx00u0mer0em_sdrc_params,
|
||||
h8mbx00u0mer0em_sdrc_params);
|
||||
omap_init_irq();
|
||||
}
|
||||
|
||||
|
|
|
@ -242,7 +242,8 @@ static void __init omap_4430sdp_init_irq(void)
|
|||
{
|
||||
omap_board_config = sdp4430_config;
|
||||
omap_board_config_size = ARRAY_SIZE(sdp4430_config);
|
||||
omap2_init_common_hw(NULL, NULL);
|
||||
omap2_init_common_infrastructure();
|
||||
omap2_init_common_devices(NULL, NULL);
|
||||
#ifdef CONFIG_OMAP_32K_TIMER
|
||||
omap2_gp_clockevent_set_gptimer(1);
|
||||
#endif
|
||||
|
|
|
@ -47,7 +47,8 @@ static void __init am3517_crane_init_irq(void)
|
|||
omap_board_config = am3517_crane_config;
|
||||
omap_board_config_size = ARRAY_SIZE(am3517_crane_config);
|
||||
|
||||
omap2_init_common_hw(NULL, NULL);
|
||||
omap2_init_common_infrastructure();
|
||||
omap2_init_common_devices(NULL, NULL);
|
||||
omap_init_irq();
|
||||
}
|
||||
|
||||
|
|
|
@ -389,8 +389,8 @@ static void __init am3517_evm_init_irq(void)
|
|||
{
|
||||
omap_board_config = am3517_evm_config;
|
||||
omap_board_config_size = ARRAY_SIZE(am3517_evm_config);
|
||||
|
||||
omap2_init_common_hw(NULL, NULL);
|
||||
omap2_init_common_infrastructure();
|
||||
omap2_init_common_devices(NULL, NULL);
|
||||
omap_init_irq();
|
||||
}
|
||||
|
||||
|
|
|
@ -278,7 +278,8 @@ static void __init omap_apollon_init_irq(void)
|
|||
{
|
||||
omap_board_config = apollon_config;
|
||||
omap_board_config_size = ARRAY_SIZE(apollon_config);
|
||||
omap2_init_common_hw(NULL, NULL);
|
||||
omap2_init_common_infrastructure();
|
||||
omap2_init_common_devices(NULL, NULL);
|
||||
omap_init_irq();
|
||||
}
|
||||
|
||||
|
|
|
@ -677,7 +677,8 @@ static void __init cm_t35_init_irq(void)
|
|||
omap_board_config = cm_t35_config;
|
||||
omap_board_config_size = ARRAY_SIZE(cm_t35_config);
|
||||
|
||||
omap2_init_common_hw(mt46h32m32lf6_sdrc_params,
|
||||
omap2_init_common_infrastructure();
|
||||
omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
|
||||
mt46h32m32lf6_sdrc_params);
|
||||
omap_init_irq();
|
||||
}
|
||||
|
|
|
@ -248,7 +248,8 @@ static void __init cm_t3517_init_irq(void)
|
|||
omap_board_config = cm_t3517_config;
|
||||
omap_board_config_size = ARRAY_SIZE(cm_t3517_config);
|
||||
|
||||
omap2_init_common_hw(NULL, NULL);
|
||||
omap2_init_common_infrastructure();
|
||||
omap2_init_common_devices(NULL, NULL);
|
||||
omap_init_irq();
|
||||
}
|
||||
|
||||
|
|
|
@ -444,8 +444,9 @@ static struct platform_device keys_gpio = {
|
|||
|
||||
static void __init devkit8000_init_irq(void)
|
||||
{
|
||||
omap2_init_common_hw(mt46h32m32lf6_sdrc_params,
|
||||
mt46h32m32lf6_sdrc_params);
|
||||
omap2_init_common_infrastructure();
|
||||
omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
|
||||
mt46h32m32lf6_sdrc_params);
|
||||
omap_init_irq();
|
||||
#ifdef CONFIG_OMAP_32K_TIMER
|
||||
omap2_gp_clockevent_set_gptimer(12);
|
||||
|
|
|
@ -37,7 +37,8 @@ static void __init omap_generic_init_irq(void)
|
|||
{
|
||||
omap_board_config = generic_config;
|
||||
omap_board_config_size = ARRAY_SIZE(generic_config);
|
||||
omap2_init_common_hw(NULL, NULL);
|
||||
omap2_init_common_infrastructure();
|
||||
omap2_init_common_devices(NULL, NULL);
|
||||
omap_init_irq();
|
||||
}
|
||||
|
||||
|
|
|
@ -294,7 +294,8 @@ static void __init omap_h4_init_irq(void)
|
|||
{
|
||||
omap_board_config = h4_config;
|
||||
omap_board_config_size = ARRAY_SIZE(h4_config);
|
||||
omap2_init_common_hw(NULL, NULL);
|
||||
omap2_init_common_infrastructure();
|
||||
omap2_init_common_devices(NULL, NULL);
|
||||
omap_init_irq();
|
||||
h4_init_flash();
|
||||
}
|
||||
|
|
|
@ -520,7 +520,9 @@ static struct platform_device *igep2_devices[] __initdata = {
|
|||
|
||||
static void __init igep2_init_irq(void)
|
||||
{
|
||||
omap2_init_common_hw(m65kxxxxam_sdrc_params, m65kxxxxam_sdrc_params);
|
||||
omap2_init_common_infrastructure();
|
||||
omap2_init_common_devices(m65kxxxxam_sdrc_params,
|
||||
m65kxxxxam_sdrc_params);
|
||||
omap_init_irq();
|
||||
}
|
||||
|
||||
|
|
|
@ -289,7 +289,9 @@ static struct twl4030_usb_data igep3_twl4030_usb_data = {
|
|||
|
||||
static void __init igep3_init_irq(void)
|
||||
{
|
||||
omap2_init_common_hw(m65kxxxxam_sdrc_params, m65kxxxxam_sdrc_params);
|
||||
omap2_init_common_infrastructure();
|
||||
omap2_init_common_devices(m65kxxxxam_sdrc_params,
|
||||
m65kxxxxam_sdrc_params);
|
||||
omap_init_irq();
|
||||
}
|
||||
|
||||
|
|
|
@ -292,7 +292,8 @@ static void __init omap_ldp_init_irq(void)
|
|||
{
|
||||
omap_board_config = ldp_config;
|
||||
omap_board_config_size = ARRAY_SIZE(ldp_config);
|
||||
omap2_init_common_hw(NULL, NULL);
|
||||
omap2_init_common_infrastructure();
|
||||
omap2_init_common_devices(NULL, NULL);
|
||||
omap_init_irq();
|
||||
}
|
||||
|
||||
|
|
|
@ -631,7 +631,8 @@ static void __init n8x0_map_io(void)
|
|||
|
||||
static void __init n8x0_init_irq(void)
|
||||
{
|
||||
omap2_init_common_hw(NULL, NULL);
|
||||
omap2_init_common_infrastructure();
|
||||
omap2_init_common_devices(NULL, NULL);
|
||||
omap_init_irq();
|
||||
}
|
||||
|
||||
|
|
|
@ -484,8 +484,9 @@ static struct platform_device keys_gpio = {
|
|||
|
||||
static void __init omap3_beagle_init_irq(void)
|
||||
{
|
||||
omap2_init_common_hw(mt46h32m32lf6_sdrc_params,
|
||||
mt46h32m32lf6_sdrc_params);
|
||||
omap2_init_common_infrastructure();
|
||||
omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
|
||||
mt46h32m32lf6_sdrc_params);
|
||||
omap_init_irq();
|
||||
#ifdef CONFIG_OMAP_32K_TIMER
|
||||
omap2_gp_clockevent_set_gptimer(12);
|
||||
|
|
|
@ -623,7 +623,8 @@ static void __init omap3_evm_init_irq(void)
|
|||
{
|
||||
omap_board_config = omap3_evm_config;
|
||||
omap_board_config_size = ARRAY_SIZE(omap3_evm_config);
|
||||
omap2_init_common_hw(mt46h32m32lf6_sdrc_params, NULL);
|
||||
omap2_init_common_infrastructure();
|
||||
omap2_init_common_devices(mt46h32m32lf6_sdrc_params, NULL);
|
||||
omap_init_irq();
|
||||
}
|
||||
|
||||
|
|
|
@ -197,7 +197,8 @@ static inline void __init board_smsc911x_init(void)
|
|||
|
||||
static void __init omap3logic_init_irq(void)
|
||||
{
|
||||
omap2_init_common_hw(NULL, NULL);
|
||||
omap2_init_common_infrastructure();
|
||||
omap2_init_common_devices(NULL, NULL);
|
||||
omap_init_irq();
|
||||
}
|
||||
|
||||
|
|
|
@ -636,8 +636,9 @@ static struct spi_board_info omap3pandora_spi_board_info[] __initdata = {
|
|||
|
||||
static void __init omap3pandora_init_irq(void)
|
||||
{
|
||||
omap2_init_common_hw(mt46h32m32lf6_sdrc_params,
|
||||
mt46h32m32lf6_sdrc_params);
|
||||
omap2_init_common_infrastructure();
|
||||
omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
|
||||
mt46h32m32lf6_sdrc_params);
|
||||
omap_init_irq();
|
||||
}
|
||||
|
||||
|
|
|
@ -584,7 +584,8 @@ static void __init omap3_stalker_init_irq(void)
|
|||
{
|
||||
omap_board_config = omap3_stalker_config;
|
||||
omap_board_config_size = ARRAY_SIZE(omap3_stalker_config);
|
||||
omap2_init_common_hw(mt46h32m32lf6_sdrc_params, NULL);
|
||||
omap2_init_common_infrastructure();
|
||||
omap2_init_common_devices(mt46h32m32lf6_sdrc_params, NULL);
|
||||
omap_init_irq();
|
||||
#ifdef CONFIG_OMAP_32K_TIMER
|
||||
omap2_gp_clockevent_set_gptimer(12);
|
||||
|
|
|
@ -420,8 +420,9 @@ static void __init omap3_touchbook_init_irq(void)
|
|||
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
|
||||
omap_board_config = omap3_touchbook_config;
|
||||
omap_board_config_size = ARRAY_SIZE(omap3_touchbook_config);
|
||||
omap2_init_common_hw(mt46h32m32lf6_sdrc_params,
|
||||
mt46h32m32lf6_sdrc_params);
|
||||
omap2_init_common_infrastructure();
|
||||
omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
|
||||
mt46h32m32lf6_sdrc_params);
|
||||
omap_init_irq();
|
||||
#ifdef CONFIG_OMAP_32K_TIMER
|
||||
omap2_gp_clockevent_set_gptimer(12);
|
||||
|
|
|
@ -77,7 +77,8 @@ static struct platform_device *panda_devices[] __initdata = {
|
|||
|
||||
static void __init omap4_panda_init_irq(void)
|
||||
{
|
||||
omap2_init_common_hw(NULL, NULL);
|
||||
omap2_init_common_infrastructure();
|
||||
omap2_init_common_devices(NULL, NULL);
|
||||
gic_init_irq();
|
||||
}
|
||||
|
||||
|
|
|
@ -413,8 +413,9 @@ static void __init overo_init_irq(void)
|
|||
{
|
||||
omap_board_config = overo_config;
|
||||
omap_board_config_size = ARRAY_SIZE(overo_config);
|
||||
omap2_init_common_hw(mt46h32m32lf6_sdrc_params,
|
||||
mt46h32m32lf6_sdrc_params);
|
||||
omap2_init_common_infrastructure();
|
||||
omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
|
||||
mt46h32m32lf6_sdrc_params);
|
||||
omap_init_irq();
|
||||
}
|
||||
|
||||
|
|
|
@ -145,8 +145,9 @@ static void __init rm680_init_irq(void)
|
|||
{
|
||||
struct omap_sdrc_params *sdrc_params;
|
||||
|
||||
omap2_init_common_infrastructure();
|
||||
sdrc_params = nokia_get_sdram_timings();
|
||||
omap2_init_common_hw(sdrc_params, sdrc_params);
|
||||
omap2_init_common_devices(sdrc_params, sdrc_params);
|
||||
omap_init_irq();
|
||||
}
|
||||
|
||||
|
|
|
@ -105,8 +105,9 @@ static void __init rx51_init_irq(void)
|
|||
omap_board_config = rx51_config;
|
||||
omap_board_config_size = ARRAY_SIZE(rx51_config);
|
||||
omap3_pm_init_cpuidle(rx51_cpuidle_params);
|
||||
omap2_init_common_infrastructure();
|
||||
sdrc_params = nokia_get_sdram_timings();
|
||||
omap2_init_common_hw(sdrc_params, sdrc_params);
|
||||
omap2_init_common_devices(sdrc_params, sdrc_params);
|
||||
omap_init_irq();
|
||||
}
|
||||
|
||||
|
|
|
@ -35,12 +35,13 @@
|
|||
|
||||
static void __init omap_zoom_init_irq(void)
|
||||
{
|
||||
omap2_init_common_infrastructure();
|
||||
if (machine_is_omap_zoom2())
|
||||
omap2_init_common_hw(mt46h32m32lf6_sdrc_params,
|
||||
mt46h32m32lf6_sdrc_params);
|
||||
omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
|
||||
mt46h32m32lf6_sdrc_params);
|
||||
else if (machine_is_omap_zoom3())
|
||||
omap2_init_common_hw(h8mbx00u0mer0em_sdrc_params,
|
||||
h8mbx00u0mer0em_sdrc_params);
|
||||
omap2_init_common_devices(h8mbx00u0mer0em_sdrc_params,
|
||||
h8mbx00u0mer0em_sdrc_params);
|
||||
|
||||
omap_init_irq();
|
||||
}
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
|
||||
#include "clock.h"
|
||||
#include "clock2xxx.h"
|
||||
#include "cm.h"
|
||||
#include "cm2xxx_3xxx.h"
|
||||
#include "cm-regbits-24xx.h"
|
||||
|
||||
/* CM_CLKEN_PLL.EN_{54,96}M_PLL options (24XX) */
|
||||
|
@ -49,14 +49,14 @@ static int omap2_clk_apll_enable(struct clk *clk, u32 status_mask)
|
|||
|
||||
apll_mask = EN_APLL_LOCKED << clk->enable_bit;
|
||||
|
||||
cval = cm_read_mod_reg(PLL_MOD, CM_CLKEN);
|
||||
cval = omap2_cm_read_mod_reg(PLL_MOD, CM_CLKEN);
|
||||
|
||||
if ((cval & apll_mask) == apll_mask)
|
||||
return 0; /* apll already enabled */
|
||||
|
||||
cval &= ~apll_mask;
|
||||
cval |= apll_mask;
|
||||
cm_write_mod_reg(cval, PLL_MOD, CM_CLKEN);
|
||||
omap2_cm_write_mod_reg(cval, PLL_MOD, CM_CLKEN);
|
||||
|
||||
omap2_cm_wait_idlest(cm_idlest_pll, status_mask,
|
||||
OMAP24XX_CM_IDLEST_VAL, clk->name);
|
||||
|
@ -83,9 +83,9 @@ static void omap2_clk_apll_disable(struct clk *clk)
|
|||
{
|
||||
u32 cval;
|
||||
|
||||
cval = cm_read_mod_reg(PLL_MOD, CM_CLKEN);
|
||||
cval = omap2_cm_read_mod_reg(PLL_MOD, CM_CLKEN);
|
||||
cval &= ~(EN_APLL_LOCKED << clk->enable_bit);
|
||||
cm_write_mod_reg(cval, PLL_MOD, CM_CLKEN);
|
||||
omap2_cm_write_mod_reg(cval, PLL_MOD, CM_CLKEN);
|
||||
}
|
||||
|
||||
/* Public data */
|
||||
|
@ -106,7 +106,7 @@ u32 omap2xxx_get_apll_clkin(void)
|
|||
{
|
||||
u32 aplls, srate = 0;
|
||||
|
||||
aplls = cm_read_mod_reg(PLL_MOD, CM_CLKSEL1);
|
||||
aplls = omap2_cm_read_mod_reg(PLL_MOD, CM_CLKSEL1);
|
||||
aplls &= OMAP24XX_APLLS_CLKIN_MASK;
|
||||
aplls >>= OMAP24XX_APLLS_CLKIN_SHIFT;
|
||||
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
#include "clock.h"
|
||||
#include "clock2xxx.h"
|
||||
#include "opp2xxx.h"
|
||||
#include "cm.h"
|
||||
#include "cm2xxx_3xxx.h"
|
||||
#include "cm-regbits-24xx.h"
|
||||
|
||||
/* #define DOWN_VARIABLE_DPLL 1 */ /* Experimental */
|
||||
|
@ -54,7 +54,7 @@ unsigned long omap2xxx_clk_get_core_rate(struct clk *clk)
|
|||
|
||||
core_clk = omap2_get_dpll_rate(clk);
|
||||
|
||||
v = cm_read_mod_reg(PLL_MOD, CM_CLKSEL2);
|
||||
v = omap2_cm_read_mod_reg(PLL_MOD, CM_CLKSEL2);
|
||||
v &= OMAP24XX_CORE_CLK_SRC_MASK;
|
||||
|
||||
if (v == CORE_CLK_SRC_32K)
|
||||
|
@ -73,7 +73,7 @@ static long omap2_dpllcore_round_rate(unsigned long target_rate)
|
|||
{
|
||||
u32 high, low, core_clk_src;
|
||||
|
||||
core_clk_src = cm_read_mod_reg(PLL_MOD, CM_CLKSEL2);
|
||||
core_clk_src = omap2_cm_read_mod_reg(PLL_MOD, CM_CLKSEL2);
|
||||
core_clk_src &= OMAP24XX_CORE_CLK_SRC_MASK;
|
||||
|
||||
if (core_clk_src == CORE_CLK_SRC_DPLL) { /* DPLL clockout */
|
||||
|
@ -111,7 +111,7 @@ int omap2_reprogram_dpllcore(struct clk *clk, unsigned long rate)
|
|||
const struct dpll_data *dd;
|
||||
|
||||
cur_rate = omap2xxx_clk_get_core_rate(dclk);
|
||||
mult = cm_read_mod_reg(PLL_MOD, CM_CLKSEL2);
|
||||
mult = omap2_cm_read_mod_reg(PLL_MOD, CM_CLKSEL2);
|
||||
mult &= OMAP24XX_CORE_CLK_SRC_MASK;
|
||||
|
||||
if ((rate == (cur_rate / 2)) && (mult == 2)) {
|
||||
|
@ -136,7 +136,7 @@ int omap2_reprogram_dpllcore(struct clk *clk, unsigned long rate)
|
|||
tmpset.cm_clksel1_pll &= ~(dd->mult_mask |
|
||||
dd->div1_mask);
|
||||
div = ((curr_prcm_set->xtal_speed / 1000000) - 1);
|
||||
tmpset.cm_clksel2_pll = cm_read_mod_reg(PLL_MOD, CM_CLKSEL2);
|
||||
tmpset.cm_clksel2_pll = omap2_cm_read_mod_reg(PLL_MOD, CM_CLKSEL2);
|
||||
tmpset.cm_clksel2_pll &= ~OMAP24XX_CORE_CLK_SRC_MASK;
|
||||
if (rate > low) {
|
||||
tmpset.cm_clksel2_pll |= CORE_CLK_SRC_DPLL_X2;
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
|
||||
#include "clock.h"
|
||||
#include "clock2xxx.h"
|
||||
#include "prm.h"
|
||||
#include "prm2xxx_3xxx.h"
|
||||
#include "prm-regbits-24xx.h"
|
||||
|
||||
static int omap2_enable_osc_ck(struct clk *clk)
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
|
||||
#include "clock.h"
|
||||
#include "clock2xxx.h"
|
||||
#include "prm.h"
|
||||
#include "prm2xxx_3xxx.h"
|
||||
#include "prm-regbits-24xx.h"
|
||||
|
||||
void __iomem *prcm_clksrc_ctrl;
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
#include "clock.h"
|
||||
#include "clock2xxx.h"
|
||||
#include "opp2xxx.h"
|
||||
#include "cm.h"
|
||||
#include "cm2xxx_3xxx.h"
|
||||
#include "cm-regbits-24xx.h"
|
||||
|
||||
const struct prcm_config *curr_prcm_set;
|
||||
|
@ -133,21 +133,21 @@ int omap2_select_table_rate(struct clk *clk, unsigned long rate)
|
|||
done_rate = CORE_CLK_SRC_DPLL;
|
||||
|
||||
/* MPU divider */
|
||||
cm_write_mod_reg(prcm->cm_clksel_mpu, MPU_MOD, CM_CLKSEL);
|
||||
omap2_cm_write_mod_reg(prcm->cm_clksel_mpu, MPU_MOD, CM_CLKSEL);
|
||||
|
||||
/* dsp + iva1 div(2420), iva2.1(2430) */
|
||||
cm_write_mod_reg(prcm->cm_clksel_dsp,
|
||||
omap2_cm_write_mod_reg(prcm->cm_clksel_dsp,
|
||||
OMAP24XX_DSP_MOD, CM_CLKSEL);
|
||||
|
||||
cm_write_mod_reg(prcm->cm_clksel_gfx, GFX_MOD, CM_CLKSEL);
|
||||
omap2_cm_write_mod_reg(prcm->cm_clksel_gfx, GFX_MOD, CM_CLKSEL);
|
||||
|
||||
/* Major subsystem dividers */
|
||||
tmp = cm_read_mod_reg(CORE_MOD, CM_CLKSEL1) & OMAP24XX_CLKSEL_DSS2_MASK;
|
||||
cm_write_mod_reg(prcm->cm_clksel1_core | tmp, CORE_MOD,
|
||||
tmp = omap2_cm_read_mod_reg(CORE_MOD, CM_CLKSEL1) & OMAP24XX_CLKSEL_DSS2_MASK;
|
||||
omap2_cm_write_mod_reg(prcm->cm_clksel1_core | tmp, CORE_MOD,
|
||||
CM_CLKSEL1);
|
||||
|
||||
if (cpu_is_omap2430())
|
||||
cm_write_mod_reg(prcm->cm_clksel_mdm,
|
||||
omap2_cm_write_mod_reg(prcm->cm_clksel_mdm,
|
||||
OMAP2430_MDM_MOD, CM_CLKSEL);
|
||||
|
||||
/* x2 to enter omap2xxx_sdrc_init_params() */
|
||||
|
|
|
@ -24,7 +24,6 @@
|
|||
#include <plat/clock.h>
|
||||
|
||||
#include "clock.h"
|
||||
#include "cm.h"
|
||||
#include "cm-regbits-24xx.h"
|
||||
#include "cm-regbits-34xx.h"
|
||||
|
||||
|
|
|
@ -24,14 +24,12 @@
|
|||
#include <linux/bitops.h>
|
||||
|
||||
#include <plat/clock.h>
|
||||
#include <plat/clockdomain.h>
|
||||
#include "clockdomain.h"
|
||||
#include <plat/cpu.h>
|
||||
#include <plat/prcm.h>
|
||||
|
||||
#include "clock.h"
|
||||
#include "prm.h"
|
||||
#include "prm-regbits-24xx.h"
|
||||
#include "cm.h"
|
||||
#include "cm2xxx_3xxx.h"
|
||||
#include "cm-regbits-24xx.h"
|
||||
#include "cm-regbits-34xx.h"
|
||||
|
||||
|
|
|
@ -49,7 +49,6 @@
|
|||
|
||||
/* DPLL Type and DCO Selection Flags */
|
||||
#define DPLL_J_TYPE 0x1
|
||||
#define DPLL_NO_DCO_SEL 0x2
|
||||
|
||||
int omap2_clk_enable(struct clk *clk);
|
||||
void omap2_clk_disable(struct clk *clk);
|
||||
|
|
|
@ -22,8 +22,8 @@
|
|||
#include "clock.h"
|
||||
#include "clock2xxx.h"
|
||||
#include "opp2xxx.h"
|
||||
#include "prm.h"
|
||||
#include "cm.h"
|
||||
#include "cm2xxx_3xxx.h"
|
||||
#include "prm2xxx_3xxx.h"
|
||||
#include "prm-regbits-24xx.h"
|
||||
#include "cm-regbits-24xx.h"
|
||||
#include "sdrc.h"
|
||||
|
@ -812,7 +812,7 @@ static struct clk dss2_fck = { /* Alt clk used in power management */
|
|||
.clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1),
|
||||
.clksel_mask = OMAP24XX_CLKSEL_DSS2_MASK,
|
||||
.clksel = dss2_fck_clksel,
|
||||
.recalc = &followparent_recalc,
|
||||
.recalc = &omap2_clksel_recalc,
|
||||
};
|
||||
|
||||
static struct clk dss_54m_fck = { /* Alt clk used in power management */
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
|
||||
#include "clock.h"
|
||||
#include "clock2xxx.h"
|
||||
#include "cm.h"
|
||||
#include "cm2xxx_3xxx.h"
|
||||
#include "cm-regbits-24xx.h"
|
||||
|
||||
/**
|
||||
|
|
|
@ -22,8 +22,8 @@
|
|||
#include "clock.h"
|
||||
#include "clock2xxx.h"
|
||||
#include "opp2xxx.h"
|
||||
#include "prm.h"
|
||||
#include "cm.h"
|
||||
#include "cm2xxx_3xxx.h"
|
||||
#include "prm2xxx_3xxx.h"
|
||||
#include "prm-regbits-24xx.h"
|
||||
#include "cm-regbits-24xx.h"
|
||||
#include "sdrc.h"
|
||||
|
@ -800,7 +800,7 @@ static struct clk dss2_fck = { /* Alt clk used in power management */
|
|||
.clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1),
|
||||
.clksel_mask = OMAP24XX_CLKSEL_DSS2_MASK,
|
||||
.clksel = dss2_fck_clksel,
|
||||
.recalc = &followparent_recalc,
|
||||
.recalc = &omap2_clksel_recalc,
|
||||
};
|
||||
|
||||
static struct clk dss_54m_fck = { /* Alt clk used in power management */
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
|
||||
#include "clock.h"
|
||||
#include "clock34xx.h"
|
||||
#include "cm.h"
|
||||
#include "cm2xxx_3xxx.h"
|
||||
#include "cm-regbits-34xx.h"
|
||||
|
||||
/**
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
|
||||
#include "clock.h"
|
||||
#include "clock3517.h"
|
||||
#include "cm.h"
|
||||
#include "cm2xxx_3xxx.h"
|
||||
#include "cm-regbits-34xx.h"
|
||||
|
||||
/*
|
||||
|
|
|
@ -25,9 +25,9 @@
|
|||
|
||||
#include "clock.h"
|
||||
#include "clock3xxx.h"
|
||||
#include "prm.h"
|
||||
#include "prm2xxx_3xxx.h"
|
||||
#include "prm-regbits-34xx.h"
|
||||
#include "cm.h"
|
||||
#include "cm2xxx_3xxx.h"
|
||||
#include "cm-regbits-34xx.h"
|
||||
|
||||
/*
|
||||
|
@ -94,7 +94,7 @@ static int __init omap3xxx_clk_arch_init(void)
|
|||
|
||||
ret = omap2_clk_switch_mpurate_at_boot("dpll1_ck");
|
||||
if (!ret)
|
||||
omap2_clk_print_new_rates("osc_sys_ck", "arm_fck", "core_ck");
|
||||
omap2_clk_print_new_rates("osc_sys_ck", "core_ck", "arm_fck");
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -28,9 +28,9 @@
|
|||
#include "clock36xx.h"
|
||||
#include "clock3517.h"
|
||||
|
||||
#include "cm.h"
|
||||
#include "cm2xxx_3xxx.h"
|
||||
#include "cm-regbits-34xx.h"
|
||||
#include "prm.h"
|
||||
#include "prm2xxx_3xxx.h"
|
||||
#include "prm-regbits-34xx.h"
|
||||
#include "control.h"
|
||||
|
||||
|
@ -120,7 +120,7 @@ static const struct clksel_rate osc_sys_13m_rates[] = {
|
|||
};
|
||||
|
||||
static const struct clksel_rate osc_sys_16_8m_rates[] = {
|
||||
{ .div = 1, .val = 5, .flags = RATE_IN_3430ES2PLUS },
|
||||
{ .div = 1, .val = 5, .flags = RATE_IN_3430ES2PLUS_36XX },
|
||||
{ .div = 0 }
|
||||
};
|
||||
|
||||
|
@ -452,35 +452,35 @@ static struct clk dpll3_x2_ck = {
|
|||
static const struct clksel_rate div31_dpll3_rates[] = {
|
||||
{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
|
||||
{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
|
||||
{ .div = 3, .val = 3, .flags = RATE_IN_3430ES2PLUS },
|
||||
{ .div = 4, .val = 4, .flags = RATE_IN_3430ES2PLUS },
|
||||
{ .div = 5, .val = 5, .flags = RATE_IN_3430ES2PLUS },
|
||||
{ .div = 6, .val = 6, .flags = RATE_IN_3430ES2PLUS },
|
||||
{ .div = 7, .val = 7, .flags = RATE_IN_3430ES2PLUS },
|
||||
{ .div = 8, .val = 8, .flags = RATE_IN_3430ES2PLUS },
|
||||
{ .div = 9, .val = 9, .flags = RATE_IN_3430ES2PLUS },
|
||||
{ .div = 10, .val = 10, .flags = RATE_IN_3430ES2PLUS },
|
||||
{ .div = 11, .val = 11, .flags = RATE_IN_3430ES2PLUS },
|
||||
{ .div = 12, .val = 12, .flags = RATE_IN_3430ES2PLUS },
|
||||
{ .div = 13, .val = 13, .flags = RATE_IN_3430ES2PLUS },
|
||||
{ .div = 14, .val = 14, .flags = RATE_IN_3430ES2PLUS },
|
||||
{ .div = 15, .val = 15, .flags = RATE_IN_3430ES2PLUS },
|
||||
{ .div = 16, .val = 16, .flags = RATE_IN_3430ES2PLUS },
|
||||
{ .div = 17, .val = 17, .flags = RATE_IN_3430ES2PLUS },
|
||||
{ .div = 18, .val = 18, .flags = RATE_IN_3430ES2PLUS },
|
||||
{ .div = 19, .val = 19, .flags = RATE_IN_3430ES2PLUS },
|
||||
{ .div = 20, .val = 20, .flags = RATE_IN_3430ES2PLUS },
|
||||
{ .div = 21, .val = 21, .flags = RATE_IN_3430ES2PLUS },
|
||||
{ .div = 22, .val = 22, .flags = RATE_IN_3430ES2PLUS },
|
||||
{ .div = 23, .val = 23, .flags = RATE_IN_3430ES2PLUS },
|
||||
{ .div = 24, .val = 24, .flags = RATE_IN_3430ES2PLUS },
|
||||
{ .div = 25, .val = 25, .flags = RATE_IN_3430ES2PLUS },
|
||||
{ .div = 26, .val = 26, .flags = RATE_IN_3430ES2PLUS },
|
||||
{ .div = 27, .val = 27, .flags = RATE_IN_3430ES2PLUS },
|
||||
{ .div = 28, .val = 28, .flags = RATE_IN_3430ES2PLUS },
|
||||
{ .div = 29, .val = 29, .flags = RATE_IN_3430ES2PLUS },
|
||||
{ .div = 30, .val = 30, .flags = RATE_IN_3430ES2PLUS },
|
||||
{ .div = 31, .val = 31, .flags = RATE_IN_3430ES2PLUS },
|
||||
{ .div = 3, .val = 3, .flags = RATE_IN_3430ES2PLUS_36XX },
|
||||
{ .div = 4, .val = 4, .flags = RATE_IN_3430ES2PLUS_36XX },
|
||||
{ .div = 5, .val = 5, .flags = RATE_IN_3430ES2PLUS_36XX },
|
||||
{ .div = 6, .val = 6, .flags = RATE_IN_3430ES2PLUS_36XX },
|
||||
{ .div = 7, .val = 7, .flags = RATE_IN_3430ES2PLUS_36XX },
|
||||
{ .div = 8, .val = 8, .flags = RATE_IN_3430ES2PLUS_36XX },
|
||||
{ .div = 9, .val = 9, .flags = RATE_IN_3430ES2PLUS_36XX },
|
||||
{ .div = 10, .val = 10, .flags = RATE_IN_3430ES2PLUS_36XX },
|
||||
{ .div = 11, .val = 11, .flags = RATE_IN_3430ES2PLUS_36XX },
|
||||
{ .div = 12, .val = 12, .flags = RATE_IN_3430ES2PLUS_36XX },
|
||||
{ .div = 13, .val = 13, .flags = RATE_IN_3430ES2PLUS_36XX },
|
||||
{ .div = 14, .val = 14, .flags = RATE_IN_3430ES2PLUS_36XX },
|
||||
{ .div = 15, .val = 15, .flags = RATE_IN_3430ES2PLUS_36XX },
|
||||
{ .div = 16, .val = 16, .flags = RATE_IN_3430ES2PLUS_36XX },
|
||||
{ .div = 17, .val = 17, .flags = RATE_IN_3430ES2PLUS_36XX },
|
||||
{ .div = 18, .val = 18, .flags = RATE_IN_3430ES2PLUS_36XX },
|
||||
{ .div = 19, .val = 19, .flags = RATE_IN_3430ES2PLUS_36XX },
|
||||
{ .div = 20, .val = 20, .flags = RATE_IN_3430ES2PLUS_36XX },
|
||||
{ .div = 21, .val = 21, .flags = RATE_IN_3430ES2PLUS_36XX },
|
||||
{ .div = 22, .val = 22, .flags = RATE_IN_3430ES2PLUS_36XX },
|
||||
{ .div = 23, .val = 23, .flags = RATE_IN_3430ES2PLUS_36XX },
|
||||
{ .div = 24, .val = 24, .flags = RATE_IN_3430ES2PLUS_36XX },
|
||||
{ .div = 25, .val = 25, .flags = RATE_IN_3430ES2PLUS_36XX },
|
||||
{ .div = 26, .val = 26, .flags = RATE_IN_3430ES2PLUS_36XX },
|
||||
{ .div = 27, .val = 27, .flags = RATE_IN_3430ES2PLUS_36XX },
|
||||
{ .div = 28, .val = 28, .flags = RATE_IN_3430ES2PLUS_36XX },
|
||||
{ .div = 29, .val = 29, .flags = RATE_IN_3430ES2PLUS_36XX },
|
||||
{ .div = 30, .val = 30, .flags = RATE_IN_3430ES2PLUS_36XX },
|
||||
{ .div = 31, .val = 31, .flags = RATE_IN_3430ES2PLUS_36XX },
|
||||
{ .div = 0 },
|
||||
};
|
||||
|
||||
|
@ -602,6 +602,8 @@ static struct dpll_data dpll4_dd_3630 __initdata = {
|
|||
.autoidle_mask = OMAP3430_AUTO_PERIPH_DPLL_MASK,
|
||||
.idlest_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST),
|
||||
.idlest_mask = OMAP3430_ST_PERIPH_CLK_MASK,
|
||||
.dco_mask = OMAP3630_PERIPH_DPLL_DCO_SEL_MASK,
|
||||
.sddiv_mask = OMAP3630_PERIPH_DPLL_SD_DIV_MASK,
|
||||
.max_multiplier = OMAP3630_MAX_JTYPE_DPLL_MULT,
|
||||
.min_divider = 1,
|
||||
.max_divider = OMAP3_MAX_DPLL_DIV,
|
||||
|
@ -1558,6 +1560,7 @@ static struct clk mcspi4_fck = {
|
|||
.enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
|
||||
.enable_bit = OMAP3430_EN_MCSPI4_SHIFT,
|
||||
.recalc = &followparent_recalc,
|
||||
.clkdm_name = "core_l4_clkdm",
|
||||
};
|
||||
|
||||
static struct clk mcspi3_fck = {
|
||||
|
@ -1567,6 +1570,7 @@ static struct clk mcspi3_fck = {
|
|||
.enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
|
||||
.enable_bit = OMAP3430_EN_MCSPI3_SHIFT,
|
||||
.recalc = &followparent_recalc,
|
||||
.clkdm_name = "core_l4_clkdm",
|
||||
};
|
||||
|
||||
static struct clk mcspi2_fck = {
|
||||
|
@ -1576,6 +1580,7 @@ static struct clk mcspi2_fck = {
|
|||
.enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
|
||||
.enable_bit = OMAP3430_EN_MCSPI2_SHIFT,
|
||||
.recalc = &followparent_recalc,
|
||||
.clkdm_name = "core_l4_clkdm",
|
||||
};
|
||||
|
||||
static struct clk mcspi1_fck = {
|
||||
|
@ -1585,6 +1590,7 @@ static struct clk mcspi1_fck = {
|
|||
.enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
|
||||
.enable_bit = OMAP3430_EN_MCSPI1_SHIFT,
|
||||
.recalc = &followparent_recalc,
|
||||
.clkdm_name = "core_l4_clkdm",
|
||||
};
|
||||
|
||||
static struct clk uart2_fck = {
|
||||
|
@ -3044,6 +3050,7 @@ static struct clk sr1_fck = {
|
|||
.parent = &sys_ck,
|
||||
.enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_FCLKEN),
|
||||
.enable_bit = OMAP3430_EN_SR1_SHIFT,
|
||||
.clkdm_name = "wkup_clkdm",
|
||||
.recalc = &followparent_recalc,
|
||||
};
|
||||
|
||||
|
@ -3054,6 +3061,7 @@ static struct clk sr2_fck = {
|
|||
.parent = &sys_ck,
|
||||
.enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_FCLKEN),
|
||||
.enable_bit = OMAP3430_EN_SR2_SHIFT,
|
||||
.clkdm_name = "wkup_clkdm",
|
||||
.recalc = &followparent_recalc,
|
||||
};
|
||||
|
||||
|
@ -3201,7 +3209,7 @@ static struct omap_clk omap3xxx_clks[] = {
|
|||
CLK(NULL, "omap_32k_fck", &omap_32k_fck, CK_3XXX),
|
||||
CLK(NULL, "virt_12m_ck", &virt_12m_ck, CK_3XXX),
|
||||
CLK(NULL, "virt_13m_ck", &virt_13m_ck, CK_3XXX),
|
||||
CLK(NULL, "virt_16_8m_ck", &virt_16_8m_ck, CK_3430ES2 | CK_AM35XX),
|
||||
CLK(NULL, "virt_16_8m_ck", &virt_16_8m_ck, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
|
||||
CLK(NULL, "virt_19_2m_ck", &virt_19_2m_ck, CK_3XXX),
|
||||
CLK(NULL, "virt_26m_ck", &virt_26m_ck, CK_3XXX),
|
||||
CLK(NULL, "virt_38_4m_ck", &virt_38_4m_ck, CK_3XXX),
|
||||
|
@ -3218,8 +3226,8 @@ static struct omap_clk omap3xxx_clks[] = {
|
|||
CLK(NULL, "dpll1_ck", &dpll1_ck, CK_3XXX),
|
||||
CLK(NULL, "dpll1_x2_ck", &dpll1_x2_ck, CK_3XXX),
|
||||
CLK(NULL, "dpll1_x2m2_ck", &dpll1_x2m2_ck, CK_3XXX),
|
||||
CLK(NULL, "dpll2_ck", &dpll2_ck, CK_343X),
|
||||
CLK(NULL, "dpll2_m2_ck", &dpll2_m2_ck, CK_343X),
|
||||
CLK(NULL, "dpll2_ck", &dpll2_ck, CK_34XX | CK_36XX),
|
||||
CLK(NULL, "dpll2_m2_ck", &dpll2_m2_ck, CK_34XX | CK_36XX),
|
||||
CLK(NULL, "dpll3_ck", &dpll3_ck, CK_3XXX),
|
||||
CLK(NULL, "core_ck", &core_ck, CK_3XXX),
|
||||
CLK(NULL, "dpll3_x2_ck", &dpll3_x2_ck, CK_3XXX),
|
||||
|
@ -3248,8 +3256,8 @@ static struct omap_clk omap3xxx_clks[] = {
|
|||
CLK(NULL, "dpll4_m6_ck", &dpll4_m6_ck, CK_3XXX),
|
||||
CLK(NULL, "dpll4_m6x2_ck", &dpll4_m6x2_ck, CK_3XXX),
|
||||
CLK("etb", "emu_per_alwon_ck", &emu_per_alwon_ck, CK_3XXX),
|
||||
CLK(NULL, "dpll5_ck", &dpll5_ck, CK_3430ES2 | CK_AM35XX),
|
||||
CLK(NULL, "dpll5_m2_ck", &dpll5_m2_ck, CK_3430ES2 | CK_AM35XX),
|
||||
CLK(NULL, "dpll5_ck", &dpll5_ck, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
|
||||
CLK(NULL, "dpll5_m2_ck", &dpll5_m2_ck, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
|
||||
CLK(NULL, "clkout2_src_ck", &clkout2_src_ck, CK_3XXX),
|
||||
CLK(NULL, "sys_clkout2", &sys_clkout2, CK_3XXX),
|
||||
CLK(NULL, "corex2_fck", &corex2_fck, CK_3XXX),
|
||||
|
@ -3257,8 +3265,8 @@ static struct omap_clk omap3xxx_clks[] = {
|
|||
CLK(NULL, "mpu_ck", &mpu_ck, CK_3XXX),
|
||||
CLK(NULL, "arm_fck", &arm_fck, CK_3XXX),
|
||||
CLK("etb", "emu_mpu_alwon_ck", &emu_mpu_alwon_ck, CK_3XXX),
|
||||
CLK(NULL, "dpll2_fck", &dpll2_fck, CK_343X),
|
||||
CLK(NULL, "iva2_ck", &iva2_ck, CK_343X),
|
||||
CLK(NULL, "dpll2_fck", &dpll2_fck, CK_34XX | CK_36XX),
|
||||
CLK(NULL, "iva2_ck", &iva2_ck, CK_34XX | CK_36XX),
|
||||
CLK(NULL, "l3_ick", &l3_ick, CK_3XXX),
|
||||
CLK(NULL, "l4_ick", &l4_ick, CK_3XXX),
|
||||
CLK(NULL, "rm_ick", &rm_ick, CK_3XXX),
|
||||
|
@ -3267,23 +3275,23 @@ static struct omap_clk omap3xxx_clks[] = {
|
|||
CLK(NULL, "gfx_l3_ick", &gfx_l3_ick, CK_3430ES1),
|
||||
CLK(NULL, "gfx_cg1_ck", &gfx_cg1_ck, CK_3430ES1),
|
||||
CLK(NULL, "gfx_cg2_ck", &gfx_cg2_ck, CK_3430ES1),
|
||||
CLK(NULL, "sgx_fck", &sgx_fck, CK_3430ES2 | CK_3517),
|
||||
CLK(NULL, "sgx_ick", &sgx_ick, CK_3430ES2 | CK_3517),
|
||||
CLK(NULL, "sgx_fck", &sgx_fck, CK_3430ES2PLUS | CK_3517 | CK_36XX),
|
||||
CLK(NULL, "sgx_ick", &sgx_ick, CK_3430ES2PLUS | CK_3517 | CK_36XX),
|
||||
CLK(NULL, "d2d_26m_fck", &d2d_26m_fck, CK_3430ES1),
|
||||
CLK(NULL, "modem_fck", &modem_fck, CK_343X),
|
||||
CLK(NULL, "sad2d_ick", &sad2d_ick, CK_343X),
|
||||
CLK(NULL, "mad2d_ick", &mad2d_ick, CK_343X),
|
||||
CLK(NULL, "modem_fck", &modem_fck, CK_34XX | CK_36XX),
|
||||
CLK(NULL, "sad2d_ick", &sad2d_ick, CK_34XX | CK_36XX),
|
||||
CLK(NULL, "mad2d_ick", &mad2d_ick, CK_34XX | CK_36XX),
|
||||
CLK(NULL, "gpt10_fck", &gpt10_fck, CK_3XXX),
|
||||
CLK(NULL, "gpt11_fck", &gpt11_fck, CK_3XXX),
|
||||
CLK(NULL, "cpefuse_fck", &cpefuse_fck, CK_3430ES2 | CK_AM35XX),
|
||||
CLK(NULL, "ts_fck", &ts_fck, CK_3430ES2 | CK_AM35XX),
|
||||
CLK(NULL, "usbtll_fck", &usbtll_fck, CK_3430ES2 | CK_AM35XX),
|
||||
CLK(NULL, "cpefuse_fck", &cpefuse_fck, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
|
||||
CLK(NULL, "ts_fck", &ts_fck, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
|
||||
CLK(NULL, "usbtll_fck", &usbtll_fck, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
|
||||
CLK("omap-mcbsp.1", "prcm_fck", &core_96m_fck, CK_3XXX),
|
||||
CLK("omap-mcbsp.5", "prcm_fck", &core_96m_fck, CK_3XXX),
|
||||
CLK(NULL, "core_96m_fck", &core_96m_fck, CK_3XXX),
|
||||
CLK("mmci-omap-hs.2", "fck", &mmchs3_fck, CK_3430ES2 | CK_AM35XX),
|
||||
CLK("mmci-omap-hs.2", "fck", &mmchs3_fck, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
|
||||
CLK("mmci-omap-hs.1", "fck", &mmchs2_fck, CK_3XXX),
|
||||
CLK(NULL, "mspro_fck", &mspro_fck, CK_343X),
|
||||
CLK(NULL, "mspro_fck", &mspro_fck, CK_34XX | CK_36XX),
|
||||
CLK("mmci-omap-hs.0", "fck", &mmchs1_fck, CK_3XXX),
|
||||
CLK("omap_i2c.3", "fck", &i2c3_fck, CK_3XXX),
|
||||
CLK("omap_i2c.2", "fck", &i2c2_fck, CK_3XXX),
|
||||
|
@ -3301,26 +3309,26 @@ static struct omap_clk omap3xxx_clks[] = {
|
|||
CLK(NULL, "core_12m_fck", &core_12m_fck, CK_3XXX),
|
||||
CLK("omap_hdq.0", "fck", &hdq_fck, CK_3XXX),
|
||||
CLK(NULL, "ssi_ssr_fck", &ssi_ssr_fck_3430es1, CK_3430ES1),
|
||||
CLK(NULL, "ssi_ssr_fck", &ssi_ssr_fck_3430es2, CK_3430ES2),
|
||||
CLK(NULL, "ssi_ssr_fck", &ssi_ssr_fck_3430es2, CK_3430ES2PLUS | CK_36XX),
|
||||
CLK(NULL, "ssi_sst_fck", &ssi_sst_fck_3430es1, CK_3430ES1),
|
||||
CLK(NULL, "ssi_sst_fck", &ssi_sst_fck_3430es2, CK_3430ES2),
|
||||
CLK(NULL, "ssi_sst_fck", &ssi_sst_fck_3430es2, CK_3430ES2PLUS | CK_36XX),
|
||||
CLK(NULL, "core_l3_ick", &core_l3_ick, CK_3XXX),
|
||||
CLK("musb_hdrc", "ick", &hsotgusb_ick_3430es1, CK_3430ES1),
|
||||
CLK("musb_hdrc", "ick", &hsotgusb_ick_3430es2, CK_3430ES2),
|
||||
CLK("musb_hdrc", "ick", &hsotgusb_ick_3430es2, CK_3430ES2PLUS | CK_36XX),
|
||||
CLK(NULL, "sdrc_ick", &sdrc_ick, CK_3XXX),
|
||||
CLK(NULL, "gpmc_fck", &gpmc_fck, CK_3XXX),
|
||||
CLK(NULL, "security_l3_ick", &security_l3_ick, CK_343X),
|
||||
CLK(NULL, "pka_ick", &pka_ick, CK_343X),
|
||||
CLK(NULL, "security_l3_ick", &security_l3_ick, CK_34XX | CK_36XX),
|
||||
CLK(NULL, "pka_ick", &pka_ick, CK_34XX | CK_36XX),
|
||||
CLK(NULL, "core_l4_ick", &core_l4_ick, CK_3XXX),
|
||||
CLK(NULL, "usbtll_ick", &usbtll_ick, CK_3430ES2 | CK_AM35XX),
|
||||
CLK("mmci-omap-hs.2", "ick", &mmchs3_ick, CK_3430ES2 | CK_AM35XX),
|
||||
CLK(NULL, "icr_ick", &icr_ick, CK_343X),
|
||||
CLK("omap-aes", "ick", &aes2_ick, CK_343X),
|
||||
CLK("omap-sham", "ick", &sha12_ick, CK_343X),
|
||||
CLK(NULL, "des2_ick", &des2_ick, CK_343X),
|
||||
CLK(NULL, "usbtll_ick", &usbtll_ick, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
|
||||
CLK("mmci-omap-hs.2", "ick", &mmchs3_ick, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
|
||||
CLK(NULL, "icr_ick", &icr_ick, CK_34XX | CK_36XX),
|
||||
CLK("omap-aes", "ick", &aes2_ick, CK_34XX | CK_36XX),
|
||||
CLK("omap-sham", "ick", &sha12_ick, CK_34XX | CK_36XX),
|
||||
CLK(NULL, "des2_ick", &des2_ick, CK_34XX | CK_36XX),
|
||||
CLK("mmci-omap-hs.1", "ick", &mmchs2_ick, CK_3XXX),
|
||||
CLK("mmci-omap-hs.0", "ick", &mmchs1_ick, CK_3XXX),
|
||||
CLK(NULL, "mspro_ick", &mspro_ick, CK_343X),
|
||||
CLK(NULL, "mspro_ick", &mspro_ick, CK_34XX | CK_36XX),
|
||||
CLK("omap_hdq.0", "ick", &hdq_ick, CK_3XXX),
|
||||
CLK("omap2_mcspi.4", "ick", &mcspi4_ick, CK_3XXX),
|
||||
CLK("omap2_mcspi.3", "ick", &mcspi3_ick, CK_3XXX),
|
||||
|
@ -3336,37 +3344,37 @@ static struct omap_clk omap3xxx_clks[] = {
|
|||
CLK("omap-mcbsp.5", "ick", &mcbsp5_ick, CK_3XXX),
|
||||
CLK("omap-mcbsp.1", "ick", &mcbsp1_ick, CK_3XXX),
|
||||
CLK(NULL, "fac_ick", &fac_ick, CK_3430ES1),
|
||||
CLK(NULL, "mailboxes_ick", &mailboxes_ick, CK_343X),
|
||||
CLK(NULL, "mailboxes_ick", &mailboxes_ick, CK_34XX | CK_36XX),
|
||||
CLK(NULL, "omapctrl_ick", &omapctrl_ick, CK_3XXX),
|
||||
CLK(NULL, "ssi_l4_ick", &ssi_l4_ick, CK_343X),
|
||||
CLK(NULL, "ssi_l4_ick", &ssi_l4_ick, CK_34XX | CK_36XX),
|
||||
CLK(NULL, "ssi_ick", &ssi_ick_3430es1, CK_3430ES1),
|
||||
CLK(NULL, "ssi_ick", &ssi_ick_3430es2, CK_3430ES2),
|
||||
CLK(NULL, "ssi_ick", &ssi_ick_3430es2, CK_3430ES2PLUS | CK_36XX),
|
||||
CLK(NULL, "usb_l4_ick", &usb_l4_ick, CK_3430ES1),
|
||||
CLK(NULL, "security_l4_ick2", &security_l4_ick2, CK_343X),
|
||||
CLK(NULL, "aes1_ick", &aes1_ick, CK_343X),
|
||||
CLK("omap_rng", "ick", &rng_ick, CK_343X),
|
||||
CLK(NULL, "sha11_ick", &sha11_ick, CK_343X),
|
||||
CLK(NULL, "des1_ick", &des1_ick, CK_343X),
|
||||
CLK(NULL, "security_l4_ick2", &security_l4_ick2, CK_34XX | CK_36XX),
|
||||
CLK(NULL, "aes1_ick", &aes1_ick, CK_34XX | CK_36XX),
|
||||
CLK("omap_rng", "ick", &rng_ick, CK_34XX | CK_36XX),
|
||||
CLK(NULL, "sha11_ick", &sha11_ick, CK_34XX | CK_36XX),
|
||||
CLK(NULL, "des1_ick", &des1_ick, CK_34XX | CK_36XX),
|
||||
CLK("omapdss", "dss1_fck", &dss1_alwon_fck_3430es1, CK_3430ES1),
|
||||
CLK("omapdss", "dss1_fck", &dss1_alwon_fck_3430es2, CK_3430ES2 | CK_AM35XX),
|
||||
CLK("omapdss", "dss1_fck", &dss1_alwon_fck_3430es2, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
|
||||
CLK("omapdss", "tv_fck", &dss_tv_fck, CK_3XXX),
|
||||
CLK("omapdss", "video_fck", &dss_96m_fck, CK_3XXX),
|
||||
CLK("omapdss", "dss2_fck", &dss2_alwon_fck, CK_3XXX),
|
||||
CLK("omapdss", "ick", &dss_ick_3430es1, CK_3430ES1),
|
||||
CLK("omapdss", "ick", &dss_ick_3430es2, CK_3430ES2 | CK_AM35XX),
|
||||
CLK(NULL, "cam_mclk", &cam_mclk, CK_343X),
|
||||
CLK(NULL, "cam_ick", &cam_ick, CK_343X),
|
||||
CLK(NULL, "csi2_96m_fck", &csi2_96m_fck, CK_343X),
|
||||
CLK(NULL, "usbhost_120m_fck", &usbhost_120m_fck, CK_3430ES2 | CK_AM35XX),
|
||||
CLK(NULL, "usbhost_48m_fck", &usbhost_48m_fck, CK_3430ES2 | CK_AM35XX),
|
||||
CLK(NULL, "usbhost_ick", &usbhost_ick, CK_3430ES2 | CK_AM35XX),
|
||||
CLK(NULL, "usim_fck", &usim_fck, CK_3430ES2),
|
||||
CLK("omapdss", "ick", &dss_ick_3430es2, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
|
||||
CLK(NULL, "cam_mclk", &cam_mclk, CK_34XX | CK_36XX),
|
||||
CLK(NULL, "cam_ick", &cam_ick, CK_34XX | CK_36XX),
|
||||
CLK(NULL, "csi2_96m_fck", &csi2_96m_fck, CK_34XX | CK_36XX),
|
||||
CLK(NULL, "usbhost_120m_fck", &usbhost_120m_fck, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
|
||||
CLK(NULL, "usbhost_48m_fck", &usbhost_48m_fck, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
|
||||
CLK(NULL, "usbhost_ick", &usbhost_ick, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
|
||||
CLK(NULL, "usim_fck", &usim_fck, CK_3430ES2PLUS | CK_36XX),
|
||||
CLK(NULL, "gpt1_fck", &gpt1_fck, CK_3XXX),
|
||||
CLK(NULL, "wkup_32k_fck", &wkup_32k_fck, CK_3XXX),
|
||||
CLK(NULL, "gpio1_dbck", &gpio1_dbck, CK_3XXX),
|
||||
CLK("omap_wdt", "fck", &wdt2_fck, CK_3XXX),
|
||||
CLK(NULL, "wkup_l4_ick", &wkup_l4_ick, CK_343X),
|
||||
CLK(NULL, "usim_ick", &usim_ick, CK_3430ES2),
|
||||
CLK(NULL, "wkup_l4_ick", &wkup_l4_ick, CK_34XX | CK_36XX),
|
||||
CLK(NULL, "usim_ick", &usim_ick, CK_3430ES2PLUS | CK_36XX),
|
||||
CLK("omap_wdt", "ick", &wdt2_ick, CK_3XXX),
|
||||
CLK(NULL, "wdt1_ick", &wdt1_ick, CK_3XXX),
|
||||
CLK(NULL, "gpio1_ick", &gpio1_ick, CK_3XXX),
|
||||
|
@ -3424,9 +3432,9 @@ static struct omap_clk omap3xxx_clks[] = {
|
|||
CLK(NULL, "atclk_fck", &atclk_fck, CK_3XXX),
|
||||
CLK(NULL, "traceclk_src_fck", &traceclk_src_fck, CK_3XXX),
|
||||
CLK(NULL, "traceclk_fck", &traceclk_fck, CK_3XXX),
|
||||
CLK(NULL, "sr1_fck", &sr1_fck, CK_343X),
|
||||
CLK(NULL, "sr2_fck", &sr2_fck, CK_343X),
|
||||
CLK(NULL, "sr_l4_ick", &sr_l4_ick, CK_343X),
|
||||
CLK(NULL, "sr1_fck", &sr1_fck, CK_34XX | CK_36XX),
|
||||
CLK(NULL, "sr2_fck", &sr2_fck, CK_34XX | CK_36XX),
|
||||
CLK(NULL, "sr_l4_ick", &sr_l4_ick, CK_34XX | CK_36XX),
|
||||
CLK(NULL, "secure_32k_fck", &secure_32k_fck, CK_3XXX),
|
||||
CLK(NULL, "gpt12_fck", &gpt12_fck, CK_3XXX),
|
||||
CLK(NULL, "wdt1_fck", &wdt1_fck, CK_3XXX),
|
||||
|
@ -3447,38 +3455,37 @@ static struct omap_clk omap3xxx_clks[] = {
|
|||
int __init omap3xxx_clk_init(void)
|
||||
{
|
||||
struct omap_clk *c;
|
||||
u32 cpu_clkflg = CK_3XXX;
|
||||
u32 cpu_clkflg = 0;
|
||||
|
||||
if (cpu_is_omap3517()) {
|
||||
cpu_mask = RATE_IN_3XXX | RATE_IN_3430ES2PLUS;
|
||||
cpu_clkflg |= CK_3517;
|
||||
cpu_mask = RATE_IN_34XX;
|
||||
cpu_clkflg = CK_3517;
|
||||
} else if (cpu_is_omap3505()) {
|
||||
cpu_mask = RATE_IN_3XXX | RATE_IN_3430ES2PLUS;
|
||||
cpu_clkflg |= CK_3505;
|
||||
cpu_mask = RATE_IN_34XX;
|
||||
cpu_clkflg = CK_3505;
|
||||
} else if (cpu_is_omap3630()) {
|
||||
cpu_mask = (RATE_IN_34XX | RATE_IN_36XX);
|
||||
cpu_clkflg = CK_36XX;
|
||||
} else if (cpu_is_omap34xx()) {
|
||||
cpu_mask = RATE_IN_3XXX;
|
||||
cpu_clkflg |= CK_343X;
|
||||
|
||||
/*
|
||||
* Update this if there are further clock changes between ES2
|
||||
* and production parts
|
||||
*/
|
||||
if (omap_rev() == OMAP3430_REV_ES1_0) {
|
||||
/* No 3430ES1-only rates exist, so no RATE_IN_3430ES1 */
|
||||
cpu_clkflg |= CK_3430ES1;
|
||||
cpu_mask = RATE_IN_3430ES1;
|
||||
cpu_clkflg = CK_3430ES1;
|
||||
} else {
|
||||
cpu_mask |= RATE_IN_3430ES2PLUS;
|
||||
cpu_clkflg |= CK_3430ES2;
|
||||
/*
|
||||
* Assume that anything that we haven't matched yet
|
||||
* has 3430ES2-type clocks.
|
||||
*/
|
||||
cpu_mask = RATE_IN_3430ES2PLUS;
|
||||
cpu_clkflg = CK_3430ES2PLUS;
|
||||
}
|
||||
} else {
|
||||
WARN(1, "clock: could not identify OMAP3 variant\n");
|
||||
}
|
||||
|
||||
if (omap3_has_192mhz_clk())
|
||||
omap_96m_alwon_fck = omap_96m_alwon_fck_3630;
|
||||
|
||||
if (cpu_is_omap3630()) {
|
||||
cpu_mask |= RATE_IN_36XX;
|
||||
cpu_clkflg |= CK_36XX;
|
||||
|
||||
/*
|
||||
* XXX This type of dynamic rewriting of the clock tree is
|
||||
* deprecated and should be revised soon.
|
||||
|
@ -3525,10 +3532,9 @@ int __init omap3xxx_clk_init(void)
|
|||
|
||||
recalculate_root_clocks();
|
||||
|
||||
printk(KERN_INFO "Clocking rate (Crystal/Core/MPU): "
|
||||
"%ld.%01ld/%ld/%ld MHz\n",
|
||||
(osc_sys_ck.rate / 1000000), (osc_sys_ck.rate / 100000) % 10,
|
||||
(core_ck.rate / 1000000), (arm_fck.rate / 1000000));
|
||||
pr_info("Clocking rate (Crystal/Core/MPU): %ld.%01ld/%ld/%ld MHz\n",
|
||||
(osc_sys_ck.rate / 1000000), (osc_sys_ck.rate / 100000) % 10,
|
||||
(core_ck.rate / 1000000), (arm_fck.rate / 1000000));
|
||||
|
||||
/*
|
||||
* Only enable those clocks we will need, let the drivers
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -13,7 +13,6 @@
|
|||
*/
|
||||
#undef DEBUG
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/list.h>
|
||||
|
@ -27,13 +26,16 @@
|
|||
|
||||
#include <linux/bitops.h>
|
||||
|
||||
#include "prm.h"
|
||||
#include "prm2xxx_3xxx.h"
|
||||
#include "prm-regbits-24xx.h"
|
||||
#include "cm.h"
|
||||
#include "cm2xxx_3xxx.h"
|
||||
#include "cm-regbits-24xx.h"
|
||||
#include "cminst44xx.h"
|
||||
#include "prcm44xx.h"
|
||||
|
||||
#include <plat/clock.h>
|
||||
#include <plat/powerdomain.h>
|
||||
#include <plat/clockdomain.h>
|
||||
#include "powerdomain.h"
|
||||
#include "clockdomain.h"
|
||||
#include <plat/prcm.h>
|
||||
|
||||
/* clkdm_list contains all registered struct clockdomains */
|
||||
|
@ -141,6 +143,9 @@ static struct clkdm_dep *_clkdm_deps_lookup(struct clockdomain *clkdm,
|
|||
* clockdomain is in hardware-supervised mode. Meant to be called
|
||||
* once at clockdomain layer initialization, since these should remain
|
||||
* fixed for a particular architecture. No return value.
|
||||
*
|
||||
* XXX autodeps are deprecated and should be removed at the earliest
|
||||
* opportunity
|
||||
*/
|
||||
static void _autodep_lookup(struct clkdm_autodep *autodep)
|
||||
{
|
||||
|
@ -168,6 +173,9 @@ static void _autodep_lookup(struct clkdm_autodep *autodep)
|
|||
* Add the "autodep" sleep & wakeup dependencies to clockdomain 'clkdm'
|
||||
* in hardware-supervised mode. Meant to be called from clock framework
|
||||
* when a clock inside clockdomain 'clkdm' is enabled. No return value.
|
||||
*
|
||||
* XXX autodeps are deprecated and should be removed at the earliest
|
||||
* opportunity
|
||||
*/
|
||||
static void _clkdm_add_autodeps(struct clockdomain *clkdm)
|
||||
{
|
||||
|
@ -199,6 +207,9 @@ static void _clkdm_add_autodeps(struct clockdomain *clkdm)
|
|||
* Remove the "autodep" sleep & wakeup dependencies from clockdomain 'clkdm'
|
||||
* in hardware-supervised mode. Meant to be called from clock framework
|
||||
* when a clock inside clockdomain 'clkdm' is disabled. No return value.
|
||||
*
|
||||
* XXX autodeps are deprecated and should be removed at the earliest
|
||||
* opportunity
|
||||
*/
|
||||
static void _clkdm_del_autodeps(struct clockdomain *clkdm)
|
||||
{
|
||||
|
@ -223,39 +234,56 @@ static void _clkdm_del_autodeps(struct clockdomain *clkdm)
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* _omap2_clkdm_set_hwsup - set the hwsup idle transition bit
|
||||
/**
|
||||
* _enable_hwsup - place a clockdomain into hardware-supervised idle
|
||||
* @clkdm: struct clockdomain *
|
||||
* @enable: int 0 to disable, 1 to enable
|
||||
*
|
||||
* Internal helper for actually switching the bit that controls hwsup
|
||||
* idle transitions for clkdm.
|
||||
* Place the clockdomain into hardware-supervised idle mode. No return
|
||||
* value.
|
||||
*
|
||||
* XXX Should this return an error if the clockdomain does not support
|
||||
* hardware-supervised idle mode?
|
||||
*/
|
||||
static void _omap2_clkdm_set_hwsup(struct clockdomain *clkdm, int enable)
|
||||
static void _enable_hwsup(struct clockdomain *clkdm)
|
||||
{
|
||||
u32 bits, v;
|
||||
|
||||
if (cpu_is_omap24xx()) {
|
||||
if (enable)
|
||||
bits = OMAP24XX_CLKSTCTRL_ENABLE_AUTO;
|
||||
else
|
||||
bits = OMAP24XX_CLKSTCTRL_DISABLE_AUTO;
|
||||
} else if (cpu_is_omap34xx() || cpu_is_omap44xx()) {
|
||||
if (enable)
|
||||
bits = OMAP34XX_CLKSTCTRL_ENABLE_AUTO;
|
||||
else
|
||||
bits = OMAP34XX_CLKSTCTRL_DISABLE_AUTO;
|
||||
} else {
|
||||
if (cpu_is_omap24xx())
|
||||
omap2xxx_cm_clkdm_enable_hwsup(clkdm->pwrdm.ptr->prcm_offs,
|
||||
clkdm->clktrctrl_mask);
|
||||
else if (cpu_is_omap34xx())
|
||||
omap3xxx_cm_clkdm_enable_hwsup(clkdm->pwrdm.ptr->prcm_offs,
|
||||
clkdm->clktrctrl_mask);
|
||||
else if (cpu_is_omap44xx())
|
||||
return omap4_cminst_clkdm_enable_hwsup(clkdm->prcm_partition,
|
||||
clkdm->cm_inst,
|
||||
clkdm->clkdm_offs);
|
||||
else
|
||||
BUG();
|
||||
}
|
||||
|
||||
bits = bits << __ffs(clkdm->clktrctrl_mask);
|
||||
|
||||
v = __raw_readl(clkdm->clkstctrl_reg);
|
||||
v &= ~(clkdm->clktrctrl_mask);
|
||||
v |= bits;
|
||||
__raw_writel(v, clkdm->clkstctrl_reg);
|
||||
}
|
||||
|
||||
/**
|
||||
* _disable_hwsup - place a clockdomain into software-supervised idle
|
||||
* @clkdm: struct clockdomain *
|
||||
*
|
||||
* Place the clockdomain @clkdm into software-supervised idle mode.
|
||||
* No return value.
|
||||
*
|
||||
* XXX Should this return an error if the clockdomain does not support
|
||||
* software-supervised idle mode?
|
||||
*/
|
||||
static void _disable_hwsup(struct clockdomain *clkdm)
|
||||
{
|
||||
if (cpu_is_omap24xx())
|
||||
omap2xxx_cm_clkdm_disable_hwsup(clkdm->pwrdm.ptr->prcm_offs,
|
||||
clkdm->clktrctrl_mask);
|
||||
else if (cpu_is_omap34xx())
|
||||
omap3xxx_cm_clkdm_disable_hwsup(clkdm->pwrdm.ptr->prcm_offs,
|
||||
clkdm->clktrctrl_mask);
|
||||
else if (cpu_is_omap44xx())
|
||||
return omap4_cminst_clkdm_disable_hwsup(clkdm->prcm_partition,
|
||||
clkdm->cm_inst,
|
||||
clkdm->clkdm_offs);
|
||||
else
|
||||
BUG();
|
||||
}
|
||||
|
||||
/* Public functions */
|
||||
|
@ -409,7 +437,7 @@ int clkdm_add_wkdep(struct clockdomain *clkdm1, struct clockdomain *clkdm2)
|
|||
pr_debug("clockdomain: hardware will wake up %s when %s wakes "
|
||||
"up\n", clkdm1->name, clkdm2->name);
|
||||
|
||||
prm_set_mod_reg_bits((1 << clkdm2->dep_bit),
|
||||
omap2_prm_set_mod_reg_bits((1 << clkdm2->dep_bit),
|
||||
clkdm1->pwrdm.ptr->prcm_offs, PM_WKDEP);
|
||||
}
|
||||
|
||||
|
@ -444,7 +472,7 @@ int clkdm_del_wkdep(struct clockdomain *clkdm1, struct clockdomain *clkdm2)
|
|||
pr_debug("clockdomain: hardware will no longer wake up %s "
|
||||
"after %s wakes up\n", clkdm1->name, clkdm2->name);
|
||||
|
||||
prm_clear_mod_reg_bits((1 << clkdm2->dep_bit),
|
||||
omap2_prm_clear_mod_reg_bits((1 << clkdm2->dep_bit),
|
||||
clkdm1->pwrdm.ptr->prcm_offs, PM_WKDEP);
|
||||
}
|
||||
|
||||
|
@ -480,7 +508,7 @@ int clkdm_read_wkdep(struct clockdomain *clkdm1, struct clockdomain *clkdm2)
|
|||
}
|
||||
|
||||
/* XXX It's faster to return the atomic wkdep_usecount */
|
||||
return prm_read_mod_bits_shift(clkdm1->pwrdm.ptr->prcm_offs, PM_WKDEP,
|
||||
return omap2_prm_read_mod_bits_shift(clkdm1->pwrdm.ptr->prcm_offs, PM_WKDEP,
|
||||
(1 << clkdm2->dep_bit));
|
||||
}
|
||||
|
||||
|
@ -514,7 +542,7 @@ int clkdm_clear_all_wkdeps(struct clockdomain *clkdm)
|
|||
atomic_set(&cd->wkdep_usecount, 0);
|
||||
}
|
||||
|
||||
prm_clear_mod_reg_bits(mask, clkdm->pwrdm.ptr->prcm_offs, PM_WKDEP);
|
||||
omap2_prm_clear_mod_reg_bits(mask, clkdm->pwrdm.ptr->prcm_offs, PM_WKDEP);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -553,7 +581,7 @@ int clkdm_add_sleepdep(struct clockdomain *clkdm1, struct clockdomain *clkdm2)
|
|||
pr_debug("clockdomain: will prevent %s from sleeping if %s "
|
||||
"is active\n", clkdm1->name, clkdm2->name);
|
||||
|
||||
cm_set_mod_reg_bits((1 << clkdm2->dep_bit),
|
||||
omap2_cm_set_mod_reg_bits((1 << clkdm2->dep_bit),
|
||||
clkdm1->pwrdm.ptr->prcm_offs,
|
||||
OMAP3430_CM_SLEEPDEP);
|
||||
}
|
||||
|
@ -596,7 +624,7 @@ int clkdm_del_sleepdep(struct clockdomain *clkdm1, struct clockdomain *clkdm2)
|
|||
"sleeping if %s is active\n", clkdm1->name,
|
||||
clkdm2->name);
|
||||
|
||||
cm_clear_mod_reg_bits((1 << clkdm2->dep_bit),
|
||||
omap2_cm_clear_mod_reg_bits((1 << clkdm2->dep_bit),
|
||||
clkdm1->pwrdm.ptr->prcm_offs,
|
||||
OMAP3430_CM_SLEEPDEP);
|
||||
}
|
||||
|
@ -639,7 +667,7 @@ int clkdm_read_sleepdep(struct clockdomain *clkdm1, struct clockdomain *clkdm2)
|
|||
}
|
||||
|
||||
/* XXX It's faster to return the atomic sleepdep_usecount */
|
||||
return prm_read_mod_bits_shift(clkdm1->pwrdm.ptr->prcm_offs,
|
||||
return omap2_prm_read_mod_bits_shift(clkdm1->pwrdm.ptr->prcm_offs,
|
||||
OMAP3430_CM_SLEEPDEP,
|
||||
(1 << clkdm2->dep_bit));
|
||||
}
|
||||
|
@ -677,34 +705,12 @@ int clkdm_clear_all_sleepdeps(struct clockdomain *clkdm)
|
|||
atomic_set(&cd->sleepdep_usecount, 0);
|
||||
}
|
||||
|
||||
prm_clear_mod_reg_bits(mask, clkdm->pwrdm.ptr->prcm_offs,
|
||||
omap2_prm_clear_mod_reg_bits(mask, clkdm->pwrdm.ptr->prcm_offs,
|
||||
OMAP3430_CM_SLEEPDEP);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* omap2_clkdm_clktrctrl_read - read the clkdm's current state transition mode
|
||||
* @clkdm: struct clkdm * of a clockdomain
|
||||
*
|
||||
* Return the clockdomain @clkdm current state transition mode from the
|
||||
* corresponding domain CM_CLKSTCTRL register. Returns -EINVAL if @clkdm
|
||||
* is NULL or the current mode upon success.
|
||||
*/
|
||||
static int omap2_clkdm_clktrctrl_read(struct clockdomain *clkdm)
|
||||
{
|
||||
u32 v;
|
||||
|
||||
if (!clkdm)
|
||||
return -EINVAL;
|
||||
|
||||
v = __raw_readl(clkdm->clkstctrl_reg);
|
||||
v &= clkdm->clktrctrl_mask;
|
||||
v >>= __ffs(clkdm->clktrctrl_mask);
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
/**
|
||||
* omap2_clkdm_sleep - force clockdomain sleep transition
|
||||
* @clkdm: struct clockdomain *
|
||||
|
@ -729,18 +735,19 @@ int omap2_clkdm_sleep(struct clockdomain *clkdm)
|
|||
|
||||
if (cpu_is_omap24xx()) {
|
||||
|
||||
cm_set_mod_reg_bits(OMAP24XX_FORCESTATE_MASK,
|
||||
omap2_cm_set_mod_reg_bits(OMAP24XX_FORCESTATE_MASK,
|
||||
clkdm->pwrdm.ptr->prcm_offs, OMAP2_PM_PWSTCTRL);
|
||||
|
||||
} else if (cpu_is_omap34xx() || cpu_is_omap44xx()) {
|
||||
} else if (cpu_is_omap34xx()) {
|
||||
|
||||
u32 bits = (OMAP34XX_CLKSTCTRL_FORCE_SLEEP <<
|
||||
__ffs(clkdm->clktrctrl_mask));
|
||||
omap3xxx_cm_clkdm_force_sleep(clkdm->pwrdm.ptr->prcm_offs,
|
||||
clkdm->clktrctrl_mask);
|
||||
|
||||
u32 v = __raw_readl(clkdm->clkstctrl_reg);
|
||||
v &= ~(clkdm->clktrctrl_mask);
|
||||
v |= bits;
|
||||
__raw_writel(v, clkdm->clkstctrl_reg);
|
||||
} else if (cpu_is_omap44xx()) {
|
||||
|
||||
omap4_cminst_clkdm_force_sleep(clkdm->prcm_partition,
|
||||
clkdm->cm_inst,
|
||||
clkdm->clkdm_offs);
|
||||
|
||||
} else {
|
||||
BUG();
|
||||
|
@ -773,18 +780,19 @@ int omap2_clkdm_wakeup(struct clockdomain *clkdm)
|
|||
|
||||
if (cpu_is_omap24xx()) {
|
||||
|
||||
cm_clear_mod_reg_bits(OMAP24XX_FORCESTATE_MASK,
|
||||
omap2_cm_clear_mod_reg_bits(OMAP24XX_FORCESTATE_MASK,
|
||||
clkdm->pwrdm.ptr->prcm_offs, OMAP2_PM_PWSTCTRL);
|
||||
|
||||
} else if (cpu_is_omap34xx() || cpu_is_omap44xx()) {
|
||||
} else if (cpu_is_omap34xx()) {
|
||||
|
||||
u32 bits = (OMAP34XX_CLKSTCTRL_FORCE_WAKEUP <<
|
||||
__ffs(clkdm->clktrctrl_mask));
|
||||
omap3xxx_cm_clkdm_force_wakeup(clkdm->pwrdm.ptr->prcm_offs,
|
||||
clkdm->clktrctrl_mask);
|
||||
|
||||
u32 v = __raw_readl(clkdm->clkstctrl_reg);
|
||||
v &= ~(clkdm->clktrctrl_mask);
|
||||
v |= bits;
|
||||
__raw_writel(v, clkdm->clkstctrl_reg);
|
||||
} else if (cpu_is_omap44xx()) {
|
||||
|
||||
omap4_cminst_clkdm_force_wakeup(clkdm->prcm_partition,
|
||||
clkdm->cm_inst,
|
||||
clkdm->clkdm_offs);
|
||||
|
||||
} else {
|
||||
BUG();
|
||||
|
@ -829,7 +837,7 @@ void omap2_clkdm_allow_idle(struct clockdomain *clkdm)
|
|||
_clkdm_add_autodeps(clkdm);
|
||||
}
|
||||
|
||||
_omap2_clkdm_set_hwsup(clkdm, 1);
|
||||
_enable_hwsup(clkdm);
|
||||
|
||||
pwrdm_clkdm_state_switch(clkdm);
|
||||
}
|
||||
|
@ -857,7 +865,7 @@ void omap2_clkdm_deny_idle(struct clockdomain *clkdm)
|
|||
pr_debug("clockdomain: disabling automatic idle transitions for %s\n",
|
||||
clkdm->name);
|
||||
|
||||
_omap2_clkdm_set_hwsup(clkdm, 0);
|
||||
_disable_hwsup(clkdm);
|
||||
|
||||
/*
|
||||
* XXX This should be removed once TI adds wakeup/sleep
|
||||
|
@ -891,7 +899,7 @@ void omap2_clkdm_deny_idle(struct clockdomain *clkdm)
|
|||
*/
|
||||
int omap2_clkdm_clk_enable(struct clockdomain *clkdm, struct clk *clk)
|
||||
{
|
||||
int v;
|
||||
bool hwsup = false;
|
||||
|
||||
/*
|
||||
* XXX Rewrite this code to maintain a list of enabled
|
||||
|
@ -909,17 +917,27 @@ int omap2_clkdm_clk_enable(struct clockdomain *clkdm, struct clk *clk)
|
|||
pr_debug("clockdomain: clkdm %s: clk %s now enabled\n", clkdm->name,
|
||||
clk->name);
|
||||
|
||||
if (!clkdm->clkstctrl_reg)
|
||||
return 0;
|
||||
if (cpu_is_omap24xx() || cpu_is_omap34xx()) {
|
||||
|
||||
v = omap2_clkdm_clktrctrl_read(clkdm);
|
||||
if (!clkdm->clktrctrl_mask)
|
||||
return 0;
|
||||
|
||||
if ((cpu_is_omap34xx() && v == OMAP34XX_CLKSTCTRL_ENABLE_AUTO) ||
|
||||
(cpu_is_omap24xx() && v == OMAP24XX_CLKSTCTRL_ENABLE_AUTO)) {
|
||||
hwsup = omap2_cm_is_clkdm_in_hwsup(clkdm->pwrdm.ptr->prcm_offs,
|
||||
clkdm->clktrctrl_mask);
|
||||
|
||||
} else if (cpu_is_omap44xx()) {
|
||||
|
||||
hwsup = omap4_cminst_is_clkdm_in_hwsup(clkdm->prcm_partition,
|
||||
clkdm->cm_inst,
|
||||
clkdm->clkdm_offs);
|
||||
|
||||
}
|
||||
|
||||
if (hwsup) {
|
||||
/* Disable HW transitions when we are changing deps */
|
||||
_omap2_clkdm_set_hwsup(clkdm, 0);
|
||||
_disable_hwsup(clkdm);
|
||||
_clkdm_add_autodeps(clkdm);
|
||||
_omap2_clkdm_set_hwsup(clkdm, 1);
|
||||
_enable_hwsup(clkdm);
|
||||
} else {
|
||||
omap2_clkdm_wakeup(clkdm);
|
||||
}
|
||||
|
@ -946,7 +964,7 @@ int omap2_clkdm_clk_enable(struct clockdomain *clkdm, struct clk *clk)
|
|||
*/
|
||||
int omap2_clkdm_clk_disable(struct clockdomain *clkdm, struct clk *clk)
|
||||
{
|
||||
int v;
|
||||
bool hwsup = false;
|
||||
|
||||
/*
|
||||
* XXX Rewrite this code to maintain a list of enabled
|
||||
|
@ -971,17 +989,27 @@ int omap2_clkdm_clk_disable(struct clockdomain *clkdm, struct clk *clk)
|
|||
pr_debug("clockdomain: clkdm %s: clk %s now disabled\n", clkdm->name,
|
||||
clk->name);
|
||||
|
||||
if (!clkdm->clkstctrl_reg)
|
||||
return 0;
|
||||
if (cpu_is_omap24xx() || cpu_is_omap34xx()) {
|
||||
|
||||
v = omap2_clkdm_clktrctrl_read(clkdm);
|
||||
if (!clkdm->clktrctrl_mask)
|
||||
return 0;
|
||||
|
||||
if ((cpu_is_omap34xx() && v == OMAP34XX_CLKSTCTRL_ENABLE_AUTO) ||
|
||||
(cpu_is_omap24xx() && v == OMAP24XX_CLKSTCTRL_ENABLE_AUTO)) {
|
||||
hwsup = omap2_cm_is_clkdm_in_hwsup(clkdm->pwrdm.ptr->prcm_offs,
|
||||
clkdm->clktrctrl_mask);
|
||||
|
||||
} else if (cpu_is_omap44xx()) {
|
||||
|
||||
hwsup = omap4_cminst_is_clkdm_in_hwsup(clkdm->prcm_partition,
|
||||
clkdm->cm_inst,
|
||||
clkdm->clkdm_offs);
|
||||
|
||||
}
|
||||
|
||||
if (hwsup) {
|
||||
/* Disable HW transitions when we are changing deps */
|
||||
_omap2_clkdm_set_hwsup(clkdm, 0);
|
||||
_disable_hwsup(clkdm);
|
||||
_clkdm_del_autodeps(clkdm);
|
||||
_omap2_clkdm_set_hwsup(clkdm, 1);
|
||||
_enable_hwsup(clkdm);
|
||||
} else {
|
||||
omap2_clkdm_sleep(clkdm);
|
||||
}
|
||||
|
|
|
@ -4,19 +4,21 @@
|
|||
* OMAP2/3 clockdomain framework functions
|
||||
*
|
||||
* Copyright (C) 2008 Texas Instruments, Inc.
|
||||
* Copyright (C) 2008-2009 Nokia Corporation
|
||||
* Copyright (C) 2008-2010 Nokia Corporation
|
||||
*
|
||||
* Written by Paul Walmsley
|
||||
* Paul Walmsley
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#ifndef __ASM_ARM_ARCH_OMAP_CLOCKDOMAIN_H
|
||||
#define __ASM_ARM_ARCH_OMAP_CLOCKDOMAIN_H
|
||||
#ifndef __ARCH_ARM_MACH_OMAP2_CLOCKDOMAIN_H
|
||||
#define __ARCH_ARM_MACH_OMAP2_CLOCKDOMAIN_H
|
||||
|
||||
#include <plat/powerdomain.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
#include "powerdomain.h"
|
||||
#include <plat/clock.h>
|
||||
#include <plat/cpu.h>
|
||||
|
||||
|
@ -30,16 +32,6 @@
|
|||
#define CLKDM_CAN_SWSUP (CLKDM_CAN_FORCE_SLEEP | CLKDM_CAN_FORCE_WAKEUP)
|
||||
#define CLKDM_CAN_HWSUP_SWSUP (CLKDM_CAN_SWSUP | CLKDM_CAN_HWSUP)
|
||||
|
||||
/* OMAP24XX CM_CLKSTCTRL_*.AUTOSTATE_* register bit values */
|
||||
#define OMAP24XX_CLKSTCTRL_DISABLE_AUTO 0x0
|
||||
#define OMAP24XX_CLKSTCTRL_ENABLE_AUTO 0x1
|
||||
|
||||
/* OMAP3XXX CM_CLKSTCTRL_*.CLKTRCTRL_* register bit values */
|
||||
#define OMAP34XX_CLKSTCTRL_DISABLE_AUTO 0x0
|
||||
#define OMAP34XX_CLKSTCTRL_FORCE_SLEEP 0x1
|
||||
#define OMAP34XX_CLKSTCTRL_FORCE_WAKEUP 0x2
|
||||
#define OMAP34XX_CLKSTCTRL_ENABLE_AUTO 0x3
|
||||
|
||||
/**
|
||||
* struct clkdm_autodep - clkdm deps to add when entering/exiting hwsup mode
|
||||
* @clkdm: clockdomain to add wkdep+sleepdep on - set name member only
|
||||
|
@ -90,11 +82,20 @@ struct clkdm_dep {
|
|||
* @clktrctrl_mask: CLKTRCTRL/AUTOSTATE field mask in CM_CLKSTCTRL reg
|
||||
* @flags: Clockdomain capability flags
|
||||
* @dep_bit: Bit shift of this clockdomain's PM_WKDEP/CM_SLEEPDEP bit
|
||||
* @prcm_partition: (OMAP4 only) PRCM partition ID for this clkdm's registers
|
||||
* @cm_inst: (OMAP4 only) CM instance register offset
|
||||
* @clkdm_offs: (OMAP4 only) CM clockdomain register offset
|
||||
* @wkdep_srcs: Clockdomains that can be told to wake this powerdomain up
|
||||
* @sleepdep_srcs: Clockdomains that can be told to keep this clkdm from inact
|
||||
* @omap_chip: OMAP chip types that this clockdomain is valid on
|
||||
* @usecount: Usecount tracking
|
||||
* @node: list_head to link all clockdomains together
|
||||
*
|
||||
* @prcm_partition should be a macro from mach-omap2/prcm44xx.h (OMAP4 only)
|
||||
* @cm_inst should be a macro ending in _INST from the OMAP4 CM instance
|
||||
* definitions (OMAP4 only)
|
||||
* @clkdm_offs should be a macro ending in _CDOFFS from the OMAP4 CM instance
|
||||
* definitions (OMAP4 only)
|
||||
*/
|
||||
struct clockdomain {
|
||||
const char *name;
|
||||
|
@ -102,10 +103,14 @@ struct clockdomain {
|
|||
const char *name;
|
||||
struct powerdomain *ptr;
|
||||
} pwrdm;
|
||||
void __iomem *clkstctrl_reg;
|
||||
#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
|
||||
const u16 clktrctrl_mask;
|
||||
#endif
|
||||
const u8 flags;
|
||||
const u8 dep_bit;
|
||||
const u8 prcm_partition;
|
||||
const s16 cm_inst;
|
||||
const u16 clkdm_offs;
|
||||
struct clkdm_dep *wkdep_srcs;
|
||||
struct clkdm_dep *sleepdep_srcs;
|
||||
const struct omap_chip_id omap_chip;
|
||||
|
@ -138,4 +143,7 @@ int omap2_clkdm_sleep(struct clockdomain *clkdm);
|
|||
int omap2_clkdm_clk_enable(struct clockdomain *clkdm, struct clk *clk);
|
||||
int omap2_clkdm_clk_disable(struct clockdomain *clkdm, struct clk *clk);
|
||||
|
||||
extern void __init omap2_clockdomains_init(void);
|
||||
extern void __init omap44xx_clockdomains_init(void);
|
||||
|
||||
#endif
|
|
@ -4,7 +4,7 @@
|
|||
* Copyright (C) 2008-2009 Texas Instruments, Inc.
|
||||
* Copyright (C) 2008-2010 Nokia Corporation
|
||||
*
|
||||
* Written by Paul Walmsley and Jouni Högander
|
||||
* Paul Walmsley, Jouni Högander
|
||||
*
|
||||
* This file contains clockdomains and clockdomain wakeup/sleep
|
||||
* dependencies for the OMAP2/3 chips. Some notes:
|
||||
|
@ -32,12 +32,17 @@
|
|||
* from the Power domain framework
|
||||
*/
|
||||
|
||||
#ifndef __ARCH_ARM_MACH_OMAP2_CLOCKDOMAINS_H
|
||||
#define __ARCH_ARM_MACH_OMAP2_CLOCKDOMAINS_H
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include <plat/clockdomain.h>
|
||||
#include "cm.h"
|
||||
#include "prm.h"
|
||||
#include "clockdomain.h"
|
||||
#include "prm2xxx_3xxx.h"
|
||||
#include "cm2xxx_3xxx.h"
|
||||
#include "cm-regbits-24xx.h"
|
||||
#include "cm-regbits-34xx.h"
|
||||
#include "cm-regbits-44xx.h"
|
||||
#include "prm-regbits-24xx.h"
|
||||
#include "prm-regbits-34xx.h"
|
||||
|
||||
/*
|
||||
* Clockdomain dependencies for wkdeps/sleepdeps
|
||||
|
@ -84,8 +89,6 @@ static struct clkdm_dep gfx_sgx_wkdeps[] = {
|
|||
|
||||
/* 24XX-specific possible dependencies */
|
||||
|
||||
#ifdef CONFIG_ARCH_OMAP2
|
||||
|
||||
/* Wakeup dependency source arrays */
|
||||
|
||||
/* 2420/2430 PM_WKDEP_DSP: CORE, MPU, WKUP */
|
||||
|
@ -165,8 +168,6 @@ static struct clkdm_dep core_24xx_wkdeps[] = {
|
|||
{ NULL },
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
/* 2430-specific possible wakeup dependencies */
|
||||
|
||||
|
@ -425,8 +426,6 @@ static struct clkdm_dep gfx_sgx_sleepdeps[] = {
|
|||
* sys_clkout/sys_clkout2.
|
||||
*/
|
||||
|
||||
#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
|
||||
|
||||
/* This is an implicit clockdomain - it is never defined as such in TRM */
|
||||
static struct clockdomain wkup_clkdm = {
|
||||
.name = "wkup_clkdm",
|
||||
|
@ -447,8 +446,6 @@ static struct clockdomain cm_clkdm = {
|
|||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP24XX | CHIP_IS_OMAP3430),
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* 2420-only clockdomains
|
||||
*/
|
||||
|
@ -459,7 +456,6 @@ static struct clockdomain mpu_2420_clkdm = {
|
|||
.name = "mpu_clkdm",
|
||||
.pwrdm = { .name = "mpu_pwrdm" },
|
||||
.flags = CLKDM_CAN_HWSUP,
|
||||
.clkstctrl_reg = OMAP2420_CM_REGADDR(MPU_MOD, OMAP2_CM_CLKSTCTRL),
|
||||
.wkdep_srcs = mpu_24xx_wkdeps,
|
||||
.clktrctrl_mask = OMAP24XX_AUTOSTATE_MPU_MASK,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
|
||||
|
@ -469,8 +465,6 @@ static struct clockdomain iva1_2420_clkdm = {
|
|||
.name = "iva1_clkdm",
|
||||
.pwrdm = { .name = "dsp_pwrdm" },
|
||||
.flags = CLKDM_CAN_HWSUP_SWSUP,
|
||||
.clkstctrl_reg = OMAP2420_CM_REGADDR(OMAP24XX_DSP_MOD,
|
||||
OMAP2_CM_CLKSTCTRL),
|
||||
.dep_bit = OMAP24XX_PM_WKDEP_MPU_EN_DSP_SHIFT,
|
||||
.wkdep_srcs = dsp_24xx_wkdeps,
|
||||
.clktrctrl_mask = OMAP2420_AUTOSTATE_IVA_MASK,
|
||||
|
@ -481,8 +475,6 @@ static struct clockdomain dsp_2420_clkdm = {
|
|||
.name = "dsp_clkdm",
|
||||
.pwrdm = { .name = "dsp_pwrdm" },
|
||||
.flags = CLKDM_CAN_HWSUP_SWSUP,
|
||||
.clkstctrl_reg = OMAP2420_CM_REGADDR(OMAP24XX_DSP_MOD,
|
||||
OMAP2_CM_CLKSTCTRL),
|
||||
.clktrctrl_mask = OMAP24XX_AUTOSTATE_DSP_MASK,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
|
||||
};
|
||||
|
@ -491,7 +483,6 @@ static struct clockdomain gfx_2420_clkdm = {
|
|||
.name = "gfx_clkdm",
|
||||
.pwrdm = { .name = "gfx_pwrdm" },
|
||||
.flags = CLKDM_CAN_HWSUP_SWSUP,
|
||||
.clkstctrl_reg = OMAP2420_CM_REGADDR(GFX_MOD, OMAP2_CM_CLKSTCTRL),
|
||||
.wkdep_srcs = gfx_sgx_wkdeps,
|
||||
.clktrctrl_mask = OMAP24XX_AUTOSTATE_GFX_MASK,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
|
||||
|
@ -501,7 +492,6 @@ static struct clockdomain core_l3_2420_clkdm = {
|
|||
.name = "core_l3_clkdm",
|
||||
.pwrdm = { .name = "core_pwrdm" },
|
||||
.flags = CLKDM_CAN_HWSUP,
|
||||
.clkstctrl_reg = OMAP2420_CM_REGADDR(CORE_MOD, OMAP2_CM_CLKSTCTRL),
|
||||
.wkdep_srcs = core_24xx_wkdeps,
|
||||
.clktrctrl_mask = OMAP24XX_AUTOSTATE_L3_MASK,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
|
||||
|
@ -511,7 +501,6 @@ static struct clockdomain core_l4_2420_clkdm = {
|
|||
.name = "core_l4_clkdm",
|
||||
.pwrdm = { .name = "core_pwrdm" },
|
||||
.flags = CLKDM_CAN_HWSUP,
|
||||
.clkstctrl_reg = OMAP2420_CM_REGADDR(CORE_MOD, OMAP2_CM_CLKSTCTRL),
|
||||
.wkdep_srcs = core_24xx_wkdeps,
|
||||
.clktrctrl_mask = OMAP24XX_AUTOSTATE_L4_MASK,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
|
||||
|
@ -521,7 +510,6 @@ static struct clockdomain dss_2420_clkdm = {
|
|||
.name = "dss_clkdm",
|
||||
.pwrdm = { .name = "core_pwrdm" },
|
||||
.flags = CLKDM_CAN_HWSUP,
|
||||
.clkstctrl_reg = OMAP2420_CM_REGADDR(CORE_MOD, OMAP2_CM_CLKSTCTRL),
|
||||
.clktrctrl_mask = OMAP24XX_AUTOSTATE_DSS_MASK,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
|
||||
};
|
||||
|
@ -539,8 +527,6 @@ static struct clockdomain mpu_2430_clkdm = {
|
|||
.name = "mpu_clkdm",
|
||||
.pwrdm = { .name = "mpu_pwrdm" },
|
||||
.flags = CLKDM_CAN_HWSUP_SWSUP,
|
||||
.clkstctrl_reg = OMAP2430_CM_REGADDR(MPU_MOD,
|
||||
OMAP2_CM_CLKSTCTRL),
|
||||
.wkdep_srcs = mpu_24xx_wkdeps,
|
||||
.clktrctrl_mask = OMAP24XX_AUTOSTATE_MPU_MASK,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
|
||||
|
@ -551,8 +537,6 @@ static struct clockdomain mdm_clkdm = {
|
|||
.name = "mdm_clkdm",
|
||||
.pwrdm = { .name = "mdm_pwrdm" },
|
||||
.flags = CLKDM_CAN_HWSUP_SWSUP,
|
||||
.clkstctrl_reg = OMAP2430_CM_REGADDR(OMAP2430_MDM_MOD,
|
||||
OMAP2_CM_CLKSTCTRL),
|
||||
.dep_bit = OMAP2430_PM_WKDEP_MPU_EN_MDM_SHIFT,
|
||||
.wkdep_srcs = mdm_2430_wkdeps,
|
||||
.clktrctrl_mask = OMAP2430_AUTOSTATE_MDM_MASK,
|
||||
|
@ -563,8 +547,6 @@ static struct clockdomain dsp_2430_clkdm = {
|
|||
.name = "dsp_clkdm",
|
||||
.pwrdm = { .name = "dsp_pwrdm" },
|
||||
.flags = CLKDM_CAN_HWSUP_SWSUP,
|
||||
.clkstctrl_reg = OMAP2430_CM_REGADDR(OMAP24XX_DSP_MOD,
|
||||
OMAP2_CM_CLKSTCTRL),
|
||||
.dep_bit = OMAP24XX_PM_WKDEP_MPU_EN_DSP_SHIFT,
|
||||
.wkdep_srcs = dsp_24xx_wkdeps,
|
||||
.clktrctrl_mask = OMAP24XX_AUTOSTATE_DSP_MASK,
|
||||
|
@ -575,7 +557,6 @@ static struct clockdomain gfx_2430_clkdm = {
|
|||
.name = "gfx_clkdm",
|
||||
.pwrdm = { .name = "gfx_pwrdm" },
|
||||
.flags = CLKDM_CAN_HWSUP_SWSUP,
|
||||
.clkstctrl_reg = OMAP2430_CM_REGADDR(GFX_MOD, OMAP2_CM_CLKSTCTRL),
|
||||
.wkdep_srcs = gfx_sgx_wkdeps,
|
||||
.clktrctrl_mask = OMAP24XX_AUTOSTATE_GFX_MASK,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
|
||||
|
@ -590,7 +571,6 @@ static struct clockdomain core_l3_2430_clkdm = {
|
|||
.name = "core_l3_clkdm",
|
||||
.pwrdm = { .name = "core_pwrdm" },
|
||||
.flags = CLKDM_CAN_HWSUP,
|
||||
.clkstctrl_reg = OMAP2430_CM_REGADDR(CORE_MOD, OMAP2_CM_CLKSTCTRL),
|
||||
.dep_bit = OMAP24XX_EN_CORE_SHIFT,
|
||||
.wkdep_srcs = core_24xx_wkdeps,
|
||||
.clktrctrl_mask = OMAP24XX_AUTOSTATE_L3_MASK,
|
||||
|
@ -606,7 +586,6 @@ static struct clockdomain core_l4_2430_clkdm = {
|
|||
.name = "core_l4_clkdm",
|
||||
.pwrdm = { .name = "core_pwrdm" },
|
||||
.flags = CLKDM_CAN_HWSUP,
|
||||
.clkstctrl_reg = OMAP2430_CM_REGADDR(CORE_MOD, OMAP2_CM_CLKSTCTRL),
|
||||
.dep_bit = OMAP24XX_EN_CORE_SHIFT,
|
||||
.wkdep_srcs = core_24xx_wkdeps,
|
||||
.clktrctrl_mask = OMAP24XX_AUTOSTATE_L4_MASK,
|
||||
|
@ -617,7 +596,6 @@ static struct clockdomain dss_2430_clkdm = {
|
|||
.name = "dss_clkdm",
|
||||
.pwrdm = { .name = "core_pwrdm" },
|
||||
.flags = CLKDM_CAN_HWSUP,
|
||||
.clkstctrl_reg = OMAP2430_CM_REGADDR(CORE_MOD, OMAP2_CM_CLKSTCTRL),
|
||||
.clktrctrl_mask = OMAP24XX_AUTOSTATE_DSS_MASK,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
|
||||
};
|
||||
|
@ -635,7 +613,6 @@ static struct clockdomain mpu_3xxx_clkdm = {
|
|||
.name = "mpu_clkdm",
|
||||
.pwrdm = { .name = "mpu_pwrdm" },
|
||||
.flags = CLKDM_CAN_HWSUP | CLKDM_CAN_FORCE_WAKEUP,
|
||||
.clkstctrl_reg = OMAP34XX_CM_REGADDR(MPU_MOD, OMAP2_CM_CLKSTCTRL),
|
||||
.dep_bit = OMAP3430_EN_MPU_SHIFT,
|
||||
.wkdep_srcs = mpu_3xxx_wkdeps,
|
||||
.clktrctrl_mask = OMAP3430_CLKTRCTRL_MPU_MASK,
|
||||
|
@ -646,8 +623,6 @@ static struct clockdomain neon_clkdm = {
|
|||
.name = "neon_clkdm",
|
||||
.pwrdm = { .name = "neon_pwrdm" },
|
||||
.flags = CLKDM_CAN_HWSUP_SWSUP,
|
||||
.clkstctrl_reg = OMAP34XX_CM_REGADDR(OMAP3430_NEON_MOD,
|
||||
OMAP2_CM_CLKSTCTRL),
|
||||
.wkdep_srcs = neon_wkdeps,
|
||||
.clktrctrl_mask = OMAP3430_CLKTRCTRL_NEON_MASK,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
|
||||
|
@ -657,8 +632,6 @@ static struct clockdomain iva2_clkdm = {
|
|||
.name = "iva2_clkdm",
|
||||
.pwrdm = { .name = "iva2_pwrdm" },
|
||||
.flags = CLKDM_CAN_HWSUP_SWSUP,
|
||||
.clkstctrl_reg = OMAP34XX_CM_REGADDR(OMAP3430_IVA2_MOD,
|
||||
OMAP2_CM_CLKSTCTRL),
|
||||
.dep_bit = OMAP3430_PM_WKDEP_MPU_EN_IVA2_SHIFT,
|
||||
.wkdep_srcs = iva2_wkdeps,
|
||||
.clktrctrl_mask = OMAP3430_CLKTRCTRL_IVA2_MASK,
|
||||
|
@ -669,7 +642,6 @@ static struct clockdomain gfx_3430es1_clkdm = {
|
|||
.name = "gfx_clkdm",
|
||||
.pwrdm = { .name = "gfx_pwrdm" },
|
||||
.flags = CLKDM_CAN_HWSUP_SWSUP,
|
||||
.clkstctrl_reg = OMAP34XX_CM_REGADDR(GFX_MOD, OMAP2_CM_CLKSTCTRL),
|
||||
.wkdep_srcs = gfx_sgx_wkdeps,
|
||||
.sleepdep_srcs = gfx_sgx_sleepdeps,
|
||||
.clktrctrl_mask = OMAP3430ES1_CLKTRCTRL_GFX_MASK,
|
||||
|
@ -680,8 +652,6 @@ static struct clockdomain sgx_clkdm = {
|
|||
.name = "sgx_clkdm",
|
||||
.pwrdm = { .name = "sgx_pwrdm" },
|
||||
.flags = CLKDM_CAN_HWSUP_SWSUP,
|
||||
.clkstctrl_reg = OMAP34XX_CM_REGADDR(OMAP3430ES2_SGX_MOD,
|
||||
OMAP2_CM_CLKSTCTRL),
|
||||
.wkdep_srcs = gfx_sgx_wkdeps,
|
||||
.sleepdep_srcs = gfx_sgx_sleepdeps,
|
||||
.clktrctrl_mask = OMAP3430ES2_CLKTRCTRL_SGX_MASK,
|
||||
|
@ -699,7 +669,6 @@ static struct clockdomain d2d_clkdm = {
|
|||
.name = "d2d_clkdm",
|
||||
.pwrdm = { .name = "core_pwrdm" },
|
||||
.flags = CLKDM_CAN_HWSUP_SWSUP,
|
||||
.clkstctrl_reg = OMAP34XX_CM_REGADDR(CORE_MOD, OMAP2_CM_CLKSTCTRL),
|
||||
.clktrctrl_mask = OMAP3430ES1_CLKTRCTRL_D2D_MASK,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
|
||||
};
|
||||
|
@ -713,7 +682,6 @@ static struct clockdomain core_l3_3xxx_clkdm = {
|
|||
.name = "core_l3_clkdm",
|
||||
.pwrdm = { .name = "core_pwrdm" },
|
||||
.flags = CLKDM_CAN_HWSUP,
|
||||
.clkstctrl_reg = OMAP34XX_CM_REGADDR(CORE_MOD, OMAP2_CM_CLKSTCTRL),
|
||||
.dep_bit = OMAP3430_EN_CORE_SHIFT,
|
||||
.clktrctrl_mask = OMAP3430_CLKTRCTRL_L3_MASK,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
|
||||
|
@ -728,7 +696,6 @@ static struct clockdomain core_l4_3xxx_clkdm = {
|
|||
.name = "core_l4_clkdm",
|
||||
.pwrdm = { .name = "core_pwrdm" },
|
||||
.flags = CLKDM_CAN_HWSUP,
|
||||
.clkstctrl_reg = OMAP34XX_CM_REGADDR(CORE_MOD, OMAP2_CM_CLKSTCTRL),
|
||||
.dep_bit = OMAP3430_EN_CORE_SHIFT,
|
||||
.clktrctrl_mask = OMAP3430_CLKTRCTRL_L4_MASK,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
|
||||
|
@ -739,8 +706,6 @@ static struct clockdomain dss_3xxx_clkdm = {
|
|||
.name = "dss_clkdm",
|
||||
.pwrdm = { .name = "dss_pwrdm" },
|
||||
.flags = CLKDM_CAN_HWSUP_SWSUP,
|
||||
.clkstctrl_reg = OMAP34XX_CM_REGADDR(OMAP3430_DSS_MOD,
|
||||
OMAP2_CM_CLKSTCTRL),
|
||||
.dep_bit = OMAP3430_PM_WKDEP_MPU_EN_DSS_SHIFT,
|
||||
.wkdep_srcs = dss_wkdeps,
|
||||
.sleepdep_srcs = dss_sleepdeps,
|
||||
|
@ -752,8 +717,6 @@ static struct clockdomain cam_clkdm = {
|
|||
.name = "cam_clkdm",
|
||||
.pwrdm = { .name = "cam_pwrdm" },
|
||||
.flags = CLKDM_CAN_HWSUP_SWSUP,
|
||||
.clkstctrl_reg = OMAP34XX_CM_REGADDR(OMAP3430_CAM_MOD,
|
||||
OMAP2_CM_CLKSTCTRL),
|
||||
.wkdep_srcs = cam_wkdeps,
|
||||
.sleepdep_srcs = cam_sleepdeps,
|
||||
.clktrctrl_mask = OMAP3430_CLKTRCTRL_CAM_MASK,
|
||||
|
@ -764,8 +727,6 @@ static struct clockdomain usbhost_clkdm = {
|
|||
.name = "usbhost_clkdm",
|
||||
.pwrdm = { .name = "usbhost_pwrdm" },
|
||||
.flags = CLKDM_CAN_HWSUP_SWSUP,
|
||||
.clkstctrl_reg = OMAP34XX_CM_REGADDR(OMAP3430ES2_USBHOST_MOD,
|
||||
OMAP2_CM_CLKSTCTRL),
|
||||
.wkdep_srcs = usbhost_wkdeps,
|
||||
.sleepdep_srcs = usbhost_sleepdeps,
|
||||
.clktrctrl_mask = OMAP3430ES2_CLKTRCTRL_USBHOST_MASK,
|
||||
|
@ -776,8 +737,6 @@ static struct clockdomain per_clkdm = {
|
|||
.name = "per_clkdm",
|
||||
.pwrdm = { .name = "per_pwrdm" },
|
||||
.flags = CLKDM_CAN_HWSUP_SWSUP,
|
||||
.clkstctrl_reg = OMAP34XX_CM_REGADDR(OMAP3430_PER_MOD,
|
||||
OMAP2_CM_CLKSTCTRL),
|
||||
.dep_bit = OMAP3430_EN_PER_SHIFT,
|
||||
.wkdep_srcs = per_wkdeps,
|
||||
.sleepdep_srcs = per_sleepdeps,
|
||||
|
@ -793,8 +752,6 @@ static struct clockdomain emu_clkdm = {
|
|||
.name = "emu_clkdm",
|
||||
.pwrdm = { .name = "emu_pwrdm" },
|
||||
.flags = /* CLKDM_CAN_ENABLE_AUTO | */CLKDM_CAN_SWSUP,
|
||||
.clkstctrl_reg = OMAP34XX_CM_REGADDR(OMAP3430_EMU_MOD,
|
||||
OMAP2_CM_CLKSTCTRL),
|
||||
.clktrctrl_mask = OMAP3430_CLKTRCTRL_EMU_MASK,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
|
||||
};
|
||||
|
@ -831,8 +788,6 @@ static struct clockdomain dpll5_clkdm = {
|
|||
|
||||
#endif /* CONFIG_ARCH_OMAP3 */
|
||||
|
||||
#include "clockdomains44xx.h"
|
||||
|
||||
/*
|
||||
* Clockdomain hwsup dependencies (OMAP3 only)
|
||||
*/
|
||||
|
@ -851,17 +806,10 @@ static struct clkdm_autodep clkdm_autodeps[] = {
|
|||
}
|
||||
};
|
||||
|
||||
/*
|
||||
* List of clockdomain pointers per platform
|
||||
*/
|
||||
|
||||
static struct clockdomain *clockdomains_omap[] = {
|
||||
|
||||
#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
|
||||
static struct clockdomain *clockdomains_omap2[] __initdata = {
|
||||
&wkup_clkdm,
|
||||
&cm_clkdm,
|
||||
&prm_clkdm,
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ARCH_OMAP2420
|
||||
&mpu_2420_clkdm,
|
||||
|
@ -903,35 +851,10 @@ static struct clockdomain *clockdomains_omap[] = {
|
|||
&dpll4_clkdm,
|
||||
&dpll5_clkdm,
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ARCH_OMAP4
|
||||
&l4_cefuse_44xx_clkdm,
|
||||
&l4_cfg_44xx_clkdm,
|
||||
&tesla_44xx_clkdm,
|
||||
&l3_gfx_44xx_clkdm,
|
||||
&ivahd_44xx_clkdm,
|
||||
&l4_secure_44xx_clkdm,
|
||||
&l4_per_44xx_clkdm,
|
||||
&abe_44xx_clkdm,
|
||||
&l3_instr_44xx_clkdm,
|
||||
&l3_init_44xx_clkdm,
|
||||
&mpuss_44xx_clkdm,
|
||||
&mpu0_44xx_clkdm,
|
||||
&mpu1_44xx_clkdm,
|
||||
&l3_emif_44xx_clkdm,
|
||||
&l4_ao_44xx_clkdm,
|
||||
&ducati_44xx_clkdm,
|
||||
&l3_2_44xx_clkdm,
|
||||
&l3_1_44xx_clkdm,
|
||||
&l3_d2d_44xx_clkdm,
|
||||
&iss_44xx_clkdm,
|
||||
&l3_dss_44xx_clkdm,
|
||||
&l4_wkup_44xx_clkdm,
|
||||
&emu_sys_44xx_clkdm,
|
||||
&l3_dma_44xx_clkdm,
|
||||
#endif
|
||||
|
||||
NULL,
|
||||
};
|
||||
|
||||
#endif
|
||||
void __init omap2_clockdomains_init(void)
|
||||
{
|
||||
clkdm_init(clockdomains_omap2, clkdm_autodeps);
|
||||
}
|
|
@ -23,18 +23,27 @@
|
|||
* -> Populate the Sleep/Wakeup dependencies for the domains
|
||||
*/
|
||||
|
||||
#ifndef __ARCH_ARM_MACH_OMAP2_CLOCKDOMAINS44XX_H
|
||||
#define __ARCH_ARM_MACH_OMAP2_CLOCKDOMAINS44XX_H
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include <plat/clockdomain.h>
|
||||
#include "clockdomain.h"
|
||||
#include "cm1_44xx.h"
|
||||
#include "cm2_44xx.h"
|
||||
|
||||
#include "cm1_44xx.h"
|
||||
#include "cm2_44xx.h"
|
||||
#include "cm-regbits-44xx.h"
|
||||
#include "prm44xx.h"
|
||||
#include "prcm44xx.h"
|
||||
#include "prcm_mpu44xx.h"
|
||||
|
||||
#if defined(CONFIG_ARCH_OMAP4)
|
||||
|
||||
static struct clockdomain l4_cefuse_44xx_clkdm = {
|
||||
.name = "l4_cefuse_clkdm",
|
||||
.pwrdm = { .name = "cefuse_pwrdm" },
|
||||
.clkstctrl_reg = OMAP4430_CM_CEFUSE_CLKSTCTRL,
|
||||
.clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
|
||||
.prcm_partition = OMAP4430_CM2_PARTITION,
|
||||
.cm_inst = OMAP4430_CM2_CEFUSE_INST,
|
||||
.clkdm_offs = OMAP4430_CM2_CEFUSE_CEFUSE_CDOFFS,
|
||||
.flags = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
|
||||
};
|
||||
|
@ -42,8 +51,9 @@ static struct clockdomain l4_cefuse_44xx_clkdm = {
|
|||
static struct clockdomain l4_cfg_44xx_clkdm = {
|
||||
.name = "l4_cfg_clkdm",
|
||||
.pwrdm = { .name = "core_pwrdm" },
|
||||
.clkstctrl_reg = OMAP4430_CM_L4CFG_CLKSTCTRL,
|
||||
.clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
|
||||
.prcm_partition = OMAP4430_CM2_PARTITION,
|
||||
.cm_inst = OMAP4430_CM2_CORE_INST,
|
||||
.clkdm_offs = OMAP4430_CM2_CORE_L4CFG_CDOFFS,
|
||||
.flags = CLKDM_CAN_HWSUP,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
|
||||
};
|
||||
|
@ -51,8 +61,9 @@ static struct clockdomain l4_cfg_44xx_clkdm = {
|
|||
static struct clockdomain tesla_44xx_clkdm = {
|
||||
.name = "tesla_clkdm",
|
||||
.pwrdm = { .name = "tesla_pwrdm" },
|
||||
.clkstctrl_reg = OMAP4430_CM_TESLA_CLKSTCTRL,
|
||||
.clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
|
||||
.prcm_partition = OMAP4430_CM1_PARTITION,
|
||||
.cm_inst = OMAP4430_CM1_TESLA_INST,
|
||||
.clkdm_offs = OMAP4430_CM1_TESLA_TESLA_CDOFFS,
|
||||
.flags = CLKDM_CAN_HWSUP_SWSUP,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
|
||||
};
|
||||
|
@ -60,8 +71,9 @@ static struct clockdomain tesla_44xx_clkdm = {
|
|||
static struct clockdomain l3_gfx_44xx_clkdm = {
|
||||
.name = "l3_gfx_clkdm",
|
||||
.pwrdm = { .name = "gfx_pwrdm" },
|
||||
.clkstctrl_reg = OMAP4430_CM_GFX_CLKSTCTRL,
|
||||
.clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
|
||||
.prcm_partition = OMAP4430_CM2_PARTITION,
|
||||
.cm_inst = OMAP4430_CM2_GFX_INST,
|
||||
.clkdm_offs = OMAP4430_CM2_GFX_GFX_CDOFFS,
|
||||
.flags = CLKDM_CAN_HWSUP_SWSUP,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
|
||||
};
|
||||
|
@ -69,8 +81,9 @@ static struct clockdomain l3_gfx_44xx_clkdm = {
|
|||
static struct clockdomain ivahd_44xx_clkdm = {
|
||||
.name = "ivahd_clkdm",
|
||||
.pwrdm = { .name = "ivahd_pwrdm" },
|
||||
.clkstctrl_reg = OMAP4430_CM_IVAHD_CLKSTCTRL,
|
||||
.clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
|
||||
.prcm_partition = OMAP4430_CM2_PARTITION,
|
||||
.cm_inst = OMAP4430_CM2_IVAHD_INST,
|
||||
.clkdm_offs = OMAP4430_CM2_IVAHD_IVAHD_CDOFFS,
|
||||
.flags = CLKDM_CAN_HWSUP_SWSUP,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
|
||||
};
|
||||
|
@ -78,8 +91,9 @@ static struct clockdomain ivahd_44xx_clkdm = {
|
|||
static struct clockdomain l4_secure_44xx_clkdm = {
|
||||
.name = "l4_secure_clkdm",
|
||||
.pwrdm = { .name = "l4per_pwrdm" },
|
||||
.clkstctrl_reg = OMAP4430_CM_L4SEC_CLKSTCTRL,
|
||||
.clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
|
||||
.prcm_partition = OMAP4430_CM2_PARTITION,
|
||||
.cm_inst = OMAP4430_CM2_L4PER_INST,
|
||||
.clkdm_offs = OMAP4430_CM2_L4PER_L4SEC_CDOFFS,
|
||||
.flags = CLKDM_CAN_HWSUP_SWSUP,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
|
||||
};
|
||||
|
@ -87,8 +101,9 @@ static struct clockdomain l4_secure_44xx_clkdm = {
|
|||
static struct clockdomain l4_per_44xx_clkdm = {
|
||||
.name = "l4_per_clkdm",
|
||||
.pwrdm = { .name = "l4per_pwrdm" },
|
||||
.clkstctrl_reg = OMAP4430_CM_L4PER_CLKSTCTRL,
|
||||
.clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
|
||||
.prcm_partition = OMAP4430_CM2_PARTITION,
|
||||
.cm_inst = OMAP4430_CM2_L4PER_INST,
|
||||
.clkdm_offs = OMAP4430_CM2_L4PER_L4PER_CDOFFS,
|
||||
.flags = CLKDM_CAN_HWSUP_SWSUP,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
|
||||
};
|
||||
|
@ -96,8 +111,9 @@ static struct clockdomain l4_per_44xx_clkdm = {
|
|||
static struct clockdomain abe_44xx_clkdm = {
|
||||
.name = "abe_clkdm",
|
||||
.pwrdm = { .name = "abe_pwrdm" },
|
||||
.clkstctrl_reg = OMAP4430_CM1_ABE_CLKSTCTRL,
|
||||
.clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
|
||||
.prcm_partition = OMAP4430_CM1_PARTITION,
|
||||
.cm_inst = OMAP4430_CM1_ABE_INST,
|
||||
.clkdm_offs = OMAP4430_CM1_ABE_ABE_CDOFFS,
|
||||
.flags = CLKDM_CAN_HWSUP_SWSUP,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
|
||||
};
|
||||
|
@ -105,16 +121,18 @@ static struct clockdomain abe_44xx_clkdm = {
|
|||
static struct clockdomain l3_instr_44xx_clkdm = {
|
||||
.name = "l3_instr_clkdm",
|
||||
.pwrdm = { .name = "core_pwrdm" },
|
||||
.clkstctrl_reg = OMAP4430_CM_L3INSTR_CLKSTCTRL,
|
||||
.clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
|
||||
.prcm_partition = OMAP4430_CM2_PARTITION,
|
||||
.cm_inst = OMAP4430_CM2_CORE_INST,
|
||||
.clkdm_offs = OMAP4430_CM2_CORE_L3INSTR_CDOFFS,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
|
||||
};
|
||||
|
||||
static struct clockdomain l3_init_44xx_clkdm = {
|
||||
.name = "l3_init_clkdm",
|
||||
.pwrdm = { .name = "l3init_pwrdm" },
|
||||
.clkstctrl_reg = OMAP4430_CM_L3INIT_CLKSTCTRL,
|
||||
.clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
|
||||
.prcm_partition = OMAP4430_CM2_PARTITION,
|
||||
.cm_inst = OMAP4430_CM2_L3INIT_INST,
|
||||
.clkdm_offs = OMAP4430_CM2_L3INIT_L3INIT_CDOFFS,
|
||||
.flags = CLKDM_CAN_HWSUP_SWSUP,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
|
||||
};
|
||||
|
@ -122,8 +140,9 @@ static struct clockdomain l3_init_44xx_clkdm = {
|
|||
static struct clockdomain mpuss_44xx_clkdm = {
|
||||
.name = "mpuss_clkdm",
|
||||
.pwrdm = { .name = "mpu_pwrdm" },
|
||||
.clkstctrl_reg = OMAP4430_CM_MPU_CLKSTCTRL,
|
||||
.clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
|
||||
.prcm_partition = OMAP4430_CM1_PARTITION,
|
||||
.cm_inst = OMAP4430_CM1_MPU_INST,
|
||||
.clkdm_offs = OMAP4430_CM1_MPU_MPU_CDOFFS,
|
||||
.flags = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
|
||||
};
|
||||
|
@ -131,8 +150,9 @@ static struct clockdomain mpuss_44xx_clkdm = {
|
|||
static struct clockdomain mpu0_44xx_clkdm = {
|
||||
.name = "mpu0_clkdm",
|
||||
.pwrdm = { .name = "cpu0_pwrdm" },
|
||||
.clkstctrl_reg = OMAP4430_CM_CPU0_CLKSTCTRL,
|
||||
.clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
|
||||
.prcm_partition = OMAP4430_PRCM_MPU_PARTITION,
|
||||
.cm_inst = OMAP4430_PRCM_MPU_CPU0_INST,
|
||||
.clkdm_offs = OMAP4430_PRCM_MPU_CPU0_MPU_CDOFFS,
|
||||
.flags = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
|
||||
};
|
||||
|
@ -140,8 +160,9 @@ static struct clockdomain mpu0_44xx_clkdm = {
|
|||
static struct clockdomain mpu1_44xx_clkdm = {
|
||||
.name = "mpu1_clkdm",
|
||||
.pwrdm = { .name = "cpu1_pwrdm" },
|
||||
.clkstctrl_reg = OMAP4430_CM_CPU1_CLKSTCTRL,
|
||||
.clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
|
||||
.prcm_partition = OMAP4430_PRCM_MPU_PARTITION,
|
||||
.cm_inst = OMAP4430_PRCM_MPU_CPU1_INST,
|
||||
.clkdm_offs = OMAP4430_PRCM_MPU_CPU1_MPU_CDOFFS,
|
||||
.flags = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
|
||||
};
|
||||
|
@ -149,8 +170,9 @@ static struct clockdomain mpu1_44xx_clkdm = {
|
|||
static struct clockdomain l3_emif_44xx_clkdm = {
|
||||
.name = "l3_emif_clkdm",
|
||||
.pwrdm = { .name = "core_pwrdm" },
|
||||
.clkstctrl_reg = OMAP4430_CM_MEMIF_CLKSTCTRL,
|
||||
.clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
|
||||
.prcm_partition = OMAP4430_CM2_PARTITION,
|
||||
.cm_inst = OMAP4430_CM2_CORE_INST,
|
||||
.clkdm_offs = OMAP4430_CM2_CORE_MEMIF_CDOFFS,
|
||||
.flags = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
|
||||
};
|
||||
|
@ -158,8 +180,9 @@ static struct clockdomain l3_emif_44xx_clkdm = {
|
|||
static struct clockdomain l4_ao_44xx_clkdm = {
|
||||
.name = "l4_ao_clkdm",
|
||||
.pwrdm = { .name = "always_on_core_pwrdm" },
|
||||
.clkstctrl_reg = OMAP4430_CM_ALWON_CLKSTCTRL,
|
||||
.clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
|
||||
.prcm_partition = OMAP4430_CM2_PARTITION,
|
||||
.cm_inst = OMAP4430_CM2_ALWAYS_ON_INST,
|
||||
.clkdm_offs = OMAP4430_CM2_ALWAYS_ON_ALWON_CDOFFS,
|
||||
.flags = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
|
||||
};
|
||||
|
@ -167,8 +190,9 @@ static struct clockdomain l4_ao_44xx_clkdm = {
|
|||
static struct clockdomain ducati_44xx_clkdm = {
|
||||
.name = "ducati_clkdm",
|
||||
.pwrdm = { .name = "core_pwrdm" },
|
||||
.clkstctrl_reg = OMAP4430_CM_DUCATI_CLKSTCTRL,
|
||||
.clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
|
||||
.prcm_partition = OMAP4430_CM2_PARTITION,
|
||||
.cm_inst = OMAP4430_CM2_CORE_INST,
|
||||
.clkdm_offs = OMAP4430_CM2_CORE_DUCATI_CDOFFS,
|
||||
.flags = CLKDM_CAN_HWSUP_SWSUP,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
|
||||
};
|
||||
|
@ -176,8 +200,9 @@ static struct clockdomain ducati_44xx_clkdm = {
|
|||
static struct clockdomain l3_2_44xx_clkdm = {
|
||||
.name = "l3_2_clkdm",
|
||||
.pwrdm = { .name = "core_pwrdm" },
|
||||
.clkstctrl_reg = OMAP4430_CM_L3_2_CLKSTCTRL,
|
||||
.clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
|
||||
.prcm_partition = OMAP4430_CM2_PARTITION,
|
||||
.cm_inst = OMAP4430_CM2_CORE_INST,
|
||||
.clkdm_offs = OMAP4430_CM2_CORE_L3_2_CDOFFS,
|
||||
.flags = CLKDM_CAN_HWSUP,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
|
||||
};
|
||||
|
@ -185,8 +210,9 @@ static struct clockdomain l3_2_44xx_clkdm = {
|
|||
static struct clockdomain l3_1_44xx_clkdm = {
|
||||
.name = "l3_1_clkdm",
|
||||
.pwrdm = { .name = "core_pwrdm" },
|
||||
.clkstctrl_reg = OMAP4430_CM_L3_1_CLKSTCTRL,
|
||||
.clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
|
||||
.prcm_partition = OMAP4430_CM2_PARTITION,
|
||||
.cm_inst = OMAP4430_CM2_CORE_INST,
|
||||
.clkdm_offs = OMAP4430_CM2_CORE_L3_1_CDOFFS,
|
||||
.flags = CLKDM_CAN_HWSUP,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
|
||||
};
|
||||
|
@ -194,8 +220,9 @@ static struct clockdomain l3_1_44xx_clkdm = {
|
|||
static struct clockdomain l3_d2d_44xx_clkdm = {
|
||||
.name = "l3_d2d_clkdm",
|
||||
.pwrdm = { .name = "core_pwrdm" },
|
||||
.clkstctrl_reg = OMAP4430_CM_D2D_CLKSTCTRL,
|
||||
.clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
|
||||
.prcm_partition = OMAP4430_CM2_PARTITION,
|
||||
.cm_inst = OMAP4430_CM2_CORE_INST,
|
||||
.clkdm_offs = OMAP4430_CM2_CORE_D2D_CDOFFS,
|
||||
.flags = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
|
||||
};
|
||||
|
@ -203,8 +230,9 @@ static struct clockdomain l3_d2d_44xx_clkdm = {
|
|||
static struct clockdomain iss_44xx_clkdm = {
|
||||
.name = "iss_clkdm",
|
||||
.pwrdm = { .name = "cam_pwrdm" },
|
||||
.clkstctrl_reg = OMAP4430_CM_CAM_CLKSTCTRL,
|
||||
.clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
|
||||
.prcm_partition = OMAP4430_CM2_PARTITION,
|
||||
.cm_inst = OMAP4430_CM2_CAM_INST,
|
||||
.clkdm_offs = OMAP4430_CM2_CAM_CAM_CDOFFS,
|
||||
.flags = CLKDM_CAN_HWSUP_SWSUP,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
|
||||
};
|
||||
|
@ -212,8 +240,9 @@ static struct clockdomain iss_44xx_clkdm = {
|
|||
static struct clockdomain l3_dss_44xx_clkdm = {
|
||||
.name = "l3_dss_clkdm",
|
||||
.pwrdm = { .name = "dss_pwrdm" },
|
||||
.clkstctrl_reg = OMAP4430_CM_DSS_CLKSTCTRL,
|
||||
.clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
|
||||
.prcm_partition = OMAP4430_CM2_PARTITION,
|
||||
.cm_inst = OMAP4430_CM2_DSS_INST,
|
||||
.clkdm_offs = OMAP4430_CM2_DSS_DSS_CDOFFS,
|
||||
.flags = CLKDM_CAN_HWSUP_SWSUP,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
|
||||
};
|
||||
|
@ -221,8 +250,9 @@ static struct clockdomain l3_dss_44xx_clkdm = {
|
|||
static struct clockdomain l4_wkup_44xx_clkdm = {
|
||||
.name = "l4_wkup_clkdm",
|
||||
.pwrdm = { .name = "wkup_pwrdm" },
|
||||
.clkstctrl_reg = OMAP4430_CM_WKUP_CLKSTCTRL,
|
||||
.clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
|
||||
.prcm_partition = OMAP4430_PRM_PARTITION,
|
||||
.cm_inst = OMAP4430_PRM_WKUP_CM_INST,
|
||||
.clkdm_offs = OMAP4430_PRM_WKUP_CM_WKUP_CDOFFS,
|
||||
.flags = CLKDM_CAN_HWSUP,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
|
||||
};
|
||||
|
@ -230,8 +260,9 @@ static struct clockdomain l4_wkup_44xx_clkdm = {
|
|||
static struct clockdomain emu_sys_44xx_clkdm = {
|
||||
.name = "emu_sys_clkdm",
|
||||
.pwrdm = { .name = "emu_pwrdm" },
|
||||
.clkstctrl_reg = OMAP4430_CM_EMU_CLKSTCTRL,
|
||||
.clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
|
||||
.prcm_partition = OMAP4430_PRM_PARTITION,
|
||||
.cm_inst = OMAP4430_PRM_EMU_CM_INST,
|
||||
.clkdm_offs = OMAP4430_PRM_EMU_CM_EMU_CDOFFS,
|
||||
.flags = CLKDM_CAN_HWSUP,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
|
||||
};
|
||||
|
@ -239,12 +270,42 @@ static struct clockdomain emu_sys_44xx_clkdm = {
|
|||
static struct clockdomain l3_dma_44xx_clkdm = {
|
||||
.name = "l3_dma_clkdm",
|
||||
.pwrdm = { .name = "core_pwrdm" },
|
||||
.clkstctrl_reg = OMAP4430_CM_SDMA_CLKSTCTRL,
|
||||
.clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
|
||||
.prcm_partition = OMAP4430_CM2_PARTITION,
|
||||
.cm_inst = OMAP4430_CM2_CORE_INST,
|
||||
.clkdm_offs = OMAP4430_CM2_CORE_SDMA_CDOFFS,
|
||||
.flags = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
|
||||
};
|
||||
|
||||
#endif
|
||||
static struct clockdomain *clockdomains_omap44xx[] __initdata = {
|
||||
&l4_cefuse_44xx_clkdm,
|
||||
&l4_cfg_44xx_clkdm,
|
||||
&tesla_44xx_clkdm,
|
||||
&l3_gfx_44xx_clkdm,
|
||||
&ivahd_44xx_clkdm,
|
||||
&l4_secure_44xx_clkdm,
|
||||
&l4_per_44xx_clkdm,
|
||||
&abe_44xx_clkdm,
|
||||
&l3_instr_44xx_clkdm,
|
||||
&l3_init_44xx_clkdm,
|
||||
&mpuss_44xx_clkdm,
|
||||
&mpu0_44xx_clkdm,
|
||||
&mpu1_44xx_clkdm,
|
||||
&l3_emif_44xx_clkdm,
|
||||
&l4_ao_44xx_clkdm,
|
||||
&ducati_44xx_clkdm,
|
||||
&l3_2_44xx_clkdm,
|
||||
&l3_1_44xx_clkdm,
|
||||
&l3_d2d_44xx_clkdm,
|
||||
&iss_44xx_clkdm,
|
||||
&l3_dss_44xx_clkdm,
|
||||
&l4_wkup_44xx_clkdm,
|
||||
&emu_sys_44xx_clkdm,
|
||||
&l3_dma_44xx_clkdm,
|
||||
NULL,
|
||||
};
|
||||
|
||||
#endif
|
||||
void __init omap44xx_clockdomains_init(void)
|
||||
{
|
||||
clkdm_init(clockdomains_omap44xx, NULL);
|
||||
}
|
|
@ -14,8 +14,6 @@
|
|||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include "cm.h"
|
||||
|
||||
/* Bits shared between registers */
|
||||
|
||||
/* CM_FCLKEN1_CORE and CM_ICLKEN1_CORE shared bits */
|
||||
|
@ -436,4 +434,9 @@
|
|||
#define OMAP2430_AUTOSTATE_MDM_SHIFT 0
|
||||
#define OMAP2430_AUTOSTATE_MDM_MASK (1 << 0)
|
||||
|
||||
/* OMAP24XX CM_CLKSTCTRL_*.AUTOSTATE_* register bit values */
|
||||
#define OMAP24XX_CLKSTCTRL_DISABLE_AUTO 0x0
|
||||
#define OMAP24XX_CLKSTCTRL_ENABLE_AUTO 0x1
|
||||
|
||||
|
||||
#endif
|
||||
|
|
|
@ -14,8 +14,6 @@
|
|||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include "cm.h"
|
||||
|
||||
/* Bits shared between registers */
|
||||
|
||||
/* CM_FCLKEN1_CORE and CM_ICLKEN1_CORE shared bits */
|
||||
|
@ -800,4 +798,15 @@
|
|||
#define OMAP3430ES2_CLKACTIVITY_USBHOST_SHIFT 0
|
||||
#define OMAP3430ES2_CLKACTIVITY_USBHOST_MASK (1 << 0)
|
||||
|
||||
/*
|
||||
*
|
||||
*/
|
||||
|
||||
/* OMAP3XXX CM_CLKSTCTRL_*.CLKTRCTRL_* register bit values */
|
||||
#define OMAP34XX_CLKSTCTRL_DISABLE_AUTO 0x0
|
||||
#define OMAP34XX_CLKSTCTRL_FORCE_SLEEP 0x1
|
||||
#define OMAP34XX_CLKSTCTRL_FORCE_WAKEUP 0x2
|
||||
#define OMAP34XX_CLKSTCTRL_ENABLE_AUTO 0x3
|
||||
|
||||
|
||||
#endif
|
||||
|
|
|
@ -22,9 +22,6 @@
|
|||
#ifndef __ARCH_ARM_MACH_OMAP2_CM_REGBITS_44XX_H
|
||||
#define __ARCH_ARM_MACH_OMAP2_CM_REGBITS_44XX_H
|
||||
|
||||
#include "cm.h"
|
||||
|
||||
|
||||
/*
|
||||
* Used by CM_L3_1_DYNAMICDEP, CM_L3_1_DYNAMICDEP_RESTORE, CM_MPU_DYNAMICDEP,
|
||||
* CM_TESLA_DYNAMICDEP
|
||||
|
|
|
@ -1,68 +0,0 @@
|
|||
/*
|
||||
* OMAP2/3 CM module functions
|
||||
*
|
||||
* Copyright (C) 2009 Nokia Corporation
|
||||
* Paul Walmsley
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include <asm/atomic.h>
|
||||
|
||||
#include <plat/common.h>
|
||||
|
||||
#include "cm.h"
|
||||
#include "cm-regbits-24xx.h"
|
||||
#include "cm-regbits-34xx.h"
|
||||
|
||||
static const u8 cm_idlest_offs[] = {
|
||||
CM_IDLEST1, CM_IDLEST2, OMAP2430_CM_IDLEST3
|
||||
};
|
||||
|
||||
/**
|
||||
* omap2_cm_wait_idlest_ready - wait for a module to leave idle or standby
|
||||
* @prcm_mod: PRCM module offset
|
||||
* @idlest_id: CM_IDLESTx register ID (i.e., x = 1, 2, 3)
|
||||
* @idlest_shift: shift of the bit in the CM_IDLEST* register to check
|
||||
*
|
||||
* XXX document
|
||||
*/
|
||||
int omap2_cm_wait_module_ready(s16 prcm_mod, u8 idlest_id, u8 idlest_shift)
|
||||
{
|
||||
int ena = 0, i = 0;
|
||||
u8 cm_idlest_reg;
|
||||
u32 mask;
|
||||
|
||||
if (!idlest_id || (idlest_id > ARRAY_SIZE(cm_idlest_offs)))
|
||||
return -EINVAL;
|
||||
|
||||
cm_idlest_reg = cm_idlest_offs[idlest_id - 1];
|
||||
|
||||
mask = 1 << idlest_shift;
|
||||
|
||||
if (cpu_is_omap24xx())
|
||||
ena = mask;
|
||||
else if (cpu_is_omap34xx())
|
||||
ena = 0;
|
||||
else
|
||||
BUG();
|
||||
|
||||
/* XXX should be OMAP2 CM */
|
||||
omap_test_timeout(((cm_read_mod_reg(prcm_mod, cm_idlest_reg) & mask) == ena),
|
||||
MAX_MODULE_READY_TIME, i);
|
||||
|
||||
return (i < MAX_MODULE_READY_TIME) ? 0 : -EBUSY;
|
||||
}
|
||||
|
|
@ -1,8 +1,5 @@
|
|||
#ifndef __ARCH_ASM_MACH_OMAP2_CM_H
|
||||
#define __ARCH_ASM_MACH_OMAP2_CM_H
|
||||
|
||||
/*
|
||||
* OMAP2/3 Clock Management (CM) register definitions
|
||||
* OMAP2+ Clock Management prototypes
|
||||
*
|
||||
* Copyright (C) 2007-2009 Texas Instruments, Inc.
|
||||
* Copyright (C) 2007-2009 Nokia Corporation
|
||||
|
@ -13,136 +10,8 @@
|
|||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include "prcm-common.h"
|
||||
|
||||
#define OMAP2420_CM_REGADDR(module, reg) \
|
||||
OMAP2_L4_IO_ADDRESS(OMAP2420_CM_BASE + (module) + (reg))
|
||||
#define OMAP2430_CM_REGADDR(module, reg) \
|
||||
OMAP2_L4_IO_ADDRESS(OMAP2430_CM_BASE + (module) + (reg))
|
||||
#define OMAP34XX_CM_REGADDR(module, reg) \
|
||||
OMAP2_L4_IO_ADDRESS(OMAP3430_CM_BASE + (module) + (reg))
|
||||
#define OMAP44XX_CM1_REGADDR(module, reg) \
|
||||
OMAP2_L4_IO_ADDRESS(OMAP4430_CM1_BASE + (module) + (reg))
|
||||
#define OMAP44XX_CM2_REGADDR(module, reg) \
|
||||
OMAP2_L4_IO_ADDRESS(OMAP4430_CM2_BASE + (module) + (reg))
|
||||
|
||||
#include "cm44xx.h"
|
||||
|
||||
/*
|
||||
* Architecture-specific global CM registers
|
||||
* Use cm_{read,write}_reg() with these registers.
|
||||
* These registers appear once per CM module.
|
||||
*/
|
||||
|
||||
#define OMAP3430_CM_REVISION OMAP34XX_CM_REGADDR(OCP_MOD, 0x0000)
|
||||
#define OMAP3430_CM_SYSCONFIG OMAP34XX_CM_REGADDR(OCP_MOD, 0x0010)
|
||||
#define OMAP3430_CM_POLCTRL OMAP34XX_CM_REGADDR(OCP_MOD, 0x009c)
|
||||
|
||||
#define OMAP3_CM_CLKOUT_CTRL_OFFSET 0x0070
|
||||
#define OMAP3430_CM_CLKOUT_CTRL OMAP_CM_REGADDR(OMAP3430_CCR_MOD, 0x0070)
|
||||
|
||||
/*
|
||||
* Module specific CM registers from CM_BASE + domain offset
|
||||
* Use cm_{read,write}_mod_reg() with these registers.
|
||||
* These register offsets generally appear in more than one PRCM submodule.
|
||||
*/
|
||||
|
||||
/* Common between 24xx and 34xx */
|
||||
|
||||
#define CM_FCLKEN 0x0000
|
||||
#define CM_FCLKEN1 CM_FCLKEN
|
||||
#define CM_CLKEN CM_FCLKEN
|
||||
#define CM_ICLKEN 0x0010
|
||||
#define CM_ICLKEN1 CM_ICLKEN
|
||||
#define CM_ICLKEN2 0x0014
|
||||
#define CM_ICLKEN3 0x0018
|
||||
#define CM_IDLEST 0x0020
|
||||
#define CM_IDLEST1 CM_IDLEST
|
||||
#define CM_IDLEST2 0x0024
|
||||
#define CM_AUTOIDLE 0x0030
|
||||
#define CM_AUTOIDLE1 CM_AUTOIDLE
|
||||
#define CM_AUTOIDLE2 0x0034
|
||||
#define CM_AUTOIDLE3 0x0038
|
||||
#define CM_CLKSEL 0x0040
|
||||
#define CM_CLKSEL1 CM_CLKSEL
|
||||
#define CM_CLKSEL2 0x0044
|
||||
#define OMAP2_CM_CLKSTCTRL 0x0048
|
||||
#define OMAP4_CM_CLKSTCTRL 0x0000
|
||||
|
||||
|
||||
/* Architecture-specific registers */
|
||||
|
||||
#define OMAP24XX_CM_FCLKEN2 0x0004
|
||||
#define OMAP24XX_CM_ICLKEN4 0x001c
|
||||
#define OMAP24XX_CM_AUTOIDLE4 0x003c
|
||||
|
||||
#define OMAP2430_CM_IDLEST3 0x0028
|
||||
|
||||
#define OMAP3430_CM_CLKEN_PLL 0x0004
|
||||
#define OMAP3430ES2_CM_CLKEN2 0x0004
|
||||
#define OMAP3430ES2_CM_FCLKEN3 0x0008
|
||||
#define OMAP3430_CM_IDLEST_PLL CM_IDLEST2
|
||||
#define OMAP3430_CM_AUTOIDLE_PLL CM_AUTOIDLE2
|
||||
#define OMAP3430ES2_CM_AUTOIDLE2_PLL CM_AUTOIDLE2
|
||||
#define OMAP3430_CM_CLKSEL1 CM_CLKSEL
|
||||
#define OMAP3430_CM_CLKSEL1_PLL CM_CLKSEL
|
||||
#define OMAP3430_CM_CLKSEL2_PLL CM_CLKSEL2
|
||||
#define OMAP3430_CM_SLEEPDEP CM_CLKSEL2
|
||||
#define OMAP3430_CM_CLKSEL3 OMAP2_CM_CLKSTCTRL
|
||||
#define OMAP3430_CM_CLKSTST 0x004c
|
||||
#define OMAP3430ES2_CM_CLKSEL4 0x004c
|
||||
#define OMAP3430ES2_CM_CLKSEL5 0x0050
|
||||
#define OMAP3430_CM_CLKSEL2_EMU 0x0050
|
||||
#define OMAP3430_CM_CLKSEL3_EMU 0x0054
|
||||
|
||||
/* CM2.CEFUSE_CM2 register offsets */
|
||||
|
||||
/* OMAP4 modulemode control */
|
||||
#define OMAP4430_MODULEMODE_HWCTRL 0
|
||||
#define OMAP4430_MODULEMODE_SWCTRL 1
|
||||
|
||||
/* Clock management domain register get/set */
|
||||
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
extern u32 cm_read_mod_reg(s16 module, u16 idx);
|
||||
extern void cm_write_mod_reg(u32 val, s16 module, u16 idx);
|
||||
extern u32 cm_rmw_mod_reg_bits(u32 mask, u32 bits, s16 module, s16 idx);
|
||||
|
||||
extern int omap2_cm_wait_module_ready(s16 prcm_mod, u8 idlest_id,
|
||||
u8 idlest_shift);
|
||||
extern int omap4_cm_wait_module_ready(void __iomem *clkctrl_reg);
|
||||
|
||||
static inline u32 cm_set_mod_reg_bits(u32 bits, s16 module, s16 idx)
|
||||
{
|
||||
return cm_rmw_mod_reg_bits(bits, bits, module, idx);
|
||||
}
|
||||
|
||||
static inline u32 cm_clear_mod_reg_bits(u32 bits, s16 module, s16 idx)
|
||||
{
|
||||
return cm_rmw_mod_reg_bits(bits, 0x0, module, idx);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/* CM register bits shared between 24XX and 3430 */
|
||||
|
||||
/* CM_CLKSEL_GFX */
|
||||
#define OMAP_CLKSEL_GFX_SHIFT 0
|
||||
#define OMAP_CLKSEL_GFX_MASK (0x7 << 0)
|
||||
|
||||
/* CM_ICLKEN_GFX */
|
||||
#define OMAP_EN_GFX_SHIFT 0
|
||||
#define OMAP_EN_GFX_MASK (1 << 0)
|
||||
|
||||
/* CM_IDLEST_GFX */
|
||||
#define OMAP_ST_GFX_MASK (1 << 0)
|
||||
|
||||
|
||||
/* CM_IDLEST indicator */
|
||||
#define OMAP24XX_CM_IDLEST_VAL 0
|
||||
#define OMAP34XX_CM_IDLEST_VAL 1
|
||||
#ifndef __ARCH_ASM_MACH_OMAP2_CM_H
|
||||
#define __ARCH_ASM_MACH_OMAP2_CM_H
|
||||
|
||||
/*
|
||||
* MAX_MODULE_READY_TIME: max duration in microseconds to wait for the
|
||||
|
|
261
arch/arm/mach-omap2/cm1_44xx.h
Normal file
261
arch/arm/mach-omap2/cm1_44xx.h
Normal file
|
@ -0,0 +1,261 @@
|
|||
/*
|
||||
* OMAP44xx CM1 instance offset macros
|
||||
*
|
||||
* Copyright (C) 2009-2010 Texas Instruments, Inc.
|
||||
* Copyright (C) 2009-2010 Nokia Corporation
|
||||
*
|
||||
* Paul Walmsley (paul@pwsan.com)
|
||||
* Rajendra Nayak (rnayak@ti.com)
|
||||
* Benoit Cousson (b-cousson@ti.com)
|
||||
*
|
||||
* This file is automatically generated from the OMAP hardware databases.
|
||||
* We respectfully ask that any modifications to this file be coordinated
|
||||
* with the public linux-omap@vger.kernel.org mailing list and the
|
||||
* authors above to ensure that the autogeneration scripts are kept
|
||||
* up-to-date with the file contents.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* XXX This file needs to be updated to align on one of "OMAP4", "OMAP44XX",
|
||||
* or "OMAP4430".
|
||||
*/
|
||||
|
||||
#ifndef __ARCH_ARM_MACH_OMAP2_CM1_44XX_H
|
||||
#define __ARCH_ARM_MACH_OMAP2_CM1_44XX_H
|
||||
|
||||
/* CM1 base address */
|
||||
#define OMAP4430_CM1_BASE 0x4a004000
|
||||
|
||||
#define OMAP44XX_CM1_REGADDR(inst, reg) \
|
||||
OMAP2_L4_IO_ADDRESS(OMAP4430_CM1_BASE + (inst) + (reg))
|
||||
|
||||
/* CM1 instances */
|
||||
#define OMAP4430_CM1_OCP_SOCKET_INST 0x0000
|
||||
#define OMAP4430_CM1_CKGEN_INST 0x0100
|
||||
#define OMAP4430_CM1_MPU_INST 0x0300
|
||||
#define OMAP4430_CM1_TESLA_INST 0x0400
|
||||
#define OMAP4430_CM1_ABE_INST 0x0500
|
||||
#define OMAP4430_CM1_RESTORE_INST 0x0e00
|
||||
#define OMAP4430_CM1_INSTR_INST 0x0f00
|
||||
|
||||
/* CM1 clockdomain register offsets (from instance start) */
|
||||
#define OMAP4430_CM1_ABE_ABE_CDOFFS 0x0000
|
||||
#define OMAP4430_CM1_MPU_MPU_CDOFFS 0x0000
|
||||
#define OMAP4430_CM1_TESLA_TESLA_CDOFFS 0x0000
|
||||
|
||||
/* CM1 */
|
||||
|
||||
/* CM1.OCP_SOCKET_CM1 register offsets */
|
||||
#define OMAP4_REVISION_CM1_OFFSET 0x0000
|
||||
#define OMAP4430_REVISION_CM1 OMAP44XX_CM1_REGADDR(OMAP4430_CM1_OCP_SOCKET_INST, 0x0000)
|
||||
#define OMAP4_CM_CM1_PROFILING_CLKCTRL_OFFSET 0x0040
|
||||
#define OMAP4430_CM_CM1_PROFILING_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_OCP_SOCKET_INST, 0x0040)
|
||||
|
||||
/* CM1.CKGEN_CM1 register offsets */
|
||||
#define OMAP4_CM_CLKSEL_CORE_OFFSET 0x0000
|
||||
#define OMAP4430_CM_CLKSEL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0000)
|
||||
#define OMAP4_CM_CLKSEL_ABE_OFFSET 0x0008
|
||||
#define OMAP4430_CM_CLKSEL_ABE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0008)
|
||||
#define OMAP4_CM_DLL_CTRL_OFFSET 0x0010
|
||||
#define OMAP4430_CM_DLL_CTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0010)
|
||||
#define OMAP4_CM_CLKMODE_DPLL_CORE_OFFSET 0x0020
|
||||
#define OMAP4430_CM_CLKMODE_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0020)
|
||||
#define OMAP4_CM_IDLEST_DPLL_CORE_OFFSET 0x0024
|
||||
#define OMAP4430_CM_IDLEST_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0024)
|
||||
#define OMAP4_CM_AUTOIDLE_DPLL_CORE_OFFSET 0x0028
|
||||
#define OMAP4430_CM_AUTOIDLE_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0028)
|
||||
#define OMAP4_CM_CLKSEL_DPLL_CORE_OFFSET 0x002c
|
||||
#define OMAP4430_CM_CLKSEL_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x002c)
|
||||
#define OMAP4_CM_DIV_M2_DPLL_CORE_OFFSET 0x0030
|
||||
#define OMAP4430_CM_DIV_M2_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0030)
|
||||
#define OMAP4_CM_DIV_M3_DPLL_CORE_OFFSET 0x0034
|
||||
#define OMAP4430_CM_DIV_M3_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0034)
|
||||
#define OMAP4_CM_DIV_M4_DPLL_CORE_OFFSET 0x0038
|
||||
#define OMAP4430_CM_DIV_M4_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0038)
|
||||
#define OMAP4_CM_DIV_M5_DPLL_CORE_OFFSET 0x003c
|
||||
#define OMAP4430_CM_DIV_M5_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x003c)
|
||||
#define OMAP4_CM_DIV_M6_DPLL_CORE_OFFSET 0x0040
|
||||
#define OMAP4430_CM_DIV_M6_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0040)
|
||||
#define OMAP4_CM_DIV_M7_DPLL_CORE_OFFSET 0x0044
|
||||
#define OMAP4430_CM_DIV_M7_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0044)
|
||||
#define OMAP4_CM_SSC_DELTAMSTEP_DPLL_CORE_OFFSET 0x0048
|
||||
#define OMAP4430_CM_SSC_DELTAMSTEP_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0048)
|
||||
#define OMAP4_CM_SSC_INSTFREQDIV_DPLL_CORE_OFFSET 0x004c
|
||||
#define OMAP4430_CM_SSC_INSTFREQDIV_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x004c)
|
||||
#define OMAP4_CM_EMU_OVERRIDE_DPLL_CORE_OFFSET 0x0050
|
||||
#define OMAP4430_CM_EMU_OVERRIDE_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0050)
|
||||
#define OMAP4_CM_CLKMODE_DPLL_MPU_OFFSET 0x0060
|
||||
#define OMAP4430_CM_CLKMODE_DPLL_MPU OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0060)
|
||||
#define OMAP4_CM_IDLEST_DPLL_MPU_OFFSET 0x0064
|
||||
#define OMAP4430_CM_IDLEST_DPLL_MPU OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0064)
|
||||
#define OMAP4_CM_AUTOIDLE_DPLL_MPU_OFFSET 0x0068
|
||||
#define OMAP4430_CM_AUTOIDLE_DPLL_MPU OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0068)
|
||||
#define OMAP4_CM_CLKSEL_DPLL_MPU_OFFSET 0x006c
|
||||
#define OMAP4430_CM_CLKSEL_DPLL_MPU OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x006c)
|
||||
#define OMAP4_CM_DIV_M2_DPLL_MPU_OFFSET 0x0070
|
||||
#define OMAP4430_CM_DIV_M2_DPLL_MPU OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0070)
|
||||
#define OMAP4_CM_SSC_DELTAMSTEP_DPLL_MPU_OFFSET 0x0088
|
||||
#define OMAP4430_CM_SSC_DELTAMSTEP_DPLL_MPU OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0088)
|
||||
#define OMAP4_CM_SSC_INSTFREQDIV_DPLL_MPU_OFFSET 0x008c
|
||||
#define OMAP4430_CM_SSC_INSTFREQDIV_DPLL_MPU OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x008c)
|
||||
#define OMAP4_CM_BYPCLK_DPLL_MPU_OFFSET 0x009c
|
||||
#define OMAP4430_CM_BYPCLK_DPLL_MPU OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x009c)
|
||||
#define OMAP4_CM_CLKMODE_DPLL_IVA_OFFSET 0x00a0
|
||||
#define OMAP4430_CM_CLKMODE_DPLL_IVA OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x00a0)
|
||||
#define OMAP4_CM_IDLEST_DPLL_IVA_OFFSET 0x00a4
|
||||
#define OMAP4430_CM_IDLEST_DPLL_IVA OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x00a4)
|
||||
#define OMAP4_CM_AUTOIDLE_DPLL_IVA_OFFSET 0x00a8
|
||||
#define OMAP4430_CM_AUTOIDLE_DPLL_IVA OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x00a8)
|
||||
#define OMAP4_CM_CLKSEL_DPLL_IVA_OFFSET 0x00ac
|
||||
#define OMAP4430_CM_CLKSEL_DPLL_IVA OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x00ac)
|
||||
#define OMAP4_CM_DIV_M4_DPLL_IVA_OFFSET 0x00b8
|
||||
#define OMAP4430_CM_DIV_M4_DPLL_IVA OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x00b8)
|
||||
#define OMAP4_CM_DIV_M5_DPLL_IVA_OFFSET 0x00bc
|
||||
#define OMAP4430_CM_DIV_M5_DPLL_IVA OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x00bc)
|
||||
#define OMAP4_CM_SSC_DELTAMSTEP_DPLL_IVA_OFFSET 0x00c8
|
||||
#define OMAP4430_CM_SSC_DELTAMSTEP_DPLL_IVA OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x00c8)
|
||||
#define OMAP4_CM_SSC_INSTFREQDIV_DPLL_IVA_OFFSET 0x00cc
|
||||
#define OMAP4430_CM_SSC_INSTFREQDIV_DPLL_IVA OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x00cc)
|
||||
#define OMAP4_CM_BYPCLK_DPLL_IVA_OFFSET 0x00dc
|
||||
#define OMAP4430_CM_BYPCLK_DPLL_IVA OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x00dc)
|
||||
#define OMAP4_CM_CLKMODE_DPLL_ABE_OFFSET 0x00e0
|
||||
#define OMAP4430_CM_CLKMODE_DPLL_ABE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x00e0)
|
||||
#define OMAP4_CM_IDLEST_DPLL_ABE_OFFSET 0x00e4
|
||||
#define OMAP4430_CM_IDLEST_DPLL_ABE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x00e4)
|
||||
#define OMAP4_CM_AUTOIDLE_DPLL_ABE_OFFSET 0x00e8
|
||||
#define OMAP4430_CM_AUTOIDLE_DPLL_ABE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x00e8)
|
||||
#define OMAP4_CM_CLKSEL_DPLL_ABE_OFFSET 0x00ec
|
||||
#define OMAP4430_CM_CLKSEL_DPLL_ABE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x00ec)
|
||||
#define OMAP4_CM_DIV_M2_DPLL_ABE_OFFSET 0x00f0
|
||||
#define OMAP4430_CM_DIV_M2_DPLL_ABE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x00f0)
|
||||
#define OMAP4_CM_DIV_M3_DPLL_ABE_OFFSET 0x00f4
|
||||
#define OMAP4430_CM_DIV_M3_DPLL_ABE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x00f4)
|
||||
#define OMAP4_CM_SSC_DELTAMSTEP_DPLL_ABE_OFFSET 0x0108
|
||||
#define OMAP4430_CM_SSC_DELTAMSTEP_DPLL_ABE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0108)
|
||||
#define OMAP4_CM_SSC_INSTFREQDIV_DPLL_ABE_OFFSET 0x010c
|
||||
#define OMAP4430_CM_SSC_INSTFREQDIV_DPLL_ABE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x010c)
|
||||
#define OMAP4_CM_CLKMODE_DPLL_DDRPHY_OFFSET 0x0120
|
||||
#define OMAP4430_CM_CLKMODE_DPLL_DDRPHY OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0120)
|
||||
#define OMAP4_CM_IDLEST_DPLL_DDRPHY_OFFSET 0x0124
|
||||
#define OMAP4430_CM_IDLEST_DPLL_DDRPHY OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0124)
|
||||
#define OMAP4_CM_AUTOIDLE_DPLL_DDRPHY_OFFSET 0x0128
|
||||
#define OMAP4430_CM_AUTOIDLE_DPLL_DDRPHY OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0128)
|
||||
#define OMAP4_CM_CLKSEL_DPLL_DDRPHY_OFFSET 0x012c
|
||||
#define OMAP4430_CM_CLKSEL_DPLL_DDRPHY OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x012c)
|
||||
#define OMAP4_CM_DIV_M2_DPLL_DDRPHY_OFFSET 0x0130
|
||||
#define OMAP4430_CM_DIV_M2_DPLL_DDRPHY OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0130)
|
||||
#define OMAP4_CM_DIV_M4_DPLL_DDRPHY_OFFSET 0x0138
|
||||
#define OMAP4430_CM_DIV_M4_DPLL_DDRPHY OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0138)
|
||||
#define OMAP4_CM_DIV_M5_DPLL_DDRPHY_OFFSET 0x013c
|
||||
#define OMAP4430_CM_DIV_M5_DPLL_DDRPHY OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x013c)
|
||||
#define OMAP4_CM_DIV_M6_DPLL_DDRPHY_OFFSET 0x0140
|
||||
#define OMAP4430_CM_DIV_M6_DPLL_DDRPHY OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0140)
|
||||
#define OMAP4_CM_SSC_DELTAMSTEP_DPLL_DDRPHY_OFFSET 0x0148
|
||||
#define OMAP4430_CM_SSC_DELTAMSTEP_DPLL_DDRPHY OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0148)
|
||||
#define OMAP4_CM_SSC_INSTFREQDIV_DPLL_DDRPHY_OFFSET 0x014c
|
||||
#define OMAP4430_CM_SSC_INSTFREQDIV_DPLL_DDRPHY OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x014c)
|
||||
#define OMAP4_CM_SHADOW_FREQ_CONFIG1_OFFSET 0x0160
|
||||
#define OMAP4430_CM_SHADOW_FREQ_CONFIG1 OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0160)
|
||||
#define OMAP4_CM_SHADOW_FREQ_CONFIG2_OFFSET 0x0164
|
||||
#define OMAP4430_CM_SHADOW_FREQ_CONFIG2 OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0164)
|
||||
#define OMAP4_CM_DYN_DEP_PRESCAL_OFFSET 0x0170
|
||||
#define OMAP4430_CM_DYN_DEP_PRESCAL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0170)
|
||||
#define OMAP4_CM_RESTORE_ST_OFFSET 0x0180
|
||||
#define OMAP4430_CM_RESTORE_ST OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0180)
|
||||
|
||||
/* CM1.MPU_CM1 register offsets */
|
||||
#define OMAP4_CM_MPU_CLKSTCTRL_OFFSET 0x0000
|
||||
#define OMAP4430_CM_MPU_CLKSTCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_MPU_INST, 0x0000)
|
||||
#define OMAP4_CM_MPU_STATICDEP_OFFSET 0x0004
|
||||
#define OMAP4430_CM_MPU_STATICDEP OMAP44XX_CM1_REGADDR(OMAP4430_CM1_MPU_INST, 0x0004)
|
||||
#define OMAP4_CM_MPU_DYNAMICDEP_OFFSET 0x0008
|
||||
#define OMAP4430_CM_MPU_DYNAMICDEP OMAP44XX_CM1_REGADDR(OMAP4430_CM1_MPU_INST, 0x0008)
|
||||
#define OMAP4_CM_MPU_MPU_CLKCTRL_OFFSET 0x0020
|
||||
#define OMAP4430_CM_MPU_MPU_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_MPU_INST, 0x0020)
|
||||
|
||||
/* CM1.TESLA_CM1 register offsets */
|
||||
#define OMAP4_CM_TESLA_CLKSTCTRL_OFFSET 0x0000
|
||||
#define OMAP4430_CM_TESLA_CLKSTCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_TESLA_INST, 0x0000)
|
||||
#define OMAP4_CM_TESLA_STATICDEP_OFFSET 0x0004
|
||||
#define OMAP4430_CM_TESLA_STATICDEP OMAP44XX_CM1_REGADDR(OMAP4430_CM1_TESLA_INST, 0x0004)
|
||||
#define OMAP4_CM_TESLA_DYNAMICDEP_OFFSET 0x0008
|
||||
#define OMAP4430_CM_TESLA_DYNAMICDEP OMAP44XX_CM1_REGADDR(OMAP4430_CM1_TESLA_INST, 0x0008)
|
||||
#define OMAP4_CM_TESLA_TESLA_CLKCTRL_OFFSET 0x0020
|
||||
#define OMAP4430_CM_TESLA_TESLA_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_TESLA_INST, 0x0020)
|
||||
|
||||
/* CM1.ABE_CM1 register offsets */
|
||||
#define OMAP4_CM1_ABE_CLKSTCTRL_OFFSET 0x0000
|
||||
#define OMAP4430_CM1_ABE_CLKSTCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_INST, 0x0000)
|
||||
#define OMAP4_CM1_ABE_L4ABE_CLKCTRL_OFFSET 0x0020
|
||||
#define OMAP4430_CM1_ABE_L4ABE_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_INST, 0x0020)
|
||||
#define OMAP4_CM1_ABE_AESS_CLKCTRL_OFFSET 0x0028
|
||||
#define OMAP4430_CM1_ABE_AESS_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_INST, 0x0028)
|
||||
#define OMAP4_CM1_ABE_PDM_CLKCTRL_OFFSET 0x0030
|
||||
#define OMAP4430_CM1_ABE_PDM_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_INST, 0x0030)
|
||||
#define OMAP4_CM1_ABE_DMIC_CLKCTRL_OFFSET 0x0038
|
||||
#define OMAP4430_CM1_ABE_DMIC_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_INST, 0x0038)
|
||||
#define OMAP4_CM1_ABE_MCASP_CLKCTRL_OFFSET 0x0040
|
||||
#define OMAP4430_CM1_ABE_MCASP_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_INST, 0x0040)
|
||||
#define OMAP4_CM1_ABE_MCBSP1_CLKCTRL_OFFSET 0x0048
|
||||
#define OMAP4430_CM1_ABE_MCBSP1_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_INST, 0x0048)
|
||||
#define OMAP4_CM1_ABE_MCBSP2_CLKCTRL_OFFSET 0x0050
|
||||
#define OMAP4430_CM1_ABE_MCBSP2_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_INST, 0x0050)
|
||||
#define OMAP4_CM1_ABE_MCBSP3_CLKCTRL_OFFSET 0x0058
|
||||
#define OMAP4430_CM1_ABE_MCBSP3_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_INST, 0x0058)
|
||||
#define OMAP4_CM1_ABE_SLIMBUS_CLKCTRL_OFFSET 0x0060
|
||||
#define OMAP4430_CM1_ABE_SLIMBUS_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_INST, 0x0060)
|
||||
#define OMAP4_CM1_ABE_TIMER5_CLKCTRL_OFFSET 0x0068
|
||||
#define OMAP4430_CM1_ABE_TIMER5_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_INST, 0x0068)
|
||||
#define OMAP4_CM1_ABE_TIMER6_CLKCTRL_OFFSET 0x0070
|
||||
#define OMAP4430_CM1_ABE_TIMER6_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_INST, 0x0070)
|
||||
#define OMAP4_CM1_ABE_TIMER7_CLKCTRL_OFFSET 0x0078
|
||||
#define OMAP4430_CM1_ABE_TIMER7_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_INST, 0x0078)
|
||||
#define OMAP4_CM1_ABE_TIMER8_CLKCTRL_OFFSET 0x0080
|
||||
#define OMAP4430_CM1_ABE_TIMER8_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_INST, 0x0080)
|
||||
#define OMAP4_CM1_ABE_WDT3_CLKCTRL_OFFSET 0x0088
|
||||
#define OMAP4430_CM1_ABE_WDT3_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_INST, 0x0088)
|
||||
|
||||
/* CM1.RESTORE_CM1 register offsets */
|
||||
#define OMAP4_CM_CLKSEL_CORE_RESTORE_OFFSET 0x0000
|
||||
#define OMAP4430_CM_CLKSEL_CORE_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_INST, 0x0000)
|
||||
#define OMAP4_CM_DIV_M2_DPLL_CORE_RESTORE_OFFSET 0x0004
|
||||
#define OMAP4430_CM_DIV_M2_DPLL_CORE_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_INST, 0x0004)
|
||||
#define OMAP4_CM_DIV_M3_DPLL_CORE_RESTORE_OFFSET 0x0008
|
||||
#define OMAP4430_CM_DIV_M3_DPLL_CORE_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_INST, 0x0008)
|
||||
#define OMAP4_CM_DIV_M4_DPLL_CORE_RESTORE_OFFSET 0x000c
|
||||
#define OMAP4430_CM_DIV_M4_DPLL_CORE_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_INST, 0x000c)
|
||||
#define OMAP4_CM_DIV_M5_DPLL_CORE_RESTORE_OFFSET 0x0010
|
||||
#define OMAP4430_CM_DIV_M5_DPLL_CORE_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_INST, 0x0010)
|
||||
#define OMAP4_CM_DIV_M6_DPLL_CORE_RESTORE_OFFSET 0x0014
|
||||
#define OMAP4430_CM_DIV_M6_DPLL_CORE_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_INST, 0x0014)
|
||||
#define OMAP4_CM_DIV_M7_DPLL_CORE_RESTORE_OFFSET 0x0018
|
||||
#define OMAP4430_CM_DIV_M7_DPLL_CORE_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_INST, 0x0018)
|
||||
#define OMAP4_CM_CLKSEL_DPLL_CORE_RESTORE_OFFSET 0x001c
|
||||
#define OMAP4430_CM_CLKSEL_DPLL_CORE_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_INST, 0x001c)
|
||||
#define OMAP4_CM_SSC_DELTAMSTEP_DPLL_CORE_RESTORE_OFFSET 0x0020
|
||||
#define OMAP4430_CM_SSC_DELTAMSTEP_DPLL_CORE_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_INST, 0x0020)
|
||||
#define OMAP4_CM_SSC_INSTFREQDIV_DPLL_CORE_RESTORE_OFFSET 0x0024
|
||||
#define OMAP4430_CM_SSC_INSTFREQDIV_DPLL_CORE_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_INST, 0x0024)
|
||||
#define OMAP4_CM_CLKMODE_DPLL_CORE_RESTORE_OFFSET 0x0028
|
||||
#define OMAP4430_CM_CLKMODE_DPLL_CORE_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_INST, 0x0028)
|
||||
#define OMAP4_CM_SHADOW_FREQ_CONFIG2_RESTORE_OFFSET 0x002c
|
||||
#define OMAP4430_CM_SHADOW_FREQ_CONFIG2_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_INST, 0x002c)
|
||||
#define OMAP4_CM_SHADOW_FREQ_CONFIG1_RESTORE_OFFSET 0x0030
|
||||
#define OMAP4430_CM_SHADOW_FREQ_CONFIG1_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_INST, 0x0030)
|
||||
#define OMAP4_CM_AUTOIDLE_DPLL_CORE_RESTORE_OFFSET 0x0034
|
||||
#define OMAP4430_CM_AUTOIDLE_DPLL_CORE_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_INST, 0x0034)
|
||||
#define OMAP4_CM_MPU_CLKSTCTRL_RESTORE_OFFSET 0x0038
|
||||
#define OMAP4430_CM_MPU_CLKSTCTRL_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_INST, 0x0038)
|
||||
#define OMAP4_CM_CM1_PROFILING_CLKCTRL_RESTORE_OFFSET 0x003c
|
||||
#define OMAP4430_CM_CM1_PROFILING_CLKCTRL_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_INST, 0x003c)
|
||||
#define OMAP4_CM_DYN_DEP_PRESCAL_RESTORE_OFFSET 0x0040
|
||||
#define OMAP4430_CM_DYN_DEP_PRESCAL_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_INST, 0x0040)
|
||||
|
||||
/* Function prototypes */
|
||||
extern u32 omap4_cm1_read_inst_reg(s16 inst, u16 idx);
|
||||
extern void omap4_cm1_write_inst_reg(u32 val, s16 inst, u16 idx);
|
||||
extern u32 omap4_cm1_rmw_inst_reg_bits(u32 mask, u32 bits, s16 inst, s16 idx);
|
||||
|
||||
#endif
|
508
arch/arm/mach-omap2/cm2_44xx.h
Normal file
508
arch/arm/mach-omap2/cm2_44xx.h
Normal file
|
@ -0,0 +1,508 @@
|
|||
/*
|
||||
* OMAP44xx CM2 instance offset macros
|
||||
*
|
||||
* Copyright (C) 2009-2010 Texas Instruments, Inc.
|
||||
* Copyright (C) 2009-2010 Nokia Corporation
|
||||
*
|
||||
* Paul Walmsley (paul@pwsan.com)
|
||||
* Rajendra Nayak (rnayak@ti.com)
|
||||
* Benoit Cousson (b-cousson@ti.com)
|
||||
*
|
||||
* This file is automatically generated from the OMAP hardware databases.
|
||||
* We respectfully ask that any modifications to this file be coordinated
|
||||
* with the public linux-omap@vger.kernel.org mailing list and the
|
||||
* authors above to ensure that the autogeneration scripts are kept
|
||||
* up-to-date with the file contents.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* XXX This file needs to be updated to align on one of "OMAP4", "OMAP44XX",
|
||||
* or "OMAP4430".
|
||||
*/
|
||||
|
||||
#ifndef __ARCH_ARM_MACH_OMAP2_CM2_44XX_H
|
||||
#define __ARCH_ARM_MACH_OMAP2_CM2_44XX_H
|
||||
|
||||
/* CM2 base address */
|
||||
#define OMAP4430_CM2_BASE 0x4a008000
|
||||
|
||||
#define OMAP44XX_CM2_REGADDR(inst, reg) \
|
||||
OMAP2_L4_IO_ADDRESS(OMAP4430_CM2_BASE + (inst) + (reg))
|
||||
|
||||
/* CM2 instances */
|
||||
#define OMAP4430_CM2_OCP_SOCKET_INST 0x0000
|
||||
#define OMAP4430_CM2_CKGEN_INST 0x0100
|
||||
#define OMAP4430_CM2_ALWAYS_ON_INST 0x0600
|
||||
#define OMAP4430_CM2_CORE_INST 0x0700
|
||||
#define OMAP4430_CM2_IVAHD_INST 0x0f00
|
||||
#define OMAP4430_CM2_CAM_INST 0x1000
|
||||
#define OMAP4430_CM2_DSS_INST 0x1100
|
||||
#define OMAP4430_CM2_GFX_INST 0x1200
|
||||
#define OMAP4430_CM2_L3INIT_INST 0x1300
|
||||
#define OMAP4430_CM2_L4PER_INST 0x1400
|
||||
#define OMAP4430_CM2_CEFUSE_INST 0x1600
|
||||
#define OMAP4430_CM2_RESTORE_INST 0x1e00
|
||||
#define OMAP4430_CM2_INSTR_INST 0x1f00
|
||||
|
||||
/* CM2 clockdomain register offsets (from instance start) */
|
||||
#define OMAP4430_CM2_ALWAYS_ON_ALWON_CDOFFS 0x0000
|
||||
#define OMAP4430_CM2_CORE_L3_1_CDOFFS 0x0000
|
||||
#define OMAP4430_CM2_CORE_L3_2_CDOFFS 0x0100
|
||||
#define OMAP4430_CM2_CORE_DUCATI_CDOFFS 0x0200
|
||||
#define OMAP4430_CM2_CORE_SDMA_CDOFFS 0x0300
|
||||
#define OMAP4430_CM2_CORE_MEMIF_CDOFFS 0x0400
|
||||
#define OMAP4430_CM2_CORE_D2D_CDOFFS 0x0500
|
||||
#define OMAP4430_CM2_CORE_L4CFG_CDOFFS 0x0600
|
||||
#define OMAP4430_CM2_CORE_L3INSTR_CDOFFS 0x0700
|
||||
#define OMAP4430_CM2_IVAHD_IVAHD_CDOFFS 0x0000
|
||||
#define OMAP4430_CM2_CAM_CAM_CDOFFS 0x0000
|
||||
#define OMAP4430_CM2_DSS_DSS_CDOFFS 0x0000
|
||||
#define OMAP4430_CM2_GFX_GFX_CDOFFS 0x0000
|
||||
#define OMAP4430_CM2_L3INIT_L3INIT_CDOFFS 0x0000
|
||||
#define OMAP4430_CM2_L4PER_L4PER_CDOFFS 0x0000
|
||||
#define OMAP4430_CM2_L4PER_L4SEC_CDOFFS 0x0180
|
||||
#define OMAP4430_CM2_CEFUSE_CEFUSE_CDOFFS 0x0000
|
||||
|
||||
|
||||
/* CM2 */
|
||||
|
||||
/* CM2.OCP_SOCKET_CM2 register offsets */
|
||||
#define OMAP4_REVISION_CM2_OFFSET 0x0000
|
||||
#define OMAP4430_REVISION_CM2 OMAP44XX_CM2_REGADDR(OMAP4430_CM2_OCP_SOCKET_INST, 0x0000)
|
||||
#define OMAP4_CM_CM2_PROFILING_CLKCTRL_OFFSET 0x0040
|
||||
#define OMAP4430_CM_CM2_PROFILING_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_OCP_SOCKET_INST, 0x0040)
|
||||
|
||||
/* CM2.CKGEN_CM2 register offsets */
|
||||
#define OMAP4_CM_CLKSEL_DUCATI_ISS_ROOT_OFFSET 0x0000
|
||||
#define OMAP4430_CM_CLKSEL_DUCATI_ISS_ROOT OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0000)
|
||||
#define OMAP4_CM_CLKSEL_USB_60MHZ_OFFSET 0x0004
|
||||
#define OMAP4430_CM_CLKSEL_USB_60MHZ OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0004)
|
||||
#define OMAP4_CM_SCALE_FCLK_OFFSET 0x0008
|
||||
#define OMAP4430_CM_SCALE_FCLK OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0008)
|
||||
#define OMAP4_CM_CORE_DVFS_PERF1_OFFSET 0x0010
|
||||
#define OMAP4430_CM_CORE_DVFS_PERF1 OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0010)
|
||||
#define OMAP4_CM_CORE_DVFS_PERF2_OFFSET 0x0014
|
||||
#define OMAP4430_CM_CORE_DVFS_PERF2 OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0014)
|
||||
#define OMAP4_CM_CORE_DVFS_PERF3_OFFSET 0x0018
|
||||
#define OMAP4430_CM_CORE_DVFS_PERF3 OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0018)
|
||||
#define OMAP4_CM_CORE_DVFS_PERF4_OFFSET 0x001c
|
||||
#define OMAP4430_CM_CORE_DVFS_PERF4 OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x001c)
|
||||
#define OMAP4_CM_CORE_DVFS_CURRENT_OFFSET 0x0024
|
||||
#define OMAP4430_CM_CORE_DVFS_CURRENT OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0024)
|
||||
#define OMAP4_CM_IVA_DVFS_PERF_TESLA_OFFSET 0x0028
|
||||
#define OMAP4430_CM_IVA_DVFS_PERF_TESLA OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0028)
|
||||
#define OMAP4_CM_IVA_DVFS_PERF_IVAHD_OFFSET 0x002c
|
||||
#define OMAP4430_CM_IVA_DVFS_PERF_IVAHD OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x002c)
|
||||
#define OMAP4_CM_IVA_DVFS_PERF_ABE_OFFSET 0x0030
|
||||
#define OMAP4430_CM_IVA_DVFS_PERF_ABE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0030)
|
||||
#define OMAP4_CM_IVA_DVFS_CURRENT_OFFSET 0x0038
|
||||
#define OMAP4430_CM_IVA_DVFS_CURRENT OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0038)
|
||||
#define OMAP4_CM_CLKMODE_DPLL_PER_OFFSET 0x0040
|
||||
#define OMAP4430_CM_CLKMODE_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0040)
|
||||
#define OMAP4_CM_IDLEST_DPLL_PER_OFFSET 0x0044
|
||||
#define OMAP4430_CM_IDLEST_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0044)
|
||||
#define OMAP4_CM_AUTOIDLE_DPLL_PER_OFFSET 0x0048
|
||||
#define OMAP4430_CM_AUTOIDLE_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0048)
|
||||
#define OMAP4_CM_CLKSEL_DPLL_PER_OFFSET 0x004c
|
||||
#define OMAP4430_CM_CLKSEL_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x004c)
|
||||
#define OMAP4_CM_DIV_M2_DPLL_PER_OFFSET 0x0050
|
||||
#define OMAP4430_CM_DIV_M2_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0050)
|
||||
#define OMAP4_CM_DIV_M3_DPLL_PER_OFFSET 0x0054
|
||||
#define OMAP4430_CM_DIV_M3_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0054)
|
||||
#define OMAP4_CM_DIV_M4_DPLL_PER_OFFSET 0x0058
|
||||
#define OMAP4430_CM_DIV_M4_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0058)
|
||||
#define OMAP4_CM_DIV_M5_DPLL_PER_OFFSET 0x005c
|
||||
#define OMAP4430_CM_DIV_M5_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x005c)
|
||||
#define OMAP4_CM_DIV_M6_DPLL_PER_OFFSET 0x0060
|
||||
#define OMAP4430_CM_DIV_M6_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0060)
|
||||
#define OMAP4_CM_DIV_M7_DPLL_PER_OFFSET 0x0064
|
||||
#define OMAP4430_CM_DIV_M7_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0064)
|
||||
#define OMAP4_CM_SSC_DELTAMSTEP_DPLL_PER_OFFSET 0x0068
|
||||
#define OMAP4430_CM_SSC_DELTAMSTEP_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0068)
|
||||
#define OMAP4_CM_SSC_INSTFREQDIV_DPLL_PER_OFFSET 0x006c
|
||||
#define OMAP4430_CM_SSC_INSTFREQDIV_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x006c)
|
||||
#define OMAP4_CM_CLKMODE_DPLL_USB_OFFSET 0x0080
|
||||
#define OMAP4430_CM_CLKMODE_DPLL_USB OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0080)
|
||||
#define OMAP4_CM_IDLEST_DPLL_USB_OFFSET 0x0084
|
||||
#define OMAP4430_CM_IDLEST_DPLL_USB OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0084)
|
||||
#define OMAP4_CM_AUTOIDLE_DPLL_USB_OFFSET 0x0088
|
||||
#define OMAP4430_CM_AUTOIDLE_DPLL_USB OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0088)
|
||||
#define OMAP4_CM_CLKSEL_DPLL_USB_OFFSET 0x008c
|
||||
#define OMAP4430_CM_CLKSEL_DPLL_USB OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x008c)
|
||||
#define OMAP4_CM_DIV_M2_DPLL_USB_OFFSET 0x0090
|
||||
#define OMAP4430_CM_DIV_M2_DPLL_USB OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0090)
|
||||
#define OMAP4_CM_SSC_DELTAMSTEP_DPLL_USB_OFFSET 0x00a8
|
||||
#define OMAP4430_CM_SSC_DELTAMSTEP_DPLL_USB OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x00a8)
|
||||
#define OMAP4_CM_SSC_INSTFREQDIV_DPLL_USB_OFFSET 0x00ac
|
||||
#define OMAP4430_CM_SSC_INSTFREQDIV_DPLL_USB OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x00ac)
|
||||
#define OMAP4_CM_CLKDCOLDO_DPLL_USB_OFFSET 0x00b4
|
||||
#define OMAP4430_CM_CLKDCOLDO_DPLL_USB OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x00b4)
|
||||
#define OMAP4_CM_CLKMODE_DPLL_UNIPRO_OFFSET 0x00c0
|
||||
#define OMAP4430_CM_CLKMODE_DPLL_UNIPRO OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x00c0)
|
||||
#define OMAP4_CM_IDLEST_DPLL_UNIPRO_OFFSET 0x00c4
|
||||
#define OMAP4430_CM_IDLEST_DPLL_UNIPRO OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x00c4)
|
||||
#define OMAP4_CM_AUTOIDLE_DPLL_UNIPRO_OFFSET 0x00c8
|
||||
#define OMAP4430_CM_AUTOIDLE_DPLL_UNIPRO OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x00c8)
|
||||
#define OMAP4_CM_CLKSEL_DPLL_UNIPRO_OFFSET 0x00cc
|
||||
#define OMAP4430_CM_CLKSEL_DPLL_UNIPRO OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x00cc)
|
||||
#define OMAP4_CM_DIV_M2_DPLL_UNIPRO_OFFSET 0x00d0
|
||||
#define OMAP4430_CM_DIV_M2_DPLL_UNIPRO OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x00d0)
|
||||
#define OMAP4_CM_SSC_DELTAMSTEP_DPLL_UNIPRO_OFFSET 0x00e8
|
||||
#define OMAP4430_CM_SSC_DELTAMSTEP_DPLL_UNIPRO OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x00e8)
|
||||
#define OMAP4_CM_SSC_INSTFREQDIV_DPLL_UNIPRO_OFFSET 0x00ec
|
||||
#define OMAP4430_CM_SSC_INSTFREQDIV_DPLL_UNIPRO OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x00ec)
|
||||
|
||||
/* CM2.ALWAYS_ON_CM2 register offsets */
|
||||
#define OMAP4_CM_ALWON_CLKSTCTRL_OFFSET 0x0000
|
||||
#define OMAP4430_CM_ALWON_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_ALWAYS_ON_INST, 0x0000)
|
||||
#define OMAP4_CM_ALWON_MDMINTC_CLKCTRL_OFFSET 0x0020
|
||||
#define OMAP4430_CM_ALWON_MDMINTC_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_ALWAYS_ON_INST, 0x0020)
|
||||
#define OMAP4_CM_ALWON_SR_MPU_CLKCTRL_OFFSET 0x0028
|
||||
#define OMAP4430_CM_ALWON_SR_MPU_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_ALWAYS_ON_INST, 0x0028)
|
||||
#define OMAP4_CM_ALWON_SR_IVA_CLKCTRL_OFFSET 0x0030
|
||||
#define OMAP4430_CM_ALWON_SR_IVA_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_ALWAYS_ON_INST, 0x0030)
|
||||
#define OMAP4_CM_ALWON_SR_CORE_CLKCTRL_OFFSET 0x0038
|
||||
#define OMAP4430_CM_ALWON_SR_CORE_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_ALWAYS_ON_INST, 0x0038)
|
||||
#define OMAP4_CM_ALWON_USBPHY_CLKCTRL_OFFSET 0x0040
|
||||
#define OMAP4430_CM_ALWON_USBPHY_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_ALWAYS_ON_INST, 0x0040)
|
||||
|
||||
/* CM2.CORE_CM2 register offsets */
|
||||
#define OMAP4_CM_L3_1_CLKSTCTRL_OFFSET 0x0000
|
||||
#define OMAP4430_CM_L3_1_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0000)
|
||||
#define OMAP4_CM_L3_1_DYNAMICDEP_OFFSET 0x0008
|
||||
#define OMAP4430_CM_L3_1_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0008)
|
||||
#define OMAP4_CM_L3_1_L3_1_CLKCTRL_OFFSET 0x0020
|
||||
#define OMAP4430_CM_L3_1_L3_1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0020)
|
||||
#define OMAP4_CM_L3_2_CLKSTCTRL_OFFSET 0x0100
|
||||
#define OMAP4430_CM_L3_2_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0100)
|
||||
#define OMAP4_CM_L3_2_DYNAMICDEP_OFFSET 0x0108
|
||||
#define OMAP4430_CM_L3_2_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0108)
|
||||
#define OMAP4_CM_L3_2_L3_2_CLKCTRL_OFFSET 0x0120
|
||||
#define OMAP4430_CM_L3_2_L3_2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0120)
|
||||
#define OMAP4_CM_L3_2_GPMC_CLKCTRL_OFFSET 0x0128
|
||||
#define OMAP4430_CM_L3_2_GPMC_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0128)
|
||||
#define OMAP4_CM_L3_2_OCMC_RAM_CLKCTRL_OFFSET 0x0130
|
||||
#define OMAP4430_CM_L3_2_OCMC_RAM_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0130)
|
||||
#define OMAP4_CM_DUCATI_CLKSTCTRL_OFFSET 0x0200
|
||||
#define OMAP4430_CM_DUCATI_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0200)
|
||||
#define OMAP4_CM_DUCATI_STATICDEP_OFFSET 0x0204
|
||||
#define OMAP4430_CM_DUCATI_STATICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0204)
|
||||
#define OMAP4_CM_DUCATI_DYNAMICDEP_OFFSET 0x0208
|
||||
#define OMAP4430_CM_DUCATI_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0208)
|
||||
#define OMAP4_CM_DUCATI_DUCATI_CLKCTRL_OFFSET 0x0220
|
||||
#define OMAP4430_CM_DUCATI_DUCATI_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0220)
|
||||
#define OMAP4_CM_SDMA_CLKSTCTRL_OFFSET 0x0300
|
||||
#define OMAP4430_CM_SDMA_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0300)
|
||||
#define OMAP4_CM_SDMA_STATICDEP_OFFSET 0x0304
|
||||
#define OMAP4430_CM_SDMA_STATICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0304)
|
||||
#define OMAP4_CM_SDMA_DYNAMICDEP_OFFSET 0x0308
|
||||
#define OMAP4430_CM_SDMA_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0308)
|
||||
#define OMAP4_CM_SDMA_SDMA_CLKCTRL_OFFSET 0x0320
|
||||
#define OMAP4430_CM_SDMA_SDMA_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0320)
|
||||
#define OMAP4_CM_MEMIF_CLKSTCTRL_OFFSET 0x0400
|
||||
#define OMAP4430_CM_MEMIF_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0400)
|
||||
#define OMAP4_CM_MEMIF_DMM_CLKCTRL_OFFSET 0x0420
|
||||
#define OMAP4430_CM_MEMIF_DMM_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0420)
|
||||
#define OMAP4_CM_MEMIF_EMIF_FW_CLKCTRL_OFFSET 0x0428
|
||||
#define OMAP4430_CM_MEMIF_EMIF_FW_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0428)
|
||||
#define OMAP4_CM_MEMIF_EMIF_1_CLKCTRL_OFFSET 0x0430
|
||||
#define OMAP4430_CM_MEMIF_EMIF_1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0430)
|
||||
#define OMAP4_CM_MEMIF_EMIF_2_CLKCTRL_OFFSET 0x0438
|
||||
#define OMAP4430_CM_MEMIF_EMIF_2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0438)
|
||||
#define OMAP4_CM_MEMIF_DLL_CLKCTRL_OFFSET 0x0440
|
||||
#define OMAP4430_CM_MEMIF_DLL_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0440)
|
||||
#define OMAP4_CM_MEMIF_EMIF_H1_CLKCTRL_OFFSET 0x0450
|
||||
#define OMAP4430_CM_MEMIF_EMIF_H1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0450)
|
||||
#define OMAP4_CM_MEMIF_EMIF_H2_CLKCTRL_OFFSET 0x0458
|
||||
#define OMAP4430_CM_MEMIF_EMIF_H2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0458)
|
||||
#define OMAP4_CM_MEMIF_DLL_H_CLKCTRL_OFFSET 0x0460
|
||||
#define OMAP4430_CM_MEMIF_DLL_H_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0460)
|
||||
#define OMAP4_CM_D2D_CLKSTCTRL_OFFSET 0x0500
|
||||
#define OMAP4430_CM_D2D_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0500)
|
||||
#define OMAP4_CM_D2D_STATICDEP_OFFSET 0x0504
|
||||
#define OMAP4430_CM_D2D_STATICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0504)
|
||||
#define OMAP4_CM_D2D_DYNAMICDEP_OFFSET 0x0508
|
||||
#define OMAP4430_CM_D2D_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0508)
|
||||
#define OMAP4_CM_D2D_SAD2D_CLKCTRL_OFFSET 0x0520
|
||||
#define OMAP4430_CM_D2D_SAD2D_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0520)
|
||||
#define OMAP4_CM_D2D_INSTEM_ICR_CLKCTRL_OFFSET 0x0528
|
||||
#define OMAP4430_CM_D2D_INSTEM_ICR_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0528)
|
||||
#define OMAP4_CM_D2D_SAD2D_FW_CLKCTRL_OFFSET 0x0530
|
||||
#define OMAP4430_CM_D2D_SAD2D_FW_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0530)
|
||||
#define OMAP4_CM_L4CFG_CLKSTCTRL_OFFSET 0x0600
|
||||
#define OMAP4430_CM_L4CFG_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0600)
|
||||
#define OMAP4_CM_L4CFG_DYNAMICDEP_OFFSET 0x0608
|
||||
#define OMAP4430_CM_L4CFG_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0608)
|
||||
#define OMAP4_CM_L4CFG_L4_CFG_CLKCTRL_OFFSET 0x0620
|
||||
#define OMAP4430_CM_L4CFG_L4_CFG_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0620)
|
||||
#define OMAP4_CM_L4CFG_HW_SEM_CLKCTRL_OFFSET 0x0628
|
||||
#define OMAP4430_CM_L4CFG_HW_SEM_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0628)
|
||||
#define OMAP4_CM_L4CFG_MAILBOX_CLKCTRL_OFFSET 0x0630
|
||||
#define OMAP4430_CM_L4CFG_MAILBOX_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0630)
|
||||
#define OMAP4_CM_L4CFG_SAR_ROM_CLKCTRL_OFFSET 0x0638
|
||||
#define OMAP4430_CM_L4CFG_SAR_ROM_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0638)
|
||||
#define OMAP4_CM_L3INSTR_CLKSTCTRL_OFFSET 0x0700
|
||||
#define OMAP4430_CM_L3INSTR_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0700)
|
||||
#define OMAP4_CM_L3INSTR_L3_3_CLKCTRL_OFFSET 0x0720
|
||||
#define OMAP4430_CM_L3INSTR_L3_3_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0720)
|
||||
#define OMAP4_CM_L3INSTR_L3_INSTR_CLKCTRL_OFFSET 0x0728
|
||||
#define OMAP4430_CM_L3INSTR_L3_INSTR_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0728)
|
||||
#define OMAP4_CM_L3INSTR_OCP_WP1_CLKCTRL_OFFSET 0x0740
|
||||
#define OMAP4430_CM_L3INSTR_OCP_WP1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0740)
|
||||
|
||||
/* CM2.IVAHD_CM2 register offsets */
|
||||
#define OMAP4_CM_IVAHD_CLKSTCTRL_OFFSET 0x0000
|
||||
#define OMAP4430_CM_IVAHD_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_IVAHD_INST, 0x0000)
|
||||
#define OMAP4_CM_IVAHD_STATICDEP_OFFSET 0x0004
|
||||
#define OMAP4430_CM_IVAHD_STATICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_IVAHD_INST, 0x0004)
|
||||
#define OMAP4_CM_IVAHD_DYNAMICDEP_OFFSET 0x0008
|
||||
#define OMAP4430_CM_IVAHD_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_IVAHD_INST, 0x0008)
|
||||
#define OMAP4_CM_IVAHD_IVAHD_CLKCTRL_OFFSET 0x0020
|
||||
#define OMAP4430_CM_IVAHD_IVAHD_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_IVAHD_INST, 0x0020)
|
||||
#define OMAP4_CM_IVAHD_SL2_CLKCTRL_OFFSET 0x0028
|
||||
#define OMAP4430_CM_IVAHD_SL2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_IVAHD_INST, 0x0028)
|
||||
|
||||
/* CM2.CAM_CM2 register offsets */
|
||||
#define OMAP4_CM_CAM_CLKSTCTRL_OFFSET 0x0000
|
||||
#define OMAP4430_CM_CAM_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CAM_INST, 0x0000)
|
||||
#define OMAP4_CM_CAM_STATICDEP_OFFSET 0x0004
|
||||
#define OMAP4430_CM_CAM_STATICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CAM_INST, 0x0004)
|
||||
#define OMAP4_CM_CAM_DYNAMICDEP_OFFSET 0x0008
|
||||
#define OMAP4430_CM_CAM_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CAM_INST, 0x0008)
|
||||
#define OMAP4_CM_CAM_ISS_CLKCTRL_OFFSET 0x0020
|
||||
#define OMAP4430_CM_CAM_ISS_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CAM_INST, 0x0020)
|
||||
#define OMAP4_CM_CAM_FDIF_CLKCTRL_OFFSET 0x0028
|
||||
#define OMAP4430_CM_CAM_FDIF_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CAM_INST, 0x0028)
|
||||
|
||||
/* CM2.DSS_CM2 register offsets */
|
||||
#define OMAP4_CM_DSS_CLKSTCTRL_OFFSET 0x0000
|
||||
#define OMAP4430_CM_DSS_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_DSS_INST, 0x0000)
|
||||
#define OMAP4_CM_DSS_STATICDEP_OFFSET 0x0004
|
||||
#define OMAP4430_CM_DSS_STATICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_DSS_INST, 0x0004)
|
||||
#define OMAP4_CM_DSS_DYNAMICDEP_OFFSET 0x0008
|
||||
#define OMAP4430_CM_DSS_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_DSS_INST, 0x0008)
|
||||
#define OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET 0x0020
|
||||
#define OMAP4430_CM_DSS_DSS_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_DSS_INST, 0x0020)
|
||||
#define OMAP4_CM_DSS_DEISS_CLKCTRL_OFFSET 0x0028
|
||||
#define OMAP4430_CM_DSS_DEISS_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_DSS_INST, 0x0028)
|
||||
|
||||
/* CM2.GFX_CM2 register offsets */
|
||||
#define OMAP4_CM_GFX_CLKSTCTRL_OFFSET 0x0000
|
||||
#define OMAP4430_CM_GFX_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_GFX_INST, 0x0000)
|
||||
#define OMAP4_CM_GFX_STATICDEP_OFFSET 0x0004
|
||||
#define OMAP4430_CM_GFX_STATICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_GFX_INST, 0x0004)
|
||||
#define OMAP4_CM_GFX_DYNAMICDEP_OFFSET 0x0008
|
||||
#define OMAP4430_CM_GFX_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_GFX_INST, 0x0008)
|
||||
#define OMAP4_CM_GFX_GFX_CLKCTRL_OFFSET 0x0020
|
||||
#define OMAP4430_CM_GFX_GFX_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_GFX_INST, 0x0020)
|
||||
|
||||
/* CM2.L3INIT_CM2 register offsets */
|
||||
#define OMAP4_CM_L3INIT_CLKSTCTRL_OFFSET 0x0000
|
||||
#define OMAP4430_CM_L3INIT_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_INST, 0x0000)
|
||||
#define OMAP4_CM_L3INIT_STATICDEP_OFFSET 0x0004
|
||||
#define OMAP4430_CM_L3INIT_STATICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_INST, 0x0004)
|
||||
#define OMAP4_CM_L3INIT_DYNAMICDEP_OFFSET 0x0008
|
||||
#define OMAP4430_CM_L3INIT_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_INST, 0x0008)
|
||||
#define OMAP4_CM_L3INIT_MMC1_CLKCTRL_OFFSET 0x0028
|
||||
#define OMAP4430_CM_L3INIT_MMC1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_INST, 0x0028)
|
||||
#define OMAP4_CM_L3INIT_MMC2_CLKCTRL_OFFSET 0x0030
|
||||
#define OMAP4430_CM_L3INIT_MMC2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_INST, 0x0030)
|
||||
#define OMAP4_CM_L3INIT_HSI_CLKCTRL_OFFSET 0x0038
|
||||
#define OMAP4430_CM_L3INIT_HSI_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_INST, 0x0038)
|
||||
#define OMAP4_CM_L3INIT_UNIPRO1_CLKCTRL_OFFSET 0x0040
|
||||
#define OMAP4430_CM_L3INIT_UNIPRO1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_INST, 0x0040)
|
||||
#define OMAP4_CM_L3INIT_USB_HOST_CLKCTRL_OFFSET 0x0058
|
||||
#define OMAP4430_CM_L3INIT_USB_HOST_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_INST, 0x0058)
|
||||
#define OMAP4_CM_L3INIT_USB_OTG_CLKCTRL_OFFSET 0x0060
|
||||
#define OMAP4430_CM_L3INIT_USB_OTG_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_INST, 0x0060)
|
||||
#define OMAP4_CM_L3INIT_USB_TLL_CLKCTRL_OFFSET 0x0068
|
||||
#define OMAP4430_CM_L3INIT_USB_TLL_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_INST, 0x0068)
|
||||
#define OMAP4_CM_L3INIT_P1500_CLKCTRL_OFFSET 0x0078
|
||||
#define OMAP4430_CM_L3INIT_P1500_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_INST, 0x0078)
|
||||
#define OMAP4_CM_L3INIT_EMAC_CLKCTRL_OFFSET 0x0080
|
||||
#define OMAP4430_CM_L3INIT_EMAC_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_INST, 0x0080)
|
||||
#define OMAP4_CM_L3INIT_SATA_CLKCTRL_OFFSET 0x0088
|
||||
#define OMAP4430_CM_L3INIT_SATA_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_INST, 0x0088)
|
||||
#define OMAP4_CM_L3INIT_TPPSS_CLKCTRL_OFFSET 0x0090
|
||||
#define OMAP4430_CM_L3INIT_TPPSS_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_INST, 0x0090)
|
||||
#define OMAP4_CM_L3INIT_PCIESS_CLKCTRL_OFFSET 0x0098
|
||||
#define OMAP4430_CM_L3INIT_PCIESS_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_INST, 0x0098)
|
||||
#define OMAP4_CM_L3INIT_CCPTX_CLKCTRL_OFFSET 0x00a8
|
||||
#define OMAP4430_CM_L3INIT_CCPTX_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_INST, 0x00a8)
|
||||
#define OMAP4_CM_L3INIT_XHPI_CLKCTRL_OFFSET 0x00c0
|
||||
#define OMAP4430_CM_L3INIT_XHPI_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_INST, 0x00c0)
|
||||
#define OMAP4_CM_L3INIT_MMC6_CLKCTRL_OFFSET 0x00c8
|
||||
#define OMAP4430_CM_L3INIT_MMC6_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_INST, 0x00c8)
|
||||
#define OMAP4_CM_L3INIT_USB_HOST_FS_CLKCTRL_OFFSET 0x00d0
|
||||
#define OMAP4430_CM_L3INIT_USB_HOST_FS_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_INST, 0x00d0)
|
||||
#define OMAP4_CM_L3INIT_USBPHYOCP2SCP_CLKCTRL_OFFSET 0x00e0
|
||||
#define OMAP4430_CM_L3INIT_USBPHYOCP2SCP_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_INST, 0x00e0)
|
||||
|
||||
/* CM2.L4PER_CM2 register offsets */
|
||||
#define OMAP4_CM_L4PER_CLKSTCTRL_OFFSET 0x0000
|
||||
#define OMAP4430_CM_L4PER_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0000)
|
||||
#define OMAP4_CM_L4PER_DYNAMICDEP_OFFSET 0x0008
|
||||
#define OMAP4430_CM_L4PER_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0008)
|
||||
#define OMAP4_CM_L4PER_ADC_CLKCTRL_OFFSET 0x0020
|
||||
#define OMAP4430_CM_L4PER_ADC_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0020)
|
||||
#define OMAP4_CM_L4PER_DMTIMER10_CLKCTRL_OFFSET 0x0028
|
||||
#define OMAP4430_CM_L4PER_DMTIMER10_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0028)
|
||||
#define OMAP4_CM_L4PER_DMTIMER11_CLKCTRL_OFFSET 0x0030
|
||||
#define OMAP4430_CM_L4PER_DMTIMER11_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0030)
|
||||
#define OMAP4_CM_L4PER_DMTIMER2_CLKCTRL_OFFSET 0x0038
|
||||
#define OMAP4430_CM_L4PER_DMTIMER2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0038)
|
||||
#define OMAP4_CM_L4PER_DMTIMER3_CLKCTRL_OFFSET 0x0040
|
||||
#define OMAP4430_CM_L4PER_DMTIMER3_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0040)
|
||||
#define OMAP4_CM_L4PER_DMTIMER4_CLKCTRL_OFFSET 0x0048
|
||||
#define OMAP4430_CM_L4PER_DMTIMER4_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0048)
|
||||
#define OMAP4_CM_L4PER_DMTIMER9_CLKCTRL_OFFSET 0x0050
|
||||
#define OMAP4430_CM_L4PER_DMTIMER9_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0050)
|
||||
#define OMAP4_CM_L4PER_ELM_CLKCTRL_OFFSET 0x0058
|
||||
#define OMAP4430_CM_L4PER_ELM_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0058)
|
||||
#define OMAP4_CM_L4PER_GPIO2_CLKCTRL_OFFSET 0x0060
|
||||
#define OMAP4430_CM_L4PER_GPIO2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0060)
|
||||
#define OMAP4_CM_L4PER_GPIO3_CLKCTRL_OFFSET 0x0068
|
||||
#define OMAP4430_CM_L4PER_GPIO3_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0068)
|
||||
#define OMAP4_CM_L4PER_GPIO4_CLKCTRL_OFFSET 0x0070
|
||||
#define OMAP4430_CM_L4PER_GPIO4_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0070)
|
||||
#define OMAP4_CM_L4PER_GPIO5_CLKCTRL_OFFSET 0x0078
|
||||
#define OMAP4430_CM_L4PER_GPIO5_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0078)
|
||||
#define OMAP4_CM_L4PER_GPIO6_CLKCTRL_OFFSET 0x0080
|
||||
#define OMAP4430_CM_L4PER_GPIO6_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0080)
|
||||
#define OMAP4_CM_L4PER_HDQ1W_CLKCTRL_OFFSET 0x0088
|
||||
#define OMAP4430_CM_L4PER_HDQ1W_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0088)
|
||||
#define OMAP4_CM_L4PER_HECC1_CLKCTRL_OFFSET 0x0090
|
||||
#define OMAP4430_CM_L4PER_HECC1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0090)
|
||||
#define OMAP4_CM_L4PER_HECC2_CLKCTRL_OFFSET 0x0098
|
||||
#define OMAP4430_CM_L4PER_HECC2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0098)
|
||||
#define OMAP4_CM_L4PER_I2C1_CLKCTRL_OFFSET 0x00a0
|
||||
#define OMAP4430_CM_L4PER_I2C1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x00a0)
|
||||
#define OMAP4_CM_L4PER_I2C2_CLKCTRL_OFFSET 0x00a8
|
||||
#define OMAP4430_CM_L4PER_I2C2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x00a8)
|
||||
#define OMAP4_CM_L4PER_I2C3_CLKCTRL_OFFSET 0x00b0
|
||||
#define OMAP4430_CM_L4PER_I2C3_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x00b0)
|
||||
#define OMAP4_CM_L4PER_I2C4_CLKCTRL_OFFSET 0x00b8
|
||||
#define OMAP4430_CM_L4PER_I2C4_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x00b8)
|
||||
#define OMAP4_CM_L4PER_L4PER_CLKCTRL_OFFSET 0x00c0
|
||||
#define OMAP4430_CM_L4PER_L4PER_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x00c0)
|
||||
#define OMAP4_CM_L4PER_MCASP2_CLKCTRL_OFFSET 0x00d0
|
||||
#define OMAP4430_CM_L4PER_MCASP2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x00d0)
|
||||
#define OMAP4_CM_L4PER_MCASP3_CLKCTRL_OFFSET 0x00d8
|
||||
#define OMAP4430_CM_L4PER_MCASP3_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x00d8)
|
||||
#define OMAP4_CM_L4PER_MCBSP4_CLKCTRL_OFFSET 0x00e0
|
||||
#define OMAP4430_CM_L4PER_MCBSP4_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x00e0)
|
||||
#define OMAP4_CM_L4PER_MGATE_CLKCTRL_OFFSET 0x00e8
|
||||
#define OMAP4430_CM_L4PER_MGATE_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x00e8)
|
||||
#define OMAP4_CM_L4PER_MCSPI1_CLKCTRL_OFFSET 0x00f0
|
||||
#define OMAP4430_CM_L4PER_MCSPI1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x00f0)
|
||||
#define OMAP4_CM_L4PER_MCSPI2_CLKCTRL_OFFSET 0x00f8
|
||||
#define OMAP4430_CM_L4PER_MCSPI2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x00f8)
|
||||
#define OMAP4_CM_L4PER_MCSPI3_CLKCTRL_OFFSET 0x0100
|
||||
#define OMAP4430_CM_L4PER_MCSPI3_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0100)
|
||||
#define OMAP4_CM_L4PER_MCSPI4_CLKCTRL_OFFSET 0x0108
|
||||
#define OMAP4430_CM_L4PER_MCSPI4_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0108)
|
||||
#define OMAP4_CM_L4PER_MMCSD3_CLKCTRL_OFFSET 0x0120
|
||||
#define OMAP4430_CM_L4PER_MMCSD3_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0120)
|
||||
#define OMAP4_CM_L4PER_MMCSD4_CLKCTRL_OFFSET 0x0128
|
||||
#define OMAP4430_CM_L4PER_MMCSD4_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0128)
|
||||
#define OMAP4_CM_L4PER_MSPROHG_CLKCTRL_OFFSET 0x0130
|
||||
#define OMAP4430_CM_L4PER_MSPROHG_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0130)
|
||||
#define OMAP4_CM_L4PER_SLIMBUS2_CLKCTRL_OFFSET 0x0138
|
||||
#define OMAP4430_CM_L4PER_SLIMBUS2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0138)
|
||||
#define OMAP4_CM_L4PER_UART1_CLKCTRL_OFFSET 0x0140
|
||||
#define OMAP4430_CM_L4PER_UART1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0140)
|
||||
#define OMAP4_CM_L4PER_UART2_CLKCTRL_OFFSET 0x0148
|
||||
#define OMAP4430_CM_L4PER_UART2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0148)
|
||||
#define OMAP4_CM_L4PER_UART3_CLKCTRL_OFFSET 0x0150
|
||||
#define OMAP4430_CM_L4PER_UART3_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0150)
|
||||
#define OMAP4_CM_L4PER_UART4_CLKCTRL_OFFSET 0x0158
|
||||
#define OMAP4430_CM_L4PER_UART4_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0158)
|
||||
#define OMAP4_CM_L4PER_MMCSD5_CLKCTRL_OFFSET 0x0160
|
||||
#define OMAP4430_CM_L4PER_MMCSD5_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0160)
|
||||
#define OMAP4_CM_L4PER_I2C5_CLKCTRL_OFFSET 0x0168
|
||||
#define OMAP4430_CM_L4PER_I2C5_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0168)
|
||||
#define OMAP4_CM_L4SEC_CLKSTCTRL_OFFSET 0x0180
|
||||
#define OMAP4430_CM_L4SEC_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0180)
|
||||
#define OMAP4_CM_L4SEC_STATICDEP_OFFSET 0x0184
|
||||
#define OMAP4430_CM_L4SEC_STATICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0184)
|
||||
#define OMAP4_CM_L4SEC_DYNAMICDEP_OFFSET 0x0188
|
||||
#define OMAP4430_CM_L4SEC_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0188)
|
||||
#define OMAP4_CM_L4SEC_AES1_CLKCTRL_OFFSET 0x01a0
|
||||
#define OMAP4430_CM_L4SEC_AES1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x01a0)
|
||||
#define OMAP4_CM_L4SEC_AES2_CLKCTRL_OFFSET 0x01a8
|
||||
#define OMAP4430_CM_L4SEC_AES2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x01a8)
|
||||
#define OMAP4_CM_L4SEC_DES3DES_CLKCTRL_OFFSET 0x01b0
|
||||
#define OMAP4430_CM_L4SEC_DES3DES_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x01b0)
|
||||
#define OMAP4_CM_L4SEC_PKAEIP29_CLKCTRL_OFFSET 0x01b8
|
||||
#define OMAP4430_CM_L4SEC_PKAEIP29_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x01b8)
|
||||
#define OMAP4_CM_L4SEC_RNG_CLKCTRL_OFFSET 0x01c0
|
||||
#define OMAP4430_CM_L4SEC_RNG_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x01c0)
|
||||
#define OMAP4_CM_L4SEC_SHA2MD51_CLKCTRL_OFFSET 0x01c8
|
||||
#define OMAP4430_CM_L4SEC_SHA2MD51_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x01c8)
|
||||
#define OMAP4_CM_L4SEC_CRYPTODMA_CLKCTRL_OFFSET 0x01d8
|
||||
#define OMAP4430_CM_L4SEC_CRYPTODMA_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x01d8)
|
||||
|
||||
/* CM2.CEFUSE_CM2 register offsets */
|
||||
#define OMAP4_CM_CEFUSE_CLKSTCTRL_OFFSET 0x0000
|
||||
#define OMAP4430_CM_CEFUSE_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CEFUSE_INST, 0x0000)
|
||||
#define OMAP4_CM_CEFUSE_CEFUSE_CLKCTRL_OFFSET 0x0020
|
||||
#define OMAP4430_CM_CEFUSE_CEFUSE_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CEFUSE_INST, 0x0020)
|
||||
|
||||
/* CM2.RESTORE_CM2 register offsets */
|
||||
#define OMAP4_CM_L3_1_CLKSTCTRL_RESTORE_OFFSET 0x0000
|
||||
#define OMAP4430_CM_L3_1_CLKSTCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x0000)
|
||||
#define OMAP4_CM_L3_2_CLKSTCTRL_RESTORE_OFFSET 0x0004
|
||||
#define OMAP4430_CM_L3_2_CLKSTCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x0004)
|
||||
#define OMAP4_CM_L4CFG_CLKSTCTRL_RESTORE_OFFSET 0x0008
|
||||
#define OMAP4430_CM_L4CFG_CLKSTCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x0008)
|
||||
#define OMAP4_CM_MEMIF_CLKSTCTRL_RESTORE_OFFSET 0x000c
|
||||
#define OMAP4430_CM_MEMIF_CLKSTCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x000c)
|
||||
#define OMAP4_CM_L4PER_CLKSTCTRL_RESTORE_OFFSET 0x0010
|
||||
#define OMAP4430_CM_L4PER_CLKSTCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x0010)
|
||||
#define OMAP4_CM_L3INIT_CLKSTCTRL_RESTORE_OFFSET 0x0014
|
||||
#define OMAP4430_CM_L3INIT_CLKSTCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x0014)
|
||||
#define OMAP4_CM_L3INSTR_L3_3_CLKCTRL_RESTORE_OFFSET 0x0018
|
||||
#define OMAP4430_CM_L3INSTR_L3_3_CLKCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x0018)
|
||||
#define OMAP4_CM_L3INSTR_L3_INSTR_CLKCTRL_RESTORE_OFFSET 0x001c
|
||||
#define OMAP4430_CM_L3INSTR_L3_INSTR_CLKCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x001c)
|
||||
#define OMAP4_CM_L3INSTR_OCP_WP1_CLKCTRL_RESTORE_OFFSET 0x0020
|
||||
#define OMAP4430_CM_L3INSTR_OCP_WP1_CLKCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x0020)
|
||||
#define OMAP4_CM_CM2_PROFILING_CLKCTRL_RESTORE_OFFSET 0x0024
|
||||
#define OMAP4430_CM_CM2_PROFILING_CLKCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x0024)
|
||||
#define OMAP4_CM_D2D_STATICDEP_RESTORE_OFFSET 0x0028
|
||||
#define OMAP4430_CM_D2D_STATICDEP_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x0028)
|
||||
#define OMAP4_CM_L3_1_DYNAMICDEP_RESTORE_OFFSET 0x002c
|
||||
#define OMAP4430_CM_L3_1_DYNAMICDEP_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x002c)
|
||||
#define OMAP4_CM_L3_2_DYNAMICDEP_RESTORE_OFFSET 0x0030
|
||||
#define OMAP4430_CM_L3_2_DYNAMICDEP_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x0030)
|
||||
#define OMAP4_CM_D2D_DYNAMICDEP_RESTORE_OFFSET 0x0034
|
||||
#define OMAP4430_CM_D2D_DYNAMICDEP_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x0034)
|
||||
#define OMAP4_CM_L4CFG_DYNAMICDEP_RESTORE_OFFSET 0x0038
|
||||
#define OMAP4430_CM_L4CFG_DYNAMICDEP_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x0038)
|
||||
#define OMAP4_CM_L4PER_DYNAMICDEP_RESTORE_OFFSET 0x003c
|
||||
#define OMAP4430_CM_L4PER_DYNAMICDEP_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x003c)
|
||||
#define OMAP4_CM_L4PER_GPIO2_CLKCTRL_RESTORE_OFFSET 0x0040
|
||||
#define OMAP4430_CM_L4PER_GPIO2_CLKCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x0040)
|
||||
#define OMAP4_CM_L4PER_GPIO3_CLKCTRL_RESTORE_OFFSET 0x0044
|
||||
#define OMAP4430_CM_L4PER_GPIO3_CLKCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x0044)
|
||||
#define OMAP4_CM_L4PER_GPIO4_CLKCTRL_RESTORE_OFFSET 0x0048
|
||||
#define OMAP4430_CM_L4PER_GPIO4_CLKCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x0048)
|
||||
#define OMAP4_CM_L4PER_GPIO5_CLKCTRL_RESTORE_OFFSET 0x004c
|
||||
#define OMAP4430_CM_L4PER_GPIO5_CLKCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x004c)
|
||||
#define OMAP4_CM_L4PER_GPIO6_CLKCTRL_RESTORE_OFFSET 0x0050
|
||||
#define OMAP4430_CM_L4PER_GPIO6_CLKCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x0050)
|
||||
#define OMAP4_CM_L3INIT_USB_HOST_CLKCTRL_RESTORE_OFFSET 0x0054
|
||||
#define OMAP4430_CM_L3INIT_USB_HOST_CLKCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x0054)
|
||||
#define OMAP4_CM_L3INIT_USB_TLL_CLKCTRL_RESTORE_OFFSET 0x0058
|
||||
#define OMAP4430_CM_L3INIT_USB_TLL_CLKCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x0058)
|
||||
#define OMAP4_CM_SDMA_STATICDEP_RESTORE_OFFSET 0x005c
|
||||
#define OMAP4430_CM_SDMA_STATICDEP_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x005c)
|
||||
|
||||
/* Function prototypes */
|
||||
extern u32 omap4_cm2_read_inst_reg(s16 inst, u16 idx);
|
||||
extern void omap4_cm2_write_inst_reg(u32 val, s16 inst, u16 idx);
|
||||
extern u32 omap4_cm2_rmw_inst_reg_bits(u32 mask, u32 bits, s16 inst, s16 idx);
|
||||
|
||||
#endif
|
471
arch/arm/mach-omap2/cm2xxx_3xxx.c
Normal file
471
arch/arm/mach-omap2/cm2xxx_3xxx.c
Normal file
|
@ -0,0 +1,471 @@
|
|||
/*
|
||||
* OMAP2/3 CM module functions
|
||||
*
|
||||
* Copyright (C) 2009 Nokia Corporation
|
||||
* Paul Walmsley
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include <plat/common.h>
|
||||
|
||||
#include "cm.h"
|
||||
#include "cm2xxx_3xxx.h"
|
||||
#include "cm-regbits-24xx.h"
|
||||
#include "cm-regbits-34xx.h"
|
||||
|
||||
static const u8 cm_idlest_offs[] = {
|
||||
CM_IDLEST1, CM_IDLEST2, OMAP2430_CM_IDLEST3
|
||||
};
|
||||
|
||||
u32 omap2_cm_read_mod_reg(s16 module, u16 idx)
|
||||
{
|
||||
return __raw_readl(cm_base + module + idx);
|
||||
}
|
||||
|
||||
void omap2_cm_write_mod_reg(u32 val, s16 module, u16 idx)
|
||||
{
|
||||
__raw_writel(val, cm_base + module + idx);
|
||||
}
|
||||
|
||||
/* Read-modify-write a register in a CM module. Caller must lock */
|
||||
u32 omap2_cm_rmw_mod_reg_bits(u32 mask, u32 bits, s16 module, s16 idx)
|
||||
{
|
||||
u32 v;
|
||||
|
||||
v = omap2_cm_read_mod_reg(module, idx);
|
||||
v &= ~mask;
|
||||
v |= bits;
|
||||
omap2_cm_write_mod_reg(v, module, idx);
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
u32 omap2_cm_set_mod_reg_bits(u32 bits, s16 module, s16 idx)
|
||||
{
|
||||
return omap2_cm_rmw_mod_reg_bits(bits, bits, module, idx);
|
||||
}
|
||||
|
||||
u32 omap2_cm_clear_mod_reg_bits(u32 bits, s16 module, s16 idx)
|
||||
{
|
||||
return omap2_cm_rmw_mod_reg_bits(bits, 0x0, module, idx);
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
*/
|
||||
|
||||
static void _write_clktrctrl(u8 c, s16 module, u32 mask)
|
||||
{
|
||||
u32 v;
|
||||
|
||||
v = omap2_cm_read_mod_reg(module, OMAP2_CM_CLKSTCTRL);
|
||||
v &= ~mask;
|
||||
v |= c << __ffs(mask);
|
||||
omap2_cm_write_mod_reg(v, module, OMAP2_CM_CLKSTCTRL);
|
||||
}
|
||||
|
||||
bool omap2_cm_is_clkdm_in_hwsup(s16 module, u32 mask)
|
||||
{
|
||||
u32 v;
|
||||
bool ret = 0;
|
||||
|
||||
BUG_ON(!cpu_is_omap24xx() && !cpu_is_omap34xx());
|
||||
|
||||
v = omap2_cm_read_mod_reg(module, OMAP2_CM_CLKSTCTRL);
|
||||
v &= mask;
|
||||
v >>= __ffs(mask);
|
||||
|
||||
if (cpu_is_omap24xx())
|
||||
ret = (v == OMAP24XX_CLKSTCTRL_ENABLE_AUTO) ? 1 : 0;
|
||||
else
|
||||
ret = (v == OMAP34XX_CLKSTCTRL_ENABLE_AUTO) ? 1 : 0;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void omap2xxx_cm_clkdm_enable_hwsup(s16 module, u32 mask)
|
||||
{
|
||||
_write_clktrctrl(OMAP24XX_CLKSTCTRL_ENABLE_AUTO, module, mask);
|
||||
}
|
||||
|
||||
void omap2xxx_cm_clkdm_disable_hwsup(s16 module, u32 mask)
|
||||
{
|
||||
_write_clktrctrl(OMAP24XX_CLKSTCTRL_DISABLE_AUTO, module, mask);
|
||||
}
|
||||
|
||||
void omap3xxx_cm_clkdm_enable_hwsup(s16 module, u32 mask)
|
||||
{
|
||||
_write_clktrctrl(OMAP34XX_CLKSTCTRL_ENABLE_AUTO, module, mask);
|
||||
}
|
||||
|
||||
void omap3xxx_cm_clkdm_disable_hwsup(s16 module, u32 mask)
|
||||
{
|
||||
_write_clktrctrl(OMAP34XX_CLKSTCTRL_DISABLE_AUTO, module, mask);
|
||||
}
|
||||
|
||||
void omap3xxx_cm_clkdm_force_sleep(s16 module, u32 mask)
|
||||
{
|
||||
_write_clktrctrl(OMAP34XX_CLKSTCTRL_FORCE_SLEEP, module, mask);
|
||||
}
|
||||
|
||||
void omap3xxx_cm_clkdm_force_wakeup(s16 module, u32 mask)
|
||||
{
|
||||
_write_clktrctrl(OMAP34XX_CLKSTCTRL_FORCE_WAKEUP, module, mask);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* omap2_cm_wait_idlest_ready - wait for a module to leave idle or standby
|
||||
* @prcm_mod: PRCM module offset
|
||||
* @idlest_id: CM_IDLESTx register ID (i.e., x = 1, 2, 3)
|
||||
* @idlest_shift: shift of the bit in the CM_IDLEST* register to check
|
||||
*
|
||||
* XXX document
|
||||
*/
|
||||
int omap2_cm_wait_module_ready(s16 prcm_mod, u8 idlest_id, u8 idlest_shift)
|
||||
{
|
||||
int ena = 0, i = 0;
|
||||
u8 cm_idlest_reg;
|
||||
u32 mask;
|
||||
|
||||
if (!idlest_id || (idlest_id > ARRAY_SIZE(cm_idlest_offs)))
|
||||
return -EINVAL;
|
||||
|
||||
cm_idlest_reg = cm_idlest_offs[idlest_id - 1];
|
||||
|
||||
mask = 1 << idlest_shift;
|
||||
|
||||
if (cpu_is_omap24xx())
|
||||
ena = mask;
|
||||
else if (cpu_is_omap34xx())
|
||||
ena = 0;
|
||||
else
|
||||
BUG();
|
||||
|
||||
omap_test_timeout(((omap2_cm_read_mod_reg(prcm_mod, cm_idlest_reg) & mask) == ena),
|
||||
MAX_MODULE_READY_TIME, i);
|
||||
|
||||
return (i < MAX_MODULE_READY_TIME) ? 0 : -EBUSY;
|
||||
}
|
||||
|
||||
/*
|
||||
* Context save/restore code - OMAP3 only
|
||||
*/
|
||||
#ifdef CONFIG_ARCH_OMAP3
|
||||
struct omap3_cm_regs {
|
||||
u32 iva2_cm_clksel1;
|
||||
u32 iva2_cm_clksel2;
|
||||
u32 cm_sysconfig;
|
||||
u32 sgx_cm_clksel;
|
||||
u32 dss_cm_clksel;
|
||||
u32 cam_cm_clksel;
|
||||
u32 per_cm_clksel;
|
||||
u32 emu_cm_clksel;
|
||||
u32 emu_cm_clkstctrl;
|
||||
u32 pll_cm_autoidle2;
|
||||
u32 pll_cm_clksel4;
|
||||
u32 pll_cm_clksel5;
|
||||
u32 pll_cm_clken2;
|
||||
u32 cm_polctrl;
|
||||
u32 iva2_cm_fclken;
|
||||
u32 iva2_cm_clken_pll;
|
||||
u32 core_cm_fclken1;
|
||||
u32 core_cm_fclken3;
|
||||
u32 sgx_cm_fclken;
|
||||
u32 wkup_cm_fclken;
|
||||
u32 dss_cm_fclken;
|
||||
u32 cam_cm_fclken;
|
||||
u32 per_cm_fclken;
|
||||
u32 usbhost_cm_fclken;
|
||||
u32 core_cm_iclken1;
|
||||
u32 core_cm_iclken2;
|
||||
u32 core_cm_iclken3;
|
||||
u32 sgx_cm_iclken;
|
||||
u32 wkup_cm_iclken;
|
||||
u32 dss_cm_iclken;
|
||||
u32 cam_cm_iclken;
|
||||
u32 per_cm_iclken;
|
||||
u32 usbhost_cm_iclken;
|
||||
u32 iva2_cm_autoidle2;
|
||||
u32 mpu_cm_autoidle2;
|
||||
u32 iva2_cm_clkstctrl;
|
||||
u32 mpu_cm_clkstctrl;
|
||||
u32 core_cm_clkstctrl;
|
||||
u32 sgx_cm_clkstctrl;
|
||||
u32 dss_cm_clkstctrl;
|
||||
u32 cam_cm_clkstctrl;
|
||||
u32 per_cm_clkstctrl;
|
||||
u32 neon_cm_clkstctrl;
|
||||
u32 usbhost_cm_clkstctrl;
|
||||
u32 core_cm_autoidle1;
|
||||
u32 core_cm_autoidle2;
|
||||
u32 core_cm_autoidle3;
|
||||
u32 wkup_cm_autoidle;
|
||||
u32 dss_cm_autoidle;
|
||||
u32 cam_cm_autoidle;
|
||||
u32 per_cm_autoidle;
|
||||
u32 usbhost_cm_autoidle;
|
||||
u32 sgx_cm_sleepdep;
|
||||
u32 dss_cm_sleepdep;
|
||||
u32 cam_cm_sleepdep;
|
||||
u32 per_cm_sleepdep;
|
||||
u32 usbhost_cm_sleepdep;
|
||||
u32 cm_clkout_ctrl;
|
||||
};
|
||||
|
||||
static struct omap3_cm_regs cm_context;
|
||||
|
||||
void omap3_cm_save_context(void)
|
||||
{
|
||||
cm_context.iva2_cm_clksel1 =
|
||||
omap2_cm_read_mod_reg(OMAP3430_IVA2_MOD, CM_CLKSEL1);
|
||||
cm_context.iva2_cm_clksel2 =
|
||||
omap2_cm_read_mod_reg(OMAP3430_IVA2_MOD, CM_CLKSEL2);
|
||||
cm_context.cm_sysconfig = __raw_readl(OMAP3430_CM_SYSCONFIG);
|
||||
cm_context.sgx_cm_clksel =
|
||||
omap2_cm_read_mod_reg(OMAP3430ES2_SGX_MOD, CM_CLKSEL);
|
||||
cm_context.dss_cm_clksel =
|
||||
omap2_cm_read_mod_reg(OMAP3430_DSS_MOD, CM_CLKSEL);
|
||||
cm_context.cam_cm_clksel =
|
||||
omap2_cm_read_mod_reg(OMAP3430_CAM_MOD, CM_CLKSEL);
|
||||
cm_context.per_cm_clksel =
|
||||
omap2_cm_read_mod_reg(OMAP3430_PER_MOD, CM_CLKSEL);
|
||||
cm_context.emu_cm_clksel =
|
||||
omap2_cm_read_mod_reg(OMAP3430_EMU_MOD, CM_CLKSEL1);
|
||||
cm_context.emu_cm_clkstctrl =
|
||||
omap2_cm_read_mod_reg(OMAP3430_EMU_MOD, OMAP2_CM_CLKSTCTRL);
|
||||
cm_context.pll_cm_autoidle2 =
|
||||
omap2_cm_read_mod_reg(PLL_MOD, CM_AUTOIDLE2);
|
||||
cm_context.pll_cm_clksel4 =
|
||||
omap2_cm_read_mod_reg(PLL_MOD, OMAP3430ES2_CM_CLKSEL4);
|
||||
cm_context.pll_cm_clksel5 =
|
||||
omap2_cm_read_mod_reg(PLL_MOD, OMAP3430ES2_CM_CLKSEL5);
|
||||
cm_context.pll_cm_clken2 =
|
||||
omap2_cm_read_mod_reg(PLL_MOD, OMAP3430ES2_CM_CLKEN2);
|
||||
cm_context.cm_polctrl = __raw_readl(OMAP3430_CM_POLCTRL);
|
||||
cm_context.iva2_cm_fclken =
|
||||
omap2_cm_read_mod_reg(OMAP3430_IVA2_MOD, CM_FCLKEN);
|
||||
cm_context.iva2_cm_clken_pll =
|
||||
omap2_cm_read_mod_reg(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKEN_PLL);
|
||||
cm_context.core_cm_fclken1 =
|
||||
omap2_cm_read_mod_reg(CORE_MOD, CM_FCLKEN1);
|
||||
cm_context.core_cm_fclken3 =
|
||||
omap2_cm_read_mod_reg(CORE_MOD, OMAP3430ES2_CM_FCLKEN3);
|
||||
cm_context.sgx_cm_fclken =
|
||||
omap2_cm_read_mod_reg(OMAP3430ES2_SGX_MOD, CM_FCLKEN);
|
||||
cm_context.wkup_cm_fclken =
|
||||
omap2_cm_read_mod_reg(WKUP_MOD, CM_FCLKEN);
|
||||
cm_context.dss_cm_fclken =
|
||||
omap2_cm_read_mod_reg(OMAP3430_DSS_MOD, CM_FCLKEN);
|
||||
cm_context.cam_cm_fclken =
|
||||
omap2_cm_read_mod_reg(OMAP3430_CAM_MOD, CM_FCLKEN);
|
||||
cm_context.per_cm_fclken =
|
||||
omap2_cm_read_mod_reg(OMAP3430_PER_MOD, CM_FCLKEN);
|
||||
cm_context.usbhost_cm_fclken =
|
||||
omap2_cm_read_mod_reg(OMAP3430ES2_USBHOST_MOD, CM_FCLKEN);
|
||||
cm_context.core_cm_iclken1 =
|
||||
omap2_cm_read_mod_reg(CORE_MOD, CM_ICLKEN1);
|
||||
cm_context.core_cm_iclken2 =
|
||||
omap2_cm_read_mod_reg(CORE_MOD, CM_ICLKEN2);
|
||||
cm_context.core_cm_iclken3 =
|
||||
omap2_cm_read_mod_reg(CORE_MOD, CM_ICLKEN3);
|
||||
cm_context.sgx_cm_iclken =
|
||||
omap2_cm_read_mod_reg(OMAP3430ES2_SGX_MOD, CM_ICLKEN);
|
||||
cm_context.wkup_cm_iclken =
|
||||
omap2_cm_read_mod_reg(WKUP_MOD, CM_ICLKEN);
|
||||
cm_context.dss_cm_iclken =
|
||||
omap2_cm_read_mod_reg(OMAP3430_DSS_MOD, CM_ICLKEN);
|
||||
cm_context.cam_cm_iclken =
|
||||
omap2_cm_read_mod_reg(OMAP3430_CAM_MOD, CM_ICLKEN);
|
||||
cm_context.per_cm_iclken =
|
||||
omap2_cm_read_mod_reg(OMAP3430_PER_MOD, CM_ICLKEN);
|
||||
cm_context.usbhost_cm_iclken =
|
||||
omap2_cm_read_mod_reg(OMAP3430ES2_USBHOST_MOD, CM_ICLKEN);
|
||||
cm_context.iva2_cm_autoidle2 =
|
||||
omap2_cm_read_mod_reg(OMAP3430_IVA2_MOD, CM_AUTOIDLE2);
|
||||
cm_context.mpu_cm_autoidle2 =
|
||||
omap2_cm_read_mod_reg(MPU_MOD, CM_AUTOIDLE2);
|
||||
cm_context.iva2_cm_clkstctrl =
|
||||
omap2_cm_read_mod_reg(OMAP3430_IVA2_MOD, OMAP2_CM_CLKSTCTRL);
|
||||
cm_context.mpu_cm_clkstctrl =
|
||||
omap2_cm_read_mod_reg(MPU_MOD, OMAP2_CM_CLKSTCTRL);
|
||||
cm_context.core_cm_clkstctrl =
|
||||
omap2_cm_read_mod_reg(CORE_MOD, OMAP2_CM_CLKSTCTRL);
|
||||
cm_context.sgx_cm_clkstctrl =
|
||||
omap2_cm_read_mod_reg(OMAP3430ES2_SGX_MOD, OMAP2_CM_CLKSTCTRL);
|
||||
cm_context.dss_cm_clkstctrl =
|
||||
omap2_cm_read_mod_reg(OMAP3430_DSS_MOD, OMAP2_CM_CLKSTCTRL);
|
||||
cm_context.cam_cm_clkstctrl =
|
||||
omap2_cm_read_mod_reg(OMAP3430_CAM_MOD, OMAP2_CM_CLKSTCTRL);
|
||||
cm_context.per_cm_clkstctrl =
|
||||
omap2_cm_read_mod_reg(OMAP3430_PER_MOD, OMAP2_CM_CLKSTCTRL);
|
||||
cm_context.neon_cm_clkstctrl =
|
||||
omap2_cm_read_mod_reg(OMAP3430_NEON_MOD, OMAP2_CM_CLKSTCTRL);
|
||||
cm_context.usbhost_cm_clkstctrl =
|
||||
omap2_cm_read_mod_reg(OMAP3430ES2_USBHOST_MOD,
|
||||
OMAP2_CM_CLKSTCTRL);
|
||||
cm_context.core_cm_autoidle1 =
|
||||
omap2_cm_read_mod_reg(CORE_MOD, CM_AUTOIDLE1);
|
||||
cm_context.core_cm_autoidle2 =
|
||||
omap2_cm_read_mod_reg(CORE_MOD, CM_AUTOIDLE2);
|
||||
cm_context.core_cm_autoidle3 =
|
||||
omap2_cm_read_mod_reg(CORE_MOD, CM_AUTOIDLE3);
|
||||
cm_context.wkup_cm_autoidle =
|
||||
omap2_cm_read_mod_reg(WKUP_MOD, CM_AUTOIDLE);
|
||||
cm_context.dss_cm_autoidle =
|
||||
omap2_cm_read_mod_reg(OMAP3430_DSS_MOD, CM_AUTOIDLE);
|
||||
cm_context.cam_cm_autoidle =
|
||||
omap2_cm_read_mod_reg(OMAP3430_CAM_MOD, CM_AUTOIDLE);
|
||||
cm_context.per_cm_autoidle =
|
||||
omap2_cm_read_mod_reg(OMAP3430_PER_MOD, CM_AUTOIDLE);
|
||||
cm_context.usbhost_cm_autoidle =
|
||||
omap2_cm_read_mod_reg(OMAP3430ES2_USBHOST_MOD, CM_AUTOIDLE);
|
||||
cm_context.sgx_cm_sleepdep =
|
||||
omap2_cm_read_mod_reg(OMAP3430ES2_SGX_MOD,
|
||||
OMAP3430_CM_SLEEPDEP);
|
||||
cm_context.dss_cm_sleepdep =
|
||||
omap2_cm_read_mod_reg(OMAP3430_DSS_MOD, OMAP3430_CM_SLEEPDEP);
|
||||
cm_context.cam_cm_sleepdep =
|
||||
omap2_cm_read_mod_reg(OMAP3430_CAM_MOD, OMAP3430_CM_SLEEPDEP);
|
||||
cm_context.per_cm_sleepdep =
|
||||
omap2_cm_read_mod_reg(OMAP3430_PER_MOD, OMAP3430_CM_SLEEPDEP);
|
||||
cm_context.usbhost_cm_sleepdep =
|
||||
omap2_cm_read_mod_reg(OMAP3430ES2_USBHOST_MOD,
|
||||
OMAP3430_CM_SLEEPDEP);
|
||||
cm_context.cm_clkout_ctrl =
|
||||
omap2_cm_read_mod_reg(OMAP3430_CCR_MOD,
|
||||
OMAP3_CM_CLKOUT_CTRL_OFFSET);
|
||||
}
|
||||
|
||||
void omap3_cm_restore_context(void)
|
||||
{
|
||||
omap2_cm_write_mod_reg(cm_context.iva2_cm_clksel1, OMAP3430_IVA2_MOD,
|
||||
CM_CLKSEL1);
|
||||
omap2_cm_write_mod_reg(cm_context.iva2_cm_clksel2, OMAP3430_IVA2_MOD,
|
||||
CM_CLKSEL2);
|
||||
__raw_writel(cm_context.cm_sysconfig, OMAP3430_CM_SYSCONFIG);
|
||||
omap2_cm_write_mod_reg(cm_context.sgx_cm_clksel, OMAP3430ES2_SGX_MOD,
|
||||
CM_CLKSEL);
|
||||
omap2_cm_write_mod_reg(cm_context.dss_cm_clksel, OMAP3430_DSS_MOD,
|
||||
CM_CLKSEL);
|
||||
omap2_cm_write_mod_reg(cm_context.cam_cm_clksel, OMAP3430_CAM_MOD,
|
||||
CM_CLKSEL);
|
||||
omap2_cm_write_mod_reg(cm_context.per_cm_clksel, OMAP3430_PER_MOD,
|
||||
CM_CLKSEL);
|
||||
omap2_cm_write_mod_reg(cm_context.emu_cm_clksel, OMAP3430_EMU_MOD,
|
||||
CM_CLKSEL1);
|
||||
omap2_cm_write_mod_reg(cm_context.emu_cm_clkstctrl, OMAP3430_EMU_MOD,
|
||||
OMAP2_CM_CLKSTCTRL);
|
||||
omap2_cm_write_mod_reg(cm_context.pll_cm_autoidle2, PLL_MOD,
|
||||
CM_AUTOIDLE2);
|
||||
omap2_cm_write_mod_reg(cm_context.pll_cm_clksel4, PLL_MOD,
|
||||
OMAP3430ES2_CM_CLKSEL4);
|
||||
omap2_cm_write_mod_reg(cm_context.pll_cm_clksel5, PLL_MOD,
|
||||
OMAP3430ES2_CM_CLKSEL5);
|
||||
omap2_cm_write_mod_reg(cm_context.pll_cm_clken2, PLL_MOD,
|
||||
OMAP3430ES2_CM_CLKEN2);
|
||||
__raw_writel(cm_context.cm_polctrl, OMAP3430_CM_POLCTRL);
|
||||
omap2_cm_write_mod_reg(cm_context.iva2_cm_fclken, OMAP3430_IVA2_MOD,
|
||||
CM_FCLKEN);
|
||||
omap2_cm_write_mod_reg(cm_context.iva2_cm_clken_pll, OMAP3430_IVA2_MOD,
|
||||
OMAP3430_CM_CLKEN_PLL);
|
||||
omap2_cm_write_mod_reg(cm_context.core_cm_fclken1, CORE_MOD,
|
||||
CM_FCLKEN1);
|
||||
omap2_cm_write_mod_reg(cm_context.core_cm_fclken3, CORE_MOD,
|
||||
OMAP3430ES2_CM_FCLKEN3);
|
||||
omap2_cm_write_mod_reg(cm_context.sgx_cm_fclken, OMAP3430ES2_SGX_MOD,
|
||||
CM_FCLKEN);
|
||||
omap2_cm_write_mod_reg(cm_context.wkup_cm_fclken, WKUP_MOD, CM_FCLKEN);
|
||||
omap2_cm_write_mod_reg(cm_context.dss_cm_fclken, OMAP3430_DSS_MOD,
|
||||
CM_FCLKEN);
|
||||
omap2_cm_write_mod_reg(cm_context.cam_cm_fclken, OMAP3430_CAM_MOD,
|
||||
CM_FCLKEN);
|
||||
omap2_cm_write_mod_reg(cm_context.per_cm_fclken, OMAP3430_PER_MOD,
|
||||
CM_FCLKEN);
|
||||
omap2_cm_write_mod_reg(cm_context.usbhost_cm_fclken,
|
||||
OMAP3430ES2_USBHOST_MOD, CM_FCLKEN);
|
||||
omap2_cm_write_mod_reg(cm_context.core_cm_iclken1, CORE_MOD,
|
||||
CM_ICLKEN1);
|
||||
omap2_cm_write_mod_reg(cm_context.core_cm_iclken2, CORE_MOD,
|
||||
CM_ICLKEN2);
|
||||
omap2_cm_write_mod_reg(cm_context.core_cm_iclken3, CORE_MOD,
|
||||
CM_ICLKEN3);
|
||||
omap2_cm_write_mod_reg(cm_context.sgx_cm_iclken, OMAP3430ES2_SGX_MOD,
|
||||
CM_ICLKEN);
|
||||
omap2_cm_write_mod_reg(cm_context.wkup_cm_iclken, WKUP_MOD, CM_ICLKEN);
|
||||
omap2_cm_write_mod_reg(cm_context.dss_cm_iclken, OMAP3430_DSS_MOD,
|
||||
CM_ICLKEN);
|
||||
omap2_cm_write_mod_reg(cm_context.cam_cm_iclken, OMAP3430_CAM_MOD,
|
||||
CM_ICLKEN);
|
||||
omap2_cm_write_mod_reg(cm_context.per_cm_iclken, OMAP3430_PER_MOD,
|
||||
CM_ICLKEN);
|
||||
omap2_cm_write_mod_reg(cm_context.usbhost_cm_iclken,
|
||||
OMAP3430ES2_USBHOST_MOD, CM_ICLKEN);
|
||||
omap2_cm_write_mod_reg(cm_context.iva2_cm_autoidle2, OMAP3430_IVA2_MOD,
|
||||
CM_AUTOIDLE2);
|
||||
omap2_cm_write_mod_reg(cm_context.mpu_cm_autoidle2, MPU_MOD,
|
||||
CM_AUTOIDLE2);
|
||||
omap2_cm_write_mod_reg(cm_context.iva2_cm_clkstctrl, OMAP3430_IVA2_MOD,
|
||||
OMAP2_CM_CLKSTCTRL);
|
||||
omap2_cm_write_mod_reg(cm_context.mpu_cm_clkstctrl, MPU_MOD,
|
||||
OMAP2_CM_CLKSTCTRL);
|
||||
omap2_cm_write_mod_reg(cm_context.core_cm_clkstctrl, CORE_MOD,
|
||||
OMAP2_CM_CLKSTCTRL);
|
||||
omap2_cm_write_mod_reg(cm_context.sgx_cm_clkstctrl, OMAP3430ES2_SGX_MOD,
|
||||
OMAP2_CM_CLKSTCTRL);
|
||||
omap2_cm_write_mod_reg(cm_context.dss_cm_clkstctrl, OMAP3430_DSS_MOD,
|
||||
OMAP2_CM_CLKSTCTRL);
|
||||
omap2_cm_write_mod_reg(cm_context.cam_cm_clkstctrl, OMAP3430_CAM_MOD,
|
||||
OMAP2_CM_CLKSTCTRL);
|
||||
omap2_cm_write_mod_reg(cm_context.per_cm_clkstctrl, OMAP3430_PER_MOD,
|
||||
OMAP2_CM_CLKSTCTRL);
|
||||
omap2_cm_write_mod_reg(cm_context.neon_cm_clkstctrl, OMAP3430_NEON_MOD,
|
||||
OMAP2_CM_CLKSTCTRL);
|
||||
omap2_cm_write_mod_reg(cm_context.usbhost_cm_clkstctrl,
|
||||
OMAP3430ES2_USBHOST_MOD, OMAP2_CM_CLKSTCTRL);
|
||||
omap2_cm_write_mod_reg(cm_context.core_cm_autoidle1, CORE_MOD,
|
||||
CM_AUTOIDLE1);
|
||||
omap2_cm_write_mod_reg(cm_context.core_cm_autoidle2, CORE_MOD,
|
||||
CM_AUTOIDLE2);
|
||||
omap2_cm_write_mod_reg(cm_context.core_cm_autoidle3, CORE_MOD,
|
||||
CM_AUTOIDLE3);
|
||||
omap2_cm_write_mod_reg(cm_context.wkup_cm_autoidle, WKUP_MOD,
|
||||
CM_AUTOIDLE);
|
||||
omap2_cm_write_mod_reg(cm_context.dss_cm_autoidle, OMAP3430_DSS_MOD,
|
||||
CM_AUTOIDLE);
|
||||
omap2_cm_write_mod_reg(cm_context.cam_cm_autoidle, OMAP3430_CAM_MOD,
|
||||
CM_AUTOIDLE);
|
||||
omap2_cm_write_mod_reg(cm_context.per_cm_autoidle, OMAP3430_PER_MOD,
|
||||
CM_AUTOIDLE);
|
||||
omap2_cm_write_mod_reg(cm_context.usbhost_cm_autoidle,
|
||||
OMAP3430ES2_USBHOST_MOD, CM_AUTOIDLE);
|
||||
omap2_cm_write_mod_reg(cm_context.sgx_cm_sleepdep, OMAP3430ES2_SGX_MOD,
|
||||
OMAP3430_CM_SLEEPDEP);
|
||||
omap2_cm_write_mod_reg(cm_context.dss_cm_sleepdep, OMAP3430_DSS_MOD,
|
||||
OMAP3430_CM_SLEEPDEP);
|
||||
omap2_cm_write_mod_reg(cm_context.cam_cm_sleepdep, OMAP3430_CAM_MOD,
|
||||
OMAP3430_CM_SLEEPDEP);
|
||||
omap2_cm_write_mod_reg(cm_context.per_cm_sleepdep, OMAP3430_PER_MOD,
|
||||
OMAP3430_CM_SLEEPDEP);
|
||||
omap2_cm_write_mod_reg(cm_context.usbhost_cm_sleepdep,
|
||||
OMAP3430ES2_USBHOST_MOD, OMAP3430_CM_SLEEPDEP);
|
||||
omap2_cm_write_mod_reg(cm_context.cm_clkout_ctrl, OMAP3430_CCR_MOD,
|
||||
OMAP3_CM_CLKOUT_CTRL_OFFSET);
|
||||
}
|
||||
#endif
|
147
arch/arm/mach-omap2/cm2xxx_3xxx.h
Normal file
147
arch/arm/mach-omap2/cm2xxx_3xxx.h
Normal file
|
@ -0,0 +1,147 @@
|
|||
/*
|
||||
* OMAP2/3 Clock Management (CM) register definitions
|
||||
*
|
||||
* Copyright (C) 2007-2009 Texas Instruments, Inc.
|
||||
* Copyright (C) 2007-2010 Nokia Corporation
|
||||
* Paul Walmsley
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* The CM hardware modules on the OMAP2/3 are quite similar to each
|
||||
* other. The CM modules/instances on OMAP4 are quite different, so
|
||||
* they are handled in a separate file.
|
||||
*/
|
||||
#ifndef __ARCH_ASM_MACH_OMAP2_CM2XXX_3XXX_H
|
||||
#define __ARCH_ASM_MACH_OMAP2_CM2XXX_3XXX_H
|
||||
|
||||
#include "prcm-common.h"
|
||||
|
||||
#define OMAP2420_CM_REGADDR(module, reg) \
|
||||
OMAP2_L4_IO_ADDRESS(OMAP2420_CM_BASE + (module) + (reg))
|
||||
#define OMAP2430_CM_REGADDR(module, reg) \
|
||||
OMAP2_L4_IO_ADDRESS(OMAP2430_CM_BASE + (module) + (reg))
|
||||
#define OMAP34XX_CM_REGADDR(module, reg) \
|
||||
OMAP2_L4_IO_ADDRESS(OMAP3430_CM_BASE + (module) + (reg))
|
||||
|
||||
|
||||
/*
|
||||
* OMAP3-specific global CM registers
|
||||
* Use cm_{read,write}_reg() with these registers.
|
||||
* These registers appear once per CM module.
|
||||
*/
|
||||
|
||||
#define OMAP3430_CM_REVISION OMAP34XX_CM_REGADDR(OCP_MOD, 0x0000)
|
||||
#define OMAP3430_CM_SYSCONFIG OMAP34XX_CM_REGADDR(OCP_MOD, 0x0010)
|
||||
#define OMAP3430_CM_POLCTRL OMAP34XX_CM_REGADDR(OCP_MOD, 0x009c)
|
||||
|
||||
#define OMAP3_CM_CLKOUT_CTRL_OFFSET 0x0070
|
||||
#define OMAP3430_CM_CLKOUT_CTRL OMAP_CM_REGADDR(OMAP3430_CCR_MOD, 0x0070)
|
||||
|
||||
/*
|
||||
* Module specific CM register offsets from CM_BASE + domain offset
|
||||
* Use cm_{read,write}_mod_reg() with these registers.
|
||||
* These register offsets generally appear in more than one PRCM submodule.
|
||||
*/
|
||||
|
||||
/* Common between OMAP2 and OMAP3 */
|
||||
|
||||
#define CM_FCLKEN 0x0000
|
||||
#define CM_FCLKEN1 CM_FCLKEN
|
||||
#define CM_CLKEN CM_FCLKEN
|
||||
#define CM_ICLKEN 0x0010
|
||||
#define CM_ICLKEN1 CM_ICLKEN
|
||||
#define CM_ICLKEN2 0x0014
|
||||
#define CM_ICLKEN3 0x0018
|
||||
#define CM_IDLEST 0x0020
|
||||
#define CM_IDLEST1 CM_IDLEST
|
||||
#define CM_IDLEST2 0x0024
|
||||
#define CM_AUTOIDLE 0x0030
|
||||
#define CM_AUTOIDLE1 CM_AUTOIDLE
|
||||
#define CM_AUTOIDLE2 0x0034
|
||||
#define CM_AUTOIDLE3 0x0038
|
||||
#define CM_CLKSEL 0x0040
|
||||
#define CM_CLKSEL1 CM_CLKSEL
|
||||
#define CM_CLKSEL2 0x0044
|
||||
#define OMAP2_CM_CLKSTCTRL 0x0048
|
||||
|
||||
/* OMAP2-specific register offsets */
|
||||
|
||||
#define OMAP24XX_CM_FCLKEN2 0x0004
|
||||
#define OMAP24XX_CM_ICLKEN4 0x001c
|
||||
#define OMAP24XX_CM_AUTOIDLE4 0x003c
|
||||
|
||||
#define OMAP2430_CM_IDLEST3 0x0028
|
||||
|
||||
/* OMAP3-specific register offsets */
|
||||
|
||||
#define OMAP3430_CM_CLKEN_PLL 0x0004
|
||||
#define OMAP3430ES2_CM_CLKEN2 0x0004
|
||||
#define OMAP3430ES2_CM_FCLKEN3 0x0008
|
||||
#define OMAP3430_CM_IDLEST_PLL CM_IDLEST2
|
||||
#define OMAP3430_CM_AUTOIDLE_PLL CM_AUTOIDLE2
|
||||
#define OMAP3430ES2_CM_AUTOIDLE2_PLL CM_AUTOIDLE2
|
||||
#define OMAP3430_CM_CLKSEL1 CM_CLKSEL
|
||||
#define OMAP3430_CM_CLKSEL1_PLL CM_CLKSEL
|
||||
#define OMAP3430_CM_CLKSEL2_PLL CM_CLKSEL2
|
||||
#define OMAP3430_CM_SLEEPDEP CM_CLKSEL2
|
||||
#define OMAP3430_CM_CLKSEL3 OMAP2_CM_CLKSTCTRL
|
||||
#define OMAP3430_CM_CLKSTST 0x004c
|
||||
#define OMAP3430ES2_CM_CLKSEL4 0x004c
|
||||
#define OMAP3430ES2_CM_CLKSEL5 0x0050
|
||||
#define OMAP3430_CM_CLKSEL2_EMU 0x0050
|
||||
#define OMAP3430_CM_CLKSEL3_EMU 0x0054
|
||||
|
||||
|
||||
/* CM_IDLEST bit field values to indicate deasserted IdleReq */
|
||||
|
||||
#define OMAP24XX_CM_IDLEST_VAL 0
|
||||
#define OMAP34XX_CM_IDLEST_VAL 1
|
||||
|
||||
|
||||
/* Clock management domain register get/set */
|
||||
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
extern u32 omap2_cm_read_mod_reg(s16 module, u16 idx);
|
||||
extern void omap2_cm_write_mod_reg(u32 val, s16 module, u16 idx);
|
||||
extern u32 omap2_cm_rmw_mod_reg_bits(u32 mask, u32 bits, s16 module, s16 idx);
|
||||
|
||||
extern int omap2_cm_wait_module_ready(s16 prcm_mod, u8 idlest_id,
|
||||
u8 idlest_shift);
|
||||
extern u32 omap2_cm_set_mod_reg_bits(u32 bits, s16 module, s16 idx);
|
||||
extern u32 omap2_cm_clear_mod_reg_bits(u32 bits, s16 module, s16 idx);
|
||||
|
||||
extern bool omap2_cm_is_clkdm_in_hwsup(s16 module, u32 mask);
|
||||
extern void omap2xxx_cm_clkdm_enable_hwsup(s16 module, u32 mask);
|
||||
extern void omap2xxx_cm_clkdm_disable_hwsup(s16 module, u32 mask);
|
||||
|
||||
extern void omap3xxx_cm_clkdm_enable_hwsup(s16 module, u32 mask);
|
||||
extern void omap3xxx_cm_clkdm_disable_hwsup(s16 module, u32 mask);
|
||||
extern void omap3xxx_cm_clkdm_force_sleep(s16 module, u32 mask);
|
||||
extern void omap3xxx_cm_clkdm_force_wakeup(s16 module, u32 mask);
|
||||
|
||||
#endif
|
||||
|
||||
/* CM register bits shared between 24XX and 3430 */
|
||||
|
||||
/* CM_CLKSEL_GFX */
|
||||
#define OMAP_CLKSEL_GFX_SHIFT 0
|
||||
#define OMAP_CLKSEL_GFX_MASK (0x7 << 0)
|
||||
|
||||
/* CM_ICLKEN_GFX */
|
||||
#define OMAP_EN_GFX_SHIFT 0
|
||||
#define OMAP_EN_GFX_MASK (1 << 0)
|
||||
|
||||
/* CM_IDLEST_GFX */
|
||||
#define OMAP_ST_GFX_MASK (1 << 0)
|
||||
|
||||
|
||||
/* Function prototypes */
|
||||
# ifndef __ASSEMBLER__
|
||||
extern void omap3_cm_save_context(void);
|
||||
extern void omap3_cm_restore_context(void);
|
||||
# endif
|
||||
|
||||
#endif
|
52
arch/arm/mach-omap2/cm44xx.c
Normal file
52
arch/arm/mach-omap2/cm44xx.c
Normal file
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* OMAP4 CM1, CM2 module low-level functions
|
||||
*
|
||||
* Copyright (C) 2010 Nokia Corporation
|
||||
* Paul Walmsley
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* These functions are intended to be used only by the cminst44xx.c file.
|
||||
* XXX Perhaps we should just move them there and make them static.
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include <plat/common.h>
|
||||
|
||||
#include "cm.h"
|
||||
#include "cm1_44xx.h"
|
||||
#include "cm2_44xx.h"
|
||||
#include "cm-regbits-44xx.h"
|
||||
|
||||
/* CM1 hardware module low-level functions */
|
||||
|
||||
/* Read a register in CM1 */
|
||||
u32 omap4_cm1_read_inst_reg(s16 inst, u16 reg)
|
||||
{
|
||||
return __raw_readl(OMAP44XX_CM1_REGADDR(inst, reg));
|
||||
}
|
||||
|
||||
/* Write into a register in CM1 */
|
||||
void omap4_cm1_write_inst_reg(u32 val, s16 inst, u16 reg)
|
||||
{
|
||||
__raw_writel(val, OMAP44XX_CM1_REGADDR(inst, reg));
|
||||
}
|
||||
|
||||
/* Read a register in CM2 */
|
||||
u32 omap4_cm2_read_inst_reg(s16 inst, u16 reg)
|
||||
{
|
||||
return __raw_readl(OMAP44XX_CM2_REGADDR(inst, reg));
|
||||
}
|
||||
|
||||
/* Write into a register in CM2 */
|
||||
void omap4_cm2_write_inst_reg(u32 val, s16 inst, u16 reg)
|
||||
{
|
||||
__raw_writel(val, OMAP44XX_CM2_REGADDR(inst, reg));
|
||||
}
|
|
@ -1,667 +1,31 @@
|
|||
/*
|
||||
* OMAP44xx CM1 & CM2 instance offset macros
|
||||
* OMAP4 Clock Management (CM) definitions
|
||||
*
|
||||
* Copyright (C) 2009-2010 Texas Instruments, Inc.
|
||||
* Copyright (C) 2009-2010 Nokia Corporation
|
||||
* Copyright (C) 2007-2009 Texas Instruments, Inc.
|
||||
* Copyright (C) 2007-2009 Nokia Corporation
|
||||
*
|
||||
* Paul Walmsley (paul@pwsan.com)
|
||||
* Rajendra Nayak (rnayak@ti.com)
|
||||
* Benoit Cousson (b-cousson@ti.com)
|
||||
*
|
||||
* This file is automatically generated from the OMAP hardware databases.
|
||||
* We respectfully ask that any modifications to this file be coordinated
|
||||
* with the public linux-omap@vger.kernel.org mailing list and the
|
||||
* authors above to ensure that the autogeneration scripts are kept
|
||||
* up-to-date with the file contents.
|
||||
* Written by Paul Walmsley
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* OMAP4 has two separate CM blocks, CM1 and CM2. This file contains
|
||||
* macros and function prototypes that are applicable to both.
|
||||
*/
|
||||
|
||||
#ifndef __ARCH_ARM_MACH_OMAP2_CM44XX_H
|
||||
#define __ARCH_ARM_MACH_OMAP2_CM44XX_H
|
||||
#ifndef __ARCH_ASM_MACH_OMAP2_CM44XX_H
|
||||
#define __ARCH_ASM_MACH_OMAP2_CM44XX_H
|
||||
|
||||
|
||||
/* CM1 */
|
||||
#include "prcm-common.h"
|
||||
#include "cm.h"
|
||||
|
||||
/* CM1.OCP_SOCKET_CM1 register offsets */
|
||||
#define OMAP4_REVISION_CM1_OFFSET 0x0000
|
||||
#define OMAP4430_REVISION_CM1 OMAP44XX_CM1_REGADDR(OMAP4430_CM1_OCP_SOCKET_MOD, 0x0000)
|
||||
#define OMAP4_CM_CM1_PROFILING_CLKCTRL_OFFSET 0x0040
|
||||
#define OMAP4430_CM_CM1_PROFILING_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_OCP_SOCKET_MOD, 0x0040)
|
||||
#define OMAP4_CM_CLKSTCTRL 0x0000
|
||||
|
||||
/* CM1.CKGEN_CM1 register offsets */
|
||||
#define OMAP4_CM_CLKSEL_CORE_OFFSET 0x0000
|
||||
#define OMAP4430_CM_CLKSEL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0000)
|
||||
#define OMAP4_CM_CLKSEL_ABE_OFFSET 0x0008
|
||||
#define OMAP4430_CM_CLKSEL_ABE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0008)
|
||||
#define OMAP4_CM_DLL_CTRL_OFFSET 0x0010
|
||||
#define OMAP4430_CM_DLL_CTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0010)
|
||||
#define OMAP4_CM_CLKMODE_DPLL_CORE_OFFSET 0x0020
|
||||
#define OMAP4430_CM_CLKMODE_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0020)
|
||||
#define OMAP4_CM_IDLEST_DPLL_CORE_OFFSET 0x0024
|
||||
#define OMAP4430_CM_IDLEST_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0024)
|
||||
#define OMAP4_CM_AUTOIDLE_DPLL_CORE_OFFSET 0x0028
|
||||
#define OMAP4430_CM_AUTOIDLE_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0028)
|
||||
#define OMAP4_CM_CLKSEL_DPLL_CORE_OFFSET 0x002c
|
||||
#define OMAP4430_CM_CLKSEL_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x002c)
|
||||
#define OMAP4_CM_DIV_M2_DPLL_CORE_OFFSET 0x0030
|
||||
#define OMAP4430_CM_DIV_M2_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0030)
|
||||
#define OMAP4_CM_DIV_M3_DPLL_CORE_OFFSET 0x0034
|
||||
#define OMAP4430_CM_DIV_M3_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0034)
|
||||
#define OMAP4_CM_DIV_M4_DPLL_CORE_OFFSET 0x0038
|
||||
#define OMAP4430_CM_DIV_M4_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0038)
|
||||
#define OMAP4_CM_DIV_M5_DPLL_CORE_OFFSET 0x003c
|
||||
#define OMAP4430_CM_DIV_M5_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x003c)
|
||||
#define OMAP4_CM_DIV_M6_DPLL_CORE_OFFSET 0x0040
|
||||
#define OMAP4430_CM_DIV_M6_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0040)
|
||||
#define OMAP4_CM_DIV_M7_DPLL_CORE_OFFSET 0x0044
|
||||
#define OMAP4430_CM_DIV_M7_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0044)
|
||||
#define OMAP4_CM_SSC_DELTAMSTEP_DPLL_CORE_OFFSET 0x0048
|
||||
#define OMAP4430_CM_SSC_DELTAMSTEP_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0048)
|
||||
#define OMAP4_CM_SSC_MODFREQDIV_DPLL_CORE_OFFSET 0x004c
|
||||
#define OMAP4430_CM_SSC_MODFREQDIV_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x004c)
|
||||
#define OMAP4_CM_EMU_OVERRIDE_DPLL_CORE_OFFSET 0x0050
|
||||
#define OMAP4430_CM_EMU_OVERRIDE_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0050)
|
||||
#define OMAP4_CM_CLKMODE_DPLL_MPU_OFFSET 0x0060
|
||||
#define OMAP4430_CM_CLKMODE_DPLL_MPU OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0060)
|
||||
#define OMAP4_CM_IDLEST_DPLL_MPU_OFFSET 0x0064
|
||||
#define OMAP4430_CM_IDLEST_DPLL_MPU OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0064)
|
||||
#define OMAP4_CM_AUTOIDLE_DPLL_MPU_OFFSET 0x0068
|
||||
#define OMAP4430_CM_AUTOIDLE_DPLL_MPU OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0068)
|
||||
#define OMAP4_CM_CLKSEL_DPLL_MPU_OFFSET 0x006c
|
||||
#define OMAP4430_CM_CLKSEL_DPLL_MPU OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x006c)
|
||||
#define OMAP4_CM_DIV_M2_DPLL_MPU_OFFSET 0x0070
|
||||
#define OMAP4430_CM_DIV_M2_DPLL_MPU OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0070)
|
||||
#define OMAP4_CM_SSC_DELTAMSTEP_DPLL_MPU_OFFSET 0x0088
|
||||
#define OMAP4430_CM_SSC_DELTAMSTEP_DPLL_MPU OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0088)
|
||||
#define OMAP4_CM_SSC_MODFREQDIV_DPLL_MPU_OFFSET 0x008c
|
||||
#define OMAP4430_CM_SSC_MODFREQDIV_DPLL_MPU OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x008c)
|
||||
#define OMAP4_CM_BYPCLK_DPLL_MPU_OFFSET 0x009c
|
||||
#define OMAP4430_CM_BYPCLK_DPLL_MPU OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x009c)
|
||||
#define OMAP4_CM_CLKMODE_DPLL_IVA_OFFSET 0x00a0
|
||||
#define OMAP4430_CM_CLKMODE_DPLL_IVA OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x00a0)
|
||||
#define OMAP4_CM_IDLEST_DPLL_IVA_OFFSET 0x00a4
|
||||
#define OMAP4430_CM_IDLEST_DPLL_IVA OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x00a4)
|
||||
#define OMAP4_CM_AUTOIDLE_DPLL_IVA_OFFSET 0x00a8
|
||||
#define OMAP4430_CM_AUTOIDLE_DPLL_IVA OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x00a8)
|
||||
#define OMAP4_CM_CLKSEL_DPLL_IVA_OFFSET 0x00ac
|
||||
#define OMAP4430_CM_CLKSEL_DPLL_IVA OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x00ac)
|
||||
#define OMAP4_CM_DIV_M4_DPLL_IVA_OFFSET 0x00b8
|
||||
#define OMAP4430_CM_DIV_M4_DPLL_IVA OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x00b8)
|
||||
#define OMAP4_CM_DIV_M5_DPLL_IVA_OFFSET 0x00bc
|
||||
#define OMAP4430_CM_DIV_M5_DPLL_IVA OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x00bc)
|
||||
#define OMAP4_CM_SSC_DELTAMSTEP_DPLL_IVA_OFFSET 0x00c8
|
||||
#define OMAP4430_CM_SSC_DELTAMSTEP_DPLL_IVA OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x00c8)
|
||||
#define OMAP4_CM_SSC_MODFREQDIV_DPLL_IVA_OFFSET 0x00cc
|
||||
#define OMAP4430_CM_SSC_MODFREQDIV_DPLL_IVA OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x00cc)
|
||||
#define OMAP4_CM_BYPCLK_DPLL_IVA_OFFSET 0x00dc
|
||||
#define OMAP4430_CM_BYPCLK_DPLL_IVA OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x00dc)
|
||||
#define OMAP4_CM_CLKMODE_DPLL_ABE_OFFSET 0x00e0
|
||||
#define OMAP4430_CM_CLKMODE_DPLL_ABE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x00e0)
|
||||
#define OMAP4_CM_IDLEST_DPLL_ABE_OFFSET 0x00e4
|
||||
#define OMAP4430_CM_IDLEST_DPLL_ABE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x00e4)
|
||||
#define OMAP4_CM_AUTOIDLE_DPLL_ABE_OFFSET 0x00e8
|
||||
#define OMAP4430_CM_AUTOIDLE_DPLL_ABE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x00e8)
|
||||
#define OMAP4_CM_CLKSEL_DPLL_ABE_OFFSET 0x00ec
|
||||
#define OMAP4430_CM_CLKSEL_DPLL_ABE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x00ec)
|
||||
#define OMAP4_CM_DIV_M2_DPLL_ABE_OFFSET 0x00f0
|
||||
#define OMAP4430_CM_DIV_M2_DPLL_ABE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x00f0)
|
||||
#define OMAP4_CM_DIV_M3_DPLL_ABE_OFFSET 0x00f4
|
||||
#define OMAP4430_CM_DIV_M3_DPLL_ABE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x00f4)
|
||||
#define OMAP4_CM_SSC_DELTAMSTEP_DPLL_ABE_OFFSET 0x0108
|
||||
#define OMAP4430_CM_SSC_DELTAMSTEP_DPLL_ABE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0108)
|
||||
#define OMAP4_CM_SSC_MODFREQDIV_DPLL_ABE_OFFSET 0x010c
|
||||
#define OMAP4430_CM_SSC_MODFREQDIV_DPLL_ABE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x010c)
|
||||
#define OMAP4_CM_CLKMODE_DPLL_DDRPHY_OFFSET 0x0120
|
||||
#define OMAP4430_CM_CLKMODE_DPLL_DDRPHY OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0120)
|
||||
#define OMAP4_CM_IDLEST_DPLL_DDRPHY_OFFSET 0x0124
|
||||
#define OMAP4430_CM_IDLEST_DPLL_DDRPHY OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0124)
|
||||
#define OMAP4_CM_AUTOIDLE_DPLL_DDRPHY_OFFSET 0x0128
|
||||
#define OMAP4430_CM_AUTOIDLE_DPLL_DDRPHY OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0128)
|
||||
#define OMAP4_CM_CLKSEL_DPLL_DDRPHY_OFFSET 0x012c
|
||||
#define OMAP4430_CM_CLKSEL_DPLL_DDRPHY OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x012c)
|
||||
#define OMAP4_CM_DIV_M2_DPLL_DDRPHY_OFFSET 0x0130
|
||||
#define OMAP4430_CM_DIV_M2_DPLL_DDRPHY OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0130)
|
||||
#define OMAP4_CM_DIV_M4_DPLL_DDRPHY_OFFSET 0x0138
|
||||
#define OMAP4430_CM_DIV_M4_DPLL_DDRPHY OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0138)
|
||||
#define OMAP4_CM_DIV_M5_DPLL_DDRPHY_OFFSET 0x013c
|
||||
#define OMAP4430_CM_DIV_M5_DPLL_DDRPHY OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x013c)
|
||||
#define OMAP4_CM_DIV_M6_DPLL_DDRPHY_OFFSET 0x0140
|
||||
#define OMAP4430_CM_DIV_M6_DPLL_DDRPHY OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0140)
|
||||
#define OMAP4_CM_SSC_DELTAMSTEP_DPLL_DDRPHY_OFFSET 0x0148
|
||||
#define OMAP4430_CM_SSC_DELTAMSTEP_DPLL_DDRPHY OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0148)
|
||||
#define OMAP4_CM_SSC_MODFREQDIV_DPLL_DDRPHY_OFFSET 0x014c
|
||||
#define OMAP4430_CM_SSC_MODFREQDIV_DPLL_DDRPHY OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x014c)
|
||||
#define OMAP4_CM_SHADOW_FREQ_CONFIG1_OFFSET 0x0160
|
||||
#define OMAP4430_CM_SHADOW_FREQ_CONFIG1 OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0160)
|
||||
#define OMAP4_CM_SHADOW_FREQ_CONFIG2_OFFSET 0x0164
|
||||
#define OMAP4430_CM_SHADOW_FREQ_CONFIG2 OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0164)
|
||||
#define OMAP4_CM_DYN_DEP_PRESCAL_OFFSET 0x0170
|
||||
#define OMAP4430_CM_DYN_DEP_PRESCAL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0170)
|
||||
#define OMAP4_CM_RESTORE_ST_OFFSET 0x0180
|
||||
#define OMAP4430_CM_RESTORE_ST OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0180)
|
||||
/* Function prototypes */
|
||||
# ifndef __ASSEMBLER__
|
||||
|
||||
/* CM1.MPU_CM1 register offsets */
|
||||
#define OMAP4_CM_MPU_CLKSTCTRL_OFFSET 0x0000
|
||||
#define OMAP4430_CM_MPU_CLKSTCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_MPU_MOD, 0x0000)
|
||||
#define OMAP4_CM_MPU_STATICDEP_OFFSET 0x0004
|
||||
#define OMAP4430_CM_MPU_STATICDEP OMAP44XX_CM1_REGADDR(OMAP4430_CM1_MPU_MOD, 0x0004)
|
||||
#define OMAP4_CM_MPU_DYNAMICDEP_OFFSET 0x0008
|
||||
#define OMAP4430_CM_MPU_DYNAMICDEP OMAP44XX_CM1_REGADDR(OMAP4430_CM1_MPU_MOD, 0x0008)
|
||||
#define OMAP4_CM_MPU_MPU_CLKCTRL_OFFSET 0x0020
|
||||
#define OMAP4430_CM_MPU_MPU_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_MPU_MOD, 0x0020)
|
||||
extern int omap4_cm_wait_module_ready(void __iomem *clkctrl_reg);
|
||||
|
||||
/* CM1.TESLA_CM1 register offsets */
|
||||
#define OMAP4_CM_TESLA_CLKSTCTRL_OFFSET 0x0000
|
||||
#define OMAP4430_CM_TESLA_CLKSTCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_TESLA_MOD, 0x0000)
|
||||
#define OMAP4_CM_TESLA_STATICDEP_OFFSET 0x0004
|
||||
#define OMAP4430_CM_TESLA_STATICDEP OMAP44XX_CM1_REGADDR(OMAP4430_CM1_TESLA_MOD, 0x0004)
|
||||
#define OMAP4_CM_TESLA_DYNAMICDEP_OFFSET 0x0008
|
||||
#define OMAP4430_CM_TESLA_DYNAMICDEP OMAP44XX_CM1_REGADDR(OMAP4430_CM1_TESLA_MOD, 0x0008)
|
||||
#define OMAP4_CM_TESLA_TESLA_CLKCTRL_OFFSET 0x0020
|
||||
#define OMAP4430_CM_TESLA_TESLA_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_TESLA_MOD, 0x0020)
|
||||
|
||||
/* CM1.ABE_CM1 register offsets */
|
||||
#define OMAP4_CM1_ABE_CLKSTCTRL_OFFSET 0x0000
|
||||
#define OMAP4430_CM1_ABE_CLKSTCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_MOD, 0x0000)
|
||||
#define OMAP4_CM1_ABE_L4ABE_CLKCTRL_OFFSET 0x0020
|
||||
#define OMAP4430_CM1_ABE_L4ABE_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_MOD, 0x0020)
|
||||
#define OMAP4_CM1_ABE_AESS_CLKCTRL_OFFSET 0x0028
|
||||
#define OMAP4430_CM1_ABE_AESS_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_MOD, 0x0028)
|
||||
#define OMAP4_CM1_ABE_PDM_CLKCTRL_OFFSET 0x0030
|
||||
#define OMAP4430_CM1_ABE_PDM_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_MOD, 0x0030)
|
||||
#define OMAP4_CM1_ABE_DMIC_CLKCTRL_OFFSET 0x0038
|
||||
#define OMAP4430_CM1_ABE_DMIC_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_MOD, 0x0038)
|
||||
#define OMAP4_CM1_ABE_MCASP_CLKCTRL_OFFSET 0x0040
|
||||
#define OMAP4430_CM1_ABE_MCASP_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_MOD, 0x0040)
|
||||
#define OMAP4_CM1_ABE_MCBSP1_CLKCTRL_OFFSET 0x0048
|
||||
#define OMAP4430_CM1_ABE_MCBSP1_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_MOD, 0x0048)
|
||||
#define OMAP4_CM1_ABE_MCBSP2_CLKCTRL_OFFSET 0x0050
|
||||
#define OMAP4430_CM1_ABE_MCBSP2_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_MOD, 0x0050)
|
||||
#define OMAP4_CM1_ABE_MCBSP3_CLKCTRL_OFFSET 0x0058
|
||||
#define OMAP4430_CM1_ABE_MCBSP3_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_MOD, 0x0058)
|
||||
#define OMAP4_CM1_ABE_SLIMBUS_CLKCTRL_OFFSET 0x0060
|
||||
#define OMAP4430_CM1_ABE_SLIMBUS_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_MOD, 0x0060)
|
||||
#define OMAP4_CM1_ABE_TIMER5_CLKCTRL_OFFSET 0x0068
|
||||
#define OMAP4430_CM1_ABE_TIMER5_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_MOD, 0x0068)
|
||||
#define OMAP4_CM1_ABE_TIMER6_CLKCTRL_OFFSET 0x0070
|
||||
#define OMAP4430_CM1_ABE_TIMER6_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_MOD, 0x0070)
|
||||
#define OMAP4_CM1_ABE_TIMER7_CLKCTRL_OFFSET 0x0078
|
||||
#define OMAP4430_CM1_ABE_TIMER7_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_MOD, 0x0078)
|
||||
#define OMAP4_CM1_ABE_TIMER8_CLKCTRL_OFFSET 0x0080
|
||||
#define OMAP4430_CM1_ABE_TIMER8_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_MOD, 0x0080)
|
||||
#define OMAP4_CM1_ABE_WDT3_CLKCTRL_OFFSET 0x0088
|
||||
#define OMAP4430_CM1_ABE_WDT3_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_MOD, 0x0088)
|
||||
|
||||
/* CM1.RESTORE_CM1 register offsets */
|
||||
#define OMAP4_CM_CLKSEL_CORE_RESTORE_OFFSET 0x0000
|
||||
#define OMAP4430_CM_CLKSEL_CORE_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_MOD, 0x0000)
|
||||
#define OMAP4_CM_DIV_M2_DPLL_CORE_RESTORE_OFFSET 0x0004
|
||||
#define OMAP4430_CM_DIV_M2_DPLL_CORE_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_MOD, 0x0004)
|
||||
#define OMAP4_CM_DIV_M3_DPLL_CORE_RESTORE_OFFSET 0x0008
|
||||
#define OMAP4430_CM_DIV_M3_DPLL_CORE_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_MOD, 0x0008)
|
||||
#define OMAP4_CM_DIV_M4_DPLL_CORE_RESTORE_OFFSET 0x000c
|
||||
#define OMAP4430_CM_DIV_M4_DPLL_CORE_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_MOD, 0x000c)
|
||||
#define OMAP4_CM_DIV_M5_DPLL_CORE_RESTORE_OFFSET 0x0010
|
||||
#define OMAP4430_CM_DIV_M5_DPLL_CORE_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_MOD, 0x0010)
|
||||
#define OMAP4_CM_DIV_M6_DPLL_CORE_RESTORE_OFFSET 0x0014
|
||||
#define OMAP4430_CM_DIV_M6_DPLL_CORE_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_MOD, 0x0014)
|
||||
#define OMAP4_CM_DIV_M7_DPLL_CORE_RESTORE_OFFSET 0x0018
|
||||
#define OMAP4430_CM_DIV_M7_DPLL_CORE_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_MOD, 0x0018)
|
||||
#define OMAP4_CM_CLKSEL_DPLL_CORE_RESTORE_OFFSET 0x001c
|
||||
#define OMAP4430_CM_CLKSEL_DPLL_CORE_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_MOD, 0x001c)
|
||||
#define OMAP4_CM_SSC_DELTAMSTEP_DPLL_CORE_RESTORE_OFFSET 0x0020
|
||||
#define OMAP4430_CM_SSC_DELTAMSTEP_DPLL_CORE_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_MOD, 0x0020)
|
||||
#define OMAP4_CM_SSC_MODFREQDIV_DPLL_CORE_RESTORE_OFFSET 0x0024
|
||||
#define OMAP4430_CM_SSC_MODFREQDIV_DPLL_CORE_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_MOD, 0x0024)
|
||||
#define OMAP4_CM_CLKMODE_DPLL_CORE_RESTORE_OFFSET 0x0028
|
||||
#define OMAP4430_CM_CLKMODE_DPLL_CORE_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_MOD, 0x0028)
|
||||
#define OMAP4_CM_SHADOW_FREQ_CONFIG2_RESTORE_OFFSET 0x002c
|
||||
#define OMAP4430_CM_SHADOW_FREQ_CONFIG2_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_MOD, 0x002c)
|
||||
#define OMAP4_CM_SHADOW_FREQ_CONFIG1_RESTORE_OFFSET 0x0030
|
||||
#define OMAP4430_CM_SHADOW_FREQ_CONFIG1_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_MOD, 0x0030)
|
||||
#define OMAP4_CM_AUTOIDLE_DPLL_CORE_RESTORE_OFFSET 0x0034
|
||||
#define OMAP4430_CM_AUTOIDLE_DPLL_CORE_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_MOD, 0x0034)
|
||||
#define OMAP4_CM_MPU_CLKSTCTRL_RESTORE_OFFSET 0x0038
|
||||
#define OMAP4430_CM_MPU_CLKSTCTRL_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_MOD, 0x0038)
|
||||
#define OMAP4_CM_CM1_PROFILING_CLKCTRL_RESTORE_OFFSET 0x003c
|
||||
#define OMAP4430_CM_CM1_PROFILING_CLKCTRL_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_MOD, 0x003c)
|
||||
#define OMAP4_CM_DYN_DEP_PRESCAL_RESTORE_OFFSET 0x0040
|
||||
#define OMAP4430_CM_DYN_DEP_PRESCAL_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_MOD, 0x0040)
|
||||
|
||||
/* CM2 */
|
||||
|
||||
/* CM2.OCP_SOCKET_CM2 register offsets */
|
||||
#define OMAP4_REVISION_CM2_OFFSET 0x0000
|
||||
#define OMAP4430_REVISION_CM2 OMAP44XX_CM2_REGADDR(OMAP4430_CM2_OCP_SOCKET_MOD, 0x0000)
|
||||
#define OMAP4_CM_CM2_PROFILING_CLKCTRL_OFFSET 0x0040
|
||||
#define OMAP4430_CM_CM2_PROFILING_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_OCP_SOCKET_MOD, 0x0040)
|
||||
|
||||
/* CM2.CKGEN_CM2 register offsets */
|
||||
#define OMAP4_CM_CLKSEL_DUCATI_ISS_ROOT_OFFSET 0x0000
|
||||
#define OMAP4430_CM_CLKSEL_DUCATI_ISS_ROOT OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0000)
|
||||
#define OMAP4_CM_CLKSEL_USB_60MHZ_OFFSET 0x0004
|
||||
#define OMAP4430_CM_CLKSEL_USB_60MHZ OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0004)
|
||||
#define OMAP4_CM_SCALE_FCLK_OFFSET 0x0008
|
||||
#define OMAP4430_CM_SCALE_FCLK OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0008)
|
||||
#define OMAP4_CM_CORE_DVFS_PERF1_OFFSET 0x0010
|
||||
#define OMAP4430_CM_CORE_DVFS_PERF1 OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0010)
|
||||
#define OMAP4_CM_CORE_DVFS_PERF2_OFFSET 0x0014
|
||||
#define OMAP4430_CM_CORE_DVFS_PERF2 OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0014)
|
||||
#define OMAP4_CM_CORE_DVFS_PERF3_OFFSET 0x0018
|
||||
#define OMAP4430_CM_CORE_DVFS_PERF3 OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0018)
|
||||
#define OMAP4_CM_CORE_DVFS_PERF4_OFFSET 0x001c
|
||||
#define OMAP4430_CM_CORE_DVFS_PERF4 OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x001c)
|
||||
#define OMAP4_CM_CORE_DVFS_CURRENT_OFFSET 0x0024
|
||||
#define OMAP4430_CM_CORE_DVFS_CURRENT OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0024)
|
||||
#define OMAP4_CM_IVA_DVFS_PERF_TESLA_OFFSET 0x0028
|
||||
#define OMAP4430_CM_IVA_DVFS_PERF_TESLA OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0028)
|
||||
#define OMAP4_CM_IVA_DVFS_PERF_IVAHD_OFFSET 0x002c
|
||||
#define OMAP4430_CM_IVA_DVFS_PERF_IVAHD OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x002c)
|
||||
#define OMAP4_CM_IVA_DVFS_PERF_ABE_OFFSET 0x0030
|
||||
#define OMAP4430_CM_IVA_DVFS_PERF_ABE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0030)
|
||||
#define OMAP4_CM_IVA_DVFS_CURRENT_OFFSET 0x0038
|
||||
#define OMAP4430_CM_IVA_DVFS_CURRENT OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0038)
|
||||
#define OMAP4_CM_CLKMODE_DPLL_PER_OFFSET 0x0040
|
||||
#define OMAP4430_CM_CLKMODE_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0040)
|
||||
#define OMAP4_CM_IDLEST_DPLL_PER_OFFSET 0x0044
|
||||
#define OMAP4430_CM_IDLEST_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0044)
|
||||
#define OMAP4_CM_AUTOIDLE_DPLL_PER_OFFSET 0x0048
|
||||
#define OMAP4430_CM_AUTOIDLE_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0048)
|
||||
#define OMAP4_CM_CLKSEL_DPLL_PER_OFFSET 0x004c
|
||||
#define OMAP4430_CM_CLKSEL_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x004c)
|
||||
#define OMAP4_CM_DIV_M2_DPLL_PER_OFFSET 0x0050
|
||||
#define OMAP4430_CM_DIV_M2_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0050)
|
||||
#define OMAP4_CM_DIV_M3_DPLL_PER_OFFSET 0x0054
|
||||
#define OMAP4430_CM_DIV_M3_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0054)
|
||||
#define OMAP4_CM_DIV_M4_DPLL_PER_OFFSET 0x0058
|
||||
#define OMAP4430_CM_DIV_M4_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0058)
|
||||
#define OMAP4_CM_DIV_M5_DPLL_PER_OFFSET 0x005c
|
||||
#define OMAP4430_CM_DIV_M5_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x005c)
|
||||
#define OMAP4_CM_DIV_M6_DPLL_PER_OFFSET 0x0060
|
||||
#define OMAP4430_CM_DIV_M6_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0060)
|
||||
#define OMAP4_CM_DIV_M7_DPLL_PER_OFFSET 0x0064
|
||||
#define OMAP4430_CM_DIV_M7_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0064)
|
||||
#define OMAP4_CM_SSC_DELTAMSTEP_DPLL_PER_OFFSET 0x0068
|
||||
#define OMAP4430_CM_SSC_DELTAMSTEP_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0068)
|
||||
#define OMAP4_CM_SSC_MODFREQDIV_DPLL_PER_OFFSET 0x006c
|
||||
#define OMAP4430_CM_SSC_MODFREQDIV_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x006c)
|
||||
#define OMAP4_CM_CLKMODE_DPLL_USB_OFFSET 0x0080
|
||||
#define OMAP4430_CM_CLKMODE_DPLL_USB OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0080)
|
||||
#define OMAP4_CM_IDLEST_DPLL_USB_OFFSET 0x0084
|
||||
#define OMAP4430_CM_IDLEST_DPLL_USB OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0084)
|
||||
#define OMAP4_CM_AUTOIDLE_DPLL_USB_OFFSET 0x0088
|
||||
#define OMAP4430_CM_AUTOIDLE_DPLL_USB OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0088)
|
||||
#define OMAP4_CM_CLKSEL_DPLL_USB_OFFSET 0x008c
|
||||
#define OMAP4430_CM_CLKSEL_DPLL_USB OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x008c)
|
||||
#define OMAP4_CM_DIV_M2_DPLL_USB_OFFSET 0x0090
|
||||
#define OMAP4430_CM_DIV_M2_DPLL_USB OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0090)
|
||||
#define OMAP4_CM_SSC_DELTAMSTEP_DPLL_USB_OFFSET 0x00a8
|
||||
#define OMAP4430_CM_SSC_DELTAMSTEP_DPLL_USB OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x00a8)
|
||||
#define OMAP4_CM_SSC_MODFREQDIV_DPLL_USB_OFFSET 0x00ac
|
||||
#define OMAP4430_CM_SSC_MODFREQDIV_DPLL_USB OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x00ac)
|
||||
#define OMAP4_CM_CLKDCOLDO_DPLL_USB_OFFSET 0x00b4
|
||||
#define OMAP4430_CM_CLKDCOLDO_DPLL_USB OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x00b4)
|
||||
#define OMAP4_CM_CLKMODE_DPLL_UNIPRO_OFFSET 0x00c0
|
||||
#define OMAP4430_CM_CLKMODE_DPLL_UNIPRO OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x00c0)
|
||||
#define OMAP4_CM_IDLEST_DPLL_UNIPRO_OFFSET 0x00c4
|
||||
#define OMAP4430_CM_IDLEST_DPLL_UNIPRO OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x00c4)
|
||||
#define OMAP4_CM_AUTOIDLE_DPLL_UNIPRO_OFFSET 0x00c8
|
||||
#define OMAP4430_CM_AUTOIDLE_DPLL_UNIPRO OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x00c8)
|
||||
#define OMAP4_CM_CLKSEL_DPLL_UNIPRO_OFFSET 0x00cc
|
||||
#define OMAP4430_CM_CLKSEL_DPLL_UNIPRO OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x00cc)
|
||||
#define OMAP4_CM_DIV_M2_DPLL_UNIPRO_OFFSET 0x00d0
|
||||
#define OMAP4430_CM_DIV_M2_DPLL_UNIPRO OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x00d0)
|
||||
#define OMAP4_CM_SSC_DELTAMSTEP_DPLL_UNIPRO_OFFSET 0x00e8
|
||||
#define OMAP4430_CM_SSC_DELTAMSTEP_DPLL_UNIPRO OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x00e8)
|
||||
#define OMAP4_CM_SSC_MODFREQDIV_DPLL_UNIPRO_OFFSET 0x00ec
|
||||
#define OMAP4430_CM_SSC_MODFREQDIV_DPLL_UNIPRO OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x00ec)
|
||||
|
||||
/* CM2.ALWAYS_ON_CM2 register offsets */
|
||||
#define OMAP4_CM_ALWON_CLKSTCTRL_OFFSET 0x0000
|
||||
#define OMAP4430_CM_ALWON_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_ALWAYS_ON_MOD, 0x0000)
|
||||
#define OMAP4_CM_ALWON_MDMINTC_CLKCTRL_OFFSET 0x0020
|
||||
#define OMAP4430_CM_ALWON_MDMINTC_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_ALWAYS_ON_MOD, 0x0020)
|
||||
#define OMAP4_CM_ALWON_SR_MPU_CLKCTRL_OFFSET 0x0028
|
||||
#define OMAP4430_CM_ALWON_SR_MPU_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_ALWAYS_ON_MOD, 0x0028)
|
||||
#define OMAP4_CM_ALWON_SR_IVA_CLKCTRL_OFFSET 0x0030
|
||||
#define OMAP4430_CM_ALWON_SR_IVA_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_ALWAYS_ON_MOD, 0x0030)
|
||||
#define OMAP4_CM_ALWON_SR_CORE_CLKCTRL_OFFSET 0x0038
|
||||
#define OMAP4430_CM_ALWON_SR_CORE_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_ALWAYS_ON_MOD, 0x0038)
|
||||
#define OMAP4_CM_ALWON_USBPHY_CLKCTRL_OFFSET 0x0040
|
||||
#define OMAP4430_CM_ALWON_USBPHY_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_ALWAYS_ON_MOD, 0x0040)
|
||||
|
||||
/* CM2.CORE_CM2 register offsets */
|
||||
#define OMAP4_CM_L3_1_CLKSTCTRL_OFFSET 0x0000
|
||||
#define OMAP4430_CM_L3_1_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0000)
|
||||
#define OMAP4_CM_L3_1_DYNAMICDEP_OFFSET 0x0008
|
||||
#define OMAP4430_CM_L3_1_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0008)
|
||||
#define OMAP4_CM_L3_1_L3_1_CLKCTRL_OFFSET 0x0020
|
||||
#define OMAP4430_CM_L3_1_L3_1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0020)
|
||||
#define OMAP4_CM_L3_2_CLKSTCTRL_OFFSET 0x0100
|
||||
#define OMAP4430_CM_L3_2_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0100)
|
||||
#define OMAP4_CM_L3_2_DYNAMICDEP_OFFSET 0x0108
|
||||
#define OMAP4430_CM_L3_2_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0108)
|
||||
#define OMAP4_CM_L3_2_L3_2_CLKCTRL_OFFSET 0x0120
|
||||
#define OMAP4430_CM_L3_2_L3_2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0120)
|
||||
#define OMAP4_CM_L3_2_GPMC_CLKCTRL_OFFSET 0x0128
|
||||
#define OMAP4430_CM_L3_2_GPMC_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0128)
|
||||
#define OMAP4_CM_L3_2_OCMC_RAM_CLKCTRL_OFFSET 0x0130
|
||||
#define OMAP4430_CM_L3_2_OCMC_RAM_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0130)
|
||||
#define OMAP4_CM_DUCATI_CLKSTCTRL_OFFSET 0x0200
|
||||
#define OMAP4430_CM_DUCATI_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0200)
|
||||
#define OMAP4_CM_DUCATI_STATICDEP_OFFSET 0x0204
|
||||
#define OMAP4430_CM_DUCATI_STATICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0204)
|
||||
#define OMAP4_CM_DUCATI_DYNAMICDEP_OFFSET 0x0208
|
||||
#define OMAP4430_CM_DUCATI_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0208)
|
||||
#define OMAP4_CM_DUCATI_DUCATI_CLKCTRL_OFFSET 0x0220
|
||||
#define OMAP4430_CM_DUCATI_DUCATI_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0220)
|
||||
#define OMAP4_CM_SDMA_CLKSTCTRL_OFFSET 0x0300
|
||||
#define OMAP4430_CM_SDMA_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0300)
|
||||
#define OMAP4_CM_SDMA_STATICDEP_OFFSET 0x0304
|
||||
#define OMAP4430_CM_SDMA_STATICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0304)
|
||||
#define OMAP4_CM_SDMA_DYNAMICDEP_OFFSET 0x0308
|
||||
#define OMAP4430_CM_SDMA_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0308)
|
||||
#define OMAP4_CM_SDMA_SDMA_CLKCTRL_OFFSET 0x0320
|
||||
#define OMAP4430_CM_SDMA_SDMA_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0320)
|
||||
#define OMAP4_CM_MEMIF_CLKSTCTRL_OFFSET 0x0400
|
||||
#define OMAP4430_CM_MEMIF_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0400)
|
||||
#define OMAP4_CM_MEMIF_DMM_CLKCTRL_OFFSET 0x0420
|
||||
#define OMAP4430_CM_MEMIF_DMM_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0420)
|
||||
#define OMAP4_CM_MEMIF_EMIF_FW_CLKCTRL_OFFSET 0x0428
|
||||
#define OMAP4430_CM_MEMIF_EMIF_FW_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0428)
|
||||
#define OMAP4_CM_MEMIF_EMIF_1_CLKCTRL_OFFSET 0x0430
|
||||
#define OMAP4430_CM_MEMIF_EMIF_1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0430)
|
||||
#define OMAP4_CM_MEMIF_EMIF_2_CLKCTRL_OFFSET 0x0438
|
||||
#define OMAP4430_CM_MEMIF_EMIF_2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0438)
|
||||
#define OMAP4_CM_MEMIF_DLL_CLKCTRL_OFFSET 0x0440
|
||||
#define OMAP4430_CM_MEMIF_DLL_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0440)
|
||||
#define OMAP4_CM_MEMIF_EMIF_H1_CLKCTRL_OFFSET 0x0450
|
||||
#define OMAP4430_CM_MEMIF_EMIF_H1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0450)
|
||||
#define OMAP4_CM_MEMIF_EMIF_H2_CLKCTRL_OFFSET 0x0458
|
||||
#define OMAP4430_CM_MEMIF_EMIF_H2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0458)
|
||||
#define OMAP4_CM_MEMIF_DLL_H_CLKCTRL_OFFSET 0x0460
|
||||
#define OMAP4430_CM_MEMIF_DLL_H_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0460)
|
||||
#define OMAP4_CM_D2D_CLKSTCTRL_OFFSET 0x0500
|
||||
#define OMAP4430_CM_D2D_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0500)
|
||||
#define OMAP4_CM_D2D_STATICDEP_OFFSET 0x0504
|
||||
#define OMAP4430_CM_D2D_STATICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0504)
|
||||
#define OMAP4_CM_D2D_DYNAMICDEP_OFFSET 0x0508
|
||||
#define OMAP4430_CM_D2D_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0508)
|
||||
#define OMAP4_CM_D2D_SAD2D_CLKCTRL_OFFSET 0x0520
|
||||
#define OMAP4430_CM_D2D_SAD2D_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0520)
|
||||
#define OMAP4_CM_D2D_MODEM_ICR_CLKCTRL_OFFSET 0x0528
|
||||
#define OMAP4430_CM_D2D_MODEM_ICR_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0528)
|
||||
#define OMAP4_CM_D2D_SAD2D_FW_CLKCTRL_OFFSET 0x0530
|
||||
#define OMAP4430_CM_D2D_SAD2D_FW_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0530)
|
||||
#define OMAP4_CM_L4CFG_CLKSTCTRL_OFFSET 0x0600
|
||||
#define OMAP4430_CM_L4CFG_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0600)
|
||||
#define OMAP4_CM_L4CFG_DYNAMICDEP_OFFSET 0x0608
|
||||
#define OMAP4430_CM_L4CFG_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0608)
|
||||
#define OMAP4_CM_L4CFG_L4_CFG_CLKCTRL_OFFSET 0x0620
|
||||
#define OMAP4430_CM_L4CFG_L4_CFG_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0620)
|
||||
#define OMAP4_CM_L4CFG_HW_SEM_CLKCTRL_OFFSET 0x0628
|
||||
#define OMAP4430_CM_L4CFG_HW_SEM_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0628)
|
||||
#define OMAP4_CM_L4CFG_MAILBOX_CLKCTRL_OFFSET 0x0630
|
||||
#define OMAP4430_CM_L4CFG_MAILBOX_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0630)
|
||||
#define OMAP4_CM_L4CFG_SAR_ROM_CLKCTRL_OFFSET 0x0638
|
||||
#define OMAP4430_CM_L4CFG_SAR_ROM_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0638)
|
||||
#define OMAP4_CM_L3INSTR_CLKSTCTRL_OFFSET 0x0700
|
||||
#define OMAP4430_CM_L3INSTR_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0700)
|
||||
#define OMAP4_CM_L3INSTR_L3_3_CLKCTRL_OFFSET 0x0720
|
||||
#define OMAP4430_CM_L3INSTR_L3_3_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0720)
|
||||
#define OMAP4_CM_L3INSTR_L3_INSTR_CLKCTRL_OFFSET 0x0728
|
||||
#define OMAP4430_CM_L3INSTR_L3_INSTR_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0728)
|
||||
#define OMAP4_CM_L3INSTR_OCP_WP1_CLKCTRL_OFFSET 0x0740
|
||||
#define OMAP4430_CM_L3INSTR_OCP_WP1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0740)
|
||||
|
||||
/* CM2.IVAHD_CM2 register offsets */
|
||||
#define OMAP4_CM_IVAHD_CLKSTCTRL_OFFSET 0x0000
|
||||
#define OMAP4430_CM_IVAHD_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_IVAHD_MOD, 0x0000)
|
||||
#define OMAP4_CM_IVAHD_STATICDEP_OFFSET 0x0004
|
||||
#define OMAP4430_CM_IVAHD_STATICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_IVAHD_MOD, 0x0004)
|
||||
#define OMAP4_CM_IVAHD_DYNAMICDEP_OFFSET 0x0008
|
||||
#define OMAP4430_CM_IVAHD_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_IVAHD_MOD, 0x0008)
|
||||
#define OMAP4_CM_IVAHD_IVAHD_CLKCTRL_OFFSET 0x0020
|
||||
#define OMAP4430_CM_IVAHD_IVAHD_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_IVAHD_MOD, 0x0020)
|
||||
#define OMAP4_CM_IVAHD_SL2_CLKCTRL_OFFSET 0x0028
|
||||
#define OMAP4430_CM_IVAHD_SL2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_IVAHD_MOD, 0x0028)
|
||||
|
||||
/* CM2.CAM_CM2 register offsets */
|
||||
#define OMAP4_CM_CAM_CLKSTCTRL_OFFSET 0x0000
|
||||
#define OMAP4430_CM_CAM_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CAM_MOD, 0x0000)
|
||||
#define OMAP4_CM_CAM_STATICDEP_OFFSET 0x0004
|
||||
#define OMAP4430_CM_CAM_STATICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CAM_MOD, 0x0004)
|
||||
#define OMAP4_CM_CAM_DYNAMICDEP_OFFSET 0x0008
|
||||
#define OMAP4430_CM_CAM_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CAM_MOD, 0x0008)
|
||||
#define OMAP4_CM_CAM_ISS_CLKCTRL_OFFSET 0x0020
|
||||
#define OMAP4430_CM_CAM_ISS_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CAM_MOD, 0x0020)
|
||||
#define OMAP4_CM_CAM_FDIF_CLKCTRL_OFFSET 0x0028
|
||||
#define OMAP4430_CM_CAM_FDIF_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CAM_MOD, 0x0028)
|
||||
|
||||
/* CM2.DSS_CM2 register offsets */
|
||||
#define OMAP4_CM_DSS_CLKSTCTRL_OFFSET 0x0000
|
||||
#define OMAP4430_CM_DSS_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_DSS_MOD, 0x0000)
|
||||
#define OMAP4_CM_DSS_STATICDEP_OFFSET 0x0004
|
||||
#define OMAP4430_CM_DSS_STATICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_DSS_MOD, 0x0004)
|
||||
#define OMAP4_CM_DSS_DYNAMICDEP_OFFSET 0x0008
|
||||
#define OMAP4430_CM_DSS_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_DSS_MOD, 0x0008)
|
||||
#define OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET 0x0020
|
||||
#define OMAP4430_CM_DSS_DSS_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_DSS_MOD, 0x0020)
|
||||
#define OMAP4_CM_DSS_DEISS_CLKCTRL_OFFSET 0x0028
|
||||
#define OMAP4430_CM_DSS_DEISS_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_DSS_MOD, 0x0028)
|
||||
|
||||
/* CM2.GFX_CM2 register offsets */
|
||||
#define OMAP4_CM_GFX_CLKSTCTRL_OFFSET 0x0000
|
||||
#define OMAP4430_CM_GFX_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_GFX_MOD, 0x0000)
|
||||
#define OMAP4_CM_GFX_STATICDEP_OFFSET 0x0004
|
||||
#define OMAP4430_CM_GFX_STATICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_GFX_MOD, 0x0004)
|
||||
#define OMAP4_CM_GFX_DYNAMICDEP_OFFSET 0x0008
|
||||
#define OMAP4430_CM_GFX_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_GFX_MOD, 0x0008)
|
||||
#define OMAP4_CM_GFX_GFX_CLKCTRL_OFFSET 0x0020
|
||||
#define OMAP4430_CM_GFX_GFX_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_GFX_MOD, 0x0020)
|
||||
|
||||
/* CM2.L3INIT_CM2 register offsets */
|
||||
#define OMAP4_CM_L3INIT_CLKSTCTRL_OFFSET 0x0000
|
||||
#define OMAP4430_CM_L3INIT_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_MOD, 0x0000)
|
||||
#define OMAP4_CM_L3INIT_STATICDEP_OFFSET 0x0004
|
||||
#define OMAP4430_CM_L3INIT_STATICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_MOD, 0x0004)
|
||||
#define OMAP4_CM_L3INIT_DYNAMICDEP_OFFSET 0x0008
|
||||
#define OMAP4430_CM_L3INIT_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_MOD, 0x0008)
|
||||
#define OMAP4_CM_L3INIT_MMC1_CLKCTRL_OFFSET 0x0028
|
||||
#define OMAP4430_CM_L3INIT_MMC1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_MOD, 0x0028)
|
||||
#define OMAP4_CM_L3INIT_MMC2_CLKCTRL_OFFSET 0x0030
|
||||
#define OMAP4430_CM_L3INIT_MMC2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_MOD, 0x0030)
|
||||
#define OMAP4_CM_L3INIT_HSI_CLKCTRL_OFFSET 0x0038
|
||||
#define OMAP4430_CM_L3INIT_HSI_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_MOD, 0x0038)
|
||||
#define OMAP4_CM_L3INIT_UNIPRO1_CLKCTRL_OFFSET 0x0040
|
||||
#define OMAP4430_CM_L3INIT_UNIPRO1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_MOD, 0x0040)
|
||||
#define OMAP4_CM_L3INIT_USB_HOST_CLKCTRL_OFFSET 0x0058
|
||||
#define OMAP4430_CM_L3INIT_USB_HOST_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_MOD, 0x0058)
|
||||
#define OMAP4_CM_L3INIT_USB_OTG_CLKCTRL_OFFSET 0x0060
|
||||
#define OMAP4430_CM_L3INIT_USB_OTG_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_MOD, 0x0060)
|
||||
#define OMAP4_CM_L3INIT_USB_TLL_CLKCTRL_OFFSET 0x0068
|
||||
#define OMAP4430_CM_L3INIT_USB_TLL_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_MOD, 0x0068)
|
||||
#define OMAP4_CM_L3INIT_P1500_CLKCTRL_OFFSET 0x0078
|
||||
#define OMAP4430_CM_L3INIT_P1500_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_MOD, 0x0078)
|
||||
#define OMAP4_CM_L3INIT_EMAC_CLKCTRL_OFFSET 0x0080
|
||||
#define OMAP4430_CM_L3INIT_EMAC_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_MOD, 0x0080)
|
||||
#define OMAP4_CM_L3INIT_SATA_CLKCTRL_OFFSET 0x0088
|
||||
#define OMAP4430_CM_L3INIT_SATA_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_MOD, 0x0088)
|
||||
#define OMAP4_CM_L3INIT_TPPSS_CLKCTRL_OFFSET 0x0090
|
||||
#define OMAP4430_CM_L3INIT_TPPSS_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_MOD, 0x0090)
|
||||
#define OMAP4_CM_L3INIT_PCIESS_CLKCTRL_OFFSET 0x0098
|
||||
#define OMAP4430_CM_L3INIT_PCIESS_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_MOD, 0x0098)
|
||||
#define OMAP4_CM_L3INIT_CCPTX_CLKCTRL_OFFSET 0x00a8
|
||||
#define OMAP4430_CM_L3INIT_CCPTX_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_MOD, 0x00a8)
|
||||
#define OMAP4_CM_L3INIT_XHPI_CLKCTRL_OFFSET 0x00c0
|
||||
#define OMAP4430_CM_L3INIT_XHPI_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_MOD, 0x00c0)
|
||||
#define OMAP4_CM_L3INIT_MMC6_CLKCTRL_OFFSET 0x00c8
|
||||
#define OMAP4430_CM_L3INIT_MMC6_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_MOD, 0x00c8)
|
||||
#define OMAP4_CM_L3INIT_USB_HOST_FS_CLKCTRL_OFFSET 0x00d0
|
||||
#define OMAP4430_CM_L3INIT_USB_HOST_FS_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_MOD, 0x00d0)
|
||||
#define OMAP4_CM_L3INIT_USBPHYOCP2SCP_CLKCTRL_OFFSET 0x00e0
|
||||
#define OMAP4430_CM_L3INIT_USBPHYOCP2SCP_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_MOD, 0x00e0)
|
||||
|
||||
/* CM2.L4PER_CM2 register offsets */
|
||||
#define OMAP4_CM_L4PER_CLKSTCTRL_OFFSET 0x0000
|
||||
#define OMAP4430_CM_L4PER_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0000)
|
||||
#define OMAP4_CM_L4PER_DYNAMICDEP_OFFSET 0x0008
|
||||
#define OMAP4430_CM_L4PER_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0008)
|
||||
#define OMAP4_CM_L4PER_ADC_CLKCTRL_OFFSET 0x0020
|
||||
#define OMAP4430_CM_L4PER_ADC_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0020)
|
||||
#define OMAP4_CM_L4PER_DMTIMER10_CLKCTRL_OFFSET 0x0028
|
||||
#define OMAP4430_CM_L4PER_DMTIMER10_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0028)
|
||||
#define OMAP4_CM_L4PER_DMTIMER11_CLKCTRL_OFFSET 0x0030
|
||||
#define OMAP4430_CM_L4PER_DMTIMER11_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0030)
|
||||
#define OMAP4_CM_L4PER_DMTIMER2_CLKCTRL_OFFSET 0x0038
|
||||
#define OMAP4430_CM_L4PER_DMTIMER2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0038)
|
||||
#define OMAP4_CM_L4PER_DMTIMER3_CLKCTRL_OFFSET 0x0040
|
||||
#define OMAP4430_CM_L4PER_DMTIMER3_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0040)
|
||||
#define OMAP4_CM_L4PER_DMTIMER4_CLKCTRL_OFFSET 0x0048
|
||||
#define OMAP4430_CM_L4PER_DMTIMER4_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0048)
|
||||
#define OMAP4_CM_L4PER_DMTIMER9_CLKCTRL_OFFSET 0x0050
|
||||
#define OMAP4430_CM_L4PER_DMTIMER9_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0050)
|
||||
#define OMAP4_CM_L4PER_ELM_CLKCTRL_OFFSET 0x0058
|
||||
#define OMAP4430_CM_L4PER_ELM_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0058)
|
||||
#define OMAP4_CM_L4PER_GPIO2_CLKCTRL_OFFSET 0x0060
|
||||
#define OMAP4430_CM_L4PER_GPIO2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0060)
|
||||
#define OMAP4_CM_L4PER_GPIO3_CLKCTRL_OFFSET 0x0068
|
||||
#define OMAP4430_CM_L4PER_GPIO3_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0068)
|
||||
#define OMAP4_CM_L4PER_GPIO4_CLKCTRL_OFFSET 0x0070
|
||||
#define OMAP4430_CM_L4PER_GPIO4_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0070)
|
||||
#define OMAP4_CM_L4PER_GPIO5_CLKCTRL_OFFSET 0x0078
|
||||
#define OMAP4430_CM_L4PER_GPIO5_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0078)
|
||||
#define OMAP4_CM_L4PER_GPIO6_CLKCTRL_OFFSET 0x0080
|
||||
#define OMAP4430_CM_L4PER_GPIO6_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0080)
|
||||
#define OMAP4_CM_L4PER_HDQ1W_CLKCTRL_OFFSET 0x0088
|
||||
#define OMAP4430_CM_L4PER_HDQ1W_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0088)
|
||||
#define OMAP4_CM_L4PER_HECC1_CLKCTRL_OFFSET 0x0090
|
||||
#define OMAP4430_CM_L4PER_HECC1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0090)
|
||||
#define OMAP4_CM_L4PER_HECC2_CLKCTRL_OFFSET 0x0098
|
||||
#define OMAP4430_CM_L4PER_HECC2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0098)
|
||||
#define OMAP4_CM_L4PER_I2C1_CLKCTRL_OFFSET 0x00a0
|
||||
#define OMAP4430_CM_L4PER_I2C1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x00a0)
|
||||
#define OMAP4_CM_L4PER_I2C2_CLKCTRL_OFFSET 0x00a8
|
||||
#define OMAP4430_CM_L4PER_I2C2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x00a8)
|
||||
#define OMAP4_CM_L4PER_I2C3_CLKCTRL_OFFSET 0x00b0
|
||||
#define OMAP4430_CM_L4PER_I2C3_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x00b0)
|
||||
#define OMAP4_CM_L4PER_I2C4_CLKCTRL_OFFSET 0x00b8
|
||||
#define OMAP4430_CM_L4PER_I2C4_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x00b8)
|
||||
#define OMAP4_CM_L4PER_L4PER_CLKCTRL_OFFSET 0x00c0
|
||||
#define OMAP4430_CM_L4PER_L4PER_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x00c0)
|
||||
#define OMAP4_CM_L4PER_MCASP2_CLKCTRL_OFFSET 0x00d0
|
||||
#define OMAP4430_CM_L4PER_MCASP2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x00d0)
|
||||
#define OMAP4_CM_L4PER_MCASP3_CLKCTRL_OFFSET 0x00d8
|
||||
#define OMAP4430_CM_L4PER_MCASP3_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x00d8)
|
||||
#define OMAP4_CM_L4PER_MCBSP4_CLKCTRL_OFFSET 0x00e0
|
||||
#define OMAP4430_CM_L4PER_MCBSP4_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x00e0)
|
||||
#define OMAP4_CM_L4PER_MGATE_CLKCTRL_OFFSET 0x00e8
|
||||
#define OMAP4430_CM_L4PER_MGATE_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x00e8)
|
||||
#define OMAP4_CM_L4PER_MCSPI1_CLKCTRL_OFFSET 0x00f0
|
||||
#define OMAP4430_CM_L4PER_MCSPI1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x00f0)
|
||||
#define OMAP4_CM_L4PER_MCSPI2_CLKCTRL_OFFSET 0x00f8
|
||||
#define OMAP4430_CM_L4PER_MCSPI2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x00f8)
|
||||
#define OMAP4_CM_L4PER_MCSPI3_CLKCTRL_OFFSET 0x0100
|
||||
#define OMAP4430_CM_L4PER_MCSPI3_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0100)
|
||||
#define OMAP4_CM_L4PER_MCSPI4_CLKCTRL_OFFSET 0x0108
|
||||
#define OMAP4430_CM_L4PER_MCSPI4_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0108)
|
||||
#define OMAP4_CM_L4PER_MMCSD3_CLKCTRL_OFFSET 0x0120
|
||||
#define OMAP4430_CM_L4PER_MMCSD3_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0120)
|
||||
#define OMAP4_CM_L4PER_MMCSD4_CLKCTRL_OFFSET 0x0128
|
||||
#define OMAP4430_CM_L4PER_MMCSD4_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0128)
|
||||
#define OMAP4_CM_L4PER_MSPROHG_CLKCTRL_OFFSET 0x0130
|
||||
#define OMAP4430_CM_L4PER_MSPROHG_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0130)
|
||||
#define OMAP4_CM_L4PER_SLIMBUS2_CLKCTRL_OFFSET 0x0138
|
||||
#define OMAP4430_CM_L4PER_SLIMBUS2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0138)
|
||||
#define OMAP4_CM_L4PER_UART1_CLKCTRL_OFFSET 0x0140
|
||||
#define OMAP4430_CM_L4PER_UART1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0140)
|
||||
#define OMAP4_CM_L4PER_UART2_CLKCTRL_OFFSET 0x0148
|
||||
#define OMAP4430_CM_L4PER_UART2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0148)
|
||||
#define OMAP4_CM_L4PER_UART3_CLKCTRL_OFFSET 0x0150
|
||||
#define OMAP4430_CM_L4PER_UART3_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0150)
|
||||
#define OMAP4_CM_L4PER_UART4_CLKCTRL_OFFSET 0x0158
|
||||
#define OMAP4430_CM_L4PER_UART4_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0158)
|
||||
#define OMAP4_CM_L4PER_MMCSD5_CLKCTRL_OFFSET 0x0160
|
||||
#define OMAP4430_CM_L4PER_MMCSD5_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0160)
|
||||
#define OMAP4_CM_L4PER_I2C5_CLKCTRL_OFFSET 0x0168
|
||||
#define OMAP4430_CM_L4PER_I2C5_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0168)
|
||||
#define OMAP4_CM_L4SEC_CLKSTCTRL_OFFSET 0x0180
|
||||
#define OMAP4430_CM_L4SEC_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0180)
|
||||
#define OMAP4_CM_L4SEC_STATICDEP_OFFSET 0x0184
|
||||
#define OMAP4430_CM_L4SEC_STATICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0184)
|
||||
#define OMAP4_CM_L4SEC_DYNAMICDEP_OFFSET 0x0188
|
||||
#define OMAP4430_CM_L4SEC_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0188)
|
||||
#define OMAP4_CM_L4SEC_AES1_CLKCTRL_OFFSET 0x01a0
|
||||
#define OMAP4430_CM_L4SEC_AES1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x01a0)
|
||||
#define OMAP4_CM_L4SEC_AES2_CLKCTRL_OFFSET 0x01a8
|
||||
#define OMAP4430_CM_L4SEC_AES2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x01a8)
|
||||
#define OMAP4_CM_L4SEC_DES3DES_CLKCTRL_OFFSET 0x01b0
|
||||
#define OMAP4430_CM_L4SEC_DES3DES_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x01b0)
|
||||
#define OMAP4_CM_L4SEC_PKAEIP29_CLKCTRL_OFFSET 0x01b8
|
||||
#define OMAP4430_CM_L4SEC_PKAEIP29_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x01b8)
|
||||
#define OMAP4_CM_L4SEC_RNG_CLKCTRL_OFFSET 0x01c0
|
||||
#define OMAP4430_CM_L4SEC_RNG_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x01c0)
|
||||
#define OMAP4_CM_L4SEC_SHA2MD51_CLKCTRL_OFFSET 0x01c8
|
||||
#define OMAP4430_CM_L4SEC_SHA2MD51_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x01c8)
|
||||
#define OMAP4_CM_L4SEC_CRYPTODMA_CLKCTRL_OFFSET 0x01d8
|
||||
#define OMAP4430_CM_L4SEC_CRYPTODMA_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x01d8)
|
||||
|
||||
/* CM2.CEFUSE_CM2 register offsets */
|
||||
#define OMAP4_CM_CEFUSE_CLKSTCTRL_OFFSET 0x0000
|
||||
#define OMAP4430_CM_CEFUSE_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CEFUSE_MOD, 0x0000)
|
||||
#define OMAP4_CM_CEFUSE_CEFUSE_CLKCTRL_OFFSET 0x0020
|
||||
#define OMAP4430_CM_CEFUSE_CEFUSE_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CEFUSE_MOD, 0x0020)
|
||||
|
||||
/* CM2.RESTORE_CM2 register offsets */
|
||||
#define OMAP4_CM_L3_1_CLKSTCTRL_RESTORE_OFFSET 0x0000
|
||||
#define OMAP4430_CM_L3_1_CLKSTCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_MOD, 0x0000)
|
||||
#define OMAP4_CM_L3_2_CLKSTCTRL_RESTORE_OFFSET 0x0004
|
||||
#define OMAP4430_CM_L3_2_CLKSTCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_MOD, 0x0004)
|
||||
#define OMAP4_CM_L4CFG_CLKSTCTRL_RESTORE_OFFSET 0x0008
|
||||
#define OMAP4430_CM_L4CFG_CLKSTCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_MOD, 0x0008)
|
||||
#define OMAP4_CM_MEMIF_CLKSTCTRL_RESTORE_OFFSET 0x000c
|
||||
#define OMAP4430_CM_MEMIF_CLKSTCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_MOD, 0x000c)
|
||||
#define OMAP4_CM_L4PER_CLKSTCTRL_RESTORE_OFFSET 0x0010
|
||||
#define OMAP4430_CM_L4PER_CLKSTCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_MOD, 0x0010)
|
||||
#define OMAP4_CM_L3INIT_CLKSTCTRL_RESTORE_OFFSET 0x0014
|
||||
#define OMAP4430_CM_L3INIT_CLKSTCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_MOD, 0x0014)
|
||||
#define OMAP4_CM_L3INSTR_L3_3_CLKCTRL_RESTORE_OFFSET 0x0018
|
||||
#define OMAP4430_CM_L3INSTR_L3_3_CLKCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_MOD, 0x0018)
|
||||
#define OMAP4_CM_L3INSTR_L3_INSTR_CLKCTRL_RESTORE_OFFSET 0x001c
|
||||
#define OMAP4430_CM_L3INSTR_L3_INSTR_CLKCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_MOD, 0x001c)
|
||||
#define OMAP4_CM_L3INSTR_OCP_WP1_CLKCTRL_RESTORE_OFFSET 0x0020
|
||||
#define OMAP4430_CM_L3INSTR_OCP_WP1_CLKCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_MOD, 0x0020)
|
||||
#define OMAP4_CM_CM2_PROFILING_CLKCTRL_RESTORE_OFFSET 0x0024
|
||||
#define OMAP4430_CM_CM2_PROFILING_CLKCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_MOD, 0x0024)
|
||||
#define OMAP4_CM_D2D_STATICDEP_RESTORE_OFFSET 0x0028
|
||||
#define OMAP4430_CM_D2D_STATICDEP_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_MOD, 0x0028)
|
||||
#define OMAP4_CM_L3_1_DYNAMICDEP_RESTORE_OFFSET 0x002c
|
||||
#define OMAP4430_CM_L3_1_DYNAMICDEP_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_MOD, 0x002c)
|
||||
#define OMAP4_CM_L3_2_DYNAMICDEP_RESTORE_OFFSET 0x0030
|
||||
#define OMAP4430_CM_L3_2_DYNAMICDEP_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_MOD, 0x0030)
|
||||
#define OMAP4_CM_D2D_DYNAMICDEP_RESTORE_OFFSET 0x0034
|
||||
#define OMAP4430_CM_D2D_DYNAMICDEP_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_MOD, 0x0034)
|
||||
#define OMAP4_CM_L4CFG_DYNAMICDEP_RESTORE_OFFSET 0x0038
|
||||
#define OMAP4430_CM_L4CFG_DYNAMICDEP_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_MOD, 0x0038)
|
||||
#define OMAP4_CM_L4PER_DYNAMICDEP_RESTORE_OFFSET 0x003c
|
||||
#define OMAP4430_CM_L4PER_DYNAMICDEP_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_MOD, 0x003c)
|
||||
#define OMAP4_CM_L4PER_GPIO2_CLKCTRL_RESTORE_OFFSET 0x0040
|
||||
#define OMAP4430_CM_L4PER_GPIO2_CLKCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_MOD, 0x0040)
|
||||
#define OMAP4_CM_L4PER_GPIO3_CLKCTRL_RESTORE_OFFSET 0x0044
|
||||
#define OMAP4430_CM_L4PER_GPIO3_CLKCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_MOD, 0x0044)
|
||||
#define OMAP4_CM_L4PER_GPIO4_CLKCTRL_RESTORE_OFFSET 0x0048
|
||||
#define OMAP4430_CM_L4PER_GPIO4_CLKCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_MOD, 0x0048)
|
||||
#define OMAP4_CM_L4PER_GPIO5_CLKCTRL_RESTORE_OFFSET 0x004c
|
||||
#define OMAP4430_CM_L4PER_GPIO5_CLKCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_MOD, 0x004c)
|
||||
#define OMAP4_CM_L4PER_GPIO6_CLKCTRL_RESTORE_OFFSET 0x0050
|
||||
#define OMAP4430_CM_L4PER_GPIO6_CLKCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_MOD, 0x0050)
|
||||
#define OMAP4_CM_L3INIT_USB_HOST_CLKCTRL_RESTORE_OFFSET 0x0054
|
||||
#define OMAP4430_CM_L3INIT_USB_HOST_CLKCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_MOD, 0x0054)
|
||||
#define OMAP4_CM_L3INIT_USB_TLL_CLKCTRL_RESTORE_OFFSET 0x0058
|
||||
#define OMAP4430_CM_L3INIT_USB_TLL_CLKCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_MOD, 0x0058)
|
||||
#define OMAP4_CM_SDMA_STATICDEP_RESTORE_OFFSET 0x005c
|
||||
#define OMAP4430_CM_SDMA_STATICDEP_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_MOD, 0x005c)
|
||||
# endif
|
||||
#endif
|
||||
|
|
|
@ -1,62 +0,0 @@
|
|||
/*
|
||||
* OMAP4 CM module functions
|
||||
*
|
||||
* Copyright (C) 2009 Nokia Corporation
|
||||
* Paul Walmsley
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include <asm/atomic.h>
|
||||
|
||||
#include <plat/common.h>
|
||||
|
||||
#include "cm.h"
|
||||
#include "cm-regbits-44xx.h"
|
||||
|
||||
/**
|
||||
* omap4_cm_wait_module_ready - wait for a module to be in 'func' state
|
||||
* @clkctrl_reg: CLKCTRL module address
|
||||
*
|
||||
* Wait for the module IDLEST to be functional. If the idle state is in any
|
||||
* the non functional state (trans, idle or disabled), module and thus the
|
||||
* sysconfig cannot be accessed and will probably lead to an "imprecise
|
||||
* external abort"
|
||||
*
|
||||
* Module idle state:
|
||||
* 0x0 func: Module is fully functional, including OCP
|
||||
* 0x1 trans: Module is performing transition: wakeup, or sleep, or sleep
|
||||
* abortion
|
||||
* 0x2 idle: Module is in Idle mode (only OCP part). It is functional if
|
||||
* using separate functional clock
|
||||
* 0x3 disabled: Module is disabled and cannot be accessed
|
||||
*
|
||||
*/
|
||||
int omap4_cm_wait_module_ready(void __iomem *clkctrl_reg)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
if (!clkctrl_reg)
|
||||
return 0;
|
||||
|
||||
omap_test_timeout((
|
||||
((__raw_readl(clkctrl_reg) & OMAP4430_IDLEST_MASK) == 0) ||
|
||||
(((__raw_readl(clkctrl_reg) & OMAP4430_IDLEST_MASK) >>
|
||||
OMAP4430_IDLEST_SHIFT) == 0x2)),
|
||||
MAX_MODULE_READY_TIME, i);
|
||||
|
||||
return (i < MAX_MODULE_READY_TIME) ? 0 : -EBUSY;
|
||||
}
|
||||
|
214
arch/arm/mach-omap2/cminst44xx.c
Normal file
214
arch/arm/mach-omap2/cminst44xx.c
Normal file
|
@ -0,0 +1,214 @@
|
|||
/*
|
||||
* OMAP4 CM instance functions
|
||||
*
|
||||
* Copyright (C) 2009 Nokia Corporation
|
||||
* Paul Walmsley
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This is needed since CM instances can be in the PRM, PRCM_MPU, CM1,
|
||||
* or CM2 hardware modules. For example, the EMU_CM CM instance is in
|
||||
* the PRM hardware module. What a mess...
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include <plat/common.h>
|
||||
|
||||
#include "cm.h"
|
||||
#include "cm1_44xx.h"
|
||||
#include "cm2_44xx.h"
|
||||
#include "cm44xx.h"
|
||||
#include "cminst44xx.h"
|
||||
#include "cm-regbits-34xx.h"
|
||||
#include "cm-regbits-44xx.h"
|
||||
#include "prcm44xx.h"
|
||||
#include "prm44xx.h"
|
||||
#include "prcm_mpu44xx.h"
|
||||
|
||||
static u32 _cm_bases[OMAP4_MAX_PRCM_PARTITIONS] = {
|
||||
[OMAP4430_INVALID_PRCM_PARTITION] = 0,
|
||||
[OMAP4430_PRM_PARTITION] = OMAP4430_PRM_BASE,
|
||||
[OMAP4430_CM1_PARTITION] = OMAP4430_CM1_BASE,
|
||||
[OMAP4430_CM2_PARTITION] = OMAP4430_CM2_BASE,
|
||||
[OMAP4430_SCRM_PARTITION] = 0,
|
||||
[OMAP4430_PRCM_MPU_PARTITION] = OMAP4430_PRCM_MPU_BASE,
|
||||
};
|
||||
|
||||
/* Read a register in a CM instance */
|
||||
u32 omap4_cminst_read_inst_reg(u8 part, s16 inst, u16 idx)
|
||||
{
|
||||
BUG_ON(part >= OMAP4_MAX_PRCM_PARTITIONS ||
|
||||
part == OMAP4430_INVALID_PRCM_PARTITION ||
|
||||
!_cm_bases[part]);
|
||||
return __raw_readl(OMAP2_L4_IO_ADDRESS(_cm_bases[part] + inst + idx));
|
||||
}
|
||||
|
||||
/* Write into a register in a CM instance */
|
||||
void omap4_cminst_write_inst_reg(u32 val, u8 part, s16 inst, u16 idx)
|
||||
{
|
||||
BUG_ON(part >= OMAP4_MAX_PRCM_PARTITIONS ||
|
||||
part == OMAP4430_INVALID_PRCM_PARTITION ||
|
||||
!_cm_bases[part]);
|
||||
__raw_writel(val, OMAP2_L4_IO_ADDRESS(_cm_bases[part] + inst + idx));
|
||||
}
|
||||
|
||||
/* Read-modify-write a register in CM1. Caller must lock */
|
||||
u32 omap4_cminst_rmw_inst_reg_bits(u32 mask, u32 bits, u8 part, s16 inst,
|
||||
s16 idx)
|
||||
{
|
||||
u32 v;
|
||||
|
||||
v = omap4_cminst_read_inst_reg(part, inst, idx);
|
||||
v &= ~mask;
|
||||
v |= bits;
|
||||
omap4_cminst_write_inst_reg(v, part, inst, idx);
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* _clktrctrl_write - write @c to a CM_CLKSTCTRL.CLKTRCTRL register bitfield
|
||||
* @c: CLKTRCTRL register bitfield (LSB = bit 0, i.e., unshifted)
|
||||
* @part: PRCM partition ID that the CM_CLKSTCTRL register exists in
|
||||
* @inst: CM instance register offset (*_INST macro)
|
||||
* @cdoffs: Clockdomain register offset (*_CDOFFS macro)
|
||||
*
|
||||
* @c must be the unshifted value for CLKTRCTRL - i.e., this function
|
||||
* will handle the shift itself.
|
||||
*/
|
||||
static void _clktrctrl_write(u8 c, u8 part, s16 inst, u16 cdoffs)
|
||||
{
|
||||
u32 v;
|
||||
|
||||
v = omap4_cminst_read_inst_reg(part, inst, cdoffs + OMAP4_CM_CLKSTCTRL);
|
||||
v &= ~OMAP4430_CLKTRCTRL_MASK;
|
||||
v |= c << OMAP4430_CLKTRCTRL_SHIFT;
|
||||
omap4_cminst_write_inst_reg(v, part, inst, cdoffs + OMAP4_CM_CLKSTCTRL);
|
||||
}
|
||||
|
||||
/**
|
||||
* omap4_cminst_is_clkdm_in_hwsup - is a clockdomain in hwsup idle mode?
|
||||
* @part: PRCM partition ID that the CM_CLKSTCTRL register exists in
|
||||
* @inst: CM instance register offset (*_INST macro)
|
||||
* @cdoffs: Clockdomain register offset (*_CDOFFS macro)
|
||||
*
|
||||
* Returns true if the clockdomain referred to by (@part, @inst, @cdoffs)
|
||||
* is in hardware-supervised idle mode, or 0 otherwise.
|
||||
*/
|
||||
bool omap4_cminst_is_clkdm_in_hwsup(u8 part, s16 inst, u16 cdoffs)
|
||||
{
|
||||
u32 v;
|
||||
|
||||
v = omap4_cminst_read_inst_reg(part, inst, cdoffs + OMAP4_CM_CLKSTCTRL);
|
||||
v &= OMAP4430_CLKTRCTRL_MASK;
|
||||
v >>= OMAP4430_CLKTRCTRL_SHIFT;
|
||||
|
||||
return (v == OMAP34XX_CLKSTCTRL_ENABLE_AUTO) ? true : false;
|
||||
}
|
||||
|
||||
/**
|
||||
* omap4_cminst_clkdm_enable_hwsup - put a clockdomain in hwsup-idle mode
|
||||
* @part: PRCM partition ID that the clockdomain registers exist in
|
||||
* @inst: CM instance register offset (*_INST macro)
|
||||
* @cdoffs: Clockdomain register offset (*_CDOFFS macro)
|
||||
*
|
||||
* Put a clockdomain referred to by (@part, @inst, @cdoffs) into
|
||||
* hardware-supervised idle mode. No return value.
|
||||
*/
|
||||
void omap4_cminst_clkdm_enable_hwsup(u8 part, s16 inst, u16 cdoffs)
|
||||
{
|
||||
_clktrctrl_write(OMAP34XX_CLKSTCTRL_ENABLE_AUTO, part, inst, cdoffs);
|
||||
}
|
||||
|
||||
/**
|
||||
* omap4_cminst_clkdm_disable_hwsup - put a clockdomain in swsup-idle mode
|
||||
* @part: PRCM partition ID that the clockdomain registers exist in
|
||||
* @inst: CM instance register offset (*_INST macro)
|
||||
* @cdoffs: Clockdomain register offset (*_CDOFFS macro)
|
||||
*
|
||||
* Put a clockdomain referred to by (@part, @inst, @cdoffs) into
|
||||
* software-supervised idle mode, i.e., controlled manually by the
|
||||
* Linux OMAP clockdomain code. No return value.
|
||||
*/
|
||||
void omap4_cminst_clkdm_disable_hwsup(u8 part, s16 inst, u16 cdoffs)
|
||||
{
|
||||
_clktrctrl_write(OMAP34XX_CLKSTCTRL_DISABLE_AUTO, part, inst, cdoffs);
|
||||
}
|
||||
|
||||
/**
|
||||
* omap4_cminst_clkdm_force_sleep - try to put a clockdomain into idle
|
||||
* @part: PRCM partition ID that the clockdomain registers exist in
|
||||
* @inst: CM instance register offset (*_INST macro)
|
||||
* @cdoffs: Clockdomain register offset (*_CDOFFS macro)
|
||||
*
|
||||
* Put a clockdomain referred to by (@part, @inst, @cdoffs) into idle
|
||||
* No return value.
|
||||
*/
|
||||
void omap4_cminst_clkdm_force_sleep(u8 part, s16 inst, u16 cdoffs)
|
||||
{
|
||||
_clktrctrl_write(OMAP34XX_CLKSTCTRL_FORCE_SLEEP, part, inst, cdoffs);
|
||||
}
|
||||
|
||||
/**
|
||||
* omap4_cminst_clkdm_force_sleep - try to take a clockdomain out of idle
|
||||
* @part: PRCM partition ID that the clockdomain registers exist in
|
||||
* @inst: CM instance register offset (*_INST macro)
|
||||
* @cdoffs: Clockdomain register offset (*_CDOFFS macro)
|
||||
*
|
||||
* Take a clockdomain referred to by (@part, @inst, @cdoffs) out of idle,
|
||||
* waking it up. No return value.
|
||||
*/
|
||||
void omap4_cminst_clkdm_force_wakeup(u8 part, s16 inst, u16 cdoffs)
|
||||
{
|
||||
_clktrctrl_write(OMAP34XX_CLKSTCTRL_FORCE_WAKEUP, part, inst, cdoffs);
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* omap4_cm_wait_module_ready - wait for a module to be in 'func' state
|
||||
* @clkctrl_reg: CLKCTRL module address
|
||||
*
|
||||
* Wait for the module IDLEST to be functional. If the idle state is in any
|
||||
* the non functional state (trans, idle or disabled), module and thus the
|
||||
* sysconfig cannot be accessed and will probably lead to an "imprecise
|
||||
* external abort"
|
||||
*
|
||||
* Module idle state:
|
||||
* 0x0 func: Module is fully functional, including OCP
|
||||
* 0x1 trans: Module is performing transition: wakeup, or sleep, or sleep
|
||||
* abortion
|
||||
* 0x2 idle: Module is in Idle mode (only OCP part). It is functional if
|
||||
* using separate functional clock
|
||||
* 0x3 disabled: Module is disabled and cannot be accessed
|
||||
*
|
||||
*/
|
||||
int omap4_cm_wait_module_ready(void __iomem *clkctrl_reg)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
if (!clkctrl_reg)
|
||||
return 0;
|
||||
|
||||
omap_test_timeout((
|
||||
((__raw_readl(clkctrl_reg) & OMAP4430_IDLEST_MASK) == 0) ||
|
||||
(((__raw_readl(clkctrl_reg) & OMAP4430_IDLEST_MASK) >>
|
||||
OMAP4430_IDLEST_SHIFT) == 0x2)),
|
||||
MAX_MODULE_READY_TIME, i);
|
||||
|
||||
return (i < MAX_MODULE_READY_TIME) ? 0 : -EBUSY;
|
||||
}
|
||||
|
31
arch/arm/mach-omap2/cminst44xx.h
Normal file
31
arch/arm/mach-omap2/cminst44xx.h
Normal file
|
@ -0,0 +1,31 @@
|
|||
/*
|
||||
* OMAP4 Clock Management (CM) function prototypes
|
||||
*
|
||||
* Copyright (C) 2010 Nokia Corporation
|
||||
* Paul Walmsley
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
#ifndef __ARCH_ASM_MACH_OMAP2_CMINST44XX_H
|
||||
#define __ARCH_ASM_MACH_OMAP2_CMINST44XX_H
|
||||
|
||||
extern bool omap4_cminst_is_clkdm_in_hwsup(u8 part, s16 inst, u16 cdoffs);
|
||||
extern void omap4_cminst_clkdm_enable_hwsup(u8 part, s16 inst, u16 cdoffs);
|
||||
extern void omap4_cminst_clkdm_disable_hwsup(u8 part, s16 inst, u16 cdoffs);
|
||||
extern void omap4_cminst_clkdm_force_sleep(u8 part, s16 inst, u16 cdoffs);
|
||||
extern void omap4_cminst_clkdm_force_wakeup(u8 part, s16 inst, u16 cdoffs);
|
||||
|
||||
/*
|
||||
* In an ideal world, we would not export these low-level functions,
|
||||
* but this will probably take some time to fix properly
|
||||
*/
|
||||
extern u32 omap4_cminst_read_inst_reg(u8 part, s16 inst, u16 idx);
|
||||
extern void omap4_cminst_write_inst_reg(u32 val, u8 part, s16 inst, u16 idx);
|
||||
extern u32 omap4_cminst_rmw_inst_reg_bits(u32 mask, u32 bits, u8 part,
|
||||
s16 inst, s16 idx);
|
||||
|
||||
extern int omap4_cm_wait_module_ready(void __iomem *clkctrl_reg);
|
||||
|
||||
#endif
|
|
@ -20,12 +20,16 @@
|
|||
|
||||
#include "cm-regbits-34xx.h"
|
||||
#include "prm-regbits-34xx.h"
|
||||
#include "cm.h"
|
||||
#include "prm.h"
|
||||
#include "prm2xxx_3xxx.h"
|
||||
#include "cm2xxx_3xxx.h"
|
||||
#include "sdrc.h"
|
||||
#include "pm.h"
|
||||
#include "control.h"
|
||||
|
||||
/* Used by omap3_ctrl_save_padconf() */
|
||||
#define START_PADCONF_SAVE 0x2
|
||||
#define PADCONF_SAVE_DONE 0x1
|
||||
|
||||
static void __iomem *omap2_ctrl_base;
|
||||
static void __iomem *omap4_ctrl_pad_base;
|
||||
|
||||
|
@ -134,6 +138,7 @@ struct omap3_control_regs {
|
|||
u32 sramldo4;
|
||||
u32 sramldo5;
|
||||
u32 csi;
|
||||
u32 padconf_sys_nirq;
|
||||
};
|
||||
|
||||
static struct omap3_control_regs control_context;
|
||||
|
@ -209,6 +214,37 @@ void omap4_ctrl_pad_writel(u32 val, u16 offset)
|
|||
__raw_writel(val, OMAP4_CTRL_PAD_REGADDR(offset));
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ARCH_OMAP3
|
||||
|
||||
/**
|
||||
* omap3_ctrl_write_boot_mode - set scratchpad boot mode for the next boot
|
||||
* @bootmode: 8-bit value to pass to some boot code
|
||||
*
|
||||
* Set the bootmode in the scratchpad RAM. This is used after the
|
||||
* system restarts. Not sure what actually uses this - it may be the
|
||||
* bootloader, rather than the boot ROM - contrary to the preserved
|
||||
* comment below. No return value.
|
||||
*/
|
||||
void omap3_ctrl_write_boot_mode(u8 bootmode)
|
||||
{
|
||||
u32 l;
|
||||
|
||||
l = ('B' << 24) | ('M' << 16) | bootmode;
|
||||
|
||||
/*
|
||||
* Reserve the first word in scratchpad for communicating
|
||||
* with the boot ROM. A pointer to a data structure
|
||||
* describing the boot process can be stored there,
|
||||
* cf. OMAP34xx TRM, Initialization / Software Booting
|
||||
* Configuration.
|
||||
*
|
||||
* XXX This should use some omap_ctrl_writel()-type function
|
||||
*/
|
||||
__raw_writel(l, OMAP2_L4_IO_ADDRESS(OMAP343X_SCRATCHPAD + 4));
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_ARCH_OMAP3) && defined(CONFIG_PM)
|
||||
/*
|
||||
* Clears the scratchpad contents in case of cold boot-
|
||||
|
@ -220,13 +256,13 @@ void omap3_clear_scratchpad_contents(void)
|
|||
void __iomem *v_addr;
|
||||
u32 offset = 0;
|
||||
v_addr = OMAP2_L4_IO_ADDRESS(OMAP343X_SCRATCHPAD_ROM);
|
||||
if (prm_read_mod_reg(OMAP3430_GR_MOD, OMAP3_PRM_RSTST_OFFSET) &
|
||||
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));
|
||||
prm_set_mod_reg_bits(OMAP3430_GLOBAL_COLD_RST_MASK,
|
||||
OMAP3430_GR_MOD,
|
||||
OMAP3_PRM_RSTST_OFFSET);
|
||||
omap2_prm_set_mod_reg_bits(OMAP3430_GLOBAL_COLD_RST_MASK,
|
||||
OMAP3430_GR_MOD,
|
||||
OMAP3_PRM_RSTST_OFFSET);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -268,32 +304,34 @@ void omap3_save_scratchpad_contents(void)
|
|||
scratchpad_contents.sdrc_block_offset = 0x64;
|
||||
|
||||
/* Populate the PRCM block contents */
|
||||
prcm_block_contents.prm_clksrc_ctrl = prm_read_mod_reg(OMAP3430_GR_MOD,
|
||||
OMAP3_PRM_CLKSRC_CTRL_OFFSET);
|
||||
prcm_block_contents.prm_clksel = prm_read_mod_reg(OMAP3430_CCR_MOD,
|
||||
OMAP3_PRM_CLKSEL_OFFSET);
|
||||
prcm_block_contents.prm_clksrc_ctrl =
|
||||
omap2_prm_read_mod_reg(OMAP3430_GR_MOD,
|
||||
OMAP3_PRM_CLKSRC_CTRL_OFFSET);
|
||||
prcm_block_contents.prm_clksel =
|
||||
omap2_prm_read_mod_reg(OMAP3430_CCR_MOD,
|
||||
OMAP3_PRM_CLKSEL_OFFSET);
|
||||
prcm_block_contents.cm_clksel_core =
|
||||
cm_read_mod_reg(CORE_MOD, CM_CLKSEL);
|
||||
omap2_cm_read_mod_reg(CORE_MOD, CM_CLKSEL);
|
||||
prcm_block_contents.cm_clksel_wkup =
|
||||
cm_read_mod_reg(WKUP_MOD, CM_CLKSEL);
|
||||
omap2_cm_read_mod_reg(WKUP_MOD, CM_CLKSEL);
|
||||
prcm_block_contents.cm_clken_pll =
|
||||
cm_read_mod_reg(PLL_MOD, CM_CLKEN);
|
||||
omap2_cm_read_mod_reg(PLL_MOD, CM_CLKEN);
|
||||
prcm_block_contents.cm_autoidle_pll =
|
||||
cm_read_mod_reg(PLL_MOD, OMAP3430_CM_AUTOIDLE_PLL);
|
||||
omap2_cm_read_mod_reg(PLL_MOD, OMAP3430_CM_AUTOIDLE_PLL);
|
||||
prcm_block_contents.cm_clksel1_pll =
|
||||
cm_read_mod_reg(PLL_MOD, OMAP3430_CM_CLKSEL1_PLL);
|
||||
omap2_cm_read_mod_reg(PLL_MOD, OMAP3430_CM_CLKSEL1_PLL);
|
||||
prcm_block_contents.cm_clksel2_pll =
|
||||
cm_read_mod_reg(PLL_MOD, OMAP3430_CM_CLKSEL2_PLL);
|
||||
omap2_cm_read_mod_reg(PLL_MOD, OMAP3430_CM_CLKSEL2_PLL);
|
||||
prcm_block_contents.cm_clksel3_pll =
|
||||
cm_read_mod_reg(PLL_MOD, OMAP3430_CM_CLKSEL3);
|
||||
omap2_cm_read_mod_reg(PLL_MOD, OMAP3430_CM_CLKSEL3);
|
||||
prcm_block_contents.cm_clken_pll_mpu =
|
||||
cm_read_mod_reg(MPU_MOD, OMAP3430_CM_CLKEN_PLL);
|
||||
omap2_cm_read_mod_reg(MPU_MOD, OMAP3430_CM_CLKEN_PLL);
|
||||
prcm_block_contents.cm_autoidle_pll_mpu =
|
||||
cm_read_mod_reg(MPU_MOD, OMAP3430_CM_AUTOIDLE_PLL);
|
||||
omap2_cm_read_mod_reg(MPU_MOD, OMAP3430_CM_AUTOIDLE_PLL);
|
||||
prcm_block_contents.cm_clksel1_pll_mpu =
|
||||
cm_read_mod_reg(MPU_MOD, OMAP3430_CM_CLKSEL1_PLL);
|
||||
omap2_cm_read_mod_reg(MPU_MOD, OMAP3430_CM_CLKSEL1_PLL);
|
||||
prcm_block_contents.cm_clksel2_pll_mpu =
|
||||
cm_read_mod_reg(MPU_MOD, OMAP3430_CM_CLKSEL2_PLL);
|
||||
omap2_cm_read_mod_reg(MPU_MOD, OMAP3430_CM_CLKSEL2_PLL);
|
||||
prcm_block_contents.prcm_block_size = 0x0;
|
||||
|
||||
/* Populate the SDRC block contents */
|
||||
|
@ -426,6 +464,8 @@ void omap3_control_save_context(void)
|
|||
control_context.sramldo4 = omap_ctrl_readl(OMAP343X_CONTROL_SRAMLDO4);
|
||||
control_context.sramldo5 = omap_ctrl_readl(OMAP343X_CONTROL_SRAMLDO5);
|
||||
control_context.csi = omap_ctrl_readl(OMAP343X_CONTROL_CSI);
|
||||
control_context.padconf_sys_nirq =
|
||||
omap_ctrl_readl(OMAP343X_CONTROL_PADCONF_SYSNIRQ);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -482,6 +522,8 @@ void omap3_control_restore_context(void)
|
|||
omap_ctrl_writel(control_context.sramldo4, OMAP343X_CONTROL_SRAMLDO4);
|
||||
omap_ctrl_writel(control_context.sramldo5, OMAP343X_CONTROL_SRAMLDO5);
|
||||
omap_ctrl_writel(control_context.csi, OMAP343X_CONTROL_CSI);
|
||||
omap_ctrl_writel(control_context.padconf_sys_nirq,
|
||||
OMAP343X_CONTROL_PADCONF_SYSNIRQ);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -492,4 +534,31 @@ void omap3630_ctrl_disable_rta(void)
|
|||
omap_ctrl_writel(OMAP36XX_RTA_DISABLE, OMAP36XX_CONTROL_MEM_RTA_CTRL);
|
||||
}
|
||||
|
||||
/**
|
||||
* omap3_ctrl_save_padconf - save padconf registers to scratchpad RAM
|
||||
*
|
||||
* Tell the SCM to start saving the padconf registers, then wait for
|
||||
* the process to complete. Returns 0 unconditionally, although it
|
||||
* should also eventually be able to return -ETIMEDOUT, if the save
|
||||
* does not complete.
|
||||
*
|
||||
* XXX This function is missing a timeout. What should it be?
|
||||
*/
|
||||
int omap3_ctrl_save_padconf(void)
|
||||
{
|
||||
u32 cpo;
|
||||
|
||||
/* Save the padconf registers */
|
||||
cpo = omap_ctrl_readl(OMAP343X_CONTROL_PADCONF_OFF);
|
||||
cpo |= START_PADCONF_SAVE;
|
||||
omap_ctrl_writel(cpo, OMAP343X_CONTROL_PADCONF_OFF);
|
||||
|
||||
/* wait for the save to complete */
|
||||
while (!(omap_ctrl_readl(OMAP343X_CONTROL_GENERAL_PURPOSE_STATUS)
|
||||
& PADCONF_SAVE_DONE))
|
||||
udelay(1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_ARCH_OMAP3 && CONFIG_PM */
|
||||
|
|
|
@ -357,7 +357,9 @@ extern u32 *get_omap3630_restore_pointer(void);
|
|||
extern u32 omap3_arm_context[128];
|
||||
extern void omap3_control_save_context(void);
|
||||
extern void omap3_control_restore_context(void);
|
||||
extern void omap3_ctrl_write_boot_mode(u8 bootmode);
|
||||
extern void omap3630_ctrl_disable_rta(void);
|
||||
extern int omap3_ctrl_save_padconf(void);
|
||||
#else
|
||||
#define omap_ctrl_base_get() 0
|
||||
#define omap_ctrl_readb(x) 0
|
||||
|
|
|
@ -27,8 +27,8 @@
|
|||
|
||||
#include <plat/prcm.h>
|
||||
#include <plat/irqs.h>
|
||||
#include <plat/powerdomain.h>
|
||||
#include <plat/clockdomain.h>
|
||||
#include "powerdomain.h"
|
||||
#include "clockdomain.h"
|
||||
#include <plat/serial.h>
|
||||
|
||||
#include "pm.h"
|
||||
|
|
|
@ -955,72 +955,12 @@ static inline void omap_init_vout(void) {}
|
|||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
* Inorder to avoid any assumptions from bootloader regarding WDT
|
||||
* settings, WDT module is reset during init. This enables the watchdog
|
||||
* timer. Hence it is required to disable the watchdog after the WDT reset
|
||||
* during init. Otherwise the system would reboot as per the default
|
||||
* watchdog timer registers settings.
|
||||
*/
|
||||
#define OMAP_WDT_WPS (0x34)
|
||||
#define OMAP_WDT_SPR (0x48)
|
||||
|
||||
static int omap2_disable_wdt(struct omap_hwmod *oh, void *unused)
|
||||
{
|
||||
void __iomem *base;
|
||||
int ret;
|
||||
|
||||
if (!oh) {
|
||||
pr_err("%s: Could not look up wdtimer_hwmod\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
base = omap_hwmod_get_mpu_rt_va(oh);
|
||||
if (!base) {
|
||||
pr_err("%s: Could not get the base address for %s\n",
|
||||
oh->name, __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* Enable the clocks before accessing the WDT registers */
|
||||
ret = omap_hwmod_enable(oh);
|
||||
if (ret) {
|
||||
pr_err("%s: Could not enable clocks for %s\n",
|
||||
oh->name, __func__);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* sequence required to disable watchdog */
|
||||
__raw_writel(0xAAAA, base + OMAP_WDT_SPR);
|
||||
while (__raw_readl(base + OMAP_WDT_WPS) & 0x10)
|
||||
cpu_relax();
|
||||
|
||||
__raw_writel(0x5555, base + OMAP_WDT_SPR);
|
||||
while (__raw_readl(base + OMAP_WDT_WPS) & 0x10)
|
||||
cpu_relax();
|
||||
|
||||
ret = omap_hwmod_idle(oh);
|
||||
if (ret)
|
||||
pr_err("%s: Could not disable clocks for %s\n",
|
||||
oh->name, __func__);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void __init omap_disable_wdt(void)
|
||||
{
|
||||
if (cpu_class_is_omap2())
|
||||
omap_hwmod_for_each_by_class("wd_timer",
|
||||
omap2_disable_wdt, NULL);
|
||||
return;
|
||||
}
|
||||
|
||||
static int __init omap2_init_devices(void)
|
||||
{
|
||||
/* please keep these calls, and their implementations above,
|
||||
/*
|
||||
* please keep these calls, and their implementations above,
|
||||
* in alphabetical order so they're easier to sort through.
|
||||
*/
|
||||
omap_disable_wdt();
|
||||
omap_hsmmc_reset();
|
||||
omap_init_audio();
|
||||
omap_init_camera();
|
||||
|
|
|
@ -32,9 +32,7 @@
|
|||
#include <asm/clkdev.h>
|
||||
|
||||
#include "clock.h"
|
||||
#include "prm.h"
|
||||
#include "prm-regbits-34xx.h"
|
||||
#include "cm.h"
|
||||
#include "cm2xxx_3xxx.h"
|
||||
#include "cm-regbits-34xx.h"
|
||||
|
||||
/* CM_AUTOIDLE_PLL*.AUTO_* bit values */
|
||||
|
@ -225,9 +223,33 @@ static int _omap3_noncore_dpll_stop(struct clk *clk)
|
|||
}
|
||||
|
||||
/**
|
||||
* lookup_dco_sddiv - Set j-type DPLL4 compensation variables
|
||||
* _lookup_dco - Lookup DCO used by j-type DPLL
|
||||
* @clk: pointer to a DPLL struct clk
|
||||
* @dco: digital control oscillator selector
|
||||
* @m: DPLL multiplier to set
|
||||
* @n: DPLL divider to set
|
||||
*
|
||||
* See 36xx TRM section 3.5.3.3.3.2 "Type B DPLL (Low-Jitter)"
|
||||
*
|
||||
* XXX This code is not needed for 3430/AM35xx; can it be optimized
|
||||
* out in non-multi-OMAP builds for those chips?
|
||||
*/
|
||||
static void _lookup_dco(struct clk *clk, u8 *dco, u16 m, u8 n)
|
||||
{
|
||||
unsigned long fint, clkinp; /* watch out for overflow */
|
||||
|
||||
clkinp = clk->parent->rate;
|
||||
fint = (clkinp / n) * m;
|
||||
|
||||
if (fint < 1000000000)
|
||||
*dco = 2;
|
||||
else
|
||||
*dco = 4;
|
||||
}
|
||||
|
||||
/**
|
||||
* _lookup_sddiv - Calculate sigma delta divider for j-type DPLL
|
||||
* @clk: pointer to a DPLL struct clk
|
||||
* @sd_div: target sigma-delta divider
|
||||
* @m: DPLL multiplier to set
|
||||
* @n: DPLL divider to set
|
||||
|
@ -237,19 +259,13 @@ static int _omap3_noncore_dpll_stop(struct clk *clk)
|
|||
* XXX This code is not needed for 3430/AM35xx; can it be optimized
|
||||
* out in non-multi-OMAP builds for those chips?
|
||||
*/
|
||||
static void lookup_dco_sddiv(struct clk *clk, u8 *dco, u8 *sd_div, u16 m,
|
||||
u8 n)
|
||||
static void _lookup_sddiv(struct clk *clk, u8 *sd_div, u16 m, u8 n)
|
||||
{
|
||||
unsigned long fint, clkinp, sd; /* watch out for overflow */
|
||||
unsigned long clkinp, sd; /* watch out for overflow */
|
||||
int mod1, mod2;
|
||||
|
||||
clkinp = clk->parent->rate;
|
||||
fint = (clkinp / n) * m;
|
||||
|
||||
if (fint < 1000000000)
|
||||
*dco = 2;
|
||||
else
|
||||
*dco = 4;
|
||||
/*
|
||||
* target sigma-delta to near 250MHz
|
||||
* sd = ceil[(m/(n+1)) * (clkinp_MHz / 250)]
|
||||
|
@ -278,6 +294,7 @@ static void lookup_dco_sddiv(struct clk *clk, u8 *dco, u8 *sd_div, u16 m,
|
|||
static int omap3_noncore_dpll_program(struct clk *clk, u16 m, u8 n, u16 freqsel)
|
||||
{
|
||||
struct dpll_data *dd = clk->dpll_data;
|
||||
u8 dco, sd_div;
|
||||
u32 v;
|
||||
|
||||
/* 3430 ES2 TRM: 4.7.6.9 DPLL Programming Sequence */
|
||||
|
@ -300,18 +317,16 @@ static int omap3_noncore_dpll_program(struct clk *clk, u16 m, u8 n, u16 freqsel)
|
|||
v |= m << __ffs(dd->mult_mask);
|
||||
v |= (n - 1) << __ffs(dd->div1_mask);
|
||||
|
||||
/*
|
||||
* XXX This code is not needed for 3430/AM35XX; can it be optimized
|
||||
* out in non-multi-OMAP builds for those chips?
|
||||
*/
|
||||
if ((dd->flags & DPLL_J_TYPE) && !(dd->flags & DPLL_NO_DCO_SEL)) {
|
||||
u8 dco, sd_div;
|
||||
lookup_dco_sddiv(clk, &dco, &sd_div, m, n);
|
||||
/* XXX This probably will need revision for OMAP4 */
|
||||
v &= ~(OMAP3630_PERIPH_DPLL_DCO_SEL_MASK
|
||||
| OMAP3630_PERIPH_DPLL_SD_DIV_MASK);
|
||||
v |= dco << __ffs(OMAP3630_PERIPH_DPLL_DCO_SEL_MASK);
|
||||
v |= sd_div << __ffs(OMAP3630_PERIPH_DPLL_SD_DIV_MASK);
|
||||
/* Configure dco and sd_div for dplls that have these fields */
|
||||
if (dd->dco_mask) {
|
||||
_lookup_dco(clk, &dco, m, n);
|
||||
v &= ~(dd->dco_mask);
|
||||
v |= dco << __ffs(dd->dco_mask);
|
||||
}
|
||||
if (dd->sddiv_mask) {
|
||||
_lookup_sddiv(clk, &sd_div, m, n);
|
||||
v &= ~(dd->sddiv_mask);
|
||||
v |= sd_div << __ffs(dd->sddiv_mask);
|
||||
}
|
||||
|
||||
__raw_writel(v, dd->mult_div1_reg);
|
||||
|
|
|
@ -11,9 +11,16 @@
|
|||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
/*
|
||||
* XXX The function pointers to the PRM/CM functions are incorrect and
|
||||
* should be removed. No device driver should be changing PRM/CM bits
|
||||
* directly; that's a layering violation -- those bits are the responsibility
|
||||
* of the OMAP PM core code.
|
||||
*/
|
||||
|
||||
#include <linux/platform_device.h>
|
||||
#include "prm.h"
|
||||
#include "cm.h"
|
||||
#include "cm2xxx_3xxx.h"
|
||||
#include "prm2xxx_3xxx.h"
|
||||
#ifdef CONFIG_BRIDGE_DVFS
|
||||
#include <plat/omap-pm.h>
|
||||
#endif
|
||||
|
@ -31,12 +38,12 @@ static struct omap_dsp_platform_data omap_dsp_pdata __initdata = {
|
|||
.cpu_set_freq = omap_pm_cpu_set_freq,
|
||||
.cpu_get_freq = omap_pm_cpu_get_freq,
|
||||
#endif
|
||||
.dsp_prm_read = prm_read_mod_reg,
|
||||
.dsp_prm_write = prm_write_mod_reg,
|
||||
.dsp_prm_rmw_bits = prm_rmw_mod_reg_bits,
|
||||
.dsp_cm_read = cm_read_mod_reg,
|
||||
.dsp_cm_write = cm_write_mod_reg,
|
||||
.dsp_cm_rmw_bits = cm_rmw_mod_reg_bits,
|
||||
.dsp_prm_read = omap2_prm_read_mod_reg,
|
||||
.dsp_prm_write = omap2_prm_write_mod_reg,
|
||||
.dsp_prm_rmw_bits = omap2_prm_rmw_mod_reg_bits,
|
||||
.dsp_cm_read = omap2_cm_read_mod_reg,
|
||||
.dsp_cm_write = omap2_cm_write_mod_reg,
|
||||
.dsp_cm_rmw_bits = omap2_cm_rmw_mod_reg_bits,
|
||||
};
|
||||
|
||||
static int __init omap_dsp_init(void)
|
||||
|
|
|
@ -39,12 +39,9 @@
|
|||
#include "io.h"
|
||||
|
||||
#include <plat/omap-pm.h>
|
||||
#include <plat/powerdomain.h>
|
||||
#include "powerdomains.h"
|
||||
|
||||
#include <plat/clockdomain.h>
|
||||
#include "clockdomains.h"
|
||||
#include "powerdomain.h"
|
||||
|
||||
#include "clockdomain.h"
|
||||
#include <plat/omap_hwmod.h>
|
||||
#include <plat/multi.h>
|
||||
|
||||
|
@ -312,6 +309,11 @@ static int __init _omap2_init_reprogram_sdrc(void)
|
|||
return v;
|
||||
}
|
||||
|
||||
static int _set_hwmod_postsetup_state(struct omap_hwmod *oh, void *data)
|
||||
{
|
||||
return omap_hwmod_set_postsetup_state(oh, *(u8 *)data);
|
||||
}
|
||||
|
||||
/*
|
||||
* Initialize asm_irq_base for entry-macro.S
|
||||
*/
|
||||
|
@ -331,21 +333,55 @@ static inline void omap_irq_base_init(void)
|
|||
#endif
|
||||
}
|
||||
|
||||
void __init omap2_init_common_hw(struct omap_sdrc_params *sdrc_cs0,
|
||||
struct omap_sdrc_params *sdrc_cs1)
|
||||
void __init omap2_init_common_infrastructure(void)
|
||||
{
|
||||
u8 skip_setup_idle = 0;
|
||||
u8 postsetup_state;
|
||||
|
||||
pwrdm_init(powerdomains_omap);
|
||||
clkdm_init(clockdomains_omap, clkdm_autodeps);
|
||||
if (cpu_is_omap242x())
|
||||
if (cpu_is_omap242x()) {
|
||||
omap2xxx_powerdomains_init();
|
||||
omap2_clockdomains_init();
|
||||
omap2420_hwmod_init();
|
||||
else if (cpu_is_omap243x())
|
||||
} else if (cpu_is_omap243x()) {
|
||||
omap2xxx_powerdomains_init();
|
||||
omap2_clockdomains_init();
|
||||
omap2430_hwmod_init();
|
||||
else if (cpu_is_omap34xx())
|
||||
} else if (cpu_is_omap34xx()) {
|
||||
omap3xxx_powerdomains_init();
|
||||
omap2_clockdomains_init();
|
||||
omap3xxx_hwmod_init();
|
||||
else if (cpu_is_omap44xx())
|
||||
} else if (cpu_is_omap44xx()) {
|
||||
omap44xx_powerdomains_init();
|
||||
omap44xx_clockdomains_init();
|
||||
omap44xx_hwmod_init();
|
||||
} else {
|
||||
pr_err("Could not init hwmod data - unknown SoC\n");
|
||||
}
|
||||
|
||||
/* Set the default postsetup state for all hwmods */
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
postsetup_state = _HWMOD_STATE_IDLE;
|
||||
#else
|
||||
postsetup_state = _HWMOD_STATE_ENABLED;
|
||||
#endif
|
||||
omap_hwmod_for_each(_set_hwmod_postsetup_state, &postsetup_state);
|
||||
|
||||
/*
|
||||
* Set the default postsetup state for unusual modules (like
|
||||
* MPU WDT).
|
||||
*
|
||||
* The postsetup_state is not actually used until
|
||||
* omap_hwmod_late_init(), so boards that desire full watchdog
|
||||
* coverage of kernel initialization can reprogram the
|
||||
* postsetup_state between the calls to
|
||||
* omap2_init_common_infra() and omap2_init_common_devices().
|
||||
*
|
||||
* XXX ideally we could detect whether the MPU WDT was currently
|
||||
* enabled here and make this conditional
|
||||
*/
|
||||
postsetup_state = _HWMOD_STATE_DISABLED;
|
||||
omap_hwmod_for_each_by_class("wd_timer",
|
||||
_set_hwmod_postsetup_state,
|
||||
&postsetup_state);
|
||||
|
||||
omap_pm_if_early_init();
|
||||
|
||||
|
@ -358,14 +394,16 @@ void __init omap2_init_common_hw(struct omap_sdrc_params *sdrc_cs0,
|
|||
else if (cpu_is_omap44xx())
|
||||
omap4xxx_clk_init();
|
||||
else
|
||||
pr_err("Could not init clock framework - unknown CPU\n");
|
||||
pr_err("Could not init clock framework - unknown SoC\n");
|
||||
}
|
||||
|
||||
void __init omap2_init_common_devices(struct omap_sdrc_params *sdrc_cs0,
|
||||
struct omap_sdrc_params *sdrc_cs1)
|
||||
{
|
||||
omap_serial_early_init();
|
||||
|
||||
#ifndef CONFIG_PM_RUNTIME
|
||||
skip_setup_idle = 1;
|
||||
#endif
|
||||
omap_hwmod_late_init(skip_setup_idle);
|
||||
omap_hwmod_late_init();
|
||||
|
||||
if (cpu_is_omap24xx() || cpu_is_omap34xx()) {
|
||||
omap2_sdrc_init(sdrc_cs0, sdrc_cs1);
|
||||
_omap2_init_reprogram_sdrc();
|
||||
|
|
|
@ -135,17 +135,20 @@
|
|||
#include <linux/err.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/spinlock.h>
|
||||
|
||||
#include <plat/common.h>
|
||||
#include <plat/cpu.h>
|
||||
#include <plat/clockdomain.h>
|
||||
#include <plat/powerdomain.h>
|
||||
#include "clockdomain.h"
|
||||
#include "powerdomain.h"
|
||||
#include <plat/clock.h>
|
||||
#include <plat/omap_hwmod.h>
|
||||
#include <plat/prcm.h>
|
||||
|
||||
#include "cm.h"
|
||||
#include "prm.h"
|
||||
#include "cm2xxx_3xxx.h"
|
||||
#include "cm44xx.h"
|
||||
#include "prm2xxx_3xxx.h"
|
||||
#include "prm44xx.h"
|
||||
|
||||
/* Maximum microseconds to wait for OMAP module to softreset */
|
||||
#define MAX_MODULE_SOFTRESET_WAIT 10000
|
||||
|
@ -156,8 +159,6 @@
|
|||
/* omap_hwmod_list contains all registered struct omap_hwmods */
|
||||
static LIST_HEAD(omap_hwmod_list);
|
||||
|
||||
static DEFINE_MUTEX(omap_hwmod_mutex);
|
||||
|
||||
/* mpu_oh: used to add/remove MPU initiator from sleepdep list */
|
||||
static struct omap_hwmod *mpu_oh;
|
||||
|
||||
|
@ -209,10 +210,9 @@ static void _write_sysconfig(u32 v, struct omap_hwmod *oh)
|
|||
|
||||
/* XXX ensure module interface clock is up */
|
||||
|
||||
if (oh->_sysc_cache != v) {
|
||||
oh->_sysc_cache = v;
|
||||
omap_hwmod_write(v, oh, oh->class->sysc->sysc_offs);
|
||||
}
|
||||
/* Module might have lost context, always update cache and register */
|
||||
oh->_sysc_cache = v;
|
||||
omap_hwmod_write(v, oh, oh->class->sysc->sysc_offs);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -388,12 +388,13 @@ static int _set_module_autoidle(struct omap_hwmod *oh, u8 autoidle,
|
|||
* Allow the hardware module @oh to send wakeups. Returns -EINVAL
|
||||
* upon error or 0 upon success.
|
||||
*/
|
||||
static int _enable_wakeup(struct omap_hwmod *oh)
|
||||
static int _enable_wakeup(struct omap_hwmod *oh, u32 *v)
|
||||
{
|
||||
u32 v, wakeup_mask;
|
||||
u32 wakeup_mask;
|
||||
|
||||
if (!oh->class->sysc ||
|
||||
!(oh->class->sysc->sysc_flags & SYSC_HAS_ENAWAKEUP))
|
||||
!((oh->class->sysc->sysc_flags & SYSC_HAS_ENAWAKEUP) ||
|
||||
(oh->class->sysc->idlemodes & SIDLE_SMART_WKUP)))
|
||||
return -EINVAL;
|
||||
|
||||
if (!oh->class->sysc->sysc_fields) {
|
||||
|
@ -403,9 +404,10 @@ static int _enable_wakeup(struct omap_hwmod *oh)
|
|||
|
||||
wakeup_mask = (0x1 << oh->class->sysc->sysc_fields->enwkup_shift);
|
||||
|
||||
v = oh->_sysc_cache;
|
||||
v |= wakeup_mask;
|
||||
_write_sysconfig(v, oh);
|
||||
*v |= wakeup_mask;
|
||||
|
||||
if (oh->class->sysc->idlemodes & SIDLE_SMART_WKUP)
|
||||
_set_slave_idlemode(oh, HWMOD_IDLEMODE_SMART_WKUP, v);
|
||||
|
||||
/* XXX test pwrdm_get_wken for this hwmod's subsystem */
|
||||
|
||||
|
@ -421,12 +423,13 @@ static int _enable_wakeup(struct omap_hwmod *oh)
|
|||
* Prevent the hardware module @oh to send wakeups. Returns -EINVAL
|
||||
* upon error or 0 upon success.
|
||||
*/
|
||||
static int _disable_wakeup(struct omap_hwmod *oh)
|
||||
static int _disable_wakeup(struct omap_hwmod *oh, u32 *v)
|
||||
{
|
||||
u32 v, wakeup_mask;
|
||||
u32 wakeup_mask;
|
||||
|
||||
if (!oh->class->sysc ||
|
||||
!(oh->class->sysc->sysc_flags & SYSC_HAS_ENAWAKEUP))
|
||||
!((oh->class->sysc->sysc_flags & SYSC_HAS_ENAWAKEUP) ||
|
||||
(oh->class->sysc->idlemodes & SIDLE_SMART_WKUP)))
|
||||
return -EINVAL;
|
||||
|
||||
if (!oh->class->sysc->sysc_fields) {
|
||||
|
@ -436,9 +439,10 @@ static int _disable_wakeup(struct omap_hwmod *oh)
|
|||
|
||||
wakeup_mask = (0x1 << oh->class->sysc->sysc_fields->enwkup_shift);
|
||||
|
||||
v = oh->_sysc_cache;
|
||||
v &= ~wakeup_mask;
|
||||
_write_sysconfig(v, oh);
|
||||
*v &= ~wakeup_mask;
|
||||
|
||||
if (oh->class->sysc->idlemodes & SIDLE_SMART_WKUP)
|
||||
_set_slave_idlemode(oh, HWMOD_IDLEMODE_SMART, v);
|
||||
|
||||
/* XXX test pwrdm_get_wken for this hwmod's subsystem */
|
||||
|
||||
|
@ -675,7 +679,7 @@ static void _disable_optional_clocks(struct omap_hwmod *oh)
|
|||
* Returns the array index of the OCP slave port that the MPU
|
||||
* addresses the device on, or -EINVAL upon error or not found.
|
||||
*/
|
||||
static int _find_mpu_port_index(struct omap_hwmod *oh)
|
||||
static int __init _find_mpu_port_index(struct omap_hwmod *oh)
|
||||
{
|
||||
int i;
|
||||
int found = 0;
|
||||
|
@ -709,7 +713,7 @@ static int _find_mpu_port_index(struct omap_hwmod *oh)
|
|||
* Return the virtual address of the base of the register target of
|
||||
* device @oh, or NULL on error.
|
||||
*/
|
||||
static void __iomem *_find_mpu_rt_base(struct omap_hwmod *oh, u8 index)
|
||||
static void __iomem * __init _find_mpu_rt_base(struct omap_hwmod *oh, u8 index)
|
||||
{
|
||||
struct omap_hwmod_ocp_if *os;
|
||||
struct omap_hwmod_addr_space *mem;
|
||||
|
@ -786,11 +790,11 @@ static void _enable_sysc(struct omap_hwmod *oh)
|
|||
(sf & SYSC_HAS_CLOCKACTIVITY))
|
||||
_set_clockactivity(oh, oh->class->sysc->clockact, &v);
|
||||
|
||||
_write_sysconfig(v, oh);
|
||||
|
||||
/* If slave is in SMARTIDLE, also enable wakeup */
|
||||
if ((sf & SYSC_HAS_SIDLEMODE) && !(oh->flags & HWMOD_SWSUP_SIDLE))
|
||||
_enable_wakeup(oh);
|
||||
_enable_wakeup(oh, &v);
|
||||
|
||||
_write_sysconfig(v, oh);
|
||||
|
||||
/*
|
||||
* Set the autoidle bit only after setting the smartidle bit
|
||||
|
@ -836,6 +840,10 @@ static void _idle_sysc(struct omap_hwmod *oh)
|
|||
_set_master_standbymode(oh, idlemode, &v);
|
||||
}
|
||||
|
||||
/* If slave is in SMARTIDLE, also enable wakeup */
|
||||
if ((sf & SYSC_HAS_SIDLEMODE) && !(oh->flags & HWMOD_SWSUP_SIDLE))
|
||||
_enable_wakeup(oh, &v);
|
||||
|
||||
_write_sysconfig(v, oh);
|
||||
}
|
||||
|
||||
|
@ -874,7 +882,6 @@ static void _shutdown_sysc(struct omap_hwmod *oh)
|
|||
* @name: find an omap_hwmod by name
|
||||
*
|
||||
* Return a pointer to an omap_hwmod by name, or NULL if not found.
|
||||
* Caller must hold omap_hwmod_mutex.
|
||||
*/
|
||||
static struct omap_hwmod *_lookup(const char *name)
|
||||
{
|
||||
|
@ -1089,7 +1096,7 @@ static int _read_hardreset(struct omap_hwmod *oh, const char *name)
|
|||
}
|
||||
|
||||
/**
|
||||
* _reset - reset an omap_hwmod
|
||||
* _ocp_softreset - reset an omap_hwmod via the OCP_SYSCONFIG bit
|
||||
* @oh: struct omap_hwmod *
|
||||
*
|
||||
* Resets an omap_hwmod @oh via the OCP_SYSCONFIG bit. hwmod must be
|
||||
|
@ -1098,12 +1105,13 @@ static int _read_hardreset(struct omap_hwmod *oh, const char *name)
|
|||
* the module did not reset in time, or 0 upon success.
|
||||
*
|
||||
* In OMAP3 a specific SYSSTATUS register is used to get the reset status.
|
||||
* Starting in OMAP4, some IPs does not have SYSSTATUS register and instead
|
||||
* Starting in OMAP4, some IPs do not have SYSSTATUS registers and instead
|
||||
* use the SYSCONFIG softreset bit to provide the status.
|
||||
*
|
||||
* Note that some IP like McBSP does have a reset control but no reset status.
|
||||
* Note that some IP like McBSP do have reset control but don't have
|
||||
* reset status.
|
||||
*/
|
||||
static int _reset(struct omap_hwmod *oh)
|
||||
static int _ocp_softreset(struct omap_hwmod *oh)
|
||||
{
|
||||
u32 v;
|
||||
int c = 0;
|
||||
|
@ -1124,7 +1132,7 @@ static int _reset(struct omap_hwmod *oh)
|
|||
if (oh->flags & HWMOD_CONTROL_OPT_CLKS_IN_RESET)
|
||||
_enable_optional_clocks(oh);
|
||||
|
||||
pr_debug("omap_hwmod: %s: resetting\n", oh->name);
|
||||
pr_debug("omap_hwmod: %s: resetting via OCP SOFTRESET\n", oh->name);
|
||||
|
||||
v = oh->_sysc_cache;
|
||||
ret = _set_softreset(oh, &v);
|
||||
|
@ -1164,17 +1172,41 @@ static int _reset(struct omap_hwmod *oh)
|
|||
}
|
||||
|
||||
/**
|
||||
* _omap_hwmod_enable - enable an omap_hwmod
|
||||
* _reset - reset an omap_hwmod
|
||||
* @oh: struct omap_hwmod *
|
||||
*
|
||||
* Resets an omap_hwmod @oh. The default software reset mechanism for
|
||||
* most OMAP IP blocks is triggered via the OCP_SYSCONFIG.SOFTRESET
|
||||
* bit. However, some hwmods cannot be reset via this method: some
|
||||
* are not targets and therefore have no OCP header registers to
|
||||
* access; others (like the IVA) have idiosyncratic reset sequences.
|
||||
* So for these relatively rare cases, custom reset code can be
|
||||
* supplied in the struct omap_hwmod_class .reset function pointer.
|
||||
* Passes along the return value from either _reset() or the custom
|
||||
* reset function - these must return -EINVAL if the hwmod cannot be
|
||||
* reset this way or if the hwmod is in the wrong state, -ETIMEDOUT if
|
||||
* the module did not reset in time, or 0 upon success.
|
||||
*/
|
||||
static int _reset(struct omap_hwmod *oh)
|
||||
{
|
||||
int ret;
|
||||
|
||||
pr_debug("omap_hwmod: %s: resetting\n", oh->name);
|
||||
|
||||
ret = (oh->class->reset) ? oh->class->reset(oh) : _ocp_softreset(oh);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* _enable - enable an omap_hwmod
|
||||
* @oh: struct omap_hwmod *
|
||||
*
|
||||
* Enables an omap_hwmod @oh such that the MPU can access the hwmod's
|
||||
* register target. (This function has a full name --
|
||||
* _omap_hwmod_enable() rather than simply _enable() -- because it is
|
||||
* currently required by the pm34xx.c idle loop.) Returns -EINVAL if
|
||||
* the hwmod is in the wrong state or passes along the return value of
|
||||
* _wait_target_ready().
|
||||
* register target. Returns -EINVAL if the hwmod is in the wrong
|
||||
* state or passes along the return value of _wait_target_ready().
|
||||
*/
|
||||
int _omap_hwmod_enable(struct omap_hwmod *oh)
|
||||
static int _enable(struct omap_hwmod *oh)
|
||||
{
|
||||
int r;
|
||||
|
||||
|
@ -1213,6 +1245,7 @@ int _omap_hwmod_enable(struct omap_hwmod *oh)
|
|||
_enable_sysc(oh);
|
||||
}
|
||||
} else {
|
||||
_disable_clocks(oh);
|
||||
pr_debug("omap_hwmod: %s: _wait_target_ready: %d\n",
|
||||
oh->name, r);
|
||||
}
|
||||
|
@ -1221,16 +1254,14 @@ int _omap_hwmod_enable(struct omap_hwmod *oh)
|
|||
}
|
||||
|
||||
/**
|
||||
* _omap_hwmod_idle - idle an omap_hwmod
|
||||
* _idle - idle an omap_hwmod
|
||||
* @oh: struct omap_hwmod *
|
||||
*
|
||||
* Idles an omap_hwmod @oh. This should be called once the hwmod has
|
||||
* no further work. (This function has a full name --
|
||||
* _omap_hwmod_idle() rather than simply _idle() -- because it is
|
||||
* currently required by the pm34xx.c idle loop.) Returns -EINVAL if
|
||||
* the hwmod is in the wrong state or returns 0.
|
||||
* no further work. Returns -EINVAL if the hwmod is in the wrong
|
||||
* state or returns 0.
|
||||
*/
|
||||
int _omap_hwmod_idle(struct omap_hwmod *oh)
|
||||
static int _idle(struct omap_hwmod *oh)
|
||||
{
|
||||
if (oh->_state != _HWMOD_STATE_ENABLED) {
|
||||
WARN(1, "omap_hwmod: %s: idle state can only be entered from "
|
||||
|
@ -1261,6 +1292,9 @@ int _omap_hwmod_idle(struct omap_hwmod *oh)
|
|||
*/
|
||||
static int _shutdown(struct omap_hwmod *oh)
|
||||
{
|
||||
int ret;
|
||||
u8 prev_state;
|
||||
|
||||
if (oh->_state != _HWMOD_STATE_IDLE &&
|
||||
oh->_state != _HWMOD_STATE_ENABLED) {
|
||||
WARN(1, "omap_hwmod: %s: disabled state can only be entered "
|
||||
|
@ -1270,6 +1304,18 @@ static int _shutdown(struct omap_hwmod *oh)
|
|||
|
||||
pr_debug("omap_hwmod: %s: disabling\n", oh->name);
|
||||
|
||||
if (oh->class->pre_shutdown) {
|
||||
prev_state = oh->_state;
|
||||
if (oh->_state == _HWMOD_STATE_IDLE)
|
||||
_enable(oh);
|
||||
ret = oh->class->pre_shutdown(oh);
|
||||
if (ret) {
|
||||
if (prev_state == _HWMOD_STATE_IDLE)
|
||||
_idle(oh);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
if (oh->class->sysc)
|
||||
_shutdown_sysc(oh);
|
||||
|
||||
|
@ -1298,23 +1344,15 @@ static int _shutdown(struct omap_hwmod *oh)
|
|||
/**
|
||||
* _setup - do initial configuration of omap_hwmod
|
||||
* @oh: struct omap_hwmod *
|
||||
* @skip_setup_idle_p: do not idle hwmods at the end of the fn if 1
|
||||
*
|
||||
* Writes the CLOCKACTIVITY bits @clockact to the hwmod @oh
|
||||
* OCP_SYSCONFIG register. @skip_setup_idle is intended to be used on
|
||||
* a system that will not call omap_hwmod_enable() to enable devices
|
||||
* (e.g., a system without PM runtime). Returns -EINVAL if the hwmod
|
||||
* is in the wrong state or returns 0.
|
||||
* OCP_SYSCONFIG register. Returns -EINVAL if the hwmod is in the
|
||||
* wrong state or returns 0.
|
||||
*/
|
||||
static int _setup(struct omap_hwmod *oh, void *data)
|
||||
{
|
||||
int i, r;
|
||||
u8 skip_setup_idle;
|
||||
|
||||
if (!oh || !data)
|
||||
return -EINVAL;
|
||||
|
||||
skip_setup_idle = *(u8 *)data;
|
||||
u8 postsetup_state;
|
||||
|
||||
/* Set iclk autoidle mode */
|
||||
if (oh->slaves_cnt > 0) {
|
||||
|
@ -1334,7 +1372,6 @@ static int _setup(struct omap_hwmod *oh, void *data)
|
|||
}
|
||||
}
|
||||
|
||||
mutex_init(&oh->_mutex);
|
||||
oh->_state = _HWMOD_STATE_INITIALIZED;
|
||||
|
||||
/*
|
||||
|
@ -1347,7 +1384,7 @@ static int _setup(struct omap_hwmod *oh, void *data)
|
|||
if ((oh->flags & HWMOD_INIT_NO_RESET) && oh->rst_lines_cnt == 1)
|
||||
return 0;
|
||||
|
||||
r = _omap_hwmod_enable(oh);
|
||||
r = _enable(oh);
|
||||
if (r) {
|
||||
pr_warning("omap_hwmod: %s: cannot be enabled (%d)\n",
|
||||
oh->name, oh->_state);
|
||||
|
@ -1359,7 +1396,7 @@ static int _setup(struct omap_hwmod *oh, void *data)
|
|||
|
||||
/*
|
||||
* OCP_SYSCONFIG bits need to be reprogrammed after a softreset.
|
||||
* The _omap_hwmod_enable() function should be split to
|
||||
* The _enable() function should be split to
|
||||
* avoid the rewrite of the OCP_SYSCONFIG register.
|
||||
*/
|
||||
if (oh->class->sysc) {
|
||||
|
@ -1368,12 +1405,77 @@ static int _setup(struct omap_hwmod *oh, void *data)
|
|||
}
|
||||
}
|
||||
|
||||
if (!(oh->flags & HWMOD_INIT_NO_IDLE) && !skip_setup_idle)
|
||||
_omap_hwmod_idle(oh);
|
||||
postsetup_state = oh->_postsetup_state;
|
||||
if (postsetup_state == _HWMOD_STATE_UNKNOWN)
|
||||
postsetup_state = _HWMOD_STATE_ENABLED;
|
||||
|
||||
/*
|
||||
* XXX HWMOD_INIT_NO_IDLE does not belong in hwmod data -
|
||||
* it should be set by the core code as a runtime flag during startup
|
||||
*/
|
||||
if ((oh->flags & HWMOD_INIT_NO_IDLE) &&
|
||||
(postsetup_state == _HWMOD_STATE_IDLE))
|
||||
postsetup_state = _HWMOD_STATE_ENABLED;
|
||||
|
||||
if (postsetup_state == _HWMOD_STATE_IDLE)
|
||||
_idle(oh);
|
||||
else if (postsetup_state == _HWMOD_STATE_DISABLED)
|
||||
_shutdown(oh);
|
||||
else if (postsetup_state != _HWMOD_STATE_ENABLED)
|
||||
WARN(1, "hwmod: %s: unknown postsetup state %d! defaulting to enabled\n",
|
||||
oh->name, postsetup_state);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* _register - register a struct omap_hwmod
|
||||
* @oh: struct omap_hwmod *
|
||||
*
|
||||
* Registers the omap_hwmod @oh. Returns -EEXIST if an omap_hwmod
|
||||
* already has been registered by the same name; -EINVAL if the
|
||||
* omap_hwmod is in the wrong state, if @oh is NULL, if the
|
||||
* omap_hwmod's class field is NULL; if the omap_hwmod is missing a
|
||||
* name, or if the omap_hwmod's class is missing a name; or 0 upon
|
||||
* success.
|
||||
*
|
||||
* XXX The data should be copied into bootmem, so the original data
|
||||
* should be marked __initdata and freed after init. This would allow
|
||||
* unneeded omap_hwmods to be freed on multi-OMAP configurations. Note
|
||||
* that the copy process would be relatively complex due to the large number
|
||||
* of substructures.
|
||||
*/
|
||||
static int __init _register(struct omap_hwmod *oh)
|
||||
{
|
||||
int ret, ms_id;
|
||||
|
||||
if (!oh || !oh->name || !oh->class || !oh->class->name ||
|
||||
(oh->_state != _HWMOD_STATE_UNKNOWN))
|
||||
return -EINVAL;
|
||||
|
||||
pr_debug("omap_hwmod: %s: registering\n", oh->name);
|
||||
|
||||
if (_lookup(oh->name))
|
||||
return -EEXIST;
|
||||
|
||||
ms_id = _find_mpu_port_index(oh);
|
||||
if (!IS_ERR_VALUE(ms_id)) {
|
||||
oh->_mpu_port_index = ms_id;
|
||||
oh->_mpu_rt_va = _find_mpu_rt_base(oh, oh->_mpu_port_index);
|
||||
} else {
|
||||
oh->_int_flags |= _HWMOD_NO_MPU_PORT;
|
||||
}
|
||||
|
||||
list_add_tail(&oh->node, &omap_hwmod_list);
|
||||
|
||||
spin_lock_init(&oh->_lock);
|
||||
|
||||
oh->_state = _HWMOD_STATE_REGISTERED;
|
||||
|
||||
ret = 0;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/* Public functions */
|
||||
|
@ -1426,59 +1528,6 @@ int omap_hwmod_set_slave_idlemode(struct omap_hwmod *oh, u8 idlemode)
|
|||
return retval;
|
||||
}
|
||||
|
||||
/**
|
||||
* omap_hwmod_register - register a struct omap_hwmod
|
||||
* @oh: struct omap_hwmod *
|
||||
*
|
||||
* Registers the omap_hwmod @oh. Returns -EEXIST if an omap_hwmod
|
||||
* already has been registered by the same name; -EINVAL if the
|
||||
* omap_hwmod is in the wrong state, if @oh is NULL, if the
|
||||
* omap_hwmod's class field is NULL; if the omap_hwmod is missing a
|
||||
* name, or if the omap_hwmod's class is missing a name; or 0 upon
|
||||
* success.
|
||||
*
|
||||
* XXX The data should be copied into bootmem, so the original data
|
||||
* should be marked __initdata and freed after init. This would allow
|
||||
* unneeded omap_hwmods to be freed on multi-OMAP configurations. Note
|
||||
* that the copy process would be relatively complex due to the large number
|
||||
* of substructures.
|
||||
*/
|
||||
int omap_hwmod_register(struct omap_hwmod *oh)
|
||||
{
|
||||
int ret, ms_id;
|
||||
|
||||
if (!oh || !oh->name || !oh->class || !oh->class->name ||
|
||||
(oh->_state != _HWMOD_STATE_UNKNOWN))
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&omap_hwmod_mutex);
|
||||
|
||||
pr_debug("omap_hwmod: %s: registering\n", oh->name);
|
||||
|
||||
if (_lookup(oh->name)) {
|
||||
ret = -EEXIST;
|
||||
goto ohr_unlock;
|
||||
}
|
||||
|
||||
ms_id = _find_mpu_port_index(oh);
|
||||
if (!IS_ERR_VALUE(ms_id)) {
|
||||
oh->_mpu_port_index = ms_id;
|
||||
oh->_mpu_rt_va = _find_mpu_rt_base(oh, oh->_mpu_port_index);
|
||||
} else {
|
||||
oh->_int_flags |= _HWMOD_NO_MPU_PORT;
|
||||
}
|
||||
|
||||
list_add_tail(&oh->node, &omap_hwmod_list);
|
||||
|
||||
oh->_state = _HWMOD_STATE_REGISTERED;
|
||||
|
||||
ret = 0;
|
||||
|
||||
ohr_unlock:
|
||||
mutex_unlock(&omap_hwmod_mutex);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* omap_hwmod_lookup - look up a registered omap_hwmod by name
|
||||
* @name: name of the omap_hwmod to look up
|
||||
|
@ -1493,9 +1542,7 @@ struct omap_hwmod *omap_hwmod_lookup(const char *name)
|
|||
if (!name)
|
||||
return NULL;
|
||||
|
||||
mutex_lock(&omap_hwmod_mutex);
|
||||
oh = _lookup(name);
|
||||
mutex_unlock(&omap_hwmod_mutex);
|
||||
|
||||
return oh;
|
||||
}
|
||||
|
@ -1521,13 +1568,11 @@ int omap_hwmod_for_each(int (*fn)(struct omap_hwmod *oh, void *data),
|
|||
if (!fn)
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&omap_hwmod_mutex);
|
||||
list_for_each_entry(temp_oh, &omap_hwmod_list, node) {
|
||||
ret = (*fn)(temp_oh, data);
|
||||
if (ret)
|
||||
break;
|
||||
}
|
||||
mutex_unlock(&omap_hwmod_mutex);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -1542,7 +1587,7 @@ int omap_hwmod_for_each(int (*fn)(struct omap_hwmod *oh, void *data),
|
|||
* listed in @ohs that are valid for this chip. Returns -EINVAL if
|
||||
* omap_hwmod_init() has already been called or 0 otherwise.
|
||||
*/
|
||||
int omap_hwmod_init(struct omap_hwmod **ohs)
|
||||
int __init omap_hwmod_init(struct omap_hwmod **ohs)
|
||||
{
|
||||
struct omap_hwmod *oh;
|
||||
int r;
|
||||
|
@ -1558,8 +1603,8 @@ int omap_hwmod_init(struct omap_hwmod **ohs)
|
|||
oh = *ohs;
|
||||
while (oh) {
|
||||
if (omap_chip_is(oh->omap_chip)) {
|
||||
r = omap_hwmod_register(oh);
|
||||
WARN(r, "omap_hwmod: %s: omap_hwmod_register returned "
|
||||
r = _register(oh);
|
||||
WARN(r, "omap_hwmod: %s: _register returned "
|
||||
"%d\n", oh->name, r);
|
||||
}
|
||||
oh = *++ohs;
|
||||
|
@ -1570,13 +1615,12 @@ int omap_hwmod_init(struct omap_hwmod **ohs)
|
|||
|
||||
/**
|
||||
* omap_hwmod_late_init - do some post-clock framework initialization
|
||||
* @skip_setup_idle: if 1, do not idle hwmods in _setup()
|
||||
*
|
||||
* Must be called after omap2_clk_init(). Resolves the struct clk names
|
||||
* to struct clk pointers for each registered omap_hwmod. Also calls
|
||||
* _setup() on each hwmod. Returns 0.
|
||||
*/
|
||||
int omap_hwmod_late_init(u8 skip_setup_idle)
|
||||
int omap_hwmod_late_init(void)
|
||||
{
|
||||
int r;
|
||||
|
||||
|
@ -1588,36 +1632,7 @@ int omap_hwmod_late_init(u8 skip_setup_idle)
|
|||
WARN(!mpu_oh, "omap_hwmod: could not find MPU initiator hwmod %s\n",
|
||||
MPU_INITIATOR_NAME);
|
||||
|
||||
if (skip_setup_idle)
|
||||
pr_debug("omap_hwmod: will leave hwmods enabled during setup\n");
|
||||
|
||||
omap_hwmod_for_each(_setup, &skip_setup_idle);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* omap_hwmod_unregister - unregister an omap_hwmod
|
||||
* @oh: struct omap_hwmod *
|
||||
*
|
||||
* Unregisters a previously-registered omap_hwmod @oh. There's probably
|
||||
* no use case for this, so it is likely to be removed in a later version.
|
||||
*
|
||||
* XXX Free all of the bootmem-allocated structures here when that is
|
||||
* implemented. Make it clear that core code is the only code that is
|
||||
* expected to unregister modules.
|
||||
*/
|
||||
int omap_hwmod_unregister(struct omap_hwmod *oh)
|
||||
{
|
||||
if (!oh)
|
||||
return -EINVAL;
|
||||
|
||||
pr_debug("omap_hwmod: %s: unregistering\n", oh->name);
|
||||
|
||||
mutex_lock(&omap_hwmod_mutex);
|
||||
iounmap(oh->_mpu_rt_va);
|
||||
list_del(&oh->node);
|
||||
mutex_unlock(&omap_hwmod_mutex);
|
||||
omap_hwmod_for_each(_setup, NULL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1632,18 +1647,18 @@ int omap_hwmod_unregister(struct omap_hwmod *oh)
|
|||
int omap_hwmod_enable(struct omap_hwmod *oh)
|
||||
{
|
||||
int r;
|
||||
unsigned long flags;
|
||||
|
||||
if (!oh)
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&oh->_mutex);
|
||||
r = _omap_hwmod_enable(oh);
|
||||
mutex_unlock(&oh->_mutex);
|
||||
spin_lock_irqsave(&oh->_lock, flags);
|
||||
r = _enable(oh);
|
||||
spin_unlock_irqrestore(&oh->_lock, flags);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* omap_hwmod_idle - idle an omap_hwmod
|
||||
* @oh: struct omap_hwmod *
|
||||
|
@ -1653,12 +1668,14 @@ int omap_hwmod_enable(struct omap_hwmod *oh)
|
|||
*/
|
||||
int omap_hwmod_idle(struct omap_hwmod *oh)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
if (!oh)
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&oh->_mutex);
|
||||
_omap_hwmod_idle(oh);
|
||||
mutex_unlock(&oh->_mutex);
|
||||
spin_lock_irqsave(&oh->_lock, flags);
|
||||
_idle(oh);
|
||||
spin_unlock_irqrestore(&oh->_lock, flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1673,12 +1690,14 @@ int omap_hwmod_idle(struct omap_hwmod *oh)
|
|||
*/
|
||||
int omap_hwmod_shutdown(struct omap_hwmod *oh)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
if (!oh)
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&oh->_mutex);
|
||||
spin_lock_irqsave(&oh->_lock, flags);
|
||||
_shutdown(oh);
|
||||
mutex_unlock(&oh->_mutex);
|
||||
spin_unlock_irqrestore(&oh->_lock, flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1691,9 +1710,11 @@ int omap_hwmod_shutdown(struct omap_hwmod *oh)
|
|||
*/
|
||||
int omap_hwmod_enable_clocks(struct omap_hwmod *oh)
|
||||
{
|
||||
mutex_lock(&oh->_mutex);
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&oh->_lock, flags);
|
||||
_enable_clocks(oh);
|
||||
mutex_unlock(&oh->_mutex);
|
||||
spin_unlock_irqrestore(&oh->_lock, flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1706,9 +1727,11 @@ int omap_hwmod_enable_clocks(struct omap_hwmod *oh)
|
|||
*/
|
||||
int omap_hwmod_disable_clocks(struct omap_hwmod *oh)
|
||||
{
|
||||
mutex_lock(&oh->_mutex);
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&oh->_lock, flags);
|
||||
_disable_clocks(oh);
|
||||
mutex_unlock(&oh->_mutex);
|
||||
spin_unlock_irqrestore(&oh->_lock, flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1752,13 +1775,14 @@ void omap_hwmod_ocp_barrier(struct omap_hwmod *oh)
|
|||
int omap_hwmod_reset(struct omap_hwmod *oh)
|
||||
{
|
||||
int r;
|
||||
unsigned long flags;
|
||||
|
||||
if (!oh)
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&oh->_mutex);
|
||||
spin_lock_irqsave(&oh->_lock, flags);
|
||||
r = _reset(oh);
|
||||
mutex_unlock(&oh->_mutex);
|
||||
spin_unlock_irqrestore(&oh->_lock, flags);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
@ -1955,13 +1979,18 @@ int omap_hwmod_del_initiator_dep(struct omap_hwmod *oh,
|
|||
*/
|
||||
int omap_hwmod_enable_wakeup(struct omap_hwmod *oh)
|
||||
{
|
||||
unsigned long flags;
|
||||
u32 v;
|
||||
|
||||
if (!oh->class->sysc ||
|
||||
!(oh->class->sysc->sysc_flags & SYSC_HAS_ENAWAKEUP))
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&oh->_mutex);
|
||||
_enable_wakeup(oh);
|
||||
mutex_unlock(&oh->_mutex);
|
||||
spin_lock_irqsave(&oh->_lock, flags);
|
||||
v = oh->_sysc_cache;
|
||||
_enable_wakeup(oh, &v);
|
||||
_write_sysconfig(v, oh);
|
||||
spin_unlock_irqrestore(&oh->_lock, flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1980,13 +2009,18 @@ int omap_hwmod_enable_wakeup(struct omap_hwmod *oh)
|
|||
*/
|
||||
int omap_hwmod_disable_wakeup(struct omap_hwmod *oh)
|
||||
{
|
||||
unsigned long flags;
|
||||
u32 v;
|
||||
|
||||
if (!oh->class->sysc ||
|
||||
!(oh->class->sysc->sysc_flags & SYSC_HAS_ENAWAKEUP))
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&oh->_mutex);
|
||||
_disable_wakeup(oh);
|
||||
mutex_unlock(&oh->_mutex);
|
||||
spin_lock_irqsave(&oh->_lock, flags);
|
||||
v = oh->_sysc_cache;
|
||||
_disable_wakeup(oh, &v);
|
||||
_write_sysconfig(v, oh);
|
||||
spin_unlock_irqrestore(&oh->_lock, flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -2006,13 +2040,14 @@ int omap_hwmod_disable_wakeup(struct omap_hwmod *oh)
|
|||
int omap_hwmod_assert_hardreset(struct omap_hwmod *oh, const char *name)
|
||||
{
|
||||
int ret;
|
||||
unsigned long flags;
|
||||
|
||||
if (!oh)
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&oh->_mutex);
|
||||
spin_lock_irqsave(&oh->_lock, flags);
|
||||
ret = _assert_hardreset(oh, name);
|
||||
mutex_unlock(&oh->_mutex);
|
||||
spin_unlock_irqrestore(&oh->_lock, flags);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -2032,13 +2067,14 @@ int omap_hwmod_assert_hardreset(struct omap_hwmod *oh, const char *name)
|
|||
int omap_hwmod_deassert_hardreset(struct omap_hwmod *oh, const char *name)
|
||||
{
|
||||
int ret;
|
||||
unsigned long flags;
|
||||
|
||||
if (!oh)
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&oh->_mutex);
|
||||
spin_lock_irqsave(&oh->_lock, flags);
|
||||
ret = _deassert_hardreset(oh, name);
|
||||
mutex_unlock(&oh->_mutex);
|
||||
spin_unlock_irqrestore(&oh->_lock, flags);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -2057,13 +2093,14 @@ int omap_hwmod_deassert_hardreset(struct omap_hwmod *oh, const char *name)
|
|||
int omap_hwmod_read_hardreset(struct omap_hwmod *oh, const char *name)
|
||||
{
|
||||
int ret;
|
||||
unsigned long flags;
|
||||
|
||||
if (!oh)
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&oh->_mutex);
|
||||
spin_lock_irqsave(&oh->_lock, flags);
|
||||
ret = _read_hardreset(oh, name);
|
||||
mutex_unlock(&oh->_mutex);
|
||||
spin_unlock_irqrestore(&oh->_lock, flags);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -2075,9 +2112,8 @@ int omap_hwmod_read_hardreset(struct omap_hwmod *oh, const char *name)
|
|||
* @fn: callback function pointer to call for each hwmod in class @classname
|
||||
* @user: arbitrary context data to pass to the callback function
|
||||
*
|
||||
* For each omap_hwmod of class @classname, call @fn. Takes
|
||||
* omap_hwmod_mutex to prevent the hwmod list from changing during the
|
||||
* iteration. If the callback function returns something other than
|
||||
* For each omap_hwmod of class @classname, call @fn.
|
||||
* If the callback function returns something other than
|
||||
* zero, the iterator is terminated, and the callback function's return
|
||||
* value is passed back to the caller. Returns 0 upon success, -EINVAL
|
||||
* if @classname or @fn are NULL, or passes back the error code from @fn.
|
||||
|
@ -2096,8 +2132,6 @@ int omap_hwmod_for_each_by_class(const char *classname,
|
|||
pr_debug("omap_hwmod: %s: looking for modules of class %s\n",
|
||||
__func__, classname);
|
||||
|
||||
mutex_lock(&omap_hwmod_mutex);
|
||||
|
||||
list_for_each_entry(temp_oh, &omap_hwmod_list, node) {
|
||||
if (!strcmp(temp_oh->class->name, classname)) {
|
||||
pr_debug("omap_hwmod: %s: %s: calling callback fn\n",
|
||||
|
@ -2108,8 +2142,6 @@ int omap_hwmod_for_each_by_class(const char *classname,
|
|||
}
|
||||
}
|
||||
|
||||
mutex_unlock(&omap_hwmod_mutex);
|
||||
|
||||
if (ret)
|
||||
pr_debug("omap_hwmod: %s: iterator terminated early: %d\n",
|
||||
__func__, ret);
|
||||
|
@ -2117,3 +2149,64 @@ int omap_hwmod_for_each_by_class(const char *classname,
|
|||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* omap_hwmod_set_postsetup_state - set the post-_setup() state for this hwmod
|
||||
* @oh: struct omap_hwmod *
|
||||
* @state: state that _setup() should leave the hwmod in
|
||||
*
|
||||
* Sets the hwmod state that @oh will enter at the end of _setup() (called by
|
||||
* omap_hwmod_late_init()). Only valid to call between calls to
|
||||
* omap_hwmod_init() and omap_hwmod_late_init(). Returns 0 upon success or
|
||||
* -EINVAL if there is a problem with the arguments or if the hwmod is
|
||||
* in the wrong state.
|
||||
*/
|
||||
int omap_hwmod_set_postsetup_state(struct omap_hwmod *oh, u8 state)
|
||||
{
|
||||
int ret;
|
||||
unsigned long flags;
|
||||
|
||||
if (!oh)
|
||||
return -EINVAL;
|
||||
|
||||
if (state != _HWMOD_STATE_DISABLED &&
|
||||
state != _HWMOD_STATE_ENABLED &&
|
||||
state != _HWMOD_STATE_IDLE)
|
||||
return -EINVAL;
|
||||
|
||||
spin_lock_irqsave(&oh->_lock, flags);
|
||||
|
||||
if (oh->_state != _HWMOD_STATE_REGISTERED) {
|
||||
ret = -EINVAL;
|
||||
goto ohsps_unlock;
|
||||
}
|
||||
|
||||
oh->_postsetup_state = state;
|
||||
ret = 0;
|
||||
|
||||
ohsps_unlock:
|
||||
spin_unlock_irqrestore(&oh->_lock, flags);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* omap_hwmod_get_context_loss_count - get lost context count
|
||||
* @oh: struct omap_hwmod *
|
||||
*
|
||||
* Query the powerdomain of of @oh to get the context loss
|
||||
* count for this device.
|
||||
*
|
||||
* Returns the context loss count of the powerdomain assocated with @oh
|
||||
* upon success, or zero if no powerdomain exists for @oh.
|
||||
*/
|
||||
u32 omap_hwmod_get_context_loss_count(struct omap_hwmod *oh)
|
||||
{
|
||||
struct powerdomain *pwrdm;
|
||||
int ret = 0;
|
||||
|
||||
pwrdm = omap_hwmod_get_pwrdm(oh);
|
||||
if (pwrdm)
|
||||
ret = pwrdm_get_context_loss_count(pwrdm);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
|
||||
#include "cm-regbits-24xx.h"
|
||||
#include "prm-regbits-24xx.h"
|
||||
#include "wd_timer.h"
|
||||
|
||||
/*
|
||||
* OMAP2420 hardware module integration data
|
||||
|
@ -312,8 +313,9 @@ static struct omap_hwmod_class_sysconfig omap2420_wd_timer_sysc = {
|
|||
};
|
||||
|
||||
static struct omap_hwmod_class omap2420_wd_timer_hwmod_class = {
|
||||
.name = "wd_timer",
|
||||
.sysc = &omap2420_wd_timer_sysc,
|
||||
.name = "wd_timer",
|
||||
.sysc = &omap2420_wd_timer_sysc,
|
||||
.pre_shutdown = &omap2_wd_timer_disable
|
||||
};
|
||||
|
||||
/* wd_timer2 */
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
|
||||
#include "prm-regbits-24xx.h"
|
||||
#include "cm-regbits-24xx.h"
|
||||
#include "wd_timer.h"
|
||||
|
||||
/*
|
||||
* OMAP2430 hardware module integration data
|
||||
|
@ -311,8 +312,9 @@ static struct omap_hwmod_class_sysconfig omap2430_wd_timer_sysc = {
|
|||
};
|
||||
|
||||
static struct omap_hwmod_class omap2430_wd_timer_hwmod_class = {
|
||||
.name = "wd_timer",
|
||||
.sysc = &omap2430_wd_timer_sysc,
|
||||
.name = "wd_timer",
|
||||
.sysc = &omap2430_wd_timer_sysc,
|
||||
.pre_shutdown = &omap2_wd_timer_disable
|
||||
};
|
||||
|
||||
/* wd_timer2 */
|
||||
|
@ -481,12 +483,12 @@ static struct omap_hwmod_class i2c_class = {
|
|||
.sysc = &i2c_sysc,
|
||||
};
|
||||
|
||||
/* I2C1 */
|
||||
|
||||
static struct omap_i2c_dev_attr i2c1_dev_attr = {
|
||||
static struct omap_i2c_dev_attr i2c_dev_attr = {
|
||||
.fifo_depth = 8, /* bytes */
|
||||
};
|
||||
|
||||
/* I2C1 */
|
||||
|
||||
static struct omap_hwmod_irq_info i2c1_mpu_irqs[] = {
|
||||
{ .irq = INT_24XX_I2C1_IRQ, },
|
||||
};
|
||||
|
@ -527,16 +529,12 @@ static struct omap_hwmod omap2430_i2c1_hwmod = {
|
|||
.slaves = omap2430_i2c1_slaves,
|
||||
.slaves_cnt = ARRAY_SIZE(omap2430_i2c1_slaves),
|
||||
.class = &i2c_class,
|
||||
.dev_attr = &i2c1_dev_attr,
|
||||
.dev_attr = &i2c_dev_attr,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
|
||||
};
|
||||
|
||||
/* I2C2 */
|
||||
|
||||
static struct omap_i2c_dev_attr i2c2_dev_attr = {
|
||||
.fifo_depth = 8, /* bytes */
|
||||
};
|
||||
|
||||
static struct omap_hwmod_irq_info i2c2_mpu_irqs[] = {
|
||||
{ .irq = INT_24XX_I2C2_IRQ, },
|
||||
};
|
||||
|
@ -569,7 +567,7 @@ static struct omap_hwmod omap2430_i2c2_hwmod = {
|
|||
.slaves = omap2430_i2c2_slaves,
|
||||
.slaves_cnt = ARRAY_SIZE(omap2430_i2c2_slaves),
|
||||
.class = &i2c_class,
|
||||
.dev_attr = &i2c2_dev_attr,
|
||||
.dev_attr = &i2c_dev_attr,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
|
||||
};
|
||||
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
|
||||
#include "prm-regbits-34xx.h"
|
||||
#include "cm-regbits-34xx.h"
|
||||
#include "wd_timer.h"
|
||||
|
||||
/*
|
||||
* OMAP3xxx hardware module integration data
|
||||
|
@ -423,8 +424,9 @@ static struct omap_hwmod_class_sysconfig i2c_sysc = {
|
|||
};
|
||||
|
||||
static struct omap_hwmod_class omap3xxx_wd_timer_hwmod_class = {
|
||||
.name = "wd_timer",
|
||||
.sysc = &omap3xxx_wd_timer_sysc,
|
||||
.name = "wd_timer",
|
||||
.sysc = &omap3xxx_wd_timer_sysc,
|
||||
.pre_shutdown = &omap2_wd_timer_disable
|
||||
};
|
||||
|
||||
/* wd_timer2 */
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -29,12 +29,13 @@
|
|||
|
||||
#include <plat/clock.h>
|
||||
#include <plat/board.h>
|
||||
#include <plat/powerdomain.h>
|
||||
#include <plat/clockdomain.h>
|
||||
#include "powerdomain.h"
|
||||
#include "clockdomain.h"
|
||||
#include <plat/dmtimer.h>
|
||||
#include <plat/omap-pm.h>
|
||||
|
||||
#include "prm.h"
|
||||
#include "cm.h"
|
||||
#include "cm2xxx_3xxx.h"
|
||||
#include "prm2xxx_3xxx.h"
|
||||
#include "pm.h"
|
||||
|
||||
int omap2_pm_debug;
|
||||
|
@ -45,10 +46,10 @@ u32 wakeup_timer_milliseconds;
|
|||
|
||||
#define DUMP_PRM_MOD_REG(mod, reg) \
|
||||
regs[reg_count].name = #mod "." #reg; \
|
||||
regs[reg_count++].val = prm_read_mod_reg(mod, reg)
|
||||
regs[reg_count++].val = omap2_prm_read_mod_reg(mod, reg)
|
||||
#define DUMP_CM_MOD_REG(mod, reg) \
|
||||
regs[reg_count].name = #mod "." #reg; \
|
||||
regs[reg_count++].val = cm_read_mod_reg(mod, reg)
|
||||
regs[reg_count++].val = omap2_cm_read_mod_reg(mod, reg)
|
||||
#define DUMP_PRM_REG(reg) \
|
||||
regs[reg_count].name = #reg; \
|
||||
regs[reg_count++].val = __raw_readl(reg)
|
||||
|
@ -328,10 +329,10 @@ static void pm_dbg_regset_store(u32 *ptr)
|
|||
for (j = pm_dbg_reg_modules[i].low;
|
||||
j <= pm_dbg_reg_modules[i].high; j += 4) {
|
||||
if (pm_dbg_reg_modules[i].type == MOD_CM)
|
||||
val = cm_read_mod_reg(
|
||||
val = omap2_cm_read_mod_reg(
|
||||
pm_dbg_reg_modules[i].offset, j);
|
||||
else
|
||||
val = prm_read_mod_reg(
|
||||
val = omap2_prm_read_mod_reg(
|
||||
pm_dbg_reg_modules[i].offset, j);
|
||||
*(ptr++) = val;
|
||||
}
|
||||
|
@ -581,6 +582,10 @@ static int option_set(void *data, u64 val)
|
|||
*option = val;
|
||||
|
||||
if (option == &enable_off_mode) {
|
||||
if (val)
|
||||
omap_pm_enable_off_mode();
|
||||
else
|
||||
omap_pm_disable_off_mode();
|
||||
if (cpu_is_omap34xx())
|
||||
omap3_pm_off_mode_enable(val);
|
||||
}
|
||||
|
|
|
@ -18,8 +18,8 @@
|
|||
#include <plat/omap_device.h>
|
||||
#include <plat/common.h>
|
||||
|
||||
#include <plat/powerdomain.h>
|
||||
#include <plat/clockdomain.h>
|
||||
#include "powerdomain.h"
|
||||
#include "clockdomain.h"
|
||||
|
||||
static struct omap_device_pm_latency *pm_lats;
|
||||
|
||||
|
@ -89,10 +89,13 @@ static void omap2_init_processor_devices(void)
|
|||
}
|
||||
}
|
||||
|
||||
/* Types of sleep_switch used in omap_set_pwrdm_state */
|
||||
#define FORCEWAKEUP_SWITCH 0
|
||||
#define LOWPOWERSTATE_SWITCH 1
|
||||
|
||||
/*
|
||||
* This sets pwrdm state (other than mpu & core. Currently only ON &
|
||||
* RET are supported. Function is assuming that clkdm doesn't have
|
||||
* hw_sup mode enabled.
|
||||
* RET are supported.
|
||||
*/
|
||||
int omap_set_pwrdm_state(struct powerdomain *pwrdm, u32 state)
|
||||
{
|
||||
|
@ -114,9 +117,14 @@ int omap_set_pwrdm_state(struct powerdomain *pwrdm, u32 state)
|
|||
return ret;
|
||||
|
||||
if (pwrdm_read_pwrst(pwrdm) < PWRDM_POWER_ON) {
|
||||
omap2_clkdm_wakeup(pwrdm->pwrdm_clkdms[0]);
|
||||
sleep_switch = 1;
|
||||
pwrdm_wait_transition(pwrdm);
|
||||
if ((pwrdm_read_pwrst(pwrdm) > state) &&
|
||||
(pwrdm->flags & PWRDM_HAS_LOWPOWERSTATECHANGE)) {
|
||||
sleep_switch = LOWPOWERSTATE_SWITCH;
|
||||
} else {
|
||||
omap2_clkdm_wakeup(pwrdm->pwrdm_clkdms[0]);
|
||||
pwrdm_wait_transition(pwrdm);
|
||||
sleep_switch = FORCEWAKEUP_SWITCH;
|
||||
}
|
||||
}
|
||||
|
||||
ret = pwrdm_set_next_pwrst(pwrdm, state);
|
||||
|
@ -126,12 +134,22 @@ int omap_set_pwrdm_state(struct powerdomain *pwrdm, u32 state)
|
|||
goto err;
|
||||
}
|
||||
|
||||
if (sleep_switch) {
|
||||
omap2_clkdm_allow_idle(pwrdm->pwrdm_clkdms[0]);
|
||||
pwrdm_wait_transition(pwrdm);
|
||||
pwrdm_state_switch(pwrdm);
|
||||
switch (sleep_switch) {
|
||||
case FORCEWAKEUP_SWITCH:
|
||||
if (pwrdm->pwrdm_clkdms[0]->flags & CLKDM_CAN_ENABLE_AUTO)
|
||||
omap2_clkdm_allow_idle(pwrdm->pwrdm_clkdms[0]);
|
||||
else
|
||||
omap2_clkdm_sleep(pwrdm->pwrdm_clkdms[0]);
|
||||
break;
|
||||
case LOWPOWERSTATE_SWITCH:
|
||||
pwrdm_set_lowpwrstchange(pwrdm);
|
||||
break;
|
||||
default:
|
||||
return ret;
|
||||
}
|
||||
|
||||
pwrdm_wait_transition(pwrdm);
|
||||
pwrdm_state_switch(pwrdm);
|
||||
err:
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
#ifndef __ARCH_ARM_MACH_OMAP2_PM_H
|
||||
#define __ARCH_ARM_MACH_OMAP2_PM_H
|
||||
|
||||
#include <plat/powerdomain.h>
|
||||
#include "powerdomain.h"
|
||||
|
||||
extern void *omap3_secure_ram_storage;
|
||||
extern void omap3_pm_off_mode_enable(int);
|
||||
|
|
|
@ -42,16 +42,16 @@
|
|||
#include <plat/dma.h>
|
||||
#include <plat/board.h>
|
||||
|
||||
#include "prm.h"
|
||||
#include "prm2xxx_3xxx.h"
|
||||
#include "prm-regbits-24xx.h"
|
||||
#include "cm.h"
|
||||
#include "cm2xxx_3xxx.h"
|
||||
#include "cm-regbits-24xx.h"
|
||||
#include "sdrc.h"
|
||||
#include "pm.h"
|
||||
#include "control.h"
|
||||
|
||||
#include <plat/powerdomain.h>
|
||||
#include <plat/clockdomain.h>
|
||||
#include "powerdomain.h"
|
||||
#include "clockdomain.h"
|
||||
|
||||
#ifdef CONFIG_SUSPEND
|
||||
static suspend_state_t suspend_state = PM_SUSPEND_ON;
|
||||
|
@ -79,8 +79,8 @@ static int omap2_fclks_active(void)
|
|||
{
|
||||
u32 f1, f2;
|
||||
|
||||
f1 = cm_read_mod_reg(CORE_MOD, CM_FCLKEN1);
|
||||
f2 = cm_read_mod_reg(CORE_MOD, OMAP24XX_CM_FCLKEN2);
|
||||
f1 = omap2_cm_read_mod_reg(CORE_MOD, CM_FCLKEN1);
|
||||
f2 = omap2_cm_read_mod_reg(CORE_MOD, OMAP24XX_CM_FCLKEN2);
|
||||
|
||||
/* Ignore UART clocks. These are handled by UART core (serial.c) */
|
||||
f1 &= ~(OMAP24XX_EN_UART1_MASK | OMAP24XX_EN_UART2_MASK);
|
||||
|
@ -105,9 +105,9 @@ static void omap2_enter_full_retention(void)
|
|||
|
||||
/* Clear old wake-up events */
|
||||
/* REVISIT: These write to reserved bits? */
|
||||
prm_write_mod_reg(0xffffffff, CORE_MOD, PM_WKST1);
|
||||
prm_write_mod_reg(0xffffffff, CORE_MOD, OMAP24XX_PM_WKST2);
|
||||
prm_write_mod_reg(0xffffffff, WKUP_MOD, PM_WKST);
|
||||
omap2_prm_write_mod_reg(0xffffffff, CORE_MOD, PM_WKST1);
|
||||
omap2_prm_write_mod_reg(0xffffffff, CORE_MOD, OMAP24XX_PM_WKST2);
|
||||
omap2_prm_write_mod_reg(0xffffffff, WKUP_MOD, PM_WKST);
|
||||
|
||||
/*
|
||||
* Set MPU powerdomain's next power state to RETENTION;
|
||||
|
@ -120,7 +120,7 @@ static void omap2_enter_full_retention(void)
|
|||
l = omap_ctrl_readl(OMAP2_CONTROL_DEVCONF0) | OMAP24XX_USBSTANDBYCTRL;
|
||||
omap_ctrl_writel(l, OMAP2_CONTROL_DEVCONF0);
|
||||
|
||||
omap2_gpio_prepare_for_idle(PWRDM_POWER_RET);
|
||||
omap2_gpio_prepare_for_idle(0);
|
||||
|
||||
if (omap2_pm_debug) {
|
||||
omap2_pm_dump(0, 0, 0);
|
||||
|
@ -167,30 +167,30 @@ static void omap2_enter_full_retention(void)
|
|||
clk_enable(osc_ck);
|
||||
|
||||
/* clear CORE wake-up events */
|
||||
prm_write_mod_reg(0xffffffff, CORE_MOD, PM_WKST1);
|
||||
prm_write_mod_reg(0xffffffff, CORE_MOD, OMAP24XX_PM_WKST2);
|
||||
omap2_prm_write_mod_reg(0xffffffff, CORE_MOD, PM_WKST1);
|
||||
omap2_prm_write_mod_reg(0xffffffff, CORE_MOD, OMAP24XX_PM_WKST2);
|
||||
|
||||
/* wakeup domain events - bit 1: GPT1, bit5 GPIO */
|
||||
prm_clear_mod_reg_bits(0x4 | 0x1, WKUP_MOD, PM_WKST);
|
||||
omap2_prm_clear_mod_reg_bits(0x4 | 0x1, WKUP_MOD, PM_WKST);
|
||||
|
||||
/* MPU domain wake events */
|
||||
l = prm_read_mod_reg(OCP_MOD, OMAP2_PRCM_IRQSTATUS_MPU_OFFSET);
|
||||
l = omap2_prm_read_mod_reg(OCP_MOD, OMAP2_PRCM_IRQSTATUS_MPU_OFFSET);
|
||||
if (l & 0x01)
|
||||
prm_write_mod_reg(0x01, OCP_MOD,
|
||||
omap2_prm_write_mod_reg(0x01, OCP_MOD,
|
||||
OMAP2_PRCM_IRQSTATUS_MPU_OFFSET);
|
||||
if (l & 0x20)
|
||||
prm_write_mod_reg(0x20, OCP_MOD,
|
||||
omap2_prm_write_mod_reg(0x20, OCP_MOD,
|
||||
OMAP2_PRCM_IRQSTATUS_MPU_OFFSET);
|
||||
|
||||
/* Mask future PRCM-to-MPU interrupts */
|
||||
prm_write_mod_reg(0x0, OCP_MOD, OMAP2_PRCM_IRQSTATUS_MPU_OFFSET);
|
||||
omap2_prm_write_mod_reg(0x0, OCP_MOD, OMAP2_PRCM_IRQSTATUS_MPU_OFFSET);
|
||||
}
|
||||
|
||||
static int omap2_i2c_active(void)
|
||||
{
|
||||
u32 l;
|
||||
|
||||
l = cm_read_mod_reg(CORE_MOD, CM_FCLKEN1);
|
||||
l = omap2_cm_read_mod_reg(CORE_MOD, CM_FCLKEN1);
|
||||
return l & (OMAP2420_EN_I2C2_MASK | OMAP2420_EN_I2C1_MASK);
|
||||
}
|
||||
|
||||
|
@ -201,13 +201,13 @@ static int omap2_allow_mpu_retention(void)
|
|||
u32 l;
|
||||
|
||||
/* Check for MMC, UART2, UART1, McSPI2, McSPI1 and DSS1. */
|
||||
l = cm_read_mod_reg(CORE_MOD, CM_FCLKEN1);
|
||||
l = omap2_cm_read_mod_reg(CORE_MOD, CM_FCLKEN1);
|
||||
if (l & (OMAP2420_EN_MMC_MASK | OMAP24XX_EN_UART2_MASK |
|
||||
OMAP24XX_EN_UART1_MASK | OMAP24XX_EN_MCSPI2_MASK |
|
||||
OMAP24XX_EN_MCSPI1_MASK | OMAP24XX_EN_DSS1_MASK))
|
||||
return 0;
|
||||
/* Check for UART3. */
|
||||
l = cm_read_mod_reg(CORE_MOD, OMAP24XX_CM_FCLKEN2);
|
||||
l = omap2_cm_read_mod_reg(CORE_MOD, OMAP24XX_CM_FCLKEN2);
|
||||
if (l & OMAP24XX_EN_UART3_MASK)
|
||||
return 0;
|
||||
if (sti_console_enabled)
|
||||
|
@ -230,18 +230,18 @@ static void omap2_enter_mpu_retention(void)
|
|||
* it is in retention mode. */
|
||||
if (omap2_allow_mpu_retention()) {
|
||||
/* REVISIT: These write to reserved bits? */
|
||||
prm_write_mod_reg(0xffffffff, CORE_MOD, PM_WKST1);
|
||||
prm_write_mod_reg(0xffffffff, CORE_MOD, OMAP24XX_PM_WKST2);
|
||||
prm_write_mod_reg(0xffffffff, WKUP_MOD, PM_WKST);
|
||||
omap2_prm_write_mod_reg(0xffffffff, CORE_MOD, PM_WKST1);
|
||||
omap2_prm_write_mod_reg(0xffffffff, CORE_MOD, OMAP24XX_PM_WKST2);
|
||||
omap2_prm_write_mod_reg(0xffffffff, WKUP_MOD, PM_WKST);
|
||||
|
||||
/* Try to enter MPU retention */
|
||||
prm_write_mod_reg((0x01 << OMAP_POWERSTATE_SHIFT) |
|
||||
omap2_prm_write_mod_reg((0x01 << OMAP_POWERSTATE_SHIFT) |
|
||||
OMAP_LOGICRETSTATE_MASK,
|
||||
MPU_MOD, OMAP2_PM_PWSTCTRL);
|
||||
} else {
|
||||
/* Block MPU retention */
|
||||
|
||||
prm_write_mod_reg(OMAP_LOGICRETSTATE_MASK, MPU_MOD,
|
||||
omap2_prm_write_mod_reg(OMAP_LOGICRETSTATE_MASK, MPU_MOD,
|
||||
OMAP2_PM_PWSTCTRL);
|
||||
only_idle = 1;
|
||||
}
|
||||
|
@ -310,9 +310,9 @@ static int omap2_pm_suspend(void)
|
|||
{
|
||||
u32 wken_wkup, mir1;
|
||||
|
||||
wken_wkup = prm_read_mod_reg(WKUP_MOD, PM_WKEN);
|
||||
wken_wkup = omap2_prm_read_mod_reg(WKUP_MOD, PM_WKEN);
|
||||
wken_wkup &= ~OMAP24XX_EN_GPT1_MASK;
|
||||
prm_write_mod_reg(wken_wkup, WKUP_MOD, PM_WKEN);
|
||||
omap2_prm_write_mod_reg(wken_wkup, WKUP_MOD, PM_WKEN);
|
||||
|
||||
/* Mask GPT1 */
|
||||
mir1 = omap_readl(0x480fe0a4);
|
||||
|
@ -322,7 +322,7 @@ static int omap2_pm_suspend(void)
|
|||
omap2_enter_full_retention();
|
||||
|
||||
omap_writel(mir1, 0x480fe0a4);
|
||||
prm_write_mod_reg(wken_wkup, WKUP_MOD, PM_WKEN);
|
||||
omap2_prm_write_mod_reg(wken_wkup, WKUP_MOD, PM_WKEN);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -376,7 +376,7 @@ static void __init prcm_setup_regs(void)
|
|||
struct powerdomain *pwrdm;
|
||||
|
||||
/* Enable autoidle */
|
||||
prm_write_mod_reg(OMAP24XX_AUTOIDLE_MASK, OCP_MOD,
|
||||
omap2_prm_write_mod_reg(OMAP24XX_AUTOIDLE_MASK, OCP_MOD,
|
||||
OMAP2_PRCM_SYSCONFIG_OFFSET);
|
||||
|
||||
/*
|
||||
|
@ -415,87 +415,87 @@ static void __init prcm_setup_regs(void)
|
|||
clkdm_add_wkdep(mpu_clkdm, wkup_clkdm);
|
||||
|
||||
/* Enable clock autoidle for all domains */
|
||||
cm_write_mod_reg(OMAP24XX_AUTO_CAM_MASK |
|
||||
OMAP24XX_AUTO_MAILBOXES_MASK |
|
||||
OMAP24XX_AUTO_WDT4_MASK |
|
||||
OMAP2420_AUTO_WDT3_MASK |
|
||||
OMAP24XX_AUTO_MSPRO_MASK |
|
||||
OMAP2420_AUTO_MMC_MASK |
|
||||
OMAP24XX_AUTO_FAC_MASK |
|
||||
OMAP2420_AUTO_EAC_MASK |
|
||||
OMAP24XX_AUTO_HDQ_MASK |
|
||||
OMAP24XX_AUTO_UART2_MASK |
|
||||
OMAP24XX_AUTO_UART1_MASK |
|
||||
OMAP24XX_AUTO_I2C2_MASK |
|
||||
OMAP24XX_AUTO_I2C1_MASK |
|
||||
OMAP24XX_AUTO_MCSPI2_MASK |
|
||||
OMAP24XX_AUTO_MCSPI1_MASK |
|
||||
OMAP24XX_AUTO_MCBSP2_MASK |
|
||||
OMAP24XX_AUTO_MCBSP1_MASK |
|
||||
OMAP24XX_AUTO_GPT12_MASK |
|
||||
OMAP24XX_AUTO_GPT11_MASK |
|
||||
OMAP24XX_AUTO_GPT10_MASK |
|
||||
OMAP24XX_AUTO_GPT9_MASK |
|
||||
OMAP24XX_AUTO_GPT8_MASK |
|
||||
OMAP24XX_AUTO_GPT7_MASK |
|
||||
OMAP24XX_AUTO_GPT6_MASK |
|
||||
OMAP24XX_AUTO_GPT5_MASK |
|
||||
OMAP24XX_AUTO_GPT4_MASK |
|
||||
OMAP24XX_AUTO_GPT3_MASK |
|
||||
OMAP24XX_AUTO_GPT2_MASK |
|
||||
OMAP2420_AUTO_VLYNQ_MASK |
|
||||
OMAP24XX_AUTO_DSS_MASK,
|
||||
CORE_MOD, CM_AUTOIDLE1);
|
||||
cm_write_mod_reg(OMAP24XX_AUTO_UART3_MASK |
|
||||
OMAP24XX_AUTO_SSI_MASK |
|
||||
OMAP24XX_AUTO_USB_MASK,
|
||||
CORE_MOD, CM_AUTOIDLE2);
|
||||
cm_write_mod_reg(OMAP24XX_AUTO_SDRC_MASK |
|
||||
OMAP24XX_AUTO_GPMC_MASK |
|
||||
OMAP24XX_AUTO_SDMA_MASK,
|
||||
CORE_MOD, CM_AUTOIDLE3);
|
||||
cm_write_mod_reg(OMAP24XX_AUTO_PKA_MASK |
|
||||
OMAP24XX_AUTO_AES_MASK |
|
||||
OMAP24XX_AUTO_RNG_MASK |
|
||||
OMAP24XX_AUTO_SHA_MASK |
|
||||
OMAP24XX_AUTO_DES_MASK,
|
||||
CORE_MOD, OMAP24XX_CM_AUTOIDLE4);
|
||||
omap2_cm_write_mod_reg(OMAP24XX_AUTO_CAM_MASK |
|
||||
OMAP24XX_AUTO_MAILBOXES_MASK |
|
||||
OMAP24XX_AUTO_WDT4_MASK |
|
||||
OMAP2420_AUTO_WDT3_MASK |
|
||||
OMAP24XX_AUTO_MSPRO_MASK |
|
||||
OMAP2420_AUTO_MMC_MASK |
|
||||
OMAP24XX_AUTO_FAC_MASK |
|
||||
OMAP2420_AUTO_EAC_MASK |
|
||||
OMAP24XX_AUTO_HDQ_MASK |
|
||||
OMAP24XX_AUTO_UART2_MASK |
|
||||
OMAP24XX_AUTO_UART1_MASK |
|
||||
OMAP24XX_AUTO_I2C2_MASK |
|
||||
OMAP24XX_AUTO_I2C1_MASK |
|
||||
OMAP24XX_AUTO_MCSPI2_MASK |
|
||||
OMAP24XX_AUTO_MCSPI1_MASK |
|
||||
OMAP24XX_AUTO_MCBSP2_MASK |
|
||||
OMAP24XX_AUTO_MCBSP1_MASK |
|
||||
OMAP24XX_AUTO_GPT12_MASK |
|
||||
OMAP24XX_AUTO_GPT11_MASK |
|
||||
OMAP24XX_AUTO_GPT10_MASK |
|
||||
OMAP24XX_AUTO_GPT9_MASK |
|
||||
OMAP24XX_AUTO_GPT8_MASK |
|
||||
OMAP24XX_AUTO_GPT7_MASK |
|
||||
OMAP24XX_AUTO_GPT6_MASK |
|
||||
OMAP24XX_AUTO_GPT5_MASK |
|
||||
OMAP24XX_AUTO_GPT4_MASK |
|
||||
OMAP24XX_AUTO_GPT3_MASK |
|
||||
OMAP24XX_AUTO_GPT2_MASK |
|
||||
OMAP2420_AUTO_VLYNQ_MASK |
|
||||
OMAP24XX_AUTO_DSS_MASK,
|
||||
CORE_MOD, CM_AUTOIDLE1);
|
||||
omap2_cm_write_mod_reg(OMAP24XX_AUTO_UART3_MASK |
|
||||
OMAP24XX_AUTO_SSI_MASK |
|
||||
OMAP24XX_AUTO_USB_MASK,
|
||||
CORE_MOD, CM_AUTOIDLE2);
|
||||
omap2_cm_write_mod_reg(OMAP24XX_AUTO_SDRC_MASK |
|
||||
OMAP24XX_AUTO_GPMC_MASK |
|
||||
OMAP24XX_AUTO_SDMA_MASK,
|
||||
CORE_MOD, CM_AUTOIDLE3);
|
||||
omap2_cm_write_mod_reg(OMAP24XX_AUTO_PKA_MASK |
|
||||
OMAP24XX_AUTO_AES_MASK |
|
||||
OMAP24XX_AUTO_RNG_MASK |
|
||||
OMAP24XX_AUTO_SHA_MASK |
|
||||
OMAP24XX_AUTO_DES_MASK,
|
||||
CORE_MOD, OMAP24XX_CM_AUTOIDLE4);
|
||||
|
||||
cm_write_mod_reg(OMAP2420_AUTO_DSP_IPI_MASK, OMAP24XX_DSP_MOD,
|
||||
CM_AUTOIDLE);
|
||||
omap2_cm_write_mod_reg(OMAP2420_AUTO_DSP_IPI_MASK, OMAP24XX_DSP_MOD,
|
||||
CM_AUTOIDLE);
|
||||
|
||||
/* Put DPLL and both APLLs into autoidle mode */
|
||||
cm_write_mod_reg((0x03 << OMAP24XX_AUTO_DPLL_SHIFT) |
|
||||
(0x03 << OMAP24XX_AUTO_96M_SHIFT) |
|
||||
(0x03 << OMAP24XX_AUTO_54M_SHIFT),
|
||||
PLL_MOD, CM_AUTOIDLE);
|
||||
omap2_cm_write_mod_reg((0x03 << OMAP24XX_AUTO_DPLL_SHIFT) |
|
||||
(0x03 << OMAP24XX_AUTO_96M_SHIFT) |
|
||||
(0x03 << OMAP24XX_AUTO_54M_SHIFT),
|
||||
PLL_MOD, CM_AUTOIDLE);
|
||||
|
||||
cm_write_mod_reg(OMAP24XX_AUTO_OMAPCTRL_MASK |
|
||||
OMAP24XX_AUTO_WDT1_MASK |
|
||||
OMAP24XX_AUTO_MPU_WDT_MASK |
|
||||
OMAP24XX_AUTO_GPIOS_MASK |
|
||||
OMAP24XX_AUTO_32KSYNC_MASK |
|
||||
OMAP24XX_AUTO_GPT1_MASK,
|
||||
WKUP_MOD, CM_AUTOIDLE);
|
||||
omap2_cm_write_mod_reg(OMAP24XX_AUTO_OMAPCTRL_MASK |
|
||||
OMAP24XX_AUTO_WDT1_MASK |
|
||||
OMAP24XX_AUTO_MPU_WDT_MASK |
|
||||
OMAP24XX_AUTO_GPIOS_MASK |
|
||||
OMAP24XX_AUTO_32KSYNC_MASK |
|
||||
OMAP24XX_AUTO_GPT1_MASK,
|
||||
WKUP_MOD, CM_AUTOIDLE);
|
||||
|
||||
/* REVISIT: Configure number of 32 kHz clock cycles for sys_clk
|
||||
* stabilisation */
|
||||
prm_write_mod_reg(15 << OMAP_SETUP_TIME_SHIFT, OMAP24XX_GR_MOD,
|
||||
OMAP2_PRCM_CLKSSETUP_OFFSET);
|
||||
omap2_prm_write_mod_reg(15 << OMAP_SETUP_TIME_SHIFT, OMAP24XX_GR_MOD,
|
||||
OMAP2_PRCM_CLKSSETUP_OFFSET);
|
||||
|
||||
/* Configure automatic voltage transition */
|
||||
prm_write_mod_reg(2 << OMAP_SETUP_TIME_SHIFT, OMAP24XX_GR_MOD,
|
||||
OMAP2_PRCM_VOLTSETUP_OFFSET);
|
||||
prm_write_mod_reg(OMAP24XX_AUTO_EXTVOLT_MASK |
|
||||
(0x1 << OMAP24XX_SETOFF_LEVEL_SHIFT) |
|
||||
OMAP24XX_MEMRETCTRL_MASK |
|
||||
(0x1 << OMAP24XX_SETRET_LEVEL_SHIFT) |
|
||||
(0x0 << OMAP24XX_VOLT_LEVEL_SHIFT),
|
||||
OMAP24XX_GR_MOD, OMAP2_PRCM_VOLTCTRL_OFFSET);
|
||||
omap2_prm_write_mod_reg(2 << OMAP_SETUP_TIME_SHIFT, OMAP24XX_GR_MOD,
|
||||
OMAP2_PRCM_VOLTSETUP_OFFSET);
|
||||
omap2_prm_write_mod_reg(OMAP24XX_AUTO_EXTVOLT_MASK |
|
||||
(0x1 << OMAP24XX_SETOFF_LEVEL_SHIFT) |
|
||||
OMAP24XX_MEMRETCTRL_MASK |
|
||||
(0x1 << OMAP24XX_SETRET_LEVEL_SHIFT) |
|
||||
(0x0 << OMAP24XX_VOLT_LEVEL_SHIFT),
|
||||
OMAP24XX_GR_MOD, OMAP2_PRCM_VOLTCTRL_OFFSET);
|
||||
|
||||
/* Enable wake-up events */
|
||||
prm_write_mod_reg(OMAP24XX_EN_GPIOS_MASK | OMAP24XX_EN_GPT1_MASK,
|
||||
WKUP_MOD, PM_WKEN);
|
||||
omap2_prm_write_mod_reg(OMAP24XX_EN_GPIOS_MASK | OMAP24XX_EN_GPT1_MASK,
|
||||
WKUP_MOD, PM_WKEN);
|
||||
}
|
||||
|
||||
static int __init omap2_pm_init(void)
|
||||
|
@ -506,7 +506,7 @@ static int __init omap2_pm_init(void)
|
|||
return -ENODEV;
|
||||
|
||||
printk(KERN_INFO "Power Management for OMAP2 initializing\n");
|
||||
l = prm_read_mod_reg(OCP_MOD, OMAP2_PRCM_REVISION_OFFSET);
|
||||
l = omap2_prm_read_mod_reg(OCP_MOD, OMAP2_PRCM_REVISION_OFFSET);
|
||||
printk(KERN_INFO "PRCM revision %d.%d\n", (l >> 4) & 0x0f, l & 0x0f);
|
||||
|
||||
/* Look up important powerdomains */
|
||||
|
|
|
@ -31,8 +31,8 @@
|
|||
#include <linux/console.h>
|
||||
|
||||
#include <plat/sram.h>
|
||||
#include <plat/clockdomain.h>
|
||||
#include <plat/powerdomain.h>
|
||||
#include "clockdomain.h"
|
||||
#include "powerdomain.h"
|
||||
#include <plat/serial.h>
|
||||
#include <plat/sdrc.h>
|
||||
#include <plat/prcm.h>
|
||||
|
@ -41,11 +41,11 @@
|
|||
|
||||
#include <asm/tlbflush.h>
|
||||
|
||||
#include "cm.h"
|
||||
#include "cm2xxx_3xxx.h"
|
||||
#include "cm-regbits-34xx.h"
|
||||
#include "prm-regbits-34xx.h"
|
||||
|
||||
#include "prm.h"
|
||||
#include "prm2xxx_3xxx.h"
|
||||
#include "pm.h"
|
||||
#include "sdrc.h"
|
||||
#include "control.h"
|
||||
|
@ -105,12 +105,12 @@ static void omap3_enable_io_chain(void)
|
|||
int timeout = 0;
|
||||
|
||||
if (omap_rev() >= OMAP3430_REV_ES3_1) {
|
||||
prm_set_mod_reg_bits(OMAP3430_EN_IO_CHAIN_MASK, WKUP_MOD,
|
||||
omap2_prm_set_mod_reg_bits(OMAP3430_EN_IO_CHAIN_MASK, WKUP_MOD,
|
||||
PM_WKEN);
|
||||
/* Do a readback to assure write has been done */
|
||||
prm_read_mod_reg(WKUP_MOD, PM_WKEN);
|
||||
omap2_prm_read_mod_reg(WKUP_MOD, PM_WKEN);
|
||||
|
||||
while (!(prm_read_mod_reg(WKUP_MOD, PM_WKEN) &
|
||||
while (!(omap2_prm_read_mod_reg(WKUP_MOD, PM_WKEN) &
|
||||
OMAP3430_ST_IO_CHAIN_MASK)) {
|
||||
timeout++;
|
||||
if (timeout > 1000) {
|
||||
|
@ -118,7 +118,7 @@ static void omap3_enable_io_chain(void)
|
|||
"activation failed.\n");
|
||||
return;
|
||||
}
|
||||
prm_set_mod_reg_bits(OMAP3430_ST_IO_CHAIN_MASK,
|
||||
omap2_prm_set_mod_reg_bits(OMAP3430_ST_IO_CHAIN_MASK,
|
||||
WKUP_MOD, PM_WKEN);
|
||||
}
|
||||
}
|
||||
|
@ -127,22 +127,13 @@ static void omap3_enable_io_chain(void)
|
|||
static void omap3_disable_io_chain(void)
|
||||
{
|
||||
if (omap_rev() >= OMAP3430_REV_ES3_1)
|
||||
prm_clear_mod_reg_bits(OMAP3430_EN_IO_CHAIN_MASK, WKUP_MOD,
|
||||
omap2_prm_clear_mod_reg_bits(OMAP3430_EN_IO_CHAIN_MASK, WKUP_MOD,
|
||||
PM_WKEN);
|
||||
}
|
||||
|
||||
static void omap3_core_save_context(void)
|
||||
{
|
||||
u32 control_padconf_off;
|
||||
|
||||
/* Save the padconf registers */
|
||||
control_padconf_off = omap_ctrl_readl(OMAP343X_CONTROL_PADCONF_OFF);
|
||||
control_padconf_off |= START_PADCONF_SAVE;
|
||||
omap_ctrl_writel(control_padconf_off, OMAP343X_CONTROL_PADCONF_OFF);
|
||||
/* wait for the save to complete */
|
||||
while (!(omap_ctrl_readl(OMAP343X_CONTROL_GENERAL_PURPOSE_STATUS)
|
||||
& PADCONF_SAVE_DONE))
|
||||
udelay(1);
|
||||
omap3_ctrl_save_padconf();
|
||||
|
||||
/*
|
||||
* Force write last pad into memory, as this can fail in some
|
||||
|
@ -221,27 +212,27 @@ static int prcm_clear_mod_irqs(s16 module, u8 regs)
|
|||
OMAP3430ES2_PM_MPUGRPSEL3 : OMAP3430_PM_MPUGRPSEL;
|
||||
int c = 0;
|
||||
|
||||
wkst = prm_read_mod_reg(module, wkst_off);
|
||||
wkst &= prm_read_mod_reg(module, grpsel_off);
|
||||
wkst = omap2_prm_read_mod_reg(module, wkst_off);
|
||||
wkst &= omap2_prm_read_mod_reg(module, grpsel_off);
|
||||
if (wkst) {
|
||||
iclk = cm_read_mod_reg(module, iclk_off);
|
||||
fclk = cm_read_mod_reg(module, fclk_off);
|
||||
iclk = omap2_cm_read_mod_reg(module, iclk_off);
|
||||
fclk = omap2_cm_read_mod_reg(module, fclk_off);
|
||||
while (wkst) {
|
||||
clken = wkst;
|
||||
cm_set_mod_reg_bits(clken, module, iclk_off);
|
||||
omap2_cm_set_mod_reg_bits(clken, module, iclk_off);
|
||||
/*
|
||||
* For USBHOST, we don't know whether HOST1 or
|
||||
* HOST2 woke us up, so enable both f-clocks
|
||||
*/
|
||||
if (module == OMAP3430ES2_USBHOST_MOD)
|
||||
clken |= 1 << OMAP3430ES2_EN_USBHOST2_SHIFT;
|
||||
cm_set_mod_reg_bits(clken, module, fclk_off);
|
||||
prm_write_mod_reg(wkst, module, wkst_off);
|
||||
wkst = prm_read_mod_reg(module, wkst_off);
|
||||
omap2_cm_set_mod_reg_bits(clken, module, fclk_off);
|
||||
omap2_prm_write_mod_reg(wkst, module, wkst_off);
|
||||
wkst = omap2_prm_read_mod_reg(module, wkst_off);
|
||||
c++;
|
||||
}
|
||||
cm_write_mod_reg(iclk, module, iclk_off);
|
||||
cm_write_mod_reg(fclk, module, fclk_off);
|
||||
omap2_cm_write_mod_reg(iclk, module, iclk_off);
|
||||
omap2_cm_write_mod_reg(fclk, module, fclk_off);
|
||||
}
|
||||
|
||||
return c;
|
||||
|
@ -284,9 +275,9 @@ static irqreturn_t prcm_interrupt_handler (int irq, void *dev_id)
|
|||
u32 irqenable_mpu, irqstatus_mpu;
|
||||
int c = 0;
|
||||
|
||||
irqenable_mpu = prm_read_mod_reg(OCP_MOD,
|
||||
irqenable_mpu = omap2_prm_read_mod_reg(OCP_MOD,
|
||||
OMAP3_PRM_IRQENABLE_MPU_OFFSET);
|
||||
irqstatus_mpu = prm_read_mod_reg(OCP_MOD,
|
||||
irqstatus_mpu = omap2_prm_read_mod_reg(OCP_MOD,
|
||||
OMAP3_PRM_IRQSTATUS_MPU_OFFSET);
|
||||
irqstatus_mpu &= irqenable_mpu;
|
||||
|
||||
|
@ -307,10 +298,10 @@ static irqreturn_t prcm_interrupt_handler (int irq, void *dev_id)
|
|||
"no code to handle it (%08x)\n", irqstatus_mpu);
|
||||
}
|
||||
|
||||
prm_write_mod_reg(irqstatus_mpu, OCP_MOD,
|
||||
omap2_prm_write_mod_reg(irqstatus_mpu, OCP_MOD,
|
||||
OMAP3_PRM_IRQSTATUS_MPU_OFFSET);
|
||||
|
||||
irqstatus_mpu = prm_read_mod_reg(OCP_MOD,
|
||||
irqstatus_mpu = omap2_prm_read_mod_reg(OCP_MOD,
|
||||
OMAP3_PRM_IRQSTATUS_MPU_OFFSET);
|
||||
irqstatus_mpu &= irqenable_mpu;
|
||||
|
||||
|
@ -360,6 +351,7 @@ void omap_sram_idle(void)
|
|||
int mpu_next_state = PWRDM_POWER_ON;
|
||||
int per_next_state = PWRDM_POWER_ON;
|
||||
int core_next_state = PWRDM_POWER_ON;
|
||||
int per_going_off;
|
||||
int core_prev_state, per_prev_state;
|
||||
u32 sdrc_pwr = 0;
|
||||
|
||||
|
@ -398,7 +390,7 @@ void omap_sram_idle(void)
|
|||
if (omap3_has_io_wakeup() &&
|
||||
(per_next_state < PWRDM_POWER_ON ||
|
||||
core_next_state < PWRDM_POWER_ON)) {
|
||||
prm_set_mod_reg_bits(OMAP3430_EN_IO_MASK, WKUP_MOD, PM_WKEN);
|
||||
omap2_prm_set_mod_reg_bits(OMAP3430_EN_IO_MASK, WKUP_MOD, PM_WKEN);
|
||||
omap3_enable_io_chain();
|
||||
}
|
||||
|
||||
|
@ -411,9 +403,10 @@ void omap_sram_idle(void)
|
|||
|
||||
/* PER */
|
||||
if (per_next_state < PWRDM_POWER_ON) {
|
||||
per_going_off = (per_next_state == PWRDM_POWER_OFF) ? 1 : 0;
|
||||
omap_uart_prepare_idle(2);
|
||||
omap_uart_prepare_idle(3);
|
||||
omap2_gpio_prepare_for_idle(per_next_state);
|
||||
omap2_gpio_prepare_for_idle(per_going_off);
|
||||
if (per_next_state == PWRDM_POWER_OFF)
|
||||
omap3_per_save_context();
|
||||
}
|
||||
|
@ -424,7 +417,7 @@ void omap_sram_idle(void)
|
|||
omap_uart_prepare_idle(1);
|
||||
if (core_next_state == PWRDM_POWER_OFF) {
|
||||
omap3_core_save_context();
|
||||
omap3_prcm_save_context();
|
||||
omap3_cm_save_context();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -464,14 +457,14 @@ void omap_sram_idle(void)
|
|||
core_prev_state = pwrdm_read_prev_pwrst(core_pwrdm);
|
||||
if (core_prev_state == PWRDM_POWER_OFF) {
|
||||
omap3_core_restore_context();
|
||||
omap3_prcm_restore_context();
|
||||
omap3_cm_restore_context();
|
||||
omap3_sram_restore_context();
|
||||
omap2_sms_restore_context();
|
||||
}
|
||||
omap_uart_resume_idle(0);
|
||||
omap_uart_resume_idle(1);
|
||||
if (core_next_state == PWRDM_POWER_OFF)
|
||||
prm_clear_mod_reg_bits(OMAP3430_AUTO_OFF_MASK,
|
||||
omap2_prm_clear_mod_reg_bits(OMAP3430_AUTO_OFF_MASK,
|
||||
OMAP3430_GR_MOD,
|
||||
OMAP3_PRM_VOLTCTRL_OFFSET);
|
||||
}
|
||||
|
@ -495,7 +488,8 @@ void omap_sram_idle(void)
|
|||
if (omap3_has_io_wakeup() &&
|
||||
(per_next_state < PWRDM_POWER_ON ||
|
||||
core_next_state < PWRDM_POWER_ON)) {
|
||||
prm_clear_mod_reg_bits(OMAP3430_EN_IO_MASK, WKUP_MOD, PM_WKEN);
|
||||
omap2_prm_clear_mod_reg_bits(OMAP3430_EN_IO_MASK, WKUP_MOD,
|
||||
PM_WKEN);
|
||||
omap3_disable_io_chain();
|
||||
}
|
||||
|
||||
|
@ -633,21 +627,21 @@ static struct platform_suspend_ops omap_pm_ops = {
|
|||
static void __init omap3_iva_idle(void)
|
||||
{
|
||||
/* ensure IVA2 clock is disabled */
|
||||
cm_write_mod_reg(0, OMAP3430_IVA2_MOD, CM_FCLKEN);
|
||||
omap2_cm_write_mod_reg(0, OMAP3430_IVA2_MOD, CM_FCLKEN);
|
||||
|
||||
/* if no clock activity, nothing else to do */
|
||||
if (!(cm_read_mod_reg(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKSTST) &
|
||||
if (!(omap2_cm_read_mod_reg(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKSTST) &
|
||||
OMAP3430_CLKACTIVITY_IVA2_MASK))
|
||||
return;
|
||||
|
||||
/* Reset IVA2 */
|
||||
prm_write_mod_reg(OMAP3430_RST1_IVA2_MASK |
|
||||
omap2_prm_write_mod_reg(OMAP3430_RST1_IVA2_MASK |
|
||||
OMAP3430_RST2_IVA2_MASK |
|
||||
OMAP3430_RST3_IVA2_MASK,
|
||||
OMAP3430_IVA2_MOD, OMAP2_RM_RSTCTRL);
|
||||
|
||||
/* Enable IVA2 clock */
|
||||
cm_write_mod_reg(OMAP3430_CM_FCLKEN_IVA2_EN_IVA2_MASK,
|
||||
omap2_cm_write_mod_reg(OMAP3430_CM_FCLKEN_IVA2_EN_IVA2_MASK,
|
||||
OMAP3430_IVA2_MOD, CM_FCLKEN);
|
||||
|
||||
/* Set IVA2 boot mode to 'idle' */
|
||||
|
@ -655,13 +649,13 @@ static void __init omap3_iva_idle(void)
|
|||
OMAP343X_CONTROL_IVA2_BOOTMOD);
|
||||
|
||||
/* Un-reset IVA2 */
|
||||
prm_write_mod_reg(0, OMAP3430_IVA2_MOD, OMAP2_RM_RSTCTRL);
|
||||
omap2_prm_write_mod_reg(0, OMAP3430_IVA2_MOD, OMAP2_RM_RSTCTRL);
|
||||
|
||||
/* Disable IVA2 clock */
|
||||
cm_write_mod_reg(0, OMAP3430_IVA2_MOD, CM_FCLKEN);
|
||||
omap2_cm_write_mod_reg(0, OMAP3430_IVA2_MOD, CM_FCLKEN);
|
||||
|
||||
/* Reset IVA2 */
|
||||
prm_write_mod_reg(OMAP3430_RST1_IVA2_MASK |
|
||||
omap2_prm_write_mod_reg(OMAP3430_RST1_IVA2_MASK |
|
||||
OMAP3430_RST2_IVA2_MASK |
|
||||
OMAP3430_RST3_IVA2_MASK,
|
||||
OMAP3430_IVA2_MOD, OMAP2_RM_RSTCTRL);
|
||||
|
@ -685,10 +679,10 @@ static void __init omap3_d2d_idle(void)
|
|||
omap_ctrl_writew(padconf, OMAP3_PADCONF_SAD2D_IDLEACK);
|
||||
|
||||
/* reset modem */
|
||||
prm_write_mod_reg(OMAP3430_RM_RSTCTRL_CORE_MODEM_SW_RSTPWRON_MASK |
|
||||
omap2_prm_write_mod_reg(OMAP3430_RM_RSTCTRL_CORE_MODEM_SW_RSTPWRON_MASK |
|
||||
OMAP3430_RM_RSTCTRL_CORE_MODEM_SW_RST_MASK,
|
||||
CORE_MOD, OMAP2_RM_RSTCTRL);
|
||||
prm_write_mod_reg(0, CORE_MOD, OMAP2_RM_RSTCTRL);
|
||||
omap2_prm_write_mod_reg(0, CORE_MOD, OMAP2_RM_RSTCTRL);
|
||||
}
|
||||
|
||||
static void __init prcm_setup_regs(void)
|
||||
|
@ -703,23 +697,23 @@ static void __init prcm_setup_regs(void)
|
|||
|
||||
/* XXX Reset all wkdeps. This should be done when initializing
|
||||
* powerdomains */
|
||||
prm_write_mod_reg(0, OMAP3430_IVA2_MOD, PM_WKDEP);
|
||||
prm_write_mod_reg(0, MPU_MOD, PM_WKDEP);
|
||||
prm_write_mod_reg(0, OMAP3430_DSS_MOD, PM_WKDEP);
|
||||
prm_write_mod_reg(0, OMAP3430_NEON_MOD, PM_WKDEP);
|
||||
prm_write_mod_reg(0, OMAP3430_CAM_MOD, PM_WKDEP);
|
||||
prm_write_mod_reg(0, OMAP3430_PER_MOD, PM_WKDEP);
|
||||
omap2_prm_write_mod_reg(0, OMAP3430_IVA2_MOD, PM_WKDEP);
|
||||
omap2_prm_write_mod_reg(0, MPU_MOD, PM_WKDEP);
|
||||
omap2_prm_write_mod_reg(0, OMAP3430_DSS_MOD, PM_WKDEP);
|
||||
omap2_prm_write_mod_reg(0, OMAP3430_NEON_MOD, PM_WKDEP);
|
||||
omap2_prm_write_mod_reg(0, OMAP3430_CAM_MOD, PM_WKDEP);
|
||||
omap2_prm_write_mod_reg(0, OMAP3430_PER_MOD, PM_WKDEP);
|
||||
if (omap_rev() > OMAP3430_REV_ES1_0) {
|
||||
prm_write_mod_reg(0, OMAP3430ES2_SGX_MOD, PM_WKDEP);
|
||||
prm_write_mod_reg(0, OMAP3430ES2_USBHOST_MOD, PM_WKDEP);
|
||||
omap2_prm_write_mod_reg(0, OMAP3430ES2_SGX_MOD, PM_WKDEP);
|
||||
omap2_prm_write_mod_reg(0, OMAP3430ES2_USBHOST_MOD, PM_WKDEP);
|
||||
} else
|
||||
prm_write_mod_reg(0, GFX_MOD, PM_WKDEP);
|
||||
omap2_prm_write_mod_reg(0, GFX_MOD, PM_WKDEP);
|
||||
|
||||
/*
|
||||
* Enable interface clock autoidle for all modules.
|
||||
* Note that in the long run this should be done by clockfw
|
||||
*/
|
||||
cm_write_mod_reg(
|
||||
omap2_cm_write_mod_reg(
|
||||
OMAP3430_AUTO_MODEM_MASK |
|
||||
OMAP3430ES2_AUTO_MMC3_MASK |
|
||||
OMAP3430ES2_AUTO_ICR_MASK |
|
||||
|
@ -752,7 +746,7 @@ static void __init prcm_setup_regs(void)
|
|||
OMAP3430_AUTO_SSI_MASK,
|
||||
CORE_MOD, CM_AUTOIDLE1);
|
||||
|
||||
cm_write_mod_reg(
|
||||
omap2_cm_write_mod_reg(
|
||||
OMAP3430_AUTO_PKA_MASK |
|
||||
OMAP3430_AUTO_AES1_MASK |
|
||||
OMAP3430_AUTO_RNG_MASK |
|
||||
|
@ -761,13 +755,13 @@ static void __init prcm_setup_regs(void)
|
|||
CORE_MOD, CM_AUTOIDLE2);
|
||||
|
||||
if (omap_rev() > OMAP3430_REV_ES1_0) {
|
||||
cm_write_mod_reg(
|
||||
omap2_cm_write_mod_reg(
|
||||
OMAP3430_AUTO_MAD2D_MASK |
|
||||
OMAP3430ES2_AUTO_USBTLL_MASK,
|
||||
CORE_MOD, CM_AUTOIDLE3);
|
||||
}
|
||||
|
||||
cm_write_mod_reg(
|
||||
omap2_cm_write_mod_reg(
|
||||
OMAP3430_AUTO_WDT2_MASK |
|
||||
OMAP3430_AUTO_WDT1_MASK |
|
||||
OMAP3430_AUTO_GPIO1_MASK |
|
||||
|
@ -776,17 +770,17 @@ static void __init prcm_setup_regs(void)
|
|||
OMAP3430_AUTO_GPT1_MASK,
|
||||
WKUP_MOD, CM_AUTOIDLE);
|
||||
|
||||
cm_write_mod_reg(
|
||||
omap2_cm_write_mod_reg(
|
||||
OMAP3430_AUTO_DSS_MASK,
|
||||
OMAP3430_DSS_MOD,
|
||||
CM_AUTOIDLE);
|
||||
|
||||
cm_write_mod_reg(
|
||||
omap2_cm_write_mod_reg(
|
||||
OMAP3430_AUTO_CAM_MASK,
|
||||
OMAP3430_CAM_MOD,
|
||||
CM_AUTOIDLE);
|
||||
|
||||
cm_write_mod_reg(
|
||||
omap2_cm_write_mod_reg(
|
||||
omap3630_auto_uart4_mask |
|
||||
OMAP3430_AUTO_GPIO6_MASK |
|
||||
OMAP3430_AUTO_GPIO5_MASK |
|
||||
|
@ -810,7 +804,7 @@ static void __init prcm_setup_regs(void)
|
|||
CM_AUTOIDLE);
|
||||
|
||||
if (omap_rev() > OMAP3430_REV_ES1_0) {
|
||||
cm_write_mod_reg(
|
||||
omap2_cm_write_mod_reg(
|
||||
OMAP3430ES2_AUTO_USBHOST_MASK,
|
||||
OMAP3430ES2_USBHOST_MOD,
|
||||
CM_AUTOIDLE);
|
||||
|
@ -822,16 +816,16 @@ static void __init prcm_setup_regs(void)
|
|||
* Set all plls to autoidle. This is needed until autoidle is
|
||||
* enabled by clockfw
|
||||
*/
|
||||
cm_write_mod_reg(1 << OMAP3430_AUTO_IVA2_DPLL_SHIFT,
|
||||
omap2_cm_write_mod_reg(1 << OMAP3430_AUTO_IVA2_DPLL_SHIFT,
|
||||
OMAP3430_IVA2_MOD, CM_AUTOIDLE2);
|
||||
cm_write_mod_reg(1 << OMAP3430_AUTO_MPU_DPLL_SHIFT,
|
||||
omap2_cm_write_mod_reg(1 << OMAP3430_AUTO_MPU_DPLL_SHIFT,
|
||||
MPU_MOD,
|
||||
CM_AUTOIDLE2);
|
||||
cm_write_mod_reg((1 << OMAP3430_AUTO_PERIPH_DPLL_SHIFT) |
|
||||
omap2_cm_write_mod_reg((1 << OMAP3430_AUTO_PERIPH_DPLL_SHIFT) |
|
||||
(1 << OMAP3430_AUTO_CORE_DPLL_SHIFT),
|
||||
PLL_MOD,
|
||||
CM_AUTOIDLE);
|
||||
cm_write_mod_reg(1 << OMAP3430ES2_AUTO_PERIPH2_DPLL_SHIFT,
|
||||
omap2_cm_write_mod_reg(1 << OMAP3430ES2_AUTO_PERIPH2_DPLL_SHIFT,
|
||||
PLL_MOD,
|
||||
CM_AUTOIDLE2);
|
||||
|
||||
|
@ -840,31 +834,31 @@ static void __init prcm_setup_regs(void)
|
|||
* sys_clkreq. In the long run clock framework should
|
||||
* take care of this.
|
||||
*/
|
||||
prm_rmw_mod_reg_bits(OMAP_AUTOEXTCLKMODE_MASK,
|
||||
omap2_prm_rmw_mod_reg_bits(OMAP_AUTOEXTCLKMODE_MASK,
|
||||
1 << OMAP_AUTOEXTCLKMODE_SHIFT,
|
||||
OMAP3430_GR_MOD,
|
||||
OMAP3_PRM_CLKSRC_CTRL_OFFSET);
|
||||
|
||||
/* setup wakup source */
|
||||
prm_write_mod_reg(OMAP3430_EN_IO_MASK | OMAP3430_EN_GPIO1_MASK |
|
||||
omap2_prm_write_mod_reg(OMAP3430_EN_IO_MASK | OMAP3430_EN_GPIO1_MASK |
|
||||
OMAP3430_EN_GPT1_MASK | OMAP3430_EN_GPT12_MASK,
|
||||
WKUP_MOD, PM_WKEN);
|
||||
/* No need to write EN_IO, that is always enabled */
|
||||
prm_write_mod_reg(OMAP3430_GRPSEL_GPIO1_MASK |
|
||||
omap2_prm_write_mod_reg(OMAP3430_GRPSEL_GPIO1_MASK |
|
||||
OMAP3430_GRPSEL_GPT1_MASK |
|
||||
OMAP3430_GRPSEL_GPT12_MASK,
|
||||
WKUP_MOD, OMAP3430_PM_MPUGRPSEL);
|
||||
/* For some reason IO doesn't generate wakeup event even if
|
||||
* it is selected to mpu wakeup goup */
|
||||
prm_write_mod_reg(OMAP3430_IO_EN_MASK | OMAP3430_WKUP_EN_MASK,
|
||||
omap2_prm_write_mod_reg(OMAP3430_IO_EN_MASK | OMAP3430_WKUP_EN_MASK,
|
||||
OCP_MOD, OMAP3_PRM_IRQENABLE_MPU_OFFSET);
|
||||
|
||||
/* Enable PM_WKEN to support DSS LPR */
|
||||
prm_write_mod_reg(OMAP3430_PM_WKEN_DSS_EN_DSS_MASK,
|
||||
omap2_prm_write_mod_reg(OMAP3430_PM_WKEN_DSS_EN_DSS_MASK,
|
||||
OMAP3430_DSS_MOD, PM_WKEN);
|
||||
|
||||
/* Enable wakeups in PER */
|
||||
prm_write_mod_reg(omap3630_en_uart4_mask |
|
||||
omap2_prm_write_mod_reg(omap3630_en_uart4_mask |
|
||||
OMAP3430_EN_GPIO2_MASK | OMAP3430_EN_GPIO3_MASK |
|
||||
OMAP3430_EN_GPIO4_MASK | OMAP3430_EN_GPIO5_MASK |
|
||||
OMAP3430_EN_GPIO6_MASK | OMAP3430_EN_UART3_MASK |
|
||||
|
@ -872,7 +866,7 @@ static void __init prcm_setup_regs(void)
|
|||
OMAP3430_EN_MCBSP4_MASK,
|
||||
OMAP3430_PER_MOD, PM_WKEN);
|
||||
/* and allow them to wake up MPU */
|
||||
prm_write_mod_reg(omap3630_grpsel_uart4_mask |
|
||||
omap2_prm_write_mod_reg(omap3630_grpsel_uart4_mask |
|
||||
OMAP3430_GRPSEL_GPIO2_MASK |
|
||||
OMAP3430_GRPSEL_GPIO3_MASK |
|
||||
OMAP3430_GRPSEL_GPIO4_MASK |
|
||||
|
@ -885,22 +879,22 @@ static void __init prcm_setup_regs(void)
|
|||
OMAP3430_PER_MOD, OMAP3430_PM_MPUGRPSEL);
|
||||
|
||||
/* Don't attach IVA interrupts */
|
||||
prm_write_mod_reg(0, WKUP_MOD, OMAP3430_PM_IVAGRPSEL);
|
||||
prm_write_mod_reg(0, CORE_MOD, OMAP3430_PM_IVAGRPSEL1);
|
||||
prm_write_mod_reg(0, CORE_MOD, OMAP3430ES2_PM_IVAGRPSEL3);
|
||||
prm_write_mod_reg(0, OMAP3430_PER_MOD, OMAP3430_PM_IVAGRPSEL);
|
||||
omap2_prm_write_mod_reg(0, WKUP_MOD, OMAP3430_PM_IVAGRPSEL);
|
||||
omap2_prm_write_mod_reg(0, CORE_MOD, OMAP3430_PM_IVAGRPSEL1);
|
||||
omap2_prm_write_mod_reg(0, CORE_MOD, OMAP3430ES2_PM_IVAGRPSEL3);
|
||||
omap2_prm_write_mod_reg(0, OMAP3430_PER_MOD, OMAP3430_PM_IVAGRPSEL);
|
||||
|
||||
/* Clear any pending 'reset' flags */
|
||||
prm_write_mod_reg(0xffffffff, MPU_MOD, OMAP2_RM_RSTST);
|
||||
prm_write_mod_reg(0xffffffff, CORE_MOD, OMAP2_RM_RSTST);
|
||||
prm_write_mod_reg(0xffffffff, OMAP3430_PER_MOD, OMAP2_RM_RSTST);
|
||||
prm_write_mod_reg(0xffffffff, OMAP3430_EMU_MOD, OMAP2_RM_RSTST);
|
||||
prm_write_mod_reg(0xffffffff, OMAP3430_NEON_MOD, OMAP2_RM_RSTST);
|
||||
prm_write_mod_reg(0xffffffff, OMAP3430_DSS_MOD, OMAP2_RM_RSTST);
|
||||
prm_write_mod_reg(0xffffffff, OMAP3430ES2_USBHOST_MOD, OMAP2_RM_RSTST);
|
||||
omap2_prm_write_mod_reg(0xffffffff, MPU_MOD, OMAP2_RM_RSTST);
|
||||
omap2_prm_write_mod_reg(0xffffffff, CORE_MOD, OMAP2_RM_RSTST);
|
||||
omap2_prm_write_mod_reg(0xffffffff, OMAP3430_PER_MOD, OMAP2_RM_RSTST);
|
||||
omap2_prm_write_mod_reg(0xffffffff, OMAP3430_EMU_MOD, OMAP2_RM_RSTST);
|
||||
omap2_prm_write_mod_reg(0xffffffff, OMAP3430_NEON_MOD, OMAP2_RM_RSTST);
|
||||
omap2_prm_write_mod_reg(0xffffffff, OMAP3430_DSS_MOD, OMAP2_RM_RSTST);
|
||||
omap2_prm_write_mod_reg(0xffffffff, OMAP3430ES2_USBHOST_MOD, OMAP2_RM_RSTST);
|
||||
|
||||
/* Clear any pending PRCM interrupts */
|
||||
prm_write_mod_reg(0, OCP_MOD, OMAP3_PRM_IRQSTATUS_MPU_OFFSET);
|
||||
omap2_prm_write_mod_reg(0, OCP_MOD, OMAP3_PRM_IRQSTATUS_MPU_OFFSET);
|
||||
|
||||
omap3_iva_idle();
|
||||
omap3_d2d_idle();
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
#include <linux/err.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
#include <plat/powerdomain.h>
|
||||
#include "powerdomain.h"
|
||||
#include <mach/omap4-common.h>
|
||||
|
||||
struct power_state {
|
||||
|
|
110
arch/arm/mach-omap2/powerdomain-common.c
Normal file
110
arch/arm/mach-omap2/powerdomain-common.c
Normal file
|
@ -0,0 +1,110 @@
|
|||
/*
|
||||
* linux/arch/arm/mach-omap2/powerdomain-common.c
|
||||
* Contains common powerdomain framework functions
|
||||
*
|
||||
* Copyright (C) 2010 Texas Instruments, Inc.
|
||||
* Copyright (C) 2010 Nokia Corporation
|
||||
*
|
||||
* Derived from mach-omap2/powerdomain.c written by Paul Walmsley
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <linux/errno.h>
|
||||
#include <linux/kernel.h>
|
||||
#include "pm.h"
|
||||
#include "cm.h"
|
||||
#include "cm-regbits-34xx.h"
|
||||
#include "cm-regbits-44xx.h"
|
||||
#include "prm-regbits-34xx.h"
|
||||
#include "prm-regbits-44xx.h"
|
||||
|
||||
/*
|
||||
* OMAP3 and OMAP4 specific register bit initialisations
|
||||
* Notice that the names here are not according to each power
|
||||
* domain but the bit mapping used applies to all of them
|
||||
*/
|
||||
/* OMAP3 and OMAP4 Memory Onstate Masks (common across all power domains) */
|
||||
#define OMAP_MEM0_ONSTATE_MASK OMAP3430_SHAREDL1CACHEFLATONSTATE_MASK
|
||||
#define OMAP_MEM1_ONSTATE_MASK OMAP3430_L1FLATMEMONSTATE_MASK
|
||||
#define OMAP_MEM2_ONSTATE_MASK OMAP3430_SHAREDL2CACHEFLATONSTATE_MASK
|
||||
#define OMAP_MEM3_ONSTATE_MASK OMAP3430_L2FLATMEMONSTATE_MASK
|
||||
#define OMAP_MEM4_ONSTATE_MASK OMAP4430_OCP_NRET_BANK_ONSTATE_MASK
|
||||
|
||||
/* OMAP3 and OMAP4 Memory Retstate Masks (common across all power domains) */
|
||||
#define OMAP_MEM0_RETSTATE_MASK OMAP3430_SHAREDL1CACHEFLATRETSTATE_MASK
|
||||
#define OMAP_MEM1_RETSTATE_MASK OMAP3430_L1FLATMEMRETSTATE_MASK
|
||||
#define OMAP_MEM2_RETSTATE_MASK OMAP3430_SHAREDL2CACHEFLATRETSTATE_MASK
|
||||
#define OMAP_MEM3_RETSTATE_MASK OMAP3430_L2FLATMEMRETSTATE_MASK
|
||||
#define OMAP_MEM4_RETSTATE_MASK OMAP4430_OCP_NRET_BANK_RETSTATE_MASK
|
||||
|
||||
/* OMAP3 and OMAP4 Memory Status bits */
|
||||
#define OMAP_MEM0_STATEST_MASK OMAP3430_SHAREDL1CACHEFLATSTATEST_MASK
|
||||
#define OMAP_MEM1_STATEST_MASK OMAP3430_L1FLATMEMSTATEST_MASK
|
||||
#define OMAP_MEM2_STATEST_MASK OMAP3430_SHAREDL2CACHEFLATSTATEST_MASK
|
||||
#define OMAP_MEM3_STATEST_MASK OMAP3430_L2FLATMEMSTATEST_MASK
|
||||
#define OMAP_MEM4_STATEST_MASK OMAP4430_OCP_NRET_BANK_STATEST_MASK
|
||||
|
||||
/* Common Internal functions used across OMAP rev's*/
|
||||
u32 omap2_pwrdm_get_mem_bank_onstate_mask(u8 bank)
|
||||
{
|
||||
switch (bank) {
|
||||
case 0:
|
||||
return OMAP_MEM0_ONSTATE_MASK;
|
||||
case 1:
|
||||
return OMAP_MEM1_ONSTATE_MASK;
|
||||
case 2:
|
||||
return OMAP_MEM2_ONSTATE_MASK;
|
||||
case 3:
|
||||
return OMAP_MEM3_ONSTATE_MASK;
|
||||
case 4:
|
||||
return OMAP_MEM4_ONSTATE_MASK;
|
||||
default:
|
||||
WARN_ON(1); /* should never happen */
|
||||
return -EEXIST;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 omap2_pwrdm_get_mem_bank_retst_mask(u8 bank)
|
||||
{
|
||||
switch (bank) {
|
||||
case 0:
|
||||
return OMAP_MEM0_RETSTATE_MASK;
|
||||
case 1:
|
||||
return OMAP_MEM1_RETSTATE_MASK;
|
||||
case 2:
|
||||
return OMAP_MEM2_RETSTATE_MASK;
|
||||
case 3:
|
||||
return OMAP_MEM3_RETSTATE_MASK;
|
||||
case 4:
|
||||
return OMAP_MEM4_RETSTATE_MASK;
|
||||
default:
|
||||
WARN_ON(1); /* should never happen */
|
||||
return -EEXIST;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 omap2_pwrdm_get_mem_bank_stst_mask(u8 bank)
|
||||
{
|
||||
switch (bank) {
|
||||
case 0:
|
||||
return OMAP_MEM0_STATEST_MASK;
|
||||
case 1:
|
||||
return OMAP_MEM1_STATEST_MASK;
|
||||
case 2:
|
||||
return OMAP_MEM2_STATEST_MASK;
|
||||
case 3:
|
||||
return OMAP_MEM3_STATEST_MASK;
|
||||
case 4:
|
||||
return OMAP_MEM4_STATEST_MASK;
|
||||
default:
|
||||
WARN_ON(1); /* should never happen */
|
||||
return -EEXIST;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -15,27 +15,19 @@
|
|||
#undef DEBUG
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include <asm/atomic.h>
|
||||
|
||||
#include "cm.h"
|
||||
#include "cm-regbits-34xx.h"
|
||||
#include "cm-regbits-44xx.h"
|
||||
#include "prm.h"
|
||||
#include "prm-regbits-34xx.h"
|
||||
#include "prm-regbits-44xx.h"
|
||||
#include <linux/string.h>
|
||||
#include "cm2xxx_3xxx.h"
|
||||
#include "prcm44xx.h"
|
||||
#include "cm44xx.h"
|
||||
#include "prm2xxx_3xxx.h"
|
||||
#include "prm44xx.h"
|
||||
|
||||
#include <plat/cpu.h>
|
||||
#include <plat/powerdomain.h>
|
||||
#include <plat/clockdomain.h>
|
||||
#include "powerdomain.h"
|
||||
#include "clockdomain.h"
|
||||
#include <plat/prcm.h>
|
||||
|
||||
#include "pm.h"
|
||||
|
@ -45,41 +37,12 @@ enum {
|
|||
PWRDM_STATE_PREV,
|
||||
};
|
||||
|
||||
/* Variable holding value of the CPU dependent PWRSTCTRL Register Offset */
|
||||
static u16 pwrstctrl_reg_offs;
|
||||
|
||||
/* Variable holding value of the CPU dependent PWRSTST Register Offset */
|
||||
static u16 pwrstst_reg_offs;
|
||||
|
||||
/* OMAP3 and OMAP4 specific register bit initialisations
|
||||
* Notice that the names here are not according to each power
|
||||
* domain but the bit mapping used applies to all of them
|
||||
*/
|
||||
|
||||
/* OMAP3 and OMAP4 Memory Onstate Masks (common across all power domains) */
|
||||
#define OMAP_MEM0_ONSTATE_MASK OMAP3430_SHAREDL1CACHEFLATONSTATE_MASK
|
||||
#define OMAP_MEM1_ONSTATE_MASK OMAP3430_L1FLATMEMONSTATE_MASK
|
||||
#define OMAP_MEM2_ONSTATE_MASK OMAP3430_SHAREDL2CACHEFLATONSTATE_MASK
|
||||
#define OMAP_MEM3_ONSTATE_MASK OMAP3430_L2FLATMEMONSTATE_MASK
|
||||
#define OMAP_MEM4_ONSTATE_MASK OMAP4430_OCP_NRET_BANK_ONSTATE_MASK
|
||||
|
||||
/* OMAP3 and OMAP4 Memory Retstate Masks (common across all power domains) */
|
||||
#define OMAP_MEM0_RETSTATE_MASK OMAP3430_SHAREDL1CACHEFLATRETSTATE_MASK
|
||||
#define OMAP_MEM1_RETSTATE_MASK OMAP3430_L1FLATMEMRETSTATE_MASK
|
||||
#define OMAP_MEM2_RETSTATE_MASK OMAP3430_SHAREDL2CACHEFLATRETSTATE_MASK
|
||||
#define OMAP_MEM3_RETSTATE_MASK OMAP3430_L2FLATMEMRETSTATE_MASK
|
||||
#define OMAP_MEM4_RETSTATE_MASK OMAP4430_OCP_NRET_BANK_RETSTATE_MASK
|
||||
|
||||
/* OMAP3 and OMAP4 Memory Status bits */
|
||||
#define OMAP_MEM0_STATEST_MASK OMAP3430_SHAREDL1CACHEFLATSTATEST_MASK
|
||||
#define OMAP_MEM1_STATEST_MASK OMAP3430_L1FLATMEMSTATEST_MASK
|
||||
#define OMAP_MEM2_STATEST_MASK OMAP3430_SHAREDL2CACHEFLATSTATEST_MASK
|
||||
#define OMAP_MEM3_STATEST_MASK OMAP3430_L2FLATMEMSTATEST_MASK
|
||||
#define OMAP_MEM4_STATEST_MASK OMAP4430_OCP_NRET_BANK_STATEST_MASK
|
||||
|
||||
/* pwrdm_list contains all registered struct powerdomains */
|
||||
static LIST_HEAD(pwrdm_list);
|
||||
|
||||
static struct pwrdm_ops *arch_pwrdm;
|
||||
|
||||
/* Private functions */
|
||||
|
||||
static struct powerdomain *_pwrdm_lookup(const char *name)
|
||||
|
@ -110,12 +73,19 @@ static int _pwrdm_register(struct powerdomain *pwrdm)
|
|||
{
|
||||
int i;
|
||||
|
||||
if (!pwrdm)
|
||||
if (!pwrdm || !pwrdm->name)
|
||||
return -EINVAL;
|
||||
|
||||
if (!omap_chip_is(pwrdm->omap_chip))
|
||||
return -EINVAL;
|
||||
|
||||
if (cpu_is_omap44xx() &&
|
||||
pwrdm->prcm_partition == OMAP4430_INVALID_PRCM_PARTITION) {
|
||||
pr_err("powerdomain: %s: missing OMAP4 PRCM partition ID\n",
|
||||
pwrdm->name);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (_pwrdm_lookup(pwrdm->name))
|
||||
return -EEXIST;
|
||||
|
||||
|
@ -211,6 +181,7 @@ static int _pwrdm_post_transition_cb(struct powerdomain *pwrdm, void *unused)
|
|||
/**
|
||||
* pwrdm_init - set up the powerdomain layer
|
||||
* @pwrdm_list: array of struct powerdomain pointers to register
|
||||
* @custom_funcs: func pointers for arch specfic implementations
|
||||
*
|
||||
* Loop through the array of powerdomains @pwrdm_list, registering all
|
||||
* that are available on the current CPU. If pwrdm_list is supplied
|
||||
|
@ -218,21 +189,14 @@ static int _pwrdm_post_transition_cb(struct powerdomain *pwrdm, void *unused)
|
|||
* registered. No return value. XXX pwrdm_list is not really a
|
||||
* "list"; it is an array. Rename appropriately.
|
||||
*/
|
||||
void pwrdm_init(struct powerdomain **pwrdm_list)
|
||||
void pwrdm_init(struct powerdomain **pwrdm_list, struct pwrdm_ops *custom_funcs)
|
||||
{
|
||||
struct powerdomain **p = NULL;
|
||||
|
||||
if (cpu_is_omap24xx() || cpu_is_omap34xx()) {
|
||||
pwrstctrl_reg_offs = OMAP2_PM_PWSTCTRL;
|
||||
pwrstst_reg_offs = OMAP2_PM_PWSTST;
|
||||
} else if (cpu_is_omap44xx()) {
|
||||
pwrstctrl_reg_offs = OMAP4_PM_PWSTCTRL;
|
||||
pwrstst_reg_offs = OMAP4_PM_PWSTST;
|
||||
} else {
|
||||
printk(KERN_ERR "Power Domain struct not supported for " \
|
||||
"this CPU\n");
|
||||
return;
|
||||
}
|
||||
if (!custom_funcs)
|
||||
WARN(1, "powerdomain: No custom pwrdm functions registered\n");
|
||||
else
|
||||
arch_pwrdm = custom_funcs;
|
||||
|
||||
if (pwrdm_list) {
|
||||
for (p = pwrdm_list; *p; p++)
|
||||
|
@ -431,6 +395,8 @@ int pwrdm_get_mem_bank_count(struct powerdomain *pwrdm)
|
|||
*/
|
||||
int pwrdm_set_next_pwrst(struct powerdomain *pwrdm, u8 pwrst)
|
||||
{
|
||||
int ret = -EINVAL;
|
||||
|
||||
if (!pwrdm)
|
||||
return -EINVAL;
|
||||
|
||||
|
@ -440,11 +406,10 @@ int pwrdm_set_next_pwrst(struct powerdomain *pwrdm, u8 pwrst)
|
|||
pr_debug("powerdomain: setting next powerstate for %s to %0x\n",
|
||||
pwrdm->name, pwrst);
|
||||
|
||||
prm_rmw_mod_reg_bits(OMAP_POWERSTATE_MASK,
|
||||
(pwrst << OMAP_POWERSTATE_SHIFT),
|
||||
pwrdm->prcm_offs, pwrstctrl_reg_offs);
|
||||
if (arch_pwrdm && arch_pwrdm->pwrdm_set_next_pwrst)
|
||||
ret = arch_pwrdm->pwrdm_set_next_pwrst(pwrdm, pwrst);
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -457,11 +422,15 @@ int pwrdm_set_next_pwrst(struct powerdomain *pwrdm, u8 pwrst)
|
|||
*/
|
||||
int pwrdm_read_next_pwrst(struct powerdomain *pwrdm)
|
||||
{
|
||||
int ret = -EINVAL;
|
||||
|
||||
if (!pwrdm)
|
||||
return -EINVAL;
|
||||
|
||||
return prm_read_mod_bits_shift(pwrdm->prcm_offs,
|
||||
pwrstctrl_reg_offs, OMAP_POWERSTATE_MASK);
|
||||
if (arch_pwrdm && arch_pwrdm->pwrdm_read_next_pwrst)
|
||||
ret = arch_pwrdm->pwrdm_read_next_pwrst(pwrdm);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -474,11 +443,15 @@ int pwrdm_read_next_pwrst(struct powerdomain *pwrdm)
|
|||
*/
|
||||
int pwrdm_read_pwrst(struct powerdomain *pwrdm)
|
||||
{
|
||||
int ret = -EINVAL;
|
||||
|
||||
if (!pwrdm)
|
||||
return -EINVAL;
|
||||
|
||||
return prm_read_mod_bits_shift(pwrdm->prcm_offs,
|
||||
pwrstst_reg_offs, OMAP_POWERSTATEST_MASK);
|
||||
if (arch_pwrdm && arch_pwrdm->pwrdm_read_pwrst)
|
||||
ret = arch_pwrdm->pwrdm_read_pwrst(pwrdm);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -491,11 +464,15 @@ int pwrdm_read_pwrst(struct powerdomain *pwrdm)
|
|||
*/
|
||||
int pwrdm_read_prev_pwrst(struct powerdomain *pwrdm)
|
||||
{
|
||||
int ret = -EINVAL;
|
||||
|
||||
if (!pwrdm)
|
||||
return -EINVAL;
|
||||
|
||||
return prm_read_mod_bits_shift(pwrdm->prcm_offs, OMAP3430_PM_PREPWSTST,
|
||||
OMAP3430_LASTPOWERSTATEENTERED_MASK);
|
||||
if (arch_pwrdm && arch_pwrdm->pwrdm_read_prev_pwrst)
|
||||
ret = arch_pwrdm->pwrdm_read_prev_pwrst(pwrdm);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -511,7 +488,7 @@ int pwrdm_read_prev_pwrst(struct powerdomain *pwrdm)
|
|||
*/
|
||||
int pwrdm_set_logic_retst(struct powerdomain *pwrdm, u8 pwrst)
|
||||
{
|
||||
u32 v;
|
||||
int ret = -EINVAL;
|
||||
|
||||
if (!pwrdm)
|
||||
return -EINVAL;
|
||||
|
@ -522,17 +499,10 @@ int pwrdm_set_logic_retst(struct powerdomain *pwrdm, u8 pwrst)
|
|||
pr_debug("powerdomain: setting next logic powerstate for %s to %0x\n",
|
||||
pwrdm->name, pwrst);
|
||||
|
||||
/*
|
||||
* The register bit names below may not correspond to the
|
||||
* actual names of the bits in each powerdomain's register,
|
||||
* but the type of value returned is the same for each
|
||||
* powerdomain.
|
||||
*/
|
||||
v = pwrst << __ffs(OMAP3430_LOGICL1CACHERETSTATE_MASK);
|
||||
prm_rmw_mod_reg_bits(OMAP3430_LOGICL1CACHERETSTATE_MASK, v,
|
||||
pwrdm->prcm_offs, pwrstctrl_reg_offs);
|
||||
if (arch_pwrdm && arch_pwrdm->pwrdm_set_logic_retst)
|
||||
ret = arch_pwrdm->pwrdm_set_logic_retst(pwrdm, pwrst);
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -552,7 +522,7 @@ int pwrdm_set_logic_retst(struct powerdomain *pwrdm, u8 pwrst)
|
|||
*/
|
||||
int pwrdm_set_mem_onst(struct powerdomain *pwrdm, u8 bank, u8 pwrst)
|
||||
{
|
||||
u32 m;
|
||||
int ret = -EINVAL;
|
||||
|
||||
if (!pwrdm)
|
||||
return -EINVAL;
|
||||
|
@ -566,37 +536,10 @@ int pwrdm_set_mem_onst(struct powerdomain *pwrdm, u8 bank, u8 pwrst)
|
|||
pr_debug("powerdomain: setting next memory powerstate for domain %s "
|
||||
"bank %0x while pwrdm-ON to %0x\n", pwrdm->name, bank, pwrst);
|
||||
|
||||
/*
|
||||
* The register bit names below may not correspond to the
|
||||
* actual names of the bits in each powerdomain's register,
|
||||
* but the type of value returned is the same for each
|
||||
* powerdomain.
|
||||
*/
|
||||
switch (bank) {
|
||||
case 0:
|
||||
m = OMAP_MEM0_ONSTATE_MASK;
|
||||
break;
|
||||
case 1:
|
||||
m = OMAP_MEM1_ONSTATE_MASK;
|
||||
break;
|
||||
case 2:
|
||||
m = OMAP_MEM2_ONSTATE_MASK;
|
||||
break;
|
||||
case 3:
|
||||
m = OMAP_MEM3_ONSTATE_MASK;
|
||||
break;
|
||||
case 4:
|
||||
m = OMAP_MEM4_ONSTATE_MASK;
|
||||
break;
|
||||
default:
|
||||
WARN_ON(1); /* should never happen */
|
||||
return -EEXIST;
|
||||
}
|
||||
if (arch_pwrdm && arch_pwrdm->pwrdm_set_mem_onst)
|
||||
ret = arch_pwrdm->pwrdm_set_mem_onst(pwrdm, bank, pwrst);
|
||||
|
||||
prm_rmw_mod_reg_bits(m, (pwrst << __ffs(m)),
|
||||
pwrdm->prcm_offs, pwrstctrl_reg_offs);
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -617,7 +560,7 @@ int pwrdm_set_mem_onst(struct powerdomain *pwrdm, u8 bank, u8 pwrst)
|
|||
*/
|
||||
int pwrdm_set_mem_retst(struct powerdomain *pwrdm, u8 bank, u8 pwrst)
|
||||
{
|
||||
u32 m;
|
||||
int ret = -EINVAL;
|
||||
|
||||
if (!pwrdm)
|
||||
return -EINVAL;
|
||||
|
@ -631,37 +574,10 @@ int pwrdm_set_mem_retst(struct powerdomain *pwrdm, u8 bank, u8 pwrst)
|
|||
pr_debug("powerdomain: setting next memory powerstate for domain %s "
|
||||
"bank %0x while pwrdm-RET to %0x\n", pwrdm->name, bank, pwrst);
|
||||
|
||||
/*
|
||||
* The register bit names below may not correspond to the
|
||||
* actual names of the bits in each powerdomain's register,
|
||||
* but the type of value returned is the same for each
|
||||
* powerdomain.
|
||||
*/
|
||||
switch (bank) {
|
||||
case 0:
|
||||
m = OMAP_MEM0_RETSTATE_MASK;
|
||||
break;
|
||||
case 1:
|
||||
m = OMAP_MEM1_RETSTATE_MASK;
|
||||
break;
|
||||
case 2:
|
||||
m = OMAP_MEM2_RETSTATE_MASK;
|
||||
break;
|
||||
case 3:
|
||||
m = OMAP_MEM3_RETSTATE_MASK;
|
||||
break;
|
||||
case 4:
|
||||
m = OMAP_MEM4_RETSTATE_MASK;
|
||||
break;
|
||||
default:
|
||||
WARN_ON(1); /* should never happen */
|
||||
return -EEXIST;
|
||||
}
|
||||
if (arch_pwrdm && arch_pwrdm->pwrdm_set_mem_retst)
|
||||
ret = arch_pwrdm->pwrdm_set_mem_retst(pwrdm, bank, pwrst);
|
||||
|
||||
prm_rmw_mod_reg_bits(m, (pwrst << __ffs(m)), pwrdm->prcm_offs,
|
||||
pwrstctrl_reg_offs);
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -675,11 +591,15 @@ int pwrdm_set_mem_retst(struct powerdomain *pwrdm, u8 bank, u8 pwrst)
|
|||
*/
|
||||
int pwrdm_read_logic_pwrst(struct powerdomain *pwrdm)
|
||||
{
|
||||
int ret = -EINVAL;
|
||||
|
||||
if (!pwrdm)
|
||||
return -EINVAL;
|
||||
|
||||
return prm_read_mod_bits_shift(pwrdm->prcm_offs, pwrstst_reg_offs,
|
||||
OMAP3430_LOGICSTATEST_MASK);
|
||||
if (arch_pwrdm && arch_pwrdm->pwrdm_read_logic_pwrst)
|
||||
ret = arch_pwrdm->pwrdm_read_logic_pwrst(pwrdm);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -692,17 +612,15 @@ int pwrdm_read_logic_pwrst(struct powerdomain *pwrdm)
|
|||
*/
|
||||
int pwrdm_read_prev_logic_pwrst(struct powerdomain *pwrdm)
|
||||
{
|
||||
int ret = -EINVAL;
|
||||
|
||||
if (!pwrdm)
|
||||
return -EINVAL;
|
||||
|
||||
/*
|
||||
* The register bit names below may not correspond to the
|
||||
* actual names of the bits in each powerdomain's register,
|
||||
* but the type of value returned is the same for each
|
||||
* powerdomain.
|
||||
*/
|
||||
return prm_read_mod_bits_shift(pwrdm->prcm_offs, OMAP3430_PM_PREPWSTST,
|
||||
OMAP3430_LASTLOGICSTATEENTERED_MASK);
|
||||
if (arch_pwrdm && arch_pwrdm->pwrdm_read_prev_logic_pwrst)
|
||||
ret = arch_pwrdm->pwrdm_read_prev_logic_pwrst(pwrdm);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -715,17 +633,15 @@ int pwrdm_read_prev_logic_pwrst(struct powerdomain *pwrdm)
|
|||
*/
|
||||
int pwrdm_read_logic_retst(struct powerdomain *pwrdm)
|
||||
{
|
||||
int ret = -EINVAL;
|
||||
|
||||
if (!pwrdm)
|
||||
return -EINVAL;
|
||||
|
||||
/*
|
||||
* The register bit names below may not correspond to the
|
||||
* actual names of the bits in each powerdomain's register,
|
||||
* but the type of value returned is the same for each
|
||||
* powerdomain.
|
||||
*/
|
||||
return prm_read_mod_bits_shift(pwrdm->prcm_offs, pwrstctrl_reg_offs,
|
||||
OMAP3430_LOGICSTATEST_MASK);
|
||||
if (arch_pwrdm && arch_pwrdm->pwrdm_read_logic_retst)
|
||||
ret = arch_pwrdm->pwrdm_read_logic_retst(pwrdm);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -740,46 +656,21 @@ int pwrdm_read_logic_retst(struct powerdomain *pwrdm)
|
|||
*/
|
||||
int pwrdm_read_mem_pwrst(struct powerdomain *pwrdm, u8 bank)
|
||||
{
|
||||
u32 m;
|
||||
int ret = -EINVAL;
|
||||
|
||||
if (!pwrdm)
|
||||
return -EINVAL;
|
||||
return ret;
|
||||
|
||||
if (pwrdm->banks < (bank + 1))
|
||||
return -EEXIST;
|
||||
return ret;
|
||||
|
||||
if (pwrdm->flags & PWRDM_HAS_MPU_QUIRK)
|
||||
bank = 1;
|
||||
|
||||
/*
|
||||
* The register bit names below may not correspond to the
|
||||
* actual names of the bits in each powerdomain's register,
|
||||
* but the type of value returned is the same for each
|
||||
* powerdomain.
|
||||
*/
|
||||
switch (bank) {
|
||||
case 0:
|
||||
m = OMAP_MEM0_STATEST_MASK;
|
||||
break;
|
||||
case 1:
|
||||
m = OMAP_MEM1_STATEST_MASK;
|
||||
break;
|
||||
case 2:
|
||||
m = OMAP_MEM2_STATEST_MASK;
|
||||
break;
|
||||
case 3:
|
||||
m = OMAP_MEM3_STATEST_MASK;
|
||||
break;
|
||||
case 4:
|
||||
m = OMAP_MEM4_STATEST_MASK;
|
||||
break;
|
||||
default:
|
||||
WARN_ON(1); /* should never happen */
|
||||
return -EEXIST;
|
||||
}
|
||||
if (arch_pwrdm && arch_pwrdm->pwrdm_read_mem_pwrst)
|
||||
ret = arch_pwrdm->pwrdm_read_mem_pwrst(pwrdm, bank);
|
||||
|
||||
return prm_read_mod_bits_shift(pwrdm->prcm_offs,
|
||||
pwrstst_reg_offs, m);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -795,43 +686,21 @@ int pwrdm_read_mem_pwrst(struct powerdomain *pwrdm, u8 bank)
|
|||
*/
|
||||
int pwrdm_read_prev_mem_pwrst(struct powerdomain *pwrdm, u8 bank)
|
||||
{
|
||||
u32 m;
|
||||
int ret = -EINVAL;
|
||||
|
||||
if (!pwrdm)
|
||||
return -EINVAL;
|
||||
return ret;
|
||||
|
||||
if (pwrdm->banks < (bank + 1))
|
||||
return -EEXIST;
|
||||
return ret;
|
||||
|
||||
if (pwrdm->flags & PWRDM_HAS_MPU_QUIRK)
|
||||
bank = 1;
|
||||
|
||||
/*
|
||||
* The register bit names below may not correspond to the
|
||||
* actual names of the bits in each powerdomain's register,
|
||||
* but the type of value returned is the same for each
|
||||
* powerdomain.
|
||||
*/
|
||||
switch (bank) {
|
||||
case 0:
|
||||
m = OMAP3430_LASTMEM1STATEENTERED_MASK;
|
||||
break;
|
||||
case 1:
|
||||
m = OMAP3430_LASTMEM2STATEENTERED_MASK;
|
||||
break;
|
||||
case 2:
|
||||
m = OMAP3430_LASTSHAREDL2CACHEFLATSTATEENTERED_MASK;
|
||||
break;
|
||||
case 3:
|
||||
m = OMAP3430_LASTL2FLATMEMSTATEENTERED_MASK;
|
||||
break;
|
||||
default:
|
||||
WARN_ON(1); /* should never happen */
|
||||
return -EEXIST;
|
||||
}
|
||||
if (arch_pwrdm && arch_pwrdm->pwrdm_read_prev_mem_pwrst)
|
||||
ret = arch_pwrdm->pwrdm_read_prev_mem_pwrst(pwrdm, bank);
|
||||
|
||||
return prm_read_mod_bits_shift(pwrdm->prcm_offs,
|
||||
OMAP3430_PM_PREPWSTST, m);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -846,43 +715,18 @@ int pwrdm_read_prev_mem_pwrst(struct powerdomain *pwrdm, u8 bank)
|
|||
*/
|
||||
int pwrdm_read_mem_retst(struct powerdomain *pwrdm, u8 bank)
|
||||
{
|
||||
u32 m;
|
||||
int ret = -EINVAL;
|
||||
|
||||
if (!pwrdm)
|
||||
return -EINVAL;
|
||||
return ret;
|
||||
|
||||
if (pwrdm->banks < (bank + 1))
|
||||
return -EEXIST;
|
||||
return ret;
|
||||
|
||||
/*
|
||||
* The register bit names below may not correspond to the
|
||||
* actual names of the bits in each powerdomain's register,
|
||||
* but the type of value returned is the same for each
|
||||
* powerdomain.
|
||||
*/
|
||||
switch (bank) {
|
||||
case 0:
|
||||
m = OMAP_MEM0_RETSTATE_MASK;
|
||||
break;
|
||||
case 1:
|
||||
m = OMAP_MEM1_RETSTATE_MASK;
|
||||
break;
|
||||
case 2:
|
||||
m = OMAP_MEM2_RETSTATE_MASK;
|
||||
break;
|
||||
case 3:
|
||||
m = OMAP_MEM3_RETSTATE_MASK;
|
||||
break;
|
||||
case 4:
|
||||
m = OMAP_MEM4_RETSTATE_MASK;
|
||||
break;
|
||||
default:
|
||||
WARN_ON(1); /* should never happen */
|
||||
return -EEXIST;
|
||||
}
|
||||
if (arch_pwrdm && arch_pwrdm->pwrdm_read_mem_retst)
|
||||
ret = arch_pwrdm->pwrdm_read_mem_retst(pwrdm, bank);
|
||||
|
||||
return prm_read_mod_bits_shift(pwrdm->prcm_offs,
|
||||
pwrstctrl_reg_offs, m);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -896,8 +740,10 @@ int pwrdm_read_mem_retst(struct powerdomain *pwrdm, u8 bank)
|
|||
*/
|
||||
int pwrdm_clear_all_prev_pwrst(struct powerdomain *pwrdm)
|
||||
{
|
||||
int ret = -EINVAL;
|
||||
|
||||
if (!pwrdm)
|
||||
return -EINVAL;
|
||||
return ret;
|
||||
|
||||
/*
|
||||
* XXX should get the powerdomain's current state here;
|
||||
|
@ -907,9 +753,10 @@ int pwrdm_clear_all_prev_pwrst(struct powerdomain *pwrdm)
|
|||
pr_debug("powerdomain: clearing previous power state reg for %s\n",
|
||||
pwrdm->name);
|
||||
|
||||
prm_write_mod_reg(0, pwrdm->prcm_offs, OMAP3430_PM_PREPWSTST);
|
||||
if (arch_pwrdm && arch_pwrdm->pwrdm_clear_all_prev_pwrst)
|
||||
ret = arch_pwrdm->pwrdm_clear_all_prev_pwrst(pwrdm);
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -925,19 +772,21 @@ int pwrdm_clear_all_prev_pwrst(struct powerdomain *pwrdm)
|
|||
*/
|
||||
int pwrdm_enable_hdwr_sar(struct powerdomain *pwrdm)
|
||||
{
|
||||
int ret = -EINVAL;
|
||||
|
||||
if (!pwrdm)
|
||||
return -EINVAL;
|
||||
return ret;
|
||||
|
||||
if (!(pwrdm->flags & PWRDM_HAS_HDWR_SAR))
|
||||
return -EINVAL;
|
||||
return ret;
|
||||
|
||||
pr_debug("powerdomain: %s: setting SAVEANDRESTORE bit\n",
|
||||
pwrdm->name);
|
||||
|
||||
prm_rmw_mod_reg_bits(0, 1 << OMAP3430ES2_SAVEANDRESTORE_SHIFT,
|
||||
pwrdm->prcm_offs, pwrstctrl_reg_offs);
|
||||
if (arch_pwrdm && arch_pwrdm->pwrdm_enable_hdwr_sar)
|
||||
ret = arch_pwrdm->pwrdm_enable_hdwr_sar(pwrdm);
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -953,19 +802,21 @@ int pwrdm_enable_hdwr_sar(struct powerdomain *pwrdm)
|
|||
*/
|
||||
int pwrdm_disable_hdwr_sar(struct powerdomain *pwrdm)
|
||||
{
|
||||
int ret = -EINVAL;
|
||||
|
||||
if (!pwrdm)
|
||||
return -EINVAL;
|
||||
return ret;
|
||||
|
||||
if (!(pwrdm->flags & PWRDM_HAS_HDWR_SAR))
|
||||
return -EINVAL;
|
||||
return ret;
|
||||
|
||||
pr_debug("powerdomain: %s: clearing SAVEANDRESTORE bit\n",
|
||||
pwrdm->name);
|
||||
|
||||
prm_rmw_mod_reg_bits(1 << OMAP3430ES2_SAVEANDRESTORE_SHIFT, 0,
|
||||
pwrdm->prcm_offs, pwrstctrl_reg_offs);
|
||||
if (arch_pwrdm && arch_pwrdm->pwrdm_disable_hdwr_sar)
|
||||
ret = arch_pwrdm->pwrdm_disable_hdwr_sar(pwrdm);
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -992,6 +843,8 @@ bool pwrdm_has_hdwr_sar(struct powerdomain *pwrdm)
|
|||
*/
|
||||
int pwrdm_set_lowpwrstchange(struct powerdomain *pwrdm)
|
||||
{
|
||||
int ret = -EINVAL;
|
||||
|
||||
if (!pwrdm)
|
||||
return -EINVAL;
|
||||
|
||||
|
@ -1001,11 +854,10 @@ int pwrdm_set_lowpwrstchange(struct powerdomain *pwrdm)
|
|||
pr_debug("powerdomain: %s: setting LOWPOWERSTATECHANGE bit\n",
|
||||
pwrdm->name);
|
||||
|
||||
prm_rmw_mod_reg_bits(OMAP4430_LOWPOWERSTATECHANGE_MASK,
|
||||
(1 << OMAP4430_LOWPOWERSTATECHANGE_SHIFT),
|
||||
pwrdm->prcm_offs, pwrstctrl_reg_offs);
|
||||
if (arch_pwrdm && arch_pwrdm->pwrdm_set_lowpwrstchange)
|
||||
ret = arch_pwrdm->pwrdm_set_lowpwrstchange(pwrdm);
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1020,32 +872,15 @@ int pwrdm_set_lowpwrstchange(struct powerdomain *pwrdm)
|
|||
*/
|
||||
int pwrdm_wait_transition(struct powerdomain *pwrdm)
|
||||
{
|
||||
u32 c = 0;
|
||||
int ret = -EINVAL;
|
||||
|
||||
if (!pwrdm)
|
||||
return -EINVAL;
|
||||
|
||||
/*
|
||||
* REVISIT: pwrdm_wait_transition() may be better implemented
|
||||
* via a callback and a periodic timer check -- how long do we expect
|
||||
* powerdomain transitions to take?
|
||||
*/
|
||||
if (arch_pwrdm && arch_pwrdm->pwrdm_wait_transition)
|
||||
ret = arch_pwrdm->pwrdm_wait_transition(pwrdm);
|
||||
|
||||
/* XXX Is this udelay() value meaningful? */
|
||||
while ((prm_read_mod_reg(pwrdm->prcm_offs, pwrstst_reg_offs) &
|
||||
OMAP_INTRANSITION_MASK) &&
|
||||
(c++ < PWRDM_TRANSITION_BAILOUT))
|
||||
udelay(1);
|
||||
|
||||
if (c > PWRDM_TRANSITION_BAILOUT) {
|
||||
printk(KERN_ERR "powerdomain: waited too long for "
|
||||
"powerdomain %s to complete transition\n", pwrdm->name);
|
||||
return -EAGAIN;
|
||||
}
|
||||
|
||||
pr_debug("powerdomain: completed transition in %d loops\n", c);
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
int pwrdm_state_switch(struct powerdomain *pwrdm)
|
||||
|
@ -1075,3 +910,31 @@ int pwrdm_post_transition(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* pwrdm_get_context_loss_count - get powerdomain's context loss count
|
||||
* @pwrdm: struct powerdomain * to wait for
|
||||
*
|
||||
* Context loss count is the sum of powerdomain off-mode counter, the
|
||||
* logic off counter and the per-bank memory off counter. Returns 0
|
||||
* (and WARNs) upon error, otherwise, returns the context loss count.
|
||||
*/
|
||||
u32 pwrdm_get_context_loss_count(struct powerdomain *pwrdm)
|
||||
{
|
||||
int i, count;
|
||||
|
||||
if (!pwrdm) {
|
||||
WARN(1, "powerdomain: %s: pwrdm is null\n", __func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
count = pwrdm->state_counter[PWRDM_POWER_OFF];
|
||||
count += pwrdm->ret_logic_off_counter;
|
||||
|
||||
for (i = 0; i < pwrdm->banks; i++)
|
||||
count += pwrdm->ret_mem_off_counter[i];
|
||||
|
||||
pr_debug("powerdomain: %s: context loss count = %u\n",
|
||||
pwrdm->name, count);
|
||||
|
||||
return count;
|
||||
}
|
||||
|
|
|
@ -1,27 +1,29 @@
|
|||
/*
|
||||
* OMAP2/3 powerdomain control
|
||||
* OMAP2/3/4 powerdomain control
|
||||
*
|
||||
* Copyright (C) 2007-2008 Texas Instruments, Inc.
|
||||
* Copyright (C) 2007-2009 Nokia Corporation
|
||||
* Copyright (C) 2007-2008, 2010 Texas Instruments, Inc.
|
||||
* Copyright (C) 2007-2010 Nokia Corporation
|
||||
*
|
||||
* Written by Paul Walmsley
|
||||
* Paul Walmsley
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* XXX This should be moved to the mach-omap2/ directory at the earliest
|
||||
* opportunity.
|
||||
*/
|
||||
|
||||
#ifndef ASM_ARM_ARCH_OMAP_POWERDOMAIN
|
||||
#define ASM_ARM_ARCH_OMAP_POWERDOMAIN
|
||||
#ifndef __ARCH_ARM_MACH_OMAP2_POWERDOMAIN_H
|
||||
#define __ARCH_ARM_MACH_OMAP2_POWERDOMAIN_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/list.h>
|
||||
|
||||
#include <asm/atomic.h>
|
||||
#include <linux/atomic.h>
|
||||
|
||||
#include <plat/cpu.h>
|
||||
|
||||
|
||||
/* Powerdomain basic power states */
|
||||
#define PWRDM_POWER_OFF 0x0
|
||||
#define PWRDM_POWER_RET 0x1
|
||||
|
@ -81,6 +83,7 @@ struct powerdomain;
|
|||
* @name: Powerdomain name
|
||||
* @omap_chip: represents the OMAP chip types containing this pwrdm
|
||||
* @prcm_offs: the address offset from CM_BASE/PRM_BASE
|
||||
* @prcm_partition: (OMAP4 only) the PRCM partition ID containing @prcm_offs
|
||||
* @pwrsts: Possible powerdomain power states
|
||||
* @pwrsts_logic_ret: Possible logic power states when pwrdm in RETENTION
|
||||
* @flags: Powerdomain flags
|
||||
|
@ -93,6 +96,8 @@ struct powerdomain;
|
|||
* @state_counter:
|
||||
* @timer:
|
||||
* @state_timer:
|
||||
*
|
||||
* @prcm_partition possible values are defined in mach-omap2/prcm44xx.h.
|
||||
*/
|
||||
struct powerdomain {
|
||||
const char *name;
|
||||
|
@ -104,6 +109,7 @@ struct powerdomain {
|
|||
const u8 banks;
|
||||
const u8 pwrsts_mem_ret[PWRDM_MAX_MEM_BANKS];
|
||||
const u8 pwrsts_mem_on[PWRDM_MAX_MEM_BANKS];
|
||||
const u8 prcm_partition;
|
||||
struct clockdomain *pwrdm_clkdms[PWRDM_MAX_CLKDMS];
|
||||
struct list_head node;
|
||||
int state;
|
||||
|
@ -117,8 +123,50 @@ struct powerdomain {
|
|||
#endif
|
||||
};
|
||||
|
||||
/**
|
||||
* struct pwrdm_ops - Arch specfic function implementations
|
||||
* @pwrdm_set_next_pwrst: Set the target power state for a pd
|
||||
* @pwrdm_read_next_pwrst: Read the target power state set for a pd
|
||||
* @pwrdm_read_pwrst: Read the current power state of a pd
|
||||
* @pwrdm_read_prev_pwrst: Read the prev power state entered by the pd
|
||||
* @pwrdm_set_logic_retst: Set the logic state in RET for a pd
|
||||
* @pwrdm_set_mem_onst: Set the Memory state in ON for a pd
|
||||
* @pwrdm_set_mem_retst: Set the Memory state in RET for a pd
|
||||
* @pwrdm_read_logic_pwrst: Read the current logic state of a pd
|
||||
* @pwrdm_read_prev_logic_pwrst: Read the previous logic state entered by a pd
|
||||
* @pwrdm_read_logic_retst: Read the logic state in RET for a pd
|
||||
* @pwrdm_read_mem_pwrst: Read the current memory state of a pd
|
||||
* @pwrdm_read_prev_mem_pwrst: Read the previous memory state entered by a pd
|
||||
* @pwrdm_read_mem_retst: Read the memory state in RET for a pd
|
||||
* @pwrdm_clear_all_prev_pwrst: Clear all previous power states logged for a pd
|
||||
* @pwrdm_enable_hdwr_sar: Enable Hardware Save-Restore feature for the pd
|
||||
* @pwrdm_disable_hdwr_sar: Disable Hardware Save-Restore feature for a pd
|
||||
* @pwrdm_set_lowpwrstchange: Enable pd transitions from a shallow to deep sleep
|
||||
* @pwrdm_wait_transition: Wait for a pd state transition to complete
|
||||
*/
|
||||
struct pwrdm_ops {
|
||||
int (*pwrdm_set_next_pwrst)(struct powerdomain *pwrdm, u8 pwrst);
|
||||
int (*pwrdm_read_next_pwrst)(struct powerdomain *pwrdm);
|
||||
int (*pwrdm_read_pwrst)(struct powerdomain *pwrdm);
|
||||
int (*pwrdm_read_prev_pwrst)(struct powerdomain *pwrdm);
|
||||
int (*pwrdm_set_logic_retst)(struct powerdomain *pwrdm, u8 pwrst);
|
||||
int (*pwrdm_set_mem_onst)(struct powerdomain *pwrdm, u8 bank, u8 pwrst);
|
||||
int (*pwrdm_set_mem_retst)(struct powerdomain *pwrdm, u8 bank, u8 pwrst);
|
||||
int (*pwrdm_read_logic_pwrst)(struct powerdomain *pwrdm);
|
||||
int (*pwrdm_read_prev_logic_pwrst)(struct powerdomain *pwrdm);
|
||||
int (*pwrdm_read_logic_retst)(struct powerdomain *pwrdm);
|
||||
int (*pwrdm_read_mem_pwrst)(struct powerdomain *pwrdm, u8 bank);
|
||||
int (*pwrdm_read_prev_mem_pwrst)(struct powerdomain *pwrdm, u8 bank);
|
||||
int (*pwrdm_read_mem_retst)(struct powerdomain *pwrdm, u8 bank);
|
||||
int (*pwrdm_clear_all_prev_pwrst)(struct powerdomain *pwrdm);
|
||||
int (*pwrdm_enable_hdwr_sar)(struct powerdomain *pwrdm);
|
||||
int (*pwrdm_disable_hdwr_sar)(struct powerdomain *pwrdm);
|
||||
int (*pwrdm_set_lowpwrstchange)(struct powerdomain *pwrdm);
|
||||
int (*pwrdm_wait_transition)(struct powerdomain *pwrdm);
|
||||
};
|
||||
|
||||
void pwrdm_init(struct powerdomain **pwrdm_list);
|
||||
void pwrdm_fw_init(void);
|
||||
void pwrdm_init(struct powerdomain **pwrdm_list, struct pwrdm_ops *custom_funcs);
|
||||
|
||||
struct powerdomain *pwrdm_lookup(const char *name);
|
||||
|
||||
|
@ -163,5 +211,23 @@ int pwrdm_clkdm_state_switch(struct clockdomain *clkdm);
|
|||
int pwrdm_pre_transition(void);
|
||||
int pwrdm_post_transition(void);
|
||||
int pwrdm_set_lowpwrstchange(struct powerdomain *pwrdm);
|
||||
u32 pwrdm_get_context_loss_count(struct powerdomain *pwrdm);
|
||||
|
||||
extern void omap2xxx_powerdomains_init(void);
|
||||
extern void omap3xxx_powerdomains_init(void);
|
||||
extern void omap44xx_powerdomains_init(void);
|
||||
|
||||
extern struct pwrdm_ops omap2_pwrdm_operations;
|
||||
extern struct pwrdm_ops omap3_pwrdm_operations;
|
||||
extern struct pwrdm_ops omap4_pwrdm_operations;
|
||||
|
||||
/* Common Internal functions used across OMAP rev's */
|
||||
extern u32 omap2_pwrdm_get_mem_bank_onstate_mask(u8 bank);
|
||||
extern u32 omap2_pwrdm_get_mem_bank_retst_mask(u8 bank);
|
||||
extern u32 omap2_pwrdm_get_mem_bank_stst_mask(u8 bank);
|
||||
|
||||
extern struct powerdomain wkup_omap2_pwrdm;
|
||||
extern struct powerdomain gfx_omap2_pwrdm;
|
||||
|
||||
|
||||
#endif
|
242
arch/arm/mach-omap2/powerdomain2xxx_3xxx.c
Normal file
242
arch/arm/mach-omap2/powerdomain2xxx_3xxx.c
Normal file
|
@ -0,0 +1,242 @@
|
|||
/*
|
||||
* OMAP2 and OMAP3 powerdomain control
|
||||
*
|
||||
* Copyright (C) 2009-2010 Texas Instruments, Inc.
|
||||
* Copyright (C) 2007-2009 Nokia Corporation
|
||||
*
|
||||
* Derived from mach-omap2/powerdomain.c written by Paul Walmsley
|
||||
* Rajendra Nayak <rnayak@ti.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <linux/io.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/delay.h>
|
||||
|
||||
#include <plat/prcm.h>
|
||||
|
||||
#include "powerdomain.h"
|
||||
#include "prm-regbits-34xx.h"
|
||||
#include "prm.h"
|
||||
#include "prm-regbits-24xx.h"
|
||||
#include "prm-regbits-34xx.h"
|
||||
|
||||
|
||||
/* Common functions across OMAP2 and OMAP3 */
|
||||
static int omap2_pwrdm_set_next_pwrst(struct powerdomain *pwrdm, u8 pwrst)
|
||||
{
|
||||
omap2_prm_rmw_mod_reg_bits(OMAP_POWERSTATE_MASK,
|
||||
(pwrst << OMAP_POWERSTATE_SHIFT),
|
||||
pwrdm->prcm_offs, OMAP2_PM_PWSTCTRL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int omap2_pwrdm_read_next_pwrst(struct powerdomain *pwrdm)
|
||||
{
|
||||
return omap2_prm_read_mod_bits_shift(pwrdm->prcm_offs,
|
||||
OMAP2_PM_PWSTCTRL,
|
||||
OMAP_POWERSTATE_MASK);
|
||||
}
|
||||
|
||||
static int omap2_pwrdm_read_pwrst(struct powerdomain *pwrdm)
|
||||
{
|
||||
return omap2_prm_read_mod_bits_shift(pwrdm->prcm_offs,
|
||||
OMAP2_PM_PWSTST,
|
||||
OMAP_POWERSTATEST_MASK);
|
||||
}
|
||||
|
||||
static int omap2_pwrdm_set_mem_onst(struct powerdomain *pwrdm, u8 bank,
|
||||
u8 pwrst)
|
||||
{
|
||||
u32 m;
|
||||
|
||||
m = omap2_pwrdm_get_mem_bank_onstate_mask(bank);
|
||||
|
||||
omap2_prm_rmw_mod_reg_bits(m, (pwrst << __ffs(m)), pwrdm->prcm_offs,
|
||||
OMAP2_PM_PWSTCTRL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int omap2_pwrdm_set_mem_retst(struct powerdomain *pwrdm, u8 bank,
|
||||
u8 pwrst)
|
||||
{
|
||||
u32 m;
|
||||
|
||||
m = omap2_pwrdm_get_mem_bank_retst_mask(bank);
|
||||
|
||||
omap2_prm_rmw_mod_reg_bits(m, (pwrst << __ffs(m)), pwrdm->prcm_offs,
|
||||
OMAP2_PM_PWSTCTRL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int omap2_pwrdm_read_mem_pwrst(struct powerdomain *pwrdm, u8 bank)
|
||||
{
|
||||
u32 m;
|
||||
|
||||
m = omap2_pwrdm_get_mem_bank_stst_mask(bank);
|
||||
|
||||
return omap2_prm_read_mod_bits_shift(pwrdm->prcm_offs, OMAP2_PM_PWSTST,
|
||||
m);
|
||||
}
|
||||
|
||||
static int omap2_pwrdm_read_mem_retst(struct powerdomain *pwrdm, u8 bank)
|
||||
{
|
||||
u32 m;
|
||||
|
||||
m = omap2_pwrdm_get_mem_bank_retst_mask(bank);
|
||||
|
||||
return omap2_prm_read_mod_bits_shift(pwrdm->prcm_offs,
|
||||
OMAP2_PM_PWSTCTRL, m);
|
||||
}
|
||||
|
||||
static int omap2_pwrdm_set_logic_retst(struct powerdomain *pwrdm, u8 pwrst)
|
||||
{
|
||||
u32 v;
|
||||
|
||||
v = pwrst << __ffs(OMAP3430_LOGICL1CACHERETSTATE_MASK);
|
||||
omap2_prm_rmw_mod_reg_bits(OMAP3430_LOGICL1CACHERETSTATE_MASK, v,
|
||||
pwrdm->prcm_offs, OMAP2_PM_PWSTCTRL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int omap2_pwrdm_wait_transition(struct powerdomain *pwrdm)
|
||||
{
|
||||
u32 c = 0;
|
||||
|
||||
/*
|
||||
* REVISIT: pwrdm_wait_transition() may be better implemented
|
||||
* via a callback and a periodic timer check -- how long do we expect
|
||||
* powerdomain transitions to take?
|
||||
*/
|
||||
|
||||
/* XXX Is this udelay() value meaningful? */
|
||||
while ((omap2_prm_read_mod_reg(pwrdm->prcm_offs, OMAP2_PM_PWSTST) &
|
||||
OMAP_INTRANSITION_MASK) &&
|
||||
(c++ < PWRDM_TRANSITION_BAILOUT))
|
||||
udelay(1);
|
||||
|
||||
if (c > PWRDM_TRANSITION_BAILOUT) {
|
||||
printk(KERN_ERR "powerdomain: waited too long for "
|
||||
"powerdomain %s to complete transition\n", pwrdm->name);
|
||||
return -EAGAIN;
|
||||
}
|
||||
|
||||
pr_debug("powerdomain: completed transition in %d loops\n", c);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Applicable only for OMAP3. Not supported on OMAP2 */
|
||||
static int omap3_pwrdm_read_prev_pwrst(struct powerdomain *pwrdm)
|
||||
{
|
||||
return omap2_prm_read_mod_bits_shift(pwrdm->prcm_offs,
|
||||
OMAP3430_PM_PREPWSTST,
|
||||
OMAP3430_LASTPOWERSTATEENTERED_MASK);
|
||||
}
|
||||
|
||||
static int omap3_pwrdm_read_logic_pwrst(struct powerdomain *pwrdm)
|
||||
{
|
||||
return omap2_prm_read_mod_bits_shift(pwrdm->prcm_offs,
|
||||
OMAP2_PM_PWSTST,
|
||||
OMAP3430_LOGICSTATEST_MASK);
|
||||
}
|
||||
|
||||
static int omap3_pwrdm_read_logic_retst(struct powerdomain *pwrdm)
|
||||
{
|
||||
return omap2_prm_read_mod_bits_shift(pwrdm->prcm_offs,
|
||||
OMAP2_PM_PWSTCTRL,
|
||||
OMAP3430_LOGICSTATEST_MASK);
|
||||
}
|
||||
|
||||
static int omap3_pwrdm_read_prev_logic_pwrst(struct powerdomain *pwrdm)
|
||||
{
|
||||
return omap2_prm_read_mod_bits_shift(pwrdm->prcm_offs,
|
||||
OMAP3430_PM_PREPWSTST,
|
||||
OMAP3430_LASTLOGICSTATEENTERED_MASK);
|
||||
}
|
||||
|
||||
static int omap3_get_mem_bank_lastmemst_mask(u8 bank)
|
||||
{
|
||||
switch (bank) {
|
||||
case 0:
|
||||
return OMAP3430_LASTMEM1STATEENTERED_MASK;
|
||||
case 1:
|
||||
return OMAP3430_LASTMEM2STATEENTERED_MASK;
|
||||
case 2:
|
||||
return OMAP3430_LASTSHAREDL2CACHEFLATSTATEENTERED_MASK;
|
||||
case 3:
|
||||
return OMAP3430_LASTL2FLATMEMSTATEENTERED_MASK;
|
||||
default:
|
||||
WARN_ON(1); /* should never happen */
|
||||
return -EEXIST;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int omap3_pwrdm_read_prev_mem_pwrst(struct powerdomain *pwrdm, u8 bank)
|
||||
{
|
||||
u32 m;
|
||||
|
||||
m = omap3_get_mem_bank_lastmemst_mask(bank);
|
||||
|
||||
return omap2_prm_read_mod_bits_shift(pwrdm->prcm_offs,
|
||||
OMAP3430_PM_PREPWSTST, m);
|
||||
}
|
||||
|
||||
static int omap3_pwrdm_clear_all_prev_pwrst(struct powerdomain *pwrdm)
|
||||
{
|
||||
omap2_prm_write_mod_reg(0, pwrdm->prcm_offs, OMAP3430_PM_PREPWSTST);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int omap3_pwrdm_enable_hdwr_sar(struct powerdomain *pwrdm)
|
||||
{
|
||||
return omap2_prm_rmw_mod_reg_bits(0,
|
||||
1 << OMAP3430ES2_SAVEANDRESTORE_SHIFT,
|
||||
pwrdm->prcm_offs, OMAP2_PM_PWSTCTRL);
|
||||
}
|
||||
|
||||
static int omap3_pwrdm_disable_hdwr_sar(struct powerdomain *pwrdm)
|
||||
{
|
||||
return omap2_prm_rmw_mod_reg_bits(1 << OMAP3430ES2_SAVEANDRESTORE_SHIFT,
|
||||
0, pwrdm->prcm_offs,
|
||||
OMAP2_PM_PWSTCTRL);
|
||||
}
|
||||
|
||||
struct pwrdm_ops omap2_pwrdm_operations = {
|
||||
.pwrdm_set_next_pwrst = omap2_pwrdm_set_next_pwrst,
|
||||
.pwrdm_read_next_pwrst = omap2_pwrdm_read_next_pwrst,
|
||||
.pwrdm_read_pwrst = omap2_pwrdm_read_pwrst,
|
||||
.pwrdm_set_logic_retst = omap2_pwrdm_set_logic_retst,
|
||||
.pwrdm_set_mem_onst = omap2_pwrdm_set_mem_onst,
|
||||
.pwrdm_set_mem_retst = omap2_pwrdm_set_mem_retst,
|
||||
.pwrdm_read_mem_pwrst = omap2_pwrdm_read_mem_pwrst,
|
||||
.pwrdm_read_mem_retst = omap2_pwrdm_read_mem_retst,
|
||||
.pwrdm_wait_transition = omap2_pwrdm_wait_transition,
|
||||
};
|
||||
|
||||
struct pwrdm_ops omap3_pwrdm_operations = {
|
||||
.pwrdm_set_next_pwrst = omap2_pwrdm_set_next_pwrst,
|
||||
.pwrdm_read_next_pwrst = omap2_pwrdm_read_next_pwrst,
|
||||
.pwrdm_read_pwrst = omap2_pwrdm_read_pwrst,
|
||||
.pwrdm_read_prev_pwrst = omap3_pwrdm_read_prev_pwrst,
|
||||
.pwrdm_set_logic_retst = omap2_pwrdm_set_logic_retst,
|
||||
.pwrdm_read_logic_pwrst = omap3_pwrdm_read_logic_pwrst,
|
||||
.pwrdm_read_logic_retst = omap3_pwrdm_read_logic_retst,
|
||||
.pwrdm_read_prev_logic_pwrst = omap3_pwrdm_read_prev_logic_pwrst,
|
||||
.pwrdm_set_mem_onst = omap2_pwrdm_set_mem_onst,
|
||||
.pwrdm_set_mem_retst = omap2_pwrdm_set_mem_retst,
|
||||
.pwrdm_read_mem_pwrst = omap2_pwrdm_read_mem_pwrst,
|
||||
.pwrdm_read_mem_retst = omap2_pwrdm_read_mem_retst,
|
||||
.pwrdm_read_prev_mem_pwrst = omap3_pwrdm_read_prev_mem_pwrst,
|
||||
.pwrdm_clear_all_prev_pwrst = omap3_pwrdm_clear_all_prev_pwrst,
|
||||
.pwrdm_enable_hdwr_sar = omap3_pwrdm_enable_hdwr_sar,
|
||||
.pwrdm_disable_hdwr_sar = omap3_pwrdm_disable_hdwr_sar,
|
||||
.pwrdm_wait_transition = omap2_pwrdm_wait_transition,
|
||||
};
|
225
arch/arm/mach-omap2/powerdomain44xx.c
Normal file
225
arch/arm/mach-omap2/powerdomain44xx.c
Normal file
|
@ -0,0 +1,225 @@
|
|||
/*
|
||||
* OMAP4 powerdomain control
|
||||
*
|
||||
* Copyright (C) 2009-2010 Texas Instruments, Inc.
|
||||
* Copyright (C) 2007-2009 Nokia Corporation
|
||||
*
|
||||
* Derived from mach-omap2/powerdomain.c written by Paul Walmsley
|
||||
* Rajendra Nayak <rnayak@ti.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <linux/io.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/delay.h>
|
||||
|
||||
#include "powerdomain.h"
|
||||
#include <plat/prcm.h>
|
||||
#include "prm2xxx_3xxx.h"
|
||||
#include "prm44xx.h"
|
||||
#include "prminst44xx.h"
|
||||
#include "prm-regbits-44xx.h"
|
||||
|
||||
static int omap4_pwrdm_set_next_pwrst(struct powerdomain *pwrdm, u8 pwrst)
|
||||
{
|
||||
omap4_prminst_rmw_inst_reg_bits(OMAP_POWERSTATE_MASK,
|
||||
(pwrst << OMAP_POWERSTATE_SHIFT),
|
||||
pwrdm->prcm_partition,
|
||||
pwrdm->prcm_offs, OMAP4_PM_PWSTCTRL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int omap4_pwrdm_read_next_pwrst(struct powerdomain *pwrdm)
|
||||
{
|
||||
u32 v;
|
||||
|
||||
v = omap4_prminst_read_inst_reg(pwrdm->prcm_partition, pwrdm->prcm_offs,
|
||||
OMAP4_PM_PWSTCTRL);
|
||||
v &= OMAP_POWERSTATE_MASK;
|
||||
v >>= OMAP_POWERSTATE_SHIFT;
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
static int omap4_pwrdm_read_pwrst(struct powerdomain *pwrdm)
|
||||
{
|
||||
u32 v;
|
||||
|
||||
v = omap4_prminst_read_inst_reg(pwrdm->prcm_partition, pwrdm->prcm_offs,
|
||||
OMAP4_PM_PWSTST);
|
||||
v &= OMAP_POWERSTATEST_MASK;
|
||||
v >>= OMAP_POWERSTATEST_SHIFT;
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
static int omap4_pwrdm_read_prev_pwrst(struct powerdomain *pwrdm)
|
||||
{
|
||||
u32 v;
|
||||
|
||||
v = omap4_prminst_read_inst_reg(pwrdm->prcm_partition, pwrdm->prcm_offs,
|
||||
OMAP4_PM_PWSTST);
|
||||
v &= OMAP4430_LASTPOWERSTATEENTERED_MASK;
|
||||
v >>= OMAP4430_LASTPOWERSTATEENTERED_SHIFT;
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
static int omap4_pwrdm_set_lowpwrstchange(struct powerdomain *pwrdm)
|
||||
{
|
||||
omap4_prminst_rmw_inst_reg_bits(OMAP4430_LOWPOWERSTATECHANGE_MASK,
|
||||
(1 << OMAP4430_LOWPOWERSTATECHANGE_SHIFT),
|
||||
pwrdm->prcm_partition,
|
||||
pwrdm->prcm_offs, OMAP4_PM_PWSTCTRL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int omap4_pwrdm_clear_all_prev_pwrst(struct powerdomain *pwrdm)
|
||||
{
|
||||
omap4_prminst_rmw_inst_reg_bits(OMAP4430_LASTPOWERSTATEENTERED_MASK,
|
||||
OMAP4430_LASTPOWERSTATEENTERED_MASK,
|
||||
pwrdm->prcm_partition,
|
||||
pwrdm->prcm_offs, OMAP4_PM_PWSTST);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int omap4_pwrdm_set_logic_retst(struct powerdomain *pwrdm, u8 pwrst)
|
||||
{
|
||||
u32 v;
|
||||
|
||||
v = pwrst << __ffs(OMAP4430_LOGICRETSTATE_MASK);
|
||||
omap4_prminst_rmw_inst_reg_bits(OMAP4430_LOGICRETSTATE_MASK, v,
|
||||
pwrdm->prcm_partition, pwrdm->prcm_offs,
|
||||
OMAP4_PM_PWSTCTRL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int omap4_pwrdm_set_mem_onst(struct powerdomain *pwrdm, u8 bank,
|
||||
u8 pwrst)
|
||||
{
|
||||
u32 m;
|
||||
|
||||
m = omap2_pwrdm_get_mem_bank_onstate_mask(bank);
|
||||
|
||||
omap4_prminst_rmw_inst_reg_bits(m, (pwrst << __ffs(m)),
|
||||
pwrdm->prcm_partition, pwrdm->prcm_offs,
|
||||
OMAP4_PM_PWSTCTRL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int omap4_pwrdm_set_mem_retst(struct powerdomain *pwrdm, u8 bank,
|
||||
u8 pwrst)
|
||||
{
|
||||
u32 m;
|
||||
|
||||
m = omap2_pwrdm_get_mem_bank_retst_mask(bank);
|
||||
|
||||
omap4_prminst_rmw_inst_reg_bits(m, (pwrst << __ffs(m)),
|
||||
pwrdm->prcm_partition, pwrdm->prcm_offs,
|
||||
OMAP4_PM_PWSTCTRL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int omap4_pwrdm_read_logic_pwrst(struct powerdomain *pwrdm)
|
||||
{
|
||||
u32 v;
|
||||
|
||||
v = omap4_prminst_read_inst_reg(pwrdm->prcm_partition, pwrdm->prcm_offs,
|
||||
OMAP4_PM_PWSTST);
|
||||
v &= OMAP4430_LOGICSTATEST_MASK;
|
||||
v >>= OMAP4430_LOGICSTATEST_SHIFT;
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
static int omap4_pwrdm_read_logic_retst(struct powerdomain *pwrdm)
|
||||
{
|
||||
u32 v;
|
||||
|
||||
v = omap4_prminst_read_inst_reg(pwrdm->prcm_partition, pwrdm->prcm_offs,
|
||||
OMAP4_PM_PWSTCTRL);
|
||||
v &= OMAP4430_LOGICRETSTATE_MASK;
|
||||
v >>= OMAP4430_LOGICRETSTATE_SHIFT;
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
static int omap4_pwrdm_read_mem_pwrst(struct powerdomain *pwrdm, u8 bank)
|
||||
{
|
||||
u32 m, v;
|
||||
|
||||
m = omap2_pwrdm_get_mem_bank_stst_mask(bank);
|
||||
|
||||
v = omap4_prminst_read_inst_reg(pwrdm->prcm_partition, pwrdm->prcm_offs,
|
||||
OMAP4_PM_PWSTST);
|
||||
v &= m;
|
||||
v >>= __ffs(m);
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
static int omap4_pwrdm_read_mem_retst(struct powerdomain *pwrdm, u8 bank)
|
||||
{
|
||||
u32 m, v;
|
||||
|
||||
m = omap2_pwrdm_get_mem_bank_retst_mask(bank);
|
||||
|
||||
v = omap4_prminst_read_inst_reg(pwrdm->prcm_partition, pwrdm->prcm_offs,
|
||||
OMAP4_PM_PWSTCTRL);
|
||||
v &= m;
|
||||
v >>= __ffs(m);
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
static int omap4_pwrdm_wait_transition(struct powerdomain *pwrdm)
|
||||
{
|
||||
u32 c = 0;
|
||||
|
||||
/*
|
||||
* REVISIT: pwrdm_wait_transition() may be better implemented
|
||||
* via a callback and a periodic timer check -- how long do we expect
|
||||
* powerdomain transitions to take?
|
||||
*/
|
||||
|
||||
/* XXX Is this udelay() value meaningful? */
|
||||
while ((omap4_prminst_read_inst_reg(pwrdm->prcm_partition,
|
||||
pwrdm->prcm_offs,
|
||||
OMAP4_PM_PWSTST) &
|
||||
OMAP_INTRANSITION_MASK) &&
|
||||
(c++ < PWRDM_TRANSITION_BAILOUT))
|
||||
udelay(1);
|
||||
|
||||
if (c > PWRDM_TRANSITION_BAILOUT) {
|
||||
printk(KERN_ERR "powerdomain: waited too long for "
|
||||
"powerdomain %s to complete transition\n", pwrdm->name);
|
||||
return -EAGAIN;
|
||||
}
|
||||
|
||||
pr_debug("powerdomain: completed transition in %d loops\n", c);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct pwrdm_ops omap4_pwrdm_operations = {
|
||||
.pwrdm_set_next_pwrst = omap4_pwrdm_set_next_pwrst,
|
||||
.pwrdm_read_next_pwrst = omap4_pwrdm_read_next_pwrst,
|
||||
.pwrdm_read_pwrst = omap4_pwrdm_read_pwrst,
|
||||
.pwrdm_read_prev_pwrst = omap4_pwrdm_read_prev_pwrst,
|
||||
.pwrdm_set_lowpwrstchange = omap4_pwrdm_set_lowpwrstchange,
|
||||
.pwrdm_clear_all_prev_pwrst = omap4_pwrdm_clear_all_prev_pwrst,
|
||||
.pwrdm_set_logic_retst = omap4_pwrdm_set_logic_retst,
|
||||
.pwrdm_read_logic_pwrst = omap4_pwrdm_read_logic_pwrst,
|
||||
.pwrdm_read_logic_retst = omap4_pwrdm_read_logic_retst,
|
||||
.pwrdm_read_mem_pwrst = omap4_pwrdm_read_mem_pwrst,
|
||||
.pwrdm_read_mem_retst = omap4_pwrdm_read_mem_retst,
|
||||
.pwrdm_set_mem_onst = omap4_pwrdm_set_mem_onst,
|
||||
.pwrdm_set_mem_retst = omap4_pwrdm_set_mem_retst,
|
||||
.pwrdm_wait_transition = omap4_pwrdm_wait_transition,
|
||||
};
|
|
@ -2,10 +2,9 @@
|
|||
* OMAP2/3 common powerdomain definitions
|
||||
*
|
||||
* Copyright (C) 2007-2008 Texas Instruments, Inc.
|
||||
* Copyright (C) 2007-2009 Nokia Corporation
|
||||
* Copyright (C) 2007-2010 Nokia Corporation
|
||||
*
|
||||
* Written by Paul Walmsley
|
||||
* Debugging and integration fixes by Jouni Högander
|
||||
* Paul Walmsley, Jouni Högander
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
|
@ -18,9 +17,6 @@
|
|||
* Clock Domain Framework
|
||||
*/
|
||||
|
||||
#ifndef ARCH_ARM_MACH_OMAP2_POWERDOMAINS
|
||||
#define ARCH_ARM_MACH_OMAP2_POWERDOMAINS
|
||||
|
||||
/*
|
||||
* This file contains all of the powerdomains that have some element
|
||||
* of software control for the OMAP24xx and OMAP34xx chips.
|
||||
|
@ -49,24 +45,18 @@
|
|||
* address offset is different between the C55 and C64 DSPs.
|
||||
*/
|
||||
|
||||
#include <plat/powerdomain.h>
|
||||
#include "powerdomain.h"
|
||||
|
||||
#include "prcm-common.h"
|
||||
#include "prm.h"
|
||||
#include "cm.h"
|
||||
#include "powerdomains24xx.h"
|
||||
#include "powerdomains34xx.h"
|
||||
#include "powerdomains44xx.h"
|
||||
|
||||
/* OMAP2/3-common powerdomains */
|
||||
|
||||
#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
|
||||
|
||||
/*
|
||||
* The GFX powerdomain is not present on 3430ES2, but currently we do not
|
||||
* have a macro to filter it out at compile-time.
|
||||
*/
|
||||
static struct powerdomain gfx_omap2_pwrdm = {
|
||||
struct powerdomain gfx_omap2_pwrdm = {
|
||||
.name = "gfx_pwrdm",
|
||||
.prcm_offs = GFX_MOD,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP24XX |
|
||||
|
@ -82,72 +72,8 @@ static struct powerdomain gfx_omap2_pwrdm = {
|
|||
},
|
||||
};
|
||||
|
||||
static struct powerdomain wkup_omap2_pwrdm = {
|
||||
struct powerdomain wkup_omap2_pwrdm = {
|
||||
.name = "wkup_pwrdm",
|
||||
.prcm_offs = WKUP_MOD,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP24XX | CHIP_IS_OMAP3430),
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
/* As powerdomains are added or removed above, this list must also be changed */
|
||||
static struct powerdomain *powerdomains_omap[] __initdata = {
|
||||
|
||||
#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
|
||||
&wkup_omap2_pwrdm,
|
||||
&gfx_omap2_pwrdm,
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ARCH_OMAP2
|
||||
&dsp_pwrdm,
|
||||
&mpu_24xx_pwrdm,
|
||||
&core_24xx_pwrdm,
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ARCH_OMAP2430
|
||||
&mdm_pwrdm,
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ARCH_OMAP3
|
||||
&iva2_pwrdm,
|
||||
&mpu_3xxx_pwrdm,
|
||||
&neon_pwrdm,
|
||||
&core_3xxx_pre_es3_1_pwrdm,
|
||||
&core_3xxx_es3_1_pwrdm,
|
||||
&cam_pwrdm,
|
||||
&dss_pwrdm,
|
||||
&per_pwrdm,
|
||||
&emu_pwrdm,
|
||||
&sgx_pwrdm,
|
||||
&usbhost_pwrdm,
|
||||
&dpll1_pwrdm,
|
||||
&dpll2_pwrdm,
|
||||
&dpll3_pwrdm,
|
||||
&dpll4_pwrdm,
|
||||
&dpll5_pwrdm,
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ARCH_OMAP4
|
||||
&core_44xx_pwrdm,
|
||||
&gfx_44xx_pwrdm,
|
||||
&abe_44xx_pwrdm,
|
||||
&dss_44xx_pwrdm,
|
||||
&tesla_44xx_pwrdm,
|
||||
&wkup_44xx_pwrdm,
|
||||
&cpu0_44xx_pwrdm,
|
||||
&cpu1_44xx_pwrdm,
|
||||
&emu_44xx_pwrdm,
|
||||
&mpu_44xx_pwrdm,
|
||||
&ivahd_44xx_pwrdm,
|
||||
&cam_44xx_pwrdm,
|
||||
&l3init_44xx_pwrdm,
|
||||
&l4per_44xx_pwrdm,
|
||||
&always_on_core_44xx_pwrdm,
|
||||
&cefuse_44xx_pwrdm,
|
||||
#endif
|
||||
NULL
|
||||
};
|
||||
|
||||
|
||||
#endif
|
22
arch/arm/mach-omap2/powerdomains2xxx_3xxx_data.h
Normal file
22
arch/arm/mach-omap2/powerdomains2xxx_3xxx_data.h
Normal file
|
@ -0,0 +1,22 @@
|
|||
/*
|
||||
* OMAP2/3 common powerdomains - prototypes
|
||||
*
|
||||
* Copyright (C) 2008 Texas Instruments, Inc.
|
||||
* Copyright (C) 2008-2010 Nokia Corporation
|
||||
*
|
||||
* Paul Walmsley
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#ifndef __ARCH_ARM_MACH_OMAP2_POWERDOMAINS2XXX_3XXX_DATA_H
|
||||
#define __ARCH_ARM_MACH_OMAP2_POWERDOMAINS2XXX_3XXX_DATA_H
|
||||
|
||||
#include "powerdomain.h"
|
||||
|
||||
extern struct powerdomain gfx_omap2_pwrdm;
|
||||
extern struct powerdomain wkup_omap2_pwrdm;
|
||||
|
||||
#endif
|
|
@ -1,37 +1,28 @@
|
|||
/*
|
||||
* OMAP24XX powerdomain definitions
|
||||
* OMAP2XXX powerdomain definitions
|
||||
*
|
||||
* Copyright (C) 2007-2008 Texas Instruments, Inc.
|
||||
* Copyright (C) 2007-2009 Nokia Corporation
|
||||
* Copyright (C) 2007-2010 Nokia Corporation
|
||||
*
|
||||
* Written by Paul Walmsley
|
||||
* Debugging and integration fixes by Jouni Högander
|
||||
* Paul Walmsley, Jouni Högander
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#ifndef ARCH_ARM_MACH_OMAP2_POWERDOMAINS24XX
|
||||
#define ARCH_ARM_MACH_OMAP2_POWERDOMAINS24XX
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
/*
|
||||
* N.B. If powerdomains are added or removed from this file, update
|
||||
* the array in mach-omap2/powerdomains.h.
|
||||
*/
|
||||
|
||||
#include <plat/powerdomain.h>
|
||||
#include "powerdomain.h"
|
||||
#include "powerdomains2xxx_3xxx_data.h"
|
||||
|
||||
#include "prcm-common.h"
|
||||
#include "prm.h"
|
||||
#include "prm2xxx_3xxx.h"
|
||||
#include "prm-regbits-24xx.h"
|
||||
#include "cm.h"
|
||||
#include "cm-regbits-24xx.h"
|
||||
|
||||
/* 24XX powerdomains and dependencies */
|
||||
|
||||
#ifdef CONFIG_ARCH_OMAP2
|
||||
|
||||
/* Powerdomains */
|
||||
|
||||
static struct powerdomain dsp_pwrdm = {
|
||||
|
@ -82,9 +73,6 @@ static struct powerdomain core_24xx_pwrdm = {
|
|||
},
|
||||
};
|
||||
|
||||
#endif /* CONFIG_ARCH_OMAP2 */
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* 2430-specific powerdomains
|
||||
|
@ -111,5 +99,25 @@ static struct powerdomain mdm_pwrdm = {
|
|||
|
||||
#endif /* CONFIG_ARCH_OMAP2430 */
|
||||
|
||||
/* As powerdomains are added or removed above, this list must also be changed */
|
||||
static struct powerdomain *powerdomains_omap2xxx[] __initdata = {
|
||||
|
||||
&wkup_omap2_pwrdm,
|
||||
&gfx_omap2_pwrdm,
|
||||
|
||||
#ifdef CONFIG_ARCH_OMAP2
|
||||
&dsp_pwrdm,
|
||||
&mpu_24xx_pwrdm,
|
||||
&core_24xx_pwrdm,
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ARCH_OMAP2430
|
||||
&mdm_pwrdm,
|
||||
#endif
|
||||
NULL
|
||||
};
|
||||
|
||||
void __init omap2xxx_powerdomains_init(void)
|
||||
{
|
||||
pwrdm_init(powerdomains_omap2xxx, &omap2_pwrdm_operations);
|
||||
}
|
|
@ -4,28 +4,23 @@
|
|||
* Copyright (C) 2007-2008 Texas Instruments, Inc.
|
||||
* Copyright (C) 2007-2010 Nokia Corporation
|
||||
*
|
||||
* Written by Paul Walmsley
|
||||
* Debugging and integration fixes by Jouni Högander
|
||||
* Paul Walmsley, Jouni Högander
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#ifndef ARCH_ARM_MACH_OMAP2_POWERDOMAINS34XX
|
||||
#define ARCH_ARM_MACH_OMAP2_POWERDOMAINS34XX
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
/*
|
||||
* N.B. If powerdomains are added or removed from this file, update
|
||||
* the array in mach-omap2/powerdomains.h.
|
||||
*/
|
||||
|
||||
#include <plat/powerdomain.h>
|
||||
#include "powerdomain.h"
|
||||
#include "powerdomains2xxx_3xxx_data.h"
|
||||
|
||||
#include "prcm-common.h"
|
||||
#include "prm.h"
|
||||
#include "prm2xxx_3xxx.h"
|
||||
#include "prm-regbits-34xx.h"
|
||||
#include "cm.h"
|
||||
#include "cm2xxx_3xxx.h"
|
||||
#include "cm-regbits-34xx.h"
|
||||
|
||||
/*
|
||||
|
@ -260,8 +255,33 @@ static struct powerdomain dpll5_pwrdm = {
|
|||
.omap_chip = OMAP_CHIP_INIT(CHIP_GE_OMAP3430ES2),
|
||||
};
|
||||
|
||||
/* As powerdomains are added or removed above, this list must also be changed */
|
||||
static struct powerdomain *powerdomains_omap3xxx[] __initdata = {
|
||||
|
||||
#endif /* CONFIG_ARCH_OMAP3 */
|
||||
|
||||
|
||||
&wkup_omap2_pwrdm,
|
||||
&gfx_omap2_pwrdm,
|
||||
&iva2_pwrdm,
|
||||
&mpu_3xxx_pwrdm,
|
||||
&neon_pwrdm,
|
||||
&core_3xxx_pre_es3_1_pwrdm,
|
||||
&core_3xxx_es3_1_pwrdm,
|
||||
&cam_pwrdm,
|
||||
&dss_pwrdm,
|
||||
&per_pwrdm,
|
||||
&emu_pwrdm,
|
||||
&sgx_pwrdm,
|
||||
&usbhost_pwrdm,
|
||||
&dpll1_pwrdm,
|
||||
&dpll2_pwrdm,
|
||||
&dpll3_pwrdm,
|
||||
&dpll4_pwrdm,
|
||||
&dpll5_pwrdm,
|
||||
#endif
|
||||
NULL
|
||||
};
|
||||
|
||||
|
||||
void __init omap3xxx_powerdomains_init(void)
|
||||
{
|
||||
pwrdm_init(powerdomains_omap3xxx, &omap3_pwrdm_operations);
|
||||
}
|
|
@ -19,23 +19,22 @@
|
|||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#ifndef __ARCH_ARM_MACH_OMAP2_POWERDOMAINS44XX_H
|
||||
#define __ARCH_ARM_MACH_OMAP2_POWERDOMAINS44XX_H
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
#include <plat/powerdomain.h>
|
||||
#include "powerdomain.h"
|
||||
|
||||
#include "prcm-common.h"
|
||||
#include "cm.h"
|
||||
#include "cm-regbits-44xx.h"
|
||||
#include "prm.h"
|
||||
#include "prcm44xx.h"
|
||||
#include "prm-regbits-44xx.h"
|
||||
|
||||
#if defined(CONFIG_ARCH_OMAP4)
|
||||
#include "prm44xx.h"
|
||||
#include "prcm_mpu44xx.h"
|
||||
|
||||
/* core_44xx_pwrdm: CORE power domain */
|
||||
static struct powerdomain core_44xx_pwrdm = {
|
||||
.name = "core_pwrdm",
|
||||
.prcm_offs = OMAP4430_PRM_CORE_MOD,
|
||||
.prcm_offs = OMAP4430_PRM_CORE_INST,
|
||||
.prcm_partition = OMAP4430_PRM_PARTITION,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
|
||||
.pwrsts = PWRSTS_RET_ON,
|
||||
.pwrsts_logic_ret = PWRSTS_OFF_RET,
|
||||
|
@ -60,7 +59,8 @@ static struct powerdomain core_44xx_pwrdm = {
|
|||
/* gfx_44xx_pwrdm: 3D accelerator power domain */
|
||||
static struct powerdomain gfx_44xx_pwrdm = {
|
||||
.name = "gfx_pwrdm",
|
||||
.prcm_offs = OMAP4430_PRM_GFX_MOD,
|
||||
.prcm_offs = OMAP4430_PRM_GFX_INST,
|
||||
.prcm_partition = OMAP4430_PRM_PARTITION,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
|
||||
.pwrsts = PWRSTS_OFF_ON,
|
||||
.banks = 1,
|
||||
|
@ -76,7 +76,8 @@ static struct powerdomain gfx_44xx_pwrdm = {
|
|||
/* abe_44xx_pwrdm: Audio back end power domain */
|
||||
static struct powerdomain abe_44xx_pwrdm = {
|
||||
.name = "abe_pwrdm",
|
||||
.prcm_offs = OMAP4430_PRM_ABE_MOD,
|
||||
.prcm_offs = OMAP4430_PRM_ABE_INST,
|
||||
.prcm_partition = OMAP4430_PRM_PARTITION,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
|
||||
.pwrsts = PWRSTS_OFF_RET_ON,
|
||||
.pwrsts_logic_ret = PWRDM_POWER_OFF,
|
||||
|
@ -95,7 +96,8 @@ static struct powerdomain abe_44xx_pwrdm = {
|
|||
/* dss_44xx_pwrdm: Display subsystem power domain */
|
||||
static struct powerdomain dss_44xx_pwrdm = {
|
||||
.name = "dss_pwrdm",
|
||||
.prcm_offs = OMAP4430_PRM_DSS_MOD,
|
||||
.prcm_offs = OMAP4430_PRM_DSS_INST,
|
||||
.prcm_partition = OMAP4430_PRM_PARTITION,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
|
||||
.pwrsts = PWRSTS_OFF_RET_ON,
|
||||
.pwrsts_logic_ret = PWRSTS_OFF,
|
||||
|
@ -112,7 +114,8 @@ static struct powerdomain dss_44xx_pwrdm = {
|
|||
/* tesla_44xx_pwrdm: Tesla processor power domain */
|
||||
static struct powerdomain tesla_44xx_pwrdm = {
|
||||
.name = "tesla_pwrdm",
|
||||
.prcm_offs = OMAP4430_PRM_TESLA_MOD,
|
||||
.prcm_offs = OMAP4430_PRM_TESLA_INST,
|
||||
.prcm_partition = OMAP4430_PRM_PARTITION,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
|
||||
.pwrsts = PWRSTS_OFF_RET_ON,
|
||||
.pwrsts_logic_ret = PWRSTS_OFF_RET,
|
||||
|
@ -133,7 +136,8 @@ static struct powerdomain tesla_44xx_pwrdm = {
|
|||
/* wkup_44xx_pwrdm: Wake-up power domain */
|
||||
static struct powerdomain wkup_44xx_pwrdm = {
|
||||
.name = "wkup_pwrdm",
|
||||
.prcm_offs = OMAP4430_PRM_WKUP_MOD,
|
||||
.prcm_offs = OMAP4430_PRM_WKUP_INST,
|
||||
.prcm_partition = OMAP4430_PRM_PARTITION,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
|
||||
.pwrsts = PWRSTS_ON,
|
||||
.banks = 1,
|
||||
|
@ -148,7 +152,8 @@ static struct powerdomain wkup_44xx_pwrdm = {
|
|||
/* cpu0_44xx_pwrdm: MPU0 processor and Neon coprocessor power domain */
|
||||
static struct powerdomain cpu0_44xx_pwrdm = {
|
||||
.name = "cpu0_pwrdm",
|
||||
.prcm_offs = OMAP4430_PRCM_MPU_CPU0_MOD,
|
||||
.prcm_offs = OMAP4430_PRCM_MPU_CPU0_INST,
|
||||
.prcm_partition = OMAP4430_PRCM_MPU_PARTITION,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
|
||||
.pwrsts = PWRSTS_OFF_RET_ON,
|
||||
.pwrsts_logic_ret = PWRSTS_OFF_RET,
|
||||
|
@ -164,7 +169,8 @@ static struct powerdomain cpu0_44xx_pwrdm = {
|
|||
/* cpu1_44xx_pwrdm: MPU1 processor and Neon coprocessor power domain */
|
||||
static struct powerdomain cpu1_44xx_pwrdm = {
|
||||
.name = "cpu1_pwrdm",
|
||||
.prcm_offs = OMAP4430_PRCM_MPU_CPU1_MOD,
|
||||
.prcm_offs = OMAP4430_PRCM_MPU_CPU1_INST,
|
||||
.prcm_partition = OMAP4430_PRCM_MPU_PARTITION,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
|
||||
.pwrsts = PWRSTS_OFF_RET_ON,
|
||||
.pwrsts_logic_ret = PWRSTS_OFF_RET,
|
||||
|
@ -180,7 +186,8 @@ static struct powerdomain cpu1_44xx_pwrdm = {
|
|||
/* emu_44xx_pwrdm: Emulation power domain */
|
||||
static struct powerdomain emu_44xx_pwrdm = {
|
||||
.name = "emu_pwrdm",
|
||||
.prcm_offs = OMAP4430_PRM_EMU_MOD,
|
||||
.prcm_offs = OMAP4430_PRM_EMU_INST,
|
||||
.prcm_partition = OMAP4430_PRM_PARTITION,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
|
||||
.pwrsts = PWRSTS_OFF_ON,
|
||||
.banks = 1,
|
||||
|
@ -195,7 +202,8 @@ static struct powerdomain emu_44xx_pwrdm = {
|
|||
/* mpu_44xx_pwrdm: Modena processor and the Neon coprocessor power domain */
|
||||
static struct powerdomain mpu_44xx_pwrdm = {
|
||||
.name = "mpu_pwrdm",
|
||||
.prcm_offs = OMAP4430_PRM_MPU_MOD,
|
||||
.prcm_offs = OMAP4430_PRM_MPU_INST,
|
||||
.prcm_partition = OMAP4430_PRM_PARTITION,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
|
||||
.pwrsts = PWRSTS_OFF_RET_ON,
|
||||
.pwrsts_logic_ret = PWRSTS_OFF_RET,
|
||||
|
@ -215,7 +223,8 @@ static struct powerdomain mpu_44xx_pwrdm = {
|
|||
/* ivahd_44xx_pwrdm: IVA-HD power domain */
|
||||
static struct powerdomain ivahd_44xx_pwrdm = {
|
||||
.name = "ivahd_pwrdm",
|
||||
.prcm_offs = OMAP4430_PRM_IVAHD_MOD,
|
||||
.prcm_offs = OMAP4430_PRM_IVAHD_INST,
|
||||
.prcm_partition = OMAP4430_PRM_PARTITION,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
|
||||
.pwrsts = PWRSTS_OFF_RET_ON,
|
||||
.pwrsts_logic_ret = PWRDM_POWER_OFF,
|
||||
|
@ -238,7 +247,8 @@ static struct powerdomain ivahd_44xx_pwrdm = {
|
|||
/* cam_44xx_pwrdm: Camera subsystem power domain */
|
||||
static struct powerdomain cam_44xx_pwrdm = {
|
||||
.name = "cam_pwrdm",
|
||||
.prcm_offs = OMAP4430_PRM_CAM_MOD,
|
||||
.prcm_offs = OMAP4430_PRM_CAM_INST,
|
||||
.prcm_partition = OMAP4430_PRM_PARTITION,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
|
||||
.pwrsts = PWRSTS_OFF_ON,
|
||||
.banks = 1,
|
||||
|
@ -254,9 +264,10 @@ static struct powerdomain cam_44xx_pwrdm = {
|
|||
/* l3init_44xx_pwrdm: L3 initators pheripherals power domain */
|
||||
static struct powerdomain l3init_44xx_pwrdm = {
|
||||
.name = "l3init_pwrdm",
|
||||
.prcm_offs = OMAP4430_PRM_L3INIT_MOD,
|
||||
.prcm_offs = OMAP4430_PRM_L3INIT_INST,
|
||||
.prcm_partition = OMAP4430_PRM_PARTITION,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
|
||||
.pwrsts = PWRSTS_OFF_RET_ON,
|
||||
.pwrsts = PWRSTS_RET_ON,
|
||||
.pwrsts_logic_ret = PWRSTS_OFF_RET,
|
||||
.banks = 1,
|
||||
.pwrsts_mem_ret = {
|
||||
|
@ -271,9 +282,10 @@ static struct powerdomain l3init_44xx_pwrdm = {
|
|||
/* l4per_44xx_pwrdm: Target peripherals power domain */
|
||||
static struct powerdomain l4per_44xx_pwrdm = {
|
||||
.name = "l4per_pwrdm",
|
||||
.prcm_offs = OMAP4430_PRM_L4PER_MOD,
|
||||
.prcm_offs = OMAP4430_PRM_L4PER_INST,
|
||||
.prcm_partition = OMAP4430_PRM_PARTITION,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
|
||||
.pwrsts = PWRSTS_OFF_RET_ON,
|
||||
.pwrsts = PWRSTS_RET_ON,
|
||||
.pwrsts_logic_ret = PWRSTS_OFF_RET,
|
||||
.banks = 2,
|
||||
.pwrsts_mem_ret = {
|
||||
|
@ -293,7 +305,8 @@ static struct powerdomain l4per_44xx_pwrdm = {
|
|||
*/
|
||||
static struct powerdomain always_on_core_44xx_pwrdm = {
|
||||
.name = "always_on_core_pwrdm",
|
||||
.prcm_offs = OMAP4430_PRM_ALWAYS_ON_MOD,
|
||||
.prcm_offs = OMAP4430_PRM_ALWAYS_ON_INST,
|
||||
.prcm_partition = OMAP4430_PRM_PARTITION,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
|
||||
.pwrsts = PWRSTS_ON,
|
||||
};
|
||||
|
@ -301,7 +314,8 @@ static struct powerdomain always_on_core_44xx_pwrdm = {
|
|||
/* cefuse_44xx_pwrdm: Customer efuse controller power domain */
|
||||
static struct powerdomain cefuse_44xx_pwrdm = {
|
||||
.name = "cefuse_pwrdm",
|
||||
.prcm_offs = OMAP4430_PRM_CEFUSE_MOD,
|
||||
.prcm_offs = OMAP4430_PRM_CEFUSE_INST,
|
||||
.prcm_partition = OMAP4430_PRM_PARTITION,
|
||||
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
|
||||
.pwrsts = PWRSTS_OFF_ON,
|
||||
};
|
||||
|
@ -314,6 +328,28 @@ static struct powerdomain cefuse_44xx_pwrdm = {
|
|||
* stdefuse
|
||||
*/
|
||||
|
||||
#endif
|
||||
/* As powerdomains are added or removed above, this list must also be changed */
|
||||
static struct powerdomain *powerdomains_omap44xx[] __initdata = {
|
||||
&core_44xx_pwrdm,
|
||||
&gfx_44xx_pwrdm,
|
||||
&abe_44xx_pwrdm,
|
||||
&dss_44xx_pwrdm,
|
||||
&tesla_44xx_pwrdm,
|
||||
&wkup_44xx_pwrdm,
|
||||
&cpu0_44xx_pwrdm,
|
||||
&cpu1_44xx_pwrdm,
|
||||
&emu_44xx_pwrdm,
|
||||
&mpu_44xx_pwrdm,
|
||||
&ivahd_44xx_pwrdm,
|
||||
&cam_44xx_pwrdm,
|
||||
&l3init_44xx_pwrdm,
|
||||
&l4per_44xx_pwrdm,
|
||||
&always_on_core_44xx_pwrdm,
|
||||
&cefuse_44xx_pwrdm,
|
||||
NULL
|
||||
};
|
||||
|
||||
#endif
|
||||
void __init omap44xx_powerdomains_init(void)
|
||||
{
|
||||
pwrdm_init(powerdomains_omap44xx, &omap4_pwrdm_operations);
|
||||
}
|
|
@ -8,15 +8,12 @@
|
|||
* Copyright (C) 2007-2009 Nokia Corporation
|
||||
*
|
||||
* Written by Paul Walmsley
|
||||
* OMAP4 defines in this file are automatically generated from the OMAP hardware
|
||||
* databases.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
|
||||
/* Module offsets from both CM_BASE & PRM_BASE */
|
||||
|
||||
/*
|
||||
|
@ -51,75 +48,6 @@
|
|||
#define OMAP3430_NEON_MOD 0xb00
|
||||
#define OMAP3430ES2_USBHOST_MOD 0xc00
|
||||
|
||||
#define BITS(n_bit) \
|
||||
(((1 << n_bit) - 1) | (1 << n_bit))
|
||||
|
||||
#define BITFIELD(l_bit, u_bit) \
|
||||
(BITS(u_bit) & ~((BITS(l_bit)) >> 1))
|
||||
|
||||
/* OMAP44XX specific module offsets */
|
||||
|
||||
/* CM1 instances */
|
||||
|
||||
#define OMAP4430_CM1_OCP_SOCKET_MOD 0x0000
|
||||
#define OMAP4430_CM1_CKGEN_MOD 0x0100
|
||||
#define OMAP4430_CM1_MPU_MOD 0x0300
|
||||
#define OMAP4430_CM1_TESLA_MOD 0x0400
|
||||
#define OMAP4430_CM1_ABE_MOD 0x0500
|
||||
#define OMAP4430_CM1_RESTORE_MOD 0x0e00
|
||||
#define OMAP4430_CM1_INSTR_MOD 0x0f00
|
||||
|
||||
/* CM2 instances */
|
||||
|
||||
#define OMAP4430_CM2_OCP_SOCKET_MOD 0x0000
|
||||
#define OMAP4430_CM2_CKGEN_MOD 0x0100
|
||||
#define OMAP4430_CM2_ALWAYS_ON_MOD 0x0600
|
||||
#define OMAP4430_CM2_CORE_MOD 0x0700
|
||||
#define OMAP4430_CM2_IVAHD_MOD 0x0f00
|
||||
#define OMAP4430_CM2_CAM_MOD 0x1000
|
||||
#define OMAP4430_CM2_DSS_MOD 0x1100
|
||||
#define OMAP4430_CM2_GFX_MOD 0x1200
|
||||
#define OMAP4430_CM2_L3INIT_MOD 0x1300
|
||||
#define OMAP4430_CM2_L4PER_MOD 0x1400
|
||||
#define OMAP4430_CM2_CEFUSE_MOD 0x1600
|
||||
#define OMAP4430_CM2_RESTORE_MOD 0x1e00
|
||||
#define OMAP4430_CM2_INSTR_MOD 0x1f00
|
||||
|
||||
/* PRM instances */
|
||||
|
||||
#define OMAP4430_PRM_OCP_SOCKET_MOD 0x0000
|
||||
#define OMAP4430_PRM_CKGEN_MOD 0x0100
|
||||
#define OMAP4430_PRM_MPU_MOD 0x0300
|
||||
#define OMAP4430_PRM_TESLA_MOD 0x0400
|
||||
#define OMAP4430_PRM_ABE_MOD 0x0500
|
||||
#define OMAP4430_PRM_ALWAYS_ON_MOD 0x0600
|
||||
#define OMAP4430_PRM_CORE_MOD 0x0700
|
||||
#define OMAP4430_PRM_IVAHD_MOD 0x0f00
|
||||
#define OMAP4430_PRM_CAM_MOD 0x1000
|
||||
#define OMAP4430_PRM_DSS_MOD 0x1100
|
||||
#define OMAP4430_PRM_GFX_MOD 0x1200
|
||||
#define OMAP4430_PRM_L3INIT_MOD 0x1300
|
||||
#define OMAP4430_PRM_L4PER_MOD 0x1400
|
||||
#define OMAP4430_PRM_CEFUSE_MOD 0x1600
|
||||
#define OMAP4430_PRM_WKUP_MOD 0x1700
|
||||
#define OMAP4430_PRM_WKUP_CM_MOD 0x1800
|
||||
#define OMAP4430_PRM_EMU_MOD 0x1900
|
||||
#define OMAP4430_PRM_EMU_CM_MOD 0x1a00
|
||||
#define OMAP4430_PRM_DEVICE_MOD 0x1b00
|
||||
#define OMAP4430_PRM_INSTR_MOD 0x1f00
|
||||
|
||||
/* SCRM instances */
|
||||
|
||||
#define OMAP4430_SCRM_SCRM_MOD 0x0000
|
||||
|
||||
/* PRCM_MPU instances */
|
||||
|
||||
#define OMAP4430_PRCM_MPU_OCP_SOCKET_PRCM_MOD 0x0000
|
||||
#define OMAP4430_PRCM_MPU_DEVICE_PRM_MOD 0x0200
|
||||
#define OMAP4430_PRCM_MPU_CPU0_MOD 0x0400
|
||||
#define OMAP4430_PRCM_MPU_CPU1_MOD 0x0800
|
||||
|
||||
|
||||
/* 24XX register bits shared between CM & PRM registers */
|
||||
|
||||
/* CM_FCLKEN1_CORE, CM_ICLKEN1_CORE, PM_WKEN1_CORE shared bits */
|
||||
|
@ -461,5 +389,18 @@
|
|||
#define OMAP3430_EN_CORE_SHIFT 0
|
||||
#define OMAP3430_EN_CORE_MASK (1 << 0)
|
||||
|
||||
|
||||
/*
|
||||
* MAX_MODULE_HARDRESET_WAIT: Maximum microseconds to wait for an OMAP
|
||||
* submodule to exit hardreset
|
||||
*/
|
||||
#define MAX_MODULE_HARDRESET_WAIT 10000
|
||||
|
||||
# ifndef __ASSEMBLER__
|
||||
extern void __iomem *prm_base;
|
||||
extern void __iomem *cm_base;
|
||||
extern void __iomem *cm2_base;
|
||||
# endif
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -17,7 +17,8 @@
|
|||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
#include <linux/module.h>
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/io.h>
|
||||
|
@ -29,105 +30,27 @@
|
|||
|
||||
#include "clock.h"
|
||||
#include "clock2xxx.h"
|
||||
#include "cm.h"
|
||||
#include "prm.h"
|
||||
#include "cm2xxx_3xxx.h"
|
||||
#include "prm2xxx_3xxx.h"
|
||||
#include "prm44xx.h"
|
||||
#include "prminst44xx.h"
|
||||
#include "prm-regbits-24xx.h"
|
||||
#include "prm-regbits-44xx.h"
|
||||
#include "control.h"
|
||||
|
||||
static void __iomem *prm_base;
|
||||
static void __iomem *cm_base;
|
||||
static void __iomem *cm2_base;
|
||||
void __iomem *prm_base;
|
||||
void __iomem *cm_base;
|
||||
void __iomem *cm2_base;
|
||||
|
||||
#define MAX_MODULE_ENABLE_WAIT 100000
|
||||
|
||||
struct omap3_prcm_regs {
|
||||
u32 control_padconf_sys_nirq;
|
||||
u32 iva2_cm_clksel1;
|
||||
u32 iva2_cm_clksel2;
|
||||
u32 cm_sysconfig;
|
||||
u32 sgx_cm_clksel;
|
||||
u32 dss_cm_clksel;
|
||||
u32 cam_cm_clksel;
|
||||
u32 per_cm_clksel;
|
||||
u32 emu_cm_clksel;
|
||||
u32 emu_cm_clkstctrl;
|
||||
u32 pll_cm_autoidle2;
|
||||
u32 pll_cm_clksel4;
|
||||
u32 pll_cm_clksel5;
|
||||
u32 pll_cm_clken2;
|
||||
u32 cm_polctrl;
|
||||
u32 iva2_cm_fclken;
|
||||
u32 iva2_cm_clken_pll;
|
||||
u32 core_cm_fclken1;
|
||||
u32 core_cm_fclken3;
|
||||
u32 sgx_cm_fclken;
|
||||
u32 wkup_cm_fclken;
|
||||
u32 dss_cm_fclken;
|
||||
u32 cam_cm_fclken;
|
||||
u32 per_cm_fclken;
|
||||
u32 usbhost_cm_fclken;
|
||||
u32 core_cm_iclken1;
|
||||
u32 core_cm_iclken2;
|
||||
u32 core_cm_iclken3;
|
||||
u32 sgx_cm_iclken;
|
||||
u32 wkup_cm_iclken;
|
||||
u32 dss_cm_iclken;
|
||||
u32 cam_cm_iclken;
|
||||
u32 per_cm_iclken;
|
||||
u32 usbhost_cm_iclken;
|
||||
u32 iva2_cm_autiidle2;
|
||||
u32 mpu_cm_autoidle2;
|
||||
u32 iva2_cm_clkstctrl;
|
||||
u32 mpu_cm_clkstctrl;
|
||||
u32 core_cm_clkstctrl;
|
||||
u32 sgx_cm_clkstctrl;
|
||||
u32 dss_cm_clkstctrl;
|
||||
u32 cam_cm_clkstctrl;
|
||||
u32 per_cm_clkstctrl;
|
||||
u32 neon_cm_clkstctrl;
|
||||
u32 usbhost_cm_clkstctrl;
|
||||
u32 core_cm_autoidle1;
|
||||
u32 core_cm_autoidle2;
|
||||
u32 core_cm_autoidle3;
|
||||
u32 wkup_cm_autoidle;
|
||||
u32 dss_cm_autoidle;
|
||||
u32 cam_cm_autoidle;
|
||||
u32 per_cm_autoidle;
|
||||
u32 usbhost_cm_autoidle;
|
||||
u32 sgx_cm_sleepdep;
|
||||
u32 dss_cm_sleepdep;
|
||||
u32 cam_cm_sleepdep;
|
||||
u32 per_cm_sleepdep;
|
||||
u32 usbhost_cm_sleepdep;
|
||||
u32 cm_clkout_ctrl;
|
||||
u32 prm_clkout_ctrl;
|
||||
u32 sgx_pm_wkdep;
|
||||
u32 dss_pm_wkdep;
|
||||
u32 cam_pm_wkdep;
|
||||
u32 per_pm_wkdep;
|
||||
u32 neon_pm_wkdep;
|
||||
u32 usbhost_pm_wkdep;
|
||||
u32 core_pm_mpugrpsel1;
|
||||
u32 iva2_pm_ivagrpsel1;
|
||||
u32 core_pm_mpugrpsel3;
|
||||
u32 core_pm_ivagrpsel3;
|
||||
u32 wkup_pm_mpugrpsel;
|
||||
u32 wkup_pm_ivagrpsel;
|
||||
u32 per_pm_mpugrpsel;
|
||||
u32 per_pm_ivagrpsel;
|
||||
u32 wkup_pm_wken;
|
||||
};
|
||||
|
||||
static struct omap3_prcm_regs prcm_context;
|
||||
|
||||
u32 omap_prcm_get_reset_sources(void)
|
||||
{
|
||||
/* XXX This presumably needs modification for 34XX */
|
||||
if (cpu_is_omap24xx() || cpu_is_omap34xx())
|
||||
return prm_read_mod_reg(WKUP_MOD, OMAP2_RM_RSTST) & 0x7f;
|
||||
return omap2_prm_read_mod_reg(WKUP_MOD, OMAP2_RM_RSTST) & 0x7f;
|
||||
if (cpu_is_omap44xx())
|
||||
return prm_read_mod_reg(WKUP_MOD, OMAP4_RM_RSTST) & 0x7f;
|
||||
return omap2_prm_read_mod_reg(WKUP_MOD, OMAP4_RM_RSTST) & 0x7f;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -143,126 +66,46 @@ void omap_prcm_arch_reset(char mode, const char *cmd)
|
|||
|
||||
prcm_offs = WKUP_MOD;
|
||||
} else if (cpu_is_omap34xx()) {
|
||||
u32 l;
|
||||
|
||||
prcm_offs = OMAP3430_GR_MOD;
|
||||
l = ('B' << 24) | ('M' << 16) | (cmd ? (u8)*cmd : 0);
|
||||
/* Reserve the first word in scratchpad for communicating
|
||||
* with the boot ROM. A pointer to a data structure
|
||||
* describing the boot process can be stored there,
|
||||
* cf. OMAP34xx TRM, Initialization / Software Booting
|
||||
* Configuration. */
|
||||
omap_writel(l, OMAP343X_SCRATCHPAD + 4);
|
||||
} else if (cpu_is_omap44xx())
|
||||
prcm_offs = OMAP4430_PRM_DEVICE_MOD;
|
||||
else
|
||||
omap3_ctrl_write_boot_mode((cmd ? (u8)*cmd : 0));
|
||||
} else if (cpu_is_omap44xx()) {
|
||||
omap4_prm_global_warm_sw_reset(); /* never returns */
|
||||
} else {
|
||||
WARN_ON(1);
|
||||
}
|
||||
|
||||
if (cpu_is_omap24xx() || cpu_is_omap34xx())
|
||||
prm_set_mod_reg_bits(OMAP_RST_DPLL3_MASK, prcm_offs,
|
||||
OMAP2_RM_RSTCTRL);
|
||||
if (cpu_is_omap44xx())
|
||||
prm_set_mod_reg_bits(OMAP4430_RST_GLOBAL_WARM_SW_MASK,
|
||||
prcm_offs, OMAP4_RM_RSTCTRL);
|
||||
}
|
||||
/*
|
||||
* As per Errata i520, in some cases, user will not be able to
|
||||
* access DDR memory after warm-reset.
|
||||
* This situation occurs while the warm-reset happens during a read
|
||||
* access to DDR memory. In that particular condition, DDR memory
|
||||
* does not respond to a corrupted read command due to the warm
|
||||
* reset occurrence but SDRC is waiting for read completion.
|
||||
* SDRC is not sensitive to the warm reset, but the interconnect is
|
||||
* reset on the fly, thus causing a misalignment between SDRC logic,
|
||||
* interconnect logic and DDR memory state.
|
||||
* WORKAROUND:
|
||||
* Steps to perform before a Warm reset is trigged:
|
||||
* 1. enable self-refresh on idle request
|
||||
* 2. put SDRC in idle
|
||||
* 3. wait until SDRC goes to idle
|
||||
* 4. generate SW reset (Global SW reset)
|
||||
*
|
||||
* Steps to be performed after warm reset occurs (in bootloader):
|
||||
* if HW warm reset is the source, apply below steps before any
|
||||
* accesses to SDRAM:
|
||||
* 1. Reset SMS and SDRC and wait till reset is complete
|
||||
* 2. Re-initialize SMS, SDRC and memory
|
||||
*
|
||||
* NOTE: Above work around is required only if arch reset is implemented
|
||||
* using Global SW reset(GLOBAL_SW_RST). DPLL3 reset does not need
|
||||
* the WA since it resets SDRC as well as part of cold reset.
|
||||
*/
|
||||
|
||||
static inline u32 __omap_prcm_read(void __iomem *base, s16 module, u16 reg)
|
||||
{
|
||||
BUG_ON(!base);
|
||||
return __raw_readl(base + module + reg);
|
||||
}
|
||||
|
||||
static inline void __omap_prcm_write(u32 value, void __iomem *base,
|
||||
s16 module, u16 reg)
|
||||
{
|
||||
BUG_ON(!base);
|
||||
__raw_writel(value, base + module + reg);
|
||||
}
|
||||
|
||||
/* Read a register in a PRM module */
|
||||
u32 prm_read_mod_reg(s16 module, u16 idx)
|
||||
{
|
||||
return __omap_prcm_read(prm_base, module, idx);
|
||||
}
|
||||
|
||||
/* Write into a register in a PRM module */
|
||||
void prm_write_mod_reg(u32 val, s16 module, u16 idx)
|
||||
{
|
||||
__omap_prcm_write(val, prm_base, module, idx);
|
||||
}
|
||||
|
||||
/* Read-modify-write a register in a PRM module. Caller must lock */
|
||||
u32 prm_rmw_mod_reg_bits(u32 mask, u32 bits, s16 module, s16 idx)
|
||||
{
|
||||
u32 v;
|
||||
|
||||
v = prm_read_mod_reg(module, idx);
|
||||
v &= ~mask;
|
||||
v |= bits;
|
||||
prm_write_mod_reg(v, module, idx);
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
/* Read a PRM register, AND it, and shift the result down to bit 0 */
|
||||
u32 prm_read_mod_bits_shift(s16 domain, s16 idx, u32 mask)
|
||||
{
|
||||
u32 v;
|
||||
|
||||
v = prm_read_mod_reg(domain, idx);
|
||||
v &= mask;
|
||||
v >>= __ffs(mask);
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
/* Read a PRM register, AND it, and shift the result down to bit 0 */
|
||||
u32 omap4_prm_read_bits_shift(void __iomem *reg, u32 mask)
|
||||
{
|
||||
u32 v;
|
||||
|
||||
v = __raw_readl(reg);
|
||||
v &= mask;
|
||||
v >>= __ffs(mask);
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
/* Read-modify-write a register in a PRM module. Caller must lock */
|
||||
u32 omap4_prm_rmw_reg_bits(u32 mask, u32 bits, void __iomem *reg)
|
||||
{
|
||||
u32 v;
|
||||
|
||||
v = __raw_readl(reg);
|
||||
v &= ~mask;
|
||||
v |= bits;
|
||||
__raw_writel(v, reg);
|
||||
|
||||
return v;
|
||||
}
|
||||
/* Read a register in a CM module */
|
||||
u32 cm_read_mod_reg(s16 module, u16 idx)
|
||||
{
|
||||
return __omap_prcm_read(cm_base, module, idx);
|
||||
}
|
||||
|
||||
/* Write into a register in a CM module */
|
||||
void cm_write_mod_reg(u32 val, s16 module, u16 idx)
|
||||
{
|
||||
__omap_prcm_write(val, cm_base, module, idx);
|
||||
}
|
||||
|
||||
/* Read-modify-write a register in a CM module. Caller must lock */
|
||||
u32 cm_rmw_mod_reg_bits(u32 mask, u32 bits, s16 module, s16 idx)
|
||||
{
|
||||
u32 v;
|
||||
|
||||
v = cm_read_mod_reg(module, idx);
|
||||
v &= ~mask;
|
||||
v |= bits;
|
||||
cm_write_mod_reg(v, module, idx);
|
||||
|
||||
return v;
|
||||
/* XXX should be moved to some OMAP2/3 specific code */
|
||||
omap2_prm_set_mod_reg_bits(OMAP_RST_DPLL3_MASK, prcm_offs,
|
||||
OMAP2_RM_RSTCTRL);
|
||||
omap2_prm_read_mod_reg(prcm_offs, OMAP2_RM_RSTCTRL); /* OCP barrier */
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -274,6 +117,9 @@ u32 cm_rmw_mod_reg_bits(u32 mask, u32 bits, s16 module, s16 idx)
|
|||
*
|
||||
* Returns 1 if the module indicated readiness in time, or 0 if it
|
||||
* failed to enable in roughly MAX_MODULE_ENABLE_WAIT microseconds.
|
||||
*
|
||||
* XXX This function is deprecated. It should be removed once the
|
||||
* hwmod conversion is complete.
|
||||
*/
|
||||
int omap2_cm_wait_idlest(void __iomem *reg, u32 mask, u8 idlest,
|
||||
const char *name)
|
||||
|
@ -316,303 +162,3 @@ void __init omap2_set_globals_prcm(struct omap_globals *omap2_globals)
|
|||
WARN_ON(!cm2_base);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ARCH_OMAP3
|
||||
void omap3_prcm_save_context(void)
|
||||
{
|
||||
prcm_context.control_padconf_sys_nirq =
|
||||
omap_ctrl_readl(OMAP343X_CONTROL_PADCONF_SYSNIRQ);
|
||||
prcm_context.iva2_cm_clksel1 =
|
||||
cm_read_mod_reg(OMAP3430_IVA2_MOD, CM_CLKSEL1);
|
||||
prcm_context.iva2_cm_clksel2 =
|
||||
cm_read_mod_reg(OMAP3430_IVA2_MOD, CM_CLKSEL2);
|
||||
prcm_context.cm_sysconfig = __raw_readl(OMAP3430_CM_SYSCONFIG);
|
||||
prcm_context.sgx_cm_clksel =
|
||||
cm_read_mod_reg(OMAP3430ES2_SGX_MOD, CM_CLKSEL);
|
||||
prcm_context.dss_cm_clksel =
|
||||
cm_read_mod_reg(OMAP3430_DSS_MOD, CM_CLKSEL);
|
||||
prcm_context.cam_cm_clksel =
|
||||
cm_read_mod_reg(OMAP3430_CAM_MOD, CM_CLKSEL);
|
||||
prcm_context.per_cm_clksel =
|
||||
cm_read_mod_reg(OMAP3430_PER_MOD, CM_CLKSEL);
|
||||
prcm_context.emu_cm_clksel =
|
||||
cm_read_mod_reg(OMAP3430_EMU_MOD, CM_CLKSEL1);
|
||||
prcm_context.emu_cm_clkstctrl =
|
||||
cm_read_mod_reg(OMAP3430_EMU_MOD, OMAP2_CM_CLKSTCTRL);
|
||||
prcm_context.pll_cm_autoidle2 =
|
||||
cm_read_mod_reg(PLL_MOD, CM_AUTOIDLE2);
|
||||
prcm_context.pll_cm_clksel4 =
|
||||
cm_read_mod_reg(PLL_MOD, OMAP3430ES2_CM_CLKSEL4);
|
||||
prcm_context.pll_cm_clksel5 =
|
||||
cm_read_mod_reg(PLL_MOD, OMAP3430ES2_CM_CLKSEL5);
|
||||
prcm_context.pll_cm_clken2 =
|
||||
cm_read_mod_reg(PLL_MOD, OMAP3430ES2_CM_CLKEN2);
|
||||
prcm_context.cm_polctrl = __raw_readl(OMAP3430_CM_POLCTRL);
|
||||
prcm_context.iva2_cm_fclken =
|
||||
cm_read_mod_reg(OMAP3430_IVA2_MOD, CM_FCLKEN);
|
||||
prcm_context.iva2_cm_clken_pll = cm_read_mod_reg(OMAP3430_IVA2_MOD,
|
||||
OMAP3430_CM_CLKEN_PLL);
|
||||
prcm_context.core_cm_fclken1 =
|
||||
cm_read_mod_reg(CORE_MOD, CM_FCLKEN1);
|
||||
prcm_context.core_cm_fclken3 =
|
||||
cm_read_mod_reg(CORE_MOD, OMAP3430ES2_CM_FCLKEN3);
|
||||
prcm_context.sgx_cm_fclken =
|
||||
cm_read_mod_reg(OMAP3430ES2_SGX_MOD, CM_FCLKEN);
|
||||
prcm_context.wkup_cm_fclken =
|
||||
cm_read_mod_reg(WKUP_MOD, CM_FCLKEN);
|
||||
prcm_context.dss_cm_fclken =
|
||||
cm_read_mod_reg(OMAP3430_DSS_MOD, CM_FCLKEN);
|
||||
prcm_context.cam_cm_fclken =
|
||||
cm_read_mod_reg(OMAP3430_CAM_MOD, CM_FCLKEN);
|
||||
prcm_context.per_cm_fclken =
|
||||
cm_read_mod_reg(OMAP3430_PER_MOD, CM_FCLKEN);
|
||||
prcm_context.usbhost_cm_fclken =
|
||||
cm_read_mod_reg(OMAP3430ES2_USBHOST_MOD, CM_FCLKEN);
|
||||
prcm_context.core_cm_iclken1 =
|
||||
cm_read_mod_reg(CORE_MOD, CM_ICLKEN1);
|
||||
prcm_context.core_cm_iclken2 =
|
||||
cm_read_mod_reg(CORE_MOD, CM_ICLKEN2);
|
||||
prcm_context.core_cm_iclken3 =
|
||||
cm_read_mod_reg(CORE_MOD, CM_ICLKEN3);
|
||||
prcm_context.sgx_cm_iclken =
|
||||
cm_read_mod_reg(OMAP3430ES2_SGX_MOD, CM_ICLKEN);
|
||||
prcm_context.wkup_cm_iclken =
|
||||
cm_read_mod_reg(WKUP_MOD, CM_ICLKEN);
|
||||
prcm_context.dss_cm_iclken =
|
||||
cm_read_mod_reg(OMAP3430_DSS_MOD, CM_ICLKEN);
|
||||
prcm_context.cam_cm_iclken =
|
||||
cm_read_mod_reg(OMAP3430_CAM_MOD, CM_ICLKEN);
|
||||
prcm_context.per_cm_iclken =
|
||||
cm_read_mod_reg(OMAP3430_PER_MOD, CM_ICLKEN);
|
||||
prcm_context.usbhost_cm_iclken =
|
||||
cm_read_mod_reg(OMAP3430ES2_USBHOST_MOD, CM_ICLKEN);
|
||||
prcm_context.iva2_cm_autiidle2 =
|
||||
cm_read_mod_reg(OMAP3430_IVA2_MOD, CM_AUTOIDLE2);
|
||||
prcm_context.mpu_cm_autoidle2 =
|
||||
cm_read_mod_reg(MPU_MOD, CM_AUTOIDLE2);
|
||||
prcm_context.iva2_cm_clkstctrl =
|
||||
cm_read_mod_reg(OMAP3430_IVA2_MOD, OMAP2_CM_CLKSTCTRL);
|
||||
prcm_context.mpu_cm_clkstctrl =
|
||||
cm_read_mod_reg(MPU_MOD, OMAP2_CM_CLKSTCTRL);
|
||||
prcm_context.core_cm_clkstctrl =
|
||||
cm_read_mod_reg(CORE_MOD, OMAP2_CM_CLKSTCTRL);
|
||||
prcm_context.sgx_cm_clkstctrl =
|
||||
cm_read_mod_reg(OMAP3430ES2_SGX_MOD,
|
||||
OMAP2_CM_CLKSTCTRL);
|
||||
prcm_context.dss_cm_clkstctrl =
|
||||
cm_read_mod_reg(OMAP3430_DSS_MOD, OMAP2_CM_CLKSTCTRL);
|
||||
prcm_context.cam_cm_clkstctrl =
|
||||
cm_read_mod_reg(OMAP3430_CAM_MOD, OMAP2_CM_CLKSTCTRL);
|
||||
prcm_context.per_cm_clkstctrl =
|
||||
cm_read_mod_reg(OMAP3430_PER_MOD, OMAP2_CM_CLKSTCTRL);
|
||||
prcm_context.neon_cm_clkstctrl =
|
||||
cm_read_mod_reg(OMAP3430_NEON_MOD, OMAP2_CM_CLKSTCTRL);
|
||||
prcm_context.usbhost_cm_clkstctrl =
|
||||
cm_read_mod_reg(OMAP3430ES2_USBHOST_MOD,
|
||||
OMAP2_CM_CLKSTCTRL);
|
||||
prcm_context.core_cm_autoidle1 =
|
||||
cm_read_mod_reg(CORE_MOD, CM_AUTOIDLE1);
|
||||
prcm_context.core_cm_autoidle2 =
|
||||
cm_read_mod_reg(CORE_MOD, CM_AUTOIDLE2);
|
||||
prcm_context.core_cm_autoidle3 =
|
||||
cm_read_mod_reg(CORE_MOD, CM_AUTOIDLE3);
|
||||
prcm_context.wkup_cm_autoidle =
|
||||
cm_read_mod_reg(WKUP_MOD, CM_AUTOIDLE);
|
||||
prcm_context.dss_cm_autoidle =
|
||||
cm_read_mod_reg(OMAP3430_DSS_MOD, CM_AUTOIDLE);
|
||||
prcm_context.cam_cm_autoidle =
|
||||
cm_read_mod_reg(OMAP3430_CAM_MOD, CM_AUTOIDLE);
|
||||
prcm_context.per_cm_autoidle =
|
||||
cm_read_mod_reg(OMAP3430_PER_MOD, CM_AUTOIDLE);
|
||||
prcm_context.usbhost_cm_autoidle =
|
||||
cm_read_mod_reg(OMAP3430ES2_USBHOST_MOD, CM_AUTOIDLE);
|
||||
prcm_context.sgx_cm_sleepdep =
|
||||
cm_read_mod_reg(OMAP3430ES2_SGX_MOD, OMAP3430_CM_SLEEPDEP);
|
||||
prcm_context.dss_cm_sleepdep =
|
||||
cm_read_mod_reg(OMAP3430_DSS_MOD, OMAP3430_CM_SLEEPDEP);
|
||||
prcm_context.cam_cm_sleepdep =
|
||||
cm_read_mod_reg(OMAP3430_CAM_MOD, OMAP3430_CM_SLEEPDEP);
|
||||
prcm_context.per_cm_sleepdep =
|
||||
cm_read_mod_reg(OMAP3430_PER_MOD, OMAP3430_CM_SLEEPDEP);
|
||||
prcm_context.usbhost_cm_sleepdep =
|
||||
cm_read_mod_reg(OMAP3430ES2_USBHOST_MOD, OMAP3430_CM_SLEEPDEP);
|
||||
prcm_context.cm_clkout_ctrl = cm_read_mod_reg(OMAP3430_CCR_MOD,
|
||||
OMAP3_CM_CLKOUT_CTRL_OFFSET);
|
||||
prcm_context.prm_clkout_ctrl = prm_read_mod_reg(OMAP3430_CCR_MOD,
|
||||
OMAP3_PRM_CLKOUT_CTRL_OFFSET);
|
||||
prcm_context.sgx_pm_wkdep =
|
||||
prm_read_mod_reg(OMAP3430ES2_SGX_MOD, PM_WKDEP);
|
||||
prcm_context.dss_pm_wkdep =
|
||||
prm_read_mod_reg(OMAP3430_DSS_MOD, PM_WKDEP);
|
||||
prcm_context.cam_pm_wkdep =
|
||||
prm_read_mod_reg(OMAP3430_CAM_MOD, PM_WKDEP);
|
||||
prcm_context.per_pm_wkdep =
|
||||
prm_read_mod_reg(OMAP3430_PER_MOD, PM_WKDEP);
|
||||
prcm_context.neon_pm_wkdep =
|
||||
prm_read_mod_reg(OMAP3430_NEON_MOD, PM_WKDEP);
|
||||
prcm_context.usbhost_pm_wkdep =
|
||||
prm_read_mod_reg(OMAP3430ES2_USBHOST_MOD, PM_WKDEP);
|
||||
prcm_context.core_pm_mpugrpsel1 =
|
||||
prm_read_mod_reg(CORE_MOD, OMAP3430_PM_MPUGRPSEL1);
|
||||
prcm_context.iva2_pm_ivagrpsel1 =
|
||||
prm_read_mod_reg(OMAP3430_IVA2_MOD, OMAP3430_PM_IVAGRPSEL1);
|
||||
prcm_context.core_pm_mpugrpsel3 =
|
||||
prm_read_mod_reg(CORE_MOD, OMAP3430ES2_PM_MPUGRPSEL3);
|
||||
prcm_context.core_pm_ivagrpsel3 =
|
||||
prm_read_mod_reg(CORE_MOD, OMAP3430ES2_PM_IVAGRPSEL3);
|
||||
prcm_context.wkup_pm_mpugrpsel =
|
||||
prm_read_mod_reg(WKUP_MOD, OMAP3430_PM_MPUGRPSEL);
|
||||
prcm_context.wkup_pm_ivagrpsel =
|
||||
prm_read_mod_reg(WKUP_MOD, OMAP3430_PM_IVAGRPSEL);
|
||||
prcm_context.per_pm_mpugrpsel =
|
||||
prm_read_mod_reg(OMAP3430_PER_MOD, OMAP3430_PM_MPUGRPSEL);
|
||||
prcm_context.per_pm_ivagrpsel =
|
||||
prm_read_mod_reg(OMAP3430_PER_MOD, OMAP3430_PM_IVAGRPSEL);
|
||||
prcm_context.wkup_pm_wken = prm_read_mod_reg(WKUP_MOD, PM_WKEN);
|
||||
return;
|
||||
}
|
||||
|
||||
void omap3_prcm_restore_context(void)
|
||||
{
|
||||
omap_ctrl_writel(prcm_context.control_padconf_sys_nirq,
|
||||
OMAP343X_CONTROL_PADCONF_SYSNIRQ);
|
||||
cm_write_mod_reg(prcm_context.iva2_cm_clksel1, OMAP3430_IVA2_MOD,
|
||||
CM_CLKSEL1);
|
||||
cm_write_mod_reg(prcm_context.iva2_cm_clksel2, OMAP3430_IVA2_MOD,
|
||||
CM_CLKSEL2);
|
||||
__raw_writel(prcm_context.cm_sysconfig, OMAP3430_CM_SYSCONFIG);
|
||||
cm_write_mod_reg(prcm_context.sgx_cm_clksel, OMAP3430ES2_SGX_MOD,
|
||||
CM_CLKSEL);
|
||||
cm_write_mod_reg(prcm_context.dss_cm_clksel, OMAP3430_DSS_MOD,
|
||||
CM_CLKSEL);
|
||||
cm_write_mod_reg(prcm_context.cam_cm_clksel, OMAP3430_CAM_MOD,
|
||||
CM_CLKSEL);
|
||||
cm_write_mod_reg(prcm_context.per_cm_clksel, OMAP3430_PER_MOD,
|
||||
CM_CLKSEL);
|
||||
cm_write_mod_reg(prcm_context.emu_cm_clksel, OMAP3430_EMU_MOD,
|
||||
CM_CLKSEL1);
|
||||
cm_write_mod_reg(prcm_context.emu_cm_clkstctrl, OMAP3430_EMU_MOD,
|
||||
OMAP2_CM_CLKSTCTRL);
|
||||
cm_write_mod_reg(prcm_context.pll_cm_autoidle2, PLL_MOD,
|
||||
CM_AUTOIDLE2);
|
||||
cm_write_mod_reg(prcm_context.pll_cm_clksel4, PLL_MOD,
|
||||
OMAP3430ES2_CM_CLKSEL4);
|
||||
cm_write_mod_reg(prcm_context.pll_cm_clksel5, PLL_MOD,
|
||||
OMAP3430ES2_CM_CLKSEL5);
|
||||
cm_write_mod_reg(prcm_context.pll_cm_clken2, PLL_MOD,
|
||||
OMAP3430ES2_CM_CLKEN2);
|
||||
__raw_writel(prcm_context.cm_polctrl, OMAP3430_CM_POLCTRL);
|
||||
cm_write_mod_reg(prcm_context.iva2_cm_fclken, OMAP3430_IVA2_MOD,
|
||||
CM_FCLKEN);
|
||||
cm_write_mod_reg(prcm_context.iva2_cm_clken_pll, OMAP3430_IVA2_MOD,
|
||||
OMAP3430_CM_CLKEN_PLL);
|
||||
cm_write_mod_reg(prcm_context.core_cm_fclken1, CORE_MOD, CM_FCLKEN1);
|
||||
cm_write_mod_reg(prcm_context.core_cm_fclken3, CORE_MOD,
|
||||
OMAP3430ES2_CM_FCLKEN3);
|
||||
cm_write_mod_reg(prcm_context.sgx_cm_fclken, OMAP3430ES2_SGX_MOD,
|
||||
CM_FCLKEN);
|
||||
cm_write_mod_reg(prcm_context.wkup_cm_fclken, WKUP_MOD, CM_FCLKEN);
|
||||
cm_write_mod_reg(prcm_context.dss_cm_fclken, OMAP3430_DSS_MOD,
|
||||
CM_FCLKEN);
|
||||
cm_write_mod_reg(prcm_context.cam_cm_fclken, OMAP3430_CAM_MOD,
|
||||
CM_FCLKEN);
|
||||
cm_write_mod_reg(prcm_context.per_cm_fclken, OMAP3430_PER_MOD,
|
||||
CM_FCLKEN);
|
||||
cm_write_mod_reg(prcm_context.usbhost_cm_fclken,
|
||||
OMAP3430ES2_USBHOST_MOD, CM_FCLKEN);
|
||||
cm_write_mod_reg(prcm_context.core_cm_iclken1, CORE_MOD, CM_ICLKEN1);
|
||||
cm_write_mod_reg(prcm_context.core_cm_iclken2, CORE_MOD, CM_ICLKEN2);
|
||||
cm_write_mod_reg(prcm_context.core_cm_iclken3, CORE_MOD, CM_ICLKEN3);
|
||||
cm_write_mod_reg(prcm_context.sgx_cm_iclken, OMAP3430ES2_SGX_MOD,
|
||||
CM_ICLKEN);
|
||||
cm_write_mod_reg(prcm_context.wkup_cm_iclken, WKUP_MOD, CM_ICLKEN);
|
||||
cm_write_mod_reg(prcm_context.dss_cm_iclken, OMAP3430_DSS_MOD,
|
||||
CM_ICLKEN);
|
||||
cm_write_mod_reg(prcm_context.cam_cm_iclken, OMAP3430_CAM_MOD,
|
||||
CM_ICLKEN);
|
||||
cm_write_mod_reg(prcm_context.per_cm_iclken, OMAP3430_PER_MOD,
|
||||
CM_ICLKEN);
|
||||
cm_write_mod_reg(prcm_context.usbhost_cm_iclken,
|
||||
OMAP3430ES2_USBHOST_MOD, CM_ICLKEN);
|
||||
cm_write_mod_reg(prcm_context.iva2_cm_autiidle2, OMAP3430_IVA2_MOD,
|
||||
CM_AUTOIDLE2);
|
||||
cm_write_mod_reg(prcm_context.mpu_cm_autoidle2, MPU_MOD, CM_AUTOIDLE2);
|
||||
cm_write_mod_reg(prcm_context.iva2_cm_clkstctrl, OMAP3430_IVA2_MOD,
|
||||
OMAP2_CM_CLKSTCTRL);
|
||||
cm_write_mod_reg(prcm_context.mpu_cm_clkstctrl, MPU_MOD,
|
||||
OMAP2_CM_CLKSTCTRL);
|
||||
cm_write_mod_reg(prcm_context.core_cm_clkstctrl, CORE_MOD,
|
||||
OMAP2_CM_CLKSTCTRL);
|
||||
cm_write_mod_reg(prcm_context.sgx_cm_clkstctrl, OMAP3430ES2_SGX_MOD,
|
||||
OMAP2_CM_CLKSTCTRL);
|
||||
cm_write_mod_reg(prcm_context.dss_cm_clkstctrl, OMAP3430_DSS_MOD,
|
||||
OMAP2_CM_CLKSTCTRL);
|
||||
cm_write_mod_reg(prcm_context.cam_cm_clkstctrl, OMAP3430_CAM_MOD,
|
||||
OMAP2_CM_CLKSTCTRL);
|
||||
cm_write_mod_reg(prcm_context.per_cm_clkstctrl, OMAP3430_PER_MOD,
|
||||
OMAP2_CM_CLKSTCTRL);
|
||||
cm_write_mod_reg(prcm_context.neon_cm_clkstctrl, OMAP3430_NEON_MOD,
|
||||
OMAP2_CM_CLKSTCTRL);
|
||||
cm_write_mod_reg(prcm_context.usbhost_cm_clkstctrl,
|
||||
OMAP3430ES2_USBHOST_MOD, OMAP2_CM_CLKSTCTRL);
|
||||
cm_write_mod_reg(prcm_context.core_cm_autoidle1, CORE_MOD,
|
||||
CM_AUTOIDLE1);
|
||||
cm_write_mod_reg(prcm_context.core_cm_autoidle2, CORE_MOD,
|
||||
CM_AUTOIDLE2);
|
||||
cm_write_mod_reg(prcm_context.core_cm_autoidle3, CORE_MOD,
|
||||
CM_AUTOIDLE3);
|
||||
cm_write_mod_reg(prcm_context.wkup_cm_autoidle, WKUP_MOD, CM_AUTOIDLE);
|
||||
cm_write_mod_reg(prcm_context.dss_cm_autoidle, OMAP3430_DSS_MOD,
|
||||
CM_AUTOIDLE);
|
||||
cm_write_mod_reg(prcm_context.cam_cm_autoidle, OMAP3430_CAM_MOD,
|
||||
CM_AUTOIDLE);
|
||||
cm_write_mod_reg(prcm_context.per_cm_autoidle, OMAP3430_PER_MOD,
|
||||
CM_AUTOIDLE);
|
||||
cm_write_mod_reg(prcm_context.usbhost_cm_autoidle,
|
||||
OMAP3430ES2_USBHOST_MOD, CM_AUTOIDLE);
|
||||
cm_write_mod_reg(prcm_context.sgx_cm_sleepdep, OMAP3430ES2_SGX_MOD,
|
||||
OMAP3430_CM_SLEEPDEP);
|
||||
cm_write_mod_reg(prcm_context.dss_cm_sleepdep, OMAP3430_DSS_MOD,
|
||||
OMAP3430_CM_SLEEPDEP);
|
||||
cm_write_mod_reg(prcm_context.cam_cm_sleepdep, OMAP3430_CAM_MOD,
|
||||
OMAP3430_CM_SLEEPDEP);
|
||||
cm_write_mod_reg(prcm_context.per_cm_sleepdep, OMAP3430_PER_MOD,
|
||||
OMAP3430_CM_SLEEPDEP);
|
||||
cm_write_mod_reg(prcm_context.usbhost_cm_sleepdep,
|
||||
OMAP3430ES2_USBHOST_MOD, OMAP3430_CM_SLEEPDEP);
|
||||
cm_write_mod_reg(prcm_context.cm_clkout_ctrl, OMAP3430_CCR_MOD,
|
||||
OMAP3_CM_CLKOUT_CTRL_OFFSET);
|
||||
prm_write_mod_reg(prcm_context.prm_clkout_ctrl, OMAP3430_CCR_MOD,
|
||||
OMAP3_PRM_CLKOUT_CTRL_OFFSET);
|
||||
prm_write_mod_reg(prcm_context.sgx_pm_wkdep, OMAP3430ES2_SGX_MOD,
|
||||
PM_WKDEP);
|
||||
prm_write_mod_reg(prcm_context.dss_pm_wkdep, OMAP3430_DSS_MOD,
|
||||
PM_WKDEP);
|
||||
prm_write_mod_reg(prcm_context.cam_pm_wkdep, OMAP3430_CAM_MOD,
|
||||
PM_WKDEP);
|
||||
prm_write_mod_reg(prcm_context.per_pm_wkdep, OMAP3430_PER_MOD,
|
||||
PM_WKDEP);
|
||||
prm_write_mod_reg(prcm_context.neon_pm_wkdep, OMAP3430_NEON_MOD,
|
||||
PM_WKDEP);
|
||||
prm_write_mod_reg(prcm_context.usbhost_pm_wkdep,
|
||||
OMAP3430ES2_USBHOST_MOD, PM_WKDEP);
|
||||
prm_write_mod_reg(prcm_context.core_pm_mpugrpsel1, CORE_MOD,
|
||||
OMAP3430_PM_MPUGRPSEL1);
|
||||
prm_write_mod_reg(prcm_context.iva2_pm_ivagrpsel1, OMAP3430_IVA2_MOD,
|
||||
OMAP3430_PM_IVAGRPSEL1);
|
||||
prm_write_mod_reg(prcm_context.core_pm_mpugrpsel3, CORE_MOD,
|
||||
OMAP3430ES2_PM_MPUGRPSEL3);
|
||||
prm_write_mod_reg(prcm_context.core_pm_ivagrpsel3, CORE_MOD,
|
||||
OMAP3430ES2_PM_IVAGRPSEL3);
|
||||
prm_write_mod_reg(prcm_context.wkup_pm_mpugrpsel, WKUP_MOD,
|
||||
OMAP3430_PM_MPUGRPSEL);
|
||||
prm_write_mod_reg(prcm_context.wkup_pm_ivagrpsel, WKUP_MOD,
|
||||
OMAP3430_PM_IVAGRPSEL);
|
||||
prm_write_mod_reg(prcm_context.per_pm_mpugrpsel, OMAP3430_PER_MOD,
|
||||
OMAP3430_PM_MPUGRPSEL);
|
||||
prm_write_mod_reg(prcm_context.per_pm_ivagrpsel, OMAP3430_PER_MOD,
|
||||
OMAP3430_PM_IVAGRPSEL);
|
||||
prm_write_mod_reg(prcm_context.wkup_pm_wken, WKUP_MOD, PM_WKEN);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
|
42
arch/arm/mach-omap2/prcm44xx.h
Normal file
42
arch/arm/mach-omap2/prcm44xx.h
Normal file
|
@ -0,0 +1,42 @@
|
|||
/*
|
||||
* OMAP4 PRCM definitions
|
||||
*
|
||||
* Copyright (C) 2010 Texas Instruments, Inc.
|
||||
* Copyright (C) 2010 Nokia Corporation
|
||||
*
|
||||
* Paul Walmsley
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file contains macros and functions that are common to all of
|
||||
* the PRM/CM/PRCM blocks on the OMAP4 devices: PRM, CM1, CM2,
|
||||
* PRCM_MPU, SCRM
|
||||
*/
|
||||
|
||||
#ifndef __ARCH_ARM_MACH_OMAP2_PRCM44XX_H
|
||||
#define __ARCH_ARM_MACH_OMAP2_PRCM44XX_H
|
||||
|
||||
/*
|
||||
* OMAP4 PRCM partition IDs
|
||||
*
|
||||
* The numbers and order are arbitrary, but 0 is reserved for the
|
||||
* 'invalid' partition in case someone forgets to add a
|
||||
* .prcm_partition field.
|
||||
*/
|
||||
#define OMAP4430_INVALID_PRCM_PARTITION 0
|
||||
#define OMAP4430_PRM_PARTITION 1
|
||||
#define OMAP4430_CM1_PARTITION 2
|
||||
#define OMAP4430_CM2_PARTITION 3
|
||||
#define OMAP4430_SCRM_PARTITION 4
|
||||
#define OMAP4430_PRCM_MPU_PARTITION 5
|
||||
|
||||
/*
|
||||
* OMAP4_MAX_PRCM_PARTITIONS: set to the highest value of the PRCM partition
|
||||
* IDs, plus one
|
||||
*/
|
||||
#define OMAP4_MAX_PRCM_PARTITIONS 6
|
||||
|
||||
|
||||
#endif
|
45
arch/arm/mach-omap2/prcm_mpu44xx.c
Normal file
45
arch/arm/mach-omap2/prcm_mpu44xx.c
Normal file
|
@ -0,0 +1,45 @@
|
|||
/*
|
||||
* OMAP4 PRCM_MPU module functions
|
||||
*
|
||||
* Copyright (C) 2009 Nokia Corporation
|
||||
* Paul Walmsley
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include <plat/common.h>
|
||||
|
||||
#include "prcm_mpu44xx.h"
|
||||
#include "cm-regbits-44xx.h"
|
||||
|
||||
/* PRCM_MPU low-level functions */
|
||||
|
||||
u32 omap4_prcm_mpu_read_inst_reg(s16 inst, u16 reg)
|
||||
{
|
||||
return __raw_readl(OMAP44XX_PRCM_MPU_REGADDR(inst, reg));
|
||||
}
|
||||
|
||||
void omap4_prcm_mpu_write_inst_reg(u32 val, s16 inst, u16 reg)
|
||||
{
|
||||
__raw_writel(val, OMAP44XX_PRCM_MPU_REGADDR(inst, reg));
|
||||
}
|
||||
|
||||
u32 omap4_prcm_mpu_rmw_inst_reg_bits(u32 mask, u32 bits, s16 inst, s16 reg)
|
||||
{
|
||||
u32 v;
|
||||
|
||||
v = omap4_prcm_mpu_read_inst_reg(inst, reg);
|
||||
v &= ~mask;
|
||||
v |= bits;
|
||||
omap4_prcm_mpu_write_inst_reg(v, inst, reg);
|
||||
|
||||
return v;
|
||||
}
|
104
arch/arm/mach-omap2/prcm_mpu44xx.h
Normal file
104
arch/arm/mach-omap2/prcm_mpu44xx.h
Normal file
|
@ -0,0 +1,104 @@
|
|||
/*
|
||||
* OMAP44xx PRCM MPU instance offset macros
|
||||
*
|
||||
* Copyright (C) 2010 Texas Instruments, Inc.
|
||||
* Copyright (C) 2010 Nokia Corporation
|
||||
*
|
||||
* Paul Walmsley (paul@pwsan.com)
|
||||
* Rajendra Nayak (rnayak@ti.com)
|
||||
* Benoit Cousson (b-cousson@ti.com)
|
||||
*
|
||||
* This file is automatically generated from the OMAP hardware databases.
|
||||
* We respectfully ask that any modifications to this file be coordinated
|
||||
* with the public linux-omap@vger.kernel.org mailing list and the
|
||||
* authors above to ensure that the autogeneration scripts are kept
|
||||
* up-to-date with the file contents.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* XXX This file needs to be updated to align on one of "OMAP4", "OMAP44XX",
|
||||
* or "OMAP4430".
|
||||
*/
|
||||
|
||||
#ifndef __ARCH_ARM_MACH_OMAP2_PRCM_MPU44XX_H
|
||||
#define __ARCH_ARM_MACH_OMAP2_PRCM_MPU44XX_H
|
||||
|
||||
#define OMAP4430_PRCM_MPU_BASE 0x48243000
|
||||
|
||||
#define OMAP44XX_PRCM_MPU_REGADDR(inst, reg) \
|
||||
OMAP2_L4_IO_ADDRESS(OMAP4430_PRCM_MPU_BASE + (inst) + (reg))
|
||||
|
||||
/* PRCM_MPU instances */
|
||||
|
||||
#define OMAP4430_PRCM_MPU_OCP_SOCKET_PRCM_INST 0x0000
|
||||
#define OMAP4430_PRCM_MPU_DEVICE_PRM_INST 0x0200
|
||||
#define OMAP4430_PRCM_MPU_CPU0_INST 0x0400
|
||||
#define OMAP4430_PRCM_MPU_CPU1_INST 0x0800
|
||||
|
||||
/* PRCM_MPU clockdomain register offsets (from instance start) */
|
||||
#define OMAP4430_PRCM_MPU_CPU0_MPU_CDOFFS 0x0000
|
||||
#define OMAP4430_PRCM_MPU_CPU1_MPU_CDOFFS 0x0000
|
||||
|
||||
|
||||
/*
|
||||
* PRCM_MPU
|
||||
*
|
||||
* The PRCM_MPU is a local PRCM inside the MPU subsystem. For the PRCM (global)
|
||||
* point of view the PRCM_MPU is a single entity. It shares the same
|
||||
* programming model as the global PRCM and thus can be assimilate as two new
|
||||
* MOD inside the PRCM
|
||||
*/
|
||||
|
||||
/* PRCM_MPU.OCP_SOCKET_PRCM register offsets */
|
||||
#define OMAP4_REVISION_PRCM_OFFSET 0x0000
|
||||
#define OMAP4430_REVISION_PRCM OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_OCP_SOCKET_PRCM_INST, 0x0000)
|
||||
|
||||
/* PRCM_MPU.DEVICE_PRM register offsets */
|
||||
#define OMAP4_PRCM_MPU_PRM_RSTST_OFFSET 0x0000
|
||||
#define OMAP4430_PRCM_MPU_PRM_RSTST OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_DEVICE_PRM_INST, 0x0000)
|
||||
#define OMAP4_PRCM_MPU_PRM_PSCON_COUNT_OFFSET 0x0004
|
||||
#define OMAP4430_PRCM_MPU_PRM_PSCON_COUNT OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_DEVICE_PRM_INST, 0x0004)
|
||||
|
||||
/* PRCM_MPU.CPU0 register offsets */
|
||||
#define OMAP4_PM_CPU0_PWRSTCTRL_OFFSET 0x0000
|
||||
#define OMAP4430_PM_CPU0_PWRSTCTRL OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU0_INST, 0x0000)
|
||||
#define OMAP4_PM_CPU0_PWRSTST_OFFSET 0x0004
|
||||
#define OMAP4430_PM_CPU0_PWRSTST OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU0_INST, 0x0004)
|
||||
#define OMAP4_RM_CPU0_CPU0_CONTEXT_OFFSET 0x0008
|
||||
#define OMAP4430_RM_CPU0_CPU0_CONTEXT OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU0_INST, 0x0008)
|
||||
#define OMAP4_RM_CPU0_CPU0_RSTCTRL_OFFSET 0x000c
|
||||
#define OMAP4430_RM_CPU0_CPU0_RSTCTRL OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU0_INST, 0x000c)
|
||||
#define OMAP4_RM_CPU0_CPU0_RSTST_OFFSET 0x0010
|
||||
#define OMAP4430_RM_CPU0_CPU0_RSTST OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU0_INST, 0x0010)
|
||||
#define OMAP4_CM_CPU0_CPU0_CLKCTRL_OFFSET 0x0014
|
||||
#define OMAP4430_CM_CPU0_CPU0_CLKCTRL OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU0_INST, 0x0014)
|
||||
#define OMAP4_CM_CPU0_CLKSTCTRL_OFFSET 0x0018
|
||||
#define OMAP4430_CM_CPU0_CLKSTCTRL OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU0_INST, 0x0018)
|
||||
|
||||
/* PRCM_MPU.CPU1 register offsets */
|
||||
#define OMAP4_PM_CPU1_PWRSTCTRL_OFFSET 0x0000
|
||||
#define OMAP4430_PM_CPU1_PWRSTCTRL OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU1_INST, 0x0000)
|
||||
#define OMAP4_PM_CPU1_PWRSTST_OFFSET 0x0004
|
||||
#define OMAP4430_PM_CPU1_PWRSTST OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU1_INST, 0x0004)
|
||||
#define OMAP4_RM_CPU1_CPU1_CONTEXT_OFFSET 0x0008
|
||||
#define OMAP4430_RM_CPU1_CPU1_CONTEXT OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU1_INST, 0x0008)
|
||||
#define OMAP4_RM_CPU1_CPU1_RSTCTRL_OFFSET 0x000c
|
||||
#define OMAP4430_RM_CPU1_CPU1_RSTCTRL OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU1_INST, 0x000c)
|
||||
#define OMAP4_RM_CPU1_CPU1_RSTST_OFFSET 0x0010
|
||||
#define OMAP4430_RM_CPU1_CPU1_RSTST OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU1_INST, 0x0010)
|
||||
#define OMAP4_CM_CPU1_CPU1_CLKCTRL_OFFSET 0x0014
|
||||
#define OMAP4430_CM_CPU1_CPU1_CLKCTRL OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU1_INST, 0x0014)
|
||||
#define OMAP4_CM_CPU1_CLKSTCTRL_OFFSET 0x0018
|
||||
#define OMAP4430_CM_CPU1_CLKSTCTRL OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU1_INST, 0x0018)
|
||||
|
||||
/* Function prototypes */
|
||||
# ifndef __ASSEMBLER__
|
||||
extern u32 omap4_prcm_mpu_read_inst_reg(s16 inst, u16 idx);
|
||||
extern void omap4_prcm_mpu_write_inst_reg(u32 val, s16 inst, u16 idx);
|
||||
extern u32 omap4_prcm_mpu_rmw_inst_reg_bits(u32 mask, u32 bits, s16 inst,
|
||||
s16 idx);
|
||||
# endif
|
||||
|
||||
#endif
|
|
@ -14,7 +14,7 @@
|
|||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include "prm.h"
|
||||
#include "prm2xxx_3xxx.h"
|
||||
|
||||
/* Bits shared between registers */
|
||||
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
#ifndef __ARCH_ARM_MACH_OMAP2_PRM_REGBITS_34XX_H
|
||||
#define __ARCH_ARM_MACH_OMAP2_PRM_REGBITS_34XX_H
|
||||
|
||||
/*
|
||||
* OMAP3430 Power/Reset Management register bits
|
||||
*
|
||||
|
@ -13,8 +10,11 @@
|
|||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
#ifndef __ARCH_ARM_MACH_OMAP2_PRM_REGBITS_34XX_H
|
||||
#define __ARCH_ARM_MACH_OMAP2_PRM_REGBITS_34XX_H
|
||||
|
||||
#include "prm.h"
|
||||
|
||||
#include "prm2xxx_3xxx.h"
|
||||
|
||||
/* Shared register bits */
|
||||
|
||||
|
|
|
@ -22,8 +22,6 @@
|
|||
#ifndef __ARCH_ARM_MACH_OMAP2_PRM_REGBITS_44XX_H
|
||||
#define __ARCH_ARM_MACH_OMAP2_PRM_REGBITS_44XX_H
|
||||
|
||||
#include "prm.h"
|
||||
|
||||
|
||||
/*
|
||||
* Used by PRM_LDO_SRAM_CORE_SETUP, PRM_LDO_SRAM_IVA_SETUP,
|
||||
|
|
|
@ -1,321 +1,20 @@
|
|||
#ifndef __ARCH_ARM_MACH_OMAP2_PRM_H
|
||||
#define __ARCH_ARM_MACH_OMAP2_PRM_H
|
||||
|
||||
/*
|
||||
* OMAP2/3 Power/Reset Management (PRM) register definitions
|
||||
* OMAP2/3/4 Power/Reset Management (PRM) bitfield definitions
|
||||
*
|
||||
* Copyright (C) 2007-2009 Texas Instruments, Inc.
|
||||
* Copyright (C) 2010 Nokia Corporation
|
||||
*
|
||||
* Written by Paul Walmsley
|
||||
* Paul Walmsley
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
#ifndef __ARCH_ARM_MACH_OMAP2_PRM_H
|
||||
#define __ARCH_ARM_MACH_OMAP2_PRM_H
|
||||
|
||||
#include "prcm-common.h"
|
||||
|
||||
#define OMAP2420_PRM_REGADDR(module, reg) \
|
||||
OMAP2_L4_IO_ADDRESS(OMAP2420_PRM_BASE + (module) + (reg))
|
||||
#define OMAP2430_PRM_REGADDR(module, reg) \
|
||||
OMAP2_L4_IO_ADDRESS(OMAP2430_PRM_BASE + (module) + (reg))
|
||||
#define OMAP34XX_PRM_REGADDR(module, reg) \
|
||||
OMAP2_L4_IO_ADDRESS(OMAP3430_PRM_BASE + (module) + (reg))
|
||||
#define OMAP44XX_PRM_REGADDR(module, reg) \
|
||||
OMAP2_L4_IO_ADDRESS(OMAP4430_PRM_BASE + (module) + (reg))
|
||||
#define OMAP44XX_PRCM_MPU_REGADDR(module, reg) \
|
||||
OMAP2_L4_IO_ADDRESS(OMAP4430_PRCM_MPU_BASE + (module) + (reg))
|
||||
|
||||
#include "prm44xx.h"
|
||||
|
||||
/*
|
||||
* Architecture-specific global PRM registers
|
||||
* Use __raw_{read,write}l() with these registers.
|
||||
*
|
||||
* With a few exceptions, these are the register names beginning with
|
||||
* PRCM_* on 24xx, and PRM_* on 34xx. (The exceptions are the
|
||||
* IRQSTATUS and IRQENABLE bits.)
|
||||
*
|
||||
*/
|
||||
|
||||
#define OMAP2_PRCM_REVISION_OFFSET 0x0000
|
||||
#define OMAP2420_PRCM_REVISION OMAP2420_PRM_REGADDR(OCP_MOD, 0x0000)
|
||||
#define OMAP2_PRCM_SYSCONFIG_OFFSET 0x0010
|
||||
#define OMAP2420_PRCM_SYSCONFIG OMAP2420_PRM_REGADDR(OCP_MOD, 0x0010)
|
||||
|
||||
#define OMAP2_PRCM_IRQSTATUS_MPU_OFFSET 0x0018
|
||||
#define OMAP2420_PRCM_IRQSTATUS_MPU OMAP2420_PRM_REGADDR(OCP_MOD, 0x0018)
|
||||
#define OMAP2_PRCM_IRQENABLE_MPU_OFFSET 0x001c
|
||||
#define OMAP2420_PRCM_IRQENABLE_MPU OMAP2420_PRM_REGADDR(OCP_MOD, 0x001c)
|
||||
|
||||
#define OMAP2_PRCM_VOLTCTRL_OFFSET 0x0050
|
||||
#define OMAP2420_PRCM_VOLTCTRL OMAP2420_PRM_REGADDR(OCP_MOD, 0x0050)
|
||||
#define OMAP2_PRCM_VOLTST_OFFSET 0x0054
|
||||
#define OMAP2420_PRCM_VOLTST OMAP2420_PRM_REGADDR(OCP_MOD, 0x0054)
|
||||
#define OMAP2_PRCM_CLKSRC_CTRL_OFFSET 0x0060
|
||||
#define OMAP2420_PRCM_CLKSRC_CTRL OMAP2420_PRM_REGADDR(OCP_MOD, 0x0060)
|
||||
#define OMAP2_PRCM_CLKOUT_CTRL_OFFSET 0x0070
|
||||
#define OMAP2420_PRCM_CLKOUT_CTRL OMAP2420_PRM_REGADDR(OCP_MOD, 0x0070)
|
||||
#define OMAP2_PRCM_CLKEMUL_CTRL_OFFSET 0x0078
|
||||
#define OMAP2420_PRCM_CLKEMUL_CTRL OMAP2420_PRM_REGADDR(OCP_MOD, 0x0078)
|
||||
#define OMAP2_PRCM_CLKCFG_CTRL_OFFSET 0x0080
|
||||
#define OMAP2420_PRCM_CLKCFG_CTRL OMAP2420_PRM_REGADDR(OCP_MOD, 0x0080)
|
||||
#define OMAP2_PRCM_CLKCFG_STATUS_OFFSET 0x0084
|
||||
#define OMAP2420_PRCM_CLKCFG_STATUS OMAP2420_PRM_REGADDR(OCP_MOD, 0x0084)
|
||||
#define OMAP2_PRCM_VOLTSETUP_OFFSET 0x0090
|
||||
#define OMAP2420_PRCM_VOLTSETUP OMAP2420_PRM_REGADDR(OCP_MOD, 0x0090)
|
||||
#define OMAP2_PRCM_CLKSSETUP_OFFSET 0x0094
|
||||
#define OMAP2420_PRCM_CLKSSETUP OMAP2420_PRM_REGADDR(OCP_MOD, 0x0094)
|
||||
#define OMAP2_PRCM_POLCTRL_OFFSET 0x0098
|
||||
#define OMAP2420_PRCM_POLCTRL OMAP2420_PRM_REGADDR(OCP_MOD, 0x0098)
|
||||
|
||||
#define OMAP2430_PRCM_REVISION OMAP2430_PRM_REGADDR(OCP_MOD, 0x0000)
|
||||
#define OMAP2430_PRCM_SYSCONFIG OMAP2430_PRM_REGADDR(OCP_MOD, 0x0010)
|
||||
|
||||
#define OMAP2430_PRCM_IRQSTATUS_MPU OMAP2430_PRM_REGADDR(OCP_MOD, 0x0018)
|
||||
#define OMAP2430_PRCM_IRQENABLE_MPU OMAP2430_PRM_REGADDR(OCP_MOD, 0x001c)
|
||||
|
||||
#define OMAP2430_PRCM_VOLTCTRL OMAP2430_PRM_REGADDR(OCP_MOD, 0x0050)
|
||||
#define OMAP2430_PRCM_VOLTST OMAP2430_PRM_REGADDR(OCP_MOD, 0x0054)
|
||||
#define OMAP2430_PRCM_CLKSRC_CTRL OMAP2430_PRM_REGADDR(OCP_MOD, 0x0060)
|
||||
#define OMAP2430_PRCM_CLKOUT_CTRL OMAP2430_PRM_REGADDR(OCP_MOD, 0x0070)
|
||||
#define OMAP2430_PRCM_CLKEMUL_CTRL OMAP2430_PRM_REGADDR(OCP_MOD, 0x0078)
|
||||
#define OMAP2430_PRCM_CLKCFG_CTRL OMAP2430_PRM_REGADDR(OCP_MOD, 0x0080)
|
||||
#define OMAP2430_PRCM_CLKCFG_STATUS OMAP2430_PRM_REGADDR(OCP_MOD, 0x0084)
|
||||
#define OMAP2430_PRCM_VOLTSETUP OMAP2430_PRM_REGADDR(OCP_MOD, 0x0090)
|
||||
#define OMAP2430_PRCM_CLKSSETUP OMAP2430_PRM_REGADDR(OCP_MOD, 0x0094)
|
||||
#define OMAP2430_PRCM_POLCTRL OMAP2430_PRM_REGADDR(OCP_MOD, 0x0098)
|
||||
|
||||
#define OMAP3_PRM_REVISION_OFFSET 0x0004
|
||||
#define OMAP3430_PRM_REVISION OMAP34XX_PRM_REGADDR(OCP_MOD, 0x0004)
|
||||
#define OMAP3_PRM_SYSCONFIG_OFFSET 0x0014
|
||||
#define OMAP3430_PRM_SYSCONFIG OMAP34XX_PRM_REGADDR(OCP_MOD, 0x0014)
|
||||
|
||||
#define OMAP3_PRM_IRQSTATUS_MPU_OFFSET 0x0018
|
||||
#define OMAP3430_PRM_IRQSTATUS_MPU OMAP34XX_PRM_REGADDR(OCP_MOD, 0x0018)
|
||||
#define OMAP3_PRM_IRQENABLE_MPU_OFFSET 0x001c
|
||||
#define OMAP3430_PRM_IRQENABLE_MPU OMAP34XX_PRM_REGADDR(OCP_MOD, 0x001c)
|
||||
|
||||
|
||||
#define OMAP3_PRM_VC_SMPS_SA_OFFSET 0x0020
|
||||
#define OMAP3430_PRM_VC_SMPS_SA OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0020)
|
||||
#define OMAP3_PRM_VC_SMPS_VOL_RA_OFFSET 0x0024
|
||||
#define OMAP3430_PRM_VC_SMPS_VOL_RA OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0024)
|
||||
#define OMAP3_PRM_VC_SMPS_CMD_RA_OFFSET 0x0028
|
||||
#define OMAP3430_PRM_VC_SMPS_CMD_RA OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0028)
|
||||
#define OMAP3_PRM_VC_CMD_VAL_0_OFFSET 0x002c
|
||||
#define OMAP3430_PRM_VC_CMD_VAL_0 OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x002c)
|
||||
#define OMAP3_PRM_VC_CMD_VAL_1_OFFSET 0x0030
|
||||
#define OMAP3430_PRM_VC_CMD_VAL_1 OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0030)
|
||||
#define OMAP3_PRM_VC_CH_CONF_OFFSET 0x0034
|
||||
#define OMAP3430_PRM_VC_CH_CONF OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0034)
|
||||
#define OMAP3_PRM_VC_I2C_CFG_OFFSET 0x0038
|
||||
#define OMAP3430_PRM_VC_I2C_CFG OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0038)
|
||||
#define OMAP3_PRM_VC_BYPASS_VAL_OFFSET 0x003c
|
||||
#define OMAP3430_PRM_VC_BYPASS_VAL OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x003c)
|
||||
#define OMAP3_PRM_RSTCTRL_OFFSET 0x0050
|
||||
#define OMAP3430_PRM_RSTCTRL OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0050)
|
||||
#define OMAP3_PRM_RSTTIME_OFFSET 0x0054
|
||||
#define OMAP3430_PRM_RSTTIME OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0054)
|
||||
#define OMAP3_PRM_RSTST_OFFSET 0x0058
|
||||
#define OMAP3430_PRM_RSTST OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0058)
|
||||
#define OMAP3_PRM_VOLTCTRL_OFFSET 0x0060
|
||||
#define OMAP3430_PRM_VOLTCTRL OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0060)
|
||||
#define OMAP3_PRM_SRAM_PCHARGE_OFFSET 0x0064
|
||||
#define OMAP3430_PRM_SRAM_PCHARGE OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0064)
|
||||
#define OMAP3_PRM_CLKSRC_CTRL_OFFSET 0x0070
|
||||
#define OMAP3430_PRM_CLKSRC_CTRL OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0070)
|
||||
#define OMAP3_PRM_VOLTSETUP1_OFFSET 0x0090
|
||||
#define OMAP3430_PRM_VOLTSETUP1 OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0090)
|
||||
#define OMAP3_PRM_VOLTOFFSET_OFFSET 0x0094
|
||||
#define OMAP3430_PRM_VOLTOFFSET OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0094)
|
||||
#define OMAP3_PRM_CLKSETUP_OFFSET 0x0098
|
||||
#define OMAP3430_PRM_CLKSETUP OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0098)
|
||||
#define OMAP3_PRM_POLCTRL_OFFSET 0x009c
|
||||
#define OMAP3430_PRM_POLCTRL OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x009c)
|
||||
#define OMAP3_PRM_VOLTSETUP2_OFFSET 0x00a0
|
||||
#define OMAP3430_PRM_VOLTSETUP2 OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00a0)
|
||||
#define OMAP3_PRM_VP1_CONFIG_OFFSET 0x00b0
|
||||
#define OMAP3430_PRM_VP1_CONFIG OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00b0)
|
||||
#define OMAP3_PRM_VP1_VSTEPMIN_OFFSET 0x00b4
|
||||
#define OMAP3430_PRM_VP1_VSTEPMIN OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00b4)
|
||||
#define OMAP3_PRM_VP1_VSTEPMAX_OFFSET 0x00b8
|
||||
#define OMAP3430_PRM_VP1_VSTEPMAX OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00b8)
|
||||
#define OMAP3_PRM_VP1_VLIMITTO_OFFSET 0x00bc
|
||||
#define OMAP3430_PRM_VP1_VLIMITTO OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00bc)
|
||||
#define OMAP3_PRM_VP1_VOLTAGE_OFFSET 0x00c0
|
||||
#define OMAP3430_PRM_VP1_VOLTAGE OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00c0)
|
||||
#define OMAP3_PRM_VP1_STATUS_OFFSET 0x00c4
|
||||
#define OMAP3430_PRM_VP1_STATUS OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00c4)
|
||||
#define OMAP3_PRM_VP2_CONFIG_OFFSET 0x00d0
|
||||
#define OMAP3430_PRM_VP2_CONFIG OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00d0)
|
||||
#define OMAP3_PRM_VP2_VSTEPMIN_OFFSET 0x00d4
|
||||
#define OMAP3430_PRM_VP2_VSTEPMIN OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00d4)
|
||||
#define OMAP3_PRM_VP2_VSTEPMAX_OFFSET 0x00d8
|
||||
#define OMAP3430_PRM_VP2_VSTEPMAX OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00d8)
|
||||
#define OMAP3_PRM_VP2_VLIMITTO_OFFSET 0x00dc
|
||||
#define OMAP3430_PRM_VP2_VLIMITTO OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00dc)
|
||||
#define OMAP3_PRM_VP2_VOLTAGE_OFFSET 0x00e0
|
||||
#define OMAP3430_PRM_VP2_VOLTAGE OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00e0)
|
||||
#define OMAP3_PRM_VP2_STATUS_OFFSET 0x00e4
|
||||
#define OMAP3430_PRM_VP2_STATUS OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00e4)
|
||||
|
||||
#define OMAP3_PRM_CLKSEL_OFFSET 0x0040
|
||||
#define OMAP3430_PRM_CLKSEL OMAP34XX_PRM_REGADDR(OMAP3430_CCR_MOD, 0x0040)
|
||||
#define OMAP3_PRM_CLKOUT_CTRL_OFFSET 0x0070
|
||||
#define OMAP3430_PRM_CLKOUT_CTRL OMAP34XX_PRM_REGADDR(OMAP3430_CCR_MOD, 0x0070)
|
||||
|
||||
/*
|
||||
* Module specific PRM registers from PRM_BASE + domain offset
|
||||
*
|
||||
* Use prm_{read,write}_mod_reg() with these registers.
|
||||
*
|
||||
* With a few exceptions, these are the register names beginning with
|
||||
* {PM,RM}_* on both architectures. (The exceptions are the IRQSTATUS
|
||||
* and IRQENABLE bits.)
|
||||
*
|
||||
*/
|
||||
|
||||
/* Registers appearing on both 24xx and 34xx */
|
||||
|
||||
#define OMAP2_RM_RSTCTRL 0x0050
|
||||
#define OMAP2_RM_RSTTIME 0x0054
|
||||
#define OMAP2_RM_RSTST 0x0058
|
||||
#define OMAP2_PM_PWSTCTRL 0x00e0
|
||||
#define OMAP2_PM_PWSTST 0x00e4
|
||||
|
||||
#define PM_WKEN 0x00a0
|
||||
#define PM_WKEN1 PM_WKEN
|
||||
#define PM_WKST 0x00b0
|
||||
#define PM_WKST1 PM_WKST
|
||||
#define PM_WKDEP 0x00c8
|
||||
#define PM_EVGENCTRL 0x00d4
|
||||
#define PM_EVGENONTIM 0x00d8
|
||||
#define PM_EVGENOFFTIM 0x00dc
|
||||
|
||||
/* Omap2 specific registers */
|
||||
#define OMAP24XX_PM_WKEN2 0x00a4
|
||||
#define OMAP24XX_PM_WKST2 0x00b4
|
||||
|
||||
#define OMAP24XX_PRCM_IRQSTATUS_DSP 0x00f0 /* IVA mod */
|
||||
#define OMAP24XX_PRCM_IRQENABLE_DSP 0x00f4 /* IVA mod */
|
||||
#define OMAP24XX_PRCM_IRQSTATUS_IVA 0x00f8
|
||||
#define OMAP24XX_PRCM_IRQENABLE_IVA 0x00fc
|
||||
|
||||
/* Omap3 specific registers */
|
||||
#define OMAP3430ES2_PM_WKEN3 0x00f0
|
||||
#define OMAP3430ES2_PM_WKST3 0x00b8
|
||||
|
||||
#define OMAP3430_PM_MPUGRPSEL 0x00a4
|
||||
#define OMAP3430_PM_MPUGRPSEL1 OMAP3430_PM_MPUGRPSEL
|
||||
#define OMAP3430ES2_PM_MPUGRPSEL3 0x00f8
|
||||
|
||||
#define OMAP3430_PM_IVAGRPSEL 0x00a8
|
||||
#define OMAP3430_PM_IVAGRPSEL1 OMAP3430_PM_IVAGRPSEL
|
||||
#define OMAP3430ES2_PM_IVAGRPSEL3 0x00f4
|
||||
|
||||
#define OMAP3430_PM_PREPWSTST 0x00e8
|
||||
|
||||
#define OMAP3430_PRM_IRQSTATUS_IVA2 0x00f8
|
||||
#define OMAP3430_PRM_IRQENABLE_IVA2 0x00fc
|
||||
|
||||
/* Omap4 specific registers */
|
||||
#define OMAP4_RM_RSTCTRL 0x0000
|
||||
#define OMAP4_RM_RSTTIME 0x0004
|
||||
#define OMAP4_RM_RSTST 0x0008
|
||||
#define OMAP4_PM_PWSTCTRL 0x0000
|
||||
#define OMAP4_PM_PWSTST 0x0004
|
||||
|
||||
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
/* Power/reset management domain register get/set */
|
||||
extern u32 prm_read_mod_reg(s16 module, u16 idx);
|
||||
extern void prm_write_mod_reg(u32 val, s16 module, u16 idx);
|
||||
extern u32 prm_rmw_mod_reg_bits(u32 mask, u32 bits, s16 module, s16 idx);
|
||||
|
||||
/* Read-modify-write bits in a PRM register (by domain) */
|
||||
static inline u32 prm_set_mod_reg_bits(u32 bits, s16 module, s16 idx)
|
||||
{
|
||||
return prm_rmw_mod_reg_bits(bits, bits, module, idx);
|
||||
}
|
||||
|
||||
static inline u32 prm_clear_mod_reg_bits(u32 bits, s16 module, s16 idx)
|
||||
{
|
||||
return prm_rmw_mod_reg_bits(bits, 0x0, module, idx);
|
||||
}
|
||||
|
||||
/* These omap2_ PRM functions apply to both OMAP2 and 3 */
|
||||
int omap2_prm_is_hardreset_asserted(s16 prm_mod, u8 shift);
|
||||
int omap2_prm_assert_hardreset(s16 prm_mod, u8 shift);
|
||||
int omap2_prm_deassert_hardreset(s16 prm_mod, u8 shift);
|
||||
|
||||
int omap4_prm_is_hardreset_asserted(void __iomem *rstctrl_reg, u8 shift);
|
||||
int omap4_prm_assert_hardreset(void __iomem *rstctrl_reg, u8 shift);
|
||||
int omap4_prm_deassert_hardreset(void __iomem *rstctrl_reg, u8 shift);
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Bits common to specific registers
|
||||
*
|
||||
* The 3430 register and bit names are generally used,
|
||||
* since they tend to make more sense
|
||||
*/
|
||||
|
||||
/* PM_EVGENONTIM_MPU */
|
||||
/* Named PM_EVEGENONTIM_MPU on the 24XX */
|
||||
#define OMAP_ONTIMEVAL_SHIFT 0
|
||||
#define OMAP_ONTIMEVAL_MASK (0xffffffff << 0)
|
||||
|
||||
/* PM_EVGENOFFTIM_MPU */
|
||||
/* Named PM_EVEGENOFFTIM_MPU on the 24XX */
|
||||
#define OMAP_OFFTIMEVAL_SHIFT 0
|
||||
#define OMAP_OFFTIMEVAL_MASK (0xffffffff << 0)
|
||||
|
||||
/* PRM_CLKSETUP and PRCM_VOLTSETUP */
|
||||
/* Named PRCM_CLKSSETUP on the 24XX */
|
||||
#define OMAP_SETUP_TIME_SHIFT 0
|
||||
#define OMAP_SETUP_TIME_MASK (0xffff << 0)
|
||||
|
||||
/* PRM_CLKSRC_CTRL */
|
||||
/* Named PRCM_CLKSRC_CTRL on the 24XX */
|
||||
#define OMAP_SYSCLKDIV_SHIFT 6
|
||||
#define OMAP_SYSCLKDIV_MASK (0x3 << 6)
|
||||
#define OMAP_AUTOEXTCLKMODE_SHIFT 3
|
||||
#define OMAP_AUTOEXTCLKMODE_MASK (0x3 << 3)
|
||||
#define OMAP_SYSCLKSEL_SHIFT 0
|
||||
#define OMAP_SYSCLKSEL_MASK (0x3 << 0)
|
||||
|
||||
/* PM_EVGENCTRL_MPU */
|
||||
#define OMAP_OFFLOADMODE_SHIFT 3
|
||||
#define OMAP_OFFLOADMODE_MASK (0x3 << 3)
|
||||
#define OMAP_ONLOADMODE_SHIFT 1
|
||||
#define OMAP_ONLOADMODE_MASK (0x3 << 1)
|
||||
#define OMAP_ENABLE_MASK (1 << 0)
|
||||
|
||||
/* PRM_RSTTIME */
|
||||
/* Named RM_RSTTIME_WKUP on the 24xx */
|
||||
#define OMAP_RSTTIME2_SHIFT 8
|
||||
#define OMAP_RSTTIME2_MASK (0x1f << 8)
|
||||
#define OMAP_RSTTIME1_SHIFT 0
|
||||
#define OMAP_RSTTIME1_MASK (0xff << 0)
|
||||
|
||||
/* PRM_RSTCTRL */
|
||||
/* Named RM_RSTCTRL_WKUP on the 24xx */
|
||||
/* 2420 calls RST_DPLL3 'RST_DPLL' */
|
||||
#define OMAP_RST_DPLL3_MASK (1 << 2)
|
||||
#define OMAP_RST_GS_MASK (1 << 1)
|
||||
|
||||
|
||||
/*
|
||||
* Bits common to module-shared registers
|
||||
*
|
||||
* Not all registers of a particular type support all of these bits -
|
||||
* check TRM if you are unsure
|
||||
*/
|
||||
|
||||
/*
|
||||
* 24XX: PM_PWSTST_CORE, PM_PWSTST_GFX, PM_PWSTST_MPU, PM_PWSTST_DSP
|
||||
*
|
||||
|
@ -340,59 +39,6 @@ int omap4_prm_deassert_hardreset(void __iomem *rstctrl_reg, u8 shift);
|
|||
#define OMAP_POWERSTATEST_SHIFT 0
|
||||
#define OMAP_POWERSTATEST_MASK (0x3 << 0)
|
||||
|
||||
/*
|
||||
* 24XX: RM_RSTST_MPU and RM_RSTST_DSP - on 24XX, 'COREDOMAINWKUP_RST' is
|
||||
* called 'COREWKUP_RST'
|
||||
*
|
||||
* 3430: RM_RSTST_IVA2, RM_RSTST_MPU, RM_RSTST_GFX, RM_RSTST_DSS,
|
||||
* RM_RSTST_CAM, RM_RSTST_PER, RM_RSTST_NEON
|
||||
*/
|
||||
#define OMAP_COREDOMAINWKUP_RST_MASK (1 << 3)
|
||||
|
||||
/*
|
||||
* 24XX: RM_RSTST_MPU, RM_RSTST_GFX, RM_RSTST_DSP
|
||||
*
|
||||
* 2430: RM_RSTST_MDM
|
||||
*
|
||||
* 3430: RM_RSTST_CORE, RM_RSTST_EMU
|
||||
*/
|
||||
#define OMAP_DOMAINWKUP_RST_MASK (1 << 2)
|
||||
|
||||
/*
|
||||
* 24XX: RM_RSTST_MPU, RM_RSTST_WKUP, RM_RSTST_DSP
|
||||
* On 24XX, 'GLOBALWARM_RST' is called 'GLOBALWMPU_RST'.
|
||||
*
|
||||
* 2430: RM_RSTST_MDM
|
||||
*
|
||||
* 3430: RM_RSTST_CORE, RM_RSTST_EMU
|
||||
*/
|
||||
#define OMAP_GLOBALWARM_RST_MASK (1 << 1)
|
||||
#define OMAP_GLOBALCOLD_RST_MASK (1 << 0)
|
||||
|
||||
/*
|
||||
* 24XX: PM_WKDEP_GFX, PM_WKDEP_MPU, PM_WKDEP_CORE, PM_WKDEP_DSP
|
||||
* 2420 TRM sometimes uses "EN_WAKEUP" instead of "EN_WKUP"
|
||||
*
|
||||
* 2430: PM_WKDEP_MDM
|
||||
*
|
||||
* 3430: PM_WKDEP_IVA2, PM_WKDEP_GFX, PM_WKDEP_DSS, PM_WKDEP_CAM,
|
||||
* PM_WKDEP_PER
|
||||
*/
|
||||
#define OMAP_EN_WKUP_SHIFT 4
|
||||
#define OMAP_EN_WKUP_MASK (1 << 4)
|
||||
|
||||
/*
|
||||
* 24XX: PM_PWSTCTRL_MPU, PM_PWSTCTRL_CORE, PM_PWSTCTRL_GFX,
|
||||
* PM_PWSTCTRL_DSP
|
||||
*
|
||||
* 2430: PM_PWSTCTRL_MDM
|
||||
*
|
||||
* 3430: PM_PWSTCTRL_IVA2, PM_PWSTCTRL_CORE, PM_PWSTCTRL_GFX,
|
||||
* PM_PWSTCTRL_DSS, PM_PWSTCTRL_CAM, PM_PWSTCTRL_PER,
|
||||
* PM_PWSTCTRL_NEON
|
||||
*/
|
||||
#define OMAP_LOGICRETSTATE_MASK (1 << 2)
|
||||
|
||||
/*
|
||||
* 24XX: PM_PWSTCTRL_MPU, PM_PWSTCTRL_CORE, PM_PWSTCTRL_GFX,
|
||||
* PM_PWSTCTRL_DSP, PM_PWSTST_MPU
|
||||
|
@ -407,11 +53,4 @@ int omap4_prm_deassert_hardreset(void __iomem *rstctrl_reg, u8 shift);
|
|||
#define OMAP_POWERSTATE_MASK (0x3 << 0)
|
||||
|
||||
|
||||
/*
|
||||
* MAX_MODULE_HARDRESET_WAIT: Maximum microseconds to wait for an OMAP
|
||||
* submodule to exit hardreset
|
||||
*/
|
||||
#define MAX_MODULE_HARDRESET_WAIT 10000
|
||||
|
||||
|
||||
#endif
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue