drm/tilcdc: Adjust the FB_CEILING address
authorKarl Beldan <kbeldan@baylibre.com>
Tue, 23 Aug 2016 12:56:59 +0000 (12:56 +0000)
committerJyri Sarha <jsarha@ti.com>
Thu, 1 Sep 2016 19:29:12 +0000 (22:29 +0300)
The LCDC seems to expect its framebuffer ceiling address pointer to be
an inclusive bound.  The IP rev2 seems to cope with that but rev1 (as
found on the LCDK) don't.
Also note that this is what the framebuffer code does in da8xx-fb.c.

Since, as the TRM puts it, "The 2 LSBs are hardwired to 00b", the
dma_addr_t can be decremented without cast.
I tested it with a v2 (AM335x, rev  0x4F201000) and an LCDK (v1).

Signed-off-by: Karl Beldan <kbeldan@baylibre.com>
Signed-off-by: Jyri Sarha <jsarha@ti.com>
drivers/gpu/drm/tilcdc/tilcdc_crtc.c

index 25d6b220ee8a49b0bdd1985b124d5ce6b7971180..89d69169dada6a8e5d5f77b623519de0164357b7 100644 (file)
@@ -80,7 +80,7 @@ static void set_scanout(struct drm_crtc *crtc, struct drm_framebuffer *fb)
        end = start + (crtc->mode.vdisplay * fb->pitches[0]);
 
        tilcdc_write(dev, LCDC_DMA_FB_BASE_ADDR_0_REG, start);
-       tilcdc_write(dev, LCDC_DMA_FB_CEILING_ADDR_0_REG, end);
+       tilcdc_write(dev, LCDC_DMA_FB_CEILING_ADDR_0_REG, end - 1);
 
        if (tilcdc_crtc->curr_fb)
                drm_flip_work_queue(&tilcdc_crtc->unref_work,