From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756172AbcHVPcH (ORCPT ); Mon, 22 Aug 2016 11:32:07 -0400 Received: from mx1.redhat.com ([209.132.183.28]:51978 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756122AbcHVPcA (ORCPT ); Mon, 22 Aug 2016 11:32:00 -0400 From: Lyude To: gregkh@linuxfoundation.org Cc: Lyude , stable@vger.kernel.org, =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= , Daniel Vetter , Jani Nikula , David Airlie , intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH 3/4] drm/i915/vlv: Disable HPD in valleyview_crt_detect_hotplug() Date: Mon, 22 Aug 2016 11:31:34 -0400 Message-Id: <1471879896-19761-4-git-send-email-cpaul@redhat.com> In-Reply-To: <1471879896-19761-1-git-send-email-cpaul@redhat.com> References: <147152082520357@kroah.com> <1471879896-19761-1-git-send-email-cpaul@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Mon, 22 Aug 2016 15:31:43 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org One of the things preventing us from using polling is the fact that calling valleyview_crt_detect_hotplug() when there's a VGA cable connected results in sending another hotplug. With polling enabled when HPD is disabled, this results in a scenario like this: - We enable power wells and reset the ADPA - output_poll_exec does force probe on VGA, triggering a hpd - HPD handler waits for poll to unlock dev->mode_config.mutex - output_poll_exec shuts off the ADPA, unlocks dev->mode_config.mutex - HPD handler runs, resets ADPA and brings us back to the start This results in an endless irq storm getting sent from the ADPA whenever a VGA connector gets detected in the middle of polling. Somewhat based off of the "drm/i915: Disable CRT HPD around force trigger" patch Ville Syrjälä sent a while back Cc: stable@vger.kernel.org Cc: Ville Syrjälä Signed-off-by: Lyude --- drivers/gpu/drm/i915/i915_drv.h | 2 ++ drivers/gpu/drm/i915/intel_crt.c | 18 ++++++++++++++++++ drivers/gpu/drm/i915/intel_hotplug.c | 27 +++++++++++++++++++++++++++ 3 files changed, 47 insertions(+) diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index 227a63e..7f8ea58 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -2791,6 +2791,8 @@ void intel_hpd_init(struct drm_i915_private *dev_priv); void intel_hpd_init_work(struct drm_i915_private *dev_priv); void intel_hpd_cancel_work(struct drm_i915_private *dev_priv); bool intel_hpd_pin_to_port(enum hpd_pin pin, enum port *port); +bool intel_hpd_disable(struct drm_i915_private *dev_priv, enum hpd_pin pin); +void intel_hpd_enable(struct drm_i915_private *dev_priv, enum hpd_pin pin); /* i915_irq.c */ void i915_queue_hangcheck(struct drm_device *dev); diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c index d0fb961..a3f87d6 100644 --- a/drivers/gpu/drm/i915/intel_crt.c +++ b/drivers/gpu/drm/i915/intel_crt.c @@ -327,10 +327,25 @@ static bool valleyview_crt_detect_hotplug(struct drm_connector *connector) struct drm_device *dev = connector->dev; struct intel_crt *crt = intel_attached_crt(connector); struct drm_i915_private *dev_priv = dev->dev_private; + bool reenable_hpd; u32 adpa; bool ret; u32 save_adpa; + /* + * Doing a force trigger causes a hpd interrupt to get sent, which can + * get us stuck in a loop if we're polling: + * - We enable power wells and reset the ADPA + * - output_poll_exec does force probe on VGA, triggering a hpd + * - HPD handler waits for poll to unlock dev->mode_config.mutex + * - output_poll_exec shuts off the ADPA, unlocks + * dev->mode_config.mutex + * - HPD handler runs, resets ADPA and brings us back to the start + * + * Just disable HPD interrupts here to prevent this + */ + reenable_hpd = intel_hpd_disable(dev_priv, crt->base.hpd_pin); + save_adpa = adpa = I915_READ(crt->adpa_reg); DRM_DEBUG_KMS("trigger hotplug detect cycle: adpa=0x%x\n", adpa); @@ -353,6 +368,9 @@ static bool valleyview_crt_detect_hotplug(struct drm_connector *connector) DRM_DEBUG_KMS("valleyview hotplug adpa=0x%x, result %d\n", adpa, ret); + if (reenable_hpd) + intel_hpd_enable(dev_priv, crt->base.hpd_pin); + return ret; } diff --git a/drivers/gpu/drm/i915/intel_hotplug.c b/drivers/gpu/drm/i915/intel_hotplug.c index bee6730..0c9ee3f 100644 --- a/drivers/gpu/drm/i915/intel_hotplug.c +++ b/drivers/gpu/drm/i915/intel_hotplug.c @@ -511,3 +511,30 @@ void intel_hpd_cancel_work(struct drm_i915_private *dev_priv) cancel_work_sync(&dev_priv->hotplug.hotplug_work); cancel_delayed_work_sync(&dev_priv->hotplug.reenable_work); } + +bool intel_hpd_disable(struct drm_i915_private *dev_priv, enum hpd_pin pin) +{ + bool ret = false; + + if (pin == HPD_NONE) + return false; + + spin_lock_irq(&dev_priv->irq_lock); + if (dev_priv->hotplug.stats[pin].state == HPD_ENABLED) { + dev_priv->hotplug.stats[pin].state = HPD_DISABLED; + ret = true; + } + spin_unlock_irq(&dev_priv->irq_lock); + + return ret; +} + +void intel_hpd_enable(struct drm_i915_private *dev_priv, enum hpd_pin pin) +{ + if (pin == HPD_NONE) + return; + + spin_lock_irq(&dev_priv->irq_lock); + dev_priv->hotplug.stats[pin].state = HPD_ENABLED; + spin_unlock_irq(&dev_priv->irq_lock); +} -- 2.7.4 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Subject: [PATCH 3/4] drm/i915/vlv: Disable HPD in valleyview_crt_detect_hotplug() Date: Mon, 22 Aug 2016 11:31:34 -0400 Message-ID: <1471879896-19761-4-git-send-email-cpaul@redhat.com> References: <147152082520357@kroah.com> <1471879896-19761-1-git-send-email-cpaul@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1471879896-19761-1-git-send-email-cpaul@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: gregkh@linuxfoundation.org Cc: dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, stable@vger.kernel.org, Daniel Vetter , Lyude List-Id: dri-devel@lists.freedesktop.org T25lIG9mIHRoZSB0aGluZ3MgcHJldmVudGluZyB1cyBmcm9tIHVzaW5nIHBvbGxpbmcgaXMgdGhl IGZhY3QgdGhhdApjYWxsaW5nIHZhbGxleXZpZXdfY3J0X2RldGVjdF9ob3RwbHVnKCkgd2hlbiB0 aGVyZSdzIGEgVkdBIGNhYmxlCmNvbm5lY3RlZCByZXN1bHRzIGluIHNlbmRpbmcgYW5vdGhlciBo b3RwbHVnLiBXaXRoIHBvbGxpbmcgZW5hYmxlZCB3aGVuCkhQRCBpcyBkaXNhYmxlZCwgdGhpcyBy ZXN1bHRzIGluIGEgc2NlbmFyaW8gbGlrZSB0aGlzOgoKLSBXZSBlbmFibGUgcG93ZXIgd2VsbHMg YW5kIHJlc2V0IHRoZSBBRFBBCi0gb3V0cHV0X3BvbGxfZXhlYyBkb2VzIGZvcmNlIHByb2JlIG9u IFZHQSwgdHJpZ2dlcmluZyBhIGhwZAotIEhQRCBoYW5kbGVyIHdhaXRzIGZvciBwb2xsIHRvIHVu bG9jayBkZXYtPm1vZGVfY29uZmlnLm11dGV4Ci0gb3V0cHV0X3BvbGxfZXhlYyBzaHV0cyBvZmYg dGhlIEFEUEEsIHVubG9ja3MgZGV2LT5tb2RlX2NvbmZpZy5tdXRleAotIEhQRCBoYW5kbGVyIHJ1 bnMsIHJlc2V0cyBBRFBBIGFuZCBicmluZ3MgdXMgYmFjayB0byB0aGUgc3RhcnQKClRoaXMgcmVz dWx0cyBpbiBhbiBlbmRsZXNzIGlycSBzdG9ybSBnZXR0aW5nIHNlbnQgZnJvbSB0aGUgQURQQQp3 aGVuZXZlciBhIFZHQSBjb25uZWN0b3IgZ2V0cyBkZXRlY3RlZCBpbiB0aGUgbWlkZGxlIG9mIHBv bGxpbmcuCgpTb21ld2hhdCBiYXNlZCBvZmYgb2YgdGhlICJkcm0vaTkxNTogRGlzYWJsZSBDUlQg SFBEIGFyb3VuZCBmb3JjZQp0cmlnZ2VyIiBwYXRjaCBWaWxsZSBTeXJqw6Rsw6Qgc2VudCBhIHdo aWxlIGJhY2sKCkNjOiBzdGFibGVAdmdlci5rZXJuZWwub3JnCkNjOiBWaWxsZSBTeXJqw6Rsw6Qg PHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBMeXVkZSA8Y3Bh dWxAcmVkaGF0LmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAg fCAgMiArKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY3J0LmMgICAgIHwgMTggKysrKysr KysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ob3RwbHVnLmMgfCAyNyAr KysrKysrKysrKysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgNDcgaW5zZXJ0aW9u cygrKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IDIyN2E2M2UuLjdmOGVhNTggMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtMjc5MSw2ICsyNzkxLDggQEAgdm9pZCBpbnRlbF9ocGRf aW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogdm9pZCBpbnRlbF9ocGRf aW5pdF93b3JrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiB2b2lkIGludGVs X2hwZF9jYW5jZWxfd29yayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogYm9v bCBpbnRlbF9ocGRfcGluX3RvX3BvcnQoZW51bSBocGRfcGluIHBpbiwgZW51bSBwb3J0ICpwb3J0 KTsKK2Jvb2wgaW50ZWxfaHBkX2Rpc2FibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LCBlbnVtIGhwZF9waW4gcGluKTsKK3ZvaWQgaW50ZWxfaHBkX2VuYWJsZShzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gaHBkX3BpbiBwaW4pOwogCiAvKiBpOTE1X2ly cS5jICovCiB2b2lkIGk5MTVfcXVldWVfaGFuZ2NoZWNrKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYp OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY3J0LmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYwppbmRleCBkMGZiOTYxLi5hM2Y4N2Q2IDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYworKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9jcnQuYwpAQCAtMzI3LDEwICszMjcsMjUgQEAgc3RhdGljIGJvb2wgdmFs bGV5dmlld19jcnRfZGV0ZWN0X2hvdHBsdWcoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv cikKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7CiAJc3RydWN0IGlu dGVsX2NydCAqY3J0ID0gaW50ZWxfYXR0YWNoZWRfY3J0KGNvbm5lY3Rvcik7CiAJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlib29sIHJlZW5h YmxlX2hwZDsKIAl1MzIgYWRwYTsKIAlib29sIHJldDsKIAl1MzIgc2F2ZV9hZHBhOwogCisJLyoK KwkgKiBEb2luZyBhIGZvcmNlIHRyaWdnZXIgY2F1c2VzIGEgaHBkIGludGVycnVwdCB0byBnZXQg c2VudCwgd2hpY2ggY2FuCisJICogZ2V0IHVzIHN0dWNrIGluIGEgbG9vcCBpZiB3ZSdyZSBwb2xs aW5nOgorCSAqICAtIFdlIGVuYWJsZSBwb3dlciB3ZWxscyBhbmQgcmVzZXQgdGhlIEFEUEEKKwkg KiAgLSBvdXRwdXRfcG9sbF9leGVjIGRvZXMgZm9yY2UgcHJvYmUgb24gVkdBLCB0cmlnZ2VyaW5n IGEgaHBkCisJICogIC0gSFBEIGhhbmRsZXIgd2FpdHMgZm9yIHBvbGwgdG8gdW5sb2NrIGRldi0+ bW9kZV9jb25maWcubXV0ZXgKKwkgKiAgLSBvdXRwdXRfcG9sbF9leGVjIHNodXRzIG9mZiB0aGUg QURQQSwgdW5sb2NrcworCSAqICAgIGRldi0+bW9kZV9jb25maWcubXV0ZXgKKwkgKiAgLSBIUEQg aGFuZGxlciBydW5zLCByZXNldHMgQURQQSBhbmQgYnJpbmdzIHVzIGJhY2sgdG8gdGhlIHN0YXJ0 CisJICoKKwkgKiBKdXN0IGRpc2FibGUgSFBEIGludGVycnVwdHMgaGVyZSB0byBwcmV2ZW50IHRo aXMKKwkgKi8KKwlyZWVuYWJsZV9ocGQgPSBpbnRlbF9ocGRfZGlzYWJsZShkZXZfcHJpdiwgY3J0 LT5iYXNlLmhwZF9waW4pOworCiAJc2F2ZV9hZHBhID0gYWRwYSA9IEk5MTVfUkVBRChjcnQtPmFk cGFfcmVnKTsKIAlEUk1fREVCVUdfS01TKCJ0cmlnZ2VyIGhvdHBsdWcgZGV0ZWN0IGN5Y2xlOiBh ZHBhPTB4JXhcbiIsIGFkcGEpOwogCkBAIC0zNTMsNiArMzY4LDkgQEAgc3RhdGljIGJvb2wgdmFs bGV5dmlld19jcnRfZGV0ZWN0X2hvdHBsdWcoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv cikKIAogCURSTV9ERUJVR19LTVMoInZhbGxleXZpZXcgaG90cGx1ZyBhZHBhPTB4JXgsIHJlc3Vs dCAlZFxuIiwgYWRwYSwgcmV0KTsKIAorCWlmIChyZWVuYWJsZV9ocGQpCisJCWludGVsX2hwZF9l bmFibGUoZGV2X3ByaXYsIGNydC0+YmFzZS5ocGRfcGluKTsKKwogCXJldHVybiByZXQ7CiB9CiAK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hvdHBsdWcuYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2hvdHBsdWcuYwppbmRleCBiZWU2NzMwLi4wYzllZTNmIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ob3RwbHVnLmMKKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaG90cGx1Zy5jCkBAIC01MTEsMyArNTExLDMwIEBAIHZv aWQgaW50ZWxfaHBkX2NhbmNlbF93b3JrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKIAljYW5jZWxfd29ya19zeW5jKCZkZXZfcHJpdi0+aG90cGx1Zy5ob3RwbHVnX3dvcmspOwog CWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmZGV2X3ByaXYtPmhvdHBsdWcucmVlbmFibGVfd29y ayk7CiB9CisKK2Jvb2wgaW50ZWxfaHBkX2Rpc2FibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LCBlbnVtIGhwZF9waW4gcGluKQoreworCWJvb2wgcmV0ID0gZmFsc2U7CisKKwlp ZiAocGluID09IEhQRF9OT05FKQorCQlyZXR1cm4gZmFsc2U7CisKKwlzcGluX2xvY2tfaXJxKCZk ZXZfcHJpdi0+aXJxX2xvY2spOworCWlmIChkZXZfcHJpdi0+aG90cGx1Zy5zdGF0c1twaW5dLnN0 YXRlID09IEhQRF9FTkFCTEVEKSB7CisJCWRldl9wcml2LT5ob3RwbHVnLnN0YXRzW3Bpbl0uc3Rh dGUgPSBIUERfRElTQUJMRUQ7CisJCXJldCA9IHRydWU7CisJfQorCXNwaW5fdW5sb2NrX2lycSgm ZGV2X3ByaXYtPmlycV9sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgaW50ZWxfaHBk X2VuYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gaHBkX3BpbiBw aW4pCit7CisJaWYgKHBpbiA9PSBIUERfTk9ORSkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2ly cSgmZGV2X3ByaXYtPmlycV9sb2NrKTsKKwlkZXZfcHJpdi0+aG90cGx1Zy5zdGF0c1twaW5dLnN0 YXRlID0gSFBEX0VOQUJMRUQ7CisJc3Bpbl91bmxvY2tfaXJxKCZkZXZfcHJpdi0+aXJxX2xvY2sp OworfQotLSAKMi43LjQKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1k ZXZlbAo=