• Ville Syrjälä's avatar
    drm/i915/hdmi: Turn DP++ TMDS output buffers back on in encoder->shutdown() · 49c55f7b
    Ville Syrjälä authored
    Looks like our VBIOS/GOP generally fail to turn the DP dual mode adater
    TMDS output buffers back on after a reboot. This leads to a black screen
    after reboot if we turned the TMDS output buffers off prior to reboot.
    And if i915 decides to do a fastboot the black screen will persist even
    after i915 takes over.
    
    Apparently this has been a problem ever since commit b2ccb822 ("drm/i915:
    Enable/disable TMDS output buffers in DP++ adaptor as needed") if one
    rebooted while the display was turned off. And things became worse with
    commit fe0f1e3b ("drm/i915: Shut down displays gracefully on reboot")
    since now we always turn the display off before a reboot.
    
    This was reported on a RKL, but I confirmed the same behaviour on my
    SNB as well. So looks pretty universal.
    
    Let's fix this by explicitly turning the TMDS output buffers back on
    in the encoder->shutdown() hook. Note that this gets called after irqs
    have been disabled, so the i2c communication with the DP dual mode
    adapter has to be performed via polling (which the gmbus code is
    perfectly happy to do for us).
    
    We also need a bit of care in handling DDI encoders which may or may
    not be set up for HDMI output. Specifically ddc_pin will not be
    populated for a DP only DDI encoder, in which case we don't want to
    call intel_gmbus_get_adapter(). We can handle that by simply doing
    the dual mode adapter type check before calling
    intel_gmbus_get_adapter().
    
    Cc: <stable@vger.kernel.org> # v5.11+
    Fixes: fe0f1e3b ("drm/i915: Shut down displays gracefully on reboot")
    Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/4371Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20211029191802.18448-2-ville.syrjala@linux.intel.comReviewed-by: default avatarStanislav Lisovskiy <stanislav.lisovskiy@intel.com>
    49c55f7b
intel_ddi.c 137 KB