On Mon, 26 Oct 2026 at 19:16, Henry Zhang <[email protected]> wrote:
>
> The error interrupts (contention, sequence and timeout errors) are
> always enabled and each one is logged with drm_err() from the interrupt
> handler. When a peripheral leaves the data lanes in a bad state, the
> same error is raised again as soon as it is acknowledged. On a
> Raspberry Pi 4 a "data lane 0 sequence error" was seen at more than
> 50000 interrupts per second; printing every one of them, mostly to a
> serial console, starved the rest of the system to the point that the
> SD card driver timed out and the board had to be reset.
>
> Use drm_err_ratelimited() so that the errors stay visible without
> taking the system down.
>
> Signed-off-by: Henry Zhang <[email protected]>

Reviewed-by: Dave Stevenson <[email protected]>

> ---
>  drivers/gpu/drm/vc4/vc4_dsi.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/vc4/vc4_dsi.c b/drivers/gpu/drm/vc4/vc4_dsi.c
> index 5452b727a..face44a23 100644
> --- a/drivers/gpu/drm/vc4/vc4_dsi.c
> +++ b/drivers/gpu/drm/vc4/vc4_dsi.c
> @@ -1487,8 +1487,8 @@ static void dsi_handle_error(struct vc4_dsi *dsi,
>         if (!(stat & bit))
>                 return;
>
> -       drm_err(dsi->bridge.dev, "DSI%d: %s error\n", dsi->variant->port,
> -               type);
> +       drm_err_ratelimited(dsi->bridge.dev, "DSI%d: %s error\n",
> +                           dsi->variant->port, type);
>         *ret = IRQ_HANDLED;
>  }
>
> --
> 2.47.3
>

Reply via email to