display: Use cache invalidate and clean correctly
Make sure cache is invalidated before reading in software and
cleaned after writing in software.
Change-Id: I91c471c47a5f1ff11f9960f08091a17ffe575534
diff --git a/libgralloc/ionalloc.cpp b/libgralloc/ionalloc.cpp
index 8480f98..83e62e7 100644
--- a/libgralloc/ionalloc.cpp
+++ b/libgralloc/ionalloc.cpp
@@ -145,7 +145,8 @@
}
memset(base, 0, ionAllocData.len);
// Clean cache after memset
- clean_buffer(base, data.size, data.offset, fd_data.fd);
+ clean_buffer(base, data.size, data.offset, fd_data.fd,
+ CACHE_CLEAN_AND_INVALIDATE);
}
data.base = base;
@@ -209,7 +210,7 @@
return err;
}
-int IonAlloc::clean_buffer(void *base, size_t size, int offset, int fd)
+int IonAlloc::clean_buffer(void *base, size_t size, int offset, int fd, int op)
{
struct ion_flush_data flush_data;
struct ion_fd_data fd_data;
@@ -237,7 +238,18 @@
#ifdef NEW_ION_API
struct ion_custom_data d;
- d.cmd = ION_IOC_CLEAN_INV_CACHES;
+ switch(op) {
+ case CACHE_CLEAN:
+ d.cmd = ION_IOC_CLEAN_CACHES;
+ break;
+ case CACHE_INVALIDATE:
+ d.cmd = ION_IOC_INV_CACHES;
+ break;
+ case CACHE_CLEAN_AND_INVALIDATE:
+ default:
+ d.cmd = ION_IOC_CLEAN_INV_CACHES;
+ }
+
d.arg = (unsigned long int)&flush_data;
if(ioctl(mIonFd, ION_IOC_CUSTOM, &d)) {