| .. | .. |
|---|
| 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: |
|---|