With LV_USE_GPU_STM32_DMA2D, cache is cleaned and invalidated before each GPU call, and each GPU call waits for the DMA2D operation to be complete. Perhaps the STM32 DMA2D stuff needs some more attention? BTW is there any specific reason the STM32 DMA2D doesn't just hook into the exist...