mirror of https://gitee.com/openkylin/linux.git
drm/dp/mst: Handle arbitrary DP_LINK_BW values
Make drm_dp_get_vc_payload() tolerate arbitrary DP_LINK_BW_*
values, just like drm_dp_bw_code_to_link_rate() does since commit
57a1b08937
("drm: Make the bw/link rate calculations more forgiving").
Cc: Lyude Paul <lyude@redhat.com>
Cc: Sean Paul <seanpaul@chromium.org>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190925141442.23236-2-ville.syrjala@linux.intel.com
Reviewed-by: Lyude Paul <lyude@redhat.com>
This commit is contained in:
parent
db0cc143b6
commit
0c3bb15cfc
|
@ -2977,30 +2977,13 @@ static int drm_dp_send_up_ack_reply(struct drm_dp_mst_topology_mgr *mgr,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool drm_dp_get_vc_payload_bw(int dp_link_bw,
|
static int drm_dp_get_vc_payload_bw(u8 dp_link_bw, u8 dp_link_count)
|
||||||
int dp_link_count,
|
|
||||||
int *out)
|
|
||||||
{
|
{
|
||||||
switch (dp_link_bw) {
|
if (dp_link_bw == 0 || dp_link_count == 0)
|
||||||
default:
|
|
||||||
DRM_DEBUG_KMS("invalid link bandwidth in DPCD: %x (link count: %d)\n",
|
DRM_DEBUG_KMS("invalid link bandwidth in DPCD: %x (link count: %d)\n",
|
||||||
dp_link_bw, dp_link_count);
|
dp_link_bw, dp_link_count);
|
||||||
return false;
|
|
||||||
|
|
||||||
case DP_LINK_BW_1_62:
|
return dp_link_bw * dp_link_count / 2;
|
||||||
*out = 3 * dp_link_count;
|
|
||||||
break;
|
|
||||||
case DP_LINK_BW_2_7:
|
|
||||||
*out = 5 * dp_link_count;
|
|
||||||
break;
|
|
||||||
case DP_LINK_BW_5_4:
|
|
||||||
*out = 10 * dp_link_count;
|
|
||||||
break;
|
|
||||||
case DP_LINK_BW_8_1:
|
|
||||||
*out = 15 * dp_link_count;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -3032,9 +3015,9 @@ int drm_dp_mst_topology_mgr_set_mst(struct drm_dp_mst_topology_mgr *mgr, bool ms
|
||||||
goto out_unlock;
|
goto out_unlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!drm_dp_get_vc_payload_bw(mgr->dpcd[1],
|
mgr->pbn_div = drm_dp_get_vc_payload_bw(mgr->dpcd[1],
|
||||||
mgr->dpcd[2] & DP_MAX_LANE_COUNT_MASK,
|
mgr->dpcd[2] & DP_MAX_LANE_COUNT_MASK);
|
||||||
&mgr->pbn_div)) {
|
if (mgr->pbn_div == 0) {
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto out_unlock;
|
goto out_unlock;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue