diff --git a/drivers/gpu/drm/tegra/dsi.c b/drivers/gpu/drm/tegra/dsi.c
index 7f25c5062..e57639e36 100644
--- a/drivers/gpu/drm/tegra/dsi.c
+++ b/drivers/gpu/drm/tegra/dsi.c
@@ -1502,8 +1502,27 @@ static int tegra_dsi_host_attach(struct mipi_dsi_host *host,
if (IS_ERR(output->panel))
output->panel = NULL;
+ /*
+ * ALARM: notify the DRM clients directly.
+ *
+ * drm_helper_hpd_irq_event() was used here, but it skips any
+ * connector without DRM_CONNECTOR_POLL_HPD:
+ *
+ * if (!(connector->polled & DRM_CONNECTOR_POLL_HPD))
+ * continue;
+ *
+ * The DSI connector is not HPD-polled, so the call was a no-op.
+ * That mattered because tegra_drm_probe() runs drm_client_setup()
+ * *before* this attach, when no connector is connected yet -- so
+ * the fbdev client defers, and the deferred retry only happens on
+ * a hotplug that never came. Result: a working DSI connector and
+ * no /dev/fb0, hence no console on the panel.
+ *
+ * Calling this directly reaches drm_client_dev_hotplug(), which
+ * retries the deferred fbdev setup and gives us fb0.
+ */
if (output->panel && output->connector.dev)
- drm_helper_hpd_irq_event(output->connector.dev);
+ drm_kms_helper_connector_hotplug_event(&output->connector);
}
return 0;