From 1920eabf61835fac317965cbd03e3a07b1d67206 Mon Sep 17 00:00:00 2001 From: Taniya Das Date: Fri, 5 Oct 2018 00:08:22 +0530 Subject: [PATCH] clk: qcom: gdsc: Remove global mutex lock in enable/disable callbacks The global mutex lock which was introduced to correct a droop issue on certain devices during multiple enable/disable of GDSCs is no longer a requirement, so remove the same to avoid the GDSC lock being acquired while holding clock global lock causing the deadlock scenario. Change-Id: Idc674dea06935509524afb89602599902dd03c56 Signed-off-by: Taniya Das Signed-off-by: Odelu Kukatla --- drivers/clk/qcom/gdsc-regulator.c | 36 ++++--------------------------- 1 file changed, 4 insertions(+), 32 deletions(-) diff --git a/drivers/clk/qcom/gdsc-regulator.c b/drivers/clk/qcom/gdsc-regulator.c index a90fb87d6694..a10fe8d7142f 100644 --- a/drivers/clk/qcom/gdsc-regulator.c +++ b/drivers/clk/qcom/gdsc-regulator.c @@ -73,8 +73,6 @@ enum gdscr_status { DISABLED, }; -static DEFINE_MUTEX(gdsc_seq_lock); - static inline u32 gdsc_mb(struct gdsc *gds) { u32 reg; @@ -184,15 +182,11 @@ static int gdsc_enable(struct regulator_dev *rdev) uint32_t regval, hw_ctrl_regval = 0x0; int i, ret = 0; - mutex_lock(&gdsc_seq_lock); - if (sc->parent_regulator) { ret = regulator_set_voltage(sc->parent_regulator, RPMH_REGULATOR_LEVEL_LOW_SVS, INT_MAX); - if (ret) { - mutex_unlock(&gdsc_seq_lock); + if (ret) return ret; - } } if (sc->root_en || sc->force_root_en) @@ -331,8 +325,6 @@ end: if (sc->parent_regulator) regulator_set_voltage(sc->parent_regulator, 0, INT_MAX); - mutex_unlock(&gdsc_seq_lock); - return ret; } @@ -342,15 +334,11 @@ static int gdsc_disable(struct regulator_dev *rdev) uint32_t regval; int i, ret = 0; - mutex_lock(&gdsc_seq_lock); - if (sc->parent_regulator) { ret = regulator_set_voltage(sc->parent_regulator, RPMH_REGULATOR_LEVEL_LOW_SVS, INT_MAX); - if (ret) { - mutex_unlock(&gdsc_seq_lock); + if (ret) return ret; - } } if (sc->force_root_en) @@ -406,8 +394,6 @@ static int gdsc_disable(struct regulator_dev *rdev) sc->is_gdsc_enabled = false; - mutex_unlock(&gdsc_seq_lock); - return ret; } @@ -417,20 +403,15 @@ static unsigned int gdsc_get_mode(struct regulator_dev *rdev) uint32_t regval; int ret; - mutex_lock(&gdsc_seq_lock); - if (sc->parent_regulator) { ret = regulator_set_voltage(sc->parent_regulator, RPMH_REGULATOR_LEVEL_LOW_SVS, INT_MAX); - if (ret) { - mutex_unlock(&gdsc_seq_lock); + if (ret) return ret; - } ret = regulator_enable(sc->parent_regulator); if (ret) { regulator_set_voltage(sc->parent_regulator, 0, INT_MAX); - mutex_unlock(&gdsc_seq_lock); return ret; } } @@ -442,8 +423,6 @@ static unsigned int gdsc_get_mode(struct regulator_dev *rdev) regulator_set_voltage(sc->parent_regulator, 0, INT_MAX); } - mutex_unlock(&gdsc_seq_lock); - if (regval & HW_CONTROL_MASK) return REGULATOR_MODE_FAST; @@ -456,20 +435,15 @@ static int gdsc_set_mode(struct regulator_dev *rdev, unsigned int mode) uint32_t regval; int ret = 0; - mutex_lock(&gdsc_seq_lock); - if (sc->parent_regulator) { ret = regulator_set_voltage(sc->parent_regulator, RPMH_REGULATOR_LEVEL_LOW_SVS, INT_MAX); - if (ret) { - mutex_unlock(&gdsc_seq_lock); + if (ret) return ret; - } ret = regulator_enable(sc->parent_regulator); if (ret) { regulator_set_voltage(sc->parent_regulator, 0, INT_MAX); - mutex_unlock(&gdsc_seq_lock); return ret; } } @@ -516,8 +490,6 @@ static int gdsc_set_mode(struct regulator_dev *rdev, unsigned int mode) regulator_set_voltage(sc->parent_regulator, 0, INT_MAX); } - mutex_unlock(&gdsc_seq_lock); - return ret; }