aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4231-drm-amd-display-Don-t-use-optimized-gamma22-with-eet.patch
diff options
context:
space:
mode:
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.patch101
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
+