Fix for non-booting Alpha with BRIDGE_OTHER device

From: Michal Jaegermann (michal@ellpspace.math.ualberta.ca)
Date: Wed Sep 13 2000 - 15:55:44 EST


I found by an experiment that an Alpha with a device which provides
its own PCI bridge, and if that device is on a PCI bus 0, will stop
booting right after "Partition check" messages. The only way out is
through a power switch. One can still boot if the device in question
is plugged in a slot on a PCI bus 1.

That particular hardware which revealed the problem is in fact SCI
board from Scali ( http://www.scali.com ) used in a cluster
communication and Scali provides a fix which makes machines bootable
again.

Here it is recreated against linux-2.2.18pre6. It will actually
apply to a wide range of kernels but with a possible line offsets
noise.

--- linux-2.2.18p/arch/alpha/kernel/bios32.c.orig Wed Jun 7 15:26:42 2000
+++ linux-2.2.18p/arch/alpha/kernel/bios32.c Wed Sep 13 14:08:05 2000
@@ -828,6 +828,7 @@
 
         for (dev = bus->devices; dev; dev = dev->sibling) {
                 if ((dev->class >> 16 != PCI_BASE_CLASS_BRIDGE) ||
+ (dev->class >> 8 == PCI_CLASS_BRIDGE_OTHER) ||
                     (dev->class >> 8 == PCI_CLASS_BRIDGE_PCMCIA)) {
                         disable_dev(dev);
                 }
@@ -840,6 +841,7 @@
 
         for (dev = bus->devices; dev; dev = dev->sibling) {
                 if ((dev->class >> 16 != PCI_BASE_CLASS_BRIDGE) ||
+ (dev->class >> 8 == PCI_CLASS_BRIDGE_OTHER) ||
                     (dev->class >> 8 == PCI_CLASS_BRIDGE_PCMCIA)) {
                         layout_dev(dev);
                 }
@@ -1081,6 +1083,7 @@
          */
         for (dev = pci_devices; dev; dev = dev->next) {
                 if ((dev->class >> 16 == PCI_BASE_CLASS_BRIDGE) &&
+ (dev->class >> 8 != PCI_CLASS_BRIDGE_OTHER) &&
                     (dev->class >> 8 != PCI_CLASS_BRIDGE_PCMCIA))
                         continue;
 
It indeed makes possible to boot regardles of a slot with SCI in it and
in tests on various Alphas _without_ that device does not seem to harm
anything - which is not a big surprise as otherwise PCMCIA would likely
be a problem too.:-) Any comments from those who sleep with PCI specs
under pillows? Should not that be included into standart kernels?

In arch/sparc64/kernel/psycho.c exists already a code which seems to
be somewhat related.

  Michal
  michal@harddata.com

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



This archive was generated by hypermail 2b29 : Fri Sep 15 2000 - 21:00:22 EST