ahci: Add support for Cavium's ThunderX host controller
authorRobert Richter <rrichter@cavium.com>
Fri, 5 Jun 2015 17:49:26 +0000 (19:49 +0200)
committerTejun Heo <tj@kernel.org>
Tue, 16 Jun 2015 20:12:14 +0000 (16:12 -0400)
This patch adds support for Cavium's ThunderX host controller. The
controller resides on the SoC and is a AHCI compatible SATA controller
with one port, compliant with Serial ATA 3.1 and AHCI Revision 1.31.
There can exists multiple SATA controllers on the SoC.

The controller depends on MSI-X support since the PCI ECAM controller
on the SoC does not implement MSI nor lagacy intx interrupt support.
Thus, during device initialization, if MSI fails MSI-X will be used to
enable the device's interrupts.

The controller uses non-standard BAR0 for its register range. The
already existing device lookup (vendor and device id) that is already
implemented for other host controllers is used to change the PCI BAR.

Signed-off-by: Robert Richter <rrichter@cavium.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
drivers/ata/ahci.c

index 77a34fc0413867dade06e8d17dfb506043074d15..bdedaa4f9d7b9622588874e2c83cc445cdca53e9 100644 (file)
@@ -53,6 +53,7 @@
 
 enum {
        AHCI_PCI_BAR_STA2X11    = 0,
+       AHCI_PCI_BAR_CAVIUM     = 0,
        AHCI_PCI_BAR_ENMOTUS    = 2,
        AHCI_PCI_BAR_STANDARD   = 5,
 };
@@ -1374,11 +1375,13 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
                dev_info(&pdev->dev,
                         "PDC42819 can only drive SATA devices with this driver\n");
 
-       /* Both Connext and Enmotus devices use non-standard BARs */
+       /* Some devices use non-standard BARs */
        if (pdev->vendor == PCI_VENDOR_ID_STMICRO && pdev->device == 0xCC06)
                ahci_pci_bar = AHCI_PCI_BAR_STA2X11;
        else if (pdev->vendor == 0x1c44 && pdev->device == 0x8000)
                ahci_pci_bar = AHCI_PCI_BAR_ENMOTUS;
+       else if (pdev->vendor == 0x177d && pdev->device == 0xa01c)
+               ahci_pci_bar = AHCI_PCI_BAR_CAVIUM;
 
        /*
         * The JMicron chip 361/363 contains one SATA controller and one