@@ -97,6 +97,20 @@ static const struct imx_pll14xx_rate_table *imx_get_pll_settings(
97
97
return NULL ;
98
98
}
99
99
100
+ static long pll14xx_calc_rate (struct clk_pll14xx * pll , int mdiv , int pdiv ,
101
+ int sdiv , int kdiv , unsigned long prate )
102
+ {
103
+ u64 fvco = prate ;
104
+
105
+ /* fvco = (m * 65536 + k) * Fin / (p * 65536) */
106
+ fvco *= (mdiv * 65536 + kdiv );
107
+ pdiv *= 65536 ;
108
+
109
+ do_div (fvco , pdiv << sdiv );
110
+
111
+ return fvco ;
112
+ }
113
+
100
114
static long clk_pll14xx_round_rate (struct clk_hw * hw , unsigned long rate ,
101
115
unsigned long * prate )
102
116
{
@@ -113,46 +127,25 @@ static long clk_pll14xx_round_rate(struct clk_hw *hw, unsigned long rate,
113
127
return rate_table [i - 1 ].rate ;
114
128
}
115
129
116
- static unsigned long clk_pll1416x_recalc_rate (struct clk_hw * hw ,
117
- unsigned long parent_rate )
118
- {
119
- struct clk_pll14xx * pll = to_clk_pll14xx (hw );
120
- u32 mdiv , pdiv , sdiv , pll_div ;
121
- u64 fvco = parent_rate ;
122
-
123
- pll_div = readl_relaxed (pll -> base + DIV_CTL0 );
124
- mdiv = FIELD_GET (MDIV_MASK , pll_div );
125
- pdiv = FIELD_GET (PDIV_MASK , pll_div );
126
- sdiv = FIELD_GET (SDIV_MASK , pll_div );
127
-
128
- fvco *= mdiv ;
129
- do_div (fvco , pdiv << sdiv );
130
-
131
- return fvco ;
132
- }
133
-
134
- static unsigned long clk_pll1443x_recalc_rate (struct clk_hw * hw ,
130
+ static unsigned long clk_pll14xx_recalc_rate (struct clk_hw * hw ,
135
131
unsigned long parent_rate )
136
132
{
137
133
struct clk_pll14xx * pll = to_clk_pll14xx (hw );
138
- u32 mdiv , pdiv , sdiv , pll_div_ctl0 , pll_div_ctl1 ;
139
- short int kdiv ;
140
- u64 fvco = parent_rate ;
134
+ u32 mdiv , pdiv , sdiv , kdiv , pll_div_ctl0 , pll_div_ctl1 ;
141
135
142
136
pll_div_ctl0 = readl_relaxed (pll -> base + DIV_CTL0 );
143
- pll_div_ctl1 = readl_relaxed (pll -> base + DIV_CTL1 );
144
137
mdiv = FIELD_GET (MDIV_MASK , pll_div_ctl0 );
145
138
pdiv = FIELD_GET (PDIV_MASK , pll_div_ctl0 );
146
139
sdiv = FIELD_GET (SDIV_MASK , pll_div_ctl0 );
147
- kdiv = FIELD_GET (KDIV_MASK , pll_div_ctl1 );
148
140
149
- /* fvco = (m * 65536 + k) * Fin / (p * 65536) */
150
- fvco *= (mdiv * 65536 + kdiv );
151
- pdiv *= 65536 ;
152
-
153
- do_div (fvco , pdiv << sdiv );
141
+ if (pll -> type == PLL_1443X ) {
142
+ pll_div_ctl1 = readl_relaxed (pll -> base + DIV_CTL1 );
143
+ kdiv = FIELD_GET (KDIV_MASK , pll_div_ctl1 );
144
+ } else {
145
+ kdiv = 0 ;
146
+ }
154
147
155
- return fvco ;
148
+ return pll14xx_calc_rate ( pll , mdiv , pdiv , sdiv , kdiv , parent_rate ) ;
156
149
}
157
150
158
151
static inline bool clk_pll14xx_mp_change (const struct imx_pll14xx_rate_table * rate ,
@@ -363,20 +356,20 @@ static const struct clk_ops clk_pll1416x_ops = {
363
356
.prepare = clk_pll14xx_prepare ,
364
357
.unprepare = clk_pll14xx_unprepare ,
365
358
.is_prepared = clk_pll14xx_is_prepared ,
366
- .recalc_rate = clk_pll1416x_recalc_rate ,
359
+ .recalc_rate = clk_pll14xx_recalc_rate ,
367
360
.round_rate = clk_pll14xx_round_rate ,
368
361
.set_rate = clk_pll1416x_set_rate ,
369
362
};
370
363
371
364
static const struct clk_ops clk_pll1416x_min_ops = {
372
- .recalc_rate = clk_pll1416x_recalc_rate ,
365
+ .recalc_rate = clk_pll14xx_recalc_rate ,
373
366
};
374
367
375
368
static const struct clk_ops clk_pll1443x_ops = {
376
369
.prepare = clk_pll14xx_prepare ,
377
370
.unprepare = clk_pll14xx_unprepare ,
378
371
.is_prepared = clk_pll14xx_is_prepared ,
379
- .recalc_rate = clk_pll1443x_recalc_rate ,
372
+ .recalc_rate = clk_pll14xx_recalc_rate ,
380
373
.round_rate = clk_pll14xx_round_rate ,
381
374
.set_rate = clk_pll1443x_set_rate ,
382
375
};
0 commit comments