linux-uconsole/drivers/gpu/drm/i915
Konrad Rzeszutek Wilk 426729dcc7 drm/i915: make compact dma scatter lists creation work with SWIOTLB backend.
Git commit 90797e6d1e
("drm/i915: create compact dma scatter lists for gem objects") makes
certain assumptions about the under laying DMA API that are not always
correct.

On a ThinkPad X230 with an Intel HD 4000 with Xen during the bootup
I see:

[drm:intel_pipe_set_base] *ERROR* pin & fence failed
[drm:intel_crtc_set_config] *ERROR* failed to set mode on [CRTC:3], err = -28

Bit of debugging traced it down to dma_map_sg failing (in
i915_gem_gtt_prepare_object) as some of the SG entries were huge (3MB).

That unfortunately are sizes that the SWIOTLB is incapable of handling -
the maximum it can handle is a an entry of 512KB of virtual contiguous
memory for its bounce buffer. (See IO_TLB_SEGSIZE).

Previous to the above mention git commit the SG entries were of 4KB, and
the code introduced by above git commit squashed the CPU contiguous PFNs
in one big virtual address provided to DMA API.

This patch is a simple semi-revert - were we emulate the old behavior
if we detect that SWIOTLB is online. If it is not online then we continue
on with the new compact scatter gather mechanism.

An alternative solution would be for the the '.get_pages' and the
i915_gem_gtt_prepare_object to retry with smaller max gap of the
amount of PFNs that can be combined together - but with this issue
discovered during rc7 that might be too risky.

Reported-and-Tested-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
CC: Chris Wilson <chris@chris-wilson.co.uk>
CC: Imre Deak <imre.deak@intel.com>
CC: Daniel Vetter <daniel.vetter@ffwll.ch>
CC: David Airlie <airlied@linux.ie>
CC: <dri-devel@lists.freedesktop.org>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
2013-06-25 10:39:57 +10:00
..
dvo.h Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux 2012-10-03 23:29:23 -07:00
dvo_ch7xxx.c drm/i915/dvo-ch7xxx: fix get_hw_state 2012-10-12 10:59:11 +02:00
dvo_ch7017.c drm/i915/dvo: implement get_hw_state 2012-09-06 07:58:52 +02:00
dvo_ivch.c drm/i915/dvo: implement get_hw_state 2012-09-06 07:58:52 +02:00
dvo_ns2501.c drm/i915/dvo: implement get_hw_state 2012-09-06 07:58:52 +02:00
dvo_sil164.c drm/i915/dvo: implement get_hw_state 2012-09-06 07:58:52 +02:00
dvo_tfp410.c drm/i915/dvo: implement get_hw_state 2012-09-06 07:58:52 +02:00
i915_debugfs.c drm/i915: Scale ring, rather than ia, frequency on Haswell 2013-04-18 09:43:26 +02:00
i915_dma.c drm/i915: Map registers before GTT init 2013-04-18 09:43:12 +02:00
i915_drv.c drm/i915: Adding more reserved PCI IDs for Haswell. 2013-05-21 12:08:03 +02:00
i915_drv.h drm/i915: Restore fences after resume and GPU resets 2013-06-16 01:10:45 +02:00
i915_gem.c drm/i915: make compact dma scatter lists creation work with SWIOTLB backend. 2013-06-25 10:39:57 +10:00
i915_gem_context.c drm/i915: Use MLC (l3$) for context objects 2013-04-18 09:43:11 +02:00
i915_gem_debug.c UAPI: (Scripted) Convert #include "..." to #include <path/...> in drivers/gpu/ 2012-10-02 18:01:07 +01:00
i915_gem_dmabuf.c drm/i915: fix dmabuf vmap support 2013-05-01 16:09:31 +10:00
i915_gem_evict.c drm/i915: Create a gtt structure 2013-01-17 22:33:56 +01:00
i915_gem_execbuffer.c Merge tag 'drm-intel-next-2013-03-23' of git://people.freedesktop.org/~danvet/drm-intel into drm-next 2013-04-05 10:18:13 +10:00
i915_gem_gtt.c Revert "drm/i915: Calculate correct stolen size for GEN7+" 2013-05-07 18:59:09 +02:00
i915_gem_stolen.c Revert "drm/i915: set dummy page for stolen objects" 2013-03-27 17:13:44 +01:00
i915_gem_tiling.c drm/i915: Increase max fence pitch limit to 256KB on IVB+ 2013-04-18 09:43:20 +02:00
i915_ioc32.c UAPI: (Scripted) Convert #include "..." to #include <path/...> in drivers/gpu/ 2012-10-02 18:01:07 +01:00
i915_irq.c drm/i915: Add Reenable Timer to turn Hotplug Detection back on (v4) 2013-04-18 09:43:30 +02:00
i915_reg.h Revert "drm/i915: Calculate correct stolen size for GEN7+" 2013-05-07 18:59:09 +02:00
i915_suspend.c drm/i915: Restore fences after resume and GPU resets 2013-06-16 01:10:45 +02:00
i915_sysfs.c drm/i915: Return stored value from max freq sysfs entry 2013-04-18 09:43:21 +02:00
i915_trace.h drm/i915: Allow DRM_ROOT_ONLY|DRM_MASTER to submit privileged batchbuffers 2012-10-17 21:06:59 +02:00
i915_trace_points.c
i915_ums.c drm/i915: move DP save/restore into i915_ums.c 2013-01-31 11:50:04 +01:00
intel_acpi.c UAPI: (Scripted) Convert #include "..." to #include <path/...> in drivers/gpu/ 2012-10-02 18:01:07 +01:00
intel_bios.c drm/i915: set CPT FDI RX polarity bits based on VBT 2013-04-18 09:43:31 +02:00
intel_bios.h drm/i915: set CPT FDI RX polarity bits based on VBT 2013-04-18 09:43:31 +02:00
intel_crt.c Merge branch 'drm-intel-fixes' of git://people.freedesktop.org/~danvet/drm-intel into drm-next 2013-04-22 18:48:45 +10:00
intel_ddi.c drm/i915: hsw: fix link training for eDP on port-A 2013-05-04 10:24:56 +02:00
intel_display.c drm/i915: Quirk the pipe A quirk in the modeset state checker 2013-06-03 14:35:19 +02:00
intel_dp.c drm/i915: avoid premature DP AUX timeouts 2013-05-22 13:51:26 +02:00
intel_drv.h drm/i915: hsw: fix link training for eDP on port-A 2013-05-04 10:24:56 +02:00
intel_dvo.c drm/i915: Fall back to bit banging mode for DVO transmitter detection 2013-04-19 16:31:41 +02:00
intel_fb.c drm/i915: clear the stolen fb before resuming 2013-05-07 22:25:11 +02:00
intel_hdmi.c drm/i915: avoid full modeset when changing the color range properties 2013-04-23 13:52:57 +02:00
intel_i2c.c drm/i915: avoid premature DP AUX timeouts 2013-05-22 13:51:26 +02:00
intel_lvds.c drm/i915: no lvds quirk for hp t5740 2013-06-03 14:35:20 +02:00
intel_modes.c drm/i915: Add "Automatic" mode for the "Broadcast RGB" property 2013-01-20 13:09:44 +01:00
intel_opregion.c ACPI: Remove acpi_device dependency in acpi_device_set_id() 2013-03-24 23:49:38 +01:00
intel_overlay.c Merge tag 'drm-intel-next-2013-02-01' of git://people.freedesktop.org/~danvet/drm-intel into drm-next 2013-02-08 11:08:10 +10:00
intel_panel.c drm/i915: ensure single initialization and cleanup of backlight device 2013-04-18 09:43:23 +02:00
intel_pm.c drm/i915: Fix pipe enabled mask for pipe C in WM calculations 2013-05-01 21:17:22 +02:00
intel_ringbuffer.c drm/i915: Fix PIPE_CONTROL DW/QW write through global GTT on IVB+ 2013-02-20 00:21:47 +01:00
intel_ringbuffer.h Merge tag 'drm-intel-next-2012-12-21' of git://people.freedesktop.org/~danvet/drm-intel into drm-next 2013-01-17 20:34:08 +10:00
intel_sdvo.c drm/i915: prefer VBT modes for SVDO-LVDS over EDID 2013-06-10 10:13:34 +02:00
intel_sdvo_regs.h drm/i915: clear the entire sdvo infoframe buffer 2012-10-24 15:12:48 +02:00
intel_sprite.c drm/i915: sprite support for ValleyView v4 2013-04-02 20:28:53 +02:00
intel_tv.c drm/i915: (re)init HPD interrupt storm statistics 2013-04-18 09:43:29 +02:00
Makefile drm/i915: extract ums suspend/resume into i915_ums.c 2013-01-31 11:50:03 +01:00