2.4.6 kernel on MCP750 board

Matt Porter mmporter at home.com
Fri Jul 20 04:38:49 EST 2001


On Wed, Jul 18, 2001 at 09:54:41AM +1000, Rudolf Ladyzhenskii wrote:
>
> Hi, all
>
> I am trying to put the latest kernel on Motorola MCP750 card. 2.2 kernel
> used to work fine, but 2.4.6 have some PCI problems.
> It can not allocate resources to network interface and, as a result, I can
> not boot.
> Startup dump attached.

The PCI subsystem is shooting itself in the foot when it sees a P2P
bridge with I/O and Mem windows disabled.  That's the case when you
plug in a system master (that uses a transparent bridge to cPCI) in
by itself.  A peripheral card in any slot will avoid the issue.

Apply the following patch (current linuxppc_2_4_devel / 2.4.7pre8) to
cure the problem:

===== drivers/pci/pci.c 1.16 vs edited =====
--- 1.16/drivers/pci/pci.c	Wed Jul  4 18:46:09 2001
+++ edited/drivers/pci/pci.c	Thu Jul 19 14:47:38 2001
@@ -957,13 +957,9 @@
 		res->start = base;
 		res->end = limit + 0xfff;
 		res->name = child->name;
-	} else {
-		/*
-		 * Ugh. We don't know enough about this bridge. Just assume
-		 * that it's entirely transparent.
-		 */
-		printk(KERN_ERR "Unknown bridge resource %d: assuming transparent\n", 0);
-		child->resource[0] = child->parent->resource[0];
+	} else if (base > limit) {
+		/* Disabled bridge windows get no resources */
+		printk(KERN_DEBUG "PCI: Found disabled bridge I/O window\n");
 	}

 	res = child->resource[1];
@@ -976,10 +972,9 @@
 		res->start = base;
 		res->end = limit + 0xfffff;
 		res->name = child->name;
-	} else {
-		/* See comment above. Same thing */
-		printk(KERN_ERR "Unknown bridge resource %d: assuming transparent\n", 1);
-		child->resource[1] = child->parent->resource[1];
+	} else if (base > limit) {
+		/* Disabled bridge windows get no resources */
+		printk(KERN_DEBUG "PCI: Found disabled bridge memory window\n");
 	}

 	res = child->resource[2];
@@ -1003,10 +998,9 @@
 		res->start = base;
 		res->end = limit + 0xfffff;
 		res->name = child->name;
-	} else {
-		/* See comments above */
-		printk(KERN_ERR "Unknown bridge resource %d: assuming transparent\n", 2);
-		child->resource[2] = child->parent->resource[2];
+	} else if (base > limit) {
+		/* Disabled bridge windows get no resources */
+		printk(KERN_NOTICE "PCI: Found disabled bridge prefetch window\n");
 	}
 }


--
Matt Porter
MontaVista Software, Inc.
mporter at mvista.com

** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/





More information about the Linuxppc-embedded mailing list