diff options
author | Jeff Garzik <jeff@garzik.org> | 2007-03-09 10:54:42 -0500 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2007-04-28 14:15:59 -0400 |
commit | 8cdfb29c0cd8018f92214c11c631d8926f4cb032 (patch) | |
tree | d4a74d25c301e4c045ca21c45dbcbeadde234548 /drivers/ata/libata-sff.c | |
parent | e424675f152572d8d2365e351b90bfd81686a150 (diff) |
libata/IDE: remove combined mode quirk
Both old-IDE and libata should be able handle all controllers and
devices found using normal resource reservation methods.
This eliminates the awful, low-performing split-driver configuration
where old-IDE drove the PATA portion of a PCI device, in PIO-only mode,
and libata drove the SATA portion of the /same/ PCI device, in DMA mode.
Typically vendors would ship SATA hard drive / PATA optical
configuration, which would lend itself to slow (PIO-only) CD-ROM
performance.
For Intel users running in combined mode, it is now wholly dependent on
your driver choice (potentially link order, if you compile both drivers
in) whether old-IDE or libata will drive your hardware.
In either case, you will get full performance from both SATA and PATA
ports now, without having to pass a kernel command line parameter.
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/ata/libata-sff.c')
-rw-r--r-- | drivers/ata/libata-sff.c | 36 |
1 files changed, 6 insertions, 30 deletions
diff --git a/drivers/ata/libata-sff.c b/drivers/ata/libata-sff.c index 066689c5e509..0a194660fd21 100644 --- a/drivers/ata/libata-sff.c +++ b/drivers/ata/libata-sff.c | |||
@@ -779,40 +779,16 @@ int ata_pci_init_one (struct pci_dev *pdev, struct ata_port_info **port_info, | |||
779 | /* Deal with combined mode hack. This side of the logic all | 779 | /* Deal with combined mode hack. This side of the logic all |
780 | goes away once the combined mode hack is killed in 2.6.21 */ | 780 | goes away once the combined mode hack is killed in 2.6.21 */ |
781 | if (!devm_request_region(dev, ATA_PRIMARY_CMD, 8, "libata")) { | 781 | if (!devm_request_region(dev, ATA_PRIMARY_CMD, 8, "libata")) { |
782 | struct resource *conflict, res; | 782 | pcim_pin_device(pdev); |
783 | res.start = ATA_PRIMARY_CMD; | 783 | printk(KERN_WARNING "ata: 0x%0X IDE port busy\n", |
784 | res.end = ATA_PRIMARY_CMD + 8 - 1; | 784 | ATA_PRIMARY_CMD); |
785 | conflict = ____request_resource(&ioport_resource, &res); | ||
786 | while (conflict->child) | ||
787 | conflict = ____request_resource(conflict, &res); | ||
788 | if (!strcmp(conflict->name, "libata")) | ||
789 | legacy_mode |= ATA_PORT_PRIMARY; | ||
790 | else { | ||
791 | pcim_pin_device(pdev); | ||
792 | printk(KERN_WARNING "ata: 0x%0X IDE port busy\n" \ | ||
793 | "ata: conflict with %s\n", | ||
794 | ATA_PRIMARY_CMD, | ||
795 | conflict->name); | ||
796 | } | ||
797 | } else | 785 | } else |
798 | legacy_mode |= ATA_PORT_PRIMARY; | 786 | legacy_mode |= ATA_PORT_PRIMARY; |
799 | 787 | ||
800 | if (!devm_request_region(dev, ATA_SECONDARY_CMD, 8, "libata")) { | 788 | if (!devm_request_region(dev, ATA_SECONDARY_CMD, 8, "libata")) { |
801 | struct resource *conflict, res; | 789 | pcim_pin_device(pdev); |
802 | res.start = ATA_SECONDARY_CMD; | 790 | printk(KERN_WARNING "ata: 0x%X IDE port busy\n", |
803 | res.end = ATA_SECONDARY_CMD + 8 - 1; | 791 | ATA_SECONDARY_CMD); |
804 | conflict = ____request_resource(&ioport_resource, &res); | ||
805 | while (conflict->child) | ||
806 | conflict = ____request_resource(conflict, &res); | ||
807 | if (!strcmp(conflict->name, "libata")) | ||
808 | legacy_mode |= ATA_PORT_SECONDARY; | ||
809 | else { | ||
810 | pcim_pin_device(pdev); | ||
811 | printk(KERN_WARNING "ata: 0x%X IDE port busy\n" \ | ||
812 | "ata: conflict with %s\n", | ||
813 | ATA_SECONDARY_CMD, | ||
814 | conflict->name); | ||
815 | } | ||
816 | } else | 792 | } else |
817 | legacy_mode |= ATA_PORT_SECONDARY; | 793 | legacy_mode |= ATA_PORT_SECONDARY; |
818 | 794 | ||