From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jani Nikula Subject: [PATCH] drm/i915/vbt: ignore extraneous child devices for a port Date: Fri, 11 Aug 2017 14:39:07 +0300 Message-ID: <20170811113907.6716-1-jani.nikula@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1EE166E6AF for ; Fri, 11 Aug 2017 11:34:22 +0000 (UTC) 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: jani.nikula@intel.com, "# v4 . 12+" , Paulo Zanoni List-Id: intel-gfx@lists.freedesktop.org RXZlciBzaW5jZSB3ZSd2ZSBwYXJzZWQgVkJUIGNoaWxkIGRldmljZXMsIHN0YXJ0aW5nIGZyb20g NmFjYWIxNWE3YjBkCigiZHJtL2k5MTU6IHVzZSB0aGUgSERNSSBEREkgYnVmZmVyIHRyYW5zbGF0 aW9ucyBmcm9tIFZCVCIpLCB3ZSd2ZQppZ25vcmVkIHRoZSBjaGlsZCBkZXZpY2UgaW5mb3JtYXRp b24gaWYgbW9yZSB0aGFuIG9uZSBjaGlsZCBkZXZpY2UKcmVmZXJlbmNlcyB0aGUgc2FtZSBwb3J0 LiBUaGUgcmF0aW9uYWxlIGZvciB0aGlzIHNlZW1zIGxvc3QgaW4gdGltZS4KClNpbmNlIGNvbW1p dCAzMTFhMjA5NDlmMDQgKCJkcm0vaTkxNTogZG9uJ3QgaW5pdCBEUCBvciBIRE1JIHdoZW4gbm90 CnN1cHBvcnRlZCBieSBEREkgcG9ydCIpIHdlIHN0YXJ0ZWQgdXNpbmcgdGhpcyBpbmZvcm1hdGlv biBtb3JlIHRvIHNraXAKSERNSS9EUCBpbml0IGlmIHRoZSBwb3J0IHdhc24ndCB0aGVyZSBwZXIg VkJUIGNoaWxkIGRldmljZXMuIEhvd2V2ZXIsIGF0CnRoZSBzYW1lIHRpbWUgaXQgYWRkZWQgcG9y dCBkZWZhdWx0cyB3aXRob3V0IGZ1cnRoZXIgZXhwbGFuYXRpb24uCgpUaHVzLCBpZiB0aGUgY2hp bGQgZGV2aWNlIGluZm8gd2FzIHNraXBwZWQgZHVlIHRvIG11bHRpcGxlIGNoaWxkIGRldmljZXMK cmVmZXJlbmNpbmcgdGhlIHNhbWUgcG9ydCwgdGhlIGRldmljZSBpbmZvIHdvdWxkIGJlIHJldHJp ZXZlZCBmcm9tIHRoZQpzb21ld2hhdCBhcmJpdHJhcnkgZGVmYXVsdHMuCgpGaW5hbGx5LCB3aGVu IGNvbW1pdCBiYjFkMTMyOTM1YzIgKCJkcm0vaTkxNS92YnQ6IHNwbGl0IG91dCBkZWZhdWx0cwp0 aGF0IGFyZSBzZXQgd2hlbiB0aGVyZSBpcyBubyBWQlQiKSBzdG9wcGVkIGluaXRpYWxpemluZyB0 aGUgZGVmYXVsdHMKd2hlbmV2ZXIgVkJUIGlzIHByZXNlbnQsIHRodXMgdHJ1c3RpbmcgdGhlIFZC VCBtb3JlLCB3ZSBzdG9wcGVkCmluaXRpYWxpemluZyBwb3J0cyB3aGljaCB3ZXJlIHJlZmVyZW5j ZWQgYnkgbW9yZSB0aGFuIG9uZSBjaGlsZCBkZXZpY2UuCgpBcHBhcmVudGx5IGF0IGxlYXN0IEFz dXMgVVgzMDVVQSwgVVgzMDVVLCBhbmQgVVgzMDZVIGxhcHRvcHMgaGF2ZSBWQlQKY2hpbGQgZGV2 aWNlIGJsb2NrcyB3aGljaCBjYXVzZSB0aGlzIGJlaGF2aW91ci4gQXJndWFibHkgdGhleSB3ZXJl CnNoaXBwZWQgd2l0aCBhIGJyb2tlbiBWQlQuCgpSZWxheCB0aGUgcnVsZXMgZm9yIG11bHRpcGxl IHJlZmVyZW5jZXMgdG8gdGhlIHNhbWUgcG9ydCwgYW5kIHVzZSB0aGUKZmlyc3QgY2hpbGQgZGV2 aWNlIGluZm8gdG8gcmVmZXJlbmNlIGEgcG9ydC4gUmV0YWluIHRoZSBsb2dpYyB0byBkZWJ1Zwps b2cgYWJvdXQgdGhpcywgdGhvdWdoLgoKQnVnemlsbGE6IGh0dHBzOi8vYnVncy5mcmVlZGVza3Rv cC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTc0NQpCdWd6aWxsYTogaHR0cHM6Ly9idWd6aWxsYS5r ZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTYyMzMKRml4ZXM6IGJiMWQxMzI5MzVjMiAoImRy bS9pOTE1L3ZidDogc3BsaXQgb3V0IGRlZmF1bHRzIHRoYXQgYXJlIHNldCB3aGVuIHRoZXJlIGlz IG5vIFZCVCIpClRlc3RlZC1ieTogT2xpdmVyIFdlacOfYmFydGggPG1haWxAb3dlaXNzYmFydGgu ZGU+ClJlcG9ydGVkLWJ5OiBPbGl2ZXIgV2Vpw59iYXJ0aCA8bWFpbEBvd2Vpc3NiYXJ0aC5kZT4K UmVwb3J0ZWQtYnk6IERpZGllciBHIDxkaWRpZXJnLWRpdmVyc0BvcmFuZ2UuZnI+ClJlcG9ydGVk LWJ5OiBHaWxlcyBBbmRlcnNvbiA8YWdhbmRlckBnbWFpbC5jb20+CkNjOiBNYW5hc2kgTmF2YXJl IDxtYW5hc2kuZC5uYXZhcmVAaW50ZWwuY29tPgpDYzogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5z eXJqYWxhQGxpbnV4LmludGVsLmNvbT4KQ2M6IFBhdWxvIFphbm9uaSA8cGF1bG8uci56YW5vbmlA aW50ZWwuY29tPgpDYzogPHN0YWJsZUB2Z2VyLmtlcm5lbC5vcmc+ICMgdjQuMTIrClNpZ25lZC1v ZmYtYnk6IEphbmkgTmlrdWxhIDxqYW5pLm5pa3VsYUBpbnRlbC5jb20+Ci0tLQogZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfYmlvcy5jIHwgMTUgKysrKysrKysrLS0tLS0tCiAxIGZpbGUgY2hh bmdlZCwgOSBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2Jpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2Jpb3MuYwppbmRleCA4MmIxNDRjZGZhMWQuLjE4M2U4N2U4ZWEzMSAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYmlvcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2Jpb3MuYwpAQCAtMTEyMCw4ICsxMTIwLDggQEAgc3RhdGljIHZvaWQgcGFyc2VfZGRp X3BvcnQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBlbnVtIHBvcnQgcG9ydCwK IAlib29sIGlzX2R2aSwgaXNfaGRtaSwgaXNfZHAsIGlzX2VkcCwgaXNfY3J0OwogCXVpbnQ4X3Qg YXV4X2NoYW5uZWwsIGRkY19waW47CiAJLyogRWFjaCBEREkgcG9ydCBjYW4gaGF2ZSBtb3JlIHRo YW4gb25lIHZhbHVlIG9uIHRoZSAiRFZPIFBvcnQiIGZpZWxkLAotCSAqIHNvIGxvb2sgZm9yIGFs bCB0aGUgcG9zc2libGUgdmFsdWVzIGZvciBlYWNoIHBvcnQgYW5kIGFib3J0IGlmIG1vcmUKLQkg KiB0aGFuIG9uZSBpcyBmb3VuZC4gKi8KKwkgKiBzbyBsb29rIGZvciBhbGwgdGhlIHBvc3NpYmxl IHZhbHVlcyBmb3IgZWFjaCBwb3J0LgorCSAqLwogCWludCBkdm9fcG9ydHNbXVszXSA9IHsKIAkJ e0RWT19QT1JUX0hETUlBLCBEVk9fUE9SVF9EUEEsIC0xfSwKIAkJe0RWT19QT1JUX0hETUlCLCBE Vk9fUE9SVF9EUEIsIC0xfSwKQEAgLTExMzAsNyArMTEzMCwxMCBAQCBzdGF0aWMgdm9pZCBwYXJz ZV9kZGlfcG9ydChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcG9ydCBw b3J0LAogCQl7RFZPX1BPUlRfQ1JULCBEVk9fUE9SVF9IRE1JRSwgRFZPX1BPUlRfRFBFfSwKIAl9 OwogCi0JLyogRmluZCB0aGUgY2hpbGQgZGV2aWNlIHRvIHVzZSwgYWJvcnQgaWYgbW9yZSB0aGFu IG9uZSBmb3VuZC4gKi8KKwkvKgorCSAqIEZpbmQgdGhlIGZpcnN0IGNoaWxkIGRldmljZSB0byBy ZWZlcmVuY2UgdGhlIHBvcnQsIHJlcG9ydCBpZiBtb3JlCisJICogdGhhbiBvbmUgZm91bmQuCisJ ICovCiAJZm9yIChpID0gMDsgaSA8IGRldl9wcml2LT52YnQuY2hpbGRfZGV2X251bTsgaSsrKSB7 CiAJCWl0ID0gZGV2X3ByaXYtPnZidC5jaGlsZF9kZXYgKyBpOwogCkBAIC0xMTQwLDExICsxMTQz LDExIEBAIHN0YXRpYyB2b2lkIHBhcnNlX2RkaV9wb3J0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiwgZW51bSBwb3J0IHBvcnQsCiAKIAkJCWlmIChpdC0+Y29tbW9uLmR2b19wb3J0 ID09IGR2b19wb3J0c1twb3J0XVtqXSkgewogCQkJCWlmIChjaGlsZCkgewotCQkJCQlEUk1fREVC VUdfS01TKCJNb3JlIHRoYW4gb25lIGNoaWxkIGRldmljZSBmb3IgcG9ydCAlYyBpbiBWQlQuXG4i LAorCQkJCQlEUk1fREVCVUdfS01TKCJNb3JlIHRoYW4gb25lIGNoaWxkIGRldmljZSBmb3IgcG9y dCAlYyBpbiBWQlQsIHVzaW5nIHRoZSBmaXJzdC5cbiIsCiAJCQkJCQkgICAgICBwb3J0X25hbWUo cG9ydCkpOwotCQkJCQlyZXR1cm47CisJCQkJfSBlbHNlIHsKKwkJCQkJY2hpbGQgPSBpdDsKIAkJ CQl9Ci0JCQkJY2hpbGQgPSBpdDsKIAkJCX0KIAkJfQogCX0KLS0gCjIuMTEuMAoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcg bGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com ([134.134.136.24]:64845 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752096AbdHKLeX (ORCPT ); Fri, 11 Aug 2017 07:34:23 -0400 From: Jani Nikula To: intel-gfx@lists.freedesktop.org Cc: jani.nikula@intel.com, Manasi Navare , =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= , Paulo Zanoni , "# v4 . 12+" Subject: [PATCH] drm/i915/vbt: ignore extraneous child devices for a port Date: Fri, 11 Aug 2017 14:39:07 +0300 Message-Id: <20170811113907.6716-1-jani.nikula@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: stable-owner@vger.kernel.org List-ID: Ever since we've parsed VBT child devices, starting from 6acab15a7b0d ("drm/i915: use the HDMI DDI buffer translations from VBT"), we've ignored the child device information if more than one child device references the same port. The rationale for this seems lost in time. Since commit 311a20949f04 ("drm/i915: don't init DP or HDMI when not supported by DDI port") we started using this information more to skip HDMI/DP init if the port wasn't there per VBT child devices. However, at the same time it added port defaults without further explanation. Thus, if the child device info was skipped due to multiple child devices referencing the same port, the device info would be retrieved from the somewhat arbitrary defaults. Finally, when commit bb1d132935c2 ("drm/i915/vbt: split out defaults that are set when there is no VBT") stopped initializing the defaults whenever VBT is present, thus trusting the VBT more, we stopped initializing ports which were referenced by more than one child device. Apparently at least Asus UX305UA, UX305U, and UX306U laptops have VBT child device blocks which cause this behaviour. Arguably they were shipped with a broken VBT. Relax the rules for multiple references to the same port, and use the first child device info to reference a port. Retain the logic to debug log about this, though. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=101745 Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=196233 Fixes: bb1d132935c2 ("drm/i915/vbt: split out defaults that are set when there is no VBT") Tested-by: Oliver Weißbarth Reported-by: Oliver Weißbarth Reported-by: Didier G Reported-by: Giles Anderson Cc: Manasi Navare Cc: Ville Syrjälä Cc: Paulo Zanoni Cc: # v4.12+ Signed-off-by: Jani Nikula --- drivers/gpu/drm/i915/intel_bios.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c index 82b144cdfa1d..183e87e8ea31 100644 --- a/drivers/gpu/drm/i915/intel_bios.c +++ b/drivers/gpu/drm/i915/intel_bios.c @@ -1120,8 +1120,8 @@ static void parse_ddi_port(struct drm_i915_private *dev_priv, enum port port, bool is_dvi, is_hdmi, is_dp, is_edp, is_crt; uint8_t aux_channel, ddc_pin; /* Each DDI port can have more than one value on the "DVO Port" field, - * so look for all the possible values for each port and abort if more - * than one is found. */ + * so look for all the possible values for each port. + */ int dvo_ports[][3] = { {DVO_PORT_HDMIA, DVO_PORT_DPA, -1}, {DVO_PORT_HDMIB, DVO_PORT_DPB, -1}, @@ -1130,7 +1130,10 @@ static void parse_ddi_port(struct drm_i915_private *dev_priv, enum port port, {DVO_PORT_CRT, DVO_PORT_HDMIE, DVO_PORT_DPE}, }; - /* Find the child device to use, abort if more than one found. */ + /* + * Find the first child device to reference the port, report if more + * than one found. + */ for (i = 0; i < dev_priv->vbt.child_dev_num; i++) { it = dev_priv->vbt.child_dev + i; @@ -1140,11 +1143,11 @@ static void parse_ddi_port(struct drm_i915_private *dev_priv, enum port port, if (it->common.dvo_port == dvo_ports[port][j]) { if (child) { - DRM_DEBUG_KMS("More than one child device for port %c in VBT.\n", + DRM_DEBUG_KMS("More than one child device for port %c in VBT, using the first.\n", port_name(port)); - return; + } else { + child = it; } - child = it; } } } -- 2.11.0