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;
}