Hi,
On Sun, 11 Jun 2017 19:24:45 +0200
Post by Åukasz JendrysikToday I tried for first time installing openBSD on a physical machine.
You probably figured out that I'm new to openBSD and I hope for your
understanding.
Now to the point: when I boot in UEFI native mode (without CSM), my
display gets crazy producing fancy glitch art, see attached glitch.png.
I also attach dmesg from both boot modes -- UEFI Hybrid (with CSM) and
UEFI Native (without CSM). Didn't notice any meaningful differences though.
Tested on HP EliteBook 2570p and openBSD 6.1 amd64. Unfortunately I
didn't test -current yet.
Please let me know if I can provide you with any details regarding this
issue.
Can you test the diff attached at last or
http://yasuoka.net/~yasuoka/BOOTX64.EFI
The boot program is launched, please type "machine test<Enter>" and
show me the result?
diff --git a/sys/arch/amd64/stand/efiboot/efiboot.c b/sys/arch/amd64/stand/efiboot/efiboot.c
index 9b6d5fc00fd..0f2613a2a15 100644
--- a/sys/arch/amd64/stand/efiboot/efiboot.c
+++ b/sys/arch/amd64/stand/efiboot/efiboot.c
@@ -855,3 +855,59 @@ Xpoweroff_efi(void)
EFI_CALL(RS->ResetSystem, EfiResetShutdown, EFI_SUCCESS, 0, NULL);
return (0);
}
+
+
+int
+Xtest(void)
+{
+ int i, bestmode = -1;
+ EFI_STATUS status;
+ EFI_GRAPHICS_OUTPUT *gop;
+ EFI_GRAPHICS_OUTPUT_MODE_INFORMATION
+ *gopi = NULL;
+ UINTN sz, gopsiz, bestsiz = 0;
+
+ status = EFI_CALL(BS->LocateProtocol, &gop_guid, NULL, (void **)&gop);
+ if (!EFI_ERROR(status)) {
+ for (i = 0; i < gop->Mode->MaxMode; i++) {
+ status = EFI_CALL(gop->QueryMode, gop, i, &sz, &gopi);
+ if (EFI_ERROR(status))
+ continue;
+ gopsiz = gopi->HorizontalResolution *
+ gopi->VerticalResolution;
+ if (gopsiz > bestsiz) {
+ bestmode = i;
+ bestsiz = gopsiz;
+ }
+ }
+ if (bestmode >= 0) {
+ status = EFI_CALL(gop->SetMode, gop, bestmode);
+ if (EFI_ERROR(status) && gop->Mode->Mode != bestmode)
+ printf("GOP setmode failed(%d)\n", status);
+ }
+ gopi = gop->Mode->Info;
+ printf(
+ "FrameBufferBase = 0x%lx\n"
+ "FrameBufferSize = 0x%x\n"
+ "VerticalResolution = %u\n"
+ "HorizontalResolution = %u\n"
+ "PixelsPerScanLine = %u\n"
+ "PixelFormat = %d\n"
+ " RedMask = 0x%lx\n"
+ " GreenMask = 0x%lx\n"
+ " BlueMask = 0x%lx\n"
+ " ReservedMask = 0x%lx\n",
+ gop->Mode->FrameBufferBase,
+ gop->Mode->FrameBufferSize,
+ gopi->VerticalResolution,
+ gopi->HorizontalResolution,
+ gopi->PixelsPerScanLine,
+ gopi->PixelFormat,
+ gopi->PixelInformation.RedMask,
+ gopi->PixelInformation.GreenMask,
+ gopi->PixelInformation.BlueMask,
+ gopi->PixelInformation.ReservedMask);
+ }
+
+ return (0);
+}
diff --git a/sys/arch/amd64/stand/libsa/cmd_i386.c b/sys/arch/amd64/stand/libsa/cmd_i386.c
index 592cca49547..d5c014ad31b 100644
--- a/sys/arch/amd64/stand/libsa/cmd_i386.c
+++ b/sys/arch/amd64/stand/libsa/cmd_i386.c
@@ -40,6 +40,7 @@
#ifdef EFIBOOT
#include "efiboot.h"
#include "efidev.h"
+int Xtest(void);
#endif
extern const char version[];
@@ -64,6 +65,7 @@ const struct cmd_table cmd_machine[] = {
{ "video", CMDT_CMD, Xvideo_efi },
{ "exit", CMDT_CMD, Xexit_efi },
{ "poweroff", CMDT_CMD, Xpoweroff_efi },
+ { "test", CMDT_CMD, Xtest },
#endif
#ifdef DEBUG
{ "regs", CMDT_CMD, Xregs },