aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter De Schrijver <pdeschrijver@nvidia.com>2013-10-04 10:28:34 -0400
committerPeter De Schrijver <pdeschrijver@nvidia.com>2013-11-26 11:46:22 -0500
commitebe142b2ad35d5656caae35d5deefdbebe847d3b (patch)
treea083b7ced3074d874fe9ac40b9311b9a1fae9054
parent8e9cc80aa348938078c3c1a7ab55efb3c40990e3 (diff)
clk: tegra: move fields to tegra_clk_pll_params
Move some fields related to the PLL HW description to the tegra_clk_pll_params. This allows some PLL code to be moved to common files later. Signed-off-by: Peter De Schrijver <pdeschrijver@nvidia.com>
-rw-r--r--drivers/clk/tegra/clk-pll.c138
-rw-r--r--drivers/clk/tegra/clk-tegra114.c74
-rw-r--r--drivers/clk/tegra/clk-tegra20.c44
-rw-r--r--drivers/clk/tegra/clk-tegra30.c62
-rw-r--r--drivers/clk/tegra/clk.h34
5 files changed, 175 insertions, 177 deletions
diff --git a/drivers/clk/tegra/clk-pll.c b/drivers/clk/tegra/clk-pll.c
index 48f6bffc1cee..3aa85bf2f425 100644
--- a/drivers/clk/tegra/clk-pll.c
+++ b/drivers/clk/tegra/clk-pll.c
@@ -150,7 +150,7 @@
150#define mask(w) ((1 << (w)) - 1) 150#define mask(w) ((1 << (w)) - 1)
151#define divm_mask(p) mask(p->params->div_nmp->divm_width) 151#define divm_mask(p) mask(p->params->div_nmp->divm_width)
152#define divn_mask(p) mask(p->params->div_nmp->divn_width) 152#define divn_mask(p) mask(p->params->div_nmp->divn_width)
153#define divp_mask(p) (p->flags & TEGRA_PLLU ? PLLU_POST_DIVP_MASK : \ 153#define divp_mask(p) (p->params->flags & TEGRA_PLLU ? PLLU_POST_DIVP_MASK :\
154 mask(p->params->div_nmp->divp_width)) 154 mask(p->params->div_nmp->divp_width))
155 155
156#define divm_max(p) (divm_mask(p)) 156#define divm_max(p) (divm_mask(p))
@@ -170,10 +170,10 @@ static void clk_pll_enable_lock(struct tegra_clk_pll *pll)
170{ 170{
171 u32 val; 171 u32 val;
172 172
173 if (!(pll->flags & TEGRA_PLL_USE_LOCK)) 173 if (!(pll->params->flags & TEGRA_PLL_USE_LOCK))
174 return; 174 return;
175 175
176 if (!(pll->flags & TEGRA_PLL_HAS_LOCK_ENABLE)) 176 if (!(pll->params->flags & TEGRA_PLL_HAS_LOCK_ENABLE))
177 return; 177 return;
178 178
179 val = pll_readl_misc(pll); 179 val = pll_readl_misc(pll);
@@ -187,13 +187,13 @@ static int clk_pll_wait_for_lock(struct tegra_clk_pll *pll)
187 u32 val, lock_mask; 187 u32 val, lock_mask;
188 void __iomem *lock_addr; 188 void __iomem *lock_addr;
189 189
190 if (!(pll->flags & TEGRA_PLL_USE_LOCK)) { 190 if (!(pll->params->flags & TEGRA_PLL_USE_LOCK)) {
191 udelay(pll->params->lock_delay); 191 udelay(pll->params->lock_delay);
192 return 0; 192 return 0;
193 } 193 }
194 194
195 lock_addr = pll->clk_base; 195 lock_addr = pll->clk_base;
196 if (pll->flags & TEGRA_PLL_LOCK_MISC) 196 if (pll->params->flags & TEGRA_PLL_LOCK_MISC)
197 lock_addr += pll->params->misc_reg; 197 lock_addr += pll->params->misc_reg;
198 else 198 else
199 lock_addr += pll->params->base_reg; 199 lock_addr += pll->params->base_reg;
@@ -220,7 +220,7 @@ static int clk_pll_is_enabled(struct clk_hw *hw)
220 struct tegra_clk_pll *pll = to_clk_pll(hw); 220 struct tegra_clk_pll *pll = to_clk_pll(hw);
221 u32 val; 221 u32 val;
222 222
223 if (pll->flags & TEGRA_PLLM) { 223 if (pll->params->flags & TEGRA_PLLM) {
224 val = readl_relaxed(pll->pmc + PMC_PLLP_WB0_OVERRIDE); 224 val = readl_relaxed(pll->pmc + PMC_PLLP_WB0_OVERRIDE);
225 if (val & PMC_PLLP_WB0_OVERRIDE_PLLM_OVERRIDE) 225 if (val & PMC_PLLP_WB0_OVERRIDE_PLLM_OVERRIDE)
226 return val & PMC_PLLP_WB0_OVERRIDE_PLLM_ENABLE ? 1 : 0; 226 return val & PMC_PLLP_WB0_OVERRIDE_PLLM_ENABLE ? 1 : 0;
@@ -239,12 +239,12 @@ static void _clk_pll_enable(struct clk_hw *hw)
239 clk_pll_enable_lock(pll); 239 clk_pll_enable_lock(pll);
240 240
241 val = pll_readl_base(pll); 241 val = pll_readl_base(pll);
242 if (pll->flags & TEGRA_PLL_BYPASS) 242 if (pll->params->flags & TEGRA_PLL_BYPASS)
243 val &= ~PLL_BASE_BYPASS; 243 val &= ~PLL_BASE_BYPASS;
244 val |= PLL_BASE_ENABLE; 244 val |= PLL_BASE_ENABLE;
245 pll_writel_base(val, pll); 245 pll_writel_base(val, pll);
246 246
247 if (pll->flags & TEGRA_PLLM) { 247 if (pll->params->flags & TEGRA_PLLM) {
248 val = readl_relaxed(pll->pmc + PMC_PLLP_WB0_OVERRIDE); 248 val = readl_relaxed(pll->pmc + PMC_PLLP_WB0_OVERRIDE);
249 val |= PMC_PLLP_WB0_OVERRIDE_PLLM_ENABLE; 249 val |= PMC_PLLP_WB0_OVERRIDE_PLLM_ENABLE;
250 writel_relaxed(val, pll->pmc + PMC_PLLP_WB0_OVERRIDE); 250 writel_relaxed(val, pll->pmc + PMC_PLLP_WB0_OVERRIDE);
@@ -257,12 +257,12 @@ static void _clk_pll_disable(struct clk_hw *hw)
257 u32 val; 257 u32 val;
258 258
259 val = pll_readl_base(pll); 259 val = pll_readl_base(pll);
260 if (pll->flags & TEGRA_PLL_BYPASS) 260 if (pll->params->flags & TEGRA_PLL_BYPASS)
261 val &= ~PLL_BASE_BYPASS; 261 val &= ~PLL_BASE_BYPASS;
262 val &= ~PLL_BASE_ENABLE; 262 val &= ~PLL_BASE_ENABLE;
263 pll_writel_base(val, pll); 263 pll_writel_base(val, pll);
264 264
265 if (pll->flags & TEGRA_PLLM) { 265 if (pll->params->flags & TEGRA_PLLM) {
266 val = readl_relaxed(pll->pmc + PMC_PLLP_WB0_OVERRIDE); 266 val = readl_relaxed(pll->pmc + PMC_PLLP_WB0_OVERRIDE);
267 val &= ~PMC_PLLP_WB0_OVERRIDE_PLLM_ENABLE; 267 val &= ~PMC_PLLP_WB0_OVERRIDE_PLLM_ENABLE;
268 writel_relaxed(val, pll->pmc + PMC_PLLP_WB0_OVERRIDE); 268 writel_relaxed(val, pll->pmc + PMC_PLLP_WB0_OVERRIDE);
@@ -342,7 +342,7 @@ static int _get_table_rate(struct clk_hw *hw,
342 struct tegra_clk_pll *pll = to_clk_pll(hw); 342 struct tegra_clk_pll *pll = to_clk_pll(hw);
343 struct tegra_clk_pll_freq_table *sel; 343 struct tegra_clk_pll_freq_table *sel;
344 344
345 for (sel = pll->freq_table; sel->input_rate != 0; sel++) 345 for (sel = pll->params->freq_table; sel->input_rate != 0; sel++)
346 if (sel->input_rate == parent_rate && 346 if (sel->input_rate == parent_rate &&
347 sel->output_rate == rate) 347 sel->output_rate == rate)
348 break; 348 break;
@@ -432,7 +432,7 @@ static void _update_pll_mnp(struct tegra_clk_pll *pll,
432 struct tegra_clk_pll_params *params = pll->params; 432 struct tegra_clk_pll_params *params = pll->params;
433 struct div_nmp *div_nmp = params->div_nmp; 433 struct div_nmp *div_nmp = params->div_nmp;
434 434
435 if ((pll->flags & TEGRA_PLLM) && 435 if ((params->flags & TEGRA_PLLM) &&
436 (pll_override_readl(PMC_PLLP_WB0_OVERRIDE, pll) & 436 (pll_override_readl(PMC_PLLP_WB0_OVERRIDE, pll) &
437 PMC_PLLP_WB0_OVERRIDE_PLLM_OVERRIDE)) { 437 PMC_PLLP_WB0_OVERRIDE_PLLM_OVERRIDE)) {
438 val = pll_override_readl(params->pmc_divp_reg, pll); 438 val = pll_override_readl(params->pmc_divp_reg, pll);
@@ -468,7 +468,7 @@ static void _get_pll_mnp(struct tegra_clk_pll *pll,
468 struct tegra_clk_pll_params *params = pll->params; 468 struct tegra_clk_pll_params *params = pll->params;
469 struct div_nmp *div_nmp = params->div_nmp; 469 struct div_nmp *div_nmp = params->div_nmp;
470 470
471 if ((pll->flags & TEGRA_PLLM) && 471 if ((params->flags & TEGRA_PLLM) &&
472 (pll_override_readl(PMC_PLLP_WB0_OVERRIDE, pll) & 472 (pll_override_readl(PMC_PLLP_WB0_OVERRIDE, pll) &
473 PMC_PLLP_WB0_OVERRIDE_PLLM_OVERRIDE)) { 473 PMC_PLLP_WB0_OVERRIDE_PLLM_OVERRIDE)) {
474 val = pll_override_readl(params->pmc_divp_reg, pll); 474 val = pll_override_readl(params->pmc_divp_reg, pll);
@@ -497,11 +497,11 @@ static void _update_pll_cpcon(struct tegra_clk_pll *pll,
497 val &= ~(PLL_MISC_CPCON_MASK << PLL_MISC_CPCON_SHIFT); 497 val &= ~(PLL_MISC_CPCON_MASK << PLL_MISC_CPCON_SHIFT);
498 val |= cfg->cpcon << PLL_MISC_CPCON_SHIFT; 498 val |= cfg->cpcon << PLL_MISC_CPCON_SHIFT;
499 499
500 if (pll->flags & TEGRA_PLL_SET_LFCON) { 500 if (pll->params->flags & TEGRA_PLL_SET_LFCON) {
501 val &= ~(PLL_MISC_LFCON_MASK << PLL_MISC_LFCON_SHIFT); 501 val &= ~(PLL_MISC_LFCON_MASK << PLL_MISC_LFCON_SHIFT);
502 if (cfg->n >= PLLDU_LFCON_SET_DIVN) 502 if (cfg->n >= PLLDU_LFCON_SET_DIVN)
503 val |= 1 << PLL_MISC_LFCON_SHIFT; 503 val |= 1 << PLL_MISC_LFCON_SHIFT;
504 } else if (pll->flags & TEGRA_PLL_SET_DCCON) { 504 } else if (pll->params->flags & TEGRA_PLL_SET_DCCON) {
505 val &= ~(1 << PLL_MISC_DCCON_SHIFT); 505 val &= ~(1 << PLL_MISC_DCCON_SHIFT);
506 if (rate >= (pll->params->vco_max >> 1)) 506 if (rate >= (pll->params->vco_max >> 1))
507 val |= 1 << PLL_MISC_DCCON_SHIFT; 507 val |= 1 << PLL_MISC_DCCON_SHIFT;
@@ -523,7 +523,7 @@ static int _program_pll(struct clk_hw *hw, struct tegra_clk_pll_freq_table *cfg,
523 523
524 _update_pll_mnp(pll, cfg); 524 _update_pll_mnp(pll, cfg);
525 525
526 if (pll->flags & TEGRA_PLL_HAS_CPCON) 526 if (pll->params->flags & TEGRA_PLL_HAS_CPCON)
527 _update_pll_cpcon(pll, cfg, rate); 527 _update_pll_cpcon(pll, cfg, rate);
528 528
529 if (state) { 529 if (state) {
@@ -542,11 +542,11 @@ static int clk_pll_set_rate(struct clk_hw *hw, unsigned long rate,
542 unsigned long flags = 0; 542 unsigned long flags = 0;
543 int ret = 0; 543 int ret = 0;
544 544
545 if (pll->flags & TEGRA_PLL_FIXED) { 545 if (pll->params->flags & TEGRA_PLL_FIXED) {
546 if (rate != pll->fixed_rate) { 546 if (rate != pll->params->fixed_rate) {
547 pr_err("%s: Can not change %s fixed rate %lu to %lu\n", 547 pr_err("%s: Can not change %s fixed rate %lu to %lu\n",
548 __func__, __clk_get_name(hw->clk), 548 __func__, __clk_get_name(hw->clk),
549 pll->fixed_rate, rate); 549 pll->params->fixed_rate, rate);
550 return -EINVAL; 550 return -EINVAL;
551 } 551 }
552 return 0; 552 return 0;
@@ -577,11 +577,11 @@ static long clk_pll_round_rate(struct clk_hw *hw, unsigned long rate,
577 struct tegra_clk_pll *pll = to_clk_pll(hw); 577 struct tegra_clk_pll *pll = to_clk_pll(hw);
578 struct tegra_clk_pll_freq_table cfg; 578 struct tegra_clk_pll_freq_table cfg;
579 579
580 if (pll->flags & TEGRA_PLL_FIXED) 580 if (pll->params->flags & TEGRA_PLL_FIXED)
581 return pll->fixed_rate; 581 return pll->params->fixed_rate;
582 582
583 /* PLLM is used for memory; we do not change rate */ 583 /* PLLM is used for memory; we do not change rate */
584 if (pll->flags & TEGRA_PLLM) 584 if (pll->params->flags & TEGRA_PLLM)
585 return __clk_get_rate(hw->clk); 585 return __clk_get_rate(hw->clk);
586 586
587 if (_get_table_rate(hw, &cfg, rate, *prate) && 587 if (_get_table_rate(hw, &cfg, rate, *prate) &&
@@ -604,17 +604,19 @@ static unsigned long clk_pll_recalc_rate(struct clk_hw *hw,
604 604
605 val = pll_readl_base(pll); 605 val = pll_readl_base(pll);
606 606
607 if ((pll->flags & TEGRA_PLL_BYPASS) && (val & PLL_BASE_BYPASS)) 607 if ((pll->params->flags & TEGRA_PLL_BYPASS) && (val & PLL_BASE_BYPASS))
608 return parent_rate; 608 return parent_rate;
609 609
610 if ((pll->flags & TEGRA_PLL_FIXED) && !(val & PLL_BASE_OVERRIDE)) { 610 if ((pll->params->flags & TEGRA_PLL_FIXED) &&
611 !(val & PLL_BASE_OVERRIDE)) {
611 struct tegra_clk_pll_freq_table sel; 612 struct tegra_clk_pll_freq_table sel;
612 if (_get_table_rate(hw, &sel, pll->fixed_rate, parent_rate)) { 613 if (_get_table_rate(hw, &sel, pll->params->fixed_rate,
614 parent_rate)) {
613 pr_err("Clock %s has unknown fixed frequency\n", 615 pr_err("Clock %s has unknown fixed frequency\n",
614 __clk_get_name(hw->clk)); 616 __clk_get_name(hw->clk));
615 BUG(); 617 BUG();
616 } 618 }
617 return pll->fixed_rate; 619 return pll->params->fixed_rate;
618 } 620 }
619 621
620 _get_pll_mnp(pll, &cfg); 622 _get_pll_mnp(pll, &cfg);
@@ -682,7 +684,7 @@ static int clk_plle_enable(struct clk_hw *hw)
682 u32 val; 684 u32 val;
683 int err; 685 int err;
684 686
685 if (_get_table_rate(hw, &sel, pll->fixed_rate, input_rate)) 687 if (_get_table_rate(hw, &sel, pll->params->fixed_rate, input_rate))
686 return -EINVAL; 688 return -EINVAL;
687 689
688 clk_pll_disable(hw); 690 clk_pll_disable(hw);
@@ -698,7 +700,7 @@ static int clk_plle_enable(struct clk_hw *hw)
698 return err; 700 return err;
699 } 701 }
700 702
701 if (pll->flags & TEGRA_PLLE_CONFIGURE) { 703 if (pll->params->flags & TEGRA_PLLE_CONFIGURE) {
702 /* configure dividers */ 704 /* configure dividers */
703 val = pll_readl_base(pll); 705 val = pll_readl_base(pll);
704 val &= ~(divm_mask(pll) | divn_mask(pll) | divp_mask(pll)); 706 val &= ~(divm_mask(pll) | divn_mask(pll) | divp_mask(pll));
@@ -1233,7 +1235,7 @@ static int clk_plle_tegra114_enable(struct clk_hw *hw)
1233 unsigned long flags = 0; 1235 unsigned long flags = 0;
1234 unsigned long input_rate = clk_get_rate(clk_get_parent(hw->clk)); 1236 unsigned long input_rate = clk_get_rate(clk_get_parent(hw->clk));
1235 1237
1236 if (_get_table_rate(hw, &sel, pll->fixed_rate, input_rate)) 1238 if (_get_table_rate(hw, &sel, pll->params->fixed_rate, input_rate))
1237 return -EINVAL; 1239 return -EINVAL;
1238 1240
1239 if (pll->lock) 1241 if (pll->lock)
@@ -1320,9 +1322,8 @@ static void clk_plle_tegra114_disable(struct clk_hw *hw)
1320#endif 1322#endif
1321 1323
1322static struct tegra_clk_pll *_tegra_init_pll(void __iomem *clk_base, 1324static struct tegra_clk_pll *_tegra_init_pll(void __iomem *clk_base,
1323 void __iomem *pmc, unsigned long fixed_rate, 1325 void __iomem *pmc, struct tegra_clk_pll_params *pll_params,
1324 struct tegra_clk_pll_params *pll_params, u32 pll_flags, 1326 spinlock_t *lock)
1325 struct tegra_clk_pll_freq_table *freq_table, spinlock_t *lock)
1326{ 1327{
1327 struct tegra_clk_pll *pll; 1328 struct tegra_clk_pll *pll;
1328 1329
@@ -1333,10 +1334,7 @@ static struct tegra_clk_pll *_tegra_init_pll(void __iomem *clk_base,
1333 pll->clk_base = clk_base; 1334 pll->clk_base = clk_base;
1334 pll->pmc = pmc; 1335 pll->pmc = pmc;
1335 1336
1336 pll->freq_table = freq_table;
1337 pll->params = pll_params; 1337 pll->params = pll_params;
1338 pll->fixed_rate = fixed_rate;
1339 pll->flags = pll_flags;
1340 pll->lock = lock; 1338 pll->lock = lock;
1341 1339
1342 if (!pll_params->div_nmp) 1340 if (!pll_params->div_nmp)
@@ -1365,17 +1363,15 @@ static struct clk *_tegra_clk_register_pll(struct tegra_clk_pll *pll,
1365 1363
1366struct clk *tegra_clk_register_pll(const char *name, const char *parent_name, 1364struct clk *tegra_clk_register_pll(const char *name, const char *parent_name,
1367 void __iomem *clk_base, void __iomem *pmc, 1365 void __iomem *clk_base, void __iomem *pmc,
1368 unsigned long flags, unsigned long fixed_rate, 1366 unsigned long flags, struct tegra_clk_pll_params *pll_params,
1369 struct tegra_clk_pll_params *pll_params, u32 pll_flags, 1367 spinlock_t *lock)
1370 struct tegra_clk_pll_freq_table *freq_table, spinlock_t *lock)
1371{ 1368{
1372 struct tegra_clk_pll *pll; 1369 struct tegra_clk_pll *pll;
1373 struct clk *clk; 1370 struct clk *clk;
1374 1371
1375 pll_flags |= TEGRA_PLL_BYPASS; 1372 pll_params->flags |= TEGRA_PLL_BYPASS;
1376 pll_flags |= TEGRA_PLL_HAS_LOCK_ENABLE; 1373 pll_params->flags |= TEGRA_PLL_HAS_LOCK_ENABLE;
1377 pll = _tegra_init_pll(clk_base, pmc, fixed_rate, pll_params, pll_flags, 1374 pll = _tegra_init_pll(clk_base, pmc, pll_params, lock);
1378 freq_table, lock);
1379 if (IS_ERR(pll)) 1375 if (IS_ERR(pll))
1380 return ERR_CAST(pll); 1376 return ERR_CAST(pll);
1381 1377
@@ -1389,17 +1385,15 @@ struct clk *tegra_clk_register_pll(const char *name, const char *parent_name,
1389 1385
1390struct clk *tegra_clk_register_plle(const char *name, const char *parent_name, 1386struct clk *tegra_clk_register_plle(const char *name, const char *parent_name,
1391 void __iomem *clk_base, void __iomem *pmc, 1387 void __iomem *clk_base, void __iomem *pmc,
1392 unsigned long flags, unsigned long fixed_rate, 1388 unsigned long flags, struct tegra_clk_pll_params *pll_params,
1393 struct tegra_clk_pll_params *pll_params, u32 pll_flags, 1389 spinlock_t *lock)
1394 struct tegra_clk_pll_freq_table *freq_table, spinlock_t *lock)
1395{ 1390{
1396 struct tegra_clk_pll *pll; 1391 struct tegra_clk_pll *pll;
1397 struct clk *clk; 1392 struct clk *clk;
1398 1393
1399 pll_flags |= TEGRA_PLL_LOCK_MISC | TEGRA_PLL_BYPASS; 1394 pll_params->flags |= TEGRA_PLL_LOCK_MISC | TEGRA_PLL_BYPASS;
1400 pll_flags |= TEGRA_PLL_HAS_LOCK_ENABLE; 1395 pll_params->flags |= TEGRA_PLL_HAS_LOCK_ENABLE;
1401 pll = _tegra_init_pll(clk_base, pmc, fixed_rate, pll_params, pll_flags, 1396 pll = _tegra_init_pll(clk_base, pmc, pll_params, lock);
1402 freq_table, lock);
1403 if (IS_ERR(pll)) 1397 if (IS_ERR(pll))
1404 return ERR_CAST(pll); 1398 return ERR_CAST(pll);
1405 1399
@@ -1458,10 +1452,8 @@ const struct clk_ops tegra_clk_plle_tegra114_ops = {
1458 1452
1459struct clk *tegra_clk_register_pllxc(const char *name, const char *parent_name, 1453struct clk *tegra_clk_register_pllxc(const char *name, const char *parent_name,
1460 void __iomem *clk_base, void __iomem *pmc, 1454 void __iomem *clk_base, void __iomem *pmc,
1461 unsigned long flags, unsigned long fixed_rate, 1455 unsigned long flags,
1462 struct tegra_clk_pll_params *pll_params, 1456 struct tegra_clk_pll_params *pll_params,
1463 u32 pll_flags,
1464 struct tegra_clk_pll_freq_table *freq_table,
1465 spinlock_t *lock) 1457 spinlock_t *lock)
1466{ 1458{
1467 struct tegra_clk_pll *pll; 1459 struct tegra_clk_pll *pll;
@@ -1498,9 +1490,8 @@ struct clk *tegra_clk_register_pllxc(const char *name, const char *parent_name,
1498 writel_relaxed(val_iddq, clk_base + pll_params->iddq_reg); 1490 writel_relaxed(val_iddq, clk_base + pll_params->iddq_reg);
1499 } 1491 }
1500 1492
1501 pll_flags |= TEGRA_PLL_HAS_LOCK_ENABLE; 1493 pll_params->flags |= TEGRA_PLL_HAS_LOCK_ENABLE;
1502 pll = _tegra_init_pll(clk_base, pmc, fixed_rate, pll_params, pll_flags, 1494 pll = _tegra_init_pll(clk_base, pmc, pll_params, lock);
1503 freq_table, lock);
1504 if (IS_ERR(pll)) 1495 if (IS_ERR(pll))
1505 return ERR_CAST(pll); 1496 return ERR_CAST(pll);
1506 1497
@@ -1514,22 +1505,19 @@ struct clk *tegra_clk_register_pllxc(const char *name, const char *parent_name,
1514 1505
1515struct clk *tegra_clk_register_pllre(const char *name, const char *parent_name, 1506struct clk *tegra_clk_register_pllre(const char *name, const char *parent_name,
1516 void __iomem *clk_base, void __iomem *pmc, 1507 void __iomem *clk_base, void __iomem *pmc,
1517 unsigned long flags, unsigned long fixed_rate, 1508 unsigned long flags,
1518 struct tegra_clk_pll_params *pll_params, 1509 struct tegra_clk_pll_params *pll_params,
1519 u32 pll_flags,
1520 struct tegra_clk_pll_freq_table *freq_table,
1521 spinlock_t *lock, unsigned long parent_rate) 1510 spinlock_t *lock, unsigned long parent_rate)
1522{ 1511{
1523 u32 val; 1512 u32 val;
1524 struct tegra_clk_pll *pll; 1513 struct tegra_clk_pll *pll;
1525 struct clk *clk; 1514 struct clk *clk;
1526 1515
1527 pll_flags |= TEGRA_PLL_HAS_LOCK_ENABLE | TEGRA_PLL_LOCK_MISC; 1516 pll_params->flags |= TEGRA_PLL_HAS_LOCK_ENABLE | TEGRA_PLL_LOCK_MISC;
1528 1517
1529 pll_params->vco_min = _clip_vco_min(pll_params->vco_min, parent_rate); 1518 pll_params->vco_min = _clip_vco_min(pll_params->vco_min, parent_rate);
1530 1519
1531 pll = _tegra_init_pll(clk_base, pmc, fixed_rate, pll_params, pll_flags, 1520 pll = _tegra_init_pll(clk_base, pmc, pll_params, lock);
1532 freq_table, lock);
1533 if (IS_ERR(pll)) 1521 if (IS_ERR(pll))
1534 return ERR_CAST(pll); 1522 return ERR_CAST(pll);
1535 1523
@@ -1564,10 +1552,8 @@ struct clk *tegra_clk_register_pllre(const char *name, const char *parent_name,
1564 1552
1565struct clk *tegra_clk_register_pllm(const char *name, const char *parent_name, 1553struct clk *tegra_clk_register_pllm(const char *name, const char *parent_name,
1566 void __iomem *clk_base, void __iomem *pmc, 1554 void __iomem *clk_base, void __iomem *pmc,
1567 unsigned long flags, unsigned long fixed_rate, 1555 unsigned long flags,
1568 struct tegra_clk_pll_params *pll_params, 1556 struct tegra_clk_pll_params *pll_params,
1569 u32 pll_flags,
1570 struct tegra_clk_pll_freq_table *freq_table,
1571 spinlock_t *lock) 1557 spinlock_t *lock)
1572{ 1558{
1573 struct tegra_clk_pll *pll; 1559 struct tegra_clk_pll *pll;
@@ -1588,11 +1574,10 @@ struct clk *tegra_clk_register_pllm(const char *name, const char *parent_name,
1588 1574
1589 pll_params->vco_min = _clip_vco_min(pll_params->vco_min, parent_rate); 1575 pll_params->vco_min = _clip_vco_min(pll_params->vco_min, parent_rate);
1590 1576
1591 pll_flags |= TEGRA_PLL_BYPASS; 1577 pll_params->flags |= TEGRA_PLL_BYPASS;
1592 pll_flags |= TEGRA_PLL_HAS_LOCK_ENABLE; 1578 pll_params->flags |= TEGRA_PLL_HAS_LOCK_ENABLE;
1593 pll_flags |= TEGRA_PLLM; 1579 pll_params->flags |= TEGRA_PLLM;
1594 pll = _tegra_init_pll(clk_base, pmc, fixed_rate, pll_params, pll_flags, 1580 pll = _tegra_init_pll(clk_base, pmc, pll_params, lock);
1595 freq_table, lock);
1596 if (IS_ERR(pll)) 1581 if (IS_ERR(pll))
1597 return ERR_CAST(pll); 1582 return ERR_CAST(pll);
1598 1583
@@ -1606,10 +1591,8 @@ struct clk *tegra_clk_register_pllm(const char *name, const char *parent_name,
1606 1591
1607struct clk *tegra_clk_register_pllc(const char *name, const char *parent_name, 1592struct clk *tegra_clk_register_pllc(const char *name, const char *parent_name,
1608 void __iomem *clk_base, void __iomem *pmc, 1593 void __iomem *clk_base, void __iomem *pmc,
1609 unsigned long flags, unsigned long fixed_rate, 1594 unsigned long flags,
1610 struct tegra_clk_pll_params *pll_params, 1595 struct tegra_clk_pll_params *pll_params,
1611 u32 pll_flags,
1612 struct tegra_clk_pll_freq_table *freq_table,
1613 spinlock_t *lock) 1596 spinlock_t *lock)
1614{ 1597{
1615 struct clk *parent, *clk; 1598 struct clk *parent, *clk;
@@ -1632,9 +1615,8 @@ struct clk *tegra_clk_register_pllc(const char *name, const char *parent_name,
1632 1615
1633 pll_params->vco_min = _clip_vco_min(pll_params->vco_min, parent_rate); 1616 pll_params->vco_min = _clip_vco_min(pll_params->vco_min, parent_rate);
1634 1617
1635 pll_flags |= TEGRA_PLL_BYPASS; 1618 pll_params->flags |= TEGRA_PLL_BYPASS;
1636 pll = _tegra_init_pll(clk_base, pmc, fixed_rate, pll_params, pll_flags, 1619 pll = _tegra_init_pll(clk_base, pmc, pll_params, lock);
1637 freq_table, lock);
1638 if (IS_ERR(pll)) 1620 if (IS_ERR(pll))
1639 return ERR_CAST(pll); 1621 return ERR_CAST(pll);
1640 1622
@@ -1684,17 +1666,15 @@ struct clk *tegra_clk_register_pllc(const char *name, const char *parent_name,
1684struct clk *tegra_clk_register_plle_tegra114(const char *name, 1666struct clk *tegra_clk_register_plle_tegra114(const char *name,
1685 const char *parent_name, 1667 const char *parent_name,
1686 void __iomem *clk_base, unsigned long flags, 1668 void __iomem *clk_base, unsigned long flags,
1687 unsigned long fixed_rate,
1688 struct tegra_clk_pll_params *pll_params, 1669 struct tegra_clk_pll_params *pll_params,
1689 struct tegra_clk_pll_freq_table *freq_table,
1690 spinlock_t *lock) 1670 spinlock_t *lock)
1691{ 1671{
1692 struct tegra_clk_pll *pll; 1672 struct tegra_clk_pll *pll;
1693 struct clk *clk; 1673 struct clk *clk;
1694 u32 val, val_aux; 1674 u32 val, val_aux;
1695 1675
1696 pll = _tegra_init_pll(clk_base, NULL, fixed_rate, pll_params, 1676 pll_params->flags |= TEGRA_PLL_HAS_LOCK_ENABLE;
1697 TEGRA_PLL_HAS_LOCK_ENABLE, freq_table, lock); 1677 pll = _tegra_init_pll(clk_base, NULL, pll_params, lock);
1698 if (IS_ERR(pll)) 1678 if (IS_ERR(pll))
1699 return ERR_CAST(pll); 1679 return ERR_CAST(pll);
1700 1680
diff --git a/drivers/clk/tegra/clk-tegra114.c b/drivers/clk/tegra/clk-tegra114.c
index e62e4764131c..8f2ab376c53d 100644
--- a/drivers/clk/tegra/clk-tegra114.c
+++ b/drivers/clk/tegra/clk-tegra114.c
@@ -334,6 +334,8 @@ static struct tegra_clk_pll_params pll_c_params = {
334 .stepb_shift = 9, 334 .stepb_shift = 9,
335 .pdiv_tohw = pllxc_p, 335 .pdiv_tohw = pllxc_p,
336 .div_nmp = &pllxc_nmp, 336 .div_nmp = &pllxc_nmp,
337 .freq_table = pll_c_freq_table,
338 .flags = TEGRA_PLL_USE_LOCK,
337}; 339};
338 340
339static struct div_nmp pllcx_nmp = { 341static struct div_nmp pllcx_nmp = {
@@ -381,6 +383,8 @@ static struct tegra_clk_pll_params pll_c2_params = {
381 .ext_misc_reg[0] = 0x4f0, 383 .ext_misc_reg[0] = 0x4f0,
382 .ext_misc_reg[1] = 0x4f4, 384 .ext_misc_reg[1] = 0x4f4,
383 .ext_misc_reg[2] = 0x4f8, 385 .ext_misc_reg[2] = 0x4f8,
386 .freq_table = pll_cx_freq_table,
387 .flags = TEGRA_PLL_USE_LOCK,
384}; 388};
385 389
386static struct tegra_clk_pll_params pll_c3_params = { 390static struct tegra_clk_pll_params pll_c3_params = {
@@ -401,6 +405,8 @@ static struct tegra_clk_pll_params pll_c3_params = {
401 .ext_misc_reg[0] = 0x504, 405 .ext_misc_reg[0] = 0x504,
402 .ext_misc_reg[1] = 0x508, 406 .ext_misc_reg[1] = 0x508,
403 .ext_misc_reg[2] = 0x50c, 407 .ext_misc_reg[2] = 0x50c,
408 .freq_table = pll_cx_freq_table,
409 .flags = TEGRA_PLL_USE_LOCK,
404}; 410};
405 411
406static struct div_nmp pllm_nmp = { 412static struct div_nmp pllm_nmp = {
@@ -447,6 +453,8 @@ static struct tegra_clk_pll_params pll_m_params = {
447 .div_nmp = &pllm_nmp, 453 .div_nmp = &pllm_nmp,
448 .pmc_divnm_reg = PMC_PLLM_WB0_OVERRIDE, 454 .pmc_divnm_reg = PMC_PLLM_WB0_OVERRIDE,
449 .pmc_divp_reg = PMC_PLLM_WB0_OVERRIDE_2, 455 .pmc_divp_reg = PMC_PLLM_WB0_OVERRIDE_2,
456 .freq_table = pll_m_freq_table,
457 .flags = TEGRA_PLL_USE_LOCK,
450}; 458};
451 459
452static struct div_nmp pllp_nmp = { 460static struct div_nmp pllp_nmp = {
@@ -480,6 +488,9 @@ static struct tegra_clk_pll_params pll_p_params = {
480 .lock_enable_bit_idx = PLL_MISC_LOCK_ENABLE, 488 .lock_enable_bit_idx = PLL_MISC_LOCK_ENABLE,
481 .lock_delay = 300, 489 .lock_delay = 300,
482 .div_nmp = &pllp_nmp, 490 .div_nmp = &pllp_nmp,
491 .freq_table = pll_p_freq_table,
492 .flags = TEGRA_PLL_FIXED | TEGRA_PLL_USE_LOCK,
493 .fixed_rate = 408000000,
483}; 494};
484 495
485static struct tegra_clk_pll_freq_table pll_a_freq_table[] = { 496static struct tegra_clk_pll_freq_table pll_a_freq_table[] = {
@@ -507,6 +518,8 @@ static struct tegra_clk_pll_params pll_a_params = {
507 .lock_enable_bit_idx = PLL_MISC_LOCK_ENABLE, 518 .lock_enable_bit_idx = PLL_MISC_LOCK_ENABLE,
508 .lock_delay = 300, 519 .lock_delay = 300,
509 .div_nmp = &pllp_nmp, 520 .div_nmp = &pllp_nmp,
521 .freq_table = pll_a_freq_table,
522 .flags = TEGRA_PLL_HAS_CPCON | TEGRA_PLL_USE_LOCK,
510}; 523};
511 524
512static struct tegra_clk_pll_freq_table pll_d_freq_table[] = { 525static struct tegra_clk_pll_freq_table pll_d_freq_table[] = {
@@ -543,6 +556,9 @@ static struct tegra_clk_pll_params pll_d_params = {
543 .lock_enable_bit_idx = PLLDU_MISC_LOCK_ENABLE, 556 .lock_enable_bit_idx = PLLDU_MISC_LOCK_ENABLE,
544 .lock_delay = 1000, 557 .lock_delay = 1000,
545 .div_nmp = &pllp_nmp, 558 .div_nmp = &pllp_nmp,
559 .freq_table = pll_d_freq_table,
560 .flags = TEGRA_PLL_HAS_CPCON | TEGRA_PLL_SET_LFCON |
561 TEGRA_PLL_USE_LOCK,
546}; 562};
547 563
548static struct tegra_clk_pll_params pll_d2_params = { 564static struct tegra_clk_pll_params pll_d2_params = {
@@ -558,6 +574,9 @@ static struct tegra_clk_pll_params pll_d2_params = {
558 .lock_enable_bit_idx = PLLDU_MISC_LOCK_ENABLE, 574 .lock_enable_bit_idx = PLLDU_MISC_LOCK_ENABLE,
559 .lock_delay = 1000, 575 .lock_delay = 1000,
560 .div_nmp = &pllp_nmp, 576 .div_nmp = &pllp_nmp,
577 .freq_table = pll_d_freq_table,
578 .flags = TEGRA_PLL_HAS_CPCON | TEGRA_PLL_SET_LFCON |
579 TEGRA_PLL_USE_LOCK,
561}; 580};
562 581
563static struct pdiv_map pllu_p[] = { 582static struct pdiv_map pllu_p[] = {
@@ -598,6 +617,9 @@ static struct tegra_clk_pll_params pll_u_params = {
598 .lock_delay = 1000, 617 .lock_delay = 1000,
599 .pdiv_tohw = pllu_p, 618 .pdiv_tohw = pllu_p,
600 .div_nmp = &pllu_nmp, 619 .div_nmp = &pllu_nmp,
620 .freq_table = pll_u_freq_table,
621 .flags = TEGRA_PLLU | TEGRA_PLL_HAS_CPCON | TEGRA_PLL_SET_LFCON |
622 TEGRA_PLL_USE_LOCK,
601}; 623};
602 624
603static struct tegra_clk_pll_freq_table pll_x_freq_table[] = { 625static struct tegra_clk_pll_freq_table pll_x_freq_table[] = {
@@ -631,6 +653,8 @@ static struct tegra_clk_pll_params pll_x_params = {
631 .stepb_shift = 24, 653 .stepb_shift = 24,
632 .pdiv_tohw = pllxc_p, 654 .pdiv_tohw = pllxc_p,
633 .div_nmp = &pllxc_nmp, 655 .div_nmp = &pllxc_nmp,
656 .freq_table = pll_x_freq_table,
657 .flags = TEGRA_PLL_USE_LOCK,
634}; 658};
635 659
636static struct tegra_clk_pll_freq_table pll_e_freq_table[] = { 660static struct tegra_clk_pll_freq_table pll_e_freq_table[] = {
@@ -664,6 +688,9 @@ static struct tegra_clk_pll_params pll_e_params = {
664 .lock_enable_bit_idx = PLLE_MISC_LOCK_ENABLE, 688 .lock_enable_bit_idx = PLLE_MISC_LOCK_ENABLE,
665 .lock_delay = 300, 689 .lock_delay = 300,
666 .div_nmp = &plle_nmp, 690 .div_nmp = &plle_nmp,
691 .freq_table = pll_e_freq_table,
692 .flags = TEGRA_PLL_FIXED,
693 .fixed_rate = 100000000,
667}; 694};
668 695
669static struct div_nmp pllre_nmp = { 696static struct div_nmp pllre_nmp = {
@@ -690,6 +717,7 @@ static struct tegra_clk_pll_params pll_re_vco_params = {
690 .iddq_reg = PLLRE_MISC, 717 .iddq_reg = PLLRE_MISC,
691 .iddq_bit_idx = PLLRE_IDDQ_BIT, 718 .iddq_bit_idx = PLLRE_IDDQ_BIT,
692 .div_nmp = &pllre_nmp, 719 .div_nmp = &pllre_nmp,
720 .flags = TEGRA_PLL_USE_LOCK,
693}; 721};
694 722
695/* possible OSC frequencies in Hz */ 723/* possible OSC frequencies in Hz */
@@ -1086,8 +1114,7 @@ static void __init tegra114_pll_init(void __iomem *clk_base,
1086 1114
1087 /* PLLC */ 1115 /* PLLC */
1088 clk = tegra_clk_register_pllxc("pll_c", "pll_ref", clk_base, 1116 clk = tegra_clk_register_pllxc("pll_c", "pll_ref", clk_base,
1089 pmc, 0, 0, &pll_c_params, TEGRA_PLL_USE_LOCK, 1117 pmc, 0, &pll_c_params, NULL);
1090 pll_c_freq_table, NULL);
1091 clk_register_clkdev(clk, "pll_c", NULL); 1118 clk_register_clkdev(clk, "pll_c", NULL);
1092 clks[TEGRA114_CLK_PLL_C] = clk; 1119 clks[TEGRA114_CLK_PLL_C] = clk;
1093 1120
@@ -1102,24 +1129,20 @@ static void __init tegra114_pll_init(void __iomem *clk_base,
1102 clks[TEGRA114_CLK_PLL_C_OUT1] = clk; 1129 clks[TEGRA114_CLK_PLL_C_OUT1] = clk;
1103 1130
1104 /* PLLC2 */ 1131 /* PLLC2 */
1105 clk = tegra_clk_register_pllc("pll_c2", "pll_ref", clk_base, pmc, 0, 0, 1132 clk = tegra_clk_register_pllc("pll_c2", "pll_ref", clk_base, pmc, 0,
1106 &pll_c2_params, TEGRA_PLL_USE_LOCK, 1133 &pll_c2_params, NULL);
1107 pll_cx_freq_table, NULL);
1108 clk_register_clkdev(clk, "pll_c2", NULL); 1134 clk_register_clkdev(clk, "pll_c2", NULL);
1109 clks[TEGRA114_CLK_PLL_C2] = clk; 1135 clks[TEGRA114_CLK_PLL_C2] = clk;
1110 1136
1111 /* PLLC3 */ 1137 /* PLLC3 */
1112 clk = tegra_clk_register_pllc("pll_c3", "pll_ref", clk_base, pmc, 0, 0, 1138 clk = tegra_clk_register_pllc("pll_c3", "pll_ref", clk_base, pmc, 0,
1113 &pll_c3_params, TEGRA_PLL_USE_LOCK, 1139 &pll_c3_params, NULL);
1114 pll_cx_freq_table, NULL);
1115 clk_register_clkdev(clk, "pll_c3", NULL); 1140 clk_register_clkdev(clk, "pll_c3", NULL);
1116 clks[TEGRA114_CLK_PLL_C3] = clk; 1141 clks[TEGRA114_CLK_PLL_C3] = clk;
1117 1142
1118 /* PLLP */ 1143 /* PLLP */
1119 clk = tegra_clk_register_pll("pll_p", "pll_ref", clk_base, pmc, 0, 1144 clk = tegra_clk_register_pll("pll_p", "pll_ref", clk_base, pmc, 0,
1120 408000000, &pll_p_params, 1145 &pll_p_params, NULL);
1121 TEGRA_PLL_FIXED | TEGRA_PLL_USE_LOCK,
1122 pll_p_freq_table, NULL);
1123 clk_register_clkdev(clk, "pll_p", NULL); 1146 clk_register_clkdev(clk, "pll_p", NULL);
1124 clks[TEGRA114_CLK_PLL_P] = clk; 1147 clks[TEGRA114_CLK_PLL_P] = clk;
1125 1148
@@ -1171,9 +1194,8 @@ static void __init tegra114_pll_init(void __iomem *clk_base,
1171 1194
1172 /* PLLM */ 1195 /* PLLM */
1173 clk = tegra_clk_register_pllm("pll_m", "pll_ref", clk_base, pmc, 1196 clk = tegra_clk_register_pllm("pll_m", "pll_ref", clk_base, pmc,
1174 CLK_IGNORE_UNUSED | CLK_SET_RATE_GATE, 0, 1197 CLK_IGNORE_UNUSED | CLK_SET_RATE_GATE,
1175 &pll_m_params, TEGRA_PLL_USE_LOCK, 1198 &pll_m_params, NULL);
1176 pll_m_freq_table, NULL);
1177 clk_register_clkdev(clk, "pll_m", NULL); 1199 clk_register_clkdev(clk, "pll_m", NULL);
1178 clks[TEGRA114_CLK_PLL_M] = clk; 1200 clks[TEGRA114_CLK_PLL_M] = clk;
1179 1201
@@ -1193,8 +1215,7 @@ static void __init tegra114_pll_init(void __iomem *clk_base,
1193 1215
1194 /* PLLX */ 1216 /* PLLX */
1195 clk = tegra_clk_register_pllxc("pll_x", "pll_ref", clk_base, 1217 clk = tegra_clk_register_pllxc("pll_x", "pll_ref", clk_base,
1196 pmc, CLK_IGNORE_UNUSED, 0, &pll_x_params, 1218 pmc, CLK_IGNORE_UNUSED, &pll_x_params, NULL);
1197 TEGRA_PLL_USE_LOCK, pll_x_freq_table, NULL);
1198 clk_register_clkdev(clk, "pll_x", NULL); 1219 clk_register_clkdev(clk, "pll_x", NULL);
1199 clks[TEGRA114_CLK_PLL_X] = clk; 1220 clks[TEGRA114_CLK_PLL_X] = clk;
1200 1221
@@ -1210,9 +1231,7 @@ static void __init tegra114_pll_init(void __iomem *clk_base,
1210 writel(val, clk_base + pll_u_params.base_reg); 1231 writel(val, clk_base + pll_u_params.base_reg);
1211 1232
1212 clk = tegra_clk_register_pll("pll_u", "pll_ref", clk_base, pmc, 0, 1233 clk = tegra_clk_register_pll("pll_u", "pll_ref", clk_base, pmc, 0,
1213 0, &pll_u_params, TEGRA_PLLU | 1234 &pll_u_params, &pll_u_lock);
1214 TEGRA_PLL_HAS_CPCON | TEGRA_PLL_SET_LFCON |
1215 TEGRA_PLL_USE_LOCK, pll_u_freq_table, &pll_u_lock);
1216 clk_register_clkdev(clk, "pll_u", NULL); 1235 clk_register_clkdev(clk, "pll_u", NULL);
1217 clks[TEGRA114_CLK_PLL_U] = clk; 1236 clks[TEGRA114_CLK_PLL_U] = clk;
1218 1237
@@ -1245,9 +1264,7 @@ static void __init tegra114_pll_init(void __iomem *clk_base,
1245 1264
1246 /* PLLD */ 1265 /* PLLD */
1247 clk = tegra_clk_register_pll("pll_d", "pll_ref", clk_base, pmc, 0, 1266 clk = tegra_clk_register_pll("pll_d", "pll_ref", clk_base, pmc, 0,
1248 0, &pll_d_params, 1267 &pll_d_params, &pll_d_lock);
1249 TEGRA_PLL_HAS_CPCON | TEGRA_PLL_SET_LFCON |
1250 TEGRA_PLL_USE_LOCK, pll_d_freq_table, &pll_d_lock);
1251 clk_register_clkdev(clk, "pll_d", NULL); 1268 clk_register_clkdev(clk, "pll_d", NULL);
1252 clks[TEGRA114_CLK_PLL_D] = clk; 1269 clks[TEGRA114_CLK_PLL_D] = clk;
1253 1270
@@ -1259,9 +1276,7 @@ static void __init tegra114_pll_init(void __iomem *clk_base,
1259 1276
1260 /* PLLD2 */ 1277 /* PLLD2 */
1261 clk = tegra_clk_register_pll("pll_d2", "pll_ref", clk_base, pmc, 0, 1278 clk = tegra_clk_register_pll("pll_d2", "pll_ref", clk_base, pmc, 0,
1262 0, &pll_d2_params, 1279 &pll_d2_params, &pll_d2_lock);
1263 TEGRA_PLL_HAS_CPCON | TEGRA_PLL_SET_LFCON |
1264 TEGRA_PLL_USE_LOCK, pll_d_freq_table, &pll_d2_lock);
1265 clk_register_clkdev(clk, "pll_d2", NULL); 1280 clk_register_clkdev(clk, "pll_d2", NULL);
1266 clks[TEGRA114_CLK_PLL_D2] = clk; 1281 clks[TEGRA114_CLK_PLL_D2] = clk;
1267 1282
@@ -1273,8 +1288,7 @@ static void __init tegra114_pll_init(void __iomem *clk_base,
1273 1288
1274 /* PLLA */ 1289 /* PLLA */
1275 clk = tegra_clk_register_pll("pll_a", "pll_p_out1", clk_base, pmc, 0, 1290 clk = tegra_clk_register_pll("pll_a", "pll_p_out1", clk_base, pmc, 0,
1276 0, &pll_a_params, TEGRA_PLL_HAS_CPCON | 1291 &pll_a_params, NULL);
1277 TEGRA_PLL_USE_LOCK, pll_a_freq_table, NULL);
1278 clk_register_clkdev(clk, "pll_a", NULL); 1292 clk_register_clkdev(clk, "pll_a", NULL);
1279 clks[TEGRA114_CLK_PLL_A] = clk; 1293 clks[TEGRA114_CLK_PLL_A] = clk;
1280 1294
@@ -1290,8 +1304,7 @@ static void __init tegra114_pll_init(void __iomem *clk_base,
1290 1304
1291 /* PLLRE */ 1305 /* PLLRE */
1292 clk = tegra_clk_register_pllre("pll_re_vco", "pll_ref", clk_base, pmc, 1306 clk = tegra_clk_register_pllre("pll_re_vco", "pll_ref", clk_base, pmc,
1293 0, 0, &pll_re_vco_params, TEGRA_PLL_USE_LOCK, 1307 0, &pll_re_vco_params, &pll_re_lock, pll_ref_freq);
1294 NULL, &pll_re_lock, pll_ref_freq);
1295 clk_register_clkdev(clk, "pll_re_vco", NULL); 1308 clk_register_clkdev(clk, "pll_re_vco", NULL);
1296 clks[TEGRA114_CLK_PLL_RE_VCO] = clk; 1309 clks[TEGRA114_CLK_PLL_RE_VCO] = clk;
1297 1310
@@ -1303,8 +1316,7 @@ static void __init tegra114_pll_init(void __iomem *clk_base,
1303 1316
1304 /* PLLE */ 1317 /* PLLE */
1305 clk = tegra_clk_register_plle_tegra114("pll_e_out0", "pll_ref", 1318 clk = tegra_clk_register_plle_tegra114("pll_e_out0", "pll_ref",
1306 clk_base, 0, 100000000, &pll_e_params, 1319 clk_base, 0, &pll_e_params, NULL);
1307 pll_e_freq_table, NULL);
1308 clk_register_clkdev(clk, "pll_e_out0", NULL); 1320 clk_register_clkdev(clk, "pll_e_out0", NULL);
1309 clks[TEGRA114_CLK_PLL_E_OUT0] = clk; 1321 clks[TEGRA114_CLK_PLL_E_OUT0] = clk;
1310} 1322}
diff --git a/drivers/clk/tegra/clk-tegra20.c b/drivers/clk/tegra/clk-tegra20.c
index 6bf5c339ab43..31547fde92e4 100644
--- a/drivers/clk/tegra/clk-tegra20.c
+++ b/drivers/clk/tegra/clk-tegra20.c
@@ -360,6 +360,8 @@ static struct tegra_clk_pll_params pll_c_params = {
360 .lock_mask = PLL_BASE_LOCK, 360 .lock_mask = PLL_BASE_LOCK,
361 .lock_enable_bit_idx = PLL_MISC_LOCK_ENABLE, 361 .lock_enable_bit_idx = PLL_MISC_LOCK_ENABLE,
362 .lock_delay = 300, 362 .lock_delay = 300,
363 .freq_table = pll_c_freq_table,
364 .flags = TEGRA_PLL_HAS_CPCON,
363}; 365};
364 366
365static struct tegra_clk_pll_params pll_m_params = { 367static struct tegra_clk_pll_params pll_m_params = {
@@ -374,6 +376,8 @@ static struct tegra_clk_pll_params pll_m_params = {
374 .lock_mask = PLL_BASE_LOCK, 376 .lock_mask = PLL_BASE_LOCK,
375 .lock_enable_bit_idx = PLL_MISC_LOCK_ENABLE, 377 .lock_enable_bit_idx = PLL_MISC_LOCK_ENABLE,
376 .lock_delay = 300, 378 .lock_delay = 300,
379 .freq_table = pll_m_freq_table,
380 .flags = TEGRA_PLL_HAS_CPCON,
377}; 381};
378 382
379static struct tegra_clk_pll_params pll_p_params = { 383static struct tegra_clk_pll_params pll_p_params = {
@@ -388,6 +392,9 @@ static struct tegra_clk_pll_params pll_p_params = {
388 .lock_mask = PLL_BASE_LOCK, 392 .lock_mask = PLL_BASE_LOCK,
389 .lock_enable_bit_idx = PLL_MISC_LOCK_ENABLE, 393 .lock_enable_bit_idx = PLL_MISC_LOCK_ENABLE,
390 .lock_delay = 300, 394 .lock_delay = 300,
395 .freq_table = pll_p_freq_table,
396 .flags = TEGRA_PLL_FIXED | TEGRA_PLL_HAS_CPCON,
397 .fixed_rate = 216000000,
391}; 398};
392 399
393static struct tegra_clk_pll_params pll_a_params = { 400static struct tegra_clk_pll_params pll_a_params = {
@@ -402,6 +409,8 @@ static struct tegra_clk_pll_params pll_a_params = {
402 .lock_mask = PLL_BASE_LOCK, 409 .lock_mask = PLL_BASE_LOCK,
403 .lock_enable_bit_idx = PLL_MISC_LOCK_ENABLE, 410 .lock_enable_bit_idx = PLL_MISC_LOCK_ENABLE,
404 .lock_delay = 300, 411 .lock_delay = 300,
412 .freq_table = pll_a_freq_table,
413 .flags = TEGRA_PLL_HAS_CPCON,
405}; 414};
406 415
407static struct tegra_clk_pll_params pll_d_params = { 416static struct tegra_clk_pll_params pll_d_params = {
@@ -416,6 +425,8 @@ static struct tegra_clk_pll_params pll_d_params = {
416 .lock_mask = PLL_BASE_LOCK, 425 .lock_mask = PLL_BASE_LOCK,
417 .lock_enable_bit_idx = PLLDU_MISC_LOCK_ENABLE, 426 .lock_enable_bit_idx = PLLDU_MISC_LOCK_ENABLE,
418 .lock_delay = 1000, 427 .lock_delay = 1000,
428 .freq_table = pll_d_freq_table,
429 .flags = TEGRA_PLL_HAS_CPCON,
419}; 430};
420 431
421static struct pdiv_map pllu_p[] = { 432static struct pdiv_map pllu_p[] = {
@@ -437,6 +448,8 @@ static struct tegra_clk_pll_params pll_u_params = {
437 .lock_enable_bit_idx = PLLDU_MISC_LOCK_ENABLE, 448 .lock_enable_bit_idx = PLLDU_MISC_LOCK_ENABLE,
438 .lock_delay = 1000, 449 .lock_delay = 1000,
439 .pdiv_tohw = pllu_p, 450 .pdiv_tohw = pllu_p,
451 .freq_table = pll_u_freq_table,
452 .flags = TEGRA_PLLU | TEGRA_PLL_HAS_CPCON,
440}; 453};
441 454
442static struct tegra_clk_pll_params pll_x_params = { 455static struct tegra_clk_pll_params pll_x_params = {
@@ -451,6 +464,8 @@ static struct tegra_clk_pll_params pll_x_params = {
451 .lock_mask = PLL_BASE_LOCK, 464 .lock_mask = PLL_BASE_LOCK,
452 .lock_enable_bit_idx = PLL_MISC_LOCK_ENABLE, 465 .lock_enable_bit_idx = PLL_MISC_LOCK_ENABLE,
453 .lock_delay = 300, 466 .lock_delay = 300,
467 .freq_table = pll_x_freq_table,
468 .flags = TEGRA_PLL_HAS_CPCON,
454}; 469};
455 470
456static struct tegra_clk_pll_params pll_e_params = { 471static struct tegra_clk_pll_params pll_e_params = {
@@ -465,6 +480,9 @@ static struct tegra_clk_pll_params pll_e_params = {
465 .lock_mask = PLLE_MISC_LOCK, 480 .lock_mask = PLLE_MISC_LOCK,
466 .lock_enable_bit_idx = PLLE_MISC_LOCK_ENABLE, 481 .lock_enable_bit_idx = PLLE_MISC_LOCK_ENABLE,
467 .lock_delay = 0, 482 .lock_delay = 0,
483 .freq_table = pll_e_freq_table,
484 .flags = TEGRA_PLL_FIXED,
485 .fixed_rate = 100000000,
468}; 486};
469 487
470static unsigned long tegra20_clk_measure_input_freq(void) 488static unsigned long tegra20_clk_measure_input_freq(void)
@@ -526,8 +544,7 @@ static void tegra20_pll_init(void)
526 544
527 /* PLLC */ 545 /* PLLC */
528 clk = tegra_clk_register_pll("pll_c", "pll_ref", clk_base, NULL, 0, 546 clk = tegra_clk_register_pll("pll_c", "pll_ref", clk_base, NULL, 0,
529 0, &pll_c_params, TEGRA_PLL_HAS_CPCON, 547 &pll_c_params, NULL);
530 pll_c_freq_table, NULL);
531 clk_register_clkdev(clk, "pll_c", NULL); 548 clk_register_clkdev(clk, "pll_c", NULL);
532 clks[pll_c] = clk; 549 clks[pll_c] = clk;
533 550
@@ -543,8 +560,7 @@ static void tegra20_pll_init(void)
543 560
544 /* PLLP */ 561 /* PLLP */
545 clk = tegra_clk_register_pll("pll_p", "pll_ref", clk_base, NULL, 0, 562 clk = tegra_clk_register_pll("pll_p", "pll_ref", clk_base, NULL, 0,
546 216000000, &pll_p_params, TEGRA_PLL_FIXED | 563 &pll_p_params, NULL);
547 TEGRA_PLL_HAS_CPCON, pll_p_freq_table, NULL);
548 clk_register_clkdev(clk, "pll_p", NULL); 564 clk_register_clkdev(clk, "pll_p", NULL);
549 clks[pll_p] = clk; 565 clks[pll_p] = clk;
550 566
@@ -598,9 +614,8 @@ static void tegra20_pll_init(void)
598 614
599 /* PLLM */ 615 /* PLLM */
600 clk = tegra_clk_register_pll("pll_m", "pll_ref", clk_base, NULL, 616 clk = tegra_clk_register_pll("pll_m", "pll_ref", clk_base, NULL,
601 CLK_IGNORE_UNUSED | CLK_SET_RATE_GATE, 0, 617 CLK_IGNORE_UNUSED | CLK_SET_RATE_GATE,
602 &pll_m_params, TEGRA_PLL_HAS_CPCON, 618 &pll_m_params, NULL);
603 pll_m_freq_table, NULL);
604 clk_register_clkdev(clk, "pll_m", NULL); 619 clk_register_clkdev(clk, "pll_m", NULL);
605 clks[pll_m] = clk; 620 clks[pll_m] = clk;
606 621
@@ -616,22 +631,19 @@ static void tegra20_pll_init(void)
616 631
617 /* PLLX */ 632 /* PLLX */
618 clk = tegra_clk_register_pll("pll_x", "pll_ref", clk_base, NULL, 0, 633 clk = tegra_clk_register_pll("pll_x", "pll_ref", clk_base, NULL, 0,
619 0, &pll_x_params, TEGRA_PLL_HAS_CPCON, 634 &pll_x_params, NULL);
620 pll_x_freq_table, NULL);
621 clk_register_clkdev(clk, "pll_x", NULL); 635 clk_register_clkdev(clk, "pll_x", NULL);
622 clks[pll_x] = clk; 636 clks[pll_x] = clk;
623 637
624 /* PLLU */ 638 /* PLLU */
625 clk = tegra_clk_register_pll("pll_u", "pll_ref", clk_base, NULL, 0, 639 clk = tegra_clk_register_pll("pll_u", "pll_ref", clk_base, NULL, 0,
626 0, &pll_u_params, TEGRA_PLLU | TEGRA_PLL_HAS_CPCON, 640 &pll_u_params, NULL);
627 pll_u_freq_table, NULL);
628 clk_register_clkdev(clk, "pll_u", NULL); 641 clk_register_clkdev(clk, "pll_u", NULL);
629 clks[pll_u] = clk; 642 clks[pll_u] = clk;
630 643
631 /* PLLD */ 644 /* PLLD */
632 clk = tegra_clk_register_pll("pll_d", "pll_ref", clk_base, NULL, 0, 645 clk = tegra_clk_register_pll("pll_d", "pll_ref", clk_base, NULL, 0,
633 0, &pll_d_params, TEGRA_PLL_HAS_CPCON, 646 &pll_d_params, NULL);
634 pll_d_freq_table, NULL);
635 clk_register_clkdev(clk, "pll_d", NULL); 647 clk_register_clkdev(clk, "pll_d", NULL);
636 clks[pll_d] = clk; 648 clks[pll_d] = clk;
637 649
@@ -643,8 +655,7 @@ static void tegra20_pll_init(void)
643 655
644 /* PLLA */ 656 /* PLLA */
645 clk = tegra_clk_register_pll("pll_a", "pll_p_out1", clk_base, NULL, 0, 657 clk = tegra_clk_register_pll("pll_a", "pll_p_out1", clk_base, NULL, 0,
646 0, &pll_a_params, TEGRA_PLL_HAS_CPCON, 658 &pll_a_params, NULL);
647 pll_a_freq_table, NULL);
648 clk_register_clkdev(clk, "pll_a", NULL); 659 clk_register_clkdev(clk, "pll_a", NULL);
649 clks[pll_a] = clk; 660 clks[pll_a] = clk;
650 661
@@ -660,8 +671,7 @@ static void tegra20_pll_init(void)
660 671
661 /* PLLE */ 672 /* PLLE */
662 clk = tegra_clk_register_plle("pll_e", "pll_ref", clk_base, pmc_base, 673 clk = tegra_clk_register_plle("pll_e", "pll_ref", clk_base, pmc_base,
663 0, 100000000, &pll_e_params, 674 0, &pll_e_params, NULL);
664 0, pll_e_freq_table, NULL);
665 clk_register_clkdev(clk, "pll_e", NULL); 675 clk_register_clkdev(clk, "pll_e", NULL);
666 clks[pll_e] = clk; 676 clks[pll_e] = clk;
667} 677}
diff --git a/drivers/clk/tegra/clk-tegra30.c b/drivers/clk/tegra/clk-tegra30.c
index c5db42217ba8..da540f6dc9c9 100644
--- a/drivers/clk/tegra/clk-tegra30.c
+++ b/drivers/clk/tegra/clk-tegra30.c
@@ -530,6 +530,8 @@ static struct tegra_clk_pll_params pll_c_params = {
530 .lock_mask = PLL_BASE_LOCK, 530 .lock_mask = PLL_BASE_LOCK,
531 .lock_enable_bit_idx = PLL_MISC_LOCK_ENABLE, 531 .lock_enable_bit_idx = PLL_MISC_LOCK_ENABLE,
532 .lock_delay = 300, 532 .lock_delay = 300,
533 .freq_table = pll_c_freq_table,
534 .flags = TEGRA_PLL_HAS_CPCON | TEGRA_PLL_USE_LOCK,
533}; 535};
534 536
535static struct div_nmp pllm_nmp = { 537static struct div_nmp pllm_nmp = {
@@ -559,6 +561,9 @@ static struct tegra_clk_pll_params pll_m_params = {
559 .div_nmp = &pllm_nmp, 561 .div_nmp = &pllm_nmp,
560 .pmc_divnm_reg = PMC_PLLM_WB0_OVERRIDE, 562 .pmc_divnm_reg = PMC_PLLM_WB0_OVERRIDE,
561 .pmc_divp_reg = PMC_PLLM_WB0_OVERRIDE, 563 .pmc_divp_reg = PMC_PLLM_WB0_OVERRIDE,
564 .freq_table = pll_m_freq_table,
565 .flags = TEGRA_PLLM | TEGRA_PLL_HAS_CPCON |
566 TEGRA_PLL_SET_DCCON | TEGRA_PLL_USE_LOCK,
562}; 567};
563 568
564static struct tegra_clk_pll_params pll_p_params = { 569static struct tegra_clk_pll_params pll_p_params = {
@@ -573,6 +578,9 @@ static struct tegra_clk_pll_params pll_p_params = {
573 .lock_mask = PLL_BASE_LOCK, 578 .lock_mask = PLL_BASE_LOCK,
574 .lock_enable_bit_idx = PLL_MISC_LOCK_ENABLE, 579 .lock_enable_bit_idx = PLL_MISC_LOCK_ENABLE,
575 .lock_delay = 300, 580 .lock_delay = 300,
581 .freq_table = pll_p_freq_table,
582 .flags = TEGRA_PLL_FIXED | TEGRA_PLL_HAS_CPCON | TEGRA_PLL_USE_LOCK,
583 .fixed_rate = 408000000,
576}; 584};
577 585
578static struct tegra_clk_pll_params pll_a_params = { 586static struct tegra_clk_pll_params pll_a_params = {
@@ -587,6 +595,8 @@ static struct tegra_clk_pll_params pll_a_params = {
587 .lock_mask = PLL_BASE_LOCK, 595 .lock_mask = PLL_BASE_LOCK,
588 .lock_enable_bit_idx = PLL_MISC_LOCK_ENABLE, 596 .lock_enable_bit_idx = PLL_MISC_LOCK_ENABLE,
589 .lock_delay = 300, 597 .lock_delay = 300,
598 .freq_table = pll_a_freq_table,
599 .flags = TEGRA_PLL_HAS_CPCON | TEGRA_PLL_USE_LOCK,
590}; 600};
591 601
592static struct tegra_clk_pll_params pll_d_params = { 602static struct tegra_clk_pll_params pll_d_params = {
@@ -601,6 +611,10 @@ static struct tegra_clk_pll_params pll_d_params = {
601 .lock_mask = PLL_BASE_LOCK, 611 .lock_mask = PLL_BASE_LOCK,
602 .lock_enable_bit_idx = PLLDU_MISC_LOCK_ENABLE, 612 .lock_enable_bit_idx = PLLDU_MISC_LOCK_ENABLE,
603 .lock_delay = 1000, 613 .lock_delay = 1000,
614 .freq_table = pll_d_freq_table,
615 .flags = TEGRA_PLL_HAS_CPCON | TEGRA_PLL_SET_LFCON |
616 TEGRA_PLL_USE_LOCK,
617
604}; 618};
605 619
606static struct tegra_clk_pll_params pll_d2_params = { 620static struct tegra_clk_pll_params pll_d2_params = {
@@ -615,6 +629,9 @@ static struct tegra_clk_pll_params pll_d2_params = {
615 .lock_mask = PLL_BASE_LOCK, 629 .lock_mask = PLL_BASE_LOCK,
616 .lock_enable_bit_idx = PLLDU_MISC_LOCK_ENABLE, 630 .lock_enable_bit_idx = PLLDU_MISC_LOCK_ENABLE,
617 .lock_delay = 1000, 631 .lock_delay = 1000,
632 .freq_table = pll_d_freq_table,
633 .flags = TEGRA_PLL_HAS_CPCON | TEGRA_PLL_SET_LFCON |
634 TEGRA_PLL_USE_LOCK,
618}; 635};
619 636
620static struct tegra_clk_pll_params pll_u_params = { 637static struct tegra_clk_pll_params pll_u_params = {
@@ -630,6 +647,8 @@ static struct tegra_clk_pll_params pll_u_params = {
630 .lock_enable_bit_idx = PLLDU_MISC_LOCK_ENABLE, 647 .lock_enable_bit_idx = PLLDU_MISC_LOCK_ENABLE,
631 .lock_delay = 1000, 648 .lock_delay = 1000,
632 .pdiv_tohw = pllu_p, 649 .pdiv_tohw = pllu_p,
650 .freq_table = pll_u_freq_table,
651 .flags = TEGRA_PLLU | TEGRA_PLL_HAS_CPCON | TEGRA_PLL_SET_LFCON,
633}; 652};
634 653
635static struct tegra_clk_pll_params pll_x_params = { 654static struct tegra_clk_pll_params pll_x_params = {
@@ -644,6 +663,9 @@ static struct tegra_clk_pll_params pll_x_params = {
644 .lock_mask = PLL_BASE_LOCK, 663 .lock_mask = PLL_BASE_LOCK,
645 .lock_enable_bit_idx = PLL_MISC_LOCK_ENABLE, 664 .lock_enable_bit_idx = PLL_MISC_LOCK_ENABLE,
646 .lock_delay = 300, 665 .lock_delay = 300,
666 .freq_table = pll_x_freq_table,
667 .flags = TEGRA_PLL_HAS_CPCON | TEGRA_PLL_SET_DCCON |
668 TEGRA_PLL_USE_LOCK,
647}; 669};
648 670
649static struct tegra_clk_pll_params pll_e_params = { 671static struct tegra_clk_pll_params pll_e_params = {
@@ -658,6 +680,9 @@ static struct tegra_clk_pll_params pll_e_params = {
658 .lock_mask = PLLE_MISC_LOCK, 680 .lock_mask = PLLE_MISC_LOCK,
659 .lock_enable_bit_idx = PLLE_MISC_LOCK_ENABLE, 681 .lock_enable_bit_idx = PLLE_MISC_LOCK_ENABLE,
660 .lock_delay = 300, 682 .lock_delay = 300,
683 .freq_table = pll_e_freq_table,
684 .flags = TEGRA_PLLE_CONFIGURE | TEGRA_PLL_FIXED,
685 .fixed_rate = 100000000,
661}; 686};
662 687
663static void tegra30_clk_measure_input_freq(void) 688static void tegra30_clk_measure_input_freq(void)
@@ -783,9 +808,7 @@ static void __init tegra30_pll_init(void)
783 808
784 /* PLLC */ 809 /* PLLC */
785 clk = tegra_clk_register_pll("pll_c", "pll_ref", clk_base, pmc_base, 0, 810 clk = tegra_clk_register_pll("pll_c", "pll_ref", clk_base, pmc_base, 0,
786 0, &pll_c_params, 811 &pll_c_params, NULL);
787 TEGRA_PLL_HAS_CPCON | TEGRA_PLL_USE_LOCK,
788 pll_c_freq_table, NULL);
789 clk_register_clkdev(clk, "pll_c", NULL); 812 clk_register_clkdev(clk, "pll_c", NULL);
790 clks[pll_c] = clk; 813 clks[pll_c] = clk;
791 814
@@ -801,9 +824,7 @@ static void __init tegra30_pll_init(void)
801 824
802 /* PLLP */ 825 /* PLLP */
803 clk = tegra_clk_register_pll("pll_p", "pll_ref", clk_base, pmc_base, 0, 826 clk = tegra_clk_register_pll("pll_p", "pll_ref", clk_base, pmc_base, 0,
804 408000000, &pll_p_params, 827 &pll_p_params, NULL);
805 TEGRA_PLL_FIXED | TEGRA_PLL_HAS_CPCON |
806 TEGRA_PLL_USE_LOCK, pll_p_freq_table, NULL);
807 clk_register_clkdev(clk, "pll_p", NULL); 828 clk_register_clkdev(clk, "pll_p", NULL);
808 clks[pll_p] = clk; 829 clks[pll_p] = clk;
809 830
@@ -857,10 +878,8 @@ static void __init tegra30_pll_init(void)
857 878
858 /* PLLM */ 879 /* PLLM */
859 clk = tegra_clk_register_pll("pll_m", "pll_ref", clk_base, pmc_base, 880 clk = tegra_clk_register_pll("pll_m", "pll_ref", clk_base, pmc_base,
860 CLK_IGNORE_UNUSED | CLK_SET_RATE_GATE, 0, 881 CLK_IGNORE_UNUSED | CLK_SET_RATE_GATE,
861 &pll_m_params, TEGRA_PLLM | TEGRA_PLL_HAS_CPCON | 882 &pll_m_params, NULL);
862 TEGRA_PLL_SET_DCCON | TEGRA_PLL_USE_LOCK,
863 pll_m_freq_table, NULL);
864 clk_register_clkdev(clk, "pll_m", NULL); 883 clk_register_clkdev(clk, "pll_m", NULL);
865 clks[pll_m] = clk; 884 clks[pll_m] = clk;
866 885
@@ -876,9 +895,7 @@ static void __init tegra30_pll_init(void)
876 895
877 /* PLLX */ 896 /* PLLX */
878 clk = tegra_clk_register_pll("pll_x", "pll_ref", clk_base, pmc_base, 0, 897 clk = tegra_clk_register_pll("pll_x", "pll_ref", clk_base, pmc_base, 0,
879 0, &pll_x_params, TEGRA_PLL_HAS_CPCON | 898 &pll_x_params, NULL);
880 TEGRA_PLL_SET_DCCON | TEGRA_PLL_USE_LOCK,
881 pll_x_freq_table, NULL);
882 clk_register_clkdev(clk, "pll_x", NULL); 899 clk_register_clkdev(clk, "pll_x", NULL);
883 clks[pll_x] = clk; 900 clks[pll_x] = clk;
884 901
@@ -890,10 +907,7 @@ static void __init tegra30_pll_init(void)
890 907
891 /* PLLU */ 908 /* PLLU */
892 clk = tegra_clk_register_pll("pll_u", "pll_ref", clk_base, pmc_base, 0, 909 clk = tegra_clk_register_pll("pll_u", "pll_ref", clk_base, pmc_base, 0,
893 0, &pll_u_params, TEGRA_PLLU | TEGRA_PLL_HAS_CPCON | 910 &pll_u_params, NULL);
894 TEGRA_PLL_SET_LFCON,
895 pll_u_freq_table,
896 NULL);
897 clk_register_clkdev(clk, "pll_u", NULL); 911 clk_register_clkdev(clk, "pll_u", NULL);
898 clks[pll_u] = clk; 912 clks[pll_u] = clk;
899 913
@@ -901,9 +915,7 @@ static void __init tegra30_pll_init(void)
901 915
902 /* PLLD */ 916 /* PLLD */
903 clk = tegra_clk_register_pll("pll_d", "pll_ref", clk_base, pmc_base, 0, 917 clk = tegra_clk_register_pll("pll_d", "pll_ref", clk_base, pmc_base, 0,
904 0, &pll_d_params, TEGRA_PLL_HAS_CPCON | 918 &pll_d_params, &pll_d_lock);
905 TEGRA_PLL_SET_LFCON | TEGRA_PLL_USE_LOCK,
906 pll_d_freq_table, &pll_d_lock);
907 clk_register_clkdev(clk, "pll_d", NULL); 919 clk_register_clkdev(clk, "pll_d", NULL);
908 clks[pll_d] = clk; 920 clks[pll_d] = clk;
909 921
@@ -915,9 +927,7 @@ static void __init tegra30_pll_init(void)
915 927
916 /* PLLD2 */ 928 /* PLLD2 */
917 clk = tegra_clk_register_pll("pll_d2", "pll_ref", clk_base, pmc_base, 0, 929 clk = tegra_clk_register_pll("pll_d2", "pll_ref", clk_base, pmc_base, 0,
918 0, &pll_d2_params, TEGRA_PLL_HAS_CPCON | 930 &pll_d2_params, NULL);
919 TEGRA_PLL_SET_LFCON | TEGRA_PLL_USE_LOCK,
920 pll_d_freq_table, NULL);
921 clk_register_clkdev(clk, "pll_d2", NULL); 931 clk_register_clkdev(clk, "pll_d2", NULL);
922 clks[pll_d2] = clk; 932 clks[pll_d2] = clk;
923 933
@@ -929,8 +939,7 @@ static void __init tegra30_pll_init(void)
929 939
930 /* PLLA */ 940 /* PLLA */
931 clk = tegra_clk_register_pll("pll_a", "pll_p_out1", clk_base, pmc_base, 941 clk = tegra_clk_register_pll("pll_a", "pll_p_out1", clk_base, pmc_base,
932 0, 0, &pll_a_params, TEGRA_PLL_HAS_CPCON | 942 0, &pll_a_params, NULL);
933 TEGRA_PLL_USE_LOCK, pll_a_freq_table, NULL);
934 clk_register_clkdev(clk, "pll_a", NULL); 943 clk_register_clkdev(clk, "pll_a", NULL);
935 clks[pll_a] = clk; 944 clks[pll_a] = clk;
936 945
@@ -950,8 +959,7 @@ static void __init tegra30_pll_init(void)
950 CLK_SET_RATE_NO_REPARENT, 959 CLK_SET_RATE_NO_REPARENT,
951 clk_base + PLLE_AUX, 2, 1, 0, NULL); 960 clk_base + PLLE_AUX, 2, 1, 0, NULL);
952 clk = tegra_clk_register_plle("pll_e", "pll_e_mux", clk_base, pmc_base, 961 clk = tegra_clk_register_plle("pll_e", "pll_e_mux", clk_base, pmc_base,
953 CLK_GET_RATE_NOCACHE, 100000000, &pll_e_params, 962 CLK_GET_RATE_NOCACHE, &pll_e_params, NULL);
954 TEGRA_PLLE_CONFIGURE, pll_e_freq_table, NULL);
955 clk_register_clkdev(clk, "pll_e", NULL); 963 clk_register_clkdev(clk, "pll_e", NULL);
956 clks[pll_e] = clk; 964 clks[pll_e] = clk;
957} 965}
diff --git a/drivers/clk/tegra/clk.h b/drivers/clk/tegra/clk.h
index a82672084718..c49df4dc5ac6 100644
--- a/drivers/clk/tegra/clk.h
+++ b/drivers/clk/tegra/clk.h
@@ -190,12 +190,15 @@ struct tegra_clk_pll_params {
190 u32 ext_misc_reg[3]; 190 u32 ext_misc_reg[3];
191 u32 pmc_divnm_reg; 191 u32 pmc_divnm_reg;
192 u32 pmc_divp_reg; 192 u32 pmc_divp_reg;
193 u32 flags;
193 int stepa_shift; 194 int stepa_shift;
194 int stepb_shift; 195 int stepb_shift;
195 int lock_delay; 196 int lock_delay;
196 int max_p; 197 int max_p;
197 struct pdiv_map *pdiv_tohw; 198 struct pdiv_map *pdiv_tohw;
198 struct div_nmp *div_nmp; 199 struct div_nmp *div_nmp;
200 struct tegra_clk_pll_freq_table *freq_table;
201 unsigned long fixed_rate;
199}; 202};
200 203
201/** 204/**
@@ -235,10 +238,7 @@ struct tegra_clk_pll {
235 struct clk_hw hw; 238 struct clk_hw hw;
236 void __iomem *clk_base; 239 void __iomem *clk_base;
237 void __iomem *pmc; 240 void __iomem *pmc;
238 u32 flags;
239 unsigned long fixed_rate;
240 spinlock_t *lock; 241 spinlock_t *lock;
241 struct tegra_clk_pll_freq_table *freq_table;
242 struct tegra_clk_pll_params *params; 242 struct tegra_clk_pll_params *params;
243}; 243};
244 244
@@ -260,54 +260,42 @@ extern const struct clk_ops tegra_clk_pll_ops;
260extern const struct clk_ops tegra_clk_plle_ops; 260extern const struct clk_ops tegra_clk_plle_ops;
261struct clk *tegra_clk_register_pll(const char *name, const char *parent_name, 261struct clk *tegra_clk_register_pll(const char *name, const char *parent_name,
262 void __iomem *clk_base, void __iomem *pmc, 262 void __iomem *clk_base, void __iomem *pmc,
263 unsigned long flags, unsigned long fixed_rate, 263 unsigned long flags, struct tegra_clk_pll_params *pll_params,
264 struct tegra_clk_pll_params *pll_params, u32 pll_flags, 264 spinlock_t *lock);
265 struct tegra_clk_pll_freq_table *freq_table, spinlock_t *lock);
266 265
267struct clk *tegra_clk_register_plle(const char *name, const char *parent_name, 266struct clk *tegra_clk_register_plle(const char *name, const char *parent_name,
268 void __iomem *clk_base, void __iomem *pmc, 267 void __iomem *clk_base, void __iomem *pmc,
269 unsigned long flags, unsigned long fixed_rate, 268 unsigned long flags, struct tegra_clk_pll_params *pll_params,
270 struct tegra_clk_pll_params *pll_params, u32 pll_flags, 269 spinlock_t *lock);
271 struct tegra_clk_pll_freq_table *freq_table, spinlock_t *lock);
272 270
273struct clk *tegra_clk_register_pllxc(const char *name, const char *parent_name, 271struct clk *tegra_clk_register_pllxc(const char *name, const char *parent_name,
274 void __iomem *clk_base, void __iomem *pmc, 272 void __iomem *clk_base, void __iomem *pmc,
275 unsigned long flags, unsigned long fixed_rate, 273 unsigned long flags,
276 struct tegra_clk_pll_params *pll_params, 274 struct tegra_clk_pll_params *pll_params,
277 u32 pll_flags,
278 struct tegra_clk_pll_freq_table *freq_table,
279 spinlock_t *lock); 275 spinlock_t *lock);
280 276
281struct clk *tegra_clk_register_pllm(const char *name, const char *parent_name, 277struct clk *tegra_clk_register_pllm(const char *name, const char *parent_name,
282 void __iomem *clk_base, void __iomem *pmc, 278 void __iomem *clk_base, void __iomem *pmc,
283 unsigned long flags, unsigned long fixed_rate, 279 unsigned long flags,
284 struct tegra_clk_pll_params *pll_params, 280 struct tegra_clk_pll_params *pll_params,
285 u32 pll_flags,
286 struct tegra_clk_pll_freq_table *freq_table,
287 spinlock_t *lock); 281 spinlock_t *lock);
288 282
289struct clk *tegra_clk_register_pllc(const char *name, const char *parent_name, 283struct clk *tegra_clk_register_pllc(const char *name, const char *parent_name,
290 void __iomem *clk_base, void __iomem *pmc, 284 void __iomem *clk_base, void __iomem *pmc,
291 unsigned long flags, unsigned long fixed_rate, 285 unsigned long flags,
292 struct tegra_clk_pll_params *pll_params, 286 struct tegra_clk_pll_params *pll_params,
293 u32 pll_flags,
294 struct tegra_clk_pll_freq_table *freq_table,
295 spinlock_t *lock); 287 spinlock_t *lock);
296 288
297struct clk *tegra_clk_register_pllre(const char *name, const char *parent_name, 289struct clk *tegra_clk_register_pllre(const char *name, const char *parent_name,
298 void __iomem *clk_base, void __iomem *pmc, 290 void __iomem *clk_base, void __iomem *pmc,
299 unsigned long flags, unsigned long fixed_rate, 291 unsigned long flags,
300 struct tegra_clk_pll_params *pll_params, 292 struct tegra_clk_pll_params *pll_params,
301 u32 pll_flags,
302 struct tegra_clk_pll_freq_table *freq_table,
303 spinlock_t *lock, unsigned long parent_rate); 293 spinlock_t *lock, unsigned long parent_rate);
304 294
305struct clk *tegra_clk_register_plle_tegra114(const char *name, 295struct clk *tegra_clk_register_plle_tegra114(const char *name,
306 const char *parent_name, 296 const char *parent_name,
307 void __iomem *clk_base, unsigned long flags, 297 void __iomem *clk_base, unsigned long flags,
308 unsigned long fixed_rate,
309 struct tegra_clk_pll_params *pll_params, 298 struct tegra_clk_pll_params *pll_params,
310 struct tegra_clk_pll_freq_table *freq_table,
311 spinlock_t *lock); 299 spinlock_t *lock);
312 300
313/** 301/**