]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
clk: ti: clk-sci: Notify AVS driver based upon clock rate
authorUdit Kumar <u-kumar1@ti.com>
Thu, 21 Sep 2023 17:03:43 +0000 (22:33 +0530)
committerTom Rini <trini@konsulko.com>
Thu, 12 Oct 2023 18:06:04 +0000 (14:06 -0400)
AVS driver needs to be notified before or after clock change,
depending upon new rate is greater or less than current clock rate.

Fixes: 1e0aa873bc7cd ("clk: clk-ti-sci: Notify AVS driver upon setting clock rate")
Cc: Keerthy <j-keerthy@ti.com>
Signed-off-by: Udit Kumar <u-kumar1@ti.com>
drivers/clk/ti/clk-sci.c

index 74df5a397bfccf46016655494381bc68550e9809..8fc3254c996c8be9ebf9754d46d0e932c689738f 100644 (file)
@@ -91,12 +91,12 @@ static ulong ti_sci_clk_set_rate(struct clk *clk, ulong rate)
        const struct ti_sci_handle *sci = data->sci;
        const struct ti_sci_clk_ops *cops = &sci->ops.clk_ops;
        int ret;
+       int freq_scale_up = rate >= ti_sci_clk_get_rate(clk) ? 1 : 0;
 
        debug("%s(clk=%p, rate=%lu)\n", __func__, clk, rate);
 
-#ifdef CONFIG_K3_AVS0
-       k3_avs_notify_freq(clk->id, clk->data, rate);
-#endif
+       if (IS_ENABLED(CONFIG_K3_AVS0) && freq_scale_up)
+               k3_avs_notify_freq(clk->id, clk->data, rate);
 
        ret = cops->set_freq(sci, clk->id, clk->data, 0, rate, ULONG_MAX);
        if (ret) {
@@ -104,6 +104,9 @@ static ulong ti_sci_clk_set_rate(struct clk *clk, ulong rate)
                return ret;
        }
 
+       if (IS_ENABLED(CONFIG_K3_AVS0) && !freq_scale_up)
+               k3_avs_notify_freq(clk->id, clk->data, rate);
+
        return rate;
 }