From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Paul Subject: [PATCH v3 2/5] drm/i915: Only use one link bw config for MST topologies Date: Fri, 9 Mar 2018 16:32:28 -0500 Message-ID: <20180309213232.19855-2-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: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org Cc: David Airlie , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Rodrigo Vivi List-Id: dri-devel@lists.freedesktop.org V2hlbiBhIERQIE1TVCBsaW5rIG5lZWRzIHJldHJhaW5pbmcsIHNvbWV0aW1lcyB0aGUgaHViIHdp bGwgZGV0ZWN0IHRoYXQKdGhlIGN1cnJlbnQgbGluayBidyBjb25maWcgaXMgaW1wb3NzaWJsZSBh bmQgd2lsbCB1cGRhdGUgaXQncyBSWCBjYXBzIGluCnRoZSBEUENEIHRvIHJlZmxlY3QgdGhlIG5l dyBtYXhpbXVtIGxpbmsgcmF0ZS4gQ3VycmVudGx5LCB3ZSBtYWtlIHRoZQphc3N1bXB0aW9uIHRo YXQgdGhlIFJYIGNhcHMgaW4gdGhlIGRwY2Qgd2lsbCBuZXZlciBjaGFuZ2UgbGlrZSB0aGlzLgpU aGlzIG1lYW5zIGlmIHRoZSBzaW5rIGNoYW5nZXMgaXQncyBSWCBjYXBzIGFmdGVyIHdlJ3ZlIGFs cmVhZHkgc2V0IHVwCmFuIE1TVCBsaW5rIGFuZCB3ZSBhdHRlbXB0IHRvIGFkZCBvciByZW1vdmUg YW5vdGhlciBzaW5rIGZyb20gdGhlCnRvcG9sb2d5LCB3ZSBjb3VsZCBwdXQgb3Vyc2VsdmVzIGlu dG8gYW4gaW52YWxpZCBzdGF0ZSB3aGVyZSB3ZSd2ZSB0cmllZAp0byBjb25maWd1cmUgZGlmZmVy ZW50IHNpbmtzIG9uIHRoZSBzYW1lIE1TVCB0b3BvbG9neSB3aXRoIGRpZmZlcmVudApsaW5rIHJh dGVzLiBXZSBjb3VsZCBhbHNvIHJ1biBpbnRvIHRoaXMgc2l0dWF0aW9uIGlmIGEgc2luayByZXBv cnRzIGEKaGlnaGVyIGxpbmsgcmF0ZSBhZnRlciBzdXNwZW5kLCB1c3VhbGx5IGZyb20gdXMgaGF2 aW5nIHRyYWluZWQgaXQgd2l0aCBhCmZhbGxiYWNrIGJ3IGNvbmZpZ3VyYXRpb24gYmVmb3JlIHN1 c3BlbmRpbmcuCgpTbzogImxvY2siIHRoZSBidyBjb25maWcgYnkgb25seSB1c2luZyB0aGUgbWF4 IERQIGxpbmsgcmF0ZS9sYW5lIGNvdW50Cm9uIHRoZSBmaXJzdCBtb2Rlc2V0IGZvciBhbiBNU1Qg dG9wb2xvZ3kuIEZvciBldmVyeSBtb2Rlc2V0IGZvbGxvd2luZywKd2UgaW5zdGVhZCB1c2UgdGhl IGxhc3QgY29uZmlndXJlZCBsaW5rIGJ3IGZvciB0aGlzIHRvcG9sb2d5LiBXZSBvbmx5CnVubG9j ayB0aGUgYncgY29uZmlnIHdoZW4gd2UndmUgZGV0ZWN0ZWQgYSBuZXcgTVNUIHNpbmsuCgpTaWdu ZWQtb2ZmLWJ5OiBMeXVkZSBQYXVsIDxseXVkZUByZWRoYXQuY29tPgpDYzogTWFuYXNpIE5hdmFy ZSA8bWFuYXNpLmQubmF2YXJlQGludGVsLmNvbT4KQ2M6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUu c3lyamFsYUBsaW51eC5pbnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZHAuYyAgICAgfCAxMSArKysrKysrKystLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBf bXN0LmMgfCAyMiArKysrKysrKysrKysrKystLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9kcnYuaCAgICB8ICA2ICsrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCAzMCBpbnNlcnRpb25z KCspLCA5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2RwLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCmluZGV4IDVhYmYwYzk1 NzI1YS4uNTY0NWExOTRkZTkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9kcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKQEAgLTM4NzEsMTgg KzM4NzEsMjUgQEAgaW50ZWxfZHBfY2FuX21zdChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQog c3RhdGljIHZvaWQKIGludGVsX2RwX2NvbmZpZ3VyZV9tc3Qoc3RydWN0IGludGVsX2RwICppbnRl bF9kcCkKIHsKKwlib29sIHdhc19tc3Q7CisKIAlpZiAoIWk5MTVfbW9kcGFyYW1zLmVuYWJsZV9k cF9tc3QpCiAJCXJldHVybjsKIAogCWlmICghaW50ZWxfZHAtPmNhbl9tc3QpCiAJCXJldHVybjsK IAorCXdhc19tc3QgPSBpbnRlbF9kcC0+aXNfbXN0OwogCWludGVsX2RwLT5pc19tc3QgPSBpbnRl bF9kcF9jYW5fbXN0KGludGVsX2RwKTsKIAotCWlmIChpbnRlbF9kcC0+aXNfbXN0KQorCWlmIChp bnRlbF9kcC0+aXNfbXN0KSB7CiAJCURSTV9ERUJVR19LTVMoIlNpbmsgaXMgTVNUIGNhcGFibGVc biIpOwotCWVsc2UKKworCQlpZiAoIXdhc19tc3QpCisJCQlpbnRlbF9kcC0+bXN0X2J3X2xvY2tl ZCA9IGZhbHNlOworCX0gZWxzZSB7CiAJCURSTV9ERUJVR19LTVMoIlNpbmsgaXMgbm90IE1TVCBj YXBhYmxlXG4iKTsKKwl9CiAKIAlkcm1fZHBfbXN0X3RvcG9sb2d5X21ncl9zZXRfbXN0KCZpbnRl bF9kcC0+bXN0X21nciwKIAkJCQkJaW50ZWxfZHAtPmlzX21zdCk7CmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcF9tc3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2RwX21zdC5jCmluZGV4IGMzZGUwOTE4ZWUxMy4uYzA1NTM0NTZiMThlIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcF9tc3QuYworKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9kcF9tc3QuYwpAQCAtNDIsNyArNDIsNyBAQCBzdGF0aWMgYm9vbCBpbnRl bF9kcF9tc3RfY29tcHV0ZV9jb25maWcoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCiAJ CXRvX2ludGVsX2Nvbm5lY3Rvcihjb25uX3N0YXRlLT5jb25uZWN0b3IpOwogCXN0cnVjdCBkcm1f YXRvbWljX3N0YXRlICpzdGF0ZSA9IHBpcGVfY29uZmlnLT5iYXNlLnN0YXRlOwogCWludCBicHA7 Ci0JaW50IGxhbmVfY291bnQsIHNsb3RzOworCWludCBsYW5lX2NvdW50LCBsaW5rX3JhdGUsIHNs b3RzOwogCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlID0gJnBp cGVfY29uZmlnLT5iYXNlLmFkanVzdGVkX21vZGU7CiAJaW50IG1zdF9wYm47CiAJYm9vbCByZWR1 Y2VfbV9uID0gZHJtX2RwX2hhc19xdWlyaygmaW50ZWxfZHAtPmRlc2MsCkBAIC01NiwxNiArNTYs MjIgQEAgc3RhdGljIGJvb2wgaW50ZWxfZHBfbXN0X2NvbXB1dGVfY29uZmlnKHN0cnVjdCBpbnRl bF9lbmNvZGVyICplbmNvZGVyLAogCQkJICAgICAgYnBwKTsKIAl9CiAJLyoKLQkgKiBmb3IgTVNU IHdlIGFsd2F5cyBjb25maWd1cmUgbWF4IGxpbmsgYncgLSB0aGUgc3BlYyBkb2Vzbid0Ci0JICog c2VlbSB0byBzdWdnZXN0IHdlIHNob3VsZCBkbyBvdGhlcndpc2UuCisJICogZm9yIE1TVCB3ZSBh bHdheXMgY29uZmlndXJlIG1heCBsaW5rIGJ3IGlmIHdlIGRvbid0IGtub3cgYmV0dGVyIC0KKwkg KiB0aGUgc3BlYyBkb2Vzbid0IHNlZW0gdG8gc3VnZ2VzdCB3ZSBzaG91bGQgZG8gb3RoZXJ3aXNl LiBCdXQsCisJICogZW5zdXJlIGl0IGFsd2F5cyBzdGF5cyBjb25zaXN0ZW50IHdpdGggdGhlIHJl c3Qgb2YgdGhpcyBodWIncworCSAqIHN0YXRlLgogCSAqLwotCWxhbmVfY291bnQgPSBpbnRlbF9k cF9tYXhfbGFuZV9jb3VudChpbnRlbF9kcCk7CisJaWYgKGludGVsX2RwLT5tc3RfYndfbG9ja2Vk KSB7CisJCWxhbmVfY291bnQgPSBpbnRlbF9kcC0+bGFuZV9jb3VudDsKKwkJbGlua19yYXRlID0g aW50ZWxfZHAtPmxpbmtfcmF0ZTsKKwl9IGVsc2UgeworCQlsYW5lX2NvdW50ID0gaW50ZWxfZHBf bWF4X2xhbmVfY291bnQoaW50ZWxfZHApOworCQlsaW5rX3JhdGUgPSBpbnRlbF9kcF9tYXhfbGlu a19yYXRlKGludGVsX2RwKTsKKwl9CiAKIAlwaXBlX2NvbmZpZy0+bGFuZV9jb3VudCA9IGxhbmVf Y291bnQ7Ci0KIAlwaXBlX2NvbmZpZy0+cGlwZV9icHAgPSBicHA7Ci0KLQlwaXBlX2NvbmZpZy0+ cG9ydF9jbG9jayA9IGludGVsX2RwX21heF9saW5rX3JhdGUoaW50ZWxfZHApOworCXBpcGVfY29u ZmlnLT5wb3J0X2Nsb2NrID0gbGlua19yYXRlOwogCiAJaWYgKGRybV9kcF9tc3RfcG9ydF9oYXNf YXVkaW8oJmludGVsX2RwLT5tc3RfbWdyLCBjb25uZWN0b3ItPnBvcnQpKQogCQlwaXBlX2NvbmZp Zy0+aGFzX2F1ZGlvID0gdHJ1ZTsKQEAgLTIyMSw2ICsyMjcsOCBAQCBzdGF0aWMgdm9pZCBpbnRl bF9tc3RfcHJlX2VuYWJsZV9kcChzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKIAljb25u ZWN0b3ItPmVuY29kZXIgPSBlbmNvZGVyOwogCWludGVsX21zdC0+Y29ubmVjdG9yID0gY29ubmVj dG9yOwogCisJaW50ZWxfZHAtPm1zdF9id19sb2NrZWQgPSB0cnVlOworCiAJRFJNX0RFQlVHX0tN UygiYWN0aXZlIGxpbmtzICVkXG4iLCBpbnRlbF9kcC0+YWN0aXZlX21zdF9saW5rcyk7CiAKIAlk cm1fZHBfc2VuZF9wb3dlcl91cGRvd25fcGh5KCZpbnRlbF9kcC0+bXN0X21nciwgY29ubmVjdG9y LT5wb3J0LCB0cnVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Ry di5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKaW5kZXggM2YxOWRjODA5OTdm Li5mYzMzODUyOWU5MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Ry di5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCkBAIC0xMTA3LDYgKzEx MDcsMTIgQEAgc3RydWN0IGludGVsX2RwIHsKIAlib29sIGNhbl9tc3Q7IC8qIHRoaXMgcG9ydCBz dXBwb3J0cyBtc3QgKi8KIAlib29sIGlzX21zdDsKIAlpbnQgYWN0aXZlX21zdF9saW5rczsKKwkv KiBTZXQgd2hlbiB3ZSd2ZSBhbHJlYWR5IGRlY2lkZWQgb24gYSBsaW5rIGJ3IGZvciBtc3QsIHRv IHByZXZlbnQgdXMKKwkgKiBmcm9tIHNldHRpbmcgZGlmZmVyZW50IGxpbmsgYmFuZHdpdGhzIGlm IHRoZSBodWIgdHJpZXMgdG8gY29uZnVzZQorCSAqIHVzIGJ5IGNoYW5naW5nIGl0IGxhdGVyCisJ ICovCisJYm9vbCBtc3RfYndfbG9ja2VkOworCiAJLyogY29ubmVjdG9yIGRpcmVjdGx5IGF0dGFj aGVkIC0gd29uJ3QgYmUgdXNlIGZvciBtb2Rlc2V0IGluIG1zdCB3b3JsZCAqLwogCXN0cnVjdCBp bnRlbF9jb25uZWN0b3IgKmF0dGFjaGVkX2Nvbm5lY3RvcjsKIAotLSAKMi4xNC4zCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGlu ZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932568AbeCIVdJ (ORCPT ); Fri, 9 Mar 2018 16:33:09 -0500 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:50180 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932133AbeCIVdG (ORCPT ); Fri, 9 Mar 2018 16:33:06 -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?= , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , David Airlie , linux-kernel@vger.kernel.org Subject: [PATCH v3 2/5] drm/i915: Only use one link bw config for MST topologies Date: Fri, 9 Mar 2018 16:32:28 -0500 Message-Id: <20180309213232.19855-2-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 When a DP MST link needs retraining, sometimes the hub will detect that the current link bw config is impossible and will update it's RX caps in the DPCD to reflect the new maximum link rate. Currently, we make the assumption that the RX caps in the dpcd will never change like this. This means if the sink changes it's RX caps after we've already set up an MST link and we attempt to add or remove another sink from the topology, we could put ourselves into an invalid state where we've tried to configure different sinks on the same MST topology with different link rates. We could also run into this situation if a sink reports a higher link rate after suspend, usually from us having trained it with a fallback bw configuration before suspending. So: "lock" the bw config by only using the max DP link rate/lane count on the first modeset for an MST topology. For every modeset following, we instead use the last configured link bw for this topology. We only unlock the bw config when we've detected a new MST sink. Signed-off-by: Lyude Paul Cc: Manasi Navare Cc: Ville Syrjälä --- drivers/gpu/drm/i915/intel_dp.c | 11 +++++++++-- drivers/gpu/drm/i915/intel_dp_mst.c | 22 +++++++++++++++------- drivers/gpu/drm/i915/intel_drv.h | 6 ++++++ 3 files changed, 30 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index 5abf0c95725a..5645a194de92 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c @@ -3871,18 +3871,25 @@ intel_dp_can_mst(struct intel_dp *intel_dp) static void intel_dp_configure_mst(struct intel_dp *intel_dp) { + bool was_mst; + if (!i915_modparams.enable_dp_mst) return; if (!intel_dp->can_mst) return; + was_mst = intel_dp->is_mst; intel_dp->is_mst = intel_dp_can_mst(intel_dp); - if (intel_dp->is_mst) + if (intel_dp->is_mst) { DRM_DEBUG_KMS("Sink is MST capable\n"); - else + + if (!was_mst) + intel_dp->mst_bw_locked = false; + } else { DRM_DEBUG_KMS("Sink is not MST capable\n"); + } drm_dp_mst_topology_mgr_set_mst(&intel_dp->mst_mgr, intel_dp->is_mst); diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c index c3de0918ee13..c0553456b18e 100644 --- a/drivers/gpu/drm/i915/intel_dp_mst.c +++ b/drivers/gpu/drm/i915/intel_dp_mst.c @@ -42,7 +42,7 @@ static bool intel_dp_mst_compute_config(struct intel_encoder *encoder, to_intel_connector(conn_state->connector); struct drm_atomic_state *state = pipe_config->base.state; int bpp; - int lane_count, slots; + int lane_count, link_rate, slots; const struct drm_display_mode *adjusted_mode = &pipe_config->base.adjusted_mode; int mst_pbn; bool reduce_m_n = drm_dp_has_quirk(&intel_dp->desc, @@ -56,16 +56,22 @@ static bool intel_dp_mst_compute_config(struct intel_encoder *encoder, bpp); } /* - * for MST we always configure max link bw - the spec doesn't - * seem to suggest we should do otherwise. + * for MST we always configure max link bw if we don't know better - + * the spec doesn't seem to suggest we should do otherwise. But, + * ensure it always stays consistent with the rest of this hub's + * state. */ - lane_count = intel_dp_max_lane_count(intel_dp); + if (intel_dp->mst_bw_locked) { + lane_count = intel_dp->lane_count; + link_rate = intel_dp->link_rate; + } else { + lane_count = intel_dp_max_lane_count(intel_dp); + link_rate = intel_dp_max_link_rate(intel_dp); + } pipe_config->lane_count = lane_count; - pipe_config->pipe_bpp = bpp; - - pipe_config->port_clock = intel_dp_max_link_rate(intel_dp); + pipe_config->port_clock = link_rate; if (drm_dp_mst_port_has_audio(&intel_dp->mst_mgr, connector->port)) pipe_config->has_audio = true; @@ -221,6 +227,8 @@ static void intel_mst_pre_enable_dp(struct intel_encoder *encoder, connector->encoder = encoder; intel_mst->connector = connector; + intel_dp->mst_bw_locked = true; + DRM_DEBUG_KMS("active links %d\n", intel_dp->active_mst_links); drm_dp_send_power_updown_phy(&intel_dp->mst_mgr, connector->port, true); diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h index 3f19dc80997f..fc338529e918 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h @@ -1107,6 +1107,12 @@ struct intel_dp { bool can_mst; /* this port supports mst */ bool is_mst; int active_mst_links; + /* Set when we've already decided on a link bw for mst, to prevent us + * from setting different link bandwiths if the hub tries to confuse + * us by changing it later + */ + bool mst_bw_locked; + /* connector directly attached - won't be use for modeset in mst world */ struct intel_connector *attached_connector; -- 2.14.3