Daniel Vetter
4cd53c0c8b
drm/i915: paper over missed irq issues with force wake voodoo
...
Two things seem to do the trick on my ivb machine here:
- prevent the gt from powering down while waiting for seqno
notification interrupts by grabbing the force_wake in get_irq (and
dropping it in put_irq again).
- ordering writes from the ring's CS by reading a CS register, ACTHD
seems to work.
Only the blt&bsd ring on ivb seem to be massively affected by this,
but for paranoia do this dance also on the render ring and on snb
(i.e. all gpus with forcewake).
Tested with Eric's glCopyPixels loop which without this patch scores a
missed irq every few seconds.
This patch needs my forcewake rework to use a spinlock instead of
dev->struct_mutex.
After crawling through docs a lot I've found the following nugget:
Internal doc "SNB GT PM Programming Guide", Section 4.3.1:
"GT does not generate interrupts while in RC6 (by design)"
So it looks like rc6 and irq generation are indeed related.
v2: Improve the comment per Eugeni Dodonov's suggestion.
v3: Add the documentation snipped. Also restrict the w/a to ivb only
for -fixes, as suggested by Keith Packard.
Cc: stable@kernel.org
Cc: Eric Anholt <eric@anholt.net>
Cc: Kenneth Graunke <kenneth@whitecape.org>
Cc: Eugeni Dodonov <eugeni.dodonov@intel.com>
Tested-by: Eugeni Dodonov <eugeni.dodonov@intel.com>
Reviewed-by: Eugeni Dodonov <eugeni.dodonov@intel.com>
Signed-Off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Keith Packard <keithp@keithp.com>
2012-01-19 12:28:57 -08:00
..
accessibility
acpi
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial
2012-01-08 13:21:22 -08:00
amba
Merge branch 'pm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
2012-01-08 13:10:57 -08:00
ata
Merge branch 'upstream-linus' of git://github.com/jgarzik/libata-dev
2012-01-10 10:19:17 -08:00
atm
auxdisplay
base
Merge branch 'dma-buf-merge' of git://people.freedesktop.org/~airlied/linux
2012-01-08 14:05:09 -08:00
bcma
block
Merge branch 'stable/for-linus-3.3' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen
2012-01-10 10:09:59 -08:00
bluetooth
Merge branch 'pm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
2012-01-08 13:10:57 -08:00
cdrom
fs: move code out of buffer.c
2012-01-03 22:54:07 -05:00
char
Merge branch 'drm-core-next' of git://people.freedesktop.org/~airlied/linux
2012-01-10 11:04:36 -08:00
clk
clk: add config option HAVE_CLK_PREPARE into Kconfig
2011-12-28 21:35:06 +08:00
clocksource
Merge branch 'for-linus' of git://ftp.arm.linux.org.uk/pub/linux/arm/kernel/git-cur/linux-2.6-arm
2012-01-06 18:15:25 -08:00
connector
cpufreq
Merge branch 'driver-core-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core
2012-01-07 12:03:30 -08:00
cpuidle
cpu: convert 'cpu' and 'machinecheck' sysdev_class to a regular subsystem
2011-12-21 14:29:42 -08:00
crypto
dca
devfreq
dio
dma
clock management changes for i.MX
2012-01-09 14:44:15 -08:00
edac
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial
2012-01-08 13:21:22 -08:00
eisa
firewire
firmware
Merge branch 'for-linus2' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2012-01-08 12:19:57 -08:00
gpio
Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl
2012-01-10 10:19:57 -08:00
gpu
drm/i915: paper over missed irq issues with force wake voodoo
2012-01-19 12:28:57 -08:00
hid
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid
2012-01-10 10:48:28 -08:00
hv
Merge branch 'usb-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb
2012-01-09 12:09:47 -08:00
hwmon
Merge branch 'hwmon-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging
2012-01-08 13:39:24 -08:00
hwspinlock
i2c
Driver specific changes
2012-01-09 14:39:22 -08:00
ide
idle
ieee802154
infiniband
infiniband changes for 3.3 merge window
2012-01-08 14:05:48 -08:00
input
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
2012-01-10 10:55:52 -08:00
iommu
Merge branch 'core-memblock-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2012-01-06 07:54:53 -08:00
isdn
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial
2012-01-08 13:21:22 -08:00
leds
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial
2012-01-08 13:21:22 -08:00
lguest
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
2012-01-06 17:22:09 -08:00
macintosh
Merge branch 'driver-core-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core
2012-01-07 12:03:30 -08:00
mca
md
md update for 3.3
2012-01-08 13:28:33 -08:00
media
Cleanups on various subarchitectures
2012-01-09 14:21:03 -08:00
memstick
message
SCSI updates for post 3.2 merge window
2012-01-10 10:36:08 -08:00
mfd
Driver specific changes
2012-01-09 14:39:22 -08:00
misc
Merge branch 'char-misc-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc
2012-01-09 12:08:59 -08:00
mmc
clock management changes for i.MX
2012-01-09 14:44:15 -08:00
mtd
clock management changes for i.MX
2012-01-09 14:44:15 -08:00
net
Merge branch 'stable/for-linus-3.3' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen
2012-01-10 10:09:59 -08:00
nfc
Merge branch 'driver-core-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core
2012-01-07 12:03:30 -08:00
nubus
of
devicetree/next changes queued for v3.3 merge window
2012-01-07 12:18:52 -08:00
oprofile
Merge branch 'perf-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2012-01-06 08:02:58 -08:00
parisc
parport
Merge branch 'tty-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty
2012-01-09 12:09:24 -08:00
pci
Merge branch 'stable/for-linus-3.3' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen
2012-01-10 10:09:59 -08:00
pcmcia
pcmcia: pxa: replace IRQ_GPIO() with gpio_to_irq()
2011-12-28 10:14:04 +00:00
pinctrl
pinctrl: remove unnecessary max pin number
2012-01-03 09:10:09 +01:00
platform
Merge branch 'pm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
2012-01-08 13:10:57 -08:00
pnp
power
switch ->is_visible() to returning umode_t
2012-01-03 22:54:55 -05:00
pps
ps3
ptp
rapidio
regulator
regulator: set constraints.apply_uV to 0 in of_get_fixed_voltage_config
2012-01-06 11:01:09 -08:00
rtc
Driver specific changes
2012-01-09 14:39:22 -08:00
s390
Merge branch 'char-misc-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc
2012-01-09 12:08:59 -08:00
sbus
scsi
SCSI updates for post 3.2 merge window
2012-01-10 10:36:08 -08:00
sfi
sh
Merge branch 'pm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
2012-01-08 13:10:57 -08:00
sn
spi
Cleanups for the Samsung platforms
2012-01-09 14:30:28 -08:00
ssb
staging
Merge branch 'drm-core-next' of git://people.freedesktop.org/~airlied/linux
2012-01-10 11:04:36 -08:00
target
tc
telephony
thermal
tty
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-next
2012-01-09 14:47:06 -08:00
uio
usb
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid
2012-01-10 10:48:28 -08:00
uwb
Merge branch 'usb-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb
2012-01-09 12:09:47 -08:00
vhost
video
Merge branch 'stable/for-linus-3.3' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen
2012-01-10 10:09:59 -08:00
virt
virtio
vlynq
w1
watchdog
Merge git://www.linux-watchdog.org/linux-watchdog
2012-01-10 10:29:23 -08:00
xen
Merge branch 'drm-core-next' of git://people.freedesktop.org/~airlied/linux
2012-01-10 11:04:36 -08:00
zorro
misc latin1 to utf8 conversions
2012-01-02 13:04:55 +01:00
Kconfig
Makefile