[tulip] Re: Tulip Driver, or is it the PCI subsystem ?
Donald Becker
becker@scyld.com
Fri, 3 Aug 2001 00:46:56 -0400 (EDT)
On Fri, 3 Aug 2001, Alan Cox wrote:
> > now, all that i want to know, is What on earth has been changed to
> > COMPLETELY retard what i saw as a usefull card and driver, for my (and other
> > people), the card is useless, and even worse, so is the damn server its
> > connected to.
>
> Well the obvious thing is the pci scanning and hot plug interface means that
> PCI ordering is now a more generic issue. I suspect what you'd need to do
> is to implement a version of
>
> pcibios_sort()
This doesn't really address the problem.
The (Scyld) tulip driver now back-installs the EEPROM information to
already detected interfaces that didn't have an EEPROM.
The problem is the broken BIOS IRQ settings.
The tulip driver has long had patch-up code, for x86 only, to work
around this problem.
The driver used to only forward-copy the EEPROM info, and used the same
code to forward copy the IRQ setting. If the probe order was backwards,
the user set reverse_probe=1 because of the obviously bogus media
table. This fixed up the IRQ (which was never *obviously* broken.)
Reviewing the code, I now understand the crux of your bug report.
While the current driver will back-copy and forward-copy the EEPROM
media information, the IRQ setting is only forward copied.
See the references to "last_irq" in probe1().
Here is a patch that might fix your problem. The code around line 1106
does the back-copy of the EEPROM media table. Please try adding the
lines with the "+"
if (ee_data[19] > 1) {
struct net_device *prev_dev;
struct tulip_private *otp;
/* This is a multiport board. The probe order may be "backwards", so
we patch up already found devices. */
last_ee_data = ee_data;
for (prev_dev = tp->next_module; prev_dev; prev_dev = otp->next_module) {
otp = (struct tulip_private *)prev_dev->priv;
if (otp->eeprom[0] == 0xff && otp->mtable == 0) {
+#if defined(__i386__) /* Patch up x86 BIOS bug. */
+ prev_dev->irq = dev->irq;
+#endif
parse_eeprom(prev_dev);
start_link(prev_dev);
} else
break;
}
controller_index = 0;
}
Donald Becker becker@scyld.com
Scyld Computing Corporation http://www.scyld.com
410 Severn Ave. Suite 210 Second Generation Beowulf Clusters
Annapolis MD 21403 410-990-9993