]> git.itanic.dy.fi Git - linux-stable/commitdiff
drm/i915/display: Drop unnecessary frontbuffer flushes
authorJosé Roberto de Souza <jose.souza@intel.com>
Thu, 30 Sep 2021 00:14:03 +0000 (17:14 -0700)
committerJosé Roberto de Souza <jose.souza@intel.com>
Thu, 30 Sep 2021 22:04:44 +0000 (15:04 -0700)
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: José Roberto de Souza <jose.souza@intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20210930001409.254817-3-jose.souza@intel.com
drivers/gpu/drm/i915/display/intel_display.c
drivers/gpu/drm/i915/display/intel_fbdev.c

index a4453dd1bb518219872c7a870014235b7eb86bf8..1ce1d46dca5b593a1ed90708e304c5e8b5f1e33c 100644 (file)
@@ -1711,8 +1711,6 @@ intel_find_initial_plane_obj(struct intel_crtc *crtc,
        plane_state->uapi.crtc = &crtc->base;
        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);
 }
 
@@ -10814,7 +10812,6 @@ intel_prepare_plane_fb(struct drm_plane *_plane,
                return ret;
 
        i915_gem_object_wait_priority(obj, 0, &attr);
-       i915_gem_object_flush_frontbuffer(obj, ORIGIN_DIRTYFB);
 
        if (!new_plane_state->uapi.fence) { /* implicit fencing */
                struct dma_fence *fence;
index 60d3ded27047653a6e6b774eddc3e29d76cf85d4..53484267b2a4a6859eee96e8403bdc8ae963c3fc 100644 (file)
@@ -230,8 +230,6 @@ static int intelfb_create(struct drm_fb_helper *helper,
                goto out_unlock;
        }
 
-       intel_frontbuffer_flush(to_frontbuffer(ifbdev), ORIGIN_DIRTYFB);
-
        info = drm_fb_helper_alloc_fbi(helper);
        if (IS_ERR(info)) {
                drm_err(&dev_priv->drm, "Failed to allocate fb_info\n");