.. | .. |
---|
267 | 267 | * When power on or changing PLL setting, |
---|
268 | 268 | * we must force PLL into slow mode to ensure output stable clock. |
---|
269 | 269 | */ |
---|
270 | | - rk_clrsetreg(base + pll->mode_offset, |
---|
271 | | - pll->mode_mask << pll->mode_shift, |
---|
272 | | - RKCLK_PLL_MODE_SLOW << pll->mode_shift); |
---|
| 270 | + if (!(pll->pll_flags & ROCKCHIP_PLL_FIXED_MODE)) { |
---|
| 271 | + rk_clrsetreg(base + pll->mode_offset, |
---|
| 272 | + pll->mode_mask << pll->mode_shift, |
---|
| 273 | + RKCLK_PLL_MODE_SLOW << pll->mode_shift); |
---|
| 274 | + } |
---|
273 | 275 | |
---|
274 | 276 | /* Power down */ |
---|
275 | 277 | rk_setreg(base + pll->con_offset + 0x4, |
---|
.. | .. |
---|
308 | 310 | if (!(readl(base + pll->con_offset + 0x4) & (1 << pll->lock_shift))) |
---|
309 | 311 | printf("%s: wait pll lock timeout! pll_id=%ld\n", __func__, pll_id); |
---|
310 | 312 | |
---|
311 | | - rk_clrsetreg(base + pll->mode_offset, pll->mode_mask << pll->mode_shift, |
---|
312 | | - RKCLK_PLL_MODE_NORMAL << pll->mode_shift); |
---|
| 313 | + if (!(pll->pll_flags & ROCKCHIP_PLL_FIXED_MODE)) { |
---|
| 314 | + rk_clrsetreg(base + pll->mode_offset, pll->mode_mask << pll->mode_shift, |
---|
| 315 | + RKCLK_PLL_MODE_NORMAL << pll->mode_shift); |
---|
| 316 | + } |
---|
| 317 | + |
---|
313 | 318 | debug("PLL at %p: con0=%x con1= %x con2= %x mode= %x\n", |
---|
314 | 319 | pll, readl(base + pll->con_offset), |
---|
315 | 320 | readl(base + pll->con_offset + 0x4), |
---|
.. | .. |
---|
325 | 330 | u32 refdiv, fbdiv, postdiv1, postdiv2, dsmpd, frac; |
---|
326 | 331 | u32 con = 0, shift, mask; |
---|
327 | 332 | ulong rate; |
---|
| 333 | + int mode; |
---|
328 | 334 | |
---|
329 | 335 | con = readl(base + pll->mode_offset); |
---|
330 | 336 | shift = pll->mode_shift; |
---|
331 | 337 | mask = pll->mode_mask << shift; |
---|
332 | 338 | |
---|
333 | | - switch ((con & mask) >> shift) { |
---|
| 339 | + if (!(pll->pll_flags & ROCKCHIP_PLL_FIXED_MODE)) |
---|
| 340 | + mode = (con & mask) >> shift; |
---|
| 341 | + else |
---|
| 342 | + mode = RKCLK_PLL_MODE_NORMAL; |
---|
| 343 | + |
---|
| 344 | + switch (mode) { |
---|
334 | 345 | case RKCLK_PLL_MODE_SLOW: |
---|
335 | 346 | return OSC_HZ; |
---|
336 | 347 | case RKCLK_PLL_MODE_NORMAL: |
---|