OMAP2 PM: link clocks to clockdomains, use clkdm/pwrdm code
Subsystems (5)
Paul Walmsley
maintainercover OMAP2 PM: link clocks to clockdomains, use clkdm/pwrdm code
This series updates OMAP24xx power management to use the recent clockdomain and powerdomain code that was integrated earlier this year. The series:
- associates a clockdomain with each struct clk,
- adds a couple of minor powerdomain/clockdomain interface functions to be used by pm.c,
- converts direct register manipulation for clockdomains and powerdomains in pm.c to use the clockdomain/powerdomain interface functions,
- and removes the clockdomain/powerdomain manipulation code from DSPGateway.
This series also adds a missing OMAP24xx clock, ssi_l4_iclk, noticed while annotating the clock framework.
Tested on an N800 with the serial console enabled, and power consumption matches current l-o git HEAD during screen on, dim, and off; and DSP still works.
--
size:
text data bss dec hex filename
3160390 150488 86308 3397186 33d642 vmlinux.n800.orig 3160642 150488 86308 3397438 33d73e vmlinux.n800.patched
diffstat:
arch/arm/mach-omap2/clock24xx.h | 251 +++++++++++++++++++++++++------ arch/arm/mach-omap2/clockdomain.c | 16 ++ arch/arm/mach-omap2/pm24xx.c | 106 +++++++++---- arch/arm/mach-omap2/powerdomain.c | 14 ++ drivers/dsp/dspgateway/dsp_core.c | 13 -- include/asm-arm/arch-omap/clockdomain.h | 5 - include/asm-arm/arch-omap/powerdomain.h | 2 7 files changed, 308 insertions(+), 99 deletions(-)
Paul Walmsley
maintainerPATCH 1/6 24xx clock: associate clocks with clockdomains
Associate each OMAP24xx clock in arch/arm/mach-omap2/clock24xx.h with a clockdomain.
Also move the L4 clock up higher in the file in preparation to define the SSI L4 iclk.
---
arch/arm/mach-omap2/clock24xx.h | 238 +++++++++++++++++++++++++++++++-------- 1 files changed, 187 insertions(+), 51 deletions(-)
arch/arm/mach-omap2/clock24xx.h +187 -51
@@ -626,6 +626,7 @@ static struct clk func_32k_ck = { .rate = 32000, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X | RATE_FIXED | ALWAYS_ENABLED | RATE_PROPAGATES, + .clkdm_name = "wkup_clkdm", .recalc = &propagate_rate, };
@@ -634,17 +635,19 @@ static struct clk osc_ck = { /* (*12, *13, 19.2, *26, 38.4)MHz */ .name = "osc_ck", .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X | RATE_PROPAGATES, + .clkdm_name = "wkup_clkdm", .enable = &omap2_enable_osc_ck, .disable = &omap2_disable_osc_ck, .recalc = &omap2_osc_clk_recalc, }; -/* With out modem likely 12MHz, with modem likely 13MHz */ +/* Without modem likely 12MHz, with modem likely 13MHz */ static struct clk sys_ck = {/* (*12, *13, 19.2, 26, 38.4)MHz */ .name ="sys_ck" ,/* ~ ref_clk also */ .parent = &osc_ck, .flags =CLOCK_IN_OMAP242X |CLOCK_IN_OMAP243X |ALWAYS_ENABLED |RATE_PROPAGATES , + .clkdm_name ="wkup_clkdm" , .recalc = &omap2_sys_clk_recalc, };
@@ -653,6 +656,7 @@ static struct clk alt_ck = { /* Typical 54M or 48M, may not exist */ .rate = 54000000, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X | RATE_FIXED | ALWAYS_ENABLED | RATE_PROPAGATES, + .clkdm_name = "wkup_clkdm", .recalc = &propagate_rate, };
@@ -684,6 +688,7 @@ static struct clk dpll_ck = { .dpll_data = &dpll_dd, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X | RATE_PROPAGATES | ALWAYS_ENABLED, + .clkdm_name = "wkup_clkdm", .recalc = &omap2_dpllcore_recalc, .set_rate = &omap2_reprogram_dpllcore, };
@@ -694,6 +699,7 @@ static struct clk apll96_ck = { .rate = 96000000, .flags =CLOCK_IN_OMAP242X |CLOCK_IN_OMAP243X | RATE_FIXED | RATE_PROPAGATES | ENABLE_ON_INIT, + .clkdm_name = "wkup_clkdm", .enable_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN), .enable_bit = OMAP24XX_EN_96M_PLL_SHIFT, .enable = &omap2_clk_fixed_enable,
@@ -707,6 +713,7 @@ static struct clk apll54_ck = { .rate = 54000000, .flags =CLOCK_IN_OMAP242X |CLOCK_IN_OMAP243X | RATE_FIXED | RATE_PROPAGATES | ENABLE_ON_INIT, + .clkdm_name = "wkup_clkdm", .enable_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN), .enable_bit = OMAP24XX_EN_54M_PLL_SHIFT, .enable = &omap2_clk_fixed_enable,
@@ -741,6 +748,7 @@ static struct clk func_54m_ck = { .parent = &apll54_ck, /* can also be alt_clk */ .flags =CLOCK_IN_OMAP242X |CLOCK_IN_OMAP243X | RATE_PROPAGATES | PARENT_CONTROLS_CLOCK, + .clkdm_name = "wkup_clkdm", .init = &omap2_init_clksel_parent, .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1), .clksel_mask = OMAP24XX_54M_SOURCE,
@@ -753,6 +761,7 @@ static struct clk core_ck = { .parent = &dpll_ck, /* can also be 32k */ .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X | ALWAYS_ENABLED | RATE_PROPAGATES, + .clkdm_name = "wkup_clkdm", .recalc = &followparent_recalc, };
@@ -779,6 +788,7 @@ static struct clk func_96m_ck = { .parent = &apll96_ck, .flags =CLOCK_IN_OMAP242X |CLOCK_IN_OMAP243X | RATE_PROPAGATES | PARENT_CONTROLS_CLOCK, + .clkdm_name = "wkup_clkdm", .init = &omap2_init_clksel_parent, .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1), .clksel_mask = OMAP2430_96M_SOURCE,
@@ -811,6 +821,7 @@ static struct clk func_48m_ck = { .parent = &apll96_ck, /* 96M or Alt */ .flags =CLOCK_IN_OMAP242X |CLOCK_IN_OMAP243X | RATE_PROPAGATES | PARENT_CONTROLS_CLOCK, + .clkdm_name = "wkup_clkdm", .init = &omap2_init_clksel_parent, .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1), .clksel_mask = OMAP24XX_48M_SOURCE,
@@ -826,6 +837,7 @@ static struct clk func_12m_ck = { .fixed_div = 4, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X | RATE_PROPAGATES | PARENT_CONTROLS_CLOCK, + .clkdm_name = "wkup_clkdm", .recalc = &omap2_fixed_divisor_recalc, };
@@ -878,6 +890,7 @@ static struct clk sys_clkout_src = { .parent = &func_54m_ck, .flags =CLOCK_IN_OMAP242X |CLOCK_IN_OMAP243X | RATE_PROPAGATES, + .clkdm_name = "wkup_clkdm", .enable_reg = OMAP24XX_PRCM_CLKOUT_CTRL, .enable_bit = OMAP24XX_CLKOUT_EN_SHIFT, .init = &omap2_init_clksel_parent,
@@ -908,6 +921,7 @@ static struct clk sys_clkout = { .parent = &sys_clkout_src, .flags =CLOCK_IN_OMAP242X |CLOCK_IN_OMAP243X | PARENT_CONTROLS_CLOCK, + .clkdm_name = "wkup_clkdm", .clksel_reg = OMAP24XX_PRCM_CLKOUT_CTRL, .clksel_mask = OMAP24XX_CLKOUT_DIV_MASK, .clksel = sys_clkout_clksel,
@@ -921,6 +935,7 @@ static struct clk sys_clkout2_src = { .name = "sys_clkout2_src", .parent = &func_54m_ck, .flags = CLOCK_IN_OMAP242X | RATE_PROPAGATES, + .clkdm_name = "wkup_clkdm", .enable_reg = OMAP24XX_PRCM_CLKOUT_CTRL, .enable_bit = OMAP2420_CLKOUT2_EN_SHIFT, .init = &omap2_init_clksel_parent,
@@ -942,6 +957,7 @@ static struct clk sys_clkout2 = { .name = "sys_clkout2", .parent = &sys_clkout2_src, .flags = CLOCK_IN_OMAP242X | PARENT_CONTROLS_CLOCK, + .clkdm_name = "wkup_clkdm", .clksel_reg = OMAP24XX_PRCM_CLKOUT_CTRL, .clksel_mask = OMAP2420_CLKOUT2_DIV_MASK, .clksel = sys_clkout2_clksel,
@@ -954,6 +970,7 @@ static struct clk emul_ck = { .name = "emul_ck", .parent = &func_54m_ck, .flags = CLOCK_IN_OMAP242X, + .clkdm_name = "wkup_clkdm", .enable_reg = OMAP24XX_PRCM_CLKEMUL_CTRL, .enable_bit = OMAP24XX_EMULATION_EN_SHIFT, .recalc = &followparent_recalc,
@@ -990,12 +1007,13 @@ static struct clk mpu_ck = { /* Control cpu */ .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X |ALWAYS_ENABLED |DELAYED_APP | CONFIG_PARTICIPANT | RATE_PROPAGATES, + .clkdm_name = "mpu_clkdm", .init = &omap2_init_clksel_parent, .clksel_reg = OMAP_CM_REGADDR(MPU_MOD, CM_CLKSEL), .clksel_mask = OMAP24XX_CLKSEL_MPU_MASK, .clksel = mpu_clksel, .recalc = &omap2_clksel_recalc, - .round_rate = &omap2_clksel_round_rate, + .round_rate = &omap2_clksel_round_rate, .set_rate = &omap2_clksel_set_rate };
@@ -1031,6 +1049,7 @@ static struct clk dsp_fck = { .parent = &core_ck, .flags =CLOCK_IN_OMAP242X |CLOCK_IN_OMAP243X |DELAYED_APP | CONFIG_PARTICIPANT | RATE_PROPAGATES, + .clkdm_name = "dsp_clkdm", .enable_reg = OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_FCLKEN), .enable_bit = OMAP24XX_CM_FCLKEN_DSP_EN_DSP_SHIFT, .clksel_reg = OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_CLKSEL),
@@ -1054,10 +1073,7 @@ static const struct clksel dsp_irate_ick_clksel[] = { { .parent = NULL } }; -/* -* This clock does not exist as such in the TRM, but is added to -* separate source selection from XXX -*/ +/* This clock does not exist as such in the TRM. */ static struct clk dsp_irate_ick = { .name ="dsp_irate_ick" , .parent = &dsp_fck,
@@ -1089,11 +1105,17 @@ static struct clk iva2_1_ick = { .enable_bit = OMAP24XX_CM_FCLKEN_DSP_EN_DSP_SHIFT, }; +/* +* The IVA1 is an ARM7 core on the 2420 that has nothing to do with +* the C54x, but which is contained in the DSP powerdomain. Does not +* exist on later OMAPs. +*/ static struct clk iva1_ifck = { .name ="iva1_ifck" , .parent = &core_ck, .flags =CLOCK_IN_OMAP242X |CONFIG_PARTICIPANT |RATE_PROPAGATES |DELAYED_APP , + .clkdm_name ="iva1_clkdm" , .enable_reg =OMAP_CM_REGADDR (OMAP24XX_DSP_MOD ,CM_FCLKEN ), .enable_bit =OMAP2420_EN_IVA_COP_SHIFT , .clksel_reg =OMAP_CM_REGADDR (OMAP24XX_DSP_MOD ,CM_CLKSEL ),
@@ -1109,6 +1131,7 @@ static struct clk iva1_mpu_int_ifck = { .name = "iva1_mpu_int_ifck", .parent = &iva1_ifck, .flags = CLOCK_IN_OMAP242X, + .clkdm_name = "iva1_clkdm", .enable_reg = OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_FCLKEN), .enable_bit = OMAP2420_EN_IVA_MPU_SHIFT, .fixed_div = 2,
@@ -1156,6 +1179,7 @@ static struct clk core_l3_ck = { /* Used for ick and fck, interconnect */ .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X |ALWAYS_ENABLED |DELAYED_APP | CONFIG_PARTICIPANT | RATE_PROPAGATES, + .clkdm_name = "core_l3_clkdm", .clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1), .clksel_mask = OMAP24XX_CLKSEL_L3_MASK, .clksel = core_l3_clksel,
@@ -1177,11 +1201,13 @@ static const struct clksel usb_l4_ick_clksel[] = { { .parent = NULL }, }; +/* It is unclear from TRM whether usb_l4_ick is really in L3 or L4 clkdm */ static struct clk usb_l4_ick = {/* FS-USB interface clock */ .name ="usb_l4_ick" , .parent = &core_l3_ck, .flags =CLOCK_IN_OMAP242X |CLOCK_IN_OMAP243X |DELAYED_APP |CONFIG_PARTICIPANT , + .clkdm_name ="core_l4_clkdm" , .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN2 ), .enable_bit =OMAP24XX_EN_USB_SHIFT , .clksel_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_CLKSEL1 ),
@@ -1193,10 +1219,42 @@ static struct clk usb_l4_ick = { /* FS-USB interface clock */ };/* +* L4 clock management domain +* +* This domain contains lots of interface clocks from the L4 interface, some +* functional clocks. Fixed APLL functional source clocks are managed in +* this domain. +*/ +static const struct clksel_rate l4_core_l3_rates[] = { + { .div =1 , .val =1 , .flags =RATE_IN_24XX |DEFAULT_RATE }, + { .div =2 , .val =2 , .flags =RATE_IN_24XX }, + { .div =0 } +}; + +static const struct clksel l4_clksel[] = { + { .parent = &core_l3_ck, .rates = l4_core_l3_rates }, + { .parent =NULL } +}; + +static struct clk l4_ck = {/* used both as an ick and fck */ + .name ="l4_ck" , + .parent = &core_l3_ck, + .flags =CLOCK_IN_OMAP242X |CLOCK_IN_OMAP243X | +ALWAYS_ENABLED |DELAYED_APP |RATE_PROPAGATES , + .clkdm_name ="core_l4_clkdm" , + .clksel_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_CLKSEL1 ), + .clksel_mask =OMAP24XX_CLKSEL_L4_MASK , + .clksel = l4_clksel, + .recalc = &omap2_clksel_recalc, + .round_rate = &omap2_clksel_round_rate, + .set_rate = &omap2_clksel_set_rate +}; + +/* * SSI is in L3 management domain, its direct parent is core not l3, * many core power domain entities are grouped into the L3 clock * domain. -* SSI_SSR_FCLK, SSI_SST_FCLK, SSI_L4_CLIK +* SSI_SSR_FCLK, SSI_SST_FCLK, SSI_L4_ICLK * * ssr = core/1/2/3/4/5, sst = 1/2 ssr. */
@@ -1221,6 +1279,7 @@ static struct clk ssi_ssr_sst_fck = { .parent = &core_ck, .flags =CLOCK_IN_OMAP242X |CLOCK_IN_OMAP243X | DELAYED_APP, + .clkdm_name = "core_l3_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2), .enable_bit = OMAP24XX_EN_SSI_SHIFT, .clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1),
@@ -1231,6 +1290,7 @@ static struct clk ssi_ssr_sst_fck = { .set_rate = &omap2_clksel_set_rate }; +/* * GFX clock domain * Clocks:
@@ -1254,6 +1314,7 @@ static struct clk gfx_3d_fck = { .name = "gfx_3d_fck", .parent = &core_l3_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "gfx_clkdm", .enable_reg = OMAP_CM_REGADDR(GFX_MOD, CM_FCLKEN), .enable_bit = OMAP24XX_EN_3D_SHIFT, .clksel_reg = OMAP_CM_REGADDR(GFX_MOD, CM_CLKSEL),
@@ -1268,6 +1329,7 @@ static struct clk gfx_2d_fck = { .name = "gfx_2d_fck", .parent = &core_l3_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "gfx_clkdm", .enable_reg = OMAP_CM_REGADDR(GFX_MOD, CM_FCLKEN), .enable_bit = OMAP24XX_EN_2D_SHIFT, .clksel_reg = OMAP_CM_REGADDR(GFX_MOD, CM_CLKSEL),
@@ -1282,6 +1344,7 @@ static struct clk gfx_ick = { .name = "gfx_ick", /* From l3 */ .parent = &core_l3_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "gfx_clkdm", .enable_reg = OMAP_CM_REGADDR(GFX_MOD, CM_ICLKEN), .enable_bit = OMAP_EN_GFX_SHIFT, .recalc = &followparent_recalc,
@@ -1311,6 +1374,7 @@ static struct clk mdm_ick = { /* used both as a ick and fck */ .name = "mdm_ick", .parent = &core_ck, .flags = CLOCK_IN_OMAP243X | DELAYED_APP | CONFIG_PARTICIPANT, + .clkdm_name = "mdm_clkdm", .enable_reg = OMAP_CM_REGADDR(OMAP2430_MDM_MOD, CM_ICLKEN), .enable_bit = OMAP2430_CM_ICLKEN_MDM_EN_MDM_SHIFT, .clksel_reg = OMAP_CM_REGADDR(OMAP2430_MDM_MOD, CM_CLKSEL),
@@ -1325,52 +1389,13 @@ static struct clk mdm_osc_ck = { .name = "mdm_osc_ck", .parent = &osc_ck, .flags = CLOCK_IN_OMAP243X, + .clkdm_name = "mdm_clkdm", .enable_reg = OMAP_CM_REGADDR(OMAP2430_MDM_MOD, CM_FCLKEN), .enable_bit = OMAP2430_EN_OSC_SHIFT, .recalc = &followparent_recalc, };/* -* L4 clock management domain -* -* This domain contains lots of interface clocks from the L4 interface, some -* functional clocks. Fixed APLL functional source clocks are managed in -* this domain. -*/ -static const struct clksel_rate l4_core_l3_rates[] = { - { .div =1 , .val =1 , .flags =RATE_IN_24XX |DEFAULT_RATE }, - { .div =2 , .val =2 , .flags =RATE_IN_24XX }, - { .div =0 } -}; - -static const struct clksel l4_clksel[] = { - { .parent = &core_l3_ck, .rates = l4_core_l3_rates }, - { .parent =NULL } -}; - -static struct clk l4_ck = {/* used both as an ick and fck */ - .name ="l4_ck" , - .parent = &core_l3_ck, - .flags =CLOCK_IN_OMAP242X |CLOCK_IN_OMAP243X | -ALWAYS_ENABLED |DELAYED_APP |RATE_PROPAGATES , - .clksel_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_CLKSEL1 ), - .clksel_mask =OMAP24XX_CLKSEL_L4_MASK , - .clksel = l4_clksel, - .recalc = &omap2_clksel_recalc, - .round_rate = &omap2_clksel_round_rate, - .set_rate = &omap2_clksel_set_rate -}; - -static struct clk ssi_l4_ick = { - .name ="ssi_l4_ick" , - .parent = &l4_ck, - .flags =CLOCK_IN_OMAP242X |CLOCK_IN_OMAP243X , - .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN2 ), - .enable_bit =OMAP24XX_EN_SSI_SHIFT , - .recalc = &followparent_recalc, -}; - -/* * DSS clock domain * CLOCKs: * DSS_L4_ICLK, DSS_L3_ICLK,
@@ -1409,6 +1434,7 @@ static struct clk dss_ick = { /* Enables both L3,L4 ICLK's */ .name = "dss_ick", .parent = &l4_ck, /* really both l3 and l4 */ .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "dss_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), .enable_bit = OMAP24XX_EN_DSS1_SHIFT, .recalc = &followparent_recalc,
@@ -1419,6 +1445,7 @@ static struct clk dss1_fck = { .parent = &core_ck, /* Core or sys */ .flags =CLOCK_IN_OMAP242X |CLOCK_IN_OMAP243X | DELAYED_APP, + .clkdm_name = "dss_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), .enable_bit = OMAP24XX_EN_DSS1_SHIFT, .init = &omap2_init_clksel_parent,
@@ -1451,6 +1478,7 @@ static struct clk dss2_fck = { /* Alt clk used in power management */ .parent = &sys_ck, /* fixed at sys_ck or 48MHz */ .flags =CLOCK_IN_OMAP242X |CLOCK_IN_OMAP243X | DELAYED_APP, + .clkdm_name = "dss_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), .enable_bit = OMAP24XX_EN_DSS2_SHIFT, .init = &omap2_init_clksel_parent,
@@ -1464,6 +1492,7 @@ static struct clk dss_54m_fck = { /* Alt clk used in power management */ .name = "dss_54m_fck", /* 54m tv clk */ .parent = &func_54m_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "dss_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), .enable_bit = OMAP24XX_EN_TV_SHIFT, .recalc = &followparent_recalc,
@@ -1491,6 +1520,7 @@ static struct clk gpt1_ick = { .name = "gpt1_ick", .parent = &l4_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN), .enable_bit = OMAP24XX_EN_GPT1_SHIFT, .recalc = &followparent_recalc,
@@ -1500,6 +1530,7 @@ static struct clk gpt1_fck = { .name = "gpt1_fck", .parent = &func_32k_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_FCLKEN), .enable_bit = OMAP24XX_EN_GPT1_SHIFT, .init = &omap2_init_clksel_parent,
@@ -1515,6 +1546,7 @@ static struct clk gpt2_ick = { .name = "gpt2_ick", .parent = &l4_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), .enable_bit = OMAP24XX_EN_GPT2_SHIFT, .recalc = &followparent_recalc,
@@ -1524,6 +1556,7 @@ static struct clk gpt2_fck = { .name = "gpt2_fck", .parent = &func_32k_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), .enable_bit = OMAP24XX_EN_GPT2_SHIFT, .init = &omap2_init_clksel_parent,
@@ -1537,6 +1570,7 @@ static struct clk gpt3_ick = { .name = "gpt3_ick", .parent = &l4_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), .enable_bit = OMAP24XX_EN_GPT3_SHIFT, .recalc = &followparent_recalc,
@@ -1546,6 +1580,7 @@ static struct clk gpt3_fck = { .name = "gpt3_fck", .parent = &func_32k_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), .enable_bit = OMAP24XX_EN_GPT3_SHIFT, .init = &omap2_init_clksel_parent,
@@ -1559,6 +1594,7 @@ static struct clk gpt4_ick = { .name = "gpt4_ick", .parent = &l4_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), .enable_bit = OMAP24XX_EN_GPT4_SHIFT, .recalc = &followparent_recalc,
@@ -1568,6 +1604,7 @@ static struct clk gpt4_fck = { .name = "gpt4_fck", .parent = &func_32k_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), .enable_bit = OMAP24XX_EN_GPT4_SHIFT, .init = &omap2_init_clksel_parent,
@@ -1581,6 +1618,7 @@ static struct clk gpt5_ick = { .name = "gpt5_ick", .parent = &l4_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), .enable_bit = OMAP24XX_EN_GPT5_SHIFT, .recalc = &followparent_recalc,
@@ -1590,6 +1628,7 @@ static struct clk gpt5_fck = { .name = "gpt5_fck", .parent = &func_32k_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), .enable_bit = OMAP24XX_EN_GPT5_SHIFT, .init = &omap2_init_clksel_parent,
@@ -1603,6 +1642,7 @@ static struct clk gpt6_ick = { .name = "gpt6_ick", .parent = &l4_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), .enable_bit = OMAP24XX_EN_GPT6_SHIFT, .recalc = &followparent_recalc,
@@ -1612,6 +1652,7 @@ static struct clk gpt6_fck = { .name = "gpt6_fck", .parent = &func_32k_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), .enable_bit = OMAP24XX_EN_GPT6_SHIFT, .init = &omap2_init_clksel_parent,
@@ -1634,6 +1675,7 @@ static struct clk gpt7_fck = { .name = "gpt7_fck", .parent = &func_32k_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), .enable_bit = OMAP24XX_EN_GPT7_SHIFT, .init = &omap2_init_clksel_parent,
@@ -1647,6 +1689,7 @@ static struct clk gpt8_ick = { .name = "gpt8_ick", .parent = &l4_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), .enable_bit = OMAP24XX_EN_GPT8_SHIFT, .recalc = &followparent_recalc,
@@ -1656,6 +1699,7 @@ static struct clk gpt8_fck = { .name = "gpt8_fck", .parent = &func_32k_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), .enable_bit = OMAP24XX_EN_GPT8_SHIFT, .init = &omap2_init_clksel_parent,
@@ -1669,6 +1713,7 @@ static struct clk gpt9_ick = { .name = "gpt9_ick", .parent = &l4_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), .enable_bit = OMAP24XX_EN_GPT9_SHIFT, .recalc = &followparent_recalc,
@@ -1678,6 +1723,7 @@ static struct clk gpt9_fck = { .name = "gpt9_fck", .parent = &func_32k_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), .enable_bit = OMAP24XX_EN_GPT9_SHIFT, .init = &omap2_init_clksel_parent,
@@ -1691,6 +1737,7 @@ static struct clk gpt10_ick = { .name = "gpt10_ick", .parent = &l4_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), .enable_bit = OMAP24XX_EN_GPT10_SHIFT, .recalc = &followparent_recalc,
@@ -1700,6 +1747,7 @@ static struct clk gpt10_fck = { .name = "gpt10_fck", .parent = &func_32k_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), .enable_bit = OMAP24XX_EN_GPT10_SHIFT, .init = &omap2_init_clksel_parent,
@@ -1713,6 +1761,7 @@ static struct clk gpt11_ick = { .name = "gpt11_ick", .parent = &l4_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), .enable_bit = OMAP24XX_EN_GPT11_SHIFT, .recalc = &followparent_recalc,
@@ -1722,6 +1771,7 @@ static struct clk gpt11_fck = { .name = "gpt11_fck", .parent = &func_32k_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), .enable_bit = OMAP24XX_EN_GPT11_SHIFT, .init = &omap2_init_clksel_parent,
@@ -1735,6 +1785,7 @@ static struct clk gpt12_ick = { .name = "gpt12_ick", .parent = &l4_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), .enable_bit = OMAP24XX_EN_GPT12_SHIFT, .recalc = &followparent_recalc,
@@ -1744,6 +1795,7 @@ static struct clk gpt12_fck = { .name = "gpt12_fck", .parent = &func_32k_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), .enable_bit = OMAP24XX_EN_GPT12_SHIFT, .init = &omap2_init_clksel_parent,
@@ -1757,6 +1809,7 @@ static struct clk mcbsp1_ick = { .name = "mcbsp1_ick", .parent = &l4_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), .enable_bit = OMAP24XX_EN_MCBSP1_SHIFT, .recalc = &followparent_recalc,
@@ -1766,6 +1819,7 @@ static struct clk mcbsp1_fck = { .name = "mcbsp1_fck", .parent = &func_96m_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), .enable_bit = OMAP24XX_EN_MCBSP1_SHIFT, .recalc = &followparent_recalc,
@@ -1775,6 +1829,7 @@ static struct clk mcbsp2_ick = { .name = "mcbsp2_ick", .parent = &l4_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), .enable_bit = OMAP24XX_EN_MCBSP2_SHIFT, .recalc = &followparent_recalc,
@@ -1784,6 +1839,7 @@ static struct clk mcbsp2_fck = { .name = "mcbsp2_fck", .parent = &func_96m_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), .enable_bit = OMAP24XX_EN_MCBSP2_SHIFT, .recalc = &followparent_recalc,
@@ -1793,6 +1849,7 @@ static struct clk mcbsp3_ick = { .name = "mcbsp3_ick", .parent = &l4_ck, .flags = CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), .enable_bit = OMAP2430_EN_MCBSP3_SHIFT, .recalc = &followparent_recalc,
@@ -1802,6 +1859,7 @@ static struct clk mcbsp3_fck = { .name = "mcbsp3_fck", .parent = &func_96m_ck, .flags = CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2), .enable_bit = OMAP2430_EN_MCBSP3_SHIFT, .recalc = &followparent_recalc,
@@ -1811,6 +1869,7 @@ static struct clk mcbsp4_ick = { .name = "mcbsp4_ick", .parent = &l4_ck, .flags = CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), .enable_bit = OMAP2430_EN_MCBSP4_SHIFT, .recalc = &followparent_recalc,
@@ -1820,6 +1879,7 @@ static struct clk mcbsp4_fck = { .name = "mcbsp4_fck", .parent = &func_96m_ck, .flags = CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2), .enable_bit = OMAP2430_EN_MCBSP4_SHIFT, .recalc = &followparent_recalc,
@@ -1829,6 +1889,7 @@ static struct clk mcbsp5_ick = { .name = "mcbsp5_ick", .parent = &l4_ck, .flags = CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), .enable_bit = OMAP2430_EN_MCBSP5_SHIFT, .recalc = &followparent_recalc,
@@ -1838,6 +1899,7 @@ static struct clk mcbsp5_fck = { .name = "mcbsp5_fck", .parent = &func_96m_ck, .flags = CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2), .enable_bit = OMAP2430_EN_MCBSP5_SHIFT, .recalc = &followparent_recalc,
@@ -1847,6 +1909,7 @@ static struct clk mcspi1_ick = { .name = "mcspi_ick", .id = 1, .parent = &l4_ck, + .clkdm_name = "core_l4_clkdm", .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), .enable_bit = OMAP24XX_EN_MCSPI1_SHIFT,
@@ -1858,6 +1921,7 @@ static struct clk mcspi1_fck = { .id = 1, .parent = &func_48m_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), .enable_bit = OMAP24XX_EN_MCSPI1_SHIFT, .recalc = &followparent_recalc,
@@ -1868,6 +1932,7 @@ static struct clk mcspi2_ick = { .id = 2, .parent = &l4_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), .enable_bit = OMAP24XX_EN_MCSPI2_SHIFT, .recalc = &followparent_recalc,
@@ -1878,6 +1943,7 @@ static struct clk mcspi2_fck = { .id = 2, .parent = &func_48m_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), .enable_bit = OMAP24XX_EN_MCSPI2_SHIFT, .recalc = &followparent_recalc,
@@ -1888,6 +1954,7 @@ static struct clk mcspi3_ick = { .id = 3, .parent = &l4_ck, .flags = CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), .enable_bit = OMAP2430_EN_MCSPI3_SHIFT, .recalc = &followparent_recalc,
@@ -1898,6 +1965,7 @@ static struct clk mcspi3_fck = { .id = 3, .parent = &func_48m_ck, .flags = CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2), .enable_bit = OMAP2430_EN_MCSPI3_SHIFT, .recalc = &followparent_recalc,
@@ -1907,6 +1975,7 @@ static struct clk uart1_ick = { .name = "uart1_ick", .parent = &l4_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), .enable_bit = OMAP24XX_EN_UART1_SHIFT, .recalc = &followparent_recalc,
@@ -1916,6 +1985,7 @@ static struct clk uart1_fck = { .name = "uart1_fck", .parent = &func_48m_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), .enable_bit = OMAP24XX_EN_UART1_SHIFT, .recalc = &followparent_recalc,
@@ -1925,6 +1995,7 @@ static struct clk uart2_ick = { .name = "uart2_ick", .parent = &l4_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), .enable_bit = OMAP24XX_EN_UART2_SHIFT, .recalc = &followparent_recalc,
@@ -1934,6 +2005,7 @@ static struct clk uart2_fck = { .name = "uart2_fck", .parent = &func_48m_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), .enable_bit = OMAP24XX_EN_UART2_SHIFT, .recalc = &followparent_recalc,
@@ -1943,6 +2015,7 @@ static struct clk uart3_ick = { .name = "uart3_ick", .parent = &l4_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), .enable_bit = OMAP24XX_EN_UART3_SHIFT, .recalc = &followparent_recalc,
@@ -1952,6 +2025,7 @@ static struct clk uart3_fck = { .name = "uart3_fck", .parent = &func_48m_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2), .enable_bit = OMAP24XX_EN_UART3_SHIFT, .recalc = &followparent_recalc,
@@ -1961,6 +2035,7 @@ static struct clk gpios_ick = { .name = "gpios_ick", .parent = &l4_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN), .enable_bit = OMAP24XX_EN_GPIOS_SHIFT, .recalc = &followparent_recalc,
@@ -1970,6 +2045,7 @@ static struct clk gpios_fck = { .name = "gpios_fck", .parent = &func_32k_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "wkup_clkdm", .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_FCLKEN), .enable_bit = OMAP24XX_EN_GPIOS_SHIFT, .recalc = &followparent_recalc,
@@ -1979,6 +2055,7 @@ static struct clk mpu_wdt_ick = { .name = "mpu_wdt_ick", .parent = &l4_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN), .enable_bit = OMAP24XX_EN_MPU_WDT_SHIFT, .recalc = &followparent_recalc,
@@ -1988,6 +2065,7 @@ static struct clk mpu_wdt_fck = { .name = "mpu_wdt_fck", .parent = &func_32k_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "wkup_clkdm", .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_FCLKEN), .enable_bit = OMAP24XX_EN_MPU_WDT_SHIFT, .recalc = &followparent_recalc,
@@ -1996,31 +2074,40 @@ static struct clk mpu_wdt_fck = {static struct clk sync_32k_ick = { .name ="sync_32k_ick" , .parent = &l4_ck, - .flags =CLOCK_IN_OMAP242X |CLOCK_IN_OMAP243X |ENABLE_ON_INIT , + .flags =CLOCK_IN_OMAP242X |CLOCK_IN_OMAP243X | +ENABLE_ON_INIT , + .clkdm_name ="core_l4_clkdm" , .enable_reg =OMAP_CM_REGADDR (WKUP_MOD ,CM_ICLKEN ), .enable_bit =OMAP24XX_EN_32KSYNC_SHIFT , .recalc = &followparent_recalc, }; +static struct clk wdt1_ick = { .name ="wdt1_ick" , .parent = &l4_ck, .flags =CLOCK_IN_OMAP242X |CLOCK_IN_OMAP243X , + .clkdm_name ="core_l4_clkdm" , .enable_reg =OMAP_CM_REGADDR (WKUP_MOD ,CM_ICLKEN ), .enable_bit =OMAP24XX_EN_WDT1_SHIFT , .recalc = &followparent_recalc, }; +static struct clk omapctrl_ick = { .name ="omapctrl_ick" , .parent = &l4_ck, - .flags =CLOCK_IN_OMAP242X |CLOCK_IN_OMAP243X |ENABLE_ON_INIT , + .flags =CLOCK_IN_OMAP242X |CLOCK_IN_OMAP243X | +ENABLE_ON_INIT , + .clkdm_name ="core_l4_clkdm" , .enable_reg =OMAP_CM_REGADDR (WKUP_MOD ,CM_ICLKEN ), .enable_bit =OMAP24XX_EN_OMAPCTRL_SHIFT , .recalc = &followparent_recalc, }; +static struct clk icr_ick = { .name ="icr_ick" , .parent = &l4_ck, .flags =CLOCK_IN_OMAP243X , + .clkdm_name ="core_l4_clkdm" , .enable_reg =OMAP_CM_REGADDR (WKUP_MOD ,CM_ICLKEN ), .enable_bit =OMAP2430_EN_ICR_SHIFT , .recalc = &followparent_recalc,
@@ -2030,15 +2117,22 @@ static struct clk cam_ick = { .name = "cam_ick", .parent = &l4_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), .enable_bit = OMAP24XX_EN_CAM_SHIFT, .recalc = &followparent_recalc, }; +/* +* cam_fck controls both CAM_MCLK and CAM_FCLK. It should probably be +* split into two separate clocks, since the parent clocks are different +* and the clockdomains are also different. +*/ static struct clk cam_fck = { .name ="cam_fck" , .parent = &func_96m_ck, .flags =CLOCK_IN_OMAP242X |CLOCK_IN_OMAP243X , + .clkdm_name ="core_l3_clkdm" , .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_FCLKEN1 ), .enable_bit =OMAP24XX_EN_CAM_SHIFT , .recalc = &followparent_recalc,
@@ -2048,6 +2142,7 @@ static struct clk mailboxes_ick = { .name = "mailboxes_ick", .parent = &l4_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), .enable_bit = OMAP24XX_EN_MAILBOXES_SHIFT, .recalc = &followparent_recalc,
@@ -2057,6 +2152,7 @@ static struct clk wdt4_ick = { .name = "wdt4_ick", .parent = &l4_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), .enable_bit = OMAP24XX_EN_WDT4_SHIFT, .recalc = &followparent_recalc,
@@ -2066,6 +2162,7 @@ static struct clk wdt4_fck = { .name = "wdt4_fck", .parent = &func_32k_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), .enable_bit = OMAP24XX_EN_WDT4_SHIFT, .recalc = &followparent_recalc,
@@ -2075,6 +2172,7 @@ static struct clk wdt3_ick = { .name = "wdt3_ick", .parent = &l4_ck, .flags = CLOCK_IN_OMAP242X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), .enable_bit = OMAP2420_EN_WDT3_SHIFT, .recalc = &followparent_recalc,
@@ -2084,6 +2182,7 @@ static struct clk wdt3_fck = { .name = "wdt3_fck", .parent = &func_32k_ck, .flags = CLOCK_IN_OMAP242X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), .enable_bit = OMAP2420_EN_WDT3_SHIFT, .recalc = &followparent_recalc,
@@ -2093,6 +2192,7 @@ static struct clk mspro_ick = { .name = "mspro_ick", .parent = &l4_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), .enable_bit = OMAP24XX_EN_MSPRO_SHIFT, .recalc = &followparent_recalc,
@@ -2102,6 +2202,7 @@ static struct clk mspro_fck = { .name = "mspro_fck", .parent = &func_96m_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), .enable_bit = OMAP24XX_EN_MSPRO_SHIFT, .recalc = &followparent_recalc,
@@ -2111,6 +2212,7 @@ static struct clk mmc_ick = { .name = "mmc_ick", .parent = &l4_ck, .flags = CLOCK_IN_OMAP242X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), .enable_bit = OMAP2420_EN_MMC_SHIFT, .recalc = &followparent_recalc,
@@ -2120,6 +2222,7 @@ static struct clk mmc_fck = { .name = "mmc_fck", .parent = &func_96m_ck, .flags = CLOCK_IN_OMAP242X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), .enable_bit = OMAP2420_EN_MMC_SHIFT, .recalc = &followparent_recalc,
@@ -2129,6 +2232,7 @@ static struct clk fac_ick = { .name = "fac_ick", .parent = &l4_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), .enable_bit = OMAP24XX_EN_FAC_SHIFT, .recalc = &followparent_recalc,
@@ -2138,6 +2242,7 @@ static struct clk fac_fck = { .name = "fac_fck", .parent = &func_12m_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), .enable_bit = OMAP24XX_EN_FAC_SHIFT, .recalc = &followparent_recalc,
@@ -2147,6 +2252,7 @@ static struct clk eac_ick = { .name = "eac_ick", .parent = &l4_ck, .flags = CLOCK_IN_OMAP242X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), .enable_bit = OMAP2420_EN_EAC_SHIFT, .recalc = &followparent_recalc,
@@ -2156,6 +2262,7 @@ static struct clk eac_fck = { .name = "eac_fck", .parent = &func_96m_ck, .flags = CLOCK_IN_OMAP242X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), .enable_bit = OMAP2420_EN_EAC_SHIFT, .recalc = &followparent_recalc,
@@ -2165,6 +2272,7 @@ static struct clk hdq_ick = { .name = "hdq_ick", .parent = &l4_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), .enable_bit = OMAP24XX_EN_HDQ_SHIFT, .recalc = &followparent_recalc,
@@ -2174,6 +2282,7 @@ static struct clk hdq_fck = { .name = "hdq_fck", .parent = &func_12m_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), .enable_bit = OMAP24XX_EN_HDQ_SHIFT, .recalc = &followparent_recalc,
@@ -2184,6 +2293,7 @@ static struct clk i2c2_ick = { .id = 2, .parent = &l4_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), .enable_bit = OMAP2420_EN_I2C2_SHIFT, .recalc = &followparent_recalc,
@@ -2194,6 +2304,7 @@ static struct clk i2c2_fck = { .id = 2, .parent = &func_12m_ck, .flags = CLOCK_IN_OMAP242X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), .enable_bit = OMAP2420_EN_I2C2_SHIFT, .recalc = &followparent_recalc,
@@ -2204,6 +2315,7 @@ static struct clk i2chs2_fck = { .id = 2, .parent = &func_96m_ck, .flags = CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2), .enable_bit = OMAP2430_EN_I2CHS2_SHIFT, .recalc = &followparent_recalc,
@@ -2214,6 +2326,7 @@ static struct clk i2c1_ick = { .id = 1, .parent = &l4_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), .enable_bit = OMAP2420_EN_I2C1_SHIFT, .recalc = &followparent_recalc,
@@ -2224,6 +2337,7 @@ static struct clk i2c1_fck = { .id = 1, .parent = &func_12m_ck, .flags = CLOCK_IN_OMAP242X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), .enable_bit = OMAP2420_EN_I2C1_SHIFT, .recalc = &followparent_recalc,
@@ -2234,6 +2348,7 @@ static struct clk i2chs1_fck = { .id = 1, .parent = &func_96m_ck, .flags = CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2), .enable_bit = OMAP2430_EN_I2CHS1_SHIFT, .recalc = &followparent_recalc,
@@ -2242,7 +2357,9 @@ static struct clk i2chs1_fck = {static struct clk gpmc_fck = { .name ="gpmc_fck" , .parent = &core_l3_ck, - .flags =CLOCK_IN_OMAP242X |CLOCK_IN_OMAP243X |ENABLE_ON_INIT , + .flags =CLOCK_IN_OMAP242X |CLOCK_IN_OMAP243X | +ENABLE_ON_INIT , + .clkdm_name ="core_l3_clkdm" , .recalc = &followparent_recalc, };
@@ -2250,6 +2367,7 @@ static struct clk sdma_fck = { .name = "sdma_fck", .parent = &core_l3_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l3_clkdm", .recalc = &followparent_recalc, };
@@ -2257,6 +2375,7 @@ static struct clk sdma_ick = { .name = "sdma_ick", .parent = &l4_ck, .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, + .clkdm_name = "core_l3_clkdm", .recalc = &followparent_recalc, };
@@ -2264,6 +2383,7 @@ static struct clk vlynq_ick = { .name = "vlynq_ick", .parent = &core_l3_ck, .flags = CLOCK_IN_OMAP242X, + .clkdm_name = "core_l3_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), .enable_bit = OMAP2420_EN_VLYNQ_SHIFT, .recalc = &followparent_recalc,
@@ -2298,6 +2418,7 @@ static struct clk vlynq_fck = { .name = "vlynq_fck", .parent = &func_96m_ck, .flags = CLOCK_IN_OMAP242X | DELAYED_APP, + .clkdm_name = "core_l3_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), .enable_bit = OMAP2420_EN_VLYNQ_SHIFT, .init = &omap2_init_clksel_parent,
@@ -2313,6 +2434,7 @@ static struct clk sdrc_ick = { .name = "sdrc_ick", .parent = &l4_ck, .flags = CLOCK_IN_OMAP243X | ENABLE_ON_INIT, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN3), .enable_bit = OMAP2430_EN_SDRC_SHIFT, .recalc = &followparent_recalc,
@@ -2322,6 +2444,7 @@ static struct clk des_ick = { .name = "des_ick", .parent = &l4_ck, .flags = CLOCK_IN_OMAP243X | CLOCK_IN_OMAP242X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4), .enable_bit = OMAP24XX_EN_DES_SHIFT, .recalc = &followparent_recalc,
@@ -2331,6 +2454,7 @@ static struct clk sha_ick = { .name = "sha_ick", .parent = &l4_ck, .flags = CLOCK_IN_OMAP243X | CLOCK_IN_OMAP242X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4), .enable_bit = OMAP24XX_EN_SHA_SHIFT, .recalc = &followparent_recalc,
@@ -2340,6 +2464,7 @@ static struct clk rng_ick = { .name = "rng_ick", .parent = &l4_ck, .flags = CLOCK_IN_OMAP243X | CLOCK_IN_OMAP242X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4), .enable_bit = OMAP24XX_EN_RNG_SHIFT, .recalc = &followparent_recalc,
@@ -2349,6 +2474,7 @@ static struct clk aes_ick = { .name = "aes_ick", .parent = &l4_ck, .flags = CLOCK_IN_OMAP243X | CLOCK_IN_OMAP242X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4), .enable_bit = OMAP24XX_EN_AES_SHIFT, .recalc = &followparent_recalc,
@@ -2358,6 +2484,7 @@ static struct clk pka_ick = { .name = "pka_ick", .parent = &l4_ck, .flags = CLOCK_IN_OMAP243X | CLOCK_IN_OMAP242X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4), .enable_bit = OMAP24XX_EN_PKA_SHIFT, .recalc = &followparent_recalc,
@@ -2367,6 +2494,7 @@ static struct clk usb_fck = { .name = "usb_fck", .parent = &func_48m_ck, .flags = CLOCK_IN_OMAP243X | CLOCK_IN_OMAP242X, + .clkdm_name = "core_l3_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2), .enable_bit = OMAP24XX_EN_USB_SHIFT, .recalc = &followparent_recalc,
@@ -2376,6 +2504,7 @@ static struct clk usbhs_ick = { .name = "usbhs_ick", .parent = &core_l3_ck, .flags = CLOCK_IN_OMAP243X, + .clkdm_name = "core_l3_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), .enable_bit = OMAP2430_EN_USBHS_SHIFT, .recalc = &followparent_recalc,
@@ -2386,6 +2515,7 @@ static struct clk mmchs1_ick = { .id = 1, .parent = &l4_ck, .flags = CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), .enable_bit = OMAP2430_EN_MMCHS1_SHIFT, .recalc = &followparent_recalc,
@@ -2396,6 +2526,7 @@ static struct clk mmchs1_fck = { .id = 1, .parent = &func_96m_ck, .flags = CLOCK_IN_OMAP243X, + .clkdm_name = "core_l3_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2), .enable_bit = OMAP2430_EN_MMCHS1_SHIFT, .recalc = &followparent_recalc,
@@ -2406,6 +2537,7 @@ static struct clk mmchs2_ick = { .id = 2, .parent = &l4_ck, .flags = CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), .enable_bit = OMAP2430_EN_MMCHS2_SHIFT, .recalc = &followparent_recalc,
@@ -2425,6 +2557,7 @@ static struct clk gpio5_ick = { .name = "gpio5_ick", .parent = &l4_ck, .flags = CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), .enable_bit = OMAP2430_EN_GPIO5_SHIFT, .recalc = &followparent_recalc,
@@ -2434,6 +2567,7 @@ static struct clk gpio5_fck = { .name = "gpio5_fck", .parent = &func_32k_ck, .flags = CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2), .enable_bit = OMAP2430_EN_GPIO5_SHIFT, .recalc = &followparent_recalc,
@@ -2443,6 +2577,7 @@ static struct clk mdm_intc_ick = { .name = "mdm_intc_ick", .parent = &l4_ck, .flags = CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), .enable_bit = OMAP2430_EN_MDM_INTC_SHIFT, .recalc = &followparent_recalc,
@@ -2453,6 +2588,7 @@ static struct clk mmchsdb1_fck = { .id = 1, .parent = &func_32k_ck, .flags = CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2), .enable_bit = OMAP2430_EN_MMCHSDB1_SHIFT, .recalc = &followparent_recalc,
@@ -2463,6 +2599,7 @@ static struct clk mmchsdb2_fck = { .id = 2, .parent = &func_32k_ck, .flags = CLOCK_IN_OMAP243X, + .clkdm_name = "core_l4_clkdm", .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2), .enable_bit = OMAP2430_EN_MMCHSDB2_SHIFT, .recalc = &followparent_recalc,
@@ -2541,7 +2678,6 @@ static struct clk *onchip_24xx_clks[] __initdata = { &usb_l4_ick,/* L4 domain clocks */ &l4_ck,/* used as both core_l4 and wu_l4 */ - &ssi_l4_ick,/* virtual meta-group clock */ &virt_prcm_set,/* general l4 interface ck, multi-parent functional clk */
Paul Walmsley
maintainerPATCH 2/6 24xx clock: add missing SSI L4 interface clock
In reply to Paul WalmsleyThis patch adds a missing OMAP24xx clock, the SSI L4 interface clock, as "ssi_l4_ick".
---
arch/arm/mach-omap2/clock24xx.h | 15 +++++++++++++++ 1 files changed, 15 insertions(+), 0 deletions(-)
arch/arm/mach-omap2/clock24xx.h +15 -0
@@ -1290,6 +1290,20 @@ static struct clk ssi_ssr_sst_fck = { .set_rate = &omap2_clksel_set_rate }; +/* +* Presumably this is the same as SSI_ICLK. +* TRM contradicts itself on what clockdomain SSI_ICLK is in +*/ +static struct clk ssi_l4_ick = { + .name ="ssi_l4_ick" , + .parent = &l4_ck, + .clkdm_name ="core_l4_clkdm" , + .flags =CLOCK_IN_OMAP242X |CLOCK_IN_OMAP243X , + .enable_reg =OMAP_CM_REGADDR (CORE_MOD ,CM_ICLKEN2 ), + .enable_bit =OMAP24XX_EN_SSI_SHIFT , + .recalc = &followparent_recalc, +}; +/* * GFX clock domain
@@ -2678,6 +2692,7 @@ static struct clk *onchip_24xx_clks[] __initdata = { &usb_l4_ick,/* L4 domain clocks */ &l4_ck,/* used as both core_l4 and wu_l4 */ + &ssi_l4_ick,/* virtual meta-group clock */ &virt_prcm_set,/* general l4 interface ck, multi-parent functional clk */
Paul Walmsley
maintainerPATCH 3/6 powerdomain: add pwrdm_get_mem_bank_count()
In reply to Paul WalmsleyAdd a function pwrdm_get_mem_bank_count() to the powerdomain code to return the number of memory banks contained inside an OMAP powerdomain. This will be used by the PM code to configure the memory bank retention state.
---
arch/arm/mach-omap2/powerdomain.c | 14 ++++++++++++++ include/asm-arm/arch-omap/powerdomain.h | 2 ++ 2 files changed, 16 insertions(+), 0 deletions(-)
arch/arm/mach-omap2/powerdomain.c +14 -0
@@ -588,6 +588,20 @@ int pwrdm_read_sleepdep(struct powerdomain *pwrdm1, struct powerdomain *pwrdm2) (1 << pwrdm2->dep_bit)); } +/** +* pwrdm_get_mem_bank_count - get number of memory banks in this powerdomain +* @pwrdm: struct powerdomain * +* +* Return the number of controllable memory banks in powerdomain pwrdm, +* starting with 1. Returns -EINVAL if the powerdomain pointer is null. +*/ +int pwrdm_get_mem_bank_count (struct powerdomain *pwrdm) +{ +if (!pwrdm) +return -EINVAL ; + +return pwrdm->banks; +}/** * pwrdm_set_next_pwrst - set next powerdomain power state
include/asm-arm/arch-omap/powerdomain.h +2 -0
@@ -134,6 +134,8 @@ int pwrdm_add_sleepdep(struct powerdomain *pwrdm1, struct powerdomain *pwrdm2);int pwrdm_del_sleepdep (struct powerdomain *pwrdm1,struct powerdomain *pwrdm2);int pwrdm_read_sleepdep (struct powerdomain *pwrdm1,struct powerdomain *pwrdm2); +int pwrdm_get_mem_bank_count (struct powerdomain *pwrdm); +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);
Paul Walmsley
maintainerPATCH 4/6 clockdomain: add clkdm_get_pwrdm()
In reply to Paul WalmsleyAdd clkdm_get_pwrdm() to the clockdomain code. It will return a pointer to the powerdomain struct that the clockdomain is contained within. Used by the PM code.
---
arch/arm/mach-omap2/clockdomain.c | 16 ++++++++++++++++ include/asm-arm/arch-omap/clockdomain.h | 5 +++-- 2 files changed, 19 insertions(+), 2 deletions(-)
arch/arm/mach-omap2/clockdomain.c +16 -0
@@ -315,6 +315,22 @@ int clkdm_for_each(int (*fn)(struct clockdomain *clkdm)) } +/** +* clkdm_get_pwrdm - return a ptr to the pwrdm that this clkdm resides in +* @clkdm: struct clockdomain * +* +* Return a pointer to the struct powerdomain that the specified clockdomain +* 'clkdm' exists in, or returns NULL if clkdm argument is NULL. +*/ +struct powerdomain *clkdm_get_pwrdm (struct clockdomain *clkdm) +{ +if (!clkdm) +return NULL ; + +return clkdm->pwrdm; +} + +/* Hardware clockdomain control */ /**
include/asm-arm/arch-omap/clockdomain.h +3 -2
@@ -91,6 +91,9 @@ int clkdm_register(struct clockdomain *clkdm);int clkdm_unregister (struct clockdomain *clkdm);struct clockdomain *clkdm_lookup (const char *name); +int clkdm_for_each (int (*fn)(struct clockdomain *clkdm)); +struct powerdomain *clkdm_get_pwrdm (struct clockdomain *clkdm); +void omap2_clkdm_allow_idle (struct clockdomain *clkdm);void omap2_clkdm_deny_idle (struct clockdomain *clkdm);
@@ -100,6 +103,4 @@ 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); -int clkdm_for_each (int (*fn)(struct clockdomain *clkdm)); -#endif
Paul Walmsley
maintainerPATCH 5/6 24xx PM: convert pm24xx.c code to use pwrdm/clkdm interfaces
In reply to Paul WalmsleyConvert the existing OMAP24xx pm24xx.c code to use the recent powerdomain/clockdomain interface code. This mostly consists of removing direct register reads and writes and replacing it with code that can be more generic.
Also update some of the comments to better reflect what is actually happening on the chip.
---
arch/arm/mach-omap2/pm24xx.c | 106 +++++++++++++++++++++++++++++------------- 1 files changed, 72 insertions(+), 34 deletions(-)
arch/arm/mach-omap2/pm24xx.c +72 -34
@@ -52,6 +52,9 @@#include "sdrc.h" #include "pm.h" +#include <asm/arch/powerdomain.h> +#include <asm/arch/clockdomain.h> +/* These addrs are in assembly language code to be patched at runtime */ extern void *omap2_ocs_sdrc_power;extern void *omap2_ocs_sdrc_dlla_ctrl;
@@ -60,6 +63,12 @@ static void (*omap2_sram_idle)(void);static void (*omap2_sram_suspend)(void __iomem *dllctrl);static void (*saved_idle)(void ); +static struct powerdomain *mpu_pwrdm; +static struct powerdomain *core_pwrdm; + +static struct clockdomain *dsp_clkdm; +static struct clockdomain *gfx_clkdm; +static struct clk *osc_ck, *emul_ck;static int omap2_fclks_active (void )
@@ -91,9 +100,12 @@ static void omap2_enter_full_retention(void)prm_write_mod_reg (0xffffffff ,CORE_MOD ,OMAP24XX_PM_WKST2 );prm_write_mod_reg (0xffffffff ,WKUP_MOD ,PM_WKST ); -/* Try to enter retention */ -prm_write_mod_reg ((0x01 <<OMAP_POWERSTATE_SHIFT ) |OMAP_LOGICRETSTATE , -MPU_MOD ,PM_PWSTCTRL ); +/* +* Set MPU powerdomain's next power state to RETENTION; +* preserve logic state during retention +*/ +pwrdm_set_logic_retst (mpu_pwrdm,PWRDM_POWER_RET ); +pwrdm_set_next_pwrst (mpu_pwrdm,PWRDM_POWER_RET );/* Workaround to kill USB */ l =omap_ctrl_readl (OMAP2_CONTROL_DEVCONF0 ) |OMAP24XX_USBSTANDBYCTRL ;
@@ -326,9 +338,16 @@ static struct platform_suspend_ops omap_pm_ops = { .valid = suspend_valid_only_mem, }; +static int _pm_clkdm_enable_hwsup (struct clockdomain *clkdm) +{ +omap2_clkdm_allow_idle (clkdm); +return 0 ; +} +static void __init prcm_setup_regs (void ) { -u32 l; +int i, num_mem_banks; +struct powerdomain *pwrdm;/* Enable autoidle */ __raw_writel (OMAP24XX_AUTOIDLE ,OMAP24XX_PRCM_SYSCONFIG );
@@ -341,36 +360,36 @@ static void __init prcm_setup_regs(void)if (cpu_is_omap2430 ())prm_write_mod_reg (0 ,OMAP2430_MDM_MOD ,PM_WKDEP ); - l =prm_read_mod_reg (CORE_MOD ,PM_PWSTCTRL ); -/* Enable retention for all memory blocks */ - l |=OMAP24XX_MEM3RETSTATE |OMAP24XX_MEM2RETSTATE | -OMAP24XX_MEM1RETSTATE ; - -/* Set power state to RETENTION */ - l &= ~OMAP_POWERSTATE_MASK ; - l |=0x01 <<OMAP_POWERSTATE_SHIFT ; -prm_write_mod_reg (l,CORE_MOD ,PM_PWSTCTRL ); - -prm_write_mod_reg ((0x01 <<OMAP_POWERSTATE_SHIFT ) | -OMAP_LOGICRETSTATE , -MPU_MOD ,PM_PWSTCTRL ); - -/* Power down DSP and GFX */ -prm_write_mod_reg (OMAP24XX_FORCESTATE | (0x3 <<OMAP_POWERSTATE_SHIFT ), -OMAP24XX_DSP_MOD ,PM_PWSTCTRL ); -prm_write_mod_reg (OMAP24XX_FORCESTATE | (0x3 <<OMAP_POWERSTATE_SHIFT ), -GFX_MOD ,PM_PWSTCTRL ); - -/* Enable clock auto control for all domains */ -cm_write_mod_reg (OMAP24XX_AUTOSTATE_MPU_MASK ,MPU_MOD ,CM_CLKSTCTRL ); -cm_write_mod_reg (OMAP24XX_AUTOSTATE_DSS_MASK | -OMAP24XX_AUTOSTATE_L4_MASK | -OMAP24XX_AUTOSTATE_L3_MASK , -CORE_MOD ,CM_CLKSTCTRL ); -cm_write_mod_reg (OMAP24XX_AUTOSTATE_GFX_MASK ,GFX_MOD ,CM_CLKSTCTRL ); -cm_write_mod_reg (OMAP2420_AUTOSTATE_IVA_MASK | -OMAP24XX_AUTOSTATE_DSP_MASK , -OMAP24XX_DSP_MOD ,CM_CLKSTCTRL ); +/* +* Set CORE powerdomain memory banks to retain their contents +* during RETENTION +*/ + num_mem_banks =pwrdm_get_mem_bank_count (core_pwrdm); +for (i =0 ; i < num_mem_banks; i++) +pwrdm_set_mem_retst (core_pwrdm, i,PWRDM_POWER_RET ); + +/* Set CORE powerdomain's next power state to RETENTION */ +pwrdm_set_next_pwrst (core_pwrdm,PWRDM_POWER_RET ); + +/* +* Set MPU powerdomain's next power state to RETENTION; +* preserve logic state during retention +*/ +pwrdm_set_logic_retst (mpu_pwrdm,PWRDM_POWER_RET ); +pwrdm_set_next_pwrst (mpu_pwrdm,PWRDM_POWER_RET ); + +/* Force-power down DSP, GFX powerdomains */ + + pwrdm =clkdm_get_pwrdm (dsp_clkdm); +pwrdm_set_next_pwrst (pwrdm,PWRDM_POWER_OFF ); +omap2_clkdm_sleep (dsp_clkdm); + + pwrdm =clkdm_get_pwrdm (gfx_clkdm); +pwrdm_set_next_pwrst (pwrdm,PWRDM_POWER_OFF ); +omap2_clkdm_sleep (gfx_clkdm); + +/* Enable clockdomain hardware-supervised control for all clkdms */ +clkdm_for_each (_pm_clkdm_enable_hwsup);/* Enable clock autoidle for all domains */ cm_write_mod_reg(OMAP24XX_AUTO_CAM |
@@ -461,6 +480,25 @@ int __init omap2_pm_init(void) l =__raw_readl (OMAP24XX_PRCM_REVISION );printk (KERN_INFO "PRCM revision %d.%d\n" , (l >>4 ) &0x0f , l &0x0f ); +/* Look up important powerdomains, clockdomains */ + + mpu_pwrdm =pwrdm_lookup ("mpu_pwrdm" ); +if (!mpu_pwrdm) +pr_err ("PM: mpu_pwrdm not found\n" ); + + core_pwrdm =pwrdm_lookup ("core_pwrdm" ); +if (!core_pwrdm) +pr_err ("PM: core_pwrdm not found\n" ); + + dsp_clkdm =clkdm_lookup ("dsp_clkdm" ); +if (!dsp_clkdm) +pr_err ("PM: mpu_clkdm not found\n" ); + + gfx_clkdm =clkdm_lookup ("gfx_clkdm" ); +if (!gfx_clkdm) +pr_err ("PM: gfx_clkdm not found\n" ); + + osc_ck =clk_get (NULL ,"osc_ck" );if (IS_ERR (osc_ck)) {printk (KERN_ERR "could not get osc_ck\n" );
Paul Walmsley
maintainerPATCH 6/6 DSP Gateway: remove manual clockdomain/powerdomain tweaking
In reply to Paul WalmsleyThe recent powerdomain and clockdomain layer updates for OMAP24XX should now control the DSP powerdomain and clockdomain automatically when DSP Gateway calls clk_{enable,disable}(). Remove the manual clockdomain/powerdomain register tweaks from DSP Gateway.
---
drivers/dsp/dspgateway/dsp_core.c | 13 ------------- 1 files changed, 0 insertions(+), 13 deletions(-)
drivers/dsp/dspgateway/dsp_core.c +0 -13
@@ -460,16 +460,6 @@ static inline void dsp_clk_disable(void) {}#elif defined(CONFIG_ARCH_OMAP2 )static inline void dsp_clk_enable (void ) { -/*XXX should be handled in mach-omap[1,2] XXX*/ -prm_write_mod_reg (OMAP24XX_FORCESTATE | (1 <<OMAP_POWERSTATE_SHIFT ), -OMAP24XX_DSP_MOD ,PM_PWSTCTRL ); - -cm_set_mod_reg_bits (OMAP2420_AUTO_DSP_IPI ,OMAP24XX_DSP_MOD , -CM_AUTOIDLE ); - -cm_set_mod_reg_bits (OMAP24XX_AUTOSTATE_DSP_MASK ,OMAP24XX_DSP_MOD , -CM_CLKSTCTRL ); -clk_enable (dsp_fck_handle);clk_enable (dsp_ick_handle);__dsp_per_enable ();
@@ -479,9 +469,6 @@ static inline void dsp_clk_disable(void)__dsp_per_disable ();clk_disable (dsp_ick_handle); clk_disable(dsp_fck_handle); - -prm_write_mod_reg (OMAP24XX_FORCESTATE | (3 <<OMAP_POWERSTATE_SHIFT ), - OMAP24XX_DSP_MOD, PM_PWSTCTRL); }#endif
Tony Lindgren
maintainerQuoted 17 lines · Paul Walmsley
This series updates OMAP24xx power management to use the recent clockdomain and powerdomain code that was integrated earlier this year. The series:
- associates a clockdomain with each struct clk,
- adds a couple of minor powerdomain/clockdomain interface functions to be used by
pm.c,- converts direct register manipulation for clockdomains and powerdomains in
pm.cto use the clockdomain/powerdomain interface functions,- and removes the clockdomain/powerdomain manipulation code from DSPGateway.
Quoted 6 lines
This series also adds a missing OMAP24xx clock,
ssi_l4_iclk, noticed while annotating the clock framework.Tested on an N800 with the serial console enabled, and power consumption matches current l-o git HEAD during screen on, dim, and off; and DSP still works.
Pushing today.
Tony
Quoted 28 lines
Signed-off-by Paul Walmsley <[email protected]>--
size:
text data bss dec hex filename
3160390 150488 86308 3397186 33d642 vmlinux.n800.orig 3160642 150488 86308 3397438 33d73e vmlinux.n800.patcheddiffstat:
arch/arm/mach-omap2/clock24xx.h | 251 +++++++++++++++++++++++++------ arch/arm/mach-omap2/clockdomain.c | 16 ++ arch/arm/mach-omap2/pm24xx.c | 106 +++++++++---- arch/arm/mach-omap2/powerdomain.c | 14 ++ drivers/dsp/dspgateway/dsp_core.c | 13 -- include/asm-arm/arch-omap/clockdomain.h | 5 - include/asm-arm/arch-omap/powerdomain.h | 2 7 files changed, 308 insertions(+), 99 deletions(-)--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html