]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
drm/bridge: samsung-dsim: Always flush display FIFO on vsync pulse
authorPhilipp Zabel <p.zabel@pengutronix.de>
Fri, 27 Jun 2025 11:45:38 +0000 (13:45 +0200)
committerPhilipp Zabel <p.zabel@pengutronix.de>
Tue, 1 Jul 2025 08:46:06 +0000 (10:46 +0200)
commita36c533ad3e1b8c0326d665d2d02d2ef7aea8f92
tree237b98c63a30f39190619953eafe16d068e7c219
parent576fca060f16b4becb050b011d61e42b8429afe6
drm/bridge: samsung-dsim: Always flush display FIFO on vsync pulse

Always flush the display FIFO on vsync pulse, even if not explicitly
requested by the panel via MIPI_DSI_MODE_VSYNC_FLUSH mode_flag.

The display FIFO should be empty at vsync. Flushing it at vsync pulses
helps to remove garbage that may have entered the FIFO during startup
(if synchronisation between upstream display controller and Samsung DSIM
is lacking) and that may persist in form of last frame's leftovers on
subsequent frames. Flushing the display FIFO if it is already empty
should have no effect.

This will allow to remove the MIPI_DSI_MODE_VSYNC_FLUSH flag, which is
only used by the Samsung DSIM bridge driver. Arguably this flag doesn't
belong in the panel configuration at all: flushing the display FIFO on
vsync is a workaround for issues with the integration between display
controller and DSI bridge, not a property of the DSI link between bridge
and panel. No panel actually has a requirement to receive garbage or old
frame content after vsync.

I wonder if host controller FIFO resets are mentioned by the MIPI DSI
specification at all. This patch is based on the assumption that the
MIPI_DSI_MODE_VSYNC_FLUSH flag only exists because the DSIM_MFLUSH_VS
bit happens to be located in the same register as the bits controlling
the DSI mode.

Acked-by: Marek Szyprowski <m.szyprowski@samsung.com>
Link: https://lore.kernel.org/r/20250627-dsi-vsync-flush-v2-1-4066899a5608@pengutronix.de
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
drivers/gpu/drm/bridge/samsung-dsim.c