1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17#include <linux/kernel.h>
18#include <linux/module.h>
19#include <linux/pci.h>
20#include <linux/init.h>
21#include <linux/blkdev.h>
22#include <linux/delay.h>
23#include <scsi/scsi_host.h>
24#include <linux/libata.h>
25
26#define DRV_NAME "pata_hpt37x"
27#define DRV_VERSION "0.6.14"
28
29struct hpt_clock {
30 u8 xfer_speed;
31 u32 timing;
32};
33
34struct hpt_chip {
35 const char *name;
36 unsigned int base;
37 struct hpt_clock const *clocks[4];
38};
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63static struct hpt_clock hpt37x_timings_33[] = {
64 { XFER_UDMA_6, 0x12446231 },
65 { XFER_UDMA_5, 0x12446231 },
66 { XFER_UDMA_4, 0x12446231 },
67 { XFER_UDMA_3, 0x126c6231 },
68 { XFER_UDMA_2, 0x12486231 },
69 { XFER_UDMA_1, 0x124c6233 },
70 { XFER_UDMA_0, 0x12506297 },
71
72 { XFER_MW_DMA_2, 0x22406c31 },
73 { XFER_MW_DMA_1, 0x22406c33 },
74 { XFER_MW_DMA_0, 0x22406c97 },
75
76 { XFER_PIO_4, 0x06414e31 },
77 { XFER_PIO_3, 0x06414e42 },
78 { XFER_PIO_2, 0x06414e53 },
79 { XFER_PIO_1, 0x06814e93 },
80 { XFER_PIO_0, 0x06814ea7 }
81};
82
83static struct hpt_clock hpt37x_timings_50[] = {
84 { XFER_UDMA_6, 0x12848242 },
85 { XFER_UDMA_5, 0x12848242 },
86 { XFER_UDMA_4, 0x12ac8242 },
87 { XFER_UDMA_3, 0x128c8242 },
88 { XFER_UDMA_2, 0x120c8242 },
89 { XFER_UDMA_1, 0x12148254 },
90 { XFER_UDMA_0, 0x121882ea },
91
92 { XFER_MW_DMA_2, 0x22808242 },
93 { XFER_MW_DMA_1, 0x22808254 },
94 { XFER_MW_DMA_0, 0x228082ea },
95
96 { XFER_PIO_4, 0x0a81f442 },
97 { XFER_PIO_3, 0x0a81f443 },
98 { XFER_PIO_2, 0x0a81f454 },
99 { XFER_PIO_1, 0x0ac1f465 },
100 { XFER_PIO_0, 0x0ac1f48a }
101};
102
103static struct hpt_clock hpt37x_timings_66[] = {
104 { XFER_UDMA_6, 0x1c869c62 },
105 { XFER_UDMA_5, 0x1cae9c62 },
106 { XFER_UDMA_4, 0x1c8a9c62 },
107 { XFER_UDMA_3, 0x1c8e9c62 },
108 { XFER_UDMA_2, 0x1c929c62 },
109 { XFER_UDMA_1, 0x1c9a9c62 },
110 { XFER_UDMA_0, 0x1c829c62 },
111
112 { XFER_MW_DMA_2, 0x2c829c62 },
113 { XFER_MW_DMA_1, 0x2c829c66 },
114 { XFER_MW_DMA_0, 0x2c829d2e },
115
116 { XFER_PIO_4, 0x0c829c62 },
117 { XFER_PIO_3, 0x0c829c84 },
118 { XFER_PIO_2, 0x0c829ca6 },
119 { XFER_PIO_1, 0x0d029d26 },
120 { XFER_PIO_0, 0x0d029d5e }
121};
122
123
124static const struct hpt_chip hpt370 = {
125 "HPT370",
126 48,
127 {
128 hpt37x_timings_33,
129 NULL,
130 NULL,
131 NULL
132 }
133};
134
135static const struct hpt_chip hpt370a = {
136 "HPT370A",
137 48,
138 {
139 hpt37x_timings_33,
140 NULL,
141 hpt37x_timings_50,
142 NULL
143 }
144};
145
146static const struct hpt_chip hpt372 = {
147 "HPT372",
148 55,
149 {
150 hpt37x_timings_33,
151 NULL,
152 hpt37x_timings_50,
153 hpt37x_timings_66
154 }
155};
156
157static const struct hpt_chip hpt302 = {
158 "HPT302",
159 66,
160 {
161 hpt37x_timings_33,
162 NULL,
163 hpt37x_timings_50,
164 hpt37x_timings_66
165 }
166};
167
168static const struct hpt_chip hpt371 = {
169 "HPT371",
170 66,
171 {
172 hpt37x_timings_33,
173 NULL,
174 hpt37x_timings_50,
175 hpt37x_timings_66
176 }
177};
178
179static const struct hpt_chip hpt372a = {
180 "HPT372A",
181 66,
182 {
183 hpt37x_timings_33,
184 NULL,
185 hpt37x_timings_50,
186 hpt37x_timings_66
187 }
188};
189
190static const struct hpt_chip hpt374 = {
191 "HPT374",
192 48,
193 {
194 hpt37x_timings_33,
195 NULL,
196 NULL,
197 NULL
198 }
199};
200
201
202
203
204
205
206
207
208
209
210static u32 hpt37x_find_mode(struct ata_port *ap, int speed)
211{
212 struct hpt_clock *clocks = ap->host->private_data;
213
214 while(clocks->xfer_speed) {
215 if (clocks->xfer_speed == speed)
216 return clocks->timing;
217 clocks++;
218 }
219 BUG();
220 return 0xffffffffU;
221}
222
223static int hpt_dma_blacklisted(const struct ata_device *dev, char *modestr, const char *list[])
224{
225 unsigned char model_num[ATA_ID_PROD_LEN + 1];
226 int i = 0;
227
228 ata_id_c_string(dev->id, model_num, ATA_ID_PROD, sizeof(model_num));
229
230 while (list[i] != NULL) {
231 if (!strcmp(list[i], model_num)) {
232 printk(KERN_WARNING DRV_NAME ": %s is not supported for %s.\n",
233 modestr, list[i]);
234 return 1;
235 }
236 i++;
237 }
238 return 0;
239}
240
241static const char *bad_ata33[] = {
242 "Maxtor 92720U8", "Maxtor 92040U6", "Maxtor 91360U4", "Maxtor 91020U3", "Maxtor 90845U3", "Maxtor 90650U2",
243 "Maxtor 91360D8", "Maxtor 91190D7", "Maxtor 91020D6", "Maxtor 90845D5", "Maxtor 90680D4", "Maxtor 90510D3", "Maxtor 90340D2",
244 "Maxtor 91152D8", "Maxtor 91008D7", "Maxtor 90845D6", "Maxtor 90840D6", "Maxtor 90720D5", "Maxtor 90648D5", "Maxtor 90576D4",
245 "Maxtor 90510D4",
246 "Maxtor 90432D3", "Maxtor 90288D2", "Maxtor 90256D2",
247 "Maxtor 91000D8", "Maxtor 90910D8", "Maxtor 90875D7", "Maxtor 90840D7", "Maxtor 90750D6", "Maxtor 90625D5", "Maxtor 90500D4",
248 "Maxtor 91728D8", "Maxtor 91512D7", "Maxtor 91303D6", "Maxtor 91080D5", "Maxtor 90845D4", "Maxtor 90680D4", "Maxtor 90648D3", "Maxtor 90432D2",
249 NULL
250};
251
252static const char *bad_ata100_5[] = {
253 "IBM-DTLA-307075",
254 "IBM-DTLA-307060",
255 "IBM-DTLA-307045",
256 "IBM-DTLA-307030",
257 "IBM-DTLA-307020",
258 "IBM-DTLA-307015",
259 "IBM-DTLA-305040",
260 "IBM-DTLA-305030",
261 "IBM-DTLA-305020",
262 "IC35L010AVER07-0",
263 "IC35L020AVER07-0",
264 "IC35L030AVER07-0",
265 "IC35L040AVER07-0",
266 "IC35L060AVER07-0",
267 "WDC AC310200R",
268 NULL
269};
270
271
272
273
274
275
276
277
278static unsigned long hpt370_filter(struct ata_device *adev, unsigned long mask)
279{
280 if (adev->class == ATA_DEV_ATA) {
281 if (hpt_dma_blacklisted(adev, "UDMA", bad_ata33))
282 mask &= ~ATA_MASK_UDMA;
283 if (hpt_dma_blacklisted(adev, "UDMA100", bad_ata100_5))
284 mask &= ~(0xE0 << ATA_SHIFT_UDMA);
285 }
286 return ata_bmdma_mode_filter(adev, mask);
287}
288
289
290
291
292
293
294
295
296static unsigned long hpt370a_filter(struct ata_device *adev, unsigned long mask)
297{
298 if (adev->class == ATA_DEV_ATA) {
299 if (hpt_dma_blacklisted(adev, "UDMA100", bad_ata100_5))
300 mask &= ~(0xE0 << ATA_SHIFT_UDMA);
301 }
302 return ata_bmdma_mode_filter(adev, mask);
303}
304
305
306
307
308
309
310
311
312static int hpt37x_cable_detect(struct ata_port *ap)
313{
314 struct pci_dev *pdev = to_pci_dev(ap->host->dev);
315 u8 scr2, ata66;
316
317 pci_read_config_byte(pdev, 0x5B, &scr2);
318 pci_write_config_byte(pdev, 0x5B, scr2 & ~0x01);
319
320 udelay(10);
321
322
323 pci_read_config_byte(pdev, 0x5A, &ata66);
324
325 pci_write_config_byte(pdev, 0x5B, scr2);
326
327 if (ata66 & (2 >> ap->port_no))
328 return ATA_CBL_PATA40;
329 else
330 return ATA_CBL_PATA80;
331}
332
333
334
335
336
337
338
339
340static int hpt374_fn1_cable_detect(struct ata_port *ap)
341{
342 struct pci_dev *pdev = to_pci_dev(ap->host->dev);
343 unsigned int mcrbase = 0x50 + 4 * ap->port_no;
344 u16 mcr3;
345 u8 ata66;
346
347
348 pci_read_config_word(pdev, mcrbase + 2, &mcr3);
349
350 pci_write_config_word(pdev, mcrbase + 2, mcr3 | 0x8000);
351 pci_read_config_byte(pdev, 0x5A, &ata66);
352
353 pci_write_config_word(pdev, mcrbase + 2, mcr3);
354
355 if (ata66 & (2 >> ap->port_no))
356 return ATA_CBL_PATA40;
357 else
358 return ATA_CBL_PATA80;
359}
360
361
362
363
364
365
366
367
368
369static int hpt37x_pre_reset(struct ata_link *link, unsigned long deadline)
370{
371 struct ata_port *ap = link->ap;
372 struct pci_dev *pdev = to_pci_dev(ap->host->dev);
373 static const struct pci_bits hpt37x_enable_bits[] = {
374 { 0x50, 1, 0x04, 0x04 },
375 { 0x54, 1, 0x04, 0x04 }
376 };
377 if (!pci_test_config_bits(pdev, &hpt37x_enable_bits[ap->port_no]))
378 return -ENOENT;
379
380
381 pci_write_config_byte(pdev, 0x50 + 4 * ap->port_no, 0x37);
382 udelay(100);
383
384 return ata_sff_prereset(link, deadline);
385}
386
387
388
389
390
391
392
393
394
395static void hpt370_set_piomode(struct ata_port *ap, struct ata_device *adev)
396{
397 struct pci_dev *pdev = to_pci_dev(ap->host->dev);
398 u32 addr1, addr2;
399 u32 reg;
400 u32 mode;
401 u8 fast;
402
403 addr1 = 0x40 + 4 * (adev->devno + 2 * ap->port_no);
404 addr2 = 0x51 + 4 * ap->port_no;
405
406
407 pci_read_config_byte(pdev, addr2, &fast);
408 fast &= ~0x02;
409 fast |= 0x01;
410 pci_write_config_byte(pdev, addr2, fast);
411
412 pci_read_config_dword(pdev, addr1, ®);
413 mode = hpt37x_find_mode(ap, adev->pio_mode);
414 mode &= 0xCFC3FFFF;
415 reg &= ~0xCFC3FFFF;
416 pci_write_config_dword(pdev, addr1, reg | mode);
417}
418
419
420
421
422
423
424
425
426
427
428static void hpt370_set_dmamode(struct ata_port *ap, struct ata_device *adev)
429{
430 struct pci_dev *pdev = to_pci_dev(ap->host->dev);
431 u32 addr1, addr2;
432 u32 reg, mode, mask;
433 u8 fast;
434
435 addr1 = 0x40 + 4 * (adev->devno + 2 * ap->port_no);
436 addr2 = 0x51 + 4 * ap->port_no;
437
438
439 pci_read_config_byte(pdev, addr2, &fast);
440 fast &= ~0x02;
441 fast |= 0x01;
442 pci_write_config_byte(pdev, addr2, fast);
443
444 mask = adev->dma_mode < XFER_UDMA_0 ? 0x31C001FF : 0x303C0000;
445
446 pci_read_config_dword(pdev, addr1, ®);
447 mode = hpt37x_find_mode(ap, adev->dma_mode);
448 mode &= mask;
449 reg &= ~mask;
450 pci_write_config_dword(pdev, addr1, reg | mode);
451}
452
453
454
455
456
457
458
459
460static void hpt370_bmdma_stop(struct ata_queued_cmd *qc)
461{
462 struct ata_port *ap = qc->ap;
463 struct pci_dev *pdev = to_pci_dev(ap->host->dev);
464 u8 dma_stat = ioread8(ap->ioaddr.bmdma_addr + 2);
465 u8 dma_cmd;
466 void __iomem *bmdma = ap->ioaddr.bmdma_addr;
467
468 if (dma_stat & 0x01) {
469 udelay(20);
470 dma_stat = ioread8(bmdma + 2);
471 }
472 if (dma_stat & 0x01) {
473
474 pci_write_config_byte(pdev, 0x50 + 4 * ap->port_no, 0x37);
475 udelay(10);
476
477 dma_cmd = ioread8(bmdma );
478 iowrite8(dma_cmd & 0xFE, bmdma);
479
480 dma_stat = ioread8(bmdma + 2);
481 iowrite8(dma_stat | 0x06 , bmdma + 2);
482
483 pci_write_config_byte(pdev, 0x50 + 4 * ap->port_no, 0x37);
484 udelay(10);
485 }
486 ata_bmdma_stop(qc);
487}
488
489
490
491
492
493
494
495
496
497static void hpt372_set_piomode(struct ata_port *ap, struct ata_device *adev)
498{
499 struct pci_dev *pdev = to_pci_dev(ap->host->dev);
500 u32 addr1, addr2;
501 u32 reg;
502 u32 mode;
503 u8 fast;
504
505 addr1 = 0x40 + 4 * (adev->devno + 2 * ap->port_no);
506 addr2 = 0x51 + 4 * ap->port_no;
507
508
509 pci_read_config_byte(pdev, addr2, &fast);
510 fast &= ~0x07;
511 pci_write_config_byte(pdev, addr2, fast);
512
513 pci_read_config_dword(pdev, addr1, ®);
514 mode = hpt37x_find_mode(ap, adev->pio_mode);
515
516 printk("Find mode for %d reports %X\n", adev->pio_mode, mode);
517 mode &= 0xCFC3FFFF;
518 reg &= ~0xCFC3FFFF;
519 pci_write_config_dword(pdev, addr1, reg | mode);
520}
521
522
523
524
525
526
527
528
529
530
531static void hpt372_set_dmamode(struct ata_port *ap, struct ata_device *adev)
532{
533 struct pci_dev *pdev = to_pci_dev(ap->host->dev);
534 u32 addr1, addr2;
535 u32 reg, mode, mask;
536 u8 fast;
537
538 addr1 = 0x40 + 4 * (adev->devno + 2 * ap->port_no);
539 addr2 = 0x51 + 4 * ap->port_no;
540
541
542 pci_read_config_byte(pdev, addr2, &fast);
543 fast &= ~0x07;
544 pci_write_config_byte(pdev, addr2, fast);
545
546 mask = adev->dma_mode < XFER_UDMA_0 ? 0x31C001FF : 0x303C0000;
547
548 pci_read_config_dword(pdev, addr1, ®);
549 mode = hpt37x_find_mode(ap, adev->dma_mode);
550 printk("Find mode for DMA %d reports %X\n", adev->dma_mode, mode);
551 mode &= mask;
552 reg &= ~mask;
553 pci_write_config_dword(pdev, addr1, reg | mode);
554}
555
556
557
558
559
560
561
562
563static void hpt37x_bmdma_stop(struct ata_queued_cmd *qc)
564{
565 struct ata_port *ap = qc->ap;
566 struct pci_dev *pdev = to_pci_dev(ap->host->dev);
567 int mscreg = 0x50 + 4 * ap->port_no;
568 u8 bwsr_stat, msc_stat;
569
570 pci_read_config_byte(pdev, 0x6A, &bwsr_stat);
571 pci_read_config_byte(pdev, mscreg, &msc_stat);
572 if (bwsr_stat & (1 << ap->port_no))
573 pci_write_config_byte(pdev, mscreg, msc_stat | 0x30);
574 ata_bmdma_stop(qc);
575}
576
577
578static struct scsi_host_template hpt37x_sht = {
579 ATA_BMDMA_SHT(DRV_NAME),
580};
581
582
583
584
585
586static struct ata_port_operations hpt370_port_ops = {
587 .inherits = &ata_bmdma_port_ops,
588
589 .bmdma_stop = hpt370_bmdma_stop,
590
591 .mode_filter = hpt370_filter,
592 .cable_detect = hpt37x_cable_detect,
593 .set_piomode = hpt370_set_piomode,
594 .set_dmamode = hpt370_set_dmamode,
595 .prereset = hpt37x_pre_reset,
596};
597
598
599
600
601
602static struct ata_port_operations hpt370a_port_ops = {
603 .inherits = &hpt370_port_ops,
604 .mode_filter = hpt370a_filter,
605};
606
607
608
609
610
611
612static struct ata_port_operations hpt372_port_ops = {
613 .inherits = &ata_bmdma_port_ops,
614
615 .bmdma_stop = hpt37x_bmdma_stop,
616
617 .cable_detect = hpt37x_cable_detect,
618 .set_piomode = hpt372_set_piomode,
619 .set_dmamode = hpt372_set_dmamode,
620 .prereset = hpt37x_pre_reset,
621};
622
623
624
625
626
627
628static struct ata_port_operations hpt374_fn1_port_ops = {
629 .inherits = &hpt372_port_ops,
630 .cable_detect = hpt374_fn1_cable_detect,
631 .prereset = hpt37x_pre_reset,
632};
633
634
635
636
637
638
639
640
641
642
643static int hpt37x_clock_slot(unsigned int freq, unsigned int base)
644{
645 unsigned int f = (base * freq) / 192;
646 if (f < 40)
647 return 0;
648 if (f < 45)
649 return 1;
650 if (f < 55)
651 return 2;
652 return 3;
653}
654
655
656
657
658
659
660
661
662
663static int hpt37x_calibrate_dpll(struct pci_dev *dev)
664{
665 u8 reg5b;
666 u32 reg5c;
667 int tries;
668
669 for(tries = 0; tries < 0x5000; tries++) {
670 udelay(50);
671 pci_read_config_byte(dev, 0x5b, ®5b);
672 if (reg5b & 0x80) {
673
674 for(tries = 0; tries < 0x1000; tries ++) {
675 pci_read_config_byte(dev, 0x5b, ®5b);
676
677 if ((reg5b & 0x80) == 0)
678 return 0;
679 }
680
681 pci_read_config_dword(dev, 0x5c, ®5c);
682 pci_write_config_dword(dev, 0x5c, reg5c & ~ 0x100);
683 return 1;
684 }
685 }
686
687 return 0;
688}
689
690static u32 hpt374_read_freq(struct pci_dev *pdev)
691{
692 u32 freq;
693 unsigned long io_base = pci_resource_start(pdev, 4);
694 if (PCI_FUNC(pdev->devfn) & 1) {
695 struct pci_dev *pdev_0;
696
697 pdev_0 = pci_get_slot(pdev->bus, pdev->devfn - 1);
698
699 if (pdev_0 == NULL)
700 return 0;
701 io_base = pci_resource_start(pdev_0, 4);
702 freq = inl(io_base + 0x90);
703 pci_dev_put(pdev_0);
704 } else
705 freq = inl(io_base + 0x90);
706 return freq;
707}
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741static int hpt37x_init_one(struct pci_dev *dev, const struct pci_device_id *id)
742{
743
744 static const struct ata_port_info info_hpt370 = {
745 .flags = ATA_FLAG_SLAVE_POSS,
746 .pio_mask = ATA_PIO4,
747 .mwdma_mask = ATA_MWDMA2,
748 .udma_mask = ATA_UDMA5,
749 .port_ops = &hpt370_port_ops
750 };
751
752 static const struct ata_port_info info_hpt370a = {
753 .flags = ATA_FLAG_SLAVE_POSS,
754 .pio_mask = ATA_PIO4,
755 .mwdma_mask = ATA_MWDMA2,
756 .udma_mask = ATA_UDMA5,
757 .port_ops = &hpt370a_port_ops
758 };
759
760 static const struct ata_port_info info_hpt370_33 = {
761 .flags = ATA_FLAG_SLAVE_POSS,
762 .pio_mask = ATA_PIO4,
763 .mwdma_mask = ATA_MWDMA2,
764 .udma_mask = ATA_UDMA5,
765 .port_ops = &hpt370_port_ops
766 };
767
768 static const struct ata_port_info info_hpt370a_33 = {
769 .flags = ATA_FLAG_SLAVE_POSS,
770 .pio_mask = ATA_PIO4,
771 .mwdma_mask = ATA_MWDMA2,
772 .udma_mask = ATA_UDMA5,
773 .port_ops = &hpt370a_port_ops
774 };
775
776 static const struct ata_port_info info_hpt372 = {
777 .flags = ATA_FLAG_SLAVE_POSS,
778 .pio_mask = ATA_PIO4,
779 .mwdma_mask = ATA_MWDMA2,
780 .udma_mask = ATA_UDMA6,
781 .port_ops = &hpt372_port_ops
782 };
783
784 static const struct ata_port_info info_hpt374_fn0 = {
785 .flags = ATA_FLAG_SLAVE_POSS,
786 .pio_mask = ATA_PIO4,
787 .mwdma_mask = ATA_MWDMA2,
788 .udma_mask = ATA_UDMA5,
789 .port_ops = &hpt372_port_ops
790 };
791 static const struct ata_port_info info_hpt374_fn1 = {
792 .flags = ATA_FLAG_SLAVE_POSS,
793 .pio_mask = ATA_PIO4,
794 .mwdma_mask = ATA_MWDMA2,
795 .udma_mask = ATA_UDMA5,
796 .port_ops = &hpt374_fn1_port_ops
797 };
798
799 static const int MHz[4] = { 33, 40, 50, 66 };
800 void *private_data = NULL;
801 const struct ata_port_info *ppi[] = { NULL, NULL };
802 u8 rev = dev->revision;
803 u8 irqmask;
804 u8 mcr1;
805 u32 freq;
806 int prefer_dpll = 1;
807
808 unsigned long iobase = pci_resource_start(dev, 4);
809
810 const struct hpt_chip *chip_table;
811 int clock_slot;
812 int rc;
813
814 rc = pcim_enable_device(dev);
815 if (rc)
816 return rc;
817
818 if (dev->device == PCI_DEVICE_ID_TTI_HPT366) {
819
820
821 if (rev < 3)
822 return -ENODEV;
823
824 if (rev == 6)
825 return -ENODEV;
826
827 switch(rev) {
828 case 3:
829 ppi[0] = &info_hpt370;
830 chip_table = &hpt370;
831 prefer_dpll = 0;
832 break;
833 case 4:
834 ppi[0] = &info_hpt370a;
835 chip_table = &hpt370a;
836 prefer_dpll = 0;
837 break;
838 case 5:
839 ppi[0] = &info_hpt372;
840 chip_table = &hpt372;
841 break;
842 default:
843 printk(KERN_ERR "pata_hpt37x: Unknown HPT366 "
844 "subtype, please report (%d).\n", rev);
845 return -ENODEV;
846 }
847 } else {
848 switch(dev->device) {
849 case PCI_DEVICE_ID_TTI_HPT372:
850
851 if (rev >= 2)
852 return -ENODEV;
853 ppi[0] = &info_hpt372;
854 chip_table = &hpt372a;
855 break;
856 case PCI_DEVICE_ID_TTI_HPT302:
857
858 if (rev > 1)
859 return -ENODEV;
860 ppi[0] = &info_hpt372;
861
862 chip_table = &hpt302;
863 break;
864 case PCI_DEVICE_ID_TTI_HPT371:
865 if (rev > 1)
866 return -ENODEV;
867 ppi[0] = &info_hpt372;
868 chip_table = &hpt371;
869
870
871
872 pci_read_config_byte(dev, 0x50, &mcr1);
873 mcr1 &= ~0x04;
874 pci_write_config_byte(dev, 0x50, mcr1);
875 break;
876 case PCI_DEVICE_ID_TTI_HPT374:
877 chip_table = &hpt374;
878 if (!(PCI_FUNC(dev->devfn) & 1))
879 *ppi = &info_hpt374_fn0;
880 else
881 *ppi = &info_hpt374_fn1;
882 break;
883 default:
884 printk(KERN_ERR "pata_hpt37x: PCI table is bogus please report (%d).\n", dev->device);
885 return -ENODEV;
886 }
887 }
888
889
890 pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, (L1_CACHE_BYTES / 4));
891 pci_write_config_byte(dev, PCI_LATENCY_TIMER, 0x78);
892 pci_write_config_byte(dev, PCI_MIN_GNT, 0x08);
893 pci_write_config_byte(dev, PCI_MAX_LAT, 0x08);
894
895 pci_read_config_byte(dev, 0x5A, &irqmask);
896 irqmask &= ~0x10;
897 pci_write_config_byte(dev, 0x5a, irqmask);
898
899
900
901
902
903
904
905
906 pci_write_config_byte(dev, 0x5b, 0x23);
907
908
909
910
911
912 if (chip_table == &hpt372a)
913 outb(0x0e, iobase + 0x9c);
914
915
916
917
918
919 if (chip_table == &hpt374) {
920 freq = hpt374_read_freq(dev);
921 if (freq == 0)
922 return -ENODEV;
923 } else
924 freq = inl(iobase + 0x90);
925
926 if ((freq >> 12) != 0xABCDE) {
927 int i;
928 u8 sr;
929 u32 total = 0;
930
931 printk(KERN_WARNING "pata_hpt37x: BIOS has not set timing clocks.\n");
932
933
934 for(i = 0; i < 128; i++) {
935 pci_read_config_byte(dev, 0x78, &sr);
936 total += sr & 0x1FF;
937 udelay(15);
938 }
939 freq = total / 128;
940 }
941 freq &= 0x1FF;
942
943
944
945
946
947
948 clock_slot = hpt37x_clock_slot(freq, chip_table->base);
949 if (chip_table->clocks[clock_slot] == NULL || prefer_dpll) {
950
951
952
953
954
955
956 unsigned int f_low, f_high;
957 int dpll, adjust;
958
959
960 dpll = (ppi[0]->udma_mask & 0xC0) ? 3 : 2;
961
962 f_low = (MHz[clock_slot] * 48) / MHz[dpll];
963 f_high = f_low + 2;
964 if (clock_slot > 1)
965 f_high += 2;
966
967
968 pci_write_config_byte(dev, 0x5b, 0x21);
969 pci_write_config_dword(dev, 0x5C, (f_high << 16) | f_low | 0x100);
970
971 for(adjust = 0; adjust < 8; adjust++) {
972 if (hpt37x_calibrate_dpll(dev))
973 break;
974
975 if (adjust & 1)
976 f_low -= adjust >> 1;
977 else
978 f_high += adjust >> 1;
979 pci_write_config_dword(dev, 0x5C, (f_high << 16) | f_low | 0x100);
980 }
981 if (adjust == 8) {
982 printk(KERN_ERR "pata_hpt37x: DPLL did not stabilize!\n");
983 return -ENODEV;
984 }
985 if (dpll == 3)
986 private_data = (void *)hpt37x_timings_66;
987 else
988 private_data = (void *)hpt37x_timings_50;
989
990 printk(KERN_INFO "pata_hpt37x: bus clock %dMHz, using %dMHz DPLL.\n",
991 MHz[clock_slot], MHz[dpll]);
992 } else {
993 private_data = (void *)chip_table->clocks[clock_slot];
994
995
996
997
998
999
1000 if (clock_slot < 2 && ppi[0] == &info_hpt370)
1001 ppi[0] = &info_hpt370_33;
1002 if (clock_slot < 2 && ppi[0] == &info_hpt370a)
1003 ppi[0] = &info_hpt370a_33;
1004 printk(KERN_INFO "pata_hpt37x: %s using %dMHz bus clock.\n",
1005 chip_table->name, MHz[clock_slot]);
1006 }
1007
1008
1009 return ata_pci_sff_init_one(dev, ppi, &hpt37x_sht, private_data);
1010}
1011
1012static const struct pci_device_id hpt37x[] = {
1013 { PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT366), },
1014 { PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT371), },
1015 { PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT372), },
1016 { PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT374), },
1017 { PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT302), },
1018
1019 { },
1020};
1021
1022static struct pci_driver hpt37x_pci_driver = {
1023 .name = DRV_NAME,
1024 .id_table = hpt37x,
1025 .probe = hpt37x_init_one,
1026 .remove = ata_pci_remove_one
1027};
1028
1029static int __init hpt37x_init(void)
1030{
1031 return pci_register_driver(&hpt37x_pci_driver);
1032}
1033
1034static void __exit hpt37x_exit(void)
1035{
1036 pci_unregister_driver(&hpt37x_pci_driver);
1037}
1038
1039MODULE_AUTHOR("Alan Cox");
1040MODULE_DESCRIPTION("low-level driver for the Highpoint HPT37x/30x");
1041MODULE_LICENSE("GPL");
1042MODULE_DEVICE_TABLE(pci, hpt37x);
1043MODULE_VERSION(DRV_VERSION);
1044
1045module_init(hpt37x_init);
1046module_exit(hpt37x_exit);
1047