lkml.org 
[lkml]   [2000]   [Sep]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
SubjectFix for non-booting Alpha with BRIDGE_OTHER device
Date
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/

\
 
 \ /
  Last update: 2005-03-22 12:38    [W:0.027 / U:0.852 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site