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:
Aravind Venkateswaran 2016-07-11 18:19:04 -07:00
parent aa958278d1
commit a5312f6f7f

View file

@ -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;