drm/i915/display: Drop unnecessary frontbuffer flushes

This unnecessary flushes are hurting power-savings are it causes
features like PSR, FBC and DRRS to disable it self to handle
frontbuffer rendering, below some explanation of why each removed
call is not necessary.

The flush in intel_prepare_plane_fb() is not required as framebuffer
will be flipped and power-saving features do the proper flip handling
in hardware.

intel_find_initial_plane_obj() flush is not required because it is
only executed during driver load and at this point the power-saving
features are not even enabled.

And the last one intelfb_create(), is also not required as at this
point the fbdev was just allocated, userspace will draw on
it what will trigger frontbuffer invalidates and flushes later on.

Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
Signed-off-by: default avatarJosé Roberto de Souza <jose.souza@intel.com>
Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20210930001409.254817-3-jose.souza@intel.com
parent 1f61f065
...@@ -1711,8 +1711,6 @@ intel_find_initial_plane_obj(struct intel_crtc *crtc, ...@@ -1711,8 +1711,6 @@ intel_find_initial_plane_obj(struct intel_crtc *crtc,
plane_state->uapi.crtc = &crtc->base; plane_state->uapi.crtc = &crtc->base;
intel_plane_copy_uapi_to_hw_state(plane_state, plane_state, crtc); intel_plane_copy_uapi_to_hw_state(plane_state, plane_state, crtc);
intel_frontbuffer_flush(to_intel_frontbuffer(fb), ORIGIN_DIRTYFB);
atomic_or(plane->frontbuffer_bit, &to_intel_frontbuffer(fb)->bits); atomic_or(plane->frontbuffer_bit, &to_intel_frontbuffer(fb)->bits);
} }
...@@ -10814,7 +10812,6 @@ intel_prepare_plane_fb(struct drm_plane *_plane, ...@@ -10814,7 +10812,6 @@ intel_prepare_plane_fb(struct drm_plane *_plane,
return ret; return ret;
i915_gem_object_wait_priority(obj, 0, &attr); i915_gem_object_wait_priority(obj, 0, &attr);
i915_gem_object_flush_frontbuffer(obj, ORIGIN_DIRTYFB);
if (!new_plane_state->uapi.fence) { /* implicit fencing */ if (!new_plane_state->uapi.fence) { /* implicit fencing */
struct dma_fence *fence; struct dma_fence *fence;
......
...@@ -230,8 +230,6 @@ static int intelfb_create(struct drm_fb_helper *helper, ...@@ -230,8 +230,6 @@ static int intelfb_create(struct drm_fb_helper *helper,
goto out_unlock; goto out_unlock;
} }
intel_frontbuffer_flush(to_frontbuffer(ifbdev), ORIGIN_DIRTYFB);
info = drm_fb_helper_alloc_fbi(helper); info = drm_fb_helper_alloc_fbi(helper);
if (IS_ERR(info)) { if (IS_ERR(info)) {
drm_err(&dev_priv->drm, "Failed to allocate fb_info\n"); drm_err(&dev_priv->drm, "Failed to allocate fb_info\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