diff --git a/gralloc/gr_allocator.cpp b/gralloc/gr_allocator.cpp
index 970278e..e5ec78c 100644
--- a/gralloc/gr_allocator.cpp
+++ b/gralloc/gr_allocator.cpp
@@ -96,9 +96,9 @@
   }
 }
 
-int Allocator::AllocateMem(AllocData *alloc_data, uint64_t usage) {
+int Allocator::AllocateMem(AllocData *alloc_data, uint64_t usage, int format) {
   int ret;
-  alloc_data->uncached = UseUncached(usage);
+  alloc_data->uncached = UseUncached(format, usage);
 
   // After this point we should have the right heap set, there is no fallback
   GetIonHeapInfo(usage, &alloc_data->heap_id, &alloc_data->alloc_type, &alloc_data->flags);
@@ -159,7 +159,7 @@
   *max_index = -1;
   for (uint32_t i = 0; i < num_descriptors; i++) {
     // Check Cached vs non-cached and all the ION flags
-    cur_uncached = UseUncached(descriptors[i]->GetUsage());
+    cur_uncached = UseUncached(descriptors[i]->GetFormat(), descriptors[i]->GetUsage());
     GetIonHeapInfo(descriptors[i]->GetUsage(), &cur_heap_id, &cur_alloc_type, &cur_ion_flags);
 
     if (i > 0 && (cur_heap_id != prev_heap_id || cur_alloc_type != prev_alloc_type ||
@@ -239,7 +239,7 @@
 /* The default policy is to return cached buffers unless the client explicity
  * sets the PRIVATE_UNCACHED flag or indicates that the buffer will be rarely
  * read or written in software. */
-bool Allocator::UseUncached(uint64_t usage) {
+bool Allocator::UseUncached(int format, uint64_t usage) {
   if ((usage & GRALLOC_USAGE_PRIVATE_UNCACHED) || (usage & BufferUsage::PROTECTED)) {
     return true;
   }
@@ -259,6 +259,10 @@
     return true;
   }
 
+  if (format && IsUBwcEnabled(format, usage)) {
+    return true;
+  }
+
   return false;
 }
 
diff --git a/gralloc/gr_allocator.h b/gralloc/gr_allocator.h
index 46ec09d..17fb0cb 100644
--- a/gralloc/gr_allocator.h
+++ b/gralloc/gr_allocator.h
@@ -48,13 +48,13 @@
   int ImportBuffer(int fd);
   int FreeBuffer(void *base, unsigned int size, unsigned int offset, int fd, int handle);
   int CleanBuffer(void *base, unsigned int size, unsigned int offset, int handle, int op, int fd);
-  int AllocateMem(AllocData *data, uint64_t usage);
+  int AllocateMem(AllocData *data, uint64_t usage, int format);
   // @return : index of the descriptor with maximum buffer size req
   bool CheckForBufferSharing(uint32_t num_descriptors,
                              const std::vector<std::shared_ptr<BufferDescriptor>> &descriptors,
                              ssize_t *max_index);
   int GetImplDefinedFormat(uint64_t usage, int format);
-  bool UseUncached(uint64_t usage);
+  bool UseUncached(int format, uint64_t usage);
 
  private:
   void GetIonHeapInfo(uint64_t usage, unsigned int *ion_heap_id, unsigned int *alloc_type,
diff --git a/gralloc/gr_buf_mgr.cpp b/gralloc/gr_buf_mgr.cpp
index 9f7b22e..6b6ec87 100644
--- a/gralloc/gr_buf_mgr.cpp
+++ b/gralloc/gr_buf_mgr.cpp
@@ -229,6 +229,11 @@
       status = Error::BAD_BUFFER;
     }
     hnd->flags &= ~private_handle_t::PRIV_FLAGS_NEEDS_FLUSH;
+  } else {
+    if (allocator_->CleanBuffer(reinterpret_cast<void *>(hnd->base), hnd->size, hnd->offset,
+                                buf->ion_handle_main, CACHE_READ_DONE, hnd->fd) != 0) {
+      status = Error::BAD_BUFFER;
+    }
   }
 
   return status;
@@ -273,7 +278,7 @@
     flags |= private_handle_t::PRIV_FLAGS_NON_CPU_WRITER;
   }
 
-  if (!allocator_->UseUncached(usage)) {
+  if (!allocator_->UseUncached(format, usage)) {
     flags |= private_handle_t::PRIV_FLAGS_CACHED;
   }
 
@@ -316,10 +321,10 @@
   data.align = GetDataAlignment(format, usage);
   data.size = size;
   data.handle = (uintptr_t)handle;
-  data.uncached = allocator_->UseUncached(usage);
+  data.uncached = allocator_->UseUncached(format, usage);
 
   // Allocate buffer memory
-  err = allocator_->AllocateMem(&data, usage);
+  err = allocator_->AllocateMem(&data, usage, format);
   if (err) {
     ALOGE("gralloc failed to allocate err=%s", strerror(-err));
     return Error::NO_RESOURCES;
@@ -331,7 +336,7 @@
   e_data.handle = data.handle;
   e_data.align = page_size;
 
-  err = allocator_->AllocateMem(&e_data, 0);
+  err = allocator_->AllocateMem(&e_data, 0, 0);
   if (err) {
     ALOGE("gralloc failed to allocate metadata error=%s", strerror(-err));
     return Error::NO_RESOURCES;
diff --git a/gralloc/gr_ion_alloc.cpp b/gralloc/gr_ion_alloc.cpp
index 36de059..2c7a90b 100644
--- a/gralloc/gr_ion_alloc.cpp
+++ b/gralloc/gr_ion_alloc.cpp
@@ -140,6 +140,9 @@
     case CACHE_INVALIDATE:
       sync.flags = DMA_BUF_SYNC_START | DMA_BUF_SYNC_RW;
       break;
+    case CACHE_READ_DONE:
+      sync.flags = DMA_BUF_SYNC_END | DMA_BUF_SYNC_READ;
+      break;
     default:
       ALOGE("%s: Invalid operation %d", __FUNCTION__, op);
       return -1;
@@ -247,6 +250,10 @@
 
 int IonAlloc::CleanBuffer(void *base, unsigned int size, unsigned int offset, int handle, int op,
                           int /*fd*/) {
+  if (op == CACHE_READ_DONE)  {
+    return 0;
+  }
+
   ATRACE_CALL();
   ATRACE_INT("operation id", op);
   struct ion_flush_data flush_data;
diff --git a/gralloc/gr_ion_alloc.h b/gralloc/gr_ion_alloc.h
index 763ac54..8cb1568 100644
--- a/gralloc/gr_ion_alloc.h
+++ b/gralloc/gr_ion_alloc.h
@@ -40,6 +40,7 @@
   CACHE_CLEAN = 0x1,
   CACHE_INVALIDATE,
   CACHE_CLEAN_AND_INVALIDATE,
+  CACHE_READ_DONE
 };
 
 struct AllocData {
