]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
UBUNTU: SAUCE: pci/nvme: prevent WDC PC SN720 NVMe from entering D3 and being disabled
authorAceLan Kao <acelan.kao@canonical.com>
Thu, 29 Nov 2018 08:13:14 +0000 (16:13 +0800)
committerKleber Sacilotto de Souza <kleber.souza@canonical.com>
Mon, 14 Jan 2019 09:28:55 +0000 (09:28 +0000)
BugLink: https://bugs.launchpad.net/bugs/1805775
It leads to the power consumption increases 3.41W during s2idle, while it
consumes much less idle if forbidding put WDC NVMe to D3 and before
entering S2Idle.

Windows doesn't put NVMe to D3 in Modern Standby, and uses its own APST
feature to do the power management. To leverage its APST feature during
s2idle, we can't disable nvme device while suspending, too.

So, here is what we do to the driver:
- Prevent nvme from entering D3,
- Prevent nvme from being disabled when suspending.

Signed-off-by: AceLan Kao <acelan.kao at canonical.com>
Acked-by: Seth Forshee <seth.forshee@canonical.com>
Acked-by: Kai Heng Feng <kai.heng.feng@canonical.com>
Acked-by: Stefan Bader <stefan.bader@canonical.com>
Signed-off-by: Khalid Elmously <khalid.elmously@canonical.com>
drivers/nvme/host/pci.c
drivers/pci/quirks.c

index 63e8d3010d1cd57b934c5ab14ed10fc1c2a75114..eea4c99f3411a748931a1c58cfc98ebf10265365 100644 (file)
@@ -2717,6 +2717,8 @@ static const struct pci_device_id nvme_id_table[] = {
                .driver_data = NVME_QUIRK_LIGHTNVM, },
        { PCI_VDEVICE(SK_HYNIX, 0x1527),        /* Sk Hynix */
                .driver_data = NVME_QUIRK_NO_DISABLE, },
+       { PCI_DEVICE(0x15b7, 0x5002),   /* Sandisk */
+               .driver_data = NVME_QUIRK_NO_DISABLE, },
        { PCI_DEVICE_CLASS(PCI_CLASS_STORAGE_EXPRESS, 0xffffff) },
        { PCI_DEVICE(PCI_VENDOR_ID_APPLE, 0x2001) },
        { PCI_DEVICE(PCI_VENDOR_ID_APPLE, 0x2003) },
index 794eb4e0eed45526429047d10322f20e806477e6..2956ebbd83dc66fe1437524c4e5d3abdfe6d4181 100644 (file)
@@ -1190,6 +1190,7 @@ DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_VIA, PCI_ANY_ID,
                                PCI_CLASS_STORAGE_IDE, 8, quirk_no_ata_d3);
 DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SK_HYNIX, 0x1527, quirk_no_ata_d3);
 DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0xf1a6, quirk_no_ata_d3);
+DECLARE_PCI_FIXUP_EARLY(0x15b7, 0x5002, quirk_no_ata_d3);
 
 /* This was originally an Alpha specific thing, but it really fits here.
  * The i82375 PCI/EISA bridge appears as non-classified. Fix that.