linux/drivers/gpu/drm/i915
Chris Wilson 74d290f845 drm/i915: Boost GPU clocks if we miss the pageflip's vblank
If we miss the current vblank because the gpu was busy, that may cause a
jitter as the frame rate temporarily drops. We try to limit the impact
of this by then boosting the GPU clock to deliver the frame as quickly
as possible. Originally done in commit 6ad790c0f5 ("drm/i915: Boost GPU
frequency if we detect outstanding pageflips") but was never forward
ported to atomic and finally dropped in commit fd3a40242e ("drm/i915:
Rip out legacy page_flip completion/irq handling").

One of the most typical use-cases for this is a mostly idle desktop.
Rendering one frame of the desktop's frontbuffer can easily be
accomplished by the GPU running at low frequency, but often exceeds
the time budget of the desktop compositor. The result is that animations
such as opening the menu, doing a fullscreen switch, or even just trying
to move a window around are slow and jerky. We need to respond within a
frame to give the best impression of a smooth UX, as a compromise we
instead respond if that first frame misses its goal. The result should
be a near-imperceivable initial delay and a smooth animation even
starting from idle. The cost, as ever, is that we spend more power than
is strictly necessary as we overestimate the required GPU frequency and
then try to ramp down.

This of course is reactionary, too little, too late; nevertheless it is
surprisingly effective.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=102199
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Daniel Vetter <daniel.vetter@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20170817123706.6777-1-chris@chris-wilson.co.uk
Tested-by: Lyude Paul <lyude@redhat.com>
Reviewed-by: Radoslaw Szwichtenberg <radoslaw.szwichtenberg@intel.com>
2017-08-22 17:08:06 +01:00
..
gvt drm/i915/hsw+: Add support for multiple power well regs 2017-08-15 15:28:10 +03:00
selftests drm/i915: Replace execbuf vma ht with an idr 2017-08-18 11:59:02 +01:00
dvo_ch7xxx.c drm/i915/dvo: fix debug logging on unknown DID 2017-06-01 15:53:03 +03:00
dvo_ch7017.c drm/i915/lvds: Remove magic from PLL programming 2017-05-10 13:47:55 +03:00
dvo_ivch.c
dvo_ns2501.c
dvo_sil164.c
dvo_tfp410.c
dvo.h
i915_cmd_parser.c drm/i915: Redefine ptr_pack_bits() and friends 2017-05-17 13:38:04 +01:00
i915_debugfs.c drm/i915: Replace execbuf vma ht with an idr 2017-08-18 11:59:02 +01:00
i915_drv.c drm/i915: Add support for drm syncobjs 2017-08-15 16:46:57 +01:00
i915_drv.h drm/i915: Update DRIVER_DATE to 20170818 2017-08-18 22:40:45 +02:00
i915_gem_batch_pool.c drm/i915: Reinstate reservation_object zapping for batch_pool objects 2017-06-14 14:06:22 +01:00
i915_gem_batch_pool.h
i915_gem_clflush.c drm/i915: Split obj->cache_coherent to track r/w 2017-08-15 15:46:57 +01:00
i915_gem_clflush.h drm/i915: Force CPU synchronisation even if userspace requests ASYNC 2017-07-27 09:39:00 +02:00
i915_gem_context.c drm/i915: Replace execbuf vma ht with an idr 2017-08-18 11:59:02 +01:00
i915_gem_context.h drm/i915: Replace execbuf vma ht with an idr 2017-08-18 11:59:02 +01:00
i915_gem_dmabuf.c drm/i915: Implement dma_buf_ops->kmap 2017-05-03 23:15:02 +01:00
i915_gem_evict.c drm/i915: Convert execbuf to use struct-of-array packing for critical fields 2017-08-18 11:57:36 +01:00
i915_gem_execbuffer.c drm/i915: Trivial grammar fix s/opt of/opt out of/ in comment 2017-08-18 11:59:28 +01:00
i915_gem_fence_reg.c
i915_gem_fence_reg.h
i915_gem_gtt.c drm/i915/cnl: Introduce initial Cannonlake Workarounds. 2017-08-18 15:32:17 -07:00
i915_gem_gtt.h drm/i915: pass the vma to insert_entries 2017-06-22 16:48:50 +01:00
i915_gem_internal.c drm/i915: Split obj->cache_coherent to track r/w 2017-08-15 15:46:57 +01:00
i915_gem_object.c drm/i915: Split obj->cache_coherent to track r/w 2017-08-15 15:46:57 +01:00
i915_gem_object.h drm/i915: Replace execbuf vma ht with an idr 2017-08-18 11:59:02 +01:00
i915_gem_render_state.c drm/i915: Perform an invalidate prior to executing golden renderstate 2017-08-08 14:53:50 +01:00
i915_gem_render_state.h
i915_gem_request.c drm/i915: Mark the GT as busy before idling the previous request 2017-08-18 12:01:41 +01:00
i915_gem_request.h Merge tag 'drm-intel-next-2017-07-17' of git://anongit.freedesktop.org/git/drm-intel into drm-next 2017-07-20 11:31:43 +10:00
i915_gem_shrinker.c drm/i915/shrinker: Wrap need_resched() inside preempt-disable 2017-08-04 13:11:39 +01:00
i915_gem_stolen.c drm/i915: Split obj->cache_coherent to track r/w 2017-08-15 15:46:57 +01:00
i915_gem_tiling.c drm/i915: Fix logical inversion for gen4 quirking 2017-06-07 16:31:34 +03:00
i915_gem_timeline.c
i915_gem_timeline.h
i915_gem_userptr.c drm/i915: Split obj->cache_coherent to track r/w 2017-08-15 15:46:57 +01:00
i915_gem.c drm/i915: Replace execbuf vma ht with an idr 2017-08-18 11:59:02 +01:00
i915_gem.h
i915_gpu_error.c drm/i915: Make i915_gem_context_mark_guilty() safe for unlocked updates 2017-07-27 09:38:47 +02:00
i915_guc_reg.h
i915_guc_submission.c drm/i915: Differentiate between sw write location into ring and last hw read 2017-06-19 10:52:34 +03:00
i915_ioc32.c
i915_irq.c drm/i915: More surgically unbreak the modeset vs reset deadlock 2017-08-14 17:03:36 +02:00
i915_memcpy.c
i915_mm.c
i915_oa_bdw.c drm/i915/perf: leave GDT_CHICKEN_BITS programming in configs 2017-08-03 18:18:44 +01:00
i915_oa_bdw.h drm/i915/perf: prune OA configs 2017-08-03 18:18:05 +01:00
i915_oa_bxt.c drm/i915/perf: leave GDT_CHICKEN_BITS programming in configs 2017-08-03 18:18:44 +01:00
i915_oa_bxt.h drm/i915/perf: prune OA configs 2017-08-03 18:18:05 +01:00
i915_oa_chv.c drm/i915/perf: leave GDT_CHICKEN_BITS programming in configs 2017-08-03 18:18:44 +01:00
i915_oa_chv.h drm/i915/perf: prune OA configs 2017-08-03 18:18:05 +01:00
i915_oa_glk.c drm/i915/perf: leave GDT_CHICKEN_BITS programming in configs 2017-08-03 18:18:44 +01:00
i915_oa_glk.h drm/i915/perf: prune OA configs 2017-08-03 18:18:05 +01:00
i915_oa_hsw.c drm/i915/perf: leave GDT_CHICKEN_BITS programming in configs 2017-08-03 18:18:44 +01:00
i915_oa_hsw.h drm/i915/perf: prune OA configs 2017-08-03 18:18:05 +01:00
i915_oa_kblgt2.c drm/i915/perf: leave GDT_CHICKEN_BITS programming in configs 2017-08-03 18:18:44 +01:00
i915_oa_kblgt2.h drm/i915/perf: prune OA configs 2017-08-03 18:18:05 +01:00
i915_oa_kblgt3.c drm/i915/perf: leave GDT_CHICKEN_BITS programming in configs 2017-08-03 18:18:44 +01:00
i915_oa_kblgt3.h drm/i915/perf: prune OA configs 2017-08-03 18:18:05 +01:00
i915_oa_sklgt2.c drm/i915/perf: leave GDT_CHICKEN_BITS programming in configs 2017-08-03 18:18:44 +01:00
i915_oa_sklgt2.h drm/i915/perf: prune OA configs 2017-08-03 18:18:05 +01:00
i915_oa_sklgt3.c drm/i915/perf: leave GDT_CHICKEN_BITS programming in configs 2017-08-03 18:18:44 +01:00
i915_oa_sklgt3.h drm/i915/perf: prune OA configs 2017-08-03 18:18:05 +01:00
i915_oa_sklgt4.c drm/i915/perf: leave GDT_CHICKEN_BITS programming in configs 2017-08-03 18:18:44 +01:00
i915_oa_sklgt4.h drm/i915/perf: prune OA configs 2017-08-03 18:18:05 +01:00
i915_params.c drm/i915/opregion: let user specify override VBT via firmware load 2017-08-17 16:34:54 +03:00
i915_params.h drm/i915/opregion: let user specify override VBT via firmware load 2017-08-17 16:34:54 +03:00
i915_pci.c drm/i915: Re-enable per-engine reset for Broxton 2017-08-22 12:27:18 +01:00
i915_perf.c drm/i915/perf: Drop redundant check for perf.initialised on reset 2017-08-10 21:43:11 +01:00
i915_pvinfo.h drm/i915: Enable guest i915 full ppgtt functionality 2017-08-15 10:12:48 +08:00
i915_reg.h drm/i915/cnl: Apply large line width optimization 2017-08-18 15:33:13 -07:00
i915_selftest.h drm/i915: Don't use MI_STORE_DWORD_IMM on Sandybridge/vcs 2017-08-18 11:55:02 +01:00
i915_suspend.c
i915_sw_fence.c main drm pull for v4.13 2017-07-09 18:48:37 -07:00
i915_sw_fence.h main drm pull for v4.13 2017-07-09 18:48:37 -07:00
i915_syncmap.c
i915_syncmap.h
i915_sysfs.c drm/i915: add const to bin_attribute 2017-08-03 12:20:09 +02:00
i915_trace_points.c
i915_trace.h drm/i915: Add g4x watermark tracepoint 2017-05-10 16:48:32 +03:00
i915_utils.h drm/i915: Store a direct lookup from object handle to vma 2017-06-16 16:54:04 +01:00
i915_vgpu.c drm/i915: Enable guest i915 full ppgtt functionality 2017-08-15 10:12:48 +08:00
i915_vgpu.h drm/i915: Enable guest i915 full ppgtt functionality 2017-08-15 10:12:48 +08:00
i915_vma.c drm/i915: Replace execbuf vma ht with an idr 2017-08-18 11:59:02 +01:00
i915_vma.h drm/i915: Replace execbuf vma ht with an idr 2017-08-18 11:59:02 +01:00
intel_acpi.c ACPI: Switch to use generic guid_t in acpi_evaluate_dsm() 2017-06-07 12:20:49 +02:00
intel_atomic_plane.c drm/i915/skl+: Check for supported plane configuration in Interlace mode 2017-07-04 16:52:30 +03:00
intel_atomic.c drm/i915/cnl: Fix Cannonlake scaler mode programing. 2017-06-12 09:45:55 -07:00
intel_audio.c
intel_bios.c drm/i915/vbt: ignore extraneous child devices for a port 2017-08-16 17:40:37 +03:00
intel_bios.h
intel_breadcrumbs.c drm/i915: Skip adding the request to the signal tree is complete 2017-06-08 12:33:08 +01:00
intel_cdclk.c drm/i915: reintroduce VLV/CHV PFI programming power domain workaround 2017-07-03 16:12:44 +03:00
intel_color.c drm/i915: Fix out-of-bounds array access in bdw_load_gamma_lut 2017-08-02 15:06:13 +02:00
intel_crt.c drm/i915: Constify states passed to enable/disable/etc. encoder hooks 2017-08-22 17:59:02 +03:00
intel_csr.c drm/i915: Use HAS_CSR instead of gen number on DMC load. 2017-06-12 09:45:30 -07:00
intel_ddi.c drm/i915: Constify states passed to enable/disable/etc. encoder hooks 2017-08-22 17:59:02 +03:00
intel_device_info.c drm/i915: Use HAS_PCH_CPT() everywhere 2017-06-22 19:08:34 +03:00
intel_display.c drm/i915: Boost GPU clocks if we miss the pageflip's vblank 2017-08-22 17:08:06 +01:00
intel_dp_aux_backlight.c Revert "drm/i915: Add heuristic to determine better way to adjust brightness" 2017-07-21 09:32:48 +03:00
intel_dp_link_training.c drm/i915: Explicit the connector name for DP link training result 2017-07-19 08:32:42 +02:00
intel_dp_mst.c drm/i915: Constify states passed to enable/disable/etc. encoder hooks 2017-08-22 17:59:02 +03:00
intel_dp.c drm/i915: Constify states passed to enable/disable/etc. encoder hooks 2017-08-22 17:59:02 +03:00
intel_dpio_phy.c
intel_dpll_mgr.c drm/i915/cnl: Dump the right pll registers when dumping pipe config. 2017-08-11 11:41:45 -07:00
intel_dpll_mgr.h drm/i915/cnl: Initialize PLLs 2017-06-12 09:42:18 -07:00
intel_drv.h drm/i915: Boost GPU clocks if we miss the pageflip's vblank 2017-08-22 17:08:06 +01:00
intel_dsi_dcs_backlight.c drm/i915: Initialize 'data' in intel_dsi_dcs_backlight.c 2017-08-15 10:48:21 +03:00
intel_dsi_pll.c
intel_dsi_vbt.c drm/i915/bxt: use NULL for GPIO connection ID 2017-08-18 15:57:51 +03:00
intel_dsi.c drm/i915: Constify states passed to enable/disable/etc. encoder hooks 2017-08-22 17:59:02 +03:00
intel_dsi.h
intel_dvo.c drm/i915: Constify states passed to enable/disable/etc. encoder hooks 2017-08-22 17:59:02 +03:00
intel_engine_cs.c drm/i915/cnl: WaDisableEnhancedSBEVertexCaching 2017-08-18 15:32:58 -07:00
intel_fbc.c drm/i915/fbc: only update no_fbc_reason when active 2017-08-11 16:57:18 +02:00
intel_fbdev.c Merge airlied/drm-next into drm-intel-next-queued 2017-08-10 18:12:01 +02:00
intel_fifo_underrun.c drm/i915: Consistently use enum pipe for PCH transcoders 2017-07-18 08:39:03 +02:00
intel_frontbuffer.c
intel_frontbuffer.h
intel_guc_ct.c drm/i915/guc: Introduce buffer based cmd transport 2017-05-26 13:26:53 +01:00
intel_guc_ct.h drm/i915/guc: Introduce buffer based cmd transport 2017-05-26 13:26:53 +01:00
intel_guc_fwif.h drm/i915/guc: Introduce buffer based cmd transport 2017-05-26 13:26:53 +01:00
intel_guc_loader.c drm/i915/guc: Load GuC on Coffee Lake 2017-06-09 11:56:53 -07:00
intel_guc_log.c
intel_gvt.c drm/i915/gvt: Return -EIO if host GuC submission is enabled when loading GVT-g 2017-05-30 16:00:07 +03:00
intel_gvt.h drm/i915/gvt: Add gvt options sanitize function 2017-05-30 15:59:47 +03:00
intel_hangcheck.c drm/i915: Check execlist/ring status during hangcheck 2017-07-27 09:38:45 +02:00
intel_hdmi.c drm/i915: Constify states passed to enable/disable/etc. encoder hooks 2017-08-22 17:59:02 +03:00
intel_hotplug.c drm/i915: Introduce intel_hpd_pin function. 2017-08-11 11:53:47 -07:00
intel_huc.c drm/i915/huc: Load HuC on Coffee Lake 2017-06-09 11:57:16 -07:00
intel_i2c.c drm/i915: Rework sdvo proxy i2c locking 2017-07-27 10:05:48 +02:00
intel_lpe_audio.c drm/i915: Stop pretending to mask/unmask LPE audio interrupts 2017-05-26 11:51:18 +03:00
intel_lrc.c drm/i915/cnl: Introduce initial Cannonlake Workarounds. 2017-08-18 15:32:17 -07:00
intel_lrc.h drm/i915: remove unused function declaration 2017-08-07 18:29:26 +01:00
intel_lspcon.c drm/i915/cnl: Fix LSPCON support. 2017-08-16 07:42:00 -07:00
intel_lvds.c drm/i915: Constify states passed to enable/disable/etc. encoder hooks 2017-08-22 17:59:02 +03:00
intel_mocs.c drm/i915/cnl: Cannonlake has same MOCS table than Skylake. 2017-06-07 07:29:51 -07:00
intel_mocs.h
intel_modes.c
intel_opregion.c drm/i915/opregion: let user specify override VBT via firmware load 2017-08-17 16:34:54 +03:00
intel_overlay.c drm/i915: More surgically unbreak the modeset vs reset deadlock 2017-08-14 17:03:36 +02:00
intel_panel.c drm/i915/edp: Allow alternate fixed mode for eDP if available. 2017-08-15 16:43:33 -07:00
intel_pipe_crc.c drm/i915: use memdup_user_nul 2017-05-08 09:28:39 +02:00
intel_pm.c drm/i915: Boost GPU clocks if we miss the pageflip's vblank 2017-08-22 17:08:06 +01:00
intel_psr.c drm/i915: Plumb crtc_state to PSR enable/disable 2017-08-22 17:57:46 +03:00
intel_renderstate_gen6.c
intel_renderstate_gen7.c
intel_renderstate_gen8.c
intel_renderstate_gen9.c drm/i915/gen9: Send all components in VF state 2017-08-14 12:15:49 +03:00
intel_renderstate.h
intel_ringbuffer.c drm/i915: Enforce that CS packets are qword aligned 2017-07-27 09:38:57 +02:00
intel_ringbuffer.h drm/i915: Don't use MI_STORE_DWORD_IMM on Sandybridge/vcs 2017-08-18 11:55:02 +01:00
intel_runtime_pm.c drm/i915/hsw+: Add support for multiple power well regs 2017-08-15 15:28:10 +03:00
intel_sdvo_regs.h
intel_sdvo.c drm/i915: Constify states passed to enable/disable/etc. encoder hooks 2017-08-22 17:59:02 +03:00
intel_sideband.c
intel_sprite.c drm/i915: make structure intel_sprite_plane_funcs static 2017-08-11 18:06:19 +02:00
intel_tv.c drm/i915: Constify states passed to enable/disable/etc. encoder hooks 2017-08-22 17:59:02 +03:00
intel_uc.c drm/i915/guc: Rename GuC irq trigger function 2017-08-12 18:56:47 +01:00
intel_uc.h Linux 4.12-rc5 2017-06-16 13:58:27 +10:00
intel_uncore.c drm/i915: Stop touching forcewake following a gen6+ engine reset 2017-08-18 10:05:59 +01:00
intel_uncore.h drm/i915: Keep the forcewake timer alive for 1ms past the most recent use 2017-05-26 15:58:21 +01:00
intel_vbt_defs.h
Kconfig drm/i915: select CRC32 2017-06-21 11:13:27 +02:00
Kconfig.debug drm/i915: Add SW_SYNC to our recommend testing Kconfig 2017-08-12 10:30:42 +01:00
Makefile drm/i915: Split obj->cache_coherent to track r/w 2017-08-15 15:46:57 +01:00