lkml.org 
[lkml]   [2001]   [Oct]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: [PATCH] IDE initialization fix
Andre Hedrick wrote:
Andre, The summary of the change is this: without this change, the PCI init
for chipsets does not get called. I'll speak specifically about the CSB5.
The CSB5 in non-native mode has a PCI irqline register forced to 0. The
PCI probe then skips it's PCI init and it never gets called.

We then see that there is no file in /proc/ide for the serverworks
chipset. With this fix, there is.

Is there something else we aren't doing, instead? This seems obvious -
there is NOWHERE else that calls the init_chipset() method.

I put a printk in the pci_init_svwks routine, and it doesn't get called.

> The real issue is that the initialization of the card/host has a problem,
> so that belongs in the pci_fix_up region in the arch/<>/kernel/pc-irq.c
> stuff, imho. In general one should not be changing the interrupt lines at
> this stage of the INIT process.

Please show me what you mean - my desktop has an IRQ of zero, also. I do
have some control over BIOS, too.

Please, I'd like to resolve this issue once and for all :)


Patch attached again for completeness..

Tim

--
Tim Hockin
Systems Software Engineer
Sun Microsystems, Cobalt Server Appliances
thockin@sun.comdiff -ruN dist-2.4.12+patches/drivers/ide/ide-pci.c cvs-2.4.12+patches/drivers/ide/ide-pci.c
--- dist-2.4.12+patches/drivers/ide/ide-pci.c Mon Oct 15 10:21:50 2001
+++ cvs-2.4.12+patches/drivers/ide/ide-pci.c Mon Oct 15 10:21:49 2001
@@ -584,7 +584,8 @@
ide_hwif_t *hwif, *mate = NULL;
unsigned int class_rev;
static int secondpdc = 0;
-
+ int pci_class_ide;
+
#ifdef CONFIG_IDEDMA_AUTO
if (!noautodma)
autodma = 1;
@@ -653,7 +654,8 @@
/* 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)) {
+ pci_class_ide = ((dev->class >> 8) == PCI_CLASS_STORAGE_IDE);
+ if (!pci_class_ide && ((dev->class >> 8) != PCI_CLASS_STORAGE_OTHER)) {
printk("%s: not 100%% native mode: will probe irqs later\n", d->name);
/*
* This allows offboard ide-pci cards the enable a BIOS,
@@ -666,8 +668,19 @@
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;
+ if (pci_class_ide) {
+ /* this is the normal path for most IDE devices */
+ if (d->init_chipset) {
+ pciirq = d->init_chipset(dev, d->name);
+ } else {
+ printk(KERN_INFO
+ "%s standard IDE device detected\n",
+ d->name);
+ }
+ } else {
+ printk(KERN_WARNING
+ "%s: bad irq (0): will probe later\n", d->name);
+ }
} else {
if (d->init_chipset)
(void) d->init_chipset(dev, d->name);
\
 
 \ /
  Last update: 2005-03-22 13:08    [from the cache]
©2003-2011 Jasper Spaans