From 66d30da10faba5dfc7fa589deaa24d833be0493e Mon Sep 17 00:00:00 2001 From: Vivek Aknurwar Date: Tue, 15 Jun 2021 15:32:27 -0700 Subject: [PATCH] clk: qcom: Check clk_is_regmap() before accessing its data members The clk_hw pointer can only be treated as a clk_regmap if the clk_hw is known to be embedded within a clk_regmap structure. So first check that before casting and accessing its data members. Change-Id: Icad375b036ffa44c441ef16c45307bd2c0603de0 Signed-off-by: Vivek Aknurwar Signed-off-by: Mike Tipton --- drivers/clk/qcom/clk-debug.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/clk/qcom/clk-debug.c b/drivers/clk/qcom/clk-debug.c index 2aff12ad008f..fb9a7402f88a 100644 --- a/drivers/clk/qcom/clk-debug.c +++ b/drivers/clk/qcom/clk-debug.c @@ -766,10 +766,16 @@ void clk_common_debug_init(struct clk_hw *hw, struct dentry *dentry) static int clk_list_rate_vdd_level(struct clk_hw *hw, unsigned int rate) { - struct clk_regmap *rclk = to_clk_regmap(hw); - struct clk_vdd_class_data *vdd_data = &rclk->vdd_data; + struct clk_regmap *rclk; + struct clk_vdd_class_data *vdd_data; - if (!vdd_data->vdd_class || !clk_is_regmap_clk(hw)) + if (!clk_is_regmap_clk(hw)) + return 0; + + rclk = to_clk_regmap(hw); + vdd_data = &rclk->vdd_data; + + if (!vdd_data->vdd_class) return 0; return clk_find_vdd_level(hw, vdd_data, rate);