[PATCH] clk: clk-conf: bypass setting rate/parent if already same

From: Peng Fan (OSS)
Date: Thu Oct 26 2023 - 02:35:22 EST


From: Peng Fan <peng.fan@xxxxxxx>

If the original rate and parent is already the same as what users
wanna to configure through assigned clock rate and parent, there
is no need to configure them again which may cause more cpu cycles
or more SCMI RPC calls.

So check the rate and parent first, and bypass when the original
rate and parent are same as requested by device tree node.

Signed-off-by: Peng Fan <peng.fan@xxxxxxx>
---
drivers/clk/clk-conf.c | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/drivers/clk/clk-conf.c b/drivers/clk/clk-conf.c
index 1a4e6340f95c..c9ff4fcc8875 100644
--- a/drivers/clk/clk-conf.c
+++ b/drivers/clk/clk-conf.c
@@ -65,7 +65,11 @@ static int __set_clk_parents(struct device_node *node, bool clk_supplier)
goto err;
}

- rc = clk_set_parent(clk, pclk);
+ if (__clk_get_hw(pclk) != __clk_get_hw(clk_get_parent(clk)))
+ rc = clk_set_parent(clk, pclk);
+ else
+ rc = 0;
+
if (rc < 0)
pr_err("clk: failed to reparent %s to %s: %d\n",
__clk_get_name(clk), __clk_get_name(pclk), rc);
@@ -112,7 +116,10 @@ static int __set_clk_rates(struct device_node *node, bool clk_supplier)
return PTR_ERR(clk);
}

- rc = clk_set_rate(clk, rate);
+ if (clk_get_rate(clk) != rate)
+ rc = clk_set_rate(clk, rate);
+ else
+ rc = 0;
if (rc < 0)
pr_err("clk: couldn't set %s clk rate to %u (%d), current rate: %lu\n",
__clk_get_name(clk), rate, rc,
--
2.37.1