public inbox for intel-xe@lists.freedesktop.org
 help / color / mirror / Atom feed
From: Jani Nikula <jani.nikula@linux.intel.com>
To: "Jérôme Tollet" <jerome.tollet@gmail.com>,
	rodrigo.vivi@intel.com, ankit.k.nautiyal@intel.com
Cc: intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org
Subject: Re: [PATCH v2] drm/i915/hdmi: Poll for 200 msec for TMDS_Scrambler_Status
Date: Thu, 08 Jan 2026 11:45:04 +0200	[thread overview]
Message-ID: <1afd1c1c255e96c95687175e9cc0c92041f8ccbc@intel.com> (raw)
In-Reply-To: <CADN_a6OKUQ6fgu-JjNvwFb_MV8dxTDhppoq4DDnQ9p_t-JZ8yg@mail.gmail.com>

On Thu, 08 Jan 2026, Jérôme Tollet <jerome.tollet@gmail.com> 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 <jerome.tollet@gmail.com>
>  Closes: https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/6868
>  Link: https://lore.kernel.org/dri-devel/20251230091037.5603-1-jerome.tollet@gmail.com/
>  Signed-off-by: Jerome Tollet <jerome.tollet@gmail.com>
>  Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
>  ---
>   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	other threads:[~2026-01-08  9:45 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-01-08  9:07 [PATCH v2] drm/i915/hdmi: Poll for 200 msec for TMDS_Scrambler_Status Jérôme Tollet
2026-01-08  9:45 ` Jani Nikula [this message]
2026-01-08 11:11   ` Jérôme Tollet
2026-04-01  9:41 ` Murthy, Arun R
2026-04-01 13:00   ` Nautiyal, Ankit K
2026-04-02  3:37     ` Murthy, Arun R

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1afd1c1c255e96c95687175e9cc0c92041f8ccbc@intel.com \
    --to=jani.nikula@linux.intel.com \
    --cc=ankit.k.nautiyal@intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=intel-xe@lists.freedesktop.org \
    --cc=jerome.tollet@gmail.com \
    --cc=rodrigo.vivi@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox