Merge "sdm: Add factory methods for HWInterface object creation"
diff --git a/common.mk b/common.mk
index e49c8c2..298e0bf 100644
--- a/common.mk
+++ b/common.mk
@@ -55,10 +55,10 @@
kernel_includes :=
# Executed only on QCOM BSPs
-# ifeq ($(TARGET_USES_QCOM_BSP),true)
+ifeq ($(TARGET_USES_QCOM_BSP),true)
# Enable QCOM Display features
-# common_flags += -DQTI_BSP
-# endif
+ common_flags += -DQTI_BSP
+endif
ifeq ($(TARGET_IS_HEADLESS),true)
common_flags += -DTARGET_HEADLESS
diff --git a/libgralloc/gpu.cpp b/libgralloc/gpu.cpp
index c62cec0..5b22e6d 100644
--- a/libgralloc/gpu.cpp
+++ b/libgralloc/gpu.cpp
@@ -159,7 +159,7 @@
hnd->offset = data.offset;
hnd->base = (uint64_t)(data.base) + data.offset;
hnd->gpuaddr = 0;
- ColorSpace_t colorSpace = ITU_R_601_FR;
+ ColorSpace_t colorSpace = ITU_R_601;
setMetaData(hnd, UPDATE_COLOR_SPACE, (void*) &colorSpace);
*pHandle = hnd;
diff --git a/sdm/include/private/color_params.h b/sdm/include/private/color_params.h
index 8bca55f..8608c16 100644
--- a/sdm/include/private/color_params.h
+++ b/sdm/include/private/color_params.h
@@ -102,8 +102,9 @@
static const uint32_t kSDEGamutV17 = 9;
static const uint32_t kSDEPaV17 = 11;
static const uint32_t kSDEPccV17 = 13;
- static const uint32_t kSDEPADitherV17 = 15;
- static const uint32_t kSDELegacyPP = 17;
+ static const uint32_t kSDELegacyPP = 15;
+ static const uint32_t kSDEPADitherV17 = 16;
+ static const uint32_t kSDEIgcV30 = 17;
uint32_t version[kMaxNumPPFeatures];
PPFeatureVersion() { memset(version, 0, sizeof(version)); }
@@ -246,7 +247,7 @@
};
struct SDEPADitherData {
- uint32_t data_flags;
+ uint64_t data_flags;
uint32_t matrix_size;
uint64_t matrix_data_addr;
uint32_t strength;
@@ -307,6 +308,15 @@
uint32_t *c2_data = NULL;
};
+struct SDEIgcV30LUTData {
+ static const int kMaxIgcLUTEntries = 256;
+ uint32_t table_fmt = 0;
+ uint32_t len = 0;
+ uint64_t c0_c1_data = 0;
+ uint64_t c2_data = 0;
+ uint32_t strength = 0;
+};
+
struct SDEPgcLUTData {
static const int kPgcLUTEntries = 1024;
uint32_t len = 0;
@@ -377,6 +387,22 @@
uint32_t *buffer_ = NULL;
};
+class SDEIgcV30LUTWrapper : private SDEIgcV30LUTData {
+ public:
+ static SDEIgcV30LUTWrapper *Init(uint32_t arg __attribute__((__unused__)));
+ ~SDEIgcV30LUTWrapper() {
+ if (buffer_)
+ delete[] buffer_;
+ }
+ inline SDEIgcV30LUTData *GetConfig(void) { return this; }
+
+ private:
+ SDEIgcV30LUTWrapper(const SDEIgcV30LUTWrapper& src) { /* do not create copies */ }
+ SDEIgcV30LUTWrapper& operator=(const SDEIgcV30LUTWrapper&) { return *this; }
+ SDEIgcV30LUTWrapper() {}
+ uint32_t *buffer_ = NULL;
+};
+
class SDEPgcLUTWrapper : private SDEPgcLUTData {
public:
static SDEPgcLUTWrapper *Init(uint32_t arg __attribute__((__unused__)));
diff --git a/sdm/libs/core/fb/hw_color_manager.cpp b/sdm/libs/core/fb/hw_color_manager.cpp
index 27116a0..a6c78b0 100644
--- a/sdm/libs/core/fb/hw_color_manager.cpp
+++ b/sdm/libs/core/fb/hw_color_manager.cpp
@@ -153,9 +153,13 @@
DisplayError HWColorManager::SetPADither(const PPFeatureInfo &feature,
msmfb_mdp_pp *kernel_params) {
DisplayError ret = kErrorNone;
-
- // TODO(user): Kernel IOCTL preparation
-
+#ifdef PA_DITHER
+ kernel_params->op = mdp_op_pa_dither_cfg;
+ kernel_params->data.dither_cfg_data.version = feature.feature_version_;
+ kernel_params->data.dither_cfg_data.block = MDP_LOGICAL_BLOCK_DISP_0 + feature.disp_id_;
+ kernel_params->data.dither_cfg_data.flags = feature.enable_flags_;
+ kernel_params->data.dither_cfg_data.cfg_payload = feature.GetConfigData();
+#endif
return ret;
}
diff --git a/sdm/libs/core/fb/hw_primary.cpp b/sdm/libs/core/fb/hw_primary.cpp
index 8fce14b..4a8cc1f 100644
--- a/sdm/libs/core/fb/hw_primary.cpp
+++ b/sdm/libs/core/fb/hw_primary.cpp
@@ -144,6 +144,8 @@
string line;
while (Sys::getline_(fs, line)) {
DisplayConfigVariableInfo config;
+ // std::getline (unlike ::getline) removes \n while driver expects it in mode, so add back
+ line += '\n';
size_t xpos = line.find(':');
size_t ypos = line.find('x');
@@ -557,7 +559,12 @@
DisplayError HWPrimary::GetPPFeaturesVersion(PPFeatureVersion *vers) {
mdp_pp_feature_version version = {};
+#ifdef PA_DITHER
+ uint32_t feature_id_mapping[kMaxNumPPFeatures] = { PCC, IGC, GC, GC, PA,
+ DITHER, GAMUT, PA_DITHER };
+#else
uint32_t feature_id_mapping[kMaxNumPPFeatures] = { PCC, IGC, GC, GC, PA, DITHER, GAMUT };
+#endif
for (int i(0); i < kMaxNumPPFeatures; i++) {
version.pp_feature = feature_id_mapping[i];
diff --git a/sdm/libs/hwc/hwc_display.cpp b/sdm/libs/hwc/hwc_display.cpp
index bb1f748..dc66bc7 100644
--- a/sdm/libs/hwc/hwc_display.cpp
+++ b/sdm/libs/hwc/hwc_display.cpp
@@ -1303,7 +1303,7 @@
// TODO(user): HWC needs to know updating for dyn_fps, cpu hint features,
// once the features are moved to SDM, the two functions below can be removed.
-bool HWCDisplay::SingleLayerUpdating(uint32_t app_layer_count) {
+uint32_t HWCDisplay::GetUpdatingLayersCount(uint32_t app_layer_count) {
uint32_t updating_count = 0;
for (uint i = 0; i < app_layer_count; i++) {
@@ -1313,7 +1313,7 @@
}
}
- return (updating_count == 1);
+ return updating_count;
}
bool HWCDisplay::SingleVideoLayerUpdating(uint32_t app_layer_count) {
diff --git a/sdm/libs/hwc/hwc_display.h b/sdm/libs/hwc/hwc_display.h
index df9056e..3e519a6 100644
--- a/sdm/libs/hwc/hwc_display.h
+++ b/sdm/libs/hwc/hwc_display.h
@@ -169,7 +169,7 @@
DisplayError SetMetaData(const private_handle_t *pvt_handle, Layer *layer);
bool NeedsFrameBufferRefresh(hwc_display_contents_1_t *content_list);
bool IsLayerUpdating(hwc_display_contents_1_t *content_list, const Layer *layer);
- bool SingleLayerUpdating(uint32_t app_layer_count);
+ uint32_t GetUpdatingLayersCount(uint32_t app_layer_count);
bool SingleVideoLayerUpdating(uint32_t app_layer_count);
bool IsSurfaceUpdated(const std::vector<LayerRect> &dirty_regions);
diff --git a/sdm/libs/hwc/hwc_display_primary.cpp b/sdm/libs/hwc/hwc_display_primary.cpp
index 3729c97..6d23754 100644
--- a/sdm/libs/hwc/hwc_display_primary.cpp
+++ b/sdm/libs/hwc/hwc_display_primary.cpp
@@ -167,8 +167,12 @@
layer_stack_.flags.post_processed_output = post_processed_output_;
}
- bool one_updating_layer = SingleLayerUpdating(UINT32(content_list->numHwLayers - 1));
- ToggleCPUHint(one_updating_layer);
+ uint32_t num_updating_layers = GetUpdatingLayersCount(UINT32(content_list->numHwLayers - 1));
+ bool one_updating_layer = (num_updating_layers == 1);
+
+ if (num_updating_layers != 0) {
+ ToggleCPUHint(one_updating_layer);
+ }
uint32_t refresh_rate = GetOptimalRefreshRate(one_updating_layer);
if (current_refresh_rate_ != refresh_rate) {