diff options
| -rw-r--r-- | arch/arm/mach-omap2/clock34xx.c | 299 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/clock34xx.h | 83 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/cm-regbits-34xx.h | 18 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/cm.h | 1 | ||||
| -rw-r--r-- | include/asm-arm/arch-omap/clock.h | 5 |
5 files changed, 376 insertions, 30 deletions
diff --git a/arch/arm/mach-omap2/clock34xx.c b/arch/arm/mach-omap2/clock34xx.c index b42bdd6079a5..4263099b1ad3 100644 --- a/arch/arm/mach-omap2/clock34xx.c +++ b/arch/arm/mach-omap2/clock34xx.c | |||
| @@ -1,10 +1,11 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * OMAP3-specific clock framework functions | 2 | * OMAP3-specific clock framework functions |
| 3 | * | 3 | * |
| 4 | * Copyright (C) 2007 Texas Instruments, Inc. | 4 | * Copyright (C) 2007-2008 Texas Instruments, Inc. |
| 5 | * Copyright (C) 2007 Nokia Corporation | 5 | * Copyright (C) 2007-2008 Nokia Corporation |
| 6 | * | 6 | * |
| 7 | * Written by Paul Walmsley | 7 | * Written by Paul Walmsley |
| 8 | * Testing and integration fixes by Jouni Högander | ||
| 8 | * | 9 | * |
| 9 | * Parts of this code are based on code written by | 10 | * Parts of this code are based on code written by |
| 10 | * Richard Woodruff, Tony Lindgren, Tuukka Tikkanen, Karthik Dasu | 11 | * Richard Woodruff, Tony Lindgren, Tuukka Tikkanen, Karthik Dasu |
| @@ -23,6 +24,7 @@ | |||
| 23 | #include <linux/delay.h> | 24 | #include <linux/delay.h> |
| 24 | #include <linux/clk.h> | 25 | #include <linux/clk.h> |
| 25 | #include <linux/io.h> | 26 | #include <linux/io.h> |
| 27 | #include <linux/limits.h> | ||
| 26 | 28 | ||
| 27 | #include <asm/arch/clock.h> | 29 | #include <asm/arch/clock.h> |
| 28 | #include <asm/arch/sram.h> | 30 | #include <asm/arch/sram.h> |
| @@ -37,8 +39,11 @@ | |||
| 37 | #include "cm.h" | 39 | #include "cm.h" |
| 38 | #include "cm-regbits-34xx.h" | 40 | #include "cm-regbits-34xx.h" |
| 39 | 41 | ||
| 40 | /* CM_CLKEN_PLL*.EN* bit values */ | 42 | /* CM_AUTOIDLE_PLL*.AUTO_* bit values */ |
| 41 | #define DPLL_LOCKED 0x7 | 43 | #define DPLL_AUTOIDLE_DISABLE 0x0 |
| 44 | #define DPLL_AUTOIDLE_LOW_POWER_STOP 0x1 | ||
| 45 | |||
| 46 | #define MAX_DPLL_WAIT_TRIES 1000000 | ||
| 42 | 47 | ||
| 43 | /** | 48 | /** |
| 44 | * omap3_dpll_recalc - recalculate DPLL rate | 49 | * omap3_dpll_recalc - recalculate DPLL rate |
| @@ -53,6 +58,290 @@ static void omap3_dpll_recalc(struct clk *clk) | |||
| 53 | propagate_rate(clk); | 58 | propagate_rate(clk); |
| 54 | } | 59 | } |
| 55 | 60 | ||
| 61 | /* _omap3_dpll_write_clken - write clken_bits arg to a DPLL's enable bits */ | ||
| 62 | static void _omap3_dpll_write_clken(struct clk *clk, u8 clken_bits) | ||
| 63 | { | ||
| 64 | const struct dpll_data *dd; | ||
| 65 | |||
| 66 | dd = clk->dpll_data; | ||
| 67 | |||
| 68 | cm_rmw_reg_bits(dd->enable_mask, clken_bits << __ffs(dd->enable_mask), | ||
| 69 | dd->control_reg); | ||
| 70 | } | ||
| 71 | |||
| 72 | /* _omap3_wait_dpll_status: wait for a DPLL to enter a specific state */ | ||
| 73 | static int _omap3_wait_dpll_status(struct clk *clk, u8 state) | ||
| 74 | { | ||
| 75 | const struct dpll_data *dd; | ||
| 76 | int i = 0; | ||
| 77 | int ret = -EINVAL; | ||
| 78 | u32 idlest_mask; | ||
| 79 | |||
| 80 | dd = clk->dpll_data; | ||
| 81 | |||
| 82 | state <<= dd->idlest_bit; | ||
| 83 | idlest_mask = 1 << dd->idlest_bit; | ||
| 84 | |||
| 85 | while (((cm_read_reg(dd->idlest_reg) & idlest_mask) != state) && | ||
| 86 | i < MAX_DPLL_WAIT_TRIES) { | ||
| 87 | i++; | ||
| 88 | udelay(1); | ||
| 89 | } | ||
| 90 | |||
| 91 | if (i == MAX_DPLL_WAIT_TRIES) { | ||
| 92 | printk(KERN_ERR "clock: %s failed transition to '%s'\n", | ||
| 93 | clk->name, (state) ? "locked" : "bypassed"); | ||
| 94 | } else { | ||
| 95 | pr_debug("clock: %s transition to '%s' in %d loops\n", | ||
| 96 | clk->name, (state) ? "locked" : "bypassed", i); | ||
| 97 | |||
| 98 | ret = 0; | ||
| 99 | } | ||
| 100 | |||
| 101 | return ret; | ||
| 102 | } | ||
| 103 | |||
| 104 | /* Non-CORE DPLL (e.g., DPLLs that do not control SDRC) clock functions */ | ||
| 105 | |||
| 106 | /* | ||
| 107 | * _omap3_noncore_dpll_lock - instruct a DPLL to lock and wait for readiness | ||
| 108 | * @clk: pointer to a DPLL struct clk | ||
| 109 | * | ||
| 110 | * Instructs a non-CORE DPLL to lock. Waits for the DPLL to report | ||
| 111 | * readiness before returning. Will save and restore the DPLL's | ||
| 112 | * autoidle state across the enable, per the CDP code. If the DPLL | ||
| 113 | * locked successfully, return 0; if the DPLL did not lock in the time | ||
| 114 | * allotted, or DPLL3 was passed in, return -EINVAL. | ||
| 115 | */ | ||
| 116 | static int _omap3_noncore_dpll_lock(struct clk *clk) | ||
| 117 | { | ||
| 118 | u8 ai; | ||
| 119 | int r; | ||
| 120 | |||
| 121 | if (clk == &dpll3_ck) | ||
| 122 | return -EINVAL; | ||
| 123 | |||
| 124 | pr_debug("clock: locking DPLL %s\n", clk->name); | ||
| 125 | |||
| 126 | ai = omap3_dpll_autoidle_read(clk); | ||
| 127 | |||
| 128 | _omap3_dpll_write_clken(clk, DPLL_LOCKED); | ||
| 129 | |||
| 130 | if (ai) { | ||
| 131 | /* | ||
| 132 | * If no downstream clocks are enabled, CM_IDLEST bit | ||
| 133 | * may never become active, so don't wait for DPLL to lock. | ||
| 134 | */ | ||
| 135 | r = 0; | ||
| 136 | omap3_dpll_allow_idle(clk); | ||
| 137 | } else { | ||
| 138 | r = _omap3_wait_dpll_status(clk, 1); | ||
| 139 | omap3_dpll_deny_idle(clk); | ||
| 140 | }; | ||
| 141 | |||
| 142 | return r; | ||
| 143 | } | ||
| 144 | |||
| 145 | /* | ||
| 146 | * omap3_noncore_dpll_bypass - instruct a DPLL to bypass and wait for readiness | ||
| 147 | * @clk: pointer to a DPLL struct clk | ||
| 148 | * | ||
| 149 | * Instructs a non-CORE DPLL to enter low-power bypass mode. In | ||
| 150 | * bypass mode, the DPLL's rate is set equal to its parent clock's | ||
| 151 | * rate. Waits for the DPLL to report readiness before returning. | ||
| 152 | * Will save and restore the DPLL's autoidle state across the enable, | ||
| 153 | * per the CDP code. If the DPLL entered bypass mode successfully, | ||
| 154 | * return 0; if the DPLL did not enter bypass in the time allotted, or | ||
| 155 | * DPLL3 was passed in, or the DPLL does not support low-power bypass, | ||
| 156 | * return -EINVAL. | ||
| 157 | */ | ||
| 158 | static int _omap3_noncore_dpll_bypass(struct clk *clk) | ||
| 159 | { | ||
| 160 | int r; | ||
| 161 | u8 ai; | ||
| 162 | |||
| 163 | if (clk == &dpll3_ck) | ||
| 164 | return -EINVAL; | ||
| 165 | |||
| 166 | if (!(clk->dpll_data->modes & (1 << DPLL_LOW_POWER_BYPASS))) | ||
| 167 | return -EINVAL; | ||
| 168 | |||
| 169 | pr_debug("clock: configuring DPLL %s for low-power bypass\n", | ||
| 170 | clk->name); | ||
| 171 | |||
| 172 | ai = omap3_dpll_autoidle_read(clk); | ||
| 173 | |||
| 174 | _omap3_dpll_write_clken(clk, DPLL_LOW_POWER_BYPASS); | ||
| 175 | |||
| 176 | r = _omap3_wait_dpll_status(clk, 0); | ||
| 177 | |||
| 178 | if (ai) | ||
| 179 | omap3_dpll_allow_idle(clk); | ||
| 180 | else | ||
| 181 | omap3_dpll_deny_idle(clk); | ||
| 182 | |||
| 183 | return r; | ||
| 184 | } | ||
| 185 | |||
| 186 | /* | ||
| 187 | * _omap3_noncore_dpll_stop - instruct a DPLL to stop | ||
| 188 | * @clk: pointer to a DPLL struct clk | ||
| 189 | * | ||
| 190 | * Instructs a non-CORE DPLL to enter low-power stop. Will save and | ||
| 191 | * restore the DPLL's autoidle state across the stop, per the CDP | ||
| 192 | * code. If DPLL3 was passed in, or the DPLL does not support | ||
| 193 | * low-power stop, return -EINVAL; otherwise, return 0. | ||
| 194 | */ | ||
| 195 | static int _omap3_noncore_dpll_stop(struct clk *clk) | ||
| 196 | { | ||
| 197 | u8 ai; | ||
| 198 | |||
| 199 | if (clk == &dpll3_ck) | ||
| 200 | return -EINVAL; | ||
| 201 | |||
| 202 | if (!(clk->dpll_data->modes & (1 << DPLL_LOW_POWER_STOP))) | ||
| 203 | return -EINVAL; | ||
| 204 | |||
| 205 | pr_debug("clock: stopping DPLL %s\n", clk->name); | ||
| 206 | |||
| 207 | ai = omap3_dpll_autoidle_read(clk); | ||
| 208 | |||
| 209 | _omap3_dpll_write_clken(clk, DPLL_LOW_POWER_STOP); | ||
| 210 | |||
| 211 | if (ai) | ||
| 212 | omap3_dpll_allow_idle(clk); | ||
| 213 | else | ||
| 214 | omap3_dpll_deny_idle(clk); | ||
| 215 | |||
| 216 | return 0; | ||
| 217 | } | ||
| 218 | |||
| 219 | /** | ||
| 220 | * omap3_noncore_dpll_enable - instruct a DPLL to enter bypass or lock mode | ||
| 221 | * @clk: pointer to a DPLL struct clk | ||
| 222 | * | ||
| 223 | * Instructs a non-CORE DPLL to enable, e.g., to enter bypass or lock. | ||
| 224 | * The choice of modes depends on the DPLL's programmed rate: if it is | ||
| 225 | * the same as the DPLL's parent clock, it will enter bypass; | ||
| 226 | * otherwise, it will enter lock. This code will wait for the DPLL to | ||
| 227 | * indicate readiness before returning, unless the DPLL takes too long | ||
| 228 | * to enter the target state. Intended to be used as the struct clk's | ||
| 229 | * enable function. If DPLL3 was passed in, or the DPLL does not | ||
| 230 | * support low-power stop, or if the DPLL took too long to enter | ||
| 231 | * bypass or lock, return -EINVAL; otherwise, return 0. | ||
| 232 | */ | ||
| 233 | static int omap3_noncore_dpll_enable(struct clk *clk) | ||
| 234 | { | ||
| 235 | int r; | ||
| 236 | |||
| 237 | if (clk == &dpll3_ck) | ||
| 238 | return -EINVAL; | ||
| 239 | |||
| 240 | if (clk->parent->rate == clk_get_rate(clk)) | ||
| 241 | r = _omap3_noncore_dpll_bypass(clk); | ||
| 242 | else | ||
| 243 | r = _omap3_noncore_dpll_lock(clk); | ||
| 244 | |||
| 245 | return r; | ||
| 246 | } | ||
| 247 | |||
| 248 | /** | ||
| 249 | * omap3_noncore_dpll_enable - instruct a DPLL to enter bypass or lock mode | ||
| 250 | * @clk: pointer to a DPLL struct clk | ||
| 251 | * | ||
| 252 | * Instructs a non-CORE DPLL to enable, e.g., to enter bypass or lock. | ||
| 253 | * The choice of modes depends on the DPLL's programmed rate: if it is | ||
| 254 | * the same as the DPLL's parent clock, it will enter bypass; | ||
| 255 | * otherwise, it will enter lock. This code will wait for the DPLL to | ||
| 256 | * indicate readiness before returning, unless the DPLL takes too long | ||
| 257 | * to enter the target state. Intended to be used as the struct clk's | ||
| 258 | * enable function. If DPLL3 was passed in, or the DPLL does not | ||
| 259 | * support low-power stop, or if the DPLL took too long to enter | ||
| 260 | * bypass or lock, return -EINVAL; otherwise, return 0. | ||
| 261 | */ | ||
| 262 | static void omap3_noncore_dpll_disable(struct clk *clk) | ||
| 263 | { | ||
| 264 | if (clk == &dpll3_ck) | ||
| 265 | return; | ||
| 266 | |||
| 267 | _omap3_noncore_dpll_stop(clk); | ||
| 268 | } | ||
| 269 | |||
| 270 | /** | ||
| 271 | * omap3_dpll_autoidle_read - read a DPLL's autoidle bits | ||
| 272 | * @clk: struct clk * of the DPLL to read | ||
| 273 | * | ||
| 274 | * Return the DPLL's autoidle bits, shifted down to bit 0. Returns | ||
| 275 | * -EINVAL if passed a null pointer or if the struct clk does not | ||
| 276 | * appear to refer to a DPLL. | ||
| 277 | */ | ||
| 278 | static u32 omap3_dpll_autoidle_read(struct clk *clk) | ||
| 279 | { | ||
| 280 | const struct dpll_data *dd; | ||
| 281 | u32 v; | ||
| 282 | |||
| 283 | if (!clk || !clk->dpll_data) | ||
| 284 | return -EINVAL; | ||
| 285 | |||
| 286 | dd = clk->dpll_data; | ||
| 287 | |||
| 288 | v = cm_read_reg(dd->autoidle_reg); | ||
| 289 | v &= dd->autoidle_mask; | ||
| 290 | v >>= __ffs(dd->autoidle_mask); | ||
| 291 | |||
| 292 | return v; | ||
| 293 | } | ||
| 294 | |||
| 295 | /** | ||
| 296 | * omap3_dpll_allow_idle - enable DPLL autoidle bits | ||
| 297 | * @clk: struct clk * of the DPLL to operate on | ||
| 298 | * | ||
| 299 | * Enable DPLL automatic idle control. This automatic idle mode | ||
| 300 | * switching takes effect only when the DPLL is locked, at least on | ||
| 301 | * OMAP3430. The DPLL will enter low-power stop when its downstream | ||
| 302 | * clocks are gated. No return value. | ||
| 303 | */ | ||
| 304 | static void omap3_dpll_allow_idle(struct clk *clk) | ||
| 305 | { | ||
| 306 | const struct dpll_data *dd; | ||
| 307 | |||
| 308 | if (!clk || !clk->dpll_data) | ||
| 309 | return; | ||
| 310 | |||
| 311 | dd = clk->dpll_data; | ||
| 312 | |||
| 313 | /* | ||
| 314 | * REVISIT: CORE DPLL can optionally enter low-power bypass | ||
| 315 | * by writing 0x5 instead of 0x1. Add some mechanism to | ||
| 316 | * optionally enter this mode. | ||
| 317 | */ | ||
| 318 | cm_rmw_reg_bits(dd->autoidle_mask, | ||
| 319 | DPLL_AUTOIDLE_LOW_POWER_STOP << __ffs(dd->autoidle_mask), | ||
| 320 | dd->autoidle_reg); | ||
| 321 | } | ||
| 322 | |||
| 323 | /** | ||
| 324 | * omap3_dpll_deny_idle - prevent DPLL from automatically idling | ||
| 325 | * @clk: struct clk * of the DPLL to operate on | ||
| 326 | * | ||
| 327 | * Disable DPLL automatic idle control. No return value. | ||
| 328 | */ | ||
| 329 | static void omap3_dpll_deny_idle(struct clk *clk) | ||
| 330 | { | ||
| 331 | const struct dpll_data *dd; | ||
| 332 | |||
| 333 | if (!clk || !clk->dpll_data) | ||
| 334 | return; | ||
| 335 | |||
| 336 | dd = clk->dpll_data; | ||
| 337 | |||
| 338 | cm_rmw_reg_bits(dd->autoidle_mask, | ||
| 339 | DPLL_AUTOIDLE_DISABLE << __ffs(dd->autoidle_mask), | ||
| 340 | dd->autoidle_reg); | ||
| 341 | } | ||
| 342 | |||
| 343 | /* Clock control for DPLL outputs */ | ||
| 344 | |||
| 56 | /** | 345 | /** |
| 57 | * omap3_clkoutx2_recalc - recalculate DPLL X2 output virtual clock rate | 346 | * omap3_clkoutx2_recalc - recalculate DPLL X2 output virtual clock rate |
| 58 | * @clk: DPLL output struct clk | 347 | * @clk: DPLL output struct clk |
| @@ -89,6 +378,8 @@ static void omap3_clkoutx2_recalc(struct clk *clk) | |||
| 89 | propagate_rate(clk); | 378 | propagate_rate(clk); |
| 90 | } | 379 | } |
| 91 | 380 | ||
| 381 | /* Common clock code */ | ||
| 382 | |||
| 92 | /* | 383 | /* |
| 93 | * As it is structured now, this will prevent an OMAP2/3 multiboot | 384 | * As it is structured now, this will prevent an OMAP2/3 multiboot |
| 94 | * kernel from compiling. This will need further attention. | 385 | * kernel from compiling. This will need further attention. |
diff --git a/arch/arm/mach-omap2/clock34xx.h b/arch/arm/mach-omap2/clock34xx.h index 73624dc04c97..e349d48ee807 100644 --- a/arch/arm/mach-omap2/clock34xx.h +++ b/arch/arm/mach-omap2/clock34xx.h | |||
| @@ -1,14 +1,19 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * OMAP3 clock framework | 2 | * OMAP3 clock framework |
| 3 | * | 3 | * |
| 4 | * Virtual clocks are introduced as a convenient tools. | ||
| 5 | * They are sources for other clocks and not supposed | ||
| 6 | * to be requested from drivers directly. | ||
| 7 | * | ||
| 8 | * Copyright (C) 2007-2008 Texas Instruments, Inc. | 4 | * Copyright (C) 2007-2008 Texas Instruments, Inc. |
| 9 | * Copyright (C) 2007-2008 Nokia Corporation | 5 | * Copyright (C) 2007-2008 Nokia Corporation |
| 10 | * | 6 | * |
| 11 | * Written by Paul Walmsley | 7 | * Written by Paul Walmsley |
| 8 | * With many device clock fixes by Kevin Hilman and Jouni Högander | ||
| 9 | * DPLL bypass clock support added by Roman Tereshonkov | ||
| 10 | * | ||
| 11 | */ | ||
| 12 | |||
| 13 | /* | ||
| 14 | * Virtual clocks are introduced as convenient tools. | ||
| 15 | * They are sources for other clocks and not supposed | ||
| 16 | * to be requested from drivers directly. | ||
| 12 | */ | 17 | */ |
| 13 | 18 | ||
| 14 | #ifndef __ARCH_ARM_MACH_OMAP2_CLOCK34XX_H | 19 | #ifndef __ARCH_ARM_MACH_OMAP2_CLOCK34XX_H |
| @@ -24,6 +29,11 @@ | |||
| 24 | 29 | ||
| 25 | static void omap3_dpll_recalc(struct clk *clk); | 30 | static void omap3_dpll_recalc(struct clk *clk); |
| 26 | static void omap3_clkoutx2_recalc(struct clk *clk); | 31 | static void omap3_clkoutx2_recalc(struct clk *clk); |
| 32 | static void omap3_dpll_allow_idle(struct clk *clk); | ||
| 33 | static void omap3_dpll_deny_idle(struct clk *clk); | ||
| 34 | static u32 omap3_dpll_autoidle_read(struct clk *clk); | ||
| 35 | static int omap3_noncore_dpll_enable(struct clk *clk); | ||
| 36 | static void omap3_noncore_dpll_disable(struct clk *clk); | ||
| 27 | 37 | ||
| 28 | /* | 38 | /* |
| 29 | * DPLL1 supplies clock to the MPU. | 39 | * DPLL1 supplies clock to the MPU. |
| @@ -33,6 +43,11 @@ static void omap3_clkoutx2_recalc(struct clk *clk); | |||
| 33 | * DPLL5 supplies other peripheral clocks (USBHOST, USIM). | 43 | * DPLL5 supplies other peripheral clocks (USBHOST, USIM). |
| 34 | */ | 44 | */ |
| 35 | 45 | ||
| 46 | /* CM_CLKEN_PLL*.EN* bit values - not all are available for every DPLL */ | ||
| 47 | #define DPLL_LOW_POWER_STOP 0x1 | ||
| 48 | #define DPLL_LOW_POWER_BYPASS 0x5 | ||
| 49 | #define DPLL_LOCKED 0x7 | ||
| 50 | |||
| 36 | /* PRM CLOCKS */ | 51 | /* PRM CLOCKS */ |
| 37 | 52 | ||
| 38 | /* According to timer32k.c, this is a 32768Hz clock, not a 32000Hz clock. */ | 53 | /* According to timer32k.c, this is a 32768Hz clock, not a 32000Hz clock. */ |
| @@ -246,9 +261,14 @@ static const struct dpll_data dpll1_dd = { | |||
| 246 | .div1_mask = OMAP3430_MPU_DPLL_DIV_MASK, | 261 | .div1_mask = OMAP3430_MPU_DPLL_DIV_MASK, |
| 247 | .control_reg = OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_CLKEN_PLL), | 262 | .control_reg = OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_CLKEN_PLL), |
| 248 | .enable_mask = OMAP3430_EN_MPU_DPLL_MASK, | 263 | .enable_mask = OMAP3430_EN_MPU_DPLL_MASK, |
| 264 | .modes = (1 << DPLL_LOW_POWER_BYPASS) | (1 << DPLL_LOCKED), | ||
| 249 | .auto_recal_bit = OMAP3430_EN_MPU_DPLL_DRIFTGUARD_SHIFT, | 265 | .auto_recal_bit = OMAP3430_EN_MPU_DPLL_DRIFTGUARD_SHIFT, |
| 250 | .recal_en_bit = OMAP3430_MPU_DPLL_RECAL_EN_SHIFT, | 266 | .recal_en_bit = OMAP3430_MPU_DPLL_RECAL_EN_SHIFT, |
| 251 | .recal_st_bit = OMAP3430_MPU_DPLL_ST_SHIFT, | 267 | .recal_st_bit = OMAP3430_MPU_DPLL_ST_SHIFT, |
| 268 | .autoidle_reg = OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_AUTOIDLE_PLL), | ||
| 269 | .autoidle_mask = OMAP3430_AUTO_MPU_DPLL_MASK, | ||
| 270 | .idlest_reg = OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_IDLEST_PLL), | ||
| 271 | .idlest_bit = OMAP3430_ST_MPU_CLK_SHIFT, | ||
| 252 | }; | 272 | }; |
| 253 | 273 | ||
| 254 | static struct clk dpll1_ck = { | 274 | static struct clk dpll1_ck = { |
| @@ -303,16 +323,24 @@ static const struct dpll_data dpll2_dd = { | |||
| 303 | .div1_mask = OMAP3430_IVA2_DPLL_DIV_MASK, | 323 | .div1_mask = OMAP3430_IVA2_DPLL_DIV_MASK, |
| 304 | .control_reg = OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKEN_PLL), | 324 | .control_reg = OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKEN_PLL), |
| 305 | .enable_mask = OMAP3430_EN_IVA2_DPLL_MASK, | 325 | .enable_mask = OMAP3430_EN_IVA2_DPLL_MASK, |
| 326 | .modes = (1 << DPLL_LOW_POWER_STOP) | (1 << DPLL_LOCKED) | | ||
| 327 | (1 << DPLL_LOW_POWER_BYPASS), | ||
| 306 | .auto_recal_bit = OMAP3430_EN_IVA2_DPLL_DRIFTGUARD_SHIFT, | 328 | .auto_recal_bit = OMAP3430_EN_IVA2_DPLL_DRIFTGUARD_SHIFT, |
| 307 | .recal_en_bit = OMAP3430_PRM_IRQENABLE_MPU_IVA2_DPLL_RECAL_EN_SHIFT, | 329 | .recal_en_bit = OMAP3430_PRM_IRQENABLE_MPU_IVA2_DPLL_RECAL_EN_SHIFT, |
| 308 | .recal_st_bit = OMAP3430_PRM_IRQSTATUS_MPU_IVA2_DPLL_ST_SHIFT, | 330 | .recal_st_bit = OMAP3430_PRM_IRQSTATUS_MPU_IVA2_DPLL_ST_SHIFT, |
| 331 | .autoidle_reg = OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_AUTOIDLE_PLL), | ||
| 332 | .autoidle_mask = OMAP3430_AUTO_IVA2_DPLL_MASK, | ||
| 333 | .idlest_reg = OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_IDLEST_PLL), | ||
| 334 | .idlest_bit = OMAP3430_ST_IVA2_CLK_SHIFT | ||
| 309 | }; | 335 | }; |
| 310 | 336 | ||
| 311 | static struct clk dpll2_ck = { | 337 | static struct clk dpll2_ck = { |
| 312 | .name = "dpll2_ck", | 338 | .name = "dpll2_ck", |
| 313 | .parent = &sys_ck, | 339 | .parent = &sys_ck, |
| 314 | .dpll_data = &dpll2_dd, | 340 | .dpll_data = &dpll2_dd, |
| 315 | .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | ALWAYS_ENABLED, | 341 | .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES, |
| 342 | .enable = &omap3_noncore_dpll_enable, | ||
| 343 | .disable = &omap3_noncore_dpll_disable, | ||
| 316 | .recalc = &omap3_dpll_recalc, | 344 | .recalc = &omap3_dpll_recalc, |
| 317 | }; | 345 | }; |
| 318 | 346 | ||
| @@ -338,9 +366,11 @@ static struct clk dpll2_m2_ck = { | |||
| 338 | .recalc = &omap2_clksel_recalc, | 366 | .recalc = &omap2_clksel_recalc, |
| 339 | }; | 367 | }; |
| 340 | 368 | ||
| 341 | /* DPLL3 */ | 369 | /* |
| 342 | /* Source clock for all interfaces and for some device fclks */ | 370 | * DPLL3 |
| 343 | /* Type: DPLL */ | 371 | * Source clock for all interfaces and for some device fclks |
| 372 | * REVISIT: Also supports fast relock bypass - not included below | ||
| 373 | */ | ||
| 344 | static const struct dpll_data dpll3_dd = { | 374 | static const struct dpll_data dpll3_dd = { |
| 345 | .mult_div1_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1), | 375 | .mult_div1_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1), |
| 346 | .mult_mask = OMAP3430_CORE_DPLL_MULT_MASK, | 376 | .mult_mask = OMAP3430_CORE_DPLL_MULT_MASK, |
| @@ -350,6 +380,8 @@ static const struct dpll_data dpll3_dd = { | |||
| 350 | .auto_recal_bit = OMAP3430_EN_CORE_DPLL_DRIFTGUARD_SHIFT, | 380 | .auto_recal_bit = OMAP3430_EN_CORE_DPLL_DRIFTGUARD_SHIFT, |
| 351 | .recal_en_bit = OMAP3430_CORE_DPLL_RECAL_EN_SHIFT, | 381 | .recal_en_bit = OMAP3430_CORE_DPLL_RECAL_EN_SHIFT, |
| 352 | .recal_st_bit = OMAP3430_CORE_DPLL_ST_SHIFT, | 382 | .recal_st_bit = OMAP3430_CORE_DPLL_ST_SHIFT, |
| 383 | .autoidle_reg = OMAP_CM_REGADDR(PLL_MOD, CM_AUTOIDLE), | ||
| 384 | .autoidle_mask = OMAP3430_AUTO_CORE_DPLL_MASK, | ||
| 353 | }; | 385 | }; |
| 354 | 386 | ||
| 355 | static struct clk dpll3_ck = { | 387 | static struct clk dpll3_ck = { |
| @@ -439,7 +471,7 @@ static struct clk core_ck = { | |||
| 439 | .name = "core_ck", | 471 | .name = "core_ck", |
| 440 | .init = &omap2_init_clksel_parent, | 472 | .init = &omap2_init_clksel_parent, |
| 441 | .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST), | 473 | .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST), |
| 442 | .clksel_mask = OMAP3430_ST_CORE_CLK, | 474 | .clksel_mask = OMAP3430_ST_CORE_CLK_MASK, |
| 443 | .clksel = core_ck_clksel, | 475 | .clksel = core_ck_clksel, |
| 444 | .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | | 476 | .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | |
| 445 | PARENT_CONTROLS_CLOCK, | 477 | PARENT_CONTROLS_CLOCK, |
| @@ -456,7 +488,7 @@ static struct clk dpll3_m2x2_ck = { | |||
| 456 | .name = "dpll3_m2x2_ck", | 488 | .name = "dpll3_m2x2_ck", |
| 457 | .init = &omap2_init_clksel_parent, | 489 | .init = &omap2_init_clksel_parent, |
| 458 | .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST), | 490 | .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST), |
| 459 | .clksel_mask = OMAP3430_ST_CORE_CLK, | 491 | .clksel_mask = OMAP3430_ST_CORE_CLK_MASK, |
| 460 | .clksel = dpll3_m2x2_ck_clksel, | 492 | .clksel = dpll3_m2x2_ck_clksel, |
| 461 | .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | | 493 | .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | |
| 462 | PARENT_CONTROLS_CLOCK, | 494 | PARENT_CONTROLS_CLOCK, |
| @@ -503,7 +535,7 @@ static struct clk emu_core_alwon_ck = { | |||
| 503 | .parent = &dpll3_m3x2_ck, | 535 | .parent = &dpll3_m3x2_ck, |
| 504 | .init = &omap2_init_clksel_parent, | 536 | .init = &omap2_init_clksel_parent, |
| 505 | .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST), | 537 | .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST), |
| 506 | .clksel_mask = OMAP3430_ST_CORE_CLK, | 538 | .clksel_mask = OMAP3430_ST_CORE_CLK_MASK, |
| 507 | .clksel = emu_core_alwon_ck_clksel, | 539 | .clksel = emu_core_alwon_ck_clksel, |
| 508 | .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | | 540 | .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | |
| 509 | PARENT_CONTROLS_CLOCK, | 541 | PARENT_CONTROLS_CLOCK, |
| @@ -519,16 +551,23 @@ static const struct dpll_data dpll4_dd = { | |||
| 519 | .div1_mask = OMAP3430_PERIPH_DPLL_DIV_MASK, | 551 | .div1_mask = OMAP3430_PERIPH_DPLL_DIV_MASK, |
| 520 | .control_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN), | 552 | .control_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN), |
| 521 | .enable_mask = OMAP3430_EN_PERIPH_DPLL_MASK, | 553 | .enable_mask = OMAP3430_EN_PERIPH_DPLL_MASK, |
| 554 | .modes = (1 << DPLL_LOW_POWER_STOP) | (1 << DPLL_LOCKED), | ||
| 522 | .auto_recal_bit = OMAP3430_EN_PERIPH_DPLL_DRIFTGUARD_SHIFT, | 555 | .auto_recal_bit = OMAP3430_EN_PERIPH_DPLL_DRIFTGUARD_SHIFT, |
| 523 | .recal_en_bit = OMAP3430_PERIPH_DPLL_RECAL_EN_SHIFT, | 556 | .recal_en_bit = OMAP3430_PERIPH_DPLL_RECAL_EN_SHIFT, |
| 524 | .recal_st_bit = OMAP3430_PERIPH_DPLL_ST_SHIFT, | 557 | .recal_st_bit = OMAP3430_PERIPH_DPLL_ST_SHIFT, |
| 558 | .autoidle_reg = OMAP_CM_REGADDR(PLL_MOD, CM_AUTOIDLE), | ||
| 559 | .autoidle_mask = OMAP3430_AUTO_PERIPH_DPLL_MASK, | ||
| 560 | .idlest_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST), | ||
| 561 | .idlest_bit = OMAP3430_ST_PERIPH_CLK_SHIFT, | ||
| 525 | }; | 562 | }; |
| 526 | 563 | ||
| 527 | static struct clk dpll4_ck = { | 564 | static struct clk dpll4_ck = { |
| 528 | .name = "dpll4_ck", | 565 | .name = "dpll4_ck", |
| 529 | .parent = &sys_ck, | 566 | .parent = &sys_ck, |
| 530 | .dpll_data = &dpll4_dd, | 567 | .dpll_data = &dpll4_dd, |
| 531 | .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | ALWAYS_ENABLED, | 568 | .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES, |
| 569 | .enable = &omap3_noncore_dpll_enable, | ||
| 570 | .disable = &omap3_noncore_dpll_disable, | ||
| 532 | .recalc = &omap3_dpll_recalc, | 571 | .recalc = &omap3_dpll_recalc, |
| 533 | }; | 572 | }; |
| 534 | 573 | ||
| @@ -584,7 +623,7 @@ static struct clk omap_96m_alwon_fck = { | |||
| 584 | .parent = &dpll4_m2x2_ck, | 623 | .parent = &dpll4_m2x2_ck, |
| 585 | .init = &omap2_init_clksel_parent, | 624 | .init = &omap2_init_clksel_parent, |
| 586 | .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST), | 625 | .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST), |
| 587 | .clksel_mask = OMAP3430_ST_PERIPH_CLK, | 626 | .clksel_mask = OMAP3430_ST_PERIPH_CLK_MASK, |
| 588 | .clksel = omap_96m_alwon_fck_clksel, | 627 | .clksel = omap_96m_alwon_fck_clksel, |
| 589 | .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | | 628 | .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | |
| 590 | PARENT_CONTROLS_CLOCK, | 629 | PARENT_CONTROLS_CLOCK, |
| @@ -610,7 +649,7 @@ static struct clk cm_96m_fck = { | |||
| 610 | .parent = &dpll4_m2x2_ck, | 649 | .parent = &dpll4_m2x2_ck, |
| 611 | .init = &omap2_init_clksel_parent, | 650 | .init = &omap2_init_clksel_parent, |
| 612 | .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST), | 651 | .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST), |
| 613 | .clksel_mask = OMAP3430_ST_PERIPH_CLK, | 652 | .clksel_mask = OMAP3430_ST_PERIPH_CLK_MASK, |
| 614 | .clksel = cm_96m_fck_clksel, | 653 | .clksel = cm_96m_fck_clksel, |
| 615 | .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | | 654 | .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | |
| 616 | PARENT_CONTROLS_CLOCK, | 655 | PARENT_CONTROLS_CLOCK, |
| @@ -652,7 +691,7 @@ static struct clk virt_omap_54m_fck = { | |||
| 652 | .parent = &dpll4_m3x2_ck, | 691 | .parent = &dpll4_m3x2_ck, |
| 653 | .init = &omap2_init_clksel_parent, | 692 | .init = &omap2_init_clksel_parent, |
| 654 | .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST), | 693 | .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST), |
| 655 | .clksel_mask = OMAP3430_ST_PERIPH_CLK, | 694 | .clksel_mask = OMAP3430_ST_PERIPH_CLK_MASK, |
| 656 | .clksel = virt_omap_54m_fck_clksel, | 695 | .clksel = virt_omap_54m_fck_clksel, |
| 657 | .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | | 696 | .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | |
| 658 | PARENT_CONTROLS_CLOCK, | 697 | PARENT_CONTROLS_CLOCK, |
| @@ -810,17 +849,23 @@ static const struct dpll_data dpll5_dd = { | |||
| 810 | .div1_mask = OMAP3430ES2_PERIPH2_DPLL_DIV_MASK, | 849 | .div1_mask = OMAP3430ES2_PERIPH2_DPLL_DIV_MASK, |
| 811 | .control_reg = OMAP_CM_REGADDR(PLL_MOD, OMAP3430ES2_CM_CLKEN2), | 850 | .control_reg = OMAP_CM_REGADDR(PLL_MOD, OMAP3430ES2_CM_CLKEN2), |
| 812 | .enable_mask = OMAP3430ES2_EN_PERIPH2_DPLL_MASK, | 851 | .enable_mask = OMAP3430ES2_EN_PERIPH2_DPLL_MASK, |
| 852 | .modes = (1 << DPLL_LOW_POWER_STOP) | (1 << DPLL_LOCKED), | ||
| 813 | .auto_recal_bit = OMAP3430ES2_EN_PERIPH2_DPLL_DRIFTGUARD_SHIFT, | 853 | .auto_recal_bit = OMAP3430ES2_EN_PERIPH2_DPLL_DRIFTGUARD_SHIFT, |
| 814 | .recal_en_bit = OMAP3430ES2_SND_PERIPH_DPLL_RECAL_EN_SHIFT, | 854 | .recal_en_bit = OMAP3430ES2_SND_PERIPH_DPLL_RECAL_EN_SHIFT, |
| 815 | .recal_st_bit = OMAP3430ES2_SND_PERIPH_DPLL_ST_SHIFT, | 855 | .recal_st_bit = OMAP3430ES2_SND_PERIPH_DPLL_ST_SHIFT, |
| 856 | .autoidle_reg = OMAP_CM_REGADDR(PLL_MOD, OMAP3430ES2_CM_AUTOIDLE2_PLL), | ||
| 857 | .autoidle_mask = OMAP3430ES2_AUTO_PERIPH2_DPLL_MASK, | ||
| 858 | .idlest_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST2), | ||
| 859 | .idlest_bit = OMAP3430ES2_ST_PERIPH2_CLK_SHIFT, | ||
| 816 | }; | 860 | }; |
| 817 | 861 | ||
| 818 | static struct clk dpll5_ck = { | 862 | static struct clk dpll5_ck = { |
| 819 | .name = "dpll5_ck", | 863 | .name = "dpll5_ck", |
| 820 | .parent = &sys_ck, | 864 | .parent = &sys_ck, |
| 821 | .dpll_data = &dpll5_dd, | 865 | .dpll_data = &dpll5_dd, |
| 822 | .flags = CLOCK_IN_OMAP3430ES2 | RATE_PROPAGATES | | 866 | .flags = CLOCK_IN_OMAP3430ES2 | RATE_PROPAGATES, |
| 823 | ALWAYS_ENABLED, | 867 | .enable = &omap3_noncore_dpll_enable, |
| 868 | .disable = &omap3_noncore_dpll_disable, | ||
| 824 | .recalc = &omap3_dpll_recalc, | 869 | .recalc = &omap3_dpll_recalc, |
| 825 | }; | 870 | }; |
| 826 | 871 | ||
| @@ -1939,7 +1984,7 @@ static struct clk dss1_alwon_fck = { | |||
| 1939 | .enable_reg = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_FCLKEN), | 1984 | .enable_reg = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_FCLKEN), |
| 1940 | .enable_bit = OMAP3430_EN_DSS1_SHIFT, | 1985 | .enable_bit = OMAP3430_EN_DSS1_SHIFT, |
| 1941 | .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST), | 1986 | .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST), |
| 1942 | .clksel_mask = OMAP3430_ST_PERIPH_CLK, | 1987 | .clksel_mask = OMAP3430_ST_PERIPH_CLK_MASK, |
| 1943 | .clksel = dss1_alwon_fck_clksel, | 1988 | .clksel = dss1_alwon_fck_clksel, |
| 1944 | .flags = CLOCK_IN_OMAP343X, | 1989 | .flags = CLOCK_IN_OMAP343X, |
| 1945 | .recalc = &omap2_clksel_recalc, | 1990 | .recalc = &omap2_clksel_recalc, |
| @@ -1995,7 +2040,7 @@ static struct clk cam_mclk = { | |||
| 1995 | .parent = &dpll4_m5x2_ck, | 2040 | .parent = &dpll4_m5x2_ck, |
| 1996 | .init = &omap2_init_clksel_parent, | 2041 | .init = &omap2_init_clksel_parent, |
| 1997 | .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST), | 2042 | .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST), |
| 1998 | .clksel_mask = OMAP3430_ST_PERIPH_CLK, | 2043 | .clksel_mask = OMAP3430_ST_PERIPH_CLK_MASK, |
| 1999 | .clksel = cam_mclk_clksel, | 2044 | .clksel = cam_mclk_clksel, |
| 2000 | .enable_reg = OMAP_CM_REGADDR(OMAP3430_CAM_MOD, CM_FCLKEN), | 2045 | .enable_reg = OMAP_CM_REGADDR(OMAP3430_CAM_MOD, CM_FCLKEN), |
| 2001 | .enable_bit = OMAP3430_EN_CAM_SHIFT, | 2046 | .enable_bit = OMAP3430_EN_CAM_SHIFT, |
diff --git a/arch/arm/mach-omap2/cm-regbits-34xx.h b/arch/arm/mach-omap2/cm-regbits-34xx.h index 3c38395f6442..ee4c0ca1a708 100644 --- a/arch/arm/mach-omap2/cm-regbits-34xx.h +++ b/arch/arm/mach-omap2/cm-regbits-34xx.h | |||
| @@ -72,7 +72,8 @@ | |||
| 72 | #define OMAP3430_ST_IVA2 (1 << 0) | 72 | #define OMAP3430_ST_IVA2 (1 << 0) |
| 73 | 73 | ||
| 74 | /* CM_IDLEST_PLL_IVA2 */ | 74 | /* CM_IDLEST_PLL_IVA2 */ |
| 75 | #define OMAP3430_ST_IVA2_CLK (1 << 0) | 75 | #define OMAP3430_ST_IVA2_CLK_SHIFT 0 |
| 76 | #define OMAP3430_ST_IVA2_CLK_MASK (1 << 0) | ||
| 76 | 77 | ||
| 77 | /* CM_AUTOIDLE_PLL_IVA2 */ | 78 | /* CM_AUTOIDLE_PLL_IVA2 */ |
| 78 | #define OMAP3430_AUTO_IVA2_DPLL_SHIFT 0 | 79 | #define OMAP3430_AUTO_IVA2_DPLL_SHIFT 0 |
| @@ -115,10 +116,7 @@ | |||
| 115 | #define OMAP3430_ST_MPU (1 << 0) | 116 | #define OMAP3430_ST_MPU (1 << 0) |
| 116 | 117 | ||
| 117 | /* CM_IDLEST_PLL_MPU */ | 118 | /* CM_IDLEST_PLL_MPU */ |
| 118 | #define OMAP3430_ST_MPU_CLK (1 << 0) | 119 | #define OMAP3430_ST_MPU_CLK_SHIFT 0 |
| 119 | #define OMAP3430_ST_IVA2_CLK_MASK (1 << 0) | ||
| 120 | |||
| 121 | /* CM_IDLEST_PLL_MPU */ | ||
| 122 | #define OMAP3430_ST_MPU_CLK_MASK (1 << 0) | 120 | #define OMAP3430_ST_MPU_CLK_MASK (1 << 0) |
| 123 | 121 | ||
| 124 | /* CM_AUTOIDLE_PLL_MPU */ | 122 | /* CM_AUTOIDLE_PLL_MPU */ |
| @@ -408,8 +406,10 @@ | |||
| 408 | #define OMAP3430_ST_12M_CLK (1 << 4) | 406 | #define OMAP3430_ST_12M_CLK (1 << 4) |
| 409 | #define OMAP3430_ST_48M_CLK (1 << 3) | 407 | #define OMAP3430_ST_48M_CLK (1 << 3) |
| 410 | #define OMAP3430_ST_96M_CLK (1 << 2) | 408 | #define OMAP3430_ST_96M_CLK (1 << 2) |
| 411 | #define OMAP3430_ST_PERIPH_CLK (1 << 1) | 409 | #define OMAP3430_ST_PERIPH_CLK_SHIFT 1 |
| 412 | #define OMAP3430_ST_CORE_CLK (1 << 0) | 410 | #define OMAP3430_ST_PERIPH_CLK_MASK (1 << 1) |
| 411 | #define OMAP3430_ST_CORE_CLK_SHIFT 0 | ||
| 412 | #define OMAP3430_ST_CORE_CLK_MASK (1 << 0) | ||
| 413 | 413 | ||
| 414 | /* CM_IDLEST2_CKGEN */ | 414 | /* CM_IDLEST2_CKGEN */ |
| 415 | #define OMAP3430ES2_ST_120M_CLK_SHIFT 1 | 415 | #define OMAP3430ES2_ST_120M_CLK_SHIFT 1 |
| @@ -423,6 +423,10 @@ | |||
| 423 | #define OMAP3430_AUTO_CORE_DPLL_SHIFT 0 | 423 | #define OMAP3430_AUTO_CORE_DPLL_SHIFT 0 |
| 424 | #define OMAP3430_AUTO_CORE_DPLL_MASK (0x7 << 0) | 424 | #define OMAP3430_AUTO_CORE_DPLL_MASK (0x7 << 0) |
| 425 | 425 | ||
| 426 | /* CM_AUTOIDLE2_PLL */ | ||
| 427 | #define OMAP3430ES2_AUTO_PERIPH2_DPLL_SHIFT 0 | ||
| 428 | #define OMAP3430ES2_AUTO_PERIPH2_DPLL_MASK (0x7 << 0) | ||
| 429 | |||
| 426 | /* CM_CLKSEL1_PLL */ | 430 | /* CM_CLKSEL1_PLL */ |
| 427 | /* Note that OMAP3430_CORE_DPLL_CLKOUT_DIV_MASK was (0x3 << 27) on 3430ES1 */ | 431 | /* Note that OMAP3430_CORE_DPLL_CLKOUT_DIV_MASK was (0x3 << 27) on 3430ES1 */ |
| 428 | #define OMAP3430_CORE_DPLL_CLKOUT_DIV_SHIFT 27 | 432 | #define OMAP3430_CORE_DPLL_CLKOUT_DIV_SHIFT 27 |
diff --git a/arch/arm/mach-omap2/cm.h b/arch/arm/mach-omap2/cm.h index 1dd873fcc2bd..87a44c715aa4 100644 --- a/arch/arm/mach-omap2/cm.h +++ b/arch/arm/mach-omap2/cm.h | |||
| @@ -81,6 +81,7 @@ | |||
| 81 | #define OMAP3430ES2_CM_FCLKEN3 0x0008 | 81 | #define OMAP3430ES2_CM_FCLKEN3 0x0008 |
| 82 | #define OMAP3430_CM_IDLEST_PLL CM_IDLEST2 | 82 | #define OMAP3430_CM_IDLEST_PLL CM_IDLEST2 |
| 83 | #define OMAP3430_CM_AUTOIDLE_PLL CM_AUTOIDLE2 | 83 | #define OMAP3430_CM_AUTOIDLE_PLL CM_AUTOIDLE2 |
| 84 | #define OMAP3430ES2_CM_AUTOIDLE2_PLL CM_AUTOIDLE2 | ||
| 84 | #define OMAP3430_CM_CLKSEL1 CM_CLKSEL | 85 | #define OMAP3430_CM_CLKSEL1 CM_CLKSEL |
| 85 | #define OMAP3430_CM_CLKSEL1_PLL CM_CLKSEL | 86 | #define OMAP3430_CM_CLKSEL1_PLL CM_CLKSEL |
| 86 | #define OMAP3430_CM_CLKSEL2_PLL CM_CLKSEL2 | 87 | #define OMAP3430_CM_CLKSEL2_PLL CM_CLKSEL2 |
diff --git a/include/asm-arm/arch-omap/clock.h b/include/asm-arm/arch-omap/clock.h index 8490fbba39d1..22daa5d64d35 100644 --- a/include/asm-arm/arch-omap/clock.h +++ b/include/asm-arm/arch-omap/clock.h | |||
| @@ -34,11 +34,16 @@ struct dpll_data { | |||
| 34 | u32 mult_mask; | 34 | u32 mult_mask; |
| 35 | u32 div1_mask; | 35 | u32 div1_mask; |
| 36 | # if defined(CONFIG_ARCH_OMAP3) | 36 | # if defined(CONFIG_ARCH_OMAP3) |
| 37 | u8 modes; | ||
| 37 | void __iomem *control_reg; | 38 | void __iomem *control_reg; |
| 38 | u32 enable_mask; | 39 | u32 enable_mask; |
| 39 | u8 auto_recal_bit; | 40 | u8 auto_recal_bit; |
| 40 | u8 recal_en_bit; | 41 | u8 recal_en_bit; |
| 41 | u8 recal_st_bit; | 42 | u8 recal_st_bit; |
| 43 | void __iomem *autoidle_reg; | ||
| 44 | u32 autoidle_mask; | ||
| 45 | void __iomem *idlest_reg; | ||
| 46 | u8 idlest_bit; | ||
| 42 | # endif | 47 | # endif |
| 43 | }; | 48 | }; |
| 44 | 49 | ||
