summaryrefslogtreecommitdiff
path: root/vgasrc
diff options
context:
space:
mode:
authorMatt DeVillier <matt.devillier@puri.sm>2018-09-11 16:54:53 -0500
committerKevin O'Connor <kevin@koconnor.net>2018-09-18 13:35:30 -0400
commitbf8e4f902c3608f9e76bba3710812e51560a2ccc (patch)
tree10a1303fed12892545da111007daf1a35ff8123a /vgasrc
parentbcd82420a32d1fe597a88e601959e9d5fe4c70df (diff)
downloadqemu-seabios-bf8e4f902c3608f9e76bba3710812e51560a2ccc.tar.gz
SeaVGABios/cbvga: Fix bpp for coreboot framebuffer
Commit 4b42cc4 [SeaVGABios/cbvga: Advertise correct pixel format] neglected to wrap the cbfb mask size components in GET_FARVAR(), which resulted in a bogus value for bpp, breaking output on most/all devices. Fix this by adding GET_FARVAR() as appropriate. Additionally, some newer ChromeOS devices still fail even with this fix, so fall back to using the coreboot reported bit depth if the calculated valid is invalid. TEST: build/boot a variety of devices (google/[reef,eve], purism/librem_skl) using coreboot framebuffer init, verify SeaBIOS boot menu prompt visible. Signed-off-by: Matt DeVillier <matt.devillier@puri.sm>
Diffstat (limited to 'vgasrc')
-rw-r--r--vgasrc/cbvga.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/vgasrc/cbvga.c b/vgasrc/cbvga.c
index 859524c..438d8fd 100644
--- a/vgasrc/cbvga.c
+++ b/vgasrc/cbvga.c
@@ -312,11 +312,17 @@ cbvga_setup(void)
}
u64 addr = GET_FARVAR(0, cbfb->physical_address);
- u8 bpp = cbfb->blue_mask_size + cbfb->green_mask_size
- + cbfb->red_mask_size + cbfb->reserved_mask_size;
+ u8 bpp = GET_FARVAR(0, cbfb->blue_mask_size)
+ + GET_FARVAR(0, cbfb->green_mask_size)
+ + GET_FARVAR(0, cbfb->red_mask_size)
+ + GET_FARVAR(0, cbfb->reserved_mask_size);
u32 xlines = GET_FARVAR(0, cbfb->x_resolution);
u32 ylines = GET_FARVAR(0, cbfb->y_resolution);
u32 linelength = GET_FARVAR(0, cbfb->bytes_per_line);
+ //fall back to coreboot reported bpp if calculated value invalid
+ if (bpp != 15 && bpp != 16 && bpp != 24 && bpp != 32)
+ bpp = GET_FARVAR(0, cbfb->bits_per_pixel);
+
dprintf(1, "Found FB @ %llx %dx%d with %d bpp (%d stride)\n"
, addr, xlines, ylines, bpp, linelength);