svn commit: r214110 - in head/sys/dev: acpica pci
Jung-uk Kim
jkim at FreeBSD.org
Wed Oct 20 16:47:10 UTC 2010
Author: jkim
Date: Wed Oct 20 16:47:09 2010
New Revision: 214110
URL: http://svn.freebsd.org/changeset/base/214110
Log:
Introduce a new tunable 'hw.pci.do_power_suspend'. This tunable lets you
avoid PCI power state transition from D0 to D3 for suspending case. Default
is 1 or enabled.
Modified:
head/sys/dev/acpica/acpi_pci.c
head/sys/dev/pci/pci.c
head/sys/dev/pci/pci_pci.c
head/sys/dev/pci/pci_private.h
Modified: head/sys/dev/acpica/acpi_pci.c
==============================================================================
--- head/sys/dev/acpica/acpi_pci.c Wed Oct 20 16:40:14 2010 (r214109)
+++ head/sys/dev/acpica/acpi_pci.c Wed Oct 20 16:47:09 2010 (r214110)
@@ -179,7 +179,7 @@ acpi_pci_set_powerstate_method(device_t
*/
ACPI_SERIAL_BEGIN(pci_powerstate);
old_state = pci_get_powerstate(child);
- if (old_state < state) {
+ if (old_state < state && pci_do_power_suspend) {
error = pci_set_powerstate_method(dev, child, state);
if (error)
goto out;
Modified: head/sys/dev/pci/pci.c
==============================================================================
--- head/sys/dev/pci/pci.c Wed Oct 20 16:40:14 2010 (r214109)
+++ head/sys/dev/pci/pci.c Wed Oct 20 16:47:09 2010 (r214110)
@@ -257,6 +257,12 @@ SYSCTL_INT(_hw_pci, OID_AUTO, do_power_r
&pci_do_power_resume, 1,
"Transition from D3 -> D0 on resume.");
+int pci_do_power_suspend = 1;
+TUNABLE_INT("hw.pci.do_power_suspend", &pci_do_power_suspend);
+SYSCTL_INT(_hw_pci, OID_AUTO, do_power_suspend, CTLFLAG_RW,
+ &pci_do_power_suspend, 1,
+ "Transition from D0 -> D3 on suspend.");
+
static int pci_do_msi = 1;
TUNABLE_INT("hw.pci.enable_msi", &pci_do_msi);
SYSCTL_INT(_hw_pci, OID_AUTO, enable_msi, CTLFLAG_RW, &pci_do_msi, 1,
@@ -2954,7 +2960,9 @@ pci_suspend(device_t dev)
free(devlist, M_TEMP);
return (error);
}
- pci_set_power_children(dev, devlist, numdevs, PCI_POWERSTATE_D3);
+ if (pci_do_power_suspend)
+ pci_set_power_children(dev, devlist, numdevs,
+ PCI_POWERSTATE_D3);
free(devlist, M_TEMP);
return (0);
}
Modified: head/sys/dev/pci/pci_pci.c
==============================================================================
--- head/sys/dev/pci/pci_pci.c Wed Oct 20 16:40:14 2010 (r214109)
+++ head/sys/dev/pci/pci_pci.c Wed Oct 20 16:47:09 2010 (r214110)
@@ -447,7 +447,7 @@ pcib_suspend(device_t dev)
pcib_cfg_save(device_get_softc(dev));
error = bus_generic_suspend(dev);
- if (error == 0) {
+ if (error == 0 && pci_do_power_suspend) {
dstate = PCI_POWERSTATE_D3;
pcib = device_get_parent(device_get_parent(dev));
if (PCIB_POWER_FOR_SLEEP(pcib, dev, &dstate) == 0)
Modified: head/sys/dev/pci/pci_private.h
==============================================================================
--- head/sys/dev/pci/pci_private.h Wed Oct 20 16:40:14 2010 (r214109)
+++ head/sys/dev/pci/pci_private.h Wed Oct 20 16:47:09 2010 (r214110)
@@ -39,6 +39,7 @@
DECLARE_CLASS(pci_driver);
extern int pci_do_power_resume;
+extern int pci_do_power_suspend;
void pci_add_children(device_t dev, int domain, int busno,
size_t dinfo_size);
More information about the svn-src-all
mailing list