NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

port-vax/58261: lcg driver breaks MicroVAX 3100 M40 due to same board type



>Number:         58261
>Category:       port-vax
>Synopsis:       lcg driver breaks MicroVAX 3100 M40 due to same board type
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    port-vax-maintainer
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed May 15 16:45:00 +0000 2024
>Originator:     NCommander
>Release:        10
>Organization:
Restless Systems LLC
>Environment:
NetBSD soap 10.99.10 NetBSD 10.99.10 (GENERIC) #33: Fri May  3 09:44:54 UTC 2024  ncmdr%soapmaker.lan@localhost:/home/ncmdr/netbsd-src/sys/arch/vax/compile/obj/GENERIC vax

>Description:
NetBSD 8 GENERIC doesn't boot on this MicroVAX due to the lcg.c driver being enabled by default. This driver is meant to initialize the framebuffer on the VAXStation 4000 VLC. The MicroVAX 3100 M40 is essentially the same machine as the the VAXstation, so VAX_BTYP_48 is true, and the driver gets attached.

Internally, NetBSD treats this and the VAXstation 4000 VLC as the same machine, with determination in locore being a flag check on the SIE register. The lcg driver isn't included on the INSTALL kernel, so install.ram worked fine when I loaded it via MOP.

I sent a longer description to port-vax with dmesg and more information here: https://mail-index.netbsd.org/port-vax/2024/05/01/msg005016.html
>How-To-Repeat:
Install any recent version of NetBSD on a VAX board type 46 or 48 that lacks a framebuffer.
>Fix:
OpenBSD 5.8's lcg.c works, but it does quite a bit more checks on the system platform. This patch uses the same check on siedata as locore to determine microvax vs. vaxstation.

NetBSD 10 and current work if lcg is disabled in the config.

I came up with this patch allows the MicroVAX to boot up, although I don't have a VAXstation 4000 VLC to test on.
---

diff --git a/sys/arch/vax/vsa/lcg.c b/sys/arch/vax/vsa/lcg.c
index 0178c069cb08..0808b24f4faa 100644
--- a/sys/arch/vax/vsa/lcg.c
+++ b/sys/arch/vax/vsa/lcg.c
@@ -438,6 +438,9 @@ lcg_match(struct device *parent, struct cfdata *match, void *aux)
        if ((vax_boardtype != VAX_BTYP_46) && (vax_boardtype != VAX_BTYP_48))
                return 0;
 
+       if (vax_siedata & 0x1)
+               return 0; /* is microvax */
+
        *ch = 1;
        if ((*ch & 1) == 0)
                return 0;
@@ -457,6 +460,9 @@ lcg_attach(struct device *parent, struct device *self, void *aux)
        struct vsbus_attach_args *va = aux;
        struct wsemuldisplaydev_attach_args aa;
 
+       if (vax_siedata & 0x1)
+               return; /* is microvax */
+
        printf("\n");
        aa.console = lcgaddr != NULL;
 
@@ -956,6 +962,9 @@ lcgcnprobe(struct consdev *cndev)
        if (vax_confdata & 0x100)
                return; /* Diagnostic console */
 
+       if (vax_siedata & 0x1)
+               return; /* is microvax */
+
        lcg_init_common(NULL, NULL);
 
        /* Set up default LUT */



Home | Main Index | Thread Index | Old Index