|
|
@@ -1115,6 +1115,17 @@ static bool ahci_broken_online(struct pci_dev *pdev)
|
|
|
return pdev->bus->number == (val >> 8) && pdev->devfn == (val & 0xff);
|
|
|
}
|
|
|
|
|
|
+static bool ahci_broken_devslp(struct pci_dev *pdev)
|
|
|
+{
|
|
|
+ /* device with broken DEVSLP but still showing SDS capability */
|
|
|
+ static const struct pci_device_id ids[] = {
|
|
|
+ { PCI_VDEVICE(INTEL, 0x0f23)}, /* Valleyview SoC */
|
|
|
+ {}
|
|
|
+ };
|
|
|
+
|
|
|
+ return pci_match_id(ids, pdev);
|
|
|
+}
|
|
|
+
|
|
|
#ifdef CONFIG_ATA_ACPI
|
|
|
static void ahci_gtf_filter_workaround(struct ata_host *host)
|
|
|
{
|
|
|
@@ -1364,6 +1375,10 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|
|
|
|
|
hpriv->mmio = pcim_iomap_table(pdev)[ahci_pci_bar];
|
|
|
|
|
|
+ /* must set flag prior to save config in order to take effect */
|
|
|
+ if (ahci_broken_devslp(pdev))
|
|
|
+ hpriv->flags |= AHCI_HFLAG_NO_DEVSLP;
|
|
|
+
|
|
|
/* save initial config */
|
|
|
ahci_pci_save_initial_config(pdev, hpriv);
|
|
|
|