* [PATCH v16] drm/etnaviv: Fix page property being used for non writecombine buffers
@ 2024-11-04 0:41 Sui Jingfeng
2024-12-03 17:47 ` Lucas Stach
0 siblings, 1 reply; 2+ messages in thread
From: Sui Jingfeng @ 2024-11-04 0:41 UTC (permalink / raw)
To: Lucas Stach, Russell King, Christian Gmeiner
Cc: David Airlie, Simona Vetter, etnaviv, dri-devel, linux-kernel,
Sui Jingfeng
In the etnaviv_gem_vmap_impl() function, the driver vmap whatever buffers
with write combine(WC) page property, this is incorrect. Cached buffers
should be mapped with the cached page property and uncached buffers should
be mapped with the uncached page property.
Fixes: a0a5ab3e99b8 ("drm/etnaviv: call correct function when trying to vmap a DMABUF")
Signed-off-by: Sui Jingfeng <sui.jingfeng@linux.dev>
---
Split from my PCIe device driver wrapper support series, since this probably
should be resend as a standalone patch.
v15: Use `obj->flags & ETNA_BO_CACHE_MASK` (Lucas)
---
drivers/gpu/drm/etnaviv/etnaviv_gem.c | 16 ++++++++++++++--
1 file changed, 14 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem.c b/drivers/gpu/drm/etnaviv/etnaviv_gem.c
index d51843d9a476..d2cb9dded051 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_gem.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_gem.c
@@ -362,6 +362,7 @@ static void etnaviv_gem_object_vunmap(struct drm_gem_object *obj,
static void *etnaviv_gem_vmap_impl(struct etnaviv_gem_object *obj)
{
struct page **pages;
+ pgprot_t prot;
lockdep_assert_held(&obj->lock);
@@ -369,8 +370,19 @@ static void *etnaviv_gem_vmap_impl(struct etnaviv_gem_object *obj)
if (IS_ERR(pages))
return NULL;
- return vmap(pages, obj->base.size >> PAGE_SHIFT,
- VM_MAP, pgprot_writecombine(PAGE_KERNEL));
+ switch (obj->flags & ETNA_BO_CACHE_MASK) {
+ case ETNA_BO_CACHED:
+ prot = PAGE_KERNEL;
+ break;
+ case ETNA_BO_UNCACHED:
+ prot = pgprot_noncached(PAGE_KERNEL);
+ break;
+ case ETNA_BO_WC:
+ default:
+ prot = pgprot_writecombine(PAGE_KERNEL);
+ }
+
+ return vmap(pages, obj->base.size >> PAGE_SHIFT, VM_MAP, prot);
}
static inline enum dma_data_direction etnaviv_op_to_dma_dir(u32 op)
--
2.34.1
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH v16] drm/etnaviv: Fix page property being used for non writecombine buffers
2024-11-04 0:41 [PATCH v16] drm/etnaviv: Fix page property being used for non writecombine buffers Sui Jingfeng
@ 2024-12-03 17:47 ` Lucas Stach
0 siblings, 0 replies; 2+ messages in thread
From: Lucas Stach @ 2024-12-03 17:47 UTC (permalink / raw)
To: Sui Jingfeng, Russell King, Christian Gmeiner
Cc: David Airlie, Simona Vetter, etnaviv, dri-devel, linux-kernel
Am Montag, dem 04.11.2024 um 08:41 +0800 schrieb Sui Jingfeng:
> In the etnaviv_gem_vmap_impl() function, the driver vmap whatever buffers
> with write combine(WC) page property, this is incorrect. Cached buffers
> should be mapped with the cached page property and uncached buffers should
> be mapped with the uncached page property.
>
Thanks, applied to etnaviv/next.
Regards,
Lucas
> Fixes: a0a5ab3e99b8 ("drm/etnaviv: call correct function when trying to vmap a DMABUF")
> Signed-off-by: Sui Jingfeng <sui.jingfeng@linux.dev>
> ---
> Split from my PCIe device driver wrapper support series, since this probably
> should be resend as a standalone patch.
>
> v15: Use `obj->flags & ETNA_BO_CACHE_MASK` (Lucas)
> ---
> drivers/gpu/drm/etnaviv/etnaviv_gem.c | 16 ++++++++++++++--
> 1 file changed, 14 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem.c b/drivers/gpu/drm/etnaviv/etnaviv_gem.c
> index d51843d9a476..d2cb9dded051 100644
> --- a/drivers/gpu/drm/etnaviv/etnaviv_gem.c
> +++ b/drivers/gpu/drm/etnaviv/etnaviv_gem.c
> @@ -362,6 +362,7 @@ static void etnaviv_gem_object_vunmap(struct drm_gem_object *obj,
> static void *etnaviv_gem_vmap_impl(struct etnaviv_gem_object *obj)
> {
> struct page **pages;
> + pgprot_t prot;
>
> lockdep_assert_held(&obj->lock);
>
> @@ -369,8 +370,19 @@ static void *etnaviv_gem_vmap_impl(struct etnaviv_gem_object *obj)
> if (IS_ERR(pages))
> return NULL;
>
> - return vmap(pages, obj->base.size >> PAGE_SHIFT,
> - VM_MAP, pgprot_writecombine(PAGE_KERNEL));
> + switch (obj->flags & ETNA_BO_CACHE_MASK) {
> + case ETNA_BO_CACHED:
> + prot = PAGE_KERNEL;
> + break;
> + case ETNA_BO_UNCACHED:
> + prot = pgprot_noncached(PAGE_KERNEL);
> + break;
> + case ETNA_BO_WC:
> + default:
> + prot = pgprot_writecombine(PAGE_KERNEL);
> + }
> +
> + return vmap(pages, obj->base.size >> PAGE_SHIFT, VM_MAP, prot);
> }
>
> static inline enum dma_data_direction etnaviv_op_to_dma_dir(u32 op)
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2024-12-03 17:47 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-11-04 0:41 [PATCH v16] drm/etnaviv: Fix page property being used for non writecombine buffers Sui Jingfeng
2024-12-03 17:47 ` Lucas Stach
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome