On Sat, 19 Dec 2020, Brian Buhrow wrote:
When the machine boots, the BIOS sets up the display as it should and the VGA port works. ... If it helps, I can log in without the screen on the console and I get a window of 64 lines X 160 characters. That seems like a lot of text on a VGA screen.
The default font is 8x16 (WxH). So, on an 1280x1024 pixel display you will have 64x160 chars.
... [ 7.144810] intelfb0 at i915drmkms0 [ 7.144810] intelfb0: framebuffer at 0xffff848139e34000, size 1280x1024, depth 32, stride 5120 [ 8.254809] wsdisplay0 at intelfb0 kbdmux 1: console (default, vt100 emulation), using wskbd0 [ 8.265725] wsmux1: connecting to wsdisplay0 [ 8.265725] wskbd1: connecting to wsdisplay0
I wonder how BIOS/intelfb configured a 1280x1024x32 display without an EDID. Might be a DRM-driver issue as mrg@ hinted. Let's look at your EDID. 1. Get the edid-decode sources from https://git.linuxtv.org/edid-decode.git/ and compile it. It compiles cleanly on NetBSD. 2. Compile the program below, and run it like this: ./wsedid | edid-decode > /tmp/edid.txt If the EDID and checksum look OK, then the DRMKMS driver will need looking into. (And, in the interim, a program to set the correct timings using libdrm may need to be written.--if you're not happy with genfb.) If they don't look OK, then unplug the CRT and try again. My old ViewSonic LCD monitor has a "soft" off-button, and switching the LCD off using that does no good when it's misbehaving. Makefile: ========= CC ?= gcc CFLAGS ?= -Wall -pedantic -g LDFLAGS ?= EXE = wsedid SRC = ${EXE}.c ${EXE}: ${SRC} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ ${SRC} clean: rm -f ${EXE} wsedid.c: ========= /** * wsedid.c: Print NetBSD/OpenBSD EDID info. using wsdisplay(4). */ #include <dev/wscons/wsconsio.h> #include <sys/ioctl.h> #include <sys/utsname.h> #include <err.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char* argv[]) { struct utsname un; struct wsdisplayio_edid_info ei; char ebuf[4096]; char* dev, *os; int fd, rc = EXIT_FAILURE; if ((uname(&un)) < 0) err(rc, "uname failed"); os = un.sysname; if (argc == 2) dev = argv[1]; else { if (strcmp(os, "NetBSD") == 0) dev = "/dev/ttyE0"; else if (strcmp(os, "OpenBSD") == 0) dev = "/dev/ttyC0"; else errx(rc, "%s: OS is not supported", os); } ei.edid_data = ebuf; ei.buffer_size = sizeof ebuf; if ((fd = open(dev, O_RDONLY)) < 0) err(rc, "%s: open failed", dev); if (ioctl(fd, WSDISPLAYIO_GET_EDID, &ei) < 0) err(rc, "ioctl(WSDISPLAYIO_GET_EDID) failed"); fprintf(stderr, "%s EDID data_size = %u\n", dev, ei.data_size); fwrite(ebuf, 1, ei.data_size, stdout); rc = EXIT_SUCCESS; return rc; } ===== -RVP
