Message ID | 20240315230916.1759060-3-sean.anderson@linux.dev (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm: zynqmp_dp: Misc. patches and debugfs support | expand |
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@linux.dev> > --- > > 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 :-( > } > > /**
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; + } } /**
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@linux.dev> --- drivers/gpu/drm/xlnx/zynqmp_dp.c | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-)