From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH 2/4] drm/i915: Fix hotplug irq ack on i965/g4x Date: Thu, 14 Jun 2018 19:27:57 +0300 Message-ID: <20180614162757.GJ20518@intel.com> References: <20180611200258.27121-1-ville.syrjala@linux.intel.com> <20180611200258.27121-2-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id A24966E831 for ; Thu, 14 Jun 2018 16:28:00 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20180611200258.27121-2-ville.syrjala@linux.intel.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: stable@vger.kernel.org List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCBKdW4gMTEsIDIwMTggYXQgMTE6MDI6NTZQTSArMDMwMCwgVmlsbGUgU3lyamFsYSB3 cm90ZToKPiBGcm9tOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwu Y29tPgo+IAo+IEp1c3QgbGlrZSB3aXRoIFBJUEVTVEFULCB0aGUgZWRnZSB0cmlnZ2VyZWQgSUlS IG9uIGk5NjUvZzR4Cj4gYWxzbyBjYXVzZXMgcHJvYmxlbXMgZm9yIGhvdHBsdWcgaW50ZXJydXB0 cy4gVG8gbWFrZSBzdXJlCj4gd2UgZG9uJ3QgZ2V0IHRoZSBJSVIgcG9ydCBpbnRlcnJ1cHQgYml0 IHN0dWNrIGxvdyB3aXRoIHRoZQo+IElTUiBiaXQgaGlnaCB3ZSBtdXN0IGZvcmNlIGFuIGVkZ2Ug aW4gSVNSLiBXZSBkbyB0aGF0IGJ5Cj4gY2xlYXJpbmcgUE9SVF9IT1RQTFVHX0VOIHRlbXBvcmFy eWx5IHdoZW4gd2UgYWNrCj4gUE9SVF9IT1RQTFVHX1NUQVQuCj4gCj4gQ2M6IHN0YWJsZUB2Z2Vy Lmtlcm5lbC5vcmcKPiBTaWduZWQtb2ZmLWJ5OiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmph bGFAbGludXguaW50ZWwuY29tPgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2ly cS5jIHwgMzEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLQo+ICAxIGZpbGUgY2hhbmdl ZCwgMjggaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf aXJxLmMKPiBpbmRleCAzNjRlMWM4NTMxNWUuLjU5MjUwZWNiZDBkOSAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9pcnEuYwo+IEBAIC0xOTk4LDEwICsxOTk4LDM1IEBAIHN0YXRpYyB2b2lkIHZhbGxl eXZpZXdfcGlwZXN0YXRfaXJxX2hhbmRsZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LAo+ICAKPiAgc3RhdGljIHUzMiBpOXh4X2hwZF9pcnFfYWNrKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikKPiAgewo+IC0JdTMyIGhvdHBsdWdfc3RhdHVzID0gSTkxNV9SRUFE KFBPUlRfSE9UUExVR19TVEFUKTsKPiArCXUzMiBob3RwbHVnX3N0YXR1cywgaG90cGx1Z19lbjsK PiAgCj4gLQlpZiAoaG90cGx1Z19zdGF0dXMpCj4gLQkJSTkxNV9XUklURShQT1JUX0hPVFBMVUdf U1RBVCwgaG90cGx1Z19zdGF0dXMpOwo+ICsJaG90cGx1Z19zdGF0dXMgPSBJOTE1X1JFQUQoUE9S VF9IT1RQTFVHX1NUQVQpOwo+ICsKPiArCWlmIChJU19HNFgoZGV2X3ByaXYpIHx8Cj4gKwkgICAg SVNfVkFMTEVZVklFVyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpCj4gKwkJ aG90cGx1Z19zdGF0dXMgJj0gSE9UUExVR19JTlRfU1RBVFVTX0c0WCB8Cj4gKwkJCURQX0FVWF9D SEFOTkVMX01BU0tfSU5UX1NUQVRVU19HNFg7Cj4gKwllbHNlCj4gKwkJaG90cGx1Z19zdGF0dXMg Jj0gSE9UUExVR19JTlRfU1RBVFVTX0k5MTU7Cj4gKwo+ICsJaWYgKGhvdHBsdWdfc3RhdHVzID09 IDApCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+aXJxX2xvY2sp Owo+ICsKPiArCS8qCj4gKwkgKiBUb2dnbGUgYWxsIFBPUlRfSE9UUExVR19FTiBiaXRzIHRvIG1h a2Ugc3VyZSB3ZQo+ICsJICogZ2V0IGFuIGVkZ2UgaW4gdGhlIElTUiBwb3J0IGludGVycnVwdCBi aXQgaWYgd2UKPiArCSAqIGRvbid0IGNsZWFyIGFsbCB0aGUgZW5hYmxlZCBzdGF0dXMgYml0cy4g T3RoZXJ3aXNlCj4gKwkgKiB0aGUgZWRnZSB0cmlnZ2VyZWQgSUlSIG9uIGk5NjUvZzR4IHdvdWxk bid0IG5vdGljZQo+ICsJICogdGhhdCBhbiBpbnRlcnJ1cHQgaXMgc3RpbGwgcGVuZGluZy4KPiAr CSAqLwo+ICsJaG90cGx1Z19lbiA9IEk5MTVfUkVBRChQT1JUX0hPVFBMVUdfRU4pOwo+ICsJSTkx NV9XUklURShQT1JUX0hPVFBMVUdfRU4sIDApOwo+ICsJSTkxNV9XUklURShQT1JUX0hPVFBMVUdf U1RBVCwgaG90cGx1Z19zdGF0dXMpOwo+ICsJSTkxNV9XUklURShQT1JUX0hPVFBMVUdfRU4sIGhv dHBsdWdfZW4pOwoKQWN0dWFsbHkgdGhpcyBzZWVtcyB0byBiZSBhIGJhZCBpZGVhLiBBdCBsZWFz dCBvbmUgZWxrIGhlcmUgbGlrZXMKdG8gc2lnbmFsIGEgbG9uZyBwdWxzZSBvbiBkaXNjb25uZWN0 ZWQgcG9ydHMgZXZlcnkgdGltZSBJIHRvZ2dsZQp0aGUgZW5hYmxlIGJpdCBpbiBQT1JUX0hPVFBM VUdfRU4uIFRoZSBzcGVjIGV2ZW4gd2FybnMgdGhhdCBzb21ldGhpbmcKbGlrZSB0aGlzIGNvdWxk IGhhcHBlbi4gTm90IHN1cmUgd2h5IGl0IHNwZWNpZmljYWxseSBoYXBwZW5zIGZvcgpwb3J0cyB3 aGVyZSBub3RoaW5nIGlzIGNvbm5lY3RlZC4gRmVlbHMgbGlrZSBpdCBzaG91bGQgYmUgdGhlIG90 aGVyCndheSBhcm91bmQuCgpTbyBsb29rcyBsaWtlIEknbGwgbmVlZCB0byBjb21lIHVwIHdpdGgg c29tZSBvdGhlciB3YXkgdG8gZ3VhcmFudGVlCnRoZSBJU1IgZWRnZS4gQ2FuJ3QgaW1tZWRpYXRl bHkgdGhpbmsgb2YgYW55IHdheSBhcGFydCBmcm9tIGNsZWFyaW5nClBPUlRfSE9UUExVR19TVEFU IGluIGEgbG9vcCA6KAoKPiArCj4gKwlzcGluX3VubG9jaygmZGV2X3ByaXYtPmlycV9sb2NrKTsK PiAgCj4gIAlyZXR1cm4gaG90cGx1Z19zdGF0dXM7Cj4gIH0KPiAtLSAKPiAyLjE2LjQKPiAKPiBf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IEludGVsLWdm eCBtYWlsaW5nIGxpc3QKPiBJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngKCi0tIApW aWxsZSBTeXJqw6Rsw6QKSW50ZWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v aW50ZWwtZ2Z4Cg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga12.intel.com ([192.55.52.136]:56728 "EHLO mga12.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S964831AbeFNQ2A (ORCPT ); Thu, 14 Jun 2018 12:28:00 -0400 Date: Thu, 14 Jun 2018 19:27:57 +0300 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= To: intel-gfx@lists.freedesktop.org Cc: stable@vger.kernel.org Subject: Re: [Intel-gfx] [PATCH 2/4] drm/i915: Fix hotplug irq ack on i965/g4x Message-ID: <20180614162757.GJ20518@intel.com> References: <20180611200258.27121-1-ville.syrjala@linux.intel.com> <20180611200258.27121-2-ville.syrjala@linux.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20180611200258.27121-2-ville.syrjala@linux.intel.com> Sender: stable-owner@vger.kernel.org List-ID: On Mon, Jun 11, 2018 at 11:02:56PM +0300, Ville Syrjala wrote: > From: Ville Syrj�l� > > Just like with PIPESTAT, the edge triggered IIR on i965/g4x > also causes problems for hotplug interrupts. To make sure > we don't get the IIR port interrupt bit stuck low with the > ISR bit high we must force an edge in ISR. We do that by > clearing PORT_HOTPLUG_EN temporaryly when we ack > PORT_HOTPLUG_STAT. > > Cc: stable@vger.kernel.org > Signed-off-by: Ville Syrj�l� > --- > drivers/gpu/drm/i915/i915_irq.c | 31 ++++++++++++++++++++++++++++--- > 1 file changed, 28 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c > index 364e1c85315e..59250ecbd0d9 100644 > --- a/drivers/gpu/drm/i915/i915_irq.c > +++ b/drivers/gpu/drm/i915/i915_irq.c > @@ -1998,10 +1998,35 @@ static void valleyview_pipestat_irq_handler(struct drm_i915_private *dev_priv, > > static u32 i9xx_hpd_irq_ack(struct drm_i915_private *dev_priv) > { > - u32 hotplug_status = I915_READ(PORT_HOTPLUG_STAT); > + u32 hotplug_status, hotplug_en; > > - if (hotplug_status) > - I915_WRITE(PORT_HOTPLUG_STAT, hotplug_status); > + hotplug_status = I915_READ(PORT_HOTPLUG_STAT); > + > + if (IS_G4X(dev_priv) || > + IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) > + hotplug_status &= HOTPLUG_INT_STATUS_G4X | > + DP_AUX_CHANNEL_MASK_INT_STATUS_G4X; > + else > + hotplug_status &= HOTPLUG_INT_STATUS_I915; > + > + if (hotplug_status == 0) > + return 0; > + > + spin_lock(&dev_priv->irq_lock); > + > + /* > + * Toggle all PORT_HOTPLUG_EN bits to make sure we > + * get an edge in the ISR port interrupt bit if we > + * don't clear all the enabled status bits. Otherwise > + * the edge triggered IIR on i965/g4x wouldn't notice > + * that an interrupt is still pending. > + */ > + hotplug_en = I915_READ(PORT_HOTPLUG_EN); > + I915_WRITE(PORT_HOTPLUG_EN, 0); > + I915_WRITE(PORT_HOTPLUG_STAT, hotplug_status); > + I915_WRITE(PORT_HOTPLUG_EN, hotplug_en); Actually this seems to be a bad idea. At least one elk here likes to signal a long pulse on disconnected ports every time I toggle the enable bit in PORT_HOTPLUG_EN. The spec even warns that something like this could happen. Not sure why it specifically happens for ports where nothing is connected. Feels like it should be the other way around. So looks like I'll need to come up with some other way to guarantee the ISR edge. Can't immediately think of any way apart from clearing PORT_HOTPLUG_STAT in a loop :( > + > + spin_unlock(&dev_priv->irq_lock); > > return hotplug_status; > } > -- > 2.16.4 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Ville Syrj�l� Intel