Lines Matching +full:ahci +full:- +full:port

1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Freescale QorIQ AHCI SATA platform driver
18 #include "ahci.h"
20 #define DRV_NAME "ahci-qoriq"
22 /* port register definition */
31 /* port register default value */
70 { .compatible = "fsl,ls1021a-ahci", .data = (void *)AHCI_LS1021A},
71 { .compatible = "fsl,ls1028a-ahci", .data = (void *)AHCI_LS1028A},
72 { .compatible = "fsl,ls1043a-ahci", .data = (void *)AHCI_LS1043A},
73 { .compatible = "fsl,ls2080a-ahci", .data = (void *)AHCI_LS2080A},
74 { .compatible = "fsl,ls1046a-ahci", .data = (void *)AHCI_LS1046A},
75 { .compatible = "fsl,ls1088a-ahci", .data = (void *)AHCI_LS1088A},
76 { .compatible = "fsl,ls2088a-ahci", .data = (void *)AHCI_LS2088A},
77 { .compatible = "fsl,lx2160a-ahci", .data = (void *)AHCI_LX2160A},
91 const unsigned int *timing = sata_ehc_deb_timing(&link->eh_context); in ahci_qoriq_hardreset()
92 void __iomem *port_mmio = ahci_port_base(link->ap); in ahci_qoriq_hardreset()
94 struct ata_port *ap = link->ap; in ahci_qoriq_hardreset()
95 struct ahci_port_priv *pp = ap->private_data; in ahci_qoriq_hardreset()
96 struct ahci_host_priv *hpriv = ap->host->private_data; in ahci_qoriq_hardreset()
97 struct ahci_qoriq_priv *qoriq_priv = hpriv->plat_data; in ahci_qoriq_hardreset()
98 u8 *d2h_fis = pp->rx_fis + RX_FIS_D2H_REG; in ahci_qoriq_hardreset()
102 bool ls1021a_workaround = (qoriq_priv->type == AHCI_LS1021A); in ahci_qoriq_hardreset()
104 hpriv->stop_engine(ap); in ahci_qoriq_hardreset()
108 * A-009042: The device detection initialization sequence in ahci_qoriq_hardreset()
123 ata_tf_init(link->device, &tf); in ahci_qoriq_hardreset()
141 hpriv->start_engine(ap); in ahci_qoriq_hardreset()
166 struct ahci_qoriq_priv *qpriv = hpriv->plat_data; in ahci_qoriq_phy_init()
167 void __iomem *reg_base = hpriv->mmio; in ahci_qoriq_phy_init()
169 switch (qpriv->type) { in ahci_qoriq_phy_init()
171 if (!(qpriv->ecc_addr || ecc_initialized)) in ahci_qoriq_phy_init()
172 return -EINVAL; in ahci_qoriq_phy_init()
173 else if (qpriv->ecc_addr && !ecc_initialized) in ahci_qoriq_phy_init()
174 writel(SATA_ECC_DISABLE, qpriv->ecc_addr); in ahci_qoriq_phy_init()
181 if (qpriv->is_dmacoherent) in ahci_qoriq_phy_init()
187 if (!(qpriv->ecc_addr || ecc_initialized)) in ahci_qoriq_phy_init()
188 return -EINVAL; in ahci_qoriq_phy_init()
189 else if (qpriv->ecc_addr && !ecc_initialized) in ahci_qoriq_phy_init()
190 writel(readl(qpriv->ecc_addr) | in ahci_qoriq_phy_init()
192 qpriv->ecc_addr); in ahci_qoriq_phy_init()
197 if (qpriv->is_dmacoherent) in ahci_qoriq_phy_init()
206 if (qpriv->is_dmacoherent) in ahci_qoriq_phy_init()
211 if (!(qpriv->ecc_addr || ecc_initialized)) in ahci_qoriq_phy_init()
212 return -EINVAL; in ahci_qoriq_phy_init()
213 else if (qpriv->ecc_addr && !ecc_initialized) in ahci_qoriq_phy_init()
214 writel(readl(qpriv->ecc_addr) | in ahci_qoriq_phy_init()
216 qpriv->ecc_addr); in ahci_qoriq_phy_init()
221 if (qpriv->is_dmacoherent) in ahci_qoriq_phy_init()
228 if (!(qpriv->ecc_addr || ecc_initialized)) in ahci_qoriq_phy_init()
229 return -EINVAL; in ahci_qoriq_phy_init()
230 else if (qpriv->ecc_addr && !ecc_initialized) in ahci_qoriq_phy_init()
231 writel(readl(qpriv->ecc_addr) | in ahci_qoriq_phy_init()
233 qpriv->ecc_addr); in ahci_qoriq_phy_init()
238 if (qpriv->is_dmacoherent) in ahci_qoriq_phy_init()
247 if (qpriv->is_dmacoherent) in ahci_qoriq_phy_init()
258 struct device_node *np = pdev->dev.of_node; in ahci_qoriq_probe()
260 struct device *dev = &pdev->dev; in ahci_qoriq_probe()
272 acpi_id = acpi_match_device(ahci_qoriq_acpi_match, &pdev->dev); in ahci_qoriq_probe()
274 return -ENODEV; in ahci_qoriq_probe()
278 return -ENOMEM; in ahci_qoriq_probe()
281 qoriq_priv->type = (unsigned long)of_id->data; in ahci_qoriq_probe()
283 qoriq_priv->type = (enum ahci_qoriq_type)acpi_id->driver_data; in ahci_qoriq_probe()
288 "sata-ecc"); in ahci_qoriq_probe()
290 qoriq_priv->ecc_addr = in ahci_qoriq_probe()
292 if (IS_ERR(qoriq_priv->ecc_addr)) in ahci_qoriq_probe()
293 return PTR_ERR(qoriq_priv->ecc_addr); in ahci_qoriq_probe()
297 if (device_get_dma_attr(&pdev->dev) == DEV_DMA_COHERENT) in ahci_qoriq_probe()
298 qoriq_priv->is_dmacoherent = true; in ahci_qoriq_probe()
304 hpriv->plat_data = qoriq_priv; in ahci_qoriq_probe()
326 struct ahci_host_priv *hpriv = host->private_data; in ahci_qoriq_resume()
370 MODULE_DESCRIPTION("Freescale QorIQ AHCI SATA platform driver");