Merge "hwc: allow DMA pipe in BLOCK mode for virtual dpy"
diff --git a/libhwcomposer/hwc_utils.cpp b/libhwcomposer/hwc_utils.cpp
index 1167f3a..50111d1 100644
--- a/libhwcomposer/hwc_utils.cpp
+++ b/libhwcomposer/hwc_utils.cpp
@@ -1857,9 +1857,9 @@
if(qdutils::MDPVersion::getInstance().is8x26() &&
ctx->mVirtualDisplay->isConnected() &&
!ctx->dpyAttr[HWC_DISPLAY_VIRTUAL].isPause) {
- // Allow if YUV needs rotation and DMA is configured to BLOCK mode for
- // primary. For portrait videos usecase on WFD, Driver supports
- // multiplexing of DMA pipe in LINE and BLOCK mode.
+ /* 8x26 mdss driver supports multiplexing of DMA pipe
+ * in LINE and BLOCK modes for writeback panels.
+ */
if(dpy == HWC_DISPLAY_PRIMARY)
return false;
}
diff --git a/liboverlay/overlay.cpp b/liboverlay/overlay.cpp
index 432ba81..e6da3c5 100644
--- a/liboverlay/overlay.cpp
+++ b/liboverlay/overlay.cpp
@@ -52,6 +52,7 @@
mDumpStr[0] = '\0';
initScalar();
+ setDMAMultiplexingSupported();
}
Overlay::~Overlay() {
@@ -139,8 +140,10 @@
(mPipeBook[i].mMixer == MIXER_UNUSED || //Free or same mixer
mPipeBook[i].mMixer == mixer) &&
PipeBook::isNotAllocated(i) && //Free pipe
- !(sDMAMode == DMA_BLOCK_MODE && //DMA pipe in Line mode
- PipeBook::getPipeType((eDest)i) == OV_MDP_PIPE_DMA)) {
+ ( (sDMAMultiplexingSupported && dpy) ||
+ !(sDMAMode == DMA_BLOCK_MODE && //DMA pipe in Line mode
+ PipeBook::getPipeType((eDest)i) == OV_MDP_PIPE_DMA)) ){
+ //DMA-Multiplexing is only supported for WB on 8x26
dest = (eDest)i;
PipeBook::setAllocation(i);
break;
@@ -496,6 +499,7 @@
Overlay* Overlay::sInstance = 0;
int Overlay::sDpyFbMap[DPY_MAX] = {0, -1, -1};
int Overlay::sDMAMode = DMA_LINE_MODE;
+bool Overlay::sDMAMultiplexingSupported = false;
int Overlay::sForceSetBitmap = 0;
int Overlay::PipeBook::NUM_PIPES = 0;
int Overlay::PipeBook::sPipeUsageBitmap = 0;
diff --git a/liboverlay/overlay.h b/liboverlay/overlay.h
index e88c89c..48825ea 100644
--- a/liboverlay/overlay.h
+++ b/liboverlay/overlay.h
@@ -31,6 +31,7 @@
#define OVERLAY_H
#include "overlayUtils.h"
+#include "mdp_version.h"
#include "utils/threads.h"
struct MetaData_t;
@@ -140,6 +141,7 @@
explicit Overlay();
/*Validate index range, abort if invalid */
void validate(int index);
+ static void setDMAMultiplexingSupported();
void dump() const;
/* Creates a scalar object using libscale.so */
static void initScalar();
@@ -209,6 +211,7 @@
static Overlay *sInstance;
static int sDpyFbMap[DPY_MAX];
static int sDMAMode;
+ static bool sDMAMultiplexingSupported;
static int sForceSetBitmap;
static void *sLibScaleHandle;
static scale::Scale *sScale;
@@ -271,6 +274,12 @@
sDMAMode = mode;
}
+inline void Overlay::setDMAMultiplexingSupported() {
+ sDMAMultiplexingSupported = false;
+ if(qdutils::MDPVersion::getInstance().is8x26())
+ sDMAMultiplexingSupported = true;
+}
+
inline int Overlay::getDMAMode() {
return sDMAMode;
}