Public

Reviewed-by: Roman Li <[email protected]>

> -----Original Message-----
> From: amd-gfx <[email protected]> On Behalf Of Keita
> Morisaki
> Sent: Tuesday, September 22, 2026 10:25 PM
> To: Zheng, Austin <[email protected]>; Lei, Jun <[email protected]>;
> Wentland, Harry <[email protected]>; Li, Sun peng (Leo)
> <[email protected]>; Deucher, Alexander <[email protected]>
> Cc: Rodrigo Siqueira <[email protected]>; Koenig, Christian
> <[email protected]>; David Airlie <[email protected]>; Simona Vetter
> <[email protected]>; [email protected]; dri-
> [email protected]; [email protected]; Keita Morisaki
> <[email protected]>
> Subject: [PATCH] drm/amd/display: Fix swap in median3() for DSC rate control
>
> [Some people who received this message don't often get email from
> [email protected]. Learn why this is important at
> https://aka.ms/LearnAboutSenderIdentification ]
>
> median3() is meant to return the median of three values, but its last 
> compare-and-
> swap step swaps b and c instead of a and b. When c is smaller than both a and 
> b, it
> returns max(a, b) instead of min(a, b).
> For example, median3(2, 3, 1) returns 3 instead of 2.
>
> _do_calc_rc_params() always passes 0 as the first argument, and the second
> argument is never below 12. So whenever the third argument is negative,
> first_line_bpg_offset (and second_line_bpg_offset for 4:2:0) is set to the 
> second
> argument instead of 0.
>
> Fix this by swapping a and b in the last step, as intended.
>
> Note that this change does not affect valid DSC configurations. The third 
> argument
> is negative only when bits per pixel exceeds the uncompressed rate of the 
> colour
> format:
>
>  - 3 * bpc for 4:4:4, 3 * bpc + 2 for RGB
>
>  - 2 * bpc for 4:2:2
>
>  - 1.5 * bpc for 4:2:0
>
> Fixes: 97bda0322b8a ("drm/amd/display: Add DSC support for Navi (v2)")
> Signed-off-by: Keita Morisaki <[email protected]>
> ---
>  drivers/gpu/drm/amd/display/dc/dml/dsc/rc_calc_fpu.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/amd/display/dc/dml/dsc/rc_calc_fpu.c
> b/drivers/gpu/drm/amd/display/dc/dml/dsc/rc_calc_fpu.c
> index b8fc27a5361e..657173d8081c 100644
> --- a/drivers/gpu/drm/amd/display/dc/dml/dsc/rc_calc_fpu.c
> +++ b/drivers/gpu/drm/amd/display/dc/dml/dsc/rc_calc_fpu.c
> @@ -46,7 +46,7 @@ static int median3(int a, int b, int c)
>         if (b > c)
>                 swap(b, c);
>         if (a > b)
> -               swap(b, c);
> +               swap(a, b);
>
>         return b;
>  }
>
> base-commit: 93f51579e7df248780214094418f205253383cc5
> --
> 2.43.0

Reply via email to