From bf8e4f902c3608f9e76bba3710812e51560a2ccc Mon Sep 17 00:00:00 2001 From: Matt DeVillier Date: Tue, 11 Sep 2018 16:54:53 -0500 Subject: 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 --- vgasrc/cbvga.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/vgasrc/cbvga.c b/vgasrc/cbvga.c index 859524cb..438d8fda 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); -- cgit