0824f1
From 4d08ebd4f8dc19dfc36495473b34c34d53650632 Mon Sep 17 00:00:00 2001
0824f1
From: Ladi Prosek <lprosek@redhat.com>
0824f1
Date: Mon, 31 Oct 2016 19:33:05 +0100
0824f1
Subject: vgabios: Reorder video modes to work around a Windows bug
0824f1
0824f1
RH-Author: Ladi Prosek <lprosek@redhat.com>
0824f1
Message-id: <1477924385-6169-1-git-send-email-lprosek@redhat.com>
0824f1
Patchwork-id: 72677
0824f1
O-Subject: [RHEL-7.4/7.3.z seabios PATCH] vgabios: Reorder video modes to work around a Windows bug
0824f1
Bugzilla: 1392028
0824f1
RH-Acked-by: Laszlo Ersek <lersek@redhat.com>
0824f1
RH-Acked-by: Gerd Hoffmann <kraxel@redhat.com>
0824f1
RH-Acked-by: vrozenfe <vrozenfe@redhat.com>
0824f1
0824f1
Windows Server 2016 and Windows 10 RS1 come with a bug in its blue screen
0824f1
of death rendering logic which prevents it from generating crash dumps.
0824f1
0824f1
The bug does not manifest if Windows sees a suitable 32 bpp video mode
0824f1
before a suitable 24 bpp video mode in the list of modes returned from
0824f1
vgabios. This commit moves all 32 bpp modes to the front of the list to
0824f1
make sure that this is always the case.
0824f1
0824f1
Upstream patch:
0824f1
https://www.coreboot.org/pipermail/seabios/2016-October/010963.html
0824f1
0824f1
There are valid concerns upstream about the breaking nature of the fix
0824f1
but for the limited set of operating systems supported by RHEL/RHEV we
0824f1
can easily verify that they are unaffected. So as things stand now, this
0824f1
is a downstream-only patch which will be reverted in the near future;
0824f1
the exact time will depend on Windows 10 RS2 schedule and other factors.
0824f1
The goal is to make sure that our customers running Windows 10 VMs can
0824f1
generate crash dumps.
0824f1
0824f1
Signed-off-by: Ladi Prosek <lprosek@redhat.com>
0824f1
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
0824f1
---
0824f1
 vgasrc/bochsvga.c | 39 ++++++++++++++++++++-------------------
0824f1
 1 file changed, 20 insertions(+), 19 deletions(-)
0824f1
0824f1
diff --git a/vgasrc/bochsvga.c b/vgasrc/bochsvga.c
0824f1
index ec5d101..c5d1511 100644
0824f1
--- a/vgasrc/bochsvga.c
0824f1
+++ b/vgasrc/bochsvga.c
0824f1
@@ -28,6 +28,25 @@ static struct bochsvga_mode
0824f1
     u16 mode;
0824f1
     struct vgamode_s info;
0824f1
 } bochsvga_modes[] VAR16 = {
0824f1
+    /* 32 bpp BOCHS modes */
0824f1
+    { 0x140, { MM_DIRECT, 320,  200,  32, 8, 16, SEG_GRAPH } },
0824f1
+    { 0x141, { MM_DIRECT, 640,  400,  32, 8, 16, SEG_GRAPH } },
0824f1
+    { 0x142, { MM_DIRECT, 640,  480,  32, 8, 16, SEG_GRAPH } },
0824f1
+    { 0x143, { MM_DIRECT, 800,  600,  32, 8, 16, SEG_GRAPH } },
0824f1
+    { 0x144, { MM_DIRECT, 1024, 768,  32, 8, 16, SEG_GRAPH } },
0824f1
+    { 0x145, { MM_DIRECT, 1280, 1024, 32, 8, 16, SEG_GRAPH } },
0824f1
+    { 0x147, { MM_DIRECT, 1600, 1200, 32, 8, 16, SEG_GRAPH } },
0824f1
+    { 0x14c, { MM_DIRECT, 1152, 864,  32, 8, 16, SEG_GRAPH } },
0824f1
+    { 0x177, { MM_DIRECT, 1280, 768,  32, 8, 16, SEG_GRAPH } },
0824f1
+    { 0x17a, { MM_DIRECT, 1280, 800,  32, 8, 16, SEG_GRAPH } },
0824f1
+    { 0x17d, { MM_DIRECT, 1280, 960,  32, 8, 16, SEG_GRAPH } },
0824f1
+    { 0x180, { MM_DIRECT, 1440, 900,  32, 8, 16, SEG_GRAPH } },
0824f1
+    { 0x183, { MM_DIRECT, 1400, 1050, 32, 8, 16, SEG_GRAPH } },
0824f1
+    { 0x186, { MM_DIRECT, 1680, 1050, 32, 8, 16, SEG_GRAPH } },
0824f1
+    { 0x189, { MM_DIRECT, 1920, 1200, 32, 8, 16, SEG_GRAPH } },
0824f1
+    { 0x18c, { MM_DIRECT, 2560, 1600, 32, 8, 16, SEG_GRAPH } },
0824f1
+    { 0x18f, { MM_DIRECT, 1280, 720,  32, 8, 16, SEG_GRAPH } },
0824f1
+    { 0x192, { MM_DIRECT, 1920, 1080, 32, 8, 16, SEG_GRAPH } },
0824f1
     /* standard modes */
0824f1
     { 0x100, { MM_PACKED, 640,  400,  8,  8, 16, SEG_GRAPH } },
0824f1
     { 0x101, { MM_PACKED, 640,  480,  8,  8, 16, SEG_GRAPH } },
0824f1
@@ -56,50 +75,32 @@ static struct bochsvga_mode
0824f1
     { 0x11D, { MM_DIRECT, 1600, 1200, 15, 8, 16, SEG_GRAPH } },
0824f1
     { 0x11E, { MM_DIRECT, 1600, 1200, 16, 8, 16, SEG_GRAPH } },
0824f1
     { 0x11F, { MM_DIRECT, 1600, 1200, 24, 8, 16, SEG_GRAPH } },
0824f1
-    /* BOCHS modes */
0824f1
-    { 0x140, { MM_DIRECT, 320,  200,  32, 8, 16, SEG_GRAPH } },
0824f1
-    { 0x141, { MM_DIRECT, 640,  400,  32, 8, 16, SEG_GRAPH } },
0824f1
-    { 0x142, { MM_DIRECT, 640,  480,  32, 8, 16, SEG_GRAPH } },
0824f1
-    { 0x143, { MM_DIRECT, 800,  600,  32, 8, 16, SEG_GRAPH } },
0824f1
-    { 0x144, { MM_DIRECT, 1024, 768,  32, 8, 16, SEG_GRAPH } },
0824f1
-    { 0x145, { MM_DIRECT, 1280, 1024, 32, 8, 16, SEG_GRAPH } },
0824f1
+    /* 8, 15, 16, and 24 bpp BOCHS modes */
0824f1
     { 0x146, { MM_PACKED, 320,  200,  8,  8, 16, SEG_GRAPH } },
0824f1
-    { 0x147, { MM_DIRECT, 1600, 1200, 32, 8, 16, SEG_GRAPH } },
0824f1
     { 0x148, { MM_PACKED, 1152, 864,  8,  8, 16, SEG_GRAPH } },
0824f1
     { 0x149, { MM_DIRECT, 1152, 864,  15, 8, 16, SEG_GRAPH } },
0824f1
     { 0x14a, { MM_DIRECT, 1152, 864,  16, 8, 16, SEG_GRAPH } },
0824f1
     { 0x14b, { MM_DIRECT, 1152, 864,  24, 8, 16, SEG_GRAPH } },
0824f1
-    { 0x14c, { MM_DIRECT, 1152, 864,  32, 8, 16, SEG_GRAPH } },
0824f1
     { 0x175, { MM_DIRECT, 1280, 768,  16, 8, 16, SEG_GRAPH } },
0824f1
     { 0x176, { MM_DIRECT, 1280, 768,  24, 8, 16, SEG_GRAPH } },
0824f1
-    { 0x177, { MM_DIRECT, 1280, 768,  32, 8, 16, SEG_GRAPH } },
0824f1
     { 0x178, { MM_DIRECT, 1280, 800,  16, 8, 16, SEG_GRAPH } },
0824f1
     { 0x179, { MM_DIRECT, 1280, 800,  24, 8, 16, SEG_GRAPH } },
0824f1
-    { 0x17a, { MM_DIRECT, 1280, 800,  32, 8, 16, SEG_GRAPH } },
0824f1
     { 0x17b, { MM_DIRECT, 1280, 960,  16, 8, 16, SEG_GRAPH } },
0824f1
     { 0x17c, { MM_DIRECT, 1280, 960,  24, 8, 16, SEG_GRAPH } },
0824f1
-    { 0x17d, { MM_DIRECT, 1280, 960,  32, 8, 16, SEG_GRAPH } },
0824f1
     { 0x17e, { MM_DIRECT, 1440, 900,  16, 8, 16, SEG_GRAPH } },
0824f1
     { 0x17f, { MM_DIRECT, 1440, 900,  24, 8, 16, SEG_GRAPH } },
0824f1
-    { 0x180, { MM_DIRECT, 1440, 900,  32, 8, 16, SEG_GRAPH } },
0824f1
     { 0x181, { MM_DIRECT, 1400, 1050, 16, 8, 16, SEG_GRAPH } },
0824f1
     { 0x182, { MM_DIRECT, 1400, 1050, 24, 8, 16, SEG_GRAPH } },
0824f1
-    { 0x183, { MM_DIRECT, 1400, 1050, 32, 8, 16, SEG_GRAPH } },
0824f1
     { 0x184, { MM_DIRECT, 1680, 1050, 16, 8, 16, SEG_GRAPH } },
0824f1
     { 0x185, { MM_DIRECT, 1680, 1050, 24, 8, 16, SEG_GRAPH } },
0824f1
-    { 0x186, { MM_DIRECT, 1680, 1050, 32, 8, 16, SEG_GRAPH } },
0824f1
     { 0x187, { MM_DIRECT, 1920, 1200, 16, 8, 16, SEG_GRAPH } },
0824f1
     { 0x188, { MM_DIRECT, 1920, 1200, 24, 8, 16, SEG_GRAPH } },
0824f1
-    { 0x189, { MM_DIRECT, 1920, 1200, 32, 8, 16, SEG_GRAPH } },
0824f1
     { 0x18a, { MM_DIRECT, 2560, 1600, 16, 8, 16, SEG_GRAPH } },
0824f1
     { 0x18b, { MM_DIRECT, 2560, 1600, 24, 8, 16, SEG_GRAPH } },
0824f1
-    { 0x18c, { MM_DIRECT, 2560, 1600, 32, 8, 16, SEG_GRAPH } },
0824f1
     { 0x18d, { MM_DIRECT, 1280, 720,  16, 8, 16, SEG_GRAPH } },
0824f1
     { 0x18e, { MM_DIRECT, 1280, 720,  24, 8, 16, SEG_GRAPH } },
0824f1
-    { 0x18f, { MM_DIRECT, 1280, 720,  32, 8, 16, SEG_GRAPH } },
0824f1
     { 0x190, { MM_DIRECT, 1920, 1080, 16, 8, 16, SEG_GRAPH } },
0824f1
     { 0x191, { MM_DIRECT, 1920, 1080, 24, 8, 16, SEG_GRAPH } },
0824f1
-    { 0x192, { MM_DIRECT, 1920, 1080, 32, 8, 16, SEG_GRAPH } },
0824f1
 };
0824f1
 
0824f1
 static int dispi_found VAR16 = 0;
0824f1
-- 
0824f1
1.8.3.1
0824f1