> 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); }
