Hi Sean, Thank you for the patch. On Fri, Mar 15, 2024 at 07:09:12PM -0400, Sean Anderson wrote: > The feedback we get from the DPRX is per-lane. Make changes using this > information, instead of picking the maximum values from all lanes. This > results in more-consistent training on marginal links. > > Signed-off-by: Sean Anderson <sean.anderson@xxxxxxxxx> > --- > > drivers/gpu/drm/xlnx/zynqmp_dp.c | 23 ++++++++--------------- > 1 file changed, 8 insertions(+), 15 deletions(-) > > diff --git a/drivers/gpu/drm/xlnx/zynqmp_dp.c b/drivers/gpu/drm/xlnx/zynqmp_dp.c > index 98a32e6a0459..8635b5673386 100644 > --- a/drivers/gpu/drm/xlnx/zynqmp_dp.c > +++ b/drivers/gpu/drm/xlnx/zynqmp_dp.c > @@ -605,28 +605,21 @@ static void zynqmp_dp_adjust_train(struct zynqmp_dp *dp, > u8 link_status[DP_LINK_STATUS_SIZE]) > { > u8 *train_set = dp->train_set; > - u8 voltage = 0, preemphasis = 0; > u8 i; > > for (i = 0; i < dp->mode.lane_cnt; i++) { > - u8 v = drm_dp_get_adjust_request_voltage(link_status, i); > - u8 p = drm_dp_get_adjust_request_pre_emphasis(link_status, i); > + u8 voltage = drm_dp_get_adjust_request_voltage(link_status, i); > + u8 preemphasis = > + drm_dp_get_adjust_request_pre_emphasis(link_status, i); > > - if (v > voltage) > - voltage = v; > + if (voltage >= DP_TRAIN_VOLTAGE_SWING_LEVEL_3) > + voltage |= DP_TRAIN_MAX_SWING_REACHED; > > - if (p > preemphasis) > - preemphasis = p; > - } > + if (preemphasis >= DP_TRAIN_PRE_EMPH_LEVEL_2) > + preemphasis |= DP_TRAIN_MAX_PRE_EMPHASIS_REACHED; > > - if (voltage >= DP_TRAIN_VOLTAGE_SWING_LEVEL_3) > - voltage |= DP_TRAIN_MAX_SWING_REACHED; > - > - if (preemphasis >= DP_TRAIN_PRE_EMPH_LEVEL_2) > - preemphasis |= DP_TRAIN_MAX_PRE_EMPHASIS_REACHED; > - > - for (i = 0; i < dp->mode.lane_cnt; i++) > train_set[i] = voltage | preemphasis; > + } I don't have enough DP knowledge to review this :-( > } > > /** -- Regards, Laurent Pinchart