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.

 (*) 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

Reply via email to