Hi Jani, Sorry about that - Gmail mangled the whitespace. I'm resending it properly using git send-email.
Thanks for catching this! Jerome Le jeu. 8 janv. 2026 à 10:45, Jani Nikula <[email protected]> a écrit : > > On Thu, 08 Jan 2026, Jérôme Tollet <[email protected]> wrote: > > Hello, > > As per HDMI 2.0 specification, after scrambled video transmission begins, > > the source must poll the TMDS_Scrambler_Status bit until it reads 1 or > > until a timeout of 200 ms. > > > > Add a polling step after enabling the HDMI port to verify scrambling > > status, following the spec requirement. > > > > Without the wait for the scrambling bit to set, some HDMI 2.0 monitors fail > > to decode the signal at 4K@60Hz (594 MHz) when SCDC scrambling is not yet > > fully configured by the sink. > > > > v2: > > - Instead of the fixed delay, poll for TMDS scramble status for 200 msec > > as per the HDMI spec. (Ankit) > > The patch is whitespace broken. > > > > > Reported-by: Jerome Tollet <[email protected]> > > Closes: https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/6868 > > Link: > > https://lore.kernel.org/dri-devel/[email protected]/ > > Signed-off-by: Jerome Tollet <[email protected]> > > Signed-off-by: Ankit Nautiyal <[email protected]> > > --- > > drivers/gpu/drm/i915/display/intel_ddi.c | 2 ++ > > drivers/gpu/drm/i915/display/intel_hdmi.c | 25 +++++++++++++++++++++++ > > drivers/gpu/drm/i915/display/intel_hdmi.h | 2 ++ > > 3 files changed, 29 insertions(+) > > > > diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c > > b/drivers/gpu/drm/i915/display/intel_ddi.c > > index cb91d07cdaa6..c708b713f0e8 100644 > > --- a/drivers/gpu/drm/i915/display/intel_ddi.c > > +++ b/drivers/gpu/drm/i915/display/intel_ddi.c > > @@ -3506,6 +3506,8 @@ static void intel_ddi_enable_hdmi(struct > > intel_atomic_state *state, > > } > > > > intel_ddi_buf_enable(encoder, buf_ctl); > > + > > + intel_hdmi_poll_for_scrambling_enable(crtc_state, connector); > > } > > > > static void intel_ddi_enable(struct intel_atomic_state *state, > > diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c > > b/drivers/gpu/drm/i915/display/intel_hdmi.c > > index 055e68810d0d..958d939ae6ee 100644 > > --- a/drivers/gpu/drm/i915/display/intel_hdmi.c > > +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c > > @@ -2694,6 +2694,31 @@ intel_hdmi_add_properties(struct intel_hdmi > > *intel_hdmi, struct drm_connector *_ > > drm_connector_attach_max_bpc_property(&connector->base, 8, 12); > > } > > > > +/* > > + * As Per HDMI 2.0 spec: after scrambled video transmission begins, > > + * poll TMDS_Scrambler_Status until it reads 1, for up to 200 ms. > > + */ > > +void > > +intel_hdmi_poll_for_scrambling_enable(const struct intel_crtc_state > > *crtc_state, > > + struct drm_connector *_connector) > > +{ > > + struct intel_connector *connector = to_intel_connector(_connector); > > + struct intel_display *display = to_intel_display(crtc_state); > > + bool scrambling_enabled = false; > > + int ret; > > + > > + if (!crtc_state->hdmi_scrambling) > > + return; > > + > > + /* Poll for a max of 200 msec as per HDMI spec */ > > + ret = poll_timeout_us(scrambling_enabled = > > drm_scdc_get_scrambling_status(&connector->base), > > + scrambling_enabled, 1000, 200 * 1000, false); > > + if (ret) > > + drm_dbg_kms(display->drm, > > + "[CONNECTOR:%d:%s] Timed out waiting for scrambling enable\n", > > + connector->base.base.id, connector->base.name); > > +} > > + > > /* > > * intel_hdmi_handle_sink_scrambling: handle sink scrambling/clock ratio > > setup > > * @encoder: intel_encoder > > diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.h > > b/drivers/gpu/drm/i915/display/intel_hdmi.h > > index be2fad57e4ad..0fa3661568e8 100644 > > --- a/drivers/gpu/drm/i915/display/intel_hdmi.h > > +++ b/drivers/gpu/drm/i915/display/intel_hdmi.h > > @@ -70,5 +70,7 @@ void hsw_read_infoframe(struct intel_encoder *encoder, > > const struct intel_crtc_state *crtc_state, > > unsigned int type, > > void *frame, ssize_t len); > > +void intel_hdmi_poll_for_scrambling_enable(const struct > > intel_crtc_state *crtc_state, > > + struct drm_connector *_connector); > > > > #endif /* __INTEL_HDMI_H__ */ > > -- > > 2.45.2 > > -- > Jani Nikula, Intel
