aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2012-06-04 06:21:21 -0400
committerSascha Hauer <s.hauer@pengutronix.de>2012-06-04 09:23:41 -0400
commit6cc90d6de16532fe68b54ee6967894f7ca83affa (patch)
tree8295f6d10797212168f2a0c8810b0acf05243ee7 /arch
parentf8f5701bdaf9134b1f90e5044a82c66324d2073f (diff)
ARM i.MX pllv2: use standard register set unconditionally
The i.MX5 PLL has two different register sets for setting the rate. One is used for the standard case and and is used for DVFS. Which one of them is used depends on a hardware input of the PLL. Current implementation reads back from the hardware which setting is used. This is bogus: If we ever want to implement DVFS we have to program both register sets and not only the one which happens to be used at the moment. For now, just use the standard register set uncondionally. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/mach-imx/clk-pllv2.c35
1 files changed, 11 insertions, 24 deletions
diff --git a/arch/arm/mach-imx/clk-pllv2.c b/arch/arm/mach-imx/clk-pllv2.c
index 4685919deb6..1b0307195a6 100644
--- a/arch/arm/mach-imx/clk-pllv2.c
+++ b/arch/arm/mach-imx/clk-pllv2.c
@@ -78,7 +78,7 @@ static unsigned long clk_pllv2_recalc_rate(struct clk_hw *hw,
78 unsigned long parent_rate) 78 unsigned long parent_rate)
79{ 79{
80 long mfi, mfn, mfd, pdf, ref_clk, mfn_abs; 80 long mfi, mfn, mfd, pdf, ref_clk, mfn_abs;
81 unsigned long dp_op, dp_mfd, dp_mfn, dp_ctl, pll_hfsm, dbl; 81 unsigned long dp_op, dp_mfd, dp_mfn, dp_ctl, dbl;
82 void __iomem *pllbase; 82 void __iomem *pllbase;
83 s64 temp; 83 s64 temp;
84 struct clk_pllv2 *pll = to_clk_pllv2(hw); 84 struct clk_pllv2 *pll = to_clk_pllv2(hw);
@@ -86,18 +86,12 @@ static unsigned long clk_pllv2_recalc_rate(struct clk_hw *hw,
86 pllbase = pll->base; 86 pllbase = pll->base;
87 87
88 dp_ctl = __raw_readl(pllbase + MXC_PLL_DP_CTL); 88 dp_ctl = __raw_readl(pllbase + MXC_PLL_DP_CTL);
89 pll_hfsm = dp_ctl & MXC_PLL_DP_CTL_HFSM;
90 dbl = dp_ctl & MXC_PLL_DP_CTL_DPDCK0_2_EN; 89 dbl = dp_ctl & MXC_PLL_DP_CTL_DPDCK0_2_EN;
91 90
92 if (pll_hfsm == 0) { 91 dp_op = __raw_readl(pllbase + MXC_PLL_DP_OP);
93 dp_op = __raw_readl(pllbase + MXC_PLL_DP_OP); 92 dp_mfd = __raw_readl(pllbase + MXC_PLL_DP_MFD);
94 dp_mfd = __raw_readl(pllbase + MXC_PLL_DP_MFD); 93 dp_mfn = __raw_readl(pllbase + MXC_PLL_DP_MFN);
95 dp_mfn = __raw_readl(pllbase + MXC_PLL_DP_MFN); 94
96 } else {
97 dp_op = __raw_readl(pllbase + MXC_PLL_DP_HFS_OP);
98 dp_mfd = __raw_readl(pllbase + MXC_PLL_DP_HFS_MFD);
99 dp_mfn = __raw_readl(pllbase + MXC_PLL_DP_HFS_MFN);
100 }
101 pdf = dp_op & MXC_PLL_DP_OP_PDF_MASK; 95 pdf = dp_op & MXC_PLL_DP_OP_PDF_MASK;
102 mfi = (dp_op & MXC_PLL_DP_OP_MFI_MASK) >> MXC_PLL_DP_OP_MFI_OFFSET; 96 mfi = (dp_op & MXC_PLL_DP_OP_MFI_MASK) >> MXC_PLL_DP_OP_MFI_OFFSET;
103 mfi = (mfi <= 5) ? 5 : mfi; 97 mfi = (mfi <= 5) ? 5 : mfi;
@@ -132,7 +126,7 @@ static int clk_pllv2_set_rate(struct clk_hw *hw, unsigned long rate,
132 long mfi, pdf, mfn, mfd = 999999; 126 long mfi, pdf, mfn, mfd = 999999;
133 s64 temp64; 127 s64 temp64;
134 unsigned long quad_parent_rate; 128 unsigned long quad_parent_rate;
135 unsigned long pll_hfsm, dp_ctl; 129 unsigned long dp_ctl;
136 130
137 pllbase = pll->base; 131 pllbase = pll->base;
138 132
@@ -151,18 +145,11 @@ static int clk_pllv2_set_rate(struct clk_hw *hw, unsigned long rate,
151 dp_ctl = __raw_readl(pllbase + MXC_PLL_DP_CTL); 145 dp_ctl = __raw_readl(pllbase + MXC_PLL_DP_CTL);
152 /* use dpdck0_2 */ 146 /* use dpdck0_2 */
153 __raw_writel(dp_ctl | 0x1000L, pllbase + MXC_PLL_DP_CTL); 147 __raw_writel(dp_ctl | 0x1000L, pllbase + MXC_PLL_DP_CTL);
154 pll_hfsm = dp_ctl & MXC_PLL_DP_CTL_HFSM; 148
155 if (pll_hfsm == 0) { 149 reg = mfi << 4 | pdf;
156 reg = mfi << 4 | pdf; 150 __raw_writel(reg, pllbase + MXC_PLL_DP_OP);
157 __raw_writel(reg, pllbase + MXC_PLL_DP_OP); 151 __raw_writel(mfd, pllbase + MXC_PLL_DP_MFD);
158 __raw_writel(mfd, pllbase + MXC_PLL_DP_MFD); 152 __raw_writel(mfn, pllbase + MXC_PLL_DP_MFN);
159 __raw_writel(mfn, pllbase + MXC_PLL_DP_MFN);
160 } else {
161 reg = mfi << 4 | pdf;
162 __raw_writel(reg, pllbase + MXC_PLL_DP_HFS_OP);
163 __raw_writel(mfd, pllbase + MXC_PLL_DP_HFS_MFD);
164 __raw_writel(mfn, pllbase + MXC_PLL_DP_HFS_MFN);
165 }
166 153
167 return 0; 154 return 0;
168} 155}