> Date: Wed, 3 Feb 2016 16:53:06 -0500
> From: James Hastings <[email protected]>
> 
> For information: printf from uncorrupted efiboot.
> 
> ei.config_acpi:               0x66bfe014
> ei.config_smbios:     0x66abef98
> ei.fb_addr:           0x80000000
> ei.fb_size:           0x420000
> ei.fb_width:          1366
> ei.fb_height:         768
> ei.fb_pixpsl:         1408

That looks much better.

I suspect that what's happening is that the QueryMode() calls
overwrite the current mode information in the GOP structure.  The
SetMode() call will update the information again.  In my book that
means the UEFI BIOS of this machine is borked.  Unfortunately other
machines, like those with the Asus M5A97 LE R2.0 board, are borked in
another way:

  http://comments.gmane.org/gmane.os.openbsd.misc/226553

Yasuoka, what do you think of the diff below?  It will do the
SetMode() call even if the "best" mode is the same as the current
mode, but doesn't print a warning if the SetMode() call fails in that
case.

Joe, does efiboot still work with this diff on your machine?


Index: efiboot.c
===================================================================
RCS file: /home/cvs/src/sys/arch/amd64/stand/efiboot/efiboot.c,v
retrieving revision 1.10
diff -u -p -r1.10 efiboot.c
--- efiboot.c   26 Nov 2015 20:26:20 -0000      1.10
+++ efiboot.c   3 Feb 2016 23:28:08 -0000
@@ -526,9 +526,9 @@ efi_makebootargs(void)
                                bestsiz = gopsiz;
                        }
                }
-               if (bestmode >= 0 && conout->Mode->Mode != bestmode) {
+               if (bestmode >= 0) {
                        status = EFI_CALL(gop->SetMode, gop, bestmode);
-                       if (EFI_ERROR(status))
+                       if (EFI_ERROR(status) && gop->Mode->Mode != bestmode)
                                printf("GOP setmode failed(%d)\n", status);
                }
 

Reply via email to