Lines Matching +full:pch +full:- +full:msi +full:- +full:1
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * ahci.c - AHCI SATA support
6 * Please ALWAYS copy linux-[email protected]
9 * Copyright 2004-2005 Red Hat, Inc.
12 * as Documentation/driver-api/libata.rst
25 #include <linux/dma-mapping.h>
32 #include <linux/ahci-remap.h>
33 #include <linux/io-64-nonatomic-lo-hi.h>
272 { PCI_VDEVICE(INTEL, 0x06d6), board_ahci_pcs_quirk }, /* Comet Lake PCH-H RAID */
282 { PCI_VDEVICE(INTEL, 0x27c6), board_ahci_pcs_quirk }, /* ICH7-M DH */
305 { PCI_VDEVICE(INTEL, 0x3b22), board_ahci_pcs_quirk }, /* PCH AHCI */
306 { PCI_VDEVICE(INTEL, 0x3b23), board_ahci_pcs_quirk }, /* PCH AHCI */
307 { PCI_VDEVICE(INTEL, 0x3b24), board_ahci_pcs_quirk }, /* PCH RAID */
308 { PCI_VDEVICE(INTEL, 0x3b25), board_ahci_pcs_quirk }, /* PCH RAID */
309 { PCI_VDEVICE(INTEL, 0x3b29), board_ahci_pcs_quirk }, /* PCH M AHCI */
310 { PCI_VDEVICE(INTEL, 0x3b2b), board_ahci_pcs_quirk }, /* PCH RAID */
311 { PCI_VDEVICE(INTEL, 0x3b2c), board_ahci_pcs_quirk }, /* PCH M RAID */
312 { PCI_VDEVICE(INTEL, 0x3b2f), board_ahci_pcs_quirk }, /* PCH AHCI */
366 { PCI_VDEVICE(INTEL, 0x9dd3), board_ahci_pcs_quirk }, /* Cannon Lake PCH-LP AHCI */
387 { PCI_VDEVICE(INTEL, 0x43d4), board_ahci_pcs_quirk }, /* Rocket Lake PCH-H RAID */
388 { PCI_VDEVICE(INTEL, 0x43d5), board_ahci_pcs_quirk }, /* Rocket Lake PCH-H RAID */
389 { PCI_VDEVICE(INTEL, 0x43d6), board_ahci_pcs_quirk }, /* Rocket Lake PCH-H RAID */
390 { PCI_VDEVICE(INTEL, 0x43d7), board_ahci_pcs_quirk }, /* Rocket Lake PCH-H RAID */
415 { PCI_VDEVICE(INTEL, 0xa102), board_ahci_pcs_quirk }, /* Sunrise Point-H AHCI */
417 { PCI_VDEVICE(INTEL, 0xa105), board_ahci_pcs_quirk }, /* Sunrise Point-H RAID */
418 { PCI_VDEVICE(INTEL, 0xa106), board_ahci_pcs_quirk }, /* Sunrise Point-H RAID */
420 { PCI_VDEVICE(INTEL, 0xa10f), board_ahci_pcs_quirk }, /* Sunrise Point-H RAID */
429 { PCI_VDEVICE(INTEL, 0xa356), board_ahci_pcs_quirk }, /* Cannon Lake PCH-H RAID */
430 { PCI_VDEVICE(INTEL, 0x06d7), board_ahci_pcs_quirk }, /* Comet Lake-H RAID */
431 { PCI_VDEVICE(INTEL, 0xa386), board_ahci_pcs_quirk }, /* Comet Lake PCH-V RAID */
437 { PCI_VDEVICE(INTEL, 0x02d3), board_ahci_pcs_quirk }, /* Comet Lake PCH-U AHCI */
438 { PCI_VDEVICE(INTEL, 0x02d7), board_ahci_pcs_quirk }, /* Comet Lake PCH RAID */
439 /* Elkhart Lake IDs 0x4b60 & 0x4b62 https://sata-io.org/product/8803 not tested yet */
442 /* JMicron 360/1/3/5/6, match class to avoid IDE function */
465 { PCI_VDEVICE(AMD, 0x7800), board_ahci }, /* AMD Hudson-2 */
466 { PCI_VDEVICE(AMD, 0x7801), board_ahci_no_debounce_delay }, /* AMD Hudson-2 (AHCI mode) */
614 { PCI_VDEVICE(PROMISE, 0x3781), board_ahci }, /* FastTrak TX8660 ahci-mode */
631 * Samsung SSDs found on some macbooks. NCQ times out if MSI is
670 static int marvell_enable = 1;
673 MODULE_PARM_DESC(marvell_enable, "Marvell SATA via AHCI (1 = enabled)");
675 static int mobile_lpm_policy = -1;
682 "32-bits port map masks to ignore controllers ports. "
700 hpriv->mask_port_map = mask; in ahci_apply_port_map_mask()
763 if (pdev->vendor == PCI_VENDOR_ID_JMICRON && pdev->device == 0x2361) { in ahci_pci_save_initial_config()
764 dev_info(&pdev->dev, "JMB361 has only one port\n"); in ahci_pci_save_initial_config()
765 hpriv->saved_port_map = 1; in ahci_pci_save_initial_config()
773 if (hpriv->flags & AHCI_HFLAG_MV_PATA) { in ahci_pci_save_initial_config()
774 if (pdev->device == 0x6121) in ahci_pci_save_initial_config()
775 hpriv->mask_port_map = 0x3; in ahci_pci_save_initial_config()
777 hpriv->mask_port_map = 0xf; in ahci_pci_save_initial_config()
778 dev_info(&pdev->dev, in ahci_pci_save_initial_config()
784 ahci_get_port_map_mask(&pdev->dev, hpriv); in ahci_pci_save_initial_config()
786 ahci_save_initial_config(&pdev->dev, hpriv); in ahci_pci_save_initial_config()
791 struct pci_dev *pdev = to_pci_dev(host->dev); in ahci_pci_reset_controller()
792 struct ahci_host_priv *hpriv = host->private_data; in ahci_pci_reset_controller()
810 struct ahci_host_priv *hpriv = host->private_data; in ahci_pci_init_controller()
811 struct pci_dev *pdev = to_pci_dev(host->dev); in ahci_pci_init_controller()
816 if (hpriv->flags & AHCI_HFLAG_MV_PATA) { in ahci_pci_init_controller()
817 if (pdev->device == 0x6121) in ahci_pci_init_controller()
827 dev_dbg(&pdev->dev, "PORT_IRQ_STAT 0x%x\n", tmp); in ahci_pci_init_controller()
838 struct ata_port *ap = link->ap; in ahci_vt8251_hardreset()
839 struct ahci_host_priv *hpriv = ap->host->private_data; in ahci_vt8251_hardreset()
843 hpriv->stop_engine(ap); in ahci_vt8251_hardreset()
845 rc = sata_link_hardreset(link, sata_ehc_deb_timing(&link->eh_context), in ahci_vt8251_hardreset()
848 hpriv->start_engine(ap); in ahci_vt8251_hardreset()
851 * request follow-up softreset. in ahci_vt8251_hardreset()
853 return online ? -EAGAIN : rc; in ahci_vt8251_hardreset()
859 struct ata_port *ap = link->ap; in ahci_p5wdh_hardreset()
860 struct ahci_port_priv *pp = ap->private_data; in ahci_p5wdh_hardreset()
861 struct ahci_host_priv *hpriv = ap->host->private_data; in ahci_p5wdh_hardreset()
862 u8 *d2h_fis = pp->rx_fis + RX_FIS_D2H_REG; in ahci_p5wdh_hardreset()
867 hpriv->stop_engine(ap); in ahci_p5wdh_hardreset()
870 ata_tf_init(link->device, &tf); in ahci_p5wdh_hardreset()
874 rc = sata_link_hardreset(link, sata_ehc_deb_timing(&link->eh_context), in ahci_p5wdh_hardreset()
877 hpriv->start_engine(ap); in ahci_p5wdh_hardreset()
880 * ASUS P5W-DH Deluxe doesn't send signature FIS after in ahci_p5wdh_hardreset()
902 * ahci_avn_hardreset - attempt more aggressive recovery of Avoton ports.
906 * be recovered by a SATA-hard-reset alone. The failing signature is
907 * SStatus.DET stuck at 1 ("Device presence detected but Phy
914 * see DET==1 after a reset.
919 const unsigned int *timing = sata_ehc_deb_timing(&link->eh_context); in ahci_avn_hardreset()
920 struct ata_port *ap = link->ap; in ahci_avn_hardreset()
921 struct ahci_port_priv *pp = ap->private_data; in ahci_avn_hardreset()
922 struct ahci_host_priv *hpriv = ap->host->private_data; in ahci_avn_hardreset()
923 u8 *d2h_fis = pp->rx_fis + RX_FIS_D2H_REG; in ahci_avn_hardreset()
924 unsigned long tmo = deadline - jiffies; in ahci_avn_hardreset()
929 hpriv->stop_engine(ap); in ahci_avn_hardreset()
934 int port = ap->port_no; in ahci_avn_hardreset()
935 struct ata_host *host = ap->host; in ahci_avn_hardreset()
936 struct pci_dev *pdev = to_pci_dev(host->dev); in ahci_avn_hardreset()
939 ata_tf_init(link->device, &tf); in ahci_avn_hardreset()
947 (sstatus & 0xf) != 1) in ahci_avn_hardreset()
953 val &= ~(1 << port); in ahci_avn_hardreset()
956 val |= 1 << port; in ahci_avn_hardreset()
961 hpriv->start_engine(ap); in ahci_avn_hardreset()
973 struct ahci_host_priv *hpriv = host->private_data; in ahci_pci_disable_interrupts()
974 void __iomem *mmio = hpriv->mmio; in ahci_pci_disable_interrupts()
977 /* AHCI spec rev1.1 section 8.3.3: in ahci_pci_disable_interrupts()
1014 struct ahci_host_priv *hpriv = host->private_data; in ahci_pci_device_suspend()
1016 if (hpriv->flags & AHCI_HFLAG_NO_SUSPEND) { in ahci_pci_device_suspend()
1017 dev_err(&pdev->dev, in ahci_pci_device_suspend()
1019 return -EIO; in ahci_pci_device_suspend()
1037 if (pdev->dev.power.power_state.event == PM_EVENT_SUSPEND) { in ahci_pci_device_resume()
1059 if (hpriv->cap & HOST_CAP_64) { in ahci_configure_dma_masks()
1061 if (hpriv->flags & AHCI_HFLAG_43BIT_ONLY) in ahci_configure_dma_masks()
1068 * If the device fixup already set the dma_mask to some non-standard in ahci_configure_dma_masks()
1072 * bogus, platform code should use dev->bus_dma_limit instead.. in ahci_configure_dma_masks()
1074 if (pdev->dma_mask && pdev->dma_mask < DMA_BIT_MASK(32)) in ahci_configure_dma_masks()
1077 rc = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(dma_bits)); in ahci_configure_dma_masks()
1079 dev_err(&pdev->dev, "DMA enable failed\n"); in ahci_configure_dma_masks()
1085 struct pci_dev *pdev = to_pci_dev(host->dev); in ahci_pci_print_info()
1102 /* On ASUS P5W DH Deluxe, the second port of PCI device 00:1f.2 is
1103 * hardwired to on-board SIMG 4726. The chipset is ICH8 and doesn't
1106 * controller and emulate a single ATA device (can be RAID 0/1 or some
1118 * assumed without follow-up softreset.
1133 struct pci_dev *pdev = to_pci_dev(host->dev); in ahci_p5wdh_workaround()
1135 if (pdev->bus->number == 0 && pdev->devfn == PCI_DEVFN(0x1f, 2) && in ahci_p5wdh_workaround()
1137 struct ata_port *ap = host->ports[1]; in ahci_p5wdh_workaround()
1139 dev_info(&pdev->dev, in ahci_p5wdh_workaround()
1140 "enabling ASUS P5W DH Deluxe on-board SIMG4726 workaround\n"); in ahci_p5wdh_workaround()
1142 ap->ops = &ahci_p5wdh_ops; in ahci_p5wdh_workaround()
1143 ap->link.flags |= ATA_LFLAG_NO_SRST | ATA_LFLAG_ASSUME_ATA; in ahci_p5wdh_workaround()
1148 * Macbook7,1 firmware forcibly disables MCP89 AHCI and changes PCI ID when
1158 val |= 1 << 0x1b; in ahci_mcp89_apple_enable()
1164 val |= 1 << 0xc; in ahci_mcp89_apple_enable()
1173 val &= ~(1 << 0xc); in ahci_mcp89_apple_enable()
1177 val &= ~(1 << 0x1b); in ahci_mcp89_apple_enable()
1183 return pdev->vendor == PCI_VENDOR_ID_NVIDIA && in is_mcp89_apple()
1184 pdev->device == PCI_DEVICE_ID_NVIDIA_NFORCE_MCP89_SATA && in is_mcp89_apple()
1185 pdev->subsystem_vendor == PCI_VENDOR_ID_APPLE && in is_mcp89_apple()
1186 pdev->subsystem_device == 0xcb89; in is_mcp89_apple()
1195 * working is 1501 which was released on 2007-10-26. in ahci_sb600_enable_64bit()
1201 .ident = "ASUS M2A-VM", in ahci_sb600_enable_64bit()
1205 DMI_MATCH(DMI_BOARD_NAME, "M2A-VM"), in ahci_sb600_enable_64bit()
1210 * All BIOS versions for the MSI K9A2 Platinum (MS-7376) in ahci_sb600_enable_64bit()
1214 * fields as "MICRO-STAR INTERANTIONAL CO.,LTD". in ahci_sb600_enable_64bit()
1217 * "MICRO-STAR INTERNATIONAL CO.,LTD". in ahci_sb600_enable_64bit()
1218 * So try to match on DMI_BOARD_VENDOR of "MICRO-STAR INTER". in ahci_sb600_enable_64bit()
1221 * DMI field of "MS-7376". This was changed to be in ahci_sb600_enable_64bit()
1222 * "K9A2 Platinum (MS-7376)" in version 1.9, but we can still in ahci_sb600_enable_64bit()
1223 * match on DMI_BOARD_NAME of "MS-7376". in ahci_sb600_enable_64bit()
1226 .ident = "MSI K9A2 Platinum", in ahci_sb600_enable_64bit()
1229 "MICRO-STAR INTER"), in ahci_sb600_enable_64bit()
1230 DMI_MATCH(DMI_BOARD_NAME, "MS-7376"), in ahci_sb600_enable_64bit()
1234 * All BIOS versions for the MSI K9AGM2 (MS-7327) support in ahci_sb600_enable_64bit()
1239 * match on DMI_BOARD_VENDOR of "MICRO-STAR INTER" again. in ahci_sb600_enable_64bit()
1242 .ident = "MSI K9AGM2", in ahci_sb600_enable_64bit()
1245 "MICRO-STAR INTER"), in ahci_sb600_enable_64bit()
1246 DMI_MATCH(DMI_BOARD_NAME, "MS-7327"), in ahci_sb600_enable_64bit()
1268 if (pdev->bus->number != 0 || pdev->devfn != PCI_DEVFN(0x12, 0) || in ahci_sb600_enable_64bit()
1272 if (!match->driver_data) in ahci_sb600_enable_64bit()
1278 if (strcmp(buf, match->driver_data) >= 0) in ahci_sb600_enable_64bit()
1281 dev_warn(&pdev->dev, in ahci_sb600_enable_64bit()
1283 match->ident); in ahci_sb600_enable_64bit()
1288 dev_warn(&pdev->dev, "%s: enabling 64bit DMA\n", match->ident); in ahci_sb600_enable_64bit()
1298 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), in ahci_broken_system_poweroff()
1307 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), in ahci_broken_system_poweroff()
1319 unsigned long slot = (unsigned long)dmi->driver_data; in ahci_broken_system_poweroff()
1320 /* apply the quirk only to on-board controllers */ in ahci_broken_system_poweroff()
1321 return slot == PCI_SLOT(pdev->devfn); in ahci_broken_system_poweroff()
1331 * On HP dv[4-6] and HDX18 with earlier BIOSen, link in ahci_broken_suspend()
1346 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), in ahci_broken_suspend()
1355 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), in ahci_broken_suspend()
1364 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), in ahci_broken_suspend()
1373 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), in ahci_broken_suspend()
1402 if (!dmi || pdev->bus->number || pdev->devfn != PCI_DEVFN(0x1f, 2)) in ahci_broken_suspend()
1408 return strcmp(buf, dmi->driver_data) < 0; in ahci_broken_suspend()
1461 return strcmp(buf, dmi->driver_data) < 0; in ahci_broken_lpm()
1483 .ident = "EP45-DQ6", in ahci_broken_online()
1487 DMI_MATCH(DMI_BOARD_NAME, "EP45-DQ6"), in ahci_broken_online()
1492 .ident = "EP45-DS5", in ahci_broken_online()
1496 DMI_MATCH(DMI_BOARD_NAME, "EP45-DS5"), in ahci_broken_online()
1509 val = (unsigned long)dmi->driver_data; in ahci_broken_online()
1511 return pdev->bus->number == (val >> 8) && pdev->devfn == (val & 0xff); in ahci_broken_online()
1522 * is FPDMA non-zero offset enable which when enabled in ahci_gtf_filter_workaround()
1543 filter = (unsigned long)dmi->driver_data; in ahci_gtf_filter_workaround()
1544 dev_info(host->dev, "applying extra ACPI _GTF filter 0x%x for %s\n", in ahci_gtf_filter_workaround()
1545 filter, dmi->ident); in ahci_gtf_filter_workaround()
1547 for (i = 0; i < host->n_ports; i++) { in ahci_gtf_filter_workaround()
1548 struct ata_port *ap = host->ports[i]; in ahci_gtf_filter_workaround()
1554 dev->gtf_filter |= filter; in ahci_gtf_filter_workaround()
1581 DMI_MATCH(DMI_PRODUCT_NAME, "Switch SA5-271") in acer_sa5_271_workaround()
1588 dev_info(&pdev->dev, "enabling Acer Switch Alpha 12 workaround\n"); in acer_sa5_271_workaround()
1589 if ((hpriv->saved_cap & 0xC734FF00) == 0xC734FF00) { in acer_sa5_271_workaround()
1590 hpriv->port_map = 0x7; in acer_sa5_271_workaround()
1591 hpriv->cap = 0xC734FF02; in acer_sa5_271_workaround()
1609 unsigned int handled = 1; in ahci_thunderx_irq_handler()
1611 hpriv = host->private_data; in ahci_thunderx_irq_handler()
1612 mmio = hpriv->mmio; in ahci_thunderx_irq_handler()
1618 irq_masked = irq_stat & hpriv->port_map; in ahci_thunderx_irq_handler()
1619 spin_lock(&host->lock); in ahci_thunderx_irq_handler()
1625 spin_unlock(&host->lock); in ahci_thunderx_irq_handler()
1641 if (pdev->vendor != PCI_VENDOR_ID_INTEL || in ahci_remap_check()
1644 !(readl(hpriv->mmio + AHCI_VSCAP) & 1)) in ahci_remap_check()
1647 cap = readq(hpriv->mmio + AHCI_REMAP_CAP); in ahci_remap_check()
1649 if ((cap & (1 << i)) == 0) in ahci_remap_check()
1651 if (readl(hpriv->mmio + ahci_remap_dcc(i)) in ahci_remap_check()
1656 hpriv->remapped_nvme++; in ahci_remap_check()
1659 if (!hpriv->remapped_nvme) in ahci_remap_check()
1662 dev_warn(&pdev->dev, "Found %u remapped NVMe devices.\n", in ahci_remap_check()
1663 hpriv->remapped_nvme); in ahci_remap_check()
1664 dev_warn(&pdev->dev, in ahci_remap_check()
1668 * Don't rely on the msi-x capability in the remap case, in ahci_remap_check()
1671 hpriv->flags |= AHCI_HFLAG_NO_MSI; in ahci_remap_check()
1676 return pci_irq_vector(to_pci_dev(host->dev), port); in ahci_get_irq_vector()
1684 if (hpriv->flags & AHCI_HFLAG_NO_MSI) in ahci_init_msi()
1685 return -ENODEV; in ahci_init_msi()
1690 * of multiple MSIs is negated and use single MSI mode instead. in ahci_init_msi()
1692 if (n_ports > 1) { in ahci_init_msi()
1696 if (!(readl(hpriv->mmio + HOST_CTL) & HOST_MRSM)) { in ahci_init_msi()
1697 hpriv->get_irq_vector = ahci_get_irq_vector; in ahci_init_msi()
1698 hpriv->flags |= AHCI_HFLAG_MULTI_MSI; in ahci_init_msi()
1703 * Fallback to single MSI mode if the controller in ahci_init_msi()
1707 "ahci: MRSM is on, fallback to single MSI\n"); in ahci_init_msi()
1713 * If the host is not capable of supporting per-port vectors, fall in ahci_init_msi()
1714 * back to single MSI before finally attempting single MSI-X. in ahci_init_msi()
1716 nvec = pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_MSI); in ahci_init_msi()
1717 if (nvec == 1) in ahci_init_msi()
1719 return pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_MSIX); in ahci_init_msi()
1724 struct ahci_host_priv *hpriv = ap->host->private_data; in ahci_mark_external_port()
1728 /* mark external ports (hotplug-capable, eSATA) */ in ahci_mark_external_port()
1730 if (((tmp & PORT_CMD_ESP) && (hpriv->cap & HOST_CAP_SXS)) || in ahci_mark_external_port()
1732 ap->pflags |= ATA_PFLAG_EXTERNAL; in ahci_mark_external_port()
1737 struct ahci_host_priv *hpriv = ap->host->private_data; in ahci_update_initial_lpm_policy()
1741 * AHCI contains a known incompatibility between LPM and hot-plug in ahci_update_initial_lpm_policy()
1742 * removal events, see 7.3.1 Hot Plug Removal Detection and Power in ahci_update_initial_lpm_policy()
1743 * Management Interaction in AHCI 1.3.1. Therefore, do not enable in ahci_update_initial_lpm_policy()
1746 if (ap->pflags & ATA_PFLAG_EXTERNAL) { in ahci_update_initial_lpm_policy()
1752 if ((ap->host->flags & ATA_HOST_NO_PART) && in ahci_update_initial_lpm_policy()
1753 (ap->host->flags & ATA_HOST_NO_SSC) && in ahci_update_initial_lpm_policy()
1754 (ap->host->flags & ATA_HOST_NO_DEVSLP)) { in ahci_update_initial_lpm_policy()
1760 if (mobile_lpm_policy != -1) { in ahci_update_initial_lpm_policy()
1766 if (hpriv->cap & HOST_CAP_PART) in ahci_update_initial_lpm_policy()
1768 else if (hpriv->cap & HOST_CAP_SSC) in ahci_update_initial_lpm_policy()
1774 ap->target_lpm_policy = policy; in ahci_update_initial_lpm_policy()
1781 if (!(hpriv->flags & AHCI_HFLAG_INTEL_PCS_QUIRK)) in ahci_intel_pcs_quirk()
1786 * implemented as write or write-once register. If the register in ahci_intel_pcs_quirk()
1793 if ((tmp16 & hpriv->port_map) != hpriv->port_map) { in ahci_intel_pcs_quirk()
1794 tmp16 |= hpriv->port_map; in ahci_intel_pcs_quirk()
1804 struct ahci_host_priv *hpriv = host->private_data; in remapped_nvme_show()
1806 return sysfs_emit(buf, "%u\n", hpriv->remapped_nvme); in remapped_nvme_show()
1813 unsigned int board_id = ent->driver_data; in ahci_init_one()
1816 struct device *dev = &pdev->dev; in ahci_init_one()
1824 ata_print_version_once(&pdev->dev, DRV_VERSION); in ahci_init_one()
1829 if (pdev->vendor == PCI_VENDOR_ID_MARVELL && !marvell_enable) in ahci_init_one()
1830 return -ENODEV; in ahci_init_one()
1840 if (pdev->vendor == PCI_VENDOR_ID_PROMISE) in ahci_init_one()
1841 dev_info(&pdev->dev, in ahci_init_one()
1844 /* Some devices use non-standard BARs */ in ahci_init_one()
1845 if (pdev->vendor == PCI_VENDOR_ID_STMICRO && pdev->device == 0xCC06) in ahci_init_one()
1847 else if (pdev->vendor == 0x1c44 && pdev->device == 0x8000) in ahci_init_one()
1849 else if (pdev->vendor == PCI_VENDOR_ID_CAVIUM) { in ahci_init_one()
1850 if (pdev->device == 0xa01c) in ahci_init_one()
1852 if (pdev->device == 0xa084) in ahci_init_one()
1854 } else if (pdev->vendor == PCI_VENDOR_ID_LOONGSON) { in ahci_init_one()
1855 if (pdev->device == 0x7a08) in ahci_init_one()
1864 if (pdev->vendor == PCI_VENDOR_ID_INTEL && in ahci_init_one()
1865 (pdev->device == 0x2652 || pdev->device == 0x2653)) { in ahci_init_one()
1874 dev_info(&pdev->dev, in ahci_init_one()
1876 return -ENODEV; in ahci_init_one()
1884 if (rc == -EBUSY) in ahci_init_one()
1891 return -ENOMEM; in ahci_init_one()
1892 hpriv->flags |= (unsigned long)pi.private_data; in ahci_init_one()
1894 /* MCP65 revision A1 and A2 can't do MSI */ in ahci_init_one()
1896 (pdev->revision == 0xa1 || pdev->revision == 0xa2)) in ahci_init_one()
1897 hpriv->flags |= AHCI_HFLAG_NO_MSI; in ahci_init_one()
1900 if (board_id == board_ahci_sb700 && pdev->revision >= 0x40) in ahci_init_one()
1901 hpriv->flags &= ~AHCI_HFLAG_IGN_SERR_INTERNAL; in ahci_init_one()
1905 hpriv->flags &= ~AHCI_HFLAG_32BIT_ONLY; in ahci_init_one()
1907 hpriv->mmio = pcim_iomap(pdev, ahci_pci_bar, 0); in ahci_init_one()
1908 if (!hpriv->mmio) in ahci_init_one()
1909 return -ENOMEM; in ahci_init_one()
1914 sysfs_add_file_to_group(&pdev->dev.kobj, in ahci_init_one()
1919 if (pdev->vendor == PCI_VENDOR_ID_HUAWEI && in ahci_init_one()
1920 pdev->device == 0xa235 && in ahci_init_one()
1921 pdev->revision < 0x30) in ahci_init_one()
1922 hpriv->flags |= AHCI_HFLAG_NO_SXS; in ahci_init_one()
1924 if (pdev->vendor == 0x177d && pdev->device == 0xa01c) in ahci_init_one()
1925 hpriv->irq_handler = ahci_thunderx_irq_handler; in ahci_init_one()
1932 if (hpriv->cap & HOST_CAP_NCQ) { in ahci_init_one()
1935 * Auto-activate optimization is supposed to be in ahci_init_one()
1940 if (!(hpriv->flags & AHCI_HFLAG_NO_FPDMA_AA)) in ahci_init_one()
1944 * All AHCI controllers should be forward-compatible in ahci_init_one()
1952 if (hpriv->cap & HOST_CAP_PMP) in ahci_init_one()
1959 dev_info(&pdev->dev, in ahci_init_one()
1965 dev_warn(&pdev->dev, in ahci_init_one()
1970 hpriv->flags |= AHCI_HFLAG_NO_SUSPEND; in ahci_init_one()
1971 dev_warn(&pdev->dev, in ahci_init_one()
1976 hpriv->flags |= AHCI_HFLAG_SRST_TOUT_IS_OFFLINE; in ahci_init_one()
1977 dev_info(&pdev->dev, in ahci_init_one()
1982 /* Acer SA5-271 workaround modifies private_data */ in ahci_init_one()
1990 n_ports = max(ahci_nr_ports(hpriv->cap), fls(hpriv->port_map)); in ahci_init_one()
1992 host = ata_host_alloc_pinfo(&pdev->dev, ppi, n_ports); in ahci_init_one()
1994 rc = -ENOMEM; in ahci_init_one()
1997 host->private_data = hpriv; in ahci_init_one()
2001 pcim_intx(pdev, 1); in ahci_init_one()
2003 hpriv->irq = pci_irq_vector(pdev, 0); in ahci_init_one()
2005 if (!(hpriv->cap & HOST_CAP_SSS) || ahci_ignore_sss) in ahci_init_one()
2006 host->flags |= ATA_HOST_PARALLEL_SCAN; in ahci_init_one()
2008 dev_info(&pdev->dev, "SSS flag set, parallel bus scan disabled\n"); in ahci_init_one()
2010 if (!(hpriv->cap & HOST_CAP_PART)) in ahci_init_one()
2011 host->flags |= ATA_HOST_NO_PART; in ahci_init_one()
2013 if (!(hpriv->cap & HOST_CAP_SSC)) in ahci_init_one()
2014 host->flags |= ATA_HOST_NO_SSC; in ahci_init_one()
2016 if (!(hpriv->cap2 & HOST_CAP2_SDS)) in ahci_init_one()
2017 host->flags |= ATA_HOST_NO_DEVSLP; in ahci_init_one()
2022 for (i = 0; i < host->n_ports; i++) { in ahci_init_one()
2023 struct ata_port *ap = host->ports[i]; in ahci_init_one()
2025 ata_port_pbar_desc(ap, ahci_pci_bar, -1, "abar"); in ahci_init_one()
2027 0x100 + ap->port_no * 0x80, "port"); in ahci_init_one()
2030 if (ap->flags & ATA_FLAG_EM) in ahci_init_one()
2031 ap->em_message_type = hpriv->em_msg_type; in ahci_init_one()
2037 /* disabled/not-implemented port */ in ahci_init_one()
2038 if (!(hpriv->port_map & (1 << i))) in ahci_init_one()
2039 ap->ops = &ata_dummy_port_ops; in ahci_init_one()
2066 pm_runtime_put_noidle(&pdev->dev); in ahci_init_one()
2070 sysfs_remove_file_from_group(&pdev->dev.kobj, in ahci_init_one()
2082 sysfs_remove_file_from_group(&pdev->dev.kobj, in ahci_remove_one()
2085 pm_runtime_get_noresume(&pdev->dev); in ahci_remove_one()
2092 MODULE_DESCRIPTION("AHCI SATA low-level driver");