]> bbs.cooldavid.org Git - net-next-2.6.git/blame - drivers/ata/libata-eh.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
[net-next-2.6.git] / drivers / ata / libata-eh.c
CommitLineData
ece1d636
TH
1/*
2 * libata-eh.c - libata error handling
3 *
4 * Maintained by: Jeff Garzik <jgarzik@pobox.com>
5 * Please ALWAYS copy linux-ide@vger.kernel.org
6 * on emails.
7 *
8 * Copyright 2006 Tejun Heo <htejun@gmail.com>
9 *
10 *
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License as
13 * published by the Free Software Foundation; either version 2, or
14 * (at your option) any later version.
15 *
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 * General Public License for more details.
20 *
21 * You should have received a copy of the GNU General Public License
22 * along with this program; see the file COPYING. If not, write to
23 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139,
24 * USA.
25 *
26 *
27 * libata documentation is available via 'make {ps|pdf}docs',
28 * as Documentation/DocBook/libata.*
29 *
30 * Hardware documentation available from http://www.t13.org/ and
31 * http://www.sata-io.org/
32 *
33 */
34
ece1d636 35#include <linux/kernel.h>
242f9dcb 36#include <linux/blkdev.h>
2855568b 37#include <linux/pci.h>
ece1d636
TH
38#include <scsi/scsi.h>
39#include <scsi/scsi_host.h>
40#include <scsi/scsi_eh.h>
41#include <scsi/scsi_device.h>
42#include <scsi/scsi_cmnd.h>
6521148c 43#include <scsi/scsi_dbg.h>
c6fd2807 44#include "../scsi/scsi_transport_api.h"
ece1d636
TH
45
46#include <linux/libata.h>
47
48#include "libata.h"
49
7d47e8d4 50enum {
3884f7b0 51 /* speed down verdicts */
7d47e8d4
TH
52 ATA_EH_SPDN_NCQ_OFF = (1 << 0),
53 ATA_EH_SPDN_SPEED_DOWN = (1 << 1),
54 ATA_EH_SPDN_FALLBACK_TO_PIO = (1 << 2),
76326ac1 55 ATA_EH_SPDN_KEEP_ERRORS = (1 << 3),
3884f7b0
TH
56
57 /* error flags */
58 ATA_EFLAG_IS_IO = (1 << 0),
76326ac1 59 ATA_EFLAG_DUBIOUS_XFER = (1 << 1),
3884f7b0
TH
60
61 /* error categories */
62 ATA_ECAT_NONE = 0,
63 ATA_ECAT_ATA_BUS = 1,
64 ATA_ECAT_TOUT_HSM = 2,
65 ATA_ECAT_UNK_DEV = 3,
75f9cafc
TH
66 ATA_ECAT_DUBIOUS_NONE = 4,
67 ATA_ECAT_DUBIOUS_ATA_BUS = 5,
68 ATA_ECAT_DUBIOUS_TOUT_HSM = 6,
69 ATA_ECAT_DUBIOUS_UNK_DEV = 7,
70 ATA_ECAT_NR = 8,
7d47e8d4 71
87fbc5a0
TH
72 ATA_EH_CMD_DFL_TIMEOUT = 5000,
73
0a2c0f56
TH
74 /* always put at least this amount of time between resets */
75 ATA_EH_RESET_COOL_DOWN = 5000,
76
341c2c95
TH
77 /* Waiting in ->prereset can never be reliable. It's
78 * sometimes nice to wait there but it can't be depended upon;
79 * otherwise, we wouldn't be resetting. Just give it enough
80 * time for most drives to spin up.
81 */
82 ATA_EH_PRERESET_TIMEOUT = 10000,
83 ATA_EH_FASTDRAIN_INTERVAL = 3000,
11fc33da
TH
84
85 ATA_EH_UA_TRIES = 5,
c2c7a89c
TH
86
87 /* probe speed down parameters, see ata_eh_schedule_probe() */
88 ATA_EH_PROBE_TRIAL_INTERVAL = 60000, /* 1 min */
89 ATA_EH_PROBE_TRIALS = 2,
31daabda
TH
90};
91
92/* The following table determines how we sequence resets. Each entry
93 * represents timeout for that try. The first try can be soft or
94 * hardreset. All others are hardreset if available. In most cases
95 * the first reset w/ 10sec timeout should succeed. Following entries
96 * are mostly for error handling, hotplug and retarded devices.
97 */
98static const unsigned long ata_eh_reset_timeouts[] = {
341c2c95
TH
99 10000, /* most drives spin up by 10sec */
100 10000, /* > 99% working drives spin up before 20sec */
101 35000, /* give > 30 secs of idleness for retarded devices */
102 5000, /* and sweet one last chance */
d8af0eb6 103 ULONG_MAX, /* > 1 min has elapsed, give up */
31daabda
TH
104};
105
87fbc5a0
TH
106static const unsigned long ata_eh_identify_timeouts[] = {
107 5000, /* covers > 99% of successes and not too boring on failures */
108 10000, /* combined time till here is enough even for media access */
109 30000, /* for true idiots */
110 ULONG_MAX,
111};
112
6013efd8
TH
113static const unsigned long ata_eh_flush_timeouts[] = {
114 15000, /* be generous with flush */
115 15000, /* ditto */
116 30000, /* and even more generous */
117 ULONG_MAX,
118};
119
87fbc5a0
TH
120static const unsigned long ata_eh_other_timeouts[] = {
121 5000, /* same rationale as identify timeout */
122 10000, /* ditto */
123 /* but no merciful 30sec for other commands, it just isn't worth it */
124 ULONG_MAX,
125};
126
127struct ata_eh_cmd_timeout_ent {
128 const u8 *commands;
129 const unsigned long *timeouts;
130};
131
132/* The following table determines timeouts to use for EH internal
133 * commands. Each table entry is a command class and matches the
134 * commands the entry applies to and the timeout table to use.
135 *
136 * On the retry after a command timed out, the next timeout value from
137 * the table is used. If the table doesn't contain further entries,
138 * the last value is used.
139 *
140 * ehc->cmd_timeout_idx keeps track of which timeout to use per
141 * command class, so if SET_FEATURES times out on the first try, the
142 * next try will use the second timeout value only for that class.
143 */
144#define CMDS(cmds...) (const u8 []){ cmds, 0 }
145static const struct ata_eh_cmd_timeout_ent
146ata_eh_cmd_timeout_table[ATA_EH_CMD_TIMEOUT_TABLE_SIZE] = {
147 { .commands = CMDS(ATA_CMD_ID_ATA, ATA_CMD_ID_ATAPI),
148 .timeouts = ata_eh_identify_timeouts, },
149 { .commands = CMDS(ATA_CMD_READ_NATIVE_MAX, ATA_CMD_READ_NATIVE_MAX_EXT),
150 .timeouts = ata_eh_other_timeouts, },
151 { .commands = CMDS(ATA_CMD_SET_MAX, ATA_CMD_SET_MAX_EXT),
152 .timeouts = ata_eh_other_timeouts, },
153 { .commands = CMDS(ATA_CMD_SET_FEATURES),
154 .timeouts = ata_eh_other_timeouts, },
155 { .commands = CMDS(ATA_CMD_INIT_DEV_PARAMS),
156 .timeouts = ata_eh_other_timeouts, },
6013efd8
TH
157 { .commands = CMDS(ATA_CMD_FLUSH, ATA_CMD_FLUSH_EXT),
158 .timeouts = ata_eh_flush_timeouts },
87fbc5a0
TH
159};
160#undef CMDS
161
ad9e2762 162static void __ata_port_freeze(struct ata_port *ap);
6ffa01d8 163#ifdef CONFIG_PM
500530f6
TH
164static void ata_eh_handle_port_suspend(struct ata_port *ap);
165static void ata_eh_handle_port_resume(struct ata_port *ap);
6ffa01d8
TH
166#else /* CONFIG_PM */
167static void ata_eh_handle_port_suspend(struct ata_port *ap)
168{ }
169
170static void ata_eh_handle_port_resume(struct ata_port *ap)
171{ }
6ffa01d8 172#endif /* CONFIG_PM */
ad9e2762 173
b64bbc39
TH
174static void __ata_ehi_pushv_desc(struct ata_eh_info *ehi, const char *fmt,
175 va_list args)
176{
177 ehi->desc_len += vscnprintf(ehi->desc + ehi->desc_len,
178 ATA_EH_DESC_LEN - ehi->desc_len,
179 fmt, args);
180}
181
182/**
183 * __ata_ehi_push_desc - push error description without adding separator
184 * @ehi: target EHI
185 * @fmt: printf format string
186 *
187 * Format string according to @fmt and append it to @ehi->desc.
188 *
189 * LOCKING:
190 * spin_lock_irqsave(host lock)
191 */
192void __ata_ehi_push_desc(struct ata_eh_info *ehi, const char *fmt, ...)
193{
194 va_list args;
195
196 va_start(args, fmt);
197 __ata_ehi_pushv_desc(ehi, fmt, args);
198 va_end(args);
199}
200
201/**
202 * ata_ehi_push_desc - push error description with separator
203 * @ehi: target EHI
204 * @fmt: printf format string
205 *
206 * Format string according to @fmt and append it to @ehi->desc.
207 * If @ehi->desc is not empty, ", " is added in-between.
208 *
209 * LOCKING:
210 * spin_lock_irqsave(host lock)
211 */
212void ata_ehi_push_desc(struct ata_eh_info *ehi, const char *fmt, ...)
213{
214 va_list args;
215
216 if (ehi->desc_len)
217 __ata_ehi_push_desc(ehi, ", ");
218
219 va_start(args, fmt);
220 __ata_ehi_pushv_desc(ehi, fmt, args);
221 va_end(args);
222}
223
224/**
225 * ata_ehi_clear_desc - clean error description
226 * @ehi: target EHI
227 *
228 * Clear @ehi->desc.
229 *
230 * LOCKING:
231 * spin_lock_irqsave(host lock)
232 */
233void ata_ehi_clear_desc(struct ata_eh_info *ehi)
234{
235 ehi->desc[0] = '\0';
236 ehi->desc_len = 0;
237}
238
cbcdd875
TH
239/**
240 * ata_port_desc - append port description
241 * @ap: target ATA port
242 * @fmt: printf format string
243 *
244 * Format string according to @fmt and append it to port
245 * description. If port description is not empty, " " is added
246 * in-between. This function is to be used while initializing
247 * ata_host. The description is printed on host registration.
248 *
249 * LOCKING:
250 * None.
251 */
252void ata_port_desc(struct ata_port *ap, const char *fmt, ...)
253{
254 va_list args;
255
256 WARN_ON(!(ap->pflags & ATA_PFLAG_INITIALIZING));
257
258 if (ap->link.eh_info.desc_len)
259 __ata_ehi_push_desc(&ap->link.eh_info, " ");
260
261 va_start(args, fmt);
262 __ata_ehi_pushv_desc(&ap->link.eh_info, fmt, args);
263 va_end(args);
264}
265
266#ifdef CONFIG_PCI
267
268/**
269 * ata_port_pbar_desc - append PCI BAR description
270 * @ap: target ATA port
271 * @bar: target PCI BAR
272 * @offset: offset into PCI BAR
273 * @name: name of the area
274 *
275 * If @offset is negative, this function formats a string which
276 * contains the name, address, size and type of the BAR and
277 * appends it to the port description. If @offset is zero or
278 * positive, only name and offsetted address is appended.
279 *
280 * LOCKING:
281 * None.
282 */
283void ata_port_pbar_desc(struct ata_port *ap, int bar, ssize_t offset,
284 const char *name)
285{
286 struct pci_dev *pdev = to_pci_dev(ap->host->dev);
287 char *type = "";
288 unsigned long long start, len;
289
290 if (pci_resource_flags(pdev, bar) & IORESOURCE_MEM)
291 type = "m";
292 else if (pci_resource_flags(pdev, bar) & IORESOURCE_IO)
293 type = "i";
294
295 start = (unsigned long long)pci_resource_start(pdev, bar);
296 len = (unsigned long long)pci_resource_len(pdev, bar);
297
298 if (offset < 0)
299 ata_port_desc(ap, "%s %s%llu@0x%llx", name, type, len, start);
300 else
e6a73ab1
AM
301 ata_port_desc(ap, "%s 0x%llx", name,
302 start + (unsigned long long)offset);
cbcdd875
TH
303}
304
305#endif /* CONFIG_PCI */
306
87fbc5a0
TH
307static int ata_lookup_timeout_table(u8 cmd)
308{
309 int i;
310
311 for (i = 0; i < ATA_EH_CMD_TIMEOUT_TABLE_SIZE; i++) {
312 const u8 *cur;
313
314 for (cur = ata_eh_cmd_timeout_table[i].commands; *cur; cur++)
315 if (*cur == cmd)
316 return i;
317 }
318
319 return -1;
320}
321
322/**
323 * ata_internal_cmd_timeout - determine timeout for an internal command
324 * @dev: target device
325 * @cmd: internal command to be issued
326 *
327 * Determine timeout for internal command @cmd for @dev.
328 *
329 * LOCKING:
330 * EH context.
331 *
332 * RETURNS:
333 * Determined timeout.
334 */
335unsigned long ata_internal_cmd_timeout(struct ata_device *dev, u8 cmd)
336{
337 struct ata_eh_context *ehc = &dev->link->eh_context;
338 int ent = ata_lookup_timeout_table(cmd);
339 int idx;
340
341 if (ent < 0)
342 return ATA_EH_CMD_DFL_TIMEOUT;
343
344 idx = ehc->cmd_timeout_idx[dev->devno][ent];
345 return ata_eh_cmd_timeout_table[ent].timeouts[idx];
346}
347
348/**
349 * ata_internal_cmd_timed_out - notification for internal command timeout
350 * @dev: target device
351 * @cmd: internal command which timed out
352 *
353 * Notify EH that internal command @cmd for @dev timed out. This
354 * function should be called only for commands whose timeouts are
355 * determined using ata_internal_cmd_timeout().
356 *
357 * LOCKING:
358 * EH context.
359 */
360void ata_internal_cmd_timed_out(struct ata_device *dev, u8 cmd)
361{
362 struct ata_eh_context *ehc = &dev->link->eh_context;
363 int ent = ata_lookup_timeout_table(cmd);
364 int idx;
365
366 if (ent < 0)
367 return;
368
369 idx = ehc->cmd_timeout_idx[dev->devno][ent];
370 if (ata_eh_cmd_timeout_table[ent].timeouts[idx + 1] != ULONG_MAX)
371 ehc->cmd_timeout_idx[dev->devno][ent]++;
372}
373
3884f7b0 374static void ata_ering_record(struct ata_ering *ering, unsigned int eflags,
0c247c55
TH
375 unsigned int err_mask)
376{
377 struct ata_ering_entry *ent;
378
379 WARN_ON(!err_mask);
380
381 ering->cursor++;
382 ering->cursor %= ATA_ERING_SIZE;
383
384 ent = &ering->ring[ering->cursor];
3884f7b0 385 ent->eflags = eflags;
0c247c55
TH
386 ent->err_mask = err_mask;
387 ent->timestamp = get_jiffies_64();
388}
389
76326ac1
TH
390static struct ata_ering_entry *ata_ering_top(struct ata_ering *ering)
391{
392 struct ata_ering_entry *ent = &ering->ring[ering->cursor];
393
394 if (ent->err_mask)
395 return ent;
396 return NULL;
397}
398
7d47e8d4 399static void ata_ering_clear(struct ata_ering *ering)
0c247c55 400{
7d47e8d4 401 memset(ering, 0, sizeof(*ering));
0c247c55
TH
402}
403
404static int ata_ering_map(struct ata_ering *ering,
405 int (*map_fn)(struct ata_ering_entry *, void *),
406 void *arg)
407{
408 int idx, rc = 0;
409 struct ata_ering_entry *ent;
410
411 idx = ering->cursor;
412 do {
413 ent = &ering->ring[idx];
414 if (!ent->err_mask)
415 break;
416 rc = map_fn(ent, arg);
417 if (rc)
418 break;
419 idx = (idx - 1 + ATA_ERING_SIZE) % ATA_ERING_SIZE;
420 } while (idx != ering->cursor);
421
422 return rc;
423}
424
64f65ca6
TH
425static unsigned int ata_eh_dev_action(struct ata_device *dev)
426{
9af5c9c9 427 struct ata_eh_context *ehc = &dev->link->eh_context;
64f65ca6
TH
428
429 return ehc->i.action | ehc->i.dev_action[dev->devno];
430}
431
f58229f8 432static void ata_eh_clear_action(struct ata_link *link, struct ata_device *dev,
af181c2d
TH
433 struct ata_eh_info *ehi, unsigned int action)
434{
f58229f8 435 struct ata_device *tdev;
af181c2d
TH
436
437 if (!dev) {
438 ehi->action &= ~action;
1eca4365 439 ata_for_each_dev(tdev, link, ALL)
f58229f8 440 ehi->dev_action[tdev->devno] &= ~action;
af181c2d
TH
441 } else {
442 /* doesn't make sense for port-wide EH actions */
443 WARN_ON(!(action & ATA_EH_PERDEV_MASK));
444
445 /* break ehi->action into ehi->dev_action */
446 if (ehi->action & action) {
1eca4365 447 ata_for_each_dev(tdev, link, ALL)
f58229f8
TH
448 ehi->dev_action[tdev->devno] |=
449 ehi->action & action;
af181c2d
TH
450 ehi->action &= ~action;
451 }
452
453 /* turn off the specified per-dev action */
454 ehi->dev_action[dev->devno] &= ~action;
455 }
456}
457
ece1d636
TH
458/**
459 * ata_scsi_timed_out - SCSI layer time out callback
460 * @cmd: timed out SCSI command
461 *
462 * Handles SCSI layer timeout. We race with normal completion of
463 * the qc for @cmd. If the qc is already gone, we lose and let
464 * the scsi command finish (EH_HANDLED). Otherwise, the qc has
465 * timed out and EH should be invoked. Prevent ata_qc_complete()
466 * from finishing it by setting EH_SCHEDULED and return
467 * EH_NOT_HANDLED.
468 *
ad9e2762
TH
469 * TODO: kill this function once old EH is gone.
470 *
ece1d636
TH
471 * LOCKING:
472 * Called from timer context
473 *
474 * RETURNS:
475 * EH_HANDLED or EH_NOT_HANDLED
476 */
242f9dcb 477enum blk_eh_timer_return ata_scsi_timed_out(struct scsi_cmnd *cmd)
ece1d636
TH
478{
479 struct Scsi_Host *host = cmd->device->host;
35bb94b1 480 struct ata_port *ap = ata_shost_to_port(host);
ece1d636
TH
481 unsigned long flags;
482 struct ata_queued_cmd *qc;
242f9dcb 483 enum blk_eh_timer_return ret;
ece1d636
TH
484
485 DPRINTK("ENTER\n");
486
ad9e2762 487 if (ap->ops->error_handler) {
242f9dcb 488 ret = BLK_EH_NOT_HANDLED;
ad9e2762
TH
489 goto out;
490 }
491
242f9dcb 492 ret = BLK_EH_HANDLED;
ba6a1308 493 spin_lock_irqsave(ap->lock, flags);
9af5c9c9 494 qc = ata_qc_from_tag(ap, ap->link.active_tag);
ece1d636
TH
495 if (qc) {
496 WARN_ON(qc->scsicmd != cmd);
497 qc->flags |= ATA_QCFLAG_EH_SCHEDULED;
498 qc->err_mask |= AC_ERR_TIMEOUT;
242f9dcb 499 ret = BLK_EH_NOT_HANDLED;
ece1d636 500 }
ba6a1308 501 spin_unlock_irqrestore(ap->lock, flags);
ece1d636 502
ad9e2762 503 out:
ece1d636
TH
504 DPRINTK("EXIT, ret=%d\n", ret);
505 return ret;
506}
507
ece180d1
TH
508static void ata_eh_unload(struct ata_port *ap)
509{
510 struct ata_link *link;
511 struct ata_device *dev;
512 unsigned long flags;
513
514 /* Restore SControl IPM and SPD for the next driver and
515 * disable attached devices.
516 */
517 ata_for_each_link(link, ap, PMP_FIRST) {
518 sata_scr_write(link, SCR_CONTROL, link->saved_scontrol & 0xff0);
519 ata_for_each_dev(dev, link, ALL)
520 ata_dev_disable(dev);
521 }
522
523 /* freeze and set UNLOADED */
524 spin_lock_irqsave(ap->lock, flags);
525
526 ata_port_freeze(ap); /* won't be thawed */
527 ap->pflags &= ~ATA_PFLAG_EH_PENDING; /* clear pending from freeze */
528 ap->pflags |= ATA_PFLAG_UNLOADED;
529
530 spin_unlock_irqrestore(ap->lock, flags);
531}
532
ece1d636
TH
533/**
534 * ata_scsi_error - SCSI layer error handler callback
535 * @host: SCSI host on which error occurred
536 *
537 * Handles SCSI-layer-thrown error events.
538 *
539 * LOCKING:
540 * Inherited from SCSI layer (none, can sleep)
541 *
542 * RETURNS:
543 * Zero.
544 */
381544bb 545void ata_scsi_error(struct Scsi_Host *host)
ece1d636 546{
35bb94b1 547 struct ata_port *ap = ata_shost_to_port(host);
a1e10f7e 548 int i;
ad9e2762 549 unsigned long flags;
ece1d636
TH
550
551 DPRINTK("ENTER\n");
552
c429137a
TH
553 /* make sure sff pio task is not running */
554 ata_sff_flush_pio_task(ap);
ece1d636 555
cca3974e 556 /* synchronize with host lock and sort out timeouts */
ad9e2762
TH
557
558 /* For new EH, all qcs are finished in one of three ways -
559 * normal completion, error completion, and SCSI timeout.
c96f1732 560 * Both completions can race against SCSI timeout. When normal
ad9e2762
TH
561 * completion wins, the qc never reaches EH. When error
562 * completion wins, the qc has ATA_QCFLAG_FAILED set.
563 *
564 * When SCSI timeout wins, things are a bit more complex.
565 * Normal or error completion can occur after the timeout but
566 * before this point. In such cases, both types of
567 * completions are honored. A scmd is determined to have
568 * timed out iff its associated qc is active and not failed.
569 */
570 if (ap->ops->error_handler) {
571 struct scsi_cmnd *scmd, *tmp;
572 int nr_timedout = 0;
573
e30349d2 574 spin_lock_irqsave(ap->lock, flags);
c96f1732
AC
575
576 /* This must occur under the ap->lock as we don't want
577 a polled recovery to race the real interrupt handler
578
579 The lost_interrupt handler checks for any completed but
580 non-notified command and completes much like an IRQ handler.
581
582 We then fall into the error recovery code which will treat
583 this as if normal completion won the race */
584
585 if (ap->ops->lost_interrupt)
586 ap->ops->lost_interrupt(ap);
587
ad9e2762
TH
588 list_for_each_entry_safe(scmd, tmp, &host->eh_cmd_q, eh_entry) {
589 struct ata_queued_cmd *qc;
590
591 for (i = 0; i < ATA_MAX_QUEUE; i++) {
592 qc = __ata_qc_from_tag(ap, i);
593 if (qc->flags & ATA_QCFLAG_ACTIVE &&
594 qc->scsicmd == scmd)
595 break;
596 }
597
598 if (i < ATA_MAX_QUEUE) {
599 /* the scmd has an associated qc */
600 if (!(qc->flags & ATA_QCFLAG_FAILED)) {
601 /* which hasn't failed yet, timeout */
602 qc->err_mask |= AC_ERR_TIMEOUT;
603 qc->flags |= ATA_QCFLAG_FAILED;
604 nr_timedout++;
605 }
606 } else {
607 /* Normal completion occurred after
608 * SCSI timeout but before this point.
609 * Successfully complete it.
610 */
611 scmd->retries = scmd->allowed;
612 scsi_eh_finish_cmd(scmd, &ap->eh_done_q);
613 }
614 }
615
616 /* If we have timed out qcs. They belong to EH from
617 * this point but the state of the controller is
618 * unknown. Freeze the port to make sure the IRQ
619 * handler doesn't diddle with those qcs. This must
620 * be done atomically w.r.t. setting QCFLAG_FAILED.
621 */
622 if (nr_timedout)
623 __ata_port_freeze(ap);
624
e30349d2 625 spin_unlock_irqrestore(ap->lock, flags);
a1e10f7e
TH
626
627 /* initialize eh_tries */
628 ap->eh_tries = ATA_EH_MAX_TRIES;
ad9e2762 629 } else
e30349d2 630 spin_unlock_wait(ap->lock);
c96f1732
AC
631
632 /* If we timed raced normal completion and there is nothing to
633 recover nr_timedout == 0 why exactly are we doing error recovery ? */
ad9e2762
TH
634
635 repeat:
636 /* invoke error handler */
637 if (ap->ops->error_handler) {
cf1b86c8
TH
638 struct ata_link *link;
639
5ddf24c5
TH
640 /* kill fast drain timer */
641 del_timer_sync(&ap->fastdrain_timer);
642
500530f6
TH
643 /* process port resume request */
644 ata_eh_handle_port_resume(ap);
645
f3e81b19 646 /* fetch & clear EH info */
e30349d2 647 spin_lock_irqsave(ap->lock, flags);
f3e81b19 648
1eca4365 649 ata_for_each_link(link, ap, HOST_FIRST) {
00115e0f
TH
650 struct ata_eh_context *ehc = &link->eh_context;
651 struct ata_device *dev;
652
cf1b86c8
TH
653 memset(&link->eh_context, 0, sizeof(link->eh_context));
654 link->eh_context.i = link->eh_info;
655 memset(&link->eh_info, 0, sizeof(link->eh_info));
00115e0f 656
1eca4365 657 ata_for_each_dev(dev, link, ENABLED) {
00115e0f
TH
658 int devno = dev->devno;
659
660 ehc->saved_xfer_mode[devno] = dev->xfer_mode;
661 if (ata_ncq_enabled(dev))
662 ehc->saved_ncq_enabled |= 1 << devno;
663 }
cf1b86c8 664 }
f3e81b19 665
b51e9e5d
TH
666 ap->pflags |= ATA_PFLAG_EH_IN_PROGRESS;
667 ap->pflags &= ~ATA_PFLAG_EH_PENDING;
da917d69 668 ap->excl_link = NULL; /* don't maintain exclusion over EH */
f3e81b19 669
e30349d2 670 spin_unlock_irqrestore(ap->lock, flags);
ad9e2762 671
500530f6
TH
672 /* invoke EH, skip if unloading or suspended */
673 if (!(ap->pflags & (ATA_PFLAG_UNLOADING | ATA_PFLAG_SUSPENDED)))
720ba126 674 ap->ops->error_handler(ap);
ece180d1
TH
675 else {
676 /* if unloading, commence suicide */
677 if ((ap->pflags & ATA_PFLAG_UNLOADING) &&
678 !(ap->pflags & ATA_PFLAG_UNLOADED))
679 ata_eh_unload(ap);
720ba126 680 ata_eh_finish(ap);
ece180d1 681 }
ad9e2762 682
500530f6
TH
683 /* process port suspend request */
684 ata_eh_handle_port_suspend(ap);
685
ad9e2762
TH
686 /* Exception might have happend after ->error_handler
687 * recovered the port but before this point. Repeat
688 * EH in such case.
689 */
e30349d2 690 spin_lock_irqsave(ap->lock, flags);
ad9e2762 691
b51e9e5d 692 if (ap->pflags & ATA_PFLAG_EH_PENDING) {
a1e10f7e 693 if (--ap->eh_tries) {
e30349d2 694 spin_unlock_irqrestore(ap->lock, flags);
ad9e2762
TH
695 goto repeat;
696 }
697 ata_port_printk(ap, KERN_ERR, "EH pending after %d "
a1e10f7e 698 "tries, giving up\n", ATA_EH_MAX_TRIES);
914616a3 699 ap->pflags &= ~ATA_PFLAG_EH_PENDING;
ad9e2762
TH
700 }
701
f3e81b19 702 /* this run is complete, make sure EH info is clear */
1eca4365 703 ata_for_each_link(link, ap, HOST_FIRST)
cf1b86c8 704 memset(&link->eh_info, 0, sizeof(link->eh_info));
f3e81b19 705
e30349d2 706 /* Clear host_eh_scheduled while holding ap->lock such
ad9e2762
TH
707 * that if exception occurs after this point but
708 * before EH completion, SCSI midlayer will
709 * re-initiate EH.
710 */
711 host->host_eh_scheduled = 0;
712
e30349d2 713 spin_unlock_irqrestore(ap->lock, flags);
ad9e2762 714 } else {
9af5c9c9 715 WARN_ON(ata_qc_from_tag(ap, ap->link.active_tag) == NULL);
ad9e2762
TH
716 ap->ops->eng_timeout(ap);
717 }
ece1d636 718
ad9e2762 719 /* finish or retry handled scmd's and clean up */
ece1d636
TH
720 WARN_ON(host->host_failed || !list_empty(&host->eh_cmd_q));
721
722 scsi_eh_flush_done_q(&ap->eh_done_q);
723
ad9e2762 724 /* clean up */
e30349d2 725 spin_lock_irqsave(ap->lock, flags);
ad9e2762 726
1cdaf534 727 if (ap->pflags & ATA_PFLAG_LOADING)
b51e9e5d 728 ap->pflags &= ~ATA_PFLAG_LOADING;
1cdaf534 729 else if (ap->pflags & ATA_PFLAG_SCSI_HOTPLUG)
ad72cf98 730 schedule_delayed_work(&ap->hotplug_task, 0);
1cdaf534
TH
731
732 if (ap->pflags & ATA_PFLAG_RECOVERED)
733 ata_port_printk(ap, KERN_INFO, "EH complete\n");
580b2102 734
b51e9e5d 735 ap->pflags &= ~(ATA_PFLAG_SCSI_HOTPLUG | ATA_PFLAG_RECOVERED);
ad9e2762 736
c6cf9e99 737 /* tell wait_eh that we're done */
b51e9e5d 738 ap->pflags &= ~ATA_PFLAG_EH_IN_PROGRESS;
c6cf9e99
TH
739 wake_up_all(&ap->eh_wait_q);
740
e30349d2 741 spin_unlock_irqrestore(ap->lock, flags);
ad9e2762 742
ece1d636 743 DPRINTK("EXIT\n");
ece1d636
TH
744}
745
c6cf9e99
TH
746/**
747 * ata_port_wait_eh - Wait for the currently pending EH to complete
748 * @ap: Port to wait EH for
749 *
750 * Wait until the currently pending EH is complete.
751 *
752 * LOCKING:
753 * Kernel thread context (may sleep).
754 */
755void ata_port_wait_eh(struct ata_port *ap)
756{
757 unsigned long flags;
758 DEFINE_WAIT(wait);
759
760 retry:
ba6a1308 761 spin_lock_irqsave(ap->lock, flags);
c6cf9e99 762
b51e9e5d 763 while (ap->pflags & (ATA_PFLAG_EH_PENDING | ATA_PFLAG_EH_IN_PROGRESS)) {
c6cf9e99 764 prepare_to_wait(&ap->eh_wait_q, &wait, TASK_UNINTERRUPTIBLE);
ba6a1308 765 spin_unlock_irqrestore(ap->lock, flags);
c6cf9e99 766 schedule();
ba6a1308 767 spin_lock_irqsave(ap->lock, flags);
c6cf9e99 768 }
0a1b622e 769 finish_wait(&ap->eh_wait_q, &wait);
c6cf9e99 770
ba6a1308 771 spin_unlock_irqrestore(ap->lock, flags);
c6cf9e99
TH
772
773 /* make sure SCSI EH is complete */
cca3974e 774 if (scsi_host_in_recovery(ap->scsi_host)) {
c6cf9e99
TH
775 msleep(10);
776 goto retry;
777 }
778}
779
5ddf24c5
TH
780static int ata_eh_nr_in_flight(struct ata_port *ap)
781{
782 unsigned int tag;
783 int nr = 0;
784
785 /* count only non-internal commands */
786 for (tag = 0; tag < ATA_MAX_QUEUE - 1; tag++)
787 if (ata_qc_from_tag(ap, tag))
788 nr++;
789
790 return nr;
791}
792
793void ata_eh_fastdrain_timerfn(unsigned long arg)
794{
795 struct ata_port *ap = (void *)arg;
796 unsigned long flags;
797 int cnt;
798
799 spin_lock_irqsave(ap->lock, flags);
800
801 cnt = ata_eh_nr_in_flight(ap);
802
803 /* are we done? */
804 if (!cnt)
805 goto out_unlock;
806
807 if (cnt == ap->fastdrain_cnt) {
808 unsigned int tag;
809
810 /* No progress during the last interval, tag all
811 * in-flight qcs as timed out and freeze the port.
812 */
813 for (tag = 0; tag < ATA_MAX_QUEUE - 1; tag++) {
814 struct ata_queued_cmd *qc = ata_qc_from_tag(ap, tag);
815 if (qc)
816 qc->err_mask |= AC_ERR_TIMEOUT;
817 }
818
819 ata_port_freeze(ap);
820 } else {
821 /* some qcs have finished, give it another chance */
822 ap->fastdrain_cnt = cnt;
823 ap->fastdrain_timer.expires =
341c2c95 824 ata_deadline(jiffies, ATA_EH_FASTDRAIN_INTERVAL);
5ddf24c5
TH
825 add_timer(&ap->fastdrain_timer);
826 }
827
828 out_unlock:
829 spin_unlock_irqrestore(ap->lock, flags);
830}
831
832/**
833 * ata_eh_set_pending - set ATA_PFLAG_EH_PENDING and activate fast drain
834 * @ap: target ATA port
835 * @fastdrain: activate fast drain
836 *
837 * Set ATA_PFLAG_EH_PENDING and activate fast drain if @fastdrain
838 * is non-zero and EH wasn't pending before. Fast drain ensures
839 * that EH kicks in in timely manner.
840 *
841 * LOCKING:
842 * spin_lock_irqsave(host lock)
843 */
844static void ata_eh_set_pending(struct ata_port *ap, int fastdrain)
845{
846 int cnt;
847
848 /* already scheduled? */
849 if (ap->pflags & ATA_PFLAG_EH_PENDING)
850 return;
851
852 ap->pflags |= ATA_PFLAG_EH_PENDING;
853
854 if (!fastdrain)
855 return;
856
857 /* do we have in-flight qcs? */
858 cnt = ata_eh_nr_in_flight(ap);
859 if (!cnt)
860 return;
861
862 /* activate fast drain */
863 ap->fastdrain_cnt = cnt;
341c2c95
TH
864 ap->fastdrain_timer.expires =
865 ata_deadline(jiffies, ATA_EH_FASTDRAIN_INTERVAL);
5ddf24c5
TH
866 add_timer(&ap->fastdrain_timer);
867}
868
f686bcb8
TH
869/**
870 * ata_qc_schedule_eh - schedule qc for error handling
871 * @qc: command to schedule error handling for
872 *
873 * Schedule error handling for @qc. EH will kick in as soon as
874 * other commands are drained.
875 *
876 * LOCKING:
cca3974e 877 * spin_lock_irqsave(host lock)
f686bcb8
TH
878 */
879void ata_qc_schedule_eh(struct ata_queued_cmd *qc)
880{
881 struct ata_port *ap = qc->ap;
fa41efda
TH
882 struct request_queue *q = qc->scsicmd->device->request_queue;
883 unsigned long flags;
f686bcb8
TH
884
885 WARN_ON(!ap->ops->error_handler);
886
887 qc->flags |= ATA_QCFLAG_FAILED;
5ddf24c5 888 ata_eh_set_pending(ap, 1);
f686bcb8
TH
889
890 /* The following will fail if timeout has already expired.
891 * ata_scsi_error() takes care of such scmds on EH entry.
892 * Note that ATA_QCFLAG_FAILED is unconditionally set after
893 * this function completes.
894 */
fa41efda 895 spin_lock_irqsave(q->queue_lock, flags);
242f9dcb 896 blk_abort_request(qc->scsicmd->request);
fa41efda 897 spin_unlock_irqrestore(q->queue_lock, flags);
f686bcb8
TH
898}
899
7b70fc03
TH
900/**
901 * ata_port_schedule_eh - schedule error handling without a qc
902 * @ap: ATA port to schedule EH for
903 *
904 * Schedule error handling for @ap. EH will kick in as soon as
905 * all commands are drained.
906 *
907 * LOCKING:
cca3974e 908 * spin_lock_irqsave(host lock)
7b70fc03
TH
909 */
910void ata_port_schedule_eh(struct ata_port *ap)
911{
912 WARN_ON(!ap->ops->error_handler);
913
f4d6d004
TH
914 if (ap->pflags & ATA_PFLAG_INITIALIZING)
915 return;
916
5ddf24c5 917 ata_eh_set_pending(ap, 1);
cca3974e 918 scsi_schedule_eh(ap->scsi_host);
7b70fc03
TH
919
920 DPRINTK("port EH scheduled\n");
921}
922
dbd82616 923static int ata_do_link_abort(struct ata_port *ap, struct ata_link *link)
7b70fc03
TH
924{
925 int tag, nr_aborted = 0;
926
927 WARN_ON(!ap->ops->error_handler);
928
5ddf24c5
TH
929 /* we're gonna abort all commands, no need for fast drain */
930 ata_eh_set_pending(ap, 0);
931
7b70fc03
TH
932 for (tag = 0; tag < ATA_MAX_QUEUE; tag++) {
933 struct ata_queued_cmd *qc = ata_qc_from_tag(ap, tag);
934
dbd82616 935 if (qc && (!link || qc->dev->link == link)) {
7b70fc03
TH
936 qc->flags |= ATA_QCFLAG_FAILED;
937 ata_qc_complete(qc);
938 nr_aborted++;
939 }
940 }
941
942 if (!nr_aborted)
943 ata_port_schedule_eh(ap);
944
945 return nr_aborted;
946}
947
dbd82616
TH
948/**
949 * ata_link_abort - abort all qc's on the link
950 * @link: ATA link to abort qc's for
951 *
952 * Abort all active qc's active on @link and schedule EH.
953 *
954 * LOCKING:
955 * spin_lock_irqsave(host lock)
956 *
957 * RETURNS:
958 * Number of aborted qc's.
959 */
960int ata_link_abort(struct ata_link *link)
961{
962 return ata_do_link_abort(link->ap, link);
963}
964
965/**
966 * ata_port_abort - abort all qc's on the port
967 * @ap: ATA port to abort qc's for
968 *
969 * Abort all active qc's of @ap and schedule EH.
970 *
971 * LOCKING:
972 * spin_lock_irqsave(host_set lock)
973 *
974 * RETURNS:
975 * Number of aborted qc's.
976 */
977int ata_port_abort(struct ata_port *ap)
978{
979 return ata_do_link_abort(ap, NULL);
980}
981
e3180499
TH
982/**
983 * __ata_port_freeze - freeze port
984 * @ap: ATA port to freeze
985 *
986 * This function is called when HSM violation or some other
987 * condition disrupts normal operation of the port. Frozen port
988 * is not allowed to perform any operation until the port is
989 * thawed, which usually follows a successful reset.
990 *
991 * ap->ops->freeze() callback can be used for freezing the port
992 * hardware-wise (e.g. mask interrupt and stop DMA engine). If a
993 * port cannot be frozen hardware-wise, the interrupt handler
994 * must ack and clear interrupts unconditionally while the port
995 * is frozen.
996 *
997 * LOCKING:
cca3974e 998 * spin_lock_irqsave(host lock)
e3180499
TH
999 */
1000static void __ata_port_freeze(struct ata_port *ap)
1001{
1002 WARN_ON(!ap->ops->error_handler);
1003
1004 if (ap->ops->freeze)
1005 ap->ops->freeze(ap);
1006
b51e9e5d 1007 ap->pflags |= ATA_PFLAG_FROZEN;
e3180499 1008
44877b4e 1009 DPRINTK("ata%u port frozen\n", ap->print_id);
e3180499
TH
1010}
1011
1012/**
1013 * ata_port_freeze - abort & freeze port
1014 * @ap: ATA port to freeze
1015 *
54c38444
JG
1016 * Abort and freeze @ap. The freeze operation must be called
1017 * first, because some hardware requires special operations
1018 * before the taskfile registers are accessible.
e3180499
TH
1019 *
1020 * LOCKING:
cca3974e 1021 * spin_lock_irqsave(host lock)
e3180499
TH
1022 *
1023 * RETURNS:
1024 * Number of aborted commands.
1025 */
1026int ata_port_freeze(struct ata_port *ap)
1027{
1028 int nr_aborted;
1029
1030 WARN_ON(!ap->ops->error_handler);
1031
e3180499 1032 __ata_port_freeze(ap);
54c38444 1033 nr_aborted = ata_port_abort(ap);
e3180499
TH
1034
1035 return nr_aborted;
1036}
1037
7d77b247
TH
1038/**
1039 * sata_async_notification - SATA async notification handler
1040 * @ap: ATA port where async notification is received
1041 *
1042 * Handler to be called when async notification via SDB FIS is
1043 * received. This function schedules EH if necessary.
1044 *
1045 * LOCKING:
1046 * spin_lock_irqsave(host lock)
1047 *
1048 * RETURNS:
1049 * 1 if EH is scheduled, 0 otherwise.
1050 */
1051int sata_async_notification(struct ata_port *ap)
1052{
1053 u32 sntf;
1054 int rc;
1055
1056 if (!(ap->flags & ATA_FLAG_AN))
1057 return 0;
1058
1059 rc = sata_scr_read(&ap->link, SCR_NOTIFICATION, &sntf);
1060 if (rc == 0)
1061 sata_scr_write(&ap->link, SCR_NOTIFICATION, sntf);
1062
071f44b1 1063 if (!sata_pmp_attached(ap) || rc) {
7d77b247 1064 /* PMP is not attached or SNTF is not available */
071f44b1 1065 if (!sata_pmp_attached(ap)) {
7d77b247
TH
1066 /* PMP is not attached. Check whether ATAPI
1067 * AN is configured. If so, notify media
1068 * change.
1069 */
1070 struct ata_device *dev = ap->link.device;
1071
1072 if ((dev->class == ATA_DEV_ATAPI) &&
1073 (dev->flags & ATA_DFLAG_AN))
1074 ata_scsi_media_change_notify(dev);
1075 return 0;
1076 } else {
1077 /* PMP is attached but SNTF is not available.
1078 * ATAPI async media change notification is
1079 * not used. The PMP must be reporting PHY
1080 * status change, schedule EH.
1081 */
1082 ata_port_schedule_eh(ap);
1083 return 1;
1084 }
1085 } else {
1086 /* PMP is attached and SNTF is available */
1087 struct ata_link *link;
1088
1089 /* check and notify ATAPI AN */
1eca4365 1090 ata_for_each_link(link, ap, EDGE) {
7d77b247
TH
1091 if (!(sntf & (1 << link->pmp)))
1092 continue;
1093
1094 if ((link->device->class == ATA_DEV_ATAPI) &&
1095 (link->device->flags & ATA_DFLAG_AN))
1096 ata_scsi_media_change_notify(link->device);
1097 }
1098
1099 /* If PMP is reporting that PHY status of some
1100 * downstream ports has changed, schedule EH.
1101 */
1102 if (sntf & (1 << SATA_PMP_CTRL_PORT)) {
1103 ata_port_schedule_eh(ap);
1104 return 1;
1105 }
1106
1107 return 0;
1108 }
1109}
1110
e3180499
TH
1111/**
1112 * ata_eh_freeze_port - EH helper to freeze port
1113 * @ap: ATA port to freeze
1114 *
1115 * Freeze @ap.
1116 *
1117 * LOCKING:
1118 * None.
1119 */
1120void ata_eh_freeze_port(struct ata_port *ap)
1121{
1122 unsigned long flags;
1123
1124 if (!ap->ops->error_handler)
1125 return;
1126
ba6a1308 1127 spin_lock_irqsave(ap->lock, flags);
e3180499 1128 __ata_port_freeze(ap);
ba6a1308 1129 spin_unlock_irqrestore(ap->lock, flags);
e3180499
TH
1130}
1131
1132/**
1133 * ata_port_thaw_port - EH helper to thaw port
1134 * @ap: ATA port to thaw
1135 *
1136 * Thaw frozen port @ap.
1137 *
1138 * LOCKING:
1139 * None.
1140 */
1141void ata_eh_thaw_port(struct ata_port *ap)
1142{
1143 unsigned long flags;
1144
1145 if (!ap->ops->error_handler)
1146 return;
1147
ba6a1308 1148 spin_lock_irqsave(ap->lock, flags);
e3180499 1149
b51e9e5d 1150 ap->pflags &= ~ATA_PFLAG_FROZEN;
e3180499
TH
1151
1152 if (ap->ops->thaw)
1153 ap->ops->thaw(ap);
1154
ba6a1308 1155 spin_unlock_irqrestore(ap->lock, flags);
e3180499 1156
44877b4e 1157 DPRINTK("ata%u port thawed\n", ap->print_id);
e3180499
TH
1158}
1159
ece1d636
TH
1160static void ata_eh_scsidone(struct scsi_cmnd *scmd)
1161{
1162 /* nada */
1163}
1164
1165static void __ata_eh_qc_complete(struct ata_queued_cmd *qc)
1166{
1167 struct ata_port *ap = qc->ap;
1168 struct scsi_cmnd *scmd = qc->scsicmd;
1169 unsigned long flags;
1170
ba6a1308 1171 spin_lock_irqsave(ap->lock, flags);
ece1d636
TH
1172 qc->scsidone = ata_eh_scsidone;
1173 __ata_qc_complete(qc);
1174 WARN_ON(ata_tag_valid(qc->tag));
ba6a1308 1175 spin_unlock_irqrestore(ap->lock, flags);
ece1d636
TH
1176
1177 scsi_eh_finish_cmd(scmd, &ap->eh_done_q);
1178}
1179
1180/**
1181 * ata_eh_qc_complete - Complete an active ATA command from EH
1182 * @qc: Command to complete
1183 *
1184 * Indicate to the mid and upper layers that an ATA command has
1185 * completed. To be used from EH.
1186 */
1187void ata_eh_qc_complete(struct ata_queued_cmd *qc)
1188{
1189 struct scsi_cmnd *scmd = qc->scsicmd;
1190 scmd->retries = scmd->allowed;
1191 __ata_eh_qc_complete(qc);
1192}
1193
1194/**
1195 * ata_eh_qc_retry - Tell midlayer to retry an ATA command after EH
1196 * @qc: Command to retry
1197 *
1198 * Indicate to the mid and upper layers that an ATA command
1199 * should be retried. To be used from EH.
1200 *
1201 * SCSI midlayer limits the number of retries to scmd->allowed.
1202 * scmd->retries is decremented for commands which get retried
1203 * due to unrelated failures (qc->err_mask is zero).
1204 */
1205void ata_eh_qc_retry(struct ata_queued_cmd *qc)
1206{
1207 struct scsi_cmnd *scmd = qc->scsicmd;
1208 if (!qc->err_mask && scmd->retries)
1209 scmd->retries--;
1210 __ata_eh_qc_complete(qc);
1211}
022bdb07 1212
678afac6
TH
1213/**
1214 * ata_dev_disable - disable ATA device
1215 * @dev: ATA device to disable
1216 *
1217 * Disable @dev.
1218 *
1219 * Locking:
1220 * EH context.
1221 */
1222void ata_dev_disable(struct ata_device *dev)
1223{
1224 if (!ata_dev_enabled(dev))
1225 return;
1226
1227 if (ata_msg_drv(dev->link->ap))
1228 ata_dev_printk(dev, KERN_WARNING, "disabled\n");
1229 ata_acpi_on_disable(dev);
1230 ata_down_xfermask_limit(dev, ATA_DNXFER_FORCE_PIO0 | ATA_DNXFER_QUIET);
1231 dev->class++;
99cf610a
TH
1232
1233 /* From now till the next successful probe, ering is used to
1234 * track probe failures. Clear accumulated device error info.
1235 */
1236 ata_ering_clear(&dev->ering);
678afac6
TH
1237}
1238
0ea035a3
TH
1239/**
1240 * ata_eh_detach_dev - detach ATA device
1241 * @dev: ATA device to detach
1242 *
1243 * Detach @dev.
1244 *
1245 * LOCKING:
1246 * None.
1247 */
fb7fd614 1248void ata_eh_detach_dev(struct ata_device *dev)
0ea035a3 1249{
f58229f8
TH
1250 struct ata_link *link = dev->link;
1251 struct ata_port *ap = link->ap;
90484ebf 1252 struct ata_eh_context *ehc = &link->eh_context;
0ea035a3
TH
1253 unsigned long flags;
1254
1255 ata_dev_disable(dev);
1256
ba6a1308 1257 spin_lock_irqsave(ap->lock, flags);
0ea035a3
TH
1258
1259 dev->flags &= ~ATA_DFLAG_DETACH;
1260
1261 if (ata_scsi_offline_dev(dev)) {
1262 dev->flags |= ATA_DFLAG_DETACHED;
b51e9e5d 1263 ap->pflags |= ATA_PFLAG_SCSI_HOTPLUG;
0ea035a3
TH
1264 }
1265
90484ebf 1266 /* clear per-dev EH info */
f58229f8
TH
1267 ata_eh_clear_action(link, dev, &link->eh_info, ATA_EH_PERDEV_MASK);
1268 ata_eh_clear_action(link, dev, &link->eh_context.i, ATA_EH_PERDEV_MASK);
90484ebf
TH
1269 ehc->saved_xfer_mode[dev->devno] = 0;
1270 ehc->saved_ncq_enabled &= ~(1 << dev->devno);
beb07c1a 1271
ba6a1308 1272 spin_unlock_irqrestore(ap->lock, flags);
0ea035a3
TH
1273}
1274
022bdb07
TH
1275/**
1276 * ata_eh_about_to_do - about to perform eh_action
955e57df 1277 * @link: target ATA link
47005f25 1278 * @dev: target ATA dev for per-dev action (can be NULL)
022bdb07
TH
1279 * @action: action about to be performed
1280 *
1281 * Called just before performing EH actions to clear related bits
955e57df
TH
1282 * in @link->eh_info such that eh actions are not unnecessarily
1283 * repeated.
022bdb07
TH
1284 *
1285 * LOCKING:
1286 * None.
1287 */
fb7fd614
TH
1288void ata_eh_about_to_do(struct ata_link *link, struct ata_device *dev,
1289 unsigned int action)
022bdb07 1290{
955e57df
TH
1291 struct ata_port *ap = link->ap;
1292 struct ata_eh_info *ehi = &link->eh_info;
1293 struct ata_eh_context *ehc = &link->eh_context;
022bdb07
TH
1294 unsigned long flags;
1295
ba6a1308 1296 spin_lock_irqsave(ap->lock, flags);
1cdaf534 1297
955e57df 1298 ata_eh_clear_action(link, dev, ehi, action);
1cdaf534 1299
a568d1d2
TH
1300 /* About to take EH action, set RECOVERED. Ignore actions on
1301 * slave links as master will do them again.
1302 */
1303 if (!(ehc->i.flags & ATA_EHI_QUIET) && link != ap->slave_link)
1cdaf534
TH
1304 ap->pflags |= ATA_PFLAG_RECOVERED;
1305
ba6a1308 1306 spin_unlock_irqrestore(ap->lock, flags);
022bdb07
TH
1307}
1308
47005f25
TH
1309/**
1310 * ata_eh_done - EH action complete
955e57df 1311* @ap: target ATA port
47005f25
TH
1312 * @dev: target ATA dev for per-dev action (can be NULL)
1313 * @action: action just completed
1314 *
1315 * Called right after performing EH actions to clear related bits
955e57df 1316 * in @link->eh_context.
47005f25
TH
1317 *
1318 * LOCKING:
1319 * None.
1320 */
fb7fd614
TH
1321void ata_eh_done(struct ata_link *link, struct ata_device *dev,
1322 unsigned int action)
47005f25 1323{
955e57df 1324 struct ata_eh_context *ehc = &link->eh_context;
9af5c9c9 1325
955e57df 1326 ata_eh_clear_action(link, dev, &ehc->i, action);
47005f25
TH
1327}
1328
022bdb07
TH
1329/**
1330 * ata_err_string - convert err_mask to descriptive string
1331 * @err_mask: error mask to convert to string
1332 *
1333 * Convert @err_mask to descriptive string. Errors are
1334 * prioritized according to severity and only the most severe
1335 * error is reported.
1336 *
1337 * LOCKING:
1338 * None.
1339 *
1340 * RETURNS:
1341 * Descriptive string for @err_mask
1342 */
2dcb407e 1343static const char *ata_err_string(unsigned int err_mask)
022bdb07
TH
1344{
1345 if (err_mask & AC_ERR_HOST_BUS)
1346 return "host bus error";
1347 if (err_mask & AC_ERR_ATA_BUS)
1348 return "ATA bus error";
1349 if (err_mask & AC_ERR_TIMEOUT)
1350 return "timeout";
1351 if (err_mask & AC_ERR_HSM)
1352 return "HSM violation";
1353 if (err_mask & AC_ERR_SYSTEM)
1354 return "internal error";
1355 if (err_mask & AC_ERR_MEDIA)
1356 return "media error";
1357 if (err_mask & AC_ERR_INVALID)
1358 return "invalid argument";
1359 if (err_mask & AC_ERR_DEV)
1360 return "device error";
1361 return "unknown error";
1362}
1363
e8ee8451
TH
1364/**
1365 * ata_read_log_page - read a specific log page
1366 * @dev: target device
1367 * @page: page to read
1368 * @buf: buffer to store read page
1369 * @sectors: number of sectors to read
1370 *
1371 * Read log page using READ_LOG_EXT command.
1372 *
1373 * LOCKING:
1374 * Kernel thread context (may sleep).
1375 *
1376 * RETURNS:
1377 * 0 on success, AC_ERR_* mask otherwise.
1378 */
1379static unsigned int ata_read_log_page(struct ata_device *dev,
1380 u8 page, void *buf, unsigned int sectors)
1381{
1382 struct ata_taskfile tf;
1383 unsigned int err_mask;
1384
1385 DPRINTK("read log page - page %d\n", page);
1386
1387 ata_tf_init(dev, &tf);
1388 tf.command = ATA_CMD_READ_LOG_EXT;
1389 tf.lbal = page;
1390 tf.nsect = sectors;
1391 tf.hob_nsect = sectors >> 8;
1392 tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_LBA48 | ATA_TFLAG_DEVICE;
1393 tf.protocol = ATA_PROT_PIO;
1394
1395 err_mask = ata_exec_internal(dev, &tf, NULL, DMA_FROM_DEVICE,
2b789108 1396 buf, sectors * ATA_SECT_SIZE, 0);
e8ee8451
TH
1397
1398 DPRINTK("EXIT, err_mask=%x\n", err_mask);
1399 return err_mask;
1400}
1401
1402/**
1403 * ata_eh_read_log_10h - Read log page 10h for NCQ error details
1404 * @dev: Device to read log page 10h from
1405 * @tag: Resulting tag of the failed command
1406 * @tf: Resulting taskfile registers of the failed command
1407 *
1408 * Read log page 10h to obtain NCQ error details and clear error
1409 * condition.
1410 *
1411 * LOCKING:
1412 * Kernel thread context (may sleep).
1413 *
1414 * RETURNS:
1415 * 0 on success, -errno otherwise.
1416 */
1417static int ata_eh_read_log_10h(struct ata_device *dev,
1418 int *tag, struct ata_taskfile *tf)
1419{
9af5c9c9 1420 u8 *buf = dev->link->ap->sector_buf;
e8ee8451
TH
1421 unsigned int err_mask;
1422 u8 csum;
1423 int i;
1424
1425 err_mask = ata_read_log_page(dev, ATA_LOG_SATA_NCQ, buf, 1);
1426 if (err_mask)
1427 return -EIO;
1428
1429 csum = 0;
1430 for (i = 0; i < ATA_SECT_SIZE; i++)
1431 csum += buf[i];
1432 if (csum)
1433 ata_dev_printk(dev, KERN_WARNING,
1434 "invalid checksum 0x%x on log page 10h\n", csum);
1435
1436 if (buf[0] & 0x80)
1437 return -ENOENT;
1438
1439 *tag = buf[0] & 0x1f;
1440
1441 tf->command = buf[2];
1442 tf->feature = buf[3];
1443 tf->lbal = buf[4];
1444 tf->lbam = buf[5];
1445 tf->lbah = buf[6];
1446 tf->device = buf[7];
1447 tf->hob_lbal = buf[8];
1448 tf->hob_lbam = buf[9];
1449 tf->hob_lbah = buf[10];
1450 tf->nsect = buf[12];
1451 tf->hob_nsect = buf[13];
1452
1453 return 0;
1454}
1455
11fc33da
TH
1456/**
1457 * atapi_eh_tur - perform ATAPI TEST_UNIT_READY
1458 * @dev: target ATAPI device
1459 * @r_sense_key: out parameter for sense_key
1460 *
1461 * Perform ATAPI TEST_UNIT_READY.
1462 *
1463 * LOCKING:
1464 * EH context (may sleep).
1465 *
1466 * RETURNS:
1467 * 0 on success, AC_ERR_* mask on failure.
1468 */
1469static unsigned int atapi_eh_tur(struct ata_device *dev, u8 *r_sense_key)
1470{
1471 u8 cdb[ATAPI_CDB_LEN] = { TEST_UNIT_READY, 0, 0, 0, 0, 0 };
1472 struct ata_taskfile tf;
1473 unsigned int err_mask;
1474
1475 ata_tf_init(dev, &tf);
1476
1477 tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
1478 tf.command = ATA_CMD_PACKET;
1479 tf.protocol = ATAPI_PROT_NODATA;
1480
1481 err_mask = ata_exec_internal(dev, &tf, cdb, DMA_NONE, NULL, 0, 0);
1482 if (err_mask == AC_ERR_DEV)
1483 *r_sense_key = tf.feature >> 4;
1484 return err_mask;
1485}
1486
022bdb07
TH
1487/**
1488 * atapi_eh_request_sense - perform ATAPI REQUEST_SENSE
1489 * @dev: device to perform REQUEST_SENSE to
1490 * @sense_buf: result sense data buffer (SCSI_SENSE_BUFFERSIZE bytes long)
3eabddb8 1491 * @dfl_sense_key: default sense key to use
022bdb07
TH
1492 *
1493 * Perform ATAPI REQUEST_SENSE after the device reported CHECK
1494 * SENSE. This function is EH helper.
1495 *
1496 * LOCKING:
1497 * Kernel thread context (may sleep).
1498 *
1499 * RETURNS:
1500 * 0 on success, AC_ERR_* mask on failure
1501 */
3eabddb8
TH
1502static unsigned int atapi_eh_request_sense(struct ata_device *dev,
1503 u8 *sense_buf, u8 dfl_sense_key)
022bdb07 1504{
3eabddb8
TH
1505 u8 cdb[ATAPI_CDB_LEN] =
1506 { REQUEST_SENSE, 0, 0, 0, SCSI_SENSE_BUFFERSIZE, 0 };
9af5c9c9 1507 struct ata_port *ap = dev->link->ap;
022bdb07 1508 struct ata_taskfile tf;
022bdb07
TH
1509
1510 DPRINTK("ATAPI request sense\n");
1511
022bdb07
TH
1512 /* FIXME: is this needed? */
1513 memset(sense_buf, 0, SCSI_SENSE_BUFFERSIZE);
1514
56287768
AL
1515 /* initialize sense_buf with the error register,
1516 * for the case where they are -not- overwritten
1517 */
022bdb07 1518 sense_buf[0] = 0x70;
3eabddb8 1519 sense_buf[2] = dfl_sense_key;
56287768 1520
a617c09f 1521 /* some devices time out if garbage left in tf */
56287768 1522 ata_tf_init(dev, &tf);
022bdb07 1523
022bdb07
TH
1524 tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
1525 tf.command = ATA_CMD_PACKET;
1526
1527 /* is it pointless to prefer PIO for "safety reasons"? */
1528 if (ap->flags & ATA_FLAG_PIO_DMA) {
0dc36888 1529 tf.protocol = ATAPI_PROT_DMA;
022bdb07
TH
1530 tf.feature |= ATAPI_PKT_DMA;
1531 } else {
0dc36888 1532 tf.protocol = ATAPI_PROT_PIO;
f2dfc1a1
TH
1533 tf.lbam = SCSI_SENSE_BUFFERSIZE;
1534 tf.lbah = 0;
022bdb07
TH
1535 }
1536
1537 return ata_exec_internal(dev, &tf, cdb, DMA_FROM_DEVICE,
2b789108 1538 sense_buf, SCSI_SENSE_BUFFERSIZE, 0);
022bdb07
TH
1539}
1540
1541/**
1542 * ata_eh_analyze_serror - analyze SError for a failed port
0260731f 1543 * @link: ATA link to analyze SError for
022bdb07
TH
1544 *
1545 * Analyze SError if available and further determine cause of
1546 * failure.
1547 *
1548 * LOCKING:
1549 * None.
1550 */
0260731f 1551static void ata_eh_analyze_serror(struct ata_link *link)
022bdb07 1552{
0260731f 1553 struct ata_eh_context *ehc = &link->eh_context;
022bdb07
TH
1554 u32 serror = ehc->i.serror;
1555 unsigned int err_mask = 0, action = 0;
f9df58cb 1556 u32 hotplug_mask;
022bdb07 1557
e0614db2 1558 if (serror & (SERR_PERSISTENT | SERR_DATA)) {
022bdb07 1559 err_mask |= AC_ERR_ATA_BUS;
cf480626 1560 action |= ATA_EH_RESET;
022bdb07
TH
1561 }
1562 if (serror & SERR_PROTOCOL) {
1563 err_mask |= AC_ERR_HSM;
cf480626 1564 action |= ATA_EH_RESET;
022bdb07
TH
1565 }
1566 if (serror & SERR_INTERNAL) {
1567 err_mask |= AC_ERR_SYSTEM;
cf480626 1568 action |= ATA_EH_RESET;
022bdb07 1569 }
f9df58cb
TH
1570
1571 /* Determine whether a hotplug event has occurred. Both
1572 * SError.N/X are considered hotplug events for enabled or
1573 * host links. For disabled PMP links, only N bit is
1574 * considered as X bit is left at 1 for link plugging.
1575 */
1576 hotplug_mask = 0;
1577
1578 if (!(link->flags & ATA_LFLAG_DISABLED) || ata_is_host_link(link))
1579 hotplug_mask = SERR_PHYRDY_CHG | SERR_DEV_XCHG;
1580 else
1581 hotplug_mask = SERR_PHYRDY_CHG;
1582
1583 if (serror & hotplug_mask)
084fe639 1584 ata_ehi_hotplugged(&ehc->i);
022bdb07
TH
1585
1586 ehc->i.err_mask |= err_mask;
1587 ehc->i.action |= action;
1588}
1589
e8ee8451
TH
1590/**
1591 * ata_eh_analyze_ncq_error - analyze NCQ error
0260731f 1592 * @link: ATA link to analyze NCQ error for
e8ee8451
TH
1593 *
1594 * Read log page 10h, determine the offending qc and acquire
1595 * error status TF. For NCQ device errors, all LLDDs have to do
1596 * is setting AC_ERR_DEV in ehi->err_mask. This function takes
1597 * care of the rest.
1598 *
1599 * LOCKING:
1600 * Kernel thread context (may sleep).
1601 */
10acf3b0 1602void ata_eh_analyze_ncq_error(struct ata_link *link)
e8ee8451 1603{
0260731f
TH
1604 struct ata_port *ap = link->ap;
1605 struct ata_eh_context *ehc = &link->eh_context;
1606 struct ata_device *dev = link->device;
e8ee8451
TH
1607 struct ata_queued_cmd *qc;
1608 struct ata_taskfile tf;
1609 int tag, rc;
1610
1611 /* if frozen, we can't do much */
b51e9e5d 1612 if (ap->pflags & ATA_PFLAG_FROZEN)
e8ee8451
TH
1613 return;
1614
1615 /* is it NCQ device error? */
0260731f 1616 if (!link->sactive || !(ehc->i.err_mask & AC_ERR_DEV))
e8ee8451
TH
1617 return;
1618
1619 /* has LLDD analyzed already? */
1620 for (tag = 0; tag < ATA_MAX_QUEUE; tag++) {
1621 qc = __ata_qc_from_tag(ap, tag);
1622
1623 if (!(qc->flags & ATA_QCFLAG_FAILED))
1624 continue;
1625
1626 if (qc->err_mask)
1627 return;
1628 }
1629
1630 /* okay, this error is ours */
a09bf4cd 1631 memset(&tf, 0, sizeof(tf));
e8ee8451
TH
1632 rc = ata_eh_read_log_10h(dev, &tag, &tf);
1633 if (rc) {
0260731f 1634 ata_link_printk(link, KERN_ERR, "failed to read log page 10h "
e8ee8451
TH
1635 "(errno=%d)\n", rc);
1636 return;
1637 }
1638
0260731f
TH
1639 if (!(link->sactive & (1 << tag))) {
1640 ata_link_printk(link, KERN_ERR, "log page 10h reported "
e8ee8451
TH
1641 "inactive tag %d\n", tag);
1642 return;
1643 }
1644
1645 /* we've got the perpetrator, condemn it */
1646 qc = __ata_qc_from_tag(ap, tag);
1647 memcpy(&qc->result_tf, &tf, sizeof(tf));
a6116c9e 1648 qc->result_tf.flags = ATA_TFLAG_ISADDR | ATA_TFLAG_LBA | ATA_TFLAG_LBA48;
5335b729 1649 qc->err_mask |= AC_ERR_DEV | AC_ERR_NCQ;
e8ee8451
TH
1650 ehc->i.err_mask &= ~AC_ERR_DEV;
1651}
1652
022bdb07
TH
1653/**
1654 * ata_eh_analyze_tf - analyze taskfile of a failed qc
1655 * @qc: qc to analyze
1656 * @tf: Taskfile registers to analyze
1657 *
1658 * Analyze taskfile of @qc and further determine cause of
1659 * failure. This function also requests ATAPI sense data if
1660 * avaliable.
1661 *
1662 * LOCKING:
1663 * Kernel thread context (may sleep).
1664 *
1665 * RETURNS:
1666 * Determined recovery action
1667 */
1668static unsigned int ata_eh_analyze_tf(struct ata_queued_cmd *qc,
1669 const struct ata_taskfile *tf)
1670{
1671 unsigned int tmp, action = 0;
1672 u8 stat = tf->command, err = tf->feature;
1673
1674 if ((stat & (ATA_BUSY | ATA_DRQ | ATA_DRDY)) != ATA_DRDY) {
1675 qc->err_mask |= AC_ERR_HSM;
cf480626 1676 return ATA_EH_RESET;
022bdb07
TH
1677 }
1678
a51d644a
TH
1679 if (stat & (ATA_ERR | ATA_DF))
1680 qc->err_mask |= AC_ERR_DEV;
1681 else
022bdb07
TH
1682 return 0;
1683
1684 switch (qc->dev->class) {
1685 case ATA_DEV_ATA:
1686 if (err & ATA_ICRC)
1687 qc->err_mask |= AC_ERR_ATA_BUS;
1688 if (err & ATA_UNC)
1689 qc->err_mask |= AC_ERR_MEDIA;
1690 if (err & ATA_IDNF)
1691 qc->err_mask |= AC_ERR_INVALID;
1692 break;
1693
1694 case ATA_DEV_ATAPI:
a569a30d 1695 if (!(qc->ap->pflags & ATA_PFLAG_FROZEN)) {
3eabddb8
TH
1696 tmp = atapi_eh_request_sense(qc->dev,
1697 qc->scsicmd->sense_buffer,
1698 qc->result_tf.feature >> 4);
a569a30d
TH
1699 if (!tmp) {
1700 /* ATA_QCFLAG_SENSE_VALID is used to
1701 * tell atapi_qc_complete() that sense
1702 * data is already valid.
1703 *
1704 * TODO: interpret sense data and set
1705 * appropriate err_mask.
1706 */
1707 qc->flags |= ATA_QCFLAG_SENSE_VALID;
1708 } else
1709 qc->err_mask |= tmp;
1710 }
022bdb07
TH
1711 }
1712
1713 if (qc->err_mask & (AC_ERR_HSM | AC_ERR_TIMEOUT | AC_ERR_ATA_BUS))
cf480626 1714 action |= ATA_EH_RESET;
022bdb07
TH
1715
1716 return action;
1717}
1718
76326ac1
TH
1719static int ata_eh_categorize_error(unsigned int eflags, unsigned int err_mask,
1720 int *xfer_ok)
022bdb07 1721{
76326ac1
TH
1722 int base = 0;
1723
1724 if (!(eflags & ATA_EFLAG_DUBIOUS_XFER))
1725 *xfer_ok = 1;
1726
1727 if (!*xfer_ok)
75f9cafc 1728 base = ATA_ECAT_DUBIOUS_NONE;
76326ac1 1729
7d47e8d4 1730 if (err_mask & AC_ERR_ATA_BUS)
76326ac1 1731 return base + ATA_ECAT_ATA_BUS;
022bdb07 1732
7d47e8d4 1733 if (err_mask & AC_ERR_TIMEOUT)
76326ac1 1734 return base + ATA_ECAT_TOUT_HSM;
7d47e8d4 1735
3884f7b0 1736 if (eflags & ATA_EFLAG_IS_IO) {
7d47e8d4 1737 if (err_mask & AC_ERR_HSM)
76326ac1 1738 return base + ATA_ECAT_TOUT_HSM;
7d47e8d4
TH
1739 if ((err_mask &
1740 (AC_ERR_DEV|AC_ERR_MEDIA|AC_ERR_INVALID)) == AC_ERR_DEV)
76326ac1 1741 return base + ATA_ECAT_UNK_DEV;
022bdb07
TH
1742 }
1743
1744 return 0;
1745}
1746
7d47e8d4 1747struct speed_down_verdict_arg {
022bdb07 1748 u64 since;
76326ac1 1749 int xfer_ok;
3884f7b0 1750 int nr_errors[ATA_ECAT_NR];
022bdb07
TH
1751};
1752
7d47e8d4 1753static int speed_down_verdict_cb(struct ata_ering_entry *ent, void *void_arg)
022bdb07 1754{
7d47e8d4 1755 struct speed_down_verdict_arg *arg = void_arg;
76326ac1 1756 int cat;
022bdb07
TH
1757
1758 if (ent->timestamp < arg->since)
1759 return -1;
1760
76326ac1
TH
1761 cat = ata_eh_categorize_error(ent->eflags, ent->err_mask,
1762 &arg->xfer_ok);
7d47e8d4 1763 arg->nr_errors[cat]++;
76326ac1 1764
022bdb07
TH
1765 return 0;
1766}
1767
1768/**
7d47e8d4 1769 * ata_eh_speed_down_verdict - Determine speed down verdict
022bdb07
TH
1770 * @dev: Device of interest
1771 *
1772 * This function examines error ring of @dev and determines
7d47e8d4
TH
1773 * whether NCQ needs to be turned off, transfer speed should be
1774 * stepped down, or falling back to PIO is necessary.
022bdb07 1775 *
3884f7b0
TH
1776 * ECAT_ATA_BUS : ATA_BUS error for any command
1777 *
1778 * ECAT_TOUT_HSM : TIMEOUT for any command or HSM violation for
1779 * IO commands
1780 *
1781 * ECAT_UNK_DEV : Unknown DEV error for IO commands
1782 *
76326ac1
TH
1783 * ECAT_DUBIOUS_* : Identical to above three but occurred while
1784 * data transfer hasn't been verified.
1785 *
3884f7b0
TH
1786 * Verdicts are
1787 *
1788 * NCQ_OFF : Turn off NCQ.
022bdb07 1789 *
3884f7b0
TH
1790 * SPEED_DOWN : Speed down transfer speed but don't fall back
1791 * to PIO.
7d47e8d4 1792 *
3884f7b0 1793 * FALLBACK_TO_PIO : Fall back to PIO.
022bdb07 1794 *
3884f7b0 1795 * Even if multiple verdicts are returned, only one action is
76326ac1
TH
1796 * taken per error. An action triggered by non-DUBIOUS errors
1797 * clears ering, while one triggered by DUBIOUS_* errors doesn't.
1798 * This is to expedite speed down decisions right after device is
1799 * initially configured.
1800 *
1801 * The followings are speed down rules. #1 and #2 deal with
1802 * DUBIOUS errors.
7d47e8d4 1803 *
76326ac1
TH
1804 * 1. If more than one DUBIOUS_ATA_BUS or DUBIOUS_TOUT_HSM errors
1805 * occurred during last 5 mins, SPEED_DOWN and FALLBACK_TO_PIO.
1806 *
1807 * 2. If more than one DUBIOUS_TOUT_HSM or DUBIOUS_UNK_DEV errors
1808 * occurred during last 5 mins, NCQ_OFF.
1809 *
1810 * 3. If more than 8 ATA_BUS, TOUT_HSM or UNK_DEV errors
3884f7b0 1811 * ocurred during last 5 mins, FALLBACK_TO_PIO
7d47e8d4 1812 *
76326ac1 1813 * 4. If more than 3 TOUT_HSM or UNK_DEV errors occurred
3884f7b0
TH
1814 * during last 10 mins, NCQ_OFF.
1815 *
76326ac1 1816 * 5. If more than 3 ATA_BUS or TOUT_HSM errors, or more than 6
3884f7b0 1817 * UNK_DEV errors occurred during last 10 mins, SPEED_DOWN.
7d47e8d4 1818 *
022bdb07
TH
1819 * LOCKING:
1820 * Inherited from caller.
1821 *
1822 * RETURNS:
7d47e8d4 1823 * OR of ATA_EH_SPDN_* flags.
022bdb07 1824 */
7d47e8d4 1825static unsigned int ata_eh_speed_down_verdict(struct ata_device *dev)
022bdb07 1826{
7d47e8d4
TH
1827 const u64 j5mins = 5LLU * 60 * HZ, j10mins = 10LLU * 60 * HZ;
1828 u64 j64 = get_jiffies_64();
1829 struct speed_down_verdict_arg arg;
1830 unsigned int verdict = 0;
022bdb07 1831
3884f7b0 1832 /* scan past 5 mins of error history */
7d47e8d4 1833 memset(&arg, 0, sizeof(arg));
3884f7b0 1834 arg.since = j64 - min(j64, j5mins);
7d47e8d4 1835 ata_ering_map(&dev->ering, speed_down_verdict_cb, &arg);
022bdb07 1836
76326ac1
TH
1837 if (arg.nr_errors[ATA_ECAT_DUBIOUS_ATA_BUS] +
1838 arg.nr_errors[ATA_ECAT_DUBIOUS_TOUT_HSM] > 1)
1839 verdict |= ATA_EH_SPDN_SPEED_DOWN |
1840 ATA_EH_SPDN_FALLBACK_TO_PIO | ATA_EH_SPDN_KEEP_ERRORS;
1841
1842 if (arg.nr_errors[ATA_ECAT_DUBIOUS_TOUT_HSM] +
1843 arg.nr_errors[ATA_ECAT_DUBIOUS_UNK_DEV] > 1)
1844 verdict |= ATA_EH_SPDN_NCQ_OFF | ATA_EH_SPDN_KEEP_ERRORS;
1845
3884f7b0
TH
1846 if (arg.nr_errors[ATA_ECAT_ATA_BUS] +
1847 arg.nr_errors[ATA_ECAT_TOUT_HSM] +
663f99b8 1848 arg.nr_errors[ATA_ECAT_UNK_DEV] > 6)
3884f7b0 1849 verdict |= ATA_EH_SPDN_FALLBACK_TO_PIO;
022bdb07 1850
3884f7b0 1851 /* scan past 10 mins of error history */
022bdb07 1852 memset(&arg, 0, sizeof(arg));
3884f7b0 1853 arg.since = j64 - min(j64, j10mins);
7d47e8d4 1854 ata_ering_map(&dev->ering, speed_down_verdict_cb, &arg);
022bdb07 1855
3884f7b0
TH
1856 if (arg.nr_errors[ATA_ECAT_TOUT_HSM] +
1857 arg.nr_errors[ATA_ECAT_UNK_DEV] > 3)
1858 verdict |= ATA_EH_SPDN_NCQ_OFF;
1859
1860 if (arg.nr_errors[ATA_ECAT_ATA_BUS] +
1861 arg.nr_errors[ATA_ECAT_TOUT_HSM] > 3 ||
663f99b8 1862 arg.nr_errors[ATA_ECAT_UNK_DEV] > 6)
3884f7b0 1863 verdict |= ATA_EH_SPDN_SPEED_DOWN;
022bdb07 1864
7d47e8d4 1865 return verdict;
022bdb07
TH
1866}
1867
1868/**
1869 * ata_eh_speed_down - record error and speed down if necessary
1870 * @dev: Failed device
3884f7b0 1871 * @eflags: mask of ATA_EFLAG_* flags
022bdb07
TH
1872 * @err_mask: err_mask of the error
1873 *
1874 * Record error and examine error history to determine whether
1875 * adjusting transmission speed is necessary. It also sets
1876 * transmission limits appropriately if such adjustment is
1877 * necessary.
1878 *
1879 * LOCKING:
1880 * Kernel thread context (may sleep).
1881 *
1882 * RETURNS:
7d47e8d4 1883 * Determined recovery action.
022bdb07 1884 */
3884f7b0
TH
1885static unsigned int ata_eh_speed_down(struct ata_device *dev,
1886 unsigned int eflags, unsigned int err_mask)
022bdb07 1887{
b1c72916 1888 struct ata_link *link = ata_dev_phys_link(dev);
76326ac1 1889 int xfer_ok = 0;
7d47e8d4
TH
1890 unsigned int verdict;
1891 unsigned int action = 0;
1892
1893 /* don't bother if Cat-0 error */
76326ac1 1894 if (ata_eh_categorize_error(eflags, err_mask, &xfer_ok) == 0)
022bdb07
TH
1895 return 0;
1896
1897 /* record error and determine whether speed down is necessary */
3884f7b0 1898 ata_ering_record(&dev->ering, eflags, err_mask);
7d47e8d4 1899 verdict = ata_eh_speed_down_verdict(dev);
022bdb07 1900
7d47e8d4
TH
1901 /* turn off NCQ? */
1902 if ((verdict & ATA_EH_SPDN_NCQ_OFF) &&
1903 (dev->flags & (ATA_DFLAG_PIO | ATA_DFLAG_NCQ |
1904 ATA_DFLAG_NCQ_OFF)) == ATA_DFLAG_NCQ) {
1905 dev->flags |= ATA_DFLAG_NCQ_OFF;
1906 ata_dev_printk(dev, KERN_WARNING,
1907 "NCQ disabled due to excessive errors\n");
1908 goto done;
1909 }
022bdb07 1910
7d47e8d4
TH
1911 /* speed down? */
1912 if (verdict & ATA_EH_SPDN_SPEED_DOWN) {
1913 /* speed down SATA link speed if possible */
a07d499b 1914 if (sata_down_spd_limit(link, 0) == 0) {
cf480626 1915 action |= ATA_EH_RESET;
7d47e8d4
TH
1916 goto done;
1917 }
022bdb07 1918
7d47e8d4
TH
1919 /* lower transfer mode */
1920 if (dev->spdn_cnt < 2) {
1921 static const int dma_dnxfer_sel[] =
1922 { ATA_DNXFER_DMA, ATA_DNXFER_40C };
1923 static const int pio_dnxfer_sel[] =
1924 { ATA_DNXFER_PIO, ATA_DNXFER_FORCE_PIO0 };
1925 int sel;
1926
1927 if (dev->xfer_shift != ATA_SHIFT_PIO)
1928 sel = dma_dnxfer_sel[dev->spdn_cnt];
1929 else
1930 sel = pio_dnxfer_sel[dev->spdn_cnt];
1931
1932 dev->spdn_cnt++;
1933
1934 if (ata_down_xfermask_limit(dev, sel) == 0) {
cf480626 1935 action |= ATA_EH_RESET;
7d47e8d4
TH
1936 goto done;
1937 }
1938 }
1939 }
1940
1941 /* Fall back to PIO? Slowing down to PIO is meaningless for
663f99b8 1942 * SATA ATA devices. Consider it only for PATA and SATAPI.
7d47e8d4
TH
1943 */
1944 if ((verdict & ATA_EH_SPDN_FALLBACK_TO_PIO) && (dev->spdn_cnt >= 2) &&
663f99b8 1945 (link->ap->cbl != ATA_CBL_SATA || dev->class == ATA_DEV_ATAPI) &&
7d47e8d4
TH
1946 (dev->xfer_shift != ATA_SHIFT_PIO)) {
1947 if (ata_down_xfermask_limit(dev, ATA_DNXFER_FORCE_PIO) == 0) {
1948 dev->spdn_cnt = 0;
cf480626 1949 action |= ATA_EH_RESET;
7d47e8d4
TH
1950 goto done;
1951 }
1952 }
022bdb07 1953
022bdb07 1954 return 0;
7d47e8d4
TH
1955 done:
1956 /* device has been slowed down, blow error history */
76326ac1
TH
1957 if (!(verdict & ATA_EH_SPDN_KEEP_ERRORS))
1958 ata_ering_clear(&dev->ering);
7d47e8d4 1959 return action;
022bdb07
TH
1960}
1961
1962/**
9b1e2658
TH
1963 * ata_eh_link_autopsy - analyze error and determine recovery action
1964 * @link: host link to perform autopsy on
022bdb07 1965 *
0260731f
TH
1966 * Analyze why @link failed and determine which recovery actions
1967 * are needed. This function also sets more detailed AC_ERR_*
1968 * values and fills sense data for ATAPI CHECK SENSE.
022bdb07
TH
1969 *
1970 * LOCKING:
1971 * Kernel thread context (may sleep).
1972 */
9b1e2658 1973static void ata_eh_link_autopsy(struct ata_link *link)
022bdb07 1974{
0260731f 1975 struct ata_port *ap = link->ap;
936fd732 1976 struct ata_eh_context *ehc = &link->eh_context;
dfcc173d 1977 struct ata_device *dev;
3884f7b0
TH
1978 unsigned int all_err_mask = 0, eflags = 0;
1979 int tag;
022bdb07
TH
1980 u32 serror;
1981 int rc;
1982
1983 DPRINTK("ENTER\n");
1984
1cdaf534
TH
1985 if (ehc->i.flags & ATA_EHI_NO_AUTOPSY)
1986 return;
1987
022bdb07 1988 /* obtain and analyze SError */
936fd732 1989 rc = sata_scr_read(link, SCR_ERROR, &serror);
022bdb07
TH
1990 if (rc == 0) {
1991 ehc->i.serror |= serror;
0260731f 1992 ata_eh_analyze_serror(link);
4e57c517 1993 } else if (rc != -EOPNOTSUPP) {
cf480626 1994 /* SError read failed, force reset and probing */
b558eddd 1995 ehc->i.probe_mask |= ATA_ALL_DEVICES;
cf480626 1996 ehc->i.action |= ATA_EH_RESET;
4e57c517
TH
1997 ehc->i.err_mask |= AC_ERR_OTHER;
1998 }
022bdb07 1999
e8ee8451 2000 /* analyze NCQ failure */
0260731f 2001 ata_eh_analyze_ncq_error(link);
e8ee8451 2002
022bdb07
TH
2003 /* any real error trumps AC_ERR_OTHER */
2004 if (ehc->i.err_mask & ~AC_ERR_OTHER)
2005 ehc->i.err_mask &= ~AC_ERR_OTHER;
2006
2007 all_err_mask |= ehc->i.err_mask;
2008
2009 for (tag = 0; tag < ATA_MAX_QUEUE; tag++) {
2010 struct ata_queued_cmd *qc = __ata_qc_from_tag(ap, tag);
2011
b1c72916
TH
2012 if (!(qc->flags & ATA_QCFLAG_FAILED) ||
2013 ata_dev_phys_link(qc->dev) != link)
022bdb07
TH
2014 continue;
2015
2016 /* inherit upper level err_mask */
2017 qc->err_mask |= ehc->i.err_mask;
2018
022bdb07 2019 /* analyze TF */
4528e4da 2020 ehc->i.action |= ata_eh_analyze_tf(qc, &qc->result_tf);
022bdb07
TH
2021
2022 /* DEV errors are probably spurious in case of ATA_BUS error */
2023 if (qc->err_mask & AC_ERR_ATA_BUS)
2024 qc->err_mask &= ~(AC_ERR_DEV | AC_ERR_MEDIA |
2025 AC_ERR_INVALID);
2026
2027 /* any real error trumps unknown error */
2028 if (qc->err_mask & ~AC_ERR_OTHER)
2029 qc->err_mask &= ~AC_ERR_OTHER;
2030
2031 /* SENSE_VALID trumps dev/unknown error and revalidation */
f90f0828 2032 if (qc->flags & ATA_QCFLAG_SENSE_VALID)
022bdb07 2033 qc->err_mask &= ~(AC_ERR_DEV | AC_ERR_OTHER);
022bdb07 2034
03faab78 2035 /* determine whether the command is worth retrying */
534ead70
TH
2036 if (qc->flags & ATA_QCFLAG_IO ||
2037 (!(qc->err_mask & AC_ERR_INVALID) &&
2038 qc->err_mask != AC_ERR_DEV))
03faab78
TH
2039 qc->flags |= ATA_QCFLAG_RETRY;
2040
022bdb07 2041 /* accumulate error info */
4528e4da 2042 ehc->i.dev = qc->dev;
022bdb07
TH
2043 all_err_mask |= qc->err_mask;
2044 if (qc->flags & ATA_QCFLAG_IO)
3884f7b0 2045 eflags |= ATA_EFLAG_IS_IO;
022bdb07
TH
2046 }
2047
a20f33ff 2048 /* enforce default EH actions */
b51e9e5d 2049 if (ap->pflags & ATA_PFLAG_FROZEN ||
a20f33ff 2050 all_err_mask & (AC_ERR_HSM | AC_ERR_TIMEOUT))
cf480626 2051 ehc->i.action |= ATA_EH_RESET;
3884f7b0
TH
2052 else if (((eflags & ATA_EFLAG_IS_IO) && all_err_mask) ||
2053 (!(eflags & ATA_EFLAG_IS_IO) && (all_err_mask & ~AC_ERR_DEV)))
4528e4da 2054 ehc->i.action |= ATA_EH_REVALIDATE;
022bdb07 2055
dfcc173d
TH
2056 /* If we have offending qcs and the associated failed device,
2057 * perform per-dev EH action only on the offending device.
2058 */
4528e4da 2059 if (ehc->i.dev) {
4528e4da
TH
2060 ehc->i.dev_action[ehc->i.dev->devno] |=
2061 ehc->i.action & ATA_EH_PERDEV_MASK;
2062 ehc->i.action &= ~ATA_EH_PERDEV_MASK;
47005f25
TH
2063 }
2064
2695e366
TH
2065 /* propagate timeout to host link */
2066 if ((all_err_mask & AC_ERR_TIMEOUT) && !ata_is_host_link(link))
2067 ap->link.eh_context.i.err_mask |= AC_ERR_TIMEOUT;
2068
2069 /* record error and consider speeding down */
dfcc173d 2070 dev = ehc->i.dev;
2695e366
TH
2071 if (!dev && ((ata_link_max_devices(link) == 1 &&
2072 ata_dev_enabled(link->device))))
2073 dev = link->device;
dfcc173d 2074
76326ac1
TH
2075 if (dev) {
2076 if (dev->flags & ATA_DFLAG_DUBIOUS_XFER)
2077 eflags |= ATA_EFLAG_DUBIOUS_XFER;
3884f7b0 2078 ehc->i.action |= ata_eh_speed_down(dev, eflags, all_err_mask);
76326ac1 2079 }
dfcc173d 2080
022bdb07
TH
2081 DPRINTK("EXIT\n");
2082}
2083
2084/**
9b1e2658
TH
2085 * ata_eh_autopsy - analyze error and determine recovery action
2086 * @ap: host port to perform autopsy on
2087 *
2088 * Analyze all links of @ap and determine why they failed and
2089 * which recovery actions are needed.
2090 *
2091 * LOCKING:
2092 * Kernel thread context (may sleep).
2093 */
fb7fd614 2094void ata_eh_autopsy(struct ata_port *ap)
9b1e2658
TH
2095{
2096 struct ata_link *link;
2097
1eca4365 2098 ata_for_each_link(link, ap, EDGE)
9b1e2658 2099 ata_eh_link_autopsy(link);
2695e366 2100
b1c72916
TH
2101 /* Handle the frigging slave link. Autopsy is done similarly
2102 * but actions and flags are transferred over to the master
2103 * link and handled from there.
2104 */
2105 if (ap->slave_link) {
2106 struct ata_eh_context *mehc = &ap->link.eh_context;
2107 struct ata_eh_context *sehc = &ap->slave_link->eh_context;
2108
848e4c68
TH
2109 /* transfer control flags from master to slave */
2110 sehc->i.flags |= mehc->i.flags & ATA_EHI_TO_SLAVE_MASK;
2111
2112 /* perform autopsy on the slave link */
b1c72916
TH
2113 ata_eh_link_autopsy(ap->slave_link);
2114
848e4c68 2115 /* transfer actions from slave to master and clear slave */
b1c72916
TH
2116 ata_eh_about_to_do(ap->slave_link, NULL, ATA_EH_ALL_ACTIONS);
2117 mehc->i.action |= sehc->i.action;
2118 mehc->i.dev_action[1] |= sehc->i.dev_action[1];
2119 mehc->i.flags |= sehc->i.flags;
2120 ata_eh_done(ap->slave_link, NULL, ATA_EH_ALL_ACTIONS);
2121 }
2122
2695e366
TH
2123 /* Autopsy of fanout ports can affect host link autopsy.
2124 * Perform host link autopsy last.
2125 */
071f44b1 2126 if (sata_pmp_attached(ap))
2695e366 2127 ata_eh_link_autopsy(&ap->link);
9b1e2658
TH
2128}
2129
6521148c
RH
2130/**
2131 * ata_get_cmd_descript - get description for ATA command
2132 * @command: ATA command code to get description for
2133 *
2134 * Return a textual description of the given command, or NULL if the
2135 * command is not known.
2136 *
2137 * LOCKING:
2138 * None
2139 */
2140const char *ata_get_cmd_descript(u8 command)
2141{
2142#ifdef CONFIG_ATA_VERBOSE_ERROR
2143 static const struct
2144 {
2145 u8 command;
2146 const char *text;
2147 } cmd_descr[] = {
2148 { ATA_CMD_DEV_RESET, "DEVICE RESET" },
2149 { ATA_CMD_CHK_POWER, "CHECK POWER MODE" },
2150 { ATA_CMD_STANDBY, "STANDBY" },
2151 { ATA_CMD_IDLE, "IDLE" },
2152 { ATA_CMD_EDD, "EXECUTE DEVICE DIAGNOSTIC" },
2153 { ATA_CMD_DOWNLOAD_MICRO, "DOWNLOAD MICROCODE" },
2154 { ATA_CMD_NOP, "NOP" },
2155 { ATA_CMD_FLUSH, "FLUSH CACHE" },
2156 { ATA_CMD_FLUSH_EXT, "FLUSH CACHE EXT" },
2157 { ATA_CMD_ID_ATA, "IDENTIFY DEVICE" },
2158 { ATA_CMD_ID_ATAPI, "IDENTIFY PACKET DEVICE" },
2159 { ATA_CMD_SERVICE, "SERVICE" },
2160 { ATA_CMD_READ, "READ DMA" },
2161 { ATA_CMD_READ_EXT, "READ DMA EXT" },
2162 { ATA_CMD_READ_QUEUED, "READ DMA QUEUED" },
2163 { ATA_CMD_READ_STREAM_EXT, "READ STREAM EXT" },
2164 { ATA_CMD_READ_STREAM_DMA_EXT, "READ STREAM DMA EXT" },
2165 { ATA_CMD_WRITE, "WRITE DMA" },
2166 { ATA_CMD_WRITE_EXT, "WRITE DMA EXT" },
2167 { ATA_CMD_WRITE_QUEUED, "WRITE DMA QUEUED EXT" },
2168 { ATA_CMD_WRITE_STREAM_EXT, "WRITE STREAM EXT" },
2169 { ATA_CMD_WRITE_STREAM_DMA_EXT, "WRITE STREAM DMA EXT" },
2170 { ATA_CMD_WRITE_FUA_EXT, "WRITE DMA FUA EXT" },
2171 { ATA_CMD_WRITE_QUEUED_FUA_EXT, "WRITE DMA QUEUED FUA EXT" },
2172 { ATA_CMD_FPDMA_READ, "READ FPDMA QUEUED" },
2173 { ATA_CMD_FPDMA_WRITE, "WRITE FPDMA QUEUED" },
2174 { ATA_CMD_PIO_READ, "READ SECTOR(S)" },
2175 { ATA_CMD_PIO_READ_EXT, "READ SECTOR(S) EXT" },
2176 { ATA_CMD_PIO_WRITE, "WRITE SECTOR(S)" },
2177 { ATA_CMD_PIO_WRITE_EXT, "WRITE SECTOR(S) EXT" },
2178 { ATA_CMD_READ_MULTI, "READ MULTIPLE" },
2179 { ATA_CMD_READ_MULTI_EXT, "READ MULTIPLE EXT" },
2180 { ATA_CMD_WRITE_MULTI, "WRITE MULTIPLE" },
2181 { ATA_CMD_WRITE_MULTI_EXT, "WRITE MULTIPLE EXT" },
2182 { ATA_CMD_WRITE_MULTI_FUA_EXT, "WRITE MULTIPLE FUA EXT" },
2183 { ATA_CMD_SET_FEATURES, "SET FEATURES" },
2184 { ATA_CMD_SET_MULTI, "SET MULTIPLE MODE" },
2185 { ATA_CMD_VERIFY, "READ VERIFY SECTOR(S)" },
2186 { ATA_CMD_VERIFY_EXT, "READ VERIFY SECTOR(S) EXT" },
2187 { ATA_CMD_WRITE_UNCORR_EXT, "WRITE UNCORRECTABLE EXT" },
2188 { ATA_CMD_STANDBYNOW1, "STANDBY IMMEDIATE" },
2189 { ATA_CMD_IDLEIMMEDIATE, "IDLE IMMEDIATE" },
2190 { ATA_CMD_SLEEP, "SLEEP" },
2191 { ATA_CMD_INIT_DEV_PARAMS, "INITIALIZE DEVICE PARAMETERS" },
2192 { ATA_CMD_READ_NATIVE_MAX, "READ NATIVE MAX ADDRESS" },
2193 { ATA_CMD_READ_NATIVE_MAX_EXT, "READ NATIVE MAX ADDRESS EXT" },
2194 { ATA_CMD_SET_MAX, "SET MAX ADDRESS" },
2195 { ATA_CMD_SET_MAX_EXT, "SET MAX ADDRESS EXT" },
2196 { ATA_CMD_READ_LOG_EXT, "READ LOG EXT" },
2197 { ATA_CMD_WRITE_LOG_EXT, "WRITE LOG EXT" },
2198 { ATA_CMD_READ_LOG_DMA_EXT, "READ LOG DMA EXT" },
2199 { ATA_CMD_WRITE_LOG_DMA_EXT, "WRITE LOG DMA EXT" },
2200 { ATA_CMD_TRUSTED_RCV, "TRUSTED RECEIVE" },
2201 { ATA_CMD_TRUSTED_RCV_DMA, "TRUSTED RECEIVE DMA" },
2202 { ATA_CMD_TRUSTED_SND, "TRUSTED SEND" },
2203 { ATA_CMD_TRUSTED_SND_DMA, "TRUSTED SEND DMA" },
2204 { ATA_CMD_PMP_READ, "READ BUFFER" },
2205 { ATA_CMD_PMP_WRITE, "WRITE BUFFER" },
2206 { ATA_CMD_CONF_OVERLAY, "DEVICE CONFIGURATION OVERLAY" },
2207 { ATA_CMD_SEC_SET_PASS, "SECURITY SET PASSWORD" },
2208 { ATA_CMD_SEC_UNLOCK, "SECURITY UNLOCK" },
2209 { ATA_CMD_SEC_ERASE_PREP, "SECURITY ERASE PREPARE" },
2210 { ATA_CMD_SEC_ERASE_UNIT, "SECURITY ERASE UNIT" },
2211 { ATA_CMD_SEC_FREEZE_LOCK, "SECURITY FREEZE LOCK" },
2212 { ATA_CMD_SEC_DISABLE_PASS, "SECURITY DISABLE PASSWORD" },
2213 { ATA_CMD_CONFIG_STREAM, "CONFIGURE STREAM" },
2214 { ATA_CMD_SMART, "SMART" },
2215 { ATA_CMD_MEDIA_LOCK, "DOOR LOCK" },
2216 { ATA_CMD_MEDIA_UNLOCK, "DOOR UNLOCK" },
acad7627 2217 { ATA_CMD_DSM, "DATA SET MANAGEMENT" },
6521148c
RH
2218 { ATA_CMD_CHK_MED_CRD_TYP, "CHECK MEDIA CARD TYPE" },
2219 { ATA_CMD_CFA_REQ_EXT_ERR, "CFA REQUEST EXTENDED ERROR" },
2220 { ATA_CMD_CFA_WRITE_NE, "CFA WRITE SECTORS WITHOUT ERASE" },
2221 { ATA_CMD_CFA_TRANS_SECT, "CFA TRANSLATE SECTOR" },
2222 { ATA_CMD_CFA_ERASE, "CFA ERASE SECTORS" },
2223 { ATA_CMD_CFA_WRITE_MULT_NE, "CFA WRITE MULTIPLE WITHOUT ERASE" },
2224 { ATA_CMD_READ_LONG, "READ LONG (with retries)" },
2225 { ATA_CMD_READ_LONG_ONCE, "READ LONG (without retries)" },
2226 { ATA_CMD_WRITE_LONG, "WRITE LONG (with retries)" },
2227 { ATA_CMD_WRITE_LONG_ONCE, "WRITE LONG (without retries)" },
2228 { ATA_CMD_RESTORE, "RECALIBRATE" },
2229 { 0, NULL } /* terminate list */
2230 };
2231
2232 unsigned int i;
2233 for (i = 0; cmd_descr[i].text; i++)
2234 if (cmd_descr[i].command == command)
2235 return cmd_descr[i].text;
2236#endif
2237
2238 return NULL;
2239}
2240
9b1e2658
TH
2241/**
2242 * ata_eh_link_report - report error handling to user
0260731f 2243 * @link: ATA link EH is going on
022bdb07
TH
2244 *
2245 * Report EH to user.
2246 *
2247 * LOCKING:
2248 * None.
2249 */
9b1e2658 2250static void ata_eh_link_report(struct ata_link *link)
022bdb07 2251{
0260731f
TH
2252 struct ata_port *ap = link->ap;
2253 struct ata_eh_context *ehc = &link->eh_context;
022bdb07 2254 const char *frozen, *desc;
a1e10f7e 2255 char tries_buf[6];
022bdb07
TH
2256 int tag, nr_failed = 0;
2257
94ff3d54
TH
2258 if (ehc->i.flags & ATA_EHI_QUIET)
2259 return;
2260
022bdb07
TH
2261 desc = NULL;
2262 if (ehc->i.desc[0] != '\0')
2263 desc = ehc->i.desc;
2264
2265 for (tag = 0; tag < ATA_MAX_QUEUE; tag++) {
2266 struct ata_queued_cmd *qc = __ata_qc_from_tag(ap, tag);
2267
b1c72916
TH
2268 if (!(qc->flags & ATA_QCFLAG_FAILED) ||
2269 ata_dev_phys_link(qc->dev) != link ||
e027bd36
TH
2270 ((qc->flags & ATA_QCFLAG_QUIET) &&
2271 qc->err_mask == AC_ERR_DEV))
022bdb07
TH
2272 continue;
2273 if (qc->flags & ATA_QCFLAG_SENSE_VALID && !qc->err_mask)
2274 continue;
2275
2276 nr_failed++;
2277 }
2278
2279 if (!nr_failed && !ehc->i.err_mask)
2280 return;
2281
2282 frozen = "";
b51e9e5d 2283 if (ap->pflags & ATA_PFLAG_FROZEN)
022bdb07
TH
2284 frozen = " frozen";
2285
a1e10f7e
TH
2286 memset(tries_buf, 0, sizeof(tries_buf));
2287 if (ap->eh_tries < ATA_EH_MAX_TRIES)
2288 snprintf(tries_buf, sizeof(tries_buf) - 1, " t%d",
2289 ap->eh_tries);
2290
022bdb07 2291 if (ehc->i.dev) {
e8ee8451 2292 ata_dev_printk(ehc->i.dev, KERN_ERR, "exception Emask 0x%x "
a1e10f7e
TH
2293 "SAct 0x%x SErr 0x%x action 0x%x%s%s\n",
2294 ehc->i.err_mask, link->sactive, ehc->i.serror,
2295 ehc->i.action, frozen, tries_buf);
022bdb07 2296 if (desc)
b64bbc39 2297 ata_dev_printk(ehc->i.dev, KERN_ERR, "%s\n", desc);
022bdb07 2298 } else {
0260731f 2299 ata_link_printk(link, KERN_ERR, "exception Emask 0x%x "
a1e10f7e
TH
2300 "SAct 0x%x SErr 0x%x action 0x%x%s%s\n",
2301 ehc->i.err_mask, link->sactive, ehc->i.serror,
2302 ehc->i.action, frozen, tries_buf);
022bdb07 2303 if (desc)
0260731f 2304 ata_link_printk(link, KERN_ERR, "%s\n", desc);
022bdb07
TH
2305 }
2306
6521148c 2307#ifdef CONFIG_ATA_VERBOSE_ERROR
1333e194 2308 if (ehc->i.serror)
da0e21d3 2309 ata_link_printk(link, KERN_ERR,
1333e194
RH
2310 "SError: { %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s}\n",
2311 ehc->i.serror & SERR_DATA_RECOVERED ? "RecovData " : "",
2312 ehc->i.serror & SERR_COMM_RECOVERED ? "RecovComm " : "",
2313 ehc->i.serror & SERR_DATA ? "UnrecovData " : "",
2314 ehc->i.serror & SERR_PERSISTENT ? "Persist " : "",
2315 ehc->i.serror & SERR_PROTOCOL ? "Proto " : "",
2316 ehc->i.serror & SERR_INTERNAL ? "HostInt " : "",
2317 ehc->i.serror & SERR_PHYRDY_CHG ? "PHYRdyChg " : "",
2318 ehc->i.serror & SERR_PHY_INT_ERR ? "PHYInt " : "",
2319 ehc->i.serror & SERR_COMM_WAKE ? "CommWake " : "",
2320 ehc->i.serror & SERR_10B_8B_ERR ? "10B8B " : "",
2321 ehc->i.serror & SERR_DISPARITY ? "Dispar " : "",
2322 ehc->i.serror & SERR_CRC ? "BadCRC " : "",
2323 ehc->i.serror & SERR_HANDSHAKE ? "Handshk " : "",
2324 ehc->i.serror & SERR_LINK_SEQ_ERR ? "LinkSeq " : "",
2325 ehc->i.serror & SERR_TRANS_ST_ERROR ? "TrStaTrns " : "",
2326 ehc->i.serror & SERR_UNRECOG_FIS ? "UnrecFIS " : "",
2dcb407e 2327 ehc->i.serror & SERR_DEV_XCHG ? "DevExch " : "");
6521148c 2328#endif
1333e194 2329
022bdb07
TH
2330 for (tag = 0; tag < ATA_MAX_QUEUE; tag++) {
2331 struct ata_queued_cmd *qc = __ata_qc_from_tag(ap, tag);
8a937581 2332 struct ata_taskfile *cmd = &qc->tf, *res = &qc->result_tf;
abb6a889
TH
2333 const u8 *cdb = qc->cdb;
2334 char data_buf[20] = "";
2335 char cdb_buf[70] = "";
022bdb07 2336
0260731f 2337 if (!(qc->flags & ATA_QCFLAG_FAILED) ||
b1c72916 2338 ata_dev_phys_link(qc->dev) != link || !qc->err_mask)
022bdb07
TH
2339 continue;
2340
abb6a889
TH
2341 if (qc->dma_dir != DMA_NONE) {
2342 static const char *dma_str[] = {
2343 [DMA_BIDIRECTIONAL] = "bidi",
2344 [DMA_TO_DEVICE] = "out",
2345 [DMA_FROM_DEVICE] = "in",
2346 };
2347 static const char *prot_str[] = {
2348 [ATA_PROT_PIO] = "pio",
2349 [ATA_PROT_DMA] = "dma",
2350 [ATA_PROT_NCQ] = "ncq",
0dc36888
TH
2351 [ATAPI_PROT_PIO] = "pio",
2352 [ATAPI_PROT_DMA] = "dma",
abb6a889
TH
2353 };
2354
2355 snprintf(data_buf, sizeof(data_buf), " %s %u %s",
2356 prot_str[qc->tf.protocol], qc->nbytes,
2357 dma_str[qc->dma_dir]);
2358 }
2359
6521148c
RH
2360 if (ata_is_atapi(qc->tf.protocol)) {
2361 if (qc->scsicmd)
2362 scsi_print_command(qc->scsicmd);
2363 else
2364 snprintf(cdb_buf, sizeof(cdb_buf),
abb6a889
TH
2365 "cdb %02x %02x %02x %02x %02x %02x %02x %02x "
2366 "%02x %02x %02x %02x %02x %02x %02x %02x\n ",
2367 cdb[0], cdb[1], cdb[2], cdb[3],
2368 cdb[4], cdb[5], cdb[6], cdb[7],
2369 cdb[8], cdb[9], cdb[10], cdb[11],
2370 cdb[12], cdb[13], cdb[14], cdb[15]);
6521148c
RH
2371 } else {
2372 const char *descr = ata_get_cmd_descript(cmd->command);
2373 if (descr)
2374 ata_dev_printk(qc->dev, KERN_ERR,
2375 "failed command: %s\n", descr);
2376 }
abb6a889 2377
8a937581
TH
2378 ata_dev_printk(qc->dev, KERN_ERR,
2379 "cmd %02x/%02x:%02x:%02x:%02x:%02x/%02x:%02x:%02x:%02x:%02x/%02x "
abb6a889 2380 "tag %d%s\n %s"
8a937581 2381 "res %02x/%02x:%02x:%02x:%02x:%02x/%02x:%02x:%02x:%02x:%02x/%02x "
5335b729 2382 "Emask 0x%x (%s)%s\n",
8a937581
TH
2383 cmd->command, cmd->feature, cmd->nsect,
2384 cmd->lbal, cmd->lbam, cmd->lbah,
2385 cmd->hob_feature, cmd->hob_nsect,
2386 cmd->hob_lbal, cmd->hob_lbam, cmd->hob_lbah,
abb6a889 2387 cmd->device, qc->tag, data_buf, cdb_buf,
8a937581
TH
2388 res->command, res->feature, res->nsect,
2389 res->lbal, res->lbam, res->lbah,
2390 res->hob_feature, res->hob_nsect,
2391 res->hob_lbal, res->hob_lbam, res->hob_lbah,
5335b729
TH
2392 res->device, qc->err_mask, ata_err_string(qc->err_mask),
2393 qc->err_mask & AC_ERR_NCQ ? " <F>" : "");
1333e194 2394
6521148c 2395#ifdef CONFIG_ATA_VERBOSE_ERROR
1333e194 2396 if (res->command & (ATA_BUSY | ATA_DRDY | ATA_DF | ATA_DRQ |
2dcb407e 2397 ATA_ERR)) {
1333e194
RH
2398 if (res->command & ATA_BUSY)
2399 ata_dev_printk(qc->dev, KERN_ERR,
2dcb407e 2400 "status: { Busy }\n");
1333e194
RH
2401 else
2402 ata_dev_printk(qc->dev, KERN_ERR,
2403 "status: { %s%s%s%s}\n",
2404 res->command & ATA_DRDY ? "DRDY " : "",
2405 res->command & ATA_DF ? "DF " : "",
2406 res->command & ATA_DRQ ? "DRQ " : "",
2dcb407e 2407 res->command & ATA_ERR ? "ERR " : "");
1333e194
RH
2408 }
2409
2410 if (cmd->command != ATA_CMD_PACKET &&
2411 (res->feature & (ATA_ICRC | ATA_UNC | ATA_IDNF |
2412 ATA_ABORTED)))
2413 ata_dev_printk(qc->dev, KERN_ERR,
2414 "error: { %s%s%s%s}\n",
2415 res->feature & ATA_ICRC ? "ICRC " : "",
2416 res->feature & ATA_UNC ? "UNC " : "",
2417 res->feature & ATA_IDNF ? "IDNF " : "",
2dcb407e 2418 res->feature & ATA_ABORTED ? "ABRT " : "");
6521148c 2419#endif
022bdb07
TH
2420 }
2421}
2422
9b1e2658
TH
2423/**
2424 * ata_eh_report - report error handling to user
2425 * @ap: ATA port to report EH about
2426 *
2427 * Report EH to user.
2428 *
2429 * LOCKING:
2430 * None.
2431 */
fb7fd614 2432void ata_eh_report(struct ata_port *ap)
9b1e2658
TH
2433{
2434 struct ata_link *link;
2435
1eca4365 2436 ata_for_each_link(link, ap, HOST_FIRST)
9b1e2658
TH
2437 ata_eh_link_report(link);
2438}
2439
cc0680a5 2440static int ata_do_reset(struct ata_link *link, ata_reset_fn_t reset,
b1c72916
TH
2441 unsigned int *classes, unsigned long deadline,
2442 bool clear_classes)
d87fa38e 2443{
f58229f8 2444 struct ata_device *dev;
d87fa38e 2445
b1c72916 2446 if (clear_classes)
1eca4365 2447 ata_for_each_dev(dev, link, ALL)
b1c72916 2448 classes[dev->devno] = ATA_DEV_UNKNOWN;
d87fa38e 2449
f046519f 2450 return reset(link, classes, deadline);
d87fa38e
TH
2451}
2452
ae791c05 2453static int ata_eh_followup_srst_needed(struct ata_link *link,
5dbfc9cb 2454 int rc, const unsigned int *classes)
664faf09 2455{
45db2f6c 2456 if ((link->flags & ATA_LFLAG_NO_SRST) || ata_link_offline(link))
ae791c05 2457 return 0;
5dbfc9cb
TH
2458 if (rc == -EAGAIN)
2459 return 1;
071f44b1 2460 if (sata_pmp_supported(link->ap) && ata_is_host_link(link))
3495de73 2461 return 1;
664faf09
TH
2462 return 0;
2463}
2464
fb7fd614
TH
2465int ata_eh_reset(struct ata_link *link, int classify,
2466 ata_prereset_fn_t prereset, ata_reset_fn_t softreset,
2467 ata_reset_fn_t hardreset, ata_postreset_fn_t postreset)
022bdb07 2468{
afaa5c37 2469 struct ata_port *ap = link->ap;
b1c72916 2470 struct ata_link *slave = ap->slave_link;
936fd732 2471 struct ata_eh_context *ehc = &link->eh_context;
705d2014 2472 struct ata_eh_context *sehc = slave ? &slave->eh_context : NULL;
664faf09 2473 unsigned int *classes = ehc->classes;
416dc9ed 2474 unsigned int lflags = link->flags;
1cdaf534 2475 int verbose = !(ehc->i.flags & ATA_EHI_QUIET);
d8af0eb6 2476 int max_tries = 0, try = 0;
b1c72916 2477 struct ata_link *failed_link;
f58229f8 2478 struct ata_device *dev;
416dc9ed 2479 unsigned long deadline, now;
022bdb07 2480 ata_reset_fn_t reset;
afaa5c37 2481 unsigned long flags;
416dc9ed 2482 u32 sstatus;
b1c72916 2483 int nr_unknown, rc;
022bdb07 2484
932648b0
TH
2485 /*
2486 * Prepare to reset
2487 */
d8af0eb6
TH
2488 while (ata_eh_reset_timeouts[max_tries] != ULONG_MAX)
2489 max_tries++;
05944bdf
TH
2490 if (link->flags & ATA_LFLAG_NO_HRST)
2491 hardreset = NULL;
2492 if (link->flags & ATA_LFLAG_NO_SRST)
2493 softreset = NULL;
d8af0eb6 2494
19b72321
TH
2495 /* make sure each reset attemp is at least COOL_DOWN apart */
2496 if (ehc->i.flags & ATA_EHI_DID_RESET) {
2497 now = jiffies;
2498 WARN_ON(time_after(ehc->last_reset, now));
2499 deadline = ata_deadline(ehc->last_reset,
2500 ATA_EH_RESET_COOL_DOWN);
2501 if (time_before(now, deadline))
2502 schedule_timeout_uninterruptible(deadline - now);
2503 }
0a2c0f56 2504
afaa5c37
TH
2505 spin_lock_irqsave(ap->lock, flags);
2506 ap->pflags |= ATA_PFLAG_RESETTING;
2507 spin_unlock_irqrestore(ap->lock, flags);
2508
cf480626 2509 ata_eh_about_to_do(link, NULL, ATA_EH_RESET);
13abf50d 2510
1eca4365 2511 ata_for_each_dev(dev, link, ALL) {
cdeab114
TH
2512 /* If we issue an SRST then an ATA drive (not ATAPI)
2513 * may change configuration and be in PIO0 timing. If
2514 * we do a hard reset (or are coming from power on)
2515 * this is true for ATA or ATAPI. Until we've set a
2516 * suitable controller mode we should not touch the
2517 * bus as we may be talking too fast.
2518 */
2519 dev->pio_mode = XFER_PIO_0;
2520
2521 /* If the controller has a pio mode setup function
2522 * then use it to set the chipset to rights. Don't
2523 * touch the DMA setup as that will be dealt with when
2524 * configuring devices.
2525 */
2526 if (ap->ops->set_piomode)
2527 ap->ops->set_piomode(ap, dev);
2528 }
2529
cf480626 2530 /* prefer hardreset */
932648b0 2531 reset = NULL;
cf480626
TH
2532 ehc->i.action &= ~ATA_EH_RESET;
2533 if (hardreset) {
2534 reset = hardreset;
a674050e 2535 ehc->i.action |= ATA_EH_HARDRESET;
4f7faa3f 2536 } else if (softreset) {
cf480626 2537 reset = softreset;
a674050e 2538 ehc->i.action |= ATA_EH_SOFTRESET;
cf480626 2539 }
f5914a46
TH
2540
2541 if (prereset) {
b1c72916
TH
2542 unsigned long deadline = ata_deadline(jiffies,
2543 ATA_EH_PRERESET_TIMEOUT);
2544
2545 if (slave) {
2546 sehc->i.action &= ~ATA_EH_RESET;
2547 sehc->i.action |= ehc->i.action;
2548 }
2549
2550 rc = prereset(link, deadline);
2551
2552 /* If present, do prereset on slave link too. Reset
2553 * is skipped iff both master and slave links report
2554 * -ENOENT or clear ATA_EH_RESET.
2555 */
2556 if (slave && (rc == 0 || rc == -ENOENT)) {
2557 int tmp;
2558
2559 tmp = prereset(slave, deadline);
2560 if (tmp != -ENOENT)
2561 rc = tmp;
2562
2563 ehc->i.action |= sehc->i.action;
2564 }
2565
f5914a46 2566 if (rc) {
c961922b 2567 if (rc == -ENOENT) {
cc0680a5 2568 ata_link_printk(link, KERN_DEBUG,
4aa9ab67 2569 "port disabled. ignoring.\n");
cf480626 2570 ehc->i.action &= ~ATA_EH_RESET;
4aa9ab67 2571
1eca4365 2572 ata_for_each_dev(dev, link, ALL)
f58229f8 2573 classes[dev->devno] = ATA_DEV_NONE;
4aa9ab67
TH
2574
2575 rc = 0;
c961922b 2576 } else
cc0680a5 2577 ata_link_printk(link, KERN_ERR,
f5914a46 2578 "prereset failed (errno=%d)\n", rc);
fccb6ea5 2579 goto out;
f5914a46 2580 }
f5914a46 2581
932648b0 2582 /* prereset() might have cleared ATA_EH_RESET. If so,
d6515e6f 2583 * bang classes, thaw and return.
932648b0
TH
2584 */
2585 if (reset && !(ehc->i.action & ATA_EH_RESET)) {
1eca4365 2586 ata_for_each_dev(dev, link, ALL)
932648b0 2587 classes[dev->devno] = ATA_DEV_NONE;
d6515e6f
TH
2588 if ((ap->pflags & ATA_PFLAG_FROZEN) &&
2589 ata_is_host_link(link))
2590 ata_eh_thaw_port(ap);
932648b0
TH
2591 rc = 0;
2592 goto out;
2593 }
f5914a46
TH
2594 }
2595
022bdb07 2596 retry:
932648b0
TH
2597 /*
2598 * Perform reset
2599 */
dc98c32c
TH
2600 if (ata_is_host_link(link))
2601 ata_eh_freeze_port(ap);
2602
341c2c95 2603 deadline = ata_deadline(jiffies, ata_eh_reset_timeouts[try++]);
31daabda 2604
932648b0
TH
2605 if (reset) {
2606 if (verbose)
2607 ata_link_printk(link, KERN_INFO, "%s resetting link\n",
2608 reset == softreset ? "soft" : "hard");
2609
2610 /* mark that this EH session started with reset */
19b72321 2611 ehc->last_reset = jiffies;
932648b0
TH
2612 if (reset == hardreset)
2613 ehc->i.flags |= ATA_EHI_DID_HARDRESET;
2614 else
2615 ehc->i.flags |= ATA_EHI_DID_SOFTRESET;
022bdb07 2616
b1c72916
TH
2617 rc = ata_do_reset(link, reset, classes, deadline, true);
2618 if (rc && rc != -EAGAIN) {
2619 failed_link = link;
5dbfc9cb 2620 goto fail;
b1c72916
TH
2621 }
2622
2623 /* hardreset slave link if existent */
2624 if (slave && reset == hardreset) {
2625 int tmp;
2626
2627 if (verbose)
2628 ata_link_printk(slave, KERN_INFO,
2629 "hard resetting link\n");
2630
2631 ata_eh_about_to_do(slave, NULL, ATA_EH_RESET);
2632 tmp = ata_do_reset(slave, reset, classes, deadline,
2633 false);
2634 switch (tmp) {
2635 case -EAGAIN:
2636 rc = -EAGAIN;
2637 case 0:
2638 break;
2639 default:
2640 failed_link = slave;
2641 rc = tmp;
2642 goto fail;
2643 }
2644 }
022bdb07 2645
b1c72916 2646 /* perform follow-up SRST if necessary */
932648b0 2647 if (reset == hardreset &&
5dbfc9cb 2648 ata_eh_followup_srst_needed(link, rc, classes)) {
932648b0 2649 reset = softreset;
022bdb07 2650
932648b0
TH
2651 if (!reset) {
2652 ata_link_printk(link, KERN_ERR,
2653 "follow-up softreset required "
2654 "but no softreset avaliable\n");
b1c72916 2655 failed_link = link;
932648b0
TH
2656 rc = -EINVAL;
2657 goto fail;
2658 }
664faf09 2659
932648b0 2660 ata_eh_about_to_do(link, NULL, ATA_EH_RESET);
b1c72916 2661 rc = ata_do_reset(link, reset, classes, deadline, true);
fe2c4d01
TH
2662 if (rc) {
2663 failed_link = link;
2664 goto fail;
2665 }
664faf09 2666 }
932648b0
TH
2667 } else {
2668 if (verbose)
2669 ata_link_printk(link, KERN_INFO, "no reset method "
2670 "available, skipping reset\n");
2671 if (!(lflags & ATA_LFLAG_ASSUME_CLASS))
2672 lflags |= ATA_LFLAG_ASSUME_ATA;
664faf09
TH
2673 }
2674
932648b0
TH
2675 /*
2676 * Post-reset processing
2677 */
1eca4365 2678 ata_for_each_dev(dev, link, ALL) {
416dc9ed
TH
2679 /* After the reset, the device state is PIO 0 and the
2680 * controller state is undefined. Reset also wakes up
2681 * drives from sleeping mode.
2682 */
2683 dev->pio_mode = XFER_PIO_0;
2684 dev->flags &= ~ATA_DFLAG_SLEEPING;
31daabda 2685
3b761d3d
TH
2686 if (ata_phys_link_offline(ata_dev_phys_link(dev)))
2687 continue;
2688
2689 /* apply class override */
2690 if (lflags & ATA_LFLAG_ASSUME_ATA)
2691 classes[dev->devno] = ATA_DEV_ATA;
2692 else if (lflags & ATA_LFLAG_ASSUME_SEMB)
2693 classes[dev->devno] = ATA_DEV_SEMB_UNSUP;
022bdb07
TH
2694 }
2695
416dc9ed
TH
2696 /* record current link speed */
2697 if (sata_scr_read(link, SCR_STATUS, &sstatus) == 0)
2698 link->sata_spd = (sstatus >> 4) & 0xf;
b1c72916
TH
2699 if (slave && sata_scr_read(slave, SCR_STATUS, &sstatus) == 0)
2700 slave->sata_spd = (sstatus >> 4) & 0xf;
008a7896 2701
dc98c32c
TH
2702 /* thaw the port */
2703 if (ata_is_host_link(link))
2704 ata_eh_thaw_port(ap);
2705
f046519f
TH
2706 /* postreset() should clear hardware SError. Although SError
2707 * is cleared during link resume, clearing SError here is
2708 * necessary as some PHYs raise hotplug events after SRST.
2709 * This introduces race condition where hotplug occurs between
2710 * reset and here. This race is mediated by cross checking
2711 * link onlineness and classification result later.
2712 */
b1c72916 2713 if (postreset) {
416dc9ed 2714 postreset(link, classes);
b1c72916
TH
2715 if (slave)
2716 postreset(slave, classes);
2717 }
20952b69 2718
1e641060
TH
2719 /*
2720 * Some controllers can't be frozen very well and may set
2721 * spuruious error conditions during reset. Clear accumulated
2722 * error information. As reset is the final recovery action,
2723 * nothing is lost by doing this.
2724 */
f046519f 2725 spin_lock_irqsave(link->ap->lock, flags);
1e641060 2726 memset(&link->eh_info, 0, sizeof(link->eh_info));
b1c72916 2727 if (slave)
1e641060
TH
2728 memset(&slave->eh_info, 0, sizeof(link->eh_info));
2729 ap->pflags &= ~ATA_PFLAG_EH_PENDING;
f046519f
TH
2730 spin_unlock_irqrestore(link->ap->lock, flags);
2731
3b761d3d
TH
2732 /*
2733 * Make sure onlineness and classification result correspond.
f046519f
TH
2734 * Hotplug could have happened during reset and some
2735 * controllers fail to wait while a drive is spinning up after
2736 * being hotplugged causing misdetection. By cross checking
3b761d3d
TH
2737 * link on/offlineness and classification result, those
2738 * conditions can be reliably detected and retried.
f046519f 2739 */
b1c72916 2740 nr_unknown = 0;
1eca4365 2741 ata_for_each_dev(dev, link, ALL) {
3b761d3d
TH
2742 if (ata_phys_link_online(ata_dev_phys_link(dev))) {
2743 if (classes[dev->devno] == ATA_DEV_UNKNOWN) {
2744 ata_dev_printk(dev, KERN_DEBUG, "link online "
2745 "but device misclassifed\n");
2746 classes[dev->devno] = ATA_DEV_NONE;
b1c72916 2747 nr_unknown++;
3b761d3d
TH
2748 }
2749 } else if (ata_phys_link_offline(ata_dev_phys_link(dev))) {
2750 if (ata_class_enabled(classes[dev->devno]))
2751 ata_dev_printk(dev, KERN_DEBUG, "link offline, "
2752 "clearing class %d to NONE\n",
2753 classes[dev->devno]);
2754 classes[dev->devno] = ATA_DEV_NONE;
2755 } else if (classes[dev->devno] == ATA_DEV_UNKNOWN) {
2756 ata_dev_printk(dev, KERN_DEBUG, "link status unknown, "
2757 "clearing UNKNOWN to NONE\n");
2758 classes[dev->devno] = ATA_DEV_NONE;
b1c72916 2759 }
f046519f
TH
2760 }
2761
b1c72916 2762 if (classify && nr_unknown) {
f046519f
TH
2763 if (try < max_tries) {
2764 ata_link_printk(link, KERN_WARNING, "link online but "
3b761d3d
TH
2765 "%d devices misclassified, retrying\n",
2766 nr_unknown);
b1c72916 2767 failed_link = link;
f046519f
TH
2768 rc = -EAGAIN;
2769 goto fail;
2770 }
2771 ata_link_printk(link, KERN_WARNING,
3b761d3d
TH
2772 "link online but %d devices misclassified, "
2773 "device detection might fail\n", nr_unknown);
f046519f
TH
2774 }
2775
416dc9ed 2776 /* reset successful, schedule revalidation */
cf480626 2777 ata_eh_done(link, NULL, ATA_EH_RESET);
b1c72916
TH
2778 if (slave)
2779 ata_eh_done(slave, NULL, ATA_EH_RESET);
19b72321 2780 ehc->last_reset = jiffies; /* update to completion time */
416dc9ed 2781 ehc->i.action |= ATA_EH_REVALIDATE;
ae791c05 2782
416dc9ed 2783 rc = 0;
fccb6ea5
TH
2784 out:
2785 /* clear hotplug flag */
2786 ehc->i.flags &= ~ATA_EHI_HOTPLUGGED;
b1c72916
TH
2787 if (slave)
2788 sehc->i.flags &= ~ATA_EHI_HOTPLUGGED;
afaa5c37
TH
2789
2790 spin_lock_irqsave(ap->lock, flags);
2791 ap->pflags &= ~ATA_PFLAG_RESETTING;
2792 spin_unlock_irqrestore(ap->lock, flags);
2793
022bdb07 2794 return rc;
416dc9ed
TH
2795
2796 fail:
5958e302
TH
2797 /* if SCR isn't accessible on a fan-out port, PMP needs to be reset */
2798 if (!ata_is_host_link(link) &&
2799 sata_scr_read(link, SCR_STATUS, &sstatus))
2800 rc = -ERESTART;
2801
416dc9ed
TH
2802 if (rc == -ERESTART || try >= max_tries)
2803 goto out;
2804
2805 now = jiffies;
2806 if (time_before(now, deadline)) {
2807 unsigned long delta = deadline - now;
2808
b1c72916 2809 ata_link_printk(failed_link, KERN_WARNING,
0a2c0f56
TH
2810 "reset failed (errno=%d), retrying in %u secs\n",
2811 rc, DIV_ROUND_UP(jiffies_to_msecs(delta), 1000));
416dc9ed
TH
2812
2813 while (delta)
2814 delta = schedule_timeout_uninterruptible(delta);
2815 }
2816
b1c72916 2817 if (try == max_tries - 1) {
a07d499b 2818 sata_down_spd_limit(link, 0);
b1c72916 2819 if (slave)
a07d499b 2820 sata_down_spd_limit(slave, 0);
b1c72916 2821 } else if (rc == -EPIPE)
a07d499b 2822 sata_down_spd_limit(failed_link, 0);
b1c72916 2823
416dc9ed
TH
2824 if (hardreset)
2825 reset = hardreset;
2826 goto retry;
022bdb07
TH
2827}
2828
45fabbb7
EO
2829static inline void ata_eh_pull_park_action(struct ata_port *ap)
2830{
2831 struct ata_link *link;
2832 struct ata_device *dev;
2833 unsigned long flags;
2834
2835 /*
2836 * This function can be thought of as an extended version of
2837 * ata_eh_about_to_do() specially crafted to accommodate the
2838 * requirements of ATA_EH_PARK handling. Since the EH thread
2839 * does not leave the do {} while () loop in ata_eh_recover as
2840 * long as the timeout for a park request to *one* device on
2841 * the port has not expired, and since we still want to pick
2842 * up park requests to other devices on the same port or
2843 * timeout updates for the same device, we have to pull
2844 * ATA_EH_PARK actions from eh_info into eh_context.i
2845 * ourselves at the beginning of each pass over the loop.
2846 *
2847 * Additionally, all write accesses to &ap->park_req_pending
2848 * through INIT_COMPLETION() (see below) or complete_all()
2849 * (see ata_scsi_park_store()) are protected by the host lock.
2850 * As a result we have that park_req_pending.done is zero on
2851 * exit from this function, i.e. when ATA_EH_PARK actions for
2852 * *all* devices on port ap have been pulled into the
2853 * respective eh_context structs. If, and only if,
2854 * park_req_pending.done is non-zero by the time we reach
2855 * wait_for_completion_timeout(), another ATA_EH_PARK action
2856 * has been scheduled for at least one of the devices on port
2857 * ap and we have to cycle over the do {} while () loop in
2858 * ata_eh_recover() again.
2859 */
2860
2861 spin_lock_irqsave(ap->lock, flags);
2862 INIT_COMPLETION(ap->park_req_pending);
1eca4365
TH
2863 ata_for_each_link(link, ap, EDGE) {
2864 ata_for_each_dev(dev, link, ALL) {
45fabbb7
EO
2865 struct ata_eh_info *ehi = &link->eh_info;
2866
2867 link->eh_context.i.dev_action[dev->devno] |=
2868 ehi->dev_action[dev->devno] & ATA_EH_PARK;
2869 ata_eh_clear_action(link, dev, ehi, ATA_EH_PARK);
2870 }
2871 }
2872 spin_unlock_irqrestore(ap->lock, flags);
2873}
2874
2875static void ata_eh_park_issue_cmd(struct ata_device *dev, int park)
2876{
2877 struct ata_eh_context *ehc = &dev->link->eh_context;
2878 struct ata_taskfile tf;
2879 unsigned int err_mask;
2880
2881 ata_tf_init(dev, &tf);
2882 if (park) {
2883 ehc->unloaded_mask |= 1 << dev->devno;
2884 tf.command = ATA_CMD_IDLEIMMEDIATE;
2885 tf.feature = 0x44;
2886 tf.lbal = 0x4c;
2887 tf.lbam = 0x4e;
2888 tf.lbah = 0x55;
2889 } else {
2890 ehc->unloaded_mask &= ~(1 << dev->devno);
2891 tf.command = ATA_CMD_CHK_POWER;
2892 }
2893
2894 tf.flags |= ATA_TFLAG_DEVICE | ATA_TFLAG_ISADDR;
2895 tf.protocol |= ATA_PROT_NODATA;
2896 err_mask = ata_exec_internal(dev, &tf, NULL, DMA_NONE, NULL, 0, 0);
2897 if (park && (err_mask || tf.lbal != 0xc4)) {
2898 ata_dev_printk(dev, KERN_ERR, "head unload failed!\n");
2899 ehc->unloaded_mask &= ~(1 << dev->devno);
2900 }
2901}
2902
0260731f 2903static int ata_eh_revalidate_and_attach(struct ata_link *link,
084fe639 2904 struct ata_device **r_failed_dev)
022bdb07 2905{
0260731f
TH
2906 struct ata_port *ap = link->ap;
2907 struct ata_eh_context *ehc = &link->eh_context;
022bdb07 2908 struct ata_device *dev;
8c3c52a8 2909 unsigned int new_mask = 0;
084fe639 2910 unsigned long flags;
f58229f8 2911 int rc = 0;
022bdb07
TH
2912
2913 DPRINTK("ENTER\n");
2914
8c3c52a8
TH
2915 /* For PATA drive side cable detection to work, IDENTIFY must
2916 * be done backwards such that PDIAG- is released by the slave
2917 * device before the master device is identified.
2918 */
1eca4365 2919 ata_for_each_dev(dev, link, ALL_REVERSE) {
f58229f8
TH
2920 unsigned int action = ata_eh_dev_action(dev);
2921 unsigned int readid_flags = 0;
022bdb07 2922
bff04647
TH
2923 if (ehc->i.flags & ATA_EHI_DID_RESET)
2924 readid_flags |= ATA_READID_POSTRESET;
2925
9666f400 2926 if ((action & ATA_EH_REVALIDATE) && ata_dev_enabled(dev)) {
633273a3
TH
2927 WARN_ON(dev->class == ATA_DEV_PMP);
2928
b1c72916 2929 if (ata_phys_link_offline(ata_dev_phys_link(dev))) {
022bdb07 2930 rc = -EIO;
8c3c52a8 2931 goto err;
022bdb07
TH
2932 }
2933
0260731f 2934 ata_eh_about_to_do(link, dev, ATA_EH_REVALIDATE);
422c9daa
TH
2935 rc = ata_dev_revalidate(dev, ehc->classes[dev->devno],
2936 readid_flags);
022bdb07 2937 if (rc)
8c3c52a8 2938 goto err;
022bdb07 2939
0260731f 2940 ata_eh_done(link, dev, ATA_EH_REVALIDATE);
47005f25 2941
baa1e78a
TH
2942 /* Configuration may have changed, reconfigure
2943 * transfer mode.
2944 */
2945 ehc->i.flags |= ATA_EHI_SETMODE;
2946
3057ac3c 2947 /* schedule the scsi_rescan_device() here */
ad72cf98 2948 schedule_work(&(ap->scsi_rescan_task));
084fe639
TH
2949 } else if (dev->class == ATA_DEV_UNKNOWN &&
2950 ehc->tries[dev->devno] &&
2951 ata_class_enabled(ehc->classes[dev->devno])) {
842faa6c
TH
2952 /* Temporarily set dev->class, it will be
2953 * permanently set once all configurations are
2954 * complete. This is necessary because new
2955 * device configuration is done in two
2956 * separate loops.
2957 */
084fe639
TH
2958 dev->class = ehc->classes[dev->devno];
2959
633273a3
TH
2960 if (dev->class == ATA_DEV_PMP)
2961 rc = sata_pmp_attach(dev);
2962 else
2963 rc = ata_dev_read_id(dev, &dev->class,
2964 readid_flags, dev->id);
842faa6c
TH
2965
2966 /* read_id might have changed class, store and reset */
2967 ehc->classes[dev->devno] = dev->class;
2968 dev->class = ATA_DEV_UNKNOWN;
2969
8c3c52a8
TH
2970 switch (rc) {
2971 case 0:
99cf610a
TH
2972 /* clear error info accumulated during probe */
2973 ata_ering_clear(&dev->ering);
f58229f8 2974 new_mask |= 1 << dev->devno;
8c3c52a8
TH
2975 break;
2976 case -ENOENT:
55a8e2c8
TH
2977 /* IDENTIFY was issued to non-existent
2978 * device. No need to reset. Just
842faa6c 2979 * thaw and ignore the device.
55a8e2c8
TH
2980 */
2981 ata_eh_thaw_port(ap);
084fe639 2982 break;
8c3c52a8 2983 default:
8c3c52a8 2984 goto err;
084fe639 2985 }
8c3c52a8
TH
2986 }
2987 }
084fe639 2988
c1c4e8d5 2989 /* PDIAG- should have been released, ask cable type if post-reset */
33267325
TH
2990 if ((ehc->i.flags & ATA_EHI_DID_RESET) && ata_is_host_link(link)) {
2991 if (ap->ops->cable_detect)
2992 ap->cbl = ap->ops->cable_detect(ap);
2993 ata_force_cbl(ap);
2994 }
c1c4e8d5 2995
8c3c52a8
TH
2996 /* Configure new devices forward such that user doesn't see
2997 * device detection messages backwards.
2998 */
1eca4365 2999 ata_for_each_dev(dev, link, ALL) {
4f7c2874 3000 if (!(new_mask & (1 << dev->devno)))
8c3c52a8
TH
3001 continue;
3002
842faa6c
TH
3003 dev->class = ehc->classes[dev->devno];
3004
4f7c2874
TH
3005 if (dev->class == ATA_DEV_PMP)
3006 continue;
3007
8c3c52a8
TH
3008 ehc->i.flags |= ATA_EHI_PRINTINFO;
3009 rc = ata_dev_configure(dev);
3010 ehc->i.flags &= ~ATA_EHI_PRINTINFO;
842faa6c
TH
3011 if (rc) {
3012 dev->class = ATA_DEV_UNKNOWN;
8c3c52a8 3013 goto err;
842faa6c 3014 }
8c3c52a8
TH
3015
3016 spin_lock_irqsave(ap->lock, flags);
3017 ap->pflags |= ATA_PFLAG_SCSI_HOTPLUG;
3018 spin_unlock_irqrestore(ap->lock, flags);
3019
3020 /* new device discovered, configure xfermode */
3021 ehc->i.flags |= ATA_EHI_SETMODE;
022bdb07
TH
3022 }
3023
8c3c52a8 3024 return 0;
022bdb07 3025
8c3c52a8
TH
3026 err:
3027 *r_failed_dev = dev;
3028 DPRINTK("EXIT rc=%d\n", rc);
022bdb07
TH
3029 return rc;
3030}
3031
6f1d1e3a
TH
3032/**
3033 * ata_set_mode - Program timings and issue SET FEATURES - XFER
3034 * @link: link on which timings will be programmed
98a1708d 3035 * @r_failed_dev: out parameter for failed device
6f1d1e3a
TH
3036 *
3037 * Set ATA device disk transfer mode (PIO3, UDMA6, etc.). If
3038 * ata_set_mode() fails, pointer to the failing device is
3039 * returned in @r_failed_dev.
3040 *
3041 * LOCKING:
3042 * PCI/etc. bus probe sem.
3043 *
3044 * RETURNS:
3045 * 0 on success, negative errno otherwise
3046 */
3047int ata_set_mode(struct ata_link *link, struct ata_device **r_failed_dev)
3048{
3049 struct ata_port *ap = link->ap;
00115e0f
TH
3050 struct ata_device *dev;
3051 int rc;
6f1d1e3a 3052
76326ac1 3053 /* if data transfer is verified, clear DUBIOUS_XFER on ering top */
1eca4365 3054 ata_for_each_dev(dev, link, ENABLED) {
76326ac1
TH
3055 if (!(dev->flags & ATA_DFLAG_DUBIOUS_XFER)) {
3056 struct ata_ering_entry *ent;
3057
3058 ent = ata_ering_top(&dev->ering);
3059 if (ent)
3060 ent->eflags &= ~ATA_EFLAG_DUBIOUS_XFER;
3061 }
3062 }
3063
6f1d1e3a
TH
3064 /* has private set_mode? */
3065 if (ap->ops->set_mode)
00115e0f
TH
3066 rc = ap->ops->set_mode(link, r_failed_dev);
3067 else
3068 rc = ata_do_set_mode(link, r_failed_dev);
3069
3070 /* if transfer mode has changed, set DUBIOUS_XFER on device */
1eca4365 3071 ata_for_each_dev(dev, link, ENABLED) {
00115e0f
TH
3072 struct ata_eh_context *ehc = &link->eh_context;
3073 u8 saved_xfer_mode = ehc->saved_xfer_mode[dev->devno];
3074 u8 saved_ncq = !!(ehc->saved_ncq_enabled & (1 << dev->devno));
3075
3076 if (dev->xfer_mode != saved_xfer_mode ||
3077 ata_ncq_enabled(dev) != saved_ncq)
3078 dev->flags |= ATA_DFLAG_DUBIOUS_XFER;
3079 }
3080
3081 return rc;
6f1d1e3a
TH
3082}
3083
11fc33da
TH
3084/**
3085 * atapi_eh_clear_ua - Clear ATAPI UNIT ATTENTION after reset
3086 * @dev: ATAPI device to clear UA for
3087 *
3088 * Resets and other operations can make an ATAPI device raise
3089 * UNIT ATTENTION which causes the next operation to fail. This
3090 * function clears UA.
3091 *
3092 * LOCKING:
3093 * EH context (may sleep).
3094 *
3095 * RETURNS:
3096 * 0 on success, -errno on failure.
3097 */
3098static int atapi_eh_clear_ua(struct ata_device *dev)
3099{
3100 int i;
3101
3102 for (i = 0; i < ATA_EH_UA_TRIES; i++) {
b5357081 3103 u8 *sense_buffer = dev->link->ap->sector_buf;
11fc33da
TH
3104 u8 sense_key = 0;
3105 unsigned int err_mask;
3106
3107 err_mask = atapi_eh_tur(dev, &sense_key);
3108 if (err_mask != 0 && err_mask != AC_ERR_DEV) {
3109 ata_dev_printk(dev, KERN_WARNING, "TEST_UNIT_READY "
3110 "failed (err_mask=0x%x)\n", err_mask);
3111 return -EIO;
3112 }
3113
3114 if (!err_mask || sense_key != UNIT_ATTENTION)
3115 return 0;
3116
3117 err_mask = atapi_eh_request_sense(dev, sense_buffer, sense_key);
3118 if (err_mask) {
3119 ata_dev_printk(dev, KERN_WARNING, "failed to clear "
3120 "UNIT ATTENTION (err_mask=0x%x)\n", err_mask);
3121 return -EIO;
3122 }
3123 }
3124
3125 ata_dev_printk(dev, KERN_WARNING,
3126 "UNIT ATTENTION persists after %d tries\n", ATA_EH_UA_TRIES);
3127
3128 return 0;
3129}
3130
6013efd8
TH
3131/**
3132 * ata_eh_maybe_retry_flush - Retry FLUSH if necessary
3133 * @dev: ATA device which may need FLUSH retry
3134 *
3135 * If @dev failed FLUSH, it needs to be reported upper layer
3136 * immediately as it means that @dev failed to remap and already
3137 * lost at least a sector and further FLUSH retrials won't make
3138 * any difference to the lost sector. However, if FLUSH failed
3139 * for other reasons, for example transmission error, FLUSH needs
3140 * to be retried.
3141 *
3142 * This function determines whether FLUSH failure retry is
3143 * necessary and performs it if so.
3144 *
3145 * RETURNS:
3146 * 0 if EH can continue, -errno if EH needs to be repeated.
3147 */
3148static int ata_eh_maybe_retry_flush(struct ata_device *dev)
3149{
3150 struct ata_link *link = dev->link;
3151 struct ata_port *ap = link->ap;
3152 struct ata_queued_cmd *qc;
3153 struct ata_taskfile tf;
3154 unsigned int err_mask;
3155 int rc = 0;
3156
3157 /* did flush fail for this device? */
3158 if (!ata_tag_valid(link->active_tag))
3159 return 0;
3160
3161 qc = __ata_qc_from_tag(ap, link->active_tag);
3162 if (qc->dev != dev || (qc->tf.command != ATA_CMD_FLUSH_EXT &&
3163 qc->tf.command != ATA_CMD_FLUSH))
3164 return 0;
3165
3166 /* if the device failed it, it should be reported to upper layers */
3167 if (qc->err_mask & AC_ERR_DEV)
3168 return 0;
3169
3170 /* flush failed for some other reason, give it another shot */
3171 ata_tf_init(dev, &tf);
3172
3173 tf.command = qc->tf.command;
3174 tf.flags |= ATA_TFLAG_DEVICE;
3175 tf.protocol = ATA_PROT_NODATA;
3176
3177 ata_dev_printk(dev, KERN_WARNING, "retrying FLUSH 0x%x Emask 0x%x\n",
3178 tf.command, qc->err_mask);
3179
3180 err_mask = ata_exec_internal(dev, &tf, NULL, DMA_NONE, NULL, 0, 0);
3181 if (!err_mask) {
3182 /*
3183 * FLUSH is complete but there's no way to
3184 * successfully complete a failed command from EH.
3185 * Making sure retry is allowed at least once and
3186 * retrying it should do the trick - whatever was in
3187 * the cache is already on the platter and this won't
3188 * cause infinite loop.
3189 */
3190 qc->scsicmd->allowed = max(qc->scsicmd->allowed, 1);
3191 } else {
3192 ata_dev_printk(dev, KERN_WARNING, "FLUSH failed Emask 0x%x\n",
3193 err_mask);
3194 rc = -EIO;
3195
3196 /* if device failed it, report it to upper layers */
3197 if (err_mask & AC_ERR_DEV) {
3198 qc->err_mask |= AC_ERR_DEV;
3199 qc->result_tf = tf;
3200 if (!(ap->pflags & ATA_PFLAG_FROZEN))
3201 rc = 0;
3202 }
3203 }
3204 return rc;
3205}
3206
0260731f 3207static int ata_link_nr_enabled(struct ata_link *link)
022bdb07 3208{
f58229f8
TH
3209 struct ata_device *dev;
3210 int cnt = 0;
022bdb07 3211
1eca4365
TH
3212 ata_for_each_dev(dev, link, ENABLED)
3213 cnt++;
022bdb07
TH
3214 return cnt;
3215}
3216
0260731f 3217static int ata_link_nr_vacant(struct ata_link *link)
084fe639 3218{
f58229f8
TH
3219 struct ata_device *dev;
3220 int cnt = 0;
084fe639 3221
1eca4365 3222 ata_for_each_dev(dev, link, ALL)
f58229f8 3223 if (dev->class == ATA_DEV_UNKNOWN)
084fe639
TH
3224 cnt++;
3225 return cnt;
3226}
3227
0260731f 3228static int ata_eh_skip_recovery(struct ata_link *link)
084fe639 3229{
672b2d65 3230 struct ata_port *ap = link->ap;
0260731f 3231 struct ata_eh_context *ehc = &link->eh_context;
f58229f8 3232 struct ata_device *dev;
084fe639 3233
f9df58cb
TH
3234 /* skip disabled links */
3235 if (link->flags & ATA_LFLAG_DISABLED)
3236 return 1;
3237
e2f3d75f
TH
3238 /* skip if explicitly requested */
3239 if (ehc->i.flags & ATA_EHI_NO_RECOVERY)
3240 return 1;
3241
672b2d65
TH
3242 /* thaw frozen port and recover failed devices */
3243 if ((ap->pflags & ATA_PFLAG_FROZEN) || ata_link_nr_enabled(link))
3244 return 0;
3245
3246 /* reset at least once if reset is requested */
3247 if ((ehc->i.action & ATA_EH_RESET) &&
3248 !(ehc->i.flags & ATA_EHI_DID_RESET))
084fe639
TH
3249 return 0;
3250
3251 /* skip if class codes for all vacant slots are ATA_DEV_NONE */
1eca4365 3252 ata_for_each_dev(dev, link, ALL) {
084fe639
TH
3253 if (dev->class == ATA_DEV_UNKNOWN &&
3254 ehc->classes[dev->devno] != ATA_DEV_NONE)
3255 return 0;
3256 }
3257
3258 return 1;
3259}
3260
c2c7a89c
TH
3261static int ata_count_probe_trials_cb(struct ata_ering_entry *ent, void *void_arg)
3262{
3263 u64 interval = msecs_to_jiffies(ATA_EH_PROBE_TRIAL_INTERVAL);
3264 u64 now = get_jiffies_64();
3265 int *trials = void_arg;
3266
3267 if (ent->timestamp < now - min(now, interval))
3268 return -1;
3269
3270 (*trials)++;
3271 return 0;
3272}
3273
02c05a27
TH
3274static int ata_eh_schedule_probe(struct ata_device *dev)
3275{
3276 struct ata_eh_context *ehc = &dev->link->eh_context;
c2c7a89c
TH
3277 struct ata_link *link = ata_dev_phys_link(dev);
3278 int trials = 0;
02c05a27
TH
3279
3280 if (!(ehc->i.probe_mask & (1 << dev->devno)) ||
3281 (ehc->did_probe_mask & (1 << dev->devno)))
3282 return 0;
3283
3284 ata_eh_detach_dev(dev);
3285 ata_dev_init(dev);
3286 ehc->did_probe_mask |= (1 << dev->devno);
cf480626 3287 ehc->i.action |= ATA_EH_RESET;
00115e0f
TH
3288 ehc->saved_xfer_mode[dev->devno] = 0;
3289 ehc->saved_ncq_enabled &= ~(1 << dev->devno);
02c05a27 3290
c2c7a89c
TH
3291 /* Record and count probe trials on the ering. The specific
3292 * error mask used is irrelevant. Because a successful device
3293 * detection clears the ering, this count accumulates only if
3294 * there are consecutive failed probes.
3295 *
3296 * If the count is equal to or higher than ATA_EH_PROBE_TRIALS
3297 * in the last ATA_EH_PROBE_TRIAL_INTERVAL, link speed is
3298 * forced to 1.5Gbps.
3299 *
3300 * This is to work around cases where failed link speed
3301 * negotiation results in device misdetection leading to
3302 * infinite DEVXCHG or PHRDY CHG events.
3303 */
3304 ata_ering_record(&dev->ering, 0, AC_ERR_OTHER);
3305 ata_ering_map(&dev->ering, ata_count_probe_trials_cb, &trials);
3306
3307 if (trials > ATA_EH_PROBE_TRIALS)
3308 sata_down_spd_limit(link, 1);
3309
02c05a27
TH
3310 return 1;
3311}
3312
9b1e2658 3313static int ata_eh_handle_dev_fail(struct ata_device *dev, int err)
fee7ca72 3314{
9af5c9c9 3315 struct ata_eh_context *ehc = &dev->link->eh_context;
fee7ca72 3316
cf9a590a
TH
3317 /* -EAGAIN from EH routine indicates retry without prejudice.
3318 * The requester is responsible for ensuring forward progress.
3319 */
3320 if (err != -EAGAIN)
3321 ehc->tries[dev->devno]--;
fee7ca72
TH
3322
3323 switch (err) {
3324 case -ENODEV:
3325 /* device missing or wrong IDENTIFY data, schedule probing */
3326 ehc->i.probe_mask |= (1 << dev->devno);
3327 case -EINVAL:
3328 /* give it just one more chance */
3329 ehc->tries[dev->devno] = min(ehc->tries[dev->devno], 1);
3330 case -EIO:
d89293ab 3331 if (ehc->tries[dev->devno] == 1) {
fee7ca72
TH
3332 /* This is the last chance, better to slow
3333 * down than lose it.
3334 */
a07d499b 3335 sata_down_spd_limit(ata_dev_phys_link(dev), 0);
d89293ab
TH
3336 if (dev->pio_mode > XFER_PIO_0)
3337 ata_down_xfermask_limit(dev, ATA_DNXFER_PIO);
fee7ca72
TH
3338 }
3339 }
3340
3341 if (ata_dev_enabled(dev) && !ehc->tries[dev->devno]) {
3342 /* disable device if it has used up all its chances */
3343 ata_dev_disable(dev);
3344
3345 /* detach if offline */
b1c72916 3346 if (ata_phys_link_offline(ata_dev_phys_link(dev)))
fee7ca72
TH
3347 ata_eh_detach_dev(dev);
3348
02c05a27 3349 /* schedule probe if necessary */
87fbc5a0 3350 if (ata_eh_schedule_probe(dev)) {
fee7ca72 3351 ehc->tries[dev->devno] = ATA_EH_DEV_TRIES;
87fbc5a0
TH
3352 memset(ehc->cmd_timeout_idx[dev->devno], 0,
3353 sizeof(ehc->cmd_timeout_idx[dev->devno]));
3354 }
9b1e2658
TH
3355
3356 return 1;
fee7ca72 3357 } else {
cf480626 3358 ehc->i.action |= ATA_EH_RESET;
9b1e2658 3359 return 0;
fee7ca72
TH
3360 }
3361}
3362
022bdb07
TH
3363/**
3364 * ata_eh_recover - recover host port after error
3365 * @ap: host port to recover
f5914a46 3366 * @prereset: prereset method (can be NULL)
022bdb07
TH
3367 * @softreset: softreset method (can be NULL)
3368 * @hardreset: hardreset method (can be NULL)
3369 * @postreset: postreset method (can be NULL)
9b1e2658 3370 * @r_failed_link: out parameter for failed link
022bdb07
TH
3371 *
3372 * This is the alpha and omega, eum and yang, heart and soul of
3373 * libata exception handling. On entry, actions required to
9b1e2658
TH
3374 * recover each link and hotplug requests are recorded in the
3375 * link's eh_context. This function executes all the operations
3376 * with appropriate retrials and fallbacks to resurrect failed
084fe639 3377 * devices, detach goners and greet newcomers.
022bdb07
TH
3378 *
3379 * LOCKING:
3380 * Kernel thread context (may sleep).
3381 *
3382 * RETURNS:
3383 * 0 on success, -errno on failure.
3384 */
fb7fd614
TH
3385int ata_eh_recover(struct ata_port *ap, ata_prereset_fn_t prereset,
3386 ata_reset_fn_t softreset, ata_reset_fn_t hardreset,
3387 ata_postreset_fn_t postreset,
3388 struct ata_link **r_failed_link)
022bdb07 3389{
9b1e2658 3390 struct ata_link *link;
022bdb07 3391 struct ata_device *dev;
0a2c0f56 3392 int nr_failed_devs;
dc98c32c 3393 int rc;
45fabbb7 3394 unsigned long flags, deadline;
022bdb07
TH
3395
3396 DPRINTK("ENTER\n");
3397
3398 /* prep for recovery */
1eca4365 3399 ata_for_each_link(link, ap, EDGE) {
9b1e2658 3400 struct ata_eh_context *ehc = &link->eh_context;
084fe639 3401
f9df58cb
TH
3402 /* re-enable link? */
3403 if (ehc->i.action & ATA_EH_ENABLE_LINK) {
3404 ata_eh_about_to_do(link, NULL, ATA_EH_ENABLE_LINK);
3405 spin_lock_irqsave(ap->lock, flags);
3406 link->flags &= ~ATA_LFLAG_DISABLED;
3407 spin_unlock_irqrestore(ap->lock, flags);
3408 ata_eh_done(link, NULL, ATA_EH_ENABLE_LINK);
3409 }
3410
1eca4365 3411 ata_for_each_dev(dev, link, ALL) {
fd995f70
TH
3412 if (link->flags & ATA_LFLAG_NO_RETRY)
3413 ehc->tries[dev->devno] = 1;
3414 else
3415 ehc->tries[dev->devno] = ATA_EH_DEV_TRIES;
084fe639 3416
9b1e2658
TH
3417 /* collect port action mask recorded in dev actions */
3418 ehc->i.action |= ehc->i.dev_action[dev->devno] &
3419 ~ATA_EH_PERDEV_MASK;
3420 ehc->i.dev_action[dev->devno] &= ATA_EH_PERDEV_MASK;
3421
3422 /* process hotplug request */
3423 if (dev->flags & ATA_DFLAG_DETACH)
3424 ata_eh_detach_dev(dev);
3425
02c05a27
TH
3426 /* schedule probe if necessary */
3427 if (!ata_dev_enabled(dev))
3428 ata_eh_schedule_probe(dev);
084fe639 3429 }
022bdb07
TH
3430 }
3431
3432 retry:
022bdb07 3433 rc = 0;
9b1e2658 3434 nr_failed_devs = 0;
022bdb07 3435
aeb2ecd6 3436 /* if UNLOADING, finish immediately */
b51e9e5d 3437 if (ap->pflags & ATA_PFLAG_UNLOADING)
aeb2ecd6
TH
3438 goto out;
3439
9b1e2658 3440 /* prep for EH */
1eca4365 3441 ata_for_each_link(link, ap, EDGE) {
9b1e2658 3442 struct ata_eh_context *ehc = &link->eh_context;
022bdb07 3443
9b1e2658
TH
3444 /* skip EH if possible. */
3445 if (ata_eh_skip_recovery(link))
3446 ehc->i.action = 0;
3447
1eca4365 3448 ata_for_each_dev(dev, link, ALL)
9b1e2658
TH
3449 ehc->classes[dev->devno] = ATA_DEV_UNKNOWN;
3450 }
084fe639 3451
022bdb07 3452 /* reset */
1eca4365 3453 ata_for_each_link(link, ap, EDGE) {
dc98c32c 3454 struct ata_eh_context *ehc = &link->eh_context;
9b1e2658 3455
dc98c32c
TH
3456 if (!(ehc->i.action & ATA_EH_RESET))
3457 continue;
9b1e2658 3458
dc98c32c
TH
3459 rc = ata_eh_reset(link, ata_link_nr_vacant(link),
3460 prereset, softreset, hardreset, postreset);
3461 if (rc) {
3462 ata_link_printk(link, KERN_ERR,
3463 "reset failed, giving up\n");
3464 goto out;
022bdb07 3465 }
022bdb07
TH
3466 }
3467
45fabbb7
EO
3468 do {
3469 unsigned long now;
3470
3471 /*
3472 * clears ATA_EH_PARK in eh_info and resets
3473 * ap->park_req_pending
3474 */
3475 ata_eh_pull_park_action(ap);
3476
3477 deadline = jiffies;
1eca4365
TH
3478 ata_for_each_link(link, ap, EDGE) {
3479 ata_for_each_dev(dev, link, ALL) {
45fabbb7
EO
3480 struct ata_eh_context *ehc = &link->eh_context;
3481 unsigned long tmp;
3482
3483 if (dev->class != ATA_DEV_ATA)
3484 continue;
3485 if (!(ehc->i.dev_action[dev->devno] &
3486 ATA_EH_PARK))
3487 continue;
3488 tmp = dev->unpark_deadline;
3489 if (time_before(deadline, tmp))
3490 deadline = tmp;
3491 else if (time_before_eq(tmp, jiffies))
3492 continue;
3493 if (ehc->unloaded_mask & (1 << dev->devno))
3494 continue;
3495
3496 ata_eh_park_issue_cmd(dev, 1);
3497 }
3498 }
3499
3500 now = jiffies;
3501 if (time_before_eq(deadline, now))
3502 break;
3503
3504 deadline = wait_for_completion_timeout(&ap->park_req_pending,
3505 deadline - now);
3506 } while (deadline);
1eca4365
TH
3507 ata_for_each_link(link, ap, EDGE) {
3508 ata_for_each_dev(dev, link, ALL) {
45fabbb7
EO
3509 if (!(link->eh_context.unloaded_mask &
3510 (1 << dev->devno)))
3511 continue;
3512
3513 ata_eh_park_issue_cmd(dev, 0);
3514 ata_eh_done(link, dev, ATA_EH_PARK);
3515 }
3516 }
3517
9b1e2658 3518 /* the rest */
1eca4365 3519 ata_for_each_link(link, ap, EDGE) {
9b1e2658 3520 struct ata_eh_context *ehc = &link->eh_context;
022bdb07 3521
9b1e2658
TH
3522 /* revalidate existing devices and attach new ones */
3523 rc = ata_eh_revalidate_and_attach(link, &dev);
4ae72a1e 3524 if (rc)
022bdb07 3525 goto dev_fail;
022bdb07 3526
633273a3
TH
3527 /* if PMP got attached, return, pmp EH will take care of it */
3528 if (link->device->class == ATA_DEV_PMP) {
3529 ehc->i.action = 0;
3530 return 0;
3531 }
3532
9b1e2658
TH
3533 /* configure transfer mode if necessary */
3534 if (ehc->i.flags & ATA_EHI_SETMODE) {
3535 rc = ata_set_mode(link, &dev);
3536 if (rc)
3537 goto dev_fail;
3538 ehc->i.flags &= ~ATA_EHI_SETMODE;
3539 }
3540
11fc33da
TH
3541 /* If reset has been issued, clear UA to avoid
3542 * disrupting the current users of the device.
3543 */
3544 if (ehc->i.flags & ATA_EHI_DID_RESET) {
1eca4365 3545 ata_for_each_dev(dev, link, ALL) {
11fc33da
TH
3546 if (dev->class != ATA_DEV_ATAPI)
3547 continue;
3548 rc = atapi_eh_clear_ua(dev);
3549 if (rc)
3550 goto dev_fail;
3551 }
3552 }
3553
6013efd8
TH
3554 /* retry flush if necessary */
3555 ata_for_each_dev(dev, link, ALL) {
3556 if (dev->class != ATA_DEV_ATA)
3557 continue;
3558 rc = ata_eh_maybe_retry_flush(dev);
3559 if (rc)
3560 goto dev_fail;
3561 }
3562
11fc33da 3563 /* configure link power saving */
3ec25ebd 3564 if (ehc->i.action & ATA_EH_LPM)
1eca4365 3565 ata_for_each_dev(dev, link, ALL)
ca77329f
KCA
3566 ata_dev_enable_pm(dev, ap->pm_policy);
3567
9b1e2658
TH
3568 /* this link is okay now */
3569 ehc->i.flags = 0;
3570 continue;
022bdb07 3571
2dcb407e 3572dev_fail:
9b1e2658 3573 nr_failed_devs++;
0a2c0f56 3574 ata_eh_handle_dev_fail(dev, rc);
022bdb07 3575
b06ce3e5
TH
3576 if (ap->pflags & ATA_PFLAG_FROZEN) {
3577 /* PMP reset requires working host port.
3578 * Can't retry if it's frozen.
3579 */
071f44b1 3580 if (sata_pmp_attached(ap))
b06ce3e5 3581 goto out;
9b1e2658 3582 break;
b06ce3e5 3583 }
022bdb07
TH
3584 }
3585
0a2c0f56 3586 if (nr_failed_devs)
9b1e2658 3587 goto retry;
022bdb07 3588
9b1e2658
TH
3589 out:
3590 if (rc && r_failed_link)
3591 *r_failed_link = link;
3592
022bdb07
TH
3593 DPRINTK("EXIT, rc=%d\n", rc);
3594 return rc;
3595}
3596
3597/**
3598 * ata_eh_finish - finish up EH
3599 * @ap: host port to finish EH for
3600 *
3601 * Recovery is complete. Clean up EH states and retry or finish
3602 * failed qcs.
3603 *
3604 * LOCKING:
3605 * None.
3606 */
fb7fd614 3607void ata_eh_finish(struct ata_port *ap)
022bdb07
TH
3608{
3609 int tag;
3610
3611 /* retry or finish qcs */
3612 for (tag = 0; tag < ATA_MAX_QUEUE; tag++) {
3613 struct ata_queued_cmd *qc = __ata_qc_from_tag(ap, tag);
3614
3615 if (!(qc->flags & ATA_QCFLAG_FAILED))
3616 continue;
3617
3618 if (qc->err_mask) {
3619 /* FIXME: Once EH migration is complete,
3620 * generate sense data in this function,
3621 * considering both err_mask and tf.
3622 */
03faab78 3623 if (qc->flags & ATA_QCFLAG_RETRY)
022bdb07 3624 ata_eh_qc_retry(qc);
03faab78
TH
3625 else
3626 ata_eh_qc_complete(qc);
022bdb07
TH
3627 } else {
3628 if (qc->flags & ATA_QCFLAG_SENSE_VALID) {
3629 ata_eh_qc_complete(qc);
3630 } else {
3631 /* feed zero TF to sense generation */
3632 memset(&qc->result_tf, 0, sizeof(qc->result_tf));
3633 ata_eh_qc_retry(qc);
3634 }
3635 }
3636 }
da917d69
TH
3637
3638 /* make sure nr_active_links is zero after EH */
3639 WARN_ON(ap->nr_active_links);
3640 ap->nr_active_links = 0;
022bdb07
TH
3641}
3642
3643/**
3644 * ata_do_eh - do standard error handling
3645 * @ap: host port to handle error for
a1efdaba 3646 *
f5914a46 3647 * @prereset: prereset method (can be NULL)
022bdb07
TH
3648 * @softreset: softreset method (can be NULL)
3649 * @hardreset: hardreset method (can be NULL)
3650 * @postreset: postreset method (can be NULL)
3651 *
3652 * Perform standard error handling sequence.
3653 *
3654 * LOCKING:
3655 * Kernel thread context (may sleep).
3656 */
f5914a46
TH
3657void ata_do_eh(struct ata_port *ap, ata_prereset_fn_t prereset,
3658 ata_reset_fn_t softreset, ata_reset_fn_t hardreset,
3659 ata_postreset_fn_t postreset)
022bdb07 3660{
9b1e2658
TH
3661 struct ata_device *dev;
3662 int rc;
3663
3664 ata_eh_autopsy(ap);
3665 ata_eh_report(ap);
3666
3667 rc = ata_eh_recover(ap, prereset, softreset, hardreset, postreset,
3668 NULL);
3669 if (rc) {
1eca4365 3670 ata_for_each_dev(dev, &ap->link, ALL)
9b1e2658
TH
3671 ata_dev_disable(dev);
3672 }
3673
022bdb07
TH
3674 ata_eh_finish(ap);
3675}
500530f6 3676
a1efdaba
TH
3677/**
3678 * ata_std_error_handler - standard error handler
3679 * @ap: host port to handle error for
3680 *
3681 * Standard error handler
3682 *
3683 * LOCKING:
3684 * Kernel thread context (may sleep).
3685 */
3686void ata_std_error_handler(struct ata_port *ap)
3687{
3688 struct ata_port_operations *ops = ap->ops;
3689 ata_reset_fn_t hardreset = ops->hardreset;
3690
57c9efdf 3691 /* ignore built-in hardreset if SCR access is not available */
fe06e5f9 3692 if (hardreset == sata_std_hardreset && !sata_scr_valid(&ap->link))
a1efdaba
TH
3693 hardreset = NULL;
3694
3695 ata_do_eh(ap, ops->prereset, ops->softreset, hardreset, ops->postreset);
3696}
3697
6ffa01d8 3698#ifdef CONFIG_PM
500530f6
TH
3699/**
3700 * ata_eh_handle_port_suspend - perform port suspend operation
3701 * @ap: port to suspend
3702 *
3703 * Suspend @ap.
3704 *
3705 * LOCKING:
3706 * Kernel thread context (may sleep).
3707 */
3708static void ata_eh_handle_port_suspend(struct ata_port *ap)
3709{
3710 unsigned long flags;
3711 int rc = 0;
3712
3713 /* are we suspending? */
3714 spin_lock_irqsave(ap->lock, flags);
3715 if (!(ap->pflags & ATA_PFLAG_PM_PENDING) ||
3716 ap->pm_mesg.event == PM_EVENT_ON) {
3717 spin_unlock_irqrestore(ap->lock, flags);
3718 return;
3719 }
3720 spin_unlock_irqrestore(ap->lock, flags);
3721
3722 WARN_ON(ap->pflags & ATA_PFLAG_SUSPENDED);
3723
64578a3d
TH
3724 /* tell ACPI we're suspending */
3725 rc = ata_acpi_on_suspend(ap);
3726 if (rc)
3727 goto out;
3728
500530f6
TH
3729 /* suspend */
3730 ata_eh_freeze_port(ap);
3731
3732 if (ap->ops->port_suspend)
3733 rc = ap->ops->port_suspend(ap, ap->pm_mesg);
3734
bd3adca5 3735 ata_acpi_set_state(ap, PMSG_SUSPEND);
64578a3d 3736 out:
500530f6
TH
3737 /* report result */
3738 spin_lock_irqsave(ap->lock, flags);
3739
3740 ap->pflags &= ~ATA_PFLAG_PM_PENDING;
3741 if (rc == 0)
3742 ap->pflags |= ATA_PFLAG_SUSPENDED;
64578a3d 3743 else if (ap->pflags & ATA_PFLAG_FROZEN)
500530f6
TH
3744 ata_port_schedule_eh(ap);
3745
3746 if (ap->pm_result) {
3747 *ap->pm_result = rc;
3748 ap->pm_result = NULL;
3749 }
3750
3751 spin_unlock_irqrestore(ap->lock, flags);
3752
3753 return;
3754}
3755
3756/**
3757 * ata_eh_handle_port_resume - perform port resume operation
3758 * @ap: port to resume
3759 *
3760 * Resume @ap.
3761 *
500530f6
TH
3762 * LOCKING:
3763 * Kernel thread context (may sleep).
3764 */
3765static void ata_eh_handle_port_resume(struct ata_port *ap)
3766{
6f9c1ea2
TH
3767 struct ata_link *link;
3768 struct ata_device *dev;
500530f6 3769 unsigned long flags;
9666f400 3770 int rc = 0;
500530f6
TH
3771
3772 /* are we resuming? */
3773 spin_lock_irqsave(ap->lock, flags);
3774 if (!(ap->pflags & ATA_PFLAG_PM_PENDING) ||
3775 ap->pm_mesg.event != PM_EVENT_ON) {
3776 spin_unlock_irqrestore(ap->lock, flags);
3777 return;
3778 }
3779 spin_unlock_irqrestore(ap->lock, flags);
3780
9666f400 3781 WARN_ON(!(ap->pflags & ATA_PFLAG_SUSPENDED));
500530f6 3782
6f9c1ea2
TH
3783 /*
3784 * Error timestamps are in jiffies which doesn't run while
3785 * suspended and PHY events during resume isn't too uncommon.
3786 * When the two are combined, it can lead to unnecessary speed
3787 * downs if the machine is suspended and resumed repeatedly.
3788 * Clear error history.
3789 */
3790 ata_for_each_link(link, ap, HOST_FIRST)
3791 ata_for_each_dev(dev, link, ALL)
3792 ata_ering_clear(&dev->ering);
3793
bd3adca5
SL
3794 ata_acpi_set_state(ap, PMSG_ON);
3795
500530f6
TH
3796 if (ap->ops->port_resume)
3797 rc = ap->ops->port_resume(ap);
3798
6746544c
TH
3799 /* tell ACPI that we're resuming */
3800 ata_acpi_on_resume(ap);
3801
9666f400 3802 /* report result */
500530f6
TH
3803 spin_lock_irqsave(ap->lock, flags);
3804 ap->pflags &= ~(ATA_PFLAG_PM_PENDING | ATA_PFLAG_SUSPENDED);
3805 if (ap->pm_result) {
3806 *ap->pm_result = rc;
3807 ap->pm_result = NULL;
3808 }
3809 spin_unlock_irqrestore(ap->lock, flags);
3810}
6ffa01d8 3811#endif /* CONFIG_PM */