lkml.org 
[lkml]   [2018]   [Nov]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 021/205] drm/amd/display: fix gamma not being applied
    Date
    4.19-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: SivapiriyanKumarasamy <sivapiriyan.kumarasamy@amd.com>

    [ Upstream commit 30049754ab7c4b6148dd3cd64af7d54850604582 ]

    [WHY]
    Previously night light forced a full update by
    applying a transfer function update regardless of if it was changed.
    This logic was removed,

    Now gamma surface updates are only applied when there is also a plane
    info update, this does not work in cases such as using the night light
    slider.

    [HOW]
    When moving the night light slider we will perform a full update if
    the gamma has changed and there is a surface, even when the surface
    has not changed. Also get stream updates in setgamma prior to
    update planes and stream.

    Signed-off-by: SivapiriyanKumarasamy <sivapiriyan.kumarasamy@amd.com>
    Reviewed-by: Anthony Koo <Anthony.Koo@amd.com>
    Acked-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/gpu/drm/amd/display/dc/core/dc.c | 19 ++++++++++++++-----
    1 file changed, 14 insertions(+), 5 deletions(-)

    --- a/drivers/gpu/drm/amd/display/dc/core/dc.c
    +++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
    @@ -1120,9 +1120,6 @@ static enum surface_update_type get_plan
    */
    update_flags->bits.bpp_change = 1;

    - if (u->gamma && dce_use_lut(u->plane_info->format))
    - update_flags->bits.gamma_change = 1;
    -
    if (memcmp(&u->plane_info->tiling_info, &u->surface->tiling_info,
    sizeof(union dc_tiling_info)) != 0) {
    update_flags->bits.swizzle_change = 1;
    @@ -1139,7 +1136,6 @@ static enum surface_update_type get_plan
    if (update_flags->bits.rotation_change
    || update_flags->bits.stereo_format_change
    || update_flags->bits.pixel_format_change
    - || update_flags->bits.gamma_change
    || update_flags->bits.bpp_change
    || update_flags->bits.bandwidth_change
    || update_flags->bits.output_tf_change)
    @@ -1229,13 +1225,26 @@ static enum surface_update_type det_surf
    if (u->coeff_reduction_factor)
    update_flags->bits.coeff_reduction_change = 1;

    + if (u->gamma) {
    + enum surface_pixel_format format = SURFACE_PIXEL_FORMAT_GRPH_BEGIN;
    +
    + if (u->plane_info)
    + format = u->plane_info->format;
    + else if (u->surface)
    + format = u->surface->format;
    +
    + if (dce_use_lut(format))
    + update_flags->bits.gamma_change = 1;
    + }
    +
    if (update_flags->bits.in_transfer_func_change) {
    type = UPDATE_TYPE_MED;
    elevate_update_type(&overall_type, type);
    }

    if (update_flags->bits.input_csc_change
    - || update_flags->bits.coeff_reduction_change) {
    + || update_flags->bits.coeff_reduction_change
    + || update_flags->bits.gamma_change) {
    type = UPDATE_TYPE_FULL;
    elevate_update_type(&overall_type, type);
    }

    \
     
     \ /
      Last update: 2018-11-19 19:08    [W:2.480 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site