diff options
author | Tao Huang <huangtao@rock-chips.com> | 2018-05-17 09:51:10 +0800 |
---|---|---|
committer | Tao Huang <huangtao@rock-chips.com> | 2018-05-17 11:42:19 +0800 |
commit | 48b41d013e973a15f9b174dbb68ae69c5941cdd5 (patch) | |
tree | 65fdcaf9b8e1994a6f446b55bd7d345803f81917 /drivers/soc | |
parent | 23e4b5d1f9185525419df2e3dc8fc10f637e711b (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.c | 1 |
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; |