The dma sync operation needs to be done with DMA_BIDIRECTIONAL when the BO is prepared for both read and write operations. With the current inverted if ladder it would only be synced for DMA_FROM_DEVICE.
Fixes: a8c21a5451d8 ("drm/etnaviv: add initial etnaviv DRM driver") Signed-off-by: Lucas Stach <l.st...@pengutronix.de> --- drivers/gpu/drm/etnaviv/etnaviv_gem.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem.c b/drivers/gpu/drm/etnaviv/etnaviv_gem.c index b5f73502e3dd..d788a27aacb8 100644 --- a/drivers/gpu/drm/etnaviv/etnaviv_gem.c +++ b/drivers/gpu/drm/etnaviv/etnaviv_gem.c @@ -356,12 +356,14 @@ static void *etnaviv_gem_vmap_impl(struct etnaviv_gem_object *obj) static inline enum dma_data_direction etnaviv_op_to_dma_dir(u32 op) { - if (op & ETNA_PREP_READ) + if (op & (ETNA_PREP_READ | ETNA_PREP_WRITE)) + return DMA_BIDIRECTIONAL; + else if (op & ETNA_PREP_READ) return DMA_FROM_DEVICE; else if (op & ETNA_PREP_WRITE) return DMA_TO_DEVICE; - else - return DMA_BIDIRECTIONAL; + + return DMA_NONE; } int etnaviv_gem_cpu_prep(struct drm_gem_object *obj, u32 op, -- 2.39.2