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]> --- 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 1eea60aec..be9caaf50 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
