* [PATCH] drm/bridge: dw-hdmi-qp: Fix spurious IRQ on resume
@ 2025-10-14 16:00 Sebastian Reichel
2025-10-15 10:03 ` Cristian Ciocaltea
2025-11-23 20:25 ` Heiko Stübner
0 siblings, 2 replies; 3+ messages in thread
From: Sebastian Reichel @ 2025-10-14 16:00 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Sandy Huang, Heiko Stübner,
Andy Yan
Cc: linux-kernel, dri-devel, Sebastian Reichel, linux-rockchip,
kernel
After resume from suspend to RAM, the following splash is generated if
the HDMI driver is probed (independent of a connected cable):
[ 1194.484052] irq 80: nobody cared (try booting with the "irqpoll" option)
[ 1194.484074] CPU: 0 UID: 0 PID: 627 Comm: rtcwake Not tainted 6.17.0-rc7-g96f1a11414b3 #1 PREEMPT
[ 1194.484082] Hardware name: Rockchip RK3576 EVB V10 Board (DT)
[ 1194.484085] Call trace:
[ 1194.484087] ... (stripped)
[ 1194.484283] handlers:
[ 1194.484285] [<00000000bc363dcb>] dw_hdmi_qp_main_hardirq [dw_hdmi_qp]
[ 1194.484302] Disabling IRQ #80
Apparently the HDMI IP is losing part of its state while the system
is suspended and generates spurious interrupts during resume. The
bug has not yet been noticed, as system suspend does not yet work
properly on upstream kernel with either the Rockchip RK3588 or RK3576
platform.
Fixes: 128a9bf8ace2 ("drm/rockchip: Add basic RK3588 HDMI output support")
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
---
drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c | 9 +++++++++
drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c | 12 +++++++++++-
include/drm/bridge/dw_hdmi_qp.h | 1 +
3 files changed, 21 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c
index 39332c57f2c5..c85eb340e5a3 100644
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c
@@ -143,6 +143,7 @@ struct dw_hdmi_qp {
} phy;
struct regmap *regm;
+ int main_irq;
unsigned long tmds_char_rate;
};
@@ -1068,6 +1069,7 @@ struct dw_hdmi_qp *dw_hdmi_qp_bind(struct platform_device *pdev,
dw_hdmi_qp_init_hw(hdmi);
+ hdmi->main_irq = plat_data->main_irq;
ret = devm_request_threaded_irq(dev, plat_data->main_irq,
dw_hdmi_qp_main_hardirq, NULL,
IRQF_SHARED, dev_name(dev), hdmi);
@@ -1106,9 +1108,16 @@ struct dw_hdmi_qp *dw_hdmi_qp_bind(struct platform_device *pdev,
}
EXPORT_SYMBOL_GPL(dw_hdmi_qp_bind);
+void dw_hdmi_qp_suspend(struct device *dev, struct dw_hdmi_qp *hdmi)
+{
+ disable_irq(hdmi->main_irq);
+}
+EXPORT_SYMBOL_GPL(dw_hdmi_qp_suspend);
+
void dw_hdmi_qp_resume(struct device *dev, struct dw_hdmi_qp *hdmi)
{
dw_hdmi_qp_init_hw(hdmi);
+ enable_irq(hdmi->main_irq);
}
EXPORT_SYMBOL_GPL(dw_hdmi_qp_resume);
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c
index ed6e8f036f4b..9ac45e7bc987 100644
--- a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c
+++ b/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c
@@ -597,6 +597,15 @@ static void dw_hdmi_qp_rockchip_remove(struct platform_device *pdev)
component_del(&pdev->dev, &dw_hdmi_qp_rockchip_ops);
}
+static int __maybe_unused dw_hdmi_qp_rockchip_suspend(struct device *dev)
+{
+ struct rockchip_hdmi_qp *hdmi = dev_get_drvdata(dev);
+
+ dw_hdmi_qp_suspend(dev, hdmi->hdmi);
+
+ return 0;
+}
+
static int __maybe_unused dw_hdmi_qp_rockchip_resume(struct device *dev)
{
struct rockchip_hdmi_qp *hdmi = dev_get_drvdata(dev);
@@ -612,7 +621,8 @@ static int __maybe_unused dw_hdmi_qp_rockchip_resume(struct device *dev)
}
static const struct dev_pm_ops dw_hdmi_qp_rockchip_pm = {
- SET_SYSTEM_SLEEP_PM_OPS(NULL, dw_hdmi_qp_rockchip_resume)
+ SET_SYSTEM_SLEEP_PM_OPS(dw_hdmi_qp_rockchip_suspend,
+ dw_hdmi_qp_rockchip_resume)
};
struct platform_driver dw_hdmi_qp_rockchip_pltfm_driver = {
diff --git a/include/drm/bridge/dw_hdmi_qp.h b/include/drm/bridge/dw_hdmi_qp.h
index e9be6d507ad9..8955450663e5 100644
--- a/include/drm/bridge/dw_hdmi_qp.h
+++ b/include/drm/bridge/dw_hdmi_qp.h
@@ -28,5 +28,6 @@ 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_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__ */
---
base-commit: 3a8660878839faadb4f1a6dd72c3179c1df56787
change-id: 20251014-rockchip-hdmi-suspend-fix-e9bd48588453
Best regards,
--
Sebastian Reichel <sebastian.reichel@collabora.com>
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] drm/bridge: dw-hdmi-qp: Fix spurious IRQ on resume
2025-10-14 16:00 [PATCH] drm/bridge: dw-hdmi-qp: Fix spurious IRQ on resume Sebastian Reichel
@ 2025-10-15 10:03 ` Cristian Ciocaltea
2025-11-23 20:25 ` Heiko Stübner
1 sibling, 0 replies; 3+ messages in thread
From: Cristian Ciocaltea @ 2025-10-15 10:03 UTC (permalink / raw)
To: Sebastian Reichel, Andrzej Hajda, Neil Armstrong, Robert Foss,
Laurent Pinchart, Jonas Karlman, Jernej Skrabec, Sandy Huang,
Heiko Stübner, Andy Yan
Cc: dri-devel, linux-kernel, linux-rockchip, kernel
On 10/14/25 7:00 PM, Sebastian Reichel wrote:
> After resume from suspend to RAM, the following splash is generated if
> the HDMI driver is probed (independent of a connected cable):
>
> [ 1194.484052] irq 80: nobody cared (try booting with the "irqpoll" option)
> [ 1194.484074] CPU: 0 UID: 0 PID: 627 Comm: rtcwake Not tainted 6.17.0-rc7-g96f1a11414b3 #1 PREEMPT
> [ 1194.484082] Hardware name: Rockchip RK3576 EVB V10 Board (DT)
> [ 1194.484085] Call trace:
> [ 1194.484087] ... (stripped)
> [ 1194.484283] handlers:
> [ 1194.484285] [<00000000bc363dcb>] dw_hdmi_qp_main_hardirq [dw_hdmi_qp]
> [ 1194.484302] Disabling IRQ #80
>
> Apparently the HDMI IP is losing part of its state while the system
> is suspended and generates spurious interrupts during resume. The
> bug has not yet been noticed, as system suspend does not yet work
> properly on upstream kernel with either the Rockchip RK3588 or RK3576
> platform.
>
> Fixes: 128a9bf8ace2 ("drm/rockchip: Add basic RK3588 HDMI output support")
> Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
LGTM, hence
Reviewed-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] drm/bridge: dw-hdmi-qp: Fix spurious IRQ on resume
2025-10-14 16:00 [PATCH] drm/bridge: dw-hdmi-qp: Fix spurious IRQ on resume Sebastian Reichel
2025-10-15 10:03 ` Cristian Ciocaltea
@ 2025-11-23 20:25 ` Heiko Stübner
1 sibling, 0 replies; 3+ messages in thread
From: Heiko Stübner @ 2025-11-23 20:25 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Sandy Huang, Andy Yan,
Sebastian Reichel
Cc: Dmitry Baryshkov, linux-kernel, dri-devel, Sebastian Reichel,
linux-rockchip, kernel
Am Dienstag, 14. Oktober 2025, 18:00:57 Mitteleuropäische Normalzeit schrieb Sebastian Reichel:
> After resume from suspend to RAM, the following splash is generated if
> the HDMI driver is probed (independent of a connected cable):
>
> [ 1194.484052] irq 80: nobody cared (try booting with the "irqpoll" option)
> [ 1194.484074] CPU: 0 UID: 0 PID: 627 Comm: rtcwake Not tainted 6.17.0-rc7-g96f1a11414b3 #1 PREEMPT
> [ 1194.484082] Hardware name: Rockchip RK3576 EVB V10 Board (DT)
> [ 1194.484085] Call trace:
> [ 1194.484087] ... (stripped)
> [ 1194.484283] handlers:
> [ 1194.484285] [<00000000bc363dcb>] dw_hdmi_qp_main_hardirq [dw_hdmi_qp]
> [ 1194.484302] Disabling IRQ #80
>
> Apparently the HDMI IP is losing part of its state while the system
> is suspended and generates spurious interrupts during resume. The
> bug has not yet been noticed, as system suspend does not yet work
> properly on upstream kernel with either the Rockchip RK3588 or RK3576
> platform.
>
> Fixes: 128a9bf8ace2 ("drm/rockchip: Add basic RK3588 HDMI output support")
> Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
so, just to say, to me this looks good and also I guess the changes to the
main bridge are not looking controversial and most likely the issue
should appear in all (future) dw-hdmi-qp variants.
So I'll give that a day or two more and then apply it.
Heiko
> ---
> drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c | 9 +++++++++
> drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c | 12 +++++++++++-
> include/drm/bridge/dw_hdmi_qp.h | 1 +
> 3 files changed, 21 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c
> index 39332c57f2c5..c85eb340e5a3 100644
> --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c
> +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c
> @@ -143,6 +143,7 @@ struct dw_hdmi_qp {
> } phy;
>
> struct regmap *regm;
> + int main_irq;
>
> unsigned long tmds_char_rate;
> };
> @@ -1068,6 +1069,7 @@ struct dw_hdmi_qp *dw_hdmi_qp_bind(struct platform_device *pdev,
>
> dw_hdmi_qp_init_hw(hdmi);
>
> + hdmi->main_irq = plat_data->main_irq;
> ret = devm_request_threaded_irq(dev, plat_data->main_irq,
> dw_hdmi_qp_main_hardirq, NULL,
> IRQF_SHARED, dev_name(dev), hdmi);
> @@ -1106,9 +1108,16 @@ struct dw_hdmi_qp *dw_hdmi_qp_bind(struct platform_device *pdev,
> }
> EXPORT_SYMBOL_GPL(dw_hdmi_qp_bind);
>
> +void dw_hdmi_qp_suspend(struct device *dev, struct dw_hdmi_qp *hdmi)
> +{
> + disable_irq(hdmi->main_irq);
> +}
> +EXPORT_SYMBOL_GPL(dw_hdmi_qp_suspend);
> +
> void dw_hdmi_qp_resume(struct device *dev, struct dw_hdmi_qp *hdmi)
> {
> dw_hdmi_qp_init_hw(hdmi);
> + enable_irq(hdmi->main_irq);
> }
> EXPORT_SYMBOL_GPL(dw_hdmi_qp_resume);
>
> diff --git a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c
> index ed6e8f036f4b..9ac45e7bc987 100644
> --- a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c
> +++ b/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c
> @@ -597,6 +597,15 @@ static void dw_hdmi_qp_rockchip_remove(struct platform_device *pdev)
> component_del(&pdev->dev, &dw_hdmi_qp_rockchip_ops);
> }
>
> +static int __maybe_unused dw_hdmi_qp_rockchip_suspend(struct device *dev)
> +{
> + struct rockchip_hdmi_qp *hdmi = dev_get_drvdata(dev);
> +
> + dw_hdmi_qp_suspend(dev, hdmi->hdmi);
> +
> + return 0;
> +}
> +
> static int __maybe_unused dw_hdmi_qp_rockchip_resume(struct device *dev)
> {
> struct rockchip_hdmi_qp *hdmi = dev_get_drvdata(dev);
> @@ -612,7 +621,8 @@ static int __maybe_unused dw_hdmi_qp_rockchip_resume(struct device *dev)
> }
>
> static const struct dev_pm_ops dw_hdmi_qp_rockchip_pm = {
> - SET_SYSTEM_SLEEP_PM_OPS(NULL, dw_hdmi_qp_rockchip_resume)
> + SET_SYSTEM_SLEEP_PM_OPS(dw_hdmi_qp_rockchip_suspend,
> + dw_hdmi_qp_rockchip_resume)
> };
>
> struct platform_driver dw_hdmi_qp_rockchip_pltfm_driver = {
> diff --git a/include/drm/bridge/dw_hdmi_qp.h b/include/drm/bridge/dw_hdmi_qp.h
> index e9be6d507ad9..8955450663e5 100644
> --- a/include/drm/bridge/dw_hdmi_qp.h
> +++ b/include/drm/bridge/dw_hdmi_qp.h
> @@ -28,5 +28,6 @@ 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_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__ */
>
> ---
> base-commit: 3a8660878839faadb4f1a6dd72c3179c1df56787
> change-id: 20251014-rockchip-hdmi-suspend-fix-e9bd48588453
>
> Best regards,
>
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-11-23 20:26 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-10-14 16:00 [PATCH] drm/bridge: dw-hdmi-qp: Fix spurious IRQ on resume Sebastian Reichel
2025-10-15 10:03 ` Cristian Ciocaltea
2025-11-23 20:25 ` Heiko Stübner
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).