Lines Matching full:ap

592 static int mv_port_start(struct ata_port *ap);
593 static void mv_port_stop(struct ata_port *ap);
600 static void mv_eh_freeze(struct ata_port *ap);
601 static void mv_eh_thaw(struct ata_port *ap);
636 static int mv_stop_edma(struct ata_port *ap);
638 static void mv_edma_cfg(struct ata_port *ap, int want_ncq, int want_edma);
640 static void mv_pmp_select(struct ata_port *ap, int pmp);
645 static void mv_pmp_error_handler(struct ata_port *ap);
646 static void mv_process_crpb_entries(struct ata_port *ap,
649 static void mv_sff_irq_clear(struct ata_port *ap);
654 static u8 mv_bmdma_status(struct ata_port *ap);
655 static u8 mv_sff_check_status(struct ata_port *ap);
895 static inline void __iomem *mv_ap_base(struct ata_port *ap) in mv_ap_base() argument
897 return mv_port_base(mv_host_base(ap->host), ap->port_no); in mv_ap_base()
907 * @ap: the port whose registers we are caching
915 static void mv_save_cached_regs(struct ata_port *ap) in mv_save_cached_regs() argument
917 void __iomem *port_mmio = mv_ap_base(ap); in mv_save_cached_regs()
918 struct mv_port_priv *pp = ap->private_data; in mv_save_cached_regs()
1023 static void mv_enable_port_irqs(struct ata_port *ap, in mv_enable_port_irqs() argument
1026 unsigned int shift, hardport, port = ap->port_no; in mv_enable_port_irqs()
1033 mv_set_main_irq_mask(ap->host, disable_bits, enable_bits); in mv_enable_port_irqs()
1036 static void mv_clear_and_enable_port_irqs(struct ata_port *ap, in mv_clear_and_enable_port_irqs() argument
1040 struct mv_host_priv *hpriv = ap->host->private_data; in mv_clear_and_enable_port_irqs()
1041 int hardport = mv_hardport_from_port(ap->port_no); in mv_clear_and_enable_port_irqs()
1043 mv_host_base(ap->host), ap->port_no); in mv_clear_and_enable_port_irqs()
1057 mv_enable_port_irqs(ap, port_irqs); in mv_clear_and_enable_port_irqs()
1132 static void mv_start_edma(struct ata_port *ap, void __iomem *port_mmio, in mv_start_edma() argument
1140 mv_stop_edma(ap); in mv_start_edma()
1143 struct mv_host_priv *hpriv = ap->host->private_data; in mv_start_edma()
1145 mv_edma_cfg(ap, want_ncq, 1); in mv_start_edma()
1148 mv_clear_and_enable_port_irqs(ap, port_mmio, DONE_IRQ|ERR_IRQ); in mv_start_edma()
1155 static void mv_wait_for_edma_empty_idle(struct ata_port *ap) in mv_wait_for_edma_empty_idle() argument
1157 void __iomem *port_mmio = mv_ap_base(ap); in mv_wait_for_edma_empty_idle()
1175 /* ata_port_info(ap, "%s: %u+ usecs\n", __func__, i); */ in mv_wait_for_edma_empty_idle()
1202 static int mv_stop_edma(struct ata_port *ap) in mv_stop_edma() argument
1204 void __iomem *port_mmio = mv_ap_base(ap); in mv_stop_edma()
1205 struct mv_port_priv *pp = ap->private_data; in mv_stop_edma()
1211 mv_wait_for_edma_empty_idle(ap); in mv_stop_edma()
1213 ata_port_err(ap, "Unable to stop eDMA\n"); in mv_stop_edma()
1216 mv_edma_cfg(ap, 0, 0); in mv_stop_edma()
1315 *val = readl(mv_ap_base(link->ap) + ofs); in mv_scr_read()
1326 void __iomem *addr = mv_ap_base(link->ap) + ofs; in mv_scr_write()
1327 struct mv_host_priv *hpriv = link->ap->host->private_data; in mv_scr_write()
1347 mv_ap_base(link->ap) + LP_PHY_CTL; in mv_scr_write()
1379 if (sata_pmp_attached(adev->link->ap)) { in mv6_dev_config()
1390 struct ata_port *ap = link->ap; in mv_qc_defer() local
1391 struct mv_port_priv *pp = ap->private_data; in mv_qc_defer()
1408 if (unlikely(ap->excl_link)) { in mv_qc_defer()
1409 if (link == ap->excl_link) { in mv_qc_defer()
1410 if (ap->nr_active_links) in mv_qc_defer()
1421 if (ap->nr_active_links == 0) in mv_qc_defer()
1435 ap->excl_link = link; in mv_qc_defer()
1443 static void mv_config_fbs(struct ata_port *ap, int want_ncq, int want_fbs) in mv_config_fbs() argument
1445 struct mv_port_priv *pp = ap->private_data; in mv_config_fbs()
1466 port_mmio = mv_ap_base(ap); in mv_config_fbs()
1472 static void mv_60x1_errata_sata25(struct ata_port *ap, int want_ncq) in mv_60x1_errata_sata25() argument
1474 struct mv_host_priv *hpriv = ap->host->private_data; in mv_60x1_errata_sata25()
1489 * @ap: Port being initialized
1499 static void mv_bmdma_enable_iie(struct ata_port *ap, int enable_bmdma) in mv_bmdma_enable_iie() argument
1501 struct mv_port_priv *pp = ap->private_data; in mv_bmdma_enable_iie()
1508 mv_write_cached_reg(mv_ap_base(ap) + EDMA_UNKNOWN_RSVD, old, new); in mv_bmdma_enable_iie()
1525 static void mv_soc_led_blink_enable(struct ata_port *ap) in mv_soc_led_blink_enable() argument
1527 struct ata_host *host = ap->host; in mv_soc_led_blink_enable()
1535 hc_mmio = mv_hc_base_from_port(mv_host_base(host), ap->port_no); in mv_soc_led_blink_enable()
1540 static void mv_soc_led_blink_disable(struct ata_port *ap) in mv_soc_led_blink_disable() argument
1542 struct ata_host *host = ap->host; in mv_soc_led_blink_disable()
1561 hc_mmio = mv_hc_base_from_port(mv_host_base(host), ap->port_no); in mv_soc_led_blink_disable()
1566 static void mv_edma_cfg(struct ata_port *ap, int want_ncq, int want_edma) in mv_edma_cfg() argument
1569 struct mv_port_priv *pp = ap->private_data; in mv_edma_cfg()
1570 struct mv_host_priv *hpriv = ap->host->private_data; in mv_edma_cfg()
1571 void __iomem *port_mmio = mv_ap_base(ap); in mv_edma_cfg()
1583 mv_60x1_errata_sata25(ap, want_ncq); in mv_edma_cfg()
1586 int want_fbs = sata_pmp_attached(ap); in mv_edma_cfg()
1597 mv_config_fbs(ap, want_ncq, want_fbs); in mv_edma_cfg()
1612 mv_bmdma_enable_iie(ap, !want_edma); in mv_edma_cfg()
1616 mv_soc_led_blink_enable(ap); in mv_edma_cfg()
1618 mv_soc_led_blink_disable(ap); in mv_edma_cfg()
1630 static void mv_port_free_dma_mem(struct ata_port *ap) in mv_port_free_dma_mem() argument
1632 struct mv_host_priv *hpriv = ap->host->private_data; in mv_port_free_dma_mem()
1633 struct mv_port_priv *pp = ap->private_data; in mv_port_free_dma_mem()
1661 * @ap: ATA channel to manipulate
1669 static int mv_port_start(struct ata_port *ap) in mv_port_start() argument
1671 struct device *dev = ap->host->dev; in mv_port_start()
1672 struct mv_host_priv *hpriv = ap->host->private_data; in mv_port_start()
1680 ap->private_data = pp; in mv_port_start()
1692 ap->flags |= ATA_FLAG_AN; in mv_port_start()
1709 spin_lock_irqsave(ap->lock, flags); in mv_port_start()
1710 mv_save_cached_regs(ap); in mv_port_start()
1711 mv_edma_cfg(ap, 0, 0); in mv_port_start()
1712 spin_unlock_irqrestore(ap->lock, flags); in mv_port_start()
1717 mv_port_free_dma_mem(ap); in mv_port_start()
1723 * @ap: ATA channel to manipulate
1730 static void mv_port_stop(struct ata_port *ap) in mv_port_stop() argument
1734 spin_lock_irqsave(ap->lock, flags); in mv_port_stop()
1735 mv_stop_edma(ap); in mv_port_stop()
1736 mv_enable_port_irqs(ap, 0); in mv_port_stop()
1737 spin_unlock_irqrestore(ap->lock, flags); in mv_port_stop()
1738 mv_port_free_dma_mem(ap); in mv_port_stop()
1752 struct mv_port_priv *pp = qc->ap->private_data; in mv_fill_sg()
1796 * @ap: Port associated with this ATA transaction.
1802 static void mv_sff_irq_clear(struct ata_port *ap) in mv_sff_irq_clear() argument
1804 mv_clear_and_enable_port_irqs(ap, mv_ap_base(ap), ERR_IRQ); in mv_sff_irq_clear()
1848 struct ata_port *ap = qc->ap; in mv_bmdma_setup() local
1849 void __iomem *port_mmio = mv_ap_base(ap); in mv_bmdma_setup()
1850 struct mv_port_priv *pp = ap->private_data; in mv_bmdma_setup()
1864 ap->ops->sff_exec_command(ap, &qc->tf); in mv_bmdma_setup()
1876 struct ata_port *ap = qc->ap; in mv_bmdma_start() local
1877 void __iomem *port_mmio = mv_ap_base(ap); in mv_bmdma_start()
1887 * @ap: port to stop
1894 static void mv_bmdma_stop_ap(struct ata_port *ap) in mv_bmdma_stop_ap() argument
1896 void __iomem *port_mmio = mv_ap_base(ap); in mv_bmdma_stop_ap()
1906 ata_sff_dma_pause(ap); in mv_bmdma_stop_ap()
1912 mv_bmdma_stop_ap(qc->ap); in mv_bmdma_stop()
1917 * @ap: port for which to retrieve DMA status.
1924 static u8 mv_bmdma_status(struct ata_port *ap) in mv_bmdma_status() argument
1926 void __iomem *port_mmio = mv_ap_base(ap); in mv_bmdma_status()
1945 mv_bmdma_stop_ap(ap); in mv_bmdma_status()
1946 if (ioread8(ap->ioaddr.altstatus_addr) & ATA_BUSY) in mv_bmdma_status()
2001 struct ata_port *ap = qc->ap; in mv_qc_prep() local
2002 struct mv_port_priv *pp = ap->private_data; in mv_qc_prep()
2067 ata_port_err(ap, "%s: unsupported command: %.2x\n", __func__, in mv_qc_prep()
2102 struct ata_port *ap = qc->ap; in mv_qc_prep_iie() local
2103 struct mv_port_priv *pp = ap->private_data; in mv_qc_prep_iie()
2162 * @ap: ATA port to fetch status from
2173 static u8 mv_sff_check_status(struct ata_port *ap) in mv_sff_check_status() argument
2175 u8 stat = ioread8(ap->ioaddr.status_addr); in mv_sff_check_status()
2176 struct mv_port_priv *pp = ap->private_data; in mv_sff_check_status()
2189 * @ap: ATA port to send a FIS
2193 static unsigned int mv_send_fis(struct ata_port *ap, u32 *fis, int nwords) in mv_send_fis() argument
2195 void __iomem *port_mmio = mv_ap_base(ap); in mv_send_fis()
2225 ata_port_warn(ap, "%s transmission error, ifstat=%08x\n", in mv_send_fis()
2251 struct ata_port *ap = qc->ap; in mv_qc_issue_fis() local
2252 struct mv_port_priv *pp = ap->private_data; in mv_qc_issue_fis()
2258 err = mv_send_fis(ap, fis, ARRAY_SIZE(fis)); in mv_qc_issue_fis()
2267 ap->hsm_task_state = HSM_ST_FIRST; in mv_qc_issue_fis()
2272 ap->hsm_task_state = HSM_ST_FIRST; in mv_qc_issue_fis()
2274 ap->hsm_task_state = HSM_ST; in mv_qc_issue_fis()
2277 ap->hsm_task_state = HSM_ST_LAST; in mv_qc_issue_fis()
2301 struct ata_port *ap = qc->ap; in mv_qc_issue() local
2302 void __iomem *port_mmio = mv_ap_base(ap); in mv_qc_issue()
2303 struct mv_port_priv *pp = ap->private_data; in mv_qc_issue()
2312 if (!ap->ops->bmdma_setup) /* no bmdma on GEN_I */ in mv_qc_issue()
2318 mv_start_edma(ap, port_mmio, pp, qc->tf.protocol); in mv_qc_issue()
2349 if (ap->flags & ATA_FLAG_PIO_POLLING) in mv_qc_issue()
2364 mv_stop_edma(ap); in mv_qc_issue()
2365 mv_clear_and_enable_port_irqs(ap, mv_ap_base(ap), port_irqs); in mv_qc_issue()
2366 mv_pmp_select(ap, qc->dev->link->pmp); in mv_qc_issue()
2369 struct mv_host_priv *hpriv = ap->host->private_data; in mv_qc_issue()
2387 static struct ata_queued_cmd *mv_get_active_qc(struct ata_port *ap) in mv_get_active_qc() argument
2389 struct mv_port_priv *pp = ap->private_data; in mv_get_active_qc()
2394 qc = ata_qc_from_tag(ap, ap->link.active_tag); in mv_get_active_qc()
2400 static void mv_pmp_error_handler(struct ata_port *ap) in mv_pmp_error_handler() argument
2401 __must_hold(&ap->host->eh_mutex) in mv_pmp_error_handler()
2404 struct mv_port_priv *pp = ap->private_data; in mv_pmp_error_handler()
2418 struct ata_link *link = &ap->pmp_link[pmp]; in mv_pmp_error_handler()
2423 ata_port_freeze(ap); in mv_pmp_error_handler()
2425 sata_pmp_error_handler(ap); in mv_pmp_error_handler()
2428 static unsigned int mv_get_err_pmp_map(struct ata_port *ap) in mv_get_err_pmp_map() argument
2430 void __iomem *port_mmio = mv_ap_base(ap); in mv_get_err_pmp_map()
2435 static void mv_pmp_eh_prep(struct ata_port *ap, unsigned int pmp_map) in mv_pmp_eh_prep() argument
2445 struct ata_link *link = &ap->pmp_link[pmp]; in mv_pmp_eh_prep()
2458 static int mv_req_q_empty(struct ata_port *ap) in mv_req_q_empty() argument
2460 void __iomem *port_mmio = mv_ap_base(ap); in mv_req_q_empty()
2470 static int mv_handle_fbs_ncq_dev_err(struct ata_port *ap) in mv_handle_fbs_ncq_dev_err() argument
2472 struct mv_port_priv *pp = ap->private_data; in mv_handle_fbs_ncq_dev_err()
2489 new_map = old_map | mv_get_err_pmp_map(ap); in mv_handle_fbs_ncq_dev_err()
2493 mv_pmp_eh_prep(ap, new_map & ~old_map); in mv_handle_fbs_ncq_dev_err()
2497 ata_port_info(ap, in mv_handle_fbs_ncq_dev_err()
2500 ap->qc_active, failed_links, in mv_handle_fbs_ncq_dev_err()
2501 ap->nr_active_links); in mv_handle_fbs_ncq_dev_err()
2503 if (ap->nr_active_links <= failed_links && mv_req_q_empty(ap)) { in mv_handle_fbs_ncq_dev_err()
2504 mv_process_crpb_entries(ap, pp); in mv_handle_fbs_ncq_dev_err()
2505 mv_stop_edma(ap); in mv_handle_fbs_ncq_dev_err()
2506 mv_eh_freeze(ap); in mv_handle_fbs_ncq_dev_err()
2507 ata_port_info(ap, "%s: done\n", __func__); in mv_handle_fbs_ncq_dev_err()
2510 ata_port_info(ap, "%s: waiting\n", __func__); in mv_handle_fbs_ncq_dev_err()
2514 static int mv_handle_fbs_non_ncq_dev_err(struct ata_port *ap) in mv_handle_fbs_non_ncq_dev_err() argument
2530 static int mv_handle_dev_err(struct ata_port *ap, u32 edma_err_cause) in mv_handle_dev_err() argument
2532 struct mv_port_priv *pp = ap->private_data; in mv_handle_dev_err()
2552 ata_port_warn(ap, "%s: err_cause=0x%x pp_flags=0x%x\n", in mv_handle_dev_err()
2556 return mv_handle_fbs_ncq_dev_err(ap); in mv_handle_dev_err()
2564 ata_port_warn(ap, "%s: err_cause=0x%x pp_flags=0x%x\n", in mv_handle_dev_err()
2568 return mv_handle_fbs_non_ncq_dev_err(ap); in mv_handle_dev_err()
2573 static void mv_unexpected_intr(struct ata_port *ap, int edma_was_enabled) in mv_unexpected_intr() argument
2575 struct ata_eh_info *ehi = &ap->link.eh_info; in mv_unexpected_intr()
2582 struct ata_queued_cmd *qc = ata_qc_from_tag(ap, ap->link.active_tag); in mv_unexpected_intr()
2589 ata_port_freeze(ap); in mv_unexpected_intr()
2594 * @ap: ATA channel to manipulate
2603 static void mv_err_intr(struct ata_port *ap) in mv_err_intr() argument
2605 void __iomem *port_mmio = mv_ap_base(ap); in mv_err_intr()
2608 struct mv_port_priv *pp = ap->private_data; in mv_err_intr()
2609 struct mv_host_priv *hpriv = ap->host->private_data; in mv_err_intr()
2611 struct ata_eh_info *ehi = &ap->link.eh_info; in mv_err_intr()
2620 sata_scr_read(&ap->link, SCR_ERROR, &serr); in mv_err_intr()
2621 sata_scr_write_flush(&ap->link, SCR_ERROR, serr); in mv_err_intr()
2635 if (mv_handle_dev_err(ap, edma_err_cause)) in mv_err_intr()
2639 qc = mv_get_active_qc(ap); in mv_err_intr()
2649 sata_async_notification(ap); in mv_err_intr()
2719 mv_eh_freeze(ap); in mv_err_intr()
2725 ata_port_freeze(ap); in mv_err_intr()
2734 ata_port_abort(ap); in mv_err_intr()
2738 static bool mv_process_crpb_response(struct ata_port *ap, in mv_process_crpb_response() argument
2766 static void mv_process_crpb_entries(struct ata_port *ap, struct mv_port_priv *pp) in mv_process_crpb_entries() argument
2768 void __iomem *port_mmio = mv_ap_base(ap); in mv_process_crpb_entries()
2769 struct mv_host_priv *hpriv = ap->host->private_data; in mv_process_crpb_entries()
2788 tag = ap->link.active_tag; in mv_process_crpb_entries()
2793 if (mv_process_crpb_response(ap, response, tag, ncq_enabled)) in mv_process_crpb_entries()
2799 ata_qc_complete_multiple(ap, ata_qc_get_active(ap) ^ done_mask); in mv_process_crpb_entries()
2808 static void mv_port_intr(struct ata_port *ap, u32 port_cause) in mv_port_intr() argument
2818 pp = ap->private_data; in mv_port_intr()
2824 mv_process_crpb_entries(ap, pp); in mv_port_intr()
2826 mv_handle_fbs_ncq_dev_err(ap); in mv_port_intr()
2832 mv_err_intr(ap); in mv_port_intr()
2834 struct ata_queued_cmd *qc = mv_get_active_qc(ap); in mv_port_intr()
2836 ata_bmdma_port_intr(ap, qc); in mv_port_intr()
2838 mv_unexpected_intr(ap, edma_was_enabled); in mv_port_intr()
2861 struct ata_port *ap = host->ports[port]; in mv_host_intr() local
2910 mv_port_intr(ap, port_cause); in mv_host_intr()
2918 struct ata_port *ap; in mv_pci_error() local
2934 ap = host->ports[i]; in mv_pci_error()
2935 if (!ata_link_offline(&ap->link)) { in mv_pci_error()
2936 ehi = &ap->link.eh_info; in mv_pci_error()
2943 qc = ata_qc_from_tag(ap, ap->link.active_tag); in mv_pci_error()
2949 ata_port_freeze(ap); in mv_pci_error()
3024 struct mv_host_priv *hpriv = link->ap->host->private_data; in mv5_scr_read()
3026 void __iomem *addr = mv5_phy_base(mmio, link->ap->port_no); in mv5_scr_read()
3038 struct mv_host_priv *hpriv = link->ap->host->private_data; in mv5_scr_write()
3040 void __iomem *addr = mv5_phy_base(mmio, link->ap->port_no); in mv5_scr_write()
3560 static void mv_pmp_select(struct ata_port *ap, int pmp) in mv_pmp_select() argument
3562 if (sata_pmp_supported(ap)) { in mv_pmp_select()
3563 void __iomem *port_mmio = mv_ap_base(ap); in mv_pmp_select()
3577 mv_pmp_select(link->ap, sata_srst_pmp(link)); in mv_pmp_hardreset()
3584 mv_pmp_select(link->ap, sata_srst_pmp(link)); in mv_softreset()
3591 struct ata_port *ap = link->ap; in mv_hardreset() local
3592 struct mv_host_priv *hpriv = ap->host->private_data; in mv_hardreset()
3593 struct mv_port_priv *pp = ap->private_data; in mv_hardreset()
3599 mv_reset_channel(hpriv, mmio, ap->port_no); in mv_hardreset()
3617 mv_setup_ifcfg(mv_ap_base(ap), 0); in mv_hardreset()
3622 mv_save_cached_regs(ap); in mv_hardreset()
3623 mv_edma_cfg(ap, 0, 0); in mv_hardreset()
3628 static void mv_eh_freeze(struct ata_port *ap) in mv_eh_freeze() argument
3630 mv_stop_edma(ap); in mv_eh_freeze()
3631 mv_enable_port_irqs(ap, 0); in mv_eh_freeze()
3634 static void mv_eh_thaw(struct ata_port *ap) in mv_eh_thaw() argument
3636 struct mv_host_priv *hpriv = ap->host->private_data; in mv_eh_thaw()
3637 unsigned int port = ap->port_no; in mv_eh_thaw()
3640 void __iomem *port_mmio = mv_ap_base(ap); in mv_eh_thaw()
3650 mv_enable_port_irqs(ap, ERR_IRQ); in mv_eh_thaw()
3926 struct ata_port *ap = host->ports[port]; in mv_init_host() local
3929 mv_port_init(&ap->ioaddr, port_mmio); in mv_init_host()
4391 struct ata_port *ap = host->ports[port]; in mv_pci_init_one() local
4395 ata_port_pbar_desc(ap, MV_PRIMARY_BAR, -1, "mmio"); in mv_pci_init_one()
4396 ata_port_pbar_desc(ap, MV_PRIMARY_BAR, offset, "port"); in mv_pci_init_one()