diff --git a/src/omv/imlib/framebuffer.c b/src/omv/imlib/framebuffer.c index 1f3e0fba3..4d614b6e3 100644 --- a/src/omv/imlib/framebuffer.c +++ b/src/omv/imlib/framebuffer.c @@ -342,6 +342,7 @@ void framebuffer_auto_adjust_buffers() { void framebuffer_free_current_buffer() { vbuffer_t *buffer = framebuffer_get_buffer(framebuffer->head); + #ifdef __DCACHE_PRESENT // Make sure all cached CPU writes are discarded before returning the buffer. SCB_InvalidateDCache_by_Addr(buffer->data, framebuffer_get_buffer_size()); @@ -400,7 +401,14 @@ vbuffer_t *framebuffer_get_head(framebuffer_flags_t flags) { framebuffer->head = new_head; } - return framebuffer_get_buffer(new_head); + vbuffer_t *buffer = framebuffer_get_buffer(new_head); + + #ifdef __DCACHE_PRESENT + // Make sure any cached CPU reads are dropped before returning the buffer. + SCB_InvalidateDCache_by_Addr(buffer->data, framebuffer_get_buffer_size()); + #endif + + return buffer; } vbuffer_t *framebuffer_get_tail(framebuffer_flags_t flags) {