[RFC PATCH 00/22] Remove/minimize frontbuffer tracking

Jouni Högander jouni.hogander at intel.com
Fri Mar 24 08:59:45 UTC 2023


We are following a new strategy to rely purely on dirtyfb ioctl on
frontbuffer rendering. To have features like PSR, FBC and DRRS working
properly user-space needs to call dirtyfb when it completes
frontbuffer rendering.

This patch set is minimizing frontbuffer tracking implementation into
three interfaces:

intel_frontbuffer_flush:
  This is supposed to be called from dirtyfb ioctl.
    
frontbuffer_flush:
  This is purely for intel_overlay.
    
intel_frontbuffer_track:
  This is called as a part of atomic commit to identify framebuffers
  that are currently frontbuffers.

Implicit/Explicit Sync and DMA Fences
  Patches are adding wait of DMA fences into dirtyfb
  ioctl. This is solving problem with PSR, FBC, DRRS and GPU frontbuffer
  rendering with i915/gem. For Xe and explicit sync this is assumed to
  work if user space is importing fence using
  dma_buf_import_sync_file. Questionable in this change is whether
  it's ok to block dirtyfb ioctl until DMA fences are completed.

Legacy Cursor Updates
  Legacy cursor updates are converted to use generic
  drm_atomic_helper_update_plane as other planes. This is somehow
  questionable and is breaking our legacy cursor igt testcases. From
  usage point of view there is no problem observed in my testing. The
  problem with legacy cursor igt testcases is that they are expecting
  > 15000 cursor over one flip. We still have have 40 - 120 updates
  which is just fine from usability point of view.

PSR, FBC, DRRS
  Lots of code related to frontbuffer tracking is removed from PSR,
  FBC, DRRS. Removed code is related to frontbuffer ivalidate which is
  not used anymore as we are purely relying on dirtyfb. Also all
  frontbuffer bit tracking is removed from the code related to these
  features.

FBDev
  Frontbuffer tracking code is completely removed from
  intel_fbdev. This is not needed as our dirtyfb callback is called by
  generic fbdev code on update. Anyways fbdev emulation is not really
  used for anything else than fb console and that remains usable based
  on testing. Also IGT testcases are passing. We could consider moving
  into generic fbdev emulation as well. That would need a bit more
  work as we would need to implement mechanism to re-use bios
  framebuffers for fb console.

Jouni Högander (20):
  drm/i915: Wait dma fences in dirtyfb callback
  drm/i915/fbdev: Remove frontbuffer tracking calls
  drm/i915: Remove custom legacy cursor update
  drm/i915/psr: Use full frame updates for legacy cursor updates
  drm/i915/display: Remove intel_frontbuffer_invalidate
  drm/i915/display: Remove frontbuffer tracking calls from atomic commit
  drm/i915/display: Add a new frontbuffer tracking interface for
    intel_overlay
  drm/i915/display: Remove unused frontbuffer references from
    intel_overlay
  drm/i915/display: Remove unused frontbuffer tracking interfaces
  drm/i915/fbc: Remove invalidate callback
  drm/i915/fbc: Remove origin from frontbuffer flush callback
  drm/i915/psr: Remove invalidate callback
  drm/i915/psr: Remove origin from frontbuffer flush callback
  drm/i915/display: Remove origin from frontbuffer tracking interface
  drm/i915/display: Move checking frontbuffer bits
  drm/i915/display: Remove fb_op_origin enum
  drm/i915/psr: Remove frontbuffer bit track keeping from PSR
  drm/i915/fbc: Remove frontbuffer bits from flush callback
  drm/i915/drrs: Remove drrs invalidate callback
  drm/i915/drrs: DRRS doesn't really need frontbuffer bits

Maarten Lankhorst (2):
  drm/i915: Remove gem and overlay frontbuffer tracking
  drm/i915/display: Neuter frontbuffer tracking harder

 drivers/gpu/drm/i915/display/i9xx_plane.c     |   1 +
 drivers/gpu/drm/i915/display/intel_cursor.c   | 146 +-----------
 drivers/gpu/drm/i915/display/intel_display.c  |   9 +-
 .../drm/i915/display/intel_display_trace.h    |  31 +--
 .../drm/i915/display/intel_display_types.h    |  12 +-
 drivers/gpu/drm/i915/display/intel_drrs.c     |  69 +-----
 drivers/gpu/drm/i915/display/intel_drrs.h     |   5 +-
 drivers/gpu/drm/i915/display/intel_fb.c       |  19 +-
 drivers/gpu/drm/i915/display/intel_fb_pin.c   |   6 -
 drivers/gpu/drm/i915/display/intel_fbc.c      |  70 +-----
 drivers/gpu/drm/i915/display/intel_fbc.h      |   3 +-
 drivers/gpu/drm/i915/display/intel_fbdev.c    |  62 +----
 .../gpu/drm/i915/display/intel_frontbuffer.c  | 220 +-----------------
 .../gpu/drm/i915/display/intel_frontbuffer.h  | 112 +--------
 drivers/gpu/drm/i915/display/intel_overlay.c  |  24 +-
 .../drm/i915/display/intel_plane_initial.c    |   3 +-
 drivers/gpu/drm/i915/display/intel_psr.c      | 205 +---------------
 drivers/gpu/drm/i915/display/intel_psr.h      |   8 +-
 drivers/gpu/drm/i915/display/intel_sprite.c   |   1 +
 .../drm/i915/display/skl_universal_plane.c    |   1 +
 drivers/gpu/drm/i915/gem/i915_gem_clflush.c   |   4 -
 drivers/gpu/drm/i915/gem/i915_gem_domain.c    |   7 -
 .../gpu/drm/i915/gem/i915_gem_execbuffer.c    |   2 -
 drivers/gpu/drm/i915/gem/i915_gem_object.c    |  25 --
 drivers/gpu/drm/i915/gem/i915_gem_object.h    |  22 --
 drivers/gpu/drm/i915/gem/i915_gem_phys.c      |   4 -
 drivers/gpu/drm/i915/i915_driver.c            |   1 +
 drivers/gpu/drm/i915/i915_gem.c               |   8 -
 drivers/gpu/drm/i915/i915_gem_gtt.c           |   1 -
 drivers/gpu/drm/i915/i915_vma.c               |  12 -
 30 files changed, 76 insertions(+), 1017 deletions(-)

-- 
2.34.1



More information about the Intel-gfx-trybot mailing list