diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4231-drm-amd-display-Don-t-use-optimized-gamma22-with-eet.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4231-drm-amd-display-Don-t-use-optimized-gamma22-with-eet.patch | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4231-drm-amd-display-Don-t-use-optimized-gamma22-with-eet.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4231-drm-amd-display-Don-t-use-optimized-gamma22-with-eet.patch new file mode 100644 index 00000000..07abae8c --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4231-drm-amd-display-Don-t-use-optimized-gamma22-with-eet.patch @@ -0,0 +1,101 @@ +From f4810baf1e8c60ea47c2ca238f8a5967fbbaa19d Mon Sep 17 00:00:00 2001 +From: Aidan Yang <Aidan.Yang@amd.com> +Date: Wed, 25 Sep 2019 16:57:37 -0400 +Subject: [PATCH 4231/4736] drm/amd/display: Don't use optimized gamma22 with + eetf + +[why] +Optimized gamma22 assumes fixed point distribution which is not true +for eetf true. + +[how] +Use long calculation for eetf. + +Signed-off-by: Aidan Yang <Aidan.Yang@amd.com> +Reviewed-by: Krunoslav Kovac <Krunoslav.Kovac@amd.com> +Acked-by: Leo Li <sunpeng.li@amd.com> +Acked-by: Reza Amini <Reza.Amini@amd.com> +--- + .../amd/display/modules/color/color_gamma.c | 45 +++++++++++++++++-- + 1 file changed, 41 insertions(+), 4 deletions(-) + +diff --git a/drivers/gpu/drm/amd/display/modules/color/color_gamma.c b/drivers/gpu/drm/amd/display/modules/color/color_gamma.c +index 19475cf5ab72..0accdae5e675 100644 +--- a/drivers/gpu/drm/amd/display/modules/color/color_gamma.c ++++ b/drivers/gpu/drm/amd/display/modules/color/color_gamma.c +@@ -370,7 +370,42 @@ static struct fixed31_32 translate_from_linear_space( + return dc_fixpt_mul(args->arg, args->a1); + } + +-static struct fixed31_32 calculate_gamma22(struct fixed31_32 arg) ++ ++static struct fixed31_32 translate_from_linear_space_long( ++ struct translate_from_linear_space_args *args) ++{ ++ const struct fixed31_32 one = dc_fixpt_from_int(1); ++ ++ if (dc_fixpt_lt(one, args->arg)) ++ return one; ++ ++ if (dc_fixpt_le(args->arg, dc_fixpt_neg(args->a0))) ++ return dc_fixpt_sub( ++ args->a2, ++ dc_fixpt_mul( ++ dc_fixpt_add( ++ one, ++ args->a3), ++ dc_fixpt_pow( ++ dc_fixpt_neg(args->arg), ++ dc_fixpt_recip(args->gamma)))); ++ else if (dc_fixpt_le(args->a0, args->arg)) ++ return dc_fixpt_sub( ++ dc_fixpt_mul( ++ dc_fixpt_add( ++ one, ++ args->a3), ++ dc_fixpt_pow( ++ args->arg, ++ dc_fixpt_recip(args->gamma))), ++ args->a2); ++ else ++ return dc_fixpt_mul( ++ args->arg, ++ args->a1); ++} ++ ++static struct fixed31_32 calculate_gamma22(struct fixed31_32 arg, bool use_eetf) + { + struct fixed31_32 gamma = dc_fixpt_from_fraction(22, 10); + +@@ -381,9 +416,13 @@ static struct fixed31_32 calculate_gamma22(struct fixed31_32 arg) + scratch_gamma_args.a3 = dc_fixpt_zero; + scratch_gamma_args.gamma = gamma; + ++ if (use_eetf) ++ return translate_from_linear_space_long(&scratch_gamma_args); ++ + return translate_from_linear_space(&scratch_gamma_args); + } + ++ + static struct fixed31_32 translate_to_linear_space( + struct fixed31_32 arg, + struct fixed31_32 a0, +@@ -947,7 +986,7 @@ static bool build_freesync_hdr(struct pwl_float_data_ex *rgb_regamma, + if (dc_fixpt_lt(scaledX, dc_fixpt_zero)) + output = dc_fixpt_zero; + else +- output = calculate_gamma22(scaledX); ++ output = calculate_gamma22(scaledX, use_eetf); + + rgb->r = output; + rgb->g = output; +@@ -2170,5 +2209,3 @@ bool mod_color_calculate_degamma_curve(enum dc_transfer_func_predefined trans, + rgb_degamma_alloc_fail: + return ret; + } +- +- +-- +2.17.1 + |