Message ID | 20210825005840.170796-7-jose.souza@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Drop frontbuffer rendering support from Skylake and newer | expand |
Looks good to me. Reviewed-by: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com> On 8/25/21 3:58 AM, José Roberto de Souza wrote: > 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. > > Signed-off-by: José Roberto de Souza <jose.souza@intel.com> > --- > drivers/gpu/drm/i915/display/intel_display.c | 2 ++ > drivers/gpu/drm/i915/display/intel_drrs.c | 9 +++++++++ > drivers/gpu/drm/i915/display/intel_drrs.h | 4 ++++ > 3 files changed, 15 insertions(+) > > diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c > index 794690c0dba56..808002aa439e2 100644 > --- a/drivers/gpu/drm/i915/display/intel_display.c > +++ b/drivers/gpu/drm/i915/display/intel_display.c > @@ -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" > @@ -2436,6 +2437,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)) > diff --git a/drivers/gpu/drm/i915/display/intel_drrs.c b/drivers/gpu/drm/i915/display/intel_drrs.c > index 8583da4e82434..6ae778c306006 100644 > --- a/drivers/gpu/drm/i915/display/intel_drrs.c > +++ b/drivers/gpu/drm/i915/display/intel_drrs.c > @@ -391,6 +391,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 > diff --git a/drivers/gpu/drm/i915/display/intel_drrs.h b/drivers/gpu/drm/i915/display/intel_drrs.h > index 73be7e9a43691..9ec9c447211af 100644 > --- a/drivers/gpu/drm/i915/display/intel_drrs.h > +++ b/drivers/gpu/drm/i915/display/intel_drrs.h > @@ -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); >
diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c index 794690c0dba56..808002aa439e2 100644 --- a/drivers/gpu/drm/i915/display/intel_display.c +++ b/drivers/gpu/drm/i915/display/intel_display.c @@ -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" @@ -2436,6 +2437,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)) diff --git a/drivers/gpu/drm/i915/display/intel_drrs.c b/drivers/gpu/drm/i915/display/intel_drrs.c index 8583da4e82434..6ae778c306006 100644 --- a/drivers/gpu/drm/i915/display/intel_drrs.c +++ b/drivers/gpu/drm/i915/display/intel_drrs.c @@ -391,6 +391,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 diff --git a/drivers/gpu/drm/i915/display/intel_drrs.h b/drivers/gpu/drm/i915/display/intel_drrs.h index 73be7e9a43691..9ec9c447211af 100644 --- a/drivers/gpu/drm/i915/display/intel_drrs.h +++ b/drivers/gpu/drm/i915/display/intel_drrs.h @@ -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);
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. Signed-off-by: José Roberto de Souza <jose.souza@intel.com> --- drivers/gpu/drm/i915/display/intel_display.c | 2 ++ drivers/gpu/drm/i915/display/intel_drrs.c | 9 +++++++++ drivers/gpu/drm/i915/display/intel_drrs.h | 4 ++++ 3 files changed, 15 insertions(+)