Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch/powerpc Shuffle around a couple of things that aren...
details: https://anonhg.NetBSD.org/src/rev/37d3a9440440
branches: trunk
changeset: 980790:37d3a9440440
user: thorpej <thorpej%NetBSD.org@localhost>
date: Fri Feb 19 05:21:39 2021 +0000
description:
Shuffle around a couple of things that aren't particularly OEA-specific:
- Early bootstrap console initialization moves to ofw_machdep.c, and
is called a bit earlier, from ofw_bootstrap().
- Decoding the "translations" property from /chosen/mmu is specified
in the general OpenFirmware PowerPC bindings, and is not specific to
any particular PowerPC flavor. It's now decoded a bit earlier in
ofw_bootstrap().
The *interpretation* of the mode field of a translation is, however,
implementation-specific, so that remains in ofwoea_machdep.c.
diffstat:
sys/arch/powerpc/include/ofw_machdep.h | 27 +++-
sys/arch/powerpc/oea/ofw_consinit.c | 85 +-----------
sys/arch/powerpc/oea/ofwoea_machdep.c | 85 +++--------
sys/arch/powerpc/powerpc/ofw_machdep.c | 222 ++++++++++++++++++++++++++++++--
4 files changed, 266 insertions(+), 153 deletions(-)
diffs (truncated from 654 to 300 lines):
diff -r c65a8d1332e6 -r 37d3a9440440 sys/arch/powerpc/include/ofw_machdep.h
--- a/sys/arch/powerpc/include/ofw_machdep.h Fri Feb 19 03:42:02 2021 +0000
+++ b/sys/arch/powerpc/include/ofw_machdep.h Fri Feb 19 05:21:39 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: ofw_machdep.h,v 1.1 2021/02/18 18:31:22 thorpej Exp $ */
+/* $NetBSD: ofw_machdep.h,v 1.2 2021/02/19 05:21:39 thorpej Exp $ */
/*-
* Copyright (c) 2021 The NetBSD Foundation, Inc.
@@ -32,6 +32,31 @@
#ifdef _KERNEL
#include <machine/powerpc.h>
+/*
+ * The general format of an OpenFirmware virtual translation record is:
+ *
+ * cell(s) virt
+ * cell(s) size
+ * cell(s) phys
+ * cell mode
+ *
+ * "mode" contains PTE WIMG bits.
+ *
+ * We define this structure to describe these translations that's independent
+ * of the number of cells each field consumes.
+ */
+struct OF_translation {
+ vaddr_t virt;
+ vsize_t size;
+ paddr_t phys;
+ uint32_t mode;
+};
+
+#define OFW_MAX_TRANSLATIONS 32
+
+extern int ofw_chosen; /* cached handle for "/chosen" */
+extern struct OF_translation ofw_translations[OFW_MAX_TRANSLATIONS];
+
void ofw_bootstrap(void);
#endif /* _KERNEL */
diff -r c65a8d1332e6 -r 37d3a9440440 sys/arch/powerpc/oea/ofw_consinit.c
--- a/sys/arch/powerpc/oea/ofw_consinit.c Fri Feb 19 03:42:02 2021 +0000
+++ b/sys/arch/powerpc/oea/ofw_consinit.c Fri Feb 19 05:21:39 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: ofw_consinit.c,v 1.19 2020/07/06 09:34:17 rin Exp $ */
+/* $NetBSD: ofw_consinit.c,v 1.20 2021/02/19 05:21:39 thorpej Exp $ */
/*-
* Copyright (c) 2007 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ofw_consinit.c,v 1.19 2020/07/06 09:34:17 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ofw_consinit.c,v 1.20 2021/02/19 05:21:39 thorpej Exp $");
#include "adb.h"
#include "adbkbd.h"
@@ -54,6 +54,7 @@
#include <sys/bus.h>
#include <powerpc/ofw_cons.h>
+#include <powerpc/ofw_machdep.h>
#include <dev/cons.h>
#include <dev/ofw/openfirm.h>
@@ -88,26 +89,14 @@
#include <dev/ic/pckbcvar.h>
#endif
-int console_node = 0, console_instance = 0;
+extern int console_node, console_instance;
-int chosen, stdin, stdout;
int ofkbd_ihandle;
static void cninit_kd(void);
-static void ofwoea_bootstrap_console(void);
-static int ofwbootcons_cngetc(dev_t);
-static void ofwbootcons_cnputc(dev_t, int);
/*#define OFDEBUG*/
-struct consdev consdev_ofwbootcons = {
- NULL, NULL,
- ofwbootcons_cngetc,
- ofwbootcons_cnputc,
- nullcnpollc,
- NULL, NULL, NULL, NODEV, CN_INTERNAL,
-};
-
#ifdef OFDEBUG
void ofprint(const char *, ...);
@@ -133,11 +122,9 @@
{
char name[32];
- ofwoea_bootstrap_console();
-
OFPRINTF("console node: %08x\n", console_node);
- if (console_node == -1)
+ if (console_node <= 0)
goto nocons;
memset(name, 0, sizeof(name));
@@ -171,9 +158,7 @@
return;
#endif /* NZTTY */
- /* fallback to OFW boot console */
- cp = &consdev_ofwbootcons;
- cn_tab = cp;
+ /* fallback to OFW boot console (already set) */
return;
}
else
@@ -207,7 +192,7 @@
/*
* We must determine which keyboard type we have.
*/
- if (OF_getprop(chosen, "stdin", &kstdin, sizeof(kstdin))
+ if (OF_getprop(ofw_chosen, "stdin", &kstdin, sizeof(kstdin))
!= sizeof(kstdin)) {
printf("WARNING: no `stdin' property in /chosen\n");
return;
@@ -324,7 +309,7 @@
*/
#if NUKBD > 0
- if (OF_call_method("`usb-kbd-ihandles", stdin, 0, 1, &ukbds) >= 0 &&
+ if (OF_call_method("`usb-kbd-ihandles", kstdin, 0, 1, &ukbds) >= 0 &&
ukbds != NULL && ukbds->ihandle != 0 &&
OF_instance_to_package(ukbds->ihandle) != -1) {
printf("usb-kbd-ihandles matches\n");
@@ -407,30 +392,6 @@
return c;
}
-/*
- * Bootstrap console support functions
- */
-
-static int
-ofwbootcons_cngetc(dev_t dev)
-{
- unsigned char ch = '\0';
- int l;
-
- while ((l = OF_read(stdin, &ch, 1)) != 1)
- if (l != -2 && l != 0)
- return -1;
- return ch;
-}
-
-static void
-ofwbootcons_cnputc(dev_t dev, int c)
-{
- char ch = c;
-
- OF_write(stdout, &ch, 1);
-}
-
void
ofwoea_consinit(void)
{
@@ -442,33 +403,3 @@
initted = 1;
cninit();
}
-
-static void
-ofwoea_bootstrap_console(void)
-{
- int node;
-
- chosen = OF_finddevice("/chosen");
- if (chosen == -1)
- goto nocons;
-
- if (OF_getprop(chosen, "stdout", &stdout,
- sizeof(stdout)) != sizeof(stdout))
- goto nocons;
- if (OF_getprop(chosen, "stdin", &stdin,
- sizeof(stdin)) != sizeof(stdin))
- goto nocons;
- if (stdout == 0) {
- /* screen should be console, but it is not open */
- stdout = OF_open("screen");
- }
- node = OF_instance_to_package(stdout);
- console_node = node;
- console_instance = stdout;
-
- return;
-nocons:
- panic("No /chosen could be found!\n");
- console_node = -1;
- return;
-}
diff -r c65a8d1332e6 -r 37d3a9440440 sys/arch/powerpc/oea/ofwoea_machdep.c
--- a/sys/arch/powerpc/oea/ofwoea_machdep.c Fri Feb 19 03:42:02 2021 +0000
+++ b/sys/arch/powerpc/oea/ofwoea_machdep.c Fri Feb 19 05:21:39 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: ofwoea_machdep.c,v 1.51 2021/02/12 23:40:02 thorpej Exp $ */
+/* $NetBSD: ofwoea_machdep.c,v 1.52 2021/02/19 05:21:39 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.51 2021/02/12 23:40:02 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ofwoea_machdep.c,v 1.52 2021/02/19 05:21:39 thorpej Exp $");
#include "ksyms.h"
#include "wsdisplay.h"
@@ -69,6 +69,7 @@
#include <powerpc/oea/cpufeat.h>
#include <powerpc/include/oea/spr.h>
#include <powerpc/ofw_cons.h>
+#include <powerpc/ofw_machdep.h>
#include <powerpc/spr.h>
#include <powerpc/pic/picvar.h>
@@ -97,19 +98,9 @@
int type;
} rangemap_t;
-struct ofw_translations {
- vaddr_t va;
- int len;
-#if defined (PMAC_G5)
- register64_t pa;
-#else
- register_t pa;
-#endif
- int mode;
-}__attribute__((packed));
+struct OF_translation ofw_translations[OFW_MAX_TRANSLATIONS];
struct pmap ofw_pmap;
-struct ofw_translations ofmap[32];
char bootpath[256];
char model_name[64];
#if NKSYMS || defined(DDB) || defined(MODULAR)
@@ -129,13 +120,11 @@
int ofw_quiesce;
extern int ofwmsr;
-extern int chosen;
extern uint32_t ticks_per_sec;
extern uint32_t ns_per_tick;
extern uint32_t ticks_per_intr;
-static int save_ofmap(struct ofw_translations *, int);
-static void restore_ofmap(struct ofw_translations *, int);
+static void restore_ofmap(void);
static void set_timebase(void);
extern void cpu_spinstart(u_int);
@@ -144,7 +133,7 @@
void
ofwoea_initppc(u_int startkernel, u_int endkernel, char *args)
{
- int ofmaplen, node, l;
+ int node, l;
register_t scratch;
#if defined(MULTIPROCESSOR) && defined(ofppc)
@@ -216,10 +205,6 @@
oea_init(pic_ext_intr);
- ofmaplen = save_ofmap(NULL, 0);
- if (ofmaplen > 0)
- save_ofmap(ofmap, ofmaplen);
-
/*
* XXX
* we need to do this here instead of earlier on in ofwinit() for some reason
@@ -305,7 +290,7 @@
: "=r"(scratch)
: "K"(PSL_IR|PSL_DR|PSL_ME|PSL_RI));
- restore_ofmap(ofmap, ofmaplen);
+ restore_ofmap();
rascons_finalize();
@@ -376,33 +361,11 @@
mtmsr(msr);
}
-static int
-save_ofmap(struct ofw_translations *map, int maxlen)
+void
Home |
Main Index |
Thread Index |
Old Index