Browse Source

disp: msm: sde: Update UIDLE and QoS LUT when DRM mode is changed

UIDLE and QoS LUT configurationis might be different between
different frame rates.
Add this change to update UIDLE and QoS LUT according to frame
rate when DRM mode is changed.

Change-Id: Ia16a963e185b911b7dd11e81a26cab732c2b185c
Signed-off-by: Lei Chen <[email protected]>
Lei Chen 4 years ago
parent
commit
fb4edab2b3
3 changed files with 20 additions and 7 deletions
  1. 10 0
      msm/sde/sde_crtc.c
  2. 1 7
      msm/sde/sde_plane.c
  3. 9 0
      msm/sde/sde_plane.h

+ 10 - 0
msm/sde/sde_crtc.c

@@ -3209,6 +3209,7 @@ static void sde_crtc_atomic_begin(struct drm_crtc *crtc,
 	struct drm_encoder *encoder;
 	struct drm_encoder *encoder;
 	struct drm_device *dev;
 	struct drm_device *dev;
 	struct sde_kms *sde_kms;
 	struct sde_kms *sde_kms;
+	struct drm_plane *plane;
 	struct sde_splash_display *splash_display;
 	struct sde_splash_display *splash_display;
 	bool cont_splash_enabled = false, apply_cp_prop = false;
 	bool cont_splash_enabled = false, apply_cp_prop = false;
 	size_t i;
 	size_t i;
@@ -3268,6 +3269,15 @@ static void sde_crtc_atomic_begin(struct drm_crtc *crtc,
 	_sde_crtc_blend_setup(crtc, old_state, true);
 	_sde_crtc_blend_setup(crtc, old_state, true);
 	_sde_crtc_dest_scaler_setup(crtc);
 	_sde_crtc_dest_scaler_setup(crtc);
 
 
+	if (old_state->mode_changed) {
+		sde_core_perf_crtc_update_uidle(crtc, true);
+		drm_atomic_crtc_for_each_plane(plane, crtc) {
+			if (plane->state && plane->state->fb)
+				_sde_plane_set_qos_lut(plane, crtc,
+					plane->state->fb);
+		}
+	}
+
 	/*
 	/*
 	 * Since CP properties use AXI buffer to program the
 	 * Since CP properties use AXI buffer to program the
 	 * HW, check if context bank is in attached state,
 	 * HW, check if context bank is in attached state,

+ 1 - 7
msm/sde/sde_plane.c

@@ -254,13 +254,7 @@ void sde_plane_set_sid(struct drm_plane *plane, u32 vm)
 	sde_hw_set_sspp_sid(sde_kms->hw_sid, psde->pipe, vm);
 	sde_hw_set_sspp_sid(sde_kms->hw_sid, psde->pipe, vm);
 }
 }
 
 
-/**
- * _sde_plane_set_qos_lut - set danger, safe and creq LUT of the given plane
- * @plane:		Pointer to drm plane
- * @crtc:		Pointer to drm crtc to find refresh rate on mode
- * @fb:			Pointer to framebuffer associated with the given plane
- */
-static void _sde_plane_set_qos_lut(struct drm_plane *plane,
+void _sde_plane_set_qos_lut(struct drm_plane *plane,
 		struct drm_crtc *crtc,
 		struct drm_crtc *crtc,
 		struct drm_framebuffer *fb)
 		struct drm_framebuffer *fb)
 {
 {

+ 9 - 0
msm/sde/sde_plane.h

@@ -195,6 +195,15 @@ void sde_plane_ctl_flush(struct drm_plane *plane, struct sde_hw_ctl *ctl,
  */
  */
 void sde_plane_restore(struct drm_plane *plane);
 void sde_plane_restore(struct drm_plane *plane);
 
 
+/**
+ * _sde_plane_set_qos_lut - set danger, safe and creq LUT of the given plane
+ * @plane:		Pointer to drm plane
+ * @crtc:		Pointer to drm crtc to find refresh rate on mode
+ * @fb:			Pointer to framebuffer associated with the given plane
+ */
+void _sde_plane_set_qos_lut(struct drm_plane *plane,
+		struct drm_crtc *crtc,
+		struct drm_framebuffer *fb);
 /**
 /**
  * sde_plane_flush - final plane operations before commit flush
  * sde_plane_flush - final plane operations before commit flush
  * @plane: Pointer to drm plane structure
  * @plane: Pointer to drm plane structure