[Nouveau] Nouveau: kernel hang on Optimus+Intel+NVidia GeForce 1060m

Nicolas Mercier mercier.nicolas at gmail.com
Wed Sep 13 09:37:01 UTC 2017

I am still looking for a solution. I have hacked around in the code and
found out the following:
- Nouveau prefers using PCIE power managemet over ACPI Optimus calls. I
tried to force it to use Optimus ACPI calls, but there was an error calling
the ACPI method so it bails out and uses PCIE PM anyway.
- I tried to debug the PCIE pm states which internally uses ACPI to turn
power on/off. I could print different statuses here and there.
When the power is switched off, ACPI calls turn the power off then the
kernel successfully puts the device in state D3Cold (also turning off power
to the PCI Express port). When waking up, ACPI turns the power on,
apparently successfully (Device [PEGP] transitioned to D0). But a read from
the PCI bus to get the power state & other flags return 65535 (~0) and the
kernel fails to set the device in D0 (although ACPI claims it is in D0)
The call to pci_raw_set_power_state (in drivers/pci/pci.c) seems to fail
because pci_read_config_word returns "~0" (and does not return any error

I have tried different things; if I use pcie_port_pm=off, the NVidia card
goes to state D3Hot (if I am not mistaken, its PCIE port is still powered)
but that did not fix it. I tried to turn on or off different PCI/PCIexpress
features such as hotplug, PM and so on. The only thing that works is that
PM is fully disabled, which equals to the device not being powered off, so
that would be equivalent to nouveau.runpm=0, which is not helping a lot. I
have tried to force pcie aspm by recompiling the ACPI table, still no luck.

I am still taking a look, but it seems like the problem comes from the
PCIExpress PM functions and ACPI, not directly from Nouveau

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/nouveau/attachments/20170913/7f7e1b3c/attachment.html>

More information about the Nouveau mailing list