Re: Possible fix for DEC 2000 / Jensen

Izumi Tsutsui <[email protected]>
Newsgroups gmane.os.netbsd.ports.alpha
Message-ID <[email protected]>
Hi,

> First of all thanks for committing the patch and there is still hope that
> the Jensen will ever run NetBSD :)
> I have tried to boot the latest snapshot, but it still hangs  at the same
> point.

Umm, bad news..

> Full log attached.
> 
> [   1.0000000] vga0 at isa0 port 0x3b0-0x3df iomem 0xa0000-0xbffff
> [   1.0000000] wsdisplay0 at vga0 (kbdmux ignored)
> [   1.0000000] fdc0 at isa0 port 0x3f0-0x3f7 irq 6 drq 2
> 
> As always I am ready to test anything as it is sitting below my desk.

I wonder when COM_REG_MCR is written on startup because
cominit() doesn't refer sc->sc_mcr on writing COM_REG_MCR
(because it's called from early cninit).
 https://nxr.netbsd.org/xref/src/sys/dev/ic/com.c?r=1.359#2461

Could you try the following patch?
(if you need a pre-build kernel please let me know)

Index: sys/arch/alpha/jensenio/com_jensenio.c
===================================================================
RCS file: /cvsroot/src/sys/arch/alpha/jensenio/com_jensenio.c,v
retrieving revision 1.16
diff -u -p -d -r1.16 com_jensenio.c
--- sys/arch/alpha/jensenio/com_jensenio.c	19 Sep 2020 16:54:34 -0000	1.16
+++ sys/arch/alpha/jensenio/com_jensenio.c	22 Sep 2020 15:56:05 -0000
@@ -93,6 +93,7 @@ com_jensenio_attach(device_t parent, dev
 	struct com_jensenio_softc *jsc = device_private(self);
 	struct com_softc *sc = &jsc->sc_com;
 	struct jensenio_attach_args *ja = aux;
+	struct com_regs *regsp = &sc->sc_regs;
 	bus_space_handle_t ioh;
 
 	sc->sc_dev = self;
@@ -102,7 +103,7 @@ com_jensenio_attach(device_t parent, dev
 		aprint_error(": can't map i/o space\n");
 		return;
 	}
-	com_init_regs(&sc->sc_regs, ja->ja_iot, ioh, ja->ja_ioaddr);
+	com_init_regs(regsp, ja->ja_iot, ioh, ja->ja_ioaddr);
 
 	sc->sc_frequency = COM_FREQ;
 
@@ -110,11 +111,13 @@ com_jensenio_attach(device_t parent, dev
 	 * According to comments in Linux drivers/tty/serial/8250/8250.h,
 	 * the driver has to set OUT1 and OUT2 lines for "some ALPHA"
 	 * otherwise "the machine locks up with endless interrupts."
-	 * Note OUT2 (MCR_IENABLE) is set in MI com_attach_subr()
-	 * so we have to set OUT1 (MCR_DSR) in the MD attachment.
+	 * Note OUT2 (MCR_IENABLE) is also set in MI com_attach_subr()
+	 * but we have to set them before interrupts are enabled.
 	 * See also PR/36628.
 	 */
-	SET(sc->sc_mcr, MCR_DRS);
+	SET(sc->sc_mcr, MCR_DRS | MCR_IENABLE);
+	bus_space_write_1(regsp->cr_iot, regsp->cr_ioh,
+	    regsp->cr_map[COM_REG_MCR], sc->sc_mcr);
 
 	com_attach_subr(sc);
 


Thanks,

---
Izumi Tsutsui
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.