Lines Matching refs:link

194 struct ata_link *ata_link_next(struct ata_link *link, struct ata_port *ap,  in ata_link_next()  argument
201 if (!link) in ata_link_next()
209 return &ap->link; in ata_link_next()
213 if (link == &ap->link) in ata_link_next()
228 if (unlikely(link == ap->slave_link)) in ata_link_next()
232 if (++link < ap->pmp_link + ap->nr_pmp_links) in ata_link_next()
233 return link; in ata_link_next()
236 return &ap->link; in ata_link_next()
253 struct ata_device *ata_dev_next(struct ata_device *dev, struct ata_link *link, in ata_dev_next() argument
264 dev = link->device; in ata_dev_next()
268 dev = link->device + ata_link_max_devices(link) - 1; in ata_dev_next()
277 if (++dev < link->device + ata_link_max_devices(link)) in ata_dev_next()
282 if (--dev >= link->device) in ata_dev_next()
310 struct ata_port *ap = dev->link->ap; in ata_dev_phys_link()
313 return dev->link; in ata_dev_phys_link()
315 return &ap->link; in ata_dev_phys_link()
367 static void ata_force_link_limits(struct ata_link *link) in ata_force_link_limits() argument
370 int linkno = link->pmp; in ata_force_link_limits()
373 if (ata_is_host_link(link)) in ata_force_link_limits()
379 if (fe->port != -1 && fe->port != link->ap->print_id) in ata_force_link_limits()
387 link->hw_sata_spd_limit = (1 << fe->param.spd_limit) - 1; in ata_force_link_limits()
388 ata_link_notice(link, "FORCE: PHY spd limit set to %s\n", in ata_force_link_limits()
395 link->flags |= fe->param.lflags; in ata_force_link_limits()
396 ata_link_notice(link, in ata_force_link_limits()
398 fe->param.lflags, link->flags); in ata_force_link_limits()
416 int devno = dev->link->pmp + dev->devno; in ata_force_xfermask()
421 if (ata_is_host_link(dev->link)) in ata_force_xfermask()
428 if (fe->port != -1 && fe->port != dev->link->ap->print_id) in ata_force_xfermask()
470 int devno = dev->link->pmp + dev->devno; in ata_force_horkage()
475 if (ata_is_host_link(dev->link)) in ata_force_horkage()
481 if (fe->port != -1 && fe->port != dev->link->ap->print_id) in ata_force_horkage()
665 } else if (lba48 && (dev->link->ap->flags & ATA_FLAG_PIO_LBA48)) { in ata_rwcmd_protocol()
1332 struct ata_eh_context *ehc = &dev->link->eh_context; in ata_hpa_resize()
1558 struct ata_link *link = dev->link; in ata_exec_internal_sg() local
1559 struct ata_port *ap = link->ap; in ata_exec_internal_sg()
1599 preempted_tag = link->active_tag; in ata_exec_internal_sg()
1600 preempted_sactive = link->sactive; in ata_exec_internal_sg()
1603 link->active_tag = ATA_TAG_POISON; in ata_exec_internal_sg()
1604 link->sactive = 0; in ata_exec_internal_sg()
1704 link->active_tag = preempted_tag; in ata_exec_internal_sg()
1705 link->sactive = preempted_sactive; in ata_exec_internal_sg()
1768 if (adev->link->ap->pflags & ATA_PFLAG_RESETTING) in ata_pio_need_iordy()
1773 if (adev->link->ap->flags & ATA_FLAG_NO_IORDY) in ata_pio_need_iordy()
1852 struct ata_port *ap = dev->link->ap; in ata_dev_read_id()
2073 struct ata_port *ap = dev->link->ap; in ata_dev_knobble()
2084 struct ata_port *ap = dev->link->ap; in ata_dev_config_ncq()
2165 struct ata_port *ap = dev->link->ap; in ata_dev_configure()
2166 struct ata_eh_context *ehc = &dev->link->eh_context; in ata_dev_configure()
2214 dev->link->ap->target_lpm_policy = ATA_LPM_MAX_POWER; in ata_dev_configure()
2400 sata_scr_read(&ap->link, SCR_NOTIFICATION, &sntf) == 0)) { in ata_dev_configure()
2585 ata_for_each_dev(dev, &ap->link, ALL) in ata_bus_probe()
2589 ata_for_each_dev(dev, &ap->link, ALL) { in ata_bus_probe()
2612 ata_for_each_dev(dev, &ap->link, ALL) { in ata_bus_probe()
2625 ata_for_each_dev(dev, &ap->link, ALL_REVERSE) { in ata_bus_probe()
2647 ata_for_each_dev(dev, &ap->link, ENABLED) in ata_bus_probe()
2654 ata_for_each_dev(dev, &ap->link, ENABLED) { in ata_bus_probe()
2655 ap->link.eh_context.i.flags |= ATA_EHI_PRINTINFO; in ata_bus_probe()
2657 ap->link.eh_context.i.flags &= ~ATA_EHI_PRINTINFO; in ata_bus_probe()
2663 rc = ata_set_mode(&ap->link, &dev); in ata_bus_probe()
2667 ata_for_each_dev(dev, &ap->link, ENABLED) in ata_bus_probe()
2689 sata_down_spd_limit(&ap->link, 0); in ata_bus_probe()
2709 static void sata_print_link_status(struct ata_link *link) in sata_print_link_status() argument
2713 if (sata_scr_read(link, SCR_STATUS, &sstatus)) in sata_print_link_status()
2715 sata_scr_read(link, SCR_CONTROL, &scontrol); in sata_print_link_status()
2717 if (ata_phys_link_online(link)) { in sata_print_link_status()
2719 ata_link_info(link, "SATA link up %s (SStatus %X SControl %X)\n", in sata_print_link_status()
2722 ata_link_info(link, "SATA link down (SStatus %X SControl %X)\n", in sata_print_link_status()
2737 struct ata_link *link = adev->link; in ata_dev_pair() local
2738 struct ata_device *pair = &link->device[1 - adev->devno]; in ata_dev_pair()
2764 int sata_down_spd_limit(struct ata_link *link, u32 spd_limit) in sata_down_spd_limit() argument
2769 if (!sata_scr_valid(link)) in sata_down_spd_limit()
2775 rc = sata_scr_read(link, SCR_STATUS, &sstatus); in sata_down_spd_limit()
2779 spd = link->sata_spd; in sata_down_spd_limit()
2781 mask = link->sata_spd_limit; in sata_down_spd_limit()
2810 link->sata_spd_limit = mask; in sata_down_spd_limit()
2812 ata_link_warn(link, "limiting SATA link speed to %s\n", in sata_down_spd_limit()
2818 static int __sata_set_spd_needed(struct ata_link *link, u32 *scontrol) in __sata_set_spd_needed() argument
2820 struct ata_link *host_link = &link->ap->link; in __sata_set_spd_needed()
2823 limit = link->sata_spd_limit; in __sata_set_spd_needed()
2829 if (!ata_is_host_link(link) && host_link->sata_spd) in __sata_set_spd_needed()
2858 static int sata_set_spd_needed(struct ata_link *link) in sata_set_spd_needed() argument
2862 if (sata_scr_read(link, SCR_CONTROL, &scontrol)) in sata_set_spd_needed()
2865 return __sata_set_spd_needed(link, &scontrol); in sata_set_spd_needed()
2881 int sata_set_spd(struct ata_link *link) in sata_set_spd() argument
2886 if ((rc = sata_scr_read(link, SCR_CONTROL, &scontrol))) in sata_set_spd()
2889 if (!__sata_set_spd_needed(link, &scontrol)) in sata_set_spd()
2892 if ((rc = sata_scr_write(link, SCR_CONTROL, scontrol))) in sata_set_spd()
3205 struct ata_port *ap = dev->link->ap; in ata_dev_set_mode()
3206 struct ata_eh_context *ehc = &dev->link->eh_context; in ata_dev_set_mode()
3301 int ata_do_set_mode(struct ata_link *link, struct ata_device **r_failed_dev) in ata_do_set_mode() argument
3303 struct ata_port *ap = link->ap; in ata_do_set_mode()
3308 ata_for_each_dev(dev, link, ENABLED) { in ata_do_set_mode()
3340 ata_for_each_dev(dev, link, ENABLED) { in ata_do_set_mode()
3354 ata_for_each_dev(dev, link, ENABLED) { in ata_do_set_mode()
3365 ata_for_each_dev(dev, link, ENABLED) { in ata_do_set_mode()
3403 int ata_wait_ready(struct ata_link *link, unsigned long deadline, in ata_wait_ready() argument
3404 int (*check_ready)(struct ata_link *link)) in ata_wait_ready() argument
3411 if (link->ap->host->flags & ATA_HOST_PARALLEL_SCAN) in ata_wait_ready()
3420 WARN_ON(link == link->ap->slave_link); in ata_wait_ready()
3429 ready = tmp = check_ready(link); in ata_wait_ready()
3445 if (ata_link_online(link)) in ata_wait_ready()
3447 else if ((link->ap->flags & ATA_FLAG_SATA) && in ata_wait_ready()
3448 !ata_link_offline(link) && in ata_wait_ready()
3460 ata_link_warn(link, in ata_wait_ready()
3466 ata_msleep(link->ap, 50); in ata_wait_ready()
3484 int ata_wait_after_reset(struct ata_link *link, unsigned long deadline, in ata_wait_after_reset() argument
3485 int (*check_ready)(struct ata_link *link)) in ata_wait_after_reset() argument
3487 ata_msleep(link->ap, ATA_WAIT_AFTER_RESET); in ata_wait_after_reset()
3489 return ata_wait_ready(link, deadline, check_ready); in ata_wait_after_reset()
3514 int sata_link_debounce(struct ata_link *link, const unsigned long *params, in sata_link_debounce() argument
3527 if ((rc = sata_scr_read(link, SCR_STATUS, &cur))) in sata_link_debounce()
3535 ata_msleep(link->ap, interval); in sata_link_debounce()
3536 if ((rc = sata_scr_read(link, SCR_STATUS, &cur))) in sata_link_debounce()
3576 int sata_link_resume(struct ata_link *link, const unsigned long *params, in sata_link_resume() argument
3583 if ((rc = sata_scr_read(link, SCR_CONTROL, &scontrol))) in sata_link_resume()
3593 if ((rc = sata_scr_write(link, SCR_CONTROL, scontrol))) in sata_link_resume()
3600 ata_msleep(link->ap, 200); in sata_link_resume()
3603 if ((rc = sata_scr_read(link, SCR_CONTROL, &scontrol))) in sata_link_resume()
3608 ata_link_warn(link, "failed to resume link (SControl %X)\n", in sata_link_resume()
3614 ata_link_warn(link, "link resume succeeded after %d retries\n", in sata_link_resume()
3617 if ((rc = sata_link_debounce(link, params, deadline))) in sata_link_resume()
3621 if (!(rc = sata_scr_read(link, SCR_ERROR, &serror))) in sata_link_resume()
3622 rc = sata_scr_write(link, SCR_ERROR, serror); in sata_link_resume()
3645 int sata_link_scr_lpm(struct ata_link *link, enum ata_lpm_policy policy, in sata_link_scr_lpm() argument
3648 struct ata_eh_context *ehc = &link->eh_context; in sata_link_scr_lpm()
3653 rc = sata_scr_read(link, SCR_CONTROL, &scontrol); in sata_link_scr_lpm()
3673 if (ata_link_nr_enabled(link) > 0) in sata_link_scr_lpm()
3686 rc = sata_scr_write(link, SCR_CONTROL, scontrol); in sata_link_scr_lpm()
3696 return sata_scr_write(link, SCR_ERROR, SERR_PHYRDY_CHG); in sata_link_scr_lpm()
3716 int ata_std_prereset(struct ata_link *link, unsigned long deadline) in ata_std_prereset() argument
3718 struct ata_port *ap = link->ap; in ata_std_prereset()
3719 struct ata_eh_context *ehc = &link->eh_context; in ata_std_prereset()
3729 rc = sata_link_resume(link, timing, deadline); in ata_std_prereset()
3732 ata_link_warn(link, in ata_std_prereset()
3738 if (ata_phys_link_offline(link)) in ata_std_prereset()
3768 int sata_link_hardreset(struct ata_link *link, const unsigned long *timing, in sata_link_hardreset() argument
3780 if (sata_set_spd_needed(link)) { in sata_link_hardreset()
3786 if ((rc = sata_scr_read(link, SCR_CONTROL, &scontrol))) in sata_link_hardreset()
3791 if ((rc = sata_scr_write(link, SCR_CONTROL, scontrol))) in sata_link_hardreset()
3794 sata_set_spd(link); in sata_link_hardreset()
3798 if ((rc = sata_scr_read(link, SCR_CONTROL, &scontrol))) in sata_link_hardreset()
3803 if ((rc = sata_scr_write_flush(link, SCR_CONTROL, scontrol))) in sata_link_hardreset()
3809 ata_msleep(link->ap, 1); in sata_link_hardreset()
3812 rc = sata_link_resume(link, timing, deadline); in sata_link_hardreset()
3816 if (ata_phys_link_offline(link)) in sata_link_hardreset()
3823 if (sata_pmp_supported(link->ap) && ata_is_host_link(link)) { in sata_link_hardreset()
3836 ata_wait_ready(link, pmp_deadline, check_ready); in sata_link_hardreset()
3844 rc = ata_wait_ready(link, deadline, check_ready); in sata_link_hardreset()
3850 ata_link_err(link, "COMRESET failed (errno=%d)\n", rc); in sata_link_hardreset()
3870 int sata_std_hardreset(struct ata_link *link, unsigned int *class, in sata_std_hardreset() argument
3873 const unsigned long *timing = sata_ehc_deb_timing(&link->eh_context); in sata_std_hardreset()
3878 rc = sata_link_hardreset(link, timing, deadline, &online, NULL); in sata_std_hardreset()
3894 void ata_std_postreset(struct ata_link *link, unsigned int *classes) in ata_std_postreset() argument
3901 if (!sata_scr_read(link, SCR_ERROR, &serror)) in ata_std_postreset()
3902 sata_scr_write(link, SCR_ERROR, serror); in ata_std_postreset()
3905 sata_print_link_status(link); in ata_std_postreset()
3976 u16 *id = (void *)dev->link->ap->sector_buf; in ata_dev_reread_id()
4313 if ((dev->link->ap->flags & ATA_FLAG_PIO_POLLING) && in ata_dma_blacklisted()
4349 struct ata_link *link; in cable_is_40wire() local
4376 ata_for_each_link(link, ap, EDGE) { in cable_is_40wire()
4377 ata_for_each_dev(dev, link, ENABLED) { in cable_is_40wire()
4399 struct ata_link *link = dev->link; in ata_dev_xfermask() local
4400 struct ata_port *ap = link->ap; in ata_dev_xfermask()
4663 struct ata_link *link = qc->dev->link; in ata_std_qc_defer() local
4666 if (!ata_tag_valid(link->active_tag)) in ata_std_qc_defer()
4669 if (!ata_tag_valid(link->active_tag) && !link->sactive) in ata_std_qc_defer()
4764 struct ata_port *ap = dev->link->ap; in ata_qc_new_init()
4819 struct ata_link *link; in __ata_qc_complete() local
4824 link = qc->dev->link; in __ata_qc_complete()
4831 link->sactive &= ~(1 << qc->tag); in __ata_qc_complete()
4832 if (!link->sactive) in __ata_qc_complete()
4835 link->active_tag = ATA_TAG_POISON; in __ata_qc_complete()
4841 ap->excl_link == link)) in __ata_qc_complete()
4910 struct ata_eh_info *ehi = &dev->link->eh_info; in ata_qc_complete()
5044 struct ata_link *link = qc->dev->link; in ata_qc_issue() local
5051 WARN_ON_ONCE(ap->ops->error_handler && ata_tag_valid(link->active_tag)); in ata_qc_issue()
5054 WARN_ON_ONCE(link->sactive & (1 << qc->tag)); in ata_qc_issue()
5056 if (!link->sactive) in ata_qc_issue()
5058 link->sactive |= 1 << qc->tag; in ata_qc_issue()
5060 WARN_ON_ONCE(link->sactive); in ata_qc_issue()
5063 link->active_tag = qc->tag; in ata_qc_issue()
5084 link->eh_info.action |= ATA_EH_RESET; in ata_qc_issue()
5085 ata_ehi_push_desc(&link->eh_info, "waking up from sleep"); in ata_qc_issue()
5086 ata_link_abort(link); in ata_qc_issue()
5115 int sata_scr_valid(struct ata_link *link) in sata_scr_valid() argument
5117 struct ata_port *ap = link->ap; in sata_scr_valid()
5138 int sata_scr_read(struct ata_link *link, int reg, u32 *val) in sata_scr_read() argument
5140 if (ata_is_host_link(link)) { in sata_scr_read()
5141 if (sata_scr_valid(link)) in sata_scr_read()
5142 return link->ap->ops->scr_read(link, reg, val); in sata_scr_read()
5146 return sata_pmp_scr_read(link, reg, val); in sata_scr_read()
5165 int sata_scr_write(struct ata_link *link, int reg, u32 val) in sata_scr_write() argument
5167 if (ata_is_host_link(link)) { in sata_scr_write()
5168 if (sata_scr_valid(link)) in sata_scr_write()
5169 return link->ap->ops->scr_write(link, reg, val); in sata_scr_write()
5173 return sata_pmp_scr_write(link, reg, val); in sata_scr_write()
5191 int sata_scr_write_flush(struct ata_link *link, int reg, u32 val) in sata_scr_write_flush() argument
5193 if (ata_is_host_link(link)) { in sata_scr_write_flush()
5196 if (sata_scr_valid(link)) { in sata_scr_write_flush()
5197 rc = link->ap->ops->scr_write(link, reg, val); in sata_scr_write_flush()
5199 rc = link->ap->ops->scr_read(link, reg, &val); in sata_scr_write_flush()
5205 return sata_pmp_scr_write(link, reg, val); in sata_scr_write_flush()
5222 bool ata_phys_link_online(struct ata_link *link) in ata_phys_link_online() argument
5226 if (sata_scr_read(link, SCR_STATUS, &sstatus) == 0 && in ata_phys_link_online()
5246 bool ata_phys_link_offline(struct ata_link *link) in ata_phys_link_offline() argument
5250 if (sata_scr_read(link, SCR_STATUS, &sstatus) == 0 && in ata_phys_link_offline()
5272 bool ata_link_online(struct ata_link *link) in ata_link_online() argument
5274 struct ata_link *slave = link->ap->slave_link; in ata_link_online()
5276 WARN_ON(link == slave); /* shouldn't be called on slave link */ in ata_link_online()
5278 return ata_phys_link_online(link) || in ata_link_online()
5298 bool ata_link_offline(struct ata_link *link) in ata_link_offline() argument
5300 struct ata_link *slave = link->ap->slave_link; in ata_link_offline()
5302 WARN_ON(link == slave); /* shouldn't be called on slave link */ in ata_link_offline()
5304 return ata_phys_link_offline(link) && in ata_link_offline()
5313 struct ata_link *link; in ata_port_request_pm() local
5329 ata_for_each_link(link, ap, HOST_FIRST) { in ata_port_request_pm()
5330 link->eh_info.action |= action; in ata_port_request_pm()
5331 link->eh_info.flags |= ehi_flags; in ata_port_request_pm()
5426 struct ata_link *link; in ata_port_runtime_idle() local
5429 ata_for_each_link(link, ap, HOST_FIRST) { in ata_port_runtime_idle()
5430 ata_for_each_dev(adev, link, ENABLED) in ata_port_runtime_idle()
5524 struct ata_link *link = ata_dev_phys_link(dev); in ata_dev_init() local
5525 struct ata_port *ap = link->ap; in ata_dev_init()
5529 link->sata_spd_limit = link->hw_sata_spd_limit; in ata_dev_init()
5530 link->sata_spd = 0; in ata_dev_init()
5559 void ata_link_init(struct ata_port *ap, struct ata_link *link, int pmp) in ata_link_init() argument
5564 memset((void *)link + ATA_LINK_CLEAR_BEGIN, 0, in ata_link_init()
5567 link->ap = ap; in ata_link_init()
5568 link->pmp = pmp; in ata_link_init()
5569 link->active_tag = ATA_TAG_POISON; in ata_link_init()
5570 link->hw_sata_spd_limit = UINT_MAX; in ata_link_init()
5574 struct ata_device *dev = &link->device[i]; in ata_link_init()
5576 dev->link = link; in ata_link_init()
5577 dev->devno = dev - link->device; in ata_link_init()
5598 int sata_link_init_spd(struct ata_link *link) in sata_link_init_spd() argument
5603 rc = sata_scr_read(link, SCR_CONTROL, &link->saved_scontrol); in sata_link_init_spd()
5607 spd = (link->saved_scontrol >> 4) & 0xf; in sata_link_init_spd()
5609 link->hw_sata_spd_limit &= (1 << spd) - 1; in sata_link_init_spd()
5611 ata_force_link_limits(link); in sata_link_init_spd()
5613 link->sata_spd_limit = link->hw_sata_spd_limit; in sata_link_init_spd()
5668 ata_link_init(ap, &ap->link, 0); in ata_port_alloc()
5806 ap->link.flags |= pi->link_flags; in ata_host_alloc_pinfo()
5864 struct ata_link *link; in ata_slave_link_init() local
5869 link = kzalloc(sizeof(*link), GFP_KERNEL); in ata_slave_link_init()
5870 if (!link) in ata_slave_link_init()
5873 ata_link_init(ap, link, 1); in ata_slave_link_init()
5874 ap->slave_link = link; in ata_slave_link_init()
6045 struct ata_eh_info *ehi = &ap->link.eh_info; in __ata_port_probe()
6164 sata_link_init_spd(&ap->link); in ata_host_register()
6176 ap->link.eh_info.desc); in ata_host_register()
6177 ata_ehi_clear_desc(&ap->link.eh_info); in ata_host_register()
6267 struct ata_link *link; in ata_port_detach() local
6289 ata_for_each_link(link, ap, HOST_FIRST) { in ata_port_detach()
6290 ata_for_each_dev(dev, link, ALL) { in ata_port_detach()
6764 bool sata_lpm_ignore_phy_events(struct ata_link *link) in sata_lpm_ignore_phy_events() argument
6766 unsigned long lpm_timeout = link->last_lpm_change + in sata_lpm_ignore_phy_events()
6770 if (link->lpm_policy > ATA_LPM_MAX_POWER) in sata_lpm_ignore_phy_events()
6776 if ((link->flags & ATA_LFLAG_CHANGED) && in sata_lpm_ignore_phy_events()
6829 void ata_link_printk(const struct ata_link *link, const char *level, in ata_link_printk() argument
6840 if (sata_pmp_attached(link->ap) || link->ap->slave_link) in ata_link_printk()
6842 level, link->ap->print_id, link->pmp, &vaf); in ata_link_printk()
6845 level, link->ap->print_id, &vaf); in ata_link_printk()
6863 level, dev->link->ap->print_id, dev->link->pmp + dev->devno, in ata_dev_printk()