IDE PCI probe
PATCH 1/1 IDE PCI probe
Andre,
Here is the patch as we discussed - it works, it is good. Needed for controllers that can do native mode but not native PCI IRQs.
Tim
Signature · 4 lines
Tim Hockin Systems Software Engineer Sun Microsystems, Cobalt Server Appliances [email protected]
drivers/ide/ide-pci.c +34 -21
@@ -653,32 +653,44 @@/* Its attached to something else, just a random bridge. Suspect a fastrak and fall through */ } -if ((dev->class & ~(0xfa )) != ((PCI_CLASS_STORAGE_IDE <<8 ) |5 )) { -printk ("%s: not 100%% native mode: will probe irqs later\n" , d->name); -/* -* This allows offboard ide-pci cards the enable a BIOS, -* verify interrupt settings of split-mirror pci-config -* space, place chipset into init-mode, and/or preserve -* an interrupt if the card is not native ide support. -*/ - pciirq = (d->init_chipset) ? d->init_chipset (dev, d->name) :ide_special_settings (dev, d->name); + +if (!tried_config && + (dev->class >>8 ==PCI_CLASS_STORAGE_IDE || + dev->class >>8 ==PCI_CLASS_STORAGE_OTHER )) { +if ((dev->class &0x5 ) ==0x5 && pciirq) { +if (d->init_chipset) { + (void ) d->init_chipset (dev, d->name); + } +#ifdef __sparc__ +printk ("%s: 100%% native mode on irq %s\n" , + d->name,__irq_itoa (pciirq)); +#else +printk ("%s: 100%% native mode on irq %d\n" , + d->name, pciirq); +#endif + }else if ((dev->class &0x5 ) ==0x5 ) { +if (d->init_chipset) { + pciirq = d->init_chipset (dev, d->name); + } +printk ("%s: native mode: will probe irqs later\n" , + d->name); + }else { +if (d->init_chipset) { + pciirq = d->init_chipset (dev, d->name); + }else { + pciirq =ide_special_settings (dev, d->name); + } +printk ("%s: non-native mode: will probe irqs later\n" , + d->name); + } }else if (tried_config) {printk ("%s: will probe irqs later\n" , d->name); pciirq =0 ; - }else if (!pciirq) { -printk ("%s: bad irq (%d): will probe later\n" , d->name, pciirq); - pciirq =0 ; }else { -if (d->init_chipset) - (void ) d->init_chipset (dev, d->name); -#ifdef __sparc__ -printk ("%s: 100%% native mode on irq %s\n" , - d->name,__irq_itoa (pciirq)); -#else -printk ("%s: 100%% native mode on irq %d\n" , d->name, pciirq); -#endif +printk ("%s: what am I expected to do with this?\n" , d->name); + pciirq =0 ; } - +/* * Set up the IDE ports */
@@ -784,6 +796,7 @@ IDE_PCI_DEVID_EQ(d->devid, DEVID_CMD648) || IDE_PCI_DEVID_EQ(d->devid, DEVID_CMD649) || IDE_PCI_DEVID_EQ(d->devid, DEVID_OSB4) || + IDE_PCI_DEVID_EQ(d->devid, DEVID_CSB5) || ((dev->class >> 8) == PCI_CLASS_STORAGE_IDE && (dev->class & 0x80))) {unsigned long dma_base =ide_get_or_set_dma_base (hwif, (!mate && d->extra) ? d->extra :0 , d->name);if (dma_base && !(pcicmd &PCI_COMMAND_MASTER )) {