Module Name:    src
Committed By:   tsutsui
Date:           Sat Nov 12 13:44:27 UTC 2011

Modified Files:
        src/sys/arch/luna68k/conf: GENERIC INSTALL Makefile.luna68k
        src/sys/arch/luna68k/dev: lcd.c
        src/sys/arch/luna68k/luna68k: locore.s machdep.c mainbus.c

Log Message:
Finally complete LUNA-II support, after almost 12 years since
initial import of NetBSD/luna68k.

Note a working LUNA-II machine was found and provided by OMRON guys
after LUNA demonstration at Open Source Conference 2011 Kansai @ Kyoto:
http://mail-index.NetBSD.org/source-changes/2011/07/16/msg024675.html
and this resurrected LUNA-II which runs NetBSD/luna68k -current with Xserver
was also demonstrated on the NetBSD booth at Kansai Open Source 2011:
http://www.NetBSD.org/gallery/events.html#kansai-os-jp-2011

It's really pleasure to meet many OMRON LUNA developers and LUNA users
at the NetBSD booth.  Thank you everyone!

Changes details:

luna68k/luna68k/locore.s
 - don't use 68030 specific pflusha instruction in 68040 initialization path
 - use TBIA() to invalidate TLB instead of 68030's pflusha
   after MMU is turned on (as hp300 does)
   (these two bugs are fatal at early bootstrap)
 - pull loadustp() fixes from hp300/locore.s rev 1.82
   (more flush ops are required in it otherwise causes random coredumps)
 - specify correct %tt1 mask value
   (the mask value means actually bit mask, not transparent range)

luna68k/luna68k/machdep.c
 - use proper delay_divisor for 68040 25MHz LUNA-II

luna68k/luna68k/mainbus.c
 - prepare and use per-model mainbus device lists for mainbus_attach_args

luna68k/conf/GENERIC
luna68k/conf/INSTALL
 - enable options M68040 and FPSP
 - enable secondary spc(4) on LUNA-II

luna68k/conf/Makefile.luna68k
 - include arch/m68k/fpsp/Makefile.inc for FPSP

luna68k/dev/lcd.c
 - promote LUNA-II model on LCD

XXX: old and slow SCSI-1 drives like Hitachi DK312 seems to have
XXX: some problem with spc(4) driver, even on the original LUNA


To generate a diff of this commit:
cvs rdiff -u -r1.93 -r1.94 src/sys/arch/luna68k/conf/GENERIC
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/luna68k/conf/INSTALL
cvs rdiff -u -r1.22 -r1.23 src/sys/arch/luna68k/conf/Makefile.luna68k
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/luna68k/dev/lcd.c
cvs rdiff -u -r1.42 -r1.43 src/sys/arch/luna68k/luna68k/locore.s
cvs rdiff -u -r1.84 -r1.85 src/sys/arch/luna68k/luna68k/machdep.c
cvs rdiff -u -r1.9 -r1.10 src/sys/arch/luna68k/luna68k/mainbus.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/luna68k/conf/GENERIC
diff -u src/sys/arch/luna68k/conf/GENERIC:1.93 src/sys/arch/luna68k/conf/GENERIC:1.94
--- src/sys/arch/luna68k/conf/GENERIC:1.93	Sat Jul 16 15:52:21 2011
+++ src/sys/arch/luna68k/conf/GENERIC	Sat Nov 12 13:44:26 2011
@@ -1,4 +1,4 @@
-# $NetBSD: GENERIC,v 1.93 2011/07/16 15:52:21 tsutsui Exp $
+# $NetBSD: GENERIC,v 1.94 2011/11/12 13:44:26 tsutsui Exp $
 #
 # GENERIC machine description file
 # 
@@ -22,13 +22,13 @@ include		"arch/luna68k/conf/std.luna68k"
 
 options 	INCLUDE_CONFIG_FILE	# embed config file in kernel binary
 
-#ident 		"GENERIC-$Revision: 1.93 $"
+#ident 		"GENERIC-$Revision: 1.94 $"
 
 maxusers	8
 
 options 	M68030
-#options 	M68040
-#options 	FPSP	# on m68040 to emulate some missing FP instructions
+options 	M68040
+options 	FPSP	# on m68040 to emulate some missing FP instructions
 
 # Needs to be set per system.  i.e change these as you see fit
 
@@ -153,7 +153,7 @@ ws0	at sio0			# port for keyboard and mo
 le0	at mainbus0
 # MB89532 SPC
 spc0	at mainbus0
-#spc1	at mainbus0		# 2nd SCSI on LUNA-II
+spc1	at mainbus0		# 2nd SCSI on LUNA-II
 # framebuffer
 fb0	at mainbus0		# 16 or 256 pseudo color
 

Index: src/sys/arch/luna68k/conf/INSTALL
diff -u src/sys/arch/luna68k/conf/INSTALL:1.1 src/sys/arch/luna68k/conf/INSTALL:1.2
--- src/sys/arch/luna68k/conf/INSTALL:1.1	Sat Jul 16 15:52:21 2011
+++ src/sys/arch/luna68k/conf/INSTALL	Sat Nov 12 13:44:26 2011
@@ -1,4 +1,4 @@
-# $NetBSD: INSTALL,v 1.1 2011/07/16 15:52:21 tsutsui Exp $
+# $NetBSD: INSTALL,v 1.2 2011/11/12 13:44:26 tsutsui Exp $
 #
 # config for installation ramdisk kernel
 # 
@@ -9,8 +9,8 @@ makeoptions	COPTS="-Os"		# Optimise for 
 maxusers	4
 
 options 	M68030
-#options 	M68040
-#options 	FPSP	# on m68040 to emulate some missing FP instructions
+options 	M68040
+options 	FPSP	# on m68040 to emulate some missing FP instructions
 
 options 	MEMORY_DISK_HOOKS
 options 	MEMORY_DISK_IS_ROOT		# Force root on ram-disk
@@ -139,7 +139,7 @@ ws0	at sio0			# port for keyboard and mo
 le0	at mainbus0
 # MB89532 SPC
 spc0	at mainbus0
-#spc1	at mainbus0		# 2nd SCSI on LUNA-II
+spc1	at mainbus0		# 2nd SCSI on LUNA-II
 # framebuffer
 fb0	at mainbus0		# 16 or 256 pseudo color
 

Index: src/sys/arch/luna68k/conf/Makefile.luna68k
diff -u src/sys/arch/luna68k/conf/Makefile.luna68k:1.22 src/sys/arch/luna68k/conf/Makefile.luna68k:1.23
--- src/sys/arch/luna68k/conf/Makefile.luna68k:1.22	Wed Jul 20 12:00:04 2011
+++ src/sys/arch/luna68k/conf/Makefile.luna68k	Sat Nov 12 13:44:26 2011
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile.luna68k,v 1.22 2011/07/20 12:00:04 tsutsui Exp $
+#	$NetBSD: Makefile.luna68k,v 1.23 2011/11/12 13:44:26 tsutsui Exp $
 
 # Makefile for NetBSD
 #
@@ -42,7 +42,7 @@ AFLAGS+=	-x assembler-with-cpp
 ## (4) local objects, compile rules, and dependencies
 ##
 # for the Motorola 68040 Floating Point Software Product
-# .include "$S/arch/m68k/fpsp/Makefile.inc"
+.include "$S/arch/m68k/fpsp/Makefile.inc"
 
 MD_OBJS=	locore.o ${FPSP}
 MD_CFILES=

Index: src/sys/arch/luna68k/dev/lcd.c
diff -u src/sys/arch/luna68k/dev/lcd.c:1.6 src/sys/arch/luna68k/dev/lcd.c:1.7
--- src/sys/arch/luna68k/dev/lcd.c:1.6	Wed Mar 18 10:22:31 2009
+++ src/sys/arch/luna68k/dev/lcd.c	Sat Nov 12 13:44:26 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: lcd.c,v 1.6 2009/03/18 10:22:31 cegger Exp $ */
+/* $NetBSD: lcd.c,v 1.7 2011/11/12 13:44:26 tsutsui Exp $ */
 
 /*-
  * Copyright (c) 2000 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
 
 #include <sys/cdefs.h>		/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: lcd.c,v 1.6 2009/03/18 10:22:31 cegger Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lcd.c,v 1.7 2011/11/12 13:44:26 tsutsui Exp $");
 
 /*
  * XXX
@@ -43,6 +43,8 @@ __KERNEL_RCSID(0, "$NetBSD: lcd.c,v 1.6 
 #include <sys/systm.h>
 #include <sys/device.h>
 
+#include <machine/cpu.h>
+
 #define PIO1_MODE_OUTPUT	0x84
 #define PIO1_MODE_INPUT		0x94
 
@@ -156,5 +158,7 @@ greeting(void)
 	lcdctrl(LCD_LOCATE(0, 0));
 	lcdshow(lcd_boot_message1);
 	lcdctrl(LCD_LOCATE(0, 1));
+	if (machtype == LUNA_II)
+		lcd_boot_message2[13] = '2';
 	lcdshow(lcd_boot_message2);
 }

Index: src/sys/arch/luna68k/luna68k/locore.s
diff -u src/sys/arch/luna68k/luna68k/locore.s:1.42 src/sys/arch/luna68k/luna68k/locore.s:1.43
--- src/sys/arch/luna68k/luna68k/locore.s:1.42	Sat Nov  5 15:37:17 2011
+++ src/sys/arch/luna68k/luna68k/locore.s	Sat Nov 12 13:44:26 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: locore.s,v 1.42 2011/11/05 15:37:17 tsutsui Exp $ */
+/* $NetBSD: locore.s,v 1.43 2011/11/12 13:44:26 tsutsui Exp $ */
 
 /*
  * Copyright (c) 1988 University of Utah.
@@ -244,11 +244,11 @@ Lmotommu0:
 	.long	0x4e7b0004		| movc %d0,%itt0
 	.long	0x4e7b0006		| movc %d0,%dtt0
 	RELOC(proto040tt1,%a0)
-	movl	%a0@,%d0		| tt1 range 8000.0000-feff.ffff
+	movl	%a0@,%d0		| tt1 range 8000.0000-ffff.ffff
 	.long	0x4e7b0005		| movc %d0,%itt1
 	.long	0x4e7b0007		| movc %d0,%dtt1
 	.word	0xf4d8			| cinva bc
-	pflusha				| flush entire ATC
+	.word	0xf518			| pflusha
 	RELOC(proto040tc,%a0)
 	movl	%a0@,%d0
 	.long	0x4e7b0003		| movc %d0,%tc
@@ -288,7 +288,7 @@ Lenab1:
 	jbsr	_C_LABEL(m68881_restore) | restore it (does not kill %a1)
 	addql	#4,%sp
 Lenab2:
-	pflusha				| flush entire ATC 
+	jbsr	_C_LABEL(_TBIA)		| invalidate TLB
 	cmpl	#MMU_68040,_C_LABEL(mmutype) | 68040?
 	jeq	Lenab3			| yes, cache already on
 	tstl	_C_LABEL(mmutype)
@@ -974,16 +974,18 @@ ENTRY(loadustp)
 #if defined(M68040)
 	cmpl	#MMU_68040,_C_LABEL(mmutype) | 68040?
 	jne	LmotommuC		| no, skip
+	.word	0xf518			| yes, pflusha
 	.long	0x4e7b0806		| movc %d0,%urp
 	rts
 LmotommuC:
 #endif
+	pflusha				| flush entire TLB
 	lea	_C_LABEL(protocrp),%a0	| %crp prototype
 	movl	%d0,%a0@(4)		| stash USTP
 	pmove	%a0@,%crp		| load root pointer
-	movl	#DC_CLEAR,%d0
-	movc	%d0,%cacr		| invalidate on-chip d-cache
-	rts				|   since pmove flushes ATC
+	movl	#CACHE_CLR,%d0
+	movc	%d0,%cacr		| invalidate cache(s)
+	rts
 
 ENTRY(ploadw)
 #if defined(M68040)
@@ -1153,8 +1155,8 @@ GLOBAL(proto040tc)
 	.long	0x8000		| %tc (4KB page)
 GLOBAL(proto040tt0)		| tt0 0x4000.0000-0x7fff.ffff
 	.long	0x403fa040	| kernel only, cache inhebit, serialized
-GLOBAL(proto040tt1)		| tt1 0x8000.0000-0xfeff.ffff
-	.long	0x807ea040	| kernel only, cache inhebit, serialized
+GLOBAL(proto040tt1)		| tt1 0x8000.0000-0xffff.ffff
+	.long	0x807fa040	| kernel only, cache inhebit, serialized
 nullrp:
 	.long	0x7fff0001	| do-nothing MMU root pointer
 

Index: src/sys/arch/luna68k/luna68k/machdep.c
diff -u src/sys/arch/luna68k/luna68k/machdep.c:1.84 src/sys/arch/luna68k/luna68k/machdep.c:1.85
--- src/sys/arch/luna68k/luna68k/machdep.c:1.84	Mon Oct 17 14:19:28 2011
+++ src/sys/arch/luna68k/luna68k/machdep.c	Sat Nov 12 13:44:26 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.84 2011/10/17 14:19:28 tsutsui Exp $ */
+/* $NetBSD: machdep.c,v 1.85 2011/11/12 13:44:26 tsutsui Exp $ */
 
 /*-
  * Copyright (c) 2000 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.84 2011/10/17 14:19:28 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.85 2011/11/12 13:44:26 tsutsui Exp $");
 
 #include "opt_ddb.h"
 #include "opt_kgdb.h"
@@ -145,7 +145,7 @@ extern void syscnattach(int);
  * XXX -- is the above formula correct?
  */
 int	cpuspeed = 25;		/* only used for printing later */
-int	delay_divisor = 300;	/* for delay() loop count */
+int	delay_divisor = 30;	/* for delay() loop count */
 
 /*
  * Early initialization, before main() is called.
@@ -304,7 +304,8 @@ identifycpu(void)
 		machtype = LUNA_II;
 		/* 25MHz 68040 */
 		cpuspeed = 25;
-		delay_divisor = 300;
+		delay_divisor = 30;
+		/* hz = 100 on LUNA-II */
 		break;
 #endif
 	default:

Index: src/sys/arch/luna68k/luna68k/mainbus.c
diff -u src/sys/arch/luna68k/luna68k/mainbus.c:1.9 src/sys/arch/luna68k/luna68k/mainbus.c:1.10
--- src/sys/arch/luna68k/luna68k/mainbus.c:1.9	Sun Jun  5 17:03:18 2011
+++ src/sys/arch/luna68k/luna68k/mainbus.c	Sat Nov 12 13:44:26 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: mainbus.c,v 1.9 2011/06/05 17:03:18 matt Exp $ */
+/* $NetBSD: mainbus.c,v 1.10 2011/11/12 13:44:26 tsutsui Exp $ */
 
 /*-
  * Copyright (c) 2000 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
 
 #include <sys/cdefs.h>
 
-__KERNEL_RCSID(0, "$NetBSD: mainbus.c,v 1.9 2011/06/05 17:03:18 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mainbus.c,v 1.10 2011/11/12 13:44:26 tsutsui Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -40,15 +40,21 @@ __KERNEL_RCSID(0, "$NetBSD: mainbus.c,v 
 #include <machine/cpu.h>
 #include <machine/autoconf.h>
 
-static struct mainbus_attach_args devs[] = {
-	{ "clock",  0x45000000, -1 },	/* Mostek/Dallas TimeKeeper */
+static const struct mainbus_attach_args luna_devs[] = {
+	{ "clock",  0x45000000, -1 },	/* Mostek TimeKeeper */
 	{ "le",	    0xf1000000, 3 },	/* Am7990 */
 	{ "sio",    0x51000000, 6 },	/* uPD7201A */
 	{ "fb",	    0xc1100000, -1 },	/* BrookTree RAMDAC */
 	{ "spc",    0xe1000000, 2 },	/* MB89352 */
-#if 0
-	{ "spc",    0xe1000040, 2 },	/* ditto */
-#endif
+};
+
+static const struct mainbus_attach_args luna2_devs[] = {
+	{ "clock",  0x45000000, -1 },	/* Dallas TimeKeeper */
+	{ "le",	    0xf0000000, 3 },	/* Am7990 */
+	{ "sio",    0x51000000, 6 },	/* uPD7201A */
+	{ "fb",	    0xc1100000, -1 },	/* BrookTree RAMDAC */
+	{ "spc",    0xe1000000, 2 },	/* internal MB89352 */
+	{ "spc",    0xe1000040, 2 },	/* external MB89352 */
 };
 
 static void mainbus_attach(device_t, device_t, void *);
@@ -72,13 +78,22 @@ mainbus_match(device_t parent, cfdata_t 
 static void
 mainbus_attach(device_t parent, device_t self, void *args)
 {
-	int i;
+	int i, ndevs;
+	const struct mainbus_attach_args *devs;
+	struct mainbus_attach_args ma;
 	
-	if (machtype == LUNA_II)
-		devs[1].ma_addr = 0xf0000000;
+	if (machtype == LUNA_II) {
+		devs = luna2_devs;
+		ndevs = __arraycount(luna2_devs);
+	} else {
+		devs = luna_devs;
+		ndevs = __arraycount(luna_devs);
+	}
 	printf("\n");
-	for (i = 0; i < sizeof(devs)/sizeof(devs[0]); i++)
-		config_found(self, (void *)&devs[i], mainbus_print);
+	for (i = 0; i < ndevs; i++) {
+		ma = devs[i];
+		config_found(self, &ma, mainbus_print);
+	}
 }
 
 static int

Reply via email to