aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJyri Sarha <jsarha@ti.com>2016-11-17 11:46:16 -0500
committerJyri Sarha <jsarha@ti.com>2016-11-30 07:19:34 -0500
commite59f5af9fba2cfccd26ceed085b9c5e89c81f0ca (patch)
treefaaa4e358ca517bec971faa76414bfe3d5934fcb
parent55e165c4d9d32ee86b348d63b65681783b9cc6d1 (diff)
drm/tilcdc: Add timeout wait for palette loading to complete
Add timeout wait for palette loadind to complete. We do not want to hang forever if palette loaded interrupt does not arrive for some reason. Signed-off-by: Jyri Sarha <jsarha@ti.com> Tested-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
-rw-r--r--drivers/gpu/drm/tilcdc/tilcdc_crtc.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
index b3edc6d2bf16..f736a8970e8b 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
@@ -125,6 +125,7 @@ static void tilcdc_crtc_load_palette(struct drm_crtc *crtc)
125 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); 125 struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc);
126 struct drm_device *dev = crtc->dev; 126 struct drm_device *dev = crtc->dev;
127 struct tilcdc_drm_private *priv = dev->dev_private; 127 struct tilcdc_drm_private *priv = dev->dev_private;
128 int ret;
128 129
129 dma_fb_base = tilcdc_read(dev, LCDC_DMA_FB_BASE_ADDR_0_REG); 130 dma_fb_base = tilcdc_read(dev, LCDC_DMA_FB_BASE_ADDR_0_REG);
130 dma_fb_ceiling = tilcdc_read(dev, LCDC_DMA_FB_CEILING_ADDR_0_REG); 131 dma_fb_ceiling = tilcdc_read(dev, LCDC_DMA_FB_CEILING_ADDR_0_REG);
@@ -152,7 +153,10 @@ static void tilcdc_crtc_load_palette(struct drm_crtc *crtc)
152 tilcdc_clear_irqstatus(dev, 0xffffffff); 153 tilcdc_clear_irqstatus(dev, 0xffffffff);
153 tilcdc_set(dev, LCDC_RASTER_CTRL_REG, LCDC_RASTER_ENABLE); 154 tilcdc_set(dev, LCDC_RASTER_CTRL_REG, LCDC_RASTER_ENABLE);
154 155
155 wait_for_completion(&tilcdc_crtc->palette_loaded); 156 ret = wait_for_completion_timeout(&tilcdc_crtc->palette_loaded,
157 msecs_to_jiffies(50));
158 if (ret == 0)
159 dev_err(dev->dev, "%s: Palette loading timeout", __func__);
156 160
157 /* Disable LCDC DMA and DMA Palette Loaded Interrupt. */ 161 /* Disable LCDC DMA and DMA Palette Loaded Interrupt. */
158 tilcdc_clear(dev, LCDC_RASTER_CTRL_REG, LCDC_RASTER_ENABLE); 162 tilcdc_clear(dev, LCDC_RASTER_CTRL_REG, LCDC_RASTER_ENABLE);