diff options
Diffstat (limited to 'drivers/ide/pci')
-rw-r--r-- | drivers/ide/pci/aec62xx.c | 12 | ||||
-rw-r--r-- | drivers/ide/pci/alim15x3.c | 2 | ||||
-rw-r--r-- | drivers/ide/pci/serverworks.c | 10 | ||||
-rw-r--r-- | drivers/ide/pci/sgiioc4.c | 60 | ||||
-rw-r--r-- | drivers/ide/pci/siimage.c | 6 | ||||
-rw-r--r-- | drivers/ide/pci/sis5513.c | 2 |
6 files changed, 59 insertions, 33 deletions
diff --git a/drivers/ide/pci/aec62xx.c b/drivers/ide/pci/aec62xx.c index a7c725f8bf64..f286079d233f 100644 --- a/drivers/ide/pci/aec62xx.c +++ b/drivers/ide/pci/aec62xx.c | |||
@@ -425,12 +425,12 @@ static int __devinit aec62xx_init_one(struct pci_dev *dev, const struct pci_devi | |||
425 | return d->init_setup(dev, d); | 425 | return d->init_setup(dev, d); |
426 | } | 426 | } |
427 | 427 | ||
428 | static const struct pci_device_id aec62xx_pci_tbl[] = { | 428 | static struct pci_device_id aec62xx_pci_tbl[] = { |
429 | { PCI_DEVICE(PCI_VENDOR_ID_ARTOP, PCI_DEVICE_ID_ARTOP_ATP850UF), 0 }, | 429 | { PCI_VENDOR_ID_ARTOP, PCI_DEVICE_ID_ARTOP_ATP850UF, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, |
430 | { PCI_DEVICE(PCI_VENDOR_ID_ARTOP, PCI_DEVICE_ID_ARTOP_ATP860), 1 }, | 430 | { PCI_VENDOR_ID_ARTOP, PCI_DEVICE_ID_ARTOP_ATP860, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1 }, |
431 | { PCI_DEVICE(PCI_VENDOR_ID_ARTOP, PCI_DEVICE_ID_ARTOP_ATP860R), 2 }, | 431 | { PCI_VENDOR_ID_ARTOP, PCI_DEVICE_ID_ARTOP_ATP860R, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2 }, |
432 | { PCI_DEVICE(PCI_VENDOR_ID_ARTOP, PCI_DEVICE_ID_ARTOP_ATP865), 3 }, | 432 | { PCI_VENDOR_ID_ARTOP, PCI_DEVICE_ID_ARTOP_ATP865, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 3 }, |
433 | { PCI_DEVICE(PCI_VENDOR_ID_ARTOP, PCI_DEVICE_ID_ARTOP_ATP865R), 4 }, | 433 | { PCI_VENDOR_ID_ARTOP, PCI_DEVICE_ID_ARTOP_ATP865R, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4 }, |
434 | { 0, }, | 434 | { 0, }, |
435 | }; | 435 | }; |
436 | MODULE_DEVICE_TABLE(pci, aec62xx_pci_tbl); | 436 | MODULE_DEVICE_TABLE(pci, aec62xx_pci_tbl); |
diff --git a/drivers/ide/pci/alim15x3.c b/drivers/ide/pci/alim15x3.c index 351dab2fcacf..d419e4bb54f4 100644 --- a/drivers/ide/pci/alim15x3.c +++ b/drivers/ide/pci/alim15x3.c | |||
@@ -730,7 +730,7 @@ static unsigned int __devinit ata66_ali15x3 (ide_hwif_t *hwif) | |||
730 | 730 | ||
731 | if(m5229_revision <= 0x20) | 731 | if(m5229_revision <= 0x20) |
732 | tmpbyte = (tmpbyte & (~0x02)) | 0x01; | 732 | tmpbyte = (tmpbyte & (~0x02)) | 0x01; |
733 | else if (m5229_revision == 0xc7) | 733 | else if (m5229_revision == 0xc7 || m5229_revision == 0xc8) |
734 | tmpbyte |= 0x03; | 734 | tmpbyte |= 0x03; |
735 | else | 735 | else |
736 | tmpbyte |= 0x01; | 736 | tmpbyte |= 0x01; |
diff --git a/drivers/ide/pci/serverworks.c b/drivers/ide/pci/serverworks.c index 03677bff0d72..f063d954236c 100644 --- a/drivers/ide/pci/serverworks.c +++ b/drivers/ide/pci/serverworks.c | |||
@@ -649,11 +649,11 @@ static int __devinit svwks_init_one(struct pci_dev *dev, const struct pci_device | |||
649 | } | 649 | } |
650 | 650 | ||
651 | static struct pci_device_id svwks_pci_tbl[] = { | 651 | static struct pci_device_id svwks_pci_tbl[] = { |
652 | { PCI_DEVICE(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_OSB4IDE), 0}, | 652 | { PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_OSB4IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, |
653 | { PCI_DEVICE(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB5IDE), 1}, | 653 | { PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB5IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1}, |
654 | { PCI_DEVICE(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB6IDE), 2}, | 654 | { PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB6IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2}, |
655 | { PCI_DEVICE(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB6IDE2), 3}, | 655 | { PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB6IDE2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 3}, |
656 | { PCI_DEVICE(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_HT1000IDE), 4}, | 656 | { PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_HT1000IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4}, |
657 | { 0, }, | 657 | { 0, }, |
658 | }; | 658 | }; |
659 | MODULE_DEVICE_TABLE(pci, svwks_pci_tbl); | 659 | MODULE_DEVICE_TABLE(pci, svwks_pci_tbl); |
diff --git a/drivers/ide/pci/sgiioc4.c b/drivers/ide/pci/sgiioc4.c index e125032bb403..d8a0d87df734 100644 --- a/drivers/ide/pci/sgiioc4.c +++ b/drivers/ide/pci/sgiioc4.c | |||
@@ -367,12 +367,13 @@ sgiioc4_INB(unsigned long port) | |||
367 | static void __devinit | 367 | static void __devinit |
368 | ide_dma_sgiioc4(ide_hwif_t * hwif, unsigned long dma_base) | 368 | ide_dma_sgiioc4(ide_hwif_t * hwif, unsigned long dma_base) |
369 | { | 369 | { |
370 | void __iomem *virt_dma_base; | ||
370 | int num_ports = sizeof (ioc4_dma_regs_t); | 371 | int num_ports = sizeof (ioc4_dma_regs_t); |
371 | 372 | ||
372 | printk(KERN_INFO "%s: BM-DMA at 0x%04lx-0x%04lx\n", hwif->name, | 373 | printk(KERN_INFO "%s: BM-DMA at 0x%04lx-0x%04lx\n", hwif->name, |
373 | dma_base, dma_base + num_ports - 1); | 374 | dma_base, dma_base + num_ports - 1); |
374 | 375 | ||
375 | if (!request_region(dma_base, num_ports, hwif->name)) { | 376 | if (!request_mem_region(dma_base, num_ports, hwif->name)) { |
376 | printk(KERN_ERR | 377 | printk(KERN_ERR |
377 | "%s(%s) -- ERROR, Addresses 0x%p to 0x%p " | 378 | "%s(%s) -- ERROR, Addresses 0x%p to 0x%p " |
378 | "ALREADY in use\n", | 379 | "ALREADY in use\n", |
@@ -381,13 +382,21 @@ ide_dma_sgiioc4(ide_hwif_t * hwif, unsigned long dma_base) | |||
381 | goto dma_alloc_failure; | 382 | goto dma_alloc_failure; |
382 | } | 383 | } |
383 | 384 | ||
384 | hwif->dma_base = dma_base; | 385 | virt_dma_base = ioremap(dma_base, num_ports); |
386 | if (virt_dma_base == NULL) { | ||
387 | printk(KERN_ERR | ||
388 | "%s(%s) -- ERROR, Unable to map addresses 0x%lx to 0x%lx\n", | ||
389 | __FUNCTION__, hwif->name, dma_base, dma_base + num_ports - 1); | ||
390 | goto dma_remap_failure; | ||
391 | } | ||
392 | hwif->dma_base = (unsigned long) virt_dma_base; | ||
393 | |||
385 | hwif->dmatable_cpu = pci_alloc_consistent(hwif->pci_dev, | 394 | hwif->dmatable_cpu = pci_alloc_consistent(hwif->pci_dev, |
386 | IOC4_PRD_ENTRIES * IOC4_PRD_BYTES, | 395 | IOC4_PRD_ENTRIES * IOC4_PRD_BYTES, |
387 | &hwif->dmatable_dma); | 396 | &hwif->dmatable_dma); |
388 | 397 | ||
389 | if (!hwif->dmatable_cpu) | 398 | if (!hwif->dmatable_cpu) |
390 | goto dma_alloc_failure; | 399 | goto dma_pci_alloc_failure; |
391 | 400 | ||
392 | hwif->sg_max_nents = IOC4_PRD_ENTRIES; | 401 | hwif->sg_max_nents = IOC4_PRD_ENTRIES; |
393 | 402 | ||
@@ -411,6 +420,12 @@ dma_base2alloc_failure: | |||
411 | printk(KERN_INFO | 420 | printk(KERN_INFO |
412 | "Changing from DMA to PIO mode for Drive %s\n", hwif->name); | 421 | "Changing from DMA to PIO mode for Drive %s\n", hwif->name); |
413 | 422 | ||
423 | dma_pci_alloc_failure: | ||
424 | iounmap(virt_dma_base); | ||
425 | |||
426 | dma_remap_failure: | ||
427 | release_mem_region(dma_base, num_ports); | ||
428 | |||
414 | dma_alloc_failure: | 429 | dma_alloc_failure: |
415 | /* Disable DMA because we couldnot allocate any DMA maps */ | 430 | /* Disable DMA because we couldnot allocate any DMA maps */ |
416 | hwif->autodma = 0; | 431 | hwif->autodma = 0; |
@@ -607,18 +622,15 @@ ide_init_sgiioc4(ide_hwif_t * hwif) | |||
607 | hwif->ide_dma_lostirq = &sgiioc4_ide_dma_lostirq; | 622 | hwif->ide_dma_lostirq = &sgiioc4_ide_dma_lostirq; |
608 | hwif->ide_dma_timeout = &__ide_dma_timeout; | 623 | hwif->ide_dma_timeout = &__ide_dma_timeout; |
609 | 624 | ||
610 | /* | ||
611 | * The IOC4 uses MMIO rather than Port IO. | ||
612 | * It also needs special workarounds for INB. | ||
613 | */ | ||
614 | default_hwif_mmiops(hwif); | ||
615 | hwif->INB = &sgiioc4_INB; | 625 | hwif->INB = &sgiioc4_INB; |
616 | } | 626 | } |
617 | 627 | ||
618 | static int __devinit | 628 | static int __devinit |
619 | sgiioc4_ide_setup_pci_device(struct pci_dev *dev, ide_pci_device_t * d) | 629 | sgiioc4_ide_setup_pci_device(struct pci_dev *dev, ide_pci_device_t * d) |
620 | { | 630 | { |
621 | unsigned long base, ctl, dma_base, irqport; | 631 | unsigned long cmd_base, dma_base, irqport; |
632 | unsigned long bar0, cmd_phys_base, ctl; | ||
633 | void __iomem *virt_base; | ||
622 | ide_hwif_t *hwif; | 634 | ide_hwif_t *hwif; |
623 | int h; | 635 | int h; |
624 | 636 | ||
@@ -636,23 +648,32 @@ sgiioc4_ide_setup_pci_device(struct pci_dev *dev, ide_pci_device_t * d) | |||
636 | } | 648 | } |
637 | 649 | ||
638 | /* Get the CmdBlk and CtrlBlk Base Registers */ | 650 | /* Get the CmdBlk and CtrlBlk Base Registers */ |
639 | base = pci_resource_start(dev, 0) + IOC4_CMD_OFFSET; | 651 | bar0 = pci_resource_start(dev, 0); |
640 | ctl = pci_resource_start(dev, 0) + IOC4_CTRL_OFFSET; | 652 | virt_base = ioremap(bar0, pci_resource_len(dev, 0)); |
641 | irqport = pci_resource_start(dev, 0) + IOC4_INTR_OFFSET; | 653 | if (virt_base == NULL) { |
654 | printk(KERN_ERR "%s: Unable to remap BAR 0 address: 0x%lx\n", | ||
655 | d->name, bar0); | ||
656 | return -ENOMEM; | ||
657 | } | ||
658 | cmd_base = (unsigned long) virt_base + IOC4_CMD_OFFSET; | ||
659 | ctl = (unsigned long) virt_base + IOC4_CTRL_OFFSET; | ||
660 | irqport = (unsigned long) virt_base + IOC4_INTR_OFFSET; | ||
642 | dma_base = pci_resource_start(dev, 0) + IOC4_DMA_OFFSET; | 661 | dma_base = pci_resource_start(dev, 0) + IOC4_DMA_OFFSET; |
643 | 662 | ||
644 | if (!request_region(base, IOC4_CMD_CTL_BLK_SIZE, hwif->name)) { | 663 | cmd_phys_base = bar0 + IOC4_CMD_OFFSET; |
664 | if (!request_mem_region(cmd_phys_base, IOC4_CMD_CTL_BLK_SIZE, | ||
665 | hwif->name)) { | ||
645 | printk(KERN_ERR | 666 | printk(KERN_ERR |
646 | "%s : %s -- ERROR, Port Addresses " | 667 | "%s : %s -- ERROR, Addresses " |
647 | "0x%p to 0x%p ALREADY in use\n", | 668 | "0x%p to 0x%p ALREADY in use\n", |
648 | __FUNCTION__, hwif->name, (void *) base, | 669 | __FUNCTION__, hwif->name, (void *) cmd_phys_base, |
649 | (void *) base + IOC4_CMD_CTL_BLK_SIZE); | 670 | (void *) cmd_phys_base + IOC4_CMD_CTL_BLK_SIZE); |
650 | return -ENOMEM; | 671 | return -ENOMEM; |
651 | } | 672 | } |
652 | 673 | ||
653 | if (hwif->io_ports[IDE_DATA_OFFSET] != base) { | 674 | if (hwif->io_ports[IDE_DATA_OFFSET] != cmd_base) { |
654 | /* Initialize the IO registers */ | 675 | /* Initialize the IO registers */ |
655 | sgiioc4_init_hwif_ports(&hwif->hw, base, ctl, irqport); | 676 | sgiioc4_init_hwif_ports(&hwif->hw, cmd_base, ctl, irqport); |
656 | memcpy(hwif->io_ports, hwif->hw.io_ports, | 677 | memcpy(hwif->io_ports, hwif->hw.io_ports, |
657 | sizeof (hwif->io_ports)); | 678 | sizeof (hwif->io_ports)); |
658 | hwif->noprobe = !hwif->io_ports[IDE_DATA_OFFSET]; | 679 | hwif->noprobe = !hwif->io_ports[IDE_DATA_OFFSET]; |
@@ -665,6 +686,9 @@ sgiioc4_ide_setup_pci_device(struct pci_dev *dev, ide_pci_device_t * d) | |||
665 | hwif->cds = (struct ide_pci_device_s *) d; | 686 | hwif->cds = (struct ide_pci_device_s *) d; |
666 | hwif->gendev.parent = &dev->dev;/* setup proper ancestral information */ | 687 | hwif->gendev.parent = &dev->dev;/* setup proper ancestral information */ |
667 | 688 | ||
689 | /* The IOC4 uses MMIO rather than Port IO. */ | ||
690 | default_hwif_mmiops(hwif); | ||
691 | |||
668 | /* Initializing chipset IRQ Registers */ | 692 | /* Initializing chipset IRQ Registers */ |
669 | hwif->OUTL(0x03, irqport + IOC4_INTR_SET * 4); | 693 | hwif->OUTL(0x03, irqport + IOC4_INTR_SET * 4); |
670 | 694 | ||
diff --git a/drivers/ide/pci/siimage.c b/drivers/ide/pci/siimage.c index 25ceb4a39ed2..20b392948f36 100644 --- a/drivers/ide/pci/siimage.c +++ b/drivers/ide/pci/siimage.c | |||
@@ -1082,10 +1082,10 @@ static int __devinit siimage_init_one(struct pci_dev *dev, const struct pci_devi | |||
1082 | } | 1082 | } |
1083 | 1083 | ||
1084 | static struct pci_device_id siimage_pci_tbl[] = { | 1084 | static struct pci_device_id siimage_pci_tbl[] = { |
1085 | { PCI_DEVICE(PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_SII_680), 0}, | 1085 | { PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_SII_680, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, |
1086 | #ifdef CONFIG_BLK_DEV_IDE_SATA | 1086 | #ifdef CONFIG_BLK_DEV_IDE_SATA |
1087 | { PCI_DEVICE(PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_SII_3112), 1}, | 1087 | { PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_SII_3112, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1}, |
1088 | { PCI_DEVICE(PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_SII_1210SA), 2}, | 1088 | { PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_SII_1210SA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2}, |
1089 | #endif | 1089 | #endif |
1090 | { 0, }, | 1090 | { 0, }, |
1091 | }; | 1091 | }; |
diff --git a/drivers/ide/pci/sis5513.c b/drivers/ide/pci/sis5513.c index 8a6c23ac8cc1..f03196c5db37 100644 --- a/drivers/ide/pci/sis5513.c +++ b/drivers/ide/pci/sis5513.c | |||
@@ -86,6 +86,8 @@ static const struct { | |||
86 | u8 chipset_family; | 86 | u8 chipset_family; |
87 | u8 flags; | 87 | u8 flags; |
88 | } SiSHostChipInfo[] = { | 88 | } SiSHostChipInfo[] = { |
89 | { "SiS968", PCI_DEVICE_ID_SI_968, ATA_133 }, | ||
90 | { "SiS966", PCI_DEVICE_ID_SI_966, ATA_133 }, | ||
89 | { "SiS965", PCI_DEVICE_ID_SI_965, ATA_133 }, | 91 | { "SiS965", PCI_DEVICE_ID_SI_965, ATA_133 }, |
90 | { "SiS745", PCI_DEVICE_ID_SI_745, ATA_100 }, | 92 | { "SiS745", PCI_DEVICE_ID_SI_745, ATA_100 }, |
91 | { "SiS735", PCI_DEVICE_ID_SI_735, ATA_100 }, | 93 | { "SiS735", PCI_DEVICE_ID_SI_735, ATA_100 }, |