diff options
| -rw-r--r-- | drivers/clk/tegra/clk-pll.c | 44 |
1 files changed, 24 insertions, 20 deletions
diff --git a/drivers/clk/tegra/clk-pll.c b/drivers/clk/tegra/clk-pll.c index 357911303315..1187187a1cf2 100644 --- a/drivers/clk/tegra/clk-pll.c +++ b/drivers/clk/tegra/clk-pll.c | |||
| @@ -183,6 +183,14 @@ | |||
| 183 | #define divp_mask(p) (p->params->flags & TEGRA_PLLU ? PLLU_POST_DIVP_MASK :\ | 183 | #define divp_mask(p) (p->params->flags & TEGRA_PLLU ? PLLU_POST_DIVP_MASK :\ |
| 184 | mask(p->params->div_nmp->divp_width)) | 184 | mask(p->params->div_nmp->divp_width)) |
| 185 | 185 | ||
| 186 | #define divm_shift(p) (p)->params->div_nmp->divm_shift | ||
| 187 | #define divn_shift(p) (p)->params->div_nmp->divn_shift | ||
| 188 | #define divp_shift(p) (p)->params->div_nmp->divp_shift | ||
| 189 | |||
| 190 | #define divm_mask_shifted(p) (divm_mask(p) << divm_shift(p)) | ||
| 191 | #define divn_mask_shifted(p) (divn_mask(p) << divn_shift(p)) | ||
| 192 | #define divp_mask_shifted(p) (divp_mask(p) << divp_shift(p)) | ||
| 193 | |||
| 186 | #define divm_max(p) (divm_mask(p)) | 194 | #define divm_max(p) (divm_mask(p)) |
| 187 | #define divn_max(p) (divn_mask(p)) | 195 | #define divn_max(p) (divn_mask(p)) |
| 188 | #define divp_max(p) (1 << (divp_mask(p))) | 196 | #define divp_max(p) (1 << (divp_mask(p))) |
| @@ -476,13 +484,12 @@ static void _update_pll_mnp(struct tegra_clk_pll *pll, | |||
| 476 | } else { | 484 | } else { |
| 477 | val = pll_readl_base(pll); | 485 | val = pll_readl_base(pll); |
| 478 | 486 | ||
| 479 | val &= ~((divm_mask(pll) << div_nmp->divm_shift) | | 487 | val &= ~(divm_mask_shifted(pll) | divn_mask_shifted(pll) | |
| 480 | (divn_mask(pll) << div_nmp->divn_shift) | | 488 | divp_mask_shifted(pll)); |
| 481 | (divp_mask(pll) << div_nmp->divp_shift)); | ||
| 482 | 489 | ||
| 483 | val |= ((cfg->m << div_nmp->divm_shift) | | 490 | val |= (cfg->m << divm_shift(pll)) | |
| 484 | (cfg->n << div_nmp->divn_shift) | | 491 | (cfg->n << divn_shift(pll)) | |
| 485 | (cfg->p << div_nmp->divp_shift)); | 492 | (cfg->p << divp_shift(pll)); |
| 486 | 493 | ||
| 487 | pll_writel_base(val, pll); | 494 | pll_writel_base(val, pll); |
| 488 | } | 495 | } |
| @@ -730,13 +737,12 @@ static int clk_plle_enable(struct clk_hw *hw) | |||
| 730 | if (pll->params->flags & TEGRA_PLLE_CONFIGURE) { | 737 | if (pll->params->flags & TEGRA_PLLE_CONFIGURE) { |
| 731 | /* configure dividers */ | 738 | /* configure dividers */ |
| 732 | val = pll_readl_base(pll); | 739 | val = pll_readl_base(pll); |
| 733 | val &= ~(divp_mask(pll) << PLLE_BASE_DIVP_SHIFT | | 740 | val &= ~(divp_mask_shifted(pll) | divn_mask_shifted(pll) | |
| 734 | divn_mask(pll) << PLLE_BASE_DIVN_SHIFT | | 741 | divm_mask_shifted(pll)); |
| 735 | divm_mask(pll) << PLLE_BASE_DIVM_SHIFT); | ||
| 736 | val &= ~(PLLE_BASE_DIVCML_MASK << PLLE_BASE_DIVCML_SHIFT); | 742 | val &= ~(PLLE_BASE_DIVCML_MASK << PLLE_BASE_DIVCML_SHIFT); |
| 737 | val |= sel.m << pll->params->div_nmp->divm_shift; | 743 | val |= sel.m << divm_shift(pll); |
| 738 | val |= sel.n << pll->params->div_nmp->divn_shift; | 744 | val |= sel.n << divn_shift(pll); |
| 739 | val |= sel.p << pll->params->div_nmp->divp_shift; | 745 | val |= sel.p << divp_shift(pll); |
| 740 | val |= sel.cpcon << PLLE_BASE_DIVCML_SHIFT; | 746 | val |= sel.cpcon << PLLE_BASE_DIVCML_SHIFT; |
| 741 | pll_writel_base(val, pll); | 747 | pll_writel_base(val, pll); |
| 742 | } | 748 | } |
| @@ -1295,12 +1301,11 @@ static int clk_plle_tegra114_enable(struct clk_hw *hw) | |||
| 1295 | pll_writel(val, PLLE_SS_CTRL, pll); | 1301 | pll_writel(val, PLLE_SS_CTRL, pll); |
| 1296 | 1302 | ||
| 1297 | val = pll_readl_base(pll); | 1303 | val = pll_readl_base(pll); |
| 1298 | val &= ~(divp_mask(pll) << PLLE_BASE_DIVP_SHIFT | | 1304 | val &= ~(divp_mask_shifted(pll) | divn_mask_shifted(pll) | |
| 1299 | divn_mask(pll) << PLLE_BASE_DIVN_SHIFT | | 1305 | divm_mask_shifted(pll)); |
| 1300 | divm_mask(pll) << PLLE_BASE_DIVM_SHIFT); | ||
| 1301 | val &= ~(PLLE_BASE_DIVCML_MASK << PLLE_BASE_DIVCML_SHIFT); | 1306 | val &= ~(PLLE_BASE_DIVCML_MASK << PLLE_BASE_DIVCML_SHIFT); |
| 1302 | val |= sel.m << pll->params->div_nmp->divm_shift; | 1307 | val |= sel.m << divm_shift(pll); |
| 1303 | val |= sel.n << pll->params->div_nmp->divn_shift; | 1308 | val |= sel.n << divn_shift(pll); |
| 1304 | val |= sel.cpcon << PLLE_BASE_DIVCML_SHIFT; | 1309 | val |= sel.cpcon << PLLE_BASE_DIVCML_SHIFT; |
| 1305 | pll_writel_base(val, pll); | 1310 | pll_writel_base(val, pll); |
| 1306 | udelay(1); | 1311 | udelay(1); |
| @@ -1575,9 +1580,8 @@ struct clk *tegra_clk_register_pllre(const char *name, const char *parent_name, | |||
| 1575 | int m; | 1580 | int m; |
| 1576 | 1581 | ||
| 1577 | m = _pll_fixed_mdiv(pll_params, parent_rate); | 1582 | m = _pll_fixed_mdiv(pll_params, parent_rate); |
| 1578 | val = m << PLL_BASE_DIVM_SHIFT; | 1583 | val = m << divm_shift(pll); |
| 1579 | val |= (pll_params->vco_min / parent_rate) | 1584 | val |= (pll_params->vco_min / parent_rate) << divn_shift(pll); |
| 1580 | << PLL_BASE_DIVN_SHIFT; | ||
| 1581 | pll_writel_base(val, pll); | 1585 | pll_writel_base(val, pll); |
| 1582 | } | 1586 | } |
| 1583 | 1587 | ||
