soc: rockchip: opp_select: Fix getting wrong struct rockchip_clk_pll pointer

On RK3588, the clocks propety in gpu and npu opp table are not pll
clock, when call rockchip_pll_clk_rate_to_scale(), it will get a wrong
pointer from to_rockchip_clk_pll, the pll->rate_count may be a large
value, and do unnecessary for loops.

Signed-off-by: Finley Xiao <finley.xiao@rock-chips.com>
Change-Id: I1364e8a930cc8cd9e2cb9627709eea0ba198a566
This commit is contained in:
Finley Xiao
2023-12-01 15:55:50 +08:00
committed by Tao Huang
parent 718e3c0d99
commit 9758b645e0
+6 -2
View File
@@ -1633,6 +1633,10 @@ int rockchip_adjust_power_scale(struct device *dev, int scale)
rockchip_adjust_opp_by_irdrop(dev, np, &safe_rate, &max_rate);
dev_info(dev, "avs=%d\n", avs);
if (!safe_rate && !scale)
goto out_np;
clk = of_clk_get_by_name(np, NULL);
if (IS_ERR(clk)) {
if (!safe_rate)
@@ -1646,14 +1650,14 @@ int rockchip_adjust_power_scale(struct device *dev, int scale)
if (safe_rate)
irdrop_scale = rockchip_pll_clk_rate_to_scale(clk, safe_rate);
if (max_rate)
opp_scale = rockchip_pll_clk_rate_to_scale(clk, max_rate);
target_scale = max(irdrop_scale, scale);
if (target_scale <= 0)
goto out_clk;
dev_dbg(dev, "target_scale=%d, irdrop_scale=%d, scale=%d\n",
target_scale, irdrop_scale, scale);
if (max_rate)
opp_scale = rockchip_pll_clk_rate_to_scale(clk, max_rate);
if (avs == AVS_SCALING_RATE) {
ret = rockchip_pll_clk_adaptive_scaling(clk, target_scale);
if (ret)