On Tue, Jul 16, 2024 at 01:10:37PM -0400, Alex Deucher wrote: > From 8aaf8da07a8b542c0a0f4da2601da07beddfdeb0 Mon Sep 17 00:00:00 2001 > From: Alex Deucher <alexander.deucher@xxxxxxx> > Date: Tue, 16 Jul 2024 12:49:25 -0400 > Subject: [PATCH] drm/amd/display: fix corruption with high refresh rates on > DCN 3.0 > > This reverts commit bc87d666c05a13e6d4ae1ddce41fc43d2567b9a2 and the > register changes from commit 6d4279cb99ac4f51d10409501d29969f687ac8dc. > > Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3478 > Cc: mikhail.v.gavrilov@xxxxxxxxx > Cc: Rodrigo Siqueira <Rodrigo.Siqueira@xxxxxxx> > Signed-off-by: Alex Deucher <alexander.deucher@xxxxxxx> > --- > .../drm/amd/display/dc/optc/dcn10/dcn10_optc.c | 15 +++------------ > .../drm/amd/display/dc/optc/dcn20/dcn20_optc.c | 10 ++++++++++ > 2 files changed, 13 insertions(+), 12 deletions(-) > > diff --git a/drivers/gpu/drm/amd/display/dc/optc/dcn10/dcn10_optc.c b/drivers/gpu/drm/amd/display/dc/optc/dcn10/dcn10_optc.c > index 4f82146d94b1..f00d27b7c6fe 100644 > --- a/drivers/gpu/drm/amd/display/dc/optc/dcn10/dcn10_optc.c > +++ b/drivers/gpu/drm/amd/display/dc/optc/dcn10/dcn10_optc.c > @@ -950,19 +950,10 @@ void optc1_set_drr( > OTG_FORCE_LOCK_ON_EVENT, 0, > OTG_SET_V_TOTAL_MIN_MASK_EN, 0, > OTG_SET_V_TOTAL_MIN_MASK, 0); > - > - // Setup manual flow control for EOF via TRIG_A > - optc->funcs->setup_manual_trigger(optc); > - > - } else { > - REG_UPDATE_4(OTG_V_TOTAL_CONTROL, > - OTG_SET_V_TOTAL_MIN_MASK, 0, > - OTG_V_TOTAL_MIN_SEL, 0, > - OTG_V_TOTAL_MAX_SEL, 0, > - OTG_FORCE_LOCK_ON_EVENT, 0); > - > - optc->funcs->set_vtotal_min_max(optc, 0, 0); > } > + > + // Setup manual flow control for EOF via TRIG_A > + optc->funcs->setup_manual_trigger(optc); > } > > void optc1_set_vtotal_min_max(struct timing_generator *optc, int vtotal_min, int vtotal_max) > diff --git a/drivers/gpu/drm/amd/display/dc/optc/dcn20/dcn20_optc.c b/drivers/gpu/drm/amd/display/dc/optc/dcn20/dcn20_optc.c > index 43417cff2c9b..b4694985a40a 100644 > --- a/drivers/gpu/drm/amd/display/dc/optc/dcn20/dcn20_optc.c > +++ b/drivers/gpu/drm/amd/display/dc/optc/dcn20/dcn20_optc.c > @@ -453,6 +453,16 @@ void optc2_setup_manual_trigger(struct timing_generator *optc) > { > struct optc *optc1 = DCN10TG_FROM_TG(optc); > > + /* Set the min/max selectors unconditionally so that > + * DMCUB fw may change OTG timings when necessary > + * TODO: Remove the w/a after fixing the issue in DMCUB firmware > + */ > + REG_UPDATE_4(OTG_V_TOTAL_CONTROL, > + OTG_V_TOTAL_MIN_SEL, 1, > + OTG_V_TOTAL_MAX_SEL, 1, > + OTG_FORCE_LOCK_ON_EVENT, 0, > + OTG_SET_V_TOTAL_MIN_MASK, (1 << 1)); /* TRIGA */ > + > REG_SET_8(OTG_TRIGA_CNTL, 0, > OTG_TRIGA_SOURCE_SELECT, 21, > OTG_TRIGA_SOURCE_PIPE_SELECT, optc->inst, > -- > 2.45.2 This patch fixes the bug for me too. I am using a Radeon RX 6400, and I've been encountering the bug when using 1920x1080 resolution on a monitor whose native resolution is 2560x1440. Feel free to add: Tested-by: Eric Biggers <ebiggers@xxxxxxxxxx> Thanks, - Eric