Add work-around for bug #3167
authorMichael Neumann <mneumann@ntecs.de>
Wed, 9 Jan 2019 20:41:47 +0000 (21:41 +0100)
committerMichael Neumann <mneumann@ntecs.de>
Wed, 9 Jan 2019 21:05:54 +0000 (22:05 +0100)
"UEFI boot hangs right after initializing UEFI framebuffer."
It actually boots but the system console is not shown.

I had this issue on a TUXEDO InfinityBook Pro 14v4.
This commits allows me to boot by setting loader tunable
machdep.hack_efifb_probe_early=1.

This commit is not intended to be there forever.
It's there for people who experience the same issue and want
a quick and easy way to test if this fixes their booting issue.

Discussed-with: dillon

sys/boot/common/loader.8
sys/platform/pc64/x86_64/machdep.c

index fb8ad2b..f30be7c 100644 (file)
@@ -792,6 +792,10 @@ suggested values are 8192, 16384, or 32768.
 .It Va nfsroot.rahead
 Override the default read-ahead used by netbooted root mounts.
 The default is 4 which is reasonable.  Suggested values are 1 through 8.
+.It Va machdep.hack_efifb_probe_early
+Setting this to 1 works around an issue that occurs on some recent
+systems where there is no system console when booting via UEFI.
+See bug report #3167.
 .El
 .Sh FILES
 .Bl -tag -width /boot/defaults/dloader.menu -compact
index 795dbe2..162f175 100644 (file)
@@ -2413,9 +2413,25 @@ do_next:
        for (off = 0; off < msgbuf_size; off += PAGE_SIZE) {
                pmap_kenter((vm_offset_t)msgbufp + off, avail_end + off);
        }
+
        /* Try to get EFI framebuffer working as early as possible */
-       if (have_efi_framebuffer)
-               efi_fb_init_vaddr(1);
+       {
+               /*
+                * HACK: Setting machdep.hack_efifb_probe_early=1 works around
+                * an issue that occurs on some recent systems where there is
+                * no system console when booting via UEFI. Bug #3167.
+                *
+                * NOTE: This is not intended to be a permant fix.
+                */
+
+               int hack_efifb_probe_early = 0;
+               TUNABLE_INT_FETCH("machdep.hack_efifb_probe_early", &hack_efifb_probe_early);
+
+               if (hack_efifb_probe_early)
+                       probe_efi_fb(1);
+               else if (have_efi_framebuffer)
+                       efi_fb_init_vaddr(1);
+       }
 }
 
 struct machintr_abi MachIntrABI;