From 8ed4b7e1105542ce7f56cd3ef0e1c70836908133 Mon Sep 17 00:00:00 2001 From: "John W. Linville" Date: Wed, 14 Sep 2005 09:52:42 -0400 Subject: [PATCH] --- yaml --- r: 8931 b: refs/heads/master c: 32a3658533c6f4c6bf370dd730213e802464ef9b h: refs/heads/master i: 8929: 5134f8bccd801a9ec111abccb660e80d9e90d2a9 8927: 7b0ee1fe9937ded23f141a361c9c115196b5ebf0 v: v3 --- [refs] | 2 +- trunk/drivers/pci/pci.c | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index 2937f7b43c84..a80dd1138bde 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 186051d70444742bf1c2bc0257dd4696a3df66e3 +refs/heads/master: 32a3658533c6f4c6bf370dd730213e802464ef9b diff --git a/trunk/drivers/pci/pci.c b/trunk/drivers/pci/pci.c index 992db89adce7..259d247b7551 100644 --- a/trunk/drivers/pci/pci.c +++ b/trunk/drivers/pci/pci.c @@ -309,17 +309,25 @@ pci_set_power_state(struct pci_dev *dev, pci_power_t state) pci_read_config_word(dev, pm + PCI_PM_CTRL, &pmcsr); - /* If we're in D3, force entire word to 0. + /* If we're (effectively) in D3, force entire word to 0. * This doesn't affect PME_Status, disables PME_En, and * sets PowerState to 0. */ - if (dev->current_state >= PCI_D3hot) { - if (!(pmcsr & PCI_PM_CTRL_NO_SOFT_RESET)) + switch (dev->current_state) { + case PCI_UNKNOWN: /* Boot-up */ + if ((pmcsr & PCI_PM_CTRL_STATE_MASK) == PCI_D3hot + && !(pmcsr & PCI_PM_CTRL_NO_SOFT_RESET)) need_restore = 1; + /* Fall-through: force to D0 */ + case PCI_D3hot: + case PCI_D3cold: + case PCI_POWER_ERROR: pmcsr = 0; - } else { + break; + default: pmcsr &= ~PCI_PM_CTRL_STATE_MASK; pmcsr |= state; + break; } /* enter specified state */