drm/i915/display: Prepare DRRS for frontbuffer rendering drop
authorJosé Roberto de Souza <jose.souza@intel.com>
Fri, 3 Sep 2021 22:10:36 +0000 (15:10 -0700)
committerJosé Roberto de Souza <jose.souza@intel.com>
Tue, 7 Sep 2021 22:39:43 +0000 (15:39 -0700)
Frontbuffer rendering will be dropped for modern platforms but
before that we to prepare DRRS for it.

intel_drrs_flush and intel_drrs_invalidate will not be called
for platforms that will not support frontbuffer rendering so DRRS
needs another way to be notified about to page flips so it can change
between high and low refresh rates as needed.

Reviewed-by: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20210903221036.34770-3-jose.souza@intel.com
drivers/gpu/drm/i915/display/intel_display.c
drivers/gpu/drm/i915/display/intel_drrs.c
drivers/gpu/drm/i915/display/intel_drrs.h

index 1f447ba776c7901db8f6d8c0eb2933ae3d21d01b..134c792e1dbdac85da37b94c1fe6a1c0b8d30229 100644 (file)
@@ -52,6 +52,7 @@
 #include "display/intel_dp_mst.h"
 #include "display/intel_dpll.h"
 #include "display/intel_dpll_mgr.h"
+#include "display/intel_drrs.h"
 #include "display/intel_dsi.h"
 #include "display/intel_dvo.h"
 #include "display/intel_fb.h"
@@ -2379,6 +2380,7 @@ static void intel_post_plane_update(struct intel_atomic_state *state,
                hsw_enable_ips(new_crtc_state);
 
        intel_fbc_post_update(state, crtc);
+       intel_drrs_page_flip(state, crtc);
 
        if (needs_nv12_wa(old_crtc_state) &&
            !needs_nv12_wa(new_crtc_state))
index 15e5f91cf331d1d3c0432bc109bd7fa5e608e0ac..c1439fcb5a9593f5e8009c7330ace21169afb858 100644 (file)
@@ -378,6 +378,15 @@ void intel_drrs_flush(struct drm_i915_private *dev_priv,
        intel_drrs_frontbuffer_update(dev_priv, frontbuffer_bits, false);
 }
 
+void intel_drrs_page_flip(struct intel_atomic_state *state,
+                         struct intel_crtc *crtc)
+{
+       struct drm_i915_private *dev_priv = to_i915(state->base.dev);
+       unsigned int frontbuffer_bits = INTEL_FRONTBUFFER_ALL_MASK(crtc->pipe);
+
+       intel_drrs_frontbuffer_update(dev_priv, frontbuffer_bits, false);
+}
+
 /**
  * intel_drrs_init - Init basic DRRS work and mutex.
  * @connector: eDP connector
index 73be7e9a43691b5ee268022c3713dd8fc662388b..9ec9c447211af5cfedc045a8d312e330478829e6 100644 (file)
@@ -9,6 +9,8 @@
 #include <linux/types.h>
 
 struct drm_i915_private;
+struct intel_atomic_state;
+struct intel_crtc;
 struct intel_crtc_state;
 struct intel_connector;
 struct intel_dp;
@@ -23,6 +25,8 @@ void intel_drrs_invalidate(struct drm_i915_private *dev_priv,
                           unsigned int frontbuffer_bits);
 void intel_drrs_flush(struct drm_i915_private *dev_priv,
                      unsigned int frontbuffer_bits);
+void intel_drrs_page_flip(struct intel_atomic_state *state,
+                         struct intel_crtc *crtc);
 void intel_drrs_compute_config(struct intel_dp *intel_dp,
                               struct intel_crtc_state *pipe_config,
                               int output_bpp, bool constant_n);