浏览代码

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 <[email protected]>
Abhijit Kulkarni 4 年之前
父节点
当前提交
fef65e7b8c
共有 3 个文件被更改,包括 12 次插入2 次删除
  1. 2 2
      msm/sde/sde_crtc.c
  2. 7 0
      msm/sde/sde_crtc.h
  3. 3 0
      msm/sde/sde_kms.c

+ 2 - 2
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);

+ 7 - 0
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_ */

+ 3 - 0
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;
 }