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