msm: mdss: mdp: fix handling of GDSC off notifier
In the current implementation, MDP driver registers for MDSS GDSC notifier and attempts to halt any active VBIF transactions whenever the MDSS GDSC is turned off. This results in a call to the bus driver to remove any active bus bandwidth vote. However, it is possible that notifier call could be a result MDSS GDSC being turned off by the bus driver during probe time and calling back in to the bus driver can result in a deadlock. Avoid this by handling GDSC off notifier only if there are any active overlay sessions. Change-Id: Id53a790cf67b201a4207f85604cb3472275d418a Signed-off-by: Aravind Venkateswaran <aravindh@codeaurora.org>
This commit is contained in:
parent
aa958278d1
commit
a5312f6f7f
1 changed files with 10 additions and 3 deletions
|
@ -1638,9 +1638,16 @@ static int mdss_mdp_gdsc_notifier_call(struct notifier_block *self,
|
|||
if (event & REGULATOR_EVENT_ENABLE) {
|
||||
__mdss_restore_sec_cfg(mdata);
|
||||
} else if (event & REGULATOR_EVENT_PRE_DISABLE) {
|
||||
pr_debug("mdss gdsc is getting disabled\n");
|
||||
/* halt the vbif transactions */
|
||||
mdss_mdp_vbif_axi_halt(mdata);
|
||||
int active_cnt = atomic_read(&mdata->active_intf_cnt);
|
||||
|
||||
pr_debug("mdss gdsc is getting disabled, active_cnt=%d\n",
|
||||
active_cnt);
|
||||
/*
|
||||
* halt the vbif transactions only if we have any active
|
||||
* overlay session
|
||||
*/
|
||||
if (active_cnt)
|
||||
mdss_mdp_vbif_axi_halt(mdata);
|
||||
}
|
||||
|
||||
return NOTIFY_OK;
|
||||
|
|
Loading…
Add table
Reference in a new issue