diff --git a/msm8998/QCamera2/HAL3/QCamera3Channel.cpp b/msm8998/QCamera2/HAL3/QCamera3Channel.cpp
index 6307aaa..fd0c9c4 100644
--- a/msm8998/QCamera2/HAL3/QCamera3Channel.cpp
+++ b/msm8998/QCamera2/HAL3/QCamera3Channel.cpp
@@ -3715,7 +3715,7 @@
         Mutex::Autolock lock(mFreeBuffersLock);
         uint32_t bufIdx;
         if (mFreeBufferList.empty()) {
-            rc = mYuvMemory->allocateOne(mFrameLen);
+            rc = mYuvMemory->allocateOne(mFrameLen, /*isCached*/false);
             if (rc < 0) {
                 LOGE("Failed to allocate heap buffer. Fatal");
                 return rc;
@@ -4049,7 +4049,7 @@
     // Get an available YUV buffer.
     if (mFreeBufferList.empty()) {
         // Allocate a buffer if no one is available.
-        rc = mYuvMemory->allocateOne(mFrameLen);
+        rc = mYuvMemory->allocateOne(mFrameLen, /*isCached*/false);
         if (rc < 0) {
             LOGE("Failed to allocate heap buffer. Fatal");
             return rc;
@@ -4132,9 +4132,6 @@
         return rc;
     }
 
-    // Invalidate YUV buffer cache
-    mYuvMemory->invalidateCache(frame->buf_idx);
-
     // Start postprocessor
     startPostProc(reproc_cfg);
 
diff --git a/msm8998/QCamera2/HAL3/QCamera3Mem.cpp b/msm8998/QCamera2/HAL3/QCamera3Mem.cpp
index 4298bbe..9cccf32 100755
--- a/msm8998/QCamera2/HAL3/QCamera3Mem.cpp
+++ b/msm8998/QCamera2/HAL3/QCamera3Mem.cpp
@@ -303,7 +303,7 @@
  *              none-zero failure code
  *==========================================================================*/
 int QCamera3HeapMemory::allocOneBuffer(QCamera3MemInfo &memInfo,
-        unsigned int heap_id, size_t size)
+        unsigned int heap_id, size_t size, bool isCached)
 {
     int rc = OK;
     struct ion_handle_data handle_data;
@@ -320,7 +320,9 @@
     /* to make it page size aligned */
     allocData.len = (allocData.len + 4095U) & (~4095U);
     allocData.align = 4096;
-    allocData.flags = ION_FLAG_CACHED;
+    if (isCached) {
+        allocData.flags = ION_FLAG_CACHED;
+    }
     allocData.heap_id_mask = heap_id;
     rc = ioctl(main_ion_fd, ION_IOC_ALLOC, &allocData);
     if (rc < 0) {
@@ -617,7 +619,7 @@
  *              NO_ERROR  -- success
  *              none-zero failure code
  *==========================================================================*/
-int QCamera3HeapMemory::allocateOne(size_t size)
+int QCamera3HeapMemory::allocateOne(size_t size, bool isCached)
 {
     unsigned int heap_id_mask = 0x1 << ION_IOMMU_HEAP_ID;
     int rc = NO_ERROR;
@@ -631,7 +633,7 @@
         return BAD_INDEX;
     }
 
-    rc = allocOneBuffer(mMemInfo[mBufferCount], heap_id_mask, size);
+    rc = allocOneBuffer(mMemInfo[mBufferCount], heap_id_mask, size, isCached);
     if (rc < 0) {
         LOGE("AllocateIonMemory failed");
         return NO_MEMORY;
diff --git a/msm8998/QCamera2/HAL3/QCamera3Mem.h b/msm8998/QCamera2/HAL3/QCamera3Mem.h
index 14224e4..eb1ac6f 100644
--- a/msm8998/QCamera2/HAL3/QCamera3Mem.h
+++ b/msm8998/QCamera2/HAL3/QCamera3Mem.h
@@ -107,7 +107,7 @@
     virtual ~QCamera3HeapMemory();
 
     int allocate(size_t size);
-    int allocateOne(size_t size);
+    int allocateOne(size_t size, bool isCached = true);
     void deallocate();
 
     virtual int cacheOps(uint32_t index, unsigned int cmd);
@@ -123,7 +123,7 @@
     virtual void *getPtrLocked(uint32_t index);
 private:
     int allocOneBuffer(struct QCamera3MemInfo &memInfo,
-            unsigned int heap_id, size_t size);
+            unsigned int heap_id, size_t size, bool isCached = true);
     void deallocOneBuffer(struct QCamera3MemInfo &memInfo);
     uint32_t mMaxCnt;
 };
diff --git a/msm8998/QCamera2/HAL3/QCamera3StreamMem.cpp b/msm8998/QCamera2/HAL3/QCamera3StreamMem.cpp
index 5412abd..e307539 100644
--- a/msm8998/QCamera2/HAL3/QCamera3StreamMem.cpp
+++ b/msm8998/QCamera2/HAL3/QCamera3StreamMem.cpp
@@ -395,10 +395,10 @@
     return mHeapMem.allocate(size);
 }
 
-int QCamera3StreamMem::allocateOne(size_t size)
+int QCamera3StreamMem::allocateOne(size_t size, bool isCached)
 {
     Mutex::Autolock lock(mLock);
-    return mHeapMem.allocateOne(size);
+    return mHeapMem.allocateOne(size, isCached);
 }
 
 /*===========================================================================
diff --git a/msm8998/QCamera2/HAL3/QCamera3StreamMem.h b/msm8998/QCamera2/HAL3/QCamera3StreamMem.h
index cbe3ea6..263d798 100644
--- a/msm8998/QCamera2/HAL3/QCamera3StreamMem.h
+++ b/msm8998/QCamera2/HAL3/QCamera3StreamMem.h
@@ -74,7 +74,7 @@
 
     // Heap buffer related functions
     int allocateAll(size_t size);
-    int allocateOne(size_t size);
+    int allocateOne(size_t size, bool isCached = true);
     void deallocate(); //TODO: replace with unified clear() function?
 
     // Clear function: unregister for gralloc buffer, and deallocate for heap buffer
