Re: [V7 01/45] drm: Add helper for conversion from signed-magnitude
On 2/24/25 09:07, Louis Chauvet wrote: Le 20/12/2024 à 05:33, Alex Hung a écrit : From: Harry Wentland CTM values are defined as signed-magnitude values. Add a helper that converts from CTM signed-magnitude fixed point value to the twos-complement value used by drm_fixed. Signed-off-by: Harry Wentland Reviewed-by: Louis Chauvet Hi Louis, Thanks for reviewing. The replies to other patches (2, 3, 5, 6, 7, 9, 10) seem to be empty (I checked on my inbox and on https://lore.kernel.org/all/44edbdfb-5e23-4c19-8c80-e7acb8b49...@amd.com/T/#m2232bab7c543229a057123c5e762bf49c86a4148) Did you try to send something which didn't go through? --- include/drm/drm_fixed.h | 18 ++ 1 file changed, 18 insertions(+) diff --git a/include/drm/drm_fixed.h b/include/drm/drm_fixed.h index 1922188f00e8..0b44f2f294ce 100644 --- a/include/drm/drm_fixed.h +++ b/include/drm/drm_fixed.h @@ -78,6 +78,24 @@ static inline u32 dfixed_div(fixed20_12 A, fixed20_12 B) #define DRM_FIXED_EPSILON 1LL #define DRM_FIXED_ALMOST_ONE (DRM_FIXED_ONE - DRM_FIXED_EPSILON) +/** + * @drm_sm2fixp + * + * Convert a 1.31.32 signed-magnitude fixed point to 32.32 + * 2s-complement fixed point + * + * @return s64 2s-complement fixed point + */ +static inline s64 drm_sm2fixp(__u64 a) +{ + if ((a & (1LL << 63))) { + return -(a & 0x7fffll); + } else { + return a; + } + +} + static inline s64 drm_int2fixp(int a) { return ((s64)a) << DRM_FIXED_POINT;
Re: [V7 06/45] drm/colorop: Add TYPE property
Re: [V7 02/45] drm/vkms: Round fixp2int conversion in lerp_u16
Re: [V7 05/45] drm/colorop: Introduce new drm_colorop mode object
Re: [V7 03/45] drm/vkms: Add kunit tests for VKMS LUT handling
Re: [V7 10/45] drm/colorop: Add NEXT property
Re: [V7 01/45] drm: Add helper for conversion from signed-magnitude
Le 20/12/2024 à 05:33, Alex Hung a écrit : From: Harry Wentland CTM values are defined as signed-magnitude values. Add a helper that converts from CTM signed-magnitude fixed point value to the twos-complement value used by drm_fixed. Signed-off-by: Harry Wentland Reviewed-by: Louis Chauvet --- include/drm/drm_fixed.h | 18 ++ 1 file changed, 18 insertions(+) diff --git a/include/drm/drm_fixed.h b/include/drm/drm_fixed.h index 1922188f00e8..0b44f2f294ce 100644 --- a/include/drm/drm_fixed.h +++ b/include/drm/drm_fixed.h @@ -78,6 +78,24 @@ static inline u32 dfixed_div(fixed20_12 A, fixed20_12 B) #define DRM_FIXED_EPSILON 1LL #define DRM_FIXED_ALMOST_ONE (DRM_FIXED_ONE - DRM_FIXED_EPSILON) +/** + * @drm_sm2fixp + * + * Convert a 1.31.32 signed-magnitude fixed point to 32.32 + * 2s-complement fixed point + * + * @return s64 2s-complement fixed point + */ +static inline s64 drm_sm2fixp(__u64 a) +{ + if ((a & (1LL << 63))) { + return -(a & 0x7fffll); + } else { + return a; + } + +} + static inline s64 drm_int2fixp(int a) { return ((s64)a) << DRM_FIXED_POINT; -- Louis Chauvet, Bootlin Embedded Linux and Kernel engineering https://bootlin.com