summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2018-06-29 12:04:16 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2018-06-29 12:04:16 -0700
commitae8a7e6903c2a6201226b3aabb0d7673c6a5f042 (patch)
treece992711bb44cdb4ea25877a9060a084428abf21
parent0c110c0c259860040d40a54d13f70ba12431c1d9 (diff)
parentfed3e2d88e790636469c3b75570dbbbf73057286 (diff)
Merge "Revert "drm: msm: sde: remove user commit validity check""
-rw-r--r--drivers/gpu/drm/msm/sde/sde_kms.c2
-rw-r--r--drivers/gpu/drm/msm/sde/sde_splash.c29
-rw-r--r--drivers/gpu/drm/msm/sde/sde_splash.h3
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.