Re: [RFC PATCH v4 02/42] drm: Add helper for conversion from signed-magnitude

2024-03-14 Thread Melissa Wen
On 02/26, Harry Wentland wrote:
> 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 
> ---
>  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 0c9f917a4d4b..cb842ba80ddd 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_EPSILON1LL
>  #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);
Hi Harry,

Can we have a #define macro for this constant? ^
Other than that, LGTM. You can add my r-b to the next version.

Thanks,

Melissa
> + } else {
> + return a;
> + }
> +
> +}
> +
>  static inline s64 drm_int2fixp(int a)
>  {
>   return ((s64)a) << DRM_FIXED_POINT;
> -- 
> 2.44.0
> 


Re: [RFC PATCH v4 01/42] drm: Don't treat 0 as -1 in drm_fixp2int_ceil

2024-03-14 Thread Melissa Wen
On 02/26, Harry Wentland wrote:
> Unit testing this in VKMS shows that passing 0 into
> this function returns -1, which is highly counter-
> intuitive. Fix it by checking whether the input is
> >= 0 instead of > 0.
> 
> Fixes: 64566b5e767f9 ("drm: Add drm_fixp_from_fraction and drm_fixp2int_ceil")
> Signed-off-by: Harry Wentland 
> Reviewed-by: Simon Ser 
> Reviewed-by: Melissa Wen 

It was already applied upstream:
https://cgit.freedesktop.org/drm/drm-misc/commit/include?id=cf8837d7204481026335461629b84ac7f4538fa5

Thanks

Melissa
> ---
>  include/drm/drm_fixed.h | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/include/drm/drm_fixed.h b/include/drm/drm_fixed.h
> index 6ea339d5de08..0c9f917a4d4b 100644
> --- a/include/drm/drm_fixed.h
> +++ b/include/drm/drm_fixed.h
> @@ -95,7 +95,7 @@ static inline int drm_fixp2int_round(s64 a)
>  
>  static inline int drm_fixp2int_ceil(s64 a)
>  {
> - if (a > 0)
> + if (a >= 0)
>   return drm_fixp2int(a + DRM_FIXED_ALMOST_ONE);
>   else
>   return drm_fixp2int(a - DRM_FIXED_ALMOST_ONE);
> -- 
> 2.44.0
>