Merge "overlay: mdssRot: Do not reset non-rotation flags."
diff --git a/libgralloc/alloc_controller.cpp b/libgralloc/alloc_controller.cpp
index 669ea08..57c6bae 100644
--- a/libgralloc/alloc_controller.cpp
+++ b/libgralloc/alloc_controller.cpp
@@ -62,8 +62,7 @@
         return false;
     if(triedSystem)
         return false;
-    if(usage & (GRALLOC_HEAP_MASK | GRALLOC_USAGE_PROTECTED |
-                GRALLOC_USAGE_PRIVATE_CP_BUFFER))
+    if(usage & (GRALLOC_HEAP_MASK | GRALLOC_USAGE_PROTECTED))
         return false;
     if(usage & (GRALLOC_HEAP_MASK | GRALLOC_USAGE_PRIVATE_EXTERNAL_ONLY))
         return false;
@@ -124,7 +123,7 @@
     if(usage & GRALLOC_USAGE_PRIVATE_CAMERA_HEAP)
         ionFlags |= ION_HEAP(ION_CAMERA_HEAP_ID);
 
-    if(usage & GRALLOC_USAGE_PRIVATE_CP_BUFFER)
+    if(usage & GRALLOC_USAGE_PROTECTED)
         ionFlags |= ION_SECURE;
 
     // if no flags are set, default to
diff --git a/libgralloc/gpu.cpp b/libgralloc/gpu.cpp
index f11a5fe..291f564 100644
--- a/libgralloc/gpu.cpp
+++ b/libgralloc/gpu.cpp
@@ -28,9 +28,12 @@
 #include "memalloc.h"
 #include "alloc_controller.h"
 #include <qdMetaData.h>
+#include "mdp_version.h"
 
 using namespace gralloc;
 
+#define SZ_1M 0x100000
+
 gpu_context_t::gpu_context_t(const private_module_t* module,
                              IAllocController* alloc_ctrl ) :
     mAllocCtrl(alloc_ctrl)
@@ -131,11 +134,18 @@
     data.offset = 0;
     data.fd = -1;
     data.base = 0;
-    data.size = size;
     if(format == HAL_PIXEL_FORMAT_YCbCr_420_SP_TILED)
         data.align = 8192;
     else
         data.align = getpagesize();
+
+    /* force 1MB alignment selectively for secure buffers, MDP5 onwards */
+    if ((qdutils::MDPVersion::getInstance().getMDPVersion() >= \
+         qdutils::MDSS_V5) && (usage & GRALLOC_USAGE_PROTECTED)) {
+        data.align = ALIGN(data.align, SZ_1M);
+        size = ALIGN(size, data.align);
+    }
+    data.size = size;
     data.pHandle = (unsigned int) pHandle;
     err = mAllocCtrl->allocate(data, usage);
 
@@ -242,8 +252,7 @@
     // All buffers marked as protected or for external
     // display need to go to overlay
     if ((usage & GRALLOC_USAGE_EXTERNAL_DISP) ||
-        (usage & GRALLOC_USAGE_PROTECTED) ||
-        (usage & GRALLOC_USAGE_PRIVATE_CP_BUFFER)) {
+        (usage & GRALLOC_USAGE_PROTECTED)) {
         bufferType = BUFFER_TYPE_VIDEO;
     }
 
diff --git a/libhwcomposer/hwc_utils.cpp b/libhwcomposer/hwc_utils.cpp
index 9cc5c24..7a3adbb 100644
--- a/libhwcomposer/hwc_utils.cpp
+++ b/libhwcomposer/hwc_utils.cpp
@@ -226,6 +226,12 @@
     return false;
 }
 
+bool isSecureModePolicy(int mdpVersion) {
+    if (mdpVersion < qdutils::MDSS_V5)
+        return true;
+    else
+        return false;
+}
 
 //Crops source buffer against destination and FB boundaries
 void calculate_crop_rects(hwc_rect_t& crop, hwc_rect_t& dst,
diff --git a/libhwcomposer/hwc_utils.h b/libhwcomposer/hwc_utils.h
index 0005582..5316347 100644
--- a/libhwcomposer/hwc_utils.h
+++ b/libhwcomposer/hwc_utils.h
@@ -130,6 +130,7 @@
 void calculate_crop_rects(hwc_rect_t& crop, hwc_rect_t& dst,
         const int fbWidth, const int fbHeight, int orient);
 bool isSecuring(hwc_context_t* ctx);
+bool isSecureModePolicy(int mdpVersion);
 bool isExternalActive(hwc_context_t* ctx);
 
 //Helper function to dump logs
diff --git a/libhwcomposer/hwc_video.cpp b/libhwcomposer/hwc_video.cpp
index 16d0c89..13f3cdd 100644
--- a/libhwcomposer/hwc_video.cpp
+++ b/libhwcomposer/hwc_video.cpp
@@ -52,19 +52,20 @@
 
     //index guaranteed to be not -1 at this point
     hwc_layer_1_t *layer = &list->hwLayers[yuvIndex];
-
-    private_handle_t *hnd = (private_handle_t *)layer->handle;
-    if(ctx->mSecureMode) {
-        if (! isSecureBuffer(hnd)) {
-            ALOGD_IF(VIDEO_DEBUG, "%s: Handle non-secure video layer"
-                     "during secure playback gracefully", __FUNCTION__);
-            return false;
-        }
-    } else {
-        if (isSecureBuffer(hnd)) {
-            ALOGD_IF(VIDEO_DEBUG, "%s: Handle secure video layer"
-                     "during non-secure playback gracefully", __FUNCTION__);
-            return false;
+    if (isSecureModePolicy(ctx->mMDP.version)) {
+        private_handle_t *hnd = (private_handle_t *)layer->handle;
+        if(ctx->mSecureMode) {
+            if (! isSecureBuffer(hnd)) {
+                ALOGD_IF(VIDEO_DEBUG, "%s: Handle non-secure video layer"
+                         "during secure playback gracefully", __FUNCTION__);
+                return false;
+            }
+        } else {
+            if (isSecureBuffer(hnd)) {
+                ALOGD_IF(VIDEO_DEBUG, "%s: Handle secure video layer"
+                         "during non-secure playback gracefully", __FUNCTION__);
+                return false;
+            }
         }
     }
     if(configure(ctx, dpy, layer)) {
diff --git a/liboverlay/overlayMem.h b/liboverlay/overlayMem.h
index e81c2dc..ff8afcd 100644
--- a/liboverlay/overlayMem.h
+++ b/liboverlay/overlayMem.h
@@ -120,7 +120,7 @@
     int allocFlags = GRALLOC_USAGE_PRIVATE_IOMMU_HEAP;
     if(isSecure) {
         allocFlags = GRALLOC_USAGE_PRIVATE_MM_HEAP;
-        allocFlags |= GRALLOC_USAGE_PRIVATE_CP_BUFFER;
+        allocFlags |= GRALLOC_USAGE_PROTECTED;
         allocFlags |= GRALLOC_USAGE_PRIVATE_UNCACHED;
     }