Merge "hwc: Handle layers marked as PROTECTED flag as secure"
diff --git a/libhwcomposer/hwc_mdpcomp.cpp b/libhwcomposer/hwc_mdpcomp.cpp
index a81913d..1df423d 100644
--- a/libhwcomposer/hwc_mdpcomp.cpp
+++ b/libhwcomposer/hwc_mdpcomp.cpp
@@ -470,8 +470,10 @@
     }
 
     //XXX: Investigate doing this with pixel phase on MDSS
-    if(!isSecureBuffer(hnd) && isNonIntegralSourceCrop(layer->sourceCropf))
+    if((!isSecureBuffer(hnd) || !isProtectedBuffer(hnd)) &&
+            isNonIntegralSourceCrop(layer->sourceCropf)) {
         return false;
+    }
 
     hwc_rect_t crop = integerizeSourceCrop(layer->sourceCropf);
     hwc_rect_t dst = layer->displayFrame;
@@ -1866,7 +1868,8 @@
         } else {
             if(frame.isFBComposed[nYuvIndex]) {
                 private_handle_t *hnd = (private_handle_t *)layer->handle;
-                if(!secureOnly || isSecureBuffer(hnd)) {
+                if(!secureOnly || isSecureBuffer(hnd) ||
+                        isProtectedBuffer(hnd)) {
                     frame.isFBComposed[nYuvIndex] = false;
                     frame.fbCount--;
                 }
diff --git a/libhwcomposer/hwc_utils.cpp b/libhwcomposer/hwc_utils.cpp
index f9d2e1c..19514e6 100644
--- a/libhwcomposer/hwc_utils.cpp
+++ b/libhwcomposer/hwc_utils.cpp
@@ -1196,7 +1196,8 @@
         ctx->listStats[dpy].yuvIndices[i] = -1;
         ctx->listStats[dpy].yuv4k2kIndices[i] = -1;
 
-        if (isSecureBuffer(hnd)) {
+        if (isSecureBuffer(hnd) || isProtectedBuffer(hnd)) {
+            // Protected Buffer must be treated as Secure Layer
             ctx->listStats[dpy].isSecurePresent = true;
             if(not isYuvBuffer(hnd)) {
                 // cache secureRGB layer parameters like we cache for YUV layers
diff --git a/libhwcomposer/hwc_utils.h b/libhwcomposer/hwc_utils.h
index 41dd258..1cceb81 100644
--- a/libhwcomposer/hwc_utils.h
+++ b/libhwcomposer/hwc_utils.h
@@ -538,12 +538,12 @@
             (hnd->width > maxPipeWidth));
 }
 
-// Returns true if the buffer is secure
+// Returns true if the buffer is secure(using secure heap)
 static inline bool isSecureBuffer(const private_handle_t* hnd) {
     return (hnd && (private_handle_t::PRIV_FLAGS_SECURE_BUFFER & hnd->flags));
 }
 
-// Returns true if the buffer is protected
+// Returns true if the buffer is protected(L3 using IOMMU heap)
 static inline bool isProtectedBuffer(const private_handle_t* hnd) {
     return (hnd && (private_handle_t::PRIV_FLAGS_PROTECTED_BUFFER & hnd->flags));
 }