> From: Chris Brandt <[email protected]>
> Sent: 01 May 2026 14:22
> Subject: [PATCH v3] drm: renesas: rz-du: mipi_dsi: Fix return path on error
>
> In case of error, we should unwind correctly.
> Switching to using dmam_ instead of dma_ and moving the code earlier fixes
> the issue.
>
> Fixes: 6f392f371650 ("drm: renesas: rz-du: Implement MIPI DSI host transfers")
> Suggested-by: Pavel Machek <[email protected]>
> Signed-off-by: Chris Brandt <[email protected]>
> Reviewed-by: Biju Das <[email protected]>
Applied to drm-misc-next.
Thanks,
Biju
>
> ---
> V2->V3:
> - Removed Acked-by because it was for V1 (Hugo)
> - Added Reviewed-by (Biju)
>
> V1->V2:
> - Need to take into account mipi_dsi_host_register was already called (Geert)
> - Switch to using dmam_alloc_coherent to automate unwinding (Chris)
> - Added Acked-by (hugo)
> ---
> drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c | 12 +++++-------
> 1 file changed, 5 insertions(+), 7 deletions(-)
>
> 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 29f2b7d24fe5..b908e702b607 100644
> --- a/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c
> +++ b/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c
> @@ -1442,6 +1442,11 @@ static int rzg2l_mipi_dsi_probe(struct platform_device
> *pdev)
> return dev_err_probe(dsi->dev, PTR_ERR(dsi->prstc),
> "failed to get prst\n");
>
> + dsi->dcs_buf_virt = dmam_alloc_coherent(dsi->dev, RZG2L_DCS_BUF_SIZE,
> + &dsi->dcs_buf_phys, GFP_KERNEL);
> + if (!dsi->dcs_buf_virt)
> + return -ENOMEM;
> +
> platform_set_drvdata(pdev, dsi);
>
> pm_runtime_enable(dsi->dev);
> @@ -1474,11 +1479,6 @@ static int rzg2l_mipi_dsi_probe(struct platform_device
> *pdev)
> if (ret < 0)
> goto err_pm_disable;
>
> - dsi->dcs_buf_virt = dma_alloc_coherent(dsi->host.dev,
> RZG2L_DCS_BUF_SIZE,
> - &dsi->dcs_buf_phys, GFP_KERNEL);
> - if (!dsi->dcs_buf_virt)
> - return -ENOMEM;
> -
> return 0;
>
> err_phy:
> @@ -1493,8 +1493,6 @@ static void rzg2l_mipi_dsi_remove(struct
> platform_device *pdev) {
> struct rzg2l_mipi_dsi *dsi = platform_get_drvdata(pdev);
>
> - dma_free_coherent(dsi->host.dev, RZG2L_DCS_BUF_SIZE, dsi->dcs_buf_virt,
> - dsi->dcs_buf_phys);
> mipi_dsi_host_unregister(&dsi->host);
> pm_runtime_disable(&pdev->dev);
> }
> --
> 2.52.0