* [PATCH AUTOSEL 6.19-6.18] drm: renesas: rz-du: mipi_dsi: fix kernel panic when rebooting for some panels
[not found] <20260214010245.3671907-1-sashal@kernel.org>
@ 2026-02-14 0:58 ` Sasha Levin
2026-02-16 14:52 ` Hugo Villeneuve
0 siblings, 1 reply; 2+ messages in thread
From: Sasha Levin @ 2026-02-14 0:58 UTC (permalink / raw)
To: patches, stable
Cc: Hugo Villeneuve, Biju Das, Sasha Levin, dri-devel,
linux-renesas-soc
From: Hugo Villeneuve <hvilleneuve@dimonoff.com>
[ Upstream commit 64aa8b3a60a825134f7d866adf05c024bbe0c24c ]
Since commit 56de5e305d4b ("clk: renesas: r9a07g044: Add MSTOP for RZ/G2L")
we may get the following kernel panic, for some panels, when rebooting:
systemd-shutdown[1]: Rebooting.
Call trace:
...
do_serror+0x28/0x68
el1h_64_error_handler+0x34/0x50
el1h_64_error+0x6c/0x70
rzg2l_mipi_dsi_host_transfer+0x114/0x458 (P)
mipi_dsi_device_transfer+0x44/0x58
mipi_dsi_dcs_set_display_off_multi+0x9c/0xc4
ili9881c_unprepare+0x38/0x88
drm_panel_unprepare+0xbc/0x108
This happens for panels that need to send MIPI-DSI commands in their
unprepare() callback. Since the MIPI-DSI interface is stopped at that
point, rzg2l_mipi_dsi_host_transfer() triggers the kernel panic.
Fix by moving rzg2l_mipi_dsi_stop() to new callback function
rzg2l_mipi_dsi_atomic_post_disable().
With this change we now have the correct power-down/stop sequence:
systemd-shutdown[1]: Rebooting.
rzg2l-mipi-dsi 10850000.dsi: rzg2l_mipi_dsi_atomic_disable(): entry
ili9881c-dsi 10850000.dsi.0: ili9881c_unprepare(): entry
rzg2l-mipi-dsi 10850000.dsi: rzg2l_mipi_dsi_atomic_post_disable(): entry
reboot: Restarting system
Suggested-by: Biju Das <biju.das.jz@bp.renesas.com>
Signed-off-by: Hugo Villeneuve <hvilleneuve@dimonoff.com>
Tested-by: Biju Das <biju.das.jz@bp.renesas.com>
Link: https://patch.msgid.link/20260112154333.655352-1-hugo@hugovil.com
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
LLM Generated explanations, may be completely bogus:
This is important context: The MSTOP commit (56de5e305d4b) that causes
the regression is only in v6.18+. However, looking at the commit message
more carefully — the issue is about the **ordering** of DSI stop vs
panel unprepare. The MSTOP commit may have just made the issue more
visible (by making the clock gating more aggressive), but the
fundamental ordering bug (stopping DSI before the panel can send its
shutdown commands) could potentially affect earlier kernels too, even if
it manifests differently.
That said, for stable trees before 6.18, the triggering commit doesn't
exist, so this specific panic may not manifest. For 6.18.y stable, this
would be very relevant.
### Summary
- **What it fixes**: Kernel panic on reboot for systems using Renesas
RZ/G2L MIPI-DSI with panels that send commands during `unprepare()`
- **Severity**: High — kernel panic prevents clean reboot
- **Fix quality**: Small, surgical, follows standard DRM bridge
patterns, tested by maintainer
- **Risk**: Very low — same operations in correct order, limited to one
driver
- **Scope**: Single file, ~15 lines changed
- **Dependencies**: Driver exists in v6.12+; the specific regression
trigger (MSTOP) is only in v6.18+, but the fix is still correct
ordering regardless
This is a clear, well-tested fix for a kernel panic. It's small,
surgical, obviously correct (using `atomic_post_disable` is the standard
pattern for this), and has been tested by the subsystem maintainer. It
meets all stable kernel criteria.
**YES**
drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c b/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c
index 3b52dfc0ea1e0..b164e3a62cc2f 100644
--- a/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c
+++ b/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c
@@ -646,6 +646,13 @@ static void rzg2l_mipi_dsi_atomic_disable(struct drm_bridge *bridge,
rzg2l_mipi_dsi_stop_video(dsi);
rzg2l_mipi_dsi_stop_hs_clock(dsi);
+}
+
+static void rzg2l_mipi_dsi_atomic_post_disable(struct drm_bridge *bridge,
+ struct drm_atomic_state *state)
+{
+ struct rzg2l_mipi_dsi *dsi = bridge_to_rzg2l_mipi_dsi(bridge);
+
rzg2l_mipi_dsi_stop(dsi);
}
@@ -681,6 +688,7 @@ static const struct drm_bridge_funcs rzg2l_mipi_dsi_bridge_ops = {
.atomic_pre_enable = rzg2l_mipi_dsi_atomic_pre_enable,
.atomic_enable = rzg2l_mipi_dsi_atomic_enable,
.atomic_disable = rzg2l_mipi_dsi_atomic_disable,
+ .atomic_post_disable = rzg2l_mipi_dsi_atomic_post_disable,
.mode_valid = rzg2l_mipi_dsi_bridge_mode_valid,
};
--
2.51.0
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH AUTOSEL 6.19-6.18] drm: renesas: rz-du: mipi_dsi: fix kernel panic when rebooting for some panels
2026-02-14 0:58 ` [PATCH AUTOSEL 6.19-6.18] drm: renesas: rz-du: mipi_dsi: fix kernel panic when rebooting for some panels Sasha Levin
@ 2026-02-16 14:52 ` Hugo Villeneuve
0 siblings, 0 replies; 2+ messages in thread
From: Hugo Villeneuve @ 2026-02-16 14:52 UTC (permalink / raw)
To: Sasha Levin
Cc: patches, stable, Hugo Villeneuve, Biju Das, dri-devel,
linux-renesas-soc
Hi Sasha,
On Fri, 13 Feb 2026 19:58:37 -0500
Sasha Levin <sashal@kernel.org> wrote:
> From: Hugo Villeneuve <hvilleneuve@dimonoff.com>
>
> [ Upstream commit 64aa8b3a60a825134f7d866adf05c024bbe0c24c ]
>
> Since commit 56de5e305d4b ("clk: renesas: r9a07g044: Add MSTOP for RZ/G2L")
> we may get the following kernel panic, for some panels, when rebooting:
>
> systemd-shutdown[1]: Rebooting.
> Call trace:
> ...
> do_serror+0x28/0x68
> el1h_64_error_handler+0x34/0x50
> el1h_64_error+0x6c/0x70
> rzg2l_mipi_dsi_host_transfer+0x114/0x458 (P)
> mipi_dsi_device_transfer+0x44/0x58
> mipi_dsi_dcs_set_display_off_multi+0x9c/0xc4
> ili9881c_unprepare+0x38/0x88
> drm_panel_unprepare+0xbc/0x108
>
> This happens for panels that need to send MIPI-DSI commands in their
> unprepare() callback. Since the MIPI-DSI interface is stopped at that
> point, rzg2l_mipi_dsi_host_transfer() triggers the kernel panic.
>
> Fix by moving rzg2l_mipi_dsi_stop() to new callback function
> rzg2l_mipi_dsi_atomic_post_disable().
>
> With this change we now have the correct power-down/stop sequence:
>
> systemd-shutdown[1]: Rebooting.
> rzg2l-mipi-dsi 10850000.dsi: rzg2l_mipi_dsi_atomic_disable(): entry
> ili9881c-dsi 10850000.dsi.0: ili9881c_unprepare(): entry
> rzg2l-mipi-dsi 10850000.dsi: rzg2l_mipi_dsi_atomic_post_disable(): entry
> reboot: Restarting system
>
> Suggested-by: Biju Das <biju.das.jz@bp.renesas.com>
> Signed-off-by: Hugo Villeneuve <hvilleneuve@dimonoff.com>
> Tested-by: Biju Das <biju.das.jz@bp.renesas.com>
> Link: https://patch.msgid.link/20260112154333.655352-1-hugo@hugovil.com
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> Signed-off-by: Sasha Levin <sashal@kernel.org>
> ---
>
> LLM Generated explanations, may be completely bogus:
>
> This is important context: The MSTOP commit (56de5e305d4b) that causes
> the regression is only in v6.18+. However, looking at the commit message
> more carefully — the issue is about the **ordering** of DSI stop vs
> panel unprepare. The MSTOP commit may have just made the issue more
> visible (by making the clock gating more aggressive), but the
> fundamental ordering bug (stopping DSI before the panel can send its
> shutdown commands) could potentially affect earlier kernels too, even if
> it manifests differently.
>
> That said, for stable trees before 6.18, the triggering commit doesn't
> exist, so this specific panic may not manifest. For 6.18.y stable, this
> would be very relevant.
This analysis is correct.
Hugo.
>
> ### Summary
>
> - **What it fixes**: Kernel panic on reboot for systems using Renesas
> RZ/G2L MIPI-DSI with panels that send commands during `unprepare()`
> - **Severity**: High — kernel panic prevents clean reboot
> - **Fix quality**: Small, surgical, follows standard DRM bridge
> patterns, tested by maintainer
> - **Risk**: Very low — same operations in correct order, limited to one
> driver
> - **Scope**: Single file, ~15 lines changed
> - **Dependencies**: Driver exists in v6.12+; the specific regression
> trigger (MSTOP) is only in v6.18+, but the fix is still correct
> ordering regardless
>
> This is a clear, well-tested fix for a kernel panic. It's small,
> surgical, obviously correct (using `atomic_post_disable` is the standard
> pattern for this), and has been tested by the subsystem maintainer. It
> meets all stable kernel criteria.
>
> **YES**
>
> drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
> diff --git a/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c b/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c
> index 3b52dfc0ea1e0..b164e3a62cc2f 100644
> --- a/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c
> +++ b/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c
> @@ -646,6 +646,13 @@ static void rzg2l_mipi_dsi_atomic_disable(struct drm_bridge *bridge,
>
> rzg2l_mipi_dsi_stop_video(dsi);
> rzg2l_mipi_dsi_stop_hs_clock(dsi);
> +}
> +
> +static void rzg2l_mipi_dsi_atomic_post_disable(struct drm_bridge *bridge,
> + struct drm_atomic_state *state)
> +{
> + struct rzg2l_mipi_dsi *dsi = bridge_to_rzg2l_mipi_dsi(bridge);
> +
> rzg2l_mipi_dsi_stop(dsi);
> }
>
> @@ -681,6 +688,7 @@ static const struct drm_bridge_funcs rzg2l_mipi_dsi_bridge_ops = {
> .atomic_pre_enable = rzg2l_mipi_dsi_atomic_pre_enable,
> .atomic_enable = rzg2l_mipi_dsi_atomic_enable,
> .atomic_disable = rzg2l_mipi_dsi_atomic_disable,
> + .atomic_post_disable = rzg2l_mipi_dsi_atomic_post_disable,
> .mode_valid = rzg2l_mipi_dsi_bridge_mode_valid,
> };
>
> --
> 2.51.0
>
--
Hugo Villeneuve
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-02-16 14:52 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20260214010245.3671907-1-sashal@kernel.org>
2026-02-14 0:58 ` [PATCH AUTOSEL 6.19-6.18] drm: renesas: rz-du: mipi_dsi: fix kernel panic when rebooting for some panels Sasha Levin
2026-02-16 14:52 ` Hugo Villeneuve
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox