]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
scsi: smartpqi: set pci completion timeout
authorKevin Barnett <kevin.barnett@microsemi.com>
Wed, 3 May 2017 23:52:34 +0000 (18:52 -0500)
committerChuck Anderson <chuck.anderson@oracle.com>
Wed, 26 Jul 2017 04:06:49 +0000 (21:06 -0700)
Orabug: 2619102126447813

add support for setting PCIe completion timeout.

Reviewed-by: Scott Benesh <scott.benesh@microsemi.com>
Reviewed-by: Scott Teel <scott.teel@microsemi.com>
Signed-off-by: Kevin Barnett <kevin.barnett@microsemi.com>
Signed-off-by: Don Brace <don.brace@microsemi.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
(cherry picked from commit a81ed5f338a843d8bfd199928142b196d71ae62c)
Signed-off-by: Brian Maly <brian.maly@oracle.com>
drivers/scsi/smartpqi/smartpqi_init.c

index 2edc4982dcbdd6c097fb3bc10d0683ebe7ed22c2..189dae195adef7d63835759f94b88dc17e0a45cd 100644 (file)
@@ -5470,6 +5470,13 @@ static int pqi_ctrl_init(struct pqi_ctrl_info *ctrl_info)
        return 0;
 }
 
+static inline int pqi_set_pcie_completion_timeout(struct pci_dev *pci_dev,
+       u16 timeout)
+{
+       return pcie_capability_clear_and_set_word(pci_dev, PCI_EXP_DEVCTL2,
+               PCI_EXP_DEVCTL2_COMP_TIMEOUT, timeout);
+}
+
 static int pqi_pci_init(struct pqi_ctrl_info *ctrl_info)
 {
        int rc;
@@ -5513,6 +5520,17 @@ static int pqi_pci_init(struct pqi_ctrl_info *ctrl_info)
        ctrl_info->registers = ctrl_info->iomem_base;
        ctrl_info->pqi_registers = &ctrl_info->registers->pqi_registers;
 
+#define PCI_EXP_COMP_TIMEOUT_65_TO_210_MS              0x6
+
+       /* Increase the PCIe completion timeout. */
+       rc = pqi_set_pcie_completion_timeout(ctrl_info->pci_dev,
+               PCI_EXP_COMP_TIMEOUT_65_TO_210_MS);
+       if (rc) {
+               dev_err(&ctrl_info->pci_dev->dev,
+                       "failed to set PCIe completion timeout\n");
+               goto release_regions;
+       }
+
        /* Enable bus mastering. */
        pci_set_master(ctrl_info->pci_dev);