-
Notifications
You must be signed in to change notification settings - Fork 79
Description
Hi,
So I'm using a T440s with a modern kernel that reports "Windows 2013" compatibility (and soon Windows 2015 with kernel 4.2). This breaks bbswitch because of some changes this triggers in the ACPI table. Manually overriding acpi_osi does fix the issue and allow the current bbswitch to work, but what I'm looking it here is how to make it work with the "new" Win 8.1 method of shutting down the card.
So the main symptoms of the issue are :
- Using vanilla bbswith : Switching OFF does put it to D3, but it's not entirely off. The power usage is lower but not as low as it should be (in my case, about 1W lower than full power while it should be more like 2.5W). Also, bbswith reports the card as "ON" because lspci still works fine and you can still access the config space. There is no way to turn the card back ON and so loading nvidia driver will actually crash trying to access a card that's only half powered.
- Using the bbswitch patched like in PR Fix ON/OFF handling on recent ThinkPad t440p BIOS #102 . This is the same effect, power down is not complete and you only save 1W instead of 2.5W. But at least you can turn the card ON and OFF properly. But once nvidia has been loaded, then it won't switch off at all ....
This is the DSDT table from the T440s with the latest bios (which even has Windows 10 support) :
http://pastebin.com/raw.php?i=C6Q3A8aa
The important thing to note is that when "Windown 2013" string is found, then OSYS is set to 0x07DD. This in turn cause VMSH to be set to 1. This in turn causes SB.PCI0.PEG_.VID_._PS3 to NOT call GPOF ... and so the card is never really turned off completely.
Now if you look at how GPOF can be called, you can see it will be called as part of NVP3 power resource which is PR3 ... but on the node SB.PCI0.PEG and not SB.PCI0.PEG_.VID_ !
So basically you need to put the PCIe root port (parent pci device) in D3 and not just the card.
I tested this and it indeed triggered the proper expected power saving and seemed to behave exactly like if I tweaked acpi_osi.