From nobody Sun May 24 22:43:18 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A39923E277C for ; Wed, 20 May 2026 18:38:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302315; cv=none; b=m9YEh384AgXO3nJYvV5lnoIi/RRx9V5AyCc44OF6cG3a/38jhzEooMOX+O5tbZlxKvin6VZJiV8P54xGFiBdUOrbf9WPu2sWRrxxXqoIpuZY9/Cy/fgF6J6nPSOpX+ub8EP5ETBG3nMLgCF6kK2QScetsNRxfhCu3GrXRtiqAvg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302315; c=relaxed/simple; bh=q9lAjq8Od9z7GCP3fP0P3yIEdOdqbBKGEd1xHccT+5I=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=BYfF6kG28NtUReN0B+dlG0n1XTTnfCY7/3pctykzwzBBO1VfqPYL2jJlah1MMK7H0UpsTGAMIMjPpXtlFHj5cgVRxZoZJWdW+281qRG7oXXj/Vw5CK+7AhC4OLoHLbZnzZgz73TkatVJ4jYrOVsRfQBXOtRGDfD9bB2J/3Q4JRc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=Wf2xvDOx; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="Wf2xvDOx" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1779302312; bh=q9lAjq8Od9z7GCP3fP0P3yIEdOdqbBKGEd1xHccT+5I=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Wf2xvDOxvItf3jlZ1igRBNGG9oq6tqMcROPCqFzf5MdSQj7uQd9/KO3cHwMiovH6R bBUwL/WJfGM5r05dklc9vRodEQIi0DiylPSX1JU8u7e9PUQLLVtC3cM65w3wNtsU7F 9ntlHhg4bSgYHbPzEIvQxUiLwi6IiWWjnM5ETyL+bvN9tmMD4/kV63C+/CM+bskMQx BexKtR1sPrETqkYe3AS8OL2x6H7TeGBzoWwR/lhhnCGNM0bfEhEbDoFWqOCNWGpLlV W6j3Ki+VP3FnD1DGU0TOs/uZssJdRnV6/jsNad1x0BXtCKMCXi/p38CGz2GfkFp7Om wa2ridcHtceXw== Received: from localhost (unknown [100.64.0.241]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: cristicc) by bali.collaboradmins.com (Postfix) with ESMTPSA id CDC2D17E1305; Wed, 20 May 2026 20:38:31 +0200 (CEST) From: Cristian Ciocaltea Date: Wed, 20 May 2026 21:38:12 +0300 Subject: [PATCH v6 01/22] drm/fb-helper: Remove unused local variable in hotplug_event() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260520-dw-hdmi-qp-scramb-v6-1-24b74603b782@collabora.com> References: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> In-Reply-To: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan , Luca Ceresoli , Daniel Stone 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 X-Mailer: b4 0.15.1 Remove the 'err' local variable in drm_fb_helper_hotplug_event() which only stores a return value that is never used beyond the immediate return statement. This simplifies the code without behavior changes. Signed-off-by: Cristian Ciocaltea --- drivers/gpu/drm/drm_fb_helper.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helpe= r.c index 38d25dce7f33..d8fb90160b90 100644 --- a/drivers/gpu/drm/drm_fb_helper.c +++ b/drivers/gpu/drm/drm_fb_helper.c @@ -1744,21 +1744,17 @@ EXPORT_SYMBOL(drm_fb_helper_initial_config); */ int drm_fb_helper_hotplug_event(struct drm_fb_helper *fb_helper) { - int err =3D 0; - if (!drm_fbdev_emulation || !fb_helper) return 0; =20 mutex_lock(&fb_helper->lock); - if (fb_helper->deferred_setup) { - err =3D __drm_fb_helper_initial_config_and_unlock(fb_helper); - return err; - } + if (fb_helper->deferred_setup) + return __drm_fb_helper_initial_config_and_unlock(fb_helper); =20 if (!fb_helper->fb || !drm_master_internal_acquire(fb_helper->dev)) { fb_helper->delayed_hotplug =3D true; mutex_unlock(&fb_helper->lock); - return err; + return 0; } =20 drm_master_internal_release(fb_helper->dev); @@ -1802,4 +1798,3 @@ bool drm_fb_helper_gem_is_fb(const struct drm_fb_help= er *fb_helper, return gem =3D=3D obj; } EXPORT_SYMBOL_GPL(drm_fb_helper_gem_is_fb); - --=20 2.53.0 From nobody Sun May 24 22:43:18 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 551163E832A for ; Wed, 20 May 2026 18:38:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302315; cv=none; b=b7NvjbUbwJTHCpPpkDwMRC0U+5RDsHHbDhSAuVMlc0hfmVnJWJVJQHK5TNWFcYoyzdyBy7zkyKczA9vyKjuxkYHp3ef/PQ6nUeMRxN8ibFd7amQ5vtqewVKQedAcDTe3lsMSM52zO1Nr6T78weXeMQrhDTRKHB6MI8NFndZT6TI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302315; c=relaxed/simple; bh=rf4Hd8Z282ofbw33s/zydaHP4qp8sYgew1OU7iRNARw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=hm5UEsZOPcWOPcJhKupziM5vO4lk/LDj4vyInrtmso7e7fh4doXDNxdam6flgioWT3+DYQo+sJXBQZUc9LXdlTIoatBnduAgjyUMqsOdYJLB4r8TI2bwE0eYBIwiLjXDG0XPhJJq4atd7yOo3kCify6HhTSfBizanNAcF8RkLnk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=NbMqhrLH; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="NbMqhrLH" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1779302312; bh=rf4Hd8Z282ofbw33s/zydaHP4qp8sYgew1OU7iRNARw=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=NbMqhrLH+bn3MOqxqb3LuFw0kr3PUO+7LszEG/Sq5FZwRF5ZFcXwJmzHDV5CbXnu9 nMfQjtHgchXbyp/7PYK4pNpEUg+G7A1E0GpzlN9n+gqdvfU3jliOiSULVy2fTDzWub feU1QugeiWYaXYnPuO2t32Spwg58H027hnOucJWAwtoOgJwtqCWVE47K13miSg08Tl ccgjxh054rywLQHF3cc7j/G2qsgq2Hr2ZJPLcxQMnz41IseLTNAJ9Hqthx+pqgw9LS NG7/S2lONXjz0lYiNGRWgDql46uLl2BnNTxn3Lxm3kSz+NNUWyFiaaGP4q51Xluc/z uDxE/PB/6JA2Q== Received: from localhost (unknown [100.64.0.241]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: cristicc) by bali.collaboradmins.com (Postfix) with ESMTPSA id 8D8BD17E141E; Wed, 20 May 2026 20:38:32 +0200 (CEST) From: Cristian Ciocaltea Date: Wed, 20 May 2026 21:38:13 +0300 Subject: [PATCH v6 02/22] drm/connector: Add HDMI 2.0 scrambler infrastructure Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260520-dw-hdmi-qp-scramb-v6-2-24b74603b782@collabora.com> References: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> In-Reply-To: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan , Luca Ceresoli , Daniel Stone 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 X-Mailer: b4 0.15.1 Add the connector-level infrastructure to support HDMI 2.0 scrambling: - .scrambler_src_{enable|disable}() callbacks in drm_connector_hdmi_funcs for source-side scrambling control - A delayed work item (scdc_work) with an associated callback (scdc_cb) for periodic monitoring of sink-side scrambling status - A scrambler_enabled flag to track whether scrambling is currently active 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 --- drivers/gpu/drm/drm_connector.c | 14 +++++++++++ include/drm/drm_connector.h | 52 +++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 66 insertions(+) diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connecto= r.c index 3fa4d2082cd7..91e58362fbc0 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 *wo= rk) } } =20 +static void drm_connector_hdmi_scdc_work(struct work_struct *work) +{ + struct drm_connector *connector; + struct drm_connector_hdmi *hdmi; + + hdmi =3D container_of(to_delayed_work(work), struct drm_connector_hdmi, + scdc_work); + connector =3D 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 *d= ev, 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_wor= k); connector->edid_blob_ptr =3D NULL; connector->epoch_counter =3D 0; connector->tile_blob_ptr =3D NULL; diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h index 5ad62c207d00..49eaa30b1329 100644 --- a/include/drm/drm_connector.h +++ b/include/drm/drm_connector.h @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -1358,6 +1359,36 @@ struct drm_connector_hdmi_funcs { */ const struct drm_edid *(*read_edid)(struct drm_connector *connector); =20 + /** + * @scrambler_src_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_src_enable callback is mandatory if HDMI 2.0 is + * to be supported. + * + * Returns: + * 0 on success, a negative error code otherwise + */ + int (*scrambler_src_enable)(struct drm_connector *connector); + + /** + * @scrambler_src_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_src_disable callback is mandatory if HDMI 2.0 is + * to be supported. + * + * Returns: + * 0 on success, a negative error code otherwise + */ + int (*scrambler_src_disable)(struct drm_connector *connector); + /** * @avi: * @@ -1944,6 +1975,27 @@ struct drm_connector_hdmi { */ unsigned long supported_formats; =20 + /** + * @scrambler_enabled: Tracks whether HDMI 2.0 scrambler is currently ena= bled. + */ + 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 */ --=20 2.53.0 From nobody Sun May 24 22:43:18 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F0C3F3EAC82 for ; Wed, 20 May 2026 18:38:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302316; cv=none; b=PhesWw2tQmHr3SJZLkzJqqbaMOESXmRBjJKZRPg5w+5EW+iXQQTmyYC39qWfsgmFKDGk4MeGIbhS4YHpyvWhZG+LyglNTmfPDNPZEXJCxKqc3J4cN+zb3WtJqFFjftlF0Ts8E1Tw+ioQC+6oU2RPCeLhOMeYb1fAMWXGu0++i1M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302316; c=relaxed/simple; bh=PmbgpZbPE5xAfNkRsAV4jpU2oQf+BxCJwVrQ+NHqNVE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=RfHkMSDU8uK8wj5s73koznqHq8YOHxIY76hljObDaFVuS4dB25GvJNLCjcXeTprGp0Sn8ENB4QPrPsiRKVxaHc9m9O8BeBgBQgS2vjTfpsbLW2+SQJXHka3DjtQCqmcZIuC1fTcPfubnYozClJ/pTgBs+uIrkvWsHbDTMI6kd/U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=AdN4NZLX; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="AdN4NZLX" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1779302313; bh=PmbgpZbPE5xAfNkRsAV4jpU2oQf+BxCJwVrQ+NHqNVE=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=AdN4NZLXPGN4LnrKEoAwY3AyK0vYPMpXilcPSQ8pFV5k4jFCmM8KSgQSFeLz8c+xl V5Ow3Wnm7PVVHJClqFWQt3YTPuh0ln5elJFVeOm7vBuuvFm4VdymPXgub4BC7n1yHe nwINVMRiuGiHbUE9fnhr1JXcQdsJHC9k2QM0336ysYaeaEI/NLNXvKbt3HHB0gbRm1 MhI/eCm3yFasVX6ezk4sUnWsiVk++aOkSacC8AwpfmdnNx+CzqEKCPAQ5kTw9PS7wl 6Qr/I6vIyiOoSNVO6LYMT0l7/2RSQcwG5Y82RAVdpAJYmKrFJLFWD5Wp5RcBNlTGj+ yBsUdOIrbaW2g== Received: from localhost (unknown [100.64.0.241]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: cristicc) by bali.collaboradmins.com (Postfix) with ESMTPSA id 4E24217E143E; Wed, 20 May 2026 20:38:33 +0200 (CEST) From: Cristian Ciocaltea Date: Wed, 20 May 2026 21:38:14 +0300 Subject: [PATCH v6 03/22] drm/display: scdc_helper: Add macro to simplify debugging Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260520-dw-hdmi-qp-scramb-v6-3-24b74603b782@collabora.com> References: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> In-Reply-To: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan , Luca Ceresoli , Daniel Stone 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 X-Mailer: b4 0.15.1 Introduce the drm_scdc_dbg() wrapper over drm_dbg_kms() to help getting rid of the boilerplate around prefixing the debug messages with the connector information. Signed-off-by: Cristian Ciocaltea --- drivers/gpu/drm/display/drm_scdc_helper.c | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/drivers/gpu/drm/display/drm_scdc_helper.c b/drivers/gpu/drm/di= splay/drm_scdc_helper.c index df878aad4a36..cb6632346aad 100644 --- a/drivers/gpu/drm/display/drm_scdc_helper.c +++ b/drivers/gpu/drm/display/drm_scdc_helper.c @@ -55,6 +55,10 @@ =20 #define SCDC_I2C_SLAVE_ADDRESS 0x54 =20 +#define drm_scdc_dbg(connector, fmt, ...) \ + drm_dbg_kms((connector)->dev, "[CONNECTOR:%d:%s] " fmt, \ + (connector)->base.id, (connector)->name, ##__VA_ARGS__) + /** * drm_scdc_read - read a block of data from SCDC * @adapter: I2C controller @@ -158,9 +162,7 @@ bool drm_scdc_get_scrambling_status(struct drm_connecto= r *connector) =20 ret =3D drm_scdc_readb(connector->ddc, SCDC_SCRAMBLER_STATUS, &status); if (ret < 0) { - drm_dbg_kms(connector->dev, - "[CONNECTOR:%d:%s] Failed to read scrambling status: %d\n", - connector->base.id, connector->name, ret); + drm_scdc_dbg(connector, "Failed to read scrambling status: %d\n", ret); return false; } =20 @@ -188,9 +190,7 @@ bool drm_scdc_set_scrambling(struct drm_connector *conn= ector, =20 ret =3D drm_scdc_readb(connector->ddc, SCDC_TMDS_CONFIG, &config); if (ret < 0) { - drm_dbg_kms(connector->dev, - "[CONNECTOR:%d:%s] Failed to read TMDS config: %d\n", - connector->base.id, connector->name, ret); + drm_scdc_dbg(connector, "Failed to read TMDS config: %d\n", ret); return false; } =20 @@ -201,9 +201,7 @@ bool drm_scdc_set_scrambling(struct drm_connector *conn= ector, =20 ret =3D drm_scdc_writeb(connector->ddc, SCDC_TMDS_CONFIG, config); if (ret < 0) { - drm_dbg_kms(connector->dev, - "[CONNECTOR:%d:%s] Failed to enable scrambling: %d\n", - connector->base.id, connector->name, ret); + drm_scdc_dbg(connector, "Failed to enable scrambling: %d\n", ret); return false; } =20 @@ -248,9 +246,7 @@ bool drm_scdc_set_high_tmds_clock_ratio(struct drm_conn= ector *connector, =20 ret =3D drm_scdc_readb(connector->ddc, SCDC_TMDS_CONFIG, &config); if (ret < 0) { - drm_dbg_kms(connector->dev, - "[CONNECTOR:%d:%s] Failed to read TMDS config: %d\n", - connector->base.id, connector->name, ret); + drm_scdc_dbg(connector, "Failed to read TMDS config: %d\n", ret); return false; } =20 @@ -261,9 +257,7 @@ bool drm_scdc_set_high_tmds_clock_ratio(struct drm_conn= ector *connector, =20 ret =3D drm_scdc_writeb(connector->ddc, SCDC_TMDS_CONFIG, config); if (ret < 0) { - drm_dbg_kms(connector->dev, - "[CONNECTOR:%d:%s] Failed to set TMDS clock ratio: %d\n", - connector->base.id, connector->name, ret); + drm_scdc_dbg(connector, "Failed to set TMDS clock ratio: %d\n", ret); return false; } =20 --=20 2.53.0 From nobody Sun May 24 22:43:18 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 002BD3FB072 for ; Wed, 20 May 2026 18:38:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302318; cv=none; b=JzRYY6MysIHX/k7IidxCEtXHo1mPEzwh+y5PX7Ot8LFqFpvGgTQGlNMPKEtsqUq56kTtlPTSINVjRk6JBBZV4UkYZ3/0CaNtO/9L3Gpg5/DxUc4lUUCwA4YVk4u2H27Yd7WY34LAgA4UQRWZOguHUQ86NpvAFfPmJ+J73W9o+4A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302318; c=relaxed/simple; bh=S64LWx3EZnD+kZI/8SjO4W0whGpa/y+h7oV7/MH57Rg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pGzhEPJ9G0SXE8SZ9HJMcvKxP+O1stCAz5kfXj968HBna5bxeRM50ckXORZZqc2l9Gy091aqZHupLoEDQis1f60RFY6J+ru+sLdfgc0/9+S0WMo1WUw04SVj5YDbk73yPsSCIoF3KE1WYhiBi/0SXzurVbvNK4xGzHH+IljOHwM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=WtF6RiyU; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="WtF6RiyU" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1779302314; bh=S64LWx3EZnD+kZI/8SjO4W0whGpa/y+h7oV7/MH57Rg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=WtF6RiyUnxjnk2EE7ETmajAYELpAQI8RvuWRhAKgAJYNN/SuzGFjXg/2HFhdpqhUN 34OVcVazEBRHGleBi+n3iRIinohP0eT5Xn7aiPdoMXYYfSWB2u6/6MSozgcqG043LL qtgQ0hGIsvhxm8qhnNEkmGOlcF6HFDOneGNsCfTGq6VA3qN5B8Q2v9kuhmtZRVg30P U6Wzh4rK70r1vj026LcmIfTW7srDLq80r/xwLT7cBkPXPCFnMAG9a1rbnew4EWaU/r dM001s4gJKZEe9udufnH9BGEf6E1l2PXHPWSveiyKcjvhyBN8Bx0OhnFAcFSn7oIdz 8Ups72ueJYoZA== Received: from localhost (unknown [100.64.0.241]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: cristicc) by bali.collaboradmins.com (Postfix) with ESMTPSA id 0D9A917E1449; Wed, 20 May 2026 20:38:34 +0200 (CEST) From: Cristian Ciocaltea Date: Wed, 20 May 2026 21:38:15 +0300 Subject: [PATCH v6 04/22] drm/display: scdc_helper: Add HDMI 2.0 scrambling management helpers Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260520-dw-hdmi-qp-scramb-v6-4-24b74603b782@collabora.com> References: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> In-Reply-To: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan , Luca Ceresoli , Daniel Stone 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 X-Mailer: b4 0.15.1 Add drm_scdc_start_scrambling(), drm_scdc_stop_scrambling() and drm_scdc_sync_status() helpers to manage the full lifecycle of HDMI 2.0 SCDC scrambling on both source and sink sides. drm_scdc_start_scrambling() configures SCDC scrambling and high TMDS clock ratio and starts a periodic work item that monitors the sink's SCDC scrambling status, retrying setup when the sink loses state. drm_scdc_stop_scrambling() tears down scrambling on both sides and cancels the monitoring work. drm_scdc_sync_status() triggers a CRTC reset on reconnection to restore SCDC state lost during sink disconnects within an active display pipeline. Signed-off-by: Cristian Ciocaltea --- drivers/gpu/drm/display/drm_scdc_helper.c | 235 ++++++++++++++++++++++++++= +++- include/drm/display/drm_scdc_helper.h | 6 +- 2 files changed, 236 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/display/drm_scdc_helper.c b/drivers/gpu/drm/di= splay/drm_scdc_helper.c index cb6632346aad..5bacb886d373 100644 --- a/drivers/gpu/drm/display/drm_scdc_helper.c +++ b/drivers/gpu/drm/display/drm_scdc_helper.c @@ -21,16 +21,22 @@ * DEALINGS IN THE SOFTWARE. */ =20 +#include #include #include +#include #include -#include =20 -#include +#include +#include +#include #include +#include #include #include =20 +#include + /** * DOC: scdc helpers * @@ -50,10 +56,14 @@ * has to track the connector status changes using interrupts and * restore the SCDC status. The typical solution for this is to trigger an * empty modeset in drm_connector_helper_funcs.detect_ctx(), like what vc4= does - * in vc4_hdmi_reset_link(). + * in vc4_hdmi_reset_link(). Alternatively, use the HDMI connector framewo= rk + * which ensures drm_scdc_sync_status() is called in the context of + * drm_atomic_helper_connector_hdmi_hotplug_ctx(). */ =20 -#define SCDC_I2C_SLAVE_ADDRESS 0x54 +#define SCDC_I2C_SLAVE_ADDRESS 0x54 +#define SCDC_MAX_SOURCE_VERSION 0x1 +#define SCDC_STATUS_POLL_DELAY_MS 3000 =20 #define drm_scdc_dbg(connector, fmt, ...) \ drm_dbg_kms((connector)->dev, "[CONNECTOR:%d:%s] " fmt, \ @@ -270,3 +280,220 @@ bool drm_scdc_set_high_tmds_clock_ratio(struct drm_co= nnector *connector, return true; } EXPORT_SYMBOL(drm_scdc_set_high_tmds_clock_ratio); + +static int drm_scdc_setup_scrambler(struct drm_connector *connector) +{ + bool done; + + done =3D drm_scdc_set_high_tmds_clock_ratio(connector, true); + if (!done) + return -EIO; + + done =3D drm_scdc_set_scrambling(connector, true); + if (!done) + return -EIO; + + schedule_delayed_work(&connector->hdmi.scdc_work, + msecs_to_jiffies(SCDC_STATUS_POLL_DELAY_MS)); + return 0; +} + +static void drm_scdc_monitor_scrambler(struct drm_connector *connector) +{ + if (READ_ONCE(connector->hdmi.scrambler_enabled) && + !drm_scdc_get_scrambling_status(connector)) + drm_scdc_setup_scrambler(connector); +} + +static int drm_scdc_reset_crtc(struct drm_connector *connector, + struct drm_modeset_acquire_ctx *ctx) +{ + struct drm_crtc *crtc; + u8 config; + int ret; + + if (!ctx || !connector->state) + return 0; + + crtc =3D connector->state->crtc; + if (!crtc || !crtc->state || !crtc->state->active) + return 0; + + ret =3D drm_scdc_readb(connector->ddc, SCDC_TMDS_CONFIG, &config); + if (ret) { + drm_scdc_dbg(connector, "Failed to read TMDS config: %d\n", ret); + return ret; + } + + if ((config & SCDC_SCRAMBLING_ENABLE) && + (config & SCDC_TMDS_BIT_CLOCK_RATIO_BY_40)) + return 0; + + /* + * Reset the CRTC to suspend TMDS transmission, conforming to HDMI 2.0 + * spec which requires scrambled data not to be sent before the sink is + * configured, and TMDS clock to be suspended while changing the clock + * ratio. The disable/re-enable cycle triggered by the reset should + * call drm_scdc_start_scrambling() during re-enable, properly + * configuring the sink before data transmission resumes. + */ + + drm_scdc_dbg(connector, "Resetting CRTC to restore SCDC status\n"); + + ret =3D drm_atomic_helper_reset_crtc(crtc, ctx); + if (ret && ret !=3D -EDEADLOCK) + drm_scdc_dbg(connector, "Failed to reset CRTC: %d\n", ret); + + return ret; +} + +/** + * drm_scdc_start_scrambling - activate scrambling and monitor SCDC status + * @connector: connector + * + * Enables scrambling and high TMDS clock ratio on both source and sink si= des. + * Additionally, use a delayed work item to monitor the scrambling status = on + * the sink side and retry the operation, as some displays refuse to set t= he + * scrambling bit right away. + * + * Returns: + * Zero if scrambling is set successfully, an error code otherwise. + */ +int drm_scdc_start_scrambling(struct drm_connector *connector) +{ + struct drm_display_info *info =3D &connector->display_info; + struct drm_connector_hdmi *hdmi =3D &connector->hdmi; + int ret; + u8 ver; + + if (!hdmi->funcs || + !hdmi->funcs->scrambler_src_enable || + !hdmi->funcs->scrambler_src_disable) { + drm_scdc_dbg(connector, "Function not implemented, bailing.\n"); + return -EINVAL; + } + + if (!info->is_hdmi || + !info->hdmi.scdc.supported || + !info->hdmi.scdc.scrambling.supported) { + drm_scdc_dbg(connector, "Sink doesn't support scrambling.\n"); + return -EINVAL; + } + + drm_scdc_dbg(connector, "Enabling scrambling\n"); + + ret =3D drm_scdc_readb(connector->ddc, SCDC_SINK_VERSION, &ver); + if (ret) { + drm_scdc_dbg(connector, "Failed to read SCDC_SINK_VERSION: %d\n", ret); + return ret; + } + + ret =3D drm_scdc_writeb(connector->ddc, SCDC_SOURCE_VERSION, + min_t(u8, ver, SCDC_MAX_SOURCE_VERSION)); + if (ret) { + drm_scdc_dbg(connector, "Failed to write SCDC_SOURCE_VERSION: %d\n", ret= ); + return ret; + } + + hdmi->scdc_cb =3D drm_scdc_monitor_scrambler; + WRITE_ONCE(hdmi->scrambler_enabled, true); + + ret =3D drm_scdc_setup_scrambler(connector); + if (!ret) + ret =3D hdmi->funcs->scrambler_src_enable(connector); + + if (ret) { + WRITE_ONCE(hdmi->scrambler_enabled, false); + cancel_delayed_work_sync(&hdmi->scdc_work); + hdmi->scdc_cb =3D NULL; + + drm_scdc_set_scrambling(connector, false); + drm_scdc_set_high_tmds_clock_ratio(connector, false); + } + + return ret; +} +EXPORT_SYMBOL(drm_scdc_start_scrambling); + +/** + * drm_scdc_stop_scrambling - deactivate scrambling and SCDC status monitor + * @connector: connector + * + * Disables scrambling and high TMDS clock ratio on both source and sink s= ides. + * Also cancels the SCDC status monitoring work item, if it is still pendi= ng. + * + * Returns: + * Zero if scrambling is reset successfully, an error code otherwise. + */ +int drm_scdc_stop_scrambling(struct drm_connector *connector) +{ + struct drm_display_info *info =3D &connector->display_info; + struct drm_connector_hdmi *hdmi =3D &connector->hdmi; + + if (!hdmi->funcs || + !hdmi->funcs->scrambler_src_disable) { + drm_scdc_dbg(connector, "Function not implemented, bailing.\n"); + return -EINVAL; + } + + if (!READ_ONCE(hdmi->scrambler_enabled)) + return 0; + + drm_scdc_dbg(connector, "Disabling scrambling\n"); + + WRITE_ONCE(hdmi->scrambler_enabled, false); + cancel_delayed_work_sync(&hdmi->scdc_work); + hdmi->scdc_cb =3D NULL; + + if (connector->status =3D=3D connector_status_connected && + info->is_hdmi && info->hdmi.scdc.supported && + info->hdmi.scdc.scrambling.supported) { + drm_scdc_set_scrambling(connector, false); + drm_scdc_set_high_tmds_clock_ratio(connector, false); + } + + return hdmi->funcs->scrambler_src_disable(connector); +} +EXPORT_SYMBOL(drm_scdc_stop_scrambling); + +/** + * drm_scdc_sync_status - resync the sink-side SCDC upon reconnect + * @connector: connector + * @plugged: connector plugged status event + * @ctx: lock acquisition context + * + * When receiving hotplug disconnect/reconnect event, while the display is + * still active (CRTC enabled), the SCDC status on the sink side is reset + * and must be explicitly restored. + * + * The typical solution for this is to trigger an empty modeset in + * drm_connector_helper_funcs.detect_ctx(), which is what this helper does + * by triggering a CRTC reset on reconnection. + * + * When making use of the HDMI connector framework, this is automatically + * triggered via drm_atomic_helper_connector_hdmi_hotplug_ctx(). + * + * Returns: + * Zero on success, an error code otherwise, including -EDEADLOCK. + */ +int drm_scdc_sync_status(struct drm_connector *connector, bool plugged, + struct drm_modeset_acquire_ctx *ctx) +{ + struct drm_connector_hdmi *hdmi =3D &connector->hdmi; + + if (!hdmi->funcs) + return 0; + + if (plugged && READ_ONCE(hdmi->scrambler_enabled)) { + if (!hdmi->funcs->scrambler_src_enable || + !hdmi->funcs->scrambler_src_disable) + return 0; + + return drm_scdc_reset_crtc(connector, ctx); + } + + // TODO: Also handle HDMI 2.1 FRL link training + + return 0; +} +EXPORT_SYMBOL(drm_scdc_sync_status); diff --git a/include/drm/display/drm_scdc_helper.h b/include/drm/display/dr= m_scdc_helper.h index 34600476a1b9..5d9a37bbb362 100644 --- a/include/drm/display/drm_scdc_helper.h +++ b/include/drm/display/drm_scdc_helper.h @@ -29,6 +29,7 @@ #include =20 struct drm_connector; +struct drm_modeset_acquire_ctx; struct i2c_adapter; =20 ssize_t drm_scdc_read(struct i2c_adapter *adapter, u8 offset, void *buffer, @@ -76,5 +77,8 @@ bool drm_scdc_get_scrambling_status(struct drm_connector = *connector); =20 bool drm_scdc_set_scrambling(struct drm_connector *connector, bool enable); bool drm_scdc_set_high_tmds_clock_ratio(struct drm_connector *connector, b= ool set); - +int drm_scdc_start_scrambling(struct drm_connector *connector); +int drm_scdc_stop_scrambling(struct drm_connector *connector); +int drm_scdc_sync_status(struct drm_connector *connector, bool plugged, + struct drm_modeset_acquire_ctx *ctx); #endif --=20 2.53.0 From nobody Sun May 24 22:43:18 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6C1E33FBEC5 for ; Wed, 20 May 2026 18:38:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302318; cv=none; b=ELcE7YvVqUIP8sPV/BiTl48yjM+E5VricVH5eVQuil3fETp6DUJZC4HUs5hr/49MKTwIH0oFnxE74bnCjgoQqVMyl3KSrR8IgiTVfOu/3qP9Tp/v1yKwCTIZY+jIgYl0JXayG1hLtl1s85vCchTi//6iapuxQQDEobO30mUvbeQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302318; c=relaxed/simple; bh=PMazGqrcLk62NiMiM9e91vC9gW9B5kWfiknu5e2hMqQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nwPeL4XGvf5SJPjOtKw0ixcGPNWrhXQS1Oc2gznpW7LpmCVLhlYtBLAL8AbnhyAaEvNGtH2FP3Vu9QIeqqSvg6Ef5jIMivXRxSFOXFAyeMM/458ZqDc9+pnOwLpEK7E/x/OeooYajXA15vK9WDlKaxZkTAYlTitwbJczBexunS8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=MWk9NuHF; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="MWk9NuHF" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1779302314; bh=PMazGqrcLk62NiMiM9e91vC9gW9B5kWfiknu5e2hMqQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=MWk9NuHFft+ssCnRSNfAq9lIBXdSiTZj8eyoUn1w2i16+mCvg+qB1GdU5jg34Gak9 4Xn1HUmKXzeLkyRygE2iGwYXPCCSYG4wkLCuSD40w+aZtM+6StO/GDAhOKpKoR8NtK whN0sfmD7mMyDqIlfUQWaQKoh4xajv6w7d7AW2dmEBysqMUycGxVnHzFwEdmhVYPwp VSok+yeSBU54gG9r6Glv/wjqgkY4srQu9WS5PpvsgDm2+4KTk9le+bkSmfPhrS/EWY nqSthg2/bTB8kH+H9Ue6DGfU5b5MEc+Bi98+7BCnyfOFoWMjeZsnD3w58zOY0qep3Z rrSitDbXy4QYQ== Received: from localhost (unknown [100.64.0.241]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: cristicc) by bali.collaboradmins.com (Postfix) with ESMTPSA id C0CE517E1454; Wed, 20 May 2026 20:38:34 +0200 (CEST) From: Cristian Ciocaltea Date: Wed, 20 May 2026 21:38:16 +0300 Subject: [PATCH v6 05/22] drm/display: hdmi_state_helper: Add ctx-aware hotplug helper for SCDC sync Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260520-dw-hdmi-qp-scramb-v6-5-24b74603b782@collabora.com> References: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> In-Reply-To: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan , Luca Ceresoli , Daniel Stone 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 X-Mailer: b4 0.15.1 Introduce drm_atomic_helper_connector_hdmi_hotplug_ctx(), a variant of drm_atomic_helper_connector_hdmi_hotplug() that accepts a drm_modeset_acquire_ctx. This enables SCDC status synchronization on hotplug events, which requires lock acquisition context for performing the CRTC reset triggered by drm_scdc_sync_status(). Signed-off-by: Cristian Ciocaltea --- drivers/gpu/drm/display/drm_hdmi_state_helper.c | 36 ++++++++++++++++++++-= ---- include/drm/display/drm_hdmi_state_helper.h | 4 +++ 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/display/drm_hdmi_state_helper.c b/drivers/gpu/= drm/display/drm_hdmi_state_helper.c index 4867edbf2622..26c491047a6a 100644 --- a/drivers/gpu/drm/display/drm_hdmi_state_helper.c +++ b/drivers/gpu/drm/display/drm_hdmi_state_helper.c @@ -12,6 +12,7 @@ #include #include #include +#include =20 /** * DOC: hdmi helpers @@ -1149,18 +1150,20 @@ drm_atomic_helper_connector_hdmi_clear_audio_infofr= ame(struct drm_connector *con } EXPORT_SYMBOL(drm_atomic_helper_connector_hdmi_clear_audio_infoframe); =20 -static void +static int drm_atomic_helper_connector_hdmi_update(struct drm_connector *connector, - enum drm_connector_status status) + enum drm_connector_status status, + struct drm_modeset_acquire_ctx *ctx) { const struct drm_edid *drm_edid; + int ret =3D 0; =20 if (status =3D=3D connector_status_disconnected) { - // TODO: also handle scramber, HDMI sink disconnected. + drm_scdc_sync_status(connector, false, ctx); drm_connector_hdmi_audio_plugged_notify(connector, false); drm_edid_connector_update(connector, NULL); drm_connector_cec_phys_addr_invalidate(connector); - return; + return 0; } =20 if (connector->hdmi.funcs->read_edid) @@ -1173,10 +1176,12 @@ drm_atomic_helper_connector_hdmi_update(struct drm_= connector *connector, drm_edid_free(drm_edid); =20 if (status =3D=3D connector_status_connected) { - // TODO: also handle scramber, HDMI sink is now connected. + ret =3D drm_scdc_sync_status(connector, true, ctx); drm_connector_hdmi_audio_plugged_notify(connector, true); drm_connector_cec_phys_addr_set(connector); } + + return ret; } =20 /** @@ -1190,10 +1195,27 @@ drm_atomic_helper_connector_hdmi_update(struct drm_= connector *connector, void drm_atomic_helper_connector_hdmi_hotplug(struct drm_connector *connec= tor, enum drm_connector_status status) { - drm_atomic_helper_connector_hdmi_update(connector, status); + drm_atomic_helper_connector_hdmi_update(connector, status, NULL); } EXPORT_SYMBOL(drm_atomic_helper_connector_hdmi_hotplug); =20 +/** + * drm_atomic_helper_connector_hdmi_hotplug_ctx - Handle the hotplug event= for the HDMI connector + * @connector: A pointer to the HDMI connector + * @status: Connection status + * @ctx: Lock acquisition context to be used for resetting CRTC + * + * This function should be called as a part of the .detect() / .detect_ctx= () + * callbacks for all status changes. + */ +int drm_atomic_helper_connector_hdmi_hotplug_ctx(struct drm_connector *con= nector, + enum drm_connector_status status, + struct drm_modeset_acquire_ctx *ctx) +{ + return drm_atomic_helper_connector_hdmi_update(connector, status, ctx); +} +EXPORT_SYMBOL(drm_atomic_helper_connector_hdmi_hotplug_ctx); + /** * drm_atomic_helper_connector_hdmi_force - HDMI Connector implementation = of the force callback * @connector: A pointer to the HDMI connector @@ -1205,6 +1227,6 @@ EXPORT_SYMBOL(drm_atomic_helper_connector_hdmi_hotplu= g); */ void drm_atomic_helper_connector_hdmi_force(struct drm_connector *connecto= r) { - drm_atomic_helper_connector_hdmi_update(connector, connector->status); + drm_atomic_helper_connector_hdmi_update(connector, connector->status, NUL= L); } EXPORT_SYMBOL(drm_atomic_helper_connector_hdmi_force); diff --git a/include/drm/display/drm_hdmi_state_helper.h b/include/drm/disp= lay/drm_hdmi_state_helper.h index 0adc30c55ec9..a572fe2bf9aa 100644 --- a/include/drm/display/drm_hdmi_state_helper.h +++ b/include/drm/display/drm_hdmi_state_helper.h @@ -7,6 +7,7 @@ struct drm_atomic_commit; struct drm_connector; struct drm_connector_state; struct drm_display_mode; +struct drm_modeset_acquire_ctx; struct hdmi_audio_infoframe; =20 enum drm_connector_status; @@ -24,6 +25,9 @@ int drm_atomic_helper_connector_hdmi_update_infoframes(st= ruct drm_connector *con struct drm_atomic_commit *state); void drm_atomic_helper_connector_hdmi_hotplug(struct drm_connector *connec= tor, enum drm_connector_status status); +int drm_atomic_helper_connector_hdmi_hotplug_ctx(struct drm_connector *con= nector, + enum drm_connector_status status, + struct drm_modeset_acquire_ctx *ctx); void drm_atomic_helper_connector_hdmi_force(struct drm_connector *connecto= r); =20 enum drm_mode_status --=20 2.53.0 From nobody Sun May 24 22:43:18 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2C8AB37DE8A for ; Wed, 20 May 2026 18:38:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302322; cv=none; b=SrE+lbzXEGerSRKbU9PAOjUfDjp0eLzxTxj0bBQVZO/A4wyAAR+ui2Qx1jMojxu0rg/aW7+Upp6N6e6zgEFzBtmmVp2YtqJrgqFt67l2HM6vceUf7LuA80lUJltjIPbosUgv6/7vwXN3Kn0lvEZBSCgkxXpjaG6lbnqBSeVpCkU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302322; c=relaxed/simple; bh=7OTwCMF8wJOc4Hjs8SJmTuTCvuPd0TbfOCgAGCzQHM4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=LAn+yYyoGt85rLY2veOHoqdy9gUIVCSP3rDasLXPIOMo+T7dY3BdTIaMNPbHWokBZ4eSmXhRM8nAKxdWvwyOoAVOYNJIzZ2i/Pi3bN1Av/zRUwVEKjzIs8XtDm6b6sTU19HgsukDsQGmjD5dcvPAmtxjfzOslnn441OxYCsDaGU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=H6vyJyDr; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="H6vyJyDr" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1779302315; bh=7OTwCMF8wJOc4Hjs8SJmTuTCvuPd0TbfOCgAGCzQHM4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=H6vyJyDrGEn7ej8lwfh6solQE+7LKI83GMwsBcmJEc0XI2SvuKtzPjAq/szGt+jAb lhJ+s5loC2TP9fbe5RvSipke1pfgJpxCy+u4gcLc52sd5EvalqzH96wyMquroTDMu8 ynXCKhxlEtA1l+I11i5albHffQ7Q9Hg3FGO0HoOl+nSRO/VMSgHjRm6osR/mnvUdAf khNhEemb11w9/IbKhsALykPAvioDMFL21EfIia48FV7rHWPssdBm/4ZcPn8OGV0qF5 8iJKQ+xKus6q0OR0exCv4CdaKuVlY6nok+j3za8xzt8qHrkGIY08/QHg47O7TQ5TGA OEYwTzZCGIaHg== Received: from localhost (unknown [100.64.0.241]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: cristicc) by bali.collaboradmins.com (Postfix) with ESMTPSA id 7EA1817E14A9; Wed, 20 May 2026 20:38:35 +0200 (CEST) From: Cristian Ciocaltea Date: Wed, 20 May 2026 21:38:17 +0300 Subject: [PATCH v6 06/22] drm/bridge: Remove redundant error check in drm_bridge_helper_reset_crtc() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260520-dw-hdmi-qp-scramb-v6-6-24b74603b782@collabora.com> References: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> In-Reply-To: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan , Luca Ceresoli , Daniel Stone 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, Dmitry Baryshkov X-Mailer: b4 0.15.1 Remove the no-op error check after drm_atomic_helper_reset_crtc() since the goto target is the immediately following label and the return value is already propagated correctly without it. Reviewed-by: Dmitry Baryshkov Signed-off-by: Cristian Ciocaltea --- drivers/gpu/drm/drm_bridge_helper.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/drivers/gpu/drm/drm_bridge_helper.c b/drivers/gpu/drm/drm_brid= ge_helper.c index 420f29cf3e54..0a3c8fee66b3 100644 --- a/drivers/gpu/drm/drm_bridge_helper.c +++ b/drivers/gpu/drm/drm_bridge_helper.c @@ -50,8 +50,6 @@ int drm_bridge_helper_reset_crtc(struct drm_bridge *bridg= e, =20 crtc =3D connector->state->crtc; ret =3D drm_atomic_helper_reset_crtc(crtc, ctx); - if (ret) - goto out; =20 out: drm_modeset_unlock(&dev->mode_config.connection_mutex); --=20 2.53.0 From nobody Sun May 24 22:43:18 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D99763FCB3D for ; Wed, 20 May 2026 18:38:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302319; cv=none; b=DyLRQ7BUY2YMn/IIwBLEhzoIYfNhdrQ7ddmOYQpr6G6zWUOwXeK2Oz2+dTNWzkn56sSalxTS4F06pCjuM0mPOcdpyC5GYep0M+Tzgxh1AhMKp4eBZ0qA9Nr7ZhIBwPUc40mqwlY5TJclMBR3+NjXF+dHwWazNS/1O/QdNKVEGTc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302319; c=relaxed/simple; bh=Vinl3H8Sv0aiM6aJ68yze1Wzhzorcj3ktQ602i1XvWM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=sohldoIQXi+hU2B8k8qjTyQ4d4jurmd8LJPMgsoPPX1iYS0I+zn7hM7y/NM5Yb4nCQd1DBs3O3somhC3CS6MNt5PbwFFd0esC+TxvKdWisSOE6xSIFfXGRIHiYuyhMrjG5V6kLtFayq18Pszukn2yc10A52JDn0xOwwjAGFxu6s= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=UTUpNffR; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="UTUpNffR" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1779302316; bh=Vinl3H8Sv0aiM6aJ68yze1Wzhzorcj3ktQ602i1XvWM=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=UTUpNffRRth/UkSEmZ/7D9lYEtMHkbsy2yZQPKxqjUR53PPmf569XB8J+D8Pzddw7 UWA7cmRSUeLQPi+nkJe1mXxZaL3j7Zp4/SCz9yINQvAn5NP7fFi+WO6arwyQbjM5/K /7r3etbd3hfzIm8lAF2NCFclMks+MtA1V5+8gZQoOJ2hABDIHwu1YRGjBgu/AbMRDi fmI9NEfKUTLunkFipC5NzvF/FvfYyOl7ct1rhm7IheDUmRhg0U7zPGnEJCALex53Ga 1NRc/sidb+/Fmnyals0eWxYR3F/Jxebp5JPd7zb6Ij67QfDo81I0QMbAf97cKR1W+j t6EDEjdZUTpYw== Received: from localhost (unknown [100.64.0.241]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: cristicc) by bali.collaboradmins.com (Postfix) with ESMTPSA id 3F6A017E0566; Wed, 20 May 2026 20:38:36 +0200 (CEST) From: Cristian Ciocaltea Date: Wed, 20 May 2026 21:38:18 +0300 Subject: [PATCH v6 07/22] drm/bridge: Add HDMI 2.0 scrambler bridge operation and callbacks Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260520-dw-hdmi-qp-scramb-v6-7-24b74603b782@collabora.com> References: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> In-Reply-To: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan , Luca Ceresoli , Daniel Stone 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 X-Mailer: b4 0.15.1 Add DRM_BRIDGE_OP_HDMI_SCRAMBLER bridge operation flag and the corresponding .hdmi_scrambler_{enable|disable}() bridge funcs callbacks. Bridge drivers set DRM_BRIDGE_OP_HDMI_SCRAMBLER to advertise that they implement source-side scrambling control, which the bridge connector layer uses to wire up the connector's scrambler callbacks. Signed-off-by: Cristian Ciocaltea --- include/drm/drm_bridge.h | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h index 4ba3a5deef9a..a0fcbbc7086e 100644 --- a/include/drm/drm_bridge.h +++ b/include/drm/drm_bridge.h @@ -667,6 +667,26 @@ struct drm_bridge_funcs { const struct drm_display_mode *mode, unsigned long long tmds_rate); =20 + /** + * @hdmi_scrambler_enable: + * + * Enable HDMI 2.0 SCDC scrambling and high TMDS clock ratio. + * + * This callback is optional but it must be implemented by bridges that + * set the DRM_BRIDGE_OP_HDMI_SCRAMBLER flag in their &drm_bridge->ops. + */ + int (*hdmi_scrambler_enable)(struct drm_bridge *bridge); + + /** + * @hdmi_scrambler_disable: + * + * Disable HDMI 2.0 SCDC scrambling and high TMDS clock ratio. + * + * This callback is optional but it must be implemented by bridges that + * set the DRM_BRIDGE_OP_HDMI_SCRAMBLER flag in their &drm_bridge->ops. + */ + int (*hdmi_scrambler_disable)(struct drm_bridge *bridge); + /** * @hdmi_clear_avi_infoframe: * @@ -1092,6 +1112,12 @@ enum drm_bridge_ops { * &drm_bridge_funcs->hdmi_clear_spd_infoframe callbacks. */ DRM_BRIDGE_OP_HDMI_SPD_INFOFRAME =3D BIT(10), + /** + * @DRM_BRIDGE_OP_HDMI_SCRAMBLER: The bridge supports + * &drm_bridge_funcs->hdmi_scrambler_enable and + * &drm_bridge_funcs->hdmi_scrambler_disable callbacks. + */ + DRM_BRIDGE_OP_HDMI_SCRAMBLER =3D BIT(11), }; =20 /** --=20 2.53.0 From nobody Sun May 24 22:43:18 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9D4CA3FE352 for ; Wed, 20 May 2026 18:38:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302320; cv=none; b=e/orN12r854scYmde9RXMPlrPqG5tnSldqASTpI7ReJEZx5pvARBDfoIeCm7yICpP2ZxriawoFInMKH61iWoW9CqW086ZCCQi9TvXT/SZM2FpwHR7vfvOmhDIXQdU1fH1UM068N2qLppPOxwVnwbbaAQvIpIpLmM9pjv/6IyaWw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302320; c=relaxed/simple; bh=I75alVCzL+d/hS3YS0owCJG52cuegNBs+fRZr48DQtw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=snCO4USeQs7+3NU3klqlVYSkEcaIxXV1PMVl+Nig3QvdR61lnKkcXC2y/jSgbshhV/TOb+Z0wn87lb6g7xrkNoNdNW3zr2acSoTamCp8VBV/RPQcABx1f3vHjStzp0/Y6Sk/nYVwk7TGyRpjymTgvsijXrEPZ8WCHAqoy1gUDtE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=YfDriczw; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="YfDriczw" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1779302317; bh=I75alVCzL+d/hS3YS0owCJG52cuegNBs+fRZr48DQtw=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=YfDriczwgHNkS1mWBe8/3Yf3hYB4y5inf76iScPfqHOQ8Vl+9fN+ILRLSUC5B4xeb OoojZ+1qC/JwYqIscYWFniE86w1wNKcw2URLjgUIeA7ngW//jp2WBIsB1UPFXmq189 +HWGbxzHX9m5hdjonahPT6LWRmF68dZh1pTdzLiS+cZguxd0DiKvR9ZUedHkbN77Hn 0GFDiDgxv//Qw4br4JQxtvpKWCQH8RTQYuM1nGRoOnbnq6eYQD4H/4N74/qz3hGXCt MrwlSOQeWwBVB+DbDIUN4EAPGxVSg0SVzK7K6dyvIYrrMSPSFZ/hXlR8tnCwPZQert Y36pd/T+0wy0A== Received: from localhost (unknown [100.64.0.241]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: cristicc) by bali.collaboradmins.com (Postfix) with ESMTPSA id 00A7817E1412; Wed, 20 May 2026 20:38:37 +0200 (CEST) From: Cristian Ciocaltea Date: Wed, 20 May 2026 21:38:19 +0300 Subject: [PATCH v6 08/22] drm/display: bridge_connector: Use cached connector status in .get_modes() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260520-dw-hdmi-qp-scramb-v6-8-24b74603b782@collabora.com> References: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> In-Reply-To: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan , Luca Ceresoli , Daniel Stone 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, Dmitry Baryshkov X-Mailer: b4 0.15.1 Replace the active drm_bridge_connector_detect() call in get_modes() with a read of the already-cached connector->status. The .get_modes() callback is only invoked from drm_helper_probe_single_connector_modes(), which has already retrieved the connector status. Calling detect again is redundant and triggers a duplicate hotplug event. This is also a prerequisite for switching to the .detect_ctx() hook, which requires a drm_modeset_acquire_ctx not available in the .get_modes() path. Reviewed-by: Dmitry Baryshkov Signed-off-by: Cristian Ciocaltea --- drivers/gpu/drm/display/drm_bridge_connector.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/drivers/gpu/drm/display/drm_bridge_connector.c b/drivers/gpu/d= rm/display/drm_bridge_connector.c index 649969fca141..b69785eb49e2 100644 --- a/drivers/gpu/drm/display/drm_bridge_connector.c +++ b/drivers/gpu/drm/display/drm_bridge_connector.c @@ -294,12 +294,10 @@ static const struct drm_connector_funcs drm_bridge_co= nnector_funcs =3D { static int drm_bridge_connector_get_modes_edid(struct drm_connector *conne= ctor, struct drm_bridge *bridge) { - enum drm_connector_status status; const struct drm_edid *drm_edid; int n; =20 - status =3D drm_bridge_connector_detect(connector, false); - if (status !=3D connector_status_connected) + if (connector->status !=3D connector_status_connected) goto no_edid; =20 drm_edid =3D drm_bridge_edid_read(bridge, connector); --=20 2.53.0 From nobody Sun May 24 22:43:18 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8899C3FE663 for ; Wed, 20 May 2026 18:38:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302321; cv=none; b=mfIM8nhJBI2x8yUVMHD7qaCohAPCgJY4xx0kow1FoDQNMHBonYn/fTxmwEa1LAAHGc6LLgsUdKill5cyXIvtkw2NMuc6QSVAAixy32SYXat3WJ0cCFd9KMt1mY9wltM8l19MyI+vbGDMHOLMVckJIYD79rg39EdTsPrFn9bWajE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302321; c=relaxed/simple; bh=6Efa10mhYY74QgNr/e6CEThORVt8xA18BjD8AhQSdBU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=HwEJWYMXTkjvvEc2oDK/ewGagwynkM+fzHQk/AcVOpg0rmAQ6xyesxKSajOUYRUCyaxO+xV71Y4eAklb/2SBwYabiII+2pLS3I+ZFufh45cMJNiVNS1Q/jH7VsaJoOYqOTl4VXju0f830np8gri02Y/eBr71uiVkl01G/7ndNfw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=G1xqVO9u; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="G1xqVO9u" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1779302317; bh=6Efa10mhYY74QgNr/e6CEThORVt8xA18BjD8AhQSdBU=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=G1xqVO9uMzbsIYCYRLUVQBc34SOwPceRSGP1U7zpkcCXhpAtHC8W5N+wWxUfRX/kO tX20jnbJUr7zon5Phv9S3cA6tzj9Wm6IjiaK2svZUyctmdX/IGK+iceWSYLa/O2c5W NLzOetbvoMCp0J0G4juQtU8eBl4DjW9YIaMlhBNnq4D5b0lTxZ5WkA262PL5uQmdSb io5d8IO+50DFbcTtFL+fcXw3gNb76zyWnsXG2ixXxz4O3QP5Uy+EAxn3z4276HxfPg c/i88d729oe7Oifao3CaHIuSZ5esBvcZbgQxVh9C0ufq1DD0szIO4n+pWCEE1Pa73Y VGOxkW4zuoE/A== Received: from localhost (unknown [100.64.0.241]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: cristicc) by bali.collaboradmins.com (Postfix) with ESMTPSA id C110B17E1507; Wed, 20 May 2026 20:38:37 +0200 (CEST) From: Cristian Ciocaltea Date: Wed, 20 May 2026 21:38:20 +0300 Subject: [PATCH v6 09/22] drm/display: bridge_connector: Switch to .detect_ctx() connector helper Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260520-dw-hdmi-qp-scramb-v6-9-24b74603b782@collabora.com> References: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> In-Reply-To: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan , Luca Ceresoli , Daniel Stone 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, Diederik de Haas , Maud Spierings , Dmitry Baryshkov X-Mailer: b4 0.15.1 Replace the .detect() connector_funcs callback with the atomic-aware .detect_ctx() connector_helper_funcs hook. This propagates the modeset acquire context through drm_atomic_helper_connector_hdmi_hotplug_ctx() to the HDMI connector framework, enabling SCDC state recovery via CRTC reset when the sink reconnects during an active display pipeline. Tested-by: Diederik de Haas Tested-by: Maud Spierings Reviewed-by: Dmitry Baryshkov Signed-off-by: Cristian Ciocaltea --- drivers/gpu/drm/display/drm_bridge_connector.c | 74 ++++++++++++++--------= ---- 1 file changed, 40 insertions(+), 34 deletions(-) diff --git a/drivers/gpu/drm/display/drm_bridge_connector.c b/drivers/gpu/d= rm/display/drm_bridge_connector.c index b69785eb49e2..47bb0dcf509f 100644 --- a/drivers/gpu/drm/display/drm_bridge_connector.c +++ b/drivers/gpu/drm/display/drm_bridge_connector.c @@ -208,39 +208,6 @@ static void drm_bridge_connector_disable_hpd(struct dr= m_connector *connector) * Bridge Connector Functions */ =20 -static enum drm_connector_status -drm_bridge_connector_detect(struct drm_connector *connector, bool force) -{ - struct drm_bridge_connector *bridge_connector =3D - to_drm_bridge_connector(connector); - struct drm_bridge *detect =3D bridge_connector->bridge_detect; - struct drm_bridge *hdmi =3D bridge_connector->bridge_hdmi; - enum drm_connector_status status; - - if (detect) { - status =3D detect->funcs->detect(detect, connector); - - if (hdmi) - drm_atomic_helper_connector_hdmi_hotplug(connector, status); - - drm_bridge_connector_hpd_notify(connector, status); - } else { - switch (connector->connector_type) { - case DRM_MODE_CONNECTOR_DPI: - case DRM_MODE_CONNECTOR_LVDS: - case DRM_MODE_CONNECTOR_DSI: - case DRM_MODE_CONNECTOR_eDP: - status =3D connector_status_connected; - break; - default: - status =3D connector_status_unknown; - break; - } - } - - return status; -} - static void drm_bridge_connector_force(struct drm_connector *connector) { struct drm_bridge_connector *bridge_connector =3D @@ -278,7 +245,6 @@ static void drm_bridge_connector_reset(struct drm_conne= ctor *connector) =20 static const struct drm_connector_funcs drm_bridge_connector_funcs =3D { .reset =3D drm_bridge_connector_reset, - .detect =3D drm_bridge_connector_detect, .force =3D drm_bridge_connector_force, .fill_modes =3D drm_helper_probe_single_connector_modes, .atomic_duplicate_state =3D drm_atomic_helper_connector_duplicate_state, @@ -291,6 +257,45 @@ static const struct drm_connector_funcs drm_bridge_con= nector_funcs =3D { * Bridge Connector Helper Functions */ =20 +static int drm_bridge_connector_detect_ctx(struct drm_connector *connector, + struct drm_modeset_acquire_ctx *ctx, + bool force) +{ + struct drm_bridge_connector *bridge_connector =3D + to_drm_bridge_connector(connector); + struct drm_bridge *detect =3D bridge_connector->bridge_detect; + struct drm_bridge *hdmi =3D bridge_connector->bridge_hdmi; + enum drm_connector_status status; + int ret; + + if (detect) { + status =3D detect->funcs->detect(detect, connector); + + if (hdmi) { + ret =3D drm_atomic_helper_connector_hdmi_hotplug_ctx(connector, + status, ctx); + if (ret =3D=3D -EDEADLOCK) + return ret; + } + + drm_bridge_connector_hpd_notify(connector, status); + } else { + switch (connector->connector_type) { + case DRM_MODE_CONNECTOR_DPI: + case DRM_MODE_CONNECTOR_LVDS: + case DRM_MODE_CONNECTOR_DSI: + case DRM_MODE_CONNECTOR_eDP: + status =3D connector_status_connected; + break; + default: + status =3D connector_status_unknown; + break; + } + } + + return status; +} + static int drm_bridge_connector_get_modes_edid(struct drm_connector *conne= ctor, struct drm_bridge *bridge) { @@ -382,6 +387,7 @@ static int drm_bridge_connector_atomic_check(struct drm= _connector *connector, =20 static const struct drm_connector_helper_funcs drm_bridge_connector_helper= _funcs =3D { .get_modes =3D drm_bridge_connector_get_modes, + .detect_ctx =3D drm_bridge_connector_detect_ctx, .mode_valid =3D drm_bridge_connector_mode_valid, .enable_hpd =3D drm_bridge_connector_enable_hpd, .disable_hpd =3D drm_bridge_connector_disable_hpd, --=20 2.53.0 From nobody Sun May 24 22:43:18 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6DD703FFAA0 for ; Wed, 20 May 2026 18:38:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302322; cv=none; b=GZ2FUGgcHZkdHVUDbU+WuKs4EL54nllzW6qQK2OeYRvZoR1ED91JfWN9lw+y7YPahiKmBESLF0Q/YVca7dxW0rpkmXR0wgPp4ScOpImt65lG2HfcxDs/29GlEhF49gi0t0vmrSMaXvDP6VFoFObdJA/1WpYR+fZhSNHKCf840pc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302322; c=relaxed/simple; bh=d+1562epby5HWJPwkuWjca1WYAynglwGoda/Ep4Urtk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=cKJFu1lQcQyI86y78kD+T1gJS8Vaq31mx09KVDBE3FAgJq3M6EVuPII4tKGrQ3xS0nByw1kbmLNxQdt7+fmRd/6mHTl4EF96ZZOpTJFprXWHy7zqRPkbgWlVh8AINA7qIABGhpvfPHEVAWypmH49jm5blOedvSKtWJmZXoXZHO4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=SRzq04vZ; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="SRzq04vZ" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1779302318; bh=d+1562epby5HWJPwkuWjca1WYAynglwGoda/Ep4Urtk=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=SRzq04vZYG184OtEQIXxhhw9w2QmxCqNCGD6shcT/HwZkDx+Swsq7ZSUIlEg2mtnw ageVzXndWA3WhaeCsGYVZPRs3T8oAaRotslGNALtNKW1qvRK/hT7935BPQ9yMvuLWq wLJHP7/od/JCTu19d37aA9nTw0iE7WUOcp5Kvdp7fCpHa0xmnpWKnP3aJbRYvlwciM LvED0ekkdroFFpI7iMGqxxYpSPvN2FOItWFTzDYPd4je6TAwkYPS/DEJxRdPI80n9+ F+7Y/sRiAt4jkNqKkdORnDrvJTKMBbgBK62b5TxcheIZYmhcTNfLUCpgJTb3LOQYJt XkZq3+/RKaL6g== Received: from localhost (unknown [100.64.0.241]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: cristicc) by bali.collaboradmins.com (Postfix) with ESMTPSA id 80D6F17E1513; Wed, 20 May 2026 20:38:38 +0200 (CEST) From: Cristian Ciocaltea Date: Wed, 20 May 2026 21:38:21 +0300 Subject: [PATCH v6 10/22] drm/display: bridge_connector: Wire up HDMI 2.0 scrambler callbacks Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260520-dw-hdmi-qp-scramb-v6-10-24b74603b782@collabora.com> References: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> In-Reply-To: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan , Luca Ceresoli , Daniel Stone 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 X-Mailer: b4 0.15.1 Connect the bridge connector's .scrambler_src_{enable|disable}() callbacks to the underlying bridge's .hdmi_scrambler_{enable|disable}() funcs when DRM_BRIDGE_OP_HDMI_SCRAMBLER is advertised. This completes the bridge connector plumbing so that the SCDC scrambling helpers can control source-side scrambling through the bridge chain. Signed-off-by: Cristian Ciocaltea --- drivers/gpu/drm/display/drm_bridge_connector.c | 40 ++++++++++++++++++++++= +++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/display/drm_bridge_connector.c b/drivers/gpu/d= rm/display/drm_bridge_connector.c index 47bb0dcf509f..6f65733b7dd9 100644 --- a/drivers/gpu/drm/display/drm_bridge_connector.c +++ b/drivers/gpu/drm/display/drm_bridge_connector.c @@ -548,6 +548,32 @@ static int drm_bridge_connector_write_spd_infoframe(st= ruct drm_connector *connec return bridge->funcs->hdmi_write_spd_infoframe(bridge, buffer, len); } =20 +static int drm_bridge_connector_scrambler_src_enable(struct drm_connector = *connector) +{ + struct drm_bridge_connector *bridge_connector =3D + to_drm_bridge_connector(connector); + struct drm_bridge *bridge; + + bridge =3D bridge_connector->bridge_hdmi; + if (!bridge) + return -EINVAL; + + return bridge->funcs->hdmi_scrambler_enable(bridge); +} + +static int drm_bridge_connector_scrambler_src_disable(struct drm_connector= *connector) +{ + struct drm_bridge_connector *bridge_connector =3D + to_drm_bridge_connector(connector); + struct drm_bridge *bridge; + + bridge =3D bridge_connector->bridge_hdmi; + if (!bridge) + return -EINVAL; + + return bridge->funcs->hdmi_scrambler_disable(bridge); +} + static const struct drm_edid * drm_bridge_connector_read_edid(struct drm_connector *connector) { @@ -573,7 +599,7 @@ static const struct drm_connector_hdmi_funcs drm_bridge= _connector_hdmi_funcs =3D { .clear_infoframe =3D drm_bridge_connector_clear_hdmi_infoframe, .write_infoframe =3D drm_bridge_connector_write_hdmi_infoframe, }, - /* audio, hdr_drm and spd are set dynamically during init */ + /* scrambler, audio, hdr_drm and spd are set dynamically during init */ }; =20 static const struct drm_connector_infoframe_funcs drm_bridge_connector_hdm= i_audio_infoframe =3D { @@ -879,6 +905,11 @@ struct drm_connector *drm_bridge_connector_init(struct= drm_device *drm, !bridge->funcs->hdmi_clear_spd_infoframe)) return ERR_PTR(-EINVAL); =20 + if (bridge->ops & DRM_BRIDGE_OP_HDMI_SCRAMBLER && + (!bridge->funcs->hdmi_scrambler_enable || + !bridge->funcs->hdmi_scrambler_disable)) + return ERR_PTR(-EINVAL); + bridge_connector->bridge_hdmi =3D drm_bridge_get(bridge); =20 if (bridge->supported_formats) @@ -983,6 +1014,13 @@ struct drm_connector *drm_bridge_connector_init(struc= t drm_device *drm, bridge_connector->hdmi_funcs.spd =3D drm_bridge_connector_hdmi_spd_infoframe; =20 + if (bridge_connector->bridge_hdmi->ops & DRM_BRIDGE_OP_HDMI_SCRAMBLER) { + bridge_connector->hdmi_funcs.scrambler_src_enable =3D + drm_bridge_connector_scrambler_src_enable; + bridge_connector->hdmi_funcs.scrambler_src_disable =3D + drm_bridge_connector_scrambler_src_disable; + } + ret =3D drmm_connector_hdmi_init(drm, connector, bridge_connector->bridge_hdmi->vendor, bridge_connector->bridge_hdmi->product, --=20 2.53.0 From nobody Sun May 24 22:43:18 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 065A03FFAC8 for ; Wed, 20 May 2026 18:38:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302322; cv=none; b=FCoC0bvrcnIchzSW9firbLVYkqRdNttKWoPZ/v4q0ShMPQIg0cpcefp0a8gDl0kuPWq5kjEwUzMQWRTUleO1TbK8aBd1NxKOVbEjXgepuGfkFGOnLFGUBUH1GG93vKVMMKzi/9vvoZXdM0UrGaJcZIrSlyErU41j5ROr/B7b3Qg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302322; c=relaxed/simple; bh=zRAMF8LCrzPkFCNWukKT3/YcDY/hXgpwyElLxCxAEnA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Oyvqah16f+/c3aqSPGK1cCf4noKCNB11NJV48uhvggVDWkbBgh1q4a/+kPLUJJ53AFVLt3rgK5E7Ri4DThb1c3I5TjHwACckVnGMs2YlrMjCfyd2AQa+14RM8TI0ksXOnD3aSFuEhBCPN/QcKmYHe4JpMIFoRWQQPqJ1x4rAtrA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=ghOj7+Y2; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="ghOj7+Y2" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1779302319; bh=zRAMF8LCrzPkFCNWukKT3/YcDY/hXgpwyElLxCxAEnA=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=ghOj7+Y2WqaLBmb1fhjpcjGt8NbL/wiQX/eKzhq0lp7uWth+ZSGn8TeiS2UCbeHlJ o2Ck+AsfzKkzOoTwrZ9/cjdJeOML+1nm1ywKAws0L+gZ45+rQUS8KylovagRNSSwpF 9/2210zFk0lWSMPBnxlja1ETmDdt+KNQanKEcovx5VEJGHzL1tmcP3CG1Auji57Jm7 PPSbCaHj2NPXjOBqpy32KNx18+KnZ746IiI3UeACn6jC4POSISVy1OHiPBjGSlxL7b vPx0aYwh5nCrDEjG4duxwbgRs9JhZZxpGAYET2O+FjxPiHYkHkh/VZciTsJuSPQYuW jOK8O0c6P5OsA== Received: from localhost (unknown [100.64.0.241]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: cristicc) by bali.collaboradmins.com (Postfix) with ESMTPSA id 4D51D17E1523; Wed, 20 May 2026 20:38:39 +0200 (CEST) From: Cristian Ciocaltea Date: Wed, 20 May 2026 21:38:22 +0300 Subject: [PATCH v6 11/22] drm/bridge: dw-hdmi-qp: Rate limit i2c read error messages Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260520-dw-hdmi-qp-scramb-v6-11-24b74603b782@collabora.com> References: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> In-Reply-To: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan , Luca Ceresoli , Daniel Stone 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 X-Mailer: b4 0.15.1 During EDID reads, repeated i2c errors can flood the kernel log: [ 25.361716] dwhdmiqp-rockchip fde80000.hdmi: i2c read error [ 25.363376] dwhdmiqp-rockchip fde80000.hdmi: i2c read error ... [ 25.368671] dwhdmiqp-rockchip fde80000.hdmi: i2c read error [ 25.369440] dwhdmiqp-rockchip fde80000.hdmi: failed to get edid Switch to dev_err_ratelimited() in dw_hdmi_qp_i2c_read() to reduce log spam while still reporting the condition. Reviewed-by: Heiko Stuebner Signed-off-by: Cristian Ciocaltea --- drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c b/drivers/gpu/drm= /bridge/synopsys/dw-hdmi-qp.c index 0dbb12743609..59da91eca929 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c @@ -563,7 +563,7 @@ static int dw_hdmi_qp_i2c_read(struct dw_hdmi_qp *hdmi, dev_dbg_ratelimited(hdmi->dev, "i2c read timed out\n"); else - dev_err(hdmi->dev, "i2c read timed out\n"); + dev_err_ratelimited(hdmi->dev, "i2c read timed out\n"); dw_hdmi_qp_write(hdmi, 0x01, I2CM_CONTROL0); return -EAGAIN; } @@ -574,7 +574,7 @@ static int dw_hdmi_qp_i2c_read(struct dw_hdmi_qp *hdmi, dev_dbg_ratelimited(hdmi->dev, "i2c read error\n"); else - dev_err(hdmi->dev, "i2c read error\n"); + dev_err_ratelimited(hdmi->dev, "i2c read error\n"); dw_hdmi_qp_write(hdmi, 0x01, I2CM_CONTROL0); return -EIO; } --=20 2.53.0 From nobody Sun May 24 22:43:18 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 10ACB3FBEC5 for ; Wed, 20 May 2026 18:38:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302323; cv=none; b=gPaV2N4KBzd0P12eSkha2/CnTTp7mq2KeejH3y5cz8oGoc8P0qnxsvnjyhPHk2A+kWYZtZ3WJwfFb0upM0RnDVNCU5CyNHVsrpryQVSASOgif9ujC/AQeIUiVm2D4wb0mKQHeYYzcRBpSAhGYOX5F6f3vcZ+kzbsblbBpHCefCc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302323; c=relaxed/simple; bh=TwCBu/zIC/MtkR5qkQ0r8suaoCIhNg0oubAnmts1YcA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=by2cgoMAcdCFqc8gs5J8zn4LTifquw+G+ErDCSuj570JXLP7OEjXouYdrelLkpcYMRkeUcmiw5f2Bye+9Q5adRKuqsTZ0AI7KLxcC0uXgyWRw96bZKE2R1+GINf5cCxT5M9NpMRpBXCAE6CUdKFezTy8wym52zbbwVBaGLCDb70= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=EHNR9Wik; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="EHNR9Wik" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1779302320; bh=TwCBu/zIC/MtkR5qkQ0r8suaoCIhNg0oubAnmts1YcA=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=EHNR9WikfmSUvqsNEvPfIPuy8BViX3qtXCeR3SM0D3mlEd2gtLfuWIviLjGYn67uM M1HqU4o3l9cYXtzwf2Xmm0SpkZlbNec4qcnqWvIw7dvFwLeZHuVinokKx4HfuNjmCK Romg2NcICX2zOMk+LPQKygCe2wUy5IIIelJFsUDOZYRJP01bNN06Z0isvzNeqhoUS6 3CcfgDFgTatXmdYaCjnyGVre2g0h+1xTDI/+eRMM15+Wtzhf6NTzjjSf1RJbqRwD5M YI18xP0giJEEkHUAhI2CcMaxfbQod6HO6Dbjet5MSZxh3lF2TS9F43+LchiIrIbn/W R+OZDgihAvIDg== Received: from localhost (unknown [100.64.0.241]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: cristicc) by bali.collaboradmins.com (Postfix) with ESMTPSA id 1BC3217E1528; Wed, 20 May 2026 20:38:40 +0200 (CEST) From: Cristian Ciocaltea Date: Wed, 20 May 2026 21:38:23 +0300 Subject: [PATCH v6 12/22] drm/bridge: dw-hdmi-qp: Provide .{enable|disable}_hpd() PHY ops Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260520-dw-hdmi-qp-scramb-v6-12-24b74603b782@collabora.com> References: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> In-Reply-To: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan , Luca Ceresoli , Daniel Stone 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 X-Mailer: b4 0.15.1 Implement the .hpd_enable() and .hpd_disable() bridge callbacks and extend dw_hdmi_qp_phy_ops with corresponding hooks. This enables the DRM core to control when HPD interrupts are armed, which is needed to prevent premature interrupt delivery before the connector is fully initialized, and to properly quiesce HPD during suspend. Signed-off-by: Cristian Ciocaltea --- drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c | 18 ++++++++++++++++++ include/drm/bridge/dw_hdmi_qp.h | 2 ++ 2 files changed, 20 insertions(+) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c b/drivers/gpu/drm= /bridge/synopsys/dw-hdmi-qp.c index 59da91eca929..efa798aa23ac 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c @@ -1191,6 +1191,22 @@ static int dw_hdmi_qp_cec_transmit(struct drm_bridge= *bridge, u8 attempts, #define dw_hdmi_qp_cec_transmit NULL #endif /* CONFIG_DRM_DW_HDMI_QP_CEC */ =20 +static void dw_hdmi_qp_bridge_hpd_enable(struct drm_bridge *bridge) +{ + struct dw_hdmi_qp *hdmi =3D bridge->driver_private; + + if (hdmi->phy.ops->enable_hpd) + hdmi->phy.ops->enable_hpd(hdmi, hdmi->phy.data); +} + +static void dw_hdmi_qp_bridge_hpd_disable(struct drm_bridge *bridge) +{ + struct dw_hdmi_qp *hdmi =3D bridge->driver_private; + + if (hdmi->phy.ops->disable_hpd) + hdmi->phy.ops->disable_hpd(hdmi, hdmi->phy.data); +} + static const struct drm_bridge_funcs dw_hdmi_qp_bridge_funcs =3D { .atomic_duplicate_state =3D drm_atomic_helper_bridge_duplicate_state, .atomic_destroy_state =3D drm_atomic_helper_bridge_destroy_state, @@ -1198,6 +1214,8 @@ static const struct drm_bridge_funcs dw_hdmi_qp_bridg= e_funcs =3D { .atomic_enable =3D dw_hdmi_qp_bridge_atomic_enable, .atomic_disable =3D dw_hdmi_qp_bridge_atomic_disable, .detect =3D dw_hdmi_qp_bridge_detect, + .hpd_enable =3D dw_hdmi_qp_bridge_hpd_enable, + .hpd_disable =3D dw_hdmi_qp_bridge_hpd_disable, .edid_read =3D dw_hdmi_qp_bridge_edid_read, .hdmi_tmds_char_rate_valid =3D dw_hdmi_qp_bridge_tmds_char_rate_valid, .hdmi_clear_avi_infoframe =3D dw_hdmi_qp_bridge_clear_avi_infoframe, diff --git a/include/drm/bridge/dw_hdmi_qp.h b/include/drm/bridge/dw_hdmi_q= p.h index 6ea9c561cfef..b80fceffc315 100644 --- a/include/drm/bridge/dw_hdmi_qp.h +++ b/include/drm/bridge/dw_hdmi_qp.h @@ -17,6 +17,8 @@ struct dw_hdmi_qp_phy_ops { void (*disable)(struct dw_hdmi_qp *hdmi, void *data); enum drm_connector_status (*read_hpd)(struct dw_hdmi_qp *hdmi, void *data= ); void (*setup_hpd)(struct dw_hdmi_qp *hdmi, void *data); + void (*enable_hpd)(struct dw_hdmi_qp *hdmi, void *data); + void (*disable_hpd)(struct dw_hdmi_qp *hdmi, void *data); }; =20 struct dw_hdmi_qp_plat_data { --=20 2.53.0 From nobody Sun May 24 22:43:18 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8590F3FFAB6 for ; Wed, 20 May 2026 18:38:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302324; cv=none; b=rO6YZqVksoi3c+prjGtxChPzVJv4Og4dyGPJJ5Ll0OeRBjfKxkeLlLeriyvjyHeV8mOL6ylVabiv49X3GThG3ZJjn8qviWg9hKC223BhgUKYin2sea54kWRFQYyRKqPMOpJCshEnz+rfMLfL5CS8kqhWK9J0fDuaYspuPOT9jd4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302324; c=relaxed/simple; bh=+AlUlXYPuD4QBdDr6IWTz1ePLPkqbWMlTfmCOUtJT1M=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=UrLohTWNgdA4B4ndRAqPHA9m4aD6tdCHPv4vAgrYKP2qtkA8WPeF7dZWrlHLSiUmyJuprPdAm3YSLPHV1lokPAhMjiP5Plmgu1d95gFquaG85fcw5wBDRjd0BVeGcMwLKmpzPIcxiO/vAokhL0FtgHgGaKpm797LxroOc313ww0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=IPFsBvJJ; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="IPFsBvJJ" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1779302321; bh=+AlUlXYPuD4QBdDr6IWTz1ePLPkqbWMlTfmCOUtJT1M=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=IPFsBvJJl7aKTEnylHpjaHos2kzCfeiNEdPFlmb24u8JKcbvRbmxnMrSoRyDbef4S YcegJcExoXy1F1oTfTLi9S7np+xiYnmmE5UVghfkHvOIFttLZ9pnT39dcsdtOwsVBw bop3p4bx8zBKHmwhFI7uCL8gtRGU9dlCMsLS7Baxjw+8EqYfVkI8217TP0C9gFJPIX K/4g/Vy+8H5oYlMMmy/p8qJa21UnUD8SLSBWwTPuXaHzj8LyGd9iK17ttve5ll9gfi jtV76PCZiOfq/ql7cbjf0+96bHX8HmdTyspzCVqfL3su/gPDmaiU1CAMlclKk2z+uw urQYlDyX8ki9A== Received: from localhost (unknown [100.64.0.241]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: cristicc) by bali.collaboradmins.com (Postfix) with ESMTPSA id D261E17E1534; Wed, 20 May 2026 20:38:40 +0200 (CEST) From: Cristian Ciocaltea Date: Wed, 20 May 2026 21:38:24 +0300 Subject: [PATCH v6 13/22] drm/bridge: dw-hdmi-qp: Add HDMI 2.0 SCDC scrambling support` Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260520-dw-hdmi-qp-scramb-v6-13-24b74603b782@collabora.com> References: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> In-Reply-To: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan , Luca Ceresoli , Daniel Stone 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, Diederik de Haas , Maud Spierings X-Mailer: b4 0.15.1 Enable HDMI 2.0 display modes (e.g. 4K@60Hz) by implementing SCDC scrambling and high TMDS clock ratio management for TMDS character rates exceeding the 340 MHz HDMI 1.4b limit. Reject modes requiring TMDS rates above 600 MHz since those require HDMI 2.1 FRL which is not yet supported. In no_hpd configurations, further restrict to 340 MHz because SCDC requires a connected sink. Tested-by: Diederik de Haas Tested-by: Maud Spierings Acked-by: Heiko Stuebner Signed-off-by: Cristian Ciocaltea --- drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c | 76 ++++++++++++++++++++----= ---- 1 file changed, 56 insertions(+), 20 deletions(-) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c b/drivers/gpu/drm= /bridge/synopsys/dw-hdmi-qp.c index efa798aa23ac..001916a98da8 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c @@ -2,6 +2,7 @@ /* * Copyright (c) 2021-2022 Rockchip Electronics Co., Ltd. * Copyright (c) 2024 Collabora Ltd. + * Copyright (c) 2025 Amazon.com, Inc. or its affiliates. * * Author: Algea Cao * Author: Cristian Ciocaltea @@ -15,12 +16,12 @@ #include #include #include -#include =20 #include #include #include #include +#include #include #include #include @@ -39,8 +40,7 @@ #define DDC_SEGMENT_ADDR 0x30 =20 #define HDMI14_MAX_TMDSCLK 340000000 - -#define SCRAMB_POLL_DELAY_MS 3000 +#define HDMI20_MAX_TMDSRATE 600000000 =20 /* * Unless otherwise noted, entries in this table are 100% optimization. @@ -164,6 +164,7 @@ struct dw_hdmi_qp { } phy; =20 unsigned long ref_clk_rate; + struct drm_connector *curr_conn; struct regmap *regm; int main_irq; =20 @@ -754,26 +755,35 @@ static void dw_hdmi_qp_bridge_atomic_enable(struct dr= m_bridge *bridge, { struct dw_hdmi_qp *hdmi =3D bridge->driver_private; struct drm_connector_state *conn_state; - struct drm_connector *connector; unsigned int op_mode; + int ret; =20 - connector =3D drm_atomic_get_new_connector_for_encoder(state, bridge->enc= oder); - if (WARN_ON(!connector)) + hdmi->curr_conn =3D drm_atomic_get_new_connector_for_encoder(state, + bridge->encoder); + if (WARN_ON(!hdmi->curr_conn)) return; =20 - conn_state =3D drm_atomic_get_new_connector_state(state, connector); + conn_state =3D drm_atomic_get_new_connector_state(state, hdmi->curr_conn); if (WARN_ON(!conn_state)) return; =20 - if (connector->display_info.is_hdmi) { - dev_dbg(hdmi->dev, "%s mode=3DHDMI %s rate=3D%llu bpc=3D%u\n", __func__, - drm_hdmi_connector_get_output_format_name(conn_state->hdmi.output_forma= t), - conn_state->hdmi.tmds_char_rate, conn_state->hdmi.output_bpc); + if (hdmi->curr_conn->display_info.is_hdmi) { op_mode =3D 0; hdmi->tmds_char_rate =3D conn_state->hdmi.tmds_char_rate; + + if (hdmi->tmds_char_rate > HDMI14_MAX_TMDSCLK) { + ret =3D drm_scdc_start_scrambling(hdmi->curr_conn); + if (ret) + dev_warn(hdmi->dev, "Failed to setup SCDC: %d\n", ret); + } + + dev_dbg(hdmi->dev, "%s mode=3DHDMI %s rate=3D%llu bpc=3D%u scramb=3D%d\n= ", __func__, + drm_hdmi_connector_get_output_format_name(conn_state->hdmi.output_forma= t), + conn_state->hdmi.tmds_char_rate, conn_state->hdmi.output_bpc, + hdmi->curr_conn->hdmi.scrambler_enabled); } else { - dev_dbg(hdmi->dev, "%s mode=3DDVI\n", __func__); op_mode =3D OPMODE_DVI; + dev_dbg(hdmi->dev, "%s mode=3DDVI\n", __func__); } =20 hdmi->phy.ops->init(hdmi, hdmi->phy.data); @@ -781,7 +791,7 @@ static void dw_hdmi_qp_bridge_atomic_enable(struct drm_= bridge *bridge, dw_hdmi_qp_mod(hdmi, HDCP2_BYPASS, HDCP2_BYPASS, HDCP2LOGIC_CONFIG0); dw_hdmi_qp_mod(hdmi, op_mode, OPMODE_DVI, LINK_CONFIG0); =20 - drm_atomic_helper_connector_hdmi_update_infoframes(connector, state); + drm_atomic_helper_connector_hdmi_update_infoframes(hdmi->curr_conn, state= ); } =20 static void dw_hdmi_qp_bridge_atomic_disable(struct drm_bridge *bridge, @@ -791,6 +801,9 @@ static void dw_hdmi_qp_bridge_atomic_disable(struct drm= _bridge *bridge, =20 hdmi->tmds_char_rate =3D 0; =20 + drm_scdc_stop_scrambling(hdmi->curr_conn); + + hdmi->curr_conn =3D NULL; hdmi->phy.ops->disable(hdmi, hdmi->phy.data); } =20 @@ -832,12 +845,12 @@ dw_hdmi_qp_bridge_tmds_char_rate_valid(const struct d= rm_bridge *bridge, { struct dw_hdmi_qp *hdmi =3D bridge->driver_private; =20 - /* - * TODO: when hdmi->no_hpd is 1 we must not support modes that - * require scrambling, including every mode with a clock above - * HDMI14_MAX_TMDSCLK. - */ - if (rate > HDMI14_MAX_TMDSCLK) { + if (hdmi->no_hpd && rate > HDMI14_MAX_TMDSCLK) { + dev_dbg(hdmi->dev, "Unsupported TMDS char rate in no_hpd mode: %lld\n", = rate); + return MODE_CLOCK_HIGH; + } + + if (rate > HDMI20_MAX_TMDSRATE) { dev_dbg(hdmi->dev, "Unsupported TMDS char rate: %lld\n", rate); return MODE_CLOCK_HIGH; } @@ -845,6 +858,26 @@ dw_hdmi_qp_bridge_tmds_char_rate_valid(const struct dr= m_bridge *bridge, return MODE_OK; } =20 +static int dw_hdmi_qp_bridge_scrambler_enable(struct drm_bridge *bridge) +{ + struct dw_hdmi_qp *hdmi =3D bridge->driver_private; + + dw_hdmi_qp_write(hdmi, 1, SCRAMB_CONFIG0); + dev_dbg(hdmi->dev, "scrambler enabled\n"); + + return 0; +} + +static int dw_hdmi_qp_bridge_scrambler_disable(struct drm_bridge *bridge) +{ + struct dw_hdmi_qp *hdmi =3D bridge->driver_private; + + dw_hdmi_qp_write(hdmi, 0, SCRAMB_CONFIG0); + dev_dbg(hdmi->dev, "scrambler disabled\n"); + + return 0; +} + static int dw_hdmi_qp_bridge_clear_avi_infoframe(struct drm_bridge *bridge) { struct dw_hdmi_qp *hdmi =3D bridge->driver_private; @@ -1218,6 +1251,8 @@ static const struct drm_bridge_funcs dw_hdmi_qp_bridg= e_funcs =3D { .hpd_disable =3D dw_hdmi_qp_bridge_hpd_disable, .edid_read =3D dw_hdmi_qp_bridge_edid_read, .hdmi_tmds_char_rate_valid =3D dw_hdmi_qp_bridge_tmds_char_rate_valid, + .hdmi_scrambler_enable =3D dw_hdmi_qp_bridge_scrambler_enable, + .hdmi_scrambler_disable =3D dw_hdmi_qp_bridge_scrambler_disable, .hdmi_clear_avi_infoframe =3D dw_hdmi_qp_bridge_clear_avi_infoframe, .hdmi_write_avi_infoframe =3D dw_hdmi_qp_bridge_write_avi_infoframe, .hdmi_clear_hdmi_infoframe =3D dw_hdmi_qp_bridge_clear_hdmi_infoframe, @@ -1344,7 +1379,8 @@ struct dw_hdmi_qp *dw_hdmi_qp_bind(struct platform_de= vice *pdev, DRM_BRIDGE_OP_HDMI | DRM_BRIDGE_OP_HDMI_AUDIO | DRM_BRIDGE_OP_HDMI_HDR_DRM_INFOFRAME | - DRM_BRIDGE_OP_HDMI_SPD_INFOFRAME; + DRM_BRIDGE_OP_HDMI_SPD_INFOFRAME | + DRM_BRIDGE_OP_HDMI_SCRAMBLER; if (!hdmi->no_hpd) hdmi->bridge.ops |=3D DRM_BRIDGE_OP_HPD; hdmi->bridge.of_node =3D pdev->dev.of_node; --=20 2.53.0 From nobody Sun May 24 22:43:18 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 45F9B401A15 for ; Wed, 20 May 2026 18:38:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302325; cv=none; b=UvYnxtlf/lRQOE4syke+Hj+qM2e+0hmp1iYUY2UO9+Nnixio/Fw75dqXu5yvocjE0XQuC+vjf3JpYyeNkBPUHvd2VjHgTETJjaqo2sPjHXAottO7oJbozxib9YyAOk5L9p4ByxP9hy5d/wxTXwrwuE/d5yrcghm6cfahtzyMw5Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302325; c=relaxed/simple; bh=PEemA0WqVIoGoj8101WfnirTaDx5o3iLNMAMLvYhVdM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=eUsMw09LpaPTMrIQEoEs5etqdCo131cu8iFVRjB0D/04nyJDzNpp4/LHjqt0Vt8/0W8HnRYKh+fsGNgdkMoXFCSElKzVdQRj3D1DllzCAm51vtYJwq5TIu/lAUCdoOgdlfOpUeQHaLoJgybMskaSSHgqFbknuN1ojpSJW/1iAqQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=bOTrab0t; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="bOTrab0t" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1779302321; bh=PEemA0WqVIoGoj8101WfnirTaDx5o3iLNMAMLvYhVdM=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=bOTrab0tw2qVYqDV74j15s/lk/v+liWC4KXy0cSJGeOruqzoGD3+tZpZay/2FK/sZ 38O0BvNQOI1pZkXywV2Wczu1pIaE2MXUVHOspfvmEv/gorJMtKKXFjKQRpWdZSlv+/ 58M8pHWUpkdKNWandprIxZxRv2ZL2EtgHapaYoIpQQkICZfufGY3La1nj7JVfsHCbT GiZke9Ytlxxw/PjY1HbkWQtpSsCXOVxE1aWsZrbahkvOzfAmvv8wBztsYvsiR+TYY0 vEk31trLsio6cPBYCIQTacQyL/5jfwmG6/1kORYdBpkeahbx+cNX0wRZ0NggAJyuLB mYCRXP6UxsGdA== Received: from localhost (unknown [100.64.0.241]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: cristicc) by bali.collaboradmins.com (Postfix) with ESMTPSA id 97C7B17E1544; Wed, 20 May 2026 20:38:41 +0200 (CEST) From: Cristian Ciocaltea Date: Wed, 20 May 2026 21:38:25 +0300 Subject: [PATCH v6 14/22] drm/bridge: dw-hdmi-qp: Provide dw_hdmi_qp_hpd_notify() helper Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260520-dw-hdmi-qp-scramb-v6-14-24b74603b782@collabora.com> References: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> In-Reply-To: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan , Luca Ceresoli , Daniel Stone 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 X-Mailer: b4 0.15.1 Export dw_hdmi_qp_hpd_notify() for platform drivers to report hot-plug detection events. Unlike drm_helper_hpd_irq_event() which polls all connectors, this helper targets only the affected connector and ensures .detect_ctx() is invoked on reconnection events to trigger SCDC state recovery. Signed-off-by: Cristian Ciocaltea --- drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c | 31 ++++++++++++++++++++++++= ++++ include/drm/bridge/dw_hdmi_qp.h | 1 + 2 files changed, 32 insertions(+) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c b/drivers/gpu/drm= /bridge/synopsys/dw-hdmi-qp.c index 001916a98da8..ed0c68d6c6fd 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c @@ -29,6 +29,7 @@ #include #include #include +#include =20 #include =20 @@ -1431,6 +1432,36 @@ struct dw_hdmi_qp *dw_hdmi_qp_bind(struct platform_d= evice *pdev, } EXPORT_SYMBOL_GPL(dw_hdmi_qp_bind); =20 +/** + * dw_hdmi_qp_hpd_notify() - Notify a hot-plug detection event + * @hdmi: pointer to the DW HDMI QP controller + * + * Platform drivers should call this from their HPD interrupt handler + * or work function to notify the bridge of a connection status change. + * The bridge's .read_hpd() phy_ops callback is used to read the current + * connection status. + */ +void dw_hdmi_qp_hpd_notify(struct dw_hdmi_qp *hdmi) +{ + enum drm_connector_status status; + + status =3D hdmi->phy.ops->read_hpd(hdmi, hdmi->phy.data); + dev_dbg(hdmi->dev, "%s status=3D%d\n", __func__, status); + + /* + * When the display pipeline has been already active, switch to + * drm_connector_helper_hpd_irq_event() to ensure .detect_ctx() + * gets invoked, i.e. via drm_helper_probe_detect(), because + * drm_bridge_hpd_notify() defers to a delayed hotplug path in + * this case. + */ + if (hdmi->curr_conn && status =3D=3D connector_status_connected) + drm_connector_helper_hpd_irq_event(hdmi->curr_conn); + else + drm_bridge_hpd_notify(&hdmi->bridge, status); +} +EXPORT_SYMBOL_GPL(dw_hdmi_qp_hpd_notify); + void dw_hdmi_qp_suspend(struct device *dev, struct dw_hdmi_qp *hdmi) { disable_irq(hdmi->main_irq); diff --git a/include/drm/bridge/dw_hdmi_qp.h b/include/drm/bridge/dw_hdmi_q= p.h index b80fceffc315..b4fb1c578a5b 100644 --- a/include/drm/bridge/dw_hdmi_qp.h +++ b/include/drm/bridge/dw_hdmi_qp.h @@ -36,6 +36,7 @@ struct dw_hdmi_qp_plat_data { struct dw_hdmi_qp *dw_hdmi_qp_bind(struct platform_device *pdev, struct drm_encoder *encoder, const struct dw_hdmi_qp_plat_data *plat_data); +void dw_hdmi_qp_hpd_notify(struct dw_hdmi_qp *hdmi); void dw_hdmi_qp_suspend(struct device *dev, struct dw_hdmi_qp *hdmi); void dw_hdmi_qp_resume(struct device *dev, struct dw_hdmi_qp *hdmi); #endif /* __DW_HDMI_QP__ */ --=20 2.53.0 From nobody Sun May 24 22:43:18 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E3E1E402447 for ; Wed, 20 May 2026 18:38:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302325; cv=none; b=lzs+++oZ4IfPgOf5yO3XQbJB/mVoGa0lPtf5mdhF/upJlWrZ5VmdbsvXFgSbsyUMjCDPcBdcjzCEZMNBLMWORKgwSX9FoF+U26x6CQ3Uycp2hWUL7nP97YnUZ1V/1DK/STssOx0SyOYv/+Uskfz4HCK2L4JZIAZBaKlgUfvcAhI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302325; c=relaxed/simple; bh=uZe9IQRi0ANcc0QeZ98Gz54zfT2EANyU1q5JBI5gvwg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DW8TC+/WH3jQwWrxVdyyKoL8phd1WbXu4NX6gLfPIzV2vmUb4In5n7lzeLFB4Fmxf8CyuTSepQyjcMtM7oUvz9bs7l5q6rV6EqxA7ZR1ifKhAEplTKXzmKnhI0RWU4mbWCPX/Pg/ye/jQn7typ0PJe8APJtYF72DyvhCLnWdPZU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=bY2quIi/; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="bY2quIi/" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1779302322; bh=uZe9IQRi0ANcc0QeZ98Gz54zfT2EANyU1q5JBI5gvwg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=bY2quIi/5Gcb3Oxmc+j6AmD4ej3uoYcgYMaTb3f3seeegCeKjdXuiwmnBHBi27ZyA /S+V03VxcDdVRz+MjRmCTf+4Lqc/JpopsQq3hN0EvrvtyHouAIJ9xpw5r0JM/5qCdl DxykHGgbelkX6O6G1DJdSU7VXQ9V3R/jHYRwm+JUCsAzDJN3jnpzPJdYVPZ7mfz/bY UFFQeNE1svC14eoCTobP7T4Or8kCxc3Dc/x5cxYIkhNj/zIspZLyFCjAlLnzZtVDiT fQS94XTSRCNfWVtxvI67ZDxIhgg8KLxNNSHsp/d9SleEVlt2LO9UDHWiSz98ktVyjd bYypUeDElbyng== Received: from localhost (unknown [100.64.0.241]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: cristicc) by bali.collaboradmins.com (Postfix) with ESMTPSA id 5851917E1553; Wed, 20 May 2026 20:38:42 +0200 (CEST) From: Cristian Ciocaltea Date: Wed, 20 May 2026 21:38:26 +0300 Subject: [PATCH v6 15/22] drm/rockchip: dw_hdmi_qp: Add missing newlines in dev_err_probe() messages Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260520-dw-hdmi-qp-scramb-v6-15-24b74603b782@collabora.com> References: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> In-Reply-To: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan , Luca Ceresoli , Daniel Stone 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 X-Mailer: b4 0.15.1 Add the missing trailing newlines to a couple of dev_err_probe() calls in dw_hdmi_qp_rockchip_bind(). Fixes: b6736a4ea3fa ("drm/rockchip: dw_hdmi_qp: Improve error handling with= dev_err_probe()") Fixes: e1f7b7cbd74c ("drm/rockchip: dw_hdmi_qp: Switch to drmm_encoder_init= ()") Reviewed-by: Heiko Stuebner Signed-off-by: Cristian Ciocaltea --- drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c b/drivers/gpu/d= rm/rockchip/dw_hdmi_qp-rockchip.c index f35484715c2d..296f9a3ba66a 100644 --- a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c +++ b/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c @@ -589,14 +589,14 @@ static int dw_hdmi_qp_rockchip_bind(struct device *de= v, struct device *master, drm_encoder_helper_add(encoder, &dw_hdmi_qp_rockchip_encoder_helper_funcs= ); ret =3D drmm_encoder_init(drm, encoder, NULL, DRM_MODE_ENCODER_TMDS, NULL= ); if (ret) - return dev_err_probe(hdmi->dev, ret, "Failed to init encoder"); + return dev_err_probe(hdmi->dev, ret, "Failed to init encoder\n"); =20 platform_set_drvdata(pdev, hdmi); =20 hdmi->hdmi =3D dw_hdmi_qp_bind(pdev, encoder, &plat_data); if (IS_ERR(hdmi->hdmi)) return dev_err_probe(hdmi->dev, PTR_ERR(hdmi->hdmi), - "Failed to bind dw-hdmi-qp"); + "Failed to bind dw-hdmi-qp\n"); =20 connector =3D drm_bridge_connector_init(drm, encoder); if (IS_ERR(connector)) --=20 2.53.0 From nobody Sun May 24 22:43:18 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AF73D3FBB5B for ; Wed, 20 May 2026 18:38:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302326; cv=none; b=UxTiYiXr5xVXfkxQM/hIhK+PeSJuWmXNpnTh0k0YZOz8isUv/nmd0kL1qWhcG05Kvj/DrYvbzRiMeDyRU8AbdOB0oc2LQhpuBzjXZWRh0xDWzhuu06GqoJ1MgKhhX/kyz5ihyh3/vzhF5uxT1/18qOEYPYEetug1RZvQ4oFo5lc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302326; c=relaxed/simple; bh=JWNAjcEVpG0B81zUFQxCXhj/12VEmQn2O4tSeJ4AcNc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=X71+y4Ea75xACETT+4Gx0usvZ3EzWLyrjMLhx2X3u8wJORSOIIawHiAivO/tv6n9XK6gUffC4gT5EKi4qZdfVT6HU4ouP7e7VtQ6hFcZGI4pydoQPi8LFOIbH/IyjrBT575380kkQQqSwNclO96aM+m9TdTsPR4vgdHbiAN9J7c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=AYNNuQ0E; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="AYNNuQ0E" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1779302323; bh=JWNAjcEVpG0B81zUFQxCXhj/12VEmQn2O4tSeJ4AcNc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=AYNNuQ0E8nucADDE4PR9x/PlanrmoTo9PShX8xw320H3qiGejAib9DtK/Rn3i/Jwn EEog+WNY306Jpq9sHHxlN8G46MmHnmzrYb8qnCpYcCI2SuR7Q2K2n5VVKsxkBEbrk3 rqk77Y3M5Rf81/92wyeP8NZg69SBF3c/0VRqd/TzIVnOrYx5F6HPNLhUWL8k60ZTVC XZEhi1Hrkl/0poP5xaRpew1q5/WkhrtruayLrEvZEOZ/gSC7NztpGZ9j+BsvuShUNy mikrdFw2He1LWoy1vMvI0zkUzRyYDgNOFsDE7HTkBk9dkeNVvz1Wn8JC0ZUsORdM2S 0Wo1D5heteKGw== Received: from localhost (unknown [100.64.0.241]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: cristicc) by bali.collaboradmins.com (Postfix) with ESMTPSA id 1BC8C17E155B; Wed, 20 May 2026 20:38:43 +0200 (CEST) From: Cristian Ciocaltea Date: Wed, 20 May 2026 21:38:27 +0300 Subject: [PATCH v6 16/22] drm/rockchip: dw_hdmi_qp: Use local dev variable consistently in bind() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260520-dw-hdmi-qp-scramb-v6-16-24b74603b782@collabora.com> References: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> In-Reply-To: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan , Luca Ceresoli , Daniel Stone 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 X-Mailer: b4 0.15.1 Replace indirect struct device accesses via hdmi->dev and pdev->dev with the local dev parameter already available in dw_hdmi_qp_rockchip_bind(), for consistency and readability. Reviewed-by: Heiko Stuebner Signed-off-by: Cristian Ciocaltea --- drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c | 33 +++++++++++++---------= ---- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c b/drivers/gpu/d= rm/rockchip/dw_hdmi_qp-rockchip.c index 296f9a3ba66a..46df5abe31a4 100644 --- a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c +++ b/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c @@ -475,7 +475,7 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev,= struct device *master, struct clk *ref_clk; int ret, irq, i; =20 - if (!pdev->dev.of_node) + if (!dev->of_node) return -ENODEV; =20 hdmi =3D drmm_kzalloc(drm, sizeof(*hdmi), GFP_KERNEL); @@ -495,7 +495,7 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev,= struct device *master, return dev_err_probe(dev, -ENODEV, "Missing platform ctrl ops\n"); =20 hdmi->ctrl_ops =3D cfg->ctrl_ops; - hdmi->dev =3D &pdev->dev; + hdmi->dev =3D dev; hdmi->port_id =3D -ENODEV; =20 /* Identify port ID by matching base IO address */ @@ -506,7 +506,7 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev,= struct device *master, } } if (hdmi->port_id < 0) - return dev_err_probe(hdmi->dev, hdmi->port_id, + return dev_err_probe(dev, hdmi->port_id, "Failed to match HDMI port ID\n"); =20 plat_data.phy_ops =3D cfg->phy_ops; @@ -530,37 +530,36 @@ static int dw_hdmi_qp_rockchip_bind(struct device *de= v, struct device *master, hdmi->regmap =3D syscon_regmap_lookup_by_phandle(dev->of_node, "rockchip,grf"); if (IS_ERR(hdmi->regmap)) - return dev_err_probe(hdmi->dev, PTR_ERR(hdmi->regmap), + return dev_err_probe(dev, PTR_ERR(hdmi->regmap), "Unable to get rockchip,grf\n"); =20 hdmi->vo_regmap =3D syscon_regmap_lookup_by_phandle(dev->of_node, "rockchip,vo-grf"); if (IS_ERR(hdmi->vo_regmap)) - return dev_err_probe(hdmi->dev, PTR_ERR(hdmi->vo_regmap), + return dev_err_probe(dev, PTR_ERR(hdmi->vo_regmap), "Unable to get rockchip,vo-grf\n"); =20 - ret =3D devm_clk_bulk_get_all_enabled(hdmi->dev, &clks); + ret =3D devm_clk_bulk_get_all_enabled(dev, &clks); if (ret < 0) - return dev_err_probe(hdmi->dev, ret, "Failed to get clocks\n"); + return dev_err_probe(dev, ret, "Failed to get clocks\n"); =20 - ref_clk =3D clk_get(hdmi->dev, "ref"); + ref_clk =3D clk_get(dev, "ref"); if (IS_ERR(ref_clk)) - return dev_err_probe(hdmi->dev, PTR_ERR(ref_clk), + return dev_err_probe(dev, PTR_ERR(ref_clk), "Failed to get ref clock\n"); =20 plat_data.ref_clk_rate =3D clk_get_rate(ref_clk); clk_put(ref_clk); =20 - hdmi->frl_enable_gpio =3D devm_gpiod_get_optional(hdmi->dev, "frl-enable", + hdmi->frl_enable_gpio =3D devm_gpiod_get_optional(dev, "frl-enable", GPIOD_OUT_LOW); if (IS_ERR(hdmi->frl_enable_gpio)) - return dev_err_probe(hdmi->dev, PTR_ERR(hdmi->frl_enable_gpio), + return dev_err_probe(dev, PTR_ERR(hdmi->frl_enable_gpio), "Failed to request FRL enable GPIO\n"); =20 hdmi->phy =3D devm_of_phy_get_by_index(dev, dev->of_node, 0); if (IS_ERR(hdmi->phy)) - return dev_err_probe(hdmi->dev, PTR_ERR(hdmi->phy), - "Failed to get phy\n"); + return dev_err_probe(dev, PTR_ERR(hdmi->phy), "Failed to get phy\n"); =20 cfg->ctrl_ops->io_init(hdmi); =20 @@ -578,7 +577,7 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev,= struct device *master, if (irq < 0) return irq; =20 - ret =3D devm_request_threaded_irq(hdmi->dev, irq, + ret =3D devm_request_threaded_irq(dev, irq, cfg->ctrl_ops->hardirq_callback, cfg->ctrl_ops->irq_callback, IRQF_SHARED, "dw-hdmi-qp-hpd", @@ -589,18 +588,18 @@ static int dw_hdmi_qp_rockchip_bind(struct device *de= v, struct device *master, drm_encoder_helper_add(encoder, &dw_hdmi_qp_rockchip_encoder_helper_funcs= ); ret =3D drmm_encoder_init(drm, encoder, NULL, DRM_MODE_ENCODER_TMDS, NULL= ); if (ret) - return dev_err_probe(hdmi->dev, ret, "Failed to init encoder\n"); + return dev_err_probe(dev, ret, "Failed to init encoder\n"); =20 platform_set_drvdata(pdev, hdmi); =20 hdmi->hdmi =3D dw_hdmi_qp_bind(pdev, encoder, &plat_data); if (IS_ERR(hdmi->hdmi)) - return dev_err_probe(hdmi->dev, PTR_ERR(hdmi->hdmi), + return dev_err_probe(dev, PTR_ERR(hdmi->hdmi), "Failed to bind dw-hdmi-qp\n"); =20 connector =3D drm_bridge_connector_init(drm, encoder); if (IS_ERR(connector)) - return dev_err_probe(hdmi->dev, PTR_ERR(connector), + return dev_err_probe(dev, PTR_ERR(connector), "Failed to init bridge connector\n"); =20 return 0; --=20 2.53.0 From nobody Sun May 24 22:43:18 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8426E402BBA for ; Wed, 20 May 2026 18:38:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302327; cv=none; b=j9RUgnLD1By4DouflVS80Y4WaFUtsVI2CW9PeZMPp7Mmui2guTQRJpxN9tAP/PFVPHgTOrQJjsBB8G+fgYcbW0xiRuWMrwfqsA5MdtbpwIEM0St6hfxv8gwyoMaKCAcHOMCdJwGaKsKQKX6dWpOFqH+AdPwNy4Re+0PRZ7IW0Mg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302327; c=relaxed/simple; bh=ezpQnhTTmg3Hdk8LgylA5qYr3YAkIuSG1s5I1ynHNvE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=chvWz85Fu30S0LuoZevLC6kNh4CouNQSpYEGgMoFnHISWuskME9w9wyYCFu/KaWHhI/JOzk8Q9aOpbWTkDGeFqa9drIBDY1A7d3UyzhAWfNq9dDocMrLiCQUVcseUuDODvrMAgjFtoG+dmb4cMktQgI1ndRgvcfZkucRJz4YjG0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=ZrgsGHb7; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="ZrgsGHb7" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1779302324; bh=ezpQnhTTmg3Hdk8LgylA5qYr3YAkIuSG1s5I1ynHNvE=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=ZrgsGHb7LQxOSWs1KCUJ6V/gzfimdfaW9Ayb4KyqjYboVm57o+T3Y2odtXdjehOFX w4E6CweLOZ1T4R3wkq6IC1ezVSL8uyKlp7TnbC+/34eoW+9l1quYPXY+8/s1hBx5fm eZWzYJ51lei7ghT+lnwpxy2f32lBnhaA6/B8jB9fqT2ON1+B++mGSE4rIx1am6obFG cj2SgAkltwZzQqRJMPYlE4hSqRNppPUhNe0HQXzpxS2qCsFU3h1nTabTfCGIanb+Wx WgaYxJ8itBhQawQgkCdEJEZWskvI83r0Rwz2T2vC6137sxL1qHcmAEds3Fc79E3wNJ 8/nW+d+JL6SqA== Received: from localhost (unknown [100.64.0.241]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: cristicc) by bali.collaboradmins.com (Postfix) with ESMTPSA id DF8DB17E1562; Wed, 20 May 2026 20:38:43 +0200 (CEST) From: Cristian Ciocaltea Date: Wed, 20 May 2026 21:38:28 +0300 Subject: [PATCH v6 17/22] drm/rockchip: dw_hdmi_qp: Drop unnecessary #include Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260520-dw-hdmi-qp-scramb-v6-17-24b74603b782@collabora.com> References: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> In-Reply-To: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan , Luca Ceresoli , Daniel Stone 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 X-Mailer: b4 0.15.1 drm/drm_simple_kms_helper.h is no longer used, remove the include directive. Signed-off-by: Cristian Ciocaltea --- drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c b/drivers/gpu/d= rm/rockchip/dw_hdmi_qp-rockchip.c index 46df5abe31a4..8d64b76a1aa5 100644 --- a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c +++ b/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c @@ -24,7 +24,6 @@ #include #include #include -#include =20 #include "rockchip_drm_drv.h" =20 --=20 2.53.0 From nobody Sun May 24 22:43:18 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6BE79403EB5 for ; Wed, 20 May 2026 18:38:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302327; cv=none; b=fYgFDlmsz+14+Z4ya+BE7ppp2KGzjIjAEh6pCDF6ikVhWwoRPlnbmL5q65MvQBqa1OTQ2hd4X+zcIWpJ4WxrJw5mntNt2e0psm4cf4x2dRo/eyhWdFF9BgvJ1PMMUnIrafrGOF9i1z5vgTHMh9ORVVZ5Rxn1VyethDSYDgRClds= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302327; c=relaxed/simple; bh=/GXMxiVPMFLDQraehtjCiHmR576DEWNcKvvfOLlYRVQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=cETey4hLq+TRk9meNLRJ2oBv+67uvxd6UszKQD70ybIdrAue9kVYTHwQ8WXXaTj8UV404uCEukD92BKRyg13JRMTzVEZ2OM7w7yCZj3ndwc0ymRl1xBKxEgJnKspbAwTn5176WM9e7BJjQAAOzegi2zp0HW2o4vItJ088D4nIXI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=UMF/5/w2; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="UMF/5/w2" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1779302324; bh=/GXMxiVPMFLDQraehtjCiHmR576DEWNcKvvfOLlYRVQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=UMF/5/w2Zj6v105rT61hV4o/R6HIQ2nF7z/RSjZ2uede/+iYx7zg/AYlw2DLkhaQI qGTE4COzDqP2dh+gSnfdveUdI2VFVHnusbHNXCO5QIHnX0pR12nS6afa2Pyy/k1vwE GDcSF16iELyqwZqhS+gvQu11B3mchyDp/e7dsV6QcojSRrMNmZlgkmIR0+vMTjxLES 9EztAaonx0E9prktFxZwCNtExG0NL0WD6DeoOpBP7JoUVhwP8oIr3+ccLVtw+jebdv lQSazE5EI0uvmGtlqOqII9Rsdz6vbtjTZQTECzm3E9Hvt2lixkMAHOeW3oovFX5h92 6JTXLcrwGJOog== Received: from localhost (unknown [100.64.0.241]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: cristicc) by bali.collaboradmins.com (Postfix) with ESMTPSA id A9D9817E1574; Wed, 20 May 2026 20:38:44 +0200 (CEST) From: Cristian Ciocaltea Date: Wed, 20 May 2026 21:38:29 +0300 Subject: [PATCH v6 18/22] drm/rockchip: dw_hdmi_qp: Defer HPD IRQ enable until after connector setup Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260520-dw-hdmi-qp-scramb-v6-18-24b74603b782@collabora.com> References: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> In-Reply-To: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan , Luca Ceresoli , Daniel Stone 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, Dmitry Baryshkov X-Mailer: b4 0.15.1 Request the HPD IRQ early in bind() with IRQF_NO_AUTOEN, keeping it disabled until all DRM resources are fully initialized, at which point enable_irq() arms it. This prevents premature interrupt delivery without forcing devm_request_threaded_irq() to the very end of the initialization sequence, which would complicate error unwinding. Note that IRQF_NO_AUTOEN is incompatible with IRQF_SHARED; the latter is dropped as this IRQ has no other users. Suggested-by: Dmitry Baryshkov Signed-off-by: Cristian Ciocaltea --- drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c b/drivers/gpu/d= rm/rockchip/dw_hdmi_qp-rockchip.c index 8d64b76a1aa5..27342094958c 100644 --- a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c +++ b/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c @@ -579,7 +579,7 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev,= struct device *master, ret =3D devm_request_threaded_irq(dev, irq, cfg->ctrl_ops->hardirq_callback, cfg->ctrl_ops->irq_callback, - IRQF_SHARED, "dw-hdmi-qp-hpd", + IRQF_NO_AUTOEN, "dw-hdmi-qp-hpd", hdmi); if (ret) return ret; @@ -601,6 +601,8 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev,= struct device *master, return dev_err_probe(dev, PTR_ERR(connector), "Failed to init bridge connector\n"); =20 + enable_irq(irq); + return 0; } =20 --=20 2.53.0 From nobody Sun May 24 22:43:18 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8382340757B for ; Wed, 20 May 2026 18:38:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302329; cv=none; b=gc1Zr2ek1+YXBeXk/7/lhMUTTWUERai9iYoIbADMDcuPDyNNhx14cApMlgXPFAQ7M5UoI8hmsa7miYCrhFi5asVH4xHlgSzA5AH11+x9G/JLcjxZZW2lQ/ocRyEsbZFojD2m1o8UhJ1MjGe3Cm+mVY3EP6n9V1J2fyzsB5zfQFI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302329; c=relaxed/simple; bh=equcMxzWcJstN1bNv/FIKCDiolbRap3E7iZIA4ACfEE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=WONb3JTJdT2PmzOTrEHpfUJKF0ybNWXX0Ufs5jjO1GV07mF0C3b6muFVvh0XVixfTmLz6HP3IoSCn+pmVfQPL5eRZ2Hz47U+Ca3COk+n8ghcP+l3L+K2HK8MqaEXmjqAsXzsxzOGKUUXhuS+C/bAhsKxNql+LD2VX3h48BDD6Xc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=JVFjJSeo; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="JVFjJSeo" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1779302325; bh=equcMxzWcJstN1bNv/FIKCDiolbRap3E7iZIA4ACfEE=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=JVFjJSeosRY/oISZ5z9PpA+BAMO2awxTNm0+X8gj6PwXc+nRoZaYC/MO7bS1Wx66p PmIvMbXe+ofu9vFkntY9DsXKBbUushgoo8QMPdKxn/VqKix81E6njWreZAzXo9u+8g ofbWbKDi66bTxAoKWkxl7PajWa0m3BRWGPd35/uFiSzkBvUpUIZrcgz9lKDo8YPVDz 9D/gR0RxHMb++8zQ27bE1NU5LIZIj2PTOamk+LCpdDyWreKZNWCiFDpAI/QqKTtnVO kSM8Thw82SQ2is7SYOUjLvnPN8cfkZVCULxi7qii1OYDls/NLI2JVDcDHFbxb0cX6t 6w5ry1wjaj+2Q== Received: from localhost (unknown [100.64.0.241]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: cristicc) by bali.collaboradmins.com (Postfix) with ESMTPSA id 6BDED17E157E; Wed, 20 May 2026 20:38:45 +0200 (CEST) From: Cristian Ciocaltea Date: Wed, 20 May 2026 21:38:30 +0300 Subject: [PATCH v6 19/22] drm/rockchip: dw_hdmi_qp: Mask HPD IRQ in rk3576_io_init() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260520-dw-hdmi-qp-scramb-v6-19-24b74603b782@collabora.com> References: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> In-Reply-To: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan , Luca Ceresoli , Daniel Stone 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 X-Mailer: b4 0.15.1 Mask the RK3576 HPD interrupt in io_init() so it starts disabled, matching the RK3588 behavior. This prevents spurious interrupts before the bridge framework enables HPD via the .hpd_enable() callback. Signed-off-by: Cristian Ciocaltea --- drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c b/drivers/gpu/d= rm/rockchip/dw_hdmi_qp-rockchip.c index 27342094958c..62ea5c7cbbe6 100644 --- a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c +++ b/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c @@ -346,7 +346,7 @@ static void dw_hdmi_qp_rk3576_io_init(struct rockchip_h= dmi_qp *hdmi) =20 regmap_write(hdmi->vo_regmap, RK3576_VO0_GRF_SOC_CON14, val); =20 - val =3D FIELD_PREP_WM16(RK3576_HDMI_HPD_INT_MSK, 0); + val =3D FIELD_PREP_WM16(RK3576_HDMI_HPD_INT_MSK, 1); regmap_write(hdmi->regmap, RK3576_IOC_MISC_CON0, val); } =20 --=20 2.53.0 From nobody Sun May 24 22:43:18 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C79E9407CCF for ; Wed, 20 May 2026 18:38:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302329; cv=none; b=r5SqiFTtExzETNKT8wGD3dOBer7aW9TY6L1bQkQ4MHMneYFQ+8YGKEWhwAqkQjoiqwb4Cex4vPkIZ2hztef4u0rSYFxmoTRLGDGlQDFStuDFzdEToAnR7ccW5Rbb6Dwbt22Q5BHA+y1oKQRYxLVBl2Gx1/w+hWi4BOGTFo4og/0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302329; c=relaxed/simple; bh=oaTYjPlqYIMyBXdmKpR6N9jNZl5MSYOXiGvEtpg4Bk4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=e9YVetP8Oh5gkYyEeBgALa3RevUOOU2BD9c+MRcSjz7bDtG8sCPRNCL2WVgRJzKCX5DLaWWDV6/dMQ7zui2Txr4chkrlrlW92EWDsl8tKALWhS/7TjWSZNMrYE5N66RDRWyG180qtHf1zc2M4Dx830YC2rsR/Lnm/2DgUdCvx5Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=Xk0/fl+m; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="Xk0/fl+m" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1779302326; bh=oaTYjPlqYIMyBXdmKpR6N9jNZl5MSYOXiGvEtpg4Bk4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Xk0/fl+m/e6l16ALJsHTolkf83Zu9+Q7V47feWLKjMn1OAXiFqp1dQ4r1oJcpDVKK jaD0CoeWffOb5DtR9qOcaYtopnMSlDGjrJyBa0xyv8Na+7LzbDd8HJI9qAq+/6zoN9 hFsMaDOsaZfbwqqTy8ErI+x8FIeZa6YaSKHEIUzWkyP9WRvoJqyrVrzZpK1XdAxzHG XjJAGUb+SB1nvbtkEnoNjeD6THDnvTqaGIPlLCji2cqUCR18mKYO872idHzjfaAQrR 8FmPYq00vfiXT4w9VgdaDu4aAcXmNeFALEkLtbVwp32YgoAeDsI5T0mM4P/YRRaE9l xHQ/ibfJ/xTIA== Received: from localhost (unknown [100.64.0.241]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: cristicc) by bali.collaboradmins.com (Postfix) with ESMTPSA id 2CDF017E1582; Wed, 20 May 2026 20:38:46 +0200 (CEST) From: Cristian Ciocaltea Date: Wed, 20 May 2026 21:38:31 +0300 Subject: [PATCH v6 20/22] drm/rockchip: dw_hdmi_qp: Implement .{enable|disable}_hpd() PHY ops Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260520-dw-hdmi-qp-scramb-v6-20-24b74603b782@collabora.com> References: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> In-Reply-To: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan , Luca Ceresoli , Daniel Stone 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 X-Mailer: b4 0.15.1 Implement .enable_hpd() and .disable_hpd() phy ops for RK3576 and RK3588 SoCs, used by the corresponding bridge callbacks for HPD activation control. Consolidate the interrupt clear-and-unmask sequence into enable_hpd() and the mask-only operation into disable_hpd(), replacing the open-coded register writes in the interrupt handlers and io_init(). The .setup_hpd() phy op, which was previously called from dw_hdmi_qp_init_hw(), is no longer needed and its users are removed. Signed-off-by: Cristian Ciocaltea --- drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c | 78 +++++++++++++---------= ---- 1 file changed, 38 insertions(+), 40 deletions(-) diff --git a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c b/drivers/gpu/d= rm/rockchip/dw_hdmi_qp-rockchip.c index 62ea5c7cbbe6..b9e0ea56efd8 100644 --- a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c +++ b/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c @@ -193,7 +193,7 @@ dw_hdmi_qp_rk3588_read_hpd(struct dw_hdmi_qp *dw_hdmi, = void *data) return val ? connector_status_connected : connector_status_disconnected; } =20 -static void dw_hdmi_qp_rk3588_setup_hpd(struct dw_hdmi_qp *dw_hdmi, void *= data) +static void dw_hdmi_qp_rk3588_enable_hpd(struct dw_hdmi_qp *dw_hdmi, void = *data) { struct rockchip_hdmi_qp *hdmi =3D (struct rockchip_hdmi_qp *)data; u32 val; @@ -208,11 +208,25 @@ static void dw_hdmi_qp_rk3588_setup_hpd(struct dw_hdm= i_qp *dw_hdmi, void *data) regmap_write(hdmi->regmap, RK3588_GRF_SOC_CON2, val); } =20 +static void dw_hdmi_qp_rk3588_disable_hpd(struct dw_hdmi_qp *dw_hdmi, void= *data) +{ + struct rockchip_hdmi_qp *hdmi =3D (struct rockchip_hdmi_qp *)data; + u32 val; + + if (hdmi->port_id) + val =3D FIELD_PREP_WM16(RK3588_HDMI1_HPD_INT_MSK, 1); + else + val =3D FIELD_PREP_WM16(RK3588_HDMI0_HPD_INT_MSK, 1); + + regmap_write(hdmi->regmap, RK3588_GRF_SOC_CON2, val); +} + static const struct dw_hdmi_qp_phy_ops rk3588_hdmi_phy_ops =3D { .init =3D dw_hdmi_qp_rk3588_phy_init, .disable =3D dw_hdmi_qp_rk3588_phy_disable, .read_hpd =3D dw_hdmi_qp_rk3588_read_hpd, - .setup_hpd =3D dw_hdmi_qp_rk3588_setup_hpd, + .enable_hpd =3D dw_hdmi_qp_rk3588_enable_hpd, + .disable_hpd =3D dw_hdmi_qp_rk3588_disable_hpd, }; =20 static enum drm_connector_status @@ -227,7 +241,7 @@ dw_hdmi_qp_rk3576_read_hpd(struct dw_hdmi_qp *dw_hdmi, = void *data) connector_status_connected : connector_status_disconnected; } =20 -static void dw_hdmi_qp_rk3576_setup_hpd(struct dw_hdmi_qp *dw_hdmi, void *= data) +static void dw_hdmi_qp_rk3576_enable_hpd(struct dw_hdmi_qp *dw_hdmi, void = *data) { struct rockchip_hdmi_qp *hdmi =3D (struct rockchip_hdmi_qp *)data; u32 val; @@ -236,14 +250,22 @@ static void dw_hdmi_qp_rk3576_setup_hpd(struct dw_hdm= i_qp *dw_hdmi, void *data) FIELD_PREP_WM16(RK3576_HDMI_HPD_INT_MSK, 0)); =20 regmap_write(hdmi->regmap, RK3576_IOC_MISC_CON0, val); - regmap_write(hdmi->regmap, 0xa404, 0xffff0102); +} + +static void dw_hdmi_qp_rk3576_disable_hpd(struct dw_hdmi_qp *dw_hdmi, void= *data) +{ + struct rockchip_hdmi_qp *hdmi =3D (struct rockchip_hdmi_qp *)data; + + regmap_write(hdmi->regmap, RK3576_IOC_MISC_CON0, + FIELD_PREP_WM16(RK3576_HDMI_HPD_INT_MSK, 1)); } =20 static const struct dw_hdmi_qp_phy_ops rk3576_hdmi_phy_ops =3D { .init =3D dw_hdmi_qp_rk3588_phy_init, .disable =3D dw_hdmi_qp_rk3588_phy_disable, .read_hpd =3D dw_hdmi_qp_rk3576_read_hpd, - .setup_hpd =3D dw_hdmi_qp_rk3576_setup_hpd, + .enable_hpd =3D dw_hdmi_qp_rk3576_enable_hpd, + .disable_hpd =3D dw_hdmi_qp_rk3576_disable_hpd, }; =20 static void dw_hdmi_qp_rk3588_hpd_work(struct work_struct *work) @@ -264,13 +286,12 @@ static void dw_hdmi_qp_rk3588_hpd_work(struct work_st= ruct *work) static irqreturn_t dw_hdmi_qp_rk3576_hardirq(int irq, void *dev_id) { struct rockchip_hdmi_qp *hdmi =3D dev_id; - u32 intr_stat, val; + u32 intr_stat; =20 regmap_read(hdmi->regmap, RK3576_IOC_HDMI_HPD_STATUS, &intr_stat); - if (intr_stat) { - val =3D FIELD_PREP_WM16(RK3576_HDMI_HPD_INT_MSK, 1); =20 - regmap_write(hdmi->regmap, RK3576_IOC_MISC_CON0, val); + if (intr_stat) { + dw_hdmi_qp_rk3576_disable_hpd(NULL, hdmi); return IRQ_WAKE_THREAD; } =20 @@ -280,15 +301,11 @@ static irqreturn_t dw_hdmi_qp_rk3576_hardirq(int irq,= void *dev_id) static irqreturn_t dw_hdmi_qp_rk3576_irq(int irq, void *dev_id) { struct rockchip_hdmi_qp *hdmi =3D dev_id; - u32 val; =20 - val =3D FIELD_PREP_WM16(RK3576_HDMI_HPD_INT_CLR, 1); - regmap_write(hdmi->regmap, RK3576_IOC_MISC_CON0, val); mod_delayed_work(system_percpu_wq, &hdmi->hpd_work, msecs_to_jiffies(HOTPLUG_DEBOUNCE_MS)); =20 - val =3D FIELD_PREP_WM16(RK3576_HDMI_HPD_INT_MSK, 0); - regmap_write(hdmi->regmap, RK3576_IOC_MISC_CON0, val); + dw_hdmi_qp_rk3576_enable_hpd(NULL, hdmi); =20 return IRQ_HANDLED; } @@ -296,16 +313,12 @@ static irqreturn_t dw_hdmi_qp_rk3576_irq(int irq, voi= d *dev_id) static irqreturn_t dw_hdmi_qp_rk3588_hardirq(int irq, void *dev_id) { struct rockchip_hdmi_qp *hdmi =3D dev_id; - u32 intr_stat, val; + u32 intr_stat; =20 regmap_read(hdmi->regmap, RK3588_GRF_SOC_STATUS1, &intr_stat); =20 if (intr_stat) { - if (hdmi->port_id) - val =3D FIELD_PREP_WM16(RK3588_HDMI1_HPD_INT_MSK, 1); - else - val =3D FIELD_PREP_WM16(RK3588_HDMI0_HPD_INT_MSK, 1); - regmap_write(hdmi->regmap, RK3588_GRF_SOC_CON2, val); + dw_hdmi_qp_rk3588_disable_hpd(NULL, hdmi); return IRQ_WAKE_THREAD; } =20 @@ -315,22 +328,11 @@ static irqreturn_t dw_hdmi_qp_rk3588_hardirq(int irq,= void *dev_id) static irqreturn_t dw_hdmi_qp_rk3588_irq(int irq, void *dev_id) { struct rockchip_hdmi_qp *hdmi =3D dev_id; - u32 val; - - if (hdmi->port_id) - val =3D FIELD_PREP_WM16(RK3588_HDMI1_HPD_INT_CLR, 1); - else - val =3D FIELD_PREP_WM16(RK3588_HDMI0_HPD_INT_CLR, 1); - regmap_write(hdmi->regmap, RK3588_GRF_SOC_CON2, val); =20 mod_delayed_work(system_percpu_wq, &hdmi->hpd_work, msecs_to_jiffies(HOTPLUG_DEBOUNCE_MS)); =20 - if (hdmi->port_id) - val |=3D FIELD_PREP_WM16(RK3588_HDMI1_HPD_INT_MSK, 0); - else - val |=3D FIELD_PREP_WM16(RK3588_HDMI0_HPD_INT_MSK, 0); - regmap_write(hdmi->regmap, RK3588_GRF_SOC_CON2, val); + dw_hdmi_qp_rk3588_enable_hpd(NULL, hdmi); =20 return IRQ_HANDLED; } @@ -343,11 +345,11 @@ static void dw_hdmi_qp_rk3576_io_init(struct rockchip= _hdmi_qp *hdmi) FIELD_PREP_WM16(RK3576_SDAIN_MASK, 1) | FIELD_PREP_WM16(RK3576_HDMI_GRANT_SEL, 1) | FIELD_PREP_WM16(RK3576_I2S_SEL_MASK, 1); - regmap_write(hdmi->vo_regmap, RK3576_VO0_GRF_SOC_CON14, val); =20 - val =3D FIELD_PREP_WM16(RK3576_HDMI_HPD_INT_MSK, 1); - regmap_write(hdmi->regmap, RK3576_IOC_MISC_CON0, val); + regmap_write(hdmi->regmap, 0xa404, 0xffff0102); + + dw_hdmi_qp_rk3576_disable_hpd(NULL, hdmi); } =20 static void dw_hdmi_qp_rk3588_io_init(struct rockchip_hdmi_qp *hdmi) @@ -372,11 +374,7 @@ static void dw_hdmi_qp_rk3588_io_init(struct rockchip_= hdmi_qp *hdmi) val =3D FIELD_PREP_WM16(RK3588_HDMI0_GRANT_SEL, 1); regmap_write(hdmi->vo_regmap, RK3588_GRF_VO1_CON9, val); =20 - if (hdmi->port_id) - val =3D FIELD_PREP_WM16(RK3588_HDMI1_HPD_INT_MSK, 1); - else - val =3D FIELD_PREP_WM16(RK3588_HDMI0_HPD_INT_MSK, 1); - regmap_write(hdmi->regmap, RK3588_GRF_SOC_CON2, val); + dw_hdmi_qp_rk3588_disable_hpd(NULL, hdmi); } =20 static void dw_hdmi_qp_rk3576_enc_init(struct rockchip_hdmi_qp *hdmi, --=20 2.53.0 From nobody Sun May 24 22:43:18 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 978DF407CF7 for ; Wed, 20 May 2026 18:38:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302330; cv=none; b=ZK0+sfhkGX54I5moHj/y3iepF7OI/wrJzECIKlBX4pp4vXTKM0FofgQ2FbSA7zZA5gV1L4LlBSGb6s6RbYrPpN5FgRO6ZI8Rp8VY/SfHlgSV2PauFZTXGEEZSgXT0OgSSiXTQqNLdQt1/BTysZOnJBGmVMGufrDGWOpg0wHeJE0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302330; c=relaxed/simple; bh=9Dzv5QZZTewYw4HMaE8rAMe+B3WVA6il2PiXX6JKcOw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=tAk7V3XkgZAtFRIEKElbX+/cfJvrkbFk4P8CApwqTbtG+E5LD3F1ZAcAKvIDnjEbm8lq+ZgKELEotJVCg0S1frF/InAyDuwWVoAv/3PFZojLrD5qpas5T1aSC+9zGMUR1ePl+24ixZT1boMhXPwVj3XOlOPBMH2LbEt8xby/kTE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=A9hUC+Zr; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="A9hUC+Zr" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1779302327; bh=9Dzv5QZZTewYw4HMaE8rAMe+B3WVA6il2PiXX6JKcOw=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=A9hUC+Zr0sqfbI+9NFOr0ezHn2236wtA5Cx/3XzRvY0ds2JOT3Xqm19Zr/n9e4Kzx n31hcjz6m1vMRwAYp6AhSJ3R+ZoJabPFxv2XA+2VBCncXtWmUqXHoXxYZx1j4dG3JE 0nFWyZQa5blCyWUccug8Y5k1dq0CGtrB7XFXOvzksDNFaH1fNK8w+qrBAt9jTtvKGR l8UqCg7q2or9idP8qSFrgXZAKHiwmU7ONoRPBaVjzVtWJIPBMlxHTbgRngC6DhV8ry lizrbYEXbQnm5F+GrfikYKTLeZOIPCNH4qnZDlboAaKcyWUdFvLudZ152C39tfDmBn ndptsREh8x4cA== Received: from localhost (unknown [100.64.0.241]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: cristicc) by bali.collaboradmins.com (Postfix) with ESMTPSA id ECFD617E1584; Wed, 20 May 2026 20:38:46 +0200 (CEST) From: Cristian Ciocaltea Date: Wed, 20 May 2026 21:38:32 +0300 Subject: [PATCH v6 21/22] drm/rockchip: dw_hdmi_qp: Switch to dw_hdmi_qp_hpd_notify() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260520-dw-hdmi-qp-scramb-v6-21-24b74603b782@collabora.com> References: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> In-Reply-To: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan , Luca Ceresoli , Daniel Stone 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 X-Mailer: b4 0.15.1 Switch from drm_helper_hpd_irq_event(), which polls all connectors, to the recently introduced dw_hdmi_qp_hpd_notify() helper, which runs the detect cycle only on the affected connector. This avoids unnecessary work and redundant detect calls on unrelated connectors. Signed-off-by: Cristian Ciocaltea --- drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c b/drivers/gpu/d= rm/rockchip/dw_hdmi_qp-rockchip.c index b9e0ea56efd8..666631fc9162 100644 --- a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c +++ b/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c @@ -23,7 +23,6 @@ #include #include #include -#include =20 #include "rockchip_drm_drv.h" =20 @@ -273,14 +272,8 @@ static void dw_hdmi_qp_rk3588_hpd_work(struct work_str= uct *work) struct rockchip_hdmi_qp *hdmi =3D container_of(work, struct rockchip_hdmi_qp, hpd_work.work); - struct drm_device *drm =3D hdmi->encoder.encoder.dev; - bool changed; =20 - if (drm) { - changed =3D drm_helper_hpd_irq_event(drm); - if (changed) - dev_dbg(hdmi->dev, "connector status changed\n"); - } + dw_hdmi_qp_hpd_notify(hdmi->hdmi); } =20 static irqreturn_t dw_hdmi_qp_rk3576_hardirq(int irq, void *dev_id) @@ -645,8 +638,7 @@ static int __maybe_unused dw_hdmi_qp_rockchip_resume(st= ruct device *dev) =20 dw_hdmi_qp_resume(dev, hdmi->hdmi); =20 - if (hdmi->encoder.encoder.dev) - drm_helper_hpd_irq_event(hdmi->encoder.encoder.dev); + dw_hdmi_qp_hpd_notify(hdmi->hdmi); =20 return 0; } --=20 2.53.0 From nobody Sun May 24 22:43:18 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 847CE40802C for ; Wed, 20 May 2026 18:38:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302331; cv=none; b=HOJ7F24uq157QcU03h0bZmx+VtqlVrq+N83Zc0lnzX/xQhbFV7sEGmn5IbO6N2u0ZRLzWn/z4JfTDfh5dICqj1SB/tWHV6JxYNSIoLoHNAy8yna6RuWLrhYiIq7Yf9wSw7Mu74lwICLZUqICvqJ/qoO+4mFBNwR9+/nq+GcXFSI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779302331; c=relaxed/simple; bh=gfw+VOnsxyeQOB9qQkKs2AR4t78caZyAmSm1XPJ+q0U=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JeYtIKKh8ob2l9kC/N7EG7OFCEDwAQmAbO8STr/QbNUVwDiiKxPRVRHA2knNZv1t4H4zCvI6s5K/ad38y5n9NH3EgJiD55MI65k1ejyPQr9SYvPVj/1cWpF1Nb3R8iGxjkdjofYp2ec13tqF0L9x+OTn1hb6TajO659VIegxRqY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=IlPnSplw; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="IlPnSplw" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1779302327; bh=gfw+VOnsxyeQOB9qQkKs2AR4t78caZyAmSm1XPJ+q0U=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=IlPnSplwEZ8eLtoVLTzEWvtpRgb1peF7OcTqACYlOOsXbEZUXlYDhRitRt0m6ioVK 2bB5gohIKOH3hHdFXtClB+zWT98elyOfLncOds5/1jd6TnqPwVUmjhdce6FWHyW1t2 PfbRqOPGEUA7ZmqgTs/hYo6EvWNiy1ObgCF5uC+BDAAY1utnQoueg7YNX6bYH0196S 01WiPxBADSzLyIT7mnzJvroKX3Hv8F+LsAR1yCZ41wWuXmICZo2J1lEDKDC9y05u+h 1Nci5rMagryw6kY3vVF20JG8uQlC119E+pIa5w9XIZnbkNSHKLjmy5X4VRsCihSX1n YrZtePcwEnlpg== Received: from localhost (unknown [100.64.0.241]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: cristicc) by bali.collaboradmins.com (Postfix) with ESMTPSA id AEFAE17E1591; Wed, 20 May 2026 20:38:47 +0200 (CEST) From: Cristian Ciocaltea Date: Wed, 20 May 2026 21:38:33 +0300 Subject: [PATCH v6 22/22] drm/bridge: dw-hdmi-qp: Remove obsolete .setup_hpd() phy op Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260520-dw-hdmi-qp-scramb-v6-22-24b74603b782@collabora.com> References: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> In-Reply-To: <20260520-dw-hdmi-qp-scramb-v6-0-24b74603b782@collabora.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan , Luca Ceresoli , Daniel Stone 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 X-Mailer: b4 0.15.1 With the completed transition to .{enable|disable}_hpd() phy ops, .setup_hpd() became obsolete and unused. Drop it. Signed-off-by: Cristian Ciocaltea --- drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c | 3 --- include/drm/bridge/dw_hdmi_qp.h | 1 - 2 files changed, 4 deletions(-) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c b/drivers/gpu/drm= /bridge/synopsys/dw-hdmi-qp.c index ed0c68d6c6fd..f626cf4bdda9 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c @@ -1316,9 +1316,6 @@ static void dw_hdmi_qp_init_hw(struct dw_hdmi_qp *hdm= i) /* Clear DONE and ERROR interrupts */ dw_hdmi_qp_write(hdmi, I2CM_OP_DONE_CLEAR | I2CM_NACK_RCVD_CLEAR, MAINUNIT_1_INT_CLEAR); - - if (hdmi->phy.ops->setup_hpd) - hdmi->phy.ops->setup_hpd(hdmi, hdmi->phy.data); } =20 struct dw_hdmi_qp *dw_hdmi_qp_bind(struct platform_device *pdev, diff --git a/include/drm/bridge/dw_hdmi_qp.h b/include/drm/bridge/dw_hdmi_q= p.h index b4fb1c578a5b..ad33f9cafdeb 100644 --- a/include/drm/bridge/dw_hdmi_qp.h +++ b/include/drm/bridge/dw_hdmi_qp.h @@ -16,7 +16,6 @@ struct dw_hdmi_qp_phy_ops { int (*init)(struct dw_hdmi_qp *hdmi, void *data); void (*disable)(struct dw_hdmi_qp *hdmi, void *data); enum drm_connector_status (*read_hpd)(struct dw_hdmi_qp *hdmi, void *data= ); - void (*setup_hpd)(struct dw_hdmi_qp *hdmi, void *data); void (*enable_hpd)(struct dw_hdmi_qp *hdmi, void *data); void (*disable_hpd)(struct dw_hdmi_qp *hdmi, void *data); }; --=20 2.53.0