[PATCH 2/3] drm/dp/mst: Handle arbitrary DP_LINK_BW values
Lyude Paul
lyude at redhat.com
Thu Sep 26 00:03:41 UTC 2019
Reviewed-by: Lyude Paul <lyude at redhat.com>
On Wed, 2019-09-25 at 17:14 +0300, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala at linux.intel.com>
>
> Make drm_dp_get_vc_payload() tolerate arbitrary DP_LINK_BW_*
> values, just like drm_dp_bw_code_to_link_rate() does since commit
> 57a1b0893782 ("drm: Make the bw/link rate calculations more forgiving").
>
> Cc: Lyude Paul <lyude at redhat.com>
> Cc: Sean Paul <seanpaul at chromium.org>
> Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
> ---
> drivers/gpu/drm/drm_dp_mst_topology.c | 29 ++++++---------------------
> 1 file changed, 6 insertions(+), 23 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c
> b/drivers/gpu/drm/drm_dp_mst_topology.c
> index e25597eb3ca1..d4644a3c1324 100644
> --- a/drivers/gpu/drm/drm_dp_mst_topology.c
> +++ b/drivers/gpu/drm/drm_dp_mst_topology.c
> @@ -2974,30 +2974,13 @@ static int drm_dp_send_up_ack_reply(struct
> drm_dp_mst_topology_mgr *mgr,
> return 0;
> }
>
> -static bool drm_dp_get_vc_payload_bw(int dp_link_bw,
> - int dp_link_count,
> - int *out)
> +static int drm_dp_get_vc_payload_bw(u8 dp_link_bw, u8 dp_link_count)
> {
> - switch (dp_link_bw) {
> - default:
> + if (dp_link_bw == 0 || dp_link_count == 0)
> DRM_DEBUG_KMS("invalid link bandwidth in DPCD: %x (link count:
> %d)\n",
> dp_link_bw, dp_link_count);
> - return false;
>
> - case DP_LINK_BW_1_62:
> - *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;
> + return dp_link_bw * dp_link_count / 2;
> }
>
> /**
> @@ -3029,9 +3012,9 @@ int drm_dp_mst_topology_mgr_set_mst(struct
> drm_dp_mst_topology_mgr *mgr, bool ms
> goto out_unlock;
> }
>
> - if (!drm_dp_get_vc_payload_bw(mgr->dpcd[1],
> - mgr->dpcd[2] &
> DP_MAX_LANE_COUNT_MASK,
> - &mgr->pbn_div)) {
> + mgr->pbn_div = drm_dp_get_vc_payload_bw(mgr->dpcd[1],
> + mgr->dpcd[2] &
> DP_MAX_LANE_COUNT_MASK);
> + if (mgr->pbn_div == 0) {
> ret = -EINVAL;
> goto out_unlock;
> }
--
Cheers,
Lyude Paul
More information about the dri-devel
mailing list