aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/4456-drm-amd-display-inline-more-of-fixed-point-code.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/4456-drm-amd-display-inline-more-of-fixed-point-code.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/4456-drm-amd-display-inline-more-of-fixed-point-code.patch721
1 files changed, 721 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/4456-drm-amd-display-inline-more-of-fixed-point-code.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/4456-drm-amd-display-inline-more-of-fixed-point-code.patch
new file mode 100644
index 00000000..6bf386ca
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/4456-drm-amd-display-inline-more-of-fixed-point-code.patch
@@ -0,0 +1,721 @@
+From f2c680e3bbfdb2bbfc0f285635005e0e80f2e571 Mon Sep 17 00:00:00 2001
+From: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
+Date: Wed, 18 Apr 2018 13:54:24 -0400
+Subject: [PATCH 4456/5725] drm/amd/display: inline more of fixed point code
+
+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 | 156 ++--------------
+ drivers/gpu/drm/amd/display/include/fixed31_32.h | 207 ++++++++++++---------
+ .../drm/amd/display/modules/color/color_gamma.c | 8 +-
+ 3 files changed, 135 insertions(+), 236 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 e398ecd..e61dd97d 100644
+--- a/drivers/gpu/drm/amd/display/dc/basics/fixpt31_32.c
++++ b/drivers/gpu/drm/amd/display/dc/basics/fixpt31_32.c
+@@ -64,9 +64,7 @@ static inline unsigned long long complete_integer_division_u64(
+ #define GET_FRACTIONAL_PART(x) \
+ (FRACTIONAL_PART_MASK & (x))
+
+-struct fixed31_32 dc_fixpt_from_fraction(
+- long long numerator,
+- long long denominator)
++struct fixed31_32 dc_fixpt_from_fraction(long long numerator, long long denominator)
+ {
+ struct fixed31_32 res;
+
+@@ -118,63 +116,7 @@ struct fixed31_32 dc_fixpt_from_fraction(
+ return res;
+ }
+
+-struct fixed31_32 dc_fixpt_from_int_nonconst(
+- long long arg)
+-{
+- struct fixed31_32 res;
+-
+- ASSERT((LONG_MIN <= arg) && (arg <= LONG_MAX));
+-
+- res.value = arg << FIXED31_32_BITS_PER_FRACTIONAL_PART;
+-
+- return res;
+-}
+-
+-struct fixed31_32 dc_fixpt_shl(
+- struct fixed31_32 arg,
+- unsigned char shift)
+-{
+- struct fixed31_32 res;
+-
+- ASSERT(((arg.value >= 0) && (arg.value <= LLONG_MAX >> shift)) ||
+- ((arg.value < 0) && (arg.value >= LLONG_MIN >> shift)));
+-
+- res.value = arg.value << shift;
+-
+- return res;
+-}
+-
+-struct fixed31_32 dc_fixpt_add(
+- struct fixed31_32 arg1,
+- struct fixed31_32 arg2)
+-{
+- struct fixed31_32 res;
+-
+- ASSERT(((arg1.value >= 0) && (LLONG_MAX - arg1.value >= arg2.value)) ||
+- ((arg1.value < 0) && (LLONG_MIN - arg1.value <= arg2.value)));
+-
+- res.value = arg1.value + arg2.value;
+-
+- return res;
+-}
+-
+-struct fixed31_32 dc_fixpt_sub(
+- struct fixed31_32 arg1,
+- struct fixed31_32 arg2)
+-{
+- struct fixed31_32 res;
+-
+- ASSERT(((arg2.value >= 0) && (LLONG_MIN + arg2.value <= arg1.value)) ||
+- ((arg2.value < 0) && (LLONG_MAX + arg2.value >= arg1.value)));
+-
+- res.value = arg1.value - arg2.value;
+-
+- return res;
+-}
+-
+-struct fixed31_32 dc_fixpt_mul(
+- struct fixed31_32 arg1,
+- struct fixed31_32 arg2)
++struct fixed31_32 dc_fixpt_mul(struct fixed31_32 arg1, struct fixed31_32 arg2)
+ {
+ struct fixed31_32 res;
+
+@@ -225,8 +167,7 @@ struct fixed31_32 dc_fixpt_mul(
+ return res;
+ }
+
+-struct fixed31_32 dc_fixpt_sqr(
+- struct fixed31_32 arg)
++struct fixed31_32 dc_fixpt_sqr(struct fixed31_32 arg)
+ {
+ struct fixed31_32 res;
+
+@@ -266,8 +207,7 @@ struct fixed31_32 dc_fixpt_sqr(
+ return res;
+ }
+
+-struct fixed31_32 dc_fixpt_recip(
+- struct fixed31_32 arg)
++struct fixed31_32 dc_fixpt_recip(struct fixed31_32 arg)
+ {
+ /*
+ * @note
+@@ -281,8 +221,7 @@ struct fixed31_32 dc_fixpt_recip(
+ arg.value);
+ }
+
+-struct fixed31_32 dc_fixpt_sinc(
+- struct fixed31_32 arg)
++struct fixed31_32 dc_fixpt_sinc(struct fixed31_32 arg)
+ {
+ struct fixed31_32 square;
+
+@@ -326,16 +265,14 @@ struct fixed31_32 dc_fixpt_sinc(
+ return res;
+ }
+
+-struct fixed31_32 dc_fixpt_sin(
+- struct fixed31_32 arg)
++struct fixed31_32 dc_fixpt_sin(struct fixed31_32 arg)
+ {
+ return dc_fixpt_mul(
+ arg,
+ dc_fixpt_sinc(arg));
+ }
+
+-struct fixed31_32 dc_fixpt_cos(
+- struct fixed31_32 arg)
++struct fixed31_32 dc_fixpt_cos(struct fixed31_32 arg)
+ {
+ /* TODO implement argument normalization */
+
+@@ -367,8 +304,7 @@ struct fixed31_32 dc_fixpt_cos(
+ *
+ * Calculated as Taylor series.
+ */
+-static struct fixed31_32 fixed31_32_exp_from_taylor_series(
+- struct fixed31_32 arg)
++static struct fixed31_32 fixed31_32_exp_from_taylor_series(struct fixed31_32 arg)
+ {
+ unsigned int n = 9;
+
+@@ -396,8 +332,7 @@ static struct fixed31_32 fixed31_32_exp_from_taylor_series(
+ res));
+ }
+
+-struct fixed31_32 dc_fixpt_exp(
+- struct fixed31_32 arg)
++struct fixed31_32 dc_fixpt_exp(struct fixed31_32 arg)
+ {
+ /*
+ * @brief
+@@ -440,8 +375,7 @@ struct fixed31_32 dc_fixpt_exp(
+ return dc_fixpt_one;
+ }
+
+-struct fixed31_32 dc_fixpt_log(
+- struct fixed31_32 arg)
++struct fixed31_32 dc_fixpt_log(struct fixed31_32 arg)
+ {
+ struct fixed31_32 res = dc_fixpt_neg(dc_fixpt_one);
+ /* TODO improve 1st estimation */
+@@ -472,61 +406,6 @@ struct fixed31_32 dc_fixpt_log(
+ return res;
+ }
+
+-struct fixed31_32 dc_fixpt_pow(
+- struct fixed31_32 arg1,
+- struct fixed31_32 arg2)
+-{
+- return dc_fixpt_exp(
+- dc_fixpt_mul(
+- dc_fixpt_log(arg1),
+- arg2));
+-}
+-
+-int dc_fixpt_floor(
+- struct fixed31_32 arg)
+-{
+- unsigned long long arg_value = abs_i64(arg.value);
+-
+- if (arg.value >= 0)
+- return (int)GET_INTEGER_PART(arg_value);
+- else
+- return -(int)GET_INTEGER_PART(arg_value);
+-}
+-
+-int dc_fixpt_round(
+- struct fixed31_32 arg)
+-{
+- unsigned long long arg_value = abs_i64(arg.value);
+-
+- const long long summand = dc_fixpt_half.value;
+-
+- ASSERT(LLONG_MAX - (long long)arg_value >= summand);
+-
+- arg_value += summand;
+-
+- if (arg.value >= 0)
+- return (int)GET_INTEGER_PART(arg_value);
+- else
+- return -(int)GET_INTEGER_PART(arg_value);
+-}
+-
+-int dc_fixpt_ceil(
+- struct fixed31_32 arg)
+-{
+- unsigned long long arg_value = abs_i64(arg.value);
+-
+- const long long summand = dc_fixpt_one.value -
+- dc_fixpt_epsilon.value;
+-
+- ASSERT(LLONG_MAX - (long long)arg_value >= summand);
+-
+- arg_value += summand;
+-
+- if (arg.value >= 0)
+- return (int)GET_INTEGER_PART(arg_value);
+- else
+- return -(int)GET_INTEGER_PART(arg_value);
+-}
+
+ /* this function is a generic helper to translate fixed point value to
+ * specified integer format that will consist of integer_bits integer part and
+@@ -570,32 +449,27 @@ static inline unsigned int clamp_ux_dy(
+ return min_clamp;
+ }
+
+-unsigned int dc_fixpt_u2d19(
+- struct fixed31_32 arg)
++unsigned int dc_fixpt_u2d19(struct fixed31_32 arg)
+ {
+ return ux_dy(arg.value, 2, 19);
+ }
+
+-unsigned int dc_fixpt_u0d19(
+- struct fixed31_32 arg)
++unsigned int dc_fixpt_u0d19(struct fixed31_32 arg)
+ {
+ return ux_dy(arg.value, 0, 19);
+ }
+
+-unsigned int dc_fixpt_clamp_u0d14(
+- struct fixed31_32 arg)
++unsigned int dc_fixpt_clamp_u0d14(struct fixed31_32 arg)
+ {
+ return clamp_ux_dy(arg.value, 0, 14, 1);
+ }
+
+-unsigned int dc_fixpt_clamp_u0d10(
+- struct fixed31_32 arg)
++unsigned int dc_fixpt_clamp_u0d10(struct fixed31_32 arg)
+ {
+ return clamp_ux_dy(arg.value, 0, 10, 1);
+ }
+
+-int dc_fixpt_s4d19(
+- struct fixed31_32 arg)
++int dc_fixpt_s4d19(struct fixed31_32 arg)
+ {
+ if (arg.value < 0)
+ return -(int)ux_dy(dc_fixpt_abs(arg).value, 4, 19);
+diff --git a/drivers/gpu/drm/amd/display/include/fixed31_32.h b/drivers/gpu/drm/amd/display/include/fixed31_32.h
+index b5b8d7d..ebfd33e 100644
+--- a/drivers/gpu/drm/amd/display/include/fixed31_32.h
++++ b/drivers/gpu/drm/amd/display/include/fixed31_32.h
+@@ -70,24 +70,19 @@ static const struct fixed31_32 dc_fixpt_ln2_div_2 = { 1488522236LL };
+ * @brief
+ * result = numerator / denominator
+ */
+-struct fixed31_32 dc_fixpt_from_fraction(
+- long long numerator,
+- long long denominator);
++struct fixed31_32 dc_fixpt_from_fraction(long long numerator, long long denominator);
+
+ /*
+ * @brief
+ * result = arg
+ */
+-struct fixed31_32 dc_fixpt_from_int_nonconst(long long arg);
+-static inline struct fixed31_32 dc_fixpt_from_int(long long arg)
++static inline struct fixed31_32 dc_fixpt_from_int(int arg)
+ {
+- if (__builtin_constant_p(arg)) {
+- struct fixed31_32 res;
+- BUILD_BUG_ON((LONG_MIN > arg) || (arg > LONG_MAX));
+- res.value = arg << FIXED31_32_BITS_PER_FRACTIONAL_PART;
+- return res;
+- } else
+- return dc_fixpt_from_int_nonconst(arg);
++ struct fixed31_32 res;
++
++ res.value = (long long) arg << FIXED31_32_BITS_PER_FRACTIONAL_PART;
++
++ return res;
+ }
+
+ /*
+@@ -129,8 +124,7 @@ static inline struct fixed31_32 dc_fixpt_abs(struct fixed31_32 arg)
+ * @brief
+ * result = arg1 < arg2
+ */
+-static inline bool dc_fixpt_lt(struct fixed31_32 arg1,
+- struct fixed31_32 arg2)
++static inline bool dc_fixpt_lt(struct fixed31_32 arg1, struct fixed31_32 arg2)
+ {
+ return arg1.value < arg2.value;
+ }
+@@ -139,8 +133,7 @@ static inline bool dc_fixpt_lt(struct fixed31_32 arg1,
+ * @brief
+ * result = arg1 <= arg2
+ */
+-static inline bool dc_fixpt_le(struct fixed31_32 arg1,
+- struct fixed31_32 arg2)
++static inline bool dc_fixpt_le(struct fixed31_32 arg1, struct fixed31_32 arg2)
+ {
+ return arg1.value <= arg2.value;
+ }
+@@ -149,8 +142,7 @@ static inline bool dc_fixpt_le(struct fixed31_32 arg1,
+ * @brief
+ * result = arg1 == arg2
+ */
+-static inline bool dc_fixpt_eq(struct fixed31_32 arg1,
+- struct fixed31_32 arg2)
++static inline bool dc_fixpt_eq(struct fixed31_32 arg1, struct fixed31_32 arg2)
+ {
+ return arg1.value == arg2.value;
+ }
+@@ -159,8 +151,7 @@ static inline bool dc_fixpt_eq(struct fixed31_32 arg1,
+ * @brief
+ * result = min(arg1, arg2) := (arg1 <= arg2) ? arg1 : arg2
+ */
+-static inline struct fixed31_32 dc_fixpt_min(struct fixed31_32 arg1,
+- struct fixed31_32 arg2)
++static inline struct fixed31_32 dc_fixpt_min(struct fixed31_32 arg1, struct fixed31_32 arg2)
+ {
+ if (arg1.value <= arg2.value)
+ return arg1;
+@@ -172,8 +163,7 @@ static inline struct fixed31_32 dc_fixpt_min(struct fixed31_32 arg1,
+ * @brief
+ * result = max(arg1, arg2) := (arg1 <= arg2) ? arg2 : arg1
+ */
+-static inline struct fixed31_32 dc_fixpt_max(struct fixed31_32 arg1,
+- struct fixed31_32 arg2)
++static inline struct fixed31_32 dc_fixpt_max(struct fixed31_32 arg1, struct fixed31_32 arg2)
+ {
+ if (arg1.value <= arg2.value)
+ return arg2;
+@@ -209,17 +199,23 @@ static inline struct fixed31_32 dc_fixpt_clamp(
+ * @brief
+ * result = arg << shift
+ */
+-struct fixed31_32 dc_fixpt_shl(
+- struct fixed31_32 arg,
+- unsigned char shift);
++static inline struct fixed31_32 dc_fixpt_shl(struct fixed31_32 arg, unsigned char shift)
++{
++ struct fixed31_32 res;
++
++ ASSERT(((arg.value >= 0) && (arg.value <= LLONG_MAX >> shift)) ||
++ ((arg.value < 0) && (arg.value >= LLONG_MIN >> shift)));
++
++ res.value = arg.value << shift;
++
++ return res;
++}
+
+ /*
+ * @brief
+ * result = arg >> shift
+ */
+-static inline struct fixed31_32 dc_fixpt_shr(
+- struct fixed31_32 arg,
+- unsigned char shift)
++static inline struct fixed31_32 dc_fixpt_shr(struct fixed31_32 arg, unsigned char shift)
+ {
+ struct fixed31_32 res;
+ res.value = arg.value >> shift;
+@@ -235,38 +231,50 @@ static inline struct fixed31_32 dc_fixpt_shr(
+ * @brief
+ * result = arg1 + arg2
+ */
+-struct fixed31_32 dc_fixpt_add(
+- struct fixed31_32 arg1,
+- struct fixed31_32 arg2);
++static inline struct fixed31_32 dc_fixpt_add(struct fixed31_32 arg1, struct fixed31_32 arg2)
++{
++ struct fixed31_32 res;
++
++ ASSERT(((arg1.value >= 0) && (LLONG_MAX - arg1.value >= arg2.value)) ||
++ ((arg1.value < 0) && (LLONG_MIN - arg1.value <= arg2.value)));
++
++ res.value = arg1.value + arg2.value;
++
++ return res;
++}
+
+ /*
+ * @brief
+ * result = arg1 + arg2
+ */
+-static inline struct fixed31_32 dc_fixpt_add_int(struct fixed31_32 arg1,
+- int arg2)
++static inline struct fixed31_32 dc_fixpt_add_int(struct fixed31_32 arg1, int arg2)
+ {
+- return dc_fixpt_add(arg1,
+- dc_fixpt_from_int(arg2));
++ return dc_fixpt_add(arg1, dc_fixpt_from_int(arg2));
+ }
+
+ /*
+ * @brief
+ * result = arg1 - arg2
+ */
+-struct fixed31_32 dc_fixpt_sub(
+- struct fixed31_32 arg1,
+- struct fixed31_32 arg2);
++static inline struct fixed31_32 dc_fixpt_sub(struct fixed31_32 arg1, struct fixed31_32 arg2)
++{
++ struct fixed31_32 res;
++
++ ASSERT(((arg2.value >= 0) && (LLONG_MIN + arg2.value <= arg1.value)) ||
++ ((arg2.value < 0) && (LLONG_MAX + arg2.value >= arg1.value)));
++
++ res.value = arg1.value - arg2.value;
++
++ return res;
++}
+
+ /*
+ * @brief
+ * result = arg1 - arg2
+ */
+-static inline struct fixed31_32 dc_fixpt_sub_int(struct fixed31_32 arg1,
+- int arg2)
++static inline struct fixed31_32 dc_fixpt_sub_int(struct fixed31_32 arg1, int arg2)
+ {
+- return dc_fixpt_sub(arg1,
+- dc_fixpt_from_int(arg2));
++ return dc_fixpt_sub(arg1, dc_fixpt_from_int(arg2));
+ }
+
+
+@@ -279,49 +287,40 @@ static inline struct fixed31_32 dc_fixpt_sub_int(struct fixed31_32 arg1,
+ * @brief
+ * result = arg1 * arg2
+ */
+-struct fixed31_32 dc_fixpt_mul(
+- struct fixed31_32 arg1,
+- struct fixed31_32 arg2);
++struct fixed31_32 dc_fixpt_mul(struct fixed31_32 arg1, struct fixed31_32 arg2);
+
+
+ /*
+ * @brief
+ * result = arg1 * arg2
+ */
+-static inline struct fixed31_32 dc_fixpt_mul_int(struct fixed31_32 arg1,
+- int arg2)
++static inline struct fixed31_32 dc_fixpt_mul_int(struct fixed31_32 arg1, int arg2)
+ {
+- return dc_fixpt_mul(arg1,
+- dc_fixpt_from_int(arg2));
++ return dc_fixpt_mul(arg1, dc_fixpt_from_int(arg2));
+ }
+
+ /*
+ * @brief
+ * result = square(arg) := arg * arg
+ */
+-struct fixed31_32 dc_fixpt_sqr(
+- struct fixed31_32 arg);
++struct fixed31_32 dc_fixpt_sqr(struct fixed31_32 arg);
+
+ /*
+ * @brief
+ * result = arg1 / arg2
+ */
+-static inline struct fixed31_32 dc_fixpt_div_int(struct fixed31_32 arg1,
+- long long arg2)
++static inline struct fixed31_32 dc_fixpt_div_int(struct fixed31_32 arg1, long long arg2)
+ {
+- return dc_fixpt_from_fraction(arg1.value,
+- dc_fixpt_from_int(arg2).value);
++ return dc_fixpt_from_fraction(arg1.value, dc_fixpt_from_int(arg2).value);
+ }
+
+ /*
+ * @brief
+ * result = arg1 / arg2
+ */
+-static inline struct fixed31_32 dc_fixpt_div(struct fixed31_32 arg1,
+- struct fixed31_32 arg2)
++static inline struct fixed31_32 dc_fixpt_div(struct fixed31_32 arg1, struct fixed31_32 arg2)
+ {
+- return dc_fixpt_from_fraction(arg1.value,
+- arg2.value);
++ return dc_fixpt_from_fraction(arg1.value, arg2.value);
+ }
+
+ /*
+@@ -336,8 +335,7 @@ static inline struct fixed31_32 dc_fixpt_div(struct fixed31_32 arg1,
+ * @note
+ * No special actions taken in case argument is zero.
+ */
+-struct fixed31_32 dc_fixpt_recip(
+- struct fixed31_32 arg);
++struct fixed31_32 dc_fixpt_recip(struct fixed31_32 arg);
+
+ /*
+ * @brief
+@@ -352,8 +350,7 @@ struct fixed31_32 dc_fixpt_recip(
+ * Argument specified in radians,
+ * internally it's normalized to [-2pi...2pi] range.
+ */
+-struct fixed31_32 dc_fixpt_sinc(
+- struct fixed31_32 arg);
++struct fixed31_32 dc_fixpt_sinc(struct fixed31_32 arg);
+
+ /*
+ * @brief
+@@ -363,8 +360,7 @@ struct fixed31_32 dc_fixpt_sinc(
+ * Argument specified in radians,
+ * internally it's normalized to [-2pi...2pi] range.
+ */
+-struct fixed31_32 dc_fixpt_sin(
+- struct fixed31_32 arg);
++struct fixed31_32 dc_fixpt_sin(struct fixed31_32 arg);
+
+ /*
+ * @brief
+@@ -376,8 +372,7 @@ struct fixed31_32 dc_fixpt_sin(
+ * passing arguments outside that range
+ * will cause incorrect result!
+ */
+-struct fixed31_32 dc_fixpt_cos(
+- struct fixed31_32 arg);
++struct fixed31_32 dc_fixpt_cos(struct fixed31_32 arg);
+
+ /*
+ * @brief
+@@ -391,8 +386,7 @@ struct fixed31_32 dc_fixpt_cos(
+ * @note
+ * Currently, function is verified for abs(arg) <= 1.
+ */
+-struct fixed31_32 dc_fixpt_exp(
+- struct fixed31_32 arg);
++struct fixed31_32 dc_fixpt_exp(struct fixed31_32 arg);
+
+ /*
+ * @brief
+@@ -404,8 +398,7 @@ struct fixed31_32 dc_fixpt_exp(
+ * Currently, no special actions taken
+ * in case of invalid argument(s). Take care!
+ */
+-struct fixed31_32 dc_fixpt_log(
+- struct fixed31_32 arg);
++struct fixed31_32 dc_fixpt_log(struct fixed31_32 arg);
+
+ /*
+ * @brief
+@@ -419,9 +412,13 @@ struct fixed31_32 dc_fixpt_log(
+ * @note
+ * Currently, abs(arg1) should be less than 1. Take care!
+ */
+-struct fixed31_32 dc_fixpt_pow(
+- struct fixed31_32 arg1,
+- struct fixed31_32 arg2);
++static inline struct fixed31_32 dc_fixpt_pow(struct fixed31_32 arg1, struct fixed31_32 arg2)
++{
++ return dc_fixpt_exp(
++ dc_fixpt_mul(
++ dc_fixpt_log(arg1),
++ arg2));
++}
+
+ /*
+ * @brief
+@@ -432,22 +429,56 @@ struct fixed31_32 dc_fixpt_pow(
+ * @brief
+ * result = floor(arg) := greatest integer lower than or equal to arg
+ */
+-int dc_fixpt_floor(
+- struct fixed31_32 arg);
++static inline int dc_fixpt_floor(struct fixed31_32 arg)
++{
++ unsigned long long arg_value = arg.value > 0 ? arg.value : -arg.value;
++
++ if (arg.value >= 0)
++ return (int)(arg_value >> FIXED31_32_BITS_PER_FRACTIONAL_PART);
++ else
++ return -(int)(arg_value >> FIXED31_32_BITS_PER_FRACTIONAL_PART);
++}
+
+ /*
+ * @brief
+ * result = round(arg) := integer nearest to arg
+ */
+-int dc_fixpt_round(
+- struct fixed31_32 arg);
++static inline int dc_fixpt_round(struct fixed31_32 arg)
++{
++ unsigned long long arg_value = arg.value > 0 ? arg.value : -arg.value;
++
++ const long long summand = dc_fixpt_half.value;
++
++ ASSERT(LLONG_MAX - (long long)arg_value >= summand);
++
++ arg_value += summand;
++
++ if (arg.value >= 0)
++ return (int)(arg_value >> FIXED31_32_BITS_PER_FRACTIONAL_PART);
++ else
++ return -(int)(arg_value >> FIXED31_32_BITS_PER_FRACTIONAL_PART);
++}
+
+ /*
+ * @brief
+ * result = ceil(arg) := lowest integer greater than or equal to arg
+ */
+-int dc_fixpt_ceil(
+- struct fixed31_32 arg);
++static inline int dc_fixpt_ceil(struct fixed31_32 arg)
++{
++ unsigned long long arg_value = arg.value > 0 ? arg.value : -arg.value;
++
++ const long long summand = dc_fixpt_one.value -
++ dc_fixpt_epsilon.value;
++
++ ASSERT(LLONG_MAX - (long long)arg_value >= summand);
++
++ arg_value += summand;
++
++ if (arg.value >= 0)
++ return (int)(arg_value >> FIXED31_32_BITS_PER_FRACTIONAL_PART);
++ else
++ return -(int)(arg_value >> FIXED31_32_BITS_PER_FRACTIONAL_PART);
++}
+
+ /* the following two function are used in scaler hw programming to convert fixed
+ * point value to format 2 bits from integer part and 19 bits from fractional
+@@ -455,20 +486,14 @@ int dc_fixpt_ceil(
+ * fractional
+ */
+
+-unsigned int dc_fixpt_u2d19(
+- struct fixed31_32 arg);
+-
+-unsigned int dc_fixpt_u0d19(
+- struct fixed31_32 arg);
++unsigned int dc_fixpt_u2d19(struct fixed31_32 arg);
+
++unsigned int dc_fixpt_u0d19(struct fixed31_32 arg);
+
+-unsigned int dc_fixpt_clamp_u0d14(
+- struct fixed31_32 arg);
++unsigned int dc_fixpt_clamp_u0d14(struct fixed31_32 arg);
+
+-unsigned int dc_fixpt_clamp_u0d10(
+- struct fixed31_32 arg);
++unsigned int dc_fixpt_clamp_u0d10(struct fixed31_32 arg);
+
+-int dc_fixpt_s4d19(
+- struct fixed31_32 arg);
++int dc_fixpt_s4d19(struct fixed31_32 arg);
+
+ #endif
+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 29d2ec8..e803b37 100644
+--- a/drivers/gpu/drm/amd/display/modules/color/color_gamma.c
++++ b/drivers/gpu/drm/amd/display/modules/color/color_gamma.c
+@@ -913,7 +913,7 @@ static void apply_lut_1d(
+ struct fixed31_32 lut2;
+ const int max_lut_index = 4095;
+ const struct fixed31_32 max_lut_index_f =
+- dc_fixpt_from_int_nonconst(max_lut_index);
++ dc_fixpt_from_int(max_lut_index);
+ int32_t index = 0, index_next = 0;
+ struct fixed31_32 index_f;
+ struct fixed31_32 delta_lut;
+@@ -934,7 +934,7 @@ static void apply_lut_1d(
+ norm_y = dc_fixpt_mul(max_lut_index_f,
+ *regamma_y);
+ index = dc_fixpt_floor(norm_y);
+- index_f = dc_fixpt_from_int_nonconst(index);
++ index_f = dc_fixpt_from_int(index);
+
+ if (index < 0 || index > max_lut_index)
+ continue;
+@@ -1094,7 +1094,7 @@ static void interpolate_user_regamma(uint32_t hw_points_num,
+ struct fixed31_32 *tf_point;
+ struct fixed31_32 hw_x;
+ struct fixed31_32 norm_factor =
+- dc_fixpt_from_int_nonconst(255);
++ dc_fixpt_from_int(255);
+ struct fixed31_32 norm_x;
+ struct fixed31_32 index_f;
+ struct fixed31_32 lut1;
+@@ -1134,7 +1134,7 @@ static void interpolate_user_regamma(uint32_t hw_points_num,
+ if (index < 0 || index > 255)
+ continue;
+
+- index_f = dc_fixpt_from_int_nonconst(index);
++ index_f = dc_fixpt_from_int(index);
+ index_next = (index == 255) ? index : index + 1;
+
+ if (color == 0) {
+--
+2.7.4
+