• Dom Cobley's avatar
    drm/vc4: hdmi: Always enable GCP with AVMUTE cleared · 7fa846b9
    Dom Cobley authored
    Issue is some displays go blank at the point of firmware to kms
    handover.  Plugging/unplugging hdmi cable, power cycling display, or
    switching standby off/on
    typically resolve this case.
    
    Finally managed to find a display that suffers from this, and track down
    the issue.
    
    The firmware uses AVMUTE in normal operation. It will set AVMUTE before
    disabling hdmi clocks and phy. It will clear AVMUTE after clocks and phy
    are set up for a new hdmi mode.
    
    But with the hdmi handover from firmware to kms, AVMUTE will be set by
    firmware.
    
    kms driver typically has no GCP packet (except for deep colour modes).
    The spec isn't clear on whether to consider the AVMUTE as continuing
    indefinitely in the absence of a GCP packet, or to consider that state
    to have ended.
    
    Most displays behave as we want, but there are a number (from multiple
    manufacturers) which need to see AVMUTE cleared before displaying a
    picture.
    
    Lets just always enable GCP packet with AVMUTE cleared. That resolves
    the issue on problematic displays.
    
    From HDMI 1.4 spec:
    
      A CD field of zero (Color Depth not indicated) shall be used whenever
      the Sink does not indicate support for Deep Color. This value may
      also be used in Deep Color mode to transmit a GCP indicating only
      non-Deep Color information (e.g. AVMUTE).
    
    So use CD=0 where we were previously not enabling a GCP.
    
    Link: https://forum.libreelec.tv/thread/24780-le-10-0-1-rpi4-no-picture-after-update-from-le-10-0-0Signed-off-by: default avatarDom Cobley <popcornmix@gmail.com>
    Signed-off-by: default avatarMaxime Ripard <maxime@cerno.tech>
    Link: https://patchwork.freedesktop.org/patch/msgid/20230127161219.457058-1-maxime@cerno.tech
    7fa846b9
vc4_hdmi.c 101 KB