linux/drivers/gpu/drm/i915
Chris Wilson bcf9dcc1e6 drm/i915: Workaround hang with BSD and forcewake on SandyBridge
For reasons that are not apparent to anybody, 990bbdadab (drm/i915:
Group the GT routines together in both code and vtable) breaks the use
of the BitStream Decoder ring on SandyBridge. The active ingredient of
that patch is the conversion from a udelay(10) to a udelay(1) in the
busy-wait loop of waiting for the forcewake acknowledge. If we restore
that udelay(10) or insert another udelay(1) afterwards (or any wait
longer than 250ns) everything works again. An alternative is also to
remove any delay from the busy-wait loop.

Given that in the atomic sections we want to complete the wait as quick
as possible to avoid blocking the CPU for too long, it makes sense to
remove the delay altogether and simply spin on the exit condition until
it completes. So we replace the udelay(1) with cpu_relax().

Papers over regression from

commit 990bbdadab
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date:   Mon Jul 2 11:51:02 2012 -0300

    drm/i915: Group the GT routines together in both code and vtable

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=51738
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2012-08-06 10:43:29 +02:00
..
dvo_ch7xxx.c Drivers: i915: Fix all space related issues. 2011-09-19 18:01:47 -07:00
dvo_ch7017.c Drivers: i915: Fix all space related issues. 2011-09-19 18:01:47 -07:00
dvo_ivch.c Drivers: i915: Fix all space related issues. 2011-09-19 18:01:47 -07:00
dvo_sil164.c Drivers: i915: Fix all space related issues. 2011-09-19 18:01:47 -07:00
dvo_tfp410.c Drivers: i915: Fix all space related issues. 2011-09-19 18:01:47 -07:00
dvo.h drm: Make the .mode_fixup() operations mode argument a const pointer 2012-07-19 21:52:38 -04:00
i915_debugfs.c drm/i915: Add comments to explain the BSD tail write workaround 2012-07-20 12:21:37 +02:00
i915_dma.c drm/i915: unbreak lastclose for failed driver init 2012-07-25 10:40:00 +02:00
i915_drv.c drm: kill reclaim_buffers callback 2012-07-19 22:50:28 -04:00
i915_drv.h drm/i915: Add comments to explain the BSD tail write workaround 2012-07-20 12:21:37 +02:00
i915_gem_context.c drm/i915: remove unused variable 2012-08-05 22:39:53 +02:00
i915_gem_debug.c drm/i915: stop using dev->agp->base 2012-06-12 22:18:06 +02:00
i915_gem_dmabuf.c i915: add dma-buf vmap support for exporting vmapped buffer 2012-05-31 14:13:57 +01:00
i915_gem_evict.c drm: Add colouring to the range allocator 2012-07-16 05:59:37 +10:00
i915_gem_execbuffer.c drm/i915: Don't forget to apply SNB PIPE_CONTROL GTT workaround. 2012-08-05 21:45:01 +02:00
i915_gem_gtt.c i915: don't map imported dma-bufs for dmar. 2012-08-05 22:53:59 +02:00
i915_gem_stolen.c drm/i915: Split the stolen handling for GEM out of i915_dma.c 2012-05-03 11:18:11 +02:00
i915_gem_tiling.c drm/i915: Only the zap the VMA after updating the tiling parameters 2012-05-03 11:18:07 +02:00
i915_gem.c drm/i915: Add -EIO to the list of known errors for __wait_seqno 2012-07-25 10:39:57 +02:00
i915_ioc32.c drm/i915: [sparse] trivial sparse fixes 2012-04-18 10:34:49 +02:00
i915_irq.c drm/i915: Add comments to explain the BSD tail write workaround 2012-07-20 12:21:37 +02:00
i915_reg.h drm/i915: fix up PCH backlight #define mixup 2012-07-20 12:21:38 +02:00
i915_suspend.c drm/i915: wrap up gt powersave enabling functions 2012-06-25 21:07:03 +02:00
i915_sysfs.c drm/i915: simplify sysfs setup code 2012-06-01 10:00:57 +02:00
i915_trace_points.c drm/i915: [sparse] trivial sparse fixes 2012-04-18 10:34:49 +02:00
i915_trace.h drm/i915: improve i915_wait_request_begin trace 2012-05-25 09:55:15 +02:00
intel_acpi.c drm/i915: [sparse] trivial sparse fixes 2012-04-18 10:34:49 +02:00
intel_bios.c drm/i915/bios: cleanup return type of intel_parse_bios() 2012-06-27 10:17:51 +01:00
intel_bios.h drm/i915/bios: cleanup return type of intel_parse_bios() 2012-06-27 10:17:51 +01:00
intel_crt.c drm/i915: check whether we actually received an edid in detect_ddc 2012-07-20 12:21:38 +02:00
intel_ddi.c drm/i915: program FDI_RX TP and FDI delays 2012-07-05 15:09:03 +02:00
intel_display.c vlv: it might be wise if we initialised the flag value... 2012-07-26 09:47:31 +02:00
intel_dp.c drm/i915: try to train DP even harder 2012-07-20 12:21:39 +02:00
intel_drv.h drm/i915: Workaround hang with BSD and forcewake on SandyBridge 2012-08-06 10:43:29 +02:00
intel_dvo.c drm: Make the .mode_fixup() operations mode argument a const pointer 2012-07-19 21:52:38 -04:00
intel_fb.c drm/i915: Zero initialize mode_cmd 2012-07-05 13:27:58 +02:00
intel_hdmi.c drm: Make the .mode_fixup() operations mode argument a const pointer 2012-07-19 21:52:38 -04:00
intel_i2c.c i915: Remove silly test 2012-07-26 09:50:35 +02:00
intel_lvds.c drm/i915/lvds: ditch ->prepare special case 2012-07-25 10:39:59 +02:00
intel_modes.c drm/i915: kill intel_ddc_probe 2012-07-20 12:21:39 +02:00
intel_opregion.c drm/i915: [sparse] __iomem fixes for opregion 2012-05-03 11:18:00 +02:00
intel_overlay.c drm/i915: s/i915_wait_request/i915_wait_seqno/g 2012-05-25 14:18:42 +02:00
intel_panel.c drm/i915: Make intel_panel_get_backlight static. 2012-08-06 08:57:48 +02:00
intel_pm.c drm/i915: fix forcewake related hangs on snb 2012-07-27 08:23:28 +02:00
intel_ringbuffer.c drm/i915: missing error case in init status page 2012-07-20 12:21:40 +02:00
intel_ringbuffer.h drm/i915: disable flushing_list/gpu_write_list 2012-06-20 13:54:28 +02:00
intel_sdvo_regs.h drm/i915: properly handle interlaced bit for sdvo dtd conversion 2012-05-24 17:53:52 +02:00
intel_sdvo.c i915: fix error path leak in intel_sdvo_write_cmd 2012-07-26 09:50:04 +02:00
intel_sprite.c drm/i915: mask tiled bit when updating ILK sprites 2012-07-20 12:21:40 +02:00
intel_tv.c drm: Make the .mode_fixup() operations mode argument a const pointer 2012-07-19 21:52:38 -04:00
Makefile drm/i915: preliminary context support 2012-06-14 17:36:16 +02:00