Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

clk: qcom: q6sstop-qcs404: fix missing resume during probe

Drivers that enable runtime PM must make sure that the controller is
runtime resumed before accessing its registers to prevent the power
domain from being disabled.

Fixes: 6cdef2738db0 ("clk: qcom: Add Q6SSTOP clock controller for QCS404")
Cc: stable@vger.kernel.org # 5.5
Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
Link: https://lore.kernel.org/r/20230718132902.21430-7-johan+linaro@kernel.org
Signed-off-by: Bjorn Andersson <andersson@kernel.org>

authored by

Johan Hovold and committed by
Bjorn Andersson
97112c83 66af5339

+13 -2
+13 -2
drivers/clk/qcom/q6sstop-qcs404.c
··· 174 174 return ret; 175 175 } 176 176 177 + ret = pm_runtime_resume_and_get(&pdev->dev); 178 + if (ret) 179 + return ret; 180 + 177 181 q6sstop_regmap_config.name = "q6sstop_tcsr"; 178 182 desc = &tcsr_qcs404_desc; 179 183 180 184 ret = qcom_cc_probe_by_index(pdev, 1, desc); 181 185 if (ret) 182 - return ret; 186 + goto err_put_rpm; 183 187 184 188 q6sstop_regmap_config.name = "q6sstop_cc"; 185 189 desc = &q6sstop_qcs404_desc; 186 190 187 191 ret = qcom_cc_probe_by_index(pdev, 0, desc); 188 192 if (ret) 189 - return ret; 193 + goto err_put_rpm; 194 + 195 + pm_runtime_put(&pdev->dev); 190 196 191 197 return 0; 198 + 199 + err_put_rpm: 200 + pm_runtime_put_sync(&pdev->dev); 201 + 202 + return ret; 192 203 } 193 204 194 205 static const struct dev_pm_ops q6sstopcc_pm_ops = {