Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

clk: qcom: alpha-pll: convert from round_rate() to determine_rate()

The round_rate() clk ops is deprecated, so migrate this driver from
round_rate() to determine_rate() using the Coccinelle semantic patch
on the cover letter of this series.

Note that prior to running the Coccinelle,
clk_alpha_pll_postdiv_round_ro_rate() was renamed to
clk_alpha_pll_postdiv_ro_round_rate().

Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Brian Masney <bmasney@redhat.com>
Link: https://lore.kernel.org/r/20250828-clk-round-rate-v2-v1-2-b97ec8ba6cc4@redhat.com
Signed-off-by: Bjorn Andersson <andersson@kernel.org>

authored by

Brian Masney and committed by
Bjorn Andersson
0e56e336 d923b968

+77 -59
+77 -59
drivers/clk/qcom/clk-alpha-pll.c
··· 849 849 clk_alpha_pll_hwfsm_is_enabled); 850 850 } 851 851 852 - static long clk_alpha_pll_round_rate(struct clk_hw *hw, unsigned long rate, 853 - unsigned long *prate) 852 + static int clk_alpha_pll_determine_rate(struct clk_hw *hw, 853 + struct clk_rate_request *req) 854 854 { 855 855 struct clk_alpha_pll *pll = to_clk_alpha_pll(hw); 856 856 u32 l, alpha_width = pll_alpha_width(pll); 857 857 u64 a; 858 858 unsigned long min_freq, max_freq; 859 859 860 - rate = alpha_pll_round_rate(rate, *prate, &l, &a, alpha_width); 861 - if (!pll->vco_table || alpha_pll_find_vco(pll, rate)) 862 - return rate; 860 + req->rate = alpha_pll_round_rate(req->rate, req->best_parent_rate, &l, 861 + &a, alpha_width); 862 + if (!pll->vco_table || alpha_pll_find_vco(pll, req->rate)) 863 + return 0; 863 864 864 865 min_freq = pll->vco_table[0].min_freq; 865 866 max_freq = pll->vco_table[pll->num_vco - 1].max_freq; 866 867 867 - return clamp(rate, min_freq, max_freq); 868 + req->rate = clamp(req->rate, min_freq, max_freq); 869 + 870 + return 0; 868 871 } 869 872 870 873 void clk_huayra_2290_pll_configure(struct clk_alpha_pll *pll, struct regmap *regmap, ··· 1051 1048 return 0; 1052 1049 } 1053 1050 1054 - static long alpha_pll_huayra_round_rate(struct clk_hw *hw, unsigned long rate, 1055 - unsigned long *prate) 1051 + static int alpha_pll_huayra_determine_rate(struct clk_hw *hw, 1052 + struct clk_rate_request *req) 1056 1053 { 1057 1054 u32 l, a; 1058 1055 1059 - return alpha_huayra_pll_round_rate(rate, *prate, &l, &a); 1056 + req->rate = alpha_huayra_pll_round_rate(req->rate, 1057 + req->best_parent_rate, &l, &a); 1058 + 1059 + return 0; 1060 1060 } 1061 1061 1062 1062 static int trion_pll_is_enabled(struct clk_alpha_pll *pll, ··· 1181 1175 .disable = clk_alpha_pll_disable, 1182 1176 .is_enabled = clk_alpha_pll_is_enabled, 1183 1177 .recalc_rate = clk_alpha_pll_recalc_rate, 1184 - .round_rate = clk_alpha_pll_round_rate, 1178 + .determine_rate = clk_alpha_pll_determine_rate, 1185 1179 .set_rate = clk_alpha_pll_set_rate, 1186 1180 }; 1187 1181 EXPORT_SYMBOL_GPL(clk_alpha_pll_ops); ··· 1191 1185 .disable = clk_alpha_pll_disable, 1192 1186 .is_enabled = clk_alpha_pll_is_enabled, 1193 1187 .recalc_rate = alpha_pll_huayra_recalc_rate, 1194 - .round_rate = alpha_pll_huayra_round_rate, 1188 + .determine_rate = alpha_pll_huayra_determine_rate, 1195 1189 .set_rate = alpha_pll_huayra_set_rate, 1196 1190 }; 1197 1191 EXPORT_SYMBOL_GPL(clk_alpha_pll_huayra_ops); ··· 1201 1195 .disable = clk_alpha_pll_hwfsm_disable, 1202 1196 .is_enabled = clk_alpha_pll_hwfsm_is_enabled, 1203 1197 .recalc_rate = clk_alpha_pll_recalc_rate, 1204 - .round_rate = clk_alpha_pll_round_rate, 1198 + .determine_rate = clk_alpha_pll_determine_rate, 1205 1199 .set_rate = clk_alpha_pll_hwfsm_set_rate, 1206 1200 }; 1207 1201 EXPORT_SYMBOL_GPL(clk_alpha_pll_hwfsm_ops); ··· 1211 1205 .disable = clk_trion_pll_disable, 1212 1206 .is_enabled = clk_trion_pll_is_enabled, 1213 1207 .recalc_rate = clk_trion_pll_recalc_rate, 1214 - .round_rate = clk_alpha_pll_round_rate, 1208 + .determine_rate = clk_alpha_pll_determine_rate, 1215 1209 }; 1216 1210 EXPORT_SYMBOL_GPL(clk_alpha_pll_fixed_trion_ops); 1217 1211 ··· 1246 1240 { } 1247 1241 }; 1248 1242 1249 - static long 1250 - clk_alpha_pll_postdiv_round_rate(struct clk_hw *hw, unsigned long rate, 1251 - unsigned long *prate) 1243 + static int clk_alpha_pll_postdiv_determine_rate(struct clk_hw *hw, 1244 + struct clk_rate_request *req) 1252 1245 { 1253 1246 struct clk_alpha_pll_postdiv *pll = to_clk_alpha_pll_postdiv(hw); 1254 1247 const struct clk_div_table *table; ··· 1257 1252 else 1258 1253 table = clk_alpha_div_table; 1259 1254 1260 - return divider_round_rate(hw, rate, prate, table, 1261 - pll->width, CLK_DIVIDER_POWER_OF_TWO); 1255 + req->rate = divider_round_rate(hw, req->rate, &req->best_parent_rate, 1256 + table, pll->width, 1257 + CLK_DIVIDER_POWER_OF_TWO); 1258 + 1259 + return 0; 1262 1260 } 1263 1261 1264 - static long 1265 - clk_alpha_pll_postdiv_round_ro_rate(struct clk_hw *hw, unsigned long rate, 1266 - unsigned long *prate) 1262 + static int clk_alpha_pll_postdiv_ro_determine_rate(struct clk_hw *hw, 1263 + struct clk_rate_request *req) 1267 1264 { 1268 1265 struct clk_alpha_pll_postdiv *pll = to_clk_alpha_pll_postdiv(hw); 1269 1266 u32 ctl, div; ··· 1277 1270 div = 1 << fls(ctl); 1278 1271 1279 1272 if (clk_hw_get_flags(hw) & CLK_SET_RATE_PARENT) 1280 - *prate = clk_hw_round_rate(clk_hw_get_parent(hw), div * rate); 1273 + req->best_parent_rate = clk_hw_round_rate(clk_hw_get_parent(hw), 1274 + div * req->rate); 1281 1275 1282 - return DIV_ROUND_UP_ULL((u64)*prate, div); 1276 + req->rate = DIV_ROUND_UP_ULL((u64)req->best_parent_rate, div); 1277 + 1278 + return 0; 1283 1279 } 1284 1280 1285 1281 static int clk_alpha_pll_postdiv_set_rate(struct clk_hw *hw, unsigned long rate, ··· 1301 1291 1302 1292 const struct clk_ops clk_alpha_pll_postdiv_ops = { 1303 1293 .recalc_rate = clk_alpha_pll_postdiv_recalc_rate, 1304 - .round_rate = clk_alpha_pll_postdiv_round_rate, 1294 + .determine_rate = clk_alpha_pll_postdiv_determine_rate, 1305 1295 .set_rate = clk_alpha_pll_postdiv_set_rate, 1306 1296 }; 1307 1297 EXPORT_SYMBOL_GPL(clk_alpha_pll_postdiv_ops); 1308 1298 1309 1299 const struct clk_ops clk_alpha_pll_postdiv_ro_ops = { 1310 - .round_rate = clk_alpha_pll_postdiv_round_ro_rate, 1300 + .determine_rate = clk_alpha_pll_postdiv_ro_determine_rate, 1311 1301 .recalc_rate = clk_alpha_pll_postdiv_recalc_rate, 1312 1302 }; 1313 1303 EXPORT_SYMBOL_GPL(clk_alpha_pll_postdiv_ro_ops); ··· 1552 1542 .is_enabled = clk_alpha_pll_is_enabled, 1553 1543 .set_rate = alpha_pll_fabia_set_rate, 1554 1544 .recalc_rate = alpha_pll_fabia_recalc_rate, 1555 - .round_rate = clk_alpha_pll_round_rate, 1545 + .determine_rate = clk_alpha_pll_determine_rate, 1556 1546 }; 1557 1547 EXPORT_SYMBOL_GPL(clk_alpha_pll_fabia_ops); 1558 1548 ··· 1561 1551 .disable = alpha_pll_fabia_disable, 1562 1552 .is_enabled = clk_alpha_pll_is_enabled, 1563 1553 .recalc_rate = alpha_pll_fabia_recalc_rate, 1564 - .round_rate = clk_alpha_pll_round_rate, 1554 + .determine_rate = clk_alpha_pll_determine_rate, 1565 1555 }; 1566 1556 EXPORT_SYMBOL_GPL(clk_alpha_pll_fixed_fabia_ops); 1567 1557 ··· 1612 1602 return (parent_rate / div); 1613 1603 } 1614 1604 1615 - static long 1616 - clk_trion_pll_postdiv_round_rate(struct clk_hw *hw, unsigned long rate, 1617 - unsigned long *prate) 1605 + static int clk_trion_pll_postdiv_determine_rate(struct clk_hw *hw, 1606 + struct clk_rate_request *req) 1618 1607 { 1619 1608 struct clk_alpha_pll_postdiv *pll = to_clk_alpha_pll_postdiv(hw); 1620 1609 1621 - return divider_round_rate(hw, rate, prate, pll->post_div_table, 1622 - pll->width, CLK_DIVIDER_ROUND_CLOSEST); 1610 + req->rate = divider_round_rate(hw, req->rate, &req->best_parent_rate, 1611 + pll->post_div_table, 1612 + pll->width, CLK_DIVIDER_ROUND_CLOSEST); 1613 + 1614 + return 0; 1623 1615 }; 1624 1616 1625 1617 static int ··· 1647 1635 1648 1636 const struct clk_ops clk_alpha_pll_postdiv_trion_ops = { 1649 1637 .recalc_rate = clk_trion_pll_postdiv_recalc_rate, 1650 - .round_rate = clk_trion_pll_postdiv_round_rate, 1638 + .determine_rate = clk_trion_pll_postdiv_determine_rate, 1651 1639 .set_rate = clk_trion_pll_postdiv_set_rate, 1652 1640 }; 1653 1641 EXPORT_SYMBOL_GPL(clk_alpha_pll_postdiv_trion_ops); 1654 1642 1655 - static long clk_alpha_pll_postdiv_fabia_round_rate(struct clk_hw *hw, 1656 - unsigned long rate, unsigned long *prate) 1643 + static int clk_alpha_pll_postdiv_fabia_determine_rate(struct clk_hw *hw, 1644 + struct clk_rate_request *req) 1657 1645 { 1658 1646 struct clk_alpha_pll_postdiv *pll = to_clk_alpha_pll_postdiv(hw); 1659 1647 1660 - return divider_round_rate(hw, rate, prate, pll->post_div_table, 1661 - pll->width, CLK_DIVIDER_ROUND_CLOSEST); 1648 + req->rate = divider_round_rate(hw, req->rate, &req->best_parent_rate, 1649 + pll->post_div_table, 1650 + pll->width, CLK_DIVIDER_ROUND_CLOSEST); 1651 + 1652 + return 0; 1662 1653 } 1663 1654 1664 1655 static int clk_alpha_pll_postdiv_fabia_set_rate(struct clk_hw *hw, ··· 1696 1681 1697 1682 const struct clk_ops clk_alpha_pll_postdiv_fabia_ops = { 1698 1683 .recalc_rate = clk_alpha_pll_postdiv_fabia_recalc_rate, 1699 - .round_rate = clk_alpha_pll_postdiv_fabia_round_rate, 1684 + .determine_rate = clk_alpha_pll_postdiv_fabia_determine_rate, 1700 1685 .set_rate = clk_alpha_pll_postdiv_fabia_set_rate, 1701 1686 }; 1702 1687 EXPORT_SYMBOL_GPL(clk_alpha_pll_postdiv_fabia_ops); ··· 1848 1833 .disable = clk_trion_pll_disable, 1849 1834 .is_enabled = clk_trion_pll_is_enabled, 1850 1835 .recalc_rate = clk_trion_pll_recalc_rate, 1851 - .round_rate = clk_alpha_pll_round_rate, 1836 + .determine_rate = clk_alpha_pll_determine_rate, 1852 1837 .set_rate = alpha_pll_trion_set_rate, 1853 1838 }; 1854 1839 EXPORT_SYMBOL_GPL(clk_alpha_pll_trion_ops); ··· 1859 1844 .disable = clk_trion_pll_disable, 1860 1845 .is_enabled = clk_trion_pll_is_enabled, 1861 1846 .recalc_rate = clk_trion_pll_recalc_rate, 1862 - .round_rate = clk_alpha_pll_round_rate, 1847 + .determine_rate = clk_alpha_pll_determine_rate, 1863 1848 .set_rate = alpha_pll_trion_set_rate, 1864 1849 }; 1865 1850 EXPORT_SYMBOL_GPL(clk_alpha_pll_lucid_ops); 1866 1851 1867 1852 const struct clk_ops clk_alpha_pll_postdiv_lucid_ops = { 1868 1853 .recalc_rate = clk_alpha_pll_postdiv_fabia_recalc_rate, 1869 - .round_rate = clk_alpha_pll_postdiv_fabia_round_rate, 1854 + .determine_rate = clk_alpha_pll_postdiv_fabia_determine_rate, 1870 1855 .set_rate = clk_alpha_pll_postdiv_fabia_set_rate, 1871 1856 }; 1872 1857 EXPORT_SYMBOL_GPL(clk_alpha_pll_postdiv_lucid_ops); ··· 1918 1903 .disable = clk_alpha_pll_disable, 1919 1904 .is_enabled = clk_alpha_pll_is_enabled, 1920 1905 .recalc_rate = alpha_pll_fabia_recalc_rate, 1921 - .round_rate = clk_alpha_pll_round_rate, 1906 + .determine_rate = clk_alpha_pll_determine_rate, 1922 1907 .set_rate = clk_alpha_pll_agera_set_rate, 1923 1908 }; 1924 1909 EXPORT_SYMBOL_GPL(clk_alpha_pll_agera_ops); ··· 2134 2119 .disable = alpha_pll_lucid_5lpe_disable, 2135 2120 .is_enabled = clk_trion_pll_is_enabled, 2136 2121 .recalc_rate = clk_trion_pll_recalc_rate, 2137 - .round_rate = clk_alpha_pll_round_rate, 2122 + .determine_rate = clk_alpha_pll_determine_rate, 2138 2123 .set_rate = alpha_pll_lucid_5lpe_set_rate, 2139 2124 }; 2140 2125 EXPORT_SYMBOL_GPL(clk_alpha_pll_lucid_5lpe_ops); ··· 2144 2129 .disable = alpha_pll_lucid_5lpe_disable, 2145 2130 .is_enabled = clk_trion_pll_is_enabled, 2146 2131 .recalc_rate = clk_trion_pll_recalc_rate, 2147 - .round_rate = clk_alpha_pll_round_rate, 2132 + .determine_rate = clk_alpha_pll_determine_rate, 2148 2133 }; 2149 2134 EXPORT_SYMBOL_GPL(clk_alpha_pll_fixed_lucid_5lpe_ops); 2150 2135 2151 2136 const struct clk_ops clk_alpha_pll_postdiv_lucid_5lpe_ops = { 2152 2137 .recalc_rate = clk_alpha_pll_postdiv_fabia_recalc_rate, 2153 - .round_rate = clk_alpha_pll_postdiv_fabia_round_rate, 2138 + .determine_rate = clk_alpha_pll_postdiv_fabia_determine_rate, 2154 2139 .set_rate = clk_lucid_5lpe_pll_postdiv_set_rate, 2155 2140 }; 2156 2141 EXPORT_SYMBOL_GPL(clk_alpha_pll_postdiv_lucid_5lpe_ops); ··· 2319 2304 .disable = clk_zonda_pll_disable, 2320 2305 .is_enabled = clk_trion_pll_is_enabled, 2321 2306 .recalc_rate = clk_trion_pll_recalc_rate, 2322 - .round_rate = clk_alpha_pll_round_rate, 2307 + .determine_rate = clk_alpha_pll_determine_rate, 2323 2308 .set_rate = clk_zonda_pll_set_rate, 2324 2309 }; 2325 2310 EXPORT_SYMBOL_GPL(clk_alpha_pll_zonda_ops); ··· 2544 2529 .disable = alpha_pll_lucid_evo_disable, 2545 2530 .is_enabled = clk_trion_pll_is_enabled, 2546 2531 .recalc_rate = alpha_pll_lucid_evo_recalc_rate, 2547 - .round_rate = clk_alpha_pll_round_rate, 2532 + .determine_rate = clk_alpha_pll_determine_rate, 2548 2533 }; 2549 2534 EXPORT_SYMBOL_GPL(clk_alpha_pll_fixed_lucid_evo_ops); 2550 2535 2551 2536 const struct clk_ops clk_alpha_pll_postdiv_lucid_evo_ops = { 2552 2537 .recalc_rate = clk_alpha_pll_postdiv_fabia_recalc_rate, 2553 - .round_rate = clk_alpha_pll_postdiv_fabia_round_rate, 2538 + .determine_rate = clk_alpha_pll_postdiv_fabia_determine_rate, 2554 2539 .set_rate = clk_lucid_evo_pll_postdiv_set_rate, 2555 2540 }; 2556 2541 EXPORT_SYMBOL_GPL(clk_alpha_pll_postdiv_lucid_evo_ops); ··· 2561 2546 .disable = alpha_pll_lucid_evo_disable, 2562 2547 .is_enabled = clk_trion_pll_is_enabled, 2563 2548 .recalc_rate = alpha_pll_lucid_evo_recalc_rate, 2564 - .round_rate = clk_alpha_pll_round_rate, 2549 + .determine_rate = clk_alpha_pll_determine_rate, 2565 2550 .set_rate = alpha_pll_lucid_5lpe_set_rate, 2566 2551 }; 2567 2552 EXPORT_SYMBOL_GPL(clk_alpha_pll_lucid_evo_ops); ··· 2572 2557 .disable = alpha_pll_reset_lucid_evo_disable, 2573 2558 .is_enabled = clk_trion_pll_is_enabled, 2574 2559 .recalc_rate = alpha_pll_lucid_evo_recalc_rate, 2575 - .round_rate = clk_alpha_pll_round_rate, 2560 + .determine_rate = clk_alpha_pll_determine_rate, 2576 2561 .set_rate = alpha_pll_lucid_5lpe_set_rate, 2577 2562 }; 2578 2563 EXPORT_SYMBOL_GPL(clk_alpha_pll_reset_lucid_evo_ops); ··· 2747 2732 return parent_rate * l; 2748 2733 } 2749 2734 2750 - static long clk_rivian_evo_pll_round_rate(struct clk_hw *hw, unsigned long rate, 2751 - unsigned long *prate) 2735 + static int clk_rivian_evo_pll_determine_rate(struct clk_hw *hw, 2736 + struct clk_rate_request *req) 2752 2737 { 2753 2738 struct clk_alpha_pll *pll = to_clk_alpha_pll(hw); 2754 2739 unsigned long min_freq, max_freq; 2755 2740 u32 l; 2756 2741 u64 a; 2757 2742 2758 - rate = alpha_pll_round_rate(rate, *prate, &l, &a, 0); 2759 - if (!pll->vco_table || alpha_pll_find_vco(pll, rate)) 2760 - return rate; 2743 + req->rate = alpha_pll_round_rate(req->rate, req->best_parent_rate, &l, 2744 + &a, 0); 2745 + if (!pll->vco_table || alpha_pll_find_vco(pll, req->rate)) 2746 + return 0; 2761 2747 2762 2748 min_freq = pll->vco_table[0].min_freq; 2763 2749 max_freq = pll->vco_table[pll->num_vco - 1].max_freq; 2764 2750 2765 - return clamp(rate, min_freq, max_freq); 2751 + req->rate = clamp(req->rate, min_freq, max_freq); 2752 + 2753 + return 0; 2766 2754 } 2767 2755 2768 2756 const struct clk_ops clk_alpha_pll_rivian_evo_ops = { ··· 2773 2755 .disable = alpha_pll_lucid_5lpe_disable, 2774 2756 .is_enabled = clk_trion_pll_is_enabled, 2775 2757 .recalc_rate = clk_rivian_evo_pll_recalc_rate, 2776 - .round_rate = clk_rivian_evo_pll_round_rate, 2758 + .determine_rate = clk_rivian_evo_pll_determine_rate, 2777 2759 }; 2778 2760 EXPORT_SYMBOL_GPL(clk_alpha_pll_rivian_evo_ops); 2779 2761 ··· 2982 2964 .disable = clk_zonda_pll_disable, 2983 2965 .is_enabled = clk_alpha_pll_is_enabled, 2984 2966 .recalc_rate = clk_trion_pll_recalc_rate, 2985 - .round_rate = clk_alpha_pll_round_rate, 2967 + .determine_rate = clk_alpha_pll_determine_rate, 2986 2968 .set_rate = clk_zonda_pll_set_rate, 2987 2969 }; 2988 2970 EXPORT_SYMBOL_GPL(clk_alpha_pll_regera_ops); ··· 3187 3169 .enable = clk_alpha_pll_slew_enable, 3188 3170 .disable = clk_alpha_pll_disable, 3189 3171 .recalc_rate = clk_alpha_pll_recalc_rate, 3190 - .round_rate = clk_alpha_pll_round_rate, 3172 + .determine_rate = clk_alpha_pll_determine_rate, 3191 3173 .set_rate = clk_alpha_pll_slew_set_rate, 3192 3174 }; 3193 3175 EXPORT_SYMBOL(clk_alpha_pll_slew_ops);