Module Name:    src
Committed By:   thorpej
Date:           Sat Feb 27 02:52:49 UTC 2021

Modified Files:
        src/sys/arch/macppc/include: autoconf.h
        src/sys/arch/macppc/macppc: machdep.c
        src/sys/arch/ofppc/include: autoconf.h
        src/sys/arch/ofppc/ofppc: machdep.c
        src/sys/arch/powerpc/include: ofw_bus.h ofw_bus_funcs.h
        src/sys/arch/powerpc/oea: ofwoea_machdep.c

Log Message:
Un-do a bunch of misguided code sharing.  It's not really shared if it's
full of platform-specific #ifdefs:
- ofwoea_batinit() is gone; just do what's needed early in macppc / ofppc
  initppc() functions.
- Get a bunch of Mac-specific stuff out of ofwoea_initppc().


To generate a diff of this commit:
cvs rdiff -u -r1.21 -r1.22 src/sys/arch/macppc/include/autoconf.h
cvs rdiff -u -r1.172 -r1.173 src/sys/arch/macppc/macppc/machdep.c
cvs rdiff -u -r1.17 -r1.18 src/sys/arch/ofppc/include/autoconf.h
cvs rdiff -u -r1.117 -r1.118 src/sys/arch/ofppc/ofppc/machdep.c
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/powerpc/include/ofw_bus.h
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/powerpc/include/ofw_bus_funcs.h
cvs rdiff -u -r1.55 -r1.56 src/sys/arch/powerpc/oea/ofwoea_machdep.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/macppc/include/autoconf.h
diff -u src/sys/arch/macppc/include/autoconf.h:1.21 src/sys/arch/macppc/include/autoconf.h:1.22
--- src/sys/arch/macppc/include/autoconf.h:1.21	Fri Feb 12 23:38:17 2021
+++ src/sys/arch/macppc/include/autoconf.h	Sat Feb 27 02:52:48 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: autoconf.h,v 1.21 2021/02/12 23:38:17 thorpej Exp $	*/
+/*	$NetBSD: autoconf.h,v 1.22 2021/02/27 02:52:48 thorpej Exp $	*/
 
 /*-
  * Copyright (C) 1998	Internet Research Institute, Inc.
@@ -62,7 +62,6 @@ void identifycpu(char *);
 
 /* these are in machdep.c */
 void initppc(u_int, u_int, char *);
-void model_init(void);
 paddr_t kvtop(void *);
 void dumpsys(void);
 void copy_disp_props(device_t, int, prop_dictionary_t);

Index: src/sys/arch/macppc/macppc/machdep.c
diff -u src/sys/arch/macppc/macppc/machdep.c:1.172 src/sys/arch/macppc/macppc/machdep.c:1.173
--- src/sys/arch/macppc/macppc/machdep.c:1.172	Tue Jan 26 14:49:41 2021
+++ src/sys/arch/macppc/macppc/machdep.c	Sat Feb 27 02:52:48 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: machdep.c,v 1.172 2021/01/26 14:49:41 thorpej Exp $	*/
+/*	$NetBSD: machdep.c,v 1.173 2021/02/27 02:52:48 thorpej Exp $	*/
 
 /*
  * Copyright (C) 1995, 1996 Wolfgang Solfrank.
@@ -32,13 +32,14 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.172 2021/01/26 14:49:41 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.173 2021/02/27 02:52:48 thorpej Exp $");
 
 #include "opt_compat_netbsd.h"
 #include "opt_ddb.h"
 #include "opt_kgdb.h"
 #include "opt_altivec.h"
 #include "opt_multiprocessor.h"
+#include "opt_ppcarch.h"
 #include "adb.h"
 #include "zsc.h"
 
@@ -78,6 +79,7 @@ __KERNEL_RCSID(0, "$NetBSD: machdep.c,v 
 #include <powerpc/trap.h>
 #include <powerpc/fpu.h>
 #include <powerpc/oea/bat.h>
+#include <powerpc/oea/spr.h>
 #include <powerpc/spr.h>
 #ifdef ALTIVEC
 #include <powerpc/altivec.h>
@@ -124,13 +126,53 @@ static int of_upd_brightness(void *, int
 void
 initppc(u_int startkernel, u_int endkernel, char *args)
 {
-	ofwoea_initppc(startkernel, endkernel, args);
-}
+	int node, l;
 
-/* perform model-specific actions at initppc() */
-void
-model_init(void)
-{
+	node = OF_finddevice("/");
+	if (node != -1) {
+		l = OF_getprop(node, "model", model_name, sizeof(model_name));
+		if (l == -1) {
+			OF_getprop(node, "name", model_name,
+			    sizeof(model_name));
+		}
+	}
+
+	ofw_quiesce = strncmp(model_name, "PowerMac11,2", 12) == 0 ||
+		      strncmp(model_name, "PowerMac12,1", 12) == 0;
+
+	/* switch CPUs to full speed */
+	if  (strncmp(model_name, "PowerMac7,", 10) == 0) {
+		int clock_ih = OF_open("/u3/i2c/i2c-hwclock");
+		if (clock_ih != 0) {
+			OF_call_method_1("slew-high", clock_ih, 0);
+		}
+	}
+
+	/*
+	 * Initialize BAT mappings for our I/O regions.  Note,
+	 * on the 601, we use segment mappings under the covers.
+	 */
+#ifdef PPC_OEA601
+	if ((mfpvr() >> 16 ) == MPC601) {
+		oea_batinit(
+		    0x80000000, BAT_BL_256M,
+		    0x90000000, BAT_BL_256M,
+		    0xa0000000, BAT_BL_256M,
+		    0xb0000000, BAT_BL_256M,
+		    0xf0000000, BAT_BL_256M,
+		    0);
+	} else
+#endif /* PPC_OEA601 */
+	{
+		oea_batinit(
+		    0x80000000, BAT_BL_1G,
+		    0xf0000000, BAT_BL_128M,
+		    0xf8000000, BAT_BL_64M,
+		    0xfe000000, BAT_BL_8M,	/* Grackle IO */
+		    0);
+	}
+
+	ofwoea_initppc(startkernel, endkernel, args);
 }
 
 void

Index: src/sys/arch/ofppc/include/autoconf.h
diff -u src/sys/arch/ofppc/include/autoconf.h:1.17 src/sys/arch/ofppc/include/autoconf.h:1.18
--- src/sys/arch/ofppc/include/autoconf.h:1.17	Tue Jul  7 02:33:54 2020
+++ src/sys/arch/ofppc/include/autoconf.h	Sat Feb 27 02:52:48 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: autoconf.h,v 1.17 2020/07/07 02:33:54 rin Exp $	*/
+/*	$NetBSD: autoconf.h,v 1.18 2021/02/27 02:52:48 thorpej Exp $	*/
 
 #ifndef _OFPPC_AUTOCONF_H_
 #define _OFPPC_AUTOCONF_H_
@@ -37,7 +37,6 @@ extern char model_name[64];
 
 #ifdef _KERNEL
 void initppc(u_int, u_int, char *);
-void model_init(void);
 void strayintr(int);
 void dumpsys(void);
 

Index: src/sys/arch/ofppc/ofppc/machdep.c
diff -u src/sys/arch/ofppc/ofppc/machdep.c:1.117 src/sys/arch/ofppc/ofppc/machdep.c:1.118
--- src/sys/arch/ofppc/ofppc/machdep.c:1.117	Wed Mar 26 17:38:09 2014
+++ src/sys/arch/ofppc/ofppc/machdep.c	Sat Feb 27 02:52:49 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: machdep.c,v 1.117 2014/03/26 17:38:09 christos Exp $	*/
+/*	$NetBSD: machdep.c,v 1.118 2021/02/27 02:52:49 thorpej Exp $	*/
 /*-
  * Copyright (c) 2007 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -29,7 +29,9 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.117 2014/03/26 17:38:09 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.118 2021/02/27 02:52:49 thorpej Exp $");
+
+#include "opt_ofwoea.h"
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -74,15 +76,94 @@ extern int machine_has_rtas;
 #endif
 
 struct model_data modeldata;
+static void model_init(void);
+
+#ifdef OFWOEA_DEBUG
+#define	DPRINTF printf
+#else
+#define	DPRINTF while (0) printf
+#endif
+
+/*              
+ * Scan the device tree for ranges, and return them as bitmap 0..15
+ */     
+static uint16_t
+ranges_bitmap(int node, uint16_t bitmap)
+{
+	int child, mlen, acells, scells, reclen, i, j;
+	uint32_t addr, len, map[160];
+
+	for (child = OF_child(node); child; child = OF_peer(child)) {
+		mlen = OF_getprop(child, "ranges", map, sizeof(map));
+		if (mlen == -1)
+	  		goto noranges;
+
+		j = OF_getprop(child, "#address-cells", &acells,
+		    sizeof(acells));
+		if (j == -1)
+			goto noranges;
+
+		j = OF_getprop(child, "#size-cells", &scells,
+		    sizeof(scells));
+		if (j == -1)
+			goto noranges;
+
+		reclen = acells + modeldata.ranges_offset + scells;
+
+		for (i = 0; i < (mlen / 4) / reclen; i++) {
+			addr = map[reclen * i + acells];
+			len = map[reclen * i + reclen - 1];
+			for (j = 0; j < len / 0x10000000; j++)
+				bitmap |= 1 << ((addr+j*0x10000000) >> 28);
+			bitmap |= 1 << (addr >> 28);
+		}
+ noranges:
+		bitmap |= ranges_bitmap(child, bitmap);
+		continue;
+	}
+	return bitmap;
+}
 
 void
 initppc(u_int startkernel, u_int endkernel, char *args)
 {
+	int node, i;
+	uint16_t bitmap;
+
+	node = OF_finddevice("/");
+	if (node != -1) {
+		i = OF_getprop(node, "model", model_name, sizeof(model_name));
+		if (i == -1) {
+			OF_getprop(node, "name", model_name,
+			    sizeof(model_name));
+			model_init();
+		}
+	}
+
+	if ((oeacpufeat & OEACPU_NOBAT) == 0) {
+		node = OF_finddevice("/");
+
+		bitmap = ranges_bitmap(node, 0);
+		oea_batinit(0);
+
+		for (i = 1; i < 0x10; i++) {
+			/* skip the three vital SR regions */
+			if (i == USER_SR || i == KERNEL_SR || i == KERNEL2_SR) {
+				continue;
+			}
+			if (bitmap & (1 << i)) {
+				oea_iobat_add(0x10000000 * i, BAT_BL_256M);
+				DPRINTF("Batmapped 256M at 0x%x\n",
+				    0x10000000 * i);
+			}
+		}
+	}
+
 	ofwoea_initppc(startkernel, endkernel, args);
 }
 
 /* perform model-specific actions at initppc() */
-void
+static void
 model_init(void)
 {
 	int qhandle, phandle, j;

Index: src/sys/arch/powerpc/include/ofw_bus.h
diff -u src/sys/arch/powerpc/include/ofw_bus.h:1.4 src/sys/arch/powerpc/include/ofw_bus.h:1.5
--- src/sys/arch/powerpc/include/ofw_bus.h:1.4	Fri Jun  4 20:31:58 2010
+++ src/sys/arch/powerpc/include/ofw_bus.h	Sat Feb 27 02:52:48 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: ofw_bus.h,v 1.4 2010/06/04 20:31:58 chs Exp $ */
+/* $NetBSD: ofw_bus.h,v 1.5 2021/02/27 02:52:48 thorpej Exp $ */
 
 /*-
  * Copyright (c) 2007 The NetBSD Foundation, Inc.
@@ -51,7 +51,6 @@ extern struct powerpc_bus_space genppc_i
 
 void ofwoea_bus_space_init(void);
 void ofwoea_initppc(u_int, u_int, char *);
-void ofwoea_batinit(void);
 int ofwoea_map_space(int, int, int, struct powerpc_bus_space *, const char *);
 #endif
 

Index: src/sys/arch/powerpc/include/ofw_bus_funcs.h
diff -u src/sys/arch/powerpc/include/ofw_bus_funcs.h:1.1 src/sys/arch/powerpc/include/ofw_bus_funcs.h:1.2
--- src/sys/arch/powerpc/include/ofw_bus_funcs.h:1.1	Fri Jul  1 17:29:39 2011
+++ src/sys/arch/powerpc/include/ofw_bus_funcs.h	Sat Feb 27 02:52:48 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: ofw_bus_funcs.h,v 1.1 2011/07/01 17:29:39 dyoung Exp $ */
+/* $NetBSD: ofw_bus_funcs.h,v 1.2 2021/02/27 02:52:48 thorpej Exp $ */
 
 /*-
  * Copyright (c) 2007 The NetBSD Foundation, Inc.
@@ -40,7 +40,6 @@ extern struct powerpc_bus_space genppc_i
 
 void ofwoea_bus_space_init(void);
 void ofwoea_initppc(u_int, u_int, char *);
-void ofwoea_batinit(void);
 int ofwoea_map_space(int, int, int, struct powerpc_bus_space *, const char *);
 #endif
 

Index: src/sys/arch/powerpc/oea/ofwoea_machdep.c
diff -u src/sys/arch/powerpc/oea/ofwoea_machdep.c:1.55 src/sys/arch/powerpc/oea/ofwoea_machdep.c:1.56
--- src/sys/arch/powerpc/oea/ofwoea_machdep.c:1.55	Sat Feb 27 01:22:18 2021
+++ src/sys/arch/powerpc/oea/ofwoea_machdep.c	Sat Feb 27 02:52:48 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: ofwoea_machdep.c,v 1.55 2021/02/27 01:22:18 thorpej Exp $ */
+/* $NetBSD: ofwoea_machdep.c,v 1.56 2021/02/27 02:52:48 thorpej Exp $ */
 
 /*-
  * Copyright (c) 2007 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ofwoea_machdep.c,v 1.55 2021/02/27 01:22:18 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ofwoea_machdep.c,v 1.56 2021/02/27 02:52:48 thorpej Exp $");
 
 #include "ksyms.h"
 #include "wsdisplay.h"
@@ -145,18 +145,8 @@ extern volatile u_int cpu_spinstart_ack;
 void
 ofwoea_initppc(u_int startkernel, u_int endkernel, char *args)
 {
-	int node, l;
 	register_t scratch;
 
-#if defined(MULTIPROCESSOR) && defined(ofppc)
-	char cpupath[32];
-	int i;
-#endif
-
-	/* initialze bats */
-	if ((oeacpufeat & OEACPU_NOBAT) == 0)
-		ofwoea_batinit();
-
 #if NKSYMS || defined(DDB) || defined(MODULAR)
 	/* get info of kernel symbol table from bootloader */
 	memcpy(&startsym, args + strlen(args) + 1, sizeof(startsym));
@@ -166,29 +156,6 @@ ofwoea_initppc(u_int startkernel, u_int 
 	    startsym = endsym = NULL;
 #endif
 
-	/* get model name and perform model-specific actions */
-	memset(model_name, 0, sizeof(model_name));
-	node = OF_finddevice("/");
-	if (node != -1) {
-		l = OF_getprop(node, "model", model_name, sizeof(model_name));
-		if (l == -1)
-			OF_getprop(node, "name", model_name,
-			    sizeof(model_name));
-		model_init();
-	}
-
-	if (strncmp(model_name, "PowerMac11,2", 12) == 0 ||
-	    strncmp(model_name, "PowerMac12,1", 12) == 0)
-		ofw_quiesce = 1;
-
-	/* switch CPUs to full speed */
-	if  (strncmp(model_name, "PowerMac7,", 10) == 0) {
-		int clock_ih = OF_open("/u3/i2c/i2c-hwclock");
-		if (clock_ih != 0) {
-			OF_call_method_1("slew-high", clock_ih, 0);
-		}
-	}
-
 	/* Initialize bus_space */
 	ofwoea_bus_space_init();
 
@@ -198,14 +165,17 @@ ofwoea_initppc(u_int startkernel, u_int 
 		OF_quiesce();
 
 #if defined(MULTIPROCESSOR) && defined(ofppc)
-	for (i=1; i < CPU_MAXNUM; i++) {
+	char cpupath[32];
+	int i, l, node;
+
+	for (i = 1; i < CPU_MAXNUM; i++) {
 		snprintf(cpupath, sizeof(cpupath), "/cpus/@%x", i);
 		node = OF_finddevice(cpupath);
 		if (node <= 0)
 			continue;
 		aprint_verbose("Starting up CPU %d %s\n", i, cpupath);
 		OF_start_cpu(node, (u_int)cpu_spinstart, i);
-		for (l=0; l < 100000000; l++) {
+		for (l = 0; l < 100000000; l++) {
 			if (cpu_spinstart_ack == i) {
 				aprint_verbose("CPU %d spun up.\n", i);
 				break;
@@ -427,109 +397,6 @@ restore_ofmap(void)
 	pmap_update(&ofw_pmap);
 }
 
-
-
-/*
- * Scan the device tree for ranges, and return them as bitmap 0..15
- */
-#if !defined(macppc) && defined(PPC_OEA)
-static u_int16_t
-ranges_bitmap(int node, u_int16_t bitmap)
-{
-	int child, mlen, acells, scells, reclen, i, j;
-	u_int32_t addr, len, map[160];
-
-	for (child = OF_child(node); child; child = OF_peer(child)) {
-		mlen = OF_getprop(child, "ranges", map, sizeof(map));
-		if (mlen == -1)
-			goto noranges;
-
-		j = OF_getprop(child, "#address-cells", &acells,
-		    sizeof(acells));
-		if (j == -1)
-			goto noranges;
-
-		j = OF_getprop(child, "#size-cells", &scells,
-		    sizeof(scells));
-		if (j == -1)
-			goto noranges;
-
-#ifdef ofppc
-		reclen = acells + modeldata.ranges_offset + scells;
-#else
-		reclen = acells + 1 + scells;
-#endif
-
-		for (i=0; i < (mlen/4)/reclen; i++) {
-			addr = map[reclen * i + acells];
-			len = map[reclen * i + reclen - 1];
-			for (j = 0; j < len / 0x10000000; j++)
-				bitmap |= 1 << ((addr+j*0x10000000) >>28);
-			bitmap |= 1 << (addr >> 28);
-		}
-noranges:
-		bitmap |= ranges_bitmap(child, bitmap);
-		continue;
-	}
-	return bitmap;
-}
-#endif /* !macppc && PPC_OEA */
-
-void
-ofwoea_batinit(void)
-{
-#if defined (PPC_OEA)
-
-#ifdef macppc
-	/*
-	 * cover PCI and register space but not the firmware ROM
-	 */
-#ifdef PPC_OEA601
-
-        /*
-	 * use segment registers for the 601
-	 */
-	if ((mfpvr() >> 16 ) == MPC601)
-	    oea_batinit(
-		0x80000000, BAT_BL_256M,
-		0x90000000, BAT_BL_256M,
-		0xa0000000, BAT_BL_256M,
-		0xb0000000, BAT_BL_256M,
-		0xf0000000, BAT_BL_256M,
-		0);
-	else
-#endif /* PPC_OEA601 */
-	/*
-	 * map to bats
-	 */
-	oea_batinit(0x80000000, BAT_BL_1G,
-		    0xf0000000, BAT_BL_128M,
-		    0xf8000000, BAT_BL_64M,
-		    0xfe000000, BAT_BL_8M,	/* Grackle IO */
-		    0);
-#else /* ! macppc */
-	uint16_t bitmap;
-	int node, i;
-
-	node = OF_finddevice("/");
-
-	bitmap = ranges_bitmap(node, 0);
-	oea_batinit(0);
-
-	for (i=1; i < 0x10; i++) {
-		/* skip the three vital SR regions */
-		if (i == USER_SR || i == KERNEL_SR || i == KERNEL2_SR)
-			continue;
-		if (bitmap & (1 << i)) {
-			oea_iobat_add(0x10000000 * i, BAT_BL_256M);
-			DPRINTF("Batmapped 256M at 0x%x\n", 0x10000000 * i);
-		}
-	}
-#endif /* macppc */
-#endif /* OEA */
-}
-
-
 /* we define these partially, as we will fill the rest in later */
 struct powerpc_bus_space genppc_isa_io_space_tag = {
 	.pbs_flags = _BUS_SPACE_LITTLE_ENDIAN|_BUS_SPACE_IO_TYPE,

Reply via email to