[PATCH] drm/amd/display: Only use depth 36 bpp linebuffers on DCN display engines.

Alex Deucher alexdeucher at gmail.com
Tue Jul 12 15:19:29 UTC 2022


Applied.  Thanks!

Alex

On Mon, Jul 11, 2022 at 1:39 PM Mario Kleiner
<mario.kleiner.de at gmail.com> wrote:
>
> Various DCE versions had trouble with 36 bpp lb depth, requiring fixes,
> last time in commit 353ca0fa5630 ("drm/amd/display: Fix 10bit 4K display
> on CIK GPUs") for DCE-8. So far >= DCE-11.2 was considered ok, but now I
> found out that on DCE-11.2 it causes dithering when there shouldn't be
> any, so identity pixel passthrough with identity gamma LUTs doesn't work
> when it should. This breaks various important neuroscience applications,
> as reported to me by scientific users of Polaris cards under Ubuntu 22.04
> with Linux 5.15, and confirmed by testing it myself on DCE-11.2.
>
> Lets only use depth 36 for DCN engines, where my testing showed that it
> is both necessary for high color precision output, e.g., RGBA16 fb's,
> and not harmful, as far as more than one year in real-world use showed.
>
> DCE engines seem to work fine for high precision output at 30 bpp, so
> this ("famous last words") depth 30 should hopefully fix all known problems
> without introducing new ones.
>
> Successfully retested on DCE-11.2 Polaris and DCN-1.0 Raven Ridge on
> top of Linux 5.19.0-rc2 + drm-next.
>
> Fixes: 353ca0fa5630 ("drm/amd/display: Fix 10bit 4K display on CIK GPUs")
> Signed-off-by: Mario Kleiner <mario.kleiner.de at gmail.com>
> Tested-by: Mario Kleiner <mario.kleiner.de at gmail.com>
> Cc: stable at vger.kernel.org # 5.14.0
> Cc: Alex Deucher <alexander.deucher at amd.com>
> Cc: Harry Wentland <harry.wentland at amd.com>
> ---
>  drivers/gpu/drm/amd/display/dc/core/dc_resource.c | 11 ++++++-----
>  1 file changed, 6 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
> index 6774dd8bb53e..3fe3fbac1e63 100644
> --- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
> +++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
> @@ -1117,12 +1117,13 @@ bool resource_build_scaling_params(struct pipe_ctx *pipe_ctx)
>          * on certain displays, such as the Sharp 4k. 36bpp is needed
>          * to support SURFACE_PIXEL_FORMAT_GRPH_ARGB16161616 and
>          * SURFACE_PIXEL_FORMAT_GRPH_ABGR16161616 with actual > 10 bpc
> -        * precision on at least DCN display engines. However, at least
> -        * Carrizo with DCE_VERSION_11_0 does not like 36 bpp lb depth,
> -        * so use only 30 bpp on DCE_VERSION_11_0. Testing with DCE 11.2 and 8.3
> -        * did not show such problems, so this seems to be the exception.
> +        * precision on DCN display engines, but apparently not for DCE, as
> +        * far as testing on DCE-11.2 and DCE-8 showed. Various DCE parts have
> +        * problems: Carrizo with DCE_VERSION_11_0 does not like 36 bpp lb depth,
> +        * neither do DCE-8 at 4k resolution, or DCE-11.2 (broken identify pixel
> +        * passthrough). Therefore only use 36 bpp on DCN where it is actually needed.
>          */
> -       if (plane_state->ctx->dce_version > DCE_VERSION_11_0)
> +       if (plane_state->ctx->dce_version > DCE_VERSION_MAX)
>                 pipe_ctx->plane_res.scl_data.lb_params.depth = LB_PIXEL_DEPTH_36BPP;
>         else
>                 pipe_ctx->plane_res.scl_data.lb_params.depth = LB_PIXEL_DEPTH_30BPP;
> --
> 2.34.1
>


More information about the dri-devel mailing list