linux/drivers
Matthew Garrett 10f6dc7eed PCI: Rework ASPM disable code
Right now we forcibly clear ASPM state on all devices if the BIOS indicates
that the feature isn't supported. Based on the Microsoft presentation
"PCI Express In Depth for Windows Vista and Beyond", I'm starting to think
that this may be an error. The implication is that unless the platform
grants full control via _OSC, Windows will not touch any PCIe features -
including ASPM. In that case clearing ASPM state would be an error unless
the platform has granted us that control.

This patch reworks the ASPM disabling code such that the actual clearing
of state is triggered by a successful handoff of PCIe control to the OS.
The general ASPM code undergoes some changes in order to ensure that the
ability to clear the bits isn't overridden by ASPM having already been
disabled. Further, this theoretically now allows for situations where
only a subset of PCIe roots hand over control, leaving the others in the
BIOS state.

It's difficult to know for sure that this is the right thing to do -
there's zero public documentation on the interaction between all of these
components. But enough vendors enable ASPM on platforms and then set this
bit that it seems likely that they're expecting the OS to leave them alone.

Measured to save around 5W on an idle Thinkpad X220.

Signed-off-by: Matthew Garrett <mjg@redhat.com>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
2012-01-06 12:10:26 -08:00
..
accessibility
acpi PCI: Rework ASPM disable code 2012-01-06 12:10:26 -08:00
amba
ata pata_of_platform: Add missing CONFIG_OF_IRQ dependency. 2011-12-22 15:00:32 -05:00
atm
auxdisplay
base PM / Driver core: leave runtime PM enabled during system shutdown 2011-12-07 22:26:56 +01:00
bcma
block Merge branch 'for-linus' of git://git.kernel.dk/linux-block 2011-12-16 10:05:14 -08:00
bluetooth Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless into for-davem 2011-12-09 14:07:12 -05:00
cdrom
char ipmi_watchdog: restore settings when BMC reset 2011-12-20 10:25:04 -08:00
clk
clocksource Merge branch 'modsplit-Oct31_2011' of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux 2011-11-06 19:44:47 -08:00
connector
cpufreq [CPUFREQ] db8500: fix build error due to undeclared i variable 2011-11-11 22:28:33 -05:00
cpuidle Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux 2011-11-07 10:13:52 -08:00
crypto Merge git://github.com/herbertx/crypto 2011-11-25 21:55:07 -08:00
dca
devfreq PM / devfreq: correct Kconfig dependency 2011-11-14 23:31:35 +01:00
dio
dma dma: MX3_IPU fix depends 2011-12-19 12:26:07 +01:00
edac drivers/edac/mpc85xx_edac.c: fix memory controller compatible for edac 2011-11-24 01:59:38 -06:00
eisa
firewire Merge branch 'modsplit-Oct31_2011' of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux 2011-11-06 19:44:47 -08:00
firmware Merge branch 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/ibft 2011-12-15 14:16:47 -08:00
gpio gpio: Fix DA9052 GPIO build errors. 2011-12-15 11:25:43 -07:00
gpu drm/radeon/kms/atom: fix possible segfault in pm setup 2012-01-03 09:17:16 +00:00
hid Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid 2011-12-02 08:25:46 -08:00
hv
hwmon hwmon: (jz4740) Staticise jz4740_hwmon_driver 2011-12-12 08:31:21 -08:00
hwspinlock Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux 2011-11-08 18:34:16 -08:00
i2c i2c-eg20t: correct the driver init order of pch_i2c_probe() 2011-12-18 11:46:42 +00:00
ide Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/ide 2011-11-18 22:04:12 -02:00
idle Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux 2011-11-07 10:13:52 -08:00
ieee802154
infiniband Merge branches 'cma', 'mlx4' and 'qib' into for-next 2011-12-19 09:19:49 -08:00
input Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2011-12-30 13:42:41 -08:00
iommu Merge branch 'iommu/fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu 2011-12-29 17:36:15 -08:00
isdn isdn: avoid copying too long drvid 2011-11-29 18:39:37 -05:00
leds Revert "leds: save the delay values after a successful call to blink_set()" 2011-11-15 22:41:50 -02:00
lguest lguest: add export.h to lguest files for THIS_MODULE/EXPORT_SYMBOL 2011-10-31 19:32:13 -04:00
macintosh m68k/irq: Remove obsolete IRQ_FLG_* users 2011-11-08 22:35:48 +01:00
mca
md md/bitmap: It is OK to clear bits during recovery. 2011-12-23 09:57:48 +11:00
media gspca: Fix falling back to lower isoc alt settings 2011-12-31 11:53:58 -08:00
memstick
message
mfd mfd: Include linux/io.h to jz4740-adc 2011-12-20 18:53:26 +01:00
misc Merge branch 'char-misc-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc 2011-11-21 20:36:05 -08:00
mmc Merge branch 'fixes' of http://ftp.arm.linux.org.uk/pub/linux/arm/kernel/git-cur/linux-2.6-arm 2011-12-30 13:45:34 -08:00
mtd mtd: plat_ram: call mtd_device_register only if partition data exists 2011-12-19 11:13:52 +00:00
net skge: restore rx multicast filter on resume and after config changes 2011-12-30 23:32:45 -05:00
nfc
nubus
of dt/device: Fix auxdata matching to handle entries without a name override 2011-12-12 14:41:45 -07:00
oprofile oprofile: Fix uninitialized memory access when writing to writing to oprofilefs 2011-12-19 17:18:43 +01:00
parisc
parport
pci PCI: Rework ASPM disable code 2012-01-06 12:10:26 -08:00
pcmcia Merge branch 'modsplit-Oct31_2011' of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux 2011-11-06 19:44:47 -08:00
pinctrl pinctrl: hide subsystem from the populace 2011-11-10 09:02:12 +01:00
platform toshiba_acpi: Fix machines that don't support HCI_SYSTEM_EVENT 2011-12-05 13:07:28 -05:00
pnp Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux 2011-11-07 10:13:52 -08:00
power x86/mrst: Battery fixes 2011-12-05 17:06:37 +01:00
pps pps gpio client: add missing dependency 2011-11-02 16:07:02 -07:00
ps3 powerpc/ps3: irq: Remove IRQF_DISABLED 2011-11-08 14:51:46 +11:00
ptp ptp: Fix clock_getres() implementation 2011-12-06 11:38:32 +01:00
rapidio rapidio/tsi721: modify PCIe capability settings 2011-12-09 07:50:29 -08:00
regulator regulator: twl: fix twl4030 support for smps regulators 2011-11-28 18:58:31 +00:00
rtc Revert "rtc: Expire alarms after the time is set." 2012-01-04 07:57:22 -08:00
s390 [SCSI] zfcp: return early from slave_destroy if slave_alloc returned early 2011-12-14 15:40:43 +04:00
sbus sbus: convert drivers/sbus/char/* to use module_platform_driver() 2011-12-04 10:46:58 -08:00
scsi [SCSI] fcoe: fix fcoe in a DCB environment by adding DCB notifiers to set skb priority 2011-12-15 11:02:07 +04:00
sfi
sh Merge branches 'sh/pm-runtime' and 'common/clkfwk' into sh-fixes-for-linus 2011-11-11 16:16:25 +09:00
sn
spi spi/gpio: fix section mismatch warning 2011-12-07 22:17:39 +01:00
ssb Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless into for-davem 2011-12-09 14:07:12 -05:00
staging staging: r8712u: Add new USB ID 2011-12-13 16:13:15 -08:00
target iscsi-target: Fix hex2bin warn_unused compile message 2011-12-06 06:00:59 +00:00
tc
telephony
thermal thermal: Prevent polling from happening during system suspend 2011-11-06 20:38:49 -05:00
tty Merge branch 'tty-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty 2011-11-21 20:36:46 -08:00
uio uio: Add module.h to implicit drivers/uio users 2011-10-31 19:32:10 -04:00
usb Merge branch 'for-greg' of git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb into usb-linus 2011-12-21 14:42:49 -08:00
uwb uwb: Add export.h for EXPORT_SYMBOL/THIS_MODULE as required 2011-10-31 19:32:19 -04:00
vhost
video viafb: correct sync polarity for OLPC DCON 2011-11-22 00:56:17 +00:00
virt
virtio virtio-pci: make reset operation safer 2011-11-24 13:04:48 +10:30
vlynq
w1 Merge branch 'modsplit-Oct31_2011' of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux 2011-11-06 19:44:47 -08:00
watchdog watchdog: iTCO_wdt.c - problems with newer hardware due to SMI clearing (part 2) 2011-12-27 20:35:59 +01:00
xen Revert "xen/pv-on-hvm kexec: add xs_reset_watches to shutdown watches from old kernel" 2011-12-19 09:30:35 -05:00
zorro
Kconfig
Makefile