aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2018-07-15 01:56:29 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2018-07-15 01:56:28 -0700
commit5bc9589660cf968a5570384e2710d40b2ca6eac1 (patch)
tree08530646433d58a89beb800c47bc5ad88639fa12
parent38df5d83954a53e49dd976d16f555e8da468b9cf (diff)
parentc899c8a6421e11c2c15ad828cd1a09e85e662031 (diff)
-rw-r--r--drivers/gpu/drm/msm/sde/sde_color_processing.c27
-rw-r--r--drivers/gpu/drm/msm/sde/sde_color_processing.h6
-rw-r--r--drivers/gpu/drm/msm/sde/sde_crtc.c2
3 files changed, 35 insertions, 0 deletions
diff --git a/drivers/gpu/drm/msm/sde/sde_color_processing.c b/drivers/gpu/drm/msm/sde/sde_color_processing.c
index 218509ee4c91..8680449b3e88 100644
--- a/drivers/gpu/drm/msm/sde/sde_color_processing.c
+++ b/drivers/gpu/drm/msm/sde/sde_color_processing.c
@@ -1297,6 +1297,33 @@ void sde_cp_crtc_resume(struct drm_crtc *crtc)
/* placeholder for operations needed during resume */
}
+void sde_cp_crtc_clear(struct drm_crtc *crtc)
+{
+ struct sde_crtc *sde_crtc = NULL;
+ unsigned long flags;
+
+ if (!crtc) {
+ DRM_ERROR("crtc %pK\n", crtc);
+ return;
+ }
+ sde_crtc = to_sde_crtc(crtc);
+ if (!sde_crtc) {
+ DRM_ERROR("sde_crtc %pK\n", sde_crtc);
+ return;
+ }
+
+ mutex_lock(&sde_crtc->crtc_cp_lock);
+ list_del_init(&sde_crtc->active_list);
+ list_del_init(&sde_crtc->dirty_list);
+ list_del_init(&sde_crtc->ad_active);
+ list_del_init(&sde_crtc->ad_dirty);
+ mutex_unlock(&sde_crtc->crtc_cp_lock);
+
+ spin_lock_irqsave(&sde_crtc->spin_lock, flags);
+ list_del_init(&sde_crtc->user_event_list);
+ spin_unlock_irqrestore(&sde_crtc->spin_lock, flags);
+}
+
static void dspp_pcc_install_property(struct drm_crtc *crtc)
{
char feature_name[256];
diff --git a/drivers/gpu/drm/msm/sde/sde_color_processing.h b/drivers/gpu/drm/msm/sde/sde_color_processing.h
index 620db26775a9..fb8ee1fe453a 100644
--- a/drivers/gpu/drm/msm/sde/sde_color_processing.h
+++ b/drivers/gpu/drm/msm/sde/sde_color_processing.h
@@ -116,6 +116,12 @@ void sde_cp_crtc_suspend(struct drm_crtc *crtc);
void sde_cp_crtc_resume(struct drm_crtc *crtc);
/**
+ * sde_cp_crtc_clear: Clear the active list and dirty list of crtc features
+ * @crtc: Pointer to crtc.
+ */
+void sde_cp_crtc_clear(struct drm_crtc *crtc);
+
+/**
* sde_cp_ad_interrupt: Api to enable/disable ad interrupt
* @crtc: Pointer to crtc.
* @en: Variable to enable/disable interrupt.
diff --git a/drivers/gpu/drm/msm/sde/sde_crtc.c b/drivers/gpu/drm/msm/sde/sde_crtc.c
index b9c4b52fea07..34d840006ef6 100644
--- a/drivers/gpu/drm/msm/sde/sde_crtc.c
+++ b/drivers/gpu/drm/msm/sde/sde_crtc.c
@@ -4918,6 +4918,8 @@ int sde_crtc_helper_reset_custom_properties(struct drm_crtc *crtc,
sde_crtc = to_sde_crtc(crtc);
cstate = to_sde_crtc_state(crtc_state);
+ sde_cp_crtc_clear(crtc);
+
for (prop_idx = 0; prop_idx < CRTC_PROP_COUNT; prop_idx++) {
uint64_t val = cstate->property_values[prop_idx].value;
uint64_t def;