From nobody Mon May 25 04:35:17 2026 Received: from smtp.forwardemail.net (smtp.forwardemail.net [121.127.44.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8215938D6B5 for ; Mon, 18 May 2026 19:48:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=121.127.44.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779133687; cv=none; b=SI5CXUxXxqvcWAFAZ7z0Wdez9io0Fw4TXsCnDlYHDrp+NclsNjmx1d8hsOb29Qws0zzPoeOCwt6d2ig8521llS1/VePuRWsiWM/VFbaSh6q9+YKtJvHCFQDfrcv13/TIleUW1tllyqL7F7GLlNfjx5QWey/Ea5zKox+TrrWY/VA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779133687; c=relaxed/simple; bh=1C+3efaz/S3z/Fy7UHNewvw/JBec7xtXWoSDY77CuGY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WQ5TPWPzEN3MHLsLx5O99gUZljBKjsXs2kta5pEi3oTtILdj8t8VPqxh9P5wzPmAW46Lzn5q8WI2BGgeO/XFJuRhzg5rkva2uaEzBDnMF6Osk6bUNp20rk2oqvQFeEw6DcaYfXG/lQC95iQOqyd4wNLgSt/kxYXvQhF0sQ6gSWk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b=GzWT+PIj; arc=none smtp.client-ip=121.127.44.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b="GzWT+PIj" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se; h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To: Message-ID: Date: Subject: Cc: To: From; q=dns/txt; s=fe-e1b5cab7be; t=1779133685; bh=ix3tqGj9O/73OPDzykQq3AN3AmgT+JSGiiTMGr+5/U4=; b=GzWT+PIj2RR026GYHmtCnij+Vi4odGbpru8GuvQgr15NFAHPa6P+306gGYq1ThRkaMK0VR+hn mGjyknpcuywf6q/6ufZ8veyH+ptWHuoOdJbxTLD8QkjD30o55pqEhTqmUB0Q2zOdeE/I5aGWmfv rRe4fV7Z3G6HV7nBM5b8HVR35eQ6R3/agb5AtcdYiFUUQpWt3I5h+nPpzjcwYTxD8CNo/Bou+eN aoOpJazNhUhI7IDx6s3pxYBnoe80oL7sTTapRUeLRkOLTPx5gYTBCp1V4w/tqZtt8aTFKvQp6KZ L/Edkryo/pLgCL3/pWxPv1uCIzQFnjsQdvs+OsK2l/rw== X-Forward-Email-ID: 6a0b6cecb74b0ebd362eee20 X-Forward-Email-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net, 121.127.44.73 X-Forward-Email-Version: 2.8.12 X-Forward-Email-Website: https://forwardemail.net X-Complaints-To: abuse@forwardemail.net X-Report-Abuse: abuse@forwardemail.net X-Report-Abuse-To: abuse@forwardemail.net From: Jonas Karlman To: Neil Armstrong , Kevin Hilman , Heiko Stuebner , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jerome Brunet , Martin Blumenstingl Cc: dri-devel@lists.freedesktop.org, linux-amlogic@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Jonas Karlman , linux-rockchip@lists.infradead.org Subject: [PATCH 01/13] drm/meson: dw-hdmi: Report connector status based on HPD bit Date: Mon, 18 May 2026 19:47:29 +0000 Message-ID: <20260518194744.2483580-2-jonas@kwiboo.se> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260518194744.2483580-1-jonas@kwiboo.se> References: <20260518194744.2483580-1-jonas@kwiboo.se> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" G12A added support for RX-SENSE, status for both HPD and RX-SENSE is reported in the TOP_STAT0 register. Limit read_hpd() phy ops to only report connected status based on the HPD status bit in TOP_STAT0, to help ensure that EDID can be read from the sink in the connector detect() func. Fixes: 3b7c1237a72a ("drm/meson: Add G12A support for the DW-HDMI Glue") Signed-off-by: Jonas Karlman Reviewed-by: Neil Armstrong --- drivers/gpu/drm/meson/meson_dw_hdmi.c | 6 ++++-- drivers/gpu/drm/meson/meson_dw_hdmi.h | 3 +++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/meson/meson_dw_hdmi.c b/drivers/gpu/drm/meson/= meson_dw_hdmi.c index 2a8756da569b..993f6d5d4b29 100644 --- a/drivers/gpu/drm/meson/meson_dw_hdmi.c +++ b/drivers/gpu/drm/meson/meson_dw_hdmi.c @@ -457,9 +457,11 @@ static enum drm_connector_status dw_hdmi_read_hpd(stru= ct dw_hdmi *hdmi, void *data) { struct meson_dw_hdmi *dw_hdmi =3D (struct meson_dw_hdmi *)data; + unsigned int stat; =20 - return !!dw_hdmi->data->top_read(dw_hdmi, HDMITX_TOP_STAT0) ? - connector_status_connected : connector_status_disconnected; + stat =3D dw_hdmi->data->top_read(dw_hdmi, HDMITX_TOP_STAT0); + return stat & HDMITX_TOP_STAT0_HPD ? connector_status_connected : + connector_status_disconnected; } =20 static void dw_hdmi_setup_hpd(struct dw_hdmi *hdmi, diff --git a/drivers/gpu/drm/meson/meson_dw_hdmi.h b/drivers/gpu/drm/meson/= meson_dw_hdmi.h index 08e1c14e4ea0..cb4616daf667 100644 --- a/drivers/gpu/drm/meson/meson_dw_hdmi.h +++ b/drivers/gpu/drm/meson/meson_dw_hdmi.h @@ -157,4 +157,7 @@ */ #define HDMITX_TOP_STAT0 (0x00E) =20 +#define HDMITX_TOP_STAT0_HPD BIT(0) +#define HDMITX_TOP_STAT0_RXSENSE BIT(1) + #endif /* __MESON_DW_HDMI_H */ --=20 2.54.0 From nobody Mon May 25 04:35:17 2026 Received: from smtp.forwardemail.net (smtp.forwardemail.net [149.28.215.223]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id ABAB838F927 for ; Mon, 18 May 2026 19:48:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=149.28.215.223 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779133723; cv=none; b=TlPuT7zB0AmDb+VDa1fOqFuhGChpJ0eoQ4dwn3krRlhpMnbCazXV05yIlT5cvzNTMOsy3cWsyBlQ1AfJAdY2wetsp89N7yhHAEX/D3OpiaqCCjfsSKSoVI9K4vSzNCzwg5eX/GySe3l+gUsXl+9EfiDwZRBiQqTwiy+GLbt8Sro= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779133723; c=relaxed/simple; bh=QnoOVgUj5PNhMEkdjGDD7bRgvpp91kbiYlicF4eRMoo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=I8Qb/Nk9ik6INluvSGlPkdlu2PEa8x2OFNA346XkcMS0cMI0jeVWiuiGY16jBTcop79xmtUvqMpmK3Lf1LXhp3oIt4A38hQ2MKrX/dQN6ADSO4Iaq5WfNJzDe0ZGFZQNEUMoA3CAgN4+XdKfC9pMeyw3ifgRIkQKNMMNsg9nchw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b=gvmSST47; arc=none smtp.client-ip=149.28.215.223 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b="gvmSST47" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se; h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To: Message-ID: Date: Subject: Cc: To: From; q=dns/txt; s=fe-e1b5cab7be; t=1779133717; bh=fkGNzPgLT1Dz0z6nTFi2No6Ifen2fpOCha4Dk4M3oxg=; b=gvmSST47T47gQfbb3FNz0wNVzRJcUfXbg6t09B5pSF89TPhmLnFGS3Al5CUpTWPpVx+pyflnC rH7+tA7SUlrzvRUEdN7rnY+/Rh5IHWasdtmPdo7zFVx8bOqQmIOmebGMYUOQw7wXfFvwCxKdgA0 ixIfWU8IuG002mve5iZmc1AS6oIKlUk0k7F2XC7irhbtUdeKIFqzPFJ0wmT0qOGTZEtPYGDS3XS doQDXM2R4+4iw1hfE/s1vTojUcE3ZW34dP9ptZftyyxeoLb4KNgg2LF2SZYyLAB6EL3uPLeMbBC dg4tSFIypOjnEFa4itCZBpIeJvkEfFvVojUwhf+OiuGw== X-Forward-Email-ID: 6a0b6cf1b74b0ebd362eee3b X-Forward-Email-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net, 149.28.215.223 X-Forward-Email-Version: 2.8.12 X-Forward-Email-Website: https://forwardemail.net X-Complaints-To: abuse@forwardemail.net X-Report-Abuse: abuse@forwardemail.net X-Report-Abuse-To: abuse@forwardemail.net From: Jonas Karlman To: Neil Armstrong , Kevin Hilman , Heiko Stuebner , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jerome Brunet , Martin Blumenstingl , Sam Ravnborg Cc: dri-devel@lists.freedesktop.org, linux-amlogic@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Jonas Karlman , linux-rockchip@lists.infradead.org Subject: [PATCH 02/13] drm/meson: dw-hdmi: Protect from possible NULL pointer dereference Date: Mon, 18 May 2026 19:47:30 +0000 Message-ID: <20260518194744.2483580-3-jonas@kwiboo.se> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260518194744.2483580-1-jonas@kwiboo.se> References: <20260518194744.2483580-1-jonas@kwiboo.se> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The IRQ handler can be called at any time after the call to devm_request_threaded_irq() completes, even before dw_hdmi->bridge has been assigned later in meson_dw_hdmi_bind(). Protect from a possible NULL pointer dereference in IRQ handler by only calling drm_helper_hpd_irq_event() when bridge has been assigned. Fixes: e67f6037ae1b ("drm/meson: split out encoder from meson_dw_hdmi") Signed-off-by: Jonas Karlman Reviewed-by: Neil Armstrong --- I only observed this NULL pointer dereference one time, without being able to reliably re-create a similar timing scenario. I still think this is an issue that possible could happen and likely should be fixed. Note that patches later in this series will fully replace this change. --- drivers/gpu/drm/meson/meson_dw_hdmi.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/meson/meson_dw_hdmi.c b/drivers/gpu/drm/meson/= meson_dw_hdmi.c index 993f6d5d4b29..eafe7daf6ff1 100644 --- a/drivers/gpu/drm/meson/meson_dw_hdmi.c +++ b/drivers/gpu/drm/meson/meson_dw_hdmi.c @@ -520,7 +520,8 @@ static irqreturn_t dw_hdmi_top_thread_irq(int irq, void= *dev_id) u32 stat =3D dw_hdmi->irq_stat; =20 /* HPD Events */ - if (stat & (HDMITX_TOP_INTR_HPD_RISE | HDMITX_TOP_INTR_HPD_FALL)) { + if (stat & (HDMITX_TOP_INTR_HPD_RISE | HDMITX_TOP_INTR_HPD_FALL) && + dw_hdmi->bridge) { bool hpd_connected =3D false; =20 if (stat & HDMITX_TOP_INTR_HPD_RISE) --=20 2.54.0 From nobody Mon May 25 04:35:17 2026 Received: from smtp.forwardemail.net (smtp.forwardemail.net [149.28.215.223]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6F4A7379979 for ; Mon, 18 May 2026 19:48:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=149.28.215.223 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779133722; cv=none; b=ERc2EvTmlvSq+Gx9a1s46rXdHi2bOThwMzEiNbwAaRWYg+vOUs0U840XLMAw/0XHcqFoiCDtjax8vBpUgb/3dgH++0Y/apqM9TOGZz+7ZDvzl04kHYYA7srChBiGNtHNo9XCZwzUxEduC8VO07JnhSbDYZYBmf4AblYJvMG97Tg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779133722; c=relaxed/simple; bh=e2xdZXb2vPKVmjvj5PyOIWuEneSAJDmNwneWH7CZ2r4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Li8bbbk7lSO1hfE8OKxyQpYVoezmnLX2ZhxNeS7EAi9HiC20Ej80xFfPPDRLMNVJcV41Rd0aBNGU8AFGiv3VbFVzYIPuUFARNiMnPM+wldnHEgtqUX7se/65HmTUH9oc414O5r2bqscVTzQeZT5e4sFtJXNle0F9DvRztv4yxfE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b=JL1IbWKB; arc=none smtp.client-ip=149.28.215.223 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b="JL1IbWKB" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se; h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To: Message-ID: Date: Subject: Cc: To: From; q=dns/txt; s=fe-e1b5cab7be; t=1779133717; bh=kjTG1Ak+F+PLmCEEhmKg5bB7H85Hff4CbMbJgrGq+P0=; b=JL1IbWKBC2IpUU3XC3b5plq+CfGXDAygVvEACillJbfu3HoV0h0VBkhNP0N9MPs/jqtGL7vu7 cpVxvjj7qoQApjfgrbyt/7zAS79VkWmi0nlBnTvIbotZC0uhIhJZ9zasWEhcn/UIO77fJr+FrZQ NfCNLishXtCCT0HETNUL4Eo3/NNCbx47zqG0AZFVyFvGKeJ3QO7Wi5pelwW1vrwKPkXwpKpfJPD pvtcuGv2i++5Qx2R5XPiOFzfmuwJirHJynAvDeMQDaOPFvm/nw+Wj71LC8+m91yuwm2qghKdJe3 GkKYzHPwyOg63xxlYT+WC1LwgfS43sV8o4M/frbxxy2Q== X-Forward-Email-ID: 6a0b6cf5b74b0ebd362eee56 X-Forward-Email-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net, 149.28.215.223 X-Forward-Email-Version: 2.8.12 X-Forward-Email-Website: https://forwardemail.net X-Complaints-To: abuse@forwardemail.net X-Report-Abuse: abuse@forwardemail.net X-Report-Abuse-To: abuse@forwardemail.net From: Jonas Karlman To: Neil Armstrong , Kevin Hilman , Heiko Stuebner , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jerome Brunet , Martin Blumenstingl Cc: dri-devel@lists.freedesktop.org, linux-amlogic@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Jonas Karlman , linux-rockchip@lists.infradead.org Subject: [PATCH 03/13] drm/meson: dw-hdmi: Call dw_hdmi_remove() consistently Date: Mon, 18 May 2026 19:47:31 +0000 Message-ID: <20260518194744.2483580-4-jonas@kwiboo.se> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260518194744.2483580-1-jonas@kwiboo.se> References: <20260518194744.2483580-1-jonas@kwiboo.se> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" dw-hdmi export two similar pair of functions to probe()/remove() and bind()/unbind(), update to use dw_hdmi_remove() for consistency. dw_hdmi_probe() will drm_bridge_add() the dw-hdmi bridge, so it is expected that of_drm_find_and_get_bridge() always return the dw-hdmi bridge. Regardless, validate that the dw-hdmi can be found for consistent error handling. Also always ensure the IRQ handler and bridge is released before dw_hdmi_remove() is called. Signed-off-by: Jonas Karlman Reviewed-by: Neil Armstrong --- drivers/gpu/drm/meson/meson_dw_hdmi.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/meson/meson_dw_hdmi.c b/drivers/gpu/drm/meson/= meson_dw_hdmi.c index eafe7daf6ff1..9aafdc768f2b 100644 --- a/drivers/gpu/drm/meson/meson_dw_hdmi.c +++ b/drivers/gpu/drm/meson/meson_dw_hdmi.c @@ -775,10 +775,17 @@ static int meson_dw_hdmi_bind(struct device *dev, str= uct device *master, platform_set_drvdata(pdev, meson_dw_hdmi); =20 meson_dw_hdmi->hdmi =3D dw_hdmi_probe(pdev, &meson_dw_hdmi->dw_plat_data); - if (IS_ERR(meson_dw_hdmi->hdmi)) + if (IS_ERR(meson_dw_hdmi->hdmi)) { + devm_free_irq(dev, irq, meson_dw_hdmi); return PTR_ERR(meson_dw_hdmi->hdmi); + } =20 meson_dw_hdmi->bridge =3D of_drm_find_and_get_bridge(pdev->dev.of_node); + if (!meson_dw_hdmi->bridge) { + devm_free_irq(dev, irq, meson_dw_hdmi); + dw_hdmi_remove(meson_dw_hdmi->hdmi); + return -ENODEV; + } =20 DRM_DEBUG_DRIVER("HDMI controller initialized\n"); =20 @@ -793,8 +800,8 @@ static void meson_dw_hdmi_unbind(struct device *dev, st= ruct device *master, int irq =3D platform_get_irq(pdev, 0); =20 devm_free_irq(dev, irq, meson_dw_hdmi); - dw_hdmi_unbind(meson_dw_hdmi->hdmi); drm_bridge_put(meson_dw_hdmi->bridge); + dw_hdmi_remove(meson_dw_hdmi->hdmi); } =20 static const struct component_ops meson_dw_hdmi_ops =3D { --=20 2.54.0 From nobody Mon May 25 04:35:17 2026 Received: from smtp.forwardemail.net (smtp.forwardemail.net [121.127.44.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BC88A38B7B3 for ; Mon, 18 May 2026 19:48:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=121.127.44.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779133697; cv=none; b=rie0KCSPg82ZAsITh3q6wDlIv3Wb+qkNpoFJTUlkApNeEghT9tKVWL6rL/ecnfsQKizwTAe9VEGLajyCBKUI7mg/HKTr2Xqt5AyZkP1G9iAERx2LTTuECko4l+ZqFP3lCuQrwUZKBbBAbND5N4Xxkd4j0idBvbJhI7/GyoVmtcg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779133697; c=relaxed/simple; bh=ka/s4iTWMqKEy8oW+H11xARklRI8UMOhJ1uXVs4AWAg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Zkk7Ocrw8CWv7Kalr68xnmWKMCNHEtSdlbrbXX2mFlwsp315/BRAXZ3QxsZSGVs7CHdI/Rk7xKIp113BZlIFwhToIUzMdm0RebmyTmDTCaO3ClnSSX9Uau7vUoIdzu3yIhe8k6LtzOSrxLn7mY2kWewMvBEG2jk6vy8ukGAT81w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b=XuGCimcC; arc=none smtp.client-ip=121.127.44.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b="XuGCimcC" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se; h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To: Message-ID: Date: Subject: Cc: To: From; q=dns/txt; s=fe-e1b5cab7be; t=1779133695; bh=FchV9glvh5UhWTEiURTz/glfciz9Vw2jj22qgC9Vt+M=; b=XuGCimcC7YLQIicVcGOs7RbIhRWYHLPeVWV3jpZcBSXJMYSKNd7gqd3EkFLZykoATb609F8y6 5uMFuhYPSCrFmuX6qMIupm7jt9d+2INwjIoBl+cO7aHTQK6hE2+YWWZyg4TqAq+BQtl2WsDhptu UdTR0FcpwDPGEse5kFPobmp4iPJog5JA2gQ0+dYgS5zR3jH9MLvxF+7IdP9qAPpqQU8nG9XHlzG /uH1R5RBwEh+ogBZ3FR/dg01/kSIlUVE/uNfpaGLYXi1wErA/TcWVgBJyk3t+ZTUr6T4sMpQhta 4r9LzSbC4wEUv655Iih7bIoMGXSTE3d2fMWUZrcT7lpw== X-Forward-Email-ID: 6a0b6cf9b74b0ebd362eee90 X-Forward-Email-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net, 121.127.44.73 X-Forward-Email-Version: 2.8.12 X-Forward-Email-Website: https://forwardemail.net X-Complaints-To: abuse@forwardemail.net X-Report-Abuse: abuse@forwardemail.net X-Report-Abuse-To: abuse@forwardemail.net From: Jonas Karlman To: Neil Armstrong , Kevin Hilman , Heiko Stuebner , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jerome Brunet , Martin Blumenstingl Cc: dri-devel@lists.freedesktop.org, linux-amlogic@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Jonas Karlman , linux-rockchip@lists.infradead.org Subject: [PATCH 04/13] drm/meson: dw-hdmi: Drop call to drm_bridge_hpd_notify() Date: Mon, 18 May 2026 19:47:32 +0000 Message-ID: <20260518194744.2483580-5-jonas@kwiboo.se> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260518194744.2483580-1-jonas@kwiboo.se> References: <20260518194744.2483580-1-jonas@kwiboo.se> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Calls to both drm_helper_hpd_irq_event() and drm_bridge_hpd_notify() in the IRQ handler causes multiple hotplug uevents and modesets during an HPD interrupt. Change to only call drm_helper_hpd_irq_event() in IRQ handler to ensure only one hotplug uevent is triggered when the connection status or EDID has changed. The bridge connectors detect() func help ensure that any hpd_notify() func is called for all bridges in the chain. Signed-off-by: Jonas Karlman Reviewed-by: Neil Armstrong --- drivers/gpu/drm/meson/meson_dw_hdmi.c | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/drivers/gpu/drm/meson/meson_dw_hdmi.c b/drivers/gpu/drm/meson/= meson_dw_hdmi.c index 9aafdc768f2b..30099bf71aad 100644 --- a/drivers/gpu/drm/meson/meson_dw_hdmi.c +++ b/drivers/gpu/drm/meson/meson_dw_hdmi.c @@ -521,17 +521,8 @@ static irqreturn_t dw_hdmi_top_thread_irq(int irq, voi= d *dev_id) =20 /* HPD Events */ if (stat & (HDMITX_TOP_INTR_HPD_RISE | HDMITX_TOP_INTR_HPD_FALL) && - dw_hdmi->bridge) { - bool hpd_connected =3D false; - - if (stat & HDMITX_TOP_INTR_HPD_RISE) - hpd_connected =3D true; - + dw_hdmi->bridge) drm_helper_hpd_irq_event(dw_hdmi->bridge->dev); - drm_bridge_hpd_notify(dw_hdmi->bridge, - hpd_connected ? connector_status_connected - : connector_status_disconnected); - } =20 return IRQ_HANDLED; } --=20 2.54.0 From nobody Mon May 25 04:35:17 2026 Received: from smtp.forwardemail.net (smtp.forwardemail.net [121.127.44.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 55840391845 for ; Mon, 18 May 2026 19:48:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=121.127.44.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779133700; cv=none; b=J0NitZZsvZoeA/R8R/06r5n43uvQY4z7K6Kvpggd9JvZLGqYf62nrLKZS3jKhD/bLJXFM/WJmwFFThNhtn0QOe2HacPRJMYW50CgGbj1imtP8tYyi6+dl+v5cYzOTF1LenQUTnhkH4ds65WHd1rTIii0GepETkVCTEZjmfvzk6M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779133700; c=relaxed/simple; bh=917Qsz045wMP56yC4kGwbrhIyQT8gbWipTRaDHoNQA8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fP5WgOm5t/agpLs71EkcF3T5Fe0mTPrPwCURVPRFYk+ddtCwUui6igUIAkiW2pvSfIXNG9IEbfKmuo8p7UXqEphjRiNql+b+iRvRJdJbldo7rgCfC148QC1KcAXQIYYGzFyjkOhqR+5fZcGjgfnmMErWUIhnl9NRYY6zx39Z1I4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b=fxtTYUpf; arc=none smtp.client-ip=121.127.44.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b="fxtTYUpf" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se; h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To: Message-ID: Date: Subject: Cc: To: From; q=dns/txt; s=fe-e1b5cab7be; t=1779133697; bh=4zO/JslR4dtpUare48IWPEh7zby/iEoySFzUlGPOX5Q=; b=fxtTYUpfelm5+3PenQvU1Jlz5qg+LbRTCikqBPcscSdOVs+AreUdH+OFLCuSBs9+YPUWTRxjr w1z9E8hAfUGl4577+xal7tOBe+75Zs0phBYXMARcwLrW1ha5nmUMO/dFcGQbJKBcT+OSQBwtJ2s oh3wUeWH5R4zFCgiUdcCK3Svcw916zUcUILhRZ/Hzz5gL3RLMRVwG9hOSMRuBXq4jhXi0MDrSMe KxoPZIniEgMtQFCmBW786dhD4cHIa4KbU9pAutRmoYqcAZouhuomKBrGTWwvBsyDoQJrWCQg4cU +QV1sKc1WkCydEe8z137K8yilUEnK/D24qDt3DTTMDdA== X-Forward-Email-ID: 6a0b6cfdb74b0ebd362eeeab X-Forward-Email-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net, 121.127.44.73 X-Forward-Email-Version: 2.8.12 X-Forward-Email-Website: https://forwardemail.net X-Complaints-To: abuse@forwardemail.net X-Report-Abuse: abuse@forwardemail.net X-Report-Abuse-To: abuse@forwardemail.net From: Jonas Karlman To: Neil Armstrong , Kevin Hilman , Heiko Stuebner , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jerome Brunet , Martin Blumenstingl Cc: dri-devel@lists.freedesktop.org, linux-amlogic@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Jonas Karlman , linux-rockchip@lists.infradead.org Subject: [PATCH 05/13] drm/meson: encoder_hdmi: Use CEC phys addr from display_info Date: Mon, 18 May 2026 19:47:33 +0000 Message-ID: <20260518194744.2483580-6-jonas@kwiboo.se> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260518194744.2483580-1-jonas@kwiboo.se> References: <20260518194744.2483580-1-jonas@kwiboo.se> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The dw-hdmi bridge detect() func now updates EDID for the connector. Something that ensures that display_info.source_physical_address has an updated CEC phys addr when the hpd_notify() func is called. Change to use display_info source_physical_address directly instead of re-reading EDID to set the CEC phys addr at HPD interrupt. Signed-off-by: Jonas Karlman Acked-by: Hans Verkuil Reviewed-by: Neil Armstrong --- drivers/gpu/drm/meson/meson_encoder_hdmi.c | 26 ++++------------------ 1 file changed, 4 insertions(+), 22 deletions(-) diff --git a/drivers/gpu/drm/meson/meson_encoder_hdmi.c b/drivers/gpu/drm/m= eson/meson_encoder_hdmi.c index 55c0601df3c6..1b9a1d9ed3d3 100644 --- a/drivers/gpu/drm/meson/meson_encoder_hdmi.c +++ b/drivers/gpu/drm/meson/meson_encoder_hdmi.c @@ -330,28 +330,10 @@ static void meson_encoder_hdmi_hpd_notify(struct drm_= bridge *bridge, if (!encoder_hdmi->cec_notifier) return; =20 - if (status =3D=3D connector_status_connected) { - const struct drm_edid *drm_edid; - const struct edid *edid; - - drm_edid =3D drm_bridge_edid_read(encoder_hdmi->bridge.next_bridge, - encoder_hdmi->connector); - if (!drm_edid) - return; - - /* - * FIXME: The CEC physical address should be set using - * cec_notifier_set_phys_addr(encoder_hdmi->cec_notifier, - * connector->display_info.source_physical_address) from a path - * that has read the EDID and called - * drm_edid_connector_update(). - */ - edid =3D drm_edid_raw(drm_edid); - - cec_notifier_set_phys_addr_from_edid(encoder_hdmi->cec_notifier, edid); - - drm_edid_free(drm_edid); - } else + if (status =3D=3D connector_status_connected) + cec_notifier_set_phys_addr(encoder_hdmi->cec_notifier, + connector->display_info.source_physical_address); + else cec_notifier_phys_addr_invalidate(encoder_hdmi->cec_notifier); } =20 --=20 2.54.0 From nobody Mon May 25 04:35:17 2026 Received: from smtp.forwardemail.net (smtp.forwardemail.net [149.28.215.223]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5B2693845D9 for ; Mon, 18 May 2026 19:48:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=149.28.215.223 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779133728; cv=none; b=oRaCgd8hVGZ8jZEVVq5BXQNILqeWXwR3H+LysoUoBy08SmM7aa099lWIgnmjo733tHEDzBeJ331KtfewpvQHnbyTVG9hIA1QrlE3p0OThQ62bZ38+H1bXt4/Q4zjnvAWcLgVJVTJ6Ew0WIvwvN9XiWdx6gsY6I2VnVOhD5L25Do= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779133728; c=relaxed/simple; bh=mORSXrFGBg0IGfycvoM2O4IR3GewpXSN3n1j3BdQs0o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Dq702lynF2t6xd6RKyccz2QwqoI0JCnhZg+c99bVG0negmDrgBIkS7D7BEakTs/kpvgiH6+o5kaKpFJk/gXLLEORESUBwsKLHDdXtAfpxny7L7Fdfo+uJGUP1IkSpQKDh3p90pCaKtUSjUFy6ynb3Xxkf1lGIHw18pEUiiIUap4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b=lsUjAY0O; arc=none smtp.client-ip=149.28.215.223 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b="lsUjAY0O" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se; h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To: Message-ID: Date: Subject: Cc: To: From; q=dns/txt; s=fe-e1b5cab7be; t=1779133726; bh=FcxEYOPmNuM9yRHj6lWDMsbsVp/OdK4Trn0fMntUI3A=; b=lsUjAY0OUb4feFyQufx7tBSRhiBkfKWM7Iz0K4ASu/P48szpZs+uxqImrMFgqXHOJAH9n7aJI /sAELfNqZemucYBJHn7+/6ELtjQvVmRjclQHWAka5hFx/XrhYCPXmNk+Eioy7TYc5zt7ySCWafM E5oBysy0i006+N1pzf+0DoZ6PHaYGBnoif0f6kV1LUM1r7GTP72p4BY9XLbcBs4PDhAQkQOCyea pZbrMp5f0vGzCBMspeAFzQRybEW77511iXuQQWfvZMWDqfBqiq/xabCN9AfHjAtL55TcSm7jllU UvrBO/k8Q0m9ZHdzFTYkPbzJ0JX9X2dYVCM8METVatZQ== X-Forward-Email-ID: 6a0b6d02b74b0ebd362eeec6 X-Forward-Email-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net, 149.28.215.223 X-Forward-Email-Version: 2.8.12 X-Forward-Email-Website: https://forwardemail.net X-Complaints-To: abuse@forwardemail.net X-Report-Abuse: abuse@forwardemail.net X-Report-Abuse-To: abuse@forwardemail.net From: Jonas Karlman To: Neil Armstrong , Kevin Hilman , Heiko Stuebner , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jerome Brunet , Martin Blumenstingl Cc: dri-devel@lists.freedesktop.org, linux-amlogic@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Jonas Karlman , linux-rockchip@lists.infradead.org Subject: [PATCH 06/13] drm/meson: encoder_hdmi: Use bridge connector CEC notifier Date: Mon, 18 May 2026 19:47:34 +0000 Message-ID: <20260518194744.2483580-7-jonas@kwiboo.se> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260518194744.2483580-1-jonas@kwiboo.se> References: <20260518194744.2483580-1-jonas@kwiboo.se> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The dw-hdmi bridge detect() func now updates EDID and CEC phys addr for the connector and any registered generic CEC notifier. Replace the open-coded CEC notifier handling with use of the bridge CEC notifier op. Signed-off-by: Jonas Karlman Acked-by: Hans Verkuil Reviewed-by: Neil Armstrong --- drivers/gpu/drm/meson/Kconfig | 1 + drivers/gpu/drm/meson/meson_encoder_hdmi.c | 85 +++++----------------- 2 files changed, 19 insertions(+), 67 deletions(-) diff --git a/drivers/gpu/drm/meson/Kconfig b/drivers/gpu/drm/meson/Kconfig index 417f79829cf8..0dc5ca21e4fc 100644 --- a/drivers/gpu/drm/meson/Kconfig +++ b/drivers/gpu/drm/meson/Kconfig @@ -13,6 +13,7 @@ config DRM_MESON select REGMAP_MMIO select MESON_CANVAS select CEC_CORE if CEC_NOTIFIER + select DRM_DISPLAY_HDMI_CEC_NOTIFIER_HELPER if CEC_NOTIFIER =20 config DRM_MESON_DW_HDMI tristate "HDMI Synopsys Controller support for Amlogic Meson Display" diff --git a/drivers/gpu/drm/meson/meson_encoder_hdmi.c b/drivers/gpu/drm/m= eson/meson_encoder_hdmi.c index 1b9a1d9ed3d3..45104ef35344 100644 --- a/drivers/gpu/drm/meson/meson_encoder_hdmi.c +++ b/drivers/gpu/drm/meson/meson_encoder_hdmi.c @@ -16,8 +16,6 @@ #include #include =20 -#include - #include #include #include @@ -41,7 +39,6 @@ struct meson_encoder_hdmi { struct drm_connector *connector; struct meson_drm *priv; unsigned long output_bus_fmt; - struct cec_notifier *cec_notifier; }; =20 #define bridge_to_meson_encoder_hdmi(x) \ @@ -57,14 +54,6 @@ static int meson_encoder_hdmi_attach(struct drm_bridge *= bridge, &encoder_hdmi->bridge, flags); } =20 -static void meson_encoder_hdmi_detach(struct drm_bridge *bridge) -{ - struct meson_encoder_hdmi *encoder_hdmi =3D bridge_to_meson_encoder_hdmi(= bridge); - - cec_notifier_conn_unregister(encoder_hdmi->cec_notifier); - encoder_hdmi->cec_notifier =3D NULL; -} - static void meson_encoder_hdmi_set_vclk(struct meson_encoder_hdmi *encoder= _hdmi, const struct drm_display_mode *mode) { @@ -321,27 +310,9 @@ static int meson_encoder_hdmi_atomic_check(struct drm_= bridge *bridge, return 0; } =20 -static void meson_encoder_hdmi_hpd_notify(struct drm_bridge *bridge, - struct drm_connector *connector, - enum drm_connector_status status) -{ - struct meson_encoder_hdmi *encoder_hdmi =3D bridge_to_meson_encoder_hdmi(= bridge); - - if (!encoder_hdmi->cec_notifier) - return; - - if (status =3D=3D connector_status_connected) - cec_notifier_set_phys_addr(encoder_hdmi->cec_notifier, - connector->display_info.source_physical_address); - else - cec_notifier_phys_addr_invalidate(encoder_hdmi->cec_notifier); -} - static const struct drm_bridge_funcs meson_encoder_hdmi_bridge_funcs =3D { .attach =3D meson_encoder_hdmi_attach, - .detach =3D meson_encoder_hdmi_detach, .mode_valid =3D meson_encoder_hdmi_mode_valid, - .hpd_notify =3D meson_encoder_hdmi_hpd_notify, .atomic_enable =3D meson_encoder_hdmi_atomic_enable, .atomic_disable =3D meson_encoder_hdmi_atomic_disable, .atomic_get_input_bus_fmts =3D meson_encoder_hdmi_get_inp_bus_fmts, @@ -374,9 +345,9 @@ int meson_encoder_hdmi_probe(struct meson_drm *priv) =20 meson_encoder_hdmi->bridge.next_bridge =3D of_drm_find_and_get_bridge(rem= ote); if (!meson_encoder_hdmi->bridge.next_bridge) { - ret =3D dev_err_probe(priv->dev, -EPROBE_DEFER, - "Failed to find HDMI transceiver bridge\n"); - goto err_put_node; + of_node_put(remote); + return dev_err_probe(priv->dev, -EPROBE_DEFER, + "Failed to find HDMI transceiver bridge\n"); } =20 /* HDMI Encoder Bridge */ @@ -384,6 +355,13 @@ int meson_encoder_hdmi_probe(struct meson_drm *priv) meson_encoder_hdmi->bridge.type =3D DRM_MODE_CONNECTOR_HDMIA; meson_encoder_hdmi->bridge.interlace_allowed =3D true; =20 + pdev =3D of_find_device_by_node(remote); + of_node_put(remote); + if (pdev) { + meson_encoder_hdmi->bridge.ops |=3D DRM_BRIDGE_OP_HDMI_CEC_NOTIFIER; + meson_encoder_hdmi->bridge.hdmi_cec_dev =3D &pdev->dev; + } + drm_bridge_add(&meson_encoder_hdmi->bridge); =20 meson_encoder_hdmi->priv =3D priv; @@ -391,30 +369,24 @@ int meson_encoder_hdmi_probe(struct meson_drm *priv) /* Encoder */ ret =3D drm_simple_encoder_init(priv->drm, &meson_encoder_hdmi->encoder, DRM_MODE_ENCODER_TMDS); - if (ret) { - dev_err_probe(priv->dev, ret, "Failed to init HDMI encoder\n"); - goto err_put_node; - } + if (ret) + return dev_err_probe(priv->dev, ret, "Failed to init HDMI encoder\n"); =20 meson_encoder_hdmi->encoder.possible_crtcs =3D BIT(0); =20 /* Attach HDMI Encoder Bridge to Encoder */ ret =3D drm_bridge_attach(&meson_encoder_hdmi->encoder, &meson_encoder_hd= mi->bridge, NULL, DRM_BRIDGE_ATTACH_NO_CONNECTOR); - if (ret) { - dev_err_probe(priv->dev, ret, "Failed to attach bridge\n"); - goto err_put_node; - } + if (ret) + return dev_err_probe(priv->dev, ret, "Failed to attach bridge\n"); =20 /* Initialize & attach Bridge Connector */ meson_encoder_hdmi->connector =3D drm_bridge_connector_init(priv->drm, &meson_encoder_hdmi->encoder); - if (IS_ERR(meson_encoder_hdmi->connector)) { - ret =3D dev_err_probe(priv->dev, - PTR_ERR(meson_encoder_hdmi->connector), - "Unable to create HDMI bridge connector\n"); - goto err_put_node; - } + if (IS_ERR(meson_encoder_hdmi->connector)) + return dev_err_probe(priv->dev, + PTR_ERR(meson_encoder_hdmi->connector), + "Unable to create HDMI bridge connector\n"); =20 /* * We should have now in place: @@ -437,32 +409,11 @@ int meson_encoder_hdmi_probe(struct meson_drm *priv) /* Handle this here until handled by drm_bridge_connector_init() */ meson_encoder_hdmi->connector->ycbcr_420_allowed =3D true; =20 - pdev =3D of_find_device_by_node(remote); - of_node_put(remote); - if (pdev) { - struct cec_connector_info conn_info; - struct cec_notifier *notifier; - - cec_fill_conn_info_from_drm(&conn_info, meson_encoder_hdmi->connector); - - notifier =3D cec_notifier_conn_register(&pdev->dev, NULL, &conn_info); - if (!notifier) { - put_device(&pdev->dev); - return -ENOMEM; - } - - meson_encoder_hdmi->cec_notifier =3D notifier; - } - priv->encoders[MESON_ENC_HDMI] =3D meson_encoder_hdmi; =20 dev_dbg(priv->dev, "HDMI encoder initialized\n"); =20 return 0; - -err_put_node: - of_node_put(remote); - return ret; } =20 void meson_encoder_hdmi_remove(struct meson_drm *priv) --=20 2.54.0 From nobody Mon May 25 04:35:17 2026 Received: from smtp.forwardemail.net (smtp.forwardemail.net [121.127.44.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1970B3845D9 for ; Mon, 18 May 2026 19:48:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=121.127.44.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779133709; cv=none; b=CQbVlWP/jf0DnL/l68fZlT4eaSFzpWoP3qcFmqJIPipqwFXy2xtsamjtVYx/dUSXS2BDA7nA41U2nM30gHWSzRmTHMOI3Z6UF3i4Xja4p5tFL6IQtVbbE+H64udVwQuwx9193geW9uDigadLoHwmXADZbIB9BNR9fai1Y7vWe84= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779133709; c=relaxed/simple; bh=Xu/R8ymQnFSeDsiUQgvElNODiDm/TAfsqSChPUErOmE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=OOkROhFDYe2nszWSBzTIUzB2nM8bG90M01t2OO0j25p/ERUysfP8/wdnEHq5nxvV07eWjROk9GX8HiicSFoev4CKSaTvJ+U7N4MAGceySFTzcHJifWIQTkR8VAVXvWdvInmAMK9K6vam99fsMyTSpoJjUt2OchS70XZsYoVWMy8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b=XaXmi+a4; arc=none smtp.client-ip=121.127.44.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b="XaXmi+a4" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se; h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To: Message-ID: Date: Subject: Cc: To: From; q=dns/txt; s=fe-e1b5cab7be; t=1779133707; bh=rUWzeTlhp2CU5KEvkS4D0u4FPJCTowD3dhS+chglbQQ=; b=XaXmi+a45YSHCzX7XzZ0GzPOyjJw2EOVFYFHmKiUiOVva0jjHfCOGBbd8z4pw/PzVxbD0gvD/ 4hu57Awm4zbmhebHXYpZ1Swxn6SIYVFjz3wmdc6Nhviz1/72Bh8q5FiUVsPT+kowQpwhxrXRlmU pdS2ddsFIwpWy6ULg21PoUJsjab8ikI6DbzfMNvzmVSa/khywG7PGX4IRfE0r/k7CO3BqPaP4h9 Fnc+trI7yh1MW1Z6++Hj7t++pSmsAliPC23ytGIkj7Fgz4loAwd+JDW79AKMyC3NYDsg1rJ9Xqf faVMVcyfWjB9dtyE7d/jIiLwtLIJ/nK3L9sRMQQ69PkA== X-Forward-Email-ID: 6a0b6d06b74b0ebd362eeee1 X-Forward-Email-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net, 121.127.44.73 X-Forward-Email-Version: 2.8.12 X-Forward-Email-Website: https://forwardemail.net X-Complaints-To: abuse@forwardemail.net X-Report-Abuse: abuse@forwardemail.net X-Report-Abuse-To: abuse@forwardemail.net From: Jonas Karlman To: Neil Armstrong , Kevin Hilman , Heiko Stuebner , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jerome Brunet , Martin Blumenstingl Cc: dri-devel@lists.freedesktop.org, linux-amlogic@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Jonas Karlman , linux-rockchip@lists.infradead.org Subject: [PATCH 07/13] drm/meson: encoder_hdmi: Report ycbcr_420_allowed from encoder Date: Mon, 18 May 2026 19:47:35 +0000 Message-ID: <20260518194744.2483580-8-jonas@kwiboo.se> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260518194744.2483580-1-jonas@kwiboo.se> References: <20260518194744.2483580-1-jonas@kwiboo.se> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The bridge connector report ycbcr_420_allowed support when all bridges in the chain support ycbcr_420_allowed. Report ycbcr_420_allowed on the encoder bridge so that the bridge connector automatically can report correct ycbcr_420_allowed support. Signed-off-by: Jonas Karlman Reviewed-by: Neil Armstrong --- drivers/gpu/drm/meson/meson_encoder_hdmi.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/drivers/gpu/drm/meson/meson_encoder_hdmi.c b/drivers/gpu/drm/m= eson/meson_encoder_hdmi.c index 45104ef35344..484675cb8284 100644 --- a/drivers/gpu/drm/meson/meson_encoder_hdmi.c +++ b/drivers/gpu/drm/meson/meson_encoder_hdmi.c @@ -354,6 +354,7 @@ int meson_encoder_hdmi_probe(struct meson_drm *priv) meson_encoder_hdmi->bridge.of_node =3D priv->dev->of_node; meson_encoder_hdmi->bridge.type =3D DRM_MODE_CONNECTOR_HDMIA; meson_encoder_hdmi->bridge.interlace_allowed =3D true; + meson_encoder_hdmi->bridge.ycbcr_420_allowed =3D true; =20 pdev =3D of_find_device_by_node(remote); of_node_put(remote); @@ -406,9 +407,6 @@ int meson_encoder_hdmi_probe(struct meson_drm *priv) =20 drm_connector_attach_max_bpc_property(meson_encoder_hdmi->connector, 8, 8= ); =20 - /* Handle this here until handled by drm_bridge_connector_init() */ - meson_encoder_hdmi->connector->ycbcr_420_allowed =3D true; - priv->encoders[MESON_ENC_HDMI] =3D meson_encoder_hdmi; =20 dev_dbg(priv->dev, "HDMI encoder initialized\n"); --=20 2.54.0 From nobody Mon May 25 04:35:17 2026 Received: from smtp.forwardemail.net (smtp.forwardemail.net [121.127.44.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6F9F638F927 for ; Mon, 18 May 2026 19:48:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=121.127.44.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779133713; cv=none; b=JZmghx2XxO4eTwUUJW1jnJDYEamtrTeoGfilTJQO5nB0g9hvJnk+hPsSsUWPKnzlEd+XVtMlbpA21ROJ4HGZQZcYI84NfzrA9kVH30Ju8DkZaRQeebZhzZ7x1XYuBGdTyy346X03PBQUgWWGyrbsh7423r2Pi4CV+YrXtU+vXOI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779133713; c=relaxed/simple; bh=6+8Avn5yfFmqFtI2F3qfN6HohPJMhGmEby5Czafz2sQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=sqpUVEamzrzWGajZUdFCuy6sLo7fd18Sx1KWBhbm/7y7pj3QFxVqy7o7oKu0K8ZG3nlxxv/lyyIpFJm0hKLVbmr0RZUMj3eo8B9S2Bn66HVMNP5/StC1PIi+89QVgMKEDSWmUc3KtYXsi9hanglLziEDLSvqWlow4x/ii+6/FOs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b=dQ6EBiOT; arc=none smtp.client-ip=121.127.44.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b="dQ6EBiOT" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se; h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To: Message-ID: Date: Subject: Cc: To: From; q=dns/txt; s=fe-e1b5cab7be; t=1779133710; bh=7JC4z5SSlIB4qdrFliBTqw3gKNDB+YCBzwjUWTmrrdA=; b=dQ6EBiOTvM5agiBBryecJbdr+jYuxPaEqYwUzwvbxaOGcHJzjj4Wsr3bazUgh53o8hBBixQMg Qzeg4+6fNGB1h5CaTare6N+4s0ghrHYbf+kM8yNZz61wKuARc36zytS1W4fJrR9d387IjpYExsb lXiNjv00sT2RNGLY+ks3LNv1BO1WAJMoWHWCUud+WaqoWtnU3EtfzqymZXYFQEpvkfpGRB9pCWA YhS8nx/sr+ibtmBJ4n/yYcuUgHOKIc/oilrX4FeUV2ri0X+Ew6hDDiLF7FZoCP4ioOQI0LaQZJL SzHNsYUxWSavwerqA+RVm8uEDNbASQKV1zBTGq8Y1R2g== X-Forward-Email-ID: 6a0b6d0ab74b0ebd362eeefc X-Forward-Email-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net, 121.127.44.73 X-Forward-Email-Version: 2.8.12 X-Forward-Email-Website: https://forwardemail.net X-Complaints-To: abuse@forwardemail.net X-Report-Abuse: abuse@forwardemail.net X-Report-Abuse-To: abuse@forwardemail.net From: Jonas Karlman To: Neil Armstrong , Kevin Hilman , Heiko Stuebner , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jerome Brunet , Martin Blumenstingl Cc: dri-devel@lists.freedesktop.org, linux-amlogic@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Jonas Karlman , linux-rockchip@lists.infradead.org Subject: [PATCH 08/13] drm/meson: dw-hdmi: Use local dev variable consistently in bind() Date: Mon, 18 May 2026 19:47:36 +0000 Message-ID: <20260518194744.2483580-9-jonas@kwiboo.se> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260518194744.2483580-1-jonas@kwiboo.se> References: <20260518194744.2483580-1-jonas@kwiboo.se> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Replace indirect struct device accesses via pdev->dev with the local dev parameter already available in meson_dw_hdmi_bind(), for consistency and readability. Signed-off-by: Jonas Karlman Reviewed-by: Neil Armstrong --- drivers/gpu/drm/meson/meson_dw_hdmi.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/meson/meson_dw_hdmi.c b/drivers/gpu/drm/meson/= meson_dw_hdmi.c index 30099bf71aad..fcd2426af9fc 100644 --- a/drivers/gpu/drm/meson/meson_dw_hdmi.c +++ b/drivers/gpu/drm/meson/meson_dw_hdmi.c @@ -671,9 +671,9 @@ static int meson_dw_hdmi_bind(struct device *dev, struc= t device *master, =20 DRM_DEBUG_DRIVER("\n"); =20 - match =3D of_device_get_match_data(&pdev->dev); + match =3D of_device_get_match_data(dev); if (!match) { - dev_err(&pdev->dev, "failed to get match data\n"); + dev_err(dev, "failed to get match data\n"); return -ENODEV; } =20 @@ -771,7 +771,7 @@ static int meson_dw_hdmi_bind(struct device *dev, struc= t device *master, return PTR_ERR(meson_dw_hdmi->hdmi); } =20 - meson_dw_hdmi->bridge =3D of_drm_find_and_get_bridge(pdev->dev.of_node); + meson_dw_hdmi->bridge =3D of_drm_find_and_get_bridge(dev->of_node); if (!meson_dw_hdmi->bridge) { devm_free_irq(dev, irq, meson_dw_hdmi); dw_hdmi_remove(meson_dw_hdmi->hdmi); --=20 2.54.0 From nobody Mon May 25 04:35:17 2026 Received: from smtp.forwardemail.net (smtp.forwardemail.net [121.127.44.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 00A8F391842 for ; Mon, 18 May 2026 19:48:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=121.127.44.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779133731; cv=none; b=tAPxH9IMwzhMy10bEeQFvwmg6HmxGxgieWBtonxNal4sKBx1aBGkor9eKx9TM1h6ng6IjbeDQf4bfCqAt3h35sMfKDs3QujPv3+l3QDBLIt9braOUN/IHhSrX8xTEwAXDSN4ATvjoD+Npx0obZpcN4bYLSDgz+UwzMQ0aTKMmJE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779133731; c=relaxed/simple; bh=g7POvyrvNtsiLF4GvPfn5P/OjzE7yzrfC+qznWDRV2Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qNw69hpmn2gxjgrnDXo3cKegMFrxjcHPcWGtkCuNpMv24QUQKzmSPZ3UEwb0achN1c2zX1Tw5DFnUd6LLNa+PLr338PPe1r03U4wZYiuyhRcoy+7/MahN54lHMC+FS9pFYPtCYnhuoH60/OWkB40UUA89/vKzjHrR4j8w+eGzfA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b=eyczZspX; arc=none smtp.client-ip=121.127.44.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b="eyczZspX" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se; h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To: Message-ID: Date: Subject: Cc: To: From; q=dns/txt; s=fe-e1b5cab7be; t=1779133729; bh=l5OMj0CSdajzATG6j/dCDhDtBgJ3gMytB+btoMqUqdQ=; b=eyczZspXGNb5oSD3Vtvvv2v/EWuMO8WkyaAFnH841dfF7TmamPLt4js8zjgQx/lF0BxWJ4ZhP 9oml/ak0TmkssAHCXoXeoajCwK6dZHEKU7YVrtN01Kip4oRRVjovXR3U0XNw25LNp+e6Wg9QQgG ez4VagmyAZV9EawgJUoR+YbHE5irLJkGBTOf7t1ju8IDigdPqFodcp1LLFXDt2yPawREDt1bOsz I6Dygj8jgGRmMhdCSbnBwUjwc7fSMnJWzucKDXomwRWhT+wrk/JNuWDvOfGdQ4THGj4YNpmKHs2 UgBw5QDrUsMZbr08eZ3QuYtGLeXFyrCQ/jhPj2W3G9iw== X-Forward-Email-ID: 6a0b6d0fb74b0ebd362eef17 X-Forward-Email-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net, 121.127.44.73 X-Forward-Email-Version: 2.8.12 X-Forward-Email-Website: https://forwardemail.net X-Complaints-To: abuse@forwardemail.net X-Report-Abuse: abuse@forwardemail.net X-Report-Abuse-To: abuse@forwardemail.net From: Jonas Karlman To: Neil Armstrong , Kevin Hilman , Heiko Stuebner , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jerome Brunet , Martin Blumenstingl Cc: dri-devel@lists.freedesktop.org, linux-amlogic@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Jonas Karlman , linux-rockchip@lists.infradead.org Subject: [PATCH 09/13] drm/meson: dw-hdmi: Use devm_clk_get_enabled() helper Date: Mon, 18 May 2026 19:47:37 +0000 Message-ID: <20260518194744.2483580-10-jonas@kwiboo.se> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260518194744.2483580-1-jonas@kwiboo.se> References: <20260518194744.2483580-1-jonas@kwiboo.se> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Change to use the devm_clk_get_enabled() helper instead of using an open-coded variant. Signed-off-by: Jonas Karlman Reviewed-by: Neil Armstrong --- drivers/gpu/drm/meson/meson_dw_hdmi.c | 48 +++++++++------------------ 1 file changed, 16 insertions(+), 32 deletions(-) diff --git a/drivers/gpu/drm/meson/meson_dw_hdmi.c b/drivers/gpu/drm/meson/= meson_dw_hdmi.c index fcd2426af9fc..d0cf2042d41c 100644 --- a/drivers/gpu/drm/meson/meson_dw_hdmi.c +++ b/drivers/gpu/drm/meson/meson_dw_hdmi.c @@ -634,29 +634,6 @@ static void meson_dw_hdmi_init(struct meson_dw_hdmi *m= eson_dw_hdmi) =20 } =20 -static void meson_disable_clk(void *data) -{ - clk_disable_unprepare(data); -} - -static int meson_enable_clk(struct device *dev, char *name) -{ - struct clk *clk; - int ret; - - clk =3D devm_clk_get(dev, name); - if (IS_ERR(clk)) { - dev_err(dev, "Unable to get %s pclk\n", name); - return PTR_ERR(clk); - } - - ret =3D clk_prepare_enable(clk); - if (!ret) - ret =3D devm_add_action_or_reset(dev, meson_disable_clk, clk); - - return ret; -} - static int meson_dw_hdmi_bind(struct device *dev, struct device *master, void *data) { @@ -666,6 +643,7 @@ static int meson_dw_hdmi_bind(struct device *dev, struc= t device *master, struct drm_device *drm =3D data; struct meson_drm *priv =3D drm->dev_private; struct dw_hdmi_plat_data *dw_plat_data; + struct clk *clk; int irq; int ret; =20 @@ -716,17 +694,23 @@ static int meson_dw_hdmi_bind(struct device *dev, str= uct device *master, if (IS_ERR(meson_dw_hdmi->hdmitx)) return PTR_ERR(meson_dw_hdmi->hdmitx); =20 - ret =3D meson_enable_clk(dev, "isfr"); - if (ret) - return ret; + clk =3D devm_clk_get_enabled(dev, "isfr"); + if (IS_ERR(clk)) { + dev_err(dev, "Unable to get isfr pclk\n"); + return PTR_ERR(clk); + } =20 - ret =3D meson_enable_clk(dev, "iahb"); - if (ret) - return ret; + clk =3D devm_clk_get_enabled(dev, "iahb"); + if (IS_ERR(clk)) { + dev_err(dev, "Unable to get iahb pclk\n"); + return PTR_ERR(clk); + } =20 - ret =3D meson_enable_clk(dev, "venci"); - if (ret) - return ret; + clk =3D devm_clk_get_enabled(dev, "venci"); + if (IS_ERR(clk)) { + dev_err(dev, "Unable to get venci pclk\n"); + return PTR_ERR(clk); + } =20 dw_plat_data->regm =3D devm_regmap_init(dev, NULL, meson_dw_hdmi, &meson_dw_hdmi_regmap_config); --=20 2.54.0 From nobody Mon May 25 04:35:17 2026 Received: from smtp.forwardemail.net (smtp.forwardemail.net [121.127.44.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2B1C7391844 for ; Mon, 18 May 2026 19:48:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=121.127.44.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779133731; cv=none; b=WA1eLmUTrpCNqhWPWIhEyM5nlUn31Wt58CS5nrAcEwzLQTv46YRUgapLzX+5/eucU011VG09fxL0kzd13a2CP3jMdqCEiGJPb8XTHxCzaiSwHVt6tjH5/J2jXzJTfFH1vsgwEnFJAHxVYBoQlfxvyI4/LK1avWCksF77ogXRv/I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779133731; c=relaxed/simple; bh=5Z2aNGX9PcUAx5IXo0ncyCh1noi6YluhOevF8AkR4vk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YS4qYZKmCmfhGwUxq8OqKyZhqjMVZoUg+p7O+Xs0vnb4HuUB0NniLJWKvj0VdKJWmTHUpAG5O2qeTe1dtwq7D4b5cJM50I2MymF/F16J3Ai3wGTXOw9xldOu8g+qmpPCs8GckY6bIcQEj/uoN9fVGhK3CmkDYL6eyv2L/I851+g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b=vXfwRLdx; arc=none smtp.client-ip=121.127.44.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b="vXfwRLdx" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se; h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To: Message-ID: Date: Subject: Cc: To: From; q=dns/txt; s=fe-e1b5cab7be; t=1779133729; bh=29OmGxotXpQtQ8RYOjbQxdOif6EH1gz/kJ3dPWnQUVk=; b=vXfwRLdxbDuzgx9D4jsXj6de/fq56FNucbMBODRrdv2+dq91wDnV9/Rts6e1Rr3lZowXkaNvl 8ckIyD80ySE5I+PgW+MuQ8e6jrXwuJ+XraFZ8isQkMnPa94SpuG8+ltMl1wBo+4o8WtN/roTnBO r2n7sg8PL4lXh6HmPcY0B1YqL2xZt69QZMqKIgKEP0vbaqcNj4U+BLlAQVOYMFXXElRr3yfQ7tf UdKQlbHoM6SjSYjd5/wEJS9hUFojwk8ofUjgHqNy9JlkuqDv0PhJ0xT6NiW0kMd32wqRRNO5zxP bOloAeW7axDmYl2WmZnlHWUsYCYLhuEaQV816s5mYENA== X-Forward-Email-ID: 6a0b6d13b74b0ebd362eef32 X-Forward-Email-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net, 121.127.44.73 X-Forward-Email-Version: 2.8.12 X-Forward-Email-Website: https://forwardemail.net X-Complaints-To: abuse@forwardemail.net X-Report-Abuse: abuse@forwardemail.net X-Report-Abuse-To: abuse@forwardemail.net From: Jonas Karlman To: Neil Armstrong , Kevin Hilman , Heiko Stuebner , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jerome Brunet , Martin Blumenstingl Cc: dri-devel@lists.freedesktop.org, linux-amlogic@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Jonas Karlman , linux-rockchip@lists.infradead.org Subject: [PATCH 10/13] drm/meson: dw-hdmi: Use dev_err_probe() to report errors Date: Mon, 18 May 2026 19:47:38 +0000 Message-ID: <20260518194744.2483580-11-jonas@kwiboo.se> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260518194744.2483580-1-jonas@kwiboo.se> References: <20260518194744.2483580-1-jonas@kwiboo.se> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Change to use dev_err_probe() to report bind() errors consistently. Signed-off-by: Jonas Karlman Reviewed-by: Neil Armstrong --- drivers/gpu/drm/meson/meson_dw_hdmi.c | 65 +++++++++++++-------------- 1 file changed, 30 insertions(+), 35 deletions(-) diff --git a/drivers/gpu/drm/meson/meson_dw_hdmi.c b/drivers/gpu/drm/meson/= meson_dw_hdmi.c index d0cf2042d41c..1dd59196ff7f 100644 --- a/drivers/gpu/drm/meson/meson_dw_hdmi.c +++ b/drivers/gpu/drm/meson/meson_dw_hdmi.c @@ -650,10 +650,9 @@ static int meson_dw_hdmi_bind(struct device *dev, stru= ct device *master, DRM_DEBUG_DRIVER("\n"); =20 match =3D of_device_get_match_data(dev); - if (!match) { - dev_err(dev, "failed to get match data\n"); - return -ENODEV; - } + if (!match) + return dev_err_probe(dev, -ENODEV, + "Failed to get match data\n"); =20 meson_dw_hdmi =3D devm_kzalloc(dev, sizeof(*meson_dw_hdmi), GFP_KERNEL); @@ -667,50 +666,45 @@ static int meson_dw_hdmi_bind(struct device *dev, str= uct device *master, =20 ret =3D devm_regulator_get_enable_optional(dev, "hdmi"); if (ret < 0 && ret !=3D -ENODEV) - return ret; + return dev_err_probe(dev, ret, + "Failed to get/enable hdmi regulator\n"); =20 meson_dw_hdmi->hdmitx_apb =3D devm_reset_control_get_exclusive(dev, "hdmitx_apb"); - if (IS_ERR(meson_dw_hdmi->hdmitx_apb)) { - dev_err(dev, "Failed to get hdmitx_apb reset\n"); - return PTR_ERR(meson_dw_hdmi->hdmitx_apb); - } + if (IS_ERR(meson_dw_hdmi->hdmitx_apb)) + return dev_err_probe(dev, PTR_ERR(meson_dw_hdmi->hdmitx_apb), + "Failed to get hdmitx_apb reset\n"); =20 meson_dw_hdmi->hdmitx_ctrl =3D devm_reset_control_get_exclusive(dev, "hdmitx"); - if (IS_ERR(meson_dw_hdmi->hdmitx_ctrl)) { - dev_err(dev, "Failed to get hdmitx reset\n"); - return PTR_ERR(meson_dw_hdmi->hdmitx_ctrl); - } + if (IS_ERR(meson_dw_hdmi->hdmitx_ctrl)) + return dev_err_probe(dev, PTR_ERR(meson_dw_hdmi->hdmitx_ctrl), + "Failed to get hdmitx reset\n"); =20 meson_dw_hdmi->hdmitx_phy =3D devm_reset_control_get_exclusive(dev, "hdmitx_phy"); - if (IS_ERR(meson_dw_hdmi->hdmitx_phy)) { - dev_err(dev, "Failed to get hdmitx_phy reset\n"); - return PTR_ERR(meson_dw_hdmi->hdmitx_phy); - } + if (IS_ERR(meson_dw_hdmi->hdmitx_phy)) + return dev_err_probe(dev, PTR_ERR(meson_dw_hdmi->hdmitx_phy), + "Failed to get hdmitx_phy reset\n"); =20 meson_dw_hdmi->hdmitx =3D devm_platform_ioremap_resource(pdev, 0); if (IS_ERR(meson_dw_hdmi->hdmitx)) return PTR_ERR(meson_dw_hdmi->hdmitx); =20 clk =3D devm_clk_get_enabled(dev, "isfr"); - if (IS_ERR(clk)) { - dev_err(dev, "Unable to get isfr pclk\n"); - return PTR_ERR(clk); - } + if (IS_ERR(clk)) + return dev_err_probe(dev, PTR_ERR(clk), + "Failed to get isfr pclk\n"); =20 clk =3D devm_clk_get_enabled(dev, "iahb"); - if (IS_ERR(clk)) { - dev_err(dev, "Unable to get iahb pclk\n"); - return PTR_ERR(clk); - } + if (IS_ERR(clk)) + return dev_err_probe(dev, PTR_ERR(clk), + "Failed to get iahb pclk\n"); =20 clk =3D devm_clk_get_enabled(dev, "venci"); - if (IS_ERR(clk)) { - dev_err(dev, "Unable to get venci pclk\n"); - return PTR_ERR(clk); - } + if (IS_ERR(clk)) + return dev_err_probe(dev, PTR_ERR(clk), + "Failed to get venci pclk\n"); =20 dw_plat_data->regm =3D devm_regmap_init(dev, NULL, meson_dw_hdmi, &meson_dw_hdmi_regmap_config); @@ -724,10 +718,9 @@ static int meson_dw_hdmi_bind(struct device *dev, stru= ct device *master, ret =3D devm_request_threaded_irq(dev, irq, dw_hdmi_top_irq, dw_hdmi_top_thread_irq, IRQF_SHARED, "dw_hdmi_top_irq", meson_dw_hdmi); - if (ret) { - dev_err(dev, "Failed to request hdmi top irq\n"); - return ret; - } + if (ret) + return dev_err_probe(dev, ret, + "Failed to request hdmi top irq\n"); =20 meson_dw_hdmi_init(meson_dw_hdmi); =20 @@ -752,14 +745,16 @@ static int meson_dw_hdmi_bind(struct device *dev, str= uct device *master, meson_dw_hdmi->hdmi =3D dw_hdmi_probe(pdev, &meson_dw_hdmi->dw_plat_data); if (IS_ERR(meson_dw_hdmi->hdmi)) { devm_free_irq(dev, irq, meson_dw_hdmi); - return PTR_ERR(meson_dw_hdmi->hdmi); + return dev_err_probe(dev, PTR_ERR(meson_dw_hdmi->hdmi), + "Failed to probe dw-hdmi bridge\n"); } =20 meson_dw_hdmi->bridge =3D of_drm_find_and_get_bridge(dev->of_node); if (!meson_dw_hdmi->bridge) { devm_free_irq(dev, irq, meson_dw_hdmi); dw_hdmi_remove(meson_dw_hdmi->hdmi); - return -ENODEV; + return dev_err_probe(dev, -ENODEV, + "Failed to find dw-hdmi bridge\n"); } =20 DRM_DEBUG_DRIVER("HDMI controller initialized\n"); --=20 2.54.0 From nobody Mon May 25 04:35:17 2026 Received: from smtp.forwardemail.net (smtp.forwardemail.net [121.127.44.66]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 494FF392C5F for ; Mon, 18 May 2026 19:48:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=121.127.44.66 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779133735; cv=none; b=mLRlQcfW7tPdg6lvJ7HtO9vrtfXPKo/bEUupiSvUVVloSJ35EXj9FEO/oUqqpVMyVdAiTa2vZ9d7nlVrz9XlV7caqZxsNExt12mEDvO12BCx3jS3fniBFrF1CnFjOCzhzAAT0V18Q/pvAf4Fmf1yykumjL3RWExuKnndx6ngyDg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779133735; c=relaxed/simple; bh=vBZKKuYPoCQKSDEPNlKLF2xvzonbFYj5Mcp0oGCoCCc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fA6aWL2uFq6CHo/bha+rpfYDGRB8KDoFO9KcTmk5TU0mKGljOsPY6d9mlkCDIuWMA0GX2Q8jh3TmVkD9ceG5EayYGTljUsWJ4o87P1MMREe5bIV/qK46PFUaflPtc9uY0GHFAkJosg265LVQtnes5XAss/dDZGWu8GhuWztdQi8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b=WYrZGCyD; arc=none smtp.client-ip=121.127.44.66 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b="WYrZGCyD" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se; h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To: Message-ID: Date: Subject: Cc: To: From; q=dns/txt; s=fe-e1b5cab7be; t=1779133731; bh=fvEaZQvi82SxaGEnMSzH5YpUg8QLUYBGz0XPExRQPFs=; b=WYrZGCyDXFAQq0rpy0fKcZhTpin+KCUcDSFi+hzDvkG8JLKHCG0Ew8lTeRWGX98IUf8ED6ri5 NQxDhsUxowlP97Qxa3x76oPi8+YKo9KnNXwVwbMasFYXpyg62/1LEilH0eQAEgjQYzsh1QDVJjq qk1cqczDC4VmDwkf7xfCTovXCGngPghZXm5q4zB2WW7+4u7wffVyikK8R1tRH044hd0J4DAVmTA kJmY1tc87jY96nHMD5ZG25kuC3TDuDXQdrQk2yW8Y3MlXhrZbL/ZnoQHuW8CA6/ROsvti5AXYxp 25lsmyvSoE9yYJdB8sohcy7yKFxkI1URhVn7Et5l4CeA== X-Forward-Email-ID: 6a0b6d18b74b0ebd362eef4d X-Forward-Email-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net, 121.127.44.66 X-Forward-Email-Version: 2.8.12 X-Forward-Email-Website: https://forwardemail.net X-Complaints-To: abuse@forwardemail.net X-Report-Abuse: abuse@forwardemail.net X-Report-Abuse-To: abuse@forwardemail.net From: Jonas Karlman To: Neil Armstrong , Kevin Hilman , Heiko Stuebner , Andrzej Hajda , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: Jerome Brunet , Martin Blumenstingl , dri-devel@lists.freedesktop.org, linux-amlogic@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org Subject: [PATCH 11/13] drm/bridge: dw-hdmi: Export dw_hdmi_schedule_hpd_work() helper Date: Mon, 18 May 2026 19:47:39 +0000 Message-ID: <20260518194744.2483580-12-jonas@kwiboo.se> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260518194744.2483580-1-jonas@kwiboo.se> References: <20260518194744.2483580-1-jonas@kwiboo.se> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Export a dw_hdmi_schedule_hpd_work() helper that schedule the HPD delayed work. Primarily to be used by the meson dw-hdmi driver. Signed-off-by: Jonas Karlman --- drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 11 +++++++++-- include/drm/bridge/dw_hdmi.h | 2 ++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/br= idge/synopsys/dw-hdmi.c index 99dd62b6becf..54d75317ce9c 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -3014,8 +3014,7 @@ static irqreturn_t dw_hdmi_hardirq(int irq, void *dev= _id) status =3D=3D connector_status_connected ? "plugin" : "plugout"); =20 - mod_delayed_work(system_percpu_wq, &hdmi->hpd_work, - msecs_to_jiffies(HOTPLUG_DEBOUNCE_MS)); + dw_hdmi_schedule_hpd_work(hdmi); =20 hdmi_writeb(hdmi, intr_stat, HDMI_IH_PHY_STAT0); hdmi_writeb(hdmi, ~HDMI_IH_PHY_STAT0_HPD, HDMI_IH_MUTE_PHY_STAT0); @@ -3025,6 +3024,14 @@ static irqreturn_t dw_hdmi_hardirq(int irq, void *de= v_id) return ret; } =20 +void dw_hdmi_schedule_hpd_work(struct dw_hdmi *hdmi) +{ + if (!IS_ERR_OR_NULL(hdmi)) + mod_delayed_work(system_percpu_wq, &hdmi->hpd_work, + msecs_to_jiffies(HOTPLUG_DEBOUNCE_MS)); +} +EXPORT_SYMBOL_GPL(dw_hdmi_schedule_hpd_work); + static void dw_hdmi_hpd_work(struct work_struct *work) { struct dw_hdmi *hdmi =3D container_of(work, struct dw_hdmi, hpd_work.work= ); diff --git a/include/drm/bridge/dw_hdmi.h b/include/drm/bridge/dw_hdmi.h index 10013b8d3adb..c56d1775f04a 100644 --- a/include/drm/bridge/dw_hdmi.h +++ b/include/drm/bridge/dw_hdmi.h @@ -184,6 +184,8 @@ struct dw_hdmi *dw_hdmi_bind(struct platform_device *pd= ev, =20 void dw_hdmi_resume(struct dw_hdmi *hdmi); =20 +void dw_hdmi_schedule_hpd_work(struct dw_hdmi *hdmi); + int dw_hdmi_set_plugged_cb(struct dw_hdmi *hdmi, hdmi_codec_plugged_cb fn, struct device *codec_dev); void dw_hdmi_set_sample_non_pcm(struct dw_hdmi *hdmi, unsigned int non_pcm= ); --=20 2.54.0 From nobody Mon May 25 04:35:17 2026 Received: from smtp.forwardemail.net (smtp.forwardemail.net [121.127.44.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3538A391846 for ; Mon, 18 May 2026 19:48:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=121.127.44.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779133731; cv=none; b=gLcbjUfqsYLbkMNJbwUBt4XCRYMlqYZ7aoivBgKvwTonfZVLRprnADroTxzgbAayTG05krq4741p+fH3JoMRZFL1wx9FLVz2fIDNJ+p9KLj7jd0V+dA5hQmnAQ0r7lAOw+Z1gk4Ioic5iisf4GxMvfWnQF89GxvRuNXE0H5WzcA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779133731; c=relaxed/simple; bh=hqkhIrRusPXzu06lmy9h0C8Ei5RsiOHrSI//v2y+Sog=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=CO6rysvXsxA1Pz3emsiirrh+yEs6fCMitbBwcwEFQWGVzk5ojhYnmoBt9cX3lvWNasarjfg9i0dKnWHppG4zDtl8E9iD8xW4kbPXvSlV2V/273VhxXpzNuyOSvVULdLadD9iIxIuVwSn59LTlVuzsVKWkHfgbTAIqzVgLqsBUf8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b=fVOt15Be; arc=none smtp.client-ip=121.127.44.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b="fVOt15Be" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se; h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To: Message-ID: Date: Subject: Cc: To: From; q=dns/txt; s=fe-e1b5cab7be; t=1779133729; bh=P1OIqjzoD97WJDMvkcHJxKFh2vpQep87U1vwwejFjdw=; b=fVOt15BeTWyTPIU2qQfZ6QRyqwW0EiB9CMAkNgnY3DbjtAfYCyCp8DhJ8KvaGOXYoW461GUd7 xH9RsHbGX0ilnzCMKGrlFWH25E1d/xmRETq8x/8bvFSNMTgf9Urn7yMTZvdKClvvdEwMvlkKX3o zNld1lspSzw97TtjqwV8PBMLpNtQqrI1trupptwicuWSXj82CnKrMKObKINSpsnNyDgdWd10H3O UQoSGJDwlo3n25vjYZIQesL3EBzA1KlZ9Br8RHtjaYdWvUpan//4X8NS2WQHR9JlkS4u62QztJt BJfQ3fCAsZyW5Ba+NJO6zTR7WZ5ZIjZsGwNi11wotujg== X-Forward-Email-ID: 6a0b6d1cb74b0ebd362eef6a X-Forward-Email-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net, 121.127.44.73 X-Forward-Email-Version: 2.8.12 X-Forward-Email-Website: https://forwardemail.net X-Complaints-To: abuse@forwardemail.net X-Report-Abuse: abuse@forwardemail.net X-Report-Abuse-To: abuse@forwardemail.net From: Jonas Karlman To: Neil Armstrong , Kevin Hilman , Heiko Stuebner , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jerome Brunet , Martin Blumenstingl Cc: dri-devel@lists.freedesktop.org, linux-amlogic@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Jonas Karlman , linux-rockchip@lists.infradead.org Subject: [PATCH 12/13] drm/meson: dw-hdmi: Use dw_hdmi_schedule_hpd_work() helper Date: Mon, 18 May 2026 19:47:40 +0000 Message-ID: <20260518194744.2483580-13-jonas@kwiboo.se> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260518194744.2483580-1-jonas@kwiboo.se> References: <20260518194744.2483580-1-jonas@kwiboo.se> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Change to use the dw-hdmi HPD delayed work to handle HPD events. Also merge top and bottom half IRQ handlers to simplify IRQ handling now that HPD event is handled using a delayed work. Signed-off-by: Jonas Karlman --- drivers/gpu/drm/meson/meson_dw_hdmi.c | 26 +++++--------------------- 1 file changed, 5 insertions(+), 21 deletions(-) diff --git a/drivers/gpu/drm/meson/meson_dw_hdmi.c b/drivers/gpu/drm/meson/= meson_dw_hdmi.c index 1dd59196ff7f..7b465e216759 100644 --- a/drivers/gpu/drm/meson/meson_dw_hdmi.c +++ b/drivers/gpu/drm/meson/meson_dw_hdmi.c @@ -145,7 +145,6 @@ struct meson_dw_hdmi { struct reset_control *hdmitx_apb; struct reset_control *hdmitx_ctrl; struct reset_control *hdmitx_phy; - u32 irq_stat; struct dw_hdmi *hdmi; struct drm_bridge *bridge; }; @@ -498,10 +497,10 @@ static irqreturn_t dw_hdmi_top_irq(int irq, void *dev= _id) stat =3D dw_hdmi->data->top_read(dw_hdmi, HDMITX_TOP_INTR_STAT); dw_hdmi->data->top_write(dw_hdmi, HDMITX_TOP_INTR_STAT_CLR, stat); =20 - /* HPD Events, handle in the threaded interrupt handler */ + /* HPD Events, handle in delayed work */ if (stat & (HDMITX_TOP_INTR_HPD_RISE | HDMITX_TOP_INTR_HPD_FALL)) { - dw_hdmi->irq_stat =3D stat; - return IRQ_WAKE_THREAD; + dw_hdmi_schedule_hpd_work(dw_hdmi->hdmi); + return IRQ_HANDLED; } =20 /* HDMI Controller Interrupt */ @@ -513,20 +512,6 @@ static irqreturn_t dw_hdmi_top_irq(int irq, void *dev_= id) return IRQ_HANDLED; } =20 -/* Threaded interrupt handler to manage HPD events */ -static irqreturn_t dw_hdmi_top_thread_irq(int irq, void *dev_id) -{ - struct meson_dw_hdmi *dw_hdmi =3D dev_id; - u32 stat =3D dw_hdmi->irq_stat; - - /* HPD Events */ - if (stat & (HDMITX_TOP_INTR_HPD_RISE | HDMITX_TOP_INTR_HPD_FALL) && - dw_hdmi->bridge) - drm_helper_hpd_irq_event(dw_hdmi->bridge->dev); - - return IRQ_HANDLED; -} - /* DW HDMI Regmap */ =20 static int meson_dw_hdmi_reg_read(void *context, unsigned int reg, @@ -715,9 +700,8 @@ static int meson_dw_hdmi_bind(struct device *dev, struc= t device *master, if (irq < 0) return irq; =20 - ret =3D devm_request_threaded_irq(dev, irq, dw_hdmi_top_irq, - dw_hdmi_top_thread_irq, IRQF_SHARED, - "dw_hdmi_top_irq", meson_dw_hdmi); + ret =3D devm_request_irq(dev, irq, dw_hdmi_top_irq, IRQF_SHARED, + "dw_hdmi_top_irq", meson_dw_hdmi); if (ret) return dev_err_probe(dev, ret, "Failed to request hdmi top irq\n"); --=20 2.54.0 From nobody Mon May 25 04:35:17 2026 Received: from smtp.forwardemail.net (smtp.forwardemail.net [149.28.215.223]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7B17C39280C for ; Mon, 18 May 2026 19:49:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=149.28.215.223 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779133753; cv=none; b=bB3ZyU+sm17Vuk1yfC8rGxjlEQSZKD2MRweeG5lYvO7q5UiGd+ov2boEbSem0UzoJpYGi3pHMUp7dmYwmjwN2SdDHyWO2K98ijllMxHgADyj0PF/HAlG4scVP4P8A7esbpRI3X2Hu7swG5jN/5b79AjjOM62SslAAY8CKrIPtas= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779133753; c=relaxed/simple; bh=EECyqMeqqqmOpuWpD8YnH+cFrtnN+E2tIyjgPeN1WM8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=uOjNfEncrRFFv8GmsJnKD+jEfCop8poiP3lpoor3PgBJ4QMRqwyJ630jHtvn6CVYEZ3TI7gvrDIoXNk2zoZeWFN7CLuDR5I/fDiNzLuerky/lO+P0qxdddW/lvng1pbdEcsKnre5YrEYIKZupC82x3sJ0i7efdGSM5E2kbFuHg0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b=IrXVFYT4; arc=none smtp.client-ip=149.28.215.223 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=kwiboo.se Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fe-bounces.kwiboo.se Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kwiboo.se header.i=@kwiboo.se header.b="IrXVFYT4" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se; h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To: Message-ID: Date: Subject: Cc: To: From; q=dns/txt; s=fe-e1b5cab7be; t=1779133750; bh=7oMd33Pu3qFKqhyhcRlxwcdcgttbfUQtZ40oIOhs3ik=; b=IrXVFYT4MNE24CFZ18fTTzIWu/DlfJz5Po3jNYrPWcdCpHJPsxsEo/5+QwsJ55fuavsrVMeJR Am6MDRFu6BzXFbrmjsCZofBat63R4d+pmiUwGnslcskF+XB2XQLuHfuVew2Lh7+w2FqAI79H70O jiPnVZICTO8q0HZSQmpkmIOnqO5nDVWAaHst8Y4LNNYPTn5jTgk6bTRGdTvX682eRlz1enwy7LV /ua7lk2QOrYD/AlA8h5y0TcY1DihAMdo4LU5InKGxE4xe9yO2ZcK9zjEUAKmZKWRa1q01JVebzM AFS+Vo6DqD/E0oNpqSNRhyl4fp28ztlpKWQcZyB7n3Nw== X-Forward-Email-ID: 6a0b6d21b74b0ebd362eef85 X-Forward-Email-Sender: rfc822; jonas@kwiboo.se, smtp.forwardemail.net, 149.28.215.223 X-Forward-Email-Version: 2.8.12 X-Forward-Email-Website: https://forwardemail.net X-Complaints-To: abuse@forwardemail.net X-Report-Abuse: abuse@forwardemail.net X-Report-Abuse-To: abuse@forwardemail.net From: Jonas Karlman To: Neil Armstrong , Kevin Hilman , Heiko Stuebner , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jerome Brunet , Martin Blumenstingl Cc: dri-devel@lists.freedesktop.org, linux-amlogic@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Jonas Karlman , linux-rockchip@lists.infradead.org Subject: [PATCH 13/13] drm/meson: dw-hdmi: Use suspend_late/resume_early/resume_noirq pm ops Date: Mon, 18 May 2026 19:47:41 +0000 Message-ID: <20260518194744.2483580-14-jonas@kwiboo.se> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260518194744.2483580-1-jonas@kwiboo.se> References: <20260518194744.2483580-1-jonas@kwiboo.se> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" meson_drv_pm_suspend()/drm_mode_config_helper_suspend() and meson_drv_pm_resume()/drm_mode_config_helper_resume() is called after/before the suspend/resume pm ops of dw-hdmi. This result in atomic_disable() being called after meson_dw_hdmi_pm_suspend() and atomic_enable() before meson_dw_hdmi_pm_resume()/dw_hdmi_resume() is called. Suspend (without changes): - meson_dw_hdmi_pm_suspend() - meson_drv_pm_suspend() - drm_mode_config_helper_suspend() - atomic_disable() Resume (without changes): - resume_irq() <<-- system freeze at hdmi-tx irq on G12B - meson_drv_pm_resume() - drm_mode_config_helper_resume() - atomic_enable() - meson_dw_hdmi_pm_resume() - meson_dw_hdmi_init() - dw_hdmi_resume() - dw_hdmi_init_hw() Change to use suspend_late/resume_early pm ops for system suspend to ensure pm ops for dw-hdmi is run after/before meson_drv pm ops. The G12B can trigger an IRQ (stat=3D0x40) very early during resume_irq that causes a system freeze. Move the meson_dw_hdmi_init() call to resume_noirq pm ops to resolve the system freeze. Also move meson_dw_hdmi_init() to run before interrupt allocation to ensure HW has been initialized when first IRQ is triggered. Suspend (with changes): - meson_drv_pm_suspend() - drm_mode_config_helper_suspend() - atomic_disable() - meson_dw_hdmi_pm_suspend_late() Resume (with changes): - meson_dw_hdmi_pm_resume_noirq() - meson_dw_hdmi_init() - resume_irq() - meson_dw_hdmi_pm_resume_early() - dw_hdmi_resume() - dw_hdmi_init_hw() - meson_drv_pm_resume() - drm_mode_config_helper_resume() - atomic_enable() Signed-off-by: Jonas Karlman --- This can be tested using CONFIG_PM_DEBUG with a simulated suspend: echo N > /sys/module/printk/parameters/console_suspend echo 1 > /sys/power/pm_debug_messages echo platform > /sys/power/pm_test echo mem > /sys/power/state or using something like following for real suspend/resume: echo N > /sys/module/printk/parameters/console_suspend rtcwake -m mem -s 5 -d /dev/rtc1 On S905X a simulated platform pm_test could only be tested. On G12A both simulated and real suspend works. And on G12B the board seems to freeze at a later stage when taking out of real suspend, however platform pm_test works. --- drivers/gpu/drm/meson/meson_dw_hdmi.c | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/meson/meson_dw_hdmi.c b/drivers/gpu/drm/meson/= meson_dw_hdmi.c index 7b465e216759..16f15466a6f4 100644 --- a/drivers/gpu/drm/meson/meson_dw_hdmi.c +++ b/drivers/gpu/drm/meson/meson_dw_hdmi.c @@ -696,6 +696,8 @@ static int meson_dw_hdmi_bind(struct device *dev, struc= t device *master, if (IS_ERR(dw_plat_data->regm)) return PTR_ERR(dw_plat_data->regm); =20 + meson_dw_hdmi_init(meson_dw_hdmi); + irq =3D platform_get_irq(pdev, 0); if (irq < 0) return irq; @@ -706,8 +708,6 @@ static int meson_dw_hdmi_bind(struct device *dev, struc= t device *master, return dev_err_probe(dev, ret, "Failed to request hdmi top irq\n"); =20 - meson_dw_hdmi_init(meson_dw_hdmi); - /* Bridge / Connector */ =20 dw_plat_data->priv_data =3D meson_dw_hdmi; @@ -763,7 +763,7 @@ static const struct component_ops meson_dw_hdmi_ops =3D= { .unbind =3D meson_dw_hdmi_unbind, }; =20 -static int __maybe_unused meson_dw_hdmi_pm_suspend(struct device *dev) +static int __maybe_unused meson_dw_hdmi_pm_suspend_late(struct device *dev) { struct meson_dw_hdmi *meson_dw_hdmi =3D dev_get_drvdata(dev); =20 @@ -777,7 +777,19 @@ static int __maybe_unused meson_dw_hdmi_pm_suspend(str= uct device *dev) return 0; } =20 -static int __maybe_unused meson_dw_hdmi_pm_resume(struct device *dev) +static int __maybe_unused meson_dw_hdmi_pm_resume_early(struct device *dev) +{ + struct meson_dw_hdmi *meson_dw_hdmi =3D dev_get_drvdata(dev); + + if (!meson_dw_hdmi) + return 0; + + dw_hdmi_resume(meson_dw_hdmi->hdmi); + + return 0; +} + +static int __maybe_unused meson_dw_hdmi_pm_resume_noirq(struct device *dev) { struct meson_dw_hdmi *meson_dw_hdmi =3D dev_get_drvdata(dev); =20 @@ -786,8 +798,6 @@ static int __maybe_unused meson_dw_hdmi_pm_resume(struc= t device *dev) =20 meson_dw_hdmi_init(meson_dw_hdmi); =20 - dw_hdmi_resume(meson_dw_hdmi->hdmi); - return 0; } =20 @@ -802,8 +812,9 @@ static void meson_dw_hdmi_remove(struct platform_device= *pdev) } =20 static const struct dev_pm_ops meson_dw_hdmi_pm_ops =3D { - SET_SYSTEM_SLEEP_PM_OPS(meson_dw_hdmi_pm_suspend, - meson_dw_hdmi_pm_resume) + SET_LATE_SYSTEM_SLEEP_PM_OPS(meson_dw_hdmi_pm_suspend_late, + meson_dw_hdmi_pm_resume_early) + SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(NULL, meson_dw_hdmi_pm_resume_noirq) }; =20 static const struct of_device_id meson_dw_hdmi_of_table[] =3D { --=20 2.54.0