From mboxrd@z Thu Jan 1 00:00:00 1970 From: Manasi Navare Subject: Re: [PATCH v3 3/5] drm/dp_mst: Add drm_dp_mst_topology_mgr_lower_link_rate() Date: Mon, 12 Mar 2018 14:28:14 -0700 Message-ID: <20180312212814.GB3022@intel.com> References: <20180308232421.14049-1-lyude@redhat.com> <20180309213232.19855-1-lyude@redhat.com> <20180309213232.19855-3-lyude@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20180309213232.19855-3-lyude@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Lyude Paul Cc: David Airlie , intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gRnJpLCBNYXIgMDksIDIwMTggYXQgMDQ6MzI6MjlQTSAtMDUwMCwgTHl1ZGUgUGF1bCB3cm90 ZToKPiBVbmxpa2UgU1NULCBNU1QgY2FuIGhhdmUgZmFyIG1vcmUgdGhlbiBhIHNpbmdsZSBkaXNw bGF5IGhvb2tlZCB1cCBvbiBhCj4gc2luZ2xlIHBvcnQuIFdoYXQgdGhpcyBhbHNvIG1lYW5zIGhv d2V2ZXIsIGlzIHRoYXQgaWYgdGhlIERpc3BsYXlQb3J0Cj4gbGluayB0byB0aGUgdG9wLWxldmVs IE1TVCBicmFuY2ggZGV2aWNlIGJlY29tZXMgdW5zdGFibGUgdGhlbiBldmVyeQo+IHNpbmdsZSBi cmFuY2ggZGV2aWNlIGFsc28gaGFzIGFuIHVuc3RhYmxlIGxpbmsuIEFkZGl0aW9uYWxseSwgTVNU IGhhcyBhCj4gZmV3IG1vcmUgc3RlcHMgdGhhdCBtdXN0IGJlIHRha2VuIGluIG9yZGVyIHRvIHBy b3Blcmx5IHJldHJhaW4gdGhlCj4gZW50aXJlIHRvcG9sb2d5IHVuZGVyIGEgbG93ZXIgbGluayBy YXRlLiBTaW5jZSB0aGUgVkNJRCBhbGxvY2F0aW9ucyBmb3IKPiBlYWNoIG1zdGIgaXMgZGV0ZXJt aW5lZCBiYXNlZCBvZmYgdGhlIGxpbmsgcmF0ZSBmb3IgdGhlIHRvcCBvZiB0aGUKPiB0b3BvbG9n eSwgd2UgYWxzbyBoYXZlIHRvIHJlY2FsY3VsYXRlIGFsbCBvZiB0aGUgVkNJRCBhbGxvY2F0aW9u cyBmb3IKPiB0aGUgZG93bnN0cmVhbSBwb3J0cyBhcyB3ZWxsIHRvIGVuc3VyZSB0aGF0IHdlIHN0 aWxsIGhhdmUgZW5vdWdoIGxpbmsKPiBiYW5kd2lkdGggdG8gZHJpdmUgZWFjaCBtc3RiLgo+IAo+ IEFkZGl0aW9uYWxseSwgc2luY2Ugd2UgaGF2ZSBtdWx0aXBsZSBkb3duc3RyZWFtIGNvbm5lY3Rv cnMgcGVyIHBvcnQsCj4gc2V0dGluZyB0aGUgbGluayBzdGF0dXMgb2YgdGhlIHBhcmVudCBtc3Ri J3MgcG9ydCB0byBiYWQgaXNuJ3QgZW5vdWdoOgo+IGFsbCBvZiB0aGUgZG93bnN0cmVhbSBtc3Ri IHBvcnRzIGhhdmUgdG8gaGF2ZSB0aGVpciBsaW5rIHN0YXR1cyBzZXQgdG8KPiBiYWQuCj4gCj4g VGhpcyBiYXNpY2FsbHkgZm9sbG93cyB0aGUgc2FtZSBwYXJhZGlnbSB0aGF0IG91ciBEUCBsaW5r IHN0YXR1cyBsb2dpYwo+IGluIERSTSBkb2VzLCBpbiB0aGF0IHdlIHNpbXBseSB0ZWxsIHVzZXJz cGFjZSB0aGF0IGFsbCBvZiB0aGUgbXN0YiBwb3J0cwo+IG5lZWQgcmV0cmFpbmluZyBhbmQgYWRk aXRpb25hbGx5IGFwcGx5aW5nIHRoZSBuZXcgbG93ZXIgYmFuZHdpZHRoCj4gY29uc3RyYWludHMg dG8gYWxsIG9mIHRoZSBhdG9taWMgY29tbWl0cyBvbiB0aGUgdG9wb2xvZ3kgdGhhdCBmb2xsb3cu Cj4gCj4gU2luY2UgdGhlIHdvcmsgb2YgZmlndXJpbmcgb3V0IHdoaWNoIGNvbm5lY3RvcnMgbGl2 ZSBkb3duc3RyZWFtIG9uIGFuCj4gTVNUIHRvcG9sb2d5IGFuZCB1cGRhdGluZyB0aGVpciBsaW5r IHN0YXR1cyBpcyBzb21ldGhpbmcgdGhhdCBhbnkgZHJpdmVyCj4gc3VwcG9ydGluZyBNU1QgaXMg Z29pbmcgdG8gbmVlZCB0byBkbyBpbiBvcmRlciB0byByZXRyYWluIE1TVCBsaW5rcwo+IHByb3Bl cmx5LCB3ZSBhZGQgdGhlIGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX2xvd2VyX2xpbmtfcmF0ZSgp IGhlbHBlcgo+IHdoaWNoIHNpbXBseSByZWNhbGN1bGF0ZXMgdGhlIHBibl9kaXYgZm9yIGEgZ2l2 ZW4gbXN0IHRvcG9sb2d5LCB0aGVuCj4gbWFya3MgdGhlIGxpbmsgc3RhdHVzIG9mIGFsbCBjb25u ZWN0b3JzIGxpdmluZyBpbiB0aGF0IHRvcG9sb2d5IGFzIGJhZC4KPiBXZSdsbCBtYWtlIHVzZSBv ZiBpdCBpbiBpOTE1IGxhdGVyIGluIHRoaXMgc2VyaWVzLgo+IAo+IFNpZ25lZC1vZmYtYnk6IEx5 dWRlIFBhdWwgPGx5dWRlQHJlZGhhdC5jb20+Cj4gQ2M6IE1hbmFzaSBOYXZhcmUgPG1hbmFzaS5k Lm5hdmFyZUBpbnRlbC5jb20+Cj4gQ2M6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBs aW51eC5pbnRlbC5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fZHBfbXN0X3RvcG9s b2d5LmMgfCA3MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQo+ICBpbmNsdWRl L2RybS9kcm1fZHBfbXN0X2hlbHBlci5oICAgICAgIHwgIDMgKysKPiAgMiBmaWxlcyBjaGFuZ2Vk LCA3NSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rw X21zdF90b3BvbG9neS5jCj4gaW5kZXggNmZhYzQxMjllNmEyLi4wZDY2MDQ1MDBiMjkgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9tc3RfdG9wb2xvZ3kuYwo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMKPiBAQCAtMjA3Niw3ICsyMDc2LDcg QEAgc3RhdGljIGJvb2wgZHJtX2RwX2dldF92Y19wYXlsb2FkX2J3KGludCBkcF9saW5rX2J3LAo+ ICB7Cj4gIAlzd2l0Y2ggKGRwX2xpbmtfYncpIHsKPiAgCWRlZmF1bHQ6Cj4gLQkJRFJNX0RFQlVH X0tNUygiaW52YWxpZCBsaW5rIGJhbmR3aWR0aCBpbiBEUENEOiAleCAobGluayBjb3VudDogJWQp XG4iLAo+ICsJCURSTV9ERUJVR19LTVMoImludmFsaWQgbGluayBiYW5kd2lkdGg6ICV4IChsaW5r IGNvdW50OiAlZClcbiIsCj4gIAkJCSAgICAgIGRwX2xpbmtfYncsIGRwX2xpbmtfY291bnQpOwo+ ICAJCXJldHVybiBmYWxzZTsKPiAgCj4gQEAgLTIwOTYsNiArMjA5Niw3NyBAQCBzdGF0aWMgYm9v bCBkcm1fZHBfZ2V0X3ZjX3BheWxvYWRfYncoaW50IGRwX2xpbmtfYncsCj4gIAlyZXR1cm4gdHJ1 ZTsKPiAgfQo+ICAKPiArc3RhdGljIHZvaWQgZHJtX2RwX3NldF9tc3RiX2xpbmtfc3RhdHVzKHN0 cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqbXN0YiwKPiArCQkJCQllbnVtIGRybV9saW5rX3N0YXR1 cyBzdGF0dXMpCj4gK3sKPiArCXN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqcm1zdGI7Cj4gKwlz dHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0Owo+ICsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnko cG9ydCwgJm1zdGItPnBvcnRzLCBuZXh0KSB7Cj4gKwkJcm1zdGIgPSBkcm1fZHBfZ2V0X3ZhbGlk YXRlZF9tc3RiX3JlZihtc3RiLT5tZ3IsIHBvcnQtPm1zdGIpOwo+ICsJCWlmIChybXN0Yikgewo+ ICsJCQlkcm1fZHBfc2V0X21zdGJfbGlua19zdGF0dXMocm1zdGIsIHN0YXR1cyk7Cj4gKwkJCWRy bV9kcF9wdXRfbXN0X2JyYW5jaF9kZXZpY2Uocm1zdGIpOwo+ICsJCX0KPiArCj4gKwkJaWYgKHBv cnQtPmNvbm5lY3RvcikKPiArCQkJcG9ydC0+Y29ubmVjdG9yLT5zdGF0ZS0+bGlua19zdGF0dXMg PSBzdGF0dXM7Cj4gKwl9Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBkcm1fZHBfbXN0X3RvcG9sb2d5 X21ncl9sb3dlcl9saW5rX3JhdGUoKSAtIE92ZXJyaWRlIHRoZSBEUCBsaW5rIGJ3L2NvdW50Cj4g KyAqIGZvciBhbGwgY29ubmVjdG9ycyBpbiBhIGdpdmVuIE1TVCB0b3BvbG9neQo+ICsgKiBAbWdy OiBtYW5hZ2VyIHRvIHNldCBzdGF0ZSBmb3IKPiArICogQGRwX2xpbmtfYnc6IFRoZSBuZXcgRFAg bGluayBiYW5kd2lkdGgKCkkgd291bGQgcmF0aGVyIGNhbGwgdGhpcyBhcmd1bWVudCBhcyBkcF9s aW5rX3JhdGUgc2luY2UgdGhhdHMgd2hhdCB3ZSBhcmUgcGFzc2luZwphbmQgbm90IGRwX2xpbmtf YncuCgo+ICsgKiBAZHBfbGlua19jb3VudDogVGhlIG5ldyBEUCBsaW5rIGNvdW50Cj4gKyAqCj4g KyAqIFRoaXMgaXMgY2FsbGVkIGJ5IHRoZSBkcml2ZXIgd2hlbiBpdCBkZXRlY3RzIHRoYXQgdGhl IGN1cnJlbnQgRFAgbGluayBmb3IKPiArICogdGhlIGdpdmVuIHRvcG9sb2d5IG1hbmFnZXIgaXMg dW5zdGFibGUsIGFuZCBuZWVkcyB0byBiZSByZXRyYWluZWQgYXQgYQo+ICsgKiBsb3dlciBsaW5r IHJhdGUuCj4gKyAqCj4gKyAqIFRoaXMgdGFrZXMgY2FyZSBvZiB1cGRhdGluZyB0aGUgbGluayBz dGF0dXMgb24gYWxsIGRvd25zdHJlYW0gY29ubmVjdG9ycwo+ICsgKiBhbG9uZyB3aXRoIHJlY2Fs Y3VsYXRpbmcgdGhlIFZDIHBheWxvYWRzLiBUaGUgZHJpdmVyIHNob3VsZCBzZW5kIGEgaG90cGx1 Zwo+ICsgKiBldmVudCBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gdG8gbm90aWZ5IHVzZXJz cGFjZSBvZiB0aGUgbGluayBzdGF0dXMKPiArICogY2hhbmdlLgo+ICsgKgo+ICsgKiBSRVRVUk5T Ogo+ICsgKgo+ICsgKiBUcnVlIGZvciBzdWNjZXNzLCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9u IGZhaWx1cmUuCj4gKyAqLwo+ICtpbnQgZHJtX2RwX21zdF90b3BvbG9neV9tZ3JfbG93ZXJfbGlu a19yYXRlKHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ICsJCQkJCSAgICBp bnQgZHBfbGlua19idywgaW50IGRwX2xpbmtfY291bnQpCj4gK3sKPiArCXN0cnVjdCBkcm1fZGV2 aWNlICpkZXYgPSBtZ3ItPmRldjsKPiArCXN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqbXN0X3By aW1hcnk7Cj4gKwlpbnQgbmV3X3Bibl9kaXY7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwlkcm1f bW9kZXNldF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rpb25fbXV0ZXgsIE5VTEwpOwo+ ICsKPiArCWlmICghZHJtX2RwX2dldF92Y19wYXlsb2FkX2J3KGRybV9kcF9saW5rX3JhdGVfdG9f YndfY29kZShkcF9saW5rX2J3KSwKClRoaXMgZXhwbGFpbnMgbXkgY29tbWVudCBhYm92ZSwgd2Ug Y29udmVydCBsaW5rIHJhdGUgdG8gbGlua19idyBoZXJlIHNvIGJldHRlcgpjYWxsIHRoYXQgbGlu a19yYXRlIHRvIGJlZ2luIHdpdGgKCj4gKwkJCQkgICAgICBkcF9saW5rX2NvdW50LCAmbmV3X3Bi bl9kaXYpKSB7Cj4gKwkJcmV0ID0gLUVJTlZBTDsKPiArCQlnb3RvIG91dDsKPiArCX0KPiArCj4g Kwltc3RfcHJpbWFyeSA9IGRybV9kcF9nZXRfdmFsaWRhdGVkX21zdGJfcmVmKG1nciwgbWdyLT5t c3RfcHJpbWFyeSk7Cj4gKwlpZiAoIW1zdF9wcmltYXJ5KQo+ICsJCWdvdG8gb3V0Owo+ICsKPiAr CURSTV9ERUJVR19LTVMoIk1TVCBsaW5rIGZhaWxlZCB0byByZXRyYWluLCBsb3dlcmluZyBwYm5f ZGl2IHRvICVkXG4iLAo+ICsJCSAgICAgIG5ld19wYm5fZGl2KTsKClRoaXMgZGVidWcgbWVzc2Fn ZSBzZWVtcyBhIGxpdHRsZSBtaXNsZWFkaW5nIHNpbmNlIHdlIGFyZSBzYXlpbmcgdGhhdCBpdCBm YWlsZWQKdG8gdHJhaW4gbGluayBvciByZXRyYWluIGF0IHRoZSBzYW1lIHBhcmFtcyBhbmQgbm93 IHdlIGFyZSByZXRyYWluaW5nIHdpdGggZmFsbGJhY2sKdmFsdWVzLiBDbGFyaWZ5IHRoaXMgYSBi aXQgbW9yZSBpbiB0aGlzIG1lc3NhZ2UgbGlrZSAiTVNUIGxpbmsgdHJhaW5pbmcgZmFpbGVkCm9y IHJldHJhaW4gYXQgc2FtZSBwYXJhbXMgZmFpbGVkIi4uPwoKTWFuYXNpCgo+ICsJbWdyLT5wYm5f ZGl2ID0gbmV3X3Bibl9kaXY7Cj4gKwo+ICsJZHJtX2RwX3NldF9tc3RiX2xpbmtfc3RhdHVzKG1z dF9wcmltYXJ5LCBEUk1fTU9ERV9MSU5LX1NUQVRVU19CQUQpOwo+ICsKPiArCWRybV9kcF9wdXRf bXN0X2JyYW5jaF9kZXZpY2UobXN0X3ByaW1hcnkpOwo+ICtvdXQ6Cj4gKwlkcm1fbW9kZXNldF91 bmxvY2soJmRldi0+bW9kZV9jb25maWcuY29ubmVjdGlvbl9tdXRleCk7Cj4gKwlyZXR1cm4gcmV0 Owo+ICt9Cj4gK0VYUE9SVF9TWU1CT0woZHJtX2RwX21zdF90b3BvbG9neV9tZ3JfbG93ZXJfbGlu a19yYXRlKTsKPiArCj4gIC8qKgo+ICAgKiBkcm1fZHBfbXN0X3RvcG9sb2d5X21ncl9zZXRfbXN0 KCkgLSBTZXQgdGhlIE1TVCBzdGF0ZSBmb3IgYSB0b3BvbG9neSBtYW5hZ2VyCj4gICAqIEBtZ3I6 IG1hbmFnZXIgdG8gc2V0IHN0YXRlIGZvcgo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1f ZHBfbXN0X2hlbHBlci5oIGIvaW5jbHVkZS9kcm0vZHJtX2RwX21zdF9oZWxwZXIuaAo+IGluZGV4 IDdmNzhkMjZhMDc2Ni4uNjI2MWVjNDNhMmMwIDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvZHJtL2Ry bV9kcF9tc3RfaGVscGVyLmgKPiArKysgYi9pbmNsdWRlL2RybS9kcm1fZHBfbXN0X2hlbHBlci5o Cj4gQEAgLTYzNCw0ICs2MzQsNyBAQCBpbnQgZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xv dHMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ICBpbnQgZHJtX2RwX3NlbmRfcG93 ZXJfdXBkb3duX3BoeShzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKPiAgCQkJ CSBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0LCBib29sIHBvd2VyX3VwKTsKPiAgCj4gK2lu dCBkcm1fZHBfbXN0X3RvcG9sb2d5X21ncl9sb3dlcl9saW5rX3JhdGUoc3RydWN0IGRybV9kcF9t c3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gKwkJCQkJICAgIGludCBkcF9saW5rX2J3LCBpbnQgZHBf bGlua19jb3VudCk7Cj4gKwo+ICAjZW5kaWYKPiAtLSAKPiAyLjE0LjMKPiAKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlz dApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932458AbeCLVZN (ORCPT ); Mon, 12 Mar 2018 17:25:13 -0400 Received: from mga14.intel.com ([192.55.52.115]:52588 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932242AbeCLVZL (ORCPT ); Mon, 12 Mar 2018 17:25:11 -0400 X-Amp-Result: UNKNOWN X-Amp-Original-Verdict: FILE UNKNOWN X-Amp-File-Uploaded: False X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.47,463,1515484800"; d="scan'208";a="41359657" Date: Mon, 12 Mar 2018 14:28:14 -0700 From: Manasi Navare To: Lyude Paul Cc: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, Ville =?iso-8859-1?Q?Syrj=E4l=E4?= , Gustavo Padovan , Maarten Lankhorst , Sean Paul , David Airlie , linux-kernel@vger.kernel.org Subject: Re: [PATCH v3 3/5] drm/dp_mst: Add drm_dp_mst_topology_mgr_lower_link_rate() Message-ID: <20180312212814.GB3022@intel.com> References: <20180308232421.14049-1-lyude@redhat.com> <20180309213232.19855-1-lyude@redhat.com> <20180309213232.19855-3-lyude@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20180309213232.19855-3-lyude@redhat.com> User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Mar 09, 2018 at 04:32:29PM -0500, Lyude Paul wrote: > 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 I would rather call this argument as dp_link_rate since thats what we are passing and not dp_link_bw. > + * @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), This explains my comment above, we convert link rate to link_bw here so better call that link_rate to begin with > + 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); This debug message seems a little misleading since we are saying that it failed to train link or retrain at the same params and now we are retraining with fallback values. Clarify this a bit more in this message like "MST link training failed or retrain at same params failed"..? Manasi > + 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 >