drm/tilcdc: Get rid of complex ping-pong mechanism
authorTomi Valkeinen <tomi.valkeinen@ti.com>
Tue, 20 Oct 2015 06:37:27 +0000 (09:37 +0300)
committerJyri Sarha <jsarha@ti.com>
Thu, 25 Feb 2016 14:39:40 +0000 (16:39 +0200)
commit2b2080d7e9ae2463b15a003629d2ea7d733759a0
treecde7b18f8cf026eb97bd4092780a508470adc30e
parent317aae738b6402cd66fb9b52434b783f17ff5dd4
drm/tilcdc: Get rid of complex ping-pong mechanism

Get rid of complex ping-pong mechanism and replace it with simpler
single buffer flipping code.

The LCDC HW appears to be designed mainly static framebuffers in
mind. There are two modes of operation, either static single buffer,
or ping pong double buffering with two static buffers switching back
and forth. Luckily the framebuffer start address is fetched only in
the beginning of the frame and changing the address after that only
takes effect after the next vertical blank. The page flipping code can
simply write the address of the new framebuffer and the page is
flipped automatically after the next vertical blank. Using the ping
pong double buffering makes the flipping code way more complex and it
does not provide any benefit, so it is better to switch to single
buffer operation.

There is still one problem in updating the framebuffer dma address on
the fly. There are two registers defining the framebuffer dma area and
things may break if the dma address is fetched in while the registers
are are being updated.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
[Added description to the patch]
Signed-off-by: Jyri Sarha <jsarha@ti.com>
drivers/gpu/drm/tilcdc/tilcdc_crtc.c
drivers/gpu/drm/tilcdc/tilcdc_drv.c