msm: kgsl: remove readl/writel use for dma memory
For dma_alloc_coherent() you don't need writel/readl because
it's just a plain old void *. Linux tries very hard to make a
distinction between io memory (void __iomem *) and memory
(void *) so that drivers are portable to architectures that
don't have a way to access registers via pointer dereferences.
You can see http://lwn.net/Articles/102232/ and the Linus rant
http://lwn.net/Articles/102240/ here for more details behind
the motivation.
Change-Id: I3da075c30304e4adf321cfb3edb1baa4a93fc2ce
Signed-off-by: Jeremy Gebben <jgebben@codeaurora.org>
diff --git a/drivers/gpu/msm/kgsl_sharedmem.c b/drivers/gpu/msm/kgsl_sharedmem.c
index 7211879..389ed6d 100644
--- a/drivers/gpu/msm/kgsl_sharedmem.c
+++ b/drivers/gpu/msm/kgsl_sharedmem.c
@@ -636,13 +636,17 @@
uint32_t *dst,
unsigned int offsetbytes)
{
+ uint32_t *src;
BUG_ON(memdesc == NULL || memdesc->hostptr == NULL || dst == NULL);
- WARN_ON(offsetbytes + sizeof(unsigned int) > memdesc->size);
+ WARN_ON(offsetbytes % sizeof(uint32_t) != 0);
+ if (offsetbytes % sizeof(uint32_t) != 0)
+ return -EINVAL;
- if (offsetbytes + sizeof(unsigned int) > memdesc->size)
+ WARN_ON(offsetbytes + sizeof(uint32_t) > memdesc->size);
+ if (offsetbytes + sizeof(uint32_t) > memdesc->size)
return -ERANGE;
-
- *dst = readl_relaxed(memdesc->hostptr + offsetbytes);
+ src = (uint32_t *)(memdesc->hostptr + offsetbytes);
+ *dst = *src;
return 0;
}
EXPORT_SYMBOL(kgsl_sharedmem_readl);
@@ -652,12 +656,19 @@
unsigned int offsetbytes,
uint32_t src)
{
+ uint32_t *dst;
BUG_ON(memdesc == NULL || memdesc->hostptr == NULL);
- BUG_ON(offsetbytes + sizeof(unsigned int) > memdesc->size);
+ WARN_ON(offsetbytes % sizeof(uint32_t) != 0);
+ if (offsetbytes % sizeof(uint32_t) != 0)
+ return -EINVAL;
+ WARN_ON(offsetbytes + sizeof(uint32_t) > memdesc->size);
+ if (offsetbytes + sizeof(uint32_t) > memdesc->size)
+ return -ERANGE;
kgsl_cffdump_setmem(memdesc->gpuaddr + offsetbytes,
- src, sizeof(uint));
- writel_relaxed(src, memdesc->hostptr + offsetbytes);
+ src, sizeof(uint32_t));
+ dst = (uint32_t *)(memdesc->hostptr + offsetbytes);
+ *dst = src;
return 0;
}
EXPORT_SYMBOL(kgsl_sharedmem_writel);