On Fri, 15 Jul 2022, Robert Elz wrote:
If that is all it is, it is barely worth fixing ... though this must have happened sometime in the 9.99.9[78] series (sometime after early last Dec).
Farther back than that I think: 9.2_STABLE does the same thing. On Fri, 15 Jul 2022, Michael van Elst wrote:
Whatever driver you use either doesn't translate correctly or badly assumes some hardware configuration (e.g. color palette) when booting.
Unsurprisingly, EFI also has a colour-index similar to VGA (see: /usr/src/sys/external/bsd/gnu-efi/dist/inc/eficon.h). I tried fixing the indexes like this, but, it doesn't for some (autoconfig?) reason. Can only look into this after I come back from my road-trip. --- diff -urN a/src/sys/arch/x86/x86/genfb_machdep.c b/src/sys/arch/x86/x86/genfb_machdep.c --- a/src/sys/arch/x86/x86/genfb_machdep.c 2021-01-28 01:57:31.000000000 +0000 +++ b/src/sys/arch/x86/x86/genfb_machdep.c 2022-07-15 23:29:07.334415944 +0000 @@ -163,24 +163,60 @@ return 1; } +/* + * translate WS(=ANSI) color codes to EFI/PC ones + */ +#define bg(x) ((x)<<4U) +static const unsigned char fgansitopc[] = { + WSCOL_BLACK, WSCOL_BLUE, WSCOL_GREEN, WSCOL_CYAN, WSCOL_RED, + WSCOL_MAGENTA, WSCOL_BROWN, WSCOL_WHITE, + WSCOL_LIGHT_GREY, WSCOL_LIGHT_BLUE, WSCOL_LIGHT_GREEN, WSCOL_LIGHT_CYAN, + WSCOL_LIGHT_RED, WSCOL_LIGHT_MAGENTA, WSCOL_LIGHT_BROWN, WSCOL_LIGHT_WHITE +}, bgansitopc[] = { + bg(WSCOL_BLACK), bg(WSCOL_BLUE), bg(WSCOL_GREEN), bg(WSCOL_CYAN), + bg(WSCOL_RED), bg(WSCOL_MAGENTA), bg(WSCOL_BROWN), bg(WSCOL_LIGHT_GREY) +}; +#undef bg + +static void +x86_genfb_pc_colour(long *attr) +{ + uint32_t fg, bg, flag; + long aa; + + rasops_unpack_attr(*attr, &fg, &bg, NULL); + if (__predict_false(fg >= sizeof(fgansitopc) || bg >= sizeof(bgansitopc))) { + aprint_normal("x86_genfb_pc_colour: out of range\n"); + return; + } + flag = *attr & 0xFFFFU; + aa = fgansitopc[fg] << 24 | bgansitopc[bg] << 16 | flag; + aprint_normal("x86_genfb_pc_colour: old = 0x%lX, new = 0x%lX\n", *attr, aa); + *attr = aa; +} + int x86_genfb_cnattach(void) { static int ncalls = 0; struct rasops_info *ri = &x86_genfb_console_screen.scr_ri; - long defattr; + long defattr = 0; /* XXX jmcneill * Defer console initialization until UVM is initialized */ + aprint_normal("x86_genfb_cnattach()\n"); ++ncalls; if (ncalls < 3) return -1; - if (!x86_genfb_init()) + if (!x86_genfb_init()) { + aprint_normal("x86_genfb_init ERROR\n"); return 0; + } ri->ri_ops.allocattr(ri, 0, 0, 0, &defattr); + x86_genfb_pc_colour(&defattr); wsdisplay_preattach(&x86_genfb_stdscreen, ri, 0, 0, defattr); return 1; --- -RVP