disp: msm: sde: move sde power event call into kms post init
The sde power event function needs to get actual sde kms irq number to handle irq update call, but it is not able to know the irq number before irq installation, so move sde power event call into kms post init to avoid unbalanced irq issues. Change-Id: Id262b86f98299fbb9a51c9ccb8e68c7bde7f57ed Signed-off-by: Yahui Wang <quic_yahuiw@quicinc.com>
This commit is contained in:

zatwierdzone przez
Gerrit - the friendly Code Review server

rodzic
5c51cd9cfd
commit
a4cae58822
@@ -118,6 +118,8 @@ static int _sde_kms_mmu_destroy(struct sde_kms *sde_kms);
|
||||
static int _sde_kms_mmu_init(struct sde_kms *sde_kms);
|
||||
static int _sde_kms_register_events(struct msm_kms *kms,
|
||||
struct drm_mode_object *obj, u32 event, bool en);
|
||||
static void sde_kms_handle_power_event(u32 event_type, void *usr);
|
||||
|
||||
bool sde_is_custom_client(void)
|
||||
{
|
||||
return sdecustom;
|
||||
@@ -2218,14 +2220,38 @@ static int sde_kms_postinit(struct msm_kms *kms)
|
||||
struct sde_kms *sde_kms = to_sde_kms(kms);
|
||||
struct drm_device *dev;
|
||||
struct drm_crtc *crtc;
|
||||
int rc;
|
||||
struct msm_drm_private *priv;
|
||||
int i, rc;
|
||||
|
||||
if (!sde_kms || !sde_kms->dev || !sde_kms->dev->dev) {
|
||||
if (!sde_kms || !sde_kms->dev || !sde_kms->dev->dev ||
|
||||
!sde_kms->dev->dev_private) {
|
||||
SDE_ERROR("invalid sde_kms\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
dev = sde_kms->dev;
|
||||
priv = sde_kms->dev->dev_private;
|
||||
|
||||
/*
|
||||
* Handle (re)initializations during power enable, the sde power
|
||||
* event call has to be after drm_irq_install to handle irq update.
|
||||
*/
|
||||
sde_kms_handle_power_event(SDE_POWER_EVENT_POST_ENABLE, sde_kms);
|
||||
sde_kms->power_event = sde_power_handle_register_event(&priv->phandle,
|
||||
SDE_POWER_EVENT_POST_ENABLE |
|
||||
SDE_POWER_EVENT_PRE_DISABLE,
|
||||
sde_kms_handle_power_event, sde_kms, "kms");
|
||||
|
||||
if (sde_kms->splash_data.num_splash_displays) {
|
||||
SDE_DEBUG("Skipping MDP Resources disable\n");
|
||||
} else {
|
||||
for (i = 0; i < SDE_POWER_HANDLE_DBUS_ID_MAX; i++)
|
||||
sde_power_data_bus_set_quota(&priv->phandle, i,
|
||||
SDE_POWER_HANDLE_ENABLE_BUS_AB_QUOTA,
|
||||
SDE_POWER_HANDLE_ENABLE_BUS_IB_QUOTA);
|
||||
|
||||
pm_runtime_put_sync(sde_kms->dev->dev);
|
||||
}
|
||||
|
||||
rc = _sde_debugfs_init(sde_kms);
|
||||
if (rc)
|
||||
@@ -4890,7 +4916,7 @@ static int sde_kms_hw_init(struct msm_kms *kms)
|
||||
struct drm_device *dev;
|
||||
struct msm_drm_private *priv;
|
||||
struct platform_device *platformdev;
|
||||
int i, irq_num, rc = -EINVAL;
|
||||
int irq_num, rc = -EINVAL;
|
||||
|
||||
if (!kms) {
|
||||
SDE_ERROR("invalid kms\n");
|
||||
@@ -4939,26 +4965,6 @@ static int sde_kms_hw_init(struct msm_kms *kms)
|
||||
*/
|
||||
dev->mode_config.allow_fb_modifiers = true;
|
||||
|
||||
/*
|
||||
* Handle (re)initializations during power enable
|
||||
*/
|
||||
sde_kms_handle_power_event(SDE_POWER_EVENT_POST_ENABLE, sde_kms);
|
||||
sde_kms->power_event = sde_power_handle_register_event(&priv->phandle,
|
||||
SDE_POWER_EVENT_POST_ENABLE |
|
||||
SDE_POWER_EVENT_PRE_DISABLE,
|
||||
sde_kms_handle_power_event, sde_kms, "kms");
|
||||
|
||||
if (sde_kms->splash_data.num_splash_displays) {
|
||||
SDE_DEBUG("Skipping MDP Resources disable\n");
|
||||
} else {
|
||||
for (i = 0; i < SDE_POWER_HANDLE_DBUS_ID_MAX; i++)
|
||||
sde_power_data_bus_set_quota(&priv->phandle, i,
|
||||
SDE_POWER_HANDLE_ENABLE_BUS_AB_QUOTA,
|
||||
SDE_POWER_HANDLE_ENABLE_BUS_IB_QUOTA);
|
||||
|
||||
pm_runtime_put_sync(sde_kms->dev->dev);
|
||||
}
|
||||
|
||||
sde_kms->affinity_notify.notify = sde_kms_irq_affinity_notify;
|
||||
sde_kms->affinity_notify.release = sde_kms_irq_affinity_release;
|
||||
|
||||
|
Reference in New Issue
Block a user