Lines Matching refs:ap
295 static void nv_nf2_freeze(struct ata_port *ap);
296 static void nv_nf2_thaw(struct ata_port *ap);
297 static void nv_ck804_freeze(struct ata_port *ap);
298 static void nv_ck804_thaw(struct ata_port *ap);
305 static void nv_adma_irq_clear(struct ata_port *ap);
306 static int nv_adma_port_start(struct ata_port *ap);
307 static void nv_adma_port_stop(struct ata_port *ap);
309 static int nv_adma_port_suspend(struct ata_port *ap, pm_message_t mesg);
310 static int nv_adma_port_resume(struct ata_port *ap);
312 static void nv_adma_freeze(struct ata_port *ap);
313 static void nv_adma_thaw(struct ata_port *ap);
314 static void nv_adma_error_handler(struct ata_port *ap);
317 static void nv_adma_tf_read(struct ata_port *ap, struct ata_taskfile *tf);
319 static void nv_mcp55_thaw(struct ata_port *ap);
320 static void nv_mcp55_freeze(struct ata_port *ap);
321 static void nv_swncq_error_handler(struct ata_port *ap);
324 static int nv_swncq_port_start(struct ata_port *ap);
328 static void nv_swncq_irq_clear(struct ata_port *ap, u16 fis);
331 static int nv_swncq_port_suspend(struct ata_port *ap, pm_message_t mesg);
332 static int nv_swncq_port_resume(struct ata_port *ap);
598 static void nv_adma_register_mode(struct ata_port *ap)
600 struct nv_adma_port_priv *pp = ap->private_data;
615 ata_port_warn(ap, "timeout waiting for ADMA IDLE, stat=0x%hx\n",
629 ata_port_warn(ap,
636 static void nv_adma_mode(struct ata_port *ap)
638 struct nv_adma_port_priv *pp = ap->private_data;
659 ata_port_warn(ap,
669 struct ata_port *ap = ata_shost_to_port(sdev->host);
670 struct nv_adma_port_priv *pp = ap->private_data;
672 struct pci_dev *pdev = to_pci_dev(ap->host->dev);
685 spin_lock_irqsave(ap->lock, flags);
687 if (ap->link.device[sdev->id].class == ATA_DEV_ATAPI) {
703 nv_adma_register_mode(ap);
712 if (ap->port_no == 1)
730 port0 = ap->host->ports[0]->private_data;
731 port1 = ap->host->ports[1]->private_data;
748 ata_port_info(ap,
750 (unsigned long long)*ap->host->dev->dma_mask,
753 spin_unlock_irqrestore(ap->lock, flags);
760 struct nv_adma_port_priv *pp = qc->ap->private_data;
764 static void nv_adma_tf_read(struct ata_port *ap, struct ata_taskfile *tf)
773 nv_adma_register_mode(ap);
775 ata_sff_tf_read(ap, tf);
810 static int nv_adma_check_cpb(struct ata_port *ap, int cpb_num, int force_err)
812 struct nv_adma_port_priv *pp = ap->private_data;
815 ata_port_dbg(ap, "CPB %d, flags=0x%x\n", cpb_num, flags);
821 struct ata_eh_info *ehi = &ap->link.eh_info;
844 ata_port_freeze(ap);
846 ata_port_abort(ap);
855 static int nv_host_intr(struct ata_port *ap, u8 irq_stat)
857 struct ata_queued_cmd *qc = ata_qc_from_tag(ap, ap->link.active_tag);
861 ata_port_freeze(ap);
871 ata_sff_check_status(ap);
876 return ata_bmdma_port_intr(ap, qc);
888 struct ata_port *ap = host->ports[i];
889 struct nv_adma_port_priv *pp = ap->private_data;
901 handled += nv_host_intr(ap, irq_stat);
909 if (ata_tag_valid(ap->link.active_tag))
915 handled += nv_host_intr(ap, irq_stat);
924 if (!NV_ADMA_CHECK_INTR(gen_ctl, ap->port_no) && !notifier &&
948 struct ata_eh_info *ehi = &ap->link.eh_info;
966 ata_port_freeze(ap);
979 if (ata_tag_valid(ap->link.active_tag))
981 ap->link.active_tag;
983 check_commands = ap->link.sactive;
989 rc = nv_adma_check_cpb(ap, pos,
997 ata_qc_complete_multiple(ap, ata_qc_get_active(ap) ^ done_mask);
1015 static void nv_adma_freeze(struct ata_port *ap)
1017 struct nv_adma_port_priv *pp = ap->private_data;
1021 nv_ck804_freeze(ap);
1027 writeb(NV_INT_ALL << (ap->port_no * NV_INT_PORT_SHIFT),
1028 ap->host->iomap[NV_MMIO_BAR] + NV_INT_STATUS_CK804);
1037 static void nv_adma_thaw(struct ata_port *ap)
1039 struct nv_adma_port_priv *pp = ap->private_data;
1043 nv_ck804_thaw(ap);
1055 static void nv_adma_irq_clear(struct ata_port *ap)
1057 struct nv_adma_port_priv *pp = ap->private_data;
1062 ata_bmdma_irq_clear(ap);
1067 writeb(NV_INT_ALL << (ap->port_no * NV_INT_PORT_SHIFT),
1068 ap->host->iomap[NV_MMIO_BAR] + NV_INT_STATUS_CK804);
1075 if (ap->port_no == 0) {
1082 pp = ap->host->ports[0]->private_data;
1084 pp = ap->host->ports[1]->private_data;
1090 struct nv_adma_port_priv *pp = qc->ap->private_data;
1096 static int nv_adma_port_start(struct ata_port *ap)
1098 struct device *dev = ap->host->dev;
1116 rc = ata_bmdma_port_start(ap);
1124 mmio = ap->host->iomap[NV_MMIO_BAR] + NV_ADMA_PORT +
1125 ap->port_no * NV_ADMA_PORT_SIZE;
1127 pp->gen_block = ap->host->iomap[NV_MMIO_BAR] + NV_ADMA_GEN;
1129 NV_ADMA_NOTIFIER_CLEAR + (4 * ap->port_no);
1164 ap->private_data = pp;
1190 static void nv_adma_port_stop(struct ata_port *ap)
1192 struct nv_adma_port_priv *pp = ap->private_data;
1199 static int nv_adma_port_suspend(struct ata_port *ap, pm_message_t mesg)
1201 struct nv_adma_port_priv *pp = ap->private_data;
1205 nv_adma_register_mode(ap);
1216 static int nv_adma_port_resume(struct ata_port *ap)
1218 struct nv_adma_port_priv *pp = ap->private_data;
1251 static void nv_adma_setup_port(struct ata_port *ap)
1253 void __iomem *mmio = ap->host->iomap[NV_MMIO_BAR];
1254 struct ata_ioports *ioport = &ap->ioaddr;
1256 mmio += NV_ADMA_PORT + ap->port_no * NV_ADMA_PORT_SIZE;
1315 struct nv_adma_port_priv *pp = qc->ap->private_data;
1333 struct nv_adma_port_priv *pp = qc->ap->private_data;
1350 struct nv_adma_port_priv *pp = qc->ap->private_data;
1358 nv_adma_register_mode(qc->ap);
1396 struct nv_adma_port_priv *pp = qc->ap->private_data;
1413 nv_adma_register_mode(qc->ap);
1416 nv_adma_mode(qc->ap);
1444 struct ata_port *ap = host->ports[i];
1447 qc = ata_qc_from_tag(ap, ap->link.active_tag);
1449 handled += ata_bmdma_port_intr(ap, qc);
1455 ap->ops->sff_check_status(ap);
1509 *val = ioread32(link->ap->ioaddr.scr_addr + (sc_reg * 4));
1518 iowrite32(val, link->ap->ioaddr.scr_addr + (sc_reg * 4));
1530 if (!(link->ap->pflags & ATA_PFLAG_LOADING) &&
1554 static void nv_nf2_freeze(struct ata_port *ap)
1556 void __iomem *scr_addr = ap->host->ports[0]->ioaddr.scr_addr;
1557 int shift = ap->port_no * NV_INT_PORT_SHIFT;
1565 static void nv_nf2_thaw(struct ata_port *ap)
1567 void __iomem *scr_addr = ap->host->ports[0]->ioaddr.scr_addr;
1568 int shift = ap->port_no * NV_INT_PORT_SHIFT;
1578 static void nv_ck804_freeze(struct ata_port *ap)
1580 void __iomem *mmio_base = ap->host->iomap[NV_MMIO_BAR];
1581 int shift = ap->port_no * NV_INT_PORT_SHIFT;
1589 static void nv_ck804_thaw(struct ata_port *ap)
1591 void __iomem *mmio_base = ap->host->iomap[NV_MMIO_BAR];
1592 int shift = ap->port_no * NV_INT_PORT_SHIFT;
1602 static void nv_mcp55_freeze(struct ata_port *ap)
1604 void __iomem *mmio_base = ap->host->iomap[NV_MMIO_BAR];
1605 int shift = ap->port_no * NV_INT_PORT_SHIFT_MCP55;
1615 static void nv_mcp55_thaw(struct ata_port *ap)
1617 void __iomem *mmio_base = ap->host->iomap[NV_MMIO_BAR];
1618 int shift = ap->port_no * NV_INT_PORT_SHIFT_MCP55;
1628 static void nv_adma_error_handler(struct ata_port *ap)
1630 struct nv_adma_port_priv *pp = ap->private_data;
1636 if (ata_tag_valid(ap->link.active_tag) || ap->link.sactive) {
1644 ata_port_err(ap,
1653 if ((ata_tag_valid(ap->link.active_tag) && i == ap->link.active_tag) ||
1654 ap->link.sactive & (1 << i))
1655 ata_port_err(ap,
1662 nv_adma_register_mode(ap);
1681 ata_bmdma_error_handler(ap);
1684 static void nv_swncq_qc_to_dq(struct ata_port *ap, struct ata_queued_cmd *qc)
1686 struct nv_swncq_port_priv *pp = ap->private_data;
1695 static struct ata_queued_cmd *nv_swncq_qc_from_dq(struct ata_port *ap)
1697 struct nv_swncq_port_priv *pp = ap->private_data;
1709 return ata_qc_from_tag(ap, tag);
1712 static void nv_swncq_fis_reinit(struct ata_port *ap)
1714 struct nv_swncq_port_priv *pp = ap->private_data;
1722 static void nv_swncq_pp_reinit(struct ata_port *ap)
1724 struct nv_swncq_port_priv *pp = ap->private_data;
1732 nv_swncq_fis_reinit(ap);
1735 static void nv_swncq_irq_clear(struct ata_port *ap, u16 fis)
1737 struct nv_swncq_port_priv *pp = ap->private_data;
1742 static void __ata_bmdma_stop(struct ata_port *ap)
1746 qc.ap = ap;
1750 static void nv_swncq_ncq_stop(struct ata_port *ap)
1752 struct nv_swncq_port_priv *pp = ap->private_data;
1757 ata_port_err(ap, "EH in SWNCQ mode,QC:qc_active 0x%llX sactive 0x%X\n",
1758 ap->qc_active, ap->link.sactive);
1759 ata_port_err(ap,
1765 ata_port_err(ap, "ATA_REG 0x%X ERR_REG 0x%X\n",
1766 ap->ops->sff_check_status(ap),
1767 ioread8(ap->ioaddr.error_addr));
1772 ata_port_err(ap, "tag : dhfis dmafis sdbfis sactive\n");
1782 ata_port_err(ap,
1791 nv_swncq_pp_reinit(ap);
1792 ap->ops->sff_irq_clear(ap);
1793 __ata_bmdma_stop(ap);
1794 nv_swncq_irq_clear(ap, 0xffff);
1797 static void nv_swncq_error_handler(struct ata_port *ap)
1799 struct ata_eh_context *ehc = &ap->link.eh_context;
1801 if (ap->link.sactive) {
1802 nv_swncq_ncq_stop(ap);
1806 ata_bmdma_error_handler(ap);
1810 static int nv_swncq_port_suspend(struct ata_port *ap, pm_message_t mesg)
1812 void __iomem *mmio = ap->host->iomap[NV_MMIO_BAR];
1829 static int nv_swncq_port_resume(struct ata_port *ap)
1831 void __iomem *mmio = ap->host->iomap[NV_MMIO_BAR];
1877 struct ata_port *ap = ata_shost_to_port(sdev->host);
1878 struct pci_dev *pdev = to_pci_dev(ap->host->dev);
1890 dev = &ap->link.device[sdev->id];
1891 if (!(ap->flags & ATA_FLAG_NCQ) || dev->class == ATA_DEV_ATAPI)
1921 static int nv_swncq_port_start(struct ata_port *ap)
1923 struct device *dev = ap->host->dev;
1924 void __iomem *mmio = ap->host->iomap[NV_MMIO_BAR];
1929 rc = ata_bmdma_port_start(ap);
1942 ap->private_data = pp;
1943 pp->sactive_block = ap->ioaddr.scr_addr + 4 * SCR_ACTIVE;
1944 pp->irq_block = mmio + NV_INT_STATUS_MCP55 + ap->port_no * 2;
1945 pp->tag_block = mmio + NV_NCQ_REG_MCP55 + ap->port_no * 2;
1967 struct ata_port *ap = qc->ap;
1969 struct nv_swncq_port_priv *pp = ap->private_data;
2001 static unsigned int nv_swncq_issue_atacmd(struct ata_port *ap,
2004 struct nv_swncq_port_priv *pp = ap->private_data;
2015 trace_ata_tf_load(ap, &qc->tf);
2016 ap->ops->sff_tf_load(ap, &qc->tf); /* load tf registers */
2017 trace_ata_exec_command(ap, &qc->tf, qc->hw_tag);
2018 ap->ops->sff_exec_command(ap, &qc->tf);
2025 struct ata_port *ap = qc->ap;
2026 struct nv_swncq_port_priv *pp = ap->private_data;
2032 nv_swncq_issue_atacmd(ap, qc);
2034 nv_swncq_qc_to_dq(ap, qc); /* add qc to defer queue */
2039 static void nv_swncq_hotplug(struct ata_port *ap, u32 fis)
2042 struct ata_eh_info *ehi = &ap->link.eh_info;
2047 sata_scr_read(&ap->link, SCR_ERROR, &serror);
2048 sata_scr_write(&ap->link, SCR_ERROR, serror);
2061 ata_port_freeze(ap);
2064 static int nv_swncq_sdbfis(struct ata_port *ap)
2067 struct nv_swncq_port_priv *pp = ap->private_data;
2068 struct ata_eh_info *ehi = &ap->link.eh_info;
2074 host_stat = ap->ops->bmdma_status(ap);
2075 trace_ata_bmdma_status(ap, host_stat);
2085 ap->ops->sff_irq_clear(ap);
2086 __ata_bmdma_stop(ap);
2095 ata_qc_complete_multiple(ap, ata_qc_get_active(ap) ^ done_mask);
2097 if (!ap->qc_active) {
2098 ata_port_dbg(ap, "over\n");
2099 nv_swncq_pp_reinit(ap);
2113 ata_port_dbg(ap, "QC: qc_active 0x%llx,"
2116 ap->qc_active, pp->qc_active,
2120 nv_swncq_fis_reinit(ap);
2123 qc = ata_qc_from_tag(ap, pp->last_issue_tag);
2124 nv_swncq_issue_atacmd(ap, qc);
2130 qc = nv_swncq_qc_from_dq(ap);
2132 nv_swncq_issue_atacmd(ap, qc);
2138 static inline u32 nv_swncq_tag(struct ata_port *ap)
2140 struct nv_swncq_port_priv *pp = ap->private_data;
2147 static void nv_swncq_dmafis(struct ata_port *ap)
2153 struct nv_swncq_port_priv *pp = ap->private_data;
2155 __ata_bmdma_stop(ap);
2156 tag = nv_swncq_tag(ap);
2158 ata_port_dbg(ap, "dma setup tag 0x%x\n", tag);
2159 qc = ata_qc_from_tag(ap, tag);
2168 ap->ioaddr.bmdma_addr + ATA_DMA_TABLE_OFS);
2171 dmactl = ioread8(ap->ioaddr.bmdma_addr + ATA_DMA_CMD);
2176 iowrite8(dmactl | ATA_DMA_START, ap->ioaddr.bmdma_addr + ATA_DMA_CMD);
2179 static void nv_swncq_host_interrupt(struct ata_port *ap, u16 fis)
2181 struct nv_swncq_port_priv *pp = ap->private_data;
2183 struct ata_eh_info *ehi = &ap->link.eh_info;
2187 ata_stat = ap->ops->sff_check_status(ap);
2188 nv_swncq_irq_clear(ap, fis);
2192 if (ata_port_is_frozen(ap))
2196 nv_swncq_hotplug(ap, fis);
2203 if (ap->ops->scr_read(&ap->link, SCR_ERROR, &serror))
2205 ap->ops->scr_write(&ap->link, SCR_ERROR, serror);
2213 ata_port_freeze(ap);
2226 ata_port_dbg(ap, "SWNCQ: qc_active 0x%X "
2230 if (nv_swncq_sdbfis(ap) < 0)
2249 ata_stat = ap->ops->sff_check_status(ap);
2254 ata_port_dbg(ap, "send next command\n");
2255 qc = nv_swncq_qc_from_dq(ap);
2256 nv_swncq_issue_atacmd(ap, qc);
2265 pp->dmafis_bits |= (0x1 << nv_swncq_tag(ap));
2267 nv_swncq_dmafis(ap);
2274 ata_port_freeze(ap);
2291 struct ata_port *ap = host->ports[i];
2293 if (ap->link.sactive) {
2294 nv_swncq_host_interrupt(ap, (u16)irq_stat);
2298 nv_swncq_irq_clear(ap, 0xfff0);
2300 handled += nv_host_intr(ap, (u8)irq_stat);