diff options
| -rw-r--r-- | arch/arm/mach-omap2/clock34xx.c | 3 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/clock34xx.h | 33 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/cm-regbits-34xx.h | 14 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/pm34xx.c | 25 | ||||
| -rw-r--r-- | arch/arm/plat-omap/include/mach/control.h | 4 |
5 files changed, 75 insertions, 4 deletions
diff --git a/arch/arm/mach-omap2/clock34xx.c b/arch/arm/mach-omap2/clock34xx.c index 62021397e5f9..9e43fe5209d3 100644 --- a/arch/arm/mach-omap2/clock34xx.c +++ b/arch/arm/mach-omap2/clock34xx.c | |||
| @@ -129,6 +129,9 @@ static struct omap_clk omap34xx_clks[] = { | |||
| 129 | CLK(NULL, "sgx_fck", &sgx_fck, CK_3430ES2), | 129 | CLK(NULL, "sgx_fck", &sgx_fck, CK_3430ES2), |
| 130 | CLK(NULL, "sgx_ick", &sgx_ick, CK_3430ES2), | 130 | CLK(NULL, "sgx_ick", &sgx_ick, CK_3430ES2), |
| 131 | CLK(NULL, "d2d_26m_fck", &d2d_26m_fck, CK_3430ES1), | 131 | CLK(NULL, "d2d_26m_fck", &d2d_26m_fck, CK_3430ES1), |
| 132 | CLK(NULL, "modem_fck", &modem_fck, CK_343X), | ||
| 133 | CLK(NULL, "sad2d_ick", &sad2d_ick, CK_343X), | ||
| 134 | CLK(NULL, "mad2d_ick", &mad2d_ick, CK_343X), | ||
| 132 | CLK(NULL, "gpt10_fck", &gpt10_fck, CK_343X), | 135 | CLK(NULL, "gpt10_fck", &gpt10_fck, CK_343X), |
| 133 | CLK(NULL, "gpt11_fck", &gpt11_fck, CK_343X), | 136 | CLK(NULL, "gpt11_fck", &gpt11_fck, CK_343X), |
| 134 | CLK(NULL, "cpefuse_fck", &cpefuse_fck, CK_3430ES2), | 137 | CLK(NULL, "cpefuse_fck", &cpefuse_fck, CK_3430ES2), |
diff --git a/arch/arm/mach-omap2/clock34xx.h b/arch/arm/mach-omap2/clock34xx.h index 496f0e9caeb2..e433aec4efdd 100644 --- a/arch/arm/mach-omap2/clock34xx.h +++ b/arch/arm/mach-omap2/clock34xx.h | |||
| @@ -1230,6 +1230,37 @@ static struct clk d2d_26m_fck = { | |||
| 1230 | .recalc = &followparent_recalc, | 1230 | .recalc = &followparent_recalc, |
| 1231 | }; | 1231 | }; |
| 1232 | 1232 | ||
| 1233 | static struct clk modem_fck = { | ||
| 1234 | .name = "modem_fck", | ||
| 1235 | .ops = &clkops_omap2_dflt_wait, | ||
| 1236 | .parent = &sys_ck, | ||
| 1237 | .init = &omap2_init_clk_clkdm, | ||
| 1238 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), | ||
| 1239 | .enable_bit = OMAP3430_EN_MODEM_SHIFT, | ||
| 1240 | .clkdm_name = "d2d_clkdm", | ||
| 1241 | .recalc = &followparent_recalc, | ||
| 1242 | }; | ||
| 1243 | |||
| 1244 | static struct clk sad2d_ick = { | ||
| 1245 | .name = "sad2d_ick", | ||
| 1246 | .ops = &clkops_omap2_dflt_wait, | ||
| 1247 | .parent = &l3_ick, | ||
| 1248 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), | ||
| 1249 | .enable_bit = OMAP3430_EN_SAD2D_SHIFT, | ||
| 1250 | .clkdm_name = "d2d_clkdm", | ||
| 1251 | .recalc = &followparent_recalc, | ||
| 1252 | }; | ||
| 1253 | |||
| 1254 | static struct clk mad2d_ick = { | ||
| 1255 | .name = "mad2d_ick", | ||
| 1256 | .ops = &clkops_omap2_dflt_wait, | ||
| 1257 | .parent = &l3_ick, | ||
| 1258 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN3), | ||
| 1259 | .enable_bit = OMAP3430_EN_MAD2D_SHIFT, | ||
| 1260 | .clkdm_name = "d2d_clkdm", | ||
| 1261 | .recalc = &followparent_recalc, | ||
| 1262 | }; | ||
| 1263 | |||
| 1233 | static const struct clksel omap343x_gpt_clksel[] = { | 1264 | static const struct clksel omap343x_gpt_clksel[] = { |
| 1234 | { .parent = &omap_32k_fck, .rates = gpt_32k_rates }, | 1265 | { .parent = &omap_32k_fck, .rates = gpt_32k_rates }, |
| 1235 | { .parent = &sys_ck, .rates = gpt_sys_rates }, | 1266 | { .parent = &sys_ck, .rates = gpt_sys_rates }, |
| @@ -1947,8 +1978,6 @@ static struct clk usb_l4_ick = { | |||
| 1947 | .recalc = &omap2_clksel_recalc, | 1978 | .recalc = &omap2_clksel_recalc, |
| 1948 | }; | 1979 | }; |
| 1949 | 1980 | ||
| 1950 | /* XXX MDM_INTC_ICK, SAD2D_ICK ?? */ | ||
| 1951 | |||
| 1952 | /* SECURITY_L4_ICK2 based clocks */ | 1981 | /* SECURITY_L4_ICK2 based clocks */ |
| 1953 | 1982 | ||
| 1954 | static struct clk security_l4_ick2 = { | 1983 | static struct clk security_l4_ick2 = { |
diff --git a/arch/arm/mach-omap2/cm-regbits-34xx.h b/arch/arm/mach-omap2/cm-regbits-34xx.h index 6f3f5a36aae6..6923deb98a28 100644 --- a/arch/arm/mach-omap2/cm-regbits-34xx.h +++ b/arch/arm/mach-omap2/cm-regbits-34xx.h | |||
| @@ -145,6 +145,8 @@ | |||
| 145 | #define OMAP3430_CLKACTIVITY_MPU_MASK (1 << 0) | 145 | #define OMAP3430_CLKACTIVITY_MPU_MASK (1 << 0) |
| 146 | 146 | ||
| 147 | /* CM_FCLKEN1_CORE specific bits */ | 147 | /* CM_FCLKEN1_CORE specific bits */ |
| 148 | #define OMAP3430_EN_MODEM (1 << 31) | ||
| 149 | #define OMAP3430_EN_MODEM_SHIFT 31 | ||
| 148 | 150 | ||
| 149 | /* CM_ICLKEN1_CORE specific bits */ | 151 | /* CM_ICLKEN1_CORE specific bits */ |
| 150 | #define OMAP3430_EN_ICR (1 << 29) | 152 | #define OMAP3430_EN_ICR (1 << 29) |
| @@ -161,6 +163,8 @@ | |||
| 161 | #define OMAP3430_EN_MAILBOXES_SHIFT 7 | 163 | #define OMAP3430_EN_MAILBOXES_SHIFT 7 |
| 162 | #define OMAP3430_EN_OMAPCTRL (1 << 6) | 164 | #define OMAP3430_EN_OMAPCTRL (1 << 6) |
| 163 | #define OMAP3430_EN_OMAPCTRL_SHIFT 6 | 165 | #define OMAP3430_EN_OMAPCTRL_SHIFT 6 |
| 166 | #define OMAP3430_EN_SAD2D (1 << 3) | ||
| 167 | #define OMAP3430_EN_SAD2D_SHIFT 3 | ||
| 164 | #define OMAP3430_EN_SDRC (1 << 1) | 168 | #define OMAP3430_EN_SDRC (1 << 1) |
| 165 | #define OMAP3430_EN_SDRC_SHIFT 1 | 169 | #define OMAP3430_EN_SDRC_SHIFT 1 |
| 166 | 170 | ||
| @@ -176,6 +180,10 @@ | |||
| 176 | #define OMAP3430_EN_DES1 (1 << 0) | 180 | #define OMAP3430_EN_DES1 (1 << 0) |
| 177 | #define OMAP3430_EN_DES1_SHIFT 0 | 181 | #define OMAP3430_EN_DES1_SHIFT 0 |
| 178 | 182 | ||
| 183 | /* CM_ICLKEN3_CORE */ | ||
| 184 | #define OMAP3430_EN_MAD2D_SHIFT 3 | ||
| 185 | #define OMAP3430_EN_MAD2D (1 << 3) | ||
| 186 | |||
| 179 | /* CM_FCLKEN3_CORE specific bits */ | 187 | /* CM_FCLKEN3_CORE specific bits */ |
| 180 | #define OMAP3430ES2_EN_TS_SHIFT 1 | 188 | #define OMAP3430ES2_EN_TS_SHIFT 1 |
| 181 | #define OMAP3430ES2_EN_TS_MASK (1 << 1) | 189 | #define OMAP3430ES2_EN_TS_MASK (1 << 1) |
| @@ -231,6 +239,8 @@ | |||
| 231 | #define OMAP3430ES2_ST_CPEFUSE_MASK (1 << 0) | 239 | #define OMAP3430ES2_ST_CPEFUSE_MASK (1 << 0) |
| 232 | 240 | ||
| 233 | /* CM_AUTOIDLE1_CORE */ | 241 | /* CM_AUTOIDLE1_CORE */ |
| 242 | #define OMAP3430_AUTO_MODEM (1 << 31) | ||
| 243 | #define OMAP3430_AUTO_MODEM_SHIFT 31 | ||
| 234 | #define OMAP3430ES2_AUTO_MMC3 (1 << 30) | 244 | #define OMAP3430ES2_AUTO_MMC3 (1 << 30) |
| 235 | #define OMAP3430ES2_AUTO_MMC3_SHIFT 30 | 245 | #define OMAP3430ES2_AUTO_MMC3_SHIFT 30 |
| 236 | #define OMAP3430ES2_AUTO_ICR (1 << 29) | 246 | #define OMAP3430ES2_AUTO_ICR (1 << 29) |
| @@ -287,6 +297,8 @@ | |||
| 287 | #define OMAP3430_AUTO_HSOTGUSB_SHIFT 4 | 297 | #define OMAP3430_AUTO_HSOTGUSB_SHIFT 4 |
| 288 | #define OMAP3430ES1_AUTO_D2D (1 << 3) | 298 | #define OMAP3430ES1_AUTO_D2D (1 << 3) |
| 289 | #define OMAP3430ES1_AUTO_D2D_SHIFT 3 | 299 | #define OMAP3430ES1_AUTO_D2D_SHIFT 3 |
| 300 | #define OMAP3430_AUTO_SAD2D (1 << 3) | ||
| 301 | #define OMAP3430_AUTO_SAD2D_SHIFT 3 | ||
| 290 | #define OMAP3430_AUTO_SSI (1 << 0) | 302 | #define OMAP3430_AUTO_SSI (1 << 0) |
| 291 | #define OMAP3430_AUTO_SSI_SHIFT 0 | 303 | #define OMAP3430_AUTO_SSI_SHIFT 0 |
| 292 | 304 | ||
| @@ -308,6 +320,8 @@ | |||
| 308 | #define OMAP3430ES2_AUTO_USBTLL (1 << 2) | 320 | #define OMAP3430ES2_AUTO_USBTLL (1 << 2) |
| 309 | #define OMAP3430ES2_AUTO_USBTLL_SHIFT 2 | 321 | #define OMAP3430ES2_AUTO_USBTLL_SHIFT 2 |
| 310 | #define OMAP3430ES2_AUTO_USBTLL_MASK (1 << 2) | 322 | #define OMAP3430ES2_AUTO_USBTLL_MASK (1 << 2) |
| 323 | #define OMAP3430_AUTO_MAD2D_SHIFT 3 | ||
| 324 | #define OMAP3430_AUTO_MAD2D (1 << 3) | ||
| 311 | 325 | ||
| 312 | /* CM_CLKSEL_CORE */ | 326 | /* CM_CLKSEL_CORE */ |
| 313 | #define OMAP3430_CLKSEL_SSI_SHIFT 8 | 327 | #define OMAP3430_CLKSEL_SSI_SHIFT 8 |
diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c index 54876aca2d45..f72e25465429 100644 --- a/arch/arm/mach-omap2/pm34xx.c +++ b/arch/arm/mach-omap2/pm34xx.c | |||
| @@ -415,14 +415,32 @@ static void __init omap3_iva_idle(void) | |||
| 415 | OMAP3430_IVA2_MOD, RM_RSTCTRL); | 415 | OMAP3430_IVA2_MOD, RM_RSTCTRL); |
| 416 | } | 416 | } |
| 417 | 417 | ||
| 418 | static void __init prcm_setup_regs(void) | 418 | static void __init omap3_d2d_idle(void) |
| 419 | { | 419 | { |
| 420 | u16 mask, padconf; | ||
| 421 | |||
| 422 | /* In a stand alone OMAP3430 where there is not a stacked | ||
| 423 | * modem for the D2D Idle Ack and D2D MStandby must be pulled | ||
| 424 | * high. S CONTROL_PADCONF_SAD2D_IDLEACK and | ||
| 425 | * CONTROL_PADCONF_SAD2D_MSTDBY to have a pull up. */ | ||
| 426 | mask = (1 << 4) | (1 << 3); /* pull-up, enabled */ | ||
| 427 | padconf = omap_ctrl_readw(OMAP3_PADCONF_SAD2D_MSTANDBY); | ||
| 428 | padconf |= mask; | ||
| 429 | omap_ctrl_writew(padconf, OMAP3_PADCONF_SAD2D_MSTANDBY); | ||
| 430 | |||
| 431 | padconf = omap_ctrl_readw(OMAP3_PADCONF_SAD2D_IDLEACK); | ||
| 432 | padconf |= mask; | ||
| 433 | omap_ctrl_writew(padconf, OMAP3_PADCONF_SAD2D_IDLEACK); | ||
| 434 | |||
| 420 | /* reset modem */ | 435 | /* reset modem */ |
| 421 | prm_write_mod_reg(OMAP3430_RM_RSTCTRL_CORE_MODEM_SW_RSTPWRON | | 436 | prm_write_mod_reg(OMAP3430_RM_RSTCTRL_CORE_MODEM_SW_RSTPWRON | |
| 422 | OMAP3430_RM_RSTCTRL_CORE_MODEM_SW_RST, | 437 | OMAP3430_RM_RSTCTRL_CORE_MODEM_SW_RST, |
| 423 | CORE_MOD, RM_RSTCTRL); | 438 | CORE_MOD, RM_RSTCTRL); |
| 424 | prm_write_mod_reg(0, CORE_MOD, RM_RSTCTRL); | 439 | prm_write_mod_reg(0, CORE_MOD, RM_RSTCTRL); |
| 440 | } | ||
| 425 | 441 | ||
| 442 | static void __init prcm_setup_regs(void) | ||
| 443 | { | ||
| 426 | /* XXX Reset all wkdeps. This should be done when initializing | 444 | /* XXX Reset all wkdeps. This should be done when initializing |
| 427 | * powerdomains */ | 445 | * powerdomains */ |
| 428 | prm_write_mod_reg(0, OMAP3430_IVA2_MOD, PM_WKDEP); | 446 | prm_write_mod_reg(0, OMAP3430_IVA2_MOD, PM_WKDEP); |
| @@ -442,6 +460,7 @@ static void __init prcm_setup_regs(void) | |||
| 442 | * Note that in the long run this should be done by clockfw | 460 | * Note that in the long run this should be done by clockfw |
| 443 | */ | 461 | */ |
| 444 | cm_write_mod_reg( | 462 | cm_write_mod_reg( |
| 463 | OMAP3430_AUTO_MODEM | | ||
| 445 | OMAP3430ES2_AUTO_MMC3 | | 464 | OMAP3430ES2_AUTO_MMC3 | |
| 446 | OMAP3430ES2_AUTO_ICR | | 465 | OMAP3430ES2_AUTO_ICR | |
| 447 | OMAP3430_AUTO_AES2 | | 466 | OMAP3430_AUTO_AES2 | |
| @@ -469,7 +488,7 @@ static void __init prcm_setup_regs(void) | |||
| 469 | OMAP3430_AUTO_OMAPCTRL | | 488 | OMAP3430_AUTO_OMAPCTRL | |
| 470 | OMAP3430ES1_AUTO_FSHOSTUSB | | 489 | OMAP3430ES1_AUTO_FSHOSTUSB | |
| 471 | OMAP3430_AUTO_HSOTGUSB | | 490 | OMAP3430_AUTO_HSOTGUSB | |
| 472 | OMAP3430ES1_AUTO_D2D | /* This is es1 only */ | 491 | OMAP3430_AUTO_SAD2D | |
| 473 | OMAP3430_AUTO_SSI, | 492 | OMAP3430_AUTO_SSI, |
| 474 | CORE_MOD, CM_AUTOIDLE1); | 493 | CORE_MOD, CM_AUTOIDLE1); |
| 475 | 494 | ||
| @@ -483,6 +502,7 @@ static void __init prcm_setup_regs(void) | |||
| 483 | 502 | ||
| 484 | if (omap_rev() > OMAP3430_REV_ES1_0) { | 503 | if (omap_rev() > OMAP3430_REV_ES1_0) { |
| 485 | cm_write_mod_reg( | 504 | cm_write_mod_reg( |
| 505 | OMAP3430_AUTO_MAD2D | | ||
| 486 | OMAP3430ES2_AUTO_USBTLL, | 506 | OMAP3430ES2_AUTO_USBTLL, |
| 487 | CORE_MOD, CM_AUTOIDLE3); | 507 | CORE_MOD, CM_AUTOIDLE3); |
| 488 | } | 508 | } |
| @@ -576,6 +596,7 @@ static void __init prcm_setup_regs(void) | |||
| 576 | OCP_MOD, OMAP3_PRM_IRQENABLE_MPU_OFFSET); | 596 | OCP_MOD, OMAP3_PRM_IRQENABLE_MPU_OFFSET); |
| 577 | 597 | ||
| 578 | omap3_iva_idle(); | 598 | omap3_iva_idle(); |
| 599 | omap3_d2d_idle(); | ||
| 579 | } | 600 | } |
| 580 | 601 | ||
| 581 | static int __init pwrdms_setup(struct powerdomain *pwrdm) | 602 | static int __init pwrdms_setup(struct powerdomain *pwrdm) |
diff --git a/arch/arm/plat-omap/include/mach/control.h b/arch/arm/plat-omap/include/mach/control.h index a9f05e5bb2ba..fcc5a9b76973 100644 --- a/arch/arm/plat-omap/include/mach/control.h +++ b/arch/arm/plat-omap/include/mach/control.h | |||
| @@ -144,6 +144,10 @@ | |||
| 144 | #define OMAP343X_CONTROL_PBIAS_LITE (OMAP2_CONTROL_GENERAL + 0x02b0) | 144 | #define OMAP343X_CONTROL_PBIAS_LITE (OMAP2_CONTROL_GENERAL + 0x02b0) |
| 145 | #define OMAP343X_CONTROL_TEMP_SENSOR (OMAP2_CONTROL_GENERAL + 0x02b4) | 145 | #define OMAP343X_CONTROL_TEMP_SENSOR (OMAP2_CONTROL_GENERAL + 0x02b4) |
| 146 | 146 | ||
| 147 | /* 34xx D2D idle-related pins, handled by PM core */ | ||
| 148 | #define OMAP3_PADCONF_SAD2D_MSTANDBY 0x250 | ||
| 149 | #define OMAP3_PADCONF_SAD2D_IDLEACK 0x254 | ||
| 150 | |||
| 147 | /* | 151 | /* |
| 148 | * REVISIT: This list of registers is not comprehensive - there are more | 152 | * REVISIT: This list of registers is not comprehensive - there are more |
| 149 | * that should be added. | 153 | * that should be added. |
