drm/vc4: hdmi: Always enable GCP with AVMUTE cleared
authorDom Cobley <popcornmix@gmail.com>
Fri, 27 Jan 2023 16:12:19 +0000 (17:12 +0100)
committerMaxime Ripard <maxime@cerno.tech>
Thu, 9 Feb 2023 08:58:25 +0000 (09:58 +0100)
commit7fa846b95ce8fd4cb80f32516e2ad3f4ea4d6742
tree040365659eda2fc1651f08c53976cf7d2e38a4ba
parent6b77b16de75a6efc0870b1fa467209387cbee8f3
drm/vc4: hdmi: Always enable GCP with AVMUTE cleared

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-0
Signed-off-by: Dom Cobley <popcornmix@gmail.com>
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
Link: https://patchwork.freedesktop.org/patch/msgid/20230127161219.457058-1-maxime@cerno.tech
drivers/gpu/drm/vc4/vc4_hdmi.c