drm: Add helper for conversion from signed-magnitude

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.

Reviewed-by: Sebastian Wick <sebastian.wick@redhat.com>
Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: Harry Wentland <harry.wentland@amd.com>
Reviewed-by: Daniel Stone <daniels@collabora.com>
Reviewed-by: Melissa Wen <mwen@igalia.com>
Signed-off-by: Simon Ser <contact@emersion.fr>
Link: https://patch.msgid.link/20251115000237.3561250-2-alex.hung@amd.com
pull/1354/merge
Harry Wentland 2025-11-14 17:01:26 -07:00 committed by Simon Ser
parent c884ee70b1
commit 4fc183828b
1 changed files with 17 additions and 0 deletions

View File

@ -78,6 +78,23 @@ 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 & 0x7fffffffffffffffll);
} else {
return a;
}
}
static inline s64 drm_int2fixp(int a)
{
return ((s64)a) << DRM_FIXED_POINT;