diff options
Diffstat (limited to 'drivers/ide/pci')
| -rw-r--r-- | drivers/ide/pci/cmd640.c | 29 | ||||
| -rw-r--r-- | drivers/ide/pci/cs5520.c | 2 | ||||
| -rw-r--r-- | drivers/ide/pci/sgiioc4.c | 18 |
3 files changed, 27 insertions, 22 deletions
diff --git a/drivers/ide/pci/cmd640.c b/drivers/ide/pci/cmd640.c index 7240c20b95..ea0cb500df 100644 --- a/drivers/ide/pci/cmd640.c +++ b/drivers/ide/pci/cmd640.c | |||
| @@ -703,6 +703,18 @@ static int pci_conf2(void) | |||
| 703 | return 0; | 703 | return 0; |
| 704 | } | 704 | } |
| 705 | 705 | ||
| 706 | static const struct ide_port_info cmd640_port_info __initdata = { | ||
| 707 | .chipset = ide_cmd640, | ||
| 708 | .host_flags = IDE_HFLAG_SERIALIZE | | ||
| 709 | IDE_HFLAG_NO_DMA | | ||
| 710 | IDE_HFLAG_NO_AUTOTUNE | | ||
| 711 | IDE_HFLAG_ABUSE_PREFETCH | | ||
| 712 | IDE_HFLAG_ABUSE_FAST_DEVSEL, | ||
| 713 | #ifdef CONFIG_BLK_DEV_CMD640_ENHANCED | ||
| 714 | .pio_mask = ATA_PIO5, | ||
| 715 | #endif | ||
| 716 | }; | ||
| 717 | |||
| 706 | /* | 718 | /* |
| 707 | * Probe for a cmd640 chipset, and initialize it if found. | 719 | * Probe for a cmd640 chipset, and initialize it if found. |
| 708 | */ | 720 | */ |
| @@ -760,11 +772,7 @@ static int __init cmd640x_init(void) | |||
| 760 | setup_device_ptrs (); | 772 | setup_device_ptrs (); |
| 761 | printk("%s: buggy cmd640%c interface on %s, config=0x%02x\n", | 773 | printk("%s: buggy cmd640%c interface on %s, config=0x%02x\n", |
| 762 | cmd_hwif0->name, 'a' + cmd640_chip_version - 1, bus_type, cfr); | 774 | cmd_hwif0->name, 'a' + cmd640_chip_version - 1, bus_type, cfr); |
| 763 | cmd_hwif0->chipset = ide_cmd640; | ||
| 764 | #ifdef CONFIG_BLK_DEV_CMD640_ENHANCED | 775 | #ifdef CONFIG_BLK_DEV_CMD640_ENHANCED |
| 765 | cmd_hwif0->host_flags = IDE_HFLAG_ABUSE_PREFETCH | | ||
| 766 | IDE_HFLAG_ABUSE_FAST_DEVSEL; | ||
| 767 | cmd_hwif0->pio_mask = ATA_PIO5; | ||
| 768 | cmd_hwif0->set_pio_mode = &cmd640_set_pio_mode; | 776 | cmd_hwif0->set_pio_mode = &cmd640_set_pio_mode; |
| 769 | #endif /* CONFIG_BLK_DEV_CMD640_ENHANCED */ | 777 | #endif /* CONFIG_BLK_DEV_CMD640_ENHANCED */ |
| 770 | 778 | ||
| @@ -815,23 +823,14 @@ static int __init cmd640x_init(void) | |||
| 815 | * Initialize data for secondary cmd640 port, if enabled | 823 | * Initialize data for secondary cmd640 port, if enabled |
| 816 | */ | 824 | */ |
| 817 | if (second_port_cmd640) { | 825 | if (second_port_cmd640) { |
| 818 | cmd_hwif0->serialized = 1; | ||
| 819 | cmd_hwif1->serialized = 1; | ||
| 820 | cmd_hwif1->chipset = ide_cmd640; | ||
| 821 | cmd_hwif0->mate = cmd_hwif1; | ||
| 822 | cmd_hwif1->mate = cmd_hwif0; | ||
| 823 | cmd_hwif1->channel = 1; | ||
| 824 | #ifdef CONFIG_BLK_DEV_CMD640_ENHANCED | 826 | #ifdef CONFIG_BLK_DEV_CMD640_ENHANCED |
| 825 | cmd_hwif1->host_flags = IDE_HFLAG_ABUSE_PREFETCH | | ||
| 826 | IDE_HFLAG_ABUSE_FAST_DEVSEL; | ||
| 827 | cmd_hwif1->pio_mask = ATA_PIO5; | ||
| 828 | cmd_hwif1->set_pio_mode = &cmd640_set_pio_mode; | 827 | cmd_hwif1->set_pio_mode = &cmd640_set_pio_mode; |
| 829 | #endif /* CONFIG_BLK_DEV_CMD640_ENHANCED */ | 828 | #endif /* CONFIG_BLK_DEV_CMD640_ENHANCED */ |
| 830 | 829 | ||
| 831 | idx[1] = cmd_hwif1->index; | 830 | idx[1] = cmd_hwif1->index; |
| 832 | } | 831 | } |
| 833 | printk(KERN_INFO "%s: %sserialized, secondary interface %s\n", cmd_hwif1->name, | 832 | printk(KERN_INFO "%s: %sserialized, secondary interface %s\n", cmd_hwif1->name, |
| 834 | cmd_hwif0->serialized ? "" : "not ", port2); | 833 | second_port_cmd640 ? "" : "not ", port2); |
| 835 | 834 | ||
| 836 | /* | 835 | /* |
| 837 | * Establish initial timings/prefetch for all drives. | 836 | * Establish initial timings/prefetch for all drives. |
| @@ -876,7 +875,7 @@ static int __init cmd640x_init(void) | |||
| 876 | cmd640_dump_regs(); | 875 | cmd640_dump_regs(); |
| 877 | #endif | 876 | #endif |
| 878 | 877 | ||
| 879 | ide_device_add(idx); | 878 | ide_device_add(idx, &cmd640_port_info); |
| 880 | 879 | ||
| 881 | return 1; | 880 | return 1; |
| 882 | } | 881 | } |
diff --git a/drivers/ide/pci/cs5520.c b/drivers/ide/pci/cs5520.c index eb68a9ad0c..7935286666 100644 --- a/drivers/ide/pci/cs5520.c +++ b/drivers/ide/pci/cs5520.c | |||
| @@ -180,7 +180,7 @@ static int __devinit cs5520_init_one(struct pci_dev *dev, const struct pci_devic | |||
| 180 | 180 | ||
| 181 | ide_pci_setup_ports(dev, d, 14, &idx[0]); | 181 | ide_pci_setup_ports(dev, d, 14, &idx[0]); |
| 182 | 182 | ||
| 183 | ide_device_add(idx); | 183 | ide_device_add(idx, d); |
| 184 | 184 | ||
| 185 | return 0; | 185 | return 0; |
| 186 | } | 186 | } |
diff --git a/drivers/ide/pci/sgiioc4.c b/drivers/ide/pci/sgiioc4.c index 85902074b1..651845bf1a 100644 --- a/drivers/ide/pci/sgiioc4.c +++ b/drivers/ide/pci/sgiioc4.c | |||
| @@ -555,7 +555,6 @@ static void __devinit | |||
| 555 | ide_init_sgiioc4(ide_hwif_t * hwif) | 555 | ide_init_sgiioc4(ide_hwif_t * hwif) |
| 556 | { | 556 | { |
| 557 | hwif->mmio = 1; | 557 | hwif->mmio = 1; |
| 558 | hwif->pio_mask = 0x00; | ||
| 559 | hwif->set_pio_mode = NULL; /* Sets timing for PIO mode */ | 558 | hwif->set_pio_mode = NULL; /* Sets timing for PIO mode */ |
| 560 | hwif->set_dma_mode = &sgiioc4_set_dma_mode; | 559 | hwif->set_dma_mode = &sgiioc4_set_dma_mode; |
| 561 | hwif->selectproc = NULL;/* Use the default routine to select drive */ | 560 | hwif->selectproc = NULL;/* Use the default routine to select drive */ |
| @@ -572,8 +571,6 @@ ide_init_sgiioc4(ide_hwif_t * hwif) | |||
| 572 | if (hwif->dma_base == 0) | 571 | if (hwif->dma_base == 0) |
| 573 | return; | 572 | return; |
| 574 | 573 | ||
| 575 | hwif->mwdma_mask = ATA_MWDMA2_ONLY; | ||
| 576 | |||
| 577 | hwif->dma_host_set = &sgiioc4_dma_host_set; | 574 | hwif->dma_host_set = &sgiioc4_dma_host_set; |
| 578 | hwif->dma_setup = &sgiioc4_ide_dma_setup; | 575 | hwif->dma_setup = &sgiioc4_ide_dma_setup; |
| 579 | hwif->dma_start = &sgiioc4_ide_dma_start; | 576 | hwif->dma_start = &sgiioc4_ide_dma_start; |
| @@ -583,6 +580,13 @@ ide_init_sgiioc4(ide_hwif_t * hwif) | |||
| 583 | hwif->dma_timeout = &ide_dma_timeout; | 580 | hwif->dma_timeout = &ide_dma_timeout; |
| 584 | } | 581 | } |
| 585 | 582 | ||
| 583 | static const struct ide_port_info sgiioc4_port_info __devinitdata = { | ||
| 584 | .chipset = ide_pci, | ||
| 585 | .host_flags = IDE_HFLAG_NO_DMA | /* no SFF-style DMA */ | ||
| 586 | IDE_HFLAG_NO_AUTOTUNE, | ||
| 587 | .mwdma_mask = ATA_MWDMA2_ONLY, | ||
| 588 | }; | ||
| 589 | |||
| 586 | static int __devinit | 590 | static int __devinit |
| 587 | sgiioc4_ide_setup_pci_device(struct pci_dev *dev) | 591 | sgiioc4_ide_setup_pci_device(struct pci_dev *dev) |
| 588 | { | 592 | { |
| @@ -593,6 +597,7 @@ sgiioc4_ide_setup_pci_device(struct pci_dev *dev) | |||
| 593 | int h; | 597 | int h; |
| 594 | u8 idx[4] = { 0xff, 0xff, 0xff, 0xff }; | 598 | u8 idx[4] = { 0xff, 0xff, 0xff, 0xff }; |
| 595 | hw_regs_t hw; | 599 | hw_regs_t hw; |
| 600 | struct ide_port_info d = sgiioc4_port_info; | ||
| 596 | 601 | ||
| 597 | /* | 602 | /* |
| 598 | * Find an empty HWIF; if none available, return -ENOMEM. | 603 | * Find an empty HWIF; if none available, return -ENOMEM. |
| @@ -641,7 +646,6 @@ sgiioc4_ide_setup_pci_device(struct pci_dev *dev) | |||
| 641 | ide_init_port_hw(hwif, &hw); | 646 | ide_init_port_hw(hwif, &hw); |
| 642 | 647 | ||
| 643 | hwif->dev = &dev->dev; | 648 | hwif->dev = &dev->dev; |
| 644 | hwif->channel = 0; /* Single Channel chip */ | ||
| 645 | 649 | ||
| 646 | /* The IOC4 uses MMIO rather than Port IO. */ | 650 | /* The IOC4 uses MMIO rather than Port IO. */ |
| 647 | default_hwif_mmiops(hwif); | 651 | default_hwif_mmiops(hwif); |
| @@ -649,15 +653,17 @@ sgiioc4_ide_setup_pci_device(struct pci_dev *dev) | |||
| 649 | /* Initializing chipset IRQ Registers */ | 653 | /* Initializing chipset IRQ Registers */ |
| 650 | writel(0x03, (void __iomem *)(irqport + IOC4_INTR_SET * 4)); | 654 | writel(0x03, (void __iomem *)(irqport + IOC4_INTR_SET * 4)); |
| 651 | 655 | ||
| 652 | if (dma_base == 0 || ide_dma_sgiioc4(hwif, dma_base)) | 656 | if (dma_base == 0 || ide_dma_sgiioc4(hwif, dma_base)) { |
| 653 | printk(KERN_INFO "%s: %s Bus-Master DMA disabled\n", | 657 | printk(KERN_INFO "%s: %s Bus-Master DMA disabled\n", |
| 654 | hwif->name, DRV_NAME); | 658 | hwif->name, DRV_NAME); |
| 659 | d.mwdma_mask = 0; | ||
| 660 | } | ||
| 655 | 661 | ||
| 656 | ide_init_sgiioc4(hwif); | 662 | ide_init_sgiioc4(hwif); |
| 657 | 663 | ||
| 658 | idx[0] = hwif->index; | 664 | idx[0] = hwif->index; |
| 659 | 665 | ||
| 660 | if (ide_device_add(idx)) | 666 | if (ide_device_add(idx, &d)) |
| 661 | return -EIO; | 667 | return -EIO; |
| 662 | 668 | ||
| 663 | return 0; | 669 | return 0; |
