[Intel-gfx] [PATCH 00/25] Fix FBC for real

ville.syrjala at linux.intel.com ville.syrjala at linux.intel.com
Wed Jun 18 19:58:33 CEST 2014


From: Ville Syrjälä <ville.syrjala at linux.intel.com>

This series rewrites the FBC code to actually work. It utilizes the
hardware tracking/nuking as much as possible, eg. relying on hardware
nuke on flip when possible.

I also introduce the generic ring and vblank notifier gizmos which could
be used for various other things. I already included a patch to convert
the IPS enable to be asynchronous by using the vblank notifier. Other
users for thse could be mmio flips, watermark programming, atomic
gamma/color correction (single buffered registers all) updates from vblank
interrupt, etc.

There's also a rather big behavioural change that FBC now stays enabled
even when multiple pipes are active. FBC just automatially migrates to
the primary plane where it's deemed most beneficial. We do that
determination by looking at the rate at which the plane is pulling data
(pixel rate * cpp). That seems like a reasonable choice all else being
equal. Eventually we might want to adjust the FBC score based on
nuke/invalidate frequency as well.

The locking now has a new fbc.mutex. I had to split the page flip code
apart a bit to accomondate. I'm not entirely sure if it wouldn't be
better to just keep struct_mutex locked all through there, but then
I'd need rework the locking in the fbc code to not take struct_mutex
when called from the page flip code. And then I'd have to start
questioning whether fbc.mutex has any point existing.

I pushed the lot here:
git://gitorious.org/vsyrjala/linux.git fbc_update_thing_14

Ville Syrjälä (25):
  drm/i915: Add ring_notify mechanism
  drm/i915: Add vblank notify mechanism
  drm/i915: Name the IPS bits
  drm/i915: Use vblank notifier for IPS
  drm/i915: Reogranize page flip code for fbc
  drm/i915: Move ilk_pipe_pixel_rate() earlier to avoid forward
    declaration
  drm/i915: Reorganize intel_update_fbc()
  drm/i915: Check panel fitting state before enabling fbc
  drm/i915: Reject fbc on g4x when sprites are enabled
  drm/i915: Check pixel format for fbc
  drm/i915: Remove dblscan flag from fbc1 check
  drm/i915: Don't claim fbc as possible if the obj size exceeds stolen
    size
  drm/i915: Use low level funciton to disable fbc at init/resume
  drm/i915: Move fbc function prototypes got intel_drv.h
  drm/i915: Move fbc state into dev_priv.fbc
  drm/i915: Rewrite fbc
  drm/i915: Reduce dmesg spam from FBC enable
  drm/i915: Add i915_fbc_info debugfs file
  drm/i915: Implement LRI based FBC tracking
  drm/i915: Use LRI based FBC render tracking for ILK
  drm/i915: Reorder i915_gem_execbuffer_move_to_gpu() and
    i915_switch_context()
  drm/i915: Flush caches for scanout during cpu->gtt move
  drm/i915: Nuke FBC from SW_FINISH ioctl
  drm/i915: Pimp fbc render/blitter tracking
  drm/i915: Enable fbc for ilk+ by default

 drivers/gpu/drm/i915/i915_debugfs.c        |   60 +-
 drivers/gpu/drm/i915/i915_drv.c            |    3 +
 drivers/gpu/drm/i915/i915_drv.h            |   44 +-
 drivers/gpu/drm/i915/i915_gem.c            |   23 +-
 drivers/gpu/drm/i915/i915_gem_context.c    |   14 +
 drivers/gpu/drm/i915/i915_gem_execbuffer.c |   40 +-
 drivers/gpu/drm/i915/i915_irq.c            |   12 +
 drivers/gpu/drm/i915/i915_reg.h            |    3 +-
 drivers/gpu/drm/i915/i915_suspend.c        |    5 +-
 drivers/gpu/drm/i915/intel_display.c       |  399 ++++++++--
 drivers/gpu/drm/i915/intel_drv.h           |   30 +-
 drivers/gpu/drm/i915/intel_pm.c            | 1099 +++++++++++++++++++---------
 drivers/gpu/drm/i915/intel_ringbuffer.c    |  154 +++-
 drivers/gpu/drm/i915/intel_ringbuffer.h    |   26 +-
 drivers/gpu/drm/i915/intel_sprite.c        |   15 +-
 15 files changed, 1483 insertions(+), 444 deletions(-)

-- 
1.8.5.5




More information about the Intel-gfx mailing list