diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2442-amdgpu-dc-use-the-builtin-constant-p-trick-on-the-31.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2442-amdgpu-dc-use-the-builtin-constant-p-trick-on-the-31.patch | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2442-amdgpu-dc-use-the-builtin-constant-p-trick-on-the-31.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2442-amdgpu-dc-use-the-builtin-constant-p-trick-on-the-31.patch new file mode 100644 index 00000000..709eee38 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2442-amdgpu-dc-use-the-builtin-constant-p-trick-on-the-31.patch @@ -0,0 +1,143 @@ +From 67b6ac66dedd66fa684ee005c4c60d2ea7136870 Mon Sep 17 00:00:00 2001 +From: Dave Airlie <airlied@redhat.com> +Date: Fri, 29 Sep 2017 17:13:26 +1000 +Subject: [PATCH 2442/4131] amdgpu/dc: use the builtin constant p trick on the + 31/32 fixed point. + +This only gets us 100 bytes, but may as well be consistent. + +Signed-off-by: Dave Airlie <airlied@redhat.com> +Reviewed-by: Harry Wentland <harry.wentland@amd.com> +--- + drivers/gpu/drm/amd/display/dc/basics/fixpt31_32.c | 22 ++++++++++------------ + drivers/gpu/drm/amd/display/include/fixed31_32.h | 15 +++++++++++++-- + 2 files changed, 23 insertions(+), 14 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 578691c..1764a33 100644 +--- a/drivers/gpu/drm/amd/display/dc/basics/fixpt31_32.c ++++ b/drivers/gpu/drm/amd/display/dc/basics/fixpt31_32.c +@@ -54,14 +54,12 @@ static inline uint64_t complete_integer_division_u64( + return result; + } + +-#define BITS_PER_FRACTIONAL_PART \ +- 32 + + #define FRACTIONAL_PART_MASK \ +- ((1ULL << BITS_PER_FRACTIONAL_PART) - 1) ++ ((1ULL << FIXED31_32_BITS_PER_FRACTIONAL_PART) - 1) + + #define GET_INTEGER_PART(x) \ +- ((x) >> BITS_PER_FRACTIONAL_PART) ++ ((x) >> FIXED31_32_BITS_PER_FRACTIONAL_PART) + + #define GET_FRACTIONAL_PART(x) \ + (FRACTIONAL_PART_MASK & (x)) +@@ -89,7 +87,7 @@ struct fixed31_32 dal_fixed31_32_from_fraction( + + /* determine fractional part */ + { +- uint32_t i = BITS_PER_FRACTIONAL_PART; ++ uint32_t i = FIXED31_32_BITS_PER_FRACTIONAL_PART; + + do { + remainder <<= 1; +@@ -120,14 +118,14 @@ struct fixed31_32 dal_fixed31_32_from_fraction( + return res; + } + +-struct fixed31_32 dal_fixed31_32_from_int( ++struct fixed31_32 dal_fixed31_32_from_int_nonconst( + int64_t arg) + { + struct fixed31_32 res; + + ASSERT((LONG_MIN <= arg) && (arg <= LONG_MAX)); + +- res.value = arg << BITS_PER_FRACTIONAL_PART; ++ res.value = arg << FIXED31_32_BITS_PER_FRACTIONAL_PART; + + return res; + } +@@ -198,7 +196,7 @@ struct fixed31_32 dal_fixed31_32_mul( + + ASSERT(res.value <= LONG_MAX); + +- res.value <<= BITS_PER_FRACTIONAL_PART; ++ res.value <<= FIXED31_32_BITS_PER_FRACTIONAL_PART; + + tmp = arg1_int * arg2_fra; + +@@ -214,7 +212,7 @@ struct fixed31_32 dal_fixed31_32_mul( + + tmp = arg1_fra * arg2_fra; + +- tmp = (tmp >> BITS_PER_FRACTIONAL_PART) + ++ tmp = (tmp >> FIXED31_32_BITS_PER_FRACTIONAL_PART) + + (tmp >= (uint64_t)dal_fixed31_32_half.value); + + ASSERT(tmp <= (uint64_t)(LLONG_MAX - res.value)); +@@ -244,7 +242,7 @@ struct fixed31_32 dal_fixed31_32_sqr( + + ASSERT(res.value <= LONG_MAX); + +- res.value <<= BITS_PER_FRACTIONAL_PART; ++ res.value <<= FIXED31_32_BITS_PER_FRACTIONAL_PART; + + tmp = arg_int * arg_fra; + +@@ -258,7 +256,7 @@ struct fixed31_32 dal_fixed31_32_sqr( + + tmp = arg_fra * arg_fra; + +- tmp = (tmp >> BITS_PER_FRACTIONAL_PART) + ++ tmp = (tmp >> FIXED31_32_BITS_PER_FRACTIONAL_PART) + + (tmp >= (uint64_t)dal_fixed31_32_half.value); + + ASSERT(tmp <= (uint64_t)(LLONG_MAX - res.value)); +@@ -560,7 +558,7 @@ static inline uint32_t ux_dy( + /* 4. make space for fractional part to be filled in after integer */ + result <<= fractional_bits; + /* 5. shrink fixed point fractional part to of fractional_bits width*/ +- fractional_part >>= BITS_PER_FRACTIONAL_PART - fractional_bits; ++ fractional_part >>= FIXED31_32_BITS_PER_FRACTIONAL_PART - fractional_bits; + /* 6. merge the result */ + return result | fractional_part; + } +diff --git a/drivers/gpu/drm/amd/display/include/fixed31_32.h b/drivers/gpu/drm/amd/display/include/fixed31_32.h +index f0bc3c4..2c9e223 100644 +--- a/drivers/gpu/drm/amd/display/include/fixed31_32.h ++++ b/drivers/gpu/drm/amd/display/include/fixed31_32.h +@@ -28,6 +28,8 @@ + + #include "os_types.h" + ++#define FIXED31_32_BITS_PER_FRACTIONAL_PART 32 ++ + /* + * @brief + * Arithmetic operations on real numbers +@@ -78,8 +80,17 @@ struct fixed31_32 dal_fixed31_32_from_fraction( + * @brief + * result = arg + */ +-struct fixed31_32 dal_fixed31_32_from_int( +- int64_t arg); ++struct fixed31_32 dal_fixed31_32_from_int_nonconst(int64_t arg); ++static inline struct fixed31_32 dal_fixed31_32_from_int(int64_t 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 dal_fixed31_32_from_int_nonconst(arg); ++} + + /* + * @brief +-- +2.7.4 + |