public inbox for drm-ai-reviews@public-inbox.freedesktop.org
 help / color / mirror / Atom feed
From: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
To: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
	Maxime Ripard <mripard@kernel.org>,
	Thomas Zimmermann <tzimmermann@suse.de>,
	David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch>,
	Andrzej Hajda <andrzej.hajda@intel.com>,
	Neil Armstrong <neil.armstrong@linaro.org>,
	Robert Foss <rfoss@kernel.org>,
	Laurent Pinchart <Laurent.pinchart@ideasonboard.com>,
	Jonas Karlman <jonas@kwiboo.se>,
	Jernej Skrabec <jernej.skrabec@gmail.com>,
	Luca Ceresoli <luca.ceresoli@bootlin.com>,
	Sandy Huang <hjc@rock-chips.com>, Heiko Stübner <heiko@sntech.de>,
	Andy Yan <andy.yan@rock-chips.com>,
	Daniel Stone <daniels@collabora.com>,
	Dave Stevenson <dave.stevenson@raspberrypi.com>,
	Maíra Canal <mcanal@igalia.com>,
	Raspberry Pi Kernel Maintenance <kernel-list@raspberrypi.com>
Cc: kernel@collabora.com, dri-devel@lists.freedesktop.org,
	linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-rockchip@lists.infradead.org
Subject: [PATCH v7 02/30] drm/connector: Add HDMI 2.0 scrambler infrastructure
Date: Tue, 02 Jun 2026 01:44:02 +0300	[thread overview]
Message-ID: <20260602-dw-hdmi-qp-scramb-v7-2-445eb54ee1ed@collabora.com> (raw)
In-Reply-To: <20260602-dw-hdmi-qp-scramb-v7-0-445eb54ee1ed@collabora.com>

Add the connector-level infrastructure to support HDMI 2.0 scrambling:

- A scrambler_supported flag to indicate whether the source supports the
  scrambling capability, in which case the newly introduced
  .scrambler_{enable|disable}() callbacks in drm_connector_hdmi_funcs
  are mandatory
- A scrambler_needed flag to be managed by the hdmi state helpers based
  on the negotiated TMDS character rate and the source/sink scrambling
  capabilities
- A scrambler_enabled flag to track whether scrambling is currently
  active
- A delayed work item (scdc_work) with an associated callback (scdc_cb)
  to monitor sink-side scrambling status and retry the setup if the sink
  resets it

These are intended to be used by SCDC scrambling helpers to coordinate
scrambling setup and teardown between the source driver and the DRM
core.

Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
---
 drivers/gpu/drm/drm_connector.c | 18 +++++++++
 include/drm/drm_connector.h     | 81 +++++++++++++++++++++++++++++++++++++++++
 2 files changed, 99 insertions(+)

diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
index a5d13b92b665..526dc2931b8a 100644
--- a/drivers/gpu/drm/drm_connector.c
+++ b/drivers/gpu/drm/drm_connector.c
@@ -220,6 +220,19 @@ void drm_connector_free_work_fn(struct work_struct *work)
 	}
 }
 
+static void drm_connector_hdmi_scdc_work(struct work_struct *work)
+{
+	struct drm_connector *connector;
+	struct drm_connector_hdmi *hdmi;
+
+	hdmi = container_of(to_delayed_work(work), struct drm_connector_hdmi,
+			    scdc_work);
+	connector = container_of(hdmi, struct drm_connector, hdmi);
+
+	if (hdmi->scdc_cb)
+		hdmi->scdc_cb(connector);
+}
+
 static int drm_connector_init_only(struct drm_device *dev,
 				   struct drm_connector *connector,
 				   const struct drm_connector_funcs *funcs,
@@ -285,6 +298,7 @@ static int drm_connector_init_only(struct drm_device *dev,
 	mutex_init(&connector->edid_override_mutex);
 	mutex_init(&connector->hdmi.infoframes.lock);
 	mutex_init(&connector->hdmi_audio.lock);
+	INIT_DELAYED_WORK(&connector->hdmi.scdc_work, drm_connector_hdmi_scdc_work);
 	connector->edid_blob_ptr = NULL;
 	connector->epoch_counter = 0;
 	connector->tile_blob_ptr = NULL;
@@ -606,6 +620,10 @@ int drmm_connector_hdmi_init(struct drm_device *dev,
 	    !hdmi_funcs->hdmi.write_infoframe)
 		return -EINVAL;
 
+	if (connector->hdmi.scrambler_supported &&
+	    (!hdmi_funcs->scrambler_enable || !hdmi_funcs->scrambler_disable))
+		return -EINVAL;
+
 	ret = drmm_connector_init(dev, connector, funcs, connector_type, ddc);
 	if (ret)
 		return ret;
diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
index 529755c2e862..f1c5c15a6cce 100644
--- a/include/drm/drm_connector.h
+++ b/include/drm/drm_connector.h
@@ -28,6 +28,7 @@
 #include <linux/ctype.h>
 #include <linux/hdmi.h>
 #include <linux/notifier.h>
+#include <linux/workqueue.h>
 #include <drm/drm_mode_object.h>
 #include <drm/drm_util.h>
 #include <drm/drm_property.h>
@@ -1057,6 +1058,19 @@ struct drm_connector_hdmi_state {
 	 * @tmds_char_rate: TMDS Character Rate, in Hz.
 	 */
 	unsigned long long tmds_char_rate;
+
+	/**
+	 * @scrambler_needed: Whether HDMI 2.0 SCDC scrambling is required
+	 * for the negotiated mode/bpc/format.
+	 *
+	 * Computed by drm_atomic_helper_connector_hdmi_check() from
+	 * @tmds_char_rate and the source/sink scrambling capabilities.
+	 *
+	 * Per HDMI 2.0, scrambling is mandatory above 340 MHz TMDS
+	 * character rate. Optional scrambling at lower rates is
+	 * deliberately not requested by the helper.
+	 */
+	bool scrambler_needed;
 };
 
 /**
@@ -1358,6 +1372,36 @@ struct drm_connector_hdmi_funcs {
 	 */
 	const struct drm_edid *(*read_edid)(struct drm_connector *connector);
 
+	/**
+	 * @scrambler_enable:
+	 *
+	 * This callback is invoked through @drm_scdc_start_scrambling during
+	 * a commit to setup SCDC scrambling and high TMDS clock ratio on
+	 * source side.
+	 *
+	 * The @scrambler_enable callback is mandatory if HDMI 2.0 is to be
+	 * supported.
+	 *
+	 * Returns:
+	 * 0 on success, a negative error code otherwise
+	 */
+	int (*scrambler_enable)(struct drm_connector *connector);
+
+	/**
+	 * @scrambler_disable:
+	 *
+	 * This callback is invoked through @drm_scdc_stop_scrambling during
+	 * a commit to disable SCDC scrambling and high TMDS clock ratio on
+	 * source side.
+	 *
+	 * The @scrambler_disable callback is mandatory if HDMI 2.0 is to be
+	 * supported.
+	 *
+	 * Returns:
+	 * 0 on success, a negative error code otherwise
+	 */
+	int (*scrambler_disable)(struct drm_connector *connector);
+
 	/**
 	 * @avi:
 	 *
@@ -1960,6 +2004,43 @@ struct drm_connector_hdmi {
 	 */
 	unsigned long supported_formats;
 
+	/**
+	 * @scrambler_supported: Indicates whether the HDMI controller
+	 * (source) supports HDMI 2.0 SCDC scrambling.
+	 *
+	 * When true, @drm_connector_hdmi_funcs.scrambler_enable and
+	 * @drm_connector_hdmi_funcs.scrambler_disable are mandatory.
+	 * This is enforced by drmm_connector_hdmi_init().
+	 *
+	 * For HDMI bridge based drivers using drm_bridge_connector_init(),
+	 * this is propagated automatically from bridges that set the
+	 * DRM_BRIDGE_OP_HDMI_SCRAMBLER flag in their &drm_bridge->ops.
+	 * Other drivers must set this field on @connector->hdmi before calling
+	 * drmm_connector_hdmi_init().
+	 */
+	bool scrambler_supported;
+
+	/**
+	 * @scrambler_enabled: Tracks whether HDMI 2.0 scrambler is currently enabled.
+	 */
+	bool scrambler_enabled;
+
+	/**
+	 * @scdc_work: Work item currently used to monitor sink-side scrambling
+	 * status and retry setup if the sink resets it.
+	 */
+	struct delayed_work scdc_work;
+
+	/** @scdc_cb: Callback to be invoked as part of @scdc_work.
+	 *
+	 * Currently used to monitor sink-side scrambling status and retry
+	 * setup if the sink resets it.
+	 *
+	 * This is assigned by the framework when making use of
+	 * drm_scdc_start_scrambling() helper.
+	 */
+	void (*scdc_cb)(struct drm_connector *connector);
+
 	/**
 	 * @funcs: HDMI connector Control Functions
 	 */

-- 
2.54.0


  parent reply	other threads:[~2026-06-01 22:45 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-06-01 22:44 [PATCH v7 00/30] Add HDMI 2.0 support to DW HDMI QP TX Cristian Ciocaltea
2026-06-01 22:44 ` [PATCH v7 01/30] drm/fb-helper: Remove unused local variable in hotplug_event() Cristian Ciocaltea
2026-06-04  3:33   ` Claude review: " Claude Code Review Bot
2026-06-01 22:44 ` Cristian Ciocaltea [this message]
2026-06-04  3:33   ` Claude review: drm/connector: Add HDMI 2.0 scrambler infrastructure Claude Code Review Bot
2026-06-01 22:44 ` [PATCH v7 03/30] drm/display: scdc_helper: Add macro for connector-prefixed debug messages Cristian Ciocaltea
2026-06-04  3:33   ` Claude review: " Claude Code Review Bot
2026-06-01 22:44 ` [PATCH v7 04/30] drm/display: scdc_helper: Add HDMI 2.0 scrambling management helpers Cristian Ciocaltea
2026-06-04  3:33   ` Claude review: " Claude Code Review Bot
2026-06-01 22:44 ` [PATCH v7 05/30] drm/display: hdmi_state_helper: Add ctx-aware hotplug helper for SCDC sync Cristian Ciocaltea
2026-06-04  3:33   ` Claude review: " Claude Code Review Bot
2026-06-01 22:44 ` [PATCH v7 06/30] drm/display: hdmi_state_helper: Plumb HDMI 2.0 source scrambling capability Cristian Ciocaltea
2026-06-04  3:33   ` Claude review: " Claude Code Review Bot
2026-06-01 22:44 ` [PATCH v7 07/30] drm/bridge: Remove redundant error check in drm_bridge_helper_reset_crtc() Cristian Ciocaltea
2026-06-04  3:33   ` Claude review: " Claude Code Review Bot
2026-06-01 22:44 ` [PATCH v7 08/30] drm/bridge: Add HDMI 2.0 scrambler bridge operation and callbacks Cristian Ciocaltea
2026-06-04  3:33   ` Claude review: " Claude Code Review Bot
2026-06-01 22:44 ` [PATCH v7 09/30] drm/display: bridge_connector: Use cached connector status in .get_modes() Cristian Ciocaltea
2026-06-04  3:33   ` Claude review: " Claude Code Review Bot
2026-06-01 22:44 ` [PATCH v7 10/30] drm/display: bridge_connector: Switch to .detect_ctx() connector helper Cristian Ciocaltea
2026-06-04  3:33   ` Claude review: " Claude Code Review Bot
2026-06-01 22:44 ` [PATCH v7 11/30] drm/display: bridge_connector: Wire up HDMI 2.0 scrambler callbacks Cristian Ciocaltea
2026-06-04  3:33   ` Claude review: " Claude Code Review Bot
2026-06-01 22:44 ` [PATCH v7 12/30] drm/bridge: dw-hdmi-qp: Rate limit i2c read error messages Cristian Ciocaltea
2026-06-04  3:33   ` Claude review: " Claude Code Review Bot
2026-06-01 22:44 ` [PATCH v7 13/30] drm/bridge: dw-hdmi-qp: Provide .{enable|disable}_hpd() PHY ops Cristian Ciocaltea
2026-06-04  3:33   ` Claude review: " Claude Code Review Bot
2026-06-01 22:44 ` [PATCH v7 14/30] drm/bridge: dw-hdmi-qp: Add HDMI 2.0 SCDC scrambling support Cristian Ciocaltea
2026-06-04  3:33   ` Claude review: " Claude Code Review Bot
2026-06-01 22:44 ` [PATCH v7 15/30] drm/bridge: dw-hdmi-qp: Provide dw_hdmi_qp_hpd_notify() helper Cristian Ciocaltea
2026-06-04  3:33   ` Claude review: " Claude Code Review Bot
2026-06-01 22:44 ` [PATCH v7 16/30] drm/rockchip: dw_hdmi_qp: Add missing newlines in dev_err_probe() messages Cristian Ciocaltea
2026-06-01 22:44 ` [PATCH v7 17/30] drm/rockchip: dw_hdmi_qp: Use local dev variable consistently in bind() Cristian Ciocaltea
2026-06-01 22:44 ` [PATCH v7 18/30] drm/rockchip: dw_hdmi_qp: Drop unnecessary #include Cristian Ciocaltea
2026-06-01 22:44 ` [PATCH v7 19/30] drm/rockchip: dw_hdmi_qp: Defer HPD IRQ enable until after connector setup Cristian Ciocaltea
2026-06-04  3:33   ` Claude review: " Claude Code Review Bot
2026-06-01 22:44 ` [PATCH v7 20/30] drm/rockchip: dw_hdmi_qp: Mask HPD IRQ in rk3576_io_init() Cristian Ciocaltea
2026-06-04  3:33   ` Claude review: " Claude Code Review Bot
2026-06-01 22:44 ` [PATCH v7 21/30] drm/rockchip: dw_hdmi_qp: Implement .{enable|disable}_hpd() PHY ops Cristian Ciocaltea
2026-06-04  3:33   ` Claude review: " Claude Code Review Bot
2026-06-01 22:44 ` [PATCH v7 22/30] drm/rockchip: dw_hdmi_qp: Switch to dw_hdmi_qp_hpd_notify() Cristian Ciocaltea
2026-06-04  3:33   ` Claude review: " Claude Code Review Bot
2026-06-01 22:44 ` [PATCH v7 23/30] drm/bridge: dw-hdmi-qp: Remove obsolete .setup_hpd() phy op Cristian Ciocaltea
2026-06-04  3:33   ` Claude review: " Claude Code Review Bot
2026-06-01 22:44 ` [PATCH v7 24/30] drm/vc4: hdmi: Use common TMDS char rate constants Cristian Ciocaltea
2026-06-04  3:33   ` Claude review: " Claude Code Review Bot
2026-06-01 22:44 ` [PATCH v7 25/30] drm/vc4: hdmi: Convert to common HDMI 2.0 SCDC scrambling helpers Cristian Ciocaltea
2026-06-04  3:33   ` Claude review: " Claude Code Review Bot
2026-06-01 22:44 ` [PATCH v7 26/30] drm/tests: connector: Add HDMI source-side scrambler capability tests Cristian Ciocaltea
2026-06-01 22:44 ` [PATCH v7 27/30] drm/tests: edid: Add 4K@60Hz EDID with 600MHz TMDS Cristian Ciocaltea
2026-06-01 22:44 ` [PATCH v7 28/30] drm/tests: hdmi_state_helper: Add HDMI 2.0 scrambling tests Cristian Ciocaltea
2026-06-01 22:44 ` [PATCH v7 29/30] drm/tests: edid: Fix conformity for 1080p+4K YUV420 200MHz EDID Cristian Ciocaltea
2026-06-01 22:44 ` [PATCH v7 30/30] drm/tests: edid: Fix conformity for 4K RGB/YUV 340MHz EDID Cristian Ciocaltea
2026-06-04  3:33 ` Claude review: Add HDMI 2.0 support to DW HDMI QP TX Claude Code Review Bot

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=20260602-dw-hdmi-qp-scramb-v7-2-445eb54ee1ed@collabora.com \
    --to=cristian.ciocaltea@collabora.com \
    --cc=Laurent.pinchart@ideasonboard.com \
    --cc=airlied@gmail.com \
    --cc=andrzej.hajda@intel.com \
    --cc=andy.yan@rock-chips.com \
    --cc=daniels@collabora.com \
    --cc=dave.stevenson@raspberrypi.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=heiko@sntech.de \
    --cc=hjc@rock-chips.com \
    --cc=jernej.skrabec@gmail.com \
    --cc=jonas@kwiboo.se \
    --cc=kernel-list@raspberrypi.com \
    --cc=kernel@collabora.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rockchip@lists.infradead.org \
    --cc=luca.ceresoli@bootlin.com \
    --cc=maarten.lankhorst@linux.intel.com \
    --cc=mcanal@igalia.com \
    --cc=mripard@kernel.org \
    --cc=neil.armstrong@linaro.org \
    --cc=rfoss@kernel.org \
    --cc=simona@ffwll.ch \
    --cc=tzimmermann@suse.de \
    /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