• Ville Syrjälä's avatar
    drm/i915: Fix hpd handling for pins with two encoders · 44a7276b
    Ville Syrjälä authored
    In my haste to remove irq_port[] I accidentally changed the
    way we deal with hpd pins that are shared by multiple encoders
    (DP and HDMI for pre-DDI platforms). Previously we would only
    handle such pins via ->hpd_pulse(), but now we queue up the
    hotplug work for the HDMI encoder directly. Worse yet, we now
    count each hpd twice and this increment the hpd storm count
    twice as fast. This can lead to spurious storms being detected.
    
    Go back to the old way of doing things, ie. delegate to
    ->hpd_pulse() for any pin which has an encoder with that hook
    implemented. I don't really like the idea of adding irq_port[]
    back so let's loop through the encoders first to check if we
    have an encoder with ->hpd_pulse() for the pin, and then go
    through all the pins and decided on the correct course of action
    based on the earlier findings.
    
    I have occasionally toyed with the idea of unifying the pre-DDI
    HDMI and DP encoders into a single encoder as well. Besides the
    hotplug processing it would have the other benefit of preventing
    userspace from trying to enable both encoders at the same time.
    That is simply illegal as they share the same clock/data pins.
    We have some testcases that will attempt that and thus fail on
    many older machines. But for now let's stick to fixing just the
    hotplug code.
    
    Cc: stable@vger.kernel.org # 4.19+
    Cc: Lyude Paul <lyude@redhat.com>
    Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
    Fixes: b6ca3eee ("drm/i915: Nuke dev_priv->irq_port[]")
    Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20181108200424.28371-1-ville.syrjala@linux.intel.comReviewed-by: default avatarLyude Paul <lyude@redhat.com>
    (cherry picked from commit 5a3aeca9)
    Signed-off-by: default avatarJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
    44a7276b
intel_hotplug.c 21 KB