clk: imx: pllv3: convert from round_rate() to determine_rate()
authorBrian Masney <bmasney@redhat.com>
Thu, 10 Jul 2025 21:10:43 +0000 (17:10 -0400)
committerStephen Boyd <sboyd@kernel.org>
Thu, 24 Jul 2025 22:17:46 +0000 (15:17 -0700)
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.

Signed-off-by: Brian Masney <bmasney@redhat.com>
Link: https://lore.kernel.org/r/20250710-clk-imx-round-rate-v1-11-5726f98e6d8d@redhat.com
Reviewed-by: Peng Fan <peng.fan@nxp.com>
Signed-off-by: Stephen Boyd <sboyd@kernel.org>
drivers/clk/imx/clk-pllv3.c

index 11fb238ee8f0ece8116d3d7cebbbb7deaa4aee68..b99508367bcb4d7f3ef12cdbb5f5d5dcbf526c31 100644 (file)
@@ -117,13 +117,14 @@ static unsigned long clk_pllv3_recalc_rate(struct clk_hw *hw,
        return (div == 1) ? parent_rate * 22 : parent_rate * 20;
 }
 
-static long clk_pllv3_round_rate(struct clk_hw *hw, unsigned long rate,
-                                unsigned long *prate)
+static int clk_pllv3_determine_rate(struct clk_hw *hw,
+                                   struct clk_rate_request *req)
 {
-       unsigned long parent_rate = *prate;
+       unsigned long parent_rate = req->best_parent_rate;
 
-       return (rate >= parent_rate * 22) ? parent_rate * 22 :
-                                           parent_rate * 20;
+       req->rate = (req->rate >= parent_rate * 22) ? parent_rate * 22 : parent_rate * 20;
+
+       return 0;
 }
 
 static int clk_pllv3_set_rate(struct clk_hw *hw, unsigned long rate,
@@ -152,7 +153,7 @@ static const struct clk_ops clk_pllv3_ops = {
        .unprepare      = clk_pllv3_unprepare,
        .is_prepared    = clk_pllv3_is_prepared,
        .recalc_rate    = clk_pllv3_recalc_rate,
-       .round_rate     = clk_pllv3_round_rate,
+       .determine_rate = clk_pllv3_determine_rate,
        .set_rate       = clk_pllv3_set_rate,
 };
 
@@ -165,21 +166,23 @@ static unsigned long clk_pllv3_sys_recalc_rate(struct clk_hw *hw,
        return parent_rate * div / 2;
 }
 
-static long clk_pllv3_sys_round_rate(struct clk_hw *hw, unsigned long rate,
-                                    unsigned long *prate)
+static int clk_pllv3_sys_determine_rate(struct clk_hw *hw,
+                                       struct clk_rate_request *req)
 {
-       unsigned long parent_rate = *prate;
+       unsigned long parent_rate = req->best_parent_rate;
        unsigned long min_rate = parent_rate * 54 / 2;
        unsigned long max_rate = parent_rate * 108 / 2;
        u32 div;
 
-       if (rate > max_rate)
-               rate = max_rate;
-       else if (rate < min_rate)
-               rate = min_rate;
-       div = rate * 2 / parent_rate;
+       if (req->rate > max_rate)
+               req->rate = max_rate;
+       else if (req->rate < min_rate)
+               req->rate = min_rate;
+       div = req->rate * 2 / parent_rate;
 
-       return parent_rate * div / 2;
+       req->rate = parent_rate * div / 2;
+
+       return 0;
 }
 
 static int clk_pllv3_sys_set_rate(struct clk_hw *hw, unsigned long rate,
@@ -207,7 +210,7 @@ static const struct clk_ops clk_pllv3_sys_ops = {
        .unprepare      = clk_pllv3_unprepare,
        .is_prepared    = clk_pllv3_is_prepared,
        .recalc_rate    = clk_pllv3_sys_recalc_rate,
-       .round_rate     = clk_pllv3_sys_round_rate,
+       .determine_rate = clk_pllv3_sys_determine_rate,
        .set_rate       = clk_pllv3_sys_set_rate,
 };
 
@@ -226,10 +229,10 @@ static unsigned long clk_pllv3_av_recalc_rate(struct clk_hw *hw,
        return parent_rate * div + (unsigned long)temp64;
 }
 
-static long clk_pllv3_av_round_rate(struct clk_hw *hw, unsigned long rate,
-                                   unsigned long *prate)
+static int clk_pllv3_av_determine_rate(struct clk_hw *hw,
+                                      struct clk_rate_request *req)
 {
-       unsigned long parent_rate = *prate;
+       unsigned long parent_rate = req->best_parent_rate;
        unsigned long min_rate = parent_rate * 27;
        unsigned long max_rate = parent_rate * 54;
        u32 div;
@@ -237,16 +240,16 @@ static long clk_pllv3_av_round_rate(struct clk_hw *hw, unsigned long rate,
        u32 max_mfd = 0x3FFFFFFF;
        u64 temp64;
 
-       if (rate > max_rate)
-               rate = max_rate;
-       else if (rate < min_rate)
-               rate = min_rate;
+       if (req->rate > max_rate)
+               req->rate = max_rate;
+       else if (req->rate < min_rate)
+               req->rate = min_rate;
 
        if (parent_rate <= max_mfd)
                mfd = parent_rate;
 
-       div = rate / parent_rate;
-       temp64 = (u64) (rate - div * parent_rate);
+       div = req->rate / parent_rate;
+       temp64 = (u64) (req->rate - div * parent_rate);
        temp64 *= mfd;
        temp64 = div64_ul(temp64, parent_rate);
        mfn = temp64;
@@ -255,7 +258,9 @@ static long clk_pllv3_av_round_rate(struct clk_hw *hw, unsigned long rate,
        temp64 *= mfn;
        do_div(temp64, mfd);
 
-       return parent_rate * div + (unsigned long)temp64;
+       req->rate = parent_rate * div + (unsigned long)temp64;
+
+       return 0;
 }
 
 static int clk_pllv3_av_set_rate(struct clk_hw *hw, unsigned long rate,
@@ -296,7 +301,7 @@ static const struct clk_ops clk_pllv3_av_ops = {
        .unprepare      = clk_pllv3_unprepare,
        .is_prepared    = clk_pllv3_is_prepared,
        .recalc_rate    = clk_pllv3_av_recalc_rate,
-       .round_rate     = clk_pllv3_av_round_rate,
+       .determine_rate = clk_pllv3_av_determine_rate,
        .set_rate       = clk_pllv3_av_set_rate,
 };
 
@@ -355,12 +360,15 @@ static unsigned long clk_pllv3_vf610_recalc_rate(struct clk_hw *hw,
        return clk_pllv3_vf610_mf_to_rate(parent_rate, mf);
 }
 
-static long clk_pllv3_vf610_round_rate(struct clk_hw *hw, unsigned long rate,
-                                   unsigned long *prate)
+static int clk_pllv3_vf610_determine_rate(struct clk_hw *hw,
+                                         struct clk_rate_request *req)
 {
-       struct clk_pllv3_vf610_mf mf = clk_pllv3_vf610_rate_to_mf(*prate, rate);
+       struct clk_pllv3_vf610_mf mf = clk_pllv3_vf610_rate_to_mf(req->best_parent_rate,
+                                                                 req->rate);
+
+       req->rate = clk_pllv3_vf610_mf_to_rate(req->best_parent_rate, mf);
 
-       return clk_pllv3_vf610_mf_to_rate(*prate, mf);
+       return 0;
 }
 
 static int clk_pllv3_vf610_set_rate(struct clk_hw *hw, unsigned long rate,
@@ -389,7 +397,7 @@ static const struct clk_ops clk_pllv3_vf610_ops = {
        .unprepare      = clk_pllv3_unprepare,
        .is_prepared    = clk_pllv3_is_prepared,
        .recalc_rate    = clk_pllv3_vf610_recalc_rate,
-       .round_rate     = clk_pllv3_vf610_round_rate,
+       .determine_rate = clk_pllv3_vf610_determine_rate,
        .set_rate       = clk_pllv3_vf610_set_rate,
 };