diff options
author | Linux Build Service Account <lnxbuild@localhost> | 2018-06-29 12:04:16 -0700 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2018-06-29 12:04:16 -0700 |
commit | ae8a7e6903c2a6201226b3aabb0d7673c6a5f042 (patch) | |
tree | ce992711bb44cdb4ea25877a9060a084428abf21 | |
parent | 0c110c0c259860040d40a54d13f70ba12431c1d9 (diff) | |
parent | fed3e2d88e790636469c3b75570dbbbf73057286 (diff) |
Merge "Revert "drm: msm: sde: remove user commit validity check""
-rw-r--r-- | drivers/gpu/drm/msm/sde/sde_kms.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/msm/sde/sde_splash.c | 29 | ||||
-rw-r--r-- | drivers/gpu/drm/msm/sde/sde_splash.h | 3 |
3 files changed, 30 insertions, 4 deletions
diff --git a/drivers/gpu/drm/msm/sde/sde_kms.c b/drivers/gpu/drm/msm/sde/sde_kms.c index 987da50f54ca..95ab14ffc3ac 100644 --- a/drivers/gpu/drm/msm/sde/sde_kms.c +++ b/drivers/gpu/drm/msm/sde/sde_kms.c @@ -345,7 +345,7 @@ static void sde_kms_prepare_commit(struct msm_kms *kms, if (sde_kms->splash_info.handoff && sde_kms->splash_info.display_splash_enabled) - sde_splash_lk_stop_splash(kms); + sde_splash_lk_stop_splash(kms, state); sde_power_resource_enable(&priv->phandle, sde_kms->core_client, true); diff --git a/drivers/gpu/drm/msm/sde/sde_splash.c b/drivers/gpu/drm/msm/sde/sde_splash.c index 388075235246..e5231c4b1aae 100644 --- a/drivers/gpu/drm/msm/sde/sde_splash.c +++ b/drivers/gpu/drm/msm/sde/sde_splash.c @@ -367,6 +367,29 @@ static int _sde_splash_free_module_resource(struct msm_mmu *mmu, return 0; } +static bool _sde_splash_validate_commit(struct sde_kms *sde_kms, + struct drm_atomic_state *state) +{ + int i, nplanes; + struct drm_plane *plane; + struct drm_device *dev = sde_kms->dev; + + nplanes = dev->mode_config.num_total_plane; + + for (i = 0; i < nplanes; i++) { + plane = state->planes[i]; + + /* + * As plane state has been swapped, we need to check + * fb in state->planes, not fb in state->plane_state. + */ + if (plane && plane->fb) + return true; + } + + return false; +} + __ref int sde_splash_init(struct sde_power_handle *phandle, struct msm_kms *kms) { struct sde_kms *sde_kms; @@ -858,7 +881,8 @@ int sde_splash_free_resource(struct msm_kms *kms, /* * Below function will notify LK to stop display splash. */ -int sde_splash_lk_stop_splash(struct msm_kms *kms) +int sde_splash_lk_stop_splash(struct msm_kms *kms, + struct drm_atomic_state *state) { struct sde_splash_info *sinfo; struct sde_kms *sde_kms = to_sde_kms(kms); @@ -872,7 +896,8 @@ int sde_splash_lk_stop_splash(struct msm_kms *kms) /* Monitor LK's status and tell it to exit. */ mutex_lock(&sde_splash_lock); - if (sinfo->display_splash_enabled) { + if (_sde_splash_validate_commit(sde_kms, state) && + sinfo->display_splash_enabled) { if (_sde_splash_lk_check(sde_kms->hw_intr)) _sde_splash_notify_lk_stop_splash(sde_kms->hw_intr); diff --git a/drivers/gpu/drm/msm/sde/sde_splash.h b/drivers/gpu/drm/msm/sde/sde_splash.h index d9d2cac1cb5d..c4bb7b08f817 100644 --- a/drivers/gpu/drm/msm/sde/sde_splash.h +++ b/drivers/gpu/drm/msm/sde/sde_splash.h @@ -120,7 +120,8 @@ void sde_splash_setup_connector_count(struct sde_splash_info *sinfo, * * Tell LK to stop display splash once one valid user commit arrives. */ -int sde_splash_lk_stop_splash(struct msm_kms *kms); +int sde_splash_lk_stop_splash(struct msm_kms *kms, + struct drm_atomic_state *state); /** * sde_splash_free_resource. |