drm/i915/display: Prepare DRRS for frontbuffer rendering drop

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: default avatarGwan-gyeong Mun <gwan-gyeong.mun@intel.com>
Signed-off-by: default avatarJosé Roberto de Souza <jose.souza@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20210903221036.34770-3-jose.souza@intel.com
parent 6bd58b70
...@@ -52,6 +52,7 @@ ...@@ -52,6 +52,7 @@
#include "display/intel_dp_mst.h" #include "display/intel_dp_mst.h"
#include "display/intel_dpll.h" #include "display/intel_dpll.h"
#include "display/intel_dpll_mgr.h" #include "display/intel_dpll_mgr.h"
#include "display/intel_drrs.h"
#include "display/intel_dsi.h" #include "display/intel_dsi.h"
#include "display/intel_dvo.h" #include "display/intel_dvo.h"
#include "display/intel_fb.h" #include "display/intel_fb.h"
...@@ -2379,6 +2380,7 @@ static void intel_post_plane_update(struct intel_atomic_state *state, ...@@ -2379,6 +2380,7 @@ static void intel_post_plane_update(struct intel_atomic_state *state,
hsw_enable_ips(new_crtc_state); hsw_enable_ips(new_crtc_state);
intel_fbc_post_update(state, crtc); intel_fbc_post_update(state, crtc);
intel_drrs_page_flip(state, crtc);
if (needs_nv12_wa(old_crtc_state) && if (needs_nv12_wa(old_crtc_state) &&
!needs_nv12_wa(new_crtc_state)) !needs_nv12_wa(new_crtc_state))
......
...@@ -378,6 +378,15 @@ void intel_drrs_flush(struct drm_i915_private *dev_priv, ...@@ -378,6 +378,15 @@ void intel_drrs_flush(struct drm_i915_private *dev_priv,
intel_drrs_frontbuffer_update(dev_priv, frontbuffer_bits, false); 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. * intel_drrs_init - Init basic DRRS work and mutex.
* @connector: eDP connector * @connector: eDP connector
......
...@@ -9,6 +9,8 @@ ...@@ -9,6 +9,8 @@
#include <linux/types.h> #include <linux/types.h>
struct drm_i915_private; struct drm_i915_private;
struct intel_atomic_state;
struct intel_crtc;
struct intel_crtc_state; struct intel_crtc_state;
struct intel_connector; struct intel_connector;
struct intel_dp; struct intel_dp;
...@@ -23,6 +25,8 @@ void intel_drrs_invalidate(struct drm_i915_private *dev_priv, ...@@ -23,6 +25,8 @@ void intel_drrs_invalidate(struct drm_i915_private *dev_priv,
unsigned int frontbuffer_bits); unsigned int frontbuffer_bits);
void intel_drrs_flush(struct drm_i915_private *dev_priv, void intel_drrs_flush(struct drm_i915_private *dev_priv,
unsigned int frontbuffer_bits); 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, void intel_drrs_compute_config(struct intel_dp *intel_dp,
struct intel_crtc_state *pipe_config, struct intel_crtc_state *pipe_config,
int output_bpp, bool constant_n); int output_bpp, bool constant_n);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment