lkml.org 
[lkml]   [2016]   [Nov]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.12 31/72] fbdev/efifb: Fix 16 color palette entry calculation
    Date
    From: Max Staudt <mstaudt@suse.de>

    3.12-stable review patch. If anyone has any objections, please let me know.

    ===============

    commit d50b3f43db739f03fcf8c0a00664b3d2fed0496e 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: 7c83172b98e5 ("x86_64 EFI boot support: EFI frame buffer driver") # v2.6.24+
    Signed-off-by: Max Staudt <mstaudt@suse.de>
    Acked-By: Peter Jones <pjones@redhat.com>
    Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
    Signed-off-by: Jiri Slaby <jslaby@suse.cz>
    ---
    drivers/video/efifb.c | 6 +++---
    1 file changed, 3 insertions(+), 3 deletions(-)

    diff --git a/drivers/video/efifb.c b/drivers/video/efifb.c
    index fcb950031246..dbd5fb207869 100644
    --- a/drivers/video/efifb.c
    +++ b/drivers/video/efifb.c
    @@ -54,9 +54,9 @@ static int efifb_setcolreg(unsigned regno, unsigned red, unsigned green,
    return 1;

    if (regno < 16) {
    - red >>= 8;
    - green >>= 8;
    - blue >>= 8;
    + red >>= 16 - info->var.red.length;
    + green >>= 16 - info->var.green.length;
    + blue >>= 16 - info->var.blue.length;
    ((u32 *)(info->pseudo_palette))[regno] =
    (red << info->var.red.offset) |
    (green << info->var.green.offset) |
    --
    2.10.2
    \
     
     \ /
      Last update: 2016-11-07 14:18    [W:4.024 / U:0.060 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site