Переглянути джерело

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

qctecmdr 4 роки тому
батько
коміт
fc83bddf26
3 змінених файлів з 20 додано та 7 видалено
  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

@@ -3213,6 +3213,7 @@ static void sde_crtc_atomic_begin(struct drm_crtc *crtc,
 	struct drm_encoder *encoder;
 	struct drm_device *dev;
 	struct sde_kms *sde_kms;
+	struct drm_plane *plane;
 	struct sde_splash_display *splash_display;
 	bool cont_splash_enabled = false, apply_cp_prop = false;
 	size_t i;
@@ -3272,6 +3273,15 @@ static void sde_crtc_atomic_begin(struct drm_crtc *crtc,
 	_sde_crtc_blend_setup(crtc, old_state, true);
 	_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
 	 * 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_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_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);
 
+/**
+ * _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
  * @plane: Pointer to drm plane structure