]> git.baikalelectronics.ru Git - kernel.git/commitdiff
drm/i915/display/vrr: Disable VRR in modeset disable path
authorManasi Navare <manasi.d.navare@intel.com>
Fri, 22 Jan 2021 23:26:41 +0000 (15:26 -0800)
committerManasi Navare <manasi.d.navare@intel.com>
Mon, 25 Jan 2021 23:23:18 +0000 (15:23 -0800)
This patch disables the VRR enable and VRR PUSH
bits in the HW during commit modeset disable sequence.

Thsi disable will happen when the port is disabled
or when the userspace sets VRR prop to false and
requests to disable VRR.

v2:
* Use intel_de_rmw (Jani N)

v3:
* Remove rmw (Ville)

Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Manasi Navare <manasi.d.navare@intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20210122232647.22688-12-manasi.d.navare@intel.com
drivers/gpu/drm/i915/display/intel_ddi.c
drivers/gpu/drm/i915/display/intel_vrr.c
drivers/gpu/drm/i915/display/intel_vrr.h

index d1cb0499a5c4fc9d9587ace203c518bd785c0718..704856b445b10a1ddbfde8d77d7e8068c95dc19f 100644 (file)
@@ -4060,6 +4060,8 @@ static void intel_ddi_post_disable(struct intel_atomic_state *state,
 
                intel_disable_pipe(old_crtc_state);
 
+               intel_vrr_disable(old_crtc_state);
+
                intel_ddi_disable_transcoder_func(old_crtc_state);
 
                intel_dsc_disable(old_crtc_state);
index 4596a18857fe6af779dd9365eddbd29005c761d3..776b8c5f93a46d2bd22d84db39191e2e9abea617 100644 (file)
@@ -134,3 +134,16 @@ void intel_vrr_send_push(const struct intel_crtc_state *crtc_state)
        intel_de_write(dev_priv, TRANS_PUSH(cpu_transcoder),
                       TRANS_PUSH_EN | TRANS_PUSH_SEND);
 }
+
+void intel_vrr_disable(const struct intel_crtc_state *old_crtc_state)
+{
+       struct intel_crtc *crtc = to_intel_crtc(old_crtc_state->uapi.crtc);
+       struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
+       enum transcoder cpu_transcoder = old_crtc_state->cpu_transcoder;
+
+       if (!old_crtc_state->vrr.enable)
+               return;
+
+       intel_de_write(dev_priv, TRANS_VRR_CTL(cpu_transcoder), 0);
+       intel_de_write(dev_priv, TRANS_PUSH(cpu_transcoder), 0);
+}
index e430656ca1cf4eadc01430fc9c7fc2db266edf11..a49faa0fa925b7c2faa1b553dcb9d8a39d4d43fa 100644 (file)
@@ -23,5 +23,6 @@ void intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
 void intel_vrr_enable(struct intel_encoder *encoder,
                      const struct intel_crtc_state *crtc_state);
 void intel_vrr_send_push(const struct intel_crtc_state *crtc_state);
+void intel_vrr_disable(const struct intel_crtc_state *old_crtc_state);
 
 #endif /* __INTEL_VRR_H__ */