On Friday, May 11, 2012, Rafael J. Wysocki wrote:
On Friday, May 11, 2012, Lin Ming wrote:
On Fri, May 11, 2012 at 2:28 AM, Rafael J. Wysocki <rjw@suse.de> wrote:
On Wednesday, May 09, 2012, Cristian Rodríguez wrote:
Hi:
Since 3.4rc6 I am not able to "turn off" unused Nvidia "optimus" card, either with 3rd party modules or vga_switchero.
In rc5 it worked fine, now I get:
a) with third party bbswitch module.
bbswitch: Found integrated VGA device 0000:00:02.0: \_SB_.PCI0.GFX0 bbswitch: Found discrete VGA device 0000:01:00.0: \_SB_.PCI0.PEG0.PEGP bbswitch: detected an Optimus _DSM function bbswitch: disabling discrete graphics bbswitch: Result of Optimus _DSM call: 11000059 pci 0000:01:00.0: Refused to change power state, currently in D0 ACPI: Device does not support D3 bbswitch: Succesfully loaded. Discrete card 0000:01:00.0 is on
Ok, third party module may be buggy and I don't expect anyone here to support it, so I went to try kernel vga_switchero..
VGA switcheroo: switched nouveau off [drm] nouveau 0000:01:00.0: Disabling display... [drm] nouveau 0000:01:00.0: Disabling fbcon... [drm] nouveau 0000:01:00.0: Unpinning framebuffer(s)... [drm] nouveau 0000:01:00.0: Evicting buffers... [drm] nouveau 0000:01:00.0: Idling channels... [drm] nouveau 0000:01:00.0: Suspending GPU objects... [drm] nouveau 0000:01:00.0: And we're gone! ACPI: Device does not support D3
This message is from __acpi_bus_set_power() which complains that the device's "valid" flag is not set for D3_HOT (otherwise it would print D4, which is a bug on its own, BTW).
Now, the flag isn't set for D3_HOT (not _PR3 present, quite evidently), so I guess what happens is that the driver asks the device to go into PCI_D3hot and acpi_pci_set_power_state() calls acpi_bus_set_power() with state equal to ACPI_STATE_D3_HOT.
Christian, does the patch below help?
Rafael
--- drivers/pci/pci-acpi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
Index: linux/drivers/pci/pci-acpi.c =================================================================== --- linux.orig/drivers/pci/pci-acpi.c +++ linux/drivers/pci/pci-acpi.c @@ -223,7 +223,7 @@ static int acpi_pci_set_power_state(stru [PCI_D0] = ACPI_STATE_D0, [PCI_D1] = ACPI_STATE_D1, [PCI_D2] = ACPI_STATE_D2, - [PCI_D3hot] = ACPI_STATE_D3_HOT, + [PCI_D3hot] = ACPI_STATE_D3, [PCI_D3cold] = ACPI_STATE_D3 }; int error = -EINVAL; --
Christian? Ping ... -- To unsubscribe, e-mail: opensuse-kernel+unsubscribe@opensuse.org To contact the owner, e-mail: opensuse-kernel+owner@opensuse.org