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

Reply via email to