drm: zynqmp_dp: Adjust training values per-lane
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> Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> Link: https://patchwork.freedesktop.org/patch/msgid/20240423171859.3953024-5-sean.anderson@linux.dev
This commit is contained in:
parent
25af9c1ab3
commit
c032d84694
@ -606,28 +606,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;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user