linux/drivers/gpu/drm
Paul Kocialkowski 351af554ed drm: lcdif: Wait for vblank before disabling DMA
It is necessary to wait for the full frame to finish streaming
through the DMA engine before we can safely disable it by removing
the DISP_PARA_DISP_ON bit. Disabling it in-flight can leave the
hardware confused and unable to resume streaming for the next frame.

This causes the FIFO underrun and empty status bits to be set and
a single solid color to be shown on the display, coming from one of
the pixels of the previous frame. The issue occurs sporadically when
a new mode is set, which triggers the crtc disable and enable paths.

Setting the shadow load bit and waiting for it to be cleared by the
DMA engine allows waiting for completion.

The NXP BSP driver addresses this issue with a hardcoded 25 ms sleep.

Fixes: 9db35bb349 ("drm: lcdif: Add support for i.MX8MP LCDIF variant")
Signed-off-by: Paul Kocialkowski <paulk@sys-base.io>
Co-developed-by: Lucas Stach <l.stach@pengutronix.de>
Reviewed-by: Frieder Schrempf <frieder.schrempf@kontron.de>
Tested-by: Frieder Schrempf <frieder.schrempf@kontron.de>
Acked-by: Liu Ying <victor.liu@nxp.com>
Link: https://patch.msgid.link/20260402183351.3281123-3-paulk@sys-base.io
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
2026-05-29 17:18:10 +02:00
..
adp drm-misc-next for v7.2-rc1: 2026-05-08 14:16:04 +10:00
amd Merge drm/drm-next into drm-misc-next 2026-05-28 11:27:53 +02:00
arm drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
armada drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
aspeed
ast drm-misc-next for v7.1-rc1: 2026-05-06 10:12:25 +10:00
atmel-hlcdc drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
bridge Merge drm/drm-next into drm-misc-next 2026-05-28 11:27:53 +02:00
ci drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
clients Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
display drm/bridge_connector: Convert to atomic_create_state 2026-05-29 11:42:47 +02:00
etnaviv Linux 7.1-rc5 2026-05-28 09:58:36 +02:00
exynos Linux 7.1-rc5 2026-05-28 09:58:36 +02:00
fsl-dcu drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
gma500 Linux 7.1-rc5 2026-05-28 09:58:36 +02:00
gud drm/gud: Add RCade Display Adapter VID/PID pair 2026-05-12 08:35:00 +02:00
hisilicon drm/hisilicon/kirin: switch to of_drm_get_bridge_by_endpoint() 2026-05-19 10:57:25 +02:00
hyperv drm/hyperv: Use "hv_drm_" as symbol name prefix 2026-05-29 07:08:30 -04:00
i915 drm/atomic-state-helper: Rename __drm_atomic_helper_crtc_state_reset() 2026-05-29 11:41:53 +02:00
imagination drm/imagination: Fix missing argument in pvr_power_fw_{en,dis}able() 2026-05-20 10:52:10 +02:00
imx drm-misc-next for v7.2-rc1: 2026-05-08 14:16:04 +10:00
ingenic drm-misc-next for v7.2-rc1: 2026-05-08 14:16:04 +10:00
kmb drm-misc-next for v7.2-rc1: 2026-05-08 14:16:04 +10:00
lima drm/lima: Remove drm_sched_init_args->num_rqs usage 2026-04-17 14:43:29 +02:00
logicvc drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
loongson Linux 7.1-rc5 2026-05-28 09:58:36 +02:00
mcde drm/mcde: dsi: convert to of_drm_find_and_get_bridge() 2026-02-23 10:10:34 +01:00
mediatek Linux 7.1-rc5 2026-05-28 09:58:36 +02:00
meson drm-misc-next for v7.2-rc1: 2026-05-08 14:16:04 +10:00
mgag200 drm-misc-next for v7.2-rc1: 2026-05-08 14:16:04 +10:00
msm Linux 7.1-rc5 2026-05-28 09:58:36 +02:00
mxsfb drm: lcdif: Wait for vblank before disabling DMA 2026-05-29 17:18:10 +02:00
nouveau drm/nouveau/gsp: formally support GA100 2026-05-28 19:30:15 +02:00
nova rust: gem: Introduce DriverObject::Args 2026-03-26 02:08:04 +01:00
omapdrm drm-misc-next for v7.2-rc1: 2026-05-08 14:16:04 +10:00
panel Merge drm/drm-next into drm-misc-next 2026-05-28 11:27:53 +02:00
panfrost Linux 7.1-rc5 2026-05-28 09:58:36 +02:00
panthor drm/panthor: Reduce padding in gems debugfs for refcount 2026-05-28 16:47:37 +02:00
pl111 Linux 6.19-rc7 2026-01-28 12:44:28 +10:00
qxl Linux 7.1-rc5 2026-05-28 09:58:36 +02:00
radeon drm/radeon/evergreen_cs: Add missing NULL prefix check in surface check 2026-05-19 12:16:16 -04:00
renesas drm: renesas: rz-du: Add support for RZ/T2H SoC 2026-05-22 07:31:55 +01:00
rockchip drm/rockchip: dw_hdmi: avoid direct dereference of phy->dev.of_node 2026-05-21 11:35:04 +02:00
scheduler drm/sched: Remove drm_sched_init_args->num_rqs usage 2026-04-17 14:43:29 +02:00
sitronix drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
solomon drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
sprd drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
sti Linux 7.1-rc5 2026-05-28 09:58:36 +02:00
stm drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
sun4i drm/hdmi: Rename __drm_atomic_helper_connector_hdmi_reset() 2026-05-29 11:41:54 +02:00
sysfb drm-misc-next for v7.2-rc1: 2026-05-08 14:16:04 +10:00
tegra drm/tegra: dsi: Re-add clear enable register if DSI was powered by bootloader 2026-05-29 14:29:19 +02:00
tests drm/hdmi: Rename __drm_atomic_helper_connector_hdmi_reset() 2026-05-29 11:41:54 +02:00
tidss drm/tidss: Convert to atomic_create_state 2026-05-29 11:42:46 +02:00
tilcdc drm-misc-next for v7.2-rc1: 2026-05-08 14:16:04 +10:00
tiny drm/gm12u320: Replace system_long_wq with system_dfl_long_wq 2026-05-29 09:11:26 +02:00
ttm drm/ttm: Fix ttm_bo_shrink() infinite LRU walk on backup failure 2026-05-14 15:32:29 +02:00
tve200 drm/tve200: Fix probe cleanup after register failure 2026-05-05 11:16:39 +02:00
tyr drm for v7.1-rc1 2026-04-15 08:45:00 -07:00
udl drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
v3d Linux 7.1-rc5 2026-05-28 09:58:36 +02:00
vboxvideo drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
vc4 drm/hdmi: Rename __drm_atomic_helper_connector_hdmi_reset() 2026-05-29 11:41:54 +02:00
verisilicon drm: verisilicon: fix build failure of cursor plane code 2026-05-26 16:05:53 +08:00
vgem Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
virtio drm/virtio: Add PM notifier to restore objects after hibernation 2026-05-29 13:10:52 +03:00
vkms drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
vmwgfx drm-misc-next for v7.2-rc1: 2026-05-08 14:16:04 +10:00
xe Merge drm/drm-next into drm-misc-next 2026-05-28 11:27:53 +02:00
xen Convert remaining multi-line kmalloc_obj/flex GFP_KERNEL uses 2026-02-22 08:26:33 -08:00
xlnx drm: zynqmp_dp: switch to of_drm_get_bridge_by_endpoint() 2026-05-19 10:57:26 +02:00
drm_atomic_helper.c drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
drm_atomic_state_helper.c drm/connector: Add new atomic_create_state callback 2026-05-29 11:42:34 +02:00
drm_atomic_uapi.c drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
drm_atomic.c drm/mode-config: Create drm_mode_config_create_initial_state() 2026-05-29 11:42:45 +02:00
drm_auth.c drm/auth: Only drm_drop_master if it exists 2026-04-21 22:05:51 +08:00
drm_blend.c drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
drm_bridge_helper.c
drm_bridge.c drm/bridge: add of_drm_get_bridge_by_endpoint() 2026-05-19 10:57:25 +02:00
drm_buddy.c gpu/buddy: Track per-order used blocks with a scoreboard 2026-05-29 13:44:01 +02:00
drm_cache.c
drm_client_event.c
drm_client_modeset.c drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
drm_client_sysrq.c
drm_client.c drm/client: Export drm_client_buffer_create() 2026-03-03 09:28:31 +01:00
drm_color_mgmt.c drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
drm_colorop.c drm/colorop: Create drm_atomic_helper_colorop_create_state() 2026-05-29 11:41:50 +02:00
drm_connector.c drm/connector: Add new atomic_create_state callback 2026-05-29 11:42:34 +02:00
drm_crtc_helper_internal.h
drm_crtc_helper.c drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
drm_crtc_internal.h drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
drm_crtc.c drm/simple-kms: Deprecate simple-kms helpers 2026-03-25 15:05:22 +01:00
drm_damage_helper.c drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
drm_debugfs_crc.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
drm_debugfs.c drm/debug: don't register files for unsupported HDMI InfoFrames 2026-01-19 13:11:47 +02:00
drm_displayid_internal.h
drm_displayid.c
drm_draw_internal.h drm/draw: add drm_draw_can_convert_from_xrgb8888 2025-12-19 23:06:41 +01:00
drm_draw.c drm/draw: add drm_draw_can_convert_from_xrgb8888 2025-12-19 23:06:41 +01:00
drm_drv.c drm/drv: Switch skeleton to drm_mode_config_create_initial_state() 2026-05-29 11:42:46 +02:00
drm_dumb_buffers.c drm: Remove unused header in drm_dumb_buffers.c 2026-05-29 09:09:37 +02:00
drm_edid_load.c
drm_edid.c Revert "drm/edid: add CTA Video Format Data Block support" 2026-05-06 11:22:15 +02:00
drm_eld.c
drm_encoder.c drm/encoder: drm_encoder_cleanup: lock the encoder chain mutex during removal 2026-04-16 09:08:42 +02:00
drm_exec.c drm/exec, drm/xe: Avoid abusing the drm_exec retry pointer 2026-05-25 10:45:38 +02:00
drm_fb_dma_helper.c
drm_fb_helper.c Linux 7.1-rc5 2026-05-28 09:58:36 +02:00
drm_fbdev_dma.c
drm_fbdev_shmem.c
drm_fbdev_ttm.c
drm_file.c Revert "drm: Fix use-after-free on framebuffers and property blobs when calling drm_dev_unplug" 2026-03-26 14:09:26 +01:00
drm_flip_work.c treewide: Replace kmalloc with kmalloc_obj for non-scalar types 2026-02-21 01:02:28 -08:00
drm_format_helper.c
drm_format_internal.h
drm_fourcc.c drm/fourcc: Add DRM_FORMAT_XVUY2101010 2026-05-05 14:04:29 +03:00
drm_framebuffer.c drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
drm_gem_atomic_helper.c drm/simple-kms: Deprecate simple-kms helpers 2026-03-25 15:05:22 +01:00
drm_gem_dma_helper.c drm/gem-dma: set VM_DONTDUMP for mmap 2026-03-26 14:35:18 +08:00
drm_gem_framebuffer_helper.c drm/gem: Fix inconsistent plane dimension calculation in drm_gem_fb_init_with_funcs() 2026-04-27 11:27:22 +02:00
drm_gem_shmem_helper.c drm/shmem_helper: Make sure PMD entries get the writeable upgrade 2026-04-03 10:11:04 +02:00
drm_gem_ttm_helper.c
drm_gem_vram_helper.c drm/vram: remove DRM_VRAM_MM_FILE_OPERATIONS from docs 2026-04-09 09:34:28 +02:00
drm_gem.c Linux 7.1-rc5 2026-05-28 09:58:36 +02:00
drm_gpusvm.c drm: Drop HPAGE_PMD_SIZE dependency in dma_iova_try_alloc calls 2026-05-07 14:07:36 -04:00
drm_gpuvm.c drm/exec: Remove the index parameter from drm_exec_for_each_locked_obj[_reverse] 2026-05-25 10:45:38 +02:00
drm_internal.h
drm_ioc32.c drm/ioc32: stop speculation on the drm_compat_ioctl path 2026-04-02 08:24:55 +02:00
drm_ioctl.c
drm_kms_helper_common.c
drm_lease.c Convert more 'alloc_obj' cases to default GFP_KERNEL arguments 2026-02-21 20:03:00 -08:00
drm_managed.c
drm_mipi_dbi.c drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
drm_mipi_dsi.c drm/mipi-dsi: add mipi_dsi_shutdown_peripheral_multi 2026-04-24 10:12:16 -07:00
drm_mm.c
drm_mode_config.c drm/mode-config: Create drm_mode_config_create_initial_state() 2026-05-29 11:42:45 +02:00
drm_mode_object.c drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
drm_modes.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
drm_modeset_helper.c drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
drm_modeset_lock.c treewide: Replace kmalloc with kmalloc_obj for non-scalar types 2026-02-21 01:02:28 -08:00
drm_of.c drm: of: forbid bridge-only calls to drm_of_find_panel_or_bridge() 2026-05-19 10:57:26 +02:00
drm_pagemap_util.c drm/pagemap_util: Ensure proper cache lock management on free 2026-03-17 15:39:07 +01:00
drm_pagemap.c drm: Drop HPAGE_PMD_SIZE dependency in dma_iova_try_alloc calls 2026-05-07 14:07:36 -04:00
drm_panel_backlight_quirks.c
drm_panel_orientation_quirks.c
drm_panel.c drm/panel: fix kernel-doc warning for devm_drm_panel_add() 2026-05-26 16:00:32 +02:00
drm_panic_qr.rs
drm_panic.c drm/panic: Fix expected string for QR_CODE in drm_panic_type_map 2026-01-09 08:53:27 +00:00
drm_pci.c
drm_plane_helper.c Convert more 'alloc_obj' cases to default GFP_KERNEL arguments 2026-02-21 20:03:00 -08:00
drm_plane.c Convert more 'alloc_obj' cases to default GFP_KERNEL arguments 2026-02-21 20:03:00 -08:00
drm_prime.c drm/prime: Limit scatter list size with dedicated DMA device 2026-03-23 13:23:29 +08:00
drm_print.c
drm_privacy_screen_x86.c
drm_privacy_screen.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
drm_probe_helper.c drm/probe-helper: replace use of system_wq with system_percpu_wq 2026-02-09 09:41:09 +01:00
drm_property.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
drm_ras_genl_family.c drm/ras: Introduce the DRM RAS infrastructure over generic netlink 2026-03-05 19:38:55 -05:00
drm_ras_nl.c drm/drm_ras: Add clear-error-counter netlink command to drm_ras 2026-04-24 08:43:42 -04:00
drm_ras_nl.h drm/drm_ras: Add clear-error-counter netlink command to drm_ras 2026-04-24 08:43:42 -04:00
drm_ras.c drm/drm_ras: Add clear-error-counter netlink command to drm_ras 2026-04-24 08:43:42 -04:00
drm_rect.c
drm_self_refresh_helper.c drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
drm_simple_kms_helper.c drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
drm_suballoc.c Merge tag 'drm-xe-next-2026-03-02' of https://gitlab.freedesktop.org/drm/xe/kernel into drm-next 2026-03-03 10:37:29 +10:00
drm_syncobj.c drm/syncobj: Fix memory leak in drm_syncobj_find_fence() 2026-05-18 11:19:59 +01:00
drm_sysfs.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
drm_trace_points.c
drm_trace.h
drm_vblank_helper.c drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
drm_vblank_work.c
drm_vblank.c drm/vblank: Extract get_vblank_counter_and_timestamp() 2026-03-27 13:40:44 +02:00
drm_vma_manager.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
drm_writeback.c dma-buf: inline spinlock for fence protection v5 2026-02-23 16:14:19 +01:00
Kconfig DRM Rust changes for v7.1-rc1 2026-04-01 07:32:05 +10:00
Kconfig.debug drm: fix dead default for DRM_TTM_KUNIT_TEST 2026-03-24 16:19:04 +01:00
Makefile Merge drm/drm-next into drm-xe-next 2026-03-12 07:23:23 -07:00