Module Name:    src
Committed By:   phx
Date:           Tue May 18 10:41:30 UTC 2010

Modified Files:
        src/sys/arch/sandpoint/stand/netboot: brdsetup.c

Log Message:
Synology PCI fixup, submitted by Toru Nishimura.


To generate a diff of this commit:
cvs rdiff -u -r1.15 -r1.16 src/sys/arch/sandpoint/stand/netboot/brdsetup.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/sandpoint/stand/netboot/brdsetup.c
diff -u src/sys/arch/sandpoint/stand/netboot/brdsetup.c:1.15 src/sys/arch/sandpoint/stand/netboot/brdsetup.c:1.16
--- src/sys/arch/sandpoint/stand/netboot/brdsetup.c:1.15	Mon May 17 17:48:59 2010
+++ src/sys/arch/sandpoint/stand/netboot/brdsetup.c	Tue May 18 10:41:30 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: brdsetup.c,v 1.15 2010/05/17 17:48:59 phx Exp $ */
+/* $NetBSD: brdsetup.c,v 1.16 2010/05/18 10:41:30 phx Exp $ */
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -126,9 +126,14 @@
 	uint32_t extclk;
 	unsigned pchb, pcib, val;
 
-	/* BAT to arrange address space */
-
-	/* EUMBBAR */
+	/*
+	 * CHRP specification "Map-B" BAT012 layout
+	 *   BAT0 0000-0000 (256MB) SDRAM
+	 *   BAT1 8000-0000 (256MB) PCI mem space
+	 *   BAT2 fc00-0000 (64MB)  EUMB, PCI I/O space, misc devs, flash
+	 *
+	 * EUMBBAR is at fc00-0000.
+	 */
 	pchb = pcimaketag(0, 0, 0);
 	pcicfgwrite(pchb, 0x78, 0xfc000000);
 
@@ -401,7 +406,7 @@
 	end |= ((val >> bankn) & 0xff) << 20;
 	end |= 0xfffff;
 
-	return (end + 1); /* size of bankN SDRAM */
+	return (end + 1); /* assume the end address matches total amount */
 }
 
 /*
@@ -685,31 +690,58 @@
 		break;
 
 	case BRD_KUROBOX:
-		nic  = pcimaketag(0, 11, 0);
-		val = pcicfgread(nic, 0x3c) & 0xffff0000;
-		val |= (('A' - '@') << 8) | 11;
+		nic = pcimaketag(0, 11, 0);
+		val = pcicfgread(nic, 0x3c) & 0xffffff00;
+		val |= 11;
 		pcicfgwrite(nic, 0x3c, val);
 
-		ide  = pcimaketag(0, 12, 0);
-		val = pcicfgread(ide, 0x3c) & 0xffff0000;
-		val |= (('A' - '@') << 8) | 12;
+		ide = pcimaketag(0, 12, 0);
+		val = pcicfgread(ide, 0x3c) & 0xffffff00;
+		val |= 12;
 		pcicfgwrite(ide, 0x3c, val);
 
-		usb  = pcimaketag(0, 14, 0);
-		val = pcicfgread(usb, 0x3c) & 0xffff0000;
-		val |= (('A' - '@') << 8) | 14;
+		usb = pcimaketag(0, 14, 0);
+		val = pcicfgread(usb, 0x3c) & 0xffffff00;
+		val |= 14;
 		pcicfgwrite(usb, 0x3c, val);
 
-		usb  = pcimaketag(0, 14, 1);
-		val = pcicfgread(usb, 0x3c) & 0xffff0000;
-		val |= (('B' - '@') << 8) | 14;
+		usb = pcimaketag(0, 14, 1);
+		val = pcicfgread(usb, 0x3c) & 0xffffff00;
+		val |= 14;
 		pcicfgwrite(usb, 0x3c, val);
 
-		usb  = pcimaketag(0, 14, 2);
-		val = pcicfgread(usb, 0x3c) & 0xffff0000;
-		val |= (('C' - '@') << 8) | 14;
+		usb = pcimaketag(0, 14, 2);
+		val = pcicfgread(usb, 0x3c) & 0xffffff00;
+		val |= 14;
 		pcicfgwrite(usb, 0x3c, val);
 		break;
+
+	case BRD_SYNOLOGY:
+		ide = pcimaketag(0, 13, 0);
+		val = pcicfgread(ide, 0x3c) & 0xffffff00;
+		val |= 13;
+		pcicfgwrite(ide, 0x3c, val);
+
+		usb = pcimaketag(0, 14, 0);
+		val = pcicfgread(usb, 0x3c) & 0xffffff00;
+		val |= 14;
+		pcicfgwrite(usb, 0x3c, val);
+
+		usb = pcimaketag(0, 14, 1);
+		val = pcicfgread(usb, 0x3c) & 0xffffff00;
+		val |= 14;
+		pcicfgwrite(usb, 0x3c, val);
+
+		usb = pcimaketag(0, 14, 2);
+		val = pcicfgread(usb, 0x3c) & 0xffffff00;
+		val |= 14;
+		pcicfgwrite(usb, 0x3c, val);
+
+		nic = pcimaketag(0, 15, 0);
+		val = pcicfgread(nic, 0x3c) & 0xffffff00;
+		val |= 15;
+		pcicfgwrite(nic, 0x3c, val);
+		break;
 	}
 }
 

Reply via email to