Message ID | 20240621171106.411596-1-l.stach@pengutronix.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2] drm/etnaviv: fix DMA direction handling for cached RW buffers | expand |
On Fr, 2024-06-21 at 19:11 +0200, Lucas Stach wrote: > 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> regards Philipp
> > 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: Christian Gmeiner <cgmeiner@igalia.com> > --- > v2: switch conditions to be exact matches > --- > drivers/gpu/drm/etnaviv/etnaviv_gem.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem.c b/drivers/gpu/drm/etnaviv/etnaviv_gem.c > index 71a6d2b1c80f..5c0c9d4e3be1 100644 > --- a/drivers/gpu/drm/etnaviv/etnaviv_gem.c > +++ b/drivers/gpu/drm/etnaviv/etnaviv_gem.c > @@ -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; > -- > 2.39.2 >
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem.c b/drivers/gpu/drm/etnaviv/etnaviv_gem.c index 71a6d2b1c80f..5c0c9d4e3be1 100644 --- a/drivers/gpu/drm/etnaviv/etnaviv_gem.c +++ b/drivers/gpu/drm/etnaviv/etnaviv_gem.c @@ -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;
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> --- v2: switch conditions to be exact matches --- drivers/gpu/drm/etnaviv/etnaviv_gem.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)