Message ID | 20220711173928.3858-1-mario.kleiner.de@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm/amd/display: Only use depth 36 bpp linebuffers on DCN display engines. | expand |
Applied. Thanks! Alex On Mon, Jul 11, 2022 at 1:39 PM Mario Kleiner <mario.kleiner.de@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@gmail.com> > Tested-by: Mario Kleiner <mario.kleiner.de@gmail.com> > Cc: stable@vger.kernel.org # 5.14.0 > Cc: Alex Deucher <alexander.deucher@amd.com> > Cc: Harry Wentland <harry.wentland@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 >
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;