From fef65e7b8c4af5c6900374676e436d41589d6588 Mon Sep 17 00:00:00 2001 From: Abhijit Kulkarni Date: Wed, 18 Nov 2020 14:25:36 -0800 Subject: [PATCH] disp: msm: sde: reset sw state on vm transition This change resets the plane and crtc dirty properties on transition to other VM. This ensures when the VM acquires the hw again all these properties on the new state are reapplied. Change-Id: Id95676453eb9ae937b1b22f0e244b47449101cb0 Signed-off-by: Abhijit Kulkarni --- msm/sde/sde_crtc.c | 4 ++-- msm/sde/sde_crtc.h | 7 +++++++ msm/sde/sde_kms.c | 3 +++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/msm/sde/sde_crtc.c b/msm/sde/sde_crtc.c index 7cfa147e10..bfc0d7235a 100644 --- a/msm/sde/sde_crtc.c +++ b/msm/sde/sde_crtc.c @@ -3971,7 +3971,7 @@ static void sde_crtc_clear_cached_mixer_cfg(struct drm_crtc *crtc) SDE_EVT32(DRMID(crtc)); } -static void sde_crtc_reset_sw_state_for_ipc(struct drm_crtc *crtc) +void sde_crtc_reset_sw_state(struct drm_crtc *crtc) { struct sde_crtc_state *cstate = to_sde_crtc_state(crtc->state); struct drm_plane *plane; @@ -4074,7 +4074,7 @@ static void sde_crtc_handle_power_event(u32 event_type, void *arg) sde_cp_crtc_pre_ipc(crtc); break; case SDE_POWER_EVENT_POST_DISABLE: - sde_crtc_reset_sw_state_for_ipc(crtc); + sde_crtc_reset_sw_state(crtc); sde_cp_crtc_suspend(crtc); event.type = DRM_EVENT_SDE_POWER; event.length = sizeof(power_on); diff --git a/msm/sde/sde_crtc.h b/msm/sde/sde_crtc.h index 782b60ef31..41ca11bb97 100644 --- a/msm/sde/sde_crtc.h +++ b/msm/sde/sde_crtc.h @@ -917,4 +917,11 @@ void sde_crtc_static_cache_read_kickoff(struct drm_crtc *crtc); int sde_crtc_get_num_datapath(struct drm_crtc *crtc, struct drm_connector *connector); +/** + * sde_crtc_reset_sw_state - reset dirty proerties on crtc and + * planes attached to the crtc + * @crtc: Pointer to DRM crtc object + */ +void sde_crtc_reset_sw_state(struct drm_crtc *crtc); + #endif /* _SDE_CRTC_H_ */ diff --git a/msm/sde/sde_kms.c b/msm/sde/sde_kms.c index feb172010a..295b10ad82 100644 --- a/msm/sde/sde_kms.c +++ b/msm/sde/sde_kms.c @@ -1420,6 +1420,9 @@ int sde_kms_vm_pre_release(struct sde_kms *sde_kms, /* disable vblank events */ drm_crtc_vblank_off(crtc); + /* reset sw state */ + sde_crtc_reset_sw_state(crtc); + return rc; }