From 068b315e260ab7dbc553b863052da28c6877872f Mon Sep 17 00:00:00 2001 From: Jakob Unterwurzacher Date: Mon, 12 Jun 2017 16:21:17 +0200 Subject: drm: rockchip: limit EPROBE_DEFER retries in rockchip_dp_bind A typo in the panel's "compatible" string in the dts used to cause an infinite EPROBE_DEFER loop that effectively kills the box as bootup never completes. Now we abort after 10 retries. Signed-off-by: Jakob Unterwurzacher --- drivers/gpu/drm/rockchip/analogix_dp-rockchip.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c index 70a508423fa0..492a6751605d 100644 --- a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c +++ b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c @@ -316,6 +316,9 @@ static int rockchip_dp_drm_create_encoder(struct rockchip_dp_device *dp) return 0; } +/* number of times we will return EPROBE_DEFER when we cannot find the panel */ +static int panel_retries_left = 10; + static int rockchip_dp_bind(struct device *dev, struct device *master, void *data) { @@ -346,7 +349,12 @@ static int rockchip_dp_bind(struct device *dev, struct device *master, if (!panel) { DRM_ERROR("failed to find panel\n"); of_node_put(panel_node); - return -EPROBE_DEFER; + if (panel_retries_left > 0) { + panel_retries_left--; + return -EPROBE_DEFER; + } + DRM_ERROR("failed to find panel: giving up\n"); + return -ENODEV; } of_node_put(panel_node); } -- cgit v1.2.3