diff options
author | Linux Build Service Account <lnxbuild@localhost> | 2018-07-15 01:56:29 -0700 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2018-07-15 01:56:28 -0700 |
commit | 5bc9589660cf968a5570384e2710d40b2ca6eac1 (patch) | |
tree | 08530646433d58a89beb800c47bc5ad88639fa12 | |
parent | 38df5d83954a53e49dd976d16f555e8da468b9cf (diff) | |
parent | c899c8a6421e11c2c15ad828cd1a09e85e662031 (diff) |
Merge "drm/msm/sde: clear crtc ditry/active lists for postprocessing"LE.UM.2.3.1.r1-02200-8x09.0LE.UM.2.3.1.r1-02000-8x09.0LE.UM.2.3.1.r1-01800-8x09.0LE.UM.2.3.1.r1-01700-8x09.0
-rw-r--r-- | drivers/gpu/drm/msm/sde/sde_color_processing.c | 27 | ||||
-rw-r--r-- | drivers/gpu/drm/msm/sde/sde_color_processing.h | 6 | ||||
-rw-r--r-- | drivers/gpu/drm/msm/sde/sde_crtc.c | 2 |
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; |