33 * Copyright 2017-2018 NXP.
44 */
55
6+ #include <linux/bitfield.h>
67#include <linux/bits.h>
78#include <linux/clk-provider.h>
89#include <linux/err.h>
2223#define CLKE_MASK BIT(11)
2324#define RST_MASK BIT(9)
2425#define BYPASS_MASK BIT(4)
25- #define MDIV_SHIFT 12
2626#define MDIV_MASK GENMASK(21, 12)
27- #define PDIV_SHIFT 4
2827#define PDIV_MASK GENMASK(9, 4)
29- #define SDIV_SHIFT 0
3028#define SDIV_MASK GENMASK(2, 0)
31- #define KDIV_SHIFT 0
3229#define KDIV_MASK GENMASK(15, 0)
3330
3431#define LOCK_TIMEOUT_US 10000
@@ -124,9 +121,9 @@ static unsigned long clk_pll1416x_recalc_rate(struct clk_hw *hw,
124121 u64 fvco = parent_rate ;
125122
126123 pll_div = readl_relaxed (pll -> base + DIV_CTL0 );
127- mdiv = ( pll_div & MDIV_MASK ) >> MDIV_SHIFT ;
128- pdiv = ( pll_div & PDIV_MASK ) >> PDIV_SHIFT ;
129- sdiv = ( pll_div & SDIV_MASK ) >> SDIV_SHIFT ;
124+ mdiv = FIELD_GET ( MDIV_MASK , pll_div ) ;
125+ pdiv = FIELD_GET ( PDIV_MASK , pll_div ) ;
126+ sdiv = FIELD_GET ( SDIV_MASK , pll_div ) ;
130127
131128 fvco *= mdiv ;
132129 do_div (fvco , pdiv << sdiv );
@@ -144,10 +141,10 @@ static unsigned long clk_pll1443x_recalc_rate(struct clk_hw *hw,
144141
145142 pll_div_ctl0 = readl_relaxed (pll -> base + DIV_CTL0 );
146143 pll_div_ctl1 = readl_relaxed (pll -> base + DIV_CTL1 );
147- mdiv = ( pll_div_ctl0 & MDIV_MASK ) >> MDIV_SHIFT ;
148- pdiv = ( pll_div_ctl0 & PDIV_MASK ) >> PDIV_SHIFT ;
149- sdiv = ( pll_div_ctl0 & SDIV_MASK ) >> SDIV_SHIFT ;
150- kdiv = pll_div_ctl1 & KDIV_MASK ;
144+ mdiv = FIELD_GET ( MDIV_MASK , pll_div_ctl0 ) ;
145+ pdiv = FIELD_GET ( PDIV_MASK , pll_div_ctl0 ) ;
146+ sdiv = FIELD_GET ( SDIV_MASK , pll_div_ctl0 ) ;
147+ kdiv = FIELD_GET ( KDIV_MASK , pll_div_ctl1 ) ;
151148
152149 /* fvco = (m * 65536 + k) * Fin / (p * 65536) */
153150 fvco *= (mdiv * 65536 + kdiv );
@@ -163,8 +160,8 @@ static inline bool clk_pll14xx_mp_change(const struct imx_pll14xx_rate_table *ra
163160{
164161 u32 old_mdiv , old_pdiv ;
165162
166- old_mdiv = ( pll_div & MDIV_MASK ) >> MDIV_SHIFT ;
167- old_pdiv = ( pll_div & PDIV_MASK ) >> PDIV_SHIFT ;
163+ old_mdiv = FIELD_GET ( MDIV_MASK , pll_div ) ;
164+ old_pdiv = FIELD_GET ( PDIV_MASK , pll_div ) ;
168165
169166 return rate -> mdiv != old_mdiv || rate -> pdiv != old_pdiv ;
170167}
@@ -196,7 +193,7 @@ static int clk_pll1416x_set_rate(struct clk_hw *hw, unsigned long drate,
196193
197194 if (!clk_pll14xx_mp_change (rate , tmp )) {
198195 tmp &= ~SDIV_MASK ;
199- tmp |= rate -> sdiv << SDIV_SHIFT ;
196+ tmp |= FIELD_PREP ( SDIV_MASK , rate -> sdiv ) ;
200197 writel_relaxed (tmp , pll -> base + DIV_CTL0 );
201198
202199 return 0 ;
@@ -215,8 +212,8 @@ static int clk_pll1416x_set_rate(struct clk_hw *hw, unsigned long drate,
215212 tmp |= BYPASS_MASK ;
216213 writel (tmp , pll -> base + GNRL_CTL );
217214
218- div_val = ( rate -> mdiv << MDIV_SHIFT ) | ( rate -> pdiv << PDIV_SHIFT ) |
219- ( rate -> sdiv << SDIV_SHIFT );
215+ div_val = FIELD_PREP ( MDIV_MASK , rate -> mdiv ) | FIELD_PREP ( PDIV_MASK , rate -> pdiv ) |
216+ FIELD_PREP ( SDIV_MASK , rate -> sdiv );
220217 writel_relaxed (div_val , pll -> base + DIV_CTL0 );
221218
222219 /*
@@ -262,10 +259,10 @@ static int clk_pll1443x_set_rate(struct clk_hw *hw, unsigned long drate,
262259
263260 if (!clk_pll14xx_mp_change (rate , tmp )) {
264261 tmp &= ~SDIV_MASK ;
265- tmp |= rate -> sdiv << SDIV_SHIFT ;
262+ tmp |= FIELD_PREP ( SDIV_MASK , rate -> sdiv ) ;
266263 writel_relaxed (tmp , pll -> base + DIV_CTL0 );
267264
268- tmp = rate -> kdiv << KDIV_SHIFT ;
265+ tmp = FIELD_PREP ( KDIV_MASK , rate -> kdiv ) ;
269266 writel_relaxed (tmp , pll -> base + DIV_CTL1 );
270267
271268 return 0 ;
@@ -280,10 +277,11 @@ static int clk_pll1443x_set_rate(struct clk_hw *hw, unsigned long drate,
280277 tmp |= BYPASS_MASK ;
281278 writel_relaxed (tmp , pll -> base + GNRL_CTL );
282279
283- div_val = (rate -> mdiv << MDIV_SHIFT ) | (rate -> pdiv << PDIV_SHIFT ) |
284- (rate -> sdiv << SDIV_SHIFT );
280+ div_val = FIELD_PREP (MDIV_MASK , rate -> mdiv ) |
281+ FIELD_PREP (PDIV_MASK , rate -> pdiv ) |
282+ FIELD_PREP (SDIV_MASK , rate -> sdiv );
285283 writel_relaxed (div_val , pll -> base + DIV_CTL0 );
286- writel_relaxed (rate -> kdiv << KDIV_SHIFT , pll -> base + DIV_CTL1 );
284+ writel_relaxed (FIELD_PREP ( KDIV_MASK , rate -> kdiv ) , pll -> base + DIV_CTL1 );
287285
288286 /*
289287 * According to SPEC, t3 - t2 need to be greater than
0 commit comments