Re: [PATCH RESEND V6 2/2] clk: imx: scu: add cpu frequency scaling support
From: Stephen Boyd <sboyd@kernel.org>
Date: 2019-02-22 19:08:13
Also in:
linux-clk, linux-devicetree, lkml
Quoting Anson Huang (2019-02-21 18:32:10)
On NXP's i.MX SoCs with system controller inside, CPU frequency scaling can ONLY be done by system controller firmware, and it can ONLY be requested from secure mode, so Linux kernel has to call ARM SMC to trap to ARM-Trusted-Firmware to request system controller firmware to do CPU frequency scaling. This patch adds i.MX system controller CPU frequency scaling support, it reuses cpufreq-dt driver and implement the CPU frequency scaling inside SCU clock driver. Signed-off-by: Anson Huang <redacted>
Ah I missed one thing, see below.
quoted hunk ↗ jump to hunk
@@ -180,6 +185,23 @@ static long clk_scu_round_rate(struct clk_hw *hw, unsigned long rate, return rate; } +static int clk_scu_atf_set_cpu_rate(struct clk_hw *hw, unsigned long rate, + unsigned long parent_rate) +{ + struct clk_scu *clk = to_clk_scu(hw); + struct arm_smccc_res res; + unsigned long cluster_id; + + if (clk->rsrc_id == IMX_SC_R_A35) + cluster_id = 0;
Do we still need to check this anymore? Why not just always use cluster_id 0?
+ + /* CPU frequency scaling can ONLY be done by ARM-Trusted-Firmware */ + arm_smccc_smc(IMX_SIP_CPUFREQ, IMX_SIP_SET_CPUFREQ, + cluster_id, rate, 0, 0, 0, 0, &res);
Because not checking would make this work, vs. checking causes this code to sometimes use an uninitialized value from the stack.
+ + return 0; +} +
_______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel