aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/pci
diff options
context:
space:
mode:
authorWarner Losh <imp@FreeBSD.org>2004-04-09 20:41:18 +0000
committerWarner Losh <imp@FreeBSD.org>2004-04-09 20:41:18 +0000
commitbbecd97c0ba40ec47d3b0f44668e6b2745729595 (patch)
treefdfc8cbb14e4d05da83d561e9a0d40364f4baa08 /sys/dev/pci
parentd1006b25a939ffbe8ddfb5695648a37cadc294f9 (diff)
Notes
Diffstat (limited to 'sys/dev/pci')
-rw-r--r--sys/dev/pci/pci.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/sys/dev/pci/pci.c b/sys/dev/pci/pci.c
index 3da138674dc46..cf9ffe2b8f473 100644
--- a/sys/dev/pci/pci.c
+++ b/sys/dev/pci/pci.c
@@ -1703,9 +1703,11 @@ pci_cfg_restore(device_t dev, struct pci_devinfo *dinfo)
*/
if (dinfo->cfg.hdrtype != 0)
return;
- printf("pci%d:%d:%d: setting power state D0\n", dinfo->cfg.bus,
- dinfo->cfg.slot, dinfo->cfg.func);
- pci_set_powerstate(dev, PCI_POWERSTATE_D0);
+ if (pci_get_powerstate(dev) != PCI_POWERSTATE_D0) {
+ printf("pci%d:%d:%d: setting power state D0\n", dinfo->cfg.bus,
+ dinfo->cfg.slot, dinfo->cfg.func);
+ pci_set_powerstate(dev, PCI_POWERSTATE_D0);
+ }
for (i = 0; i < dinfo->cfg.nummaps; i++)
pci_write_config(dev, PCIR_MAPS + i * 4, dinfo->cfg.bar[i], 4);
pci_write_config(dev, PCIR_BIOS, dinfo->cfg.bios, 4);
@@ -1768,8 +1770,10 @@ pci_cfg_save(device_t dev, struct pci_devinfo *dinfo, int setstate)
*/
cls = pci_get_class(dev);
if (setstate && cls != PCIC_DISPLAY && cls != PCIC_MEMORY) {
- pci_set_powerstate(dev, PCI_POWERSTATE_D3);
- printf("pci%d:%d:%d: setting power state D3\n", dinfo->cfg.bus,
- dinfo->cfg.slot, dinfo->cfg.func);
+ if (pci_get_powerstate(dev) != PCI_POWERSTATE_D3) {
+ printf("pci%d:%d:%d: setting power state D3\n", dinfo->cfg.bus,
+ dinfo->cfg.slot, dinfo->cfg.func);
+ pci_set_powerstate(dev, PCI_POWERSTATE_D3);
+ }
}
}