Module Name:    src
Committed By:   phx
Date:           Thu May 13 10:40:02 UTC 2010

Modified Files:
        src/sys/arch/sandpoint/stand/netboot: brdsetup.c dev_net.c entry.S
            main.c pci.c

Log Message:
Patches by Toru Nishimura:
- set up DBATs for 80000000-8fffffff and fc000000-ffffffff
- honour DHCP's filename field, use 'netbsd' when unspecified
- PCI-fixups for KuroBox
- determine PCIIDE programming mode for BAR assignment


To generate a diff of this commit:
cvs rdiff -u -r1.12 -r1.13 src/sys/arch/sandpoint/stand/netboot/brdsetup.c \
    src/sys/arch/sandpoint/stand/netboot/pci.c
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/sandpoint/stand/netboot/dev_net.c
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/sandpoint/stand/netboot/entry.S
cvs rdiff -u -r1.27 -r1.28 src/sys/arch/sandpoint/stand/netboot/main.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.12 src/sys/arch/sandpoint/stand/netboot/brdsetup.c:1.13
--- src/sys/arch/sandpoint/stand/netboot/brdsetup.c:1.12	Wed May 12 18:33:09 2010
+++ src/sys/arch/sandpoint/stand/netboot/brdsetup.c	Thu May 13 10:40:02 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: brdsetup.c,v 1.12 2010/05/12 18:33:09 phx Exp $ */
+/* $NetBSD: brdsetup.c,v 1.13 2010/05/13 10:40:02 phx Exp $ */
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -274,7 +274,7 @@
 delay(u_int n)
 {
 	u_quad_t tb;
-	u_long tbh, tbl, scratch;
+	u_long scratch, tbh, tbl;
 
 	tb = mftb();
 	tb += (n * 1000 + ns_per_tick - 1) / ns_per_tick;
@@ -308,7 +308,7 @@
 void
 _inv(uint32_t adr, uint32_t siz)
 {
-	uint32_t off, bnd;
+	uint32_t bnd, off;
 
 	off = adr & (dcache_line_size - 1);
 	adr -= off;
@@ -342,7 +342,7 @@
 unsigned
 mpc107memsize()
 {
-	unsigned tag, val, n, bankn, end;
+	unsigned bankn, end, n, tag, val;
 
 	tag = pcimaketag(0, 0, 0);
 
@@ -411,7 +411,7 @@
 void
 setup_82C686B()
 {
-	unsigned pcib, ide, usb12, usb34, ac97, pmgt, val;
+	unsigned ac97, ide, pcib, pmgt, usb12, usb34, val;
 
 	pcib  = pcimaketag(0, 22, 0);
 	ide   = pcimaketag(0, 22, 1);
@@ -468,7 +468,7 @@
 setup_83C553F()
 {
 #if 0
-	unsigned pcib, ide, val;
+	unsigned ide, pcib, val;
 
 	pcib = pcimaketag(0, 11, 0);
 	ide  = pcimaketag(0, 11, 1);
@@ -478,7 +478,7 @@
 void
 pcifixup(void)
 {
-	unsigned pcib, ide, nic, val, steer, irq;
+	unsigned ide, irq, nic, pcib, steer, usb, val;
 	int line;
 
 	switch (brdtype) {
@@ -678,5 +678,32 @@
 		val |= (('A' - '@') << 8) | 25;
 		pcicfgwrite(nic, 0x3c, val);
 		break;
+
+	case BRD_KUROBOX:
+		nic  = pcimaketag(0, 11, 0);
+		val = pcicfgread(nic, 0x3c) & 0xffff0000;
+		val |= (('A' - '@') << 8) | 11;
+		pcicfgwrite(nic, 0x3c, val);
+
+		ide  = pcimaketag(0, 12, 0);
+		val = pcicfgread(ide, 0x3c) & 0xffff0000;
+		val |= (('A' - '@') << 8) | 12;
+		pcicfgwrite(ide, 0x3c, val);
+
+		usb  = pcimaketag(0, 14, 0);
+		val = pcicfgread(usb, 0x3c) & 0xffff0000;
+		val |= (('A' - '@') << 8) | 14;
+		pcicfgwrite(usb, 0x3c, val);
+
+		usb  = pcimaketag(0, 14, 1);
+		val = pcicfgread(usb, 0x3c) & 0xffff0000;
+		val |= (('B' - '@') << 8) | 14;
+		pcicfgwrite(usb, 0x3c, val);
+
+		usb  = pcimaketag(0, 14, 2);
+		val = pcicfgread(usb, 0x3c) & 0xffff0000;
+		val |= (('C' - '@') << 8) | 14;
+		pcicfgwrite(usb, 0x3c, val);
+		break;
 	}
 }
Index: src/sys/arch/sandpoint/stand/netboot/pci.c
diff -u src/sys/arch/sandpoint/stand/netboot/pci.c:1.12 src/sys/arch/sandpoint/stand/netboot/pci.c:1.13
--- src/sys/arch/sandpoint/stand/netboot/pci.c:1.12	Fri Jun 12 00:24:33 2009
+++ src/sys/arch/sandpoint/stand/netboot/pci.c	Thu May 13 10:40:02 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: pci.c,v 1.12 2009/06/12 00:24:33 nisimura Exp $ */
+/* $NetBSD: pci.c,v 1.13 2010/05/13 10:40:02 phx Exp $ */
 
 /*-
  * Copyright (c) 2007 The NetBSD Foundation, Inc.
@@ -219,12 +219,11 @@
 	val = 0x80 << 8 | 0x08 /* 32B cache line */;
 	cfgwrite(bus, dev, func, 0x0c, val);
 
-#if 1
-/* skip IDE controller BAR assignment */
-val = cfgread(bus, dev, func, PCI_CLASS_REG);
-if ((val >> 16) == PCI_CLASS_IDE)
-	return 0;
-#endif
+	/* skip legacy mode IDE controller BAR assignment */
+	val = cfgread(bus, dev, func, PCI_CLASS_REG);
+	if ((val >> 16) == PCI_CLASS_IDE && ((val >> 8) & 0x05) == 0)
+		return 0;
+
 	memassign(bus, dev, func);
 
 	/* descending toward PCI-PCI bridge */

Index: src/sys/arch/sandpoint/stand/netboot/dev_net.c
diff -u src/sys/arch/sandpoint/stand/netboot/dev_net.c:1.7 src/sys/arch/sandpoint/stand/netboot/dev_net.c:1.8
--- src/sys/arch/sandpoint/stand/netboot/dev_net.c:1.7	Mon Jan 12 09:41:59 2009
+++ src/sys/arch/sandpoint/stand/netboot/dev_net.c	Thu May 13 10:40:02 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: dev_net.c,v 1.7 2009/01/12 09:41:59 tsutsui Exp $ */
+/* $NetBSD: dev_net.c,v 1.8 2010/05/13 10:40:02 phx Exp $ */
 
 /*-
  * Copyright (c) 2007 The NetBSD Foundation, Inc.
@@ -66,8 +66,8 @@
 			goto bad;
 		}
 
-		/* XXX always to use "netbsd" kernel filename */
-		strcpy(bootfile, "/netbsd");
+		if (bootfile[0] == '\0')
+			strcpy(bootfile, "netbsd");
 
 		if (nfs_mount(netdev_sock, rootip, rootpath) != 0) {
 			error = errno;

Index: src/sys/arch/sandpoint/stand/netboot/entry.S
diff -u src/sys/arch/sandpoint/stand/netboot/entry.S:1.5 src/sys/arch/sandpoint/stand/netboot/entry.S:1.6
--- src/sys/arch/sandpoint/stand/netboot/entry.S:1.5	Tue Mar  2 21:52:32 2010
+++ src/sys/arch/sandpoint/stand/netboot/entry.S	Thu May 13 10:40:02 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: entry.S,v 1.5 2010/03/02 21:52:32 matt Exp $ */
+/* $NetBSD: entry.S,v 1.6 2010/05/13 10:40:02 phx Exp $ */
 
 #include <powerpc/psl.h>
 #include <powerpc/spr.h>
@@ -47,6 +47,21 @@
 	ori	11,11,HID0_DCE
 
 4:
+	lis	1,bat...@ha
+	addi	1,1,bat...@l
+	lwz	3,0(1)
+	lwz	4,4(1)
+	mtdbatl	1,3
+	mtdbatu	1,4
+	lwz	3,8(1)
+	lwz	4,12(1)
+	mtdbatl	2,3
+	mtdbatu	2,4
+	lwz	3,16(1)
+	lwz	4,20(1)
+	mtdbatl	3,3
+	mtdbatu	3,4
+
 	sync
 	mtspr	SPR_HID0,8		/* enable and invalidate caches */
 	sync
@@ -148,3 +163,16 @@
 	lwbrx	3,0,3
 	eieio
 	blr
+
+	.data
+#define	xBATL(pa, wimg, pp)						\
+	((pa) | (wimg) | (pp))
+#define	xBATU(va, len, v)						\
+	((va) | ((len) & BAT_BL) | ((v) & BAT_V))
+BAT123:
+	.long xBATL(0x80000000, BAT_I|BAT_G, BAT_PP_RW)
+	.long xBATU(0x80000000, BAT_BL_256M, BAT_Vs)
+	.long xBATL(0xfc000000, BAT_I|BAT_G, BAT_PP_RW)
+	.long xBATU(0xfc000000, BAT_BL_64M, BAT_Vs)
+	.long 0
+	.long 0

Index: src/sys/arch/sandpoint/stand/netboot/main.c
diff -u src/sys/arch/sandpoint/stand/netboot/main.c:1.27 src/sys/arch/sandpoint/stand/netboot/main.c:1.28
--- src/sys/arch/sandpoint/stand/netboot/main.c:1.27	Sat May  8 19:41:07 2010
+++ src/sys/arch/sandpoint/stand/netboot/main.c	Thu May 13 10:40:02 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: main.c,v 1.27 2010/05/08 19:41:07 phx Exp $ */
+/* $NetBSD: main.c,v 1.28 2010/05/13 10:40:02 phx Exp $ */
 
 /*-
  * Copyright (c) 2007 The NetBSD Foundation, Inc.
@@ -64,15 +64,15 @@
 void
 main(void)
 {
-	int n, b, d, f, howto;
-	unsigned memsize, tag;
-	unsigned long marks[MARK_MAX];
 	struct btinfo_memory bi_mem;
 	struct btinfo_console bi_cons;
 	struct btinfo_clock bi_clk;
 	struct btinfo_bootpath bi_path;
 	struct btinfo_rootdevice bi_rdev;
-	unsigned lnif[1][2], lata[1][2];
+	unsigned long marks[MARK_MAX];
+	unsigned lata[1][2], lnif[1][2];
+	unsigned memsize, tag;
+	int b, d, f, fd, howto, n;
 
 	/* determine SDRAM size */
 	memsize = mpc107memsize();
@@ -132,12 +132,15 @@
 	if (netif_init(tag) == 0)
 		printf("no NIC device driver is found\n");
 
-	printf("Try NFS load /netbsd\n");
-	marks[MARK_START] = 0;
-	if (loadfile("net:", marks, LOAD_KERNEL) < 0) {
-		printf("load failed. Restarting...\n");
-		_rtt();
+	if ((fd = open("net:", 0)) < 0) {
+		if (errno == ENOENT)
+			printf("\"%s\" not found\n", bootfile);
+		goto loadfail;
 	}
+	printf("loading \"%s\" ", bootfile);
+	marks[MARK_START] = 0;
+	if (fdloadfile(fd, marks, LOAD_KERNEL) < 0)
+		goto loadfail;
 
 	howto = RB_SINGLE | AB_VERBOSE;
 #ifdef START_DDB_SESSION
@@ -176,6 +179,10 @@
 	/* should never come here */
 	printf("exec returned. Restarting...\n");
 	_rtt();
+
+  loadfail:
+	printf("load failed. Restarting...\n");
+	_rtt();
 }
 
 void

Reply via email to