Parcourir la source

[SCSI] hpsa: Disable ASPM

The Windows driver .inf disables ASPM on hpsa devices. Do the same because the
selection of a non default ASPM policy can cause the device to hang.

Signed-off-by: Matthew Garrett <mjg@redhat.com>
Cc: stable@kernel.org
Acked-by: Mike Miller <mike.miller@hp.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Matthew Garrett il y a 13 ans
Parent
commit
e5a44df85e
1 fichiers modifiés avec 5 ajouts et 0 suppressions
  1. 5 0
      drivers/scsi/hpsa.c

+ 5 - 0
drivers/scsi/hpsa.c

@@ -23,6 +23,7 @@
 #include <linux/interrupt.h>
 #include <linux/interrupt.h>
 #include <linux/types.h>
 #include <linux/types.h>
 #include <linux/pci.h>
 #include <linux/pci.h>
+#include <linux/pci-aspm.h>
 #include <linux/kernel.h>
 #include <linux/kernel.h>
 #include <linux/slab.h>
 #include <linux/slab.h>
 #include <linux/delay.h>
 #include <linux/delay.h>
@@ -3922,6 +3923,10 @@ static int __devinit hpsa_pci_init(struct ctlr_info *h)
 		dev_warn(&h->pdev->dev, "controller appears to be disabled\n");
 		dev_warn(&h->pdev->dev, "controller appears to be disabled\n");
 		return -ENODEV;
 		return -ENODEV;
 	}
 	}
+
+	pci_disable_link_state(h->pdev, PCIE_LINK_STATE_L0S |
+			       PCIE_LINK_STATE_L1 | PCIE_LINK_STATE_CLKPM);
+
 	err = pci_enable_device(h->pdev);
 	err = pci_enable_device(h->pdev);
 	if (err) {
 	if (err) {
 		dev_warn(&h->pdev->dev, "unable to enable PCI device\n");
 		dev_warn(&h->pdev->dev, "unable to enable PCI device\n");