• Max Staudt's avatar
    fbdev/efifb: Fix 16 color palette entry calculation · 16654a56
    Max Staudt authored
    commit d50b3f43 upstream.
    
    When using efifb with a 16-bit (5:6:5) visual, fbcon's text is rendered
    in the wrong colors - e.g. text gray (#aaaaaa) is rendered as green
    (#50bc50) and neighboring pixels have slightly different values
    (such as #50bc78).
    
    The reason is that fbcon loads its 16 color palette through
    efifb_setcolreg(), which in turn calculates a 32-bit value to write
    into memory for each palette index.
    Until now, this code could only handle 8-bit visuals and didn't mask
    overlapping values when ORing them.
    
    With this patch, fbcon displays the correct colors when a qemu VM is
    booted in 16-bit mode (in GRUB: "set gfxpayload=800x600x16").
    
    Fixes: 7c83172b ("x86_64 EFI boot support: EFI frame buffer driver")  # v2.6.24+
    Signed-off-by: default avatarMax Staudt <mstaudt@suse.de>
    Acked-By: default avatarPeter Jones <pjones@redhat.com>
    Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
    Signed-off-by: default avatarWilly Tarreau <w@1wt.eu>
    16654a56
efifb.c 18.7 KB