aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/ide/pci/hpt366.c851
1 files changed, 489 insertions, 362 deletions
diff --git a/drivers/ide/pci/hpt366.c b/drivers/ide/pci/hpt366.c
index 9ad1531b6034..4350e3371360 100644
--- a/drivers/ide/pci/hpt366.c
+++ b/drivers/ide/pci/hpt366.c
@@ -1,5 +1,5 @@
1/* 1/*
2 * linux/drivers/ide/pci/hpt366.c Version 0.52 Jun 07, 2006 2 * linux/drivers/ide/pci/hpt366.c Version 1.00 Jun 25, 2006
3 * 3 *
4 * Copyright (C) 1999-2003 Andre Hedrick <andre@linux-ide.org> 4 * Copyright (C) 1999-2003 Andre Hedrick <andre@linux-ide.org>
5 * Portions Copyright (C) 2001 Sun Microsystems, Inc. 5 * Portions Copyright (C) 2001 Sun Microsystems, Inc.
@@ -60,13 +60,10 @@
60 * channel caused the cached register value to get out of sync with the 60 * channel caused the cached register value to get out of sync with the
61 * actual one, the channels weren't serialized, the turnaround shouldn't 61 * actual one, the channels weren't serialized, the turnaround shouldn't
62 * be done on 66 MHz PCI bus 62 * be done on 66 MHz PCI bus
63 * - avoid calibrating PLL twice as the second time results in a wrong PCI 63 * - disable UltraATA/100 for HPT370 by default as the 33 MHz clock being used
64 * frequency and thus in the wrong timings for the secondary channel 64 * does not allow for this speed anyway
65 * - disable UltraATA/133 for HPT372 and UltraATA/100 for HPT370 by default 65 * - avoid touching disabled channels (e.g. HPT371/N are single channel chips,
66 * as the ATA clock being used does not allow for this speed anyway 66 * their primary channel is kind of virtual, it isn't tied to any pins)
67 * - add support for HPT302N and HPT371N clocking (the same as for HPT372N)
68 * - HPT371/N are single channel chips, so avoid touching the primary channel
69 * which exists only virtually (there's no pins for it)
70 * - fix/remove bad/unused timing tables and use one set of tables for the whole 67 * - fix/remove bad/unused timing tables and use one set of tables for the whole
71 * HPT37x chip family; save space by introducing the separate transfer mode 68 * HPT37x chip family; save space by introducing the separate transfer mode
72 * table in which the mode lookup is done 69 * table in which the mode lookup is done
@@ -76,22 +73,44 @@
76 * and for HPT36x the obsolete HDIO_TRISTATE_HWIF handler was called instead 73 * and for HPT36x the obsolete HDIO_TRISTATE_HWIF handler was called instead
77 * - pass to init_chipset() handlers a copy of the IDE PCI device structure as 74 * - pass to init_chipset() handlers a copy of the IDE PCI device structure as
78 * they tamper with its fields 75 * they tamper with its fields
76 * - pass to the init_setup handlers a copy of the ide_pci_device_t structure
77 * since they may tamper with its fields
79 * - prefix the driver startup messages with the real chip name 78 * - prefix the driver startup messages with the real chip name
80 * - claim the extra 240 bytes of I/O space for all chips 79 * - claim the extra 240 bytes of I/O space for all chips
81 * - optimize the rate masking/filtering and the drive list lookup code 80 * - optimize the rate masking/filtering and the drive list lookup code
82 * - use pci_get_slot() to get to the function 1 of HPT36x/374 81 * - use pci_get_slot() to get to the function 1 of HPT36x/374
83 * - cache the channel's MCRs' offset; only touch the relevant MCR when detecting 82 * - cache offset of the channel's misc. control registers (MCRs) being used
84 * the cable type on HPT374's function 1 83 * throughout the driver
84 * - only touch the relevant MCR when detecting the cable type on HPT374's
85 * function 1
85 * - rename all the register related variables consistently 86 * - rename all the register related variables consistently
86 * - move the interrupt twiddling code from the speedproc handlers into the 87 * - move all the interrupt twiddling code from the speedproc handlers into
87 * init_hwif handler, also grouping all the DMA related code together there; 88 * init_hwif_hpt366(), also grouping all the DMA related code together there
88 * simplify the init_chipset handler 89 * - merge two HPT37x speedproc handlers, fix the PIO timing register mask and
89 * - merge two HPT37x speedproc handlers and fix the PIO timing register mask 90 * separate the UltraDMA and MWDMA masks there to avoid changing PIO timings
90 * there; make HPT36x speedproc handler look the same way as the HPT37x one 91 * when setting an UltraDMA mode
91 * - fix the tuneproc handler to always set the PIO mode requested, not the 92 * - fix hpt3xx_tune_drive() to set the PIO mode requested, not always select
92 * best possible one 93 * the best possible one
93 * - clean up DMA timeout handling for HPT370 94 * - clean up DMA timeout handling for HPT370
94 * <source@mvista.com> 95 * - switch to using the enumeration type to differ between the numerous chip
96 * variants, matching PCI device/revision ID with the chip type early, at the
97 * init_setup stage
98 * - extend the hpt_info structure to hold the DPLL and PCI clock frequencies,
99 * stop duplicating it for each channel by storing the pointer in the pci_dev
100 * structure: first, at the init_setup stage, point it to a static "template"
101 * with only the chip type and its specific base DPLL frequency, the highest
102 * supported DMA mode, and the chip settings table pointer filled, then, at
103 * the init_chipset stage, allocate per-chip instance and fill it with the
104 * rest of the necessary information
105 * - get rid of the constant thresholds in the HPT37x PCI clock detection code,
106 * switch to calculating PCI clock frequency based on the chip's base DPLL
107 * frequency
108 * - switch to using the DPLL clock and enable UltraATA/133 mode by default on
109 * anything newer than HPT370/A
110 * - fold PCI clock detection and DPLL setup code into init_chipset_hpt366();
111 * unify HPT36x/37x timing setup code and the speedproc handlers by joining
112 * the register setting lists into the table indexed by the clock selected
113 * Sergei Shtylyov, <sshtylyov@ru.mvista.com> or <source@mvista.com>
95 */ 114 */
96 115
97#include <linux/types.h> 116#include <linux/types.h>
@@ -345,71 +364,143 @@ static u32 sixty_six_base_hpt37x[] = {
345}; 364};
346 365
347#define HPT366_DEBUG_DRIVE_INFO 0 366#define HPT366_DEBUG_DRIVE_INFO 0
348#define HPT374_ALLOW_ATA133_6 0 367#define HPT374_ALLOW_ATA133_6 1
349#define HPT371_ALLOW_ATA133_6 0 368#define HPT371_ALLOW_ATA133_6 1
350#define HPT302_ALLOW_ATA133_6 0 369#define HPT302_ALLOW_ATA133_6 1
351#define HPT372_ALLOW_ATA133_6 0 370#define HPT372_ALLOW_ATA133_6 1
352#define HPT370_ALLOW_ATA100_5 0 371#define HPT370_ALLOW_ATA100_5 0
353#define HPT366_ALLOW_ATA66_4 1 372#define HPT366_ALLOW_ATA66_4 1
354#define HPT366_ALLOW_ATA66_3 1 373#define HPT366_ALLOW_ATA66_3 1
355#define HPT366_MAX_DEVS 8 374#define HPT366_MAX_DEVS 8
356 375
357#define F_LOW_PCI_33 0x23 376/* Supported ATA clock frequencies */
358#define F_LOW_PCI_40 0x29 377enum ata_clock {
359#define F_LOW_PCI_50 0x2d 378 ATA_CLOCK_25MHZ,
360#define F_LOW_PCI_66 0x42 379 ATA_CLOCK_33MHZ,
380 ATA_CLOCK_40MHZ,
381 ATA_CLOCK_50MHZ,
382 ATA_CLOCK_66MHZ,
383 NUM_ATA_CLOCKS
384};
361 385
362/* 386/*
363 * Hold all the highpoint quirks and revision information in one 387 * Hold all the HighPoint chip information in one place.
364 * place.
365 */ 388 */
366 389
367struct hpt_info 390struct hpt_info {
368{ 391 u8 chip_type; /* Chip type */
369 u8 max_mode; /* Speeds allowed */ 392 u8 max_mode; /* Speeds allowed */
370 u8 revision; /* Chipset revision */ 393 u8 dpll_clk; /* DPLL clock in MHz */
371 u8 flags; /* Chipset properties */ 394 u8 pci_clk; /* PCI clock in MHz */
372#define PLL_MODE 1 395 u32 **settings; /* Chipset settings table */
373#define IS_3xxN 2
374#define PCI_66MHZ 4
375 /* Speed table */
376 u32 *speed;
377}; 396};
378 397
379/* 398/* Supported HighPoint chips */
380 * This wants fixing so that we do everything not by revision 399enum {
381 * (which breaks on the newest chips) but by creating an 400 HPT36x,
382 * enumeration of chip variants and using that 401 HPT370,
383 */ 402 HPT370A,
403 HPT374,
404 HPT372,
405 HPT372A,
406 HPT302,
407 HPT371,
408 HPT372N,
409 HPT302N,
410 HPT371N
411};
384 412
385static __devinit u8 hpt_revision(struct pci_dev *dev) 413static u32 *hpt36x_settings[NUM_ATA_CLOCKS] = {
386{ 414 twenty_five_base_hpt36x,
387 u8 rev = 0; 415 thirty_three_base_hpt36x,
416 forty_base_hpt36x,
417 NULL,
418 NULL
419};
388 420
389 pci_read_config_byte(dev, PCI_REVISION_ID, &rev); 421static u32 *hpt37x_settings[NUM_ATA_CLOCKS] = {
422 NULL,
423 thirty_three_base_hpt37x,
424 NULL,
425 fifty_base_hpt37x,
426 sixty_six_base_hpt37x
427};
390 428
391 switch(dev->device) { 429static struct hpt_info hpt36x __devinitdata = {
392 /* Remap new 372N onto 372 */ 430 .chip_type = HPT36x,
393 case PCI_DEVICE_ID_TTI_HPT372N: 431 .max_mode = (HPT366_ALLOW_ATA66_4 || HPT366_ALLOW_ATA66_3) ? 2 : 1,
394 rev = PCI_DEVICE_ID_TTI_HPT372; 432 .dpll_clk = 0, /* no DPLL */
395 break; 433 .settings = hpt36x_settings
396 case PCI_DEVICE_ID_TTI_HPT374: 434};
397 rev = PCI_DEVICE_ID_TTI_HPT374; 435
398 break; 436static struct hpt_info hpt370 __devinitdata = {
399 case PCI_DEVICE_ID_TTI_HPT371: 437 .chip_type = HPT370,
400 rev = PCI_DEVICE_ID_TTI_HPT371; 438 .max_mode = HPT370_ALLOW_ATA100_5 ? 3 : 2,
401 break; 439 .dpll_clk = 48,
402 case PCI_DEVICE_ID_TTI_HPT302: 440 .settings = hpt37x_settings
403 rev = PCI_DEVICE_ID_TTI_HPT302; 441};
404 break; 442
405 case PCI_DEVICE_ID_TTI_HPT372: 443static struct hpt_info hpt370a __devinitdata = {
406 rev = PCI_DEVICE_ID_TTI_HPT372; 444 .chip_type = HPT370A,
407 break; 445 .max_mode = HPT370_ALLOW_ATA100_5 ? 3 : 2,
408 default: 446 .dpll_clk = 48,
409 break; 447 .settings = hpt37x_settings
410 } 448};
411 return rev; 449
412} 450static struct hpt_info hpt374 __devinitdata = {
451 .chip_type = HPT374,
452 .max_mode = HPT374_ALLOW_ATA133_6 ? 4 : 3,
453 .dpll_clk = 48,
454 .settings = hpt37x_settings
455};
456
457static struct hpt_info hpt372 __devinitdata = {
458 .chip_type = HPT372,
459 .max_mode = HPT372_ALLOW_ATA133_6 ? 4 : 3,
460 .dpll_clk = 55,
461 .settings = hpt37x_settings
462};
463
464static struct hpt_info hpt372a __devinitdata = {
465 .chip_type = HPT372A,
466 .max_mode = HPT372_ALLOW_ATA133_6 ? 4 : 3,
467 .dpll_clk = 66,
468 .settings = hpt37x_settings
469};
470
471static struct hpt_info hpt302 __devinitdata = {
472 .chip_type = HPT302,
473 .max_mode = HPT302_ALLOW_ATA133_6 ? 4 : 3,
474 .dpll_clk = 66,
475 .settings = hpt37x_settings
476};
477
478static struct hpt_info hpt371 __devinitdata = {
479 .chip_type = HPT371,
480 .max_mode = HPT371_ALLOW_ATA133_6 ? 4 : 3,
481 .dpll_clk = 66,
482 .settings = hpt37x_settings
483};
484
485static struct hpt_info hpt372n __devinitdata = {
486 .chip_type = HPT372N,
487 .max_mode = HPT372_ALLOW_ATA133_6 ? 4 : 3,
488 .dpll_clk = 77,
489 .settings = hpt37x_settings
490};
491
492static struct hpt_info hpt302n __devinitdata = {
493 .chip_type = HPT302N,
494 .max_mode = HPT302_ALLOW_ATA133_6 ? 4 : 3,
495 .dpll_clk = 77,
496};
497
498static struct hpt_info hpt371n __devinitdata = {
499 .chip_type = HPT371N,
500 .max_mode = HPT371_ALLOW_ATA133_6 ? 4 : 3,
501 .dpll_clk = 77,
502 .settings = hpt37x_settings
503};
413 504
414static int check_in_drive_list(ide_drive_t *drive, const char **list) 505static int check_in_drive_list(ide_drive_t *drive, const char **list)
415{ 506{
@@ -423,7 +514,7 @@ static int check_in_drive_list(ide_drive_t *drive, const char **list)
423 514
424static u8 hpt3xx_ratemask(ide_drive_t *drive) 515static u8 hpt3xx_ratemask(ide_drive_t *drive)
425{ 516{
426 struct hpt_info *info = ide_get_hwifdata(HWIF(drive)); 517 struct hpt_info *info = pci_get_drvdata(HWIF(drive)->pci_dev);
427 u8 mode = info->max_mode; 518 u8 mode = info->max_mode;
428 519
429 if (!eighty_ninty_three(drive) && mode) 520 if (!eighty_ninty_three(drive) && mode)
@@ -438,7 +529,8 @@ static u8 hpt3xx_ratemask(ide_drive_t *drive)
438 529
439static u8 hpt3xx_ratefilter(ide_drive_t *drive, u8 speed) 530static u8 hpt3xx_ratefilter(ide_drive_t *drive, u8 speed)
440{ 531{
441 struct hpt_info *info = ide_get_hwifdata(HWIF(drive)); 532 struct hpt_info *info = pci_get_drvdata(HWIF(drive)->pci_dev);
533 u8 chip_type = info->chip_type;
442 u8 mode = hpt3xx_ratemask(drive); 534 u8 mode = hpt3xx_ratemask(drive);
443 535
444 if (drive->media != ide_disk) 536 if (drive->media != ide_disk)
@@ -446,21 +538,22 @@ static u8 hpt3xx_ratefilter(ide_drive_t *drive, u8 speed)
446 538
447 switch (mode) { 539 switch (mode) {
448 case 0x04: 540 case 0x04:
449 speed = min(speed, (u8)XFER_UDMA_6); 541 speed = min_t(u8, speed, XFER_UDMA_6);
450 break; 542 break;
451 case 0x03: 543 case 0x03:
452 speed = min(speed, (u8)XFER_UDMA_5); 544 speed = min_t(u8, speed, XFER_UDMA_5);
453 if (info->revision >= 5) 545 if (chip_type >= HPT374)
454 break; 546 break;
455 if (!check_in_drive_list(drive, bad_ata100_5)) 547 if (!check_in_drive_list(drive, bad_ata100_5))
456 goto check_bad_ata33; 548 goto check_bad_ata33;
457 /* fall thru */ 549 /* fall thru */
458 case 0x02: 550 case 0x02:
459 speed = min_t(u8, speed, XFER_UDMA_4); 551 speed = min_t(u8, speed, XFER_UDMA_4);
460 /* 552
461 * CHECK ME, Does this need to be set to 5 ?? 553 /*
462 */ 554 * CHECK ME, Does this need to be changed to HPT374 ??
463 if (info->revision >= 3) 555 */
556 if (chip_type >= HPT370)
464 goto check_bad_ata33; 557 goto check_bad_ata33;
465 if (HPT366_ALLOW_ATA66_4 && 558 if (HPT366_ALLOW_ATA66_4 &&
466 !check_in_drive_list(drive, bad_ata66_4)) 559 !check_in_drive_list(drive, bad_ata66_4))
@@ -475,7 +568,7 @@ static u8 hpt3xx_ratefilter(ide_drive_t *drive, u8 speed)
475 speed = min_t(u8, speed, XFER_UDMA_2); 568 speed = min_t(u8, speed, XFER_UDMA_2);
476 569
477 check_bad_ata33: 570 check_bad_ata33:
478 if (info->revision >= 4) 571 if (chip_type >= HPT370A)
479 break; 572 break;
480 if (!check_in_drive_list(drive, bad_ata33)) 573 if (!check_in_drive_list(drive, bad_ata33))
481 break; 574 break;
@@ -488,7 +581,7 @@ static u8 hpt3xx_ratefilter(ide_drive_t *drive, u8 speed)
488 return speed; 581 return speed;
489} 582}
490 583
491static u32 pci_bus_clock_list(u8 speed, u32 *chipset_table) 584static u32 get_speed_setting(u8 speed, struct hpt_info *info)
492{ 585{
493 int i; 586 int i;
494 587
@@ -501,18 +594,23 @@ static u32 pci_bus_clock_list(u8 speed, u32 *chipset_table)
501 for (i = 0; i < ARRAY_SIZE(xfer_speeds) - 1; i++) 594 for (i = 0; i < ARRAY_SIZE(xfer_speeds) - 1; i++)
502 if (xfer_speeds[i] == speed) 595 if (xfer_speeds[i] == speed)
503 break; 596 break;
504 return chipset_table[i]; 597 /*
598 * NOTE: info->settings only points to the pointer
599 * to the list of the actual register values
600 */
601 return (*info->settings)[i];
505} 602}
506 603
507static int hpt36x_tune_chipset(ide_drive_t *drive, u8 xferspeed) 604static int hpt36x_tune_chipset(ide_drive_t *drive, u8 xferspeed)
508{ 605{
509 ide_hwif_t *hwif = HWIF(drive); 606 ide_hwif_t *hwif = HWIF(drive);
510 struct pci_dev *dev = hwif->pci_dev; 607 struct pci_dev *dev = hwif->pci_dev;
511 struct hpt_info *info = ide_get_hwifdata (hwif); 608 struct hpt_info *info = pci_get_drvdata(dev);
512 u8 speed = hpt3xx_ratefilter(drive, xferspeed); 609 u8 speed = hpt3xx_ratefilter(drive, xferspeed);
513 u8 itr_addr = drive->dn ? 0x44 : 0x40; 610 u8 itr_addr = drive->dn ? 0x44 : 0x40;
514 u32 itr_mask = (speed < XFER_MW_DMA_0) ? 0x30070000 : 0xc0000000; 611 u32 itr_mask = speed < XFER_MW_DMA_0 ? 0x30070000 :
515 u32 new_itr = pci_bus_clock_list(speed, info->speed); 612 (speed < XFER_UDMA_0 ? 0xc0070000 : 0xc03800ff);
613 u32 new_itr = get_speed_setting(speed, info);
516 u32 old_itr = 0; 614 u32 old_itr = 0;
517 615
518 /* 616 /*
@@ -532,11 +630,12 @@ static int hpt37x_tune_chipset(ide_drive_t *drive, u8 xferspeed)
532{ 630{
533 ide_hwif_t *hwif = HWIF(drive); 631 ide_hwif_t *hwif = HWIF(drive);
534 struct pci_dev *dev = hwif->pci_dev; 632 struct pci_dev *dev = hwif->pci_dev;
535 struct hpt_info *info = ide_get_hwifdata (hwif); 633 struct hpt_info *info = pci_get_drvdata(dev);
536 u8 speed = hpt3xx_ratefilter(drive, xferspeed); 634 u8 speed = hpt3xx_ratefilter(drive, xferspeed);
537 u8 itr_addr = 0x40 + (drive->dn * 4); 635 u8 itr_addr = 0x40 + (drive->dn * 4);
538 u32 itr_mask = (speed < XFER_MW_DMA_0) ? 0x303c0000 : 0xc0000000; 636 u32 itr_mask = speed < XFER_MW_DMA_0 ? 0x303c0000 :
539 u32 new_itr = pci_bus_clock_list(speed, info->speed); 637 (speed < XFER_UDMA_0 ? 0xc03c0000 : 0xc1c001ff);
638 u32 new_itr = get_speed_setting(speed, info);
540 u32 old_itr = 0; 639 u32 old_itr = 0;
541 640
542 pci_read_config_dword(dev, itr_addr, &old_itr); 641 pci_read_config_dword(dev, itr_addr, &old_itr);
@@ -552,9 +651,9 @@ static int hpt37x_tune_chipset(ide_drive_t *drive, u8 xferspeed)
552static int hpt3xx_tune_chipset(ide_drive_t *drive, u8 speed) 651static int hpt3xx_tune_chipset(ide_drive_t *drive, u8 speed)
553{ 652{
554 ide_hwif_t *hwif = HWIF(drive); 653 ide_hwif_t *hwif = HWIF(drive);
555 struct hpt_info *info = ide_get_hwifdata(hwif); 654 struct hpt_info *info = pci_get_drvdata(hwif->pci_dev);
556 655
557 if (info->revision >= 3) 656 if (info->chip_type >= HPT370)
558 return hpt37x_tune_chipset(drive, speed); 657 return hpt37x_tune_chipset(drive, speed);
559 else /* hpt368: hpt_minimum_revision(dev, 2) */ 658 else /* hpt368: hpt_minimum_revision(dev, 2) */
560 return hpt36x_tune_chipset(drive, speed); 659 return hpt36x_tune_chipset(drive, speed);
@@ -576,16 +675,10 @@ static void hpt3xx_tune_drive(ide_drive_t *drive, u8 pio)
576static int config_chipset_for_dma(ide_drive_t *drive) 675static int config_chipset_for_dma(ide_drive_t *drive)
577{ 676{
578 u8 speed = ide_dma_speed(drive, hpt3xx_ratemask(drive)); 677 u8 speed = ide_dma_speed(drive, hpt3xx_ratemask(drive));
579 ide_hwif_t *hwif = HWIF(drive);
580 struct hpt_info *info = ide_get_hwifdata(hwif);
581 678
582 if (!speed) 679 if (!speed)
583 return 0; 680 return 0;
584 681
585 /* If we don't have any timings we can't do a lot */
586 if (info->speed == NULL)
587 return 0;
588
589 (void) hpt3xx_tune_chipset(drive, speed); 682 (void) hpt3xx_tune_chipset(drive, speed);
590 return ide_dma_enable(drive); 683 return ide_dma_enable(drive);
591} 684}
@@ -615,10 +708,10 @@ static void hpt3xx_maskproc(ide_drive_t *drive, int mask)
615{ 708{
616 ide_hwif_t *hwif = HWIF(drive); 709 ide_hwif_t *hwif = HWIF(drive);
617 struct pci_dev *dev = hwif->pci_dev; 710 struct pci_dev *dev = hwif->pci_dev;
618 struct hpt_info *info = ide_get_hwifdata(hwif); 711 struct hpt_info *info = pci_get_drvdata(dev);
619 712
620 if (drive->quirk_list) { 713 if (drive->quirk_list) {
621 if (info->revision >= 3) { 714 if (info->chip_type >= HPT370) {
622 u8 scr1 = 0; 715 u8 scr1 = 0;
623 716
624 pci_read_config_byte(dev, 0x5a, &scr1); 717 pci_read_config_byte(dev, 0x5a, &scr1);
@@ -778,40 +871,37 @@ static int hpt374_ide_dma_end(ide_drive_t *drive)
778 * @mode: clocking mode (0x21 for write, 0x23 otherwise) 871 * @mode: clocking mode (0x21 for write, 0x23 otherwise)
779 * 872 *
780 * Switch the DPLL clock on the HPT3xxN devices. This is a right mess. 873 * Switch the DPLL clock on the HPT3xxN devices. This is a right mess.
781 * NOTE: avoid touching the disabled primary channel on HPT371N -- it
782 * doesn't physically exist anyway...
783 */ 874 */
784 875
785static void hpt3xxn_set_clock(ide_hwif_t *hwif, u8 mode) 876static void hpt3xxn_set_clock(ide_hwif_t *hwif, u8 mode)
786{ 877{
787 u8 mcr1, scr2 = hwif->INB(hwif->dma_master + 0x7b); 878 u8 scr2 = hwif->INB(hwif->dma_master + 0x7b);
788 879
789 if ((scr2 & 0x7f) == mode) 880 if ((scr2 & 0x7f) == mode)
790 return; 881 return;
791 882
792 /* MISC. control register 1 has the channel enable bit... */
793 mcr1 = hwif->INB(hwif->dma_master + 0x70);
794
795 /* Tristate the bus */ 883 /* Tristate the bus */
796 if (mcr1 & 0x04) 884 hwif->OUTB(0x80, hwif->dma_master + 0x73);
797 hwif->OUTB(0x80, hwif->dma_master + 0x73);
798 hwif->OUTB(0x80, hwif->dma_master + 0x77); 885 hwif->OUTB(0x80, hwif->dma_master + 0x77);
799 886
800 /* Switch clock and reset channels */ 887 /* Switch clock and reset channels */
801 hwif->OUTB(mode, hwif->dma_master + 0x7b); 888 hwif->OUTB(mode, hwif->dma_master + 0x7b);
802 hwif->OUTB(0xc0, hwif->dma_master + 0x79); 889 hwif->OUTB(0xc0, hwif->dma_master + 0x79);
803 890
804 /* Reset state machines */ 891 /*
805 if (mcr1 & 0x04) 892 * Reset the state machines.
806 hwif->OUTB(0x37, hwif->dma_master + 0x70); 893 * NOTE: avoid accidentally enabling the disabled channels.
807 hwif->OUTB(0x37, hwif->dma_master + 0x74); 894 */
895 hwif->OUTB(hwif->INB(hwif->dma_master + 0x70) | 0x32,
896 hwif->dma_master + 0x70);
897 hwif->OUTB(hwif->INB(hwif->dma_master + 0x74) | 0x32,
898 hwif->dma_master + 0x74);
808 899
809 /* Complete reset */ 900 /* Complete reset */
810 hwif->OUTB(0x00, hwif->dma_master + 0x79); 901 hwif->OUTB(0x00, hwif->dma_master + 0x79);
811 902
812 /* Reconnect channels to bus */ 903 /* Reconnect channels to bus */
813 if (mcr1 & 0x04) 904 hwif->OUTB(0x00, hwif->dma_master + 0x73);
814 hwif->OUTB(0x00, hwif->dma_master + 0x73);
815 hwif->OUTB(0x00, hwif->dma_master + 0x77); 905 hwif->OUTB(0x00, hwif->dma_master + 0x77);
816} 906}
817 907
@@ -826,10 +916,7 @@ static void hpt3xxn_set_clock(ide_hwif_t *hwif, u8 mode)
826 916
827static void hpt3xxn_rw_disk(ide_drive_t *drive, struct request *rq) 917static void hpt3xxn_rw_disk(ide_drive_t *drive, struct request *rq)
828{ 918{
829 ide_hwif_t *hwif = HWIF(drive); 919 hpt3xxn_set_clock(HWIF(drive), rq_data_dir(rq) ? 0x23 : 0x21);
830 u8 wantclock = rq_data_dir(rq) ? 0x23 : 0x21;
831
832 hpt3xxn_set_clock(hwif, wantclock);
833} 920}
834 921
835/* 922/*
@@ -890,223 +977,293 @@ static int hpt3xx_busproc(ide_drive_t *drive, int state)
890 return 0; 977 return 0;
891} 978}
892 979
893static void __devinit hpt366_clocking(ide_hwif_t *hwif) 980/**
981 * hpt37x_calibrate_dpll - calibrate the DPLL
982 * @dev: PCI device
983 *
984 * Perform a calibration cycle on the DPLL.
985 * Returns 1 if this succeeds
986 */
987static int __devinit hpt37x_calibrate_dpll(struct pci_dev *dev, u16 f_low, u16 f_high)
894{ 988{
895 u32 itr1 = 0; 989 u32 dpll = (f_high << 16) | f_low | 0x100;
896 struct hpt_info *info = ide_get_hwifdata(hwif); 990 u8 scr2;
991 int i;
897 992
898 pci_read_config_dword(hwif->pci_dev, 0x40, &itr1); 993 pci_write_config_dword(dev, 0x5c, dpll);
899 994
900 /* detect bus speed by looking at control reg timing: */ 995 /* Wait for oscillator ready */
901 switch((itr1 >> 8) & 7) { 996 for(i = 0; i < 0x5000; ++i) {
902 case 5: 997 udelay(50);
903 info->speed = forty_base_hpt36x; 998 pci_read_config_byte(dev, 0x5b, &scr2);
904 break; 999 if (scr2 & 0x80)
905 case 9:
906 info->speed = twenty_five_base_hpt36x;
907 break;
908 case 7:
909 default:
910 info->speed = thirty_three_base_hpt36x;
911 break; 1000 break;
912 } 1001 }
1002 /* See if it stays ready (we'll just bail out if it's not yet) */
1003 for(i = 0; i < 0x1000; ++i) {
1004 pci_read_config_byte(dev, 0x5b, &scr2);
1005 /* DPLL destabilized? */
1006 if(!(scr2 & 0x80))
1007 return 0;
1008 }
1009 /* Turn off tuning, we have the DPLL set */
1010 pci_read_config_dword (dev, 0x5c, &dpll);
1011 pci_write_config_dword(dev, 0x5c, (dpll & ~0x100));
1012 return 1;
913} 1013}
914 1014
915static void __devinit hpt37x_clocking(ide_hwif_t *hwif) 1015static unsigned int __devinit init_chipset_hpt366(struct pci_dev *dev, const char *name)
916{ 1016{
917 struct hpt_info *info = ide_get_hwifdata(hwif); 1017 struct hpt_info *info = kmalloc(sizeof(struct hpt_info), GFP_KERNEL);
918 struct pci_dev *dev = hwif->pci_dev; 1018 unsigned long io_base = pci_resource_start(dev, 4);
919 char *name = hwif->cds->name; 1019 u8 pci_clk, dpll_clk = 0; /* PCI and DPLL clock in MHz */
920 int adjust, i; 1020 enum ata_clock clock;
921 u16 freq = 0; 1021
922 u32 pll, temp = 0; 1022 if (info == NULL) {
923 u8 scr2 = 0, mcr1 = 0; 1023 printk(KERN_ERR "%s: out of memory!\n", name);
924 1024 return -ENOMEM;
1025 }
1026
925 /* 1027 /*
926 * default to pci clock. make sure MA15/16 are set to output 1028 * Copy everything from a static "template" structure
927 * to prevent drives having problems with 40-pin cables. Needed 1029 * to just allocated per-chip hpt_info structure.
928 * for some drives such as IBM-DTLA which will not enter ready
929 * state on reset when PDIAG is a input.
930 *
931 * ToDo: should we set 0x21 when using PLL mode ?
932 */ 1030 */
933 pci_write_config_byte(dev, 0x5b, 0x23); 1031 *info = *(struct hpt_info *)pci_get_drvdata(dev);
934 1032
935 /* 1033 /*
936 * We'll have to read f_CNT value in order to determine 1034 * FIXME: Not portable. Also, why do we enable the ROM in the first place?
937 * the PCI clock frequency according to the following ratio: 1035 * We don't seem to be using it.
938 *
939 * f_CNT = Fpci * 192 / Fdpll
940 *
941 * First try reading the register in which the HighPoint BIOS
942 * saves f_CNT value before reprogramming the DPLL from its
943 * default setting (which differs for the various chips).
944 * NOTE: This register is only accessible via I/O space.
945 *
946 * In case the signature check fails, we'll have to resort to
947 * reading the f_CNT register itself in hopes that nobody has
948 * touched the DPLL yet...
949 */ 1036 */
950 temp = inl(pci_resource_start(dev, 4) + 0x90); 1037 if (dev->resource[PCI_ROM_RESOURCE].start)
951 if ((temp & 0xFFFFF000) != 0xABCDE000) { 1038 pci_write_config_dword(dev, PCI_ROM_ADDRESS,
952 printk(KERN_WARNING "%s: no clock data saved by BIOS\n", name); 1039 dev->resource[PCI_ROM_RESOURCE].start | PCI_ROM_ADDRESS_ENABLE);
953 1040
954 /* Calculate the average value of f_CNT */ 1041 pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, (L1_CACHE_BYTES / 4));
955 for (temp = i = 0; i < 128; i++) { 1042 pci_write_config_byte(dev, PCI_LATENCY_TIMER, 0x78);
956 pci_read_config_word(dev, 0x78, &freq); 1043 pci_write_config_byte(dev, PCI_MIN_GNT, 0x08);
957 temp += freq & 0x1ff; 1044 pci_write_config_byte(dev, PCI_MAX_LAT, 0x08);
958 mdelay(1);
959 }
960 freq = temp / 128;
961 } else
962 freq = temp & 0x1ff;
963 1045
964 /* 1046 /*
965 * HPT3xxN chips use different PCI clock information. 1047 * First, try to estimate the PCI clock frequency...
966 * Currently we always set up the PLL for them.
967 */ 1048 */
1049 if (info->chip_type >= HPT370) {
1050 u8 scr1 = 0;
1051 u16 f_cnt = 0;
1052 u32 temp = 0;
1053
1054 /* Interrupt force enable. */
1055 pci_read_config_byte(dev, 0x5a, &scr1);
1056 if (scr1 & 0x10)
1057 pci_write_config_byte(dev, 0x5a, scr1 & ~0x10);
1058
1059 /*
1060 * HighPoint does this for HPT372A.
1061 * NOTE: This register is only writeable via I/O space.
1062 */
1063 if (info->chip_type == HPT372A)
1064 outb(0x0e, io_base + 0x9c);
1065
1066 /*
1067 * Default to PCI clock. Make sure MA15/16 are set to output
1068 * to prevent drives having problems with 40-pin cables.
1069 */
1070 pci_write_config_byte(dev, 0x5b, 0x23);
968 1071
969 if (info->flags & IS_3xxN) { 1072 /*
970 if(freq < 0x55) 1073 * We'll have to read f_CNT value in order to determine
971 pll = F_LOW_PCI_33; 1074 * the PCI clock frequency according to the following ratio:
972 else if(freq < 0x70) 1075 *
973 pll = F_LOW_PCI_40; 1076 * f_CNT = Fpci * 192 / Fdpll
974 else if(freq < 0x7F) 1077 *
975 pll = F_LOW_PCI_50; 1078 * First try reading the register in which the HighPoint BIOS
1079 * saves f_CNT value before reprogramming the DPLL from its
1080 * default setting (which differs for the various chips).
1081 * NOTE: This register is only accessible via I/O space.
1082 *
1083 * In case the signature check fails, we'll have to resort to
1084 * reading the f_CNT register itself in hopes that nobody has
1085 * touched the DPLL yet...
1086 */
1087 temp = inl(io_base + 0x90);
1088 if ((temp & 0xFFFFF000) != 0xABCDE000) {
1089 int i;
1090
1091 printk(KERN_WARNING "%s: no clock data saved by BIOS\n",
1092 name);
1093
1094 /* Calculate the average value of f_CNT. */
1095 for (temp = i = 0; i < 128; i++) {
1096 pci_read_config_word(dev, 0x78, &f_cnt);
1097 temp += f_cnt & 0x1ff;
1098 mdelay(1);
1099 }
1100 f_cnt = temp / 128;
1101 } else
1102 f_cnt = temp & 0x1ff;
1103
1104 dpll_clk = info->dpll_clk;
1105 pci_clk = (f_cnt * dpll_clk) / 192;
1106
1107 /* Clamp PCI clock to bands. */
1108 if (pci_clk < 40)
1109 pci_clk = 33;
1110 else if(pci_clk < 45)
1111 pci_clk = 40;
1112 else if(pci_clk < 55)
1113 pci_clk = 50;
976 else 1114 else
977 pll = F_LOW_PCI_66; 1115 pci_clk = 66;
978 1116
1117 printk(KERN_INFO "%s: DPLL base: %d MHz, f_CNT: %d, "
1118 "assuming %d MHz PCI\n", name, dpll_clk, f_cnt, pci_clk);
979 } else { 1119 } else {
980 if(freq < 0x9C) 1120 u32 itr1 = 0;
981 pll = F_LOW_PCI_33; 1121
982 else if(freq < 0xb0) 1122 pci_read_config_dword(dev, 0x40, &itr1);
983 pll = F_LOW_PCI_40; 1123
984 else if(freq <0xc8) 1124 /* Detect PCI clock by looking at cmd_high_time. */
985 pll = F_LOW_PCI_50; 1125 switch((itr1 >> 8) & 0x07) {
986 else 1126 case 0x09:
987 pll = F_LOW_PCI_66; 1127 pci_clk = 40;
988 } 1128 case 0x05:
989 printk(KERN_INFO "%s: FREQ: %d, PLL: %d\n", name, freq, pll); 1129 pci_clk = 25;
990 1130 case 0x07:
991 if (!(info->flags & IS_3xxN)) { 1131 default:
992 if (pll == F_LOW_PCI_33) { 1132 pci_clk = 33;
993 info->speed = thirty_three_base_hpt37x;
994 printk(KERN_DEBUG "%s: using 33MHz PCI clock\n", name);
995 } else if (pll == F_LOW_PCI_40) {
996 /* Unsupported */
997 } else if (pll == F_LOW_PCI_50) {
998 info->speed = fifty_base_hpt37x;
999 printk(KERN_DEBUG "%s: using 50MHz PCI clock\n", name);
1000 } else {
1001 info->speed = sixty_six_base_hpt37x;
1002 printk(KERN_DEBUG "%s: using 66MHz PCI clock\n", name);
1003 } 1133 }
1004 } 1134 }
1005 1135
1006 if (pll == F_LOW_PCI_66) 1136 /* Let's assume we'll use PCI clock for the ATA clock... */
1007 info->flags |= PCI_66MHZ; 1137 switch (pci_clk) {
1138 case 25:
1139 clock = ATA_CLOCK_25MHZ;
1140 break;
1141 case 33:
1142 default:
1143 clock = ATA_CLOCK_33MHZ;
1144 break;
1145 case 40:
1146 clock = ATA_CLOCK_40MHZ;
1147 break;
1148 case 50:
1149 clock = ATA_CLOCK_50MHZ;
1150 break;
1151 case 66:
1152 clock = ATA_CLOCK_66MHZ;
1153 break;
1154 }
1008 1155
1009 /* 1156 /*
1010 * only try the pll if we don't have a table for the clock 1157 * Only try the DPLL if we don't have a table for the PCI clock that
1011 * speed that we're running at. NOTE: the internal PLL will 1158 * we are running at for HPT370/A, always use it for anything newer...
1012 * result in slow reads when using a 33MHz PCI clock. we also
1013 * don't like to use the PLL because it will cause glitches
1014 * on PRST/SRST when the HPT state engine gets reset.
1015 * 1159 *
1016 * ToDo: Use 66MHz PLL when ATA133 devices are present on a 1160 * NOTE: Using the internal DPLL results in slow reads on 33 MHz PCI.
1017 * 372 device so we can get ATA133 support 1161 * We also don't like using the DPLL because this causes glitches
1162 * on PRST-/SRST- when the state engine gets reset...
1018 */ 1163 */
1019 if (info->speed) 1164 if (info->chip_type >= HPT374 || info->settings[clock] == NULL) {
1020 goto init_hpt37X_done; 1165 u16 f_low, delta = pci_clk < 50 ? 2 : 4;
1166 int adjust;
1167
1168 /*
1169 * Select 66 MHz DPLL clock only if UltraATA/133 mode is
1170 * supported/enabled, use 50 MHz DPLL clock otherwise...
1171 */
1172 if (info->max_mode == 0x04) {
1173 dpll_clk = 66;
1174 clock = ATA_CLOCK_66MHZ;
1175 } else if (dpll_clk) { /* HPT36x chips don't have DPLL */
1176 dpll_clk = 50;
1177 clock = ATA_CLOCK_50MHZ;
1178 }
1021 1179
1022 info->flags |= PLL_MODE; 1180 if (info->settings[clock] == NULL) {
1023 1181 printk(KERN_ERR "%s: unknown bus timing!\n", name);
1024 /* 1182 kfree(info);
1025 * Adjust the PLL based upon the PCI clock, enable it, and 1183 return -EIO;
1026 * wait for stabilization...
1027 */
1028 adjust = 0;
1029 freq = (pll < F_LOW_PCI_50) ? 2 : 4;
1030 while (adjust++ < 6) {
1031 pci_write_config_dword(dev, 0x5c, (freq + pll) << 16 |
1032 pll | 0x100);
1033
1034 /* wait for clock stabilization */
1035 for (i = 0; i < 0x50000; i++) {
1036 pci_read_config_byte(dev, 0x5b, &scr2);
1037 if (scr2 & 0x80) {
1038 /* spin looking for the clock to destabilize */
1039 for (i = 0; i < 0x1000; ++i) {
1040 pci_read_config_byte(dev, 0x5b,
1041 &scr2);
1042 if ((scr2 & 0x80) == 0)
1043 goto pll_recal;
1044 }
1045 pci_read_config_dword(dev, 0x5c, &pll);
1046 pci_write_config_dword(dev, 0x5c,
1047 pll & ~0x100);
1048 pci_write_config_byte(dev, 0x5b, 0x21);
1049
1050 info->speed = fifty_base_hpt37x;
1051 printk("%s: using 50MHz internal PLL\n", name);
1052 goto init_hpt37X_done;
1053 }
1054 } 1184 }
1055pll_recal:
1056 if (adjust & 1)
1057 pll -= (adjust >> 1);
1058 else
1059 pll += (adjust >> 1);
1060 }
1061 1185
1062init_hpt37X_done: 1186 /* Select the DPLL clock. */
1063 if (!info->speed) 1187 pci_write_config_byte(dev, 0x5b, 0x21);
1064 printk(KERN_ERR "%s: unknown bus timing [%d %d].\n", 1188
1065 name, pll, freq); 1189 /*
1066 /* 1190 * Adjust the DPLL based upon PCI clock, enable it,
1067 * Reset the state engines. 1191 * and wait for stabilization...
1068 * NOTE: avoid accidentally enabling the primary channel on HPT371N. 1192 */
1069 */ 1193 f_low = (pci_clk * 48) / dpll_clk;
1070 pci_read_config_byte(dev, 0x50, &mcr1); 1194
1071 if (mcr1 & 0x04) 1195 for (adjust = 0; adjust < 8; adjust++) {
1072 pci_write_config_byte(dev, 0x50, 0x37); 1196 if(hpt37x_calibrate_dpll(dev, f_low, f_low + delta))
1073 pci_write_config_byte(dev, 0x54, 0x37); 1197 break;
1074 udelay(100); 1198
1075} 1199 /*
1200 * See if it'll settle at a fractionally different clock
1201 */
1202 if (adjust & 1)
1203 f_low -= adjust >> 1;
1204 else
1205 f_low += adjust >> 1;
1206 }
1207 if (adjust == 8) {
1208 printk(KERN_ERR "%s: DPLL did not stabilize!\n", name);
1209 kfree(info);
1210 return -EIO;
1211 }
1212
1213 printk("%s: using %d MHz DPLL clock\n", name, dpll_clk);
1214 } else {
1215 /* Mark the fact that we're not using the DPLL. */
1216 dpll_clk = 0;
1217
1218 printk("%s: using %d MHz PCI clock\n", name, pci_clk);
1219 }
1076 1220
1077static unsigned int __devinit init_chipset_hpt366(struct pci_dev *dev, const char *name)
1078{
1079 /* 1221 /*
1080 * FIXME: Not portable. Also, why do we enable the ROM in the first place? 1222 * Advance the table pointer to a slot which points to the list
1081 * We don't seem to be using it. 1223 * of the register values settings matching the clock being used.
1082 */ 1224 */
1083 if (dev->resource[PCI_ROM_RESOURCE].start) 1225 info->settings += clock;
1084 pci_write_config_dword(dev, PCI_ROM_ADDRESS,
1085 dev->resource[PCI_ROM_RESOURCE].start | PCI_ROM_ADDRESS_ENABLE);
1086 1226
1087 pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, (L1_CACHE_BYTES / 4)); 1227 /* Store the clock frequencies. */
1088 pci_write_config_byte(dev, PCI_LATENCY_TIMER, 0x78); 1228 info->dpll_clk = dpll_clk;
1089 pci_write_config_byte(dev, PCI_MIN_GNT, 0x08); 1229 info->pci_clk = pci_clk;
1090 pci_write_config_byte(dev, PCI_MAX_LAT, 0x08);
1091 1230
1092 if (hpt_revision(dev) >= 3) { 1231 /* Point to this chip's own instance of the hpt_info structure. */
1093 u8 scr1 = 0; 1232 pci_set_drvdata(dev, info);
1094 1233
1095 /* Interrupt force enable. */ 1234 if (info->chip_type >= HPT370) {
1096 pci_read_config_byte(dev, 0x5a, &scr1); 1235 u8 mcr1, mcr4;
1097 if (scr1 & 0x10) 1236
1098 pci_write_config_byte(dev, 0x5a, scr1 & ~0x10); 1237 /*
1238 * Reset the state engines.
1239 * NOTE: Avoid accidentally enabling the disabled channels.
1240 */
1241 pci_read_config_byte (dev, 0x50, &mcr1);
1242 pci_read_config_byte (dev, 0x54, &mcr4);
1243 pci_write_config_byte(dev, 0x50, (mcr1 | 0x32));
1244 pci_write_config_byte(dev, 0x54, (mcr4 | 0x32));
1245 udelay(100);
1099 } 1246 }
1100 1247
1248 /*
1249 * On HPT371N, if ATA clock is 66 MHz we must set bit 2 in
1250 * the MISC. register to stretch the UltraDMA Tss timing.
1251 * NOTE: This register is only writeable via I/O space.
1252 */
1253 if (info->chip_type == HPT371N && clock == ATA_CLOCK_66MHZ)
1254
1255 outb(inb(io_base + 0x9c) | 0x04, io_base + 0x9c);
1256
1101 return dev->irq; 1257 return dev->irq;
1102} 1258}
1103 1259
1104static void __devinit init_hwif_hpt366(ide_hwif_t *hwif) 1260static void __devinit init_hwif_hpt366(ide_hwif_t *hwif)
1105{ 1261{
1106 struct pci_dev *dev = hwif->pci_dev; 1262 struct pci_dev *dev = hwif->pci_dev;
1107 struct hpt_info *info = ide_get_hwifdata(hwif); 1263 struct hpt_info *info = pci_get_drvdata(dev);
1108 int serialize = HPT_SERIALIZE_IO; 1264 int serialize = HPT_SERIALIZE_IO;
1109 u8 scr1 = 0, ata66 = (hwif->channel) ? 0x01 : 0x02; 1265 u8 scr1 = 0, ata66 = (hwif->channel) ? 0x01 : 0x02;
1266 u8 chip_type = info->chip_type;
1110 u8 new_mcr, old_mcr = 0; 1267 u8 new_mcr, old_mcr = 0;
1111 1268
1112 /* Cache the channel's MISC. control registers' offset */ 1269 /* Cache the channel's MISC. control registers' offset */
@@ -1125,7 +1282,7 @@ static void __devinit init_hwif_hpt366(ide_hwif_t *hwif)
1125 * - on 33 MHz PCI we must clock switch 1282 * - on 33 MHz PCI we must clock switch
1126 * - on 66 MHz PCI we must NOT use the PCI clock 1283 * - on 66 MHz PCI we must NOT use the PCI clock
1127 */ 1284 */
1128 if ((info->flags & (IS_3xxN | PCI_66MHZ)) == IS_3xxN) { 1285 if (chip_type >= HPT372N && info->dpll_clk && info->pci_clk < 66) {
1129 /* 1286 /*
1130 * Clock is shared between the channels, 1287 * Clock is shared between the channels,
1131 * so we'll have to serialize them... :-( 1288 * so we'll have to serialize them... :-(
@@ -1144,9 +1301,9 @@ static void __devinit init_hwif_hpt366(ide_hwif_t *hwif)
1144 */ 1301 */
1145 pci_read_config_byte(dev, hwif->select_data + 1, &old_mcr); 1302 pci_read_config_byte(dev, hwif->select_data + 1, &old_mcr);
1146 1303
1147 if (info->revision >= 5) /* HPT372 and newer */ 1304 if (info->chip_type >= HPT374)
1148 new_mcr = old_mcr & ~0x07; 1305 new_mcr = old_mcr & ~0x07;
1149 else if (info->revision >= 3) { /* HPT370 and HPT370A */ 1306 else if (info->chip_type >= HPT370) {
1150 new_mcr = old_mcr; 1307 new_mcr = old_mcr;
1151 new_mcr &= ~0x02; 1308 new_mcr &= ~0x02;
1152 1309
@@ -1174,7 +1331,7 @@ static void __devinit init_hwif_hpt366(ide_hwif_t *hwif)
1174 * address lines to access an external EEPROM. To read valid 1331 * address lines to access an external EEPROM. To read valid
1175 * cable detect state the pins must be enabled as inputs. 1332 * cable detect state the pins must be enabled as inputs.
1176 */ 1333 */
1177 if (info->revision >= 8 && (PCI_FUNC(dev->devfn) & 1)) { 1334 if (chip_type == HPT374 && (PCI_FUNC(dev->devfn) & 1)) {
1178 /* 1335 /*
1179 * HPT374 PCI function 1 1336 * HPT374 PCI function 1
1180 * - set bit 15 of reg 0x52 to enable TCBLID as input 1337 * - set bit 15 of reg 0x52 to enable TCBLID as input
@@ -1188,7 +1345,7 @@ static void __devinit init_hwif_hpt366(ide_hwif_t *hwif)
1188 /* now read cable id register */ 1345 /* now read cable id register */
1189 pci_read_config_byte (dev, 0x5a, &scr1); 1346 pci_read_config_byte (dev, 0x5a, &scr1);
1190 pci_write_config_word(dev, mcr_addr, mcr); 1347 pci_write_config_word(dev, mcr_addr, mcr);
1191 } else if (info->revision >= 3) { 1348 } else if (chip_type >= HPT370) {
1192 /* 1349 /*
1193 * HPT370/372 and 374 pcifn 0 1350 * HPT370/372 and 374 pcifn 0
1194 * - clear bit 0 of reg 0x5b to enable P/SCBLID as inputs 1351 * - clear bit 0 of reg 0x5b to enable P/SCBLID as inputs
@@ -1208,10 +1365,10 @@ static void __devinit init_hwif_hpt366(ide_hwif_t *hwif)
1208 1365
1209 hwif->ide_dma_check = &hpt366_config_drive_xfer_rate; 1366 hwif->ide_dma_check = &hpt366_config_drive_xfer_rate;
1210 1367
1211 if (info->revision >= 5) { 1368 if (chip_type >= HPT374) {
1212 hwif->ide_dma_test_irq = &hpt374_ide_dma_test_irq; 1369 hwif->ide_dma_test_irq = &hpt374_ide_dma_test_irq;
1213 hwif->ide_dma_end = &hpt374_ide_dma_end; 1370 hwif->ide_dma_end = &hpt374_ide_dma_end;
1214 } else if (info->revision >= 3) { 1371 } else if (chip_type >= HPT370) {
1215 hwif->dma_start = &hpt370_ide_dma_start; 1372 hwif->dma_start = &hpt370_ide_dma_start;
1216 hwif->ide_dma_end = &hpt370_ide_dma_end; 1373 hwif->ide_dma_end = &hpt370_ide_dma_end;
1217 hwif->ide_dma_timeout = &hpt370_ide_dma_timeout; 1374 hwif->ide_dma_timeout = &hpt370_ide_dma_timeout;
@@ -1226,7 +1383,6 @@ static void __devinit init_hwif_hpt366(ide_hwif_t *hwif)
1226static void __devinit init_dma_hpt366(ide_hwif_t *hwif, unsigned long dmabase) 1383static void __devinit init_dma_hpt366(ide_hwif_t *hwif, unsigned long dmabase)
1227{ 1384{
1228 struct pci_dev *dev = hwif->pci_dev; 1385 struct pci_dev *dev = hwif->pci_dev;
1229 struct hpt_info *info = ide_get_hwifdata(hwif);
1230 u8 masterdma = 0, slavedma = 0; 1386 u8 masterdma = 0, slavedma = 0;
1231 u8 dma_new = 0, dma_old = 0; 1387 u8 dma_new = 0, dma_old = 0;
1232 unsigned long flags; 1388 unsigned long flags;
@@ -1234,12 +1390,6 @@ static void __devinit init_dma_hpt366(ide_hwif_t *hwif, unsigned long dmabase)
1234 if (!dmabase) 1390 if (!dmabase)
1235 return; 1391 return;
1236 1392
1237 if(info->speed == NULL) {
1238 printk(KERN_WARNING "%s: no known IDE timings, disabling DMA.\n",
1239 hwif->cds->name);
1240 return;
1241 }
1242
1243 dma_old = hwif->INB(dmabase + 2); 1393 dma_old = hwif->INB(dmabase + 2);
1244 1394
1245 local_irq_save(flags); 1395 local_irq_save(flags);
@@ -1258,60 +1408,6 @@ static void __devinit init_dma_hpt366(ide_hwif_t *hwif, unsigned long dmabase)
1258 ide_setup_dma(hwif, dmabase, 8); 1408 ide_setup_dma(hwif, dmabase, 8);
1259} 1409}
1260 1410
1261/*
1262 * We "borrow" this hook in order to set the data structures
1263 * up early enough before dma or init_hwif calls are made.
1264 */
1265
1266static void __devinit init_iops_hpt366(ide_hwif_t *hwif)
1267{
1268 struct hpt_info *info = kzalloc(sizeof(struct hpt_info), GFP_KERNEL);
1269 struct pci_dev *dev = hwif->pci_dev;
1270 u16 did = dev->device;
1271 u8 mode, rid = 0;
1272
1273 if(info == NULL) {
1274 printk(KERN_WARNING "%s: out of memory.\n", hwif->cds->name);
1275 return;
1276 }
1277 ide_set_hwifdata(hwif, info);
1278
1279 /* Avoid doing the same thing twice. */
1280 if (hwif->channel && hwif->mate) {
1281 memcpy(info, ide_get_hwifdata(hwif->mate), sizeof(struct hpt_info));
1282 return;
1283 }
1284
1285 pci_read_config_byte(dev, PCI_REVISION_ID, &rid);
1286
1287 if (( did == PCI_DEVICE_ID_TTI_HPT366 && rid == 6) ||
1288 ((did == PCI_DEVICE_ID_TTI_HPT372 ||
1289 did == PCI_DEVICE_ID_TTI_HPT302 ||
1290 did == PCI_DEVICE_ID_TTI_HPT371) && rid > 1) ||
1291 did == PCI_DEVICE_ID_TTI_HPT372N)
1292 info->flags |= IS_3xxN;
1293
1294 rid = info->revision = hpt_revision(dev);
1295 if (rid >= 8) /* HPT374 */
1296 mode = HPT374_ALLOW_ATA133_6 ? 4 : 3;
1297 else if (rid >= 7) /* HPT371 and HPT371N */
1298 mode = HPT371_ALLOW_ATA133_6 ? 4 : 3;
1299 else if (rid >= 6) /* HPT302 and HPT302N */
1300 mode = HPT302_ALLOW_ATA133_6 ? 4 : 3;
1301 else if (rid >= 5) /* HPT372, HPT372A, and HPT372N */
1302 mode = HPT372_ALLOW_ATA133_6 ? 4 : 3;
1303 else if (rid >= 3) /* HPT370 and HPT370A */
1304 mode = HPT370_ALLOW_ATA100_5 ? 3 : 2;
1305 else /* HPT366 and HPT368 */
1306 mode = (HPT366_ALLOW_ATA66_4 || HPT366_ALLOW_ATA66_3) ? 2 : 1;
1307 info->max_mode = mode;
1308
1309 if (rid >= 3)
1310 hpt37x_clocking(hwif);
1311 else
1312 hpt366_clocking(hwif);
1313}
1314
1315static int __devinit init_setup_hpt374(struct pci_dev *dev, ide_pci_device_t *d) 1411static int __devinit init_setup_hpt374(struct pci_dev *dev, ide_pci_device_t *d)
1316{ 1412{
1317 struct pci_dev *dev2; 1413 struct pci_dev *dev2;
@@ -1319,9 +1415,13 @@ static int __devinit init_setup_hpt374(struct pci_dev *dev, ide_pci_device_t *d)
1319 if (PCI_FUNC(dev->devfn) & 1) 1415 if (PCI_FUNC(dev->devfn) & 1)
1320 return -ENODEV; 1416 return -ENODEV;
1321 1417
1418 pci_set_drvdata(dev, &hpt374);
1419
1322 if ((dev2 = pci_get_slot(dev->bus, dev->devfn + 1)) != NULL) { 1420 if ((dev2 = pci_get_slot(dev->bus, dev->devfn + 1)) != NULL) {
1323 int ret; 1421 int ret;
1324 1422
1423 pci_set_drvdata(dev2, &hpt374);
1424
1325 if (dev2->irq != dev->irq) { 1425 if (dev2->irq != dev->irq) {
1326 /* FIXME: we need a core pci_set_interrupt() */ 1426 /* FIXME: we need a core pci_set_interrupt() */
1327 dev2->irq = dev->irq; 1427 dev2->irq = dev->irq;
@@ -1338,18 +1438,25 @@ static int __devinit init_setup_hpt374(struct pci_dev *dev, ide_pci_device_t *d)
1338 1438
1339static int __devinit init_setup_hpt372n(struct pci_dev *dev, ide_pci_device_t *d) 1439static int __devinit init_setup_hpt372n(struct pci_dev *dev, ide_pci_device_t *d)
1340{ 1440{
1441 pci_set_drvdata(dev, &hpt372n);
1442
1341 return ide_setup_pci_device(dev, d); 1443 return ide_setup_pci_device(dev, d);
1342} 1444}
1343 1445
1344static int __devinit init_setup_hpt371(struct pci_dev *dev, ide_pci_device_t *d) 1446static int __devinit init_setup_hpt371(struct pci_dev *dev, ide_pci_device_t *d)
1345{ 1447{
1448 struct hpt_info *info;
1346 u8 rev = 0, mcr1 = 0; 1449 u8 rev = 0, mcr1 = 0;
1347 1450
1348 pci_read_config_byte(dev, PCI_REVISION_ID, &rev); 1451 pci_read_config_byte(dev, PCI_REVISION_ID, &rev);
1349 1452
1350 if (rev > 1) 1453 if (rev > 1) {
1351 d->name = "HPT371N"; 1454 d->name = "HPT371N";
1352 1455
1456 info = &hpt371n;
1457 } else
1458 info = &hpt371;
1459
1353 /* 1460 /*
1354 * HPT371 chips physically have only one channel, the secondary one, 1461 * HPT371 chips physically have only one channel, the secondary one,
1355 * but the primary channel registers do exist! Go figure... 1462 * but the primary channel registers do exist! Go figure...
@@ -1360,30 +1467,44 @@ static int __devinit init_setup_hpt371(struct pci_dev *dev, ide_pci_device_t *d)
1360 if (mcr1 & 0x04) 1467 if (mcr1 & 0x04)
1361 pci_write_config_byte(dev, 0x50, mcr1 & ~0x04); 1468 pci_write_config_byte(dev, 0x50, mcr1 & ~0x04);
1362 1469
1470 pci_set_drvdata(dev, info);
1471
1363 return ide_setup_pci_device(dev, d); 1472 return ide_setup_pci_device(dev, d);
1364} 1473}
1365 1474
1366static int __devinit init_setup_hpt372a(struct pci_dev *dev, ide_pci_device_t *d) 1475static int __devinit init_setup_hpt372a(struct pci_dev *dev, ide_pci_device_t *d)
1367{ 1476{
1477 struct hpt_info *info;
1368 u8 rev = 0; 1478 u8 rev = 0;
1369 1479
1370 pci_read_config_byte(dev, PCI_REVISION_ID, &rev); 1480 pci_read_config_byte(dev, PCI_REVISION_ID, &rev);
1371 1481
1372 if (rev > 1) 1482 if (rev > 1) {
1373 d->name = "HPT372N"; 1483 d->name = "HPT372N";
1374 1484
1485 info = &hpt372n;
1486 } else
1487 info = &hpt372a;
1488 pci_set_drvdata(dev, info);
1489
1375 return ide_setup_pci_device(dev, d); 1490 return ide_setup_pci_device(dev, d);
1376} 1491}
1377 1492
1378static int __devinit init_setup_hpt302(struct pci_dev *dev, ide_pci_device_t *d) 1493static int __devinit init_setup_hpt302(struct pci_dev *dev, ide_pci_device_t *d)
1379{ 1494{
1495 struct hpt_info *info;
1380 u8 rev = 0; 1496 u8 rev = 0;
1381 1497
1382 pci_read_config_byte(dev, PCI_REVISION_ID, &rev); 1498 pci_read_config_byte(dev, PCI_REVISION_ID, &rev);
1383 1499
1384 if (rev > 1) 1500 if (rev > 1) {
1385 d->name = "HPT302N"; 1501 d->name = "HPT302N";
1386 1502
1503 info = &hpt302n;
1504 } else
1505 info = &hpt302;
1506 pci_set_drvdata(dev, info);
1507
1387 return ide_setup_pci_device(dev, d); 1508 return ide_setup_pci_device(dev, d);
1388} 1509}
1389 1510
@@ -1394,6 +1515,9 @@ static int __devinit init_setup_hpt366(struct pci_dev *dev, ide_pci_device_t *d)
1394 static char *chipset_names[] = { "HPT366", "HPT366", "HPT368", 1515 static char *chipset_names[] = { "HPT366", "HPT366", "HPT368",
1395 "HPT370", "HPT370A", "HPT372", 1516 "HPT370", "HPT370A", "HPT372",
1396 "HPT372N" }; 1517 "HPT372N" };
1518 static struct hpt_info *info[] = { &hpt36x, &hpt36x, &hpt36x,
1519 &hpt370, &hpt370a, &hpt372,
1520 &hpt372n };
1397 1521
1398 if (PCI_FUNC(dev->devfn) & 1) 1522 if (PCI_FUNC(dev->devfn) & 1)
1399 return -ENODEV; 1523 return -ENODEV;
@@ -1405,6 +1529,8 @@ static int __devinit init_setup_hpt366(struct pci_dev *dev, ide_pci_device_t *d)
1405 1529
1406 d->name = chipset_names[rev]; 1530 d->name = chipset_names[rev];
1407 1531
1532 pci_set_drvdata(dev, info[rev]);
1533
1408 if (rev > 2) 1534 if (rev > 2)
1409 goto init_single; 1535 goto init_single;
1410 1536
@@ -1414,6 +1540,8 @@ static int __devinit init_setup_hpt366(struct pci_dev *dev, ide_pci_device_t *d)
1414 u8 pin1 = 0, pin2 = 0; 1540 u8 pin1 = 0, pin2 = 0;
1415 int ret; 1541 int ret;
1416 1542
1543 pci_set_drvdata(dev2, info[rev]);
1544
1417 pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin1); 1545 pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin1);
1418 pci_read_config_byte(dev2, PCI_INTERRUPT_PIN, &pin2); 1546 pci_read_config_byte(dev2, PCI_INTERRUPT_PIN, &pin2);
1419 if (pin1 != pin2 && dev->irq == dev2->irq) { 1547 if (pin1 != pin2 && dev->irq == dev2->irq) {
@@ -1435,40 +1563,39 @@ static ide_pci_device_t hpt366_chipsets[] __devinitdata = {
1435 .name = "HPT366", 1563 .name = "HPT366",
1436 .init_setup = init_setup_hpt366, 1564 .init_setup = init_setup_hpt366,
1437 .init_chipset = init_chipset_hpt366, 1565 .init_chipset = init_chipset_hpt366,
1438 .init_iops = init_iops_hpt366,
1439 .init_hwif = init_hwif_hpt366, 1566 .init_hwif = init_hwif_hpt366,
1440 .init_dma = init_dma_hpt366, 1567 .init_dma = init_dma_hpt366,
1441 .channels = 2, 1568 .channels = 2,
1442 .autodma = AUTODMA, 1569 .autodma = AUTODMA,
1570 .enablebits = {{0x50,0x04,0x04}, {0x54,0x04,0x04}},
1443 .bootable = OFF_BOARD, 1571 .bootable = OFF_BOARD,
1444 .extra = 240 1572 .extra = 240
1445 },{ /* 1 */ 1573 },{ /* 1 */
1446 .name = "HPT372A", 1574 .name = "HPT372A",
1447 .init_setup = init_setup_hpt372a, 1575 .init_setup = init_setup_hpt372a,
1448 .init_chipset = init_chipset_hpt366, 1576 .init_chipset = init_chipset_hpt366,
1449 .init_iops = init_iops_hpt366,
1450 .init_hwif = init_hwif_hpt366, 1577 .init_hwif = init_hwif_hpt366,
1451 .init_dma = init_dma_hpt366, 1578 .init_dma = init_dma_hpt366,
1452 .channels = 2, 1579 .channels = 2,
1453 .autodma = AUTODMA, 1580 .autodma = AUTODMA,
1581 .enablebits = {{0x50,0x04,0x04}, {0x54,0x04,0x04}},
1454 .bootable = OFF_BOARD, 1582 .bootable = OFF_BOARD,
1455 .extra = 240 1583 .extra = 240
1456 },{ /* 2 */ 1584 },{ /* 2 */
1457 .name = "HPT302", 1585 .name = "HPT302",
1458 .init_setup = init_setup_hpt302, 1586 .init_setup = init_setup_hpt302,
1459 .init_chipset = init_chipset_hpt366, 1587 .init_chipset = init_chipset_hpt366,
1460 .init_iops = init_iops_hpt366,
1461 .init_hwif = init_hwif_hpt366, 1588 .init_hwif = init_hwif_hpt366,
1462 .init_dma = init_dma_hpt366, 1589 .init_dma = init_dma_hpt366,
1463 .channels = 2, 1590 .channels = 2,
1464 .autodma = AUTODMA, 1591 .autodma = AUTODMA,
1592 .enablebits = {{0x50,0x04,0x04}, {0x54,0x04,0x04}},
1465 .bootable = OFF_BOARD, 1593 .bootable = OFF_BOARD,
1466 .extra = 240 1594 .extra = 240
1467 },{ /* 3 */ 1595 },{ /* 3 */
1468 .name = "HPT371", 1596 .name = "HPT371",
1469 .init_setup = init_setup_hpt371, 1597 .init_setup = init_setup_hpt371,
1470 .init_chipset = init_chipset_hpt366, 1598 .init_chipset = init_chipset_hpt366,
1471 .init_iops = init_iops_hpt366,
1472 .init_hwif = init_hwif_hpt366, 1599 .init_hwif = init_hwif_hpt366,
1473 .init_dma = init_dma_hpt366, 1600 .init_dma = init_dma_hpt366,
1474 .channels = 2, 1601 .channels = 2,
@@ -1480,22 +1607,22 @@ static ide_pci_device_t hpt366_chipsets[] __devinitdata = {
1480 .name = "HPT374", 1607 .name = "HPT374",
1481 .init_setup = init_setup_hpt374, 1608 .init_setup = init_setup_hpt374,
1482 .init_chipset = init_chipset_hpt366, 1609 .init_chipset = init_chipset_hpt366,
1483 .init_iops = init_iops_hpt366,
1484 .init_hwif = init_hwif_hpt366, 1610 .init_hwif = init_hwif_hpt366,
1485 .init_dma = init_dma_hpt366, 1611 .init_dma = init_dma_hpt366,
1486 .channels = 2, /* 4 */ 1612 .channels = 2, /* 4 */
1487 .autodma = AUTODMA, 1613 .autodma = AUTODMA,
1614 .enablebits = {{0x50,0x04,0x04}, {0x54,0x04,0x04}},
1488 .bootable = OFF_BOARD, 1615 .bootable = OFF_BOARD,
1489 .extra = 240 1616 .extra = 240
1490 },{ /* 5 */ 1617 },{ /* 5 */
1491 .name = "HPT372N", 1618 .name = "HPT372N",
1492 .init_setup = init_setup_hpt372n, 1619 .init_setup = init_setup_hpt372n,
1493 .init_chipset = init_chipset_hpt366, 1620 .init_chipset = init_chipset_hpt366,
1494 .init_iops = init_iops_hpt366,
1495 .init_hwif = init_hwif_hpt366, 1621 .init_hwif = init_hwif_hpt366,
1496 .init_dma = init_dma_hpt366, 1622 .init_dma = init_dma_hpt366,
1497 .channels = 2, /* 4 */ 1623 .channels = 2, /* 4 */
1498 .autodma = AUTODMA, 1624 .autodma = AUTODMA,
1625 .enablebits = {{0x50,0x04,0x04}, {0x54,0x04,0x04}},
1499 .bootable = OFF_BOARD, 1626 .bootable = OFF_BOARD,
1500 .extra = 240 1627 .extra = 240
1501 } 1628 }