Re: [PATCH v6 0/4] Add SCDC information to connector debugfs
From: Nicolas Frattaroli
Date: Mon Jun 15 2026 - 04:12:45 EST
On Saturday, 13 June 2026 08:57:29 Central European Summer Time Hans Verkuil wrote:
> Hi Nicolas,
>
> On 11/06/2026 14:57, Nicolas Frattaroli wrote:
> > HDMI uses the DDC I2C bus for communicating various bits of link status
> > out of band with the actual HDMI video signal. This information can be
> > useful for debugging issues like questionable cables sabotaged by feline
> > teeth, Enthusiast Grade cables made of cow fencing wire, and other such
> > problems that ruin one's media viewing plans.
> >
> > Consequently, this series exposes various bits of pertinent information
> > from the SCDC protocol in an HDMI connector's debugfs. To continually
> > poll the link status, userspace can poll the debugfs file.
>
> Something is not quite right: I've been testing this series with my i915
> based laptop with HDMI connector, and I never see the scdc_status file.
> And that's because CONFIG_DRM_BRIDGE_CONNECTOR is not set for my configuration.
That's to be expected. i915 does not use bridge connectors, and neither
does amdgpu iirc. I am working on embedded boards that do use bridge
connectors, along with all the rest of the HDMI state helpers.
Implementing something new in DRM usually involves having to triplicate
certain parts of the work in order to have i915 and amdgpu behave the
same as everyone else.
> So I think you are creating the debugfs entry in the wrong place.
I can't create it for all drm_connectors as Maxime suggested due to the
cyclical dependency that would create. If someone has any idea on how
to break that dependency cycle, I'm open to suggestions.
> I can read the SCDC from the display using edid-decode with the right /dev/i2c-X
> device, so it's definitely there.
>
> Regards,
>
> Hans
>
> >
> > ---
> > Changes in v6:
> > - Fix off-by-one error in drm_scdc_read_state
> > - Link to v5: https://patch.msgid.link/20260604-scdc-link-health-v5-0-11173b0ac3de@xxxxxxxxxxxxx
> >
> > Changes in v5:
> > - Read all SCDC data regardless of update flags
> > - Dump SCDC data as hex before the human-readable output. It's separated
> > with "\n----------------\n\n".
> > - No longer write 0 to read-only registers
> > - Add Reed-Solomon Corrections counter parsing
> > - Parsing has been kept. A desire was expressed to get this data without
> > any external userspace tooling, and the kernel will need to parse it
> > eventually anyway to set the link status.
> > - Functions have been made static as of right now, since external users
> > may do another pass over the function signatures anyway.
> > - Link to v4: https://patch.msgid.link/20260527-scdc-link-health-v4-0-622ea40a1f59@xxxxxxxxxxxxx
> >
> > Changes in v4:
> > - Don't use C struct bitfields for parsing status flags. Switch to
> > bitwise AND for boolean flags, and FIELD_GET for multi-bit values.
> > - Drop the superfluous !! and parens
> > - Drop the __pure attributes on static functions
> > - Initialise stack local arrays with {}, not { 0 }.
> > - I've kept the print macros and %-30s format. Reason being that I don't
> > want to repeat the format specifier and str_yes_no(foo) a bunch, and I
> > like the %-30s format because it means all values are aligned with the
> > value of the longest field, which is 30 chars long.
> > - Link to v3: https://patch.msgid.link/20260526-scdc-link-health-v3-0-59e4a4aaead1@xxxxxxxxxxxxx
> >
> > Changes in v3:
> > - Add patch to change return type of drm_scdc_read/write.
> > - Rework error counter reading to duplicate less code.
> > - Also check lane 3 counter valid flag when reading its error counter.
> > - Use memset to clear buf for error counters, rather than doing it in
> > the loop.
> > - Make read_error_counters not accept 0 as num_lanes; fix it up in the
> > caller instead.
> > - Link to v2: https://patch.msgid.link/20260520-scdc-link-health-v2-0-511af18cd64b@xxxxxxxxxxxxx
> >
> > Changes in v2:
> > - Add HDMI 2.1 SCDC status reporting
> > - Link to v1: https://patch.msgid.link/20260415-scdc-link-health-v1-0-8e731e88eaf0@xxxxxxxxxxxxx
> >
> > To: Jani Nikula <jani.nikula@xxxxxxxxxxxxxxx>
> > To: Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>
> > To: Maxime Ripard <mripard@xxxxxxxxxx>
> > To: Thomas Zimmermann <tzimmermann@xxxxxxx>
> > To: David Airlie <airlied@xxxxxxxxx>
> > To: Simona Vetter <simona@xxxxxxxx>
> > To: Andrzej Hajda <andrzej.hajda@xxxxxxxxx>
> > To: Neil Armstrong <neil.armstrong@xxxxxxxxxx>
> > To: Robert Foss <rfoss@xxxxxxxxxx>
> > To: Laurent Pinchart <Laurent.pinchart@xxxxxxxxxxxxxxxx>
> > To: Jonas Karlman <jonas@xxxxxxxxx>
> > To: Jernej Skrabec <jernej.skrabec@xxxxxxxxx>
> > To: Luca Ceresoli <luca.ceresoli@xxxxxxxxxxx>
> > To: Daniel Stone <daniel@xxxxxxxxxxxxx>
> > To: Hans Verkuil <hverkuil+cisco@xxxxxxxxxx>
> > Cc: dri-devel@xxxxxxxxxxxxxxxxxxxxx
> > Cc: linux-kernel@xxxxxxxxxxxxxxx
> > Cc: kernel@xxxxxxxxxxxxx
> > Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@xxxxxxxxxxxxx>
> >
> > ---
> > Nicolas Frattaroli (4):
> > drm/scdc-helper: Don't use ssize_t return type for scdc_read/write
> > drm/scdc-helper: Add scdc_status debugfs entry
> > drm/display: bridge_connector: init scdc debugfs for HDMI
> > drm/scdc-helper: Implement parsing and printing HDMI 2.1 fields
> >
> > drivers/gpu/drm/display/drm_bridge_connector.c | 4 +
> > drivers/gpu/drm/display/drm_scdc_helper.c | 285 ++++++++++++++++++++++++-
> > include/drm/display/drm_scdc.h | 21 +-
> > include/drm/display/drm_scdc_helper.h | 103 ++++++++-
> > 4 files changed, 404 insertions(+), 9 deletions(-)
> > ---
> > base-commit: 4fdfaadba04dc0f2f2490dbc91922caa290463a5
> > change-id: 20260413-scdc-link-health-89326013d96c
> >
> > Best regards,
> > --
> > Nicolas Frattaroli <nicolas.frattaroli@xxxxxxxxxxxxx>
> >
>
>