Re: Performa 475 and OpenBSD 4.0

Miod Vallat <[email protected]> Tue, 26 Sep 2006 18:26:52 +0000
Newsgroups gmane.os.openbsd.mac68k
Message-ID <[email protected]>
> I am running 4.0 on a Performa 475.  After updating my source code on 
> Sep 22 and rebuilding the kernel,  the keyboard no longer worked.  
> After I backed out the changed made on 9/17/2006 to 
> src/sys/arch/mac68k/mac68k/clock.c and rebuilt the kernel, the keyboard 
>  then worked again.  Since I am not familiar with Mac hardware, I am 
> not sure if there is a configuration item that I might need to change 
> before using the new version of clock.c, so I thought I would ask 
> before submitting a bug report.

Damned. My fumble, sorry. I have reverted the problematic part of the
diff.

Can you try the following diff on your LC475 (in addition to the clock.c
revert you did), and report whether things still run ok?

Thanks,
Miod

Index: include/viareg.h
===================================================================
RCS file: /cvs/src/sys/arch/mac68k/include/viareg.h,v
retrieving revision 1.18
diff -u -p -r1.18 viareg.h
--- include/viareg.h	2006/01/13 21:02:01	1.18
+++ include/viareg.h	2006/09/26 18:20:42
@@ -212,6 +212,7 @@ typedef SLIST_HEAD(, via2hand)	via2hand_
 
 void	via_init(void);
 void	via_powerdown(void);
+void	via_set_aux_interrupts(void);
 void	via_set_modem(int);
 void	add_nubus_intr(int, int (*)(void *), void *, const char *);
 void	enable_nubus_intr(void);
Index: mac68k/machdep.c
===================================================================
RCS file: /cvs/src/sys/arch/mac68k/mac68k/machdep.c,v
retrieving revision 1.134
diff -u -p -r1.134 machdep.c
--- mac68k/machdep.c	2006/09/22 22:15:19	1.134
+++ mac68k/machdep.c	2006/09/26 18:20:43
@@ -391,6 +391,7 @@ cpu_startup(void)
 	 */
 	printf(version);
 	identifycpu();
+	via_set_aux_interrupts();
 
 	vers = mac68k_machine.booter_version;
 	if (vers < CURRENTBOOTERVER) {
@@ -1586,14 +1587,6 @@ setmachdep()
 		mac68k_machine.scsi96 = 1;
 		via_reg(VIA1, vIER) = 0x7f;	/* disable VIA1 int */
 		via_reg(VIA2, vIER) = 0x7f;	/* disable VIA2 int */
-
-		/* Enable A/UX interrupt scheme */
-		mac68k_machine.aux_interrupts = 1;
-		via_reg(VIA1, vBufB) &= (0xff ^ DB1O_AuxIntEnb);
-		via_reg(VIA1, vDirB) |= DB1O_AuxIntEnb;
-		mac68k_machine.via1_ipl = 6;
-		mac68k_machine.via2_ipl = 2;
-
 		break;
 	case MACH_CLASSAV:
 		VIA2 = VIA2OFF;
Index: mac68k/via.c
===================================================================
RCS file: /cvs/src/sys/arch/mac68k/mac68k/via.c,v
retrieving revision 1.28
diff -u -p -r1.28 via.c
--- mac68k/via.c	2006/06/30 15:12:47	1.28
+++ mac68k/via.c	2006/09/26 18:20:44
@@ -175,6 +175,28 @@ via_init()
 }
 
 /*
+ * Enable A/UX style interrupt scheme now if this model supports it.
+ */
+void
+via_set_aux_interrupts()
+{
+	switch (current_mac_model->class) {
+	case MACH_CLASSQ:
+	case MACH_CLASSQ2:
+		mac68k_machine.aux_interrupts = 1;
+		via_reg(VIA1, vBufB) &= (0xff ^ DB1O_AuxIntEnb);
+		via_reg(VIA1, vDirB) |= DB1O_AuxIntEnb;
+
+		intr_disestablish(mac68k_machine.via1_ipl);
+		mac68k_machine.via1_ipl = 6;
+		intr_establish(via1_intr, NULL, mac68k_machine.via1_ipl, "via1");
+		/* mac68k_machine.via2_ipl = 2; unchanged */
+		intr_init();
+		break;
+	}
+}
+
+/*
  * Set the state of the modem serial port's clock source.
  */
 void