diff options
author | Olof Johansson <olof@lixom.net> | 2012-09-21 00:16:30 -0400 |
---|---|---|
committer | Olof Johansson <olof@lixom.net> | 2012-09-21 00:16:30 -0400 |
commit | b74aae9a2074e1caa2e40bf119f3a633f77c94e4 (patch) | |
tree | ba465514cff017a3213e65556674c68be5db29f6 /arch/arm/mach-bcmring/csp/chipc/chipcHw.c | |
parent | 5698bd757d55b1bb87edd1a9744ab09c142abfc2 (diff) | |
parent | b97ba3ab4e8ec88164a47c98c91955e90ecd7c6a (diff) |
Merge branch 'next/cleanup' into next/multiplatform
* next/cleanup: (358 commits)
ARM: tegra: harmony: fix ldo7 regulator-name
ARM: OMAP2+: Make omap4-keypad.h local
ARM: OMAP2+: Make l4_3xxx.h local
ARM: OMAP2+: Make l4_2xxx.h local
ARM: OMAP2+: Make l3_3xxx.h local
ARM: OMAP2+: Make l3_2xxx.h local
ARM: OMAP1: Move irda.h from plat to mach
ARM: OMAP2+: Make hdq1w.h local
ARM: OMAP2+: Make gpmc-smsc911x.h local
ARM: OMAP2+: Make gpmc-smc91x.h local
ARM: OMAP1: Move flash.h from plat to mach
ARM: OMAP2+: Make debug-devices.h local
ARM: OMAP1: Move board-voiceblue.h from plat to mach
ARM: OMAP1: Move board-sx1.h from plat to mach
ARM: OMAP2+: Make omap-wakeupgen.h local
ARM: OMAP2+: Make omap-secure.h local
ARM: OMAP2+: Make ctrl_module_wkup_44xx.h local
ARM: OMAP2+: Make ctrl_module_pad_wkup_44xx.h local
ARM: OMAP2+: Make ctrl_module_pad_core_44xx.h local
ARM: OMAP2+: Make ctrl_module_core_44xx.h local
...
Diffstat (limited to 'arch/arm/mach-bcmring/csp/chipc/chipcHw.c')
-rw-r--r-- | arch/arm/mach-bcmring/csp/chipc/chipcHw.c | 137 |
1 files changed, 70 insertions, 67 deletions
diff --git a/arch/arm/mach-bcmring/csp/chipc/chipcHw.c b/arch/arm/mach-bcmring/csp/chipc/chipcHw.c index 96273ff34956..5050833817b7 100644 --- a/arch/arm/mach-bcmring/csp/chipc/chipcHw.c +++ b/arch/arm/mach-bcmring/csp/chipc/chipcHw.c | |||
@@ -26,15 +26,15 @@ | |||
26 | 26 | ||
27 | /* ---- Include Files ---------------------------------------------------- */ | 27 | /* ---- Include Files ---------------------------------------------------- */ |
28 | 28 | ||
29 | #include <csp/errno.h> | 29 | #include <linux/errno.h> |
30 | #include <csp/stdint.h> | 30 | #include <linux/types.h> |
31 | #include <csp/module.h> | 31 | #include <linux/export.h> |
32 | 32 | ||
33 | #include <mach/csp/chipcHw_def.h> | 33 | #include <mach/csp/chipcHw_def.h> |
34 | #include <mach/csp/chipcHw_inline.h> | 34 | #include <mach/csp/chipcHw_inline.h> |
35 | 35 | ||
36 | #include <csp/reg.h> | 36 | #include <mach/csp/reg.h> |
37 | #include <csp/delay.h> | 37 | #include <linux/delay.h> |
38 | 38 | ||
39 | /* ---- Private Constants and Types --------------------------------------- */ | 39 | /* ---- Private Constants and Types --------------------------------------- */ |
40 | 40 | ||
@@ -61,21 +61,21 @@ static int chipcHw_divide(int num, int denom) | |||
61 | /****************************************************************************/ | 61 | /****************************************************************************/ |
62 | chipcHw_freq chipcHw_getClockFrequency(chipcHw_CLOCK_e clock /* [ IN ] Configurable clock */ | 62 | chipcHw_freq chipcHw_getClockFrequency(chipcHw_CLOCK_e clock /* [ IN ] Configurable clock */ |
63 | ) { | 63 | ) { |
64 | volatile uint32_t *pPLLReg = (uint32_t *) 0x0; | 64 | uint32_t __iomem *pPLLReg = NULL; |
65 | volatile uint32_t *pClockCtrl = (uint32_t *) 0x0; | 65 | uint32_t __iomem *pClockCtrl = NULL; |
66 | volatile uint32_t *pDependentClock = (uint32_t *) 0x0; | 66 | uint32_t __iomem *pDependentClock = NULL; |
67 | uint32_t vcoFreqPll1Hz = 0; /* Effective VCO frequency for PLL1 in Hz */ | 67 | uint32_t vcoFreqPll1Hz = 0; /* Effective VCO frequency for PLL1 in Hz */ |
68 | uint32_t vcoFreqPll2Hz = 0; /* Effective VCO frequency for PLL2 in Hz */ | 68 | uint32_t vcoFreqPll2Hz = 0; /* Effective VCO frequency for PLL2 in Hz */ |
69 | uint32_t dependentClockType = 0; | 69 | uint32_t dependentClockType = 0; |
70 | uint32_t vcoHz = 0; | 70 | uint32_t vcoHz = 0; |
71 | 71 | ||
72 | /* Get VCO frequencies */ | 72 | /* Get VCO frequencies */ |
73 | if ((pChipcHw->PLLPreDivider & chipcHw_REG_PLL_PREDIVIDER_NDIV_MODE_MASK) != chipcHw_REG_PLL_PREDIVIDER_NDIV_MODE_INTEGER) { | 73 | if ((readl(&pChipcHw->PLLPreDivider) & chipcHw_REG_PLL_PREDIVIDER_NDIV_MODE_MASK) != chipcHw_REG_PLL_PREDIVIDER_NDIV_MODE_INTEGER) { |
74 | uint64_t adjustFreq = 0; | 74 | uint64_t adjustFreq = 0; |
75 | 75 | ||
76 | vcoFreqPll1Hz = chipcHw_XTAL_FREQ_Hz * | 76 | vcoFreqPll1Hz = chipcHw_XTAL_FREQ_Hz * |
77 | chipcHw_divide(chipcHw_REG_PLL_PREDIVIDER_P1, chipcHw_REG_PLL_PREDIVIDER_P2) * | 77 | chipcHw_divide(chipcHw_REG_PLL_PREDIVIDER_P1, chipcHw_REG_PLL_PREDIVIDER_P2) * |
78 | ((pChipcHw->PLLPreDivider & chipcHw_REG_PLL_PREDIVIDER_NDIV_MASK) >> | 78 | ((readl(&pChipcHw->PLLPreDivider) & chipcHw_REG_PLL_PREDIVIDER_NDIV_MASK) >> |
79 | chipcHw_REG_PLL_PREDIVIDER_NDIV_SHIFT); | 79 | chipcHw_REG_PLL_PREDIVIDER_NDIV_SHIFT); |
80 | 80 | ||
81 | /* Adjusted frequency due to chipcHw_REG_PLL_DIVIDER_NDIV_f_SS */ | 81 | /* Adjusted frequency due to chipcHw_REG_PLL_DIVIDER_NDIV_f_SS */ |
@@ -86,13 +86,13 @@ chipcHw_freq chipcHw_getClockFrequency(chipcHw_CLOCK_e clock /* [ IN ] Configur | |||
86 | } else { | 86 | } else { |
87 | vcoFreqPll1Hz = chipcHw_XTAL_FREQ_Hz * | 87 | vcoFreqPll1Hz = chipcHw_XTAL_FREQ_Hz * |
88 | chipcHw_divide(chipcHw_REG_PLL_PREDIVIDER_P1, chipcHw_REG_PLL_PREDIVIDER_P2) * | 88 | chipcHw_divide(chipcHw_REG_PLL_PREDIVIDER_P1, chipcHw_REG_PLL_PREDIVIDER_P2) * |
89 | ((pChipcHw->PLLPreDivider & chipcHw_REG_PLL_PREDIVIDER_NDIV_MASK) >> | 89 | ((readl(&pChipcHw->PLLPreDivider) & chipcHw_REG_PLL_PREDIVIDER_NDIV_MASK) >> |
90 | chipcHw_REG_PLL_PREDIVIDER_NDIV_SHIFT); | 90 | chipcHw_REG_PLL_PREDIVIDER_NDIV_SHIFT); |
91 | } | 91 | } |
92 | vcoFreqPll2Hz = | 92 | vcoFreqPll2Hz = |
93 | chipcHw_XTAL_FREQ_Hz * | 93 | chipcHw_XTAL_FREQ_Hz * |
94 | chipcHw_divide(chipcHw_REG_PLL_PREDIVIDER_P1, chipcHw_REG_PLL_PREDIVIDER_P2) * | 94 | chipcHw_divide(chipcHw_REG_PLL_PREDIVIDER_P1, chipcHw_REG_PLL_PREDIVIDER_P2) * |
95 | ((pChipcHw->PLLPreDivider2 & chipcHw_REG_PLL_PREDIVIDER_NDIV_MASK) >> | 95 | ((readl(&pChipcHw->PLLPreDivider2) & chipcHw_REG_PLL_PREDIVIDER_NDIV_MASK) >> |
96 | chipcHw_REG_PLL_PREDIVIDER_NDIV_SHIFT); | 96 | chipcHw_REG_PLL_PREDIVIDER_NDIV_SHIFT); |
97 | 97 | ||
98 | switch (clock) { | 98 | switch (clock) { |
@@ -187,51 +187,51 @@ chipcHw_freq chipcHw_getClockFrequency(chipcHw_CLOCK_e clock /* [ IN ] Configur | |||
187 | 187 | ||
188 | if (pPLLReg) { | 188 | if (pPLLReg) { |
189 | /* Obtain PLL clock frequency */ | 189 | /* Obtain PLL clock frequency */ |
190 | if (*pPLLReg & chipcHw_REG_PLL_CLOCK_BYPASS_SELECT) { | 190 | if (readl(pPLLReg) & chipcHw_REG_PLL_CLOCK_BYPASS_SELECT) { |
191 | /* Return crystal clock frequency when bypassed */ | 191 | /* Return crystal clock frequency when bypassed */ |
192 | return chipcHw_XTAL_FREQ_Hz; | 192 | return chipcHw_XTAL_FREQ_Hz; |
193 | } else if (clock == chipcHw_CLOCK_DDR) { | 193 | } else if (clock == chipcHw_CLOCK_DDR) { |
194 | /* DDR frequency is configured in PLLDivider register */ | 194 | /* DDR frequency is configured in PLLDivider register */ |
195 | return chipcHw_divide (vcoHz, (((pChipcHw->PLLDivider & 0xFF000000) >> 24) ? ((pChipcHw->PLLDivider & 0xFF000000) >> 24) : 256)); | 195 | return chipcHw_divide (vcoHz, (((readl(&pChipcHw->PLLDivider) & 0xFF000000) >> 24) ? ((readl(&pChipcHw->PLLDivider) & 0xFF000000) >> 24) : 256)); |
196 | } else { | 196 | } else { |
197 | /* From chip revision number B0, LCD clock is internally divided by 2 */ | 197 | /* From chip revision number B0, LCD clock is internally divided by 2 */ |
198 | if ((pPLLReg == &pChipcHw->LCDClock) && (chipcHw_getChipRevisionNumber() != chipcHw_REV_NUMBER_A0)) { | 198 | if ((pPLLReg == &pChipcHw->LCDClock) && (chipcHw_getChipRevisionNumber() != chipcHw_REV_NUMBER_A0)) { |
199 | vcoHz >>= 1; | 199 | vcoHz >>= 1; |
200 | } | 200 | } |
201 | /* Obtain PLL clock frequency using VCO dividers */ | 201 | /* Obtain PLL clock frequency using VCO dividers */ |
202 | return chipcHw_divide(vcoHz, ((*pPLLReg & chipcHw_REG_PLL_CLOCK_MDIV_MASK) ? (*pPLLReg & chipcHw_REG_PLL_CLOCK_MDIV_MASK) : 256)); | 202 | return chipcHw_divide(vcoHz, ((readl(pPLLReg) & chipcHw_REG_PLL_CLOCK_MDIV_MASK) ? (readl(pPLLReg) & chipcHw_REG_PLL_CLOCK_MDIV_MASK) : 256)); |
203 | } | 203 | } |
204 | } else if (pClockCtrl) { | 204 | } else if (pClockCtrl) { |
205 | /* Obtain divider clock frequency */ | 205 | /* Obtain divider clock frequency */ |
206 | uint32_t div; | 206 | uint32_t div; |
207 | uint32_t freq = 0; | 207 | uint32_t freq = 0; |
208 | 208 | ||
209 | if (*pClockCtrl & chipcHw_REG_DIV_CLOCK_BYPASS_SELECT) { | 209 | if (readl(pClockCtrl) & chipcHw_REG_DIV_CLOCK_BYPASS_SELECT) { |
210 | /* Return crystal clock frequency when bypassed */ | 210 | /* Return crystal clock frequency when bypassed */ |
211 | return chipcHw_XTAL_FREQ_Hz; | 211 | return chipcHw_XTAL_FREQ_Hz; |
212 | } else if (pDependentClock) { | 212 | } else if (pDependentClock) { |
213 | /* Identify the dependent clock frequency */ | 213 | /* Identify the dependent clock frequency */ |
214 | switch (dependentClockType) { | 214 | switch (dependentClockType) { |
215 | case PLL_CLOCK: | 215 | case PLL_CLOCK: |
216 | if (*pDependentClock & chipcHw_REG_PLL_CLOCK_BYPASS_SELECT) { | 216 | if (readl(pDependentClock) & chipcHw_REG_PLL_CLOCK_BYPASS_SELECT) { |
217 | /* Use crystal clock frequency when dependent PLL clock is bypassed */ | 217 | /* Use crystal clock frequency when dependent PLL clock is bypassed */ |
218 | freq = chipcHw_XTAL_FREQ_Hz; | 218 | freq = chipcHw_XTAL_FREQ_Hz; |
219 | } else { | 219 | } else { |
220 | /* Obtain PLL clock frequency using VCO dividers */ | 220 | /* Obtain PLL clock frequency using VCO dividers */ |
221 | div = *pDependentClock & chipcHw_REG_PLL_CLOCK_MDIV_MASK; | 221 | div = readl(pDependentClock) & chipcHw_REG_PLL_CLOCK_MDIV_MASK; |
222 | freq = div ? chipcHw_divide(vcoHz, div) : 0; | 222 | freq = div ? chipcHw_divide(vcoHz, div) : 0; |
223 | } | 223 | } |
224 | break; | 224 | break; |
225 | case NON_PLL_CLOCK: | 225 | case NON_PLL_CLOCK: |
226 | if (pDependentClock == (uint32_t *) &pChipcHw->ACLKClock) { | 226 | if (pDependentClock == &pChipcHw->ACLKClock) { |
227 | freq = chipcHw_getClockFrequency (chipcHw_CLOCK_BUS); | 227 | freq = chipcHw_getClockFrequency (chipcHw_CLOCK_BUS); |
228 | } else { | 228 | } else { |
229 | if (*pDependentClock & chipcHw_REG_DIV_CLOCK_BYPASS_SELECT) { | 229 | if (readl(pDependentClock) & chipcHw_REG_DIV_CLOCK_BYPASS_SELECT) { |
230 | /* Use crystal clock frequency when dependent divider clock is bypassed */ | 230 | /* Use crystal clock frequency when dependent divider clock is bypassed */ |
231 | freq = chipcHw_XTAL_FREQ_Hz; | 231 | freq = chipcHw_XTAL_FREQ_Hz; |
232 | } else { | 232 | } else { |
233 | /* Obtain divider clock frequency using XTAL dividers */ | 233 | /* Obtain divider clock frequency using XTAL dividers */ |
234 | div = *pDependentClock & chipcHw_REG_DIV_CLOCK_DIV_MASK; | 234 | div = readl(pDependentClock) & chipcHw_REG_DIV_CLOCK_DIV_MASK; |
235 | freq = chipcHw_divide (chipcHw_XTAL_FREQ_Hz, (div ? div : 256)); | 235 | freq = chipcHw_divide (chipcHw_XTAL_FREQ_Hz, (div ? div : 256)); |
236 | } | 236 | } |
237 | } | 237 | } |
@@ -242,7 +242,7 @@ chipcHw_freq chipcHw_getClockFrequency(chipcHw_CLOCK_e clock /* [ IN ] Configur | |||
242 | freq = chipcHw_XTAL_FREQ_Hz; | 242 | freq = chipcHw_XTAL_FREQ_Hz; |
243 | } | 243 | } |
244 | 244 | ||
245 | div = *pClockCtrl & chipcHw_REG_DIV_CLOCK_DIV_MASK; | 245 | div = readl(pClockCtrl) & chipcHw_REG_DIV_CLOCK_DIV_MASK; |
246 | return chipcHw_divide(freq, (div ? div : 256)); | 246 | return chipcHw_divide(freq, (div ? div : 256)); |
247 | } | 247 | } |
248 | return 0; | 248 | return 0; |
@@ -261,9 +261,9 @@ chipcHw_freq chipcHw_getClockFrequency(chipcHw_CLOCK_e clock /* [ IN ] Configur | |||
261 | chipcHw_freq chipcHw_setClockFrequency(chipcHw_CLOCK_e clock, /* [ IN ] Configurable clock */ | 261 | chipcHw_freq chipcHw_setClockFrequency(chipcHw_CLOCK_e clock, /* [ IN ] Configurable clock */ |
262 | uint32_t freq /* [ IN ] Clock frequency in Hz */ | 262 | uint32_t freq /* [ IN ] Clock frequency in Hz */ |
263 | ) { | 263 | ) { |
264 | volatile uint32_t *pPLLReg = (uint32_t *) 0x0; | 264 | uint32_t __iomem *pPLLReg = NULL; |
265 | volatile uint32_t *pClockCtrl = (uint32_t *) 0x0; | 265 | uint32_t __iomem *pClockCtrl = NULL; |
266 | volatile uint32_t *pDependentClock = (uint32_t *) 0x0; | 266 | uint32_t __iomem *pDependentClock = NULL; |
267 | uint32_t vcoFreqPll1Hz = 0; /* Effective VCO frequency for PLL1 in Hz */ | 267 | uint32_t vcoFreqPll1Hz = 0; /* Effective VCO frequency for PLL1 in Hz */ |
268 | uint32_t desVcoFreqPll1Hz = 0; /* Desired VCO frequency for PLL1 in Hz */ | 268 | uint32_t desVcoFreqPll1Hz = 0; /* Desired VCO frequency for PLL1 in Hz */ |
269 | uint32_t vcoFreqPll2Hz = 0; /* Effective VCO frequency for PLL2 in Hz */ | 269 | uint32_t vcoFreqPll2Hz = 0; /* Effective VCO frequency for PLL2 in Hz */ |
@@ -272,12 +272,12 @@ chipcHw_freq chipcHw_setClockFrequency(chipcHw_CLOCK_e clock, /* [ IN ] Configu | |||
272 | uint32_t desVcoHz = 0; | 272 | uint32_t desVcoHz = 0; |
273 | 273 | ||
274 | /* Get VCO frequencies */ | 274 | /* Get VCO frequencies */ |
275 | if ((pChipcHw->PLLPreDivider & chipcHw_REG_PLL_PREDIVIDER_NDIV_MODE_MASK) != chipcHw_REG_PLL_PREDIVIDER_NDIV_MODE_INTEGER) { | 275 | if ((readl(&pChipcHw->PLLPreDivider) & chipcHw_REG_PLL_PREDIVIDER_NDIV_MODE_MASK) != chipcHw_REG_PLL_PREDIVIDER_NDIV_MODE_INTEGER) { |
276 | uint64_t adjustFreq = 0; | 276 | uint64_t adjustFreq = 0; |
277 | 277 | ||
278 | vcoFreqPll1Hz = chipcHw_XTAL_FREQ_Hz * | 278 | vcoFreqPll1Hz = chipcHw_XTAL_FREQ_Hz * |
279 | chipcHw_divide(chipcHw_REG_PLL_PREDIVIDER_P1, chipcHw_REG_PLL_PREDIVIDER_P2) * | 279 | chipcHw_divide(chipcHw_REG_PLL_PREDIVIDER_P1, chipcHw_REG_PLL_PREDIVIDER_P2) * |
280 | ((pChipcHw->PLLPreDivider & chipcHw_REG_PLL_PREDIVIDER_NDIV_MASK) >> | 280 | ((readl(&pChipcHw->PLLPreDivider) & chipcHw_REG_PLL_PREDIVIDER_NDIV_MASK) >> |
281 | chipcHw_REG_PLL_PREDIVIDER_NDIV_SHIFT); | 281 | chipcHw_REG_PLL_PREDIVIDER_NDIV_SHIFT); |
282 | 282 | ||
283 | /* Adjusted frequency due to chipcHw_REG_PLL_DIVIDER_NDIV_f_SS */ | 283 | /* Adjusted frequency due to chipcHw_REG_PLL_DIVIDER_NDIV_f_SS */ |
@@ -289,16 +289,16 @@ chipcHw_freq chipcHw_setClockFrequency(chipcHw_CLOCK_e clock, /* [ IN ] Configu | |||
289 | /* Desired VCO frequency */ | 289 | /* Desired VCO frequency */ |
290 | desVcoFreqPll1Hz = chipcHw_XTAL_FREQ_Hz * | 290 | desVcoFreqPll1Hz = chipcHw_XTAL_FREQ_Hz * |
291 | chipcHw_divide(chipcHw_REG_PLL_PREDIVIDER_P1, chipcHw_REG_PLL_PREDIVIDER_P2) * | 291 | chipcHw_divide(chipcHw_REG_PLL_PREDIVIDER_P1, chipcHw_REG_PLL_PREDIVIDER_P2) * |
292 | (((pChipcHw->PLLPreDivider & chipcHw_REG_PLL_PREDIVIDER_NDIV_MASK) >> | 292 | (((readl(&pChipcHw->PLLPreDivider) & chipcHw_REG_PLL_PREDIVIDER_NDIV_MASK) >> |
293 | chipcHw_REG_PLL_PREDIVIDER_NDIV_SHIFT) + 1); | 293 | chipcHw_REG_PLL_PREDIVIDER_NDIV_SHIFT) + 1); |
294 | } else { | 294 | } else { |
295 | vcoFreqPll1Hz = desVcoFreqPll1Hz = chipcHw_XTAL_FREQ_Hz * | 295 | vcoFreqPll1Hz = desVcoFreqPll1Hz = chipcHw_XTAL_FREQ_Hz * |
296 | chipcHw_divide(chipcHw_REG_PLL_PREDIVIDER_P1, chipcHw_REG_PLL_PREDIVIDER_P2) * | 296 | chipcHw_divide(chipcHw_REG_PLL_PREDIVIDER_P1, chipcHw_REG_PLL_PREDIVIDER_P2) * |
297 | ((pChipcHw->PLLPreDivider & chipcHw_REG_PLL_PREDIVIDER_NDIV_MASK) >> | 297 | ((readl(&pChipcHw->PLLPreDivider) & chipcHw_REG_PLL_PREDIVIDER_NDIV_MASK) >> |
298 | chipcHw_REG_PLL_PREDIVIDER_NDIV_SHIFT); | 298 | chipcHw_REG_PLL_PREDIVIDER_NDIV_SHIFT); |
299 | } | 299 | } |
300 | vcoFreqPll2Hz = chipcHw_XTAL_FREQ_Hz * chipcHw_divide(chipcHw_REG_PLL_PREDIVIDER_P1, chipcHw_REG_PLL_PREDIVIDER_P2) * | 300 | vcoFreqPll2Hz = chipcHw_XTAL_FREQ_Hz * chipcHw_divide(chipcHw_REG_PLL_PREDIVIDER_P1, chipcHw_REG_PLL_PREDIVIDER_P2) * |
301 | ((pChipcHw->PLLPreDivider2 & chipcHw_REG_PLL_PREDIVIDER_NDIV_MASK) >> | 301 | ((readl(&pChipcHw->PLLPreDivider2) & chipcHw_REG_PLL_PREDIVIDER_NDIV_MASK) >> |
302 | chipcHw_REG_PLL_PREDIVIDER_NDIV_SHIFT); | 302 | chipcHw_REG_PLL_PREDIVIDER_NDIV_SHIFT); |
303 | 303 | ||
304 | switch (clock) { | 304 | switch (clock) { |
@@ -307,8 +307,7 @@ chipcHw_freq chipcHw_setClockFrequency(chipcHw_CLOCK_e clock, /* [ IN ] Configu | |||
307 | { | 307 | { |
308 | REG_LOCAL_IRQ_SAVE; | 308 | REG_LOCAL_IRQ_SAVE; |
309 | /* Dvide DDR_phy by two to obtain DDR_ctrl clock */ | 309 | /* Dvide DDR_phy by two to obtain DDR_ctrl clock */ |
310 | pChipcHw->DDRClock = (pChipcHw->DDRClock & ~chipcHw_REG_PLL_CLOCK_TO_BUS_RATIO_MASK) | ((((freq / 2) / chipcHw_getClockFrequency(chipcHw_CLOCK_BUS)) - 1) | 310 | writel((readl(&pChipcHw->DDRClock) & ~chipcHw_REG_PLL_CLOCK_TO_BUS_RATIO_MASK) | ((((freq / 2) / chipcHw_getClockFrequency(chipcHw_CLOCK_BUS)) - 1) << chipcHw_REG_PLL_CLOCK_TO_BUS_RATIO_SHIFT), &pChipcHw->DDRClock); |
311 | << chipcHw_REG_PLL_CLOCK_TO_BUS_RATIO_SHIFT); | ||
312 | REG_LOCAL_IRQ_RESTORE; | 311 | REG_LOCAL_IRQ_RESTORE; |
313 | } | 312 | } |
314 | pPLLReg = &pChipcHw->DDRClock; | 313 | pPLLReg = &pChipcHw->DDRClock; |
@@ -329,8 +328,7 @@ chipcHw_freq chipcHw_setClockFrequency(chipcHw_CLOCK_e clock, /* [ IN ] Configu | |||
329 | /* Configure the VPM:BUS ratio settings */ | 328 | /* Configure the VPM:BUS ratio settings */ |
330 | { | 329 | { |
331 | REG_LOCAL_IRQ_SAVE; | 330 | REG_LOCAL_IRQ_SAVE; |
332 | pChipcHw->VPMClock = (pChipcHw->VPMClock & ~chipcHw_REG_PLL_CLOCK_TO_BUS_RATIO_MASK) | ((chipcHw_divide (freq, chipcHw_getClockFrequency(chipcHw_CLOCK_BUS)) - 1) | 331 | writel((readl(&pChipcHw->VPMClock) & ~chipcHw_REG_PLL_CLOCK_TO_BUS_RATIO_MASK) | ((chipcHw_divide (freq, chipcHw_getClockFrequency(chipcHw_CLOCK_BUS)) - 1) << chipcHw_REG_PLL_CLOCK_TO_BUS_RATIO_SHIFT), &pChipcHw->VPMClock); |
333 | << chipcHw_REG_PLL_CLOCK_TO_BUS_RATIO_SHIFT); | ||
334 | REG_LOCAL_IRQ_RESTORE; | 332 | REG_LOCAL_IRQ_RESTORE; |
335 | } | 333 | } |
336 | pPLLReg = &pChipcHw->VPMClock; | 334 | pPLLReg = &pChipcHw->VPMClock; |
@@ -428,9 +426,9 @@ chipcHw_freq chipcHw_setClockFrequency(chipcHw_CLOCK_e clock, /* [ IN ] Configu | |||
428 | /* For DDR settings use only the PLL divider clock */ | 426 | /* For DDR settings use only the PLL divider clock */ |
429 | if (pPLLReg == &pChipcHw->DDRClock) { | 427 | if (pPLLReg == &pChipcHw->DDRClock) { |
430 | /* Set M1DIV for PLL1, which controls the DDR clock */ | 428 | /* Set M1DIV for PLL1, which controls the DDR clock */ |
431 | reg32_write(&pChipcHw->PLLDivider, (pChipcHw->PLLDivider & 0x00FFFFFF) | ((chipcHw_REG_PLL_DIVIDER_MDIV (desVcoHz, freq)) << 24)); | 429 | reg32_write(&pChipcHw->PLLDivider, (readl(&pChipcHw->PLLDivider) & 0x00FFFFFF) | ((chipcHw_REG_PLL_DIVIDER_MDIV (desVcoHz, freq)) << 24)); |
432 | /* Calculate expected frequency */ | 430 | /* Calculate expected frequency */ |
433 | freq = chipcHw_divide(vcoHz, (((pChipcHw->PLLDivider & 0xFF000000) >> 24) ? ((pChipcHw->PLLDivider & 0xFF000000) >> 24) : 256)); | 431 | freq = chipcHw_divide(vcoHz, (((readl(&pChipcHw->PLLDivider) & 0xFF000000) >> 24) ? ((readl(&pChipcHw->PLLDivider) & 0xFF000000) >> 24) : 256)); |
434 | } else { | 432 | } else { |
435 | /* From chip revision number B0, LCD clock is internally divided by 2 */ | 433 | /* From chip revision number B0, LCD clock is internally divided by 2 */ |
436 | if ((pPLLReg == &pChipcHw->LCDClock) && (chipcHw_getChipRevisionNumber() != chipcHw_REV_NUMBER_A0)) { | 434 | if ((pPLLReg == &pChipcHw->LCDClock) && (chipcHw_getChipRevisionNumber() != chipcHw_REV_NUMBER_A0)) { |
@@ -441,7 +439,7 @@ chipcHw_freq chipcHw_setClockFrequency(chipcHw_CLOCK_e clock, /* [ IN ] Configu | |||
441 | reg32_modify_and(pPLLReg, ~(chipcHw_REG_PLL_CLOCK_MDIV_MASK)); | 439 | reg32_modify_and(pPLLReg, ~(chipcHw_REG_PLL_CLOCK_MDIV_MASK)); |
442 | reg32_modify_or(pPLLReg, chipcHw_REG_PLL_DIVIDER_MDIV(desVcoHz, freq)); | 440 | reg32_modify_or(pPLLReg, chipcHw_REG_PLL_DIVIDER_MDIV(desVcoHz, freq)); |
443 | /* Calculate expected frequency */ | 441 | /* Calculate expected frequency */ |
444 | freq = chipcHw_divide(vcoHz, ((*(pPLLReg) & chipcHw_REG_PLL_CLOCK_MDIV_MASK) ? (*(pPLLReg) & chipcHw_REG_PLL_CLOCK_MDIV_MASK) : 256)); | 442 | freq = chipcHw_divide(vcoHz, ((readl(pPLLReg) & chipcHw_REG_PLL_CLOCK_MDIV_MASK) ? (readl(pPLLReg) & chipcHw_REG_PLL_CLOCK_MDIV_MASK) : 256)); |
445 | } | 443 | } |
446 | /* Wait for for atleast 200ns as per the protocol to change frequency */ | 444 | /* Wait for for atleast 200ns as per the protocol to change frequency */ |
447 | udelay(1); | 445 | udelay(1); |
@@ -460,16 +458,16 @@ chipcHw_freq chipcHw_setClockFrequency(chipcHw_CLOCK_e clock, /* [ IN ] Configu | |||
460 | if (pDependentClock) { | 458 | if (pDependentClock) { |
461 | switch (dependentClockType) { | 459 | switch (dependentClockType) { |
462 | case PLL_CLOCK: | 460 | case PLL_CLOCK: |
463 | divider = chipcHw_divide(chipcHw_divide (desVcoHz, (*pDependentClock & chipcHw_REG_PLL_CLOCK_MDIV_MASK)), freq); | 461 | divider = chipcHw_divide(chipcHw_divide (desVcoHz, (readl(pDependentClock) & chipcHw_REG_PLL_CLOCK_MDIV_MASK)), freq); |
464 | break; | 462 | break; |
465 | case NON_PLL_CLOCK: | 463 | case NON_PLL_CLOCK: |
466 | { | 464 | { |
467 | uint32_t sourceClock = 0; | 465 | uint32_t sourceClock = 0; |
468 | 466 | ||
469 | if (pDependentClock == (uint32_t *) &pChipcHw->ACLKClock) { | 467 | if (pDependentClock == &pChipcHw->ACLKClock) { |
470 | sourceClock = chipcHw_getClockFrequency (chipcHw_CLOCK_BUS); | 468 | sourceClock = chipcHw_getClockFrequency (chipcHw_CLOCK_BUS); |
471 | } else { | 469 | } else { |
472 | uint32_t div = *pDependentClock & chipcHw_REG_DIV_CLOCK_DIV_MASK; | 470 | uint32_t div = readl(pDependentClock) & chipcHw_REG_DIV_CLOCK_DIV_MASK; |
473 | sourceClock = chipcHw_divide (chipcHw_XTAL_FREQ_Hz, ((div) ? div : 256)); | 471 | sourceClock = chipcHw_divide (chipcHw_XTAL_FREQ_Hz, ((div) ? div : 256)); |
474 | } | 472 | } |
475 | divider = chipcHw_divide(sourceClock, freq); | 473 | divider = chipcHw_divide(sourceClock, freq); |
@@ -483,7 +481,7 @@ chipcHw_freq chipcHw_setClockFrequency(chipcHw_CLOCK_e clock, /* [ IN ] Configu | |||
483 | if (divider) { | 481 | if (divider) { |
484 | REG_LOCAL_IRQ_SAVE; | 482 | REG_LOCAL_IRQ_SAVE; |
485 | /* Set the divider to obtain the required frequency */ | 483 | /* Set the divider to obtain the required frequency */ |
486 | *pClockCtrl = (*pClockCtrl & (~chipcHw_REG_DIV_CLOCK_DIV_MASK)) | (((divider > 256) ? chipcHw_REG_DIV_CLOCK_DIV_256 : divider) & chipcHw_REG_DIV_CLOCK_DIV_MASK); | 484 | writel((readl(pClockCtrl) & (~chipcHw_REG_DIV_CLOCK_DIV_MASK)) | (((divider > 256) ? chipcHw_REG_DIV_CLOCK_DIV_256 : divider) & chipcHw_REG_DIV_CLOCK_DIV_MASK), pClockCtrl); |
487 | REG_LOCAL_IRQ_RESTORE; | 485 | REG_LOCAL_IRQ_RESTORE; |
488 | return freq; | 486 | return freq; |
489 | } | 487 | } |
@@ -515,25 +513,26 @@ static int vpmPhaseAlignA0(void) | |||
515 | int count = 0; | 513 | int count = 0; |
516 | 514 | ||
517 | for (iter = 0; (iter < MAX_PHASE_ALIGN_ATTEMPTS) && (adjustCount < MAX_PHASE_ADJUST_COUNT); iter++) { | 515 | for (iter = 0; (iter < MAX_PHASE_ALIGN_ATTEMPTS) && (adjustCount < MAX_PHASE_ADJUST_COUNT); iter++) { |
518 | phaseControl = (pChipcHw->VPMClock & chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_MASK) >> chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_SHIFT; | 516 | phaseControl = (readl(&pChipcHw->VPMClock) & chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_MASK) >> chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_SHIFT; |
519 | phaseValue = 0; | 517 | phaseValue = 0; |
520 | prevPhaseComp = 0; | 518 | prevPhaseComp = 0; |
521 | 519 | ||
522 | /* Step 1: Look for falling PH_COMP transition */ | 520 | /* Step 1: Look for falling PH_COMP transition */ |
523 | 521 | ||
524 | /* Read the contents of VPM Clock resgister */ | 522 | /* Read the contents of VPM Clock resgister */ |
525 | phaseValue = pChipcHw->VPMClock; | 523 | phaseValue = readl(&pChipcHw->VPMClock); |
526 | do { | 524 | do { |
527 | /* Store previous value of phase comparator */ | 525 | /* Store previous value of phase comparator */ |
528 | prevPhaseComp = phaseValue & chipcHw_REG_PLL_CLOCK_PHASE_COMP; | 526 | prevPhaseComp = phaseValue & chipcHw_REG_PLL_CLOCK_PHASE_COMP; |
529 | /* Change the value of PH_CTRL. */ | 527 | /* Change the value of PH_CTRL. */ |
530 | reg32_write(&pChipcHw->VPMClock, (pChipcHw->VPMClock & (~chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_MASK)) | (phaseControl << chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_SHIFT)); | 528 | reg32_write(&pChipcHw->VPMClock, |
529 | (readl(&pChipcHw->VPMClock) & (~chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_MASK)) | (phaseControl << chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_SHIFT)); | ||
531 | /* Wait atleast 20 ns */ | 530 | /* Wait atleast 20 ns */ |
532 | udelay(1); | 531 | udelay(1); |
533 | /* Toggle the LOAD_CH after phase control is written. */ | 532 | /* Toggle the LOAD_CH after phase control is written. */ |
534 | pChipcHw->VPMClock ^= chipcHw_REG_PLL_CLOCK_PHASE_UPDATE_ENABLE; | 533 | writel(readl(&pChipcHw->VPMClock) ^ chipcHw_REG_PLL_CLOCK_PHASE_UPDATE_ENABLE, &pChipcHw->VPMClock); |
535 | /* Read the contents of VPM Clock resgister. */ | 534 | /* Read the contents of VPM Clock resgister. */ |
536 | phaseValue = pChipcHw->VPMClock; | 535 | phaseValue = readl(&pChipcHw->VPMClock); |
537 | 536 | ||
538 | if ((phaseValue & chipcHw_REG_PLL_CLOCK_PHASE_COMP) == 0x0) { | 537 | if ((phaseValue & chipcHw_REG_PLL_CLOCK_PHASE_COMP) == 0x0) { |
539 | phaseControl = (0x3F & (phaseControl - 1)); | 538 | phaseControl = (0x3F & (phaseControl - 1)); |
@@ -557,12 +556,13 @@ static int vpmPhaseAlignA0(void) | |||
557 | 556 | ||
558 | for (count = 0; (count < 5) && ((phaseValue & chipcHw_REG_PLL_CLOCK_PHASE_COMP) == 0); count++) { | 557 | for (count = 0; (count < 5) && ((phaseValue & chipcHw_REG_PLL_CLOCK_PHASE_COMP) == 0); count++) { |
559 | phaseControl = (0x3F & (phaseControl + 1)); | 558 | phaseControl = (0x3F & (phaseControl + 1)); |
560 | reg32_write(&pChipcHw->VPMClock, (pChipcHw->VPMClock & (~chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_MASK)) | (phaseControl << chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_SHIFT)); | 559 | reg32_write(&pChipcHw->VPMClock, |
560 | (readl(&pChipcHw->VPMClock) & (~chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_MASK)) | (phaseControl << chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_SHIFT)); | ||
561 | /* Wait atleast 20 ns */ | 561 | /* Wait atleast 20 ns */ |
562 | udelay(1); | 562 | udelay(1); |
563 | /* Toggle the LOAD_CH after phase control is written. */ | 563 | /* Toggle the LOAD_CH after phase control is written. */ |
564 | pChipcHw->VPMClock ^= chipcHw_REG_PLL_CLOCK_PHASE_UPDATE_ENABLE; | 564 | writel(readl(&pChipcHw->VPMClock) ^ chipcHw_REG_PLL_CLOCK_PHASE_UPDATE_ENABLE, &pChipcHw->VPMClock); |
565 | phaseValue = pChipcHw->VPMClock; | 565 | phaseValue = readl(&pChipcHw->VPMClock); |
566 | /* Count number of adjustment made */ | 566 | /* Count number of adjustment made */ |
567 | adjustCount++; | 567 | adjustCount++; |
568 | } | 568 | } |
@@ -581,12 +581,13 @@ static int vpmPhaseAlignA0(void) | |||
581 | 581 | ||
582 | for (count = 0; (count < 3) && ((phaseValue & chipcHw_REG_PLL_CLOCK_PHASE_COMP) == 0); count++) { | 582 | for (count = 0; (count < 3) && ((phaseValue & chipcHw_REG_PLL_CLOCK_PHASE_COMP) == 0); count++) { |
583 | phaseControl = (0x3F & (phaseControl - 1)); | 583 | phaseControl = (0x3F & (phaseControl - 1)); |
584 | reg32_write(&pChipcHw->VPMClock, (pChipcHw->VPMClock & (~chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_MASK)) | (phaseControl << chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_SHIFT)); | 584 | reg32_write(&pChipcHw->VPMClock, |
585 | (readl(&pChipcHw->VPMClock) & (~chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_MASK)) | (phaseControl << chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_SHIFT)); | ||
585 | /* Wait atleast 20 ns */ | 586 | /* Wait atleast 20 ns */ |
586 | udelay(1); | 587 | udelay(1); |
587 | /* Toggle the LOAD_CH after phase control is written. */ | 588 | /* Toggle the LOAD_CH after phase control is written. */ |
588 | pChipcHw->VPMClock ^= chipcHw_REG_PLL_CLOCK_PHASE_UPDATE_ENABLE; | 589 | writel(readl(&pChipcHw->VPMClock) ^ chipcHw_REG_PLL_CLOCK_PHASE_UPDATE_ENABLE, &pChipcHw->VPMClock); |
589 | phaseValue = pChipcHw->VPMClock; | 590 | phaseValue = readl(&pChipcHw->VPMClock); |
590 | /* Count number of adjustment made */ | 591 | /* Count number of adjustment made */ |
591 | adjustCount++; | 592 | adjustCount++; |
592 | } | 593 | } |
@@ -605,12 +606,13 @@ static int vpmPhaseAlignA0(void) | |||
605 | 606 | ||
606 | for (count = 0; (count < 5); count++) { | 607 | for (count = 0; (count < 5); count++) { |
607 | phaseControl = (0x3F & (phaseControl - 1)); | 608 | phaseControl = (0x3F & (phaseControl - 1)); |
608 | reg32_write(&pChipcHw->VPMClock, (pChipcHw->VPMClock & (~chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_MASK)) | (phaseControl << chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_SHIFT)); | 609 | reg32_write(&pChipcHw->VPMClock, |
610 | (readl(&pChipcHw->VPMClock) & (~chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_MASK)) | (phaseControl << chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_SHIFT)); | ||
609 | /* Wait atleast 20 ns */ | 611 | /* Wait atleast 20 ns */ |
610 | udelay(1); | 612 | udelay(1); |
611 | /* Toggle the LOAD_CH after phase control is written. */ | 613 | /* Toggle the LOAD_CH after phase control is written. */ |
612 | pChipcHw->VPMClock ^= chipcHw_REG_PLL_CLOCK_PHASE_UPDATE_ENABLE; | 614 | writel(readl(&pChipcHw->VPMClock) ^ chipcHw_REG_PLL_CLOCK_PHASE_UPDATE_ENABLE, &pChipcHw->VPMClock); |
613 | phaseValue = pChipcHw->VPMClock; | 615 | phaseValue = readl(&pChipcHw->VPMClock); |
614 | /* Count number of adjustment made */ | 616 | /* Count number of adjustment made */ |
615 | adjustCount++; | 617 | adjustCount++; |
616 | } | 618 | } |
@@ -631,14 +633,14 @@ static int vpmPhaseAlignA0(void) | |||
631 | /* Store previous value of phase comparator */ | 633 | /* Store previous value of phase comparator */ |
632 | prevPhaseComp = phaseValue; | 634 | prevPhaseComp = phaseValue; |
633 | /* Change the value of PH_CTRL. */ | 635 | /* Change the value of PH_CTRL. */ |
634 | reg32_write(&pChipcHw->VPMClock, (pChipcHw->VPMClock & (~chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_MASK)) | (phaseControl << chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_SHIFT)); | 636 | reg32_write(&pChipcHw->VPMClock, |
637 | (readl(&pChipcHw->VPMClock) & (~chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_MASK)) | (phaseControl << chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_SHIFT)); | ||
635 | /* Wait atleast 20 ns */ | 638 | /* Wait atleast 20 ns */ |
636 | udelay(1); | 639 | udelay(1); |
637 | /* Toggle the LOAD_CH after phase control is written. */ | 640 | /* Toggle the LOAD_CH after phase control is written. */ |
638 | pChipcHw->VPMClock ^= | 641 | writel(readl(&pChipcHw->VPMClock) ^ chipcHw_REG_PLL_CLOCK_PHASE_UPDATE_ENABLE, &pChipcHw->VPMClock); |
639 | chipcHw_REG_PLL_CLOCK_PHASE_UPDATE_ENABLE; | ||
640 | /* Read the contents of VPM Clock resgister. */ | 642 | /* Read the contents of VPM Clock resgister. */ |
641 | phaseValue = pChipcHw->VPMClock; | 643 | phaseValue = readl(&pChipcHw->VPMClock); |
642 | 644 | ||
643 | if ((phaseValue & chipcHw_REG_PLL_CLOCK_PHASE_COMP) == 0x0) { | 645 | if ((phaseValue & chipcHw_REG_PLL_CLOCK_PHASE_COMP) == 0x0) { |
644 | phaseControl = (0x3F & (phaseControl - 1)); | 646 | phaseControl = (0x3F & (phaseControl - 1)); |
@@ -661,13 +663,13 @@ static int vpmPhaseAlignA0(void) | |||
661 | } | 663 | } |
662 | 664 | ||
663 | /* For VPM Phase should be perfectly aligned. */ | 665 | /* For VPM Phase should be perfectly aligned. */ |
664 | phaseControl = (((pChipcHw->VPMClock >> chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_SHIFT) - 1) & 0x3F); | 666 | phaseControl = (((readl(&pChipcHw->VPMClock) >> chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_SHIFT) - 1) & 0x3F); |
665 | { | 667 | { |
666 | REG_LOCAL_IRQ_SAVE; | 668 | REG_LOCAL_IRQ_SAVE; |
667 | 669 | ||
668 | pChipcHw->VPMClock = (pChipcHw->VPMClock & ~chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_MASK) | (phaseControl << chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_SHIFT); | 670 | writel((readl(&pChipcHw->VPMClock) & ~chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_MASK) | (phaseControl << chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_SHIFT), &pChipcHw->VPMClock); |
669 | /* Load new phase value */ | 671 | /* Load new phase value */ |
670 | pChipcHw->VPMClock ^= chipcHw_REG_PLL_CLOCK_PHASE_UPDATE_ENABLE; | 672 | writel(readl(&pChipcHw->VPMClock) ^ chipcHw_REG_PLL_CLOCK_PHASE_UPDATE_ENABLE, &pChipcHw->VPMClock); |
671 | 673 | ||
672 | REG_LOCAL_IRQ_RESTORE; | 674 | REG_LOCAL_IRQ_RESTORE; |
673 | } | 675 | } |
@@ -697,7 +699,7 @@ int chipcHw_vpmPhaseAlign(void) | |||
697 | int adjustCount = 0; | 699 | int adjustCount = 0; |
698 | 700 | ||
699 | /* Disable VPM access */ | 701 | /* Disable VPM access */ |
700 | pChipcHw->Spare1 &= ~chipcHw_REG_SPARE1_VPM_BUS_ACCESS_ENABLE; | 702 | writel(readl(&pChipcHw->Spare1) & ~chipcHw_REG_SPARE1_VPM_BUS_ACCESS_ENABLE, &pChipcHw->Spare1); |
701 | /* Disable HW VPM phase alignment */ | 703 | /* Disable HW VPM phase alignment */ |
702 | chipcHw_vpmHwPhaseAlignDisable(); | 704 | chipcHw_vpmHwPhaseAlignDisable(); |
703 | /* Enable SW VPM phase alignment */ | 705 | /* Enable SW VPM phase alignment */ |
@@ -715,23 +717,24 @@ int chipcHw_vpmPhaseAlign(void) | |||
715 | phaseControl--; | 717 | phaseControl--; |
716 | } else { | 718 | } else { |
717 | /* Enable VPM access */ | 719 | /* Enable VPM access */ |
718 | pChipcHw->Spare1 |= chipcHw_REG_SPARE1_VPM_BUS_ACCESS_ENABLE; | 720 | writel(readl(&pChipcHw->Spare1) | chipcHw_REG_SPARE1_VPM_BUS_ACCESS_ENABLE, &pChipcHw->Spare1); |
719 | /* Return adjust count */ | 721 | /* Return adjust count */ |
720 | return adjustCount; | 722 | return adjustCount; |
721 | } | 723 | } |
722 | /* Change the value of PH_CTRL. */ | 724 | /* Change the value of PH_CTRL. */ |
723 | reg32_write(&pChipcHw->VPMClock, (pChipcHw->VPMClock & (~chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_MASK)) | (phaseControl << chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_SHIFT)); | 725 | reg32_write(&pChipcHw->VPMClock, |
726 | (readl(&pChipcHw->VPMClock) & (~chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_MASK)) | (phaseControl << chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_SHIFT)); | ||
724 | /* Wait atleast 20 ns */ | 727 | /* Wait atleast 20 ns */ |
725 | udelay(1); | 728 | udelay(1); |
726 | /* Toggle the LOAD_CH after phase control is written. */ | 729 | /* Toggle the LOAD_CH after phase control is written. */ |
727 | pChipcHw->VPMClock ^= chipcHw_REG_PLL_CLOCK_PHASE_UPDATE_ENABLE; | 730 | writel(readl(&pChipcHw->VPMClock) ^ chipcHw_REG_PLL_CLOCK_PHASE_UPDATE_ENABLE, &pChipcHw->VPMClock); |
728 | /* Count adjustment */ | 731 | /* Count adjustment */ |
729 | adjustCount++; | 732 | adjustCount++; |
730 | } | 733 | } |
731 | } | 734 | } |
732 | 735 | ||
733 | /* Disable VPM access */ | 736 | /* Disable VPM access */ |
734 | pChipcHw->Spare1 &= ~chipcHw_REG_SPARE1_VPM_BUS_ACCESS_ENABLE; | 737 | writel(readl(&pChipcHw->Spare1) & ~chipcHw_REG_SPARE1_VPM_BUS_ACCESS_ENABLE, &pChipcHw->Spare1); |
735 | return -1; | 738 | return -1; |
736 | } | 739 | } |
737 | 740 | ||