This source file includes following definitions.
- check_in_drive_list
- hpt3xx_get_info
- hpt3xx_udma_filter
- hpt3xx_mdma_filter
- get_speed_setting
- hpt3xx_set_mode
- hpt3xx_set_pio_mode
- hpt3xx_maskproc
- hpt366_dma_lost_irq
- hpt370_clear_engine
- hpt370_irq_timeout
- hpt370_dma_start
- hpt370_dma_end
- hpt374_dma_test_irq
- hpt374_dma_end
- hpt3xxn_set_clock
- hpt3xxn_rw_disk
- hpt37x_calibrate_dpll
- hpt3xx_disable_fast_irq
- init_chipset_hpt366
- hpt3xx_cable_detect
- init_hwif_hpt366
- init_dma_hpt366
- hpt374_init
- hpt371_init
- hpt36x_init
- hpt366_init_one
- hpt366_remove
- hpt366_ide_init
- hpt366_ide_exit
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123 #include <linux/types.h>
124 #include <linux/module.h>
125 #include <linux/kernel.h>
126 #include <linux/delay.h>
127 #include <linux/blkdev.h>
128 #include <linux/interrupt.h>
129 #include <linux/pci.h>
130 #include <linux/init.h>
131 #include <linux/ide.h>
132 #include <linux/slab.h>
133
134 #include <linux/uaccess.h>
135 #include <asm/io.h>
136
137 #define DRV_NAME "hpt366"
138
139
140 #undef HPT_RESET_STATE_ENGINE
141 #undef HPT_DELAY_INTERRUPT
142
143 static const char *bad_ata100_5[] = {
144 "IBM-DTLA-307075",
145 "IBM-DTLA-307060",
146 "IBM-DTLA-307045",
147 "IBM-DTLA-307030",
148 "IBM-DTLA-307020",
149 "IBM-DTLA-307015",
150 "IBM-DTLA-305040",
151 "IBM-DTLA-305030",
152 "IBM-DTLA-305020",
153 "IC35L010AVER07-0",
154 "IC35L020AVER07-0",
155 "IC35L030AVER07-0",
156 "IC35L040AVER07-0",
157 "IC35L060AVER07-0",
158 "WDC AC310200R",
159 NULL
160 };
161
162 static const char *bad_ata66_4[] = {
163 "IBM-DTLA-307075",
164 "IBM-DTLA-307060",
165 "IBM-DTLA-307045",
166 "IBM-DTLA-307030",
167 "IBM-DTLA-307020",
168 "IBM-DTLA-307015",
169 "IBM-DTLA-305040",
170 "IBM-DTLA-305030",
171 "IBM-DTLA-305020",
172 "IC35L010AVER07-0",
173 "IC35L020AVER07-0",
174 "IC35L030AVER07-0",
175 "IC35L040AVER07-0",
176 "IC35L060AVER07-0",
177 "WDC AC310200R",
178 "MAXTOR STM3320620A",
179 NULL
180 };
181
182 static const char *bad_ata66_3[] = {
183 "WDC AC310200R",
184 NULL
185 };
186
187 static const char *bad_ata33[] = {
188 "Maxtor 92720U8", "Maxtor 92040U6", "Maxtor 91360U4", "Maxtor 91020U3", "Maxtor 90845U3", "Maxtor 90650U2",
189 "Maxtor 91360D8", "Maxtor 91190D7", "Maxtor 91020D6", "Maxtor 90845D5", "Maxtor 90680D4", "Maxtor 90510D3", "Maxtor 90340D2",
190 "Maxtor 91152D8", "Maxtor 91008D7", "Maxtor 90845D6", "Maxtor 90840D6", "Maxtor 90720D5", "Maxtor 90648D5", "Maxtor 90576D4",
191 "Maxtor 90510D4",
192 "Maxtor 90432D3", "Maxtor 90288D2", "Maxtor 90256D2",
193 "Maxtor 91000D8", "Maxtor 90910D8", "Maxtor 90875D7", "Maxtor 90840D7", "Maxtor 90750D6", "Maxtor 90625D5", "Maxtor 90500D4",
194 "Maxtor 91728D8", "Maxtor 91512D7", "Maxtor 91303D6", "Maxtor 91080D5", "Maxtor 90845D4", "Maxtor 90680D4", "Maxtor 90648D3", "Maxtor 90432D2",
195 NULL
196 };
197
198 static u8 xfer_speeds[] = {
199 XFER_UDMA_6,
200 XFER_UDMA_5,
201 XFER_UDMA_4,
202 XFER_UDMA_3,
203 XFER_UDMA_2,
204 XFER_UDMA_1,
205 XFER_UDMA_0,
206
207 XFER_MW_DMA_2,
208 XFER_MW_DMA_1,
209 XFER_MW_DMA_0,
210
211 XFER_PIO_4,
212 XFER_PIO_3,
213 XFER_PIO_2,
214 XFER_PIO_1,
215 XFER_PIO_0
216 };
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242 static u32 forty_base_hpt36x[] = {
243 0x900fd943,
244 0x900fd943,
245 0x900fd943,
246 0x900ad943,
247 0x900bd943,
248 0x9008d943,
249 0x9008d943,
250
251 0xa008d943,
252 0xa010d955,
253 0xa010d9fc,
254
255 0xc008d963,
256 0xc010d974,
257 0xc010d997,
258 0xc010d9c7,
259 0xc018d9d9
260 };
261
262 static u32 thirty_three_base_hpt36x[] = {
263 0x90c9a731,
264 0x90c9a731,
265 0x90c9a731,
266 0x90cfa731,
267 0x90caa731,
268 0x90cba731,
269 0x90c8a731,
270
271 0xa0c8a731,
272 0xa0c8a732,
273 0xa0c8a797,
274
275 0xc0c8a731,
276 0xc0c8a742,
277 0xc0d0a753,
278 0xc0d0a7a3,
279 0xc0d0a7aa
280 };
281
282 static u32 twenty_five_base_hpt36x[] = {
283 0x90c98521,
284 0x90c98521,
285 0x90c98521,
286 0x90cf8521,
287 0x90cf8521,
288 0x90cb8521,
289 0x90cb8521,
290
291 0xa0ca8521,
292 0xa0ca8532,
293 0xa0ca8575,
294
295 0xc0ca8521,
296 0xc0ca8532,
297 0xc0ca8542,
298 0xc0d08572,
299 0xc0d08585
300 };
301
302
303
304
305
306
307
308 static u32 thirty_three_base_hpt37x[] = {
309 0x16455031,
310 0x16455031,
311 0x16455031,
312 0x166d5031,
313 0x16495031,
314 0x164d5033,
315 0x16515097,
316
317 0x26515031,
318 0x26515033,
319 0x26515097,
320
321 0x06515021,
322 0x06515022,
323 0x06515033,
324 0x06915065,
325 0x06d1508a
326 };
327
328 static u32 fifty_base_hpt37x[] = {
329 0x1a861842,
330 0x1a861842,
331 0x1aae1842,
332 0x1a8e1842,
333 0x1a0e1842,
334 0x1a161854,
335 0x1a1a18ea,
336
337 0x2a821842,
338 0x2a821854,
339 0x2a8218ea,
340
341 0x0a821842,
342 0x0a821843,
343 0x0a821855,
344 0x0ac218a8,
345 0x0b02190c
346 };
347
348 static u32 sixty_six_base_hpt37x[] = {
349 0x1c86fe62,
350 0x1caefe62,
351 0x1c8afe62,
352 0x1c8efe62,
353 0x1c92fe62,
354 0x1c9afe62,
355 0x1c82fe62,
356
357 0x2c82fe62,
358 0x2c82fe66,
359 0x2c82ff2e,
360
361 0x0c82fe62,
362 0x0c82fe84,
363 0x0c82fea6,
364 0x0d02ff26,
365 0x0d42ff7f
366 };
367
368 #define HPT371_ALLOW_ATA133_6 1
369 #define HPT302_ALLOW_ATA133_6 1
370 #define HPT372_ALLOW_ATA133_6 1
371 #define HPT370_ALLOW_ATA100_5 0
372 #define HPT366_ALLOW_ATA66_4 1
373 #define HPT366_ALLOW_ATA66_3 1
374
375
376 enum ata_clock {
377 ATA_CLOCK_25MHZ,
378 ATA_CLOCK_33MHZ,
379 ATA_CLOCK_40MHZ,
380 ATA_CLOCK_50MHZ,
381 ATA_CLOCK_66MHZ,
382 NUM_ATA_CLOCKS
383 };
384
385 struct hpt_timings {
386 u32 pio_mask;
387 u32 dma_mask;
388 u32 ultra_mask;
389 u32 *clock_table[NUM_ATA_CLOCKS];
390 };
391
392
393
394
395
396 struct hpt_info {
397 char *chip_name;
398 u8 chip_type;
399 u8 udma_mask;
400 u8 dpll_clk;
401 u8 pci_clk;
402 struct hpt_timings *timings;
403 u8 clock;
404 };
405
406
407 enum {
408 HPT36x,
409 HPT370,
410 HPT370A,
411 HPT374,
412 HPT372,
413 HPT372A,
414 HPT302,
415 HPT371,
416 HPT372N,
417 HPT302N,
418 HPT371N
419 };
420
421 static struct hpt_timings hpt36x_timings = {
422 .pio_mask = 0xc1f8ffff,
423 .dma_mask = 0x303800ff,
424 .ultra_mask = 0x30070000,
425 .clock_table = {
426 [ATA_CLOCK_25MHZ] = twenty_five_base_hpt36x,
427 [ATA_CLOCK_33MHZ] = thirty_three_base_hpt36x,
428 [ATA_CLOCK_40MHZ] = forty_base_hpt36x,
429 [ATA_CLOCK_50MHZ] = NULL,
430 [ATA_CLOCK_66MHZ] = NULL
431 }
432 };
433
434 static struct hpt_timings hpt37x_timings = {
435 .pio_mask = 0xcfc3ffff,
436 .dma_mask = 0x31c001ff,
437 .ultra_mask = 0x303c0000,
438 .clock_table = {
439 [ATA_CLOCK_25MHZ] = NULL,
440 [ATA_CLOCK_33MHZ] = thirty_three_base_hpt37x,
441 [ATA_CLOCK_40MHZ] = NULL,
442 [ATA_CLOCK_50MHZ] = fifty_base_hpt37x,
443 [ATA_CLOCK_66MHZ] = sixty_six_base_hpt37x
444 }
445 };
446
447 static const struct hpt_info hpt36x = {
448 .chip_name = "HPT36x",
449 .chip_type = HPT36x,
450 .udma_mask = HPT366_ALLOW_ATA66_3 ? (HPT366_ALLOW_ATA66_4 ? ATA_UDMA4 : ATA_UDMA3) : ATA_UDMA2,
451 .dpll_clk = 0,
452 .timings = &hpt36x_timings
453 };
454
455 static const struct hpt_info hpt370 = {
456 .chip_name = "HPT370",
457 .chip_type = HPT370,
458 .udma_mask = HPT370_ALLOW_ATA100_5 ? ATA_UDMA5 : ATA_UDMA4,
459 .dpll_clk = 48,
460 .timings = &hpt37x_timings
461 };
462
463 static const struct hpt_info hpt370a = {
464 .chip_name = "HPT370A",
465 .chip_type = HPT370A,
466 .udma_mask = HPT370_ALLOW_ATA100_5 ? ATA_UDMA5 : ATA_UDMA4,
467 .dpll_clk = 48,
468 .timings = &hpt37x_timings
469 };
470
471 static const struct hpt_info hpt374 = {
472 .chip_name = "HPT374",
473 .chip_type = HPT374,
474 .udma_mask = ATA_UDMA5,
475 .dpll_clk = 48,
476 .timings = &hpt37x_timings
477 };
478
479 static const struct hpt_info hpt372 = {
480 .chip_name = "HPT372",
481 .chip_type = HPT372,
482 .udma_mask = HPT372_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5,
483 .dpll_clk = 55,
484 .timings = &hpt37x_timings
485 };
486
487 static const struct hpt_info hpt372a = {
488 .chip_name = "HPT372A",
489 .chip_type = HPT372A,
490 .udma_mask = HPT372_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5,
491 .dpll_clk = 66,
492 .timings = &hpt37x_timings
493 };
494
495 static const struct hpt_info hpt302 = {
496 .chip_name = "HPT302",
497 .chip_type = HPT302,
498 .udma_mask = HPT302_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5,
499 .dpll_clk = 66,
500 .timings = &hpt37x_timings
501 };
502
503 static const struct hpt_info hpt371 = {
504 .chip_name = "HPT371",
505 .chip_type = HPT371,
506 .udma_mask = HPT371_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5,
507 .dpll_clk = 66,
508 .timings = &hpt37x_timings
509 };
510
511 static const struct hpt_info hpt372n = {
512 .chip_name = "HPT372N",
513 .chip_type = HPT372N,
514 .udma_mask = HPT372_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5,
515 .dpll_clk = 77,
516 .timings = &hpt37x_timings
517 };
518
519 static const struct hpt_info hpt302n = {
520 .chip_name = "HPT302N",
521 .chip_type = HPT302N,
522 .udma_mask = HPT302_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5,
523 .dpll_clk = 77,
524 .timings = &hpt37x_timings
525 };
526
527 static const struct hpt_info hpt371n = {
528 .chip_name = "HPT371N",
529 .chip_type = HPT371N,
530 .udma_mask = HPT371_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5,
531 .dpll_clk = 77,
532 .timings = &hpt37x_timings
533 };
534
535 static bool check_in_drive_list(ide_drive_t *drive, const char **list)
536 {
537 return match_string(list, -1, (char *)&drive->id[ATA_ID_PROD]) >= 0;
538 }
539
540 static struct hpt_info *hpt3xx_get_info(struct device *dev)
541 {
542 struct ide_host *host = dev_get_drvdata(dev);
543 struct hpt_info *info = (struct hpt_info *)host->host_priv;
544
545 return dev == host->dev[1] ? info + 1 : info;
546 }
547
548
549
550
551
552
553 static u8 hpt3xx_udma_filter(ide_drive_t *drive)
554 {
555 ide_hwif_t *hwif = drive->hwif;
556 struct hpt_info *info = hpt3xx_get_info(hwif->dev);
557 u8 mask = hwif->ultra_mask;
558
559 switch (info->chip_type) {
560 case HPT36x:
561 if (!HPT366_ALLOW_ATA66_4 ||
562 check_in_drive_list(drive, bad_ata66_4))
563 mask = ATA_UDMA3;
564
565 if (!HPT366_ALLOW_ATA66_3 ||
566 check_in_drive_list(drive, bad_ata66_3))
567 mask = ATA_UDMA2;
568 break;
569 case HPT370:
570 if (!HPT370_ALLOW_ATA100_5 ||
571 check_in_drive_list(drive, bad_ata100_5))
572 mask = ATA_UDMA4;
573 break;
574 case HPT370A:
575 if (!HPT370_ALLOW_ATA100_5 ||
576 check_in_drive_list(drive, bad_ata100_5))
577 return ATA_UDMA4;
578
579 case HPT372 :
580 case HPT372A:
581 case HPT372N:
582 case HPT374 :
583 if (ata_id_is_sata(drive->id))
584 mask &= ~0x0e;
585
586 default:
587 return mask;
588 }
589
590 return check_in_drive_list(drive, bad_ata33) ? 0x00 : mask;
591 }
592
593 static u8 hpt3xx_mdma_filter(ide_drive_t *drive)
594 {
595 ide_hwif_t *hwif = drive->hwif;
596 struct hpt_info *info = hpt3xx_get_info(hwif->dev);
597
598 switch (info->chip_type) {
599 case HPT372 :
600 case HPT372A:
601 case HPT372N:
602 case HPT374 :
603 if (ata_id_is_sata(drive->id))
604 return 0x00;
605
606 default:
607 return 0x07;
608 }
609 }
610
611 static u32 get_speed_setting(u8 speed, struct hpt_info *info)
612 {
613 int i;
614
615
616
617
618
619
620
621 for (i = 0; i < ARRAY_SIZE(xfer_speeds) - 1; i++)
622 if (xfer_speeds[i] == speed)
623 break;
624
625 return info->timings->clock_table[info->clock][i];
626 }
627
628 static void hpt3xx_set_mode(ide_hwif_t *hwif, ide_drive_t *drive)
629 {
630 struct pci_dev *dev = to_pci_dev(hwif->dev);
631 struct hpt_info *info = hpt3xx_get_info(hwif->dev);
632 struct hpt_timings *t = info->timings;
633 u8 itr_addr = 0x40 + (drive->dn * 4);
634 u32 old_itr = 0;
635 const u8 speed = drive->dma_mode;
636 u32 new_itr = get_speed_setting(speed, info);
637 u32 itr_mask = speed < XFER_MW_DMA_0 ? t->pio_mask :
638 (speed < XFER_UDMA_0 ? t->dma_mask :
639 t->ultra_mask);
640
641 pci_read_config_dword(dev, itr_addr, &old_itr);
642 new_itr = (old_itr & ~itr_mask) | (new_itr & itr_mask);
643
644
645
646
647 new_itr &= ~0xc0000000;
648
649 pci_write_config_dword(dev, itr_addr, new_itr);
650 }
651
652 static void hpt3xx_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive)
653 {
654 drive->dma_mode = drive->pio_mode;
655 hpt3xx_set_mode(hwif, drive);
656 }
657
658 static void hpt3xx_maskproc(ide_drive_t *drive, int mask)
659 {
660 ide_hwif_t *hwif = drive->hwif;
661 struct pci_dev *dev = to_pci_dev(hwif->dev);
662 struct hpt_info *info = hpt3xx_get_info(hwif->dev);
663
664 if ((drive->dev_flags & IDE_DFLAG_NIEN_QUIRK) == 0)
665 return;
666
667 if (info->chip_type >= HPT370) {
668 u8 scr1 = 0;
669
670 pci_read_config_byte(dev, 0x5a, &scr1);
671 if (((scr1 & 0x10) >> 4) != mask) {
672 if (mask)
673 scr1 |= 0x10;
674 else
675 scr1 &= ~0x10;
676 pci_write_config_byte(dev, 0x5a, scr1);
677 }
678 } else if (mask)
679 disable_irq(hwif->irq);
680 else
681 enable_irq(hwif->irq);
682 }
683
684
685
686
687
688 static void hpt366_dma_lost_irq(ide_drive_t *drive)
689 {
690 struct pci_dev *dev = to_pci_dev(drive->hwif->dev);
691 u8 mcr1 = 0, mcr3 = 0, scr1 = 0;
692
693 pci_read_config_byte(dev, 0x50, &mcr1);
694 pci_read_config_byte(dev, 0x52, &mcr3);
695 pci_read_config_byte(dev, 0x5a, &scr1);
696 printk("%s: (%s) mcr1=0x%02x, mcr3=0x%02x, scr1=0x%02x\n",
697 drive->name, __func__, mcr1, mcr3, scr1);
698 if (scr1 & 0x10)
699 pci_write_config_byte(dev, 0x5a, scr1 & ~0x10);
700 ide_dma_lost_irq(drive);
701 }
702
703 static void hpt370_clear_engine(ide_drive_t *drive)
704 {
705 ide_hwif_t *hwif = drive->hwif;
706 struct pci_dev *dev = to_pci_dev(hwif->dev);
707
708 pci_write_config_byte(dev, hwif->select_data, 0x37);
709 udelay(10);
710 }
711
712 static void hpt370_irq_timeout(ide_drive_t *drive)
713 {
714 ide_hwif_t *hwif = drive->hwif;
715 struct pci_dev *dev = to_pci_dev(hwif->dev);
716 u16 bfifo = 0;
717 u8 dma_cmd;
718
719 pci_read_config_word(dev, hwif->select_data + 2, &bfifo);
720 printk(KERN_DEBUG "%s: %d bytes in FIFO\n", drive->name, bfifo & 0x1ff);
721
722
723 dma_cmd = inb(hwif->dma_base + ATA_DMA_CMD);
724
725 outb(dma_cmd & ~ATA_DMA_START, hwif->dma_base + ATA_DMA_CMD);
726 hpt370_clear_engine(drive);
727 }
728
729 static void hpt370_dma_start(ide_drive_t *drive)
730 {
731 #ifdef HPT_RESET_STATE_ENGINE
732 hpt370_clear_engine(drive);
733 #endif
734 ide_dma_start(drive);
735 }
736
737 static int hpt370_dma_end(ide_drive_t *drive)
738 {
739 ide_hwif_t *hwif = drive->hwif;
740 u8 dma_stat = inb(hwif->dma_base + ATA_DMA_STATUS);
741
742 if (dma_stat & ATA_DMA_ACTIVE) {
743
744 udelay(20);
745 dma_stat = inb(hwif->dma_base + ATA_DMA_STATUS);
746 if (dma_stat & ATA_DMA_ACTIVE)
747 hpt370_irq_timeout(drive);
748 }
749 return ide_dma_end(drive);
750 }
751
752
753 static int hpt374_dma_test_irq(ide_drive_t *drive)
754 {
755 ide_hwif_t *hwif = drive->hwif;
756 struct pci_dev *dev = to_pci_dev(hwif->dev);
757 u16 bfifo = 0;
758 u8 dma_stat;
759
760 pci_read_config_word(dev, hwif->select_data + 2, &bfifo);
761 if (bfifo & 0x1FF) {
762
763 return 0;
764 }
765
766 dma_stat = inb(hwif->dma_base + ATA_DMA_STATUS);
767
768 if (dma_stat & ATA_DMA_INTR)
769 return 1;
770
771 return 0;
772 }
773
774 static int hpt374_dma_end(ide_drive_t *drive)
775 {
776 ide_hwif_t *hwif = drive->hwif;
777 struct pci_dev *dev = to_pci_dev(hwif->dev);
778 u8 mcr = 0, mcr_addr = hwif->select_data;
779 u8 bwsr = 0, mask = hwif->channel ? 0x02 : 0x01;
780
781 pci_read_config_byte(dev, 0x6a, &bwsr);
782 pci_read_config_byte(dev, mcr_addr, &mcr);
783 if (bwsr & mask)
784 pci_write_config_byte(dev, mcr_addr, mcr | 0x30);
785 return ide_dma_end(drive);
786 }
787
788
789
790
791
792
793
794
795
796 static void hpt3xxn_set_clock(ide_hwif_t *hwif, u8 mode)
797 {
798 unsigned long base = hwif->extra_base;
799 u8 scr2 = inb(base + 0x6b);
800
801 if ((scr2 & 0x7f) == mode)
802 return;
803
804
805 outb(0x80, base + 0x63);
806 outb(0x80, base + 0x67);
807
808
809 outb(mode, base + 0x6b);
810 outb(0xc0, base + 0x69);
811
812
813
814
815
816 outb(inb(base + 0x60) | 0x32, base + 0x60);
817 outb(inb(base + 0x64) | 0x32, base + 0x64);
818
819
820 outb(0x00, base + 0x69);
821
822
823 outb(0x00, base + 0x63);
824 outb(0x00, base + 0x67);
825 }
826
827
828
829
830
831
832
833
834
835
836 static void hpt3xxn_rw_disk(ide_drive_t *drive, struct request *rq)
837 {
838 hpt3xxn_set_clock(drive->hwif, rq_data_dir(rq) ? 0x21 : 0x23);
839 }
840
841
842
843
844
845
846
847
848 static int hpt37x_calibrate_dpll(struct pci_dev *dev, u16 f_low, u16 f_high)
849 {
850 u32 dpll = (f_high << 16) | f_low | 0x100;
851 u8 scr2;
852 int i;
853
854 pci_write_config_dword(dev, 0x5c, dpll);
855
856
857 for(i = 0; i < 0x5000; ++i) {
858 udelay(50);
859 pci_read_config_byte(dev, 0x5b, &scr2);
860 if (scr2 & 0x80)
861 break;
862 }
863
864 for(i = 0; i < 0x1000; ++i) {
865 pci_read_config_byte(dev, 0x5b, &scr2);
866
867 if(!(scr2 & 0x80))
868 return 0;
869 }
870
871 pci_read_config_dword (dev, 0x5c, &dpll);
872 pci_write_config_dword(dev, 0x5c, (dpll & ~0x100));
873 return 1;
874 }
875
876 static void hpt3xx_disable_fast_irq(struct pci_dev *dev, u8 mcr_addr)
877 {
878 struct ide_host *host = pci_get_drvdata(dev);
879 struct hpt_info *info = host->host_priv + (&dev->dev == host->dev[1]);
880 u8 chip_type = info->chip_type;
881 u8 new_mcr, old_mcr = 0;
882
883
884
885
886
887 pci_read_config_byte(dev, mcr_addr + 1, &old_mcr);
888
889 if (chip_type >= HPT374)
890 new_mcr = old_mcr & ~0x07;
891 else if (chip_type >= HPT370) {
892 new_mcr = old_mcr;
893 new_mcr &= ~0x02;
894 #ifdef HPT_DELAY_INTERRUPT
895 new_mcr &= ~0x01;
896 #else
897 new_mcr |= 0x01;
898 #endif
899 } else
900 new_mcr = old_mcr & ~0x80;
901
902 if (new_mcr != old_mcr)
903 pci_write_config_byte(dev, mcr_addr + 1, new_mcr);
904 }
905
906 static int init_chipset_hpt366(struct pci_dev *dev)
907 {
908 unsigned long io_base = pci_resource_start(dev, 4);
909 struct hpt_info *info = hpt3xx_get_info(&dev->dev);
910 const char *name = DRV_NAME;
911 u8 pci_clk, dpll_clk = 0;
912 u8 chip_type;
913 enum ata_clock clock;
914
915 chip_type = info->chip_type;
916
917 pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, (L1_CACHE_BYTES / 4));
918 pci_write_config_byte(dev, PCI_LATENCY_TIMER, 0x78);
919 pci_write_config_byte(dev, PCI_MIN_GNT, 0x08);
920 pci_write_config_byte(dev, PCI_MAX_LAT, 0x08);
921
922
923
924
925 if (chip_type >= HPT370) {
926 u8 scr1 = 0;
927 u16 f_cnt = 0;
928 u32 temp = 0;
929
930
931 pci_read_config_byte(dev, 0x5a, &scr1);
932 if (scr1 & 0x10)
933 pci_write_config_byte(dev, 0x5a, scr1 & ~0x10);
934
935
936
937
938
939 if (chip_type == HPT372A)
940 outb(0x0e, io_base + 0x9c);
941
942
943
944
945
946 pci_write_config_byte(dev, 0x5b, 0x23);
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964 if (chip_type == HPT374 && (PCI_FUNC(dev->devfn) & 1)) {
965 struct pci_dev *dev1 = pci_get_slot(dev->bus,
966 dev->devfn - 1);
967 unsigned long io_base = pci_resource_start(dev1, 4);
968
969 temp = inl(io_base + 0x90);
970 pci_dev_put(dev1);
971 } else
972 temp = inl(io_base + 0x90);
973
974
975
976
977
978
979 if ((temp & 0xFFFFF000) != 0xABCDE000) {
980 int i;
981
982 printk(KERN_WARNING "%s %s: no clock data saved by "
983 "BIOS\n", name, pci_name(dev));
984
985
986 for (temp = i = 0; i < 128; i++) {
987 pci_read_config_word(dev, 0x78, &f_cnt);
988 temp += f_cnt & 0x1ff;
989 mdelay(1);
990 }
991 f_cnt = temp / 128;
992 } else
993 f_cnt = temp & 0x1ff;
994
995 dpll_clk = info->dpll_clk;
996 pci_clk = (f_cnt * dpll_clk) / 192;
997
998
999 if (pci_clk < 40)
1000 pci_clk = 33;
1001 else if(pci_clk < 45)
1002 pci_clk = 40;
1003 else if(pci_clk < 55)
1004 pci_clk = 50;
1005 else
1006 pci_clk = 66;
1007
1008 printk(KERN_INFO "%s %s: DPLL base: %d MHz, f_CNT: %d, "
1009 "assuming %d MHz PCI\n", name, pci_name(dev),
1010 dpll_clk, f_cnt, pci_clk);
1011 } else {
1012 u32 itr1 = 0;
1013
1014 pci_read_config_dword(dev, 0x40, &itr1);
1015
1016
1017 switch ((itr1 >> 8) & 0x0f) {
1018 case 0x09:
1019 pci_clk = 40;
1020 break;
1021 case 0x05:
1022 pci_clk = 25;
1023 break;
1024 case 0x07:
1025 default:
1026 pci_clk = 33;
1027 break;
1028 }
1029 }
1030
1031
1032 switch (pci_clk) {
1033 case 25:
1034 clock = ATA_CLOCK_25MHZ;
1035 break;
1036 case 33:
1037 default:
1038 clock = ATA_CLOCK_33MHZ;
1039 break;
1040 case 40:
1041 clock = ATA_CLOCK_40MHZ;
1042 break;
1043 case 50:
1044 clock = ATA_CLOCK_50MHZ;
1045 break;
1046 case 66:
1047 clock = ATA_CLOCK_66MHZ;
1048 break;
1049 }
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059 if (chip_type >= HPT374 || info->timings->clock_table[clock] == NULL) {
1060 u16 f_low, delta = pci_clk < 50 ? 2 : 4;
1061 int adjust;
1062
1063
1064
1065
1066
1067 if (info->udma_mask == ATA_UDMA6) {
1068 dpll_clk = 66;
1069 clock = ATA_CLOCK_66MHZ;
1070 } else if (dpll_clk) {
1071 dpll_clk = 50;
1072 clock = ATA_CLOCK_50MHZ;
1073 }
1074
1075 if (info->timings->clock_table[clock] == NULL) {
1076 printk(KERN_ERR "%s %s: unknown bus timing!\n",
1077 name, pci_name(dev));
1078 return -EIO;
1079 }
1080
1081
1082 pci_write_config_byte(dev, 0x5b, 0x21);
1083
1084
1085
1086
1087
1088 f_low = (pci_clk * 48) / dpll_clk;
1089
1090 for (adjust = 0; adjust < 8; adjust++) {
1091 if(hpt37x_calibrate_dpll(dev, f_low, f_low + delta))
1092 break;
1093
1094
1095
1096
1097 if (adjust & 1)
1098 f_low -= adjust >> 1;
1099 else
1100 f_low += adjust >> 1;
1101 }
1102 if (adjust == 8) {
1103 printk(KERN_ERR "%s %s: DPLL did not stabilize!\n",
1104 name, pci_name(dev));
1105 return -EIO;
1106 }
1107
1108 printk(KERN_INFO "%s %s: using %d MHz DPLL clock\n",
1109 name, pci_name(dev), dpll_clk);
1110 } else {
1111
1112 dpll_clk = 0;
1113
1114 printk(KERN_INFO "%s %s: using %d MHz PCI clock\n",
1115 name, pci_name(dev), pci_clk);
1116 }
1117
1118
1119 info->dpll_clk = dpll_clk;
1120 info->pci_clk = pci_clk;
1121 info->clock = clock;
1122
1123 if (chip_type >= HPT370) {
1124 u8 mcr1, mcr4;
1125
1126
1127
1128
1129
1130 pci_read_config_byte (dev, 0x50, &mcr1);
1131 pci_read_config_byte (dev, 0x54, &mcr4);
1132 pci_write_config_byte(dev, 0x50, (mcr1 | 0x32));
1133 pci_write_config_byte(dev, 0x54, (mcr4 | 0x32));
1134 udelay(100);
1135 }
1136
1137
1138
1139
1140
1141
1142 if (chip_type == HPT371N && clock == ATA_CLOCK_66MHZ)
1143 outb(inb(io_base + 0x9c) | 0x04, io_base + 0x9c);
1144
1145 hpt3xx_disable_fast_irq(dev, 0x50);
1146 hpt3xx_disable_fast_irq(dev, 0x54);
1147
1148 return 0;
1149 }
1150
1151 static u8 hpt3xx_cable_detect(ide_hwif_t *hwif)
1152 {
1153 struct pci_dev *dev = to_pci_dev(hwif->dev);
1154 struct hpt_info *info = hpt3xx_get_info(hwif->dev);
1155 u8 chip_type = info->chip_type;
1156 u8 scr1 = 0, ata66 = hwif->channel ? 0x01 : 0x02;
1157
1158
1159
1160
1161
1162
1163 if (chip_type == HPT374 && (PCI_FUNC(dev->devfn) & 1)) {
1164
1165
1166
1167
1168
1169 u8 mcr_addr = hwif->select_data + 2;
1170 u16 mcr;
1171
1172 pci_read_config_word(dev, mcr_addr, &mcr);
1173 pci_write_config_word(dev, mcr_addr, mcr | 0x8000);
1174
1175 udelay(10);
1176 pci_read_config_byte(dev, 0x5a, &scr1);
1177 pci_write_config_word(dev, mcr_addr, mcr);
1178 } else if (chip_type >= HPT370) {
1179
1180
1181
1182
1183 u8 scr2 = 0;
1184
1185 pci_read_config_byte(dev, 0x5b, &scr2);
1186 pci_write_config_byte(dev, 0x5b, scr2 & ~1);
1187
1188 udelay(10);
1189 pci_read_config_byte(dev, 0x5a, &scr1);
1190 pci_write_config_byte(dev, 0x5b, scr2);
1191 } else
1192 pci_read_config_byte(dev, 0x5a, &scr1);
1193
1194 return (scr1 & ata66) ? ATA_CBL_PATA40 : ATA_CBL_PATA80;
1195 }
1196
1197 static void init_hwif_hpt366(ide_hwif_t *hwif)
1198 {
1199 struct hpt_info *info = hpt3xx_get_info(hwif->dev);
1200 u8 chip_type = info->chip_type;
1201
1202
1203 hwif->select_data = hwif->channel ? 0x54 : 0x50;
1204
1205
1206
1207
1208
1209
1210
1211 if (chip_type >= HPT372N && info->dpll_clk && info->pci_clk < 66) {
1212
1213
1214
1215
1216 hwif->host->host_flags |= IDE_HFLAG_SERIALIZE;
1217 hwif->rw_disk = &hpt3xxn_rw_disk;
1218 }
1219 }
1220
1221 static int init_dma_hpt366(ide_hwif_t *hwif,
1222 const struct ide_port_info *d)
1223 {
1224 struct pci_dev *dev = to_pci_dev(hwif->dev);
1225 unsigned long flags, base = ide_pci_dma_base(hwif, d);
1226 u8 dma_old, dma_new, masterdma = 0, slavedma = 0;
1227
1228 if (base == 0)
1229 return -1;
1230
1231 hwif->dma_base = base;
1232
1233 if (ide_pci_check_simplex(hwif, d) < 0)
1234 return -1;
1235
1236 if (ide_pci_set_master(dev, d->name) < 0)
1237 return -1;
1238
1239 dma_old = inb(base + 2);
1240
1241 local_irq_save(flags);
1242
1243 dma_new = dma_old;
1244 pci_read_config_byte(dev, hwif->channel ? 0x4b : 0x43, &masterdma);
1245 pci_read_config_byte(dev, hwif->channel ? 0x4f : 0x47, &slavedma);
1246
1247 if (masterdma & 0x30) dma_new |= 0x20;
1248 if ( slavedma & 0x30) dma_new |= 0x40;
1249 if (dma_new != dma_old)
1250 outb(dma_new, base + 2);
1251
1252 local_irq_restore(flags);
1253
1254 printk(KERN_INFO " %s: BM-DMA at 0x%04lx-0x%04lx\n",
1255 hwif->name, base, base + 7);
1256
1257 hwif->extra_base = base + (hwif->channel ? 8 : 16);
1258
1259 if (ide_allocate_dma_engine(hwif))
1260 return -1;
1261
1262 return 0;
1263 }
1264
1265 static void hpt374_init(struct pci_dev *dev, struct pci_dev *dev2)
1266 {
1267 if (dev2->irq != dev->irq) {
1268
1269 dev2->irq = dev->irq;
1270 printk(KERN_INFO DRV_NAME " %s: PCI config space interrupt "
1271 "fixed\n", pci_name(dev2));
1272 }
1273 }
1274
1275 static void hpt371_init(struct pci_dev *dev)
1276 {
1277 u8 mcr1 = 0;
1278
1279
1280
1281
1282
1283
1284
1285 pci_read_config_byte(dev, 0x50, &mcr1);
1286 if (mcr1 & 0x04)
1287 pci_write_config_byte(dev, 0x50, mcr1 & ~0x04);
1288 }
1289
1290 static int hpt36x_init(struct pci_dev *dev, struct pci_dev *dev2)
1291 {
1292 u8 mcr1 = 0, pin1 = 0, pin2 = 0;
1293
1294
1295
1296
1297
1298 pci_read_config_byte(dev, 0x50, &mcr1);
1299 if (mcr1 & 0x30)
1300 pci_write_config_byte(dev, 0x50, mcr1 | 0x30);
1301
1302 pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin1);
1303 pci_read_config_byte(dev2, PCI_INTERRUPT_PIN, &pin2);
1304
1305 if (pin1 != pin2 && dev->irq == dev2->irq) {
1306 printk(KERN_INFO DRV_NAME " %s: onboard version of chipset, "
1307 "pin1=%d pin2=%d\n", pci_name(dev), pin1, pin2);
1308 return 1;
1309 }
1310
1311 return 0;
1312 }
1313
1314 #define IDE_HFLAGS_HPT3XX \
1315 (IDE_HFLAG_NO_ATAPI_DMA | \
1316 IDE_HFLAG_OFF_BOARD)
1317
1318 static const struct ide_port_ops hpt3xx_port_ops = {
1319 .set_pio_mode = hpt3xx_set_pio_mode,
1320 .set_dma_mode = hpt3xx_set_mode,
1321 .maskproc = hpt3xx_maskproc,
1322 .mdma_filter = hpt3xx_mdma_filter,
1323 .udma_filter = hpt3xx_udma_filter,
1324 .cable_detect = hpt3xx_cable_detect,
1325 };
1326
1327 static const struct ide_dma_ops hpt37x_dma_ops = {
1328 .dma_host_set = ide_dma_host_set,
1329 .dma_setup = ide_dma_setup,
1330 .dma_start = ide_dma_start,
1331 .dma_end = hpt374_dma_end,
1332 .dma_test_irq = hpt374_dma_test_irq,
1333 .dma_lost_irq = ide_dma_lost_irq,
1334 .dma_timer_expiry = ide_dma_sff_timer_expiry,
1335 .dma_sff_read_status = ide_dma_sff_read_status,
1336 };
1337
1338 static const struct ide_dma_ops hpt370_dma_ops = {
1339 .dma_host_set = ide_dma_host_set,
1340 .dma_setup = ide_dma_setup,
1341 .dma_start = hpt370_dma_start,
1342 .dma_end = hpt370_dma_end,
1343 .dma_test_irq = ide_dma_test_irq,
1344 .dma_lost_irq = ide_dma_lost_irq,
1345 .dma_timer_expiry = ide_dma_sff_timer_expiry,
1346 .dma_clear = hpt370_irq_timeout,
1347 .dma_sff_read_status = ide_dma_sff_read_status,
1348 };
1349
1350 static const struct ide_dma_ops hpt36x_dma_ops = {
1351 .dma_host_set = ide_dma_host_set,
1352 .dma_setup = ide_dma_setup,
1353 .dma_start = ide_dma_start,
1354 .dma_end = ide_dma_end,
1355 .dma_test_irq = ide_dma_test_irq,
1356 .dma_lost_irq = hpt366_dma_lost_irq,
1357 .dma_timer_expiry = ide_dma_sff_timer_expiry,
1358 .dma_sff_read_status = ide_dma_sff_read_status,
1359 };
1360
1361 static const struct ide_port_info hpt366_chipsets[] = {
1362 {
1363 .name = DRV_NAME,
1364 .init_chipset = init_chipset_hpt366,
1365 .init_hwif = init_hwif_hpt366,
1366 .init_dma = init_dma_hpt366,
1367
1368
1369
1370
1371
1372
1373 .enablebits = {{0x50,0x10,0x10}, {0x54,0x04,0x04}},
1374 .port_ops = &hpt3xx_port_ops,
1375 .dma_ops = &hpt36x_dma_ops,
1376 .host_flags = IDE_HFLAGS_HPT3XX | IDE_HFLAG_SINGLE,
1377 .pio_mask = ATA_PIO4,
1378 .mwdma_mask = ATA_MWDMA2,
1379 },
1380 {
1381 .name = DRV_NAME,
1382 .init_chipset = init_chipset_hpt366,
1383 .init_hwif = init_hwif_hpt366,
1384 .init_dma = init_dma_hpt366,
1385 .enablebits = {{0x50,0x04,0x04}, {0x54,0x04,0x04}},
1386 .port_ops = &hpt3xx_port_ops,
1387 .dma_ops = &hpt37x_dma_ops,
1388 .host_flags = IDE_HFLAGS_HPT3XX,
1389 .pio_mask = ATA_PIO4,
1390 .mwdma_mask = ATA_MWDMA2,
1391 }
1392 };
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402 static int hpt366_init_one(struct pci_dev *dev, const struct pci_device_id *id)
1403 {
1404 const struct hpt_info *info = NULL;
1405 struct hpt_info *dyn_info;
1406 struct pci_dev *dev2 = NULL;
1407 struct ide_port_info d;
1408 u8 idx = id->driver_data;
1409 u8 rev = dev->revision;
1410 int ret;
1411
1412 if ((idx == 0 || idx == 4) && (PCI_FUNC(dev->devfn) & 1))
1413 return -ENODEV;
1414
1415 switch (idx) {
1416 case 0:
1417 if (rev < 3)
1418 info = &hpt36x;
1419 else {
1420 switch (min_t(u8, rev, 6)) {
1421 case 3: info = &hpt370; break;
1422 case 4: info = &hpt370a; break;
1423 case 5: info = &hpt372; break;
1424 case 6: info = &hpt372n; break;
1425 }
1426 idx++;
1427 }
1428 break;
1429 case 1:
1430 info = (rev > 1) ? &hpt372n : &hpt372a;
1431 break;
1432 case 2:
1433 info = (rev > 1) ? &hpt302n : &hpt302;
1434 break;
1435 case 3:
1436 hpt371_init(dev);
1437 info = (rev > 1) ? &hpt371n : &hpt371;
1438 break;
1439 case 4:
1440 info = &hpt374;
1441 break;
1442 case 5:
1443 info = &hpt372n;
1444 break;
1445 }
1446
1447 printk(KERN_INFO DRV_NAME ": %s chipset detected\n", info->chip_name);
1448
1449 d = hpt366_chipsets[min_t(u8, idx, 1)];
1450
1451 d.udma_mask = info->udma_mask;
1452
1453
1454 if (info == &hpt370 || info == &hpt370a)
1455 d.dma_ops = &hpt370_dma_ops;
1456
1457 if (info == &hpt36x || info == &hpt374)
1458 dev2 = pci_get_slot(dev->bus, dev->devfn + 1);
1459
1460 dyn_info = kcalloc(dev2 ? 2 : 1, sizeof(*dyn_info), GFP_KERNEL);
1461 if (dyn_info == NULL) {
1462 printk(KERN_ERR "%s %s: out of memory!\n",
1463 d.name, pci_name(dev));
1464 pci_dev_put(dev2);
1465 return -ENOMEM;
1466 }
1467
1468
1469
1470
1471
1472 memcpy(dyn_info, info, sizeof(*dyn_info));
1473
1474 if (dev2) {
1475 memcpy(dyn_info + 1, info, sizeof(*dyn_info));
1476
1477 if (info == &hpt374)
1478 hpt374_init(dev, dev2);
1479 else {
1480 if (hpt36x_init(dev, dev2))
1481 d.host_flags &= ~IDE_HFLAG_NON_BOOTABLE;
1482 }
1483
1484 ret = ide_pci_init_two(dev, dev2, &d, dyn_info);
1485 if (ret < 0) {
1486 pci_dev_put(dev2);
1487 kfree(dyn_info);
1488 }
1489 return ret;
1490 }
1491
1492 ret = ide_pci_init_one(dev, &d, dyn_info);
1493 if (ret < 0)
1494 kfree(dyn_info);
1495
1496 return ret;
1497 }
1498
1499 static void hpt366_remove(struct pci_dev *dev)
1500 {
1501 struct ide_host *host = pci_get_drvdata(dev);
1502 struct ide_info *info = host->host_priv;
1503 struct pci_dev *dev2 = host->dev[1] ? to_pci_dev(host->dev[1]) : NULL;
1504
1505 ide_pci_remove(dev);
1506 pci_dev_put(dev2);
1507 kfree(info);
1508 }
1509
1510 static const struct pci_device_id hpt366_pci_tbl[] = {
1511 { PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT366), 0 },
1512 { PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT372), 1 },
1513 { PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT302), 2 },
1514 { PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT371), 3 },
1515 { PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT374), 4 },
1516 { PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT372N), 5 },
1517 { 0, },
1518 };
1519 MODULE_DEVICE_TABLE(pci, hpt366_pci_tbl);
1520
1521 static struct pci_driver hpt366_pci_driver = {
1522 .name = "HPT366_IDE",
1523 .id_table = hpt366_pci_tbl,
1524 .probe = hpt366_init_one,
1525 .remove = hpt366_remove,
1526 .suspend = ide_pci_suspend,
1527 .resume = ide_pci_resume,
1528 };
1529
1530 static int __init hpt366_ide_init(void)
1531 {
1532 return ide_pci_register_driver(&hpt366_pci_driver);
1533 }
1534
1535 static void __exit hpt366_ide_exit(void)
1536 {
1537 pci_unregister_driver(&hpt366_pci_driver);
1538 }
1539
1540 module_init(hpt366_ide_init);
1541 module_exit(hpt366_ide_exit);
1542
1543 MODULE_AUTHOR("Andre Hedrick");
1544 MODULE_DESCRIPTION("PCI driver module for Highpoint HPT366 IDE");
1545 MODULE_LICENSE("GPL");