PCI/PM: Fix config reg access for D3cold and bridge suspending
authorHuang Ying <ying.huang@intel.com>
Wed, 15 Aug 2012 01:43:03 +0000 (09:43 +0800)
committerBjorn Helgaas <bhelgaas@google.com>
Tue, 21 Aug 2012 23:34:24 +0000 (17:34 -0600)
commit3d8387efe1ad9eb5bfe8a2e58cdbd1b88b247eef
treea589e0ab38c2ecda5aff3792b677bd2b0c06b718
parentea8c88f13d9fb1d6b39a05bfa07ae076ca1c6803
PCI/PM: Fix config reg access for D3cold and bridge suspending

This patch fixes the following bug:

http://marc.info/?l=linux-pci&m=134338059022620&w=2

Where lspci does not work properly if a device and the corresponding
parent bridge (such as PCIe port) is suspended.  This is because the
device configuration space registers will be not accessible if the
corresponding parent bridge is suspended or the device is put into
D3cold state.

To solve the issue, the bridge/PCIe port connected to the device is
put into active state before read/write configuration space registers.
If the device is in D3cold state, it will be put into active state
too.

To avoid resume/suspend PCIe port for each configuration register
read/write, a small delay is added before the PCIe port to go
suspended.

Reported-by: Bjorn Mork <bjorn@mork.no>
Signed-off-by: Huang Ying <ying.huang@intel.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Rafael J. Wysocki <rjw@sisk.pl>
drivers/pci/pci-sysfs.c
drivers/pci/pcie/portdrv_pci.c