aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/ata/libata-core.c202
-rw-r--r--drivers/ata/libata-eh.c142
-rw-r--r--drivers/ata/libata.h3
-rw-r--r--include/linux/libata.h8
4 files changed, 303 insertions, 52 deletions
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index 71024e94c576..6eed58e35e12 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -179,13 +179,20 @@ struct ata_link *__ata_port_next_link(struct ata_port *ap,
179 return &ap->link; 179 return &ap->link;
180 } 180 }
181 181
182 /* we just iterated over the host link, what's next? */ 182 /* we just iterated over the host master link, what's next? */
183 if (ata_is_host_link(link)) { 183 if (link == &ap->link) {
184 if (!sata_pmp_attached(ap)) 184 if (!sata_pmp_attached(ap)) {
185 if (unlikely(ap->slave_link) && !dev_only)
186 return ap->slave_link;
185 return NULL; 187 return NULL;
188 }
186 return ap->pmp_link; 189 return ap->pmp_link;
187 } 190 }
188 191
192 /* slave_link excludes PMP */
193 if (unlikely(link == ap->slave_link))
194 return NULL;
195
189 /* iterate to the next PMP link */ 196 /* iterate to the next PMP link */
190 if (++link < ap->pmp_link + ap->nr_pmp_links) 197 if (++link < ap->pmp_link + ap->nr_pmp_links)
191 return link; 198 return link;
@@ -193,6 +200,31 @@ struct ata_link *__ata_port_next_link(struct ata_port *ap,
193} 200}
194 201
195/** 202/**
203 * ata_dev_phys_link - find physical link for a device
204 * @dev: ATA device to look up physical link for
205 *
206 * Look up physical link which @dev is attached to. Note that
207 * this is different from @dev->link only when @dev is on slave
208 * link. For all other cases, it's the same as @dev->link.
209 *
210 * LOCKING:
211 * Don't care.
212 *
213 * RETURNS:
214 * Pointer to the found physical link.
215 */
216struct ata_link *ata_dev_phys_link(struct ata_device *dev)
217{
218 struct ata_port *ap = dev->link->ap;
219
220 if (!ap->slave_link)
221 return dev->link;
222 if (!dev->devno)
223 return &ap->link;
224 return ap->slave_link;
225}
226
227/**
196 * ata_force_cbl - force cable type according to libata.force 228 * ata_force_cbl - force cable type according to libata.force
197 * @ap: ATA port of interest 229 * @ap: ATA port of interest
198 * 230 *
@@ -235,7 +267,8 @@ void ata_force_cbl(struct ata_port *ap)
235 * the host link and all fan-out ports connected via PMP. If the 267 * the host link and all fan-out ports connected via PMP. If the
236 * device part is specified as 0 (e.g. 1.00:), it specifies the 268 * device part is specified as 0 (e.g. 1.00:), it specifies the
237 * first fan-out link not the host link. Device number 15 always 269 * first fan-out link not the host link. Device number 15 always
238 * points to the host link whether PMP is attached or not. 270 * points to the host link whether PMP is attached or not. If the
271 * controller has slave link, device number 16 points to it.
239 * 272 *
240 * LOCKING: 273 * LOCKING:
241 * EH context. 274 * EH context.
@@ -243,12 +276,11 @@ void ata_force_cbl(struct ata_port *ap)
243static void ata_force_link_limits(struct ata_link *link) 276static void ata_force_link_limits(struct ata_link *link)
244{ 277{
245 bool did_spd = false; 278 bool did_spd = false;
246 int linkno, i; 279 int linkno = link->pmp;
280 int i;
247 281
248 if (ata_is_host_link(link)) 282 if (ata_is_host_link(link))
249 linkno = 15; 283 linkno += 15;
250 else
251 linkno = link->pmp;
252 284
253 for (i = ata_force_tbl_size - 1; i >= 0; i--) { 285 for (i = ata_force_tbl_size - 1; i >= 0; i--) {
254 const struct ata_force_ent *fe = &ata_force_tbl[i]; 286 const struct ata_force_ent *fe = &ata_force_tbl[i];
@@ -295,9 +327,9 @@ static void ata_force_xfermask(struct ata_device *dev)
295 int alt_devno = devno; 327 int alt_devno = devno;
296 int i; 328 int i;
297 329
298 /* allow n.15 for the first device attached to host port */ 330 /* allow n.15/16 for devices attached to host port */
299 if (ata_is_host_link(dev->link) && devno == 0) 331 if (ata_is_host_link(dev->link))
300 alt_devno = 15; 332 alt_devno += 15;
301 333
302 for (i = ata_force_tbl_size - 1; i >= 0; i--) { 334 for (i = ata_force_tbl_size - 1; i >= 0; i--) {
303 const struct ata_force_ent *fe = &ata_force_tbl[i]; 335 const struct ata_force_ent *fe = &ata_force_tbl[i];
@@ -349,9 +381,9 @@ static void ata_force_horkage(struct ata_device *dev)
349 int alt_devno = devno; 381 int alt_devno = devno;
350 int i; 382 int i;
351 383
352 /* allow n.15 for the first device attached to host port */ 384 /* allow n.15/16 for devices attached to host port */
353 if (ata_is_host_link(dev->link) && devno == 0) 385 if (ata_is_host_link(dev->link))
354 alt_devno = 15; 386 alt_devno += 15;
355 387
356 for (i = 0; i < ata_force_tbl_size; i++) { 388 for (i = 0; i < ata_force_tbl_size; i++) {
357 const struct ata_force_ent *fe = &ata_force_tbl[i]; 389 const struct ata_force_ent *fe = &ata_force_tbl[i];
@@ -2710,7 +2742,7 @@ static void sata_print_link_status(struct ata_link *link)
2710 return; 2742 return;
2711 sata_scr_read(link, SCR_CONTROL, &scontrol); 2743 sata_scr_read(link, SCR_CONTROL, &scontrol);
2712 2744
2713 if (ata_link_online(link)) { 2745 if (ata_phys_link_online(link)) {
2714 tmp = (sstatus >> 4) & 0xf; 2746 tmp = (sstatus >> 4) & 0xf;
2715 ata_link_printk(link, KERN_INFO, 2747 ata_link_printk(link, KERN_INFO,
2716 "SATA link up %s (SStatus %X SControl %X)\n", 2748 "SATA link up %s (SStatus %X SControl %X)\n",
@@ -3401,6 +3433,12 @@ int ata_wait_ready(struct ata_link *link, unsigned long deadline,
3401 unsigned long nodev_deadline = ata_deadline(start, ATA_TMOUT_FF_WAIT); 3433 unsigned long nodev_deadline = ata_deadline(start, ATA_TMOUT_FF_WAIT);
3402 int warned = 0; 3434 int warned = 0;
3403 3435
3436 /* Slave readiness can't be tested separately from master. On
3437 * M/S emulation configuration, this function should be called
3438 * only on the master and it will handle both master and slave.
3439 */
3440 WARN_ON(link == link->ap->slave_link);
3441
3404 if (time_after(nodev_deadline, deadline)) 3442 if (time_after(nodev_deadline, deadline))
3405 nodev_deadline = deadline; 3443 nodev_deadline = deadline;
3406 3444
@@ -3622,7 +3660,7 @@ int ata_std_prereset(struct ata_link *link, unsigned long deadline)
3622 } 3660 }
3623 3661
3624 /* no point in trying softreset on offline link */ 3662 /* no point in trying softreset on offline link */
3625 if (ata_link_offline(link)) 3663 if (ata_phys_link_offline(link))
3626 ehc->i.action &= ~ATA_EH_SOFTRESET; 3664 ehc->i.action &= ~ATA_EH_SOFTRESET;
3627 3665
3628 return 0; 3666 return 0;
@@ -3700,7 +3738,7 @@ int sata_link_hardreset(struct ata_link *link, const unsigned long *timing,
3700 if (rc) 3738 if (rc)
3701 goto out; 3739 goto out;
3702 /* if link is offline nothing more to do */ 3740 /* if link is offline nothing more to do */
3703 if (ata_link_offline(link)) 3741 if (ata_phys_link_offline(link))
3704 goto out; 3742 goto out;
3705 3743
3706 /* Link is online. From this point, -ENODEV too is an error. */ 3744 /* Link is online. From this point, -ENODEV too is an error. */
@@ -4965,7 +5003,7 @@ int sata_scr_write_flush(struct ata_link *link, int reg, u32 val)
4965} 5003}
4966 5004
4967/** 5005/**
4968 * ata_link_online - test whether the given link is online 5006 * ata_phys_link_online - test whether the given link is online
4969 * @link: ATA link to test 5007 * @link: ATA link to test
4970 * 5008 *
4971 * Test whether @link is online. Note that this function returns 5009 * Test whether @link is online. Note that this function returns
@@ -4978,7 +5016,7 @@ int sata_scr_write_flush(struct ata_link *link, int reg, u32 val)
4978 * RETURNS: 5016 * RETURNS:
4979 * True if the port online status is available and online. 5017 * True if the port online status is available and online.
4980 */ 5018 */
4981bool ata_link_online(struct ata_link *link) 5019bool ata_phys_link_online(struct ata_link *link)
4982{ 5020{
4983 u32 sstatus; 5021 u32 sstatus;
4984 5022
@@ -4989,7 +5027,7 @@ bool ata_link_online(struct ata_link *link)
4989} 5027}
4990 5028
4991/** 5029/**
4992 * ata_link_offline - test whether the given link is offline 5030 * ata_phys_link_offline - test whether the given link is offline
4993 * @link: ATA link to test 5031 * @link: ATA link to test
4994 * 5032 *
4995 * Test whether @link is offline. Note that this function 5033 * Test whether @link is offline. Note that this function
@@ -5002,7 +5040,7 @@ bool ata_link_online(struct ata_link *link)
5002 * RETURNS: 5040 * RETURNS:
5003 * True if the port offline status is available and offline. 5041 * True if the port offline status is available and offline.
5004 */ 5042 */
5005bool ata_link_offline(struct ata_link *link) 5043bool ata_phys_link_offline(struct ata_link *link)
5006{ 5044{
5007 u32 sstatus; 5045 u32 sstatus;
5008 5046
@@ -5012,6 +5050,58 @@ bool ata_link_offline(struct ata_link *link)
5012 return false; 5050 return false;
5013} 5051}
5014 5052
5053/**
5054 * ata_link_online - test whether the given link is online
5055 * @link: ATA link to test
5056 *
5057 * Test whether @link is online. This is identical to
5058 * ata_phys_link_online() when there's no slave link. When
5059 * there's a slave link, this function should only be called on
5060 * the master link and will return true if any of M/S links is
5061 * online.
5062 *
5063 * LOCKING:
5064 * None.
5065 *
5066 * RETURNS:
5067 * True if the port online status is available and online.
5068 */
5069bool ata_link_online(struct ata_link *link)
5070{
5071 struct ata_link *slave = link->ap->slave_link;
5072
5073 WARN_ON(link == slave); /* shouldn't be called on slave link */
5074
5075 return ata_phys_link_online(link) ||
5076 (slave && ata_phys_link_online(slave));
5077}
5078
5079/**
5080 * ata_link_offline - test whether the given link is offline
5081 * @link: ATA link to test
5082 *
5083 * Test whether @link is offline. This is identical to
5084 * ata_phys_link_offline() when there's no slave link. When
5085 * there's a slave link, this function should only be called on
5086 * the master link and will return true if both M/S links are
5087 * offline.
5088 *
5089 * LOCKING:
5090 * None.
5091 *
5092 * RETURNS:
5093 * True if the port offline status is available and offline.
5094 */
5095bool ata_link_offline(struct ata_link *link)
5096{
5097 struct ata_link *slave = link->ap->slave_link;
5098
5099 WARN_ON(link == slave); /* shouldn't be called on slave link */
5100
5101 return ata_phys_link_offline(link) &&
5102 (!slave || ata_phys_link_offline(slave));
5103}
5104
5015#ifdef CONFIG_PM 5105#ifdef CONFIG_PM
5016static int ata_host_request_pm(struct ata_host *host, pm_message_t mesg, 5106static int ata_host_request_pm(struct ata_host *host, pm_message_t mesg,
5017 unsigned int action, unsigned int ehi_flags, 5107 unsigned int action, unsigned int ehi_flags,
@@ -5151,11 +5241,11 @@ int ata_port_start(struct ata_port *ap)
5151 */ 5241 */
5152void ata_dev_init(struct ata_device *dev) 5242void ata_dev_init(struct ata_device *dev)
5153{ 5243{
5154 struct ata_link *link = dev->link; 5244 struct ata_link *link = ata_dev_phys_link(dev);
5155 struct ata_port *ap = link->ap; 5245 struct ata_port *ap = link->ap;
5156 unsigned long flags; 5246 unsigned long flags;
5157 5247
5158 /* SATA spd limit is bound to the first device */ 5248 /* SATA spd limit is bound to the attached device, reset together */
5159 link->sata_spd_limit = link->hw_sata_spd_limit; 5249 link->sata_spd_limit = link->hw_sata_spd_limit;
5160 link->sata_spd = 0; 5250 link->sata_spd = 0;
5161 5251
@@ -5318,6 +5408,7 @@ static void ata_host_release(struct device *gendev, void *res)
5318 scsi_host_put(ap->scsi_host); 5408 scsi_host_put(ap->scsi_host);
5319 5409
5320 kfree(ap->pmp_link); 5410 kfree(ap->pmp_link);
5411 kfree(ap->slave_link);
5321 kfree(ap); 5412 kfree(ap);
5322 host->ports[i] = NULL; 5413 host->ports[i] = NULL;
5323 } 5414 }
@@ -5438,6 +5529,68 @@ struct ata_host *ata_host_alloc_pinfo(struct device *dev,
5438 return host; 5529 return host;
5439} 5530}
5440 5531
5532/**
5533 * ata_slave_link_init - initialize slave link
5534 * @ap: port to initialize slave link for
5535 *
5536 * Create and initialize slave link for @ap. This enables slave
5537 * link handling on the port.
5538 *
5539 * In libata, a port contains links and a link contains devices.
5540 * There is single host link but if a PMP is attached to it,
5541 * there can be multiple fan-out links. On SATA, there's usually
5542 * a single device connected to a link but PATA and SATA
5543 * controllers emulating TF based interface can have two - master
5544 * and slave.
5545 *
5546 * However, there are a few controllers which don't fit into this
5547 * abstraction too well - SATA controllers which emulate TF
5548 * interface with both master and slave devices but also have
5549 * separate SCR register sets for each device. These controllers
5550 * need separate links for physical link handling
5551 * (e.g. onlineness, link speed) but should be treated like a
5552 * traditional M/S controller for everything else (e.g. command
5553 * issue, softreset).
5554 *
5555 * slave_link is libata's way of handling this class of
5556 * controllers without impacting core layer too much. For
5557 * anything other than physical link handling, the default host
5558 * link is used for both master and slave. For physical link
5559 * handling, separate @ap->slave_link is used. All dirty details
5560 * are implemented inside libata core layer. From LLD's POV, the
5561 * only difference is that prereset, hardreset and postreset are
5562 * called once more for the slave link, so the reset sequence
5563 * looks like the following.
5564 *
5565 * prereset(M) -> prereset(S) -> hardreset(M) -> hardreset(S) ->
5566 * softreset(M) -> postreset(M) -> postreset(S)
5567 *
5568 * Note that softreset is called only for the master. Softreset
5569 * resets both M/S by definition, so SRST on master should handle
5570 * both (the standard method will work just fine).
5571 *
5572 * LOCKING:
5573 * Should be called before host is registered.
5574 *
5575 * RETURNS:
5576 * 0 on success, -errno on failure.
5577 */
5578int ata_slave_link_init(struct ata_port *ap)
5579{
5580 struct ata_link *link;
5581
5582 WARN_ON(ap->slave_link);
5583 WARN_ON(ap->flags & ATA_FLAG_PMP);
5584
5585 link = kzalloc(sizeof(*link), GFP_KERNEL);
5586 if (!link)
5587 return -ENOMEM;
5588
5589 ata_link_init(ap, link, 1);
5590 ap->slave_link = link;
5591 return 0;
5592}
5593
5441static void ata_host_stop(struct device *gendev, void *res) 5594static void ata_host_stop(struct device *gendev, void *res)
5442{ 5595{
5443 struct ata_host *host = dev_get_drvdata(gendev); 5596 struct ata_host *host = dev_get_drvdata(gendev);
@@ -5664,6 +5817,8 @@ int ata_host_register(struct ata_host *host, struct scsi_host_template *sht)
5664 5817
5665 /* init sata_spd_limit to the current value */ 5818 /* init sata_spd_limit to the current value */
5666 sata_link_init_spd(&ap->link); 5819 sata_link_init_spd(&ap->link);
5820 if (ap->slave_link)
5821 sata_link_init_spd(ap->slave_link);
5667 5822
5668 /* print per-port info to dmesg */ 5823 /* print per-port info to dmesg */
5669 xfer_mask = ata_pack_xfermask(ap->pio_mask, ap->mwdma_mask, 5824 xfer_mask = ata_pack_xfermask(ap->pio_mask, ap->mwdma_mask,
@@ -6289,6 +6444,7 @@ EXPORT_SYMBOL_GPL(ata_std_bios_param);
6289EXPORT_SYMBOL_GPL(ata_host_init); 6444EXPORT_SYMBOL_GPL(ata_host_init);
6290EXPORT_SYMBOL_GPL(ata_host_alloc); 6445EXPORT_SYMBOL_GPL(ata_host_alloc);
6291EXPORT_SYMBOL_GPL(ata_host_alloc_pinfo); 6446EXPORT_SYMBOL_GPL(ata_host_alloc_pinfo);
6447EXPORT_SYMBOL_GPL(ata_slave_link_init);
6292EXPORT_SYMBOL_GPL(ata_host_start); 6448EXPORT_SYMBOL_GPL(ata_host_start);
6293EXPORT_SYMBOL_GPL(ata_host_register); 6449EXPORT_SYMBOL_GPL(ata_host_register);
6294EXPORT_SYMBOL_GPL(ata_host_activate); 6450EXPORT_SYMBOL_GPL(ata_host_activate);
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
index c1db2f234d2e..99037a4860d9 100644
--- a/drivers/ata/libata-eh.c
+++ b/drivers/ata/libata-eh.c
@@ -1756,7 +1756,7 @@ static unsigned int ata_eh_speed_down_verdict(struct ata_device *dev)
1756static unsigned int ata_eh_speed_down(struct ata_device *dev, 1756static unsigned int ata_eh_speed_down(struct ata_device *dev,
1757 unsigned int eflags, unsigned int err_mask) 1757 unsigned int eflags, unsigned int err_mask)
1758{ 1758{
1759 struct ata_link *link = dev->link; 1759 struct ata_link *link = ata_dev_phys_link(dev);
1760 int xfer_ok = 0; 1760 int xfer_ok = 0;
1761 unsigned int verdict; 1761 unsigned int verdict;
1762 unsigned int action = 0; 1762 unsigned int action = 0;
@@ -1880,7 +1880,8 @@ static void ata_eh_link_autopsy(struct ata_link *link)
1880 for (tag = 0; tag < ATA_MAX_QUEUE; tag++) { 1880 for (tag = 0; tag < ATA_MAX_QUEUE; tag++) {
1881 struct ata_queued_cmd *qc = __ata_qc_from_tag(ap, tag); 1881 struct ata_queued_cmd *qc = __ata_qc_from_tag(ap, tag);
1882 1882
1883 if (!(qc->flags & ATA_QCFLAG_FAILED) || qc->dev->link != link) 1883 if (!(qc->flags & ATA_QCFLAG_FAILED) ||
1884 ata_dev_phys_link(qc->dev) != link)
1884 continue; 1885 continue;
1885 1886
1886 /* inherit upper level err_mask */ 1887 /* inherit upper level err_mask */
@@ -1967,6 +1968,23 @@ void ata_eh_autopsy(struct ata_port *ap)
1967 ata_port_for_each_link(link, ap) 1968 ata_port_for_each_link(link, ap)
1968 ata_eh_link_autopsy(link); 1969 ata_eh_link_autopsy(link);
1969 1970
1971 /* Handle the frigging slave link. Autopsy is done similarly
1972 * but actions and flags are transferred over to the master
1973 * link and handled from there.
1974 */
1975 if (ap->slave_link) {
1976 struct ata_eh_context *mehc = &ap->link.eh_context;
1977 struct ata_eh_context *sehc = &ap->slave_link->eh_context;
1978
1979 ata_eh_link_autopsy(ap->slave_link);
1980
1981 ata_eh_about_to_do(ap->slave_link, NULL, ATA_EH_ALL_ACTIONS);
1982 mehc->i.action |= sehc->i.action;
1983 mehc->i.dev_action[1] |= sehc->i.dev_action[1];
1984 mehc->i.flags |= sehc->i.flags;
1985 ata_eh_done(ap->slave_link, NULL, ATA_EH_ALL_ACTIONS);
1986 }
1987
1970 /* Autopsy of fanout ports can affect host link autopsy. 1988 /* Autopsy of fanout ports can affect host link autopsy.
1971 * Perform host link autopsy last. 1989 * Perform host link autopsy last.
1972 */ 1990 */
@@ -2001,7 +2019,8 @@ static void ata_eh_link_report(struct ata_link *link)
2001 for (tag = 0; tag < ATA_MAX_QUEUE; tag++) { 2019 for (tag = 0; tag < ATA_MAX_QUEUE; tag++) {
2002 struct ata_queued_cmd *qc = __ata_qc_from_tag(ap, tag); 2020 struct ata_queued_cmd *qc = __ata_qc_from_tag(ap, tag);
2003 2021
2004 if (!(qc->flags & ATA_QCFLAG_FAILED) || qc->dev->link != link || 2022 if (!(qc->flags & ATA_QCFLAG_FAILED) ||
2023 ata_dev_phys_link(qc->dev) != link ||
2005 ((qc->flags & ATA_QCFLAG_QUIET) && 2024 ((qc->flags & ATA_QCFLAG_QUIET) &&
2006 qc->err_mask == AC_ERR_DEV)) 2025 qc->err_mask == AC_ERR_DEV))
2007 continue; 2026 continue;
@@ -2068,7 +2087,7 @@ static void ata_eh_link_report(struct ata_link *link)
2068 char cdb_buf[70] = ""; 2087 char cdb_buf[70] = "";
2069 2088
2070 if (!(qc->flags & ATA_QCFLAG_FAILED) || 2089 if (!(qc->flags & ATA_QCFLAG_FAILED) ||
2071 qc->dev->link != link || !qc->err_mask) 2090 ata_dev_phys_link(qc->dev) != link || !qc->err_mask)
2072 continue; 2091 continue;
2073 2092
2074 if (qc->dma_dir != DMA_NONE) { 2093 if (qc->dma_dir != DMA_NONE) {
@@ -2160,12 +2179,14 @@ void ata_eh_report(struct ata_port *ap)
2160} 2179}
2161 2180
2162static int ata_do_reset(struct ata_link *link, ata_reset_fn_t reset, 2181static int ata_do_reset(struct ata_link *link, ata_reset_fn_t reset,
2163 unsigned int *classes, unsigned long deadline) 2182 unsigned int *classes, unsigned long deadline,
2183 bool clear_classes)
2164{ 2184{
2165 struct ata_device *dev; 2185 struct ata_device *dev;
2166 2186
2167 ata_link_for_each_dev(dev, link) 2187 if (clear_classes)
2168 classes[dev->devno] = ATA_DEV_UNKNOWN; 2188 ata_link_for_each_dev(dev, link)
2189 classes[dev->devno] = ATA_DEV_UNKNOWN;
2169 2190
2170 return reset(link, classes, deadline); 2191 return reset(link, classes, deadline);
2171} 2192}
@@ -2187,17 +2208,20 @@ int ata_eh_reset(struct ata_link *link, int classify,
2187 ata_reset_fn_t hardreset, ata_postreset_fn_t postreset) 2208 ata_reset_fn_t hardreset, ata_postreset_fn_t postreset)
2188{ 2209{
2189 struct ata_port *ap = link->ap; 2210 struct ata_port *ap = link->ap;
2211 struct ata_link *slave = ap->slave_link;
2190 struct ata_eh_context *ehc = &link->eh_context; 2212 struct ata_eh_context *ehc = &link->eh_context;
2213 struct ata_eh_context *sehc = &slave->eh_context;
2191 unsigned int *classes = ehc->classes; 2214 unsigned int *classes = ehc->classes;
2192 unsigned int lflags = link->flags; 2215 unsigned int lflags = link->flags;
2193 int verbose = !(ehc->i.flags & ATA_EHI_QUIET); 2216 int verbose = !(ehc->i.flags & ATA_EHI_QUIET);
2194 int max_tries = 0, try = 0; 2217 int max_tries = 0, try = 0;
2218 struct ata_link *failed_link;
2195 struct ata_device *dev; 2219 struct ata_device *dev;
2196 unsigned long deadline, now; 2220 unsigned long deadline, now;
2197 ata_reset_fn_t reset; 2221 ata_reset_fn_t reset;
2198 unsigned long flags; 2222 unsigned long flags;
2199 u32 sstatus; 2223 u32 sstatus;
2200 int nr_known, rc; 2224 int nr_unknown, rc;
2201 2225
2202 /* 2226 /*
2203 * Prepare to reset 2227 * Prepare to reset
@@ -2252,8 +2276,30 @@ int ata_eh_reset(struct ata_link *link, int classify,
2252 } 2276 }
2253 2277
2254 if (prereset) { 2278 if (prereset) {
2255 rc = prereset(link, 2279 unsigned long deadline = ata_deadline(jiffies,
2256 ata_deadline(jiffies, ATA_EH_PRERESET_TIMEOUT)); 2280 ATA_EH_PRERESET_TIMEOUT);
2281
2282 if (slave) {
2283 sehc->i.action &= ~ATA_EH_RESET;
2284 sehc->i.action |= ehc->i.action;
2285 }
2286
2287 rc = prereset(link, deadline);
2288
2289 /* If present, do prereset on slave link too. Reset
2290 * is skipped iff both master and slave links report
2291 * -ENOENT or clear ATA_EH_RESET.
2292 */
2293 if (slave && (rc == 0 || rc == -ENOENT)) {
2294 int tmp;
2295
2296 tmp = prereset(slave, deadline);
2297 if (tmp != -ENOENT)
2298 rc = tmp;
2299
2300 ehc->i.action |= sehc->i.action;
2301 }
2302
2257 if (rc) { 2303 if (rc) {
2258 if (rc == -ENOENT) { 2304 if (rc == -ENOENT) {
2259 ata_link_printk(link, KERN_DEBUG, 2305 ata_link_printk(link, KERN_DEBUG,
@@ -2302,25 +2348,51 @@ int ata_eh_reset(struct ata_link *link, int classify,
2302 else 2348 else
2303 ehc->i.flags |= ATA_EHI_DID_SOFTRESET; 2349 ehc->i.flags |= ATA_EHI_DID_SOFTRESET;
2304 2350
2305 rc = ata_do_reset(link, reset, classes, deadline); 2351 rc = ata_do_reset(link, reset, classes, deadline, true);
2306 if (rc && rc != -EAGAIN) 2352 if (rc && rc != -EAGAIN) {
2353 failed_link = link;
2307 goto fail; 2354 goto fail;
2355 }
2356
2357 /* hardreset slave link if existent */
2358 if (slave && reset == hardreset) {
2359 int tmp;
2360
2361 if (verbose)
2362 ata_link_printk(slave, KERN_INFO,
2363 "hard resetting link\n");
2308 2364
2365 ata_eh_about_to_do(slave, NULL, ATA_EH_RESET);
2366 tmp = ata_do_reset(slave, reset, classes, deadline,
2367 false);
2368 switch (tmp) {
2369 case -EAGAIN:
2370 rc = -EAGAIN;
2371 case 0:
2372 break;
2373 default:
2374 failed_link = slave;
2375 rc = tmp;
2376 goto fail;
2377 }
2378 }
2379
2380 /* perform follow-up SRST if necessary */
2309 if (reset == hardreset && 2381 if (reset == hardreset &&
2310 ata_eh_followup_srst_needed(link, rc, classes)) { 2382 ata_eh_followup_srst_needed(link, rc, classes)) {
2311 /* okay, let's do follow-up softreset */
2312 reset = softreset; 2383 reset = softreset;
2313 2384
2314 if (!reset) { 2385 if (!reset) {
2315 ata_link_printk(link, KERN_ERR, 2386 ata_link_printk(link, KERN_ERR,
2316 "follow-up softreset required " 2387 "follow-up softreset required "
2317 "but no softreset avaliable\n"); 2388 "but no softreset avaliable\n");
2389 failed_link = link;
2318 rc = -EINVAL; 2390 rc = -EINVAL;
2319 goto fail; 2391 goto fail;
2320 } 2392 }
2321 2393
2322 ata_eh_about_to_do(link, NULL, ATA_EH_RESET); 2394 ata_eh_about_to_do(link, NULL, ATA_EH_RESET);
2323 rc = ata_do_reset(link, reset, classes, deadline); 2395 rc = ata_do_reset(link, reset, classes, deadline, true);
2324 } 2396 }
2325 } else { 2397 } else {
2326 if (verbose) 2398 if (verbose)
@@ -2341,7 +2413,7 @@ int ata_eh_reset(struct ata_link *link, int classify,
2341 dev->pio_mode = XFER_PIO_0; 2413 dev->pio_mode = XFER_PIO_0;
2342 dev->flags &= ~ATA_DFLAG_SLEEPING; 2414 dev->flags &= ~ATA_DFLAG_SLEEPING;
2343 2415
2344 if (ata_link_offline(link)) 2416 if (ata_phys_link_offline(ata_dev_phys_link(dev)))
2345 continue; 2417 continue;
2346 2418
2347 /* apply class override */ 2419 /* apply class override */
@@ -2354,6 +2426,8 @@ int ata_eh_reset(struct ata_link *link, int classify,
2354 /* record current link speed */ 2426 /* record current link speed */
2355 if (sata_scr_read(link, SCR_STATUS, &sstatus) == 0) 2427 if (sata_scr_read(link, SCR_STATUS, &sstatus) == 0)
2356 link->sata_spd = (sstatus >> 4) & 0xf; 2428 link->sata_spd = (sstatus >> 4) & 0xf;
2429 if (slave && sata_scr_read(slave, SCR_STATUS, &sstatus) == 0)
2430 slave->sata_spd = (sstatus >> 4) & 0xf;
2357 2431
2358 /* thaw the port */ 2432 /* thaw the port */
2359 if (ata_is_host_link(link)) 2433 if (ata_is_host_link(link))
@@ -2366,12 +2440,17 @@ int ata_eh_reset(struct ata_link *link, int classify,
2366 * reset and here. This race is mediated by cross checking 2440 * reset and here. This race is mediated by cross checking
2367 * link onlineness and classification result later. 2441 * link onlineness and classification result later.
2368 */ 2442 */
2369 if (postreset) 2443 if (postreset) {
2370 postreset(link, classes); 2444 postreset(link, classes);
2445 if (slave)
2446 postreset(slave, classes);
2447 }
2371 2448
2372 /* clear cached SError */ 2449 /* clear cached SError */
2373 spin_lock_irqsave(link->ap->lock, flags); 2450 spin_lock_irqsave(link->ap->lock, flags);
2374 link->eh_info.serror = 0; 2451 link->eh_info.serror = 0;
2452 if (slave)
2453 slave->eh_info.serror = 0;
2375 spin_unlock_irqrestore(link->ap->lock, flags); 2454 spin_unlock_irqrestore(link->ap->lock, flags);
2376 2455
2377 /* Make sure onlineness and classification result correspond. 2456 /* Make sure onlineness and classification result correspond.
@@ -2381,19 +2460,21 @@ int ata_eh_reset(struct ata_link *link, int classify,
2381 * link onlineness and classification result, those conditions 2460 * link onlineness and classification result, those conditions
2382 * can be reliably detected and retried. 2461 * can be reliably detected and retried.
2383 */ 2462 */
2384 nr_known = 0; 2463 nr_unknown = 0;
2385 ata_link_for_each_dev(dev, link) { 2464 ata_link_for_each_dev(dev, link) {
2386 /* convert all ATA_DEV_UNKNOWN to ATA_DEV_NONE */ 2465 /* convert all ATA_DEV_UNKNOWN to ATA_DEV_NONE */
2387 if (classes[dev->devno] == ATA_DEV_UNKNOWN) 2466 if (classes[dev->devno] == ATA_DEV_UNKNOWN) {
2388 classes[dev->devno] = ATA_DEV_NONE; 2467 classes[dev->devno] = ATA_DEV_NONE;
2389 else 2468 if (ata_phys_link_online(ata_dev_phys_link(dev)))
2390 nr_known++; 2469 nr_unknown++;
2470 }
2391 } 2471 }
2392 2472
2393 if (classify && !nr_known && ata_link_online(link)) { 2473 if (classify && nr_unknown) {
2394 if (try < max_tries) { 2474 if (try < max_tries) {
2395 ata_link_printk(link, KERN_WARNING, "link online but " 2475 ata_link_printk(link, KERN_WARNING, "link online but "
2396 "device misclassified, retrying\n"); 2476 "device misclassified, retrying\n");
2477 failed_link = link;
2397 rc = -EAGAIN; 2478 rc = -EAGAIN;
2398 goto fail; 2479 goto fail;
2399 } 2480 }
@@ -2404,6 +2485,8 @@ int ata_eh_reset(struct ata_link *link, int classify,
2404 2485
2405 /* reset successful, schedule revalidation */ 2486 /* reset successful, schedule revalidation */
2406 ata_eh_done(link, NULL, ATA_EH_RESET); 2487 ata_eh_done(link, NULL, ATA_EH_RESET);
2488 if (slave)
2489 ata_eh_done(slave, NULL, ATA_EH_RESET);
2407 ehc->last_reset = jiffies; 2490 ehc->last_reset = jiffies;
2408 ehc->i.action |= ATA_EH_REVALIDATE; 2491 ehc->i.action |= ATA_EH_REVALIDATE;
2409 2492
@@ -2411,6 +2494,8 @@ int ata_eh_reset(struct ata_link *link, int classify,
2411 out: 2494 out:
2412 /* clear hotplug flag */ 2495 /* clear hotplug flag */
2413 ehc->i.flags &= ~ATA_EHI_HOTPLUGGED; 2496 ehc->i.flags &= ~ATA_EHI_HOTPLUGGED;
2497 if (slave)
2498 sehc->i.flags &= ~ATA_EHI_HOTPLUGGED;
2414 2499
2415 spin_lock_irqsave(ap->lock, flags); 2500 spin_lock_irqsave(ap->lock, flags);
2416 ap->pflags &= ~ATA_PFLAG_RESETTING; 2501 ap->pflags &= ~ATA_PFLAG_RESETTING;
@@ -2431,7 +2516,7 @@ int ata_eh_reset(struct ata_link *link, int classify,
2431 if (time_before(now, deadline)) { 2516 if (time_before(now, deadline)) {
2432 unsigned long delta = deadline - now; 2517 unsigned long delta = deadline - now;
2433 2518
2434 ata_link_printk(link, KERN_WARNING, 2519 ata_link_printk(failed_link, KERN_WARNING,
2435 "reset failed (errno=%d), retrying in %u secs\n", 2520 "reset failed (errno=%d), retrying in %u secs\n",
2436 rc, DIV_ROUND_UP(jiffies_to_msecs(delta), 1000)); 2521 rc, DIV_ROUND_UP(jiffies_to_msecs(delta), 1000));
2437 2522
@@ -2439,8 +2524,13 @@ int ata_eh_reset(struct ata_link *link, int classify,
2439 delta = schedule_timeout_uninterruptible(delta); 2524 delta = schedule_timeout_uninterruptible(delta);
2440 } 2525 }
2441 2526
2442 if (rc == -EPIPE || try == max_tries - 1) 2527 if (try == max_tries - 1) {
2443 sata_down_spd_limit(link); 2528 sata_down_spd_limit(link);
2529 if (slave)
2530 sata_down_spd_limit(slave);
2531 } else if (rc == -EPIPE)
2532 sata_down_spd_limit(failed_link);
2533
2444 if (hardreset) 2534 if (hardreset)
2445 reset = hardreset; 2535 reset = hardreset;
2446 goto retry; 2536 goto retry;
@@ -2472,7 +2562,7 @@ static int ata_eh_revalidate_and_attach(struct ata_link *link,
2472 if ((action & ATA_EH_REVALIDATE) && ata_dev_enabled(dev)) { 2562 if ((action & ATA_EH_REVALIDATE) && ata_dev_enabled(dev)) {
2473 WARN_ON(dev->class == ATA_DEV_PMP); 2563 WARN_ON(dev->class == ATA_DEV_PMP);
2474 2564
2475 if (ata_link_offline(link)) { 2565 if (ata_phys_link_offline(ata_dev_phys_link(dev))) {
2476 rc = -EIO; 2566 rc = -EIO;
2477 goto err; 2567 goto err;
2478 } 2568 }
@@ -2697,7 +2787,7 @@ static int ata_eh_handle_dev_fail(struct ata_device *dev, int err)
2697 /* This is the last chance, better to slow 2787 /* This is the last chance, better to slow
2698 * down than lose it. 2788 * down than lose it.
2699 */ 2789 */
2700 sata_down_spd_limit(dev->link); 2790 sata_down_spd_limit(ata_dev_phys_link(dev));
2701 ata_down_xfermask_limit(dev, ATA_DNXFER_PIO); 2791 ata_down_xfermask_limit(dev, ATA_DNXFER_PIO);
2702 } 2792 }
2703 } 2793 }
@@ -2707,7 +2797,7 @@ static int ata_eh_handle_dev_fail(struct ata_device *dev, int err)
2707 ata_dev_disable(dev); 2797 ata_dev_disable(dev);
2708 2798
2709 /* detach if offline */ 2799 /* detach if offline */
2710 if (ata_link_offline(dev->link)) 2800 if (ata_phys_link_offline(ata_dev_phys_link(dev)))
2711 ata_eh_detach_dev(dev); 2801 ata_eh_detach_dev(dev);
2712 2802
2713 /* schedule probe if necessary */ 2803 /* schedule probe if necessary */
diff --git a/drivers/ata/libata.h b/drivers/ata/libata.h
index ade5c75b6144..e96de96e3020 100644
--- a/drivers/ata/libata.h
+++ b/drivers/ata/libata.h
@@ -70,6 +70,7 @@ extern int atapi_passthru16;
70extern int libata_fua; 70extern int libata_fua;
71extern int libata_noacpi; 71extern int libata_noacpi;
72extern int libata_allow_tpm; 72extern int libata_allow_tpm;
73extern struct ata_link *ata_dev_phys_link(struct ata_device *dev);
73extern void ata_force_cbl(struct ata_port *ap); 74extern void ata_force_cbl(struct ata_port *ap);
74extern u64 ata_tf_to_lba(const struct ata_taskfile *tf); 75extern u64 ata_tf_to_lba(const struct ata_taskfile *tf);
75extern u64 ata_tf_to_lba48(const struct ata_taskfile *tf); 76extern u64 ata_tf_to_lba48(const struct ata_taskfile *tf);
@@ -107,6 +108,8 @@ extern void ata_qc_issue(struct ata_queued_cmd *qc);
107extern void __ata_qc_complete(struct ata_queued_cmd *qc); 108extern void __ata_qc_complete(struct ata_queued_cmd *qc);
108extern int atapi_check_dma(struct ata_queued_cmd *qc); 109extern int atapi_check_dma(struct ata_queued_cmd *qc);
109extern void swap_buf_le16(u16 *buf, unsigned int buf_words); 110extern void swap_buf_le16(u16 *buf, unsigned int buf_words);
111extern bool ata_phys_link_online(struct ata_link *link);
112extern bool ata_phys_link_offline(struct ata_link *link);
110extern void ata_dev_init(struct ata_device *dev); 113extern void ata_dev_init(struct ata_device *dev);
111extern void ata_link_init(struct ata_port *ap, struct ata_link *link, int pmp); 114extern void ata_link_init(struct ata_port *ap, struct ata_link *link, int pmp);
112extern int sata_link_init_spd(struct ata_link *link); 115extern int sata_link_init_spd(struct ata_link *link);
diff --git a/include/linux/libata.h b/include/linux/libata.h
index 0c7e6f3c28eb..244ff601559a 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -690,7 +690,8 @@ struct ata_port {
690 unsigned int qc_active; 690 unsigned int qc_active;
691 int nr_active_links; /* #links with active qcs */ 691 int nr_active_links; /* #links with active qcs */
692 692
693 struct ata_link link; /* host default link */ 693 struct ata_link link; /* host default link */
694 struct ata_link *slave_link; /* see ata_slave_link_init() */
694 695
695 int nr_pmp_links; /* nr of available PMP links */ 696 int nr_pmp_links; /* nr of available PMP links */
696 struct ata_link *pmp_link; /* array of PMP links */ 697 struct ata_link *pmp_link; /* array of PMP links */
@@ -897,6 +898,7 @@ extern void ata_port_disable(struct ata_port *);
897extern struct ata_host *ata_host_alloc(struct device *dev, int max_ports); 898extern struct ata_host *ata_host_alloc(struct device *dev, int max_ports);
898extern struct ata_host *ata_host_alloc_pinfo(struct device *dev, 899extern struct ata_host *ata_host_alloc_pinfo(struct device *dev,
899 const struct ata_port_info * const * ppi, int n_ports); 900 const struct ata_port_info * const * ppi, int n_ports);
901extern int ata_slave_link_init(struct ata_port *ap);
900extern int ata_host_start(struct ata_host *host); 902extern int ata_host_start(struct ata_host *host);
901extern int ata_host_register(struct ata_host *host, 903extern int ata_host_register(struct ata_host *host,
902 struct scsi_host_template *sht); 904 struct scsi_host_template *sht);
@@ -1136,7 +1138,7 @@ static inline bool sata_pmp_attached(struct ata_port *ap)
1136 1138
1137static inline int ata_is_host_link(const struct ata_link *link) 1139static inline int ata_is_host_link(const struct ata_link *link)
1138{ 1140{
1139 return link == &link->ap->link; 1141 return link == &link->ap->link || link == link->ap->slave_link;
1140} 1142}
1141#else /* CONFIG_SATA_PMP */ 1143#else /* CONFIG_SATA_PMP */
1142static inline bool sata_pmp_supported(struct ata_port *ap) 1144static inline bool sata_pmp_supported(struct ata_port *ap)
@@ -1169,7 +1171,7 @@ static inline int sata_srst_pmp(struct ata_link *link)
1169 printk("%sata%u: "fmt, lv, (ap)->print_id , ##args) 1171 printk("%sata%u: "fmt, lv, (ap)->print_id , ##args)
1170 1172
1171#define ata_link_printk(link, lv, fmt, args...) do { \ 1173#define ata_link_printk(link, lv, fmt, args...) do { \
1172 if (sata_pmp_attached((link)->ap)) \ 1174 if (sata_pmp_attached((link)->ap) || (link)->ap->slave_link) \
1173 printk("%sata%u.%02u: "fmt, lv, (link)->ap->print_id, \ 1175 printk("%sata%u.%02u: "fmt, lv, (link)->ap->print_id, \
1174 (link)->pmp , ##args); \ 1176 (link)->pmp , ##args); \
1175 else \ 1177 else \