On Tuesday 05 January 2010, Jesse Barnes wrote: > On Sun, 27 Dec 2009 21:00:33 +0100 > "Rafael J. Wysocki" <rjw@xxxxxxx> wrote: > > > From: Rafael J. Wysocki <rjw@xxxxxxx> > > > > Having read the PM part of the PCIe 2.0 specification more carefully > > I think that it was a mistake to restrict the wake-up enable > > propagation to non-PCIe devices, because if we do not request > > control of the root ports' PME registers via OSC, PCIe PME is > > supposed to be handled by the platform, just like the non-PCIe PME. > > Even if we do that, the wake-up propagation is done to allow the > > devices to wake up the system from sleep states which involves the > > platform anyway, so it won't hurt. > > > > Signed-off-by: Rafael J. Wysocki <rjw@xxxxxxx> > > --- > > drivers/pci/pci-acpi.c | 10 ++-------- > > 1 file changed, 2 insertions(+), 8 deletions(-) > > > > Index: linux-2.6/drivers/pci/pci-acpi.c > > =================================================================== > > --- linux-2.6.orig/drivers/pci/pci-acpi.c > > +++ linux-2.6/drivers/pci/pci-acpi.c > > @@ -112,11 +112,7 @@ static bool acpi_pci_can_wakeup(struct p > > static void acpi_pci_propagate_wakeup_enable(struct pci_bus *bus, > > bool enable) { > > while (bus->parent) { > > - struct pci_dev *bridge = bus->self; > > - int ret; > > - > > - ret = acpi_pm_device_sleep_wake(&bridge->dev, > > enable); > > - if (!ret || pci_is_pcie(bridge)) > > + if (!acpi_pm_device_sleep_wake(&bus->self->dev, > > enable)) return; > > bus = bus->parent; > > } > > @@ -131,9 +127,7 @@ static int acpi_pci_sleep_wake(struct pc > > if (acpi_pci_can_wakeup(dev)) > > return acpi_pm_device_sleep_wake(&dev->dev, enable); > > > > - if (!pci_is_pcie(dev)) > > - acpi_pci_propagate_wakeup_enable(dev->bus, enable); > > - > > + acpi_pci_propagate_wakeup_enable(dev->bus, enable); > > return 0; > > } > > Seems ok to try it out, but as usual with this sort of thing, the real > question is, "What does Windows do?", since wakeup enable ACPI support > for PCIe devices is likely broken unless Windows uses it. Well, that's in the Linus' tree already, so I guess we're going to learn. ;-) Seriously, I think that Windows actually uses ACPI wake-up support for PCIe devices. On my Toshiba Portege R500 the BIOS doesn't even allow us to use the native PCIe PME mechanism directly, so the patch is correct IMO. Rafael -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html