]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/etnaviv: fix DMA direction handling for cached RW buffers
authorLucas Stach <l.stach@pengutronix.de>
Fri, 21 Jun 2024 17:11:06 +0000 (19:11 +0200)
committerLucas Stach <l.stach@pengutronix.de>
Wed, 26 Jun 2024 13:31:58 +0000 (15:31 +0200)
The dma sync operation needs to be done with DMA_BIDIRECTIONAL when
the BO is prepared for both read and write operations.

Fixes: a8c21a5451d8 ("drm/etnaviv: add initial etnaviv DRM driver")
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>
Reviewed-by: Christian Gmeiner <cgmeiner@igalia.com>
drivers/gpu/drm/etnaviv/etnaviv_gem.c

index 71a6d2b1c80f5106c837b9968c4f9e069394a9c7..5c0c9d4e3be183b694d9432caa10c1df26113478 100644 (file)
@@ -355,9 +355,11 @@ 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)
+       op &= ETNA_PREP_READ | ETNA_PREP_WRITE;
+
+       if (op == ETNA_PREP_READ)
                return DMA_FROM_DEVICE;
-       else if (op & ETNA_PREP_WRITE)
+       else if (op == ETNA_PREP_WRITE)
                return DMA_TO_DEVICE;
        else
                return DMA_BIDIRECTIONAL;