1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28#include <linux/kernel.h>
29#include <linux/module.h>
30#include <linux/pci.h>
31#include <linux/init.h>
32#include <linux/list.h>
33#include <linux/mm.h>
34#include <linux/spinlock.h>
35#include <linux/blkdev.h>
36#include <linux/delay.h>
37#include <linux/timer.h>
38#include <linux/time.h>
39#include <linux/interrupt.h>
40#include <linux/completion.h>
41#include <linux/suspend.h>
42#include <linux/workqueue.h>
43#include <linux/scatterlist.h>
44#include <linux/io.h>
45#include <linux/log2.h>
46#include <linux/slab.h>
47#include <linux/glob.h>
48#include <scsi/scsi.h>
49#include <scsi/scsi_cmnd.h>
50#include <scsi/scsi_host.h>
51#include <linux/libata.h>
52#include <asm/byteorder.h>
53#include <asm/unaligned.h>
54#include <linux/cdrom.h>
55#include <linux/ratelimit.h>
56#include <linux/leds.h>
57#include <linux/pm_runtime.h>
58#include <linux/platform_device.h>
59#include <asm/setup.h>
60
61#define CREATE_TRACE_POINTS
62#include <trace/events/libata.h>
63
64#include "libata.h"
65#include "libata-transport.h"
66
67const struct ata_port_operations ata_base_port_ops = {
68 .prereset = ata_std_prereset,
69 .postreset = ata_std_postreset,
70 .error_handler = ata_std_error_handler,
71 .sched_eh = ata_std_sched_eh,
72 .end_eh = ata_std_end_eh,
73};
74
75const struct ata_port_operations sata_port_ops = {
76 .inherits = &ata_base_port_ops,
77
78 .qc_defer = ata_std_qc_defer,
79 .hardreset = sata_std_hardreset,
80};
81EXPORT_SYMBOL_GPL(sata_port_ops);
82
83static unsigned int ata_dev_init_params(struct ata_device *dev,
84 u16 heads, u16 sectors);
85static unsigned int ata_dev_set_xfermode(struct ata_device *dev);
86static void ata_dev_xfermask(struct ata_device *dev);
87static unsigned long ata_dev_blacklisted(const struct ata_device *dev);
88
89atomic_t ata_print_id = ATOMIC_INIT(0);
90
91#ifdef CONFIG_ATA_FORCE
92struct ata_force_param {
93 const char *name;
94 u8 cbl;
95 u8 spd_limit;
96 unsigned long xfer_mask;
97 unsigned int horkage_on;
98 unsigned int horkage_off;
99 u16 lflags;
100};
101
102struct ata_force_ent {
103 int port;
104 int device;
105 struct ata_force_param param;
106};
107
108static struct ata_force_ent *ata_force_tbl;
109static int ata_force_tbl_size;
110
111static char ata_force_param_buf[COMMAND_LINE_SIZE] __initdata;
112
113module_param_string(force, ata_force_param_buf, sizeof(ata_force_param_buf), 0);
114MODULE_PARM_DESC(force, "Force ATA configurations including cable type, link speed and transfer mode (see Documentation/admin-guide/kernel-parameters.rst for details)");
115#endif
116
117static int atapi_enabled = 1;
118module_param(atapi_enabled, int, 0444);
119MODULE_PARM_DESC(atapi_enabled, "Enable discovery of ATAPI devices (0=off, 1=on [default])");
120
121static int atapi_dmadir = 0;
122module_param(atapi_dmadir, int, 0444);
123MODULE_PARM_DESC(atapi_dmadir, "Enable ATAPI DMADIR bridge support (0=off [default], 1=on)");
124
125int atapi_passthru16 = 1;
126module_param(atapi_passthru16, int, 0444);
127MODULE_PARM_DESC(atapi_passthru16, "Enable ATA_16 passthru for ATAPI devices (0=off, 1=on [default])");
128
129int libata_fua = 0;
130module_param_named(fua, libata_fua, int, 0444);
131MODULE_PARM_DESC(fua, "FUA support (0=off [default], 1=on)");
132
133static int ata_ignore_hpa;
134module_param_named(ignore_hpa, ata_ignore_hpa, int, 0644);
135MODULE_PARM_DESC(ignore_hpa, "Ignore HPA limit (0=keep BIOS limits, 1=ignore limits, using full disk)");
136
137static int libata_dma_mask = ATA_DMA_MASK_ATA|ATA_DMA_MASK_ATAPI|ATA_DMA_MASK_CFA;
138module_param_named(dma, libata_dma_mask, int, 0444);
139MODULE_PARM_DESC(dma, "DMA enable/disable (0x1==ATA, 0x2==ATAPI, 0x4==CF)");
140
141static int ata_probe_timeout;
142module_param(ata_probe_timeout, int, 0444);
143MODULE_PARM_DESC(ata_probe_timeout, "Set ATA probing timeout (seconds)");
144
145int libata_noacpi = 0;
146module_param_named(noacpi, libata_noacpi, int, 0444);
147MODULE_PARM_DESC(noacpi, "Disable the use of ACPI in probe/suspend/resume (0=off [default], 1=on)");
148
149int libata_allow_tpm = 0;
150module_param_named(allow_tpm, libata_allow_tpm, int, 0444);
151MODULE_PARM_DESC(allow_tpm, "Permit the use of TPM commands (0=off [default], 1=on)");
152
153static int atapi_an;
154module_param(atapi_an, int, 0444);
155MODULE_PARM_DESC(atapi_an, "Enable ATAPI AN media presence notification (0=0ff [default], 1=on)");
156
157MODULE_AUTHOR("Jeff Garzik");
158MODULE_DESCRIPTION("Library module for ATA devices");
159MODULE_LICENSE("GPL");
160MODULE_VERSION(DRV_VERSION);
161
162
163static bool ata_sstatus_online(u32 sstatus)
164{
165 return (sstatus & 0xf) == 0x3;
166}
167
168
169
170
171
172
173
174
175
176
177
178
179
180struct ata_link *ata_link_next(struct ata_link *link, struct ata_port *ap,
181 enum ata_link_iter_mode mode)
182{
183 BUG_ON(mode != ATA_LITER_EDGE &&
184 mode != ATA_LITER_PMP_FIRST && mode != ATA_LITER_HOST_FIRST);
185
186
187 if (!link)
188 switch (mode) {
189 case ATA_LITER_EDGE:
190 case ATA_LITER_PMP_FIRST:
191 if (sata_pmp_attached(ap))
192 return ap->pmp_link;
193 fallthrough;
194 case ATA_LITER_HOST_FIRST:
195 return &ap->link;
196 }
197
198
199 if (link == &ap->link)
200 switch (mode) {
201 case ATA_LITER_HOST_FIRST:
202 if (sata_pmp_attached(ap))
203 return ap->pmp_link;
204 fallthrough;
205 case ATA_LITER_PMP_FIRST:
206 if (unlikely(ap->slave_link))
207 return ap->slave_link;
208 fallthrough;
209 case ATA_LITER_EDGE:
210 return NULL;
211 }
212
213
214 if (unlikely(link == ap->slave_link))
215 return NULL;
216
217
218 if (++link < ap->pmp_link + ap->nr_pmp_links)
219 return link;
220
221 if (mode == ATA_LITER_PMP_FIRST)
222 return &ap->link;
223
224 return NULL;
225}
226EXPORT_SYMBOL_GPL(ata_link_next);
227
228
229
230
231
232
233
234
235
236
237
238
239
240struct ata_device *ata_dev_next(struct ata_device *dev, struct ata_link *link,
241 enum ata_dev_iter_mode mode)
242{
243 BUG_ON(mode != ATA_DITER_ENABLED && mode != ATA_DITER_ENABLED_REVERSE &&
244 mode != ATA_DITER_ALL && mode != ATA_DITER_ALL_REVERSE);
245
246
247 if (!dev)
248 switch (mode) {
249 case ATA_DITER_ENABLED:
250 case ATA_DITER_ALL:
251 dev = link->device;
252 goto check;
253 case ATA_DITER_ENABLED_REVERSE:
254 case ATA_DITER_ALL_REVERSE:
255 dev = link->device + ata_link_max_devices(link) - 1;
256 goto check;
257 }
258
259 next:
260
261 switch (mode) {
262 case ATA_DITER_ENABLED:
263 case ATA_DITER_ALL:
264 if (++dev < link->device + ata_link_max_devices(link))
265 goto check;
266 return NULL;
267 case ATA_DITER_ENABLED_REVERSE:
268 case ATA_DITER_ALL_REVERSE:
269 if (--dev >= link->device)
270 goto check;
271 return NULL;
272 }
273
274 check:
275 if ((mode == ATA_DITER_ENABLED || mode == ATA_DITER_ENABLED_REVERSE) &&
276 !ata_dev_enabled(dev))
277 goto next;
278 return dev;
279}
280EXPORT_SYMBOL_GPL(ata_dev_next);
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296struct ata_link *ata_dev_phys_link(struct ata_device *dev)
297{
298 struct ata_port *ap = dev->link->ap;
299
300 if (!ap->slave_link)
301 return dev->link;
302 if (!dev->devno)
303 return &ap->link;
304 return ap->slave_link;
305}
306
307#ifdef CONFIG_ATA_FORCE
308
309
310
311
312
313
314
315
316
317
318
319
320
321void ata_force_cbl(struct ata_port *ap)
322{
323 int i;
324
325 for (i = ata_force_tbl_size - 1; i >= 0; i--) {
326 const struct ata_force_ent *fe = &ata_force_tbl[i];
327
328 if (fe->port != -1 && fe->port != ap->print_id)
329 continue;
330
331 if (fe->param.cbl == ATA_CBL_NONE)
332 continue;
333
334 ap->cbl = fe->param.cbl;
335 ata_port_notice(ap, "FORCE: cable set to %s\n", fe->param.name);
336 return;
337 }
338}
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356static void ata_force_link_limits(struct ata_link *link)
357{
358 bool did_spd = false;
359 int linkno = link->pmp;
360 int i;
361
362 if (ata_is_host_link(link))
363 linkno += 15;
364
365 for (i = ata_force_tbl_size - 1; i >= 0; i--) {
366 const struct ata_force_ent *fe = &ata_force_tbl[i];
367
368 if (fe->port != -1 && fe->port != link->ap->print_id)
369 continue;
370
371 if (fe->device != -1 && fe->device != linkno)
372 continue;
373
374
375 if (!did_spd && fe->param.spd_limit) {
376 link->hw_sata_spd_limit = (1 << fe->param.spd_limit) - 1;
377 ata_link_notice(link, "FORCE: PHY spd limit set to %s\n",
378 fe->param.name);
379 did_spd = true;
380 }
381
382
383 if (fe->param.lflags) {
384 link->flags |= fe->param.lflags;
385 ata_link_notice(link,
386 "FORCE: link flag 0x%x forced -> 0x%x\n",
387 fe->param.lflags, link->flags);
388 }
389 }
390}
391
392
393
394
395
396
397
398
399
400
401
402
403static void ata_force_xfermask(struct ata_device *dev)
404{
405 int devno = dev->link->pmp + dev->devno;
406 int alt_devno = devno;
407 int i;
408
409
410 if (ata_is_host_link(dev->link))
411 alt_devno += 15;
412
413 for (i = ata_force_tbl_size - 1; i >= 0; i--) {
414 const struct ata_force_ent *fe = &ata_force_tbl[i];
415 unsigned long pio_mask, mwdma_mask, udma_mask;
416
417 if (fe->port != -1 && fe->port != dev->link->ap->print_id)
418 continue;
419
420 if (fe->device != -1 && fe->device != devno &&
421 fe->device != alt_devno)
422 continue;
423
424 if (!fe->param.xfer_mask)
425 continue;
426
427 ata_unpack_xfermask(fe->param.xfer_mask,
428 &pio_mask, &mwdma_mask, &udma_mask);
429 if (udma_mask)
430 dev->udma_mask = udma_mask;
431 else if (mwdma_mask) {
432 dev->udma_mask = 0;
433 dev->mwdma_mask = mwdma_mask;
434 } else {
435 dev->udma_mask = 0;
436 dev->mwdma_mask = 0;
437 dev->pio_mask = pio_mask;
438 }
439
440 ata_dev_notice(dev, "FORCE: xfer_mask set to %s\n",
441 fe->param.name);
442 return;
443 }
444}
445
446
447
448
449
450
451
452
453
454
455
456
457static void ata_force_horkage(struct ata_device *dev)
458{
459 int devno = dev->link->pmp + dev->devno;
460 int alt_devno = devno;
461 int i;
462
463
464 if (ata_is_host_link(dev->link))
465 alt_devno += 15;
466
467 for (i = 0; i < ata_force_tbl_size; i++) {
468 const struct ata_force_ent *fe = &ata_force_tbl[i];
469
470 if (fe->port != -1 && fe->port != dev->link->ap->print_id)
471 continue;
472
473 if (fe->device != -1 && fe->device != devno &&
474 fe->device != alt_devno)
475 continue;
476
477 if (!(~dev->horkage & fe->param.horkage_on) &&
478 !(dev->horkage & fe->param.horkage_off))
479 continue;
480
481 dev->horkage |= fe->param.horkage_on;
482 dev->horkage &= ~fe->param.horkage_off;
483
484 ata_dev_notice(dev, "FORCE: horkage modified (%s)\n",
485 fe->param.name);
486 }
487}
488#else
489static inline void ata_force_link_limits(struct ata_link *link) { }
490static inline void ata_force_xfermask(struct ata_device *dev) { }
491static inline void ata_force_horkage(struct ata_device *dev) { }
492#endif
493
494
495
496
497
498
499
500
501
502
503
504
505
506int atapi_cmd_type(u8 opcode)
507{
508 switch (opcode) {
509 case GPCMD_READ_10:
510 case GPCMD_READ_12:
511 return ATAPI_READ;
512
513 case GPCMD_WRITE_10:
514 case GPCMD_WRITE_12:
515 case GPCMD_WRITE_AND_VERIFY_10:
516 return ATAPI_WRITE;
517
518 case GPCMD_READ_CD:
519 case GPCMD_READ_CD_MSF:
520 return ATAPI_READ_CD;
521
522 case ATA_16:
523 case ATA_12:
524 if (atapi_passthru16)
525 return ATAPI_PASS_THRU;
526 fallthrough;
527 default:
528 return ATAPI_MISC;
529 }
530}
531EXPORT_SYMBOL_GPL(atapi_cmd_type);
532
533static const u8 ata_rw_cmds[] = {
534
535 ATA_CMD_READ_MULTI,
536 ATA_CMD_WRITE_MULTI,
537 ATA_CMD_READ_MULTI_EXT,
538 ATA_CMD_WRITE_MULTI_EXT,
539 0,
540 0,
541 0,
542 ATA_CMD_WRITE_MULTI_FUA_EXT,
543
544 ATA_CMD_PIO_READ,
545 ATA_CMD_PIO_WRITE,
546 ATA_CMD_PIO_READ_EXT,
547 ATA_CMD_PIO_WRITE_EXT,
548 0,
549 0,
550 0,
551 0,
552
553 ATA_CMD_READ,
554 ATA_CMD_WRITE,
555 ATA_CMD_READ_EXT,
556 ATA_CMD_WRITE_EXT,
557 0,
558 0,
559 0,
560 ATA_CMD_WRITE_FUA_EXT
561};
562
563
564
565
566
567
568
569
570
571
572
573
574static int ata_rwcmd_protocol(struct ata_taskfile *tf, struct ata_device *dev)
575{
576 u8 cmd;
577
578 int index, fua, lba48, write;
579
580 fua = (tf->flags & ATA_TFLAG_FUA) ? 4 : 0;
581 lba48 = (tf->flags & ATA_TFLAG_LBA48) ? 2 : 0;
582 write = (tf->flags & ATA_TFLAG_WRITE) ? 1 : 0;
583
584 if (dev->flags & ATA_DFLAG_PIO) {
585 tf->protocol = ATA_PROT_PIO;
586 index = dev->multi_count ? 0 : 8;
587 } else if (lba48 && (dev->link->ap->flags & ATA_FLAG_PIO_LBA48)) {
588
589 tf->protocol = ATA_PROT_PIO;
590 index = dev->multi_count ? 0 : 8;
591 } else {
592 tf->protocol = ATA_PROT_DMA;
593 index = 16;
594 }
595
596 cmd = ata_rw_cmds[index + fua + lba48 + write];
597 if (cmd) {
598 tf->command = cmd;
599 return 0;
600 }
601 return -1;
602}
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619u64 ata_tf_read_block(const struct ata_taskfile *tf, struct ata_device *dev)
620{
621 u64 block = 0;
622
623 if (tf->flags & ATA_TFLAG_LBA) {
624 if (tf->flags & ATA_TFLAG_LBA48) {
625 block |= (u64)tf->hob_lbah << 40;
626 block |= (u64)tf->hob_lbam << 32;
627 block |= (u64)tf->hob_lbal << 24;
628 } else
629 block |= (tf->device & 0xf) << 24;
630
631 block |= tf->lbah << 16;
632 block |= tf->lbam << 8;
633 block |= tf->lbal;
634 } else {
635 u32 cyl, head, sect;
636
637 cyl = tf->lbam | (tf->lbah << 8);
638 head = tf->device & 0xf;
639 sect = tf->lbal;
640
641 if (!sect) {
642 ata_dev_warn(dev,
643 "device reported invalid CHS sector 0\n");
644 return U64_MAX;
645 }
646
647 block = (cyl * dev->heads + head) * dev->sectors + sect - 1;
648 }
649
650 return block;
651}
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674int ata_build_rw_tf(struct ata_taskfile *tf, struct ata_device *dev,
675 u64 block, u32 n_block, unsigned int tf_flags,
676 unsigned int tag, int class)
677{
678 tf->flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
679 tf->flags |= tf_flags;
680
681 if (ata_ncq_enabled(dev) && !ata_tag_internal(tag)) {
682
683 if (!lba_48_ok(block, n_block))
684 return -ERANGE;
685
686 tf->protocol = ATA_PROT_NCQ;
687 tf->flags |= ATA_TFLAG_LBA | ATA_TFLAG_LBA48;
688
689 if (tf->flags & ATA_TFLAG_WRITE)
690 tf->command = ATA_CMD_FPDMA_WRITE;
691 else
692 tf->command = ATA_CMD_FPDMA_READ;
693
694 tf->nsect = tag << 3;
695 tf->hob_feature = (n_block >> 8) & 0xff;
696 tf->feature = n_block & 0xff;
697
698 tf->hob_lbah = (block >> 40) & 0xff;
699 tf->hob_lbam = (block >> 32) & 0xff;
700 tf->hob_lbal = (block >> 24) & 0xff;
701 tf->lbah = (block >> 16) & 0xff;
702 tf->lbam = (block >> 8) & 0xff;
703 tf->lbal = block & 0xff;
704
705 tf->device = ATA_LBA;
706 if (tf->flags & ATA_TFLAG_FUA)
707 tf->device |= 1 << 7;
708
709 if (dev->flags & ATA_DFLAG_NCQ_PRIO) {
710 if (class == IOPRIO_CLASS_RT)
711 tf->hob_nsect |= ATA_PRIO_HIGH <<
712 ATA_SHIFT_PRIO;
713 }
714 } else if (dev->flags & ATA_DFLAG_LBA) {
715 tf->flags |= ATA_TFLAG_LBA;
716
717 if (lba_28_ok(block, n_block)) {
718
719 tf->device |= (block >> 24) & 0xf;
720 } else if (lba_48_ok(block, n_block)) {
721 if (!(dev->flags & ATA_DFLAG_LBA48))
722 return -ERANGE;
723
724
725 tf->flags |= ATA_TFLAG_LBA48;
726
727 tf->hob_nsect = (n_block >> 8) & 0xff;
728
729 tf->hob_lbah = (block >> 40) & 0xff;
730 tf->hob_lbam = (block >> 32) & 0xff;
731 tf->hob_lbal = (block >> 24) & 0xff;
732 } else
733
734 return -ERANGE;
735
736 if (unlikely(ata_rwcmd_protocol(tf, dev) < 0))
737 return -EINVAL;
738
739 tf->nsect = n_block & 0xff;
740
741 tf->lbah = (block >> 16) & 0xff;
742 tf->lbam = (block >> 8) & 0xff;
743 tf->lbal = block & 0xff;
744
745 tf->device |= ATA_LBA;
746 } else {
747
748 u32 sect, head, cyl, track;
749
750
751 if (!lba_28_ok(block, n_block))
752 return -ERANGE;
753
754 if (unlikely(ata_rwcmd_protocol(tf, dev) < 0))
755 return -EINVAL;
756
757
758 track = (u32)block / dev->sectors;
759 cyl = track / dev->heads;
760 head = track % dev->heads;
761 sect = (u32)block % dev->sectors + 1;
762
763 DPRINTK("block %u track %u cyl %u head %u sect %u\n",
764 (u32)block, track, cyl, head, sect);
765
766
767
768
769
770 if ((cyl >> 16) || (head >> 4) || (sect >> 8) || (!sect))
771 return -ERANGE;
772
773 tf->nsect = n_block & 0xff;
774 tf->lbal = sect;
775 tf->lbam = cyl;
776 tf->lbah = cyl >> 8;
777 tf->device |= head;
778 }
779
780 return 0;
781}
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798unsigned long ata_pack_xfermask(unsigned long pio_mask,
799 unsigned long mwdma_mask,
800 unsigned long udma_mask)
801{
802 return ((pio_mask << ATA_SHIFT_PIO) & ATA_MASK_PIO) |
803 ((mwdma_mask << ATA_SHIFT_MWDMA) & ATA_MASK_MWDMA) |
804 ((udma_mask << ATA_SHIFT_UDMA) & ATA_MASK_UDMA);
805}
806EXPORT_SYMBOL_GPL(ata_pack_xfermask);
807
808
809
810
811
812
813
814
815
816
817
818void ata_unpack_xfermask(unsigned long xfer_mask, unsigned long *pio_mask,
819 unsigned long *mwdma_mask, unsigned long *udma_mask)
820{
821 if (pio_mask)
822 *pio_mask = (xfer_mask & ATA_MASK_PIO) >> ATA_SHIFT_PIO;
823 if (mwdma_mask)
824 *mwdma_mask = (xfer_mask & ATA_MASK_MWDMA) >> ATA_SHIFT_MWDMA;
825 if (udma_mask)
826 *udma_mask = (xfer_mask & ATA_MASK_UDMA) >> ATA_SHIFT_UDMA;
827}
828
829static const struct ata_xfer_ent {
830 int shift, bits;
831 u8 base;
832} ata_xfer_tbl[] = {
833 { ATA_SHIFT_PIO, ATA_NR_PIO_MODES, XFER_PIO_0 },
834 { ATA_SHIFT_MWDMA, ATA_NR_MWDMA_MODES, XFER_MW_DMA_0 },
835 { ATA_SHIFT_UDMA, ATA_NR_UDMA_MODES, XFER_UDMA_0 },
836 { -1, },
837};
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852u8 ata_xfer_mask2mode(unsigned long xfer_mask)
853{
854 int highbit = fls(xfer_mask) - 1;
855 const struct ata_xfer_ent *ent;
856
857 for (ent = ata_xfer_tbl; ent->shift >= 0; ent++)
858 if (highbit >= ent->shift && highbit < ent->shift + ent->bits)
859 return ent->base + highbit - ent->shift;
860 return 0xff;
861}
862EXPORT_SYMBOL_GPL(ata_xfer_mask2mode);
863
864
865
866
867
868
869
870
871
872
873
874
875
876unsigned long ata_xfer_mode2mask(u8 xfer_mode)
877{
878 const struct ata_xfer_ent *ent;
879
880 for (ent = ata_xfer_tbl; ent->shift >= 0; ent++)
881 if (xfer_mode >= ent->base && xfer_mode < ent->base + ent->bits)
882 return ((2 << (ent->shift + xfer_mode - ent->base)) - 1)
883 & ~((1 << ent->shift) - 1);
884 return 0;
885}
886EXPORT_SYMBOL_GPL(ata_xfer_mode2mask);
887
888
889
890
891
892
893
894
895
896
897
898
899
900int ata_xfer_mode2shift(unsigned long xfer_mode)
901{
902 const struct ata_xfer_ent *ent;
903
904 for (ent = ata_xfer_tbl; ent->shift >= 0; ent++)
905 if (xfer_mode >= ent->base && xfer_mode < ent->base + ent->bits)
906 return ent->shift;
907 return -1;
908}
909EXPORT_SYMBOL_GPL(ata_xfer_mode2shift);
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925const char *ata_mode_string(unsigned long xfer_mask)
926{
927 static const char * const xfer_mode_str[] = {
928 "PIO0",
929 "PIO1",
930 "PIO2",
931 "PIO3",
932 "PIO4",
933 "PIO5",
934 "PIO6",
935 "MWDMA0",
936 "MWDMA1",
937 "MWDMA2",
938 "MWDMA3",
939 "MWDMA4",
940 "UDMA/16",
941 "UDMA/25",
942 "UDMA/33",
943 "UDMA/44",
944 "UDMA/66",
945 "UDMA/100",
946 "UDMA/133",
947 "UDMA7",
948 };
949 int highbit;
950
951 highbit = fls(xfer_mask) - 1;
952 if (highbit >= 0 && highbit < ARRAY_SIZE(xfer_mode_str))
953 return xfer_mode_str[highbit];
954 return "<n/a>";
955}
956EXPORT_SYMBOL_GPL(ata_mode_string);
957
958const char *sata_spd_string(unsigned int spd)
959{
960 static const char * const spd_str[] = {
961 "1.5 Gbps",
962 "3.0 Gbps",
963 "6.0 Gbps",
964 };
965
966 if (spd == 0 || (spd - 1) >= ARRAY_SIZE(spd_str))
967 return "<unknown>";
968 return spd_str[spd - 1];
969}
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986unsigned int ata_dev_classify(const struct ata_taskfile *tf)
987{
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009 if ((tf->lbam == 0) && (tf->lbah == 0)) {
1010 DPRINTK("found ATA device by sig\n");
1011 return ATA_DEV_ATA;
1012 }
1013
1014 if ((tf->lbam == 0x14) && (tf->lbah == 0xeb)) {
1015 DPRINTK("found ATAPI device by sig\n");
1016 return ATA_DEV_ATAPI;
1017 }
1018
1019 if ((tf->lbam == 0x69) && (tf->lbah == 0x96)) {
1020 DPRINTK("found PMP device by sig\n");
1021 return ATA_DEV_PMP;
1022 }
1023
1024 if ((tf->lbam == 0x3c) && (tf->lbah == 0xc3)) {
1025 DPRINTK("found SEMB device by sig (could be ATA device)\n");
1026 return ATA_DEV_SEMB;
1027 }
1028
1029 if ((tf->lbam == 0xcd) && (tf->lbah == 0xab)) {
1030 DPRINTK("found ZAC device by sig\n");
1031 return ATA_DEV_ZAC;
1032 }
1033
1034 DPRINTK("unknown device\n");
1035 return ATA_DEV_UNKNOWN;
1036}
1037EXPORT_SYMBOL_GPL(ata_dev_classify);
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054void ata_id_string(const u16 *id, unsigned char *s,
1055 unsigned int ofs, unsigned int len)
1056{
1057 unsigned int c;
1058
1059 BUG_ON(len & 1);
1060
1061 while (len > 0) {
1062 c = id[ofs] >> 8;
1063 *s = c;
1064 s++;
1065
1066 c = id[ofs] & 0xff;
1067 *s = c;
1068 s++;
1069
1070 ofs++;
1071 len -= 2;
1072 }
1073}
1074EXPORT_SYMBOL_GPL(ata_id_string);
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090void ata_id_c_string(const u16 *id, unsigned char *s,
1091 unsigned int ofs, unsigned int len)
1092{
1093 unsigned char *p;
1094
1095 ata_id_string(id, s, ofs, len - 1);
1096
1097 p = s + strnlen(s, len - 1);
1098 while (p > s && p[-1] == ' ')
1099 p--;
1100 *p = '\0';
1101}
1102EXPORT_SYMBOL_GPL(ata_id_c_string);
1103
1104static u64 ata_id_n_sectors(const u16 *id)
1105{
1106 if (ata_id_has_lba(id)) {
1107 if (ata_id_has_lba48(id))
1108 return ata_id_u64(id, ATA_ID_LBA_CAPACITY_2);
1109 else
1110 return ata_id_u32(id, ATA_ID_LBA_CAPACITY);
1111 } else {
1112 if (ata_id_current_chs_valid(id))
1113 return id[ATA_ID_CUR_CYLS] * id[ATA_ID_CUR_HEADS] *
1114 id[ATA_ID_CUR_SECTORS];
1115 else
1116 return id[ATA_ID_CYLS] * id[ATA_ID_HEADS] *
1117 id[ATA_ID_SECTORS];
1118 }
1119}
1120
1121u64 ata_tf_to_lba48(const struct ata_taskfile *tf)
1122{
1123 u64 sectors = 0;
1124
1125 sectors |= ((u64)(tf->hob_lbah & 0xff)) << 40;
1126 sectors |= ((u64)(tf->hob_lbam & 0xff)) << 32;
1127 sectors |= ((u64)(tf->hob_lbal & 0xff)) << 24;
1128 sectors |= (tf->lbah & 0xff) << 16;
1129 sectors |= (tf->lbam & 0xff) << 8;
1130 sectors |= (tf->lbal & 0xff);
1131
1132 return sectors;
1133}
1134
1135u64 ata_tf_to_lba(const struct ata_taskfile *tf)
1136{
1137 u64 sectors = 0;
1138
1139 sectors |= (tf->device & 0x0f) << 24;
1140 sectors |= (tf->lbah & 0xff) << 16;
1141 sectors |= (tf->lbam & 0xff) << 8;
1142 sectors |= (tf->lbal & 0xff);
1143
1144 return sectors;
1145}
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159static int ata_read_native_max_address(struct ata_device *dev, u64 *max_sectors)
1160{
1161 unsigned int err_mask;
1162 struct ata_taskfile tf;
1163 int lba48 = ata_id_has_lba48(dev->id);
1164
1165 ata_tf_init(dev, &tf);
1166
1167
1168 tf.flags |= ATA_TFLAG_DEVICE | ATA_TFLAG_ISADDR;
1169
1170 if (lba48) {
1171 tf.command = ATA_CMD_READ_NATIVE_MAX_EXT;
1172 tf.flags |= ATA_TFLAG_LBA48;
1173 } else
1174 tf.command = ATA_CMD_READ_NATIVE_MAX;
1175
1176 tf.protocol = ATA_PROT_NODATA;
1177 tf.device |= ATA_LBA;
1178
1179 err_mask = ata_exec_internal(dev, &tf, NULL, DMA_NONE, NULL, 0, 0);
1180 if (err_mask) {
1181 ata_dev_warn(dev,
1182 "failed to read native max address (err_mask=0x%x)\n",
1183 err_mask);
1184 if (err_mask == AC_ERR_DEV && (tf.feature & ATA_ABORTED))
1185 return -EACCES;
1186 return -EIO;
1187 }
1188
1189 if (lba48)
1190 *max_sectors = ata_tf_to_lba48(&tf) + 1;
1191 else
1192 *max_sectors = ata_tf_to_lba(&tf) + 1;
1193 if (dev->horkage & ATA_HORKAGE_HPA_SIZE)
1194 (*max_sectors)--;
1195 return 0;
1196}
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210static int ata_set_max_sectors(struct ata_device *dev, u64 new_sectors)
1211{
1212 unsigned int err_mask;
1213 struct ata_taskfile tf;
1214 int lba48 = ata_id_has_lba48(dev->id);
1215
1216 new_sectors--;
1217
1218 ata_tf_init(dev, &tf);
1219
1220 tf.flags |= ATA_TFLAG_DEVICE | ATA_TFLAG_ISADDR;
1221
1222 if (lba48) {
1223 tf.command = ATA_CMD_SET_MAX_EXT;
1224 tf.flags |= ATA_TFLAG_LBA48;
1225
1226 tf.hob_lbal = (new_sectors >> 24) & 0xff;
1227 tf.hob_lbam = (new_sectors >> 32) & 0xff;
1228 tf.hob_lbah = (new_sectors >> 40) & 0xff;
1229 } else {
1230 tf.command = ATA_CMD_SET_MAX;
1231
1232 tf.device |= (new_sectors >> 24) & 0xf;
1233 }
1234
1235 tf.protocol = ATA_PROT_NODATA;
1236 tf.device |= ATA_LBA;
1237
1238 tf.lbal = (new_sectors >> 0) & 0xff;
1239 tf.lbam = (new_sectors >> 8) & 0xff;
1240 tf.lbah = (new_sectors >> 16) & 0xff;
1241
1242 err_mask = ata_exec_internal(dev, &tf, NULL, DMA_NONE, NULL, 0, 0);
1243 if (err_mask) {
1244 ata_dev_warn(dev,
1245 "failed to set max address (err_mask=0x%x)\n",
1246 err_mask);
1247 if (err_mask == AC_ERR_DEV &&
1248 (tf.feature & (ATA_ABORTED | ATA_IDNF)))
1249 return -EACCES;
1250 return -EIO;
1251 }
1252
1253 return 0;
1254}
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267static int ata_hpa_resize(struct ata_device *dev)
1268{
1269 struct ata_eh_context *ehc = &dev->link->eh_context;
1270 int print_info = ehc->i.flags & ATA_EHI_PRINTINFO;
1271 bool unlock_hpa = ata_ignore_hpa || dev->flags & ATA_DFLAG_UNLOCK_HPA;
1272 u64 sectors = ata_id_n_sectors(dev->id);
1273 u64 native_sectors;
1274 int rc;
1275
1276
1277 if ((dev->class != ATA_DEV_ATA && dev->class != ATA_DEV_ZAC) ||
1278 !ata_id_has_lba(dev->id) || !ata_id_hpa_enabled(dev->id) ||
1279 (dev->horkage & ATA_HORKAGE_BROKEN_HPA))
1280 return 0;
1281
1282
1283 rc = ata_read_native_max_address(dev, &native_sectors);
1284 if (rc) {
1285
1286
1287
1288 if (rc == -EACCES || !unlock_hpa) {
1289 ata_dev_warn(dev,
1290 "HPA support seems broken, skipping HPA handling\n");
1291 dev->horkage |= ATA_HORKAGE_BROKEN_HPA;
1292
1293
1294 if (rc == -EACCES)
1295 rc = 0;
1296 }
1297
1298 return rc;
1299 }
1300 dev->n_native_sectors = native_sectors;
1301
1302
1303 if (native_sectors <= sectors || !unlock_hpa) {
1304 if (!print_info || native_sectors == sectors)
1305 return 0;
1306
1307 if (native_sectors > sectors)
1308 ata_dev_info(dev,
1309 "HPA detected: current %llu, native %llu\n",
1310 (unsigned long long)sectors,
1311 (unsigned long long)native_sectors);
1312 else if (native_sectors < sectors)
1313 ata_dev_warn(dev,
1314 "native sectors (%llu) is smaller than sectors (%llu)\n",
1315 (unsigned long long)native_sectors,
1316 (unsigned long long)sectors);
1317 return 0;
1318 }
1319
1320
1321 rc = ata_set_max_sectors(dev, native_sectors);
1322 if (rc == -EACCES) {
1323
1324 ata_dev_warn(dev,
1325 "device aborted resize (%llu -> %llu), skipping HPA handling\n",
1326 (unsigned long long)sectors,
1327 (unsigned long long)native_sectors);
1328 dev->horkage |= ATA_HORKAGE_BROKEN_HPA;
1329 return 0;
1330 } else if (rc)
1331 return rc;
1332
1333
1334 rc = ata_dev_reread_id(dev, 0);
1335 if (rc) {
1336 ata_dev_err(dev,
1337 "failed to re-read IDENTIFY data after HPA resizing\n");
1338 return rc;
1339 }
1340
1341 if (print_info) {
1342 u64 new_sectors = ata_id_n_sectors(dev->id);
1343 ata_dev_info(dev,
1344 "HPA unlocked: %llu -> %llu, native %llu\n",
1345 (unsigned long long)sectors,
1346 (unsigned long long)new_sectors,
1347 (unsigned long long)native_sectors);
1348 }
1349
1350 return 0;
1351}
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364static inline void ata_dump_id(const u16 *id)
1365{
1366 DPRINTK("49==0x%04x "
1367 "53==0x%04x "
1368 "63==0x%04x "
1369 "64==0x%04x "
1370 "75==0x%04x \n",
1371 id[49],
1372 id[53],
1373 id[63],
1374 id[64],
1375 id[75]);
1376 DPRINTK("80==0x%04x "
1377 "81==0x%04x "
1378 "82==0x%04x "
1379 "83==0x%04x "
1380 "84==0x%04x \n",
1381 id[80],
1382 id[81],
1383 id[82],
1384 id[83],
1385 id[84]);
1386 DPRINTK("88==0x%04x "
1387 "93==0x%04x\n",
1388 id[88],
1389 id[93]);
1390}
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407unsigned long ata_id_xfermask(const u16 *id)
1408{
1409 unsigned long pio_mask, mwdma_mask, udma_mask;
1410
1411
1412 if (id[ATA_ID_FIELD_VALID] & (1 << 1)) {
1413 pio_mask = id[ATA_ID_PIO_MODES] & 0x03;
1414 pio_mask <<= 3;
1415 pio_mask |= 0x7;
1416 } else {
1417
1418
1419
1420
1421 u8 mode = (id[ATA_ID_OLD_PIO_MODES] >> 8) & 0xFF;
1422 if (mode < 5)
1423 pio_mask = (2 << mode) - 1;
1424 else
1425 pio_mask = 1;
1426
1427
1428
1429
1430
1431
1432
1433 }
1434
1435 mwdma_mask = id[ATA_ID_MWDMA_MODES] & 0x07;
1436
1437 if (ata_id_is_cfa(id)) {
1438
1439
1440
1441 int pio = (id[ATA_ID_CFA_MODES] >> 0) & 0x7;
1442 int dma = (id[ATA_ID_CFA_MODES] >> 3) & 0x7;
1443
1444 if (pio)
1445 pio_mask |= (1 << 5);
1446 if (pio > 1)
1447 pio_mask |= (1 << 6);
1448 if (dma)
1449 mwdma_mask |= (1 << 3);
1450 if (dma > 1)
1451 mwdma_mask |= (1 << 4);
1452 }
1453
1454 udma_mask = 0;
1455 if (id[ATA_ID_FIELD_VALID] & (1 << 2))
1456 udma_mask = id[ATA_ID_UDMA_MODES] & 0xff;
1457
1458 return ata_pack_xfermask(pio_mask, mwdma_mask, udma_mask);
1459}
1460EXPORT_SYMBOL_GPL(ata_id_xfermask);
1461
1462static void ata_qc_complete_internal(struct ata_queued_cmd *qc)
1463{
1464 struct completion *waiting = qc->private_data;
1465
1466 complete(waiting);
1467}
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491unsigned ata_exec_internal_sg(struct ata_device *dev,
1492 struct ata_taskfile *tf, const u8 *cdb,
1493 int dma_dir, struct scatterlist *sgl,
1494 unsigned int n_elem, unsigned long timeout)
1495{
1496 struct ata_link *link = dev->link;
1497 struct ata_port *ap = link->ap;
1498 u8 command = tf->command;
1499 int auto_timeout = 0;
1500 struct ata_queued_cmd *qc;
1501 unsigned int preempted_tag;
1502 u32 preempted_sactive;
1503 u64 preempted_qc_active;
1504 int preempted_nr_active_links;
1505 DECLARE_COMPLETION_ONSTACK(wait);
1506 unsigned long flags;
1507 unsigned int err_mask;
1508 int rc;
1509
1510 spin_lock_irqsave(ap->lock, flags);
1511
1512
1513 if (ap->pflags & ATA_PFLAG_FROZEN) {
1514 spin_unlock_irqrestore(ap->lock, flags);
1515 return AC_ERR_SYSTEM;
1516 }
1517
1518
1519 qc = __ata_qc_from_tag(ap, ATA_TAG_INTERNAL);
1520
1521 qc->tag = ATA_TAG_INTERNAL;
1522 qc->hw_tag = 0;
1523 qc->scsicmd = NULL;
1524 qc->ap = ap;
1525 qc->dev = dev;
1526 ata_qc_reinit(qc);
1527
1528 preempted_tag = link->active_tag;
1529 preempted_sactive = link->sactive;
1530 preempted_qc_active = ap->qc_active;
1531 preempted_nr_active_links = ap->nr_active_links;
1532 link->active_tag = ATA_TAG_POISON;
1533 link->sactive = 0;
1534 ap->qc_active = 0;
1535 ap->nr_active_links = 0;
1536
1537
1538 qc->tf = *tf;
1539 if (cdb)
1540 memcpy(qc->cdb, cdb, ATAPI_CDB_LEN);
1541
1542
1543 if (tf->protocol == ATAPI_PROT_DMA && (dev->flags & ATA_DFLAG_DMADIR) &&
1544 dma_dir == DMA_FROM_DEVICE)
1545 qc->tf.feature |= ATAPI_DMADIR;
1546
1547 qc->flags |= ATA_QCFLAG_RESULT_TF;
1548 qc->dma_dir = dma_dir;
1549 if (dma_dir != DMA_NONE) {
1550 unsigned int i, buflen = 0;
1551 struct scatterlist *sg;
1552
1553 for_each_sg(sgl, sg, n_elem, i)
1554 buflen += sg->length;
1555
1556 ata_sg_init(qc, sgl, n_elem);
1557 qc->nbytes = buflen;
1558 }
1559
1560 qc->private_data = &wait;
1561 qc->complete_fn = ata_qc_complete_internal;
1562
1563 ata_qc_issue(qc);
1564
1565 spin_unlock_irqrestore(ap->lock, flags);
1566
1567 if (!timeout) {
1568 if (ata_probe_timeout)
1569 timeout = ata_probe_timeout * 1000;
1570 else {
1571 timeout = ata_internal_cmd_timeout(dev, command);
1572 auto_timeout = 1;
1573 }
1574 }
1575
1576 if (ap->ops->error_handler)
1577 ata_eh_release(ap);
1578
1579 rc = wait_for_completion_timeout(&wait, msecs_to_jiffies(timeout));
1580
1581 if (ap->ops->error_handler)
1582 ata_eh_acquire(ap);
1583
1584 ata_sff_flush_pio_task(ap);
1585
1586 if (!rc) {
1587 spin_lock_irqsave(ap->lock, flags);
1588
1589
1590
1591
1592
1593
1594 if (qc->flags & ATA_QCFLAG_ACTIVE) {
1595 qc->err_mask |= AC_ERR_TIMEOUT;
1596
1597 if (ap->ops->error_handler)
1598 ata_port_freeze(ap);
1599 else
1600 ata_qc_complete(qc);
1601
1602 if (ata_msg_warn(ap))
1603 ata_dev_warn(dev, "qc timeout (cmd 0x%x)\n",
1604 command);
1605 }
1606
1607 spin_unlock_irqrestore(ap->lock, flags);
1608 }
1609
1610
1611 if (ap->ops->post_internal_cmd)
1612 ap->ops->post_internal_cmd(qc);
1613
1614
1615 if (qc->flags & ATA_QCFLAG_FAILED) {
1616 if (qc->result_tf.command & (ATA_ERR | ATA_DF))
1617 qc->err_mask |= AC_ERR_DEV;
1618
1619 if (!qc->err_mask)
1620 qc->err_mask |= AC_ERR_OTHER;
1621
1622 if (qc->err_mask & ~AC_ERR_OTHER)
1623 qc->err_mask &= ~AC_ERR_OTHER;
1624 } else if (qc->tf.command == ATA_CMD_REQ_SENSE_DATA) {
1625 qc->result_tf.command |= ATA_SENSE;
1626 }
1627
1628
1629 spin_lock_irqsave(ap->lock, flags);
1630
1631 *tf = qc->result_tf;
1632 err_mask = qc->err_mask;
1633
1634 ata_qc_free(qc);
1635 link->active_tag = preempted_tag;
1636 link->sactive = preempted_sactive;
1637 ap->qc_active = preempted_qc_active;
1638 ap->nr_active_links = preempted_nr_active_links;
1639
1640 spin_unlock_irqrestore(ap->lock, flags);
1641
1642 if ((err_mask & AC_ERR_TIMEOUT) && auto_timeout)
1643 ata_internal_cmd_timed_out(dev, command);
1644
1645 return err_mask;
1646}
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667unsigned ata_exec_internal(struct ata_device *dev,
1668 struct ata_taskfile *tf, const u8 *cdb,
1669 int dma_dir, void *buf, unsigned int buflen,
1670 unsigned long timeout)
1671{
1672 struct scatterlist *psg = NULL, sg;
1673 unsigned int n_elem = 0;
1674
1675 if (dma_dir != DMA_NONE) {
1676 WARN_ON(!buf);
1677 sg_init_one(&sg, buf, buflen);
1678 psg = &sg;
1679 n_elem++;
1680 }
1681
1682 return ata_exec_internal_sg(dev, tf, cdb, dma_dir, psg, n_elem,
1683 timeout);
1684}
1685
1686
1687
1688
1689
1690
1691
1692
1693unsigned int ata_pio_need_iordy(const struct ata_device *adev)
1694{
1695
1696
1697
1698
1699 if (adev->link->ap->pflags & ATA_PFLAG_RESETTING)
1700 return 0;
1701
1702
1703
1704 if (adev->link->ap->flags & ATA_FLAG_NO_IORDY)
1705 return 0;
1706
1707 if (ata_id_is_cfa(adev->id)
1708 && (adev->pio_mode == XFER_PIO_5 || adev->pio_mode == XFER_PIO_6))
1709 return 0;
1710
1711 if (adev->pio_mode > XFER_PIO_2)
1712 return 1;
1713
1714 if (ata_id_has_iordy(adev->id))
1715 return 1;
1716 return 0;
1717}
1718EXPORT_SYMBOL_GPL(ata_pio_need_iordy);
1719
1720
1721
1722
1723
1724
1725
1726
1727static u32 ata_pio_mask_no_iordy(const struct ata_device *adev)
1728{
1729
1730 if (adev->id[ATA_ID_FIELD_VALID] & 2) {
1731 u16 pio = adev->id[ATA_ID_EIDE_PIO];
1732
1733 if (pio) {
1734
1735 if (pio > 240)
1736 return 3 << ATA_SHIFT_PIO;
1737 return 7 << ATA_SHIFT_PIO;
1738 }
1739 }
1740 return 3 << ATA_SHIFT_PIO;
1741}
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753unsigned int ata_do_dev_read_id(struct ata_device *dev,
1754 struct ata_taskfile *tf, u16 *id)
1755{
1756 return ata_exec_internal(dev, tf, NULL, DMA_FROM_DEVICE,
1757 id, sizeof(id[0]) * ATA_ID_WORDS, 0);
1758}
1759EXPORT_SYMBOL_GPL(ata_do_dev_read_id);
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782int ata_dev_read_id(struct ata_device *dev, unsigned int *p_class,
1783 unsigned int flags, u16 *id)
1784{
1785 struct ata_port *ap = dev->link->ap;
1786 unsigned int class = *p_class;
1787 struct ata_taskfile tf;
1788 unsigned int err_mask = 0;
1789 const char *reason;
1790 bool is_semb = class == ATA_DEV_SEMB;
1791 int may_fallback = 1, tried_spinup = 0;
1792 int rc;
1793
1794 if (ata_msg_ctl(ap))
1795 ata_dev_dbg(dev, "%s: ENTER\n", __func__);
1796
1797retry:
1798 ata_tf_init(dev, &tf);
1799
1800 switch (class) {
1801 case ATA_DEV_SEMB:
1802 class = ATA_DEV_ATA;
1803 fallthrough;
1804 case ATA_DEV_ATA:
1805 case ATA_DEV_ZAC:
1806 tf.command = ATA_CMD_ID_ATA;
1807 break;
1808 case ATA_DEV_ATAPI:
1809 tf.command = ATA_CMD_ID_ATAPI;
1810 break;
1811 default:
1812 rc = -ENODEV;
1813 reason = "unsupported class";
1814 goto err_out;
1815 }
1816
1817 tf.protocol = ATA_PROT_PIO;
1818
1819
1820
1821
1822 tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
1823
1824
1825
1826
1827 tf.flags |= ATA_TFLAG_POLLING;
1828
1829 if (ap->ops->read_id)
1830 err_mask = ap->ops->read_id(dev, &tf, id);
1831 else
1832 err_mask = ata_do_dev_read_id(dev, &tf, id);
1833
1834 if (err_mask) {
1835 if (err_mask & AC_ERR_NODEV_HINT) {
1836 ata_dev_dbg(dev, "NODEV after polling detection\n");
1837 return -ENOENT;
1838 }
1839
1840 if (is_semb) {
1841 ata_dev_info(dev,
1842 "IDENTIFY failed on device w/ SEMB sig, disabled\n");
1843
1844 *p_class = ATA_DEV_SEMB_UNSUP;
1845 return 0;
1846 }
1847
1848 if ((err_mask == AC_ERR_DEV) && (tf.feature & ATA_ABORTED)) {
1849
1850
1851
1852
1853
1854 if (may_fallback) {
1855 may_fallback = 0;
1856
1857 if (class == ATA_DEV_ATA)
1858 class = ATA_DEV_ATAPI;
1859 else
1860 class = ATA_DEV_ATA;
1861 goto retry;
1862 }
1863
1864
1865
1866
1867
1868 ata_dev_dbg(dev,
1869 "both IDENTIFYs aborted, assuming NODEV\n");
1870 return -ENOENT;
1871 }
1872
1873 rc = -EIO;
1874 reason = "I/O error";
1875 goto err_out;
1876 }
1877
1878 if (dev->horkage & ATA_HORKAGE_DUMP_ID) {
1879 ata_dev_dbg(dev, "dumping IDENTIFY data, "
1880 "class=%d may_fallback=%d tried_spinup=%d\n",
1881 class, may_fallback, tried_spinup);
1882 print_hex_dump(KERN_DEBUG, "", DUMP_PREFIX_OFFSET,
1883 16, 2, id, ATA_ID_WORDS * sizeof(*id), true);
1884 }
1885
1886
1887
1888
1889 may_fallback = 0;
1890
1891 swap_buf_le16(id, ATA_ID_WORDS);
1892
1893
1894 rc = -EINVAL;
1895 reason = "device reports invalid type";
1896
1897 if (class == ATA_DEV_ATA || class == ATA_DEV_ZAC) {
1898 if (!ata_id_is_ata(id) && !ata_id_is_cfa(id))
1899 goto err_out;
1900 if (ap->host->flags & ATA_HOST_IGNORE_ATA &&
1901 ata_id_is_ata(id)) {
1902 ata_dev_dbg(dev,
1903 "host indicates ignore ATA devices, ignored\n");
1904 return -ENOENT;
1905 }
1906 } else {
1907 if (ata_id_is_ata(id))
1908 goto err_out;
1909 }
1910
1911 if (!tried_spinup && (id[2] == 0x37c8 || id[2] == 0x738c)) {
1912 tried_spinup = 1;
1913
1914
1915
1916
1917
1918 err_mask = ata_dev_set_feature(dev, SETFEATURES_SPINUP, 0);
1919 if (err_mask && id[2] != 0x738c) {
1920 rc = -EIO;
1921 reason = "SPINUP failed";
1922 goto err_out;
1923 }
1924
1925
1926
1927
1928 if (id[2] == 0x37c8)
1929 goto retry;
1930 }
1931
1932 if ((flags & ATA_READID_POSTRESET) &&
1933 (class == ATA_DEV_ATA || class == ATA_DEV_ZAC)) {
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945 if (ata_id_major_version(id) < 4 || !ata_id_has_lba(id)) {
1946 err_mask = ata_dev_init_params(dev, id[3], id[6]);
1947 if (err_mask) {
1948 rc = -EIO;
1949 reason = "INIT_DEV_PARAMS failed";
1950 goto err_out;
1951 }
1952
1953
1954
1955
1956 flags &= ~ATA_READID_POSTRESET;
1957 goto retry;
1958 }
1959 }
1960
1961 *p_class = class;
1962
1963 return 0;
1964
1965 err_out:
1966 if (ata_msg_warn(ap))
1967 ata_dev_warn(dev, "failed to IDENTIFY (%s, err_mask=0x%x)\n",
1968 reason, err_mask);
1969 return rc;
1970}
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988unsigned int ata_read_log_page(struct ata_device *dev, u8 log,
1989 u8 page, void *buf, unsigned int sectors)
1990{
1991 unsigned long ap_flags = dev->link->ap->flags;
1992 struct ata_taskfile tf;
1993 unsigned int err_mask;
1994 bool dma = false;
1995
1996 DPRINTK("read log page - log 0x%x, page 0x%x\n", log, page);
1997
1998
1999
2000
2001
2002 if (ap_flags & ATA_FLAG_NO_LOG_PAGE)
2003 return AC_ERR_DEV;
2004
2005retry:
2006 ata_tf_init(dev, &tf);
2007 if (dev->dma_mode && ata_id_has_read_log_dma_ext(dev->id) &&
2008 !(dev->horkage & ATA_HORKAGE_NO_DMA_LOG)) {
2009 tf.command = ATA_CMD_READ_LOG_DMA_EXT;
2010 tf.protocol = ATA_PROT_DMA;
2011 dma = true;
2012 } else {
2013 tf.command = ATA_CMD_READ_LOG_EXT;
2014 tf.protocol = ATA_PROT_PIO;
2015 dma = false;
2016 }
2017 tf.lbal = log;
2018 tf.lbam = page;
2019 tf.nsect = sectors;
2020 tf.hob_nsect = sectors >> 8;
2021 tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_LBA48 | ATA_TFLAG_DEVICE;
2022
2023 err_mask = ata_exec_internal(dev, &tf, NULL, DMA_FROM_DEVICE,
2024 buf, sectors * ATA_SECT_SIZE, 0);
2025
2026 if (err_mask && dma) {
2027 dev->horkage |= ATA_HORKAGE_NO_DMA_LOG;
2028 ata_dev_warn(dev, "READ LOG DMA EXT failed, trying PIO\n");
2029 goto retry;
2030 }
2031
2032 DPRINTK("EXIT, err_mask=%x\n", err_mask);
2033 return err_mask;
2034}
2035
2036static bool ata_log_supported(struct ata_device *dev, u8 log)
2037{
2038 struct ata_port *ap = dev->link->ap;
2039
2040 if (ata_read_log_page(dev, ATA_LOG_DIRECTORY, 0, ap->sector_buf, 1))
2041 return false;
2042 return get_unaligned_le16(&ap->sector_buf[log * 2]) ? true : false;
2043}
2044
2045static bool ata_identify_page_supported(struct ata_device *dev, u8 page)
2046{
2047 struct ata_port *ap = dev->link->ap;
2048 unsigned int err, i;
2049
2050 if (!ata_log_supported(dev, ATA_LOG_IDENTIFY_DEVICE)) {
2051 ata_dev_warn(dev, "ATA Identify Device Log not supported\n");
2052 return false;
2053 }
2054
2055
2056
2057
2058
2059 err = ata_read_log_page(dev, ATA_LOG_IDENTIFY_DEVICE, 0, ap->sector_buf,
2060 1);
2061 if (err) {
2062 ata_dev_info(dev,
2063 "failed to get Device Identify Log Emask 0x%x\n",
2064 err);
2065 return false;
2066 }
2067
2068 for (i = 0; i < ap->sector_buf[8]; i++) {
2069 if (ap->sector_buf[9 + i] == page)
2070 return true;
2071 }
2072
2073 return false;
2074}
2075
2076static int ata_do_link_spd_horkage(struct ata_device *dev)
2077{
2078 struct ata_link *plink = ata_dev_phys_link(dev);
2079 u32 target, target_limit;
2080
2081 if (!sata_scr_valid(plink))
2082 return 0;
2083
2084 if (dev->horkage & ATA_HORKAGE_1_5_GBPS)
2085 target = 1;
2086 else
2087 return 0;
2088
2089 target_limit = (1 << target) - 1;
2090
2091
2092 if (plink->sata_spd_limit <= target_limit)
2093 return 0;
2094
2095 plink->sata_spd_limit = target_limit;
2096
2097
2098
2099
2100
2101 if (plink->sata_spd > target) {
2102 ata_dev_info(dev, "applying link speed limit horkage to %s\n",
2103 sata_spd_string(target));
2104 return -EAGAIN;
2105 }
2106 return 0;
2107}
2108
2109static inline u8 ata_dev_knobble(struct ata_device *dev)
2110{
2111 struct ata_port *ap = dev->link->ap;
2112
2113 if (ata_dev_blacklisted(dev) & ATA_HORKAGE_BRIDGE_OK)
2114 return 0;
2115
2116 return ((ap->cbl == ATA_CBL_SATA) && (!ata_id_is_sata(dev->id)));
2117}
2118
2119static void ata_dev_config_ncq_send_recv(struct ata_device *dev)
2120{
2121 struct ata_port *ap = dev->link->ap;
2122 unsigned int err_mask;
2123
2124 if (!ata_log_supported(dev, ATA_LOG_NCQ_SEND_RECV)) {
2125 ata_dev_warn(dev, "NCQ Send/Recv Log not supported\n");
2126 return;
2127 }
2128 err_mask = ata_read_log_page(dev, ATA_LOG_NCQ_SEND_RECV,
2129 0, ap->sector_buf, 1);
2130 if (err_mask) {
2131 ata_dev_dbg(dev,
2132 "failed to get NCQ Send/Recv Log Emask 0x%x\n",
2133 err_mask);
2134 } else {
2135 u8 *cmds = dev->ncq_send_recv_cmds;
2136
2137 dev->flags |= ATA_DFLAG_NCQ_SEND_RECV;
2138 memcpy(cmds, ap->sector_buf, ATA_LOG_NCQ_SEND_RECV_SIZE);
2139
2140 if (dev->horkage & ATA_HORKAGE_NO_NCQ_TRIM) {
2141 ata_dev_dbg(dev, "disabling queued TRIM support\n");
2142 cmds[ATA_LOG_NCQ_SEND_RECV_DSM_OFFSET] &=
2143 ~ATA_LOG_NCQ_SEND_RECV_DSM_TRIM;
2144 }
2145 }
2146}
2147
2148static void ata_dev_config_ncq_non_data(struct ata_device *dev)
2149{
2150 struct ata_port *ap = dev->link->ap;
2151 unsigned int err_mask;
2152
2153 if (!ata_log_supported(dev, ATA_LOG_NCQ_NON_DATA)) {
2154 ata_dev_warn(dev,
2155 "NCQ Send/Recv Log not supported\n");
2156 return;
2157 }
2158 err_mask = ata_read_log_page(dev, ATA_LOG_NCQ_NON_DATA,
2159 0, ap->sector_buf, 1);
2160 if (err_mask) {
2161 ata_dev_dbg(dev,
2162 "failed to get NCQ Non-Data Log Emask 0x%x\n",
2163 err_mask);
2164 } else {
2165 u8 *cmds = dev->ncq_non_data_cmds;
2166
2167 memcpy(cmds, ap->sector_buf, ATA_LOG_NCQ_NON_DATA_SIZE);
2168 }
2169}
2170
2171static void ata_dev_config_ncq_prio(struct ata_device *dev)
2172{
2173 struct ata_port *ap = dev->link->ap;
2174 unsigned int err_mask;
2175
2176 if (!(dev->flags & ATA_DFLAG_NCQ_PRIO_ENABLE)) {
2177 dev->flags &= ~ATA_DFLAG_NCQ_PRIO;
2178 return;
2179 }
2180
2181 err_mask = ata_read_log_page(dev,
2182 ATA_LOG_IDENTIFY_DEVICE,
2183 ATA_LOG_SATA_SETTINGS,
2184 ap->sector_buf,
2185 1);
2186 if (err_mask) {
2187 ata_dev_dbg(dev,
2188 "failed to get Identify Device data, Emask 0x%x\n",
2189 err_mask);
2190 return;
2191 }
2192
2193 if (ap->sector_buf[ATA_LOG_NCQ_PRIO_OFFSET] & BIT(3)) {
2194 dev->flags |= ATA_DFLAG_NCQ_PRIO;
2195 } else {
2196 dev->flags &= ~ATA_DFLAG_NCQ_PRIO;
2197 ata_dev_dbg(dev, "SATA page does not support priority\n");
2198 }
2199
2200}
2201
2202static int ata_dev_config_ncq(struct ata_device *dev,
2203 char *desc, size_t desc_sz)
2204{
2205 struct ata_port *ap = dev->link->ap;
2206 int hdepth = 0, ddepth = ata_id_queue_depth(dev->id);
2207 unsigned int err_mask;
2208 char *aa_desc = "";
2209
2210 if (!ata_id_has_ncq(dev->id)) {
2211 desc[0] = '\0';
2212 return 0;
2213 }
2214 if (!IS_ENABLED(CONFIG_SATA_HOST))
2215 return 0;
2216 if (dev->horkage & ATA_HORKAGE_NONCQ) {
2217 snprintf(desc, desc_sz, "NCQ (not used)");
2218 return 0;
2219 }
2220 if (ap->flags & ATA_FLAG_NCQ) {
2221 hdepth = min(ap->scsi_host->can_queue, ATA_MAX_QUEUE);
2222 dev->flags |= ATA_DFLAG_NCQ;
2223 }
2224
2225 if (!(dev->horkage & ATA_HORKAGE_BROKEN_FPDMA_AA) &&
2226 (ap->flags & ATA_FLAG_FPDMA_AA) &&
2227 ata_id_has_fpdma_aa(dev->id)) {
2228 err_mask = ata_dev_set_feature(dev, SETFEATURES_SATA_ENABLE,
2229 SATA_FPDMA_AA);
2230 if (err_mask) {
2231 ata_dev_err(dev,
2232 "failed to enable AA (error_mask=0x%x)\n",
2233 err_mask);
2234 if (err_mask != AC_ERR_DEV) {
2235 dev->horkage |= ATA_HORKAGE_BROKEN_FPDMA_AA;
2236 return -EIO;
2237 }
2238 } else
2239 aa_desc = ", AA";
2240 }
2241
2242 if (hdepth >= ddepth)
2243 snprintf(desc, desc_sz, "NCQ (depth %d)%s", ddepth, aa_desc);
2244 else
2245 snprintf(desc, desc_sz, "NCQ (depth %d/%d)%s", hdepth,
2246 ddepth, aa_desc);
2247
2248 if ((ap->flags & ATA_FLAG_FPDMA_AUX)) {
2249 if (ata_id_has_ncq_send_and_recv(dev->id))
2250 ata_dev_config_ncq_send_recv(dev);
2251 if (ata_id_has_ncq_non_data(dev->id))
2252 ata_dev_config_ncq_non_data(dev);
2253 if (ata_id_has_ncq_prio(dev->id))
2254 ata_dev_config_ncq_prio(dev);
2255 }
2256
2257 return 0;
2258}
2259
2260static void ata_dev_config_sense_reporting(struct ata_device *dev)
2261{
2262 unsigned int err_mask;
2263
2264 if (!ata_id_has_sense_reporting(dev->id))
2265 return;
2266
2267 if (ata_id_sense_reporting_enabled(dev->id))
2268 return;
2269
2270 err_mask = ata_dev_set_feature(dev, SETFEATURE_SENSE_DATA, 0x1);
2271 if (err_mask) {
2272 ata_dev_dbg(dev,
2273 "failed to enable Sense Data Reporting, Emask 0x%x\n",
2274 err_mask);
2275 }
2276}
2277
2278static void ata_dev_config_zac(struct ata_device *dev)
2279{
2280 struct ata_port *ap = dev->link->ap;
2281 unsigned int err_mask;
2282 u8 *identify_buf = ap->sector_buf;
2283
2284 dev->zac_zones_optimal_open = U32_MAX;
2285 dev->zac_zones_optimal_nonseq = U32_MAX;
2286 dev->zac_zones_max_open = U32_MAX;
2287
2288
2289
2290
2291 if (dev->class == ATA_DEV_ZAC)
2292 dev->flags |= ATA_DFLAG_ZAC;
2293 else if (ata_id_zoned_cap(dev->id) == 0x01)
2294
2295
2296
2297 dev->flags |= ATA_DFLAG_ZAC;
2298
2299 if (!(dev->flags & ATA_DFLAG_ZAC))
2300 return;
2301
2302 if (!ata_identify_page_supported(dev, ATA_LOG_ZONED_INFORMATION)) {
2303 ata_dev_warn(dev,
2304 "ATA Zoned Information Log not supported\n");
2305 return;
2306 }
2307
2308
2309
2310
2311 err_mask = ata_read_log_page(dev, ATA_LOG_IDENTIFY_DEVICE,
2312 ATA_LOG_ZONED_INFORMATION,
2313 identify_buf, 1);
2314 if (!err_mask) {
2315 u64 zoned_cap, opt_open, opt_nonseq, max_open;
2316
2317 zoned_cap = get_unaligned_le64(&identify_buf[8]);
2318 if ((zoned_cap >> 63))
2319 dev->zac_zoned_cap = (zoned_cap & 1);
2320 opt_open = get_unaligned_le64(&identify_buf[24]);
2321 if ((opt_open >> 63))
2322 dev->zac_zones_optimal_open = (u32)opt_open;
2323 opt_nonseq = get_unaligned_le64(&identify_buf[32]);
2324 if ((opt_nonseq >> 63))
2325 dev->zac_zones_optimal_nonseq = (u32)opt_nonseq;
2326 max_open = get_unaligned_le64(&identify_buf[40]);
2327 if ((max_open >> 63))
2328 dev->zac_zones_max_open = (u32)max_open;
2329 }
2330}
2331
2332static void ata_dev_config_trusted(struct ata_device *dev)
2333{
2334 struct ata_port *ap = dev->link->ap;
2335 u64 trusted_cap;
2336 unsigned int err;
2337
2338 if (!ata_id_has_trusted(dev->id))
2339 return;
2340
2341 if (!ata_identify_page_supported(dev, ATA_LOG_SECURITY)) {
2342 ata_dev_warn(dev,
2343 "Security Log not supported\n");
2344 return;
2345 }
2346
2347 err = ata_read_log_page(dev, ATA_LOG_IDENTIFY_DEVICE, ATA_LOG_SECURITY,
2348 ap->sector_buf, 1);
2349 if (err) {
2350 ata_dev_dbg(dev,
2351 "failed to read Security Log, Emask 0x%x\n", err);
2352 return;
2353 }
2354
2355 trusted_cap = get_unaligned_le64(&ap->sector_buf[40]);
2356 if (!(trusted_cap & (1ULL << 63))) {
2357 ata_dev_dbg(dev,
2358 "Trusted Computing capability qword not valid!\n");
2359 return;
2360 }
2361
2362 if (trusted_cap & (1 << 0))
2363 dev->flags |= ATA_DFLAG_TRUSTED;
2364}
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379int ata_dev_configure(struct ata_device *dev)
2380{
2381 struct ata_port *ap = dev->link->ap;
2382 struct ata_eh_context *ehc = &dev->link->eh_context;
2383 int print_info = ehc->i.flags & ATA_EHI_PRINTINFO;
2384 const u16 *id = dev->id;
2385 unsigned long xfer_mask;
2386 unsigned int err_mask;
2387 char revbuf[7];
2388 char fwrevbuf[ATA_ID_FW_REV_LEN+1];
2389 char modelbuf[ATA_ID_PROD_LEN+1];
2390 int rc;
2391
2392 if (!ata_dev_enabled(dev) && ata_msg_info(ap)) {
2393 ata_dev_info(dev, "%s: ENTER/EXIT -- nodev\n", __func__);
2394 return 0;
2395 }
2396
2397 if (ata_msg_probe(ap))
2398 ata_dev_dbg(dev, "%s: ENTER\n", __func__);
2399
2400
2401 dev->horkage |= ata_dev_blacklisted(dev);
2402 ata_force_horkage(dev);
2403
2404 if (dev->horkage & ATA_HORKAGE_DISABLE) {
2405 ata_dev_info(dev, "unsupported device, disabling\n");
2406 ata_dev_disable(dev);
2407 return 0;
2408 }
2409
2410 if ((!atapi_enabled || (ap->flags & ATA_FLAG_NO_ATAPI)) &&
2411 dev->class == ATA_DEV_ATAPI) {
2412 ata_dev_warn(dev, "WARNING: ATAPI is %s, device ignored\n",
2413 atapi_enabled ? "not supported with this driver"
2414 : "disabled");
2415 ata_dev_disable(dev);
2416 return 0;
2417 }
2418
2419 rc = ata_do_link_spd_horkage(dev);
2420 if (rc)
2421 return rc;
2422
2423
2424 if ((dev->horkage & ATA_HORKAGE_WD_BROKEN_LPM) &&
2425 (id[ATA_ID_SATA_CAPABILITY] & 0xe) == 0x2)
2426 dev->horkage |= ATA_HORKAGE_NOLPM;
2427
2428 if (ap->flags & ATA_FLAG_NO_LPM)
2429 dev->horkage |= ATA_HORKAGE_NOLPM;
2430
2431 if (dev->horkage & ATA_HORKAGE_NOLPM) {
2432 ata_dev_warn(dev, "LPM support broken, forcing max_power\n");
2433 dev->link->ap->target_lpm_policy = ATA_LPM_MAX_POWER;
2434 }
2435
2436
2437 rc = ata_acpi_on_devcfg(dev);
2438 if (rc)
2439 return rc;
2440
2441
2442 rc = ata_hpa_resize(dev);
2443 if (rc)
2444 return rc;
2445
2446
2447 if (ata_msg_probe(ap))
2448 ata_dev_dbg(dev,
2449 "%s: cfg 49:%04x 82:%04x 83:%04x 84:%04x "
2450 "85:%04x 86:%04x 87:%04x 88:%04x\n",
2451 __func__,
2452 id[49], id[82], id[83], id[84],
2453 id[85], id[86], id[87], id[88]);
2454
2455
2456 dev->flags &= ~ATA_DFLAG_CFG_MASK;
2457 dev->max_sectors = 0;
2458 dev->cdb_len = 0;
2459 dev->n_sectors = 0;
2460 dev->cylinders = 0;
2461 dev->heads = 0;
2462 dev->sectors = 0;
2463 dev->multi_count = 0;
2464
2465
2466
2467
2468
2469
2470 xfer_mask = ata_id_xfermask(id);
2471
2472 if (ata_msg_probe(ap))
2473 ata_dump_id(id);
2474
2475
2476 ata_id_c_string(dev->id, fwrevbuf, ATA_ID_FW_REV,
2477 sizeof(fwrevbuf));
2478
2479 ata_id_c_string(dev->id, modelbuf, ATA_ID_PROD,
2480 sizeof(modelbuf));
2481
2482
2483 if (dev->class == ATA_DEV_ATA || dev->class == ATA_DEV_ZAC) {
2484 if (ata_id_is_cfa(id)) {
2485
2486 if (id[ATA_ID_CFA_KEY_MGMT] & 1)
2487 ata_dev_warn(dev,
2488 "supports DRM functions and may not be fully accessible\n");
2489 snprintf(revbuf, 7, "CFA");
2490 } else {
2491 snprintf(revbuf, 7, "ATA-%d", ata_id_major_version(id));
2492
2493 if (ata_id_has_tpm(id))
2494 ata_dev_warn(dev,
2495 "supports DRM functions and may not be fully accessible\n");
2496 }
2497
2498 dev->n_sectors = ata_id_n_sectors(id);
2499
2500
2501 if ((dev->id[47] >> 8) == 0x80 && (dev->id[59] & 0x100)) {
2502 unsigned int max = dev->id[47] & 0xff;
2503 unsigned int cnt = dev->id[59] & 0xff;
2504
2505 if (is_power_of_2(max) && is_power_of_2(cnt))
2506 if (cnt <= max)
2507 dev->multi_count = cnt;
2508 }
2509
2510 if (ata_id_has_lba(id)) {
2511 const char *lba_desc;
2512 char ncq_desc[24];
2513
2514 lba_desc = "LBA";
2515 dev->flags |= ATA_DFLAG_LBA;
2516 if (ata_id_has_lba48(id)) {
2517 dev->flags |= ATA_DFLAG_LBA48;
2518 lba_desc = "LBA48";
2519
2520 if (dev->n_sectors >= (1UL << 28) &&
2521 ata_id_has_flush_ext(id))
2522 dev->flags |= ATA_DFLAG_FLUSH_EXT;
2523 }
2524
2525
2526 rc = ata_dev_config_ncq(dev, ncq_desc, sizeof(ncq_desc));
2527 if (rc)
2528 return rc;
2529
2530
2531 if (ata_msg_drv(ap) && print_info) {
2532 ata_dev_info(dev, "%s: %s, %s, max %s\n",
2533 revbuf, modelbuf, fwrevbuf,
2534 ata_mode_string(xfer_mask));
2535 ata_dev_info(dev,
2536 "%llu sectors, multi %u: %s %s\n",
2537 (unsigned long long)dev->n_sectors,
2538 dev->multi_count, lba_desc, ncq_desc);
2539 }
2540 } else {
2541
2542
2543
2544 dev->cylinders = id[1];
2545 dev->heads = id[3];
2546 dev->sectors = id[6];
2547
2548 if (ata_id_current_chs_valid(id)) {
2549
2550 dev->cylinders = id[54];
2551 dev->heads = id[55];
2552 dev->sectors = id[56];
2553 }
2554
2555
2556 if (ata_msg_drv(ap) && print_info) {
2557 ata_dev_info(dev, "%s: %s, %s, max %s\n",
2558 revbuf, modelbuf, fwrevbuf,
2559 ata_mode_string(xfer_mask));
2560 ata_dev_info(dev,
2561 "%llu sectors, multi %u, CHS %u/%u/%u\n",
2562 (unsigned long long)dev->n_sectors,
2563 dev->multi_count, dev->cylinders,
2564 dev->heads, dev->sectors);
2565 }
2566 }
2567
2568
2569
2570
2571 if (ata_id_has_devslp(dev->id)) {
2572 u8 *sata_setting = ap->sector_buf;
2573 int i, j;
2574
2575 dev->flags |= ATA_DFLAG_DEVSLP;
2576 err_mask = ata_read_log_page(dev,
2577 ATA_LOG_IDENTIFY_DEVICE,
2578 ATA_LOG_SATA_SETTINGS,
2579 sata_setting,
2580 1);
2581 if (err_mask)
2582 ata_dev_dbg(dev,
2583 "failed to get Identify Device Data, Emask 0x%x\n",
2584 err_mask);
2585 else
2586 for (i = 0; i < ATA_LOG_DEVSLP_SIZE; i++) {
2587 j = ATA_LOG_DEVSLP_OFFSET + i;
2588 dev->devslp_timing[i] = sata_setting[j];
2589 }
2590 }
2591 ata_dev_config_sense_reporting(dev);
2592 ata_dev_config_zac(dev);
2593 ata_dev_config_trusted(dev);
2594 dev->cdb_len = 32;
2595 }
2596
2597
2598 else if (dev->class == ATA_DEV_ATAPI) {
2599 const char *cdb_intr_string = "";
2600 const char *atapi_an_string = "";
2601 const char *dma_dir_string = "";
2602 u32 sntf;
2603
2604 rc = atapi_cdb_len(id);
2605 if ((rc < 12) || (rc > ATAPI_CDB_LEN)) {
2606 if (ata_msg_warn(ap))
2607 ata_dev_warn(dev, "unsupported CDB len\n");
2608 rc = -EINVAL;
2609 goto err_out_nosup;
2610 }
2611 dev->cdb_len = (unsigned int) rc;
2612
2613
2614
2615
2616
2617
2618 if (atapi_an &&
2619 (ap->flags & ATA_FLAG_AN) && ata_id_has_atapi_AN(id) &&
2620 (!sata_pmp_attached(ap) ||
2621 sata_scr_read(&ap->link, SCR_NOTIFICATION, &sntf) == 0)) {
2622
2623 err_mask = ata_dev_set_feature(dev,
2624 SETFEATURES_SATA_ENABLE, SATA_AN);
2625 if (err_mask)
2626 ata_dev_err(dev,
2627 "failed to enable ATAPI AN (err_mask=0x%x)\n",
2628 err_mask);
2629 else {
2630 dev->flags |= ATA_DFLAG_AN;
2631 atapi_an_string = ", ATAPI AN";
2632 }
2633 }
2634
2635 if (ata_id_cdb_intr(dev->id)) {
2636 dev->flags |= ATA_DFLAG_CDB_INTR;
2637 cdb_intr_string = ", CDB intr";
2638 }
2639
2640 if (atapi_dmadir || (dev->horkage & ATA_HORKAGE_ATAPI_DMADIR) || atapi_id_dmadir(dev->id)) {
2641 dev->flags |= ATA_DFLAG_DMADIR;
2642 dma_dir_string = ", DMADIR";
2643 }
2644
2645 if (ata_id_has_da(dev->id)) {
2646 dev->flags |= ATA_DFLAG_DA;
2647 zpodd_init(dev);
2648 }
2649
2650
2651 if (ata_msg_drv(ap) && print_info)
2652 ata_dev_info(dev,
2653 "ATAPI: %s, %s, max %s%s%s%s\n",
2654 modelbuf, fwrevbuf,
2655 ata_mode_string(xfer_mask),
2656 cdb_intr_string, atapi_an_string,
2657 dma_dir_string);
2658 }
2659
2660
2661 dev->max_sectors = ATA_MAX_SECTORS;
2662 if (dev->flags & ATA_DFLAG_LBA48)
2663 dev->max_sectors = ATA_MAX_SECTORS_LBA48;
2664
2665
2666
2667 if (ata_dev_knobble(dev)) {
2668 if (ata_msg_drv(ap) && print_info)
2669 ata_dev_info(dev, "applying bridge limits\n");
2670 dev->udma_mask &= ATA_UDMA5;
2671 dev->max_sectors = ATA_MAX_SECTORS;
2672 }
2673
2674 if ((dev->class == ATA_DEV_ATAPI) &&
2675 (atapi_command_packet_set(id) == TYPE_TAPE)) {
2676 dev->max_sectors = ATA_MAX_SECTORS_TAPE;
2677 dev->horkage |= ATA_HORKAGE_STUCK_ERR;
2678 }
2679
2680 if (dev->horkage & ATA_HORKAGE_MAX_SEC_128)
2681 dev->max_sectors = min_t(unsigned int, ATA_MAX_SECTORS_128,
2682 dev->max_sectors);
2683
2684 if (dev->horkage & ATA_HORKAGE_MAX_SEC_1024)
2685 dev->max_sectors = min_t(unsigned int, ATA_MAX_SECTORS_1024,
2686 dev->max_sectors);
2687
2688 if (dev->horkage & ATA_HORKAGE_MAX_SEC_LBA48)
2689 dev->max_sectors = ATA_MAX_SECTORS_LBA48;
2690
2691 if (ap->ops->dev_config)
2692 ap->ops->dev_config(dev);
2693
2694 if (dev->horkage & ATA_HORKAGE_DIAGNOSTIC) {
2695
2696
2697
2698
2699
2700
2701 if (print_info) {
2702 ata_dev_warn(dev,
2703"Drive reports diagnostics failure. This may indicate a drive\n");
2704 ata_dev_warn(dev,
2705"fault or invalid emulation. Contact drive vendor for information.\n");
2706 }
2707 }
2708
2709 if ((dev->horkage & ATA_HORKAGE_FIRMWARE_WARN) && print_info) {
2710 ata_dev_warn(dev, "WARNING: device requires firmware update to be fully functional\n");
2711 ata_dev_warn(dev, " contact the vendor or visit http://ata.wiki.kernel.org\n");
2712 }
2713
2714 return 0;
2715
2716err_out_nosup:
2717 if (ata_msg_probe(ap))
2718 ata_dev_dbg(dev, "%s: EXIT, err\n", __func__);
2719 return rc;
2720}
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730int ata_cable_40wire(struct ata_port *ap)
2731{
2732 return ATA_CBL_PATA40;
2733}
2734EXPORT_SYMBOL_GPL(ata_cable_40wire);
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744int ata_cable_80wire(struct ata_port *ap)
2745{
2746 return ATA_CBL_PATA80;
2747}
2748EXPORT_SYMBOL_GPL(ata_cable_80wire);
2749
2750
2751
2752
2753
2754
2755
2756
2757int ata_cable_unknown(struct ata_port *ap)
2758{
2759 return ATA_CBL_PATA_UNK;
2760}
2761EXPORT_SYMBOL_GPL(ata_cable_unknown);
2762
2763
2764
2765
2766
2767
2768
2769
2770int ata_cable_ignore(struct ata_port *ap)
2771{
2772 return ATA_CBL_PATA_IGN;
2773}
2774EXPORT_SYMBOL_GPL(ata_cable_ignore);
2775
2776
2777
2778
2779
2780
2781
2782
2783int ata_cable_sata(struct ata_port *ap)
2784{
2785 return ATA_CBL_SATA;
2786}
2787EXPORT_SYMBOL_GPL(ata_cable_sata);
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804int ata_bus_probe(struct ata_port *ap)
2805{
2806 unsigned int classes[ATA_MAX_DEVICES];
2807 int tries[ATA_MAX_DEVICES];
2808 int rc;
2809 struct ata_device *dev;
2810
2811 ata_for_each_dev(dev, &ap->link, ALL)
2812 tries[dev->devno] = ATA_PROBE_MAX_TRIES;
2813
2814 retry:
2815 ata_for_each_dev(dev, &ap->link, ALL) {
2816
2817
2818
2819
2820
2821
2822
2823 dev->pio_mode = XFER_PIO_0;
2824 dev->dma_mode = 0xff;
2825
2826
2827
2828
2829
2830
2831 if (ap->ops->set_piomode)
2832 ap->ops->set_piomode(ap, dev);
2833 }
2834
2835
2836 ap->ops->phy_reset(ap);
2837
2838 ata_for_each_dev(dev, &ap->link, ALL) {
2839 if (dev->class != ATA_DEV_UNKNOWN)
2840 classes[dev->devno] = dev->class;
2841 else
2842 classes[dev->devno] = ATA_DEV_NONE;
2843
2844 dev->class = ATA_DEV_UNKNOWN;
2845 }
2846
2847
2848
2849
2850
2851 ata_for_each_dev(dev, &ap->link, ALL_REVERSE) {
2852 if (tries[dev->devno])
2853 dev->class = classes[dev->devno];
2854
2855 if (!ata_dev_enabled(dev))
2856 continue;
2857
2858 rc = ata_dev_read_id(dev, &dev->class, ATA_READID_POSTRESET,
2859 dev->id);
2860 if (rc)
2861 goto fail;
2862 }
2863
2864
2865 if (ap->ops->cable_detect)
2866 ap->cbl = ap->ops->cable_detect(ap);
2867
2868
2869
2870
2871
2872
2873 ata_for_each_dev(dev, &ap->link, ENABLED)
2874 if (ata_id_is_sata(dev->id))
2875 ap->cbl = ATA_CBL_SATA;
2876
2877
2878
2879
2880 ata_for_each_dev(dev, &ap->link, ENABLED) {
2881 ap->link.eh_context.i.flags |= ATA_EHI_PRINTINFO;
2882 rc = ata_dev_configure(dev);
2883 ap->link.eh_context.i.flags &= ~ATA_EHI_PRINTINFO;
2884 if (rc)
2885 goto fail;
2886 }
2887
2888
2889 rc = ata_set_mode(&ap->link, &dev);
2890 if (rc)
2891 goto fail;
2892
2893 ata_for_each_dev(dev, &ap->link, ENABLED)
2894 return 0;
2895
2896 return -ENODEV;
2897
2898 fail:
2899 tries[dev->devno]--;
2900
2901 switch (rc) {
2902 case -EINVAL:
2903
2904 tries[dev->devno] = 0;
2905 break;
2906
2907 case -ENODEV:
2908
2909 tries[dev->devno] = min(tries[dev->devno], 1);
2910 fallthrough;
2911 case -EIO:
2912 if (tries[dev->devno] == 1) {
2913
2914
2915
2916 sata_down_spd_limit(&ap->link, 0);
2917 ata_down_xfermask_limit(dev, ATA_DNXFER_PIO);
2918 }
2919 }
2920
2921 if (!tries[dev->devno])
2922 ata_dev_disable(dev);
2923
2924 goto retry;
2925}
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936static void sata_print_link_status(struct ata_link *link)
2937{
2938 u32 sstatus, scontrol, tmp;
2939
2940 if (sata_scr_read(link, SCR_STATUS, &sstatus))
2941 return;
2942 sata_scr_read(link, SCR_CONTROL, &scontrol);
2943
2944 if (ata_phys_link_online(link)) {
2945 tmp = (sstatus >> 4) & 0xf;
2946 ata_link_info(link, "SATA link up %s (SStatus %X SControl %X)\n",
2947 sata_spd_string(tmp), sstatus, scontrol);
2948 } else {
2949 ata_link_info(link, "SATA link down (SStatus %X SControl %X)\n",
2950 sstatus, scontrol);
2951 }
2952}
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962struct ata_device *ata_dev_pair(struct ata_device *adev)
2963{
2964 struct ata_link *link = adev->link;
2965 struct ata_device *pair = &link->device[1 - adev->devno];
2966 if (!ata_dev_enabled(pair))
2967 return NULL;
2968 return pair;
2969}
2970EXPORT_SYMBOL_GPL(ata_dev_pair);
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992int sata_down_spd_limit(struct ata_link *link, u32 spd_limit)
2993{
2994 u32 sstatus, spd, mask;
2995 int rc, bit;
2996
2997 if (!sata_scr_valid(link))
2998 return -EOPNOTSUPP;
2999
3000
3001
3002
3003 rc = sata_scr_read(link, SCR_STATUS, &sstatus);
3004 if (rc == 0 && ata_sstatus_online(sstatus))
3005 spd = (sstatus >> 4) & 0xf;
3006 else
3007 spd = link->sata_spd;
3008
3009 mask = link->sata_spd_limit;
3010 if (mask <= 1)
3011 return -EINVAL;
3012
3013
3014 bit = fls(mask) - 1;
3015 mask &= ~(1 << bit);
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026 if (spd > 1)
3027 mask &= (1 << (spd - 1)) - 1;
3028 else
3029 return -EINVAL;
3030
3031
3032 if (!mask)
3033 return -EINVAL;
3034
3035 if (spd_limit) {
3036 if (mask & ((1 << spd_limit) - 1))
3037 mask &= (1 << spd_limit) - 1;
3038 else {
3039 bit = ffs(mask) - 1;
3040 mask = 1 << bit;
3041 }
3042 }
3043
3044 link->sata_spd_limit = mask;
3045
3046 ata_link_warn(link, "limiting SATA link speed to %s\n",
3047 sata_spd_string(fls(mask)));
3048
3049 return 0;
3050}
3051
3052#ifdef CONFIG_ATA_ACPI
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069u8 ata_timing_cycle2mode(unsigned int xfer_shift, int cycle)
3070{
3071 u8 base_mode = 0xff, last_mode = 0xff;
3072 const struct ata_xfer_ent *ent;
3073 const struct ata_timing *t;
3074
3075 for (ent = ata_xfer_tbl; ent->shift >= 0; ent++)
3076 if (ent->shift == xfer_shift)
3077 base_mode = ent->base;
3078
3079 for (t = ata_timing_find_mode(base_mode);
3080 t && ata_xfer_mode2shift(t->mode) == xfer_shift; t++) {
3081 unsigned short this_cycle;
3082
3083 switch (xfer_shift) {
3084 case ATA_SHIFT_PIO:
3085 case ATA_SHIFT_MWDMA:
3086 this_cycle = t->cycle;
3087 break;
3088 case ATA_SHIFT_UDMA:
3089 this_cycle = t->udma;
3090 break;
3091 default:
3092 return 0xff;
3093 }
3094
3095 if (cycle > this_cycle)
3096 break;
3097
3098 last_mode = t->mode;
3099 }
3100
3101 return last_mode;
3102}
3103#endif
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120int ata_down_xfermask_limit(struct ata_device *dev, unsigned int sel)
3121{
3122 char buf[32];
3123 unsigned long orig_mask, xfer_mask;
3124 unsigned long pio_mask, mwdma_mask, udma_mask;
3125 int quiet, highbit;
3126
3127 quiet = !!(sel & ATA_DNXFER_QUIET);
3128 sel &= ~ATA_DNXFER_QUIET;
3129
3130 xfer_mask = orig_mask = ata_pack_xfermask(dev->pio_mask,
3131 dev->mwdma_mask,
3132 dev->udma_mask);
3133 ata_unpack_xfermask(xfer_mask, &pio_mask, &mwdma_mask, &udma_mask);
3134
3135 switch (sel) {
3136 case ATA_DNXFER_PIO:
3137 highbit = fls(pio_mask) - 1;
3138 pio_mask &= ~(1 << highbit);
3139 break;
3140
3141 case ATA_DNXFER_DMA:
3142 if (udma_mask) {
3143 highbit = fls(udma_mask) - 1;
3144 udma_mask &= ~(1 << highbit);
3145 if (!udma_mask)
3146 return -ENOENT;
3147 } else if (mwdma_mask) {
3148 highbit = fls(mwdma_mask) - 1;
3149 mwdma_mask &= ~(1 << highbit);
3150 if (!mwdma_mask)
3151 return -ENOENT;
3152 }
3153 break;
3154
3155 case ATA_DNXFER_40C:
3156 udma_mask &= ATA_UDMA_MASK_40C;
3157 break;
3158
3159 case ATA_DNXFER_FORCE_PIO0:
3160 pio_mask &= 1;
3161 fallthrough;
3162 case ATA_DNXFER_FORCE_PIO:
3163 mwdma_mask = 0;
3164 udma_mask = 0;
3165 break;
3166
3167 default:
3168 BUG();
3169 }
3170
3171 xfer_mask &= ata_pack_xfermask(pio_mask, mwdma_mask, udma_mask);
3172
3173 if (!(xfer_mask & ATA_MASK_PIO) || xfer_mask == orig_mask)
3174 return -ENOENT;
3175
3176 if (!quiet) {
3177 if (xfer_mask & (ATA_MASK_MWDMA | ATA_MASK_UDMA))
3178 snprintf(buf, sizeof(buf), "%s:%s",
3179 ata_mode_string(xfer_mask),
3180 ata_mode_string(xfer_mask & ATA_MASK_PIO));
3181 else
3182 snprintf(buf, sizeof(buf), "%s",
3183 ata_mode_string(xfer_mask));
3184
3185 ata_dev_warn(dev, "limiting speed to %s\n", buf);
3186 }
3187
3188 ata_unpack_xfermask(xfer_mask, &dev->pio_mask, &dev->mwdma_mask,
3189 &dev->udma_mask);
3190
3191 return 0;
3192}
3193
3194static int ata_dev_set_mode(struct ata_device *dev)
3195{
3196 struct ata_port *ap = dev->link->ap;
3197 struct ata_eh_context *ehc = &dev->link->eh_context;
3198 const bool nosetxfer = dev->horkage & ATA_HORKAGE_NOSETXFER;
3199 const char *dev_err_whine = "";
3200 int ign_dev_err = 0;
3201 unsigned int err_mask = 0;
3202 int rc;
3203
3204 dev->flags &= ~ATA_DFLAG_PIO;
3205 if (dev->xfer_shift == ATA_SHIFT_PIO)
3206 dev->flags |= ATA_DFLAG_PIO;
3207
3208 if (nosetxfer && ap->flags & ATA_FLAG_SATA && ata_id_is_sata(dev->id))
3209 dev_err_whine = " (SET_XFERMODE skipped)";
3210 else {
3211 if (nosetxfer)
3212 ata_dev_warn(dev,
3213 "NOSETXFER but PATA detected - can't "
3214 "skip SETXFER, might malfunction\n");
3215 err_mask = ata_dev_set_xfermode(dev);
3216 }
3217
3218 if (err_mask & ~AC_ERR_DEV)
3219 goto fail;
3220
3221
3222 ehc->i.flags |= ATA_EHI_POST_SETMODE;
3223 rc = ata_dev_revalidate(dev, ATA_DEV_UNKNOWN, 0);
3224 ehc->i.flags &= ~ATA_EHI_POST_SETMODE;
3225 if (rc)
3226 return rc;
3227
3228 if (dev->xfer_shift == ATA_SHIFT_PIO) {
3229
3230 if (ata_id_is_cfa(dev->id))
3231 ign_dev_err = 1;
3232
3233
3234 if (ata_id_major_version(dev->id) == 0 &&
3235 dev->pio_mode <= XFER_PIO_2)
3236 ign_dev_err = 1;
3237
3238
3239
3240 if (!ata_id_has_iordy(dev->id) && dev->pio_mode <= XFER_PIO_2)
3241 ign_dev_err = 1;
3242 }
3243
3244
3245 if (dev->xfer_shift == ATA_SHIFT_MWDMA &&
3246 dev->dma_mode == XFER_MW_DMA_0 &&
3247 (dev->id[63] >> 8) & 1)
3248 ign_dev_err = 1;
3249
3250
3251 if (dev->xfer_mode == ata_xfer_mask2mode(ata_id_xfermask(dev->id)))
3252 ign_dev_err = 1;
3253
3254 if (err_mask & AC_ERR_DEV) {
3255 if (!ign_dev_err)
3256 goto fail;
3257 else
3258 dev_err_whine = " (device error ignored)";
3259 }
3260
3261 DPRINTK("xfer_shift=%u, xfer_mode=0x%x\n",
3262 dev->xfer_shift, (int)dev->xfer_mode);
3263
3264 if (!(ehc->i.flags & ATA_EHI_QUIET) ||
3265 ehc->i.flags & ATA_EHI_DID_HARDRESET)
3266 ata_dev_info(dev, "configured for %s%s\n",
3267 ata_mode_string(ata_xfer_mode2mask(dev->xfer_mode)),
3268 dev_err_whine);
3269
3270 return 0;
3271
3272 fail:
3273 ata_dev_err(dev, "failed to set xfermode (err_mask=0x%x)\n", err_mask);
3274 return -EIO;
3275}
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294int ata_do_set_mode(struct ata_link *link, struct ata_device **r_failed_dev)
3295{
3296 struct ata_port *ap = link->ap;
3297 struct ata_device *dev;
3298 int rc = 0, used_dma = 0, found = 0;
3299
3300
3301 ata_for_each_dev(dev, link, ENABLED) {
3302 unsigned long pio_mask, dma_mask;
3303 unsigned int mode_mask;
3304
3305 mode_mask = ATA_DMA_MASK_ATA;
3306 if (dev->class == ATA_DEV_ATAPI)
3307 mode_mask = ATA_DMA_MASK_ATAPI;
3308 else if (ata_id_is_cfa(dev->id))
3309 mode_mask = ATA_DMA_MASK_CFA;
3310
3311 ata_dev_xfermask(dev);
3312 ata_force_xfermask(dev);
3313
3314 pio_mask = ata_pack_xfermask(dev->pio_mask, 0, 0);
3315
3316 if (libata_dma_mask & mode_mask)
3317 dma_mask = ata_pack_xfermask(0, dev->mwdma_mask,
3318 dev->udma_mask);
3319 else
3320 dma_mask = 0;
3321
3322 dev->pio_mode = ata_xfer_mask2mode(pio_mask);
3323 dev->dma_mode = ata_xfer_mask2mode(dma_mask);
3324
3325 found = 1;
3326 if (ata_dma_enabled(dev))
3327 used_dma = 1;
3328 }
3329 if (!found)
3330 goto out;
3331
3332
3333 ata_for_each_dev(dev, link, ENABLED) {
3334 if (dev->pio_mode == 0xff) {
3335 ata_dev_warn(dev, "no PIO support\n");
3336 rc = -EINVAL;
3337 goto out;
3338 }
3339
3340 dev->xfer_mode = dev->pio_mode;
3341 dev->xfer_shift = ATA_SHIFT_PIO;
3342 if (ap->ops->set_piomode)
3343 ap->ops->set_piomode(ap, dev);
3344 }
3345
3346
3347 ata_for_each_dev(dev, link, ENABLED) {
3348 if (!ata_dma_enabled(dev))
3349 continue;
3350
3351 dev->xfer_mode = dev->dma_mode;
3352 dev->xfer_shift = ata_xfer_mode2shift(dev->dma_mode);
3353 if (ap->ops->set_dmamode)
3354 ap->ops->set_dmamode(ap, dev);
3355 }
3356
3357
3358 ata_for_each_dev(dev, link, ENABLED) {
3359 rc = ata_dev_set_mode(dev);
3360 if (rc)
3361 goto out;
3362 }
3363
3364
3365
3366
3367 if (used_dma && (ap->host->flags & ATA_HOST_SIMPLEX))
3368 ap->host->simplex_claimed = ap;
3369
3370 out:
3371 if (rc)
3372 *r_failed_dev = dev;
3373 return rc;
3374}
3375EXPORT_SYMBOL_GPL(ata_do_set_mode);
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397int ata_wait_ready(struct ata_link *link, unsigned long deadline,
3398 int (*check_ready)(struct ata_link *link))
3399{
3400 unsigned long start = jiffies;
3401 unsigned long nodev_deadline;
3402 int warned = 0;
3403
3404
3405 if (link->ap->host->flags & ATA_HOST_PARALLEL_SCAN)
3406 nodev_deadline = ata_deadline(start, ATA_TMOUT_FF_WAIT_LONG);
3407 else
3408 nodev_deadline = ata_deadline(start, ATA_TMOUT_FF_WAIT);
3409
3410
3411
3412
3413
3414 WARN_ON(link == link->ap->slave_link);
3415
3416 if (time_after(nodev_deadline, deadline))
3417 nodev_deadline = deadline;
3418
3419 while (1) {
3420 unsigned long now = jiffies;
3421 int ready, tmp;
3422
3423 ready = tmp = check_ready(link);
3424 if (ready > 0)
3425 return 0;
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438 if (ready == -ENODEV) {
3439 if (ata_link_online(link))
3440 ready = 0;
3441 else if ((link->ap->flags & ATA_FLAG_SATA) &&
3442 !ata_link_offline(link) &&
3443 time_before(now, nodev_deadline))
3444 ready = 0;
3445 }
3446
3447 if (ready)
3448 return ready;
3449 if (time_after(now, deadline))
3450 return -EBUSY;
3451
3452 if (!warned && time_after(now, start + 5 * HZ) &&
3453 (deadline - now > 3 * HZ)) {
3454 ata_link_warn(link,
3455 "link is slow to respond, please be patient "
3456 "(ready=%d)\n", tmp);
3457 warned = 1;
3458 }
3459
3460 ata_msleep(link->ap, 50);
3461 }
3462}
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478int ata_wait_after_reset(struct ata_link *link, unsigned long deadline,
3479 int (*check_ready)(struct ata_link *link))
3480{
3481 ata_msleep(link->ap, ATA_WAIT_AFTER_RESET);
3482
3483 return ata_wait_ready(link, deadline, check_ready);
3484}
3485EXPORT_SYMBOL_GPL(ata_wait_after_reset);
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504int ata_std_prereset(struct ata_link *link, unsigned long deadline)
3505{
3506 struct ata_port *ap = link->ap;
3507 struct ata_eh_context *ehc = &link->eh_context;
3508 const unsigned long *timing = sata_ehc_deb_timing(ehc);
3509 int rc;
3510
3511
3512 if (ehc->i.action & ATA_EH_HARDRESET)
3513 return 0;
3514
3515
3516 if (ap->flags & ATA_FLAG_SATA) {
3517 rc = sata_link_resume(link, timing, deadline);
3518
3519 if (rc && rc != -EOPNOTSUPP)
3520 ata_link_warn(link,
3521 "failed to resume link for reset (errno=%d)\n",
3522 rc);
3523 }
3524
3525
3526 if (ata_phys_link_offline(link))
3527 ehc->i.action &= ~ATA_EH_SOFTRESET;
3528
3529 return 0;
3530}
3531EXPORT_SYMBOL_GPL(ata_std_prereset);
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547int sata_std_hardreset(struct ata_link *link, unsigned int *class,
3548 unsigned long deadline)
3549{
3550 const unsigned long *timing = sata_ehc_deb_timing(&link->eh_context);
3551 bool online;
3552 int rc;
3553
3554
3555 rc = sata_link_hardreset(link, timing, deadline, &online, NULL);
3556 return online ? -EAGAIN : rc;
3557}
3558EXPORT_SYMBOL_GPL(sata_std_hardreset);
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572void ata_std_postreset(struct ata_link *link, unsigned int *classes)
3573{
3574 u32 serror;
3575
3576 DPRINTK("ENTER\n");
3577
3578
3579 if (!sata_scr_read(link, SCR_ERROR, &serror))
3580 sata_scr_write(link, SCR_ERROR, serror);
3581
3582
3583 sata_print_link_status(link);
3584
3585 DPRINTK("EXIT\n");
3586}
3587EXPORT_SYMBOL_GPL(ata_std_postreset);
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605static int ata_dev_same_device(struct ata_device *dev, unsigned int new_class,
3606 const u16 *new_id)
3607{
3608 const u16 *old_id = dev->id;
3609 unsigned char model[2][ATA_ID_PROD_LEN + 1];
3610 unsigned char serial[2][ATA_ID_SERNO_LEN + 1];
3611
3612 if (dev->class != new_class) {
3613 ata_dev_info(dev, "class mismatch %d != %d\n",
3614 dev->class, new_class);
3615 return 0;
3616 }
3617
3618 ata_id_c_string(old_id, model[0], ATA_ID_PROD, sizeof(model[0]));
3619 ata_id_c_string(new_id, model[1], ATA_ID_PROD, sizeof(model[1]));
3620 ata_id_c_string(old_id, serial[0], ATA_ID_SERNO, sizeof(serial[0]));
3621 ata_id_c_string(new_id, serial[1], ATA_ID_SERNO, sizeof(serial[1]));
3622
3623 if (strcmp(model[0], model[1])) {
3624 ata_dev_info(dev, "model number mismatch '%s' != '%s'\n",
3625 model[0], model[1]);
3626 return 0;
3627 }
3628
3629 if (strcmp(serial[0], serial[1])) {
3630 ata_dev_info(dev, "serial number mismatch '%s' != '%s'\n",
3631 serial[0], serial[1]);
3632 return 0;
3633 }
3634
3635 return 1;
3636}
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652int ata_dev_reread_id(struct ata_device *dev, unsigned int readid_flags)
3653{
3654 unsigned int class = dev->class;
3655 u16 *id = (void *)dev->link->ap->sector_buf;
3656 int rc;
3657
3658
3659 rc = ata_dev_read_id(dev, &class, readid_flags, id);
3660 if (rc)
3661 return rc;
3662
3663
3664 if (!ata_dev_same_device(dev, class, id))
3665 return -ENODEV;
3666
3667 memcpy(dev->id, id, sizeof(id[0]) * ATA_ID_WORDS);
3668 return 0;
3669}
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686int ata_dev_revalidate(struct ata_device *dev, unsigned int new_class,
3687 unsigned int readid_flags)
3688{
3689 u64 n_sectors = dev->n_sectors;
3690 u64 n_native_sectors = dev->n_native_sectors;
3691 int rc;
3692
3693 if (!ata_dev_enabled(dev))
3694 return -ENODEV;
3695
3696
3697 if (ata_class_enabled(new_class) &&
3698 new_class != ATA_DEV_ATA &&
3699 new_class != ATA_DEV_ATAPI &&
3700 new_class != ATA_DEV_ZAC &&
3701 new_class != ATA_DEV_SEMB) {
3702 ata_dev_info(dev, "class mismatch %u != %u\n",
3703 dev->class, new_class);
3704 rc = -ENODEV;
3705 goto fail;
3706 }
3707
3708
3709 rc = ata_dev_reread_id(dev, readid_flags);
3710 if (rc)
3711 goto fail;
3712
3713
3714 rc = ata_dev_configure(dev);
3715 if (rc)
3716 goto fail;
3717
3718
3719 if (dev->class != ATA_DEV_ATA || !n_sectors ||
3720 dev->n_sectors == n_sectors)
3721 return 0;
3722
3723
3724 ata_dev_warn(dev, "n_sectors mismatch %llu != %llu\n",
3725 (unsigned long long)n_sectors,
3726 (unsigned long long)dev->n_sectors);
3727
3728
3729
3730
3731
3732
3733 if (dev->n_native_sectors == n_native_sectors &&
3734 dev->n_sectors > n_sectors && dev->n_sectors == n_native_sectors) {
3735 ata_dev_warn(dev,
3736 "new n_sectors matches native, probably "
3737 "late HPA unlock, n_sectors updated\n");
3738
3739 return 0;
3740 }
3741
3742
3743
3744
3745
3746
3747
3748 if (dev->n_native_sectors == n_native_sectors &&
3749 dev->n_sectors < n_sectors && n_sectors == n_native_sectors &&
3750 !(dev->horkage & ATA_HORKAGE_BROKEN_HPA)) {
3751 ata_dev_warn(dev,
3752 "old n_sectors matches native, probably "
3753 "late HPA lock, will try to unlock HPA\n");
3754
3755 dev->flags |= ATA_DFLAG_UNLOCK_HPA;
3756 rc = -EIO;
3757 } else
3758 rc = -ENODEV;
3759
3760
3761 dev->n_native_sectors = n_native_sectors;
3762 dev->n_sectors = n_sectors;
3763 fail:
3764 ata_dev_err(dev, "revalidation failed (errno=%d)\n", rc);
3765 return rc;
3766}
3767
3768struct ata_blacklist_entry {
3769 const char *model_num;
3770 const char *model_rev;
3771 unsigned long horkage;
3772};
3773
3774static const struct ata_blacklist_entry ata_device_blacklist [] = {
3775
3776 { "WDC AC11000H", NULL, ATA_HORKAGE_NODMA },
3777 { "WDC AC22100H", NULL, ATA_HORKAGE_NODMA },
3778 { "WDC AC32500H", NULL, ATA_HORKAGE_NODMA },
3779 { "WDC AC33100H", NULL, ATA_HORKAGE_NODMA },
3780 { "WDC AC31600H", NULL, ATA_HORKAGE_NODMA },
3781 { "WDC AC32100H", "24.09P07", ATA_HORKAGE_NODMA },
3782 { "WDC AC23200L", "21.10N21", ATA_HORKAGE_NODMA },
3783 { "Compaq CRD-8241B", NULL, ATA_HORKAGE_NODMA },
3784 { "CRD-8400B", NULL, ATA_HORKAGE_NODMA },
3785 { "CRD-848[02]B", NULL, ATA_HORKAGE_NODMA },
3786 { "CRD-84", NULL, ATA_HORKAGE_NODMA },
3787 { "SanDisk SDP3B", NULL, ATA_HORKAGE_NODMA },
3788 { "SanDisk SDP3B-64", NULL, ATA_HORKAGE_NODMA },
3789 { "SANYO CD-ROM CRD", NULL, ATA_HORKAGE_NODMA },
3790 { "HITACHI CDR-8", NULL, ATA_HORKAGE_NODMA },
3791 { "HITACHI CDR-8[34]35",NULL, ATA_HORKAGE_NODMA },
3792 { "Toshiba CD-ROM XM-6202B", NULL, ATA_HORKAGE_NODMA },
3793 { "TOSHIBA CD-ROM XM-1702BC", NULL, ATA_HORKAGE_NODMA },
3794 { "CD-532E-A", NULL, ATA_HORKAGE_NODMA },
3795 { "E-IDE CD-ROM CR-840",NULL, ATA_HORKAGE_NODMA },
3796 { "CD-ROM Drive/F5A", NULL, ATA_HORKAGE_NODMA },
3797 { "WPI CDD-820", NULL, ATA_HORKAGE_NODMA },
3798 { "SAMSUNG CD-ROM SC-148C", NULL, ATA_HORKAGE_NODMA },
3799 { "SAMSUNG CD-ROM SC", NULL, ATA_HORKAGE_NODMA },
3800 { "ATAPI CD-ROM DRIVE 40X MAXIMUM",NULL,ATA_HORKAGE_NODMA },
3801 { "_NEC DV5800A", NULL, ATA_HORKAGE_NODMA },
3802 { "SAMSUNG CD-ROM SN-124", "N001", ATA_HORKAGE_NODMA },
3803 { "Seagate STT20000A", NULL, ATA_HORKAGE_NODMA },
3804 { " 2GB ATA Flash Disk", "ADMA428M", ATA_HORKAGE_NODMA },
3805 { "VRFDFC22048UCHC-TE*", NULL, ATA_HORKAGE_NODMA },
3806
3807 { "Config Disk", NULL, ATA_HORKAGE_DISABLE },
3808
3809
3810 { "TORiSAN DVD-ROM DRD-N216", NULL, ATA_HORKAGE_MAX_SEC_128 },
3811 { "QUANTUM DAT DAT72-000", NULL, ATA_HORKAGE_ATAPI_MOD16_DMA },
3812 { "Slimtype DVD A DS8A8SH", NULL, ATA_HORKAGE_MAX_SEC_LBA48 },
3813 { "Slimtype DVD A DS8A9SH", NULL, ATA_HORKAGE_MAX_SEC_LBA48 },
3814
3815
3816
3817
3818
3819 { "ST380013AS", "3.20", ATA_HORKAGE_MAX_SEC_1024 },
3820
3821
3822
3823
3824
3825 { "LITEON CX1-JB*-HP", NULL, ATA_HORKAGE_MAX_SEC_1024 },
3826 { "LITEON EP1-*", NULL, ATA_HORKAGE_MAX_SEC_1024 },
3827
3828
3829
3830
3831
3832 { "WDC WD740ADFD-00", NULL, ATA_HORKAGE_NONCQ },
3833 { "WDC WD740ADFD-00NLR1", NULL, ATA_HORKAGE_NONCQ, },
3834
3835 { "FUJITSU MHT2060BH", NULL, ATA_HORKAGE_NONCQ },
3836
3837 { "Maxtor *", "BANC*", ATA_HORKAGE_NONCQ },
3838 { "Maxtor 7V300F0", "VA111630", ATA_HORKAGE_NONCQ },
3839 { "ST380817AS", "3.42", ATA_HORKAGE_NONCQ },
3840 { "ST3160023AS", "3.42", ATA_HORKAGE_NONCQ },
3841 { "OCZ CORE_SSD", "02.10104", ATA_HORKAGE_NONCQ },
3842
3843
3844 { "ST31500341AS", "SD1[5-9]", ATA_HORKAGE_NONCQ |
3845 ATA_HORKAGE_FIRMWARE_WARN },
3846
3847 { "ST31000333AS", "SD1[5-9]", ATA_HORKAGE_NONCQ |
3848 ATA_HORKAGE_FIRMWARE_WARN },
3849
3850 { "ST3640[36]23AS", "SD1[5-9]", ATA_HORKAGE_NONCQ |
3851 ATA_HORKAGE_FIRMWARE_WARN },
3852
3853 { "ST3320[68]13AS", "SD1[5-9]", ATA_HORKAGE_NONCQ |
3854 ATA_HORKAGE_FIRMWARE_WARN },
3855
3856
3857
3858 { "ST1000LM024 HN-M101MBB", NULL, ATA_HORKAGE_BROKEN_FPDMA_AA |
3859 ATA_HORKAGE_NOLPM, },
3860 { "VB0250EAVER", "HPG7", ATA_HORKAGE_BROKEN_FPDMA_AA },
3861
3862
3863
3864 { "HTS541060G9SA00", "MB3OC60D", ATA_HORKAGE_NONCQ, },
3865 { "HTS541080G9SA00", "MB4OC60D", ATA_HORKAGE_NONCQ, },
3866 { "HTS541010G9SA00", "MBZOC60D", ATA_HORKAGE_NONCQ, },
3867
3868
3869 { "C300-CTFDDAC128MAG", "0001", ATA_HORKAGE_NONCQ, },
3870
3871
3872 { "SanDisk SD[789]*", NULL, ATA_HORKAGE_MAX_TRIM_128M, },
3873
3874
3875 { "HDS724040KLSA80", "KFAOA20N", ATA_HORKAGE_BROKEN_HPA, },
3876 { "WDC WD3200JD-00KLB0", "WD-WCAMR1130137", ATA_HORKAGE_BROKEN_HPA },
3877 { "WDC WD2500JD-00HBB0", "WD-WMAL71490727", ATA_HORKAGE_BROKEN_HPA },
3878 { "MAXTOR 6L080L4", "A93.0500", ATA_HORKAGE_BROKEN_HPA },
3879
3880
3881 { "OCZ-VERTEX", "1.30", ATA_HORKAGE_BROKEN_HPA },
3882
3883
3884 { "ST340823A", NULL, ATA_HORKAGE_HPA_SIZE, },
3885 { "ST320413A", NULL, ATA_HORKAGE_HPA_SIZE, },
3886 { "ST310211A", NULL, ATA_HORKAGE_HPA_SIZE, },
3887
3888
3889 { "QUANTUM FIREBALLlct10 05", "A03.0900", ATA_HORKAGE_IVB, },
3890
3891 { "TSSTcorp CDDVDW SH-S202[HJN]", "SB0[01]", ATA_HORKAGE_IVB, },
3892
3893
3894 { "MTRON MSP-SATA*", NULL, ATA_HORKAGE_BRIDGE_OK, },
3895 { "BUFFALO HD-QSU2/R5", NULL, ATA_HORKAGE_BRIDGE_OK, },
3896
3897
3898 { "WD My Book", NULL, ATA_HORKAGE_1_5_GBPS, },
3899 { "Seagate FreeAgent GoFlex", NULL, ATA_HORKAGE_1_5_GBPS, },
3900
3901
3902
3903
3904
3905 { "PIONEER DVD-RW DVRTD08", NULL, ATA_HORKAGE_NOSETXFER },
3906 { "PIONEER DVD-RW DVRTD08A", NULL, ATA_HORKAGE_NOSETXFER },
3907 { "PIONEER DVD-RW DVR-215", NULL, ATA_HORKAGE_NOSETXFER },
3908 { "PIONEER DVD-RW DVR-212D", NULL, ATA_HORKAGE_NOSETXFER },
3909 { "PIONEER DVD-RW DVR-216D", NULL, ATA_HORKAGE_NOSETXFER },
3910
3911
3912 { "CT500BX100SSD1", NULL, ATA_HORKAGE_NOLPM },
3913
3914
3915 { "Crucial_CT512MX100*", "MU01", ATA_HORKAGE_NO_NCQ_TRIM |
3916 ATA_HORKAGE_ZERO_AFTER_TRIM |
3917 ATA_HORKAGE_NOLPM, },
3918
3919 { "Crucial_CT512MX100*", NULL, ATA_HORKAGE_ZERO_AFTER_TRIM |
3920 ATA_HORKAGE_NOLPM, },
3921
3922
3923 { "Crucial_CT480M500*", NULL, ATA_HORKAGE_NO_NCQ_TRIM |
3924 ATA_HORKAGE_ZERO_AFTER_TRIM |
3925 ATA_HORKAGE_NOLPM, },
3926 { "Crucial_CT960M500*", NULL, ATA_HORKAGE_NO_NCQ_TRIM |
3927 ATA_HORKAGE_ZERO_AFTER_TRIM |
3928 ATA_HORKAGE_NOLPM, },
3929
3930
3931 { "SAMSUNG MZMPC128HBFU-000MV", "CXM14M1Q", ATA_HORKAGE_NOLPM, },
3932 { "SAMSUNG SSD PM830 mSATA *", "CXM13D1Q", ATA_HORKAGE_NOLPM, },
3933 { "SAMSUNG MZ7TD256HAFV-000L9", NULL, ATA_HORKAGE_NOLPM, },
3934 { "SAMSUNG MZ7TE512HMHP-000L1", "EXT06L0Q", ATA_HORKAGE_NOLPM, },
3935
3936
3937 { "Micron_M500IT_*", "MU01", ATA_HORKAGE_NO_NCQ_TRIM |
3938 ATA_HORKAGE_ZERO_AFTER_TRIM, },
3939 { "Micron_M500_*", NULL, ATA_HORKAGE_NO_NCQ_TRIM |
3940 ATA_HORKAGE_ZERO_AFTER_TRIM, },
3941 { "Crucial_CT*M500*", NULL, ATA_HORKAGE_NO_NCQ_TRIM |
3942 ATA_HORKAGE_ZERO_AFTER_TRIM, },
3943 { "Micron_M5[15]0_*", "MU01", ATA_HORKAGE_NO_NCQ_TRIM |
3944 ATA_HORKAGE_ZERO_AFTER_TRIM, },
3945 { "Crucial_CT*M550*", "MU01", ATA_HORKAGE_NO_NCQ_TRIM |
3946 ATA_HORKAGE_ZERO_AFTER_TRIM, },
3947 { "Crucial_CT*MX100*", "MU01", ATA_HORKAGE_NO_NCQ_TRIM |
3948 ATA_HORKAGE_ZERO_AFTER_TRIM, },
3949 { "Samsung SSD 840*", NULL, ATA_HORKAGE_NO_NCQ_TRIM |
3950 ATA_HORKAGE_ZERO_AFTER_TRIM, },
3951 { "Samsung SSD 850*", NULL, ATA_HORKAGE_NO_NCQ_TRIM |
3952 ATA_HORKAGE_ZERO_AFTER_TRIM, },
3953 { "FCCT*M500*", NULL, ATA_HORKAGE_NO_NCQ_TRIM |
3954 ATA_HORKAGE_ZERO_AFTER_TRIM, },
3955
3956
3957 { "SuperSSpeed S238*", NULL, ATA_HORKAGE_NOTRIM, },
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975 { "INTEL*SSDSC2MH*", NULL, 0, },
3976
3977 { "Micron*", NULL, ATA_HORKAGE_ZERO_AFTER_TRIM, },
3978 { "Crucial*", NULL, ATA_HORKAGE_ZERO_AFTER_TRIM, },
3979 { "INTEL*SSD*", NULL, ATA_HORKAGE_ZERO_AFTER_TRIM, },
3980 { "SSD*INTEL*", NULL, ATA_HORKAGE_ZERO_AFTER_TRIM, },
3981 { "Samsung*SSD*", NULL, ATA_HORKAGE_ZERO_AFTER_TRIM, },
3982 { "SAMSUNG*SSD*", NULL, ATA_HORKAGE_ZERO_AFTER_TRIM, },
3983 { "SAMSUNG*MZ7KM*", NULL, ATA_HORKAGE_ZERO_AFTER_TRIM, },
3984 { "ST[1248][0248]0[FH]*", NULL, ATA_HORKAGE_ZERO_AFTER_TRIM, },
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995 { "WDC WD800JD-*", NULL, ATA_HORKAGE_WD_BROKEN_LPM },
3996 { "WDC WD1200JD-*", NULL, ATA_HORKAGE_WD_BROKEN_LPM },
3997 { "WDC WD1600JD-*", NULL, ATA_HORKAGE_WD_BROKEN_LPM },
3998 { "WDC WD2000JD-*", NULL, ATA_HORKAGE_WD_BROKEN_LPM },
3999 { "WDC WD2500JD-*", NULL, ATA_HORKAGE_WD_BROKEN_LPM },
4000 { "WDC WD3000JD-*", NULL, ATA_HORKAGE_WD_BROKEN_LPM },
4001 { "WDC WD3200JD-*", NULL, ATA_HORKAGE_WD_BROKEN_LPM },
4002
4003
4004 { }
4005};
4006
4007static unsigned long ata_dev_blacklisted(const struct ata_device *dev)
4008{
4009 unsigned char model_num[ATA_ID_PROD_LEN + 1];
4010 unsigned char model_rev[ATA_ID_FW_REV_LEN + 1];
4011 const struct ata_blacklist_entry *ad = ata_device_blacklist;
4012
4013 ata_id_c_string(dev->id, model_num, ATA_ID_PROD, sizeof(model_num));
4014 ata_id_c_string(dev->id, model_rev, ATA_ID_FW_REV, sizeof(model_rev));
4015
4016 while (ad->model_num) {
4017 if (glob_match(ad->model_num, model_num)) {
4018 if (ad->model_rev == NULL)
4019 return ad->horkage;
4020 if (glob_match(ad->model_rev, model_rev))
4021 return ad->horkage;
4022 }
4023 ad++;
4024 }
4025 return 0;
4026}
4027
4028static int ata_dma_blacklisted(const struct ata_device *dev)
4029{
4030
4031
4032
4033
4034 if ((dev->link->ap->flags & ATA_FLAG_PIO_POLLING) &&
4035 (dev->flags & ATA_DFLAG_CDB_INTR))
4036 return 1;
4037 return (dev->horkage & ATA_HORKAGE_NODMA) ? 1 : 0;
4038}
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048static int ata_is_40wire(struct ata_device *dev)
4049{
4050 if (dev->horkage & ATA_HORKAGE_IVB)
4051 return ata_drive_40wire_relaxed(dev->id);
4052 return ata_drive_40wire(dev->id);
4053}
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068static int cable_is_40wire(struct ata_port *ap)
4069{
4070 struct ata_link *link;
4071 struct ata_device *dev;
4072
4073
4074 if (ap->cbl == ATA_CBL_PATA40)
4075 return 1;
4076
4077
4078 if (ap->cbl == ATA_CBL_PATA80 || ap->cbl == ATA_CBL_SATA)
4079 return 0;
4080
4081
4082
4083
4084
4085 if (ap->cbl == ATA_CBL_PATA40_SHORT)
4086 return 0;
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096
4097 ata_for_each_link(link, ap, EDGE) {
4098 ata_for_each_dev(dev, link, ENABLED) {
4099 if (!ata_is_40wire(dev))
4100 return 0;
4101 }
4102 }
4103 return 1;
4104}
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118static void ata_dev_xfermask(struct ata_device *dev)
4119{
4120 struct ata_link *link = dev->link;
4121 struct ata_port *ap = link->ap;
4122 struct ata_host *host = ap->host;
4123 unsigned long xfer_mask;
4124
4125
4126 xfer_mask = ata_pack_xfermask(ap->pio_mask,
4127 ap->mwdma_mask, ap->udma_mask);
4128
4129
4130 xfer_mask &= ata_pack_xfermask(dev->pio_mask,
4131 dev->mwdma_mask, dev->udma_mask);
4132 xfer_mask &= ata_id_xfermask(dev->id);
4133
4134
4135
4136
4137
4138 if (ata_dev_pair(dev)) {
4139
4140 xfer_mask &= ~(0x03 << (ATA_SHIFT_PIO + 5));
4141
4142 xfer_mask &= ~(0x03 << (ATA_SHIFT_MWDMA + 3));
4143 }
4144
4145 if (ata_dma_blacklisted(dev)) {
4146 xfer_mask &= ~(ATA_MASK_MWDMA | ATA_MASK_UDMA);
4147 ata_dev_warn(dev,
4148 "device is on DMA blacklist, disabling DMA\n");
4149 }
4150
4151 if ((host->flags & ATA_HOST_SIMPLEX) &&
4152 host->simplex_claimed && host->simplex_claimed != ap) {
4153 xfer_mask &= ~(ATA_MASK_MWDMA | ATA_MASK_UDMA);
4154 ata_dev_warn(dev,
4155 "simplex DMA is claimed by other device, disabling DMA\n");
4156 }
4157
4158 if (ap->flags & ATA_FLAG_NO_IORDY)
4159 xfer_mask &= ata_pio_mask_no_iordy(dev);
4160
4161 if (ap->ops->mode_filter)
4162 xfer_mask = ap->ops->mode_filter(dev, xfer_mask);
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172 if (xfer_mask & (0xF8 << ATA_SHIFT_UDMA))
4173
4174 if (cable_is_40wire(ap)) {
4175 ata_dev_warn(dev,
4176 "limited to UDMA/33 due to 40-wire cable\n");
4177 xfer_mask &= ~(0xF8 << ATA_SHIFT_UDMA);
4178 }
4179
4180 ata_unpack_xfermask(xfer_mask, &dev->pio_mask,
4181 &dev->mwdma_mask, &dev->udma_mask);
4182}
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198static unsigned int ata_dev_set_xfermode(struct ata_device *dev)
4199{
4200 struct ata_taskfile tf;
4201 unsigned int err_mask;
4202
4203
4204 DPRINTK("set features - xfer mode\n");
4205
4206
4207
4208
4209 ata_tf_init(dev, &tf);
4210 tf.command = ATA_CMD_SET_FEATURES;
4211 tf.feature = SETFEATURES_XFER;
4212 tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE | ATA_TFLAG_POLLING;
4213 tf.protocol = ATA_PROT_NODATA;
4214
4215 if (ata_pio_need_iordy(dev))
4216 tf.nsect = dev->xfer_mode;
4217
4218 else if (ata_id_has_iordy(dev->id))
4219 tf.nsect = 0x01;
4220 else
4221 return 0;
4222
4223
4224 err_mask = ata_exec_internal(dev, &tf, NULL, DMA_NONE, NULL, 0, 15000);
4225
4226 DPRINTK("EXIT, err_mask=%x\n", err_mask);
4227 return err_mask;
4228}
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245unsigned int ata_dev_set_feature(struct ata_device *dev, u8 enable, u8 feature)
4246{
4247 struct ata_taskfile tf;
4248 unsigned int err_mask;
4249 unsigned long timeout = 0;
4250
4251
4252 DPRINTK("set features - SATA features\n");
4253
4254 ata_tf_init(dev, &tf);
4255 tf.command = ATA_CMD_SET_FEATURES;
4256 tf.feature = enable;
4257 tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
4258 tf.protocol = ATA_PROT_NODATA;
4259 tf.nsect = feature;
4260
4261 if (enable == SETFEATURES_SPINUP)
4262 timeout = ata_probe_timeout ?
4263 ata_probe_timeout * 1000 : SETFEATURES_SPINUP_TIMEOUT;
4264 err_mask = ata_exec_internal(dev, &tf, NULL, DMA_NONE, NULL, 0, timeout);
4265
4266 DPRINTK("EXIT, err_mask=%x\n", err_mask);
4267 return err_mask;
4268}
4269EXPORT_SYMBOL_GPL(ata_dev_set_feature);
4270
4271
4272
4273
4274
4275
4276
4277
4278
4279
4280
4281
4282
4283static unsigned int ata_dev_init_params(struct ata_device *dev,
4284 u16 heads, u16 sectors)
4285{
4286 struct ata_taskfile tf;
4287 unsigned int err_mask;
4288
4289
4290 if (sectors < 1 || sectors > 255 || heads < 1 || heads > 16)
4291 return AC_ERR_INVALID;
4292
4293
4294 DPRINTK("init dev params \n");
4295
4296 ata_tf_init(dev, &tf);
4297 tf.command = ATA_CMD_INIT_DEV_PARAMS;
4298 tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
4299 tf.protocol = ATA_PROT_NODATA;
4300 tf.nsect = sectors;
4301 tf.device |= (heads - 1) & 0x0f;
4302
4303 err_mask = ata_exec_internal(dev, &tf, NULL, DMA_NONE, NULL, 0, 0);
4304
4305
4306
4307 if (err_mask == AC_ERR_DEV && (tf.feature & ATA_ABORTED))
4308 err_mask = 0;
4309
4310 DPRINTK("EXIT, err_mask=%x\n", err_mask);
4311 return err_mask;
4312}
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323
4324
4325
4326
4327
4328int atapi_check_dma(struct ata_queued_cmd *qc)
4329{
4330 struct ata_port *ap = qc->ap;
4331
4332
4333
4334
4335 if (!(qc->dev->horkage & ATA_HORKAGE_ATAPI_MOD16_DMA) &&
4336 unlikely(qc->nbytes & 15))
4337 return 1;
4338
4339 if (ap->ops->check_atapi_dma)
4340 return ap->ops->check_atapi_dma(qc);
4341
4342 return 0;
4343}
4344
4345
4346
4347
4348
4349
4350
4351
4352
4353
4354
4355
4356
4357
4358
4359
4360int ata_std_qc_defer(struct ata_queued_cmd *qc)
4361{
4362 struct ata_link *link = qc->dev->link;
4363
4364 if (ata_is_ncq(qc->tf.protocol)) {
4365 if (!ata_tag_valid(link->active_tag))
4366 return 0;
4367 } else {
4368 if (!ata_tag_valid(link->active_tag) && !link->sactive)
4369 return 0;
4370 }
4371
4372 return ATA_DEFER_LINK;
4373}
4374EXPORT_SYMBOL_GPL(ata_std_qc_defer);
4375
4376enum ata_completion_errors ata_noop_qc_prep(struct ata_queued_cmd *qc)
4377{
4378 return AC_ERR_OK;
4379}
4380EXPORT_SYMBOL_GPL(ata_noop_qc_prep);
4381
4382
4383
4384
4385
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395void ata_sg_init(struct ata_queued_cmd *qc, struct scatterlist *sg,
4396 unsigned int n_elem)
4397{
4398 qc->sg = sg;
4399 qc->n_elem = n_elem;
4400 qc->cursg = qc->sg;
4401}
4402
4403#ifdef CONFIG_HAS_DMA
4404
4405
4406
4407
4408
4409
4410
4411
4412
4413
4414static void ata_sg_clean(struct ata_queued_cmd *qc)
4415{
4416 struct ata_port *ap = qc->ap;
4417 struct scatterlist *sg = qc->sg;
4418 int dir = qc->dma_dir;
4419
4420 WARN_ON_ONCE(sg == NULL);
4421
4422 VPRINTK("unmapping %u sg elements\n", qc->n_elem);
4423
4424 if (qc->n_elem)
4425 dma_unmap_sg(ap->dev, sg, qc->orig_n_elem, dir);
4426
4427 qc->flags &= ~ATA_QCFLAG_DMAMAP;
4428 qc->sg = NULL;
4429}
4430
4431
4432
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443
4444static int ata_sg_setup(struct ata_queued_cmd *qc)
4445{
4446 struct ata_port *ap = qc->ap;
4447 unsigned int n_elem;
4448
4449 VPRINTK("ENTER, ata%u\n", ap->print_id);
4450
4451 n_elem = dma_map_sg(ap->dev, qc->sg, qc->n_elem, qc->dma_dir);
4452 if (n_elem < 1)
4453 return -1;
4454
4455 VPRINTK("%d sg elements mapped\n", n_elem);
4456 qc->orig_n_elem = qc->n_elem;
4457 qc->n_elem = n_elem;
4458 qc->flags |= ATA_QCFLAG_DMAMAP;
4459
4460 return 0;
4461}
4462
4463#else
4464
4465static inline void ata_sg_clean(struct ata_queued_cmd *qc) {}
4466static inline int ata_sg_setup(struct ata_queued_cmd *qc) { return -1; }
4467
4468#endif
4469
4470
4471
4472
4473
4474
4475
4476
4477
4478
4479
4480
4481
4482void swap_buf_le16(u16 *buf, unsigned int buf_words)
4483{
4484#ifdef __BIG_ENDIAN
4485 unsigned int i;
4486
4487 for (i = 0; i < buf_words; i++)
4488 buf[i] = le16_to_cpu(buf[i]);
4489#endif
4490}
4491
4492
4493
4494
4495
4496
4497
4498
4499
4500
4501struct ata_queued_cmd *ata_qc_new_init(struct ata_device *dev, int tag)
4502{
4503 struct ata_port *ap = dev->link->ap;
4504 struct ata_queued_cmd *qc;
4505
4506
4507 if (unlikely(ap->pflags & ATA_PFLAG_FROZEN))
4508 return NULL;
4509
4510
4511 if (ap->flags & ATA_FLAG_SAS_HOST) {
4512 tag = ata_sas_allocate_tag(ap);
4513 if (tag < 0)
4514 return NULL;
4515 }
4516
4517 qc = __ata_qc_from_tag(ap, tag);
4518 qc->tag = qc->hw_tag = tag;
4519 qc->scsicmd = NULL;
4520 qc->ap = ap;
4521 qc->dev = dev;
4522
4523 ata_qc_reinit(qc);
4524
4525 return qc;
4526}
4527
4528
4529
4530
4531
4532
4533
4534
4535
4536
4537
4538void ata_qc_free(struct ata_queued_cmd *qc)
4539{
4540 struct ata_port *ap;
4541 unsigned int tag;
4542
4543 WARN_ON_ONCE(qc == NULL);
4544 ap = qc->ap;
4545
4546 qc->flags = 0;
4547 tag = qc->tag;
4548 if (ata_tag_valid(tag)) {
4549 qc->tag = ATA_TAG_POISON;
4550 if (ap->flags & ATA_FLAG_SAS_HOST)
4551 ata_sas_free_tag(tag, ap);
4552 }
4553}
4554
4555void __ata_qc_complete(struct ata_queued_cmd *qc)
4556{
4557 struct ata_port *ap;
4558 struct ata_link *link;
4559
4560 WARN_ON_ONCE(qc == NULL);
4561 WARN_ON_ONCE(!(qc->flags & ATA_QCFLAG_ACTIVE));
4562 ap = qc->ap;
4563 link = qc->dev->link;
4564
4565 if (likely(qc->flags & ATA_QCFLAG_DMAMAP))
4566 ata_sg_clean(qc);
4567
4568
4569 if (ata_is_ncq(qc->tf.protocol)) {
4570 link->sactive &= ~(1 << qc->hw_tag);
4571 if (!link->sactive)
4572 ap->nr_active_links--;
4573 } else {
4574 link->active_tag = ATA_TAG_POISON;
4575 ap->nr_active_links--;
4576 }
4577
4578
4579 if (unlikely(qc->flags & ATA_QCFLAG_CLEAR_EXCL &&
4580 ap->excl_link == link))
4581 ap->excl_link = NULL;
4582
4583
4584
4585
4586
4587 qc->flags &= ~ATA_QCFLAG_ACTIVE;
4588 ap->qc_active &= ~(1ULL << qc->tag);
4589
4590
4591 qc->complete_fn(qc);
4592}
4593
4594static void fill_result_tf(struct ata_queued_cmd *qc)
4595{
4596 struct ata_port *ap = qc->ap;
4597
4598 qc->result_tf.flags = qc->tf.flags;
4599 ap->ops->qc_fill_rtf(qc);
4600}
4601
4602static void ata_verify_xfer(struct ata_queued_cmd *qc)
4603{
4604 struct ata_device *dev = qc->dev;
4605
4606 if (!ata_is_data(qc->tf.protocol))
4607 return;
4608
4609 if ((dev->mwdma_mask || dev->udma_mask) && ata_is_pio(qc->tf.protocol))
4610 return;
4611
4612 dev->flags &= ~ATA_DFLAG_DUBIOUS_XFER;
4613}
4614
4615
4616
4617
4618
4619
4620
4621
4622
4623
4624
4625
4626
4627
4628
4629
4630void ata_qc_complete(struct ata_queued_cmd *qc)
4631{
4632 struct ata_port *ap = qc->ap;
4633
4634
4635 ledtrig_disk_activity(!!(qc->tf.flags & ATA_TFLAG_WRITE));
4636
4637
4638
4639
4640
4641
4642
4643
4644
4645
4646
4647
4648
4649
4650 if (ap->ops->error_handler) {
4651 struct ata_device *dev = qc->dev;
4652 struct ata_eh_info *ehi = &dev->link->eh_info;
4653
4654 if (unlikely(qc->err_mask))
4655 qc->flags |= ATA_QCFLAG_FAILED;
4656
4657
4658
4659
4660
4661 if (unlikely(ata_tag_internal(qc->tag))) {
4662 fill_result_tf(qc);
4663 trace_ata_qc_complete_internal(qc);
4664 __ata_qc_complete(qc);
4665 return;
4666 }
4667
4668
4669
4670
4671
4672 if (unlikely(qc->flags & ATA_QCFLAG_FAILED)) {
4673 fill_result_tf(qc);
4674 trace_ata_qc_complete_failed(qc);
4675 ata_qc_schedule_eh(qc);
4676 return;
4677 }
4678
4679 WARN_ON_ONCE(ap->pflags & ATA_PFLAG_FROZEN);
4680
4681
4682 if (qc->flags & ATA_QCFLAG_RESULT_TF)
4683 fill_result_tf(qc);
4684
4685 trace_ata_qc_complete_done(qc);
4686
4687
4688
4689 switch (qc->tf.command) {
4690 case ATA_CMD_SET_FEATURES:
4691 if (qc->tf.feature != SETFEATURES_WC_ON &&
4692 qc->tf.feature != SETFEATURES_WC_OFF &&
4693 qc->tf.feature != SETFEATURES_RA_ON &&
4694 qc->tf.feature != SETFEATURES_RA_OFF)
4695 break;
4696 fallthrough;
4697 case ATA_CMD_INIT_DEV_PARAMS:
4698 case ATA_CMD_SET_MULTI:
4699
4700 ehi->dev_action[dev->devno] |= ATA_EH_REVALIDATE;
4701 ata_port_schedule_eh(ap);
4702 break;
4703
4704 case ATA_CMD_SLEEP:
4705 dev->flags |= ATA_DFLAG_SLEEPING;
4706 break;
4707 }
4708
4709 if (unlikely(dev->flags & ATA_DFLAG_DUBIOUS_XFER))
4710 ata_verify_xfer(qc);
4711
4712 __ata_qc_complete(qc);
4713 } else {
4714 if (qc->flags & ATA_QCFLAG_EH_SCHEDULED)
4715 return;
4716
4717
4718 if (qc->err_mask || qc->flags & ATA_QCFLAG_RESULT_TF)
4719 fill_result_tf(qc);
4720
4721 __ata_qc_complete(qc);
4722 }
4723}
4724EXPORT_SYMBOL_GPL(ata_qc_complete);
4725
4726
4727
4728
4729
4730
4731
4732
4733
4734
4735
4736u64 ata_qc_get_active(struct ata_port *ap)
4737{
4738 u64 qc_active = ap->qc_active;
4739
4740
4741 if (qc_active & (1ULL << ATA_TAG_INTERNAL)) {
4742 qc_active |= (1 << 0);
4743 qc_active &= ~(1ULL << ATA_TAG_INTERNAL);
4744 }
4745
4746 return qc_active;
4747}
4748EXPORT_SYMBOL_GPL(ata_qc_get_active);
4749
4750
4751
4752
4753
4754
4755
4756
4757
4758
4759
4760
4761
4762void ata_qc_issue(struct ata_queued_cmd *qc)
4763{
4764 struct ata_port *ap = qc->ap;
4765 struct ata_link *link = qc->dev->link;
4766 u8 prot = qc->tf.protocol;
4767
4768
4769
4770
4771
4772 WARN_ON_ONCE(ap->ops->error_handler && ata_tag_valid(link->active_tag));
4773
4774 if (ata_is_ncq(prot)) {
4775 WARN_ON_ONCE(link->sactive & (1 << qc->hw_tag));
4776
4777 if (!link->sactive)
4778 ap->nr_active_links++;
4779 link->sactive |= 1 << qc->hw_tag;
4780 } else {
4781 WARN_ON_ONCE(link->sactive);
4782
4783 ap->nr_active_links++;
4784 link->active_tag = qc->tag;
4785 }
4786
4787 qc->flags |= ATA_QCFLAG_ACTIVE;
4788 ap->qc_active |= 1ULL << qc->tag;
4789
4790
4791
4792
4793
4794 if (ata_is_data(prot) && (!qc->sg || !qc->n_elem || !qc->nbytes))
4795 goto sys_err;
4796
4797 if (ata_is_dma(prot) || (ata_is_pio(prot) &&
4798 (ap->flags & ATA_FLAG_PIO_DMA)))
4799 if (ata_sg_setup(qc))
4800 goto sys_err;
4801
4802
4803 if (unlikely(qc->dev->flags & ATA_DFLAG_SLEEPING)) {
4804 link->eh_info.action |= ATA_EH_RESET;
4805 ata_ehi_push_desc(&link->eh_info, "waking up from sleep");
4806 ata_link_abort(link);
4807 return;
4808 }
4809
4810 qc->err_mask |= ap->ops->qc_prep(qc);
4811 if (unlikely(qc->err_mask))
4812 goto err;
4813 trace_ata_qc_issue(qc);
4814 qc->err_mask |= ap->ops->qc_issue(qc);
4815 if (unlikely(qc->err_mask))
4816 goto err;
4817 return;
4818
4819sys_err:
4820 qc->err_mask |= AC_ERR_SYSTEM;
4821err:
4822 ata_qc_complete(qc);
4823}
4824
4825
4826
4827
4828
4829
4830
4831
4832
4833
4834
4835
4836
4837
4838
4839bool ata_phys_link_online(struct ata_link *link)
4840{
4841 u32 sstatus;
4842
4843 if (sata_scr_read(link, SCR_STATUS, &sstatus) == 0 &&
4844 ata_sstatus_online(sstatus))
4845 return true;
4846 return false;
4847}
4848
4849
4850
4851
4852
4853
4854
4855
4856
4857
4858
4859
4860
4861
4862
4863bool ata_phys_link_offline(struct ata_link *link)
4864{
4865 u32 sstatus;
4866
4867 if (sata_scr_read(link, SCR_STATUS, &sstatus) == 0 &&
4868 !ata_sstatus_online(sstatus))
4869 return true;
4870 return false;
4871}
4872
4873
4874
4875
4876
4877
4878
4879
4880
4881
4882
4883
4884
4885
4886
4887
4888
4889bool ata_link_online(struct ata_link *link)
4890{
4891 struct ata_link *slave = link->ap->slave_link;
4892
4893 WARN_ON(link == slave);
4894
4895 return ata_phys_link_online(link) ||
4896 (slave && ata_phys_link_online(slave));
4897}
4898EXPORT_SYMBOL_GPL(ata_link_online);
4899
4900
4901
4902
4903
4904
4905
4906
4907
4908
4909
4910
4911
4912
4913
4914
4915
4916bool ata_link_offline(struct ata_link *link)
4917{
4918 struct ata_link *slave = link->ap->slave_link;
4919
4920 WARN_ON(link == slave);
4921
4922 return ata_phys_link_offline(link) &&
4923 (!slave || ata_phys_link_offline(slave));
4924}
4925EXPORT_SYMBOL_GPL(ata_link_offline);
4926
4927#ifdef CONFIG_PM
4928static void ata_port_request_pm(struct ata_port *ap, pm_message_t mesg,
4929 unsigned int action, unsigned int ehi_flags,
4930 bool async)
4931{
4932 struct ata_link *link;
4933 unsigned long flags;
4934
4935
4936
4937
4938 if (ap->pflags & ATA_PFLAG_PM_PENDING) {
4939 ata_port_wait_eh(ap);
4940 WARN_ON(ap->pflags & ATA_PFLAG_PM_PENDING);
4941 }
4942
4943
4944 spin_lock_irqsave(ap->lock, flags);
4945
4946 ap->pm_mesg = mesg;
4947 ap->pflags |= ATA_PFLAG_PM_PENDING;
4948 ata_for_each_link(link, ap, HOST_FIRST) {
4949 link->eh_info.action |= action;
4950 link->eh_info.flags |= ehi_flags;
4951 }
4952
4953 ata_port_schedule_eh(ap);
4954
4955 spin_unlock_irqrestore(ap->lock, flags);
4956
4957 if (!async) {
4958 ata_port_wait_eh(ap);
4959 WARN_ON(ap->pflags & ATA_PFLAG_PM_PENDING);
4960 }
4961}
4962
4963
4964
4965
4966
4967
4968
4969
4970static const unsigned int ata_port_suspend_ehi = ATA_EHI_QUIET
4971 | ATA_EHI_NO_AUTOPSY
4972 | ATA_EHI_NO_RECOVERY;
4973
4974static void ata_port_suspend(struct ata_port *ap, pm_message_t mesg)
4975{
4976 ata_port_request_pm(ap, mesg, 0, ata_port_suspend_ehi, false);
4977}
4978
4979static void ata_port_suspend_async(struct ata_port *ap, pm_message_t mesg)
4980{
4981 ata_port_request_pm(ap, mesg, 0, ata_port_suspend_ehi, true);
4982}
4983
4984static int ata_port_pm_suspend(struct device *dev)
4985{
4986 struct ata_port *ap = to_ata_port(dev);
4987
4988 if (pm_runtime_suspended(dev))
4989 return 0;
4990
4991 ata_port_suspend(ap, PMSG_SUSPEND);
4992 return 0;
4993}
4994
4995static int ata_port_pm_freeze(struct device *dev)
4996{
4997 struct ata_port *ap = to_ata_port(dev);
4998
4999 if (pm_runtime_suspended(dev))
5000 return 0;
5001
5002 ata_port_suspend(ap, PMSG_FREEZE);
5003 return 0;
5004}
5005
5006static int ata_port_pm_poweroff(struct device *dev)
5007{
5008 ata_port_suspend(to_ata_port(dev), PMSG_HIBERNATE);
5009 return 0;
5010}
5011
5012static const unsigned int ata_port_resume_ehi = ATA_EHI_NO_AUTOPSY
5013 | ATA_EHI_QUIET;
5014
5015static void ata_port_resume(struct ata_port *ap, pm_message_t mesg)
5016{
5017 ata_port_request_pm(ap, mesg, ATA_EH_RESET, ata_port_resume_ehi, false);
5018}
5019
5020static void ata_port_resume_async(struct ata_port *ap, pm_message_t mesg)
5021{
5022 ata_port_request_pm(ap, mesg, ATA_EH_RESET, ata_port_resume_ehi, true);
5023}
5024
5025static int ata_port_pm_resume(struct device *dev)
5026{
5027 ata_port_resume_async(to_ata_port(dev), PMSG_RESUME);
5028 pm_runtime_disable(dev);
5029 pm_runtime_set_active(dev);
5030 pm_runtime_enable(dev);
5031 return 0;
5032}
5033
5034
5035
5036
5037
5038
5039
5040
5041
5042static int ata_port_runtime_idle(struct device *dev)
5043{
5044 struct ata_port *ap = to_ata_port(dev);
5045 struct ata_link *link;
5046 struct ata_device *adev;
5047
5048 ata_for_each_link(link, ap, HOST_FIRST) {
5049 ata_for_each_dev(adev, link, ENABLED)
5050 if (adev->class == ATA_DEV_ATAPI &&
5051 !zpodd_dev_enabled(adev))
5052 return -EBUSY;
5053 }
5054
5055 return 0;
5056}
5057
5058static int ata_port_runtime_suspend(struct device *dev)
5059{
5060 ata_port_suspend(to_ata_port(dev), PMSG_AUTO_SUSPEND);
5061 return 0;
5062}
5063
5064static int ata_port_runtime_resume(struct device *dev)
5065{
5066 ata_port_resume(to_ata_port(dev), PMSG_AUTO_RESUME);
5067 return 0;
5068}
5069
5070static const struct dev_pm_ops ata_port_pm_ops = {
5071 .suspend = ata_port_pm_suspend,
5072 .resume = ata_port_pm_resume,
5073 .freeze = ata_port_pm_freeze,
5074 .thaw = ata_port_pm_resume,
5075 .poweroff = ata_port_pm_poweroff,
5076 .restore = ata_port_pm_resume,
5077
5078 .runtime_suspend = ata_port_runtime_suspend,
5079 .runtime_resume = ata_port_runtime_resume,
5080 .runtime_idle = ata_port_runtime_idle,
5081};
5082
5083
5084
5085
5086
5087
5088void ata_sas_port_suspend(struct ata_port *ap)
5089{
5090 ata_port_suspend_async(ap, PMSG_SUSPEND);
5091}
5092EXPORT_SYMBOL_GPL(ata_sas_port_suspend);
5093
5094void ata_sas_port_resume(struct ata_port *ap)
5095{
5096 ata_port_resume_async(ap, PMSG_RESUME);
5097}
5098EXPORT_SYMBOL_GPL(ata_sas_port_resume);
5099
5100
5101
5102
5103
5104
5105
5106
5107int ata_host_suspend(struct ata_host *host, pm_message_t mesg)
5108{
5109 host->dev->power.power_state = mesg;
5110 return 0;
5111}
5112EXPORT_SYMBOL_GPL(ata_host_suspend);
5113
5114
5115
5116
5117
5118
5119
5120void ata_host_resume(struct ata_host *host)
5121{
5122 host->dev->power.power_state = PMSG_ON;
5123}
5124EXPORT_SYMBOL_GPL(ata_host_resume);
5125#endif
5126
5127const struct device_type ata_port_type = {
5128 .name = "ata_port",
5129#ifdef CONFIG_PM
5130 .pm = &ata_port_pm_ops,
5131#endif
5132};
5133
5134
5135
5136
5137
5138
5139
5140
5141
5142
5143void ata_dev_init(struct ata_device *dev)
5144{
5145 struct ata_link *link = ata_dev_phys_link(dev);
5146 struct ata_port *ap = link->ap;
5147 unsigned long flags;
5148
5149
5150 link->sata_spd_limit = link->hw_sata_spd_limit;
5151 link->sata_spd = 0;
5152
5153
5154
5155
5156
5157 spin_lock_irqsave(ap->lock, flags);
5158 dev->flags &= ~ATA_DFLAG_INIT_MASK;
5159 dev->horkage = 0;
5160 spin_unlock_irqrestore(ap->lock, flags);
5161
5162 memset((void *)dev + ATA_DEVICE_CLEAR_BEGIN, 0,
5163 ATA_DEVICE_CLEAR_END - ATA_DEVICE_CLEAR_BEGIN);
5164 dev->pio_mask = UINT_MAX;
5165 dev->mwdma_mask = UINT_MAX;
5166 dev->udma_mask = UINT_MAX;
5167}
5168
5169
5170
5171
5172
5173
5174
5175
5176
5177
5178
5179
5180void ata_link_init(struct ata_port *ap, struct ata_link *link, int pmp)
5181{
5182 int i;
5183
5184
5185 memset((void *)link + ATA_LINK_CLEAR_BEGIN, 0,
5186 ATA_LINK_CLEAR_END - ATA_LINK_CLEAR_BEGIN);
5187
5188 link->ap = ap;
5189 link->pmp = pmp;
5190 link->active_tag = ATA_TAG_POISON;
5191 link->hw_sata_spd_limit = UINT_MAX;
5192
5193
5194 for (i = 0; i < ATA_MAX_DEVICES; i++) {
5195 struct ata_device *dev = &link->device[i];
5196
5197 dev->link = link;
5198 dev->devno = dev - link->device;
5199#ifdef CONFIG_ATA_ACPI
5200 dev->gtf_filter = ata_acpi_gtf_filter;
5201#endif
5202 ata_dev_init(dev);
5203 }
5204}
5205
5206
5207
5208
5209
5210
5211
5212
5213
5214
5215
5216
5217
5218
5219int sata_link_init_spd(struct ata_link *link)
5220{
5221 u8 spd;
5222 int rc;
5223
5224 rc = sata_scr_read(link, SCR_CONTROL, &link->saved_scontrol);
5225 if (rc)
5226 return rc;
5227
5228 spd = (link->saved_scontrol >> 4) & 0xf;
5229 if (spd)
5230 link->hw_sata_spd_limit &= (1 << spd) - 1;
5231
5232 ata_force_link_limits(link);
5233
5234 link->sata_spd_limit = link->hw_sata_spd_limit;
5235
5236 return 0;
5237}
5238
5239
5240
5241
5242
5243
5244
5245
5246
5247
5248
5249
5250
5251struct ata_port *ata_port_alloc(struct ata_host *host)
5252{
5253 struct ata_port *ap;
5254
5255 DPRINTK("ENTER\n");
5256
5257 ap = kzalloc(sizeof(*ap), GFP_KERNEL);
5258 if (!ap)
5259 return NULL;
5260
5261 ap->pflags |= ATA_PFLAG_INITIALIZING | ATA_PFLAG_FROZEN;
5262 ap->lock = &host->lock;
5263 ap->print_id = -1;
5264 ap->local_port_no = -1;
5265 ap->host = host;
5266 ap->dev = host->dev;
5267
5268#if defined(ATA_VERBOSE_DEBUG)
5269
5270 ap->msg_enable = 0x00FF;
5271#elif defined(ATA_DEBUG)
5272 ap->msg_enable = ATA_MSG_DRV | ATA_MSG_INFO | ATA_MSG_CTL | ATA_MSG_WARN | ATA_MSG_ERR;
5273#else
5274 ap->msg_enable = ATA_MSG_DRV | ATA_MSG_ERR | ATA_MSG_WARN;
5275#endif
5276
5277 mutex_init(&ap->scsi_scan_mutex);
5278 INIT_DELAYED_WORK(&ap->hotplug_task, ata_scsi_hotplug);
5279 INIT_WORK(&ap->scsi_rescan_task, ata_scsi_dev_rescan);
5280 INIT_LIST_HEAD(&ap->eh_done_q);
5281 init_waitqueue_head(&ap->eh_wait_q);
5282 init_completion(&ap->park_req_pending);
5283 timer_setup(&ap->fastdrain_timer, ata_eh_fastdrain_timerfn,
5284 TIMER_DEFERRABLE);
5285
5286 ap->cbl = ATA_CBL_NONE;
5287
5288 ata_link_init(ap, &ap->link, 0);
5289
5290#ifdef ATA_IRQ_TRAP
5291 ap->stats.unhandled_irq = 1;
5292 ap->stats.idle_irq = 1;
5293#endif
5294 ata_sff_port_init(ap);
5295
5296 return ap;
5297}
5298
5299static void ata_devres_release(struct device *gendev, void *res)
5300{
5301 struct ata_host *host = dev_get_drvdata(gendev);
5302 int i;
5303
5304 for (i = 0; i < host->n_ports; i++) {
5305 struct ata_port *ap = host->ports[i];
5306
5307 if (!ap)
5308 continue;
5309
5310 if (ap->scsi_host)
5311 scsi_host_put(ap->scsi_host);
5312
5313 }
5314
5315 dev_set_drvdata(gendev, NULL);
5316 ata_host_put(host);
5317}
5318
5319static void ata_host_release(struct kref *kref)
5320{
5321 struct ata_host *host = container_of(kref, struct ata_host, kref);
5322 int i;
5323
5324 for (i = 0; i < host->n_ports; i++) {
5325 struct ata_port *ap = host->ports[i];
5326
5327 kfree(ap->pmp_link);
5328 kfree(ap->slave_link);
5329 kfree(ap);
5330 host->ports[i] = NULL;
5331 }
5332 kfree(host);
5333}
5334
5335void ata_host_get(struct ata_host *host)
5336{
5337 kref_get(&host->kref);
5338}
5339
5340void ata_host_put(struct ata_host *host)
5341{
5342 kref_put(&host->kref, ata_host_release);
5343}
5344EXPORT_SYMBOL_GPL(ata_host_put);
5345
5346
5347
5348
5349
5350
5351
5352
5353
5354
5355
5356
5357
5358
5359
5360
5361
5362
5363
5364
5365
5366struct ata_host *ata_host_alloc(struct device *dev, int max_ports)
5367{
5368 struct ata_host *host;
5369 size_t sz;
5370 int i;
5371 void *dr;
5372
5373 DPRINTK("ENTER\n");
5374
5375
5376 sz = sizeof(struct ata_host) + (max_ports + 1) * sizeof(void *);
5377 host = kzalloc(sz, GFP_KERNEL);
5378 if (!host)
5379 return NULL;
5380
5381 if (!devres_open_group(dev, NULL, GFP_KERNEL))
5382 goto err_free;
5383
5384 dr = devres_alloc(ata_devres_release, 0, GFP_KERNEL);
5385 if (!dr)
5386 goto err_out;
5387
5388 devres_add(dev, dr);
5389 dev_set_drvdata(dev, host);
5390
5391 spin_lock_init(&host->lock);
5392 mutex_init(&host->eh_mutex);
5393 host->dev = dev;
5394 host->n_ports = max_ports;
5395 kref_init(&host->kref);
5396
5397
5398 for (i = 0; i < max_ports; i++) {
5399 struct ata_port *ap;
5400
5401 ap = ata_port_alloc(host);
5402 if (!ap)
5403 goto err_out;
5404
5405 ap->port_no = i;
5406 host->ports[i] = ap;
5407 }
5408
5409 devres_remove_group(dev, NULL);
5410 return host;
5411
5412 err_out:
5413 devres_release_group(dev, NULL);
5414 err_free:
5415 kfree(host);
5416 return NULL;
5417}
5418EXPORT_SYMBOL_GPL(ata_host_alloc);
5419
5420
5421
5422
5423
5424
5425
5426
5427
5428
5429
5430
5431
5432
5433
5434
5435
5436struct ata_host *ata_host_alloc_pinfo(struct device *dev,
5437 const struct ata_port_info * const * ppi,
5438 int n_ports)
5439{
5440 const struct ata_port_info *pi;
5441 struct ata_host *host;
5442 int i, j;
5443
5444 host = ata_host_alloc(dev, n_ports);
5445 if (!host)
5446 return NULL;
5447
5448 for (i = 0, j = 0, pi = NULL; i < host->n_ports; i++) {
5449 struct ata_port *ap = host->ports[i];
5450
5451 if (ppi[j])
5452 pi = ppi[j++];
5453
5454 ap->pio_mask = pi->pio_mask;
5455 ap->mwdma_mask = pi->mwdma_mask;
5456 ap->udma_mask = pi->udma_mask;
5457 ap->flags |= pi->flags;
5458 ap->link.flags |= pi->link_flags;
5459 ap->ops = pi->port_ops;
5460
5461 if (!host->ops && (pi->port_ops != &ata_dummy_port_ops))
5462 host->ops = pi->port_ops;
5463 }
5464
5465 return host;
5466}
5467EXPORT_SYMBOL_GPL(ata_host_alloc_pinfo);
5468
5469static void ata_host_stop(struct device *gendev, void *res)
5470{
5471 struct ata_host *host = dev_get_drvdata(gendev);
5472 int i;
5473
5474 WARN_ON(!(host->flags & ATA_HOST_STARTED));
5475
5476 for (i = 0; i < host->n_ports; i++) {
5477 struct ata_port *ap = host->ports[i];
5478
5479 if (ap->ops->port_stop)
5480 ap->ops->port_stop(ap);
5481 }
5482
5483 if (host->ops->host_stop)
5484 host->ops->host_stop(host);
5485}
5486
5487
5488
5489
5490
5491
5492
5493
5494
5495
5496
5497
5498
5499
5500
5501
5502
5503
5504
5505
5506
5507static void ata_finalize_port_ops(struct ata_port_operations *ops)
5508{
5509 static DEFINE_SPINLOCK(lock);
5510 const struct ata_port_operations *cur;
5511 void **begin = (void **)ops;
5512 void **end = (void **)&ops->inherits;
5513 void **pp;
5514
5515 if (!ops || !ops->inherits)
5516 return;
5517
5518 spin_lock(&lock);
5519
5520 for (cur = ops->inherits; cur; cur = cur->inherits) {
5521 void **inherit = (void **)cur;
5522
5523 for (pp = begin; pp < end; pp++, inherit++)
5524 if (!*pp)
5525 *pp = *inherit;
5526 }
5527
5528 for (pp = begin; pp < end; pp++)
5529 if (IS_ERR(*pp))
5530 *pp = NULL;
5531
5532 ops->inherits = NULL;
5533
5534 spin_unlock(&lock);
5535}
5536
5537
5538
5539
5540
5541
5542
5543
5544
5545
5546
5547
5548
5549
5550
5551
5552
5553int ata_host_start(struct ata_host *host)
5554{
5555 int have_stop = 0;
5556 void *start_dr = NULL;
5557 int i, rc;
5558
5559 if (host->flags & ATA_HOST_STARTED)
5560 return 0;
5561
5562 ata_finalize_port_ops(host->ops);
5563
5564 for (i = 0; i < host->n_ports; i++) {
5565 struct ata_port *ap = host->ports[i];
5566
5567 ata_finalize_port_ops(ap->ops);
5568
5569 if (!host->ops && !ata_port_is_dummy(ap))
5570 host->ops = ap->ops;
5571
5572 if (ap->ops->port_stop)
5573 have_stop = 1;
5574 }
5575
5576 if (host->ops->host_stop)
5577 have_stop = 1;
5578
5579 if (have_stop) {
5580 start_dr = devres_alloc(ata_host_stop, 0, GFP_KERNEL);
5581 if (!start_dr)
5582 return -ENOMEM;
5583 }
5584
5585 for (i = 0; i < host->n_ports; i++) {
5586 struct ata_port *ap = host->ports[i];
5587
5588 if (ap->ops->port_start) {
5589 rc = ap->ops->port_start(ap);
5590 if (rc) {
5591 if (rc != -ENODEV)
5592 dev_err(host->dev,
5593 "failed to start port %d (errno=%d)\n",
5594 i, rc);
5595 goto err_out;
5596 }
5597 }
5598 ata_eh_freeze_port(ap);
5599 }
5600
5601 if (start_dr)
5602 devres_add(host->dev, start_dr);
5603 host->flags |= ATA_HOST_STARTED;
5604 return 0;
5605
5606 err_out:
5607 while (--i >= 0) {
5608 struct ata_port *ap = host->ports[i];
5609
5610 if (ap->ops->port_stop)
5611 ap->ops->port_stop(ap);
5612 }
5613 devres_free(start_dr);
5614 return rc;
5615}
5616EXPORT_SYMBOL_GPL(ata_host_start);
5617
5618
5619
5620
5621
5622
5623
5624
5625void ata_host_init(struct ata_host *host, struct device *dev,
5626 struct ata_port_operations *ops)
5627{
5628 spin_lock_init(&host->lock);
5629 mutex_init(&host->eh_mutex);
5630 host->n_tags = ATA_MAX_QUEUE;
5631 host->dev = dev;
5632 host->ops = ops;
5633 kref_init(&host->kref);
5634}
5635EXPORT_SYMBOL_GPL(ata_host_init);
5636
5637void __ata_port_probe(struct ata_port *ap)
5638{
5639 struct ata_eh_info *ehi = &ap->link.eh_info;
5640 unsigned long flags;
5641
5642
5643 spin_lock_irqsave(ap->lock, flags);
5644
5645 ehi->probe_mask |= ATA_ALL_DEVICES;
5646 ehi->action |= ATA_EH_RESET;
5647 ehi->flags |= ATA_EHI_NO_AUTOPSY | ATA_EHI_QUIET;
5648
5649 ap->pflags &= ~ATA_PFLAG_INITIALIZING;
5650 ap->pflags |= ATA_PFLAG_LOADING;
5651 ata_port_schedule_eh(ap);
5652
5653 spin_unlock_irqrestore(ap->lock, flags);
5654}
5655
5656int ata_port_probe(struct ata_port *ap)
5657{
5658 int rc = 0;
5659
5660 if (ap->ops->error_handler) {
5661 __ata_port_probe(ap);
5662 ata_port_wait_eh(ap);
5663 } else {
5664 DPRINTK("ata%u: bus probe begin\n", ap->print_id);
5665 rc = ata_bus_probe(ap);
5666 DPRINTK("ata%u: bus probe end\n", ap->print_id);
5667 }
5668 return rc;
5669}
5670
5671
5672static void async_port_probe(void *data, async_cookie_t cookie)
5673{
5674 struct ata_port *ap = data;
5675
5676
5677
5678
5679
5680
5681
5682
5683 if (!(ap->host->flags & ATA_HOST_PARALLEL_SCAN) && ap->port_no != 0)
5684 async_synchronize_cookie(cookie);
5685
5686 (void)ata_port_probe(ap);
5687
5688
5689 async_synchronize_cookie(cookie);
5690
5691 ata_scsi_scan_host(ap, 1);
5692}
5693
5694
5695
5696
5697
5698
5699
5700
5701
5702
5703
5704
5705
5706
5707
5708
5709
5710int ata_host_register(struct ata_host *host, struct scsi_host_template *sht)
5711{
5712 int i, rc;
5713
5714 host->n_tags = clamp(sht->can_queue, 1, ATA_MAX_QUEUE);
5715
5716
5717 if (!(host->flags & ATA_HOST_STARTED)) {
5718 dev_err(host->dev, "BUG: trying to register unstarted host\n");
5719 WARN_ON(1);
5720 return -EINVAL;
5721 }
5722
5723
5724
5725
5726
5727 for (i = host->n_ports; host->ports[i]; i++)
5728 kfree(host->ports[i]);
5729
5730
5731 for (i = 0; i < host->n_ports; i++) {
5732 host->ports[i]->print_id = atomic_inc_return(&ata_print_id);
5733 host->ports[i]->local_port_no = i + 1;
5734 }
5735
5736
5737 for (i = 0; i < host->n_ports; i++) {
5738 rc = ata_tport_add(host->dev,host->ports[i]);
5739 if (rc) {
5740 goto err_tadd;
5741 }
5742 }
5743
5744 rc = ata_scsi_add_hosts(host, sht);
5745 if (rc)
5746 goto err_tadd;
5747
5748
5749 for (i = 0; i < host->n_ports; i++) {
5750 struct ata_port *ap = host->ports[i];
5751 unsigned long xfer_mask;
5752
5753
5754 if (ap->cbl == ATA_CBL_NONE && (ap->flags & ATA_FLAG_SATA))
5755 ap->cbl = ATA_CBL_SATA;
5756
5757
5758 sata_link_init_spd(&ap->link);
5759 if (ap->slave_link)
5760 sata_link_init_spd(ap->slave_link);
5761
5762
5763 xfer_mask = ata_pack_xfermask(ap->pio_mask, ap->mwdma_mask,
5764 ap->udma_mask);
5765
5766 if (!ata_port_is_dummy(ap)) {
5767 ata_port_info(ap, "%cATA max %s %s\n",
5768 (ap->flags & ATA_FLAG_SATA) ? 'S' : 'P',
5769 ata_mode_string(xfer_mask),
5770 ap->link.eh_info.desc);
5771 ata_ehi_clear_desc(&ap->link.eh_info);
5772 } else
5773 ata_port_info(ap, "DUMMY\n");
5774 }
5775
5776
5777 for (i = 0; i < host->n_ports; i++) {
5778 struct ata_port *ap = host->ports[i];
5779 ap->cookie = async_schedule(async_port_probe, ap);
5780 }
5781
5782 return 0;
5783
5784 err_tadd:
5785 while (--i >= 0) {
5786 ata_tport_delete(host->ports[i]);
5787 }
5788 return rc;
5789
5790}
5791EXPORT_SYMBOL_GPL(ata_host_register);
5792
5793
5794
5795
5796
5797
5798
5799
5800
5801
5802
5803
5804
5805
5806
5807
5808
5809
5810
5811
5812
5813
5814
5815
5816int ata_host_activate(struct ata_host *host, int irq,
5817 irq_handler_t irq_handler, unsigned long irq_flags,
5818 struct scsi_host_template *sht)
5819{
5820 int i, rc;
5821 char *irq_desc;
5822
5823 rc = ata_host_start(host);
5824 if (rc)
5825 return rc;
5826
5827
5828 if (!irq) {
5829 WARN_ON(irq_handler);
5830 return ata_host_register(host, sht);
5831 }
5832
5833 irq_desc = devm_kasprintf(host->dev, GFP_KERNEL, "%s[%s]",
5834 dev_driver_string(host->dev),
5835 dev_name(host->dev));
5836 if (!irq_desc)
5837 return -ENOMEM;
5838
5839 rc = devm_request_irq(host->dev, irq, irq_handler, irq_flags,
5840 irq_desc, host);
5841 if (rc)
5842 return rc;
5843
5844 for (i = 0; i < host->n_ports; i++)
5845 ata_port_desc(host->ports[i], "irq %d", irq);
5846
5847 rc = ata_host_register(host, sht);
5848
5849 if (rc)
5850 devm_free_irq(host->dev, irq, host);
5851
5852 return rc;
5853}
5854EXPORT_SYMBOL_GPL(ata_host_activate);
5855
5856
5857
5858
5859
5860
5861
5862
5863
5864
5865
5866
5867static void ata_port_detach(struct ata_port *ap)
5868{
5869 unsigned long flags;
5870 struct ata_link *link;
5871 struct ata_device *dev;
5872
5873 if (!ap->ops->error_handler)
5874 goto skip_eh;
5875
5876
5877 spin_lock_irqsave(ap->lock, flags);
5878 ap->pflags |= ATA_PFLAG_UNLOADING;
5879 ata_port_schedule_eh(ap);
5880 spin_unlock_irqrestore(ap->lock, flags);
5881
5882
5883 ata_port_wait_eh(ap);
5884
5885
5886 WARN_ON(!(ap->pflags & ATA_PFLAG_UNLOADED));
5887
5888 cancel_delayed_work_sync(&ap->hotplug_task);
5889
5890 skip_eh:
5891
5892 ata_for_each_link(link, ap, HOST_FIRST) {
5893 ata_for_each_dev(dev, link, ALL) {
5894 if (zpodd_dev_enabled(dev))
5895 zpodd_exit(dev);
5896 }
5897 }
5898 if (ap->pmp_link) {
5899 int i;
5900 for (i = 0; i < SATA_PMP_MAX_PORTS; i++)
5901 ata_tlink_delete(&ap->pmp_link[i]);
5902 }
5903
5904 scsi_remove_host(ap->scsi_host);
5905 ata_tport_delete(ap);
5906}
5907
5908
5909
5910
5911
5912
5913
5914
5915
5916
5917void ata_host_detach(struct ata_host *host)
5918{
5919 int i;
5920
5921 for (i = 0; i < host->n_ports; i++) {
5922
5923 async_synchronize_cookie(host->ports[i]->cookie + 1);
5924 ata_port_detach(host->ports[i]);
5925 }
5926
5927
5928 ata_acpi_dissociate(host);
5929}
5930EXPORT_SYMBOL_GPL(ata_host_detach);
5931
5932#ifdef CONFIG_PCI
5933
5934
5935
5936
5937
5938
5939
5940
5941
5942
5943
5944
5945void ata_pci_remove_one(struct pci_dev *pdev)
5946{
5947 struct ata_host *host = pci_get_drvdata(pdev);
5948
5949 ata_host_detach(host);
5950}
5951EXPORT_SYMBOL_GPL(ata_pci_remove_one);
5952
5953void ata_pci_shutdown_one(struct pci_dev *pdev)
5954{
5955 struct ata_host *host = pci_get_drvdata(pdev);
5956 int i;
5957
5958 for (i = 0; i < host->n_ports; i++) {
5959 struct ata_port *ap = host->ports[i];
5960
5961 ap->pflags |= ATA_PFLAG_FROZEN;
5962
5963
5964 if (ap->ops->freeze)
5965 ap->ops->freeze(ap);
5966
5967
5968 if (ap->ops->port_stop)
5969 ap->ops->port_stop(ap);
5970 }
5971}
5972EXPORT_SYMBOL_GPL(ata_pci_shutdown_one);
5973
5974
5975int pci_test_config_bits(struct pci_dev *pdev, const struct pci_bits *bits)
5976{
5977 unsigned long tmp = 0;
5978
5979 switch (bits->width) {
5980 case 1: {
5981 u8 tmp8 = 0;
5982 pci_read_config_byte(pdev, bits->reg, &tmp8);
5983 tmp = tmp8;
5984 break;
5985 }
5986 case 2: {
5987 u16 tmp16 = 0;
5988 pci_read_config_word(pdev, bits->reg, &tmp16);
5989 tmp = tmp16;
5990 break;
5991 }
5992 case 4: {
5993 u32 tmp32 = 0;
5994 pci_read_config_dword(pdev, bits->reg, &tmp32);
5995 tmp = tmp32;
5996 break;
5997 }
5998
5999 default:
6000 return -EINVAL;
6001 }
6002
6003 tmp &= bits->mask;
6004
6005 return (tmp == bits->val) ? 1 : 0;
6006}
6007EXPORT_SYMBOL_GPL(pci_test_config_bits);
6008
6009#ifdef CONFIG_PM
6010void ata_pci_device_do_suspend(struct pci_dev *pdev, pm_message_t mesg)
6011{
6012 pci_save_state(pdev);
6013 pci_disable_device(pdev);
6014
6015 if (mesg.event & PM_EVENT_SLEEP)
6016 pci_set_power_state(pdev, PCI_D3hot);
6017}
6018EXPORT_SYMBOL_GPL(ata_pci_device_do_suspend);
6019
6020int ata_pci_device_do_resume(struct pci_dev *pdev)
6021{
6022 int rc;
6023
6024 pci_set_power_state(pdev, PCI_D0);
6025 pci_restore_state(pdev);
6026
6027 rc = pcim_enable_device(pdev);
6028 if (rc) {
6029 dev_err(&pdev->dev,
6030 "failed to enable device after resume (%d)\n", rc);
6031 return rc;
6032 }
6033
6034 pci_set_master(pdev);
6035 return 0;
6036}
6037EXPORT_SYMBOL_GPL(ata_pci_device_do_resume);
6038
6039int ata_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg)
6040{
6041 struct ata_host *host = pci_get_drvdata(pdev);
6042 int rc = 0;
6043
6044 rc = ata_host_suspend(host, mesg);
6045 if (rc)
6046 return rc;
6047
6048 ata_pci_device_do_suspend(pdev, mesg);
6049
6050 return 0;
6051}
6052EXPORT_SYMBOL_GPL(ata_pci_device_suspend);
6053
6054int ata_pci_device_resume(struct pci_dev *pdev)
6055{
6056 struct ata_host *host = pci_get_drvdata(pdev);
6057 int rc;
6058
6059 rc = ata_pci_device_do_resume(pdev);
6060 if (rc == 0)
6061 ata_host_resume(host);
6062 return rc;
6063}
6064EXPORT_SYMBOL_GPL(ata_pci_device_resume);
6065#endif
6066#endif
6067
6068
6069
6070
6071
6072
6073
6074
6075
6076
6077
6078
6079int ata_platform_remove_one(struct platform_device *pdev)
6080{
6081 struct ata_host *host = platform_get_drvdata(pdev);
6082
6083 ata_host_detach(host);
6084
6085 return 0;
6086}
6087EXPORT_SYMBOL_GPL(ata_platform_remove_one);
6088
6089#ifdef CONFIG_ATA_FORCE
6090static int __init ata_parse_force_one(char **cur,
6091 struct ata_force_ent *force_ent,
6092 const char **reason)
6093{
6094 static const struct ata_force_param force_tbl[] __initconst = {
6095 { "40c", .cbl = ATA_CBL_PATA40 },
6096 { "80c", .cbl = ATA_CBL_PATA80 },
6097 { "short40c", .cbl = ATA_CBL_PATA40_SHORT },
6098 { "unk", .cbl = ATA_CBL_PATA_UNK },
6099 { "ign", .cbl = ATA_CBL_PATA_IGN },
6100 { "sata", .cbl = ATA_CBL_SATA },
6101 { "1.5Gbps", .spd_limit = 1 },
6102 { "3.0Gbps", .spd_limit = 2 },
6103 { "noncq", .horkage_on = ATA_HORKAGE_NONCQ },
6104 { "ncq", .horkage_off = ATA_HORKAGE_NONCQ },
6105 { "noncqtrim", .horkage_on = ATA_HORKAGE_NO_NCQ_TRIM },
6106 { "ncqtrim", .horkage_off = ATA_HORKAGE_NO_NCQ_TRIM },
6107 { "dump_id", .horkage_on = ATA_HORKAGE_DUMP_ID },
6108 { "pio0", .xfer_mask = 1 << (ATA_SHIFT_PIO + 0) },
6109 { "pio1", .xfer_mask = 1 << (ATA_SHIFT_PIO + 1) },
6110 { "pio2", .xfer_mask = 1 << (ATA_SHIFT_PIO + 2) },
6111 { "pio3", .xfer_mask = 1 << (ATA_SHIFT_PIO + 3) },
6112 { "pio4", .xfer_mask = 1 << (ATA_SHIFT_PIO + 4) },
6113 { "pio5", .xfer_mask = 1 << (ATA_SHIFT_PIO + 5) },
6114 { "pio6", .xfer_mask = 1 << (ATA_SHIFT_PIO + 6) },
6115 { "mwdma0", .xfer_mask = 1 << (ATA_SHIFT_MWDMA + 0) },
6116 { "mwdma1", .xfer_mask = 1 << (ATA_SHIFT_MWDMA + 1) },
6117 { "mwdma2", .xfer_mask = 1 << (ATA_SHIFT_MWDMA + 2) },
6118 { "mwdma3", .xfer_mask = 1 << (ATA_SHIFT_MWDMA + 3) },
6119 { "mwdma4", .xfer_mask = 1 << (ATA_SHIFT_MWDMA + 4) },
6120 { "udma0", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 0) },
6121 { "udma16", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 0) },
6122 { "udma/16", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 0) },
6123 { "udma1", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 1) },
6124 { "udma25", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 1) },
6125 { "udma/25", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 1) },
6126 { "udma2", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 2) },
6127 { "udma33", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 2) },
6128 { "udma/33", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 2) },
6129 { "udma3", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 3) },
6130 { "udma44", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 3) },
6131 { "udma/44", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 3) },
6132 { "udma4", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 4) },
6133 { "udma66", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 4) },
6134 { "udma/66", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 4) },
6135 { "udma5", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 5) },
6136 { "udma100", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 5) },
6137 { "udma/100", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 5) },
6138 { "udma6", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 6) },
6139 { "udma133", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 6) },
6140 { "udma/133", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 6) },
6141 { "udma7", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 7) },
6142 { "nohrst", .lflags = ATA_LFLAG_NO_HRST },
6143 { "nosrst", .lflags = ATA_LFLAG_NO_SRST },
6144 { "norst", .lflags = ATA_LFLAG_NO_HRST | ATA_LFLAG_NO_SRST },
6145 { "rstonce", .lflags = ATA_LFLAG_RST_ONCE },
6146 { "atapi_dmadir", .horkage_on = ATA_HORKAGE_ATAPI_DMADIR },
6147 { "disable", .horkage_on = ATA_HORKAGE_DISABLE },
6148 };
6149 char *start = *cur, *p = *cur;
6150 char *id, *val, *endp;
6151 const struct ata_force_param *match_fp = NULL;
6152 int nr_matches = 0, i;
6153
6154
6155 while (*p != '\0' && *p != ',')
6156 p++;
6157
6158 if (*p == '\0')
6159 *cur = p;
6160 else
6161 *cur = p + 1;
6162
6163 *p = '\0';
6164
6165
6166 p = strchr(start, ':');
6167 if (!p) {
6168 val = strstrip(start);
6169 goto parse_val;
6170 }
6171 *p = '\0';
6172
6173 id = strstrip(start);
6174 val = strstrip(p + 1);
6175
6176
6177 p = strchr(id, '.');
6178 if (p) {
6179 *p++ = '\0';
6180 force_ent->device = simple_strtoul(p, &endp, 10);
6181 if (p == endp || *endp != '\0') {
6182 *reason = "invalid device";
6183 return -EINVAL;
6184 }
6185 }
6186
6187 force_ent->port = simple_strtoul(id, &endp, 10);
6188 if (id == endp || *endp != '\0') {
6189 *reason = "invalid port/link";
6190 return -EINVAL;
6191 }
6192
6193 parse_val:
6194
6195 for (i = 0; i < ARRAY_SIZE(force_tbl); i++) {
6196 const struct ata_force_param *fp = &force_tbl[i];
6197
6198 if (strncasecmp(val, fp->name, strlen(val)))
6199 continue;
6200
6201 nr_matches++;
6202 match_fp = fp;
6203
6204 if (strcasecmp(val, fp->name) == 0) {
6205 nr_matches = 1;
6206 break;
6207 }
6208 }
6209
6210 if (!nr_matches) {
6211 *reason = "unknown value";
6212 return -EINVAL;
6213 }
6214 if (nr_matches > 1) {
6215 *reason = "ambiguous value";
6216 return -EINVAL;
6217 }
6218
6219 force_ent->param = *match_fp;
6220
6221 return 0;
6222}
6223
6224static void __init ata_parse_force_param(void)
6225{
6226 int idx = 0, size = 1;
6227 int last_port = -1, last_device = -1;
6228 char *p, *cur, *next;
6229
6230
6231 for (p = ata_force_param_buf; *p; p++)
6232 if (*p == ',')
6233 size++;
6234
6235 ata_force_tbl = kcalloc(size, sizeof(ata_force_tbl[0]), GFP_KERNEL);
6236 if (!ata_force_tbl) {
6237 printk(KERN_WARNING "ata: failed to extend force table, "
6238 "libata.force ignored\n");
6239 return;
6240 }
6241
6242
6243 for (cur = ata_force_param_buf; *cur != '\0'; cur = next) {
6244 const char *reason = "";
6245 struct ata_force_ent te = { .port = -1, .device = -1 };
6246
6247 next = cur;
6248 if (ata_parse_force_one(&next, &te, &reason)) {
6249 printk(KERN_WARNING "ata: failed to parse force "
6250 "parameter \"%s\" (%s)\n",
6251 cur, reason);
6252 continue;
6253 }
6254
6255 if (te.port == -1) {
6256 te.port = last_port;
6257 te.device = last_device;
6258 }
6259
6260 ata_force_tbl[idx++] = te;
6261
6262 last_port = te.port;
6263 last_device = te.device;
6264 }
6265
6266 ata_force_tbl_size = idx;
6267}
6268
6269static void ata_free_force_param(void)
6270{
6271 kfree(ata_force_tbl);
6272}
6273#else
6274static inline void ata_parse_force_param(void) { }
6275static inline void ata_free_force_param(void) { }
6276#endif
6277
6278static int __init ata_init(void)
6279{
6280 int rc;
6281
6282 ata_parse_force_param();
6283
6284 rc = ata_sff_init();
6285 if (rc) {
6286 ata_free_force_param();
6287 return rc;
6288 }
6289
6290 libata_transport_init();
6291 ata_scsi_transport_template = ata_attach_transport();
6292 if (!ata_scsi_transport_template) {
6293 ata_sff_exit();
6294 rc = -ENOMEM;
6295 goto err_out;
6296 }
6297
6298 printk(KERN_DEBUG "libata version " DRV_VERSION " loaded.\n");
6299 return 0;
6300
6301err_out:
6302 return rc;
6303}
6304
6305static void __exit ata_exit(void)
6306{
6307 ata_release_transport(ata_scsi_transport_template);
6308 libata_transport_exit();
6309 ata_sff_exit();
6310 ata_free_force_param();
6311}
6312
6313subsys_initcall(ata_init);
6314module_exit(ata_exit);
6315
6316static DEFINE_RATELIMIT_STATE(ratelimit, HZ / 5, 1);
6317
6318int ata_ratelimit(void)
6319{
6320 return __ratelimit(&ratelimit);
6321}
6322EXPORT_SYMBOL_GPL(ata_ratelimit);
6323
6324
6325
6326
6327
6328
6329
6330
6331
6332
6333
6334
6335
6336
6337
6338void ata_msleep(struct ata_port *ap, unsigned int msecs)
6339{
6340 bool owns_eh = ap && ap->host->eh_owner == current;
6341
6342 if (owns_eh)
6343 ata_eh_release(ap);
6344
6345 if (msecs < 20) {
6346 unsigned long usecs = msecs * USEC_PER_MSEC;
6347 usleep_range(usecs, usecs + 50);
6348 } else {
6349 msleep(msecs);
6350 }
6351
6352 if (owns_eh)
6353 ata_eh_acquire(ap);
6354}
6355EXPORT_SYMBOL_GPL(ata_msleep);
6356
6357
6358
6359
6360
6361
6362
6363
6364
6365
6366
6367
6368
6369
6370
6371
6372
6373
6374
6375
6376
6377
6378
6379
6380
6381u32 ata_wait_register(struct ata_port *ap, void __iomem *reg, u32 mask, u32 val,
6382 unsigned long interval, unsigned long timeout)
6383{
6384 unsigned long deadline;
6385 u32 tmp;
6386
6387 tmp = ioread32(reg);
6388
6389
6390
6391
6392
6393 deadline = ata_deadline(jiffies, timeout);
6394
6395 while ((tmp & mask) == val && time_before(jiffies, deadline)) {
6396 ata_msleep(ap, interval);
6397 tmp = ioread32(reg);
6398 }
6399
6400 return tmp;
6401}
6402EXPORT_SYMBOL_GPL(ata_wait_register);
6403
6404
6405
6406
6407static unsigned int ata_dummy_qc_issue(struct ata_queued_cmd *qc)
6408{
6409 return AC_ERR_SYSTEM;
6410}
6411
6412static void ata_dummy_error_handler(struct ata_port *ap)
6413{
6414
6415}
6416
6417struct ata_port_operations ata_dummy_port_ops = {
6418 .qc_prep = ata_noop_qc_prep,
6419 .qc_issue = ata_dummy_qc_issue,
6420 .error_handler = ata_dummy_error_handler,
6421 .sched_eh = ata_std_sched_eh,
6422 .end_eh = ata_std_end_eh,
6423};
6424EXPORT_SYMBOL_GPL(ata_dummy_port_ops);
6425
6426const struct ata_port_info ata_dummy_port_info = {
6427 .port_ops = &ata_dummy_port_ops,
6428};
6429EXPORT_SYMBOL_GPL(ata_dummy_port_info);
6430
6431
6432
6433
6434void ata_port_printk(const struct ata_port *ap, const char *level,
6435 const char *fmt, ...)
6436{
6437 struct va_format vaf;
6438 va_list args;
6439
6440 va_start(args, fmt);
6441
6442 vaf.fmt = fmt;
6443 vaf.va = &args;
6444
6445 printk("%sata%u: %pV", level, ap->print_id, &vaf);
6446
6447 va_end(args);
6448}
6449EXPORT_SYMBOL(ata_port_printk);
6450
6451void ata_link_printk(const struct ata_link *link, const char *level,
6452 const char *fmt, ...)
6453{
6454 struct va_format vaf;
6455 va_list args;
6456
6457 va_start(args, fmt);
6458
6459 vaf.fmt = fmt;
6460 vaf.va = &args;
6461
6462 if (sata_pmp_attached(link->ap) || link->ap->slave_link)
6463 printk("%sata%u.%02u: %pV",
6464 level, link->ap->print_id, link->pmp, &vaf);
6465 else
6466 printk("%sata%u: %pV",
6467 level, link->ap->print_id, &vaf);
6468
6469 va_end(args);
6470}
6471EXPORT_SYMBOL(ata_link_printk);
6472
6473void ata_dev_printk(const struct ata_device *dev, const char *level,
6474 const char *fmt, ...)
6475{
6476 struct va_format vaf;
6477 va_list args;
6478
6479 va_start(args, fmt);
6480
6481 vaf.fmt = fmt;
6482 vaf.va = &args;
6483
6484 printk("%sata%u.%02u: %pV",
6485 level, dev->link->ap->print_id, dev->link->pmp + dev->devno,
6486 &vaf);
6487
6488 va_end(args);
6489}
6490EXPORT_SYMBOL(ata_dev_printk);
6491
6492void ata_print_version(const struct device *dev, const char *version)
6493{
6494 dev_printk(KERN_DEBUG, dev, "version %s\n", version);
6495}
6496EXPORT_SYMBOL(ata_print_version);
6497