Skip to content

Commit 7a243e1

Browse files
krzkandersson
authored andcommitted
clk: qcom: clk-alpha-pll: Do not use random stack value for recalc rate
If regmap_read() fails, random stack value was used in calculating new frequency in recalc_rate() callbacks. Such failure is really not expected as these are all MMIO reads, however code should be here correct and bail out. This also avoids possible warning on uninitialized value. Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> Link: https://lore.kernel.org/r/20250212-b4-clk-qcom-clean-v3-1-499f37444f5d@linaro.org Signed-off-by: Bjorn Andersson <andersson@kernel.org>
1 parent b489235 commit 7a243e1

1 file changed

Lines changed: 36 additions & 16 deletions

File tree

drivers/clk/qcom/clk-alpha-pll.c

Lines changed: 36 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -709,14 +709,19 @@ clk_alpha_pll_recalc_rate(struct clk_hw *hw, unsigned long parent_rate)
709709
struct clk_alpha_pll *pll = to_clk_alpha_pll(hw);
710710
u32 alpha_width = pll_alpha_width(pll);
711711

712-
regmap_read(pll->clkr.regmap, PLL_L_VAL(pll), &l);
712+
if (regmap_read(pll->clkr.regmap, PLL_L_VAL(pll), &l))
713+
return 0;
714+
715+
if (regmap_read(pll->clkr.regmap, PLL_USER_CTL(pll), &ctl))
716+
return 0;
713717

714-
regmap_read(pll->clkr.regmap, PLL_USER_CTL(pll), &ctl);
715718
if (ctl & PLL_ALPHA_EN) {
716-
regmap_read(pll->clkr.regmap, PLL_ALPHA_VAL(pll), &low);
719+
if (regmap_read(pll->clkr.regmap, PLL_ALPHA_VAL(pll), &low))
720+
return 0;
717721
if (alpha_width > 32) {
718-
regmap_read(pll->clkr.regmap, PLL_ALPHA_VAL_U(pll),
719-
&high);
722+
if (regmap_read(pll->clkr.regmap, PLL_ALPHA_VAL_U(pll),
723+
&high))
724+
return 0;
720725
a = (u64)high << 32 | low;
721726
} else {
722727
a = low & GENMASK(alpha_width - 1, 0);
@@ -942,8 +947,11 @@ alpha_pll_huayra_recalc_rate(struct clk_hw *hw, unsigned long parent_rate)
942947
struct clk_alpha_pll *pll = to_clk_alpha_pll(hw);
943948
u32 l, alpha = 0, ctl, alpha_m, alpha_n;
944949

945-
regmap_read(pll->clkr.regmap, PLL_L_VAL(pll), &l);
946-
regmap_read(pll->clkr.regmap, PLL_USER_CTL(pll), &ctl);
950+
if (regmap_read(pll->clkr.regmap, PLL_L_VAL(pll), &l))
951+
return 0;
952+
953+
if (regmap_read(pll->clkr.regmap, PLL_USER_CTL(pll), &ctl))
954+
return 0;
947955

948956
if (ctl & PLL_ALPHA_EN) {
949957
regmap_read(pll->clkr.regmap, PLL_ALPHA_VAL(pll), &alpha);
@@ -1137,8 +1145,11 @@ clk_trion_pll_recalc_rate(struct clk_hw *hw, unsigned long parent_rate)
11371145
struct clk_alpha_pll *pll = to_clk_alpha_pll(hw);
11381146
u32 l, frac, alpha_width = pll_alpha_width(pll);
11391147

1140-
regmap_read(pll->clkr.regmap, PLL_L_VAL(pll), &l);
1141-
regmap_read(pll->clkr.regmap, PLL_ALPHA_VAL(pll), &frac);
1148+
if (regmap_read(pll->clkr.regmap, PLL_L_VAL(pll), &l))
1149+
return 0;
1150+
1151+
if (regmap_read(pll->clkr.regmap, PLL_ALPHA_VAL(pll), &frac))
1152+
return 0;
11421153

11431154
return alpha_pll_calc_rate(parent_rate, l, frac, alpha_width);
11441155
}
@@ -1196,7 +1207,8 @@ clk_alpha_pll_postdiv_recalc_rate(struct clk_hw *hw, unsigned long parent_rate)
11961207
struct clk_alpha_pll_postdiv *pll = to_clk_alpha_pll_postdiv(hw);
11971208
u32 ctl;
11981209

1199-
regmap_read(pll->clkr.regmap, PLL_USER_CTL(pll), &ctl);
1210+
if (regmap_read(pll->clkr.regmap, PLL_USER_CTL(pll), &ctl))
1211+
return 0;
12001212

12011213
ctl >>= PLL_POST_DIV_SHIFT;
12021214
ctl &= PLL_POST_DIV_MASK(pll);
@@ -1412,8 +1424,11 @@ static unsigned long alpha_pll_fabia_recalc_rate(struct clk_hw *hw,
14121424
struct clk_alpha_pll *pll = to_clk_alpha_pll(hw);
14131425
u32 l, frac, alpha_width = pll_alpha_width(pll);
14141426

1415-
regmap_read(pll->clkr.regmap, PLL_L_VAL(pll), &l);
1416-
regmap_read(pll->clkr.regmap, PLL_FRAC(pll), &frac);
1427+
if (regmap_read(pll->clkr.regmap, PLL_L_VAL(pll), &l))
1428+
return 0;
1429+
1430+
if (regmap_read(pll->clkr.regmap, PLL_FRAC(pll), &frac))
1431+
return 0;
14171432

14181433
return alpha_pll_calc_rate(parent_rate, l, frac, alpha_width);
14191434
}
@@ -1563,7 +1578,8 @@ clk_trion_pll_postdiv_recalc_rate(struct clk_hw *hw, unsigned long parent_rate)
15631578
struct regmap *regmap = pll->clkr.regmap;
15641579
u32 i, div = 1, val;
15651580

1566-
regmap_read(regmap, PLL_USER_CTL(pll), &val);
1581+
if (regmap_read(regmap, PLL_USER_CTL(pll), &val))
1582+
return 0;
15671583

15681584
val >>= pll->post_div_shift;
15691585
val &= PLL_POST_DIV_MASK(pll);
@@ -2484,9 +2500,12 @@ static unsigned long alpha_pll_lucid_evo_recalc_rate(struct clk_hw *hw,
24842500
struct regmap *regmap = pll->clkr.regmap;
24852501
u32 l, frac;
24862502

2487-
regmap_read(regmap, PLL_L_VAL(pll), &l);
2503+
if (regmap_read(regmap, PLL_L_VAL(pll), &l))
2504+
return 0;
24882505
l &= LUCID_EVO_PLL_L_VAL_MASK;
2489-
regmap_read(regmap, PLL_ALPHA_VAL(pll), &frac);
2506+
2507+
if (regmap_read(regmap, PLL_ALPHA_VAL(pll), &frac))
2508+
return 0;
24902509

24912510
return alpha_pll_calc_rate(parent_rate, l, frac, pll_alpha_width(pll));
24922511
}
@@ -2699,7 +2718,8 @@ static unsigned long clk_rivian_evo_pll_recalc_rate(struct clk_hw *hw,
26992718
struct clk_alpha_pll *pll = to_clk_alpha_pll(hw);
27002719
u32 l;
27012720

2702-
regmap_read(pll->clkr.regmap, PLL_L_VAL(pll), &l);
2721+
if (regmap_read(pll->clkr.regmap, PLL_L_VAL(pll), &l))
2722+
return 0;
27032723

27042724
return parent_rate * l;
27052725
}

0 commit comments

Comments
 (0)