summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElaine Zhang <zhangqing@rock-chips.com>2016-11-08 17:10:14 +0800
committerJianqun Xu <jay.xu@rock-chips.com>2016-12-16 08:40:46 +0800
commitf90dde6dd43e23699f73ca82018da8c8d9c83a50 (patch)
treebc16723ca1746e59f91dc769d6373350fbd1ad44
parent59f1ccf234a0861f30b6e798174cd3860b6637a6 (diff)
UPSTREAM: clk: rockchip: validity should be checked prior to cpu clock rate change
If validity is not checked prior to clock rate change, clk_set_rate( cpu_clk, unsupported_rate) will return success, but the real clock rate change operation is prohibited in post clock change event. Alough post clock change event will report error due to unsupported clock rate is set, but this error message is ignored by clock framework. Signed-off-by: Elaine Zhang <zhangqing@rock-chips.com> Tested-by: Rocky Hao <rocky.hao@rock-chips.com> Signed-off-by: Heiko Stuebner <heiko@sntech.de> (am from mmind/linux-rockchip.git branch v4.10-clk/next commit a554bb5fb01804a38fde3782831c9567d997939e) Change-Id: I521700f86fe1d9bf2d1bef4ebe0350cd6f558c0a Signed-off-by: Jianqun Xu <jay.xu@rock-chips.com>
-rw-r--r--drivers/clk/rockchip/clk-cpu.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/clk/rockchip/clk-cpu.c b/drivers/clk/rockchip/clk-cpu.c
index 4b366a3691a4..cd2b1d87f4a4 100644
--- a/drivers/clk/rockchip/clk-cpu.c
+++ b/drivers/clk/rockchip/clk-cpu.c
@@ -124,9 +124,18 @@ static int rockchip_cpuclk_pre_rate_change(struct rockchip_cpuclk *cpuclk,
struct clk_notifier_data *ndata)
{
const struct rockchip_cpuclk_reg_data *reg_data = cpuclk->reg_data;
+ const struct rockchip_cpuclk_rate_table *rate;
unsigned long alt_prate, alt_div;
unsigned long flags;
+ /* check validity of the new rate */
+ rate = rockchip_get_cpuclk_settings(cpuclk, ndata->new_rate);
+ if (!rate) {
+ pr_err("%s: Invalid rate : %lu for cpuclk\n",
+ __func__, ndata->new_rate);
+ return -EINVAL;
+ }
+
alt_prate = clk_get_rate(cpuclk->alt_parent);
spin_lock_irqsave(cpuclk->lock, flags);