[PATCH] IDE PCI probe

From: Tim Hockin (thockin@sun.com)
Date: Tue Oct 23 2001 - 19:22:52 EST


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

-- 
Tim Hockin
Systems Software Engineer
Sun Microsystems, Cobalt Server Appliances
thockin@sun.com

--- virgin-2.4.12/drivers/ide/ide-pci.c Wed Oct 10 14:37:29 2001 +++ CVS-checkout/drivers/ide/ide-pci.c Thu Oct 18 10:22:53 2001 @@ -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)) {

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Tue Oct 23 2001 - 21:00:42 EST