Module Name:    src
Committed By:   tsutsui
Date:           Sat Jan 12 07:12:00 UTC 2013

Modified Files:
        src/sys/arch/luna68k/stand/boot: init_main.c locore.S samachdep.h

Log Message:
Check cputype and set machine type (LUNA-I or LUNA-II).
Tested on only LUNA-I for now.


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/luna68k/stand/boot/init_main.c \
    src/sys/arch/luna68k/stand/boot/samachdep.h
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/luna68k/stand/boot/locore.S

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/luna68k/stand/boot/init_main.c
diff -u src/sys/arch/luna68k/stand/boot/init_main.c:1.1 src/sys/arch/luna68k/stand/boot/init_main.c:1.2
--- src/sys/arch/luna68k/stand/boot/init_main.c:1.1	Sat Jan  5 17:44:24 2013
+++ src/sys/arch/luna68k/stand/boot/init_main.c	Sat Jan 12 07:11:59 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: init_main.c,v 1.1 2013/01/05 17:44:24 tsutsui Exp $	*/
+/*	$NetBSD: init_main.c,v 1.2 2013/01/12 07:11:59 tsutsui Exp $	*/
 
 /*
  * Copyright (c) 1992 OMRON Corporation.
@@ -82,7 +82,8 @@
 static int get_plane_numbers(void);
 static int reorder_dipsw(int);
 
-int cpuspeed;
+int cpuspeed;	/* for DELAY() macro */
+int machtype;
 
 #define	VERS_LOCAL	"Phase-31"
 
@@ -109,11 +110,20 @@ void
 main(void)
 {
 	int i, status = 0;
+	const char *machstr;
 
 	/*
 	 * Initialize the console before we print anything out.
 	 */
-	cpuspeed = MHZ_25;				/* for DELAY() macro */
+	if (cputype == CPU_68030) {
+		machtype = LUNA_I;
+		machstr  = "LUNA-I";
+		cpuspeed = MHZ_25;
+	} else {
+		machtype = LUNA_II;
+		machstr  = "LUNA-II";
+		cpuspeed = MHZ_25 * 2;	/* XXX */
+	}
 
 	nplane   = get_plane_numbers();
 
@@ -129,6 +139,7 @@ main(void)
 	kiff->plane   = nplane;
 
 	i = (int) kiff->maxaddr + 1;
+	printf("Machine model   = %s\n", machstr);
 	printf("Physical Memory = 0x%x  ", i);
 	i >>= 20;
 	printf("(%d MB)\n", i);
Index: src/sys/arch/luna68k/stand/boot/samachdep.h
diff -u src/sys/arch/luna68k/stand/boot/samachdep.h:1.1 src/sys/arch/luna68k/stand/boot/samachdep.h:1.2
--- src/sys/arch/luna68k/stand/boot/samachdep.h:1.1	Sat Jan  5 17:44:24 2013
+++ src/sys/arch/luna68k/stand/boot/samachdep.h	Sat Jan 12 07:11:59 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: samachdep.h,v 1.1 2013/01/05 17:44:24 tsutsui Exp $	*/
+/*	$NetBSD: samachdep.h,v 1.2 2013/01/12 07:11:59 tsutsui Exp $	*/
 
 /*
  * Copyright (c) 1982, 1990, 1993
@@ -109,6 +109,7 @@ int getline(char *, char *);
 
 /* init_main.c */
 extern int nplane;
+extern int machtype;
 
 /* kbd.c */
 int kbd_decode(u_char);
@@ -116,6 +117,7 @@ int kbd_decode(u_char);
 /* locore.S */
 extern	u_int bootdev;
 extern int dipsw1, dipsw2;
+extern int cputype;
 int setjmp(label_t *);
 int splhigh(void);
 void splx(int);

Index: src/sys/arch/luna68k/stand/boot/locore.S
diff -u src/sys/arch/luna68k/stand/boot/locore.S:1.2 src/sys/arch/luna68k/stand/boot/locore.S:1.3
--- src/sys/arch/luna68k/stand/boot/locore.S:1.2	Thu Jan 10 16:03:49 2013
+++ src/sys/arch/luna68k/stand/boot/locore.S	Sat Jan 12 07:11:59 2013
@@ -242,6 +242,28 @@ Lbssclr:
 	andl	#0xFF,%d0
 	movl	%d0,_C_LABEL(dipsw2)
 
+/* determine our CPU */
+
+	/* XXX should be generated via assym.h */
+	CACHE_OFF = 0x0808
+	DC_FREEZE = 0x0200
+	CPU_68030 = 1
+	CPU_68040 = 2
+
+	movl	#CACHE_OFF,%d0
+	movc	%d0,%cacr		| clear and disable on-chip cache(s)
+	movl	#DC_FREEZE,%d0		| data freeze bit
+	movc	%d0,%cacr		|   only exists on 68030
+	movc	%cacr,%d0		| read it back
+	tstl	%d0			| zero?
+	jeq	Lnot68030		| yes, we have 68040
+	movl	#CPU_68030,%d0
+	jra	Lstart0
+Lnot68030:
+	movl	#CPU_68040,%d0
+Lstart0:
+	movl	%d0,_C_LABEL(cputype)
+
 /* final setup for C code */
 	movw	#PSL_LOWIPL,%sr		| no interrupts
 	jsr	_C_LABEL(main)		| lets go
@@ -750,3 +772,6 @@ GLOBAL(dipsw1)
 
 GLOBAL(dipsw2)
 	.long	0
+
+GLOBAL(cputype)
+	.long	CPU_68030

Reply via email to