From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> 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 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx