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