On Thu, 28 May 2020 17:01:48 +0900 (JST) YASUOKA Masahiko <yasu...@openbsd.org> wrote: > Hi, > > I'd like to conclude this issue. > > On Fri, 21 Feb 2020 14:09:07 +0900 (JST) > YASUOKA Masahiko <yasu...@openbsd.org> wrote: >> I am testing a new hardware, HPE DL20 Gen10. >> >> When efiboot starts the kernel, the video display becomes distorted >> and never recovered until CPU reset. >> >> Our kernel tries to initialized console twice, first trial is done >> before getting boot info and second trial is done after getting boot >> info. Since EFI framebuffer needs "boot info", it is initialized on >> second trial. >> >> On HPE DL20 Gen10, probing vga is succeeded on first trial, the kernel >> selects vga for the console, but actually it is broken. On usual >> machines which boot with EFI, the problem doesn't happen since they >> have no vga. > > If we have a way to detect whether the machine has VGA. ACPI > FADT_NO_VGA was a candidate. But that bit is cleard both on my "HPE > DL20 Gen10" and Andrew Daugherity's Dell PowerEdge R230. Also the > problem newly posted at misc@ (*) might be the same problem.
Above paragraph may be unclear. Let me update it by the following paragraph. If we have a way to detect whether the machine has VGA, we thought we can select VGA or EFI framebuffer safely. ACPI FADT_NO_VGA was a candidate. But the bit is cleared both on my "HPE DL20 Gen10" and Andrew Daugherity's Dell PowerEdge R230. Also the problem newly posted at misc@ (*) might be the same problem. > (*) https://marc.info/?l=openbsd-misc&m=159064773219779&w=2 > > I think having the diff folowing is the best for this momemnt. > The diff does: > > - move cninit() after parsing bootinfo > - give up the debug message which can be enabled if BOOTINFO_DEBUG is > defined > > ok? > > Index: sys/arch/amd64/amd64/machdep.c > =================================================================== > RCS file: /disk/cvs/openbsd/src/sys/arch/amd64/amd64/machdep.c,v > retrieving revision 1.264 > diff -u -p -r1.264 machdep.c > --- sys/arch/amd64/amd64/machdep.c 16 May 2020 14:44:44 -0000 1.264 > +++ sys/arch/amd64/amd64/machdep.c 28 May 2020 07:40:14 -0000 > @@ -1395,11 +1395,6 @@ init_x86_64(paddr_t first_avail) > i8254_startclock(); > > /* > - * Attach the glass console early in case we need to display a panic. > - */ > - cninit(); > - > - /* > * Initialize PAGE_SIZE-dependent variables. > */ > uvm_setpagesize(); > @@ -1421,6 +1416,8 @@ init_x86_64(paddr_t first_avail) > } else > panic("invalid /boot"); > > + cninit(); > + > /* > * Memory on the AMD64 port is described by three different things. > * > @@ -1927,12 +1924,6 @@ getbootinfo(char *bootinfo, int bootinfo > bios_ddb_t *bios_ddb; > bios_bootduid_t *bios_bootduid; > bios_bootsr_t *bios_bootsr; > - int docninit = 0; > - > -#undef BOOTINFO_DEBUG > -#ifdef BOOTINFO_DEBUG > - printf("bootargv:"); > -#endif > > for (q = (bootarg32_t *)bootinfo; > (q->ba_type != BOOTARG_END) && > @@ -1942,24 +1933,15 @@ getbootinfo(char *bootinfo, int bootinfo > switch (q->ba_type) { > case BOOTARG_MEMMAP: > bios_memmap = (bios_memmap_t *)q->ba_arg; > -#ifdef BOOTINFO_DEBUG > - printf(" memmap %p", bios_memmap); > -#endif > break; > case BOOTARG_DISKINFO: > bios_diskinfo = (bios_diskinfo_t *)q->ba_arg; > -#ifdef BOOTINFO_DEBUG > - printf(" diskinfo %p", bios_diskinfo); > -#endif > break; > case BOOTARG_APMINFO: > /* generated by i386 boot loader */ > break; > case BOOTARG_CKSUMLEN: > bios_cksumlen = *(u_int32_t *)q->ba_arg; > -#ifdef BOOTINFO_DEBUG > - printf(" cksumlen %d", bios_cksumlen); > -#endif > break; > case BOOTARG_PCIINFO: > /* generated by i386 boot loader */ > @@ -1983,15 +1965,8 @@ getbootinfo(char *bootinfo, int bootinfo > comconsaddr = consaddr; > comconsrate = cdp->conspeed; > comconsiot = X86_BUS_SPACE_IO; > - > - /* Probe the serial port this time. */ > - docninit++; > } > #endif > -#ifdef BOOTINFO_DEBUG > - printf(" console 0x%x:%d", > - cdp->consdev, cdp->conspeed); > -#endif > } > break; > case BOOTARG_BOOTMAC: > @@ -2023,8 +1998,6 @@ getbootinfo(char *bootinfo, int bootinfo > > case BOOTARG_EFIINFO: > bios_efiinfo = (bios_efiinfo_t *)q->ba_arg; > - if (bios_efiinfo->fb_addr != 0) > - docninit++; > break; > > case BOOTARG_UCODE: > @@ -2032,18 +2005,9 @@ getbootinfo(char *bootinfo, int bootinfo > break; > > default: > -#ifdef BOOTINFO_DEBUG > - printf(" unsupported arg (%d) %p", q->ba_type, > - q->ba_arg); > -#endif > break; > } > } > - if (docninit > 0) > - cninit(); > -#ifdef BOOTINFO_DEBUG > - printf("\n"); > -#endif > } > > int