linux_dsm_epyc7002/drivers/gpu/drm/i915
Chris Wilson b3ee09a4de drm/i915/ringbuffer: Fix context restore upon reset
The discovery with trying to enable full-ppgtt was that we were
completely failing to the load both the mm and context following the
reset. Although we were performing mmio to set the PP_DIR (per-process
GTT) and CCID (context), these were taking no effect (the assumption was
that this would trigger reload of the context and restore the page
tables). It was not until we performed the LRI + MI_SET_CONTEXT in a
following context switch would anything occur.

Since we are then required to reset the context image and PP_DIR using
CS commands, we place those commands into every batch. The hardware
should recognise the no-ops and eliminate the expensive context loads,
but we still have to pay the cost of using cross-powerwell register
writes. In practice, this has no effect on actual context switch times,
and only adds a few hundred nanoseconds to no-op switches. We can improve
the latter by eliminating the w/a around known no-op switches, but there
is an ulterior motive to keeping them.

Always emitting the context switch at the beginning of the request (and
relying on HW to skip unneeded switches) does have one key advantage.
Should we implement request reordering on Haswell, we will not know in
advance what the previous executing context was on the GPU and so we
would not be able to elide the MI_SET_CONTEXT commands ourselves and
always have to emit them. Having our hand forced now actually prepares
us for later.

Now since that context and mm follow the request, we no longer (and not
for a long time since requests took over!) require a trace point to tell
when we write the switch into the ring, since it is always. (This is
even more important when you remember that simply writing into the ring
bears no relation to the current mm.)

v2: Sandybridge has to agree to use LRI as well.

Testcase: igt/drv_selftests/live_hangcheck
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Cc: Matthew Auld <matthew.william.auld@gmail.com>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180611110845.31890-1-chris@chris-wilson.co.uk
2018-06-11 14:03:47 +01:00
..
gvt drm/i915/gtt: Rename i915_hw_ppgtt base member 2018-06-05 21:11:20 +01:00
selftests drm/i915/gtt: Push allocation to hw ppgtt constructor 2018-06-07 21:53:13 +01:00
dvo_ch7xxx.c
dvo_ch7017.c
dvo_ivch.c drm/i915/dvo: Remove incorrect kerneldoc markups 2018-02-14 12:04:31 +00:00
dvo_ns2501.c
dvo_sil164.c
dvo_tfp410.c
dvo.h
i915_cmd_parser.c drm/i915/cmdparser: Do not check past the cmd length. 2018-02-06 11:41:40 -08:00
i915_debugfs.c drm/i915/gtt: Rename i915_hw_ppgtt base member 2018-06-05 21:11:20 +01:00
i915_drv.c drm/i915: Squash GEM load failure message (again) 2018-06-11 10:01:03 +01:00
i915_drv.h drm/i915: Squash GEM load failure message (again) 2018-06-11 10:01:03 +01:00
i915_gem_batch_pool.c drm/i915: Change parameters order in i915_gem_batch_pool_init 2018-03-09 22:21:41 +00:00
i915_gem_batch_pool.h drm/i915: Change parameters order in i915_gem_batch_pool_init 2018-03-09 22:21:41 +00:00
i915_gem_clflush.c drm: move read_domains and write_domain into i915 2018-02-16 14:12:48 +00:00
i915_gem_clflush.h
i915_gem_context.c drm/i915/gtt: Rename i915_hw_ppgtt base member 2018-06-05 21:11:20 +01:00
i915_gem_context.h drm/i915: Forward declare struct intel_context 2018-05-25 08:21:19 +01:00
i915_gem_dmabuf.c drm: move read_domains and write_domain into i915 2018-02-16 14:12:48 +00:00
i915_gem_evict.c drm/i915: Rename drm_i915_gem_request to i915_request 2018-02-21 20:57:22 +00:00
i915_gem_execbuffer.c drm/i915: Apply batch location restrictions before pinning 2018-06-11 11:00:26 +01:00
i915_gem_fence_reg.c drm/i915: Use INTEL_GEN everywhere 2018-02-09 22:29:02 +00:00
i915_gem_fence_reg.h
i915_gem_gtt.c drm/i915/ringbuffer: Fix context restore upon reset 2018-06-11 14:03:47 +01:00
i915_gem_gtt.h drm/i915/ringbuffer: Fix context restore upon reset 2018-06-11 14:03:47 +01:00
i915_gem_internal.c drm: move read_domains and write_domain into i915 2018-02-16 14:12:48 +00:00
i915_gem_object.c
i915_gem_object.h drm/i915: Rename drm_i915_gem_request to i915_request 2018-02-21 20:57:22 +00:00
i915_gem_render_state.c drm/i915/gtt: Rename i915_hw_ppgtt base member 2018-06-05 21:11:20 +01:00
i915_gem_render_state.h drm/i915: Rename drm_i915_gem_request to i915_request 2018-02-21 20:57:22 +00:00
i915_gem_shrinker.c drm/i915/gtt: Rename i915_hw_ppgtt base member 2018-06-05 21:11:20 +01:00
i915_gem_stolen.c drm/i915/gtt: Rename i915_hw_ppgtt base member 2018-06-05 21:11:20 +01:00
i915_gem_tiling.c drm/i915: Refactor common list iteration over GGTT vma 2017-12-07 23:26:55 +00:00
i915_gem_userptr.c drm/i915/userptr: reject zero user_size 2018-05-08 12:24:39 +01:00
i915_gem.c drm/i915: Refactor unsettting obj->mm.pages 2018-06-11 11:00:04 +01:00
i915_gem.h drm/i915/execlists: Wait for ELSP submission on restart 2018-05-25 13:39:49 +01:00
i915_gemfs.c drm/i915: Disable THP until we have a GPU read BW W/A 2017-11-30 10:11:49 +02:00
i915_gemfs.h
i915_gpu_error.c drm/i915: Prepare for non-object vma 2018-06-07 21:53:10 +01:00
i915_gpu_error.h drm/i915/icl: Read the correct Gen11 interrupt registers 2018-05-17 15:35:08 -07:00
i915_ioc32.c drm/i915: Clean up ancient doc comments for i915_ioc32.c 2018-02-15 16:22:21 +00:00
i915_irq.c drm/i915/icl: Extend AUX F interrupts to ICL 2018-06-01 16:03:23 -07:00
i915_memcpy.c drm/i915: Do not enable movntdqa optimization in hypervisor guest 2017-12-22 11:12:15 +00:00
i915_mm.c
i915_oa_bdw.c
i915_oa_bdw.h
i915_oa_bxt.c
i915_oa_bxt.h
i915_oa_cflgt2.c
i915_oa_cflgt2.h
i915_oa_cflgt3.c drm/i915/perf: Fix compiler warning for string truncation 2018-02-12 23:34:50 -08:00
i915_oa_cflgt3.h
i915_oa_chv.c
i915_oa_chv.h
i915_oa_cnl.c drm/i915/perf: Fix compiler warning for string truncation 2018-02-12 23:34:55 -08:00
i915_oa_cnl.h
i915_oa_glk.c
i915_oa_glk.h
i915_oa_hsw.c
i915_oa_hsw.h
i915_oa_icl.c drm/i915/perf: enable perf support on ICL 2018-03-29 13:25:30 +01:00
i915_oa_icl.h drm/i915/perf: enable perf support on ICL 2018-03-29 13:25:30 +01:00
i915_oa_kblgt2.c
i915_oa_kblgt2.h
i915_oa_kblgt3.c
i915_oa_kblgt3.h
i915_oa_sklgt2.c
i915_oa_sklgt2.h
i915_oa_sklgt3.c
i915_oa_sklgt3.h
i915_oa_sklgt4.c
i915_oa_sklgt4.h
i915_params.c drm/i915: Remove unused enable_cmd_parser modparam 2018-05-17 20:52:39 +01:00
i915_params.h drm/i915: Remove unused enable_cmd_parser modparam 2018-05-17 20:52:39 +01:00
i915_pci.c drm/i915/psr: Nuke PSR support for VLV and CHV 2018-05-24 16:05:19 +03:00
i915_perf.c drm/i915/perf: fix gen11 engine class shift 2018-06-11 11:58:43 +01:00
i915_pmu.c drm/i915/pmu: Do not assume fixed hrtimer period 2018-06-05 16:45:01 +01:00
i915_pmu.h drm/i915/pmu: Do not assume fixed hrtimer period 2018-06-05 16:45:01 +01:00
i915_pvinfo.h drm/i915: Add new vGPU cap info bit VGT_CAPS_HUGE_GTT 2018-06-05 16:57:01 +03:00
i915_query.c drm/i915/query: nospec expects no more than an unsigned long 2018-05-22 16:55:57 +01:00
i915_query.h drm/i915: add query uAPI 2018-03-08 10:07:18 +00:00
i915_reg.h drm/i915: Add WaKBLVECSSemaphoreWaitPoll 2018-06-08 12:16:20 +03:00
i915_request.c drm/i915/ringbuffer: Fix context restore upon reset 2018-06-11 14:03:47 +01:00
i915_request.h drm/i915/ringbuffer: Fix context restore upon reset 2018-06-11 14:03:47 +01:00
i915_scheduler.h drm/i915: Pack params to engine->schedule() into a struct 2018-04-18 21:09:11 +01:00
i915_selftest.h
i915_suspend.c
i915_sw_fence.c drm/i915/fence: Separate timeout mechanism for awaiting on dma-fences 2018-01-15 10:29:18 +00:00
i915_sw_fence.h
i915_syncmap.c drm/i915: Fix kerneldoc parameter markup 2018-02-08 15:08:51 +00:00
i915_syncmap.h
i915_sysfs.c drm/i915: Kick the rps worker when changing the boost frequency 2018-03-12 11:24:49 -07:00
i915_timeline.c drm/i915: Split i915_gem_timeline into individual timelines 2018-05-02 23:57:18 +01:00
i915_timeline.h drm/i915: Split i915_gem_timeline into individual timelines 2018-05-02 23:57:18 +01:00
i915_trace_points.c
i915_trace.h drm/i915/ringbuffer: Fix context restore upon reset 2018-06-11 14:03:47 +01:00
i915_utils.h drm/i915: Retire requests along rings 2018-04-30 16:01:18 +01:00
i915_vgpu.c drm/i915/gtt: Rename i915_hw_ppgtt base member 2018-06-05 21:11:20 +01:00
i915_vgpu.h drm/i915: Add new vGPU cap info bit VGT_CAPS_HUGE_GTT 2018-06-05 16:57:01 +03:00
i915_vma.c drm/i915: Decouple vma vfuncs from vm 2018-06-07 21:53:11 +01:00
i915_vma.h drm/i915: Decouple vma vfuncs from vm 2018-06-07 21:53:11 +01:00
intel_acpi.c
intel_atomic_plane.c drm/i915: Enable display workaround 827 for all planes, v2. 2018-05-11 09:53:22 +02:00
intel_atomic.c drm/i915: Change use get_new_plane_state instead of existing plane state 2018-04-09 15:58:53 +02:00
intel_audio.c drm/i915/audio: Fix audio detection issue on GLK 2018-04-18 14:26:15 +03:00
intel_bios.c drm/i915: be more strict about HAS_PCH_NOP() usage 2018-06-11 10:21:18 +03:00
intel_bios.h
intel_breadcrumbs.c drm/i915: Allow init_breadcrumbs to be used from irq context 2018-05-19 12:50:58 +01:00
intel_cdclk.c drm/i915/skl: Add warn about unsupported CDCLK rates 2018-06-11 14:01:43 +03:00
intel_color.c Merge airlied/drm-next into drm-misc-next 2018-03-21 09:40:55 -04:00
intel_crt.c drm/i915: Clean up ADPA pipe select bits 2018-05-17 19:29:49 +03:00
intel_csr.c drm/i915: add support for specifying DMC firmware override by module param 2018-05-02 13:05:01 +03:00
intel_ddi.c drm/i915/icl: Calculate link clock using the new registers 2018-06-01 16:15:35 -07:00
intel_device_info.c drm/i915: prefer INTEL_GEN() over INTEL_INFO()->gen 2018-04-26 18:14:29 +03:00
intel_device_info.h drm/i915/icl: Added ICL 11 slice, subslice and EU fuse detection 2018-03-21 10:36:33 +02:00
intel_display.c drm/i915/icl: introduce tc_port 2018-06-01 16:04:56 -07:00
intel_display.h drm/i915/icl: introduce tc_port 2018-06-01 16:04:56 -07:00
intel_dp_aux_backlight.c
intel_dp_link_training.c drm/i915/dp: move link_bw and rate_select debugging where used 2018-04-26 18:21:02 +03:00
intel_dp_mst.c drm/i915/dp: Send DPCD ON for MST before phy_up 2018-04-07 18:26:15 -04:00
intel_dp.c drm/i915/psr: Check for SET_POWER_CAPABLE bit at PSR init time. 2018-05-24 16:15:14 +03:00
intel_dpio_phy.c drm/i915/gen9_lp: Increase DDI PHY0 power well enabling timeout 2018-04-10 13:12:22 +03:00
intel_dpll_mgr.c drm/i915/icl: Get DDI clock for ICL based on PLLs. 2018-06-01 16:14:38 -07:00
intel_dpll_mgr.h drm/i915/icl: Get DDI clock for ICL based on PLLs. 2018-06-01 16:14:38 -07:00
intel_drv.h drm/i915/icl: introduce tc_port 2018-06-01 16:04:56 -07:00
intel_dsi_dcs_backlight.c
intel_dsi_pll.c
intel_dsi_vbt.c drm/i915/dsi: improve dphy param limits logging 2018-04-19 15:20:10 +03:00
intel_dsi.c drm/i915: s/plane/i9xx_plane/ 2018-06-01 18:40:19 +03:00
intel_dsi.h
intel_dvo.c Revert "drm/i915/edp: Allow alternate fixed mode for eDP if available." 2018-05-22 12:36:05 +03:00
intel_engine_cs.c drm/i915/ringbuffer: Fix context restore upon reset 2018-06-11 14:03:47 +01:00
intel_fbc.c drm/i915: Add debugfs file to clear FIFO underruns. 2018-04-10 16:29:24 +02:00
intel_fbdev.c drm/i915: Use intel_fb_obj() everywhere 2018-05-22 09:44:02 +01:00
intel_fifo_underrun.c
intel_frontbuffer.c drm/i915/psr: Nuke PSR support for VLV and CHV 2018-05-24 16:05:19 +03:00
intel_frontbuffer.h
intel_gpu_commands.h drm/i915: Split GPU commands definitions into separate header 2018-03-15 10:00:03 +00:00
intel_guc_ads.c drm/i915: Wrap engine->context_pin() and engine->context_unpin() 2018-04-30 16:01:13 +01:00
intel_guc_ads.h drm/i915/guc : Decoupling ADS and logs from submission 2018-01-03 14:02:10 +00:00
intel_guc_ct.c drm/i915/guc: Replace %phn with %ph 2018-04-10 17:15:29 +01:00
intel_guc_ct.h drm/i915/guc: Prepare to process incoming requests from CT 2018-03-28 20:35:17 +01:00
intel_guc_fw.c drm/i915/uc: Fetch uC firmware in init_early 2018-03-23 17:03:24 +00:00
intel_guc_fw.h drm/i915/guc: Move firmware selection to init_early 2017-12-06 14:41:47 +00:00
intel_guc_fwif.h drm/i915/guc: Remove GUC_CTL_DEVICE_INFO parameter 2018-04-13 13:23:02 +01:00
intel_guc_log.c drm/i915/guc: Handle GuC log flush event in dedicated function 2018-03-21 15:09:14 +00:00
intel_guc_log.h drm/i915/guc: Handle GuC log flush event in dedicated function 2018-03-21 15:09:14 +00:00
intel_guc_reg.h drm/i915/guc: Check the locking status of GuC WOPCM registers 2018-03-14 15:35:37 +02:00
intel_guc_submission.c drm/i915/gtt: Rename i915_hw_ppgtt base member 2018-06-05 21:11:20 +01:00
intel_guc_submission.h drm/i915/guc: Move GuC workqueue allocations outside of the mutex 2017-12-14 08:06:54 +00:00
intel_guc.c drm/i915/gtt: Rename i915_hw_ppgtt base member 2018-06-05 21:11:20 +01:00
intel_guc.h drm/i915/guc: Handle default action received over CT 2018-03-28 20:35:18 +01:00
intel_gvt.c drm/i915/guc: Introduce USES_GUC_xxx helper macros 2017-12-06 14:41:49 +00:00
intel_gvt.h
intel_hangcheck.c drm/i915: Reset the hangcheck timestamp before repeating a seqno 2018-05-03 10:43:45 +01:00
intel_hdcp.c drm/i915: Fix memory leak in intel_hdcp auth 2018-04-06 09:57:31 +03:00
intel_hdmi.c drm/i915: Clean up SDVO pipe select bits 2018-05-17 19:33:38 +03:00
intel_hotplug.c drm/i915/icl: HPD pin for port F 2018-03-23 14:59:09 -07:00
intel_huc_fw.c drm/i915/uc: Fetch uC firmware in init_early 2018-03-23 17:03:24 +00:00
intel_huc_fw.h drm/i915/uc: Make GuC/HuC fw fetch and loading functions/file structure symmetric 2018-03-02 09:04:45 +00:00
intel_huc.c drm/i915/huc: Check HuC status in dedicated function 2018-03-21 15:04:28 +00:00
intel_huc.h drm/i915/huc: Check HuC status in dedicated function 2018-03-21 15:04:28 +00:00
intel_i2c.c drm/i915: be more strict about HAS_PCH_NOP() usage 2018-06-11 10:21:18 +03:00
intel_lpe_audio.c drm/i915: Avoid leaking lpe audio platdev.data 2018-02-08 17:28:53 +00:00
intel_lrc_reg.h drm/i915/icl: Add Indirect Context Offset for Gen11 2018-03-07 15:07:39 +02:00
intel_lrc.c drm/i915/gtt: Rename i915_hw_ppgtt base member 2018-06-05 21:11:20 +01:00
intel_lrc.h drm/i915: Store a pointer to intel_context in i915_request 2018-05-18 09:35:22 +01:00
intel_lspcon.c drm/i915: For HPD connected port use hpd_pin instead of port. 2018-01-30 10:24:19 -08:00
intel_lvds.c drm/i915: Consult VBT "LVDS config" bits to determine whether internal LVDS is present 2018-05-25 18:00:26 +03:00
intel_mocs.c drm/i915/icl: Add configuring MOCS in new Icelake engines 2018-05-03 16:41:04 -07:00
intel_mocs.h drm/i915: Rename drm_i915_gem_request to i915_request 2018-02-21 20:57:22 +00:00
intel_modes.c drm/i915: remove redundant ELD connector type update 2018-01-19 11:58:48 +02:00
intel_opregion.c drm/i915: Move opregion definitions to dedicated intel_opregion.h 2017-12-22 09:19:48 +00:00
intel_opregion.h drm/i915: Move opregion definitions to dedicated intel_opregion.h 2017-12-22 09:19:48 +00:00
intel_overlay.c drm/i915/frontbuffer: Pull frontbuffer_flush out of gem_obj_pin_to_display 2018-03-13 13:49:39 -07:00
intel_panel.c Revert "drm/i915/edp: Allow alternate fixed mode for eDP if available." 2018-05-22 12:36:05 +03:00
intel_pipe_crc.c i915: Convert to use match_string() helper 2018-05-04 10:23:43 +03:00
intel_pm.c drm/i915/icl: Don't update enabled dbuf slices struct until updated in hw 2018-06-04 16:53:55 -07:00
intel_psr.c drm/i915/psr: Set idle frame count based on sink synchronization latency 2018-05-29 12:53:15 -07:00
intel_renderstate_gen6.c
intel_renderstate_gen7.c
intel_renderstate_gen8.c
intel_renderstate_gen9.c
intel_renderstate.h
intel_ringbuffer.c drm/i915/ringbuffer: Fix context restore upon reset 2018-06-11 14:03:47 +01:00
intel_ringbuffer.h drm/i915/ringbuffer: Fix context restore upon reset 2018-06-11 14:03:47 +01:00
intel_runtime_pm.c drm/i915: Add documentation to gen9_set_dc_state() 2018-05-07 17:42:22 +03:00
intel_sdvo_regs.h
intel_sdvo.c drm/i915: Clean up SDVO pipe select bits 2018-05-17 19:33:38 +03:00
intel_sideband.c
intel_sprite.c drm/i915: Fix sprite destination colorkeying on SKL+ 2018-06-08 21:20:21 +03:00
intel_tv.c drm/i915: Clean up TV pipe select bits 2018-05-17 19:38:12 +03:00
intel_uc_fw.c drm/i915/guc: Fix null pointer dereference when GuC FW is not available 2018-03-23 17:03:24 +00:00
intel_uc_fw.h drm/i915/firmware: Correct URL for firmware 2018-05-02 13:40:17 -07:00
intel_uc.c drm/i915/uc: Trivial s/dev_priv/i915 in intel_uc.c 2018-05-25 20:28:54 +01:00
intel_uc.h drm/i915/uc: Fetch uC firmware in init_early 2018-03-23 17:03:24 +00:00
intel_uncore.c drm/i915: Add WaKBLVECSSemaphoreWaitPoll 2018-06-08 12:16:20 +03:00
intel_uncore.h drm/i915/icl: Check for fused-off VDBOX and VEBOX instances 2018-03-20 16:26:28 +02:00
intel_vbt_defs.h drm/i915/icl: Map VBT DDC Pin to BSpec DDC Pin 2018-06-01 16:13:54 -07:00
intel_wopcm.c drm/i915: Use correct reST syntax for WOPCM and GuC kernel-doc diagrams 2018-03-28 14:42:56 +03:00
intel_wopcm.h drm/i915/guc: Check the locking status of GuC WOPCM registers 2018-03-14 15:35:37 +02:00
intel_workarounds.c drm/i915: Add WaKBLVECSSemaphoreWaitPoll 2018-06-08 12:16:20 +03:00
intel_workarounds.h drm/i915: Check whitelist registers across resets 2018-04-14 18:36:45 +01:00
Kconfig
Kconfig.debug drm/i915/guc: Trace messages from CT while in debug 2018-03-28 20:38:23 +01:00
Makefile drm/i915/selftests: Refactor common flush_test() 2018-05-08 12:44:31 +01:00