From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Paul Subject: [PATCH v3 3/5] drm/dp_mst: Add drm_dp_mst_topology_mgr_lower_link_rate() Date: Fri, 9 Mar 2018 16:32:29 -0500 Message-ID: <20180309213232.19855-3-lyude@redhat.com> References: <20180308232421.14049-1-lyude@redhat.com> <20180309213232.19855-1-lyude@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180309213232.19855-1-lyude@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: intel-gfx@lists.freedesktop.org Cc: David Airlie , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Manasi Navare List-Id: dri-devel@lists.freedesktop.org VW5saWtlIFNTVCwgTVNUIGNhbiBoYXZlIGZhciBtb3JlIHRoZW4gYSBzaW5nbGUgZGlzcGxheSBo b29rZWQgdXAgb24gYQpzaW5nbGUgcG9ydC4gV2hhdCB0aGlzIGFsc28gbWVhbnMgaG93ZXZlciwg aXMgdGhhdCBpZiB0aGUgRGlzcGxheVBvcnQKbGluayB0byB0aGUgdG9wLWxldmVsIE1TVCBicmFu Y2ggZGV2aWNlIGJlY29tZXMgdW5zdGFibGUgdGhlbiBldmVyeQpzaW5nbGUgYnJhbmNoIGRldmlj ZSBhbHNvIGhhcyBhbiB1bnN0YWJsZSBsaW5rLiBBZGRpdGlvbmFsbHksIE1TVCBoYXMgYQpmZXcg bW9yZSBzdGVwcyB0aGF0IG11c3QgYmUgdGFrZW4gaW4gb3JkZXIgdG8gcHJvcGVybHkgcmV0cmFp biB0aGUKZW50aXJlIHRvcG9sb2d5IHVuZGVyIGEgbG93ZXIgbGluayByYXRlLiBTaW5jZSB0aGUg VkNJRCBhbGxvY2F0aW9ucyBmb3IKZWFjaCBtc3RiIGlzIGRldGVybWluZWQgYmFzZWQgb2ZmIHRo ZSBsaW5rIHJhdGUgZm9yIHRoZSB0b3Agb2YgdGhlCnRvcG9sb2d5LCB3ZSBhbHNvIGhhdmUgdG8g cmVjYWxjdWxhdGUgYWxsIG9mIHRoZSBWQ0lEIGFsbG9jYXRpb25zIGZvcgp0aGUgZG93bnN0cmVh bSBwb3J0cyBhcyB3ZWxsIHRvIGVuc3VyZSB0aGF0IHdlIHN0aWxsIGhhdmUgZW5vdWdoIGxpbmsK YmFuZHdpZHRoIHRvIGRyaXZlIGVhY2ggbXN0Yi4KCkFkZGl0aW9uYWxseSwgc2luY2Ugd2UgaGF2 ZSBtdWx0aXBsZSBkb3duc3RyZWFtIGNvbm5lY3RvcnMgcGVyIHBvcnQsCnNldHRpbmcgdGhlIGxp bmsgc3RhdHVzIG9mIHRoZSBwYXJlbnQgbXN0YidzIHBvcnQgdG8gYmFkIGlzbid0IGVub3VnaDoK YWxsIG9mIHRoZSBkb3duc3RyZWFtIG1zdGIgcG9ydHMgaGF2ZSB0byBoYXZlIHRoZWlyIGxpbmsg c3RhdHVzIHNldCB0bwpiYWQuCgpUaGlzIGJhc2ljYWxseSBmb2xsb3dzIHRoZSBzYW1lIHBhcmFk aWdtIHRoYXQgb3VyIERQIGxpbmsgc3RhdHVzIGxvZ2ljCmluIERSTSBkb2VzLCBpbiB0aGF0IHdl IHNpbXBseSB0ZWxsIHVzZXJzcGFjZSB0aGF0IGFsbCBvZiB0aGUgbXN0YiBwb3J0cwpuZWVkIHJl dHJhaW5pbmcgYW5kIGFkZGl0aW9uYWxseSBhcHBseWluZyB0aGUgbmV3IGxvd2VyIGJhbmR3aWR0 aApjb25zdHJhaW50cyB0byBhbGwgb2YgdGhlIGF0b21pYyBjb21taXRzIG9uIHRoZSB0b3BvbG9n eSB0aGF0IGZvbGxvdy4KClNpbmNlIHRoZSB3b3JrIG9mIGZpZ3VyaW5nIG91dCB3aGljaCBjb25u ZWN0b3JzIGxpdmUgZG93bnN0cmVhbSBvbiBhbgpNU1QgdG9wb2xvZ3kgYW5kIHVwZGF0aW5nIHRo ZWlyIGxpbmsgc3RhdHVzIGlzIHNvbWV0aGluZyB0aGF0IGFueSBkcml2ZXIKc3VwcG9ydGluZyBN U1QgaXMgZ29pbmcgdG8gbmVlZCB0byBkbyBpbiBvcmRlciB0byByZXRyYWluIE1TVCBsaW5rcwpw cm9wZXJseSwgd2UgYWRkIHRoZSBkcm1fZHBfbXN0X3RvcG9sb2d5X21ncl9sb3dlcl9saW5rX3Jh dGUoKSBoZWxwZXIKd2hpY2ggc2ltcGx5IHJlY2FsY3VsYXRlcyB0aGUgcGJuX2RpdiBmb3IgYSBn aXZlbiBtc3QgdG9wb2xvZ3ksIHRoZW4KbWFya3MgdGhlIGxpbmsgc3RhdHVzIG9mIGFsbCBjb25u ZWN0b3JzIGxpdmluZyBpbiB0aGF0IHRvcG9sb2d5IGFzIGJhZC4KV2UnbGwgbWFrZSB1c2Ugb2Yg aXQgaW4gaTkxNSBsYXRlciBpbiB0aGlzIHNlcmllcy4KClNpZ25lZC1vZmYtYnk6IEx5dWRlIFBh dWwgPGx5dWRlQHJlZGhhdC5jb20+CkNjOiBNYW5hc2kgTmF2YXJlIDxtYW5hc2kuZC5uYXZhcmVA aW50ZWwuY29tPgpDYzogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVs LmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90b3BvbG9neS5jIHwgNzMgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KIGluY2x1ZGUvZHJtL2RybV9kcF9tc3Rf aGVscGVyLmggICAgICAgfCAgMyArKwogMiBmaWxlcyBjaGFuZ2VkLCA3NSBpbnNlcnRpb25zKCsp LCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9tc3Rf dG9wb2xvZ3kuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMKaW5kZXgg NmZhYzQxMjllNmEyLi4wZDY2MDQ1MDBiMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9k cm1fZHBfbXN0X3RvcG9sb2d5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9tc3RfdG9w b2xvZ3kuYwpAQCAtMjA3Niw3ICsyMDc2LDcgQEAgc3RhdGljIGJvb2wgZHJtX2RwX2dldF92Y19w YXlsb2FkX2J3KGludCBkcF9saW5rX2J3LAogewogCXN3aXRjaCAoZHBfbGlua19idykgewogCWRl ZmF1bHQ6Ci0JCURSTV9ERUJVR19LTVMoImludmFsaWQgbGluayBiYW5kd2lkdGggaW4gRFBDRDog JXggKGxpbmsgY291bnQ6ICVkKVxuIiwKKwkJRFJNX0RFQlVHX0tNUygiaW52YWxpZCBsaW5rIGJh bmR3aWR0aDogJXggKGxpbmsgY291bnQ6ICVkKVxuIiwKIAkJCSAgICAgIGRwX2xpbmtfYncsIGRw X2xpbmtfY291bnQpOwogCQlyZXR1cm4gZmFsc2U7CiAKQEAgLTIwOTYsNiArMjA5Niw3NyBAQCBz dGF0aWMgYm9vbCBkcm1fZHBfZ2V0X3ZjX3BheWxvYWRfYncoaW50IGRwX2xpbmtfYncsCiAJcmV0 dXJuIHRydWU7CiB9CiAKK3N0YXRpYyB2b2lkIGRybV9kcF9zZXRfbXN0Yl9saW5rX3N0YXR1cyhz dHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKm1zdGIsCisJCQkJCWVudW0gZHJtX2xpbmtfc3RhdHVz IHN0YXR1cykKK3sKKwlzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKnJtc3RiOworCXN0cnVjdCBk cm1fZHBfbXN0X3BvcnQgKnBvcnQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnQsICZtc3Ri LT5wb3J0cywgbmV4dCkgeworCQlybXN0YiA9IGRybV9kcF9nZXRfdmFsaWRhdGVkX21zdGJfcmVm KG1zdGItPm1nciwgcG9ydC0+bXN0Yik7CisJCWlmIChybXN0YikgeworCQkJZHJtX2RwX3NldF9t c3RiX2xpbmtfc3RhdHVzKHJtc3RiLCBzdGF0dXMpOworCQkJZHJtX2RwX3B1dF9tc3RfYnJhbmNo X2RldmljZShybXN0Yik7CisJCX0KKworCQlpZiAocG9ydC0+Y29ubmVjdG9yKQorCQkJcG9ydC0+ Y29ubmVjdG9yLT5zdGF0ZS0+bGlua19zdGF0dXMgPSBzdGF0dXM7CisJfQorfQorCisvKioKKyAq IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX2xvd2VyX2xpbmtfcmF0ZSgpIC0gT3ZlcnJpZGUgdGhl IERQIGxpbmsgYncvY291bnQKKyAqIGZvciBhbGwgY29ubmVjdG9ycyBpbiBhIGdpdmVuIE1TVCB0 b3BvbG9neQorICogQG1ncjogbWFuYWdlciB0byBzZXQgc3RhdGUgZm9yCisgKiBAZHBfbGlua19i dzogVGhlIG5ldyBEUCBsaW5rIGJhbmR3aWR0aAorICogQGRwX2xpbmtfY291bnQ6IFRoZSBuZXcg RFAgbGluayBjb3VudAorICoKKyAqIFRoaXMgaXMgY2FsbGVkIGJ5IHRoZSBkcml2ZXIgd2hlbiBp dCBkZXRlY3RzIHRoYXQgdGhlIGN1cnJlbnQgRFAgbGluayBmb3IKKyAqIHRoZSBnaXZlbiB0b3Bv bG9neSBtYW5hZ2VyIGlzIHVuc3RhYmxlLCBhbmQgbmVlZHMgdG8gYmUgcmV0cmFpbmVkIGF0IGEK KyAqIGxvd2VyIGxpbmsgcmF0ZS4KKyAqCisgKiBUaGlzIHRha2VzIGNhcmUgb2YgdXBkYXRpbmcg dGhlIGxpbmsgc3RhdHVzIG9uIGFsbCBkb3duc3RyZWFtIGNvbm5lY3RvcnMKKyAqIGFsb25nIHdp dGggcmVjYWxjdWxhdGluZyB0aGUgVkMgcGF5bG9hZHMuIFRoZSBkcml2ZXIgc2hvdWxkIHNlbmQg YSBob3RwbHVnCisgKiBldmVudCBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gdG8gbm90aWZ5 IHVzZXJzcGFjZSBvZiB0aGUgbGluayBzdGF0dXMKKyAqIGNoYW5nZS4KKyAqCisgKiBSRVRVUk5T OgorICoKKyAqIFRydWUgZm9yIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFp bHVyZS4KKyAqLworaW50IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX2xvd2VyX2xpbmtfcmF0ZShz dHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKKwkJCQkJICAgIGludCBkcF9saW5r X2J3LCBpbnQgZHBfbGlua19jb3VudCkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWdy LT5kZXY7CisJc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoICptc3RfcHJpbWFyeTsKKwlpbnQgbmV3 X3Bibl9kaXY7CisJaW50IHJldCA9IDA7CisKKwlkcm1fbW9kZXNldF9sb2NrKCZkZXYtPm1vZGVf Y29uZmlnLmNvbm5lY3Rpb25fbXV0ZXgsIE5VTEwpOworCisJaWYgKCFkcm1fZHBfZ2V0X3ZjX3Bh eWxvYWRfYncoZHJtX2RwX2xpbmtfcmF0ZV90b19id19jb2RlKGRwX2xpbmtfYncpLAorCQkJCSAg ICAgIGRwX2xpbmtfY291bnQsICZuZXdfcGJuX2RpdikpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJ Z290byBvdXQ7CisJfQorCisJbXN0X3ByaW1hcnkgPSBkcm1fZHBfZ2V0X3ZhbGlkYXRlZF9tc3Ri X3JlZihtZ3IsIG1nci0+bXN0X3ByaW1hcnkpOworCWlmICghbXN0X3ByaW1hcnkpCisJCWdvdG8g b3V0OworCisJRFJNX0RFQlVHX0tNUygiTVNUIGxpbmsgZmFpbGVkIHRvIHJldHJhaW4sIGxvd2Vy aW5nIHBibl9kaXYgdG8gJWRcbiIsCisJCSAgICAgIG5ld19wYm5fZGl2KTsKKwltZ3ItPnBibl9k aXYgPSBuZXdfcGJuX2RpdjsKKworCWRybV9kcF9zZXRfbXN0Yl9saW5rX3N0YXR1cyhtc3RfcHJp bWFyeSwgRFJNX01PREVfTElOS19TVEFUVVNfQkFEKTsKKworCWRybV9kcF9wdXRfbXN0X2JyYW5j aF9kZXZpY2UobXN0X3ByaW1hcnkpOworb3V0OgorCWRybV9tb2Rlc2V0X3VubG9jaygmZGV2LT5t b2RlX2NvbmZpZy5jb25uZWN0aW9uX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZ TUJPTChkcm1fZHBfbXN0X3RvcG9sb2d5X21ncl9sb3dlcl9saW5rX3JhdGUpOworCiAvKioKICAq IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX3NldF9tc3QoKSAtIFNldCB0aGUgTVNUIHN0YXRlIGZv ciBhIHRvcG9sb2d5IG1hbmFnZXIKICAqIEBtZ3I6IG1hbmFnZXIgdG8gc2V0IHN0YXRlIGZvcgpk aWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2RwX21zdF9oZWxwZXIuaCBiL2luY2x1ZGUvZHJt L2RybV9kcF9tc3RfaGVscGVyLmgKaW5kZXggN2Y3OGQyNmEwNzY2Li42MjYxZWM0M2EyYzAgMTAw NjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9kcF9tc3RfaGVscGVyLmgKKysrIGIvaW5jbHVkZS9k cm0vZHJtX2RwX21zdF9oZWxwZXIuaApAQCAtNjM0LDQgKzYzNCw3IEBAIGludCBkcm1fZHBfYXRv bWljX3JlbGVhc2VfdmNwaV9zbG90cyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCiBp bnQgZHJtX2RwX3NlbmRfcG93ZXJfdXBkb3duX3BoeShzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9n eV9tZ3IgKm1nciwKIAkJCQkgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCwgYm9vbCBwb3dl cl91cCk7CiAKK2ludCBkcm1fZHBfbXN0X3RvcG9sb2d5X21ncl9sb3dlcl9saW5rX3JhdGUoc3Ry dWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCisJCQkJCSAgICBpbnQgZHBfbGlua19i dywgaW50IGRwX2xpbmtfY291bnQpOworCiAjZW5kaWYKLS0gCjIuMTQuMwoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlz dApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932507AbeCIVe1 (ORCPT ); Fri, 9 Mar 2018 16:34:27 -0500 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:36912 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932195AbeCIVdH (ORCPT ); Fri, 9 Mar 2018 16:33:07 -0500 From: Lyude Paul To: intel-gfx@lists.freedesktop.org Cc: dri-devel@lists.freedesktop.org, Manasi Navare , =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= , Gustavo Padovan , Maarten Lankhorst , Sean Paul , David Airlie , linux-kernel@vger.kernel.org Subject: [PATCH v3 3/5] drm/dp_mst: Add drm_dp_mst_topology_mgr_lower_link_rate() Date: Fri, 9 Mar 2018 16:32:29 -0500 Message-Id: <20180309213232.19855-3-lyude@redhat.com> In-Reply-To: <20180309213232.19855-1-lyude@redhat.com> References: <20180308232421.14049-1-lyude@redhat.com> <20180309213232.19855-1-lyude@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Unlike SST, MST can have far more then a single display hooked up on a single port. What this also means however, is that if the DisplayPort link to the top-level MST branch device becomes unstable then every single branch device also has an unstable link. Additionally, MST has a few more steps that must be taken in order to properly retrain the entire topology under a lower link rate. Since the VCID allocations for each mstb is determined based off the link rate for the top of the topology, we also have to recalculate all of the VCID allocations for the downstream ports as well to ensure that we still have enough link bandwidth to drive each mstb. Additionally, since we have multiple downstream connectors per port, setting the link status of the parent mstb's port to bad isn't enough: all of the downstream mstb ports have to have their link status set to bad. This basically follows the same paradigm that our DP link status logic in DRM does, in that we simply tell userspace that all of the mstb ports need retraining and additionally applying the new lower bandwidth constraints to all of the atomic commits on the topology that follow. Since the work of figuring out which connectors live downstream on an MST topology and updating their link status is something that any driver supporting MST is going to need to do in order to retrain MST links properly, we add the drm_dp_mst_topology_mgr_lower_link_rate() helper which simply recalculates the pbn_div for a given mst topology, then marks the link status of all connectors living in that topology as bad. We'll make use of it in i915 later in this series. Signed-off-by: Lyude Paul Cc: Manasi Navare Cc: Ville Syrjälä --- drivers/gpu/drm/drm_dp_mst_topology.c | 73 ++++++++++++++++++++++++++++++++++- include/drm/drm_dp_mst_helper.h | 3 ++ 2 files changed, 75 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c index 6fac4129e6a2..0d6604500b29 100644 --- a/drivers/gpu/drm/drm_dp_mst_topology.c +++ b/drivers/gpu/drm/drm_dp_mst_topology.c @@ -2076,7 +2076,7 @@ static bool drm_dp_get_vc_payload_bw(int dp_link_bw, { switch (dp_link_bw) { default: - DRM_DEBUG_KMS("invalid link bandwidth in DPCD: %x (link count: %d)\n", + DRM_DEBUG_KMS("invalid link bandwidth: %x (link count: %d)\n", dp_link_bw, dp_link_count); return false; @@ -2096,6 +2096,77 @@ static bool drm_dp_get_vc_payload_bw(int dp_link_bw, return true; } +static void drm_dp_set_mstb_link_status(struct drm_dp_mst_branch *mstb, + enum drm_link_status status) +{ + struct drm_dp_mst_branch *rmstb; + struct drm_dp_mst_port *port; + + list_for_each_entry(port, &mstb->ports, next) { + rmstb = drm_dp_get_validated_mstb_ref(mstb->mgr, port->mstb); + if (rmstb) { + drm_dp_set_mstb_link_status(rmstb, status); + drm_dp_put_mst_branch_device(rmstb); + } + + if (port->connector) + port->connector->state->link_status = status; + } +} + +/** + * drm_dp_mst_topology_mgr_lower_link_rate() - Override the DP link bw/count + * for all connectors in a given MST topology + * @mgr: manager to set state for + * @dp_link_bw: The new DP link bandwidth + * @dp_link_count: The new DP link count + * + * This is called by the driver when it detects that the current DP link for + * the given topology manager is unstable, and needs to be retrained at a + * lower link rate. + * + * This takes care of updating the link status on all downstream connectors + * along with recalculating the VC payloads. The driver should send a hotplug + * event after calling this function to notify userspace of the link status + * change. + * + * RETURNS: + * + * True for success, or negative error code on failure. + */ +int drm_dp_mst_topology_mgr_lower_link_rate(struct drm_dp_mst_topology_mgr *mgr, + int dp_link_bw, int dp_link_count) +{ + struct drm_device *dev = mgr->dev; + struct drm_dp_mst_branch *mst_primary; + int new_pbn_div; + int ret = 0; + + drm_modeset_lock(&dev->mode_config.connection_mutex, NULL); + + if (!drm_dp_get_vc_payload_bw(drm_dp_link_rate_to_bw_code(dp_link_bw), + dp_link_count, &new_pbn_div)) { + ret = -EINVAL; + goto out; + } + + mst_primary = drm_dp_get_validated_mstb_ref(mgr, mgr->mst_primary); + if (!mst_primary) + goto out; + + DRM_DEBUG_KMS("MST link failed to retrain, lowering pbn_div to %d\n", + new_pbn_div); + mgr->pbn_div = new_pbn_div; + + drm_dp_set_mstb_link_status(mst_primary, DRM_MODE_LINK_STATUS_BAD); + + drm_dp_put_mst_branch_device(mst_primary); +out: + drm_modeset_unlock(&dev->mode_config.connection_mutex); + return ret; +} +EXPORT_SYMBOL(drm_dp_mst_topology_mgr_lower_link_rate); + /** * drm_dp_mst_topology_mgr_set_mst() - Set the MST state for a topology manager * @mgr: manager to set state for diff --git a/include/drm/drm_dp_mst_helper.h b/include/drm/drm_dp_mst_helper.h index 7f78d26a0766..6261ec43a2c0 100644 --- a/include/drm/drm_dp_mst_helper.h +++ b/include/drm/drm_dp_mst_helper.h @@ -634,4 +634,7 @@ int drm_dp_atomic_release_vcpi_slots(struct drm_atomic_state *state, int drm_dp_send_power_updown_phy(struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_port *port, bool power_up); +int drm_dp_mst_topology_mgr_lower_link_rate(struct drm_dp_mst_topology_mgr *mgr, + int dp_link_bw, int dp_link_count); + #endif -- 2.14.3