aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2929-drm-amd-display-use-clamping-rather-than-truncation-.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2929-drm-amd-display-use-clamping-rather-than-truncation-.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2929-drm-amd-display-use-clamping-rather-than-truncation-.patch113
1 files changed, 113 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2929-drm-amd-display-use-clamping-rather-than-truncation-.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2929-drm-amd-display-use-clamping-rather-than-truncation-.patch
new file mode 100644
index 00000000..70faa40d
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2929-drm-amd-display-use-clamping-rather-than-truncation-.patch
@@ -0,0 +1,113 @@
+From 4070b65a916c71c193c995d97e3c19072bc74bd0 Mon Sep 17 00:00:00 2001
+From: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
+Date: Tue, 28 Nov 2017 16:20:45 -0500
+Subject: [PATCH 2929/4131] drm/amd/display: use clamping rather than
+ truncation for CM fp conversions
+
+Signed-off-by: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
+Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
+Acked-by: Harry Wentland <harry.wentland@amd.com>
+---
+ drivers/gpu/drm/amd/display/dc/basics/fixpt31_32.c | 24 ++++++++++++++++++----
+ .../gpu/drm/amd/display/dc/dcn10/dcn10_cm_common.c | 14 ++++++-------
+ drivers/gpu/drm/amd/display/include/fixed31_32.h | 4 ++--
+ 3 files changed, 29 insertions(+), 13 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/basics/fixpt31_32.c b/drivers/gpu/drm/amd/display/dc/basics/fixpt31_32.c
+index 13f8b8c..011a97f 100644
+--- a/drivers/gpu/drm/amd/display/dc/basics/fixpt31_32.c
++++ b/drivers/gpu/drm/amd/display/dc/basics/fixpt31_32.c
+@@ -554,6 +554,22 @@ static inline uint32_t ux_dy(
+ return result | fractional_part;
+ }
+
++static inline uint32_t clamp_ux_dy(
++ int64_t value,
++ uint32_t integer_bits,
++ uint32_t fractional_bits,
++ uint32_t min_clamp)
++{
++ uint32_t truncated_val = ux_dy(value, integer_bits, fractional_bits);
++
++ if (value >= (1LL << (integer_bits + FIXED31_32_BITS_PER_FRACTIONAL_PART)))
++ return (1 << (integer_bits + fractional_bits)) - 1;
++ else if (truncated_val > min_clamp)
++ return truncated_val;
++ else
++ return min_clamp;
++}
++
+ uint32_t dal_fixed31_32_u2d19(
+ struct fixed31_32 arg)
+ {
+@@ -566,14 +582,14 @@ uint32_t dal_fixed31_32_u0d19(
+ return ux_dy(arg.value, 0, 19);
+ }
+
+-uint32_t dal_fixed31_32_u0d14(
++uint32_t dal_fixed31_32_clamp_u0d14(
+ struct fixed31_32 arg)
+ {
+- return ux_dy(arg.value, 1, 14);
++ return clamp_ux_dy(arg.value, 0, 14, 1);
+ }
+
+-uint32_t dal_fixed31_32_u0d10(
++uint32_t dal_fixed31_32_clamp_u0d10(
+ struct fixed31_32 arg)
+ {
+- return ux_dy(arg.value, 1, 10);
++ return clamp_ux_dy(arg.value, 0, 10, 1);
+ }
+diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_cm_common.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_cm_common.c
+index 352ae7b..53ba360 100644
+--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_cm_common.c
++++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_cm_common.c
+@@ -169,7 +169,7 @@ bool cm_helper_convert_to_custom_float(
+ }
+
+ if (fixpoint == true)
+- arr_points[1].custom_float_y = dal_fixed31_32_u0d14(arr_points[1].y);
++ arr_points[1].custom_float_y = dal_fixed31_32_clamp_u0d14(arr_points[1].y);
+ else if (!convert_to_custom_float_format(arr_points[1].y, &fmt,
+ &arr_points[1].custom_float_y)) {
+ BREAK_TO_DEBUGGER();
+@@ -395,12 +395,12 @@ bool cm_helper_translate_curve_to_hw_format(
+ rgb->delta_blue = dal_fixed31_32_sub(rgb_plus_1->blue, rgb->blue);
+
+ if (fixpoint == true) {
+- rgb->delta_red_reg = dal_fixed31_32_u0d10(rgb->delta_red);
+- rgb->delta_green_reg = dal_fixed31_32_u0d10(rgb->delta_green);
+- rgb->delta_blue_reg = dal_fixed31_32_u0d10(rgb->delta_blue);
+- rgb->red_reg = dal_fixed31_32_u0d14(rgb->red);
+- rgb->green_reg = dal_fixed31_32_u0d14(rgb->green);
+- rgb->blue_reg = dal_fixed31_32_u0d14(rgb->blue);
++ rgb->delta_red_reg = dal_fixed31_32_clamp_u0d10(rgb->delta_red);
++ rgb->delta_green_reg = dal_fixed31_32_clamp_u0d10(rgb->delta_green);
++ rgb->delta_blue_reg = dal_fixed31_32_clamp_u0d10(rgb->delta_blue);
++ rgb->red_reg = dal_fixed31_32_clamp_u0d14(rgb->red);
++ rgb->green_reg = dal_fixed31_32_clamp_u0d14(rgb->green);
++ rgb->blue_reg = dal_fixed31_32_clamp_u0d14(rgb->blue);
+ }
+
+ ++rgb_plus_1;
+diff --git a/drivers/gpu/drm/amd/display/include/fixed31_32.h b/drivers/gpu/drm/amd/display/include/fixed31_32.h
+index c4848fa..4badaed 100644
+--- a/drivers/gpu/drm/amd/display/include/fixed31_32.h
++++ b/drivers/gpu/drm/amd/display/include/fixed31_32.h
+@@ -464,10 +464,10 @@ uint32_t dal_fixed31_32_u0d19(
+ struct fixed31_32 arg);
+
+
+-uint32_t dal_fixed31_32_u0d14(
++uint32_t dal_fixed31_32_clamp_u0d14(
+ struct fixed31_32 arg);
+
+-uint32_t dal_fixed31_32_u0d10(
++uint32_t dal_fixed31_32_clamp_u0d10(
+ struct fixed31_32 arg);
+
+ #endif
+--
+2.7.4
+