Merge "hwc: Add DMA pipe support in MDP composition."
diff --git a/libcopybit/copybit_c2d.cpp b/libcopybit/copybit_c2d.cpp
index dfbbf76..fa63b4c 100644
--- a/libcopybit/copybit_c2d.cpp
+++ b/libcopybit/copybit_c2d.cpp
@@ -1284,8 +1284,7 @@
return COPYBIT_FAILURE;
}
- src_surface.config_mask = C2D_NO_BILINEAR_BIT | C2D_NO_ANTIALIASING_BIT |
- ctx->config_mask;
+ src_surface.config_mask = C2D_NO_ANTIALIASING_BIT | ctx->config_mask;
src_surface.global_alpha = ctx->src_global_alpha;
if (enableBlend) {
if(src_surface.config_mask & C2D_GLOBAL_ALPHA_BIT) {
diff --git a/libgralloc/alloc_controller.cpp b/libgralloc/alloc_controller.cpp
index 9af52c9..8ef5611 100644
--- a/libgralloc/alloc_controller.cpp
+++ b/libgralloc/alloc_controller.cpp
@@ -175,7 +175,6 @@
{
int ionFlags = 0;
int ret;
- bool noncontig = false;
data.uncached = useUncached(usage);
data.allocType = 0;
@@ -183,24 +182,33 @@
if(usage & GRALLOC_USAGE_PRIVATE_UI_CONTIG_HEAP)
ionFlags |= ION_HEAP(ION_SF_HEAP_ID);
- if(usage & GRALLOC_USAGE_PRIVATE_SYSTEM_HEAP) {
+ if(usage & GRALLOC_USAGE_PRIVATE_SYSTEM_HEAP)
ionFlags |= ION_HEAP(ION_SYSTEM_HEAP_ID);
- noncontig = true;
- }
- if(usage & GRALLOC_USAGE_PRIVATE_IOMMU_HEAP) {
+ if(usage & GRALLOC_USAGE_PRIVATE_IOMMU_HEAP)
ionFlags |= ION_HEAP(ION_IOMMU_HEAP_ID);
- noncontig = true;
- }
- if(usage & GRALLOC_USAGE_PRIVATE_MM_HEAP)
- ionFlags |= ION_HEAP(ION_CP_MM_HEAP_ID);
+ //MM Heap is exclusively a secure heap.
+ if(usage & GRALLOC_USAGE_PRIVATE_MM_HEAP) {
+ //XXX: Right now the MM heap is the only secure heap we have. When we
+ //have other secure heaps, we can change this.
+ if(usage & GRALLOC_USAGE_PROTECTED) {
+ ionFlags |= ION_HEAP(ION_CP_MM_HEAP_ID);
+ ionFlags |= ION_SECURE;
+ }
+ else {
+ ALOGW("GRALLOC_USAGE_PRIVATE_MM_HEAP \
+ cannot be used as an insecure heap!\
+ trying to use IOMMU instead !!");
+ ionFlags |= ION_HEAP(ION_IOMMU_HEAP_ID);
+ }
+ }
if(usage & GRALLOC_USAGE_PRIVATE_ADSP_HEAP)
ionFlags |= ION_HEAP(ION_ADSP_HEAP_ID);
- if(usage & GRALLOC_USAGE_PROTECTED && !noncontig)
- ionFlags |= ION_SECURE;
+ if(usage & GRALLOC_USAGE_PROTECTED)
+ data.allocType |= private_handle_t::PRIV_FLAGS_SECURE_BUFFER;
// if no flags are set, default to
// SF + IOMMU heaps, so that bypass can work
@@ -218,16 +226,11 @@
{
ALOGW("Falling back to system heap");
data.flags = ION_HEAP(ION_SYSTEM_HEAP_ID);
- noncontig = true;
ret = mIonAlloc->alloc_buffer(data);
}
if(ret >= 0 ) {
data.allocType |= private_handle_t::PRIV_FLAGS_USES_ION;
- if(noncontig)
- data.allocType |= private_handle_t::PRIV_FLAGS_NONCONTIGUOUS_MEM;
- if(ionFlags & ION_SECURE)
- data.allocType |= private_handle_t::PRIV_FLAGS_SECURE_BUFFER;
}
return ret;
diff --git a/libhwcomposer/hwc_fbupdate.cpp b/libhwcomposer/hwc_fbupdate.cpp
index f7fce09..7a740ee 100644
--- a/libhwcomposer/hwc_fbupdate.cpp
+++ b/libhwcomposer/hwc_fbupdate.cpp
@@ -228,12 +228,16 @@
hwc_rect_t displayFrame = sourceCrop;
//For FB left, top will always be 0
//That should also be the case if using 2 mixers for single display
- ovutils::Dim dpos(displayFrame.left,
+ ovutils::Dim dposL(displayFrame.left,
displayFrame.top,
(displayFrame.right - displayFrame.left) / 2,
displayFrame.bottom - displayFrame.top);
- ov.setPosition(dpos, destL);
- ov.setPosition(dpos, destR);
+ ov.setPosition(dposL, destL);
+ ovutils::Dim dposR(0,
+ displayFrame.top,
+ (displayFrame.right - displayFrame.left) / 2,
+ displayFrame.bottom - displayFrame.top);
+ ov.setPosition(dposR, destR);
ret = true;
if (!ov.commit(destL)) {
diff --git a/libhwcomposer/hwc_utils.cpp b/libhwcomposer/hwc_utils.cpp
index 3af37dd..7444777 100644
--- a/libhwcomposer/hwc_utils.cpp
+++ b/libhwcomposer/hwc_utils.cpp
@@ -797,6 +797,8 @@
if(rDest != OV_INVALID) {
PipeArgs pargR(mdpFlagsR, whf, z, isFg,
static_cast<eRotFlags>(rotFlags));
+ tmp_dstR.right = tmp_dstR.right - tmp_dstR.left;
+ tmp_dstR.left = 0;
if(configMdp(ctx->mOverlay, pargR, orient,
tmp_cropR, tmp_dstR, rDest) < 0) {
ALOGE("%s: commit failed for right mixer config", __FUNCTION__);
diff --git a/libhwcomposer/hwc_vsync.cpp b/libhwcomposer/hwc_vsync.cpp
index 559cd7d..b42043f 100644
--- a/libhwcomposer/hwc_vsync.cpp
+++ b/libhwcomposer/hwc_vsync.cpp
@@ -136,9 +136,11 @@
cur_timestamp = systemTime();
}
// send timestamp to HAL
- ALOGD_IF (logvsync, "%s: timestamp %llu sent to HWC for %s",
- __FUNCTION__, cur_timestamp, "fb0");
- ctx->proc->vsync(ctx->proc, dpy, cur_timestamp);
+ if(ctx->vstate.enable) {
+ ALOGD_IF (logvsync, "%s: timestamp %llu sent to HWC for %s",
+ __FUNCTION__, cur_timestamp, "fb0");
+ ctx->proc->vsync(ctx->proc, dpy, cur_timestamp);
+ }
} while (true);
if(fd_timestamp >= 0)
diff --git a/liboverlay/overlayMem.h b/liboverlay/overlayMem.h
index d3cabb6..5fbe91b 100644
--- a/liboverlay/overlayMem.h
+++ b/liboverlay/overlayMem.h
@@ -138,21 +138,11 @@
data.uncached = true;
err = mAlloc->allocate(data, allocFlags);
- //see if we can fallback to other heap
- //we can try MM_HEAP once if it's not secure playback
- if (err != 0 && !isSecure) {
- allocFlags |= GRALLOC_USAGE_PRIVATE_MM_HEAP;
- err = mAlloc->allocate(data, allocFlags);
- if (err != 0) {
- ALOGE(" could not allocate from fallback heap");
- return false;
- }
- } else if (err != 0) {
- ALOGE("OvMem: error allocating memory can not fall back");
+ if (err != 0) {
+ ALOGE("OvMem: Error allocating memory");
return false;
}
-
mFd = data.fd;
mBaseAddr = data.base;
mAllocType = data.allocType;