Thread (24 messages) 24 messages, 2 authors, 2025-11-21

Re: [PATCH v4 01/10] drm/connector: let drivers declare infoframes as unsupported

From: Maxime Ripard <mripard@kernel.org>
Date: 2025-09-25 12:36:51
Also in: dri-devel, linux-arm-msm, linux-rockchip, linux-sunxi, lkml

On Wed, Sep 10, 2025 at 06:16:25PM +0300, Dmitry Baryshkov wrote:
On Wed, Sep 10, 2025 at 01:03:47PM +0200, Maxime Ripard wrote:
quoted
On Tue, Sep 09, 2025 at 05:51:59PM +0300, Dmitry Baryshkov wrote:
quoted
Currently DRM framework expects that the HDMI connector driver supports
all infoframe types: it generates the data as required and calls into
the driver to program all of them, letting the driver to soft-fail if
the infoframe is unsupported. This has a major drawback on userspace
API: the framework also registers debugfs files for all Infoframe types,
possibly surprising the users when infoframe is visible in the debugfs
file, but it is not visible on the wire. Drivers are also expected to
return success even for unsuppoted InfoFrame types.

Let drivers declare that they support only a subset of infoframes,
creating a more consistent interface. Make the affected drivers return
-EOPNOTSUPP if they are asked to program (or clear) InfoFrames which are
not supported.

Acked-by: Liu Ying <victor.liu@nxp.com>
Acked-by: Daniel Stone <redacted>
Signed-off-by: Dmitry Baryshkov <redacted>
Again, I still believe that it's a bad idea, goes against what the spec
states, and the framework was meant to be.
Please correct me if I'm wrong. The specs (HDMI & CEA) define several
infoframes and whether we should be sending them. If I'm reading it
correctrly, CEA spec explicitly says 'If the Source supports the
transmission of [foo] InfoFrame..." (6.4 - AVI, 6.6 - Audio, 6.7 MPEG,
6.9 - DRM). For other InfoFrames (6.5 SPD, 6.8 NTSC VBI) it just defines
that sending those frames is optional.
SPD is indeed optional, but the HDMI spec, (HDMI 1.4b, Section 8.2.1 -
Auxiliary Video information (AVI) InfoFrame) states that:

  A Source shall always transmit an AVI InfoFrame at least once per two
  Video Fields if the Source:

   * is ever capable of transmitting an AVI InfoFrame or,
   * is ever capable of transmitting YCBCR pixel encoding or,
   * is ever capable of transmitting any colorimetry other than the
     transmitted video format’s default colorimetry or,
   * is ever capable of transmitting any xvYCC or future enhanced
     colorimetry or,
   * is ever capable of transmitting any Gamut Metadata packet or,
   * is ever capable of transmitting any video format with multiple
     allowed pixel repetitions or,
   * is ever capable of transmitting Content Type other than “no data” or,
   * is ever capable of transmitting YCC Quantization Range.

  The AVI InfoFrame shall be transmitted even while such a Source is
  transmitting RGB and non-pixel-repeated video. When a Source is not
  explicitly required to transmit AVI InfoFrames, it is recommended that
  the Source transmit AVI InfoFrames.

So it's recommended in every case, and the list kind of makes it
mandatory for how Linux uses HDMI.

Also, did we ever encounter some hardware that couldn't send AVI?

Audio is mandatory when streaming audio, DRM when using HDR, and we
don't support the others yet.

So the only we support but don't have to send is SPD.
We can't even infer support for InfoFrames from the Source features.
E.g. CEA 6.6.1 defines a case when digital audio is allowed to be sent,
without sending Audio InfoFrame.
HDMI 1.4 section 8.2.2 - Audio Infoframe states that:

  Whenever an active audio stream is being transmitted, an accurate
  Audio InfoFrame shall be transmitted at least once per two Video
  Fields.

I'd say it takes precedence over CTA-861.
As we will be getting more and more features, some of the InfoFrames
or data packets will be 'good to have, but not required'.
And drivers would be free to ignore those.
quoted
So, no, sorry. That's still a no for me. Please stop sending that patch
Oops :-)
quoted
unless we have a discussion about it and you convince me that it's
actually something that we'd need.
My main concern is that the drivers should not opt-out of the features.
E.g. if we start supporting ISRC packets or MPEG or NTSC VBI InfoFrames
(yes, stupid examples), it should not be required to go through all the
drivers, making sure that they disable those. Instead the DRM framework
should be able to make decisions like:

- The driver supports SPD and the VSDB defines SPD, enable this
  InfoFrame (BTW, this needs to be done anyway, we should not be sending
  SPD if it's not defined in VSDB, if I read it correctly).

- The driver hints that the pixel data has only 10 meaninful bits of
  data per component (e.g. out of 12 for DeepColor 36), the Sink has
  HF-VSDB, send HF-VSIF.

- The driver has enabled 3D stereo mode, but it doesn't declare support
  for HF-VSIF. Send only H14b-VSIF.

Similarly (no, I don't have these on my TODO list, these are just
examples):
- The driver defines support for NTSC VBI, register a VBI device.

- The driver defines support for ISRC packets, register ISRC-related
  properties.

- The driver defines support for MPEG Source InfoFrame, provide a way
  for media players to report frame type and bit rate.

- The driver provides limited support for Extended HDR DM InfoFrames,
  select the correct frame type according to driver capabilities.

Without the 'supported' information we should change atomic_check()
functions to set infoframe->set to false for all unsupported InfoFrames
_and_ go through all the drivers again each time we add support for a
feature (e.g. after adding HF-VSIF support).
From what you described here, I think we share a similar goal and have
somewhat similar concerns (thanks, btw, it wasn't obvious to me before),
we just disagree on the trade-offs and ideal solution :)

I agree that we need to sanity check the drivers, and I don't want to go
back to the situation we had before where drivers could just ignore
infoframes and take the easy way out.

It should be hard, and easy to catch during review.

I don't think bitflag are a solution because, to me, it kind of fails
both.

What if, just like the debugfs discussion, we split write_infoframe into
write_avi_infoframe (mandatory), write_spd_infoframe (optional),
write_audio_infoframe (checked by drm_connector_hdmi_audio_init?) and
write_hdr_infoframe (checked in drmm_connector_hdmi_init if max_bpc > 8)

How does that sound?

Maxime

Attachments

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help