• Lyude Paul's avatar
    drm/i915/dp: Send DPCD ON for MST before phy_up · be1c63c8
    Lyude Paul authored
    When doing a modeset where the sink is transitioning from D3 to D0 , it
    would sometimes be possible for the initial power_up_phy() to start
    timing out. This would only be observed in the last action before the
    sink went into D3 mode was intel_dp_sink_dpms(DRM_MODE_DPMS_OFF). We
    originally thought this might be an issue with us accidentally shutting
    off the aux block when putting the sink into D3, but since the DP spec
    mandates that sinks must wake up within 1ms while we have 100ms to
    respond to an ESI irq, this didn't really add up. Turns out that the
    problem is more subtle then that:
    
    It turns out that the timeout is from us not enabling DPMS on the MST
    hub before actually trying to initiate sideband communications. This
    would cause the first sideband communication (power_up_phy()), to start
    timing out because the sink wasn't ready to respond. Afterwards, we
    would call intel_dp_sink_dpms(DRM_MODE_DPMS_ON) in
    intel_ddi_pre_enable_dp(), which would actually result in waking up the
    sink so that sideband requests would work again.
    
    Since DPMS is what lets us actually bring the hub up into a state where
    sideband communications become functional again, we just need to make
    sure to enable DPMS on the display before attempting to perform sideband
    communications.
    
    Changes since v1:
    - Remove comment above if (!intel_dp->is_mst) - vsryjala
    - Move intel_dp_sink_dpms() for MST into intel_dp_post_disable_mst() to
      keep enable/disable paths symmetrical
    - Improve commit message - dhnkrn
    Changes since v2:
    - Only send DPMS off when we're disabling the last sink, and only send
      DPMS on when we're enabling the first sink - dhnkrn
    Changes since v3:
    - Check against is_mst, not intel_dp->is_mst - dhnkrn/vsyrjala
    Signed-off-by: default avatarLyude Paul <lyude@redhat.com>
    Reviewed-by: default avatarDhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
    Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
    Tested-by: default avatarLaura Abbott <labbott@redhat.com>
    Cc: stable@vger.kernel.org
    Fixes: ad260ab3 ("drm/i915/dp: Write to SET_POWER dpcd to enable MST hub.")
    Link: https://patchwork.freedesktop.org/patch/msgid/20180407011053.22437-1-lyude@redhat.com
    be1c63c8
intel_ddi.c 98.2 KB