drm/i915: Fix hotplug irq ack on i965/g4x
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Thu, 14 Jun 2018 17:56:25 +0000 (20:56 +0300)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Wed, 4 Jul 2018 20:03:30 +0000 (23:03 +0300)
commit0ba7c51a6fd80a89236f6ceb52e63f8a7f62bfd3
treebbfb70ba78517fd281c43a40916306150bb7942f
parent1f6f00238abf2bfa46f4d2c44cfc7512566f3685
drm/i915: Fix hotplug irq ack on i965/g4x

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. Unfortunately
we can't borrow the PIPESTAT trick and toggle the enable
bits in PORT_HOTPLUG_EN as that act itself generates hotplug
interrupts. Instead we just have to loop until we've cleared
PORT_HOTPLUG_STAT, or we just give up and WARN.

v2: Don't frob with PORT_HOTPLUG_EN

Cc: stable@vger.kernel.org
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180614175625.1615-1-ville.syrjala@linux.intel.com
Reviewed-by: Imre Deak <imre.deak@intel.com>
drivers/gpu/drm/i915/i915_irq.c