lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <5028381.GXAFRqVoOG@diego>
Date: Sun, 23 Nov 2025 21:25:58 +0100
From: Heiko StĂĽbner <heiko@...ech.de>
To: Andrzej Hajda <andrzej.hajda@...el.com>,
 Neil Armstrong <neil.armstrong@...aro.org>, Robert Foss <rfoss@...nel.org>,
 Laurent Pinchart <Laurent.pinchart@...asonboard.com>,
 Jonas Karlman <jonas@...boo.se>, Jernej Skrabec <jernej.skrabec@...il.com>,
 Sandy Huang <hjc@...k-chips.com>, Andy Yan <andy.yan@...k-chips.com>,
 Sebastian Reichel <sebastian.reichel@...labora.com>
Cc: Cristian Ciocaltea <cristian.ciocaltea@...labora.com>,
 dri-devel@...ts.freedesktop.org, linux-kernel@...r.kernel.org,
 linux-rockchip@...ts.infradead.org, kernel@...labora.com,
 Sebastian Reichel <sebastian.reichel@...labora.com>,
 Dmitry Baryshkov <dmitry.baryshkov@....qualcomm.com>
Subject: Re: [PATCH] drm/bridge: dw-hdmi-qp: Fix spurious IRQ on resume

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@...labora.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,
> 





Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ