summaryrefslogtreecommitdiff
path: root/drivers/soc
diff options
context:
space:
mode:
authorTao Huang <huangtao@rock-chips.com>2018-05-17 09:51:10 +0800
committerTao Huang <huangtao@rock-chips.com>2018-05-17 11:42:19 +0800
commit48b41d013e973a15f9b174dbb68ae69c5941cdd5 (patch)
tree65fdcaf9b8e1994a6f446b55bd7d345803f81917 /drivers/soc
parent23e4b5d1f9185525419df2e3dc8fc10f637e711b (diff)
soc: rockchip: power-domain: Fix deadlock between dmcfreq and vop on/off
When change vop status and ddr frequency at the same time, the following deadlock will happen: vop no/off dmcfreq vop_crtc_disable update_devfreq ->mutex_lock(&vop->vop_lock); ->mutex_lock(&pd->pmu->mutex); ->pm_runtime_put(vop->dev); ->mutex_lock(&vop->vop_lock); ->mutex_lock(&pd->pmu->mutex); ... By set dmc_nb.priority lower than vop to make sure pd notified after vop to avoid deadlock. Change-Id: I3ad147e7f5510f2b617efb600b97d8eb5849ee01 Signed-off-by: Tao Huang <huangtao@rock-chips.com>
Diffstat (limited to 'drivers/soc')
-rw-r--r--drivers/soc/rockchip/pm_domains.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/soc/rockchip/pm_domains.c b/drivers/soc/rockchip/pm_domains.c
index 36da4f22be7c..61eb34e7b6fe 100644
--- a/drivers/soc/rockchip/pm_domains.c
+++ b/drivers/soc/rockchip/pm_domains.c
@@ -762,6 +762,7 @@ int rockchip_pm_register_notify_to_dmc(struct devfreq *devfreq)
dmc_pmu->devfreq = devfreq;
dmc_pmu->dmc_nb.notifier_call = dmc_notify;
+ dmc_pmu->dmc_nb.priority = -100; /* notified after vop */
devfreq_register_notifier(dmc_pmu->devfreq, &dmc_pmu->dmc_nb,
DEVFREQ_TRANSITION_NOTIFIER);
return 0;