Merge "hwc2 : Add hw version for 7150"
diff --git a/libdrmutils/drm_interface.h b/libdrmutils/drm_interface.h
index 424fd90..62db78e 100644
--- a/libdrmutils/drm_interface.h
+++ b/libdrmutils/drm_interface.h
@@ -511,6 +511,12 @@
uint32_t num_mnocports;
uint32_t mnoc_bus_width;
bool use_baselayer_for_stage = false;
+ uint32_t vig_limit_index = 0;
+ uint32_t dma_limit_index = 0;
+ uint32_t scaling_limit_index = 0;
+ uint32_t rotation_limit_index = 0;
+ uint32_t line_width_constraints_count = 0;
+ std::vector< std::pair <uint32_t, uint32_t> > line_width_limits;
};
enum struct DRMPlaneType {
diff --git a/sdm/include/private/hw_info_types.h b/sdm/include/private/hw_info_types.h
index ec01767..6474ea0 100644
--- a/sdm/include/private/hw_info_types.h
+++ b/sdm/include/private/hw_info_types.h
@@ -35,9 +35,12 @@
#include <string>
#include <bitset>
#include <memory>
+#include <utility>
namespace sdm {
using std::string;
+using std::pair;
+using std::vector;
const int kMaxSDELayers = 16; // Maximum number of layers that can be handled by MDP5 hardware
// in a given layer stack.
@@ -260,6 +263,11 @@
kInlineRotationV1p1,
};
+const int kPipeVigLimit = (1 << 0);
+const int kPipeDmaLimit = (1 << 1);
+const int kPipeScalingLimit = (1 << 2);
+const int kPipeRotationLimit = (1 << 3);
+
struct HWResourceInfo {
uint32_t hw_version = 0;
uint32_t hw_revision = 0;
@@ -326,6 +334,9 @@
uint32_t num_mnocports = 2;
uint32_t mnoc_bus_width = 32;
bool use_baselayer_for_stage = false;
+ uint32_t line_width_constraints_count = 0;
+ vector< pair <uint32_t, uint32_t> > line_width_limits;
+ vector< pair <uint32_t, uint32_t> > line_width_constraints;
};
struct HWSplitInfo {
@@ -614,6 +625,7 @@
HWPipeCscInfo dgm_csc_info = {};
std::vector<HWPipeTonemapLutInfo> lut_info = {};
HWSrcTonemap tonemap = kSrcTonemapNone;
+ LayerTransform transform;
};
struct HWSolidfillStage {
diff --git a/sdm/libs/core/drm/hw_info_drm.cpp b/sdm/libs/core/drm/hw_info_drm.cpp
index f9b2d14..978d3b6 100644
--- a/sdm/libs/core/drm/hw_info_drm.cpp
+++ b/sdm/libs/core/drm/hw_info_drm.cpp
@@ -341,6 +341,15 @@
hw_resource->num_mnocports = info.num_mnocports ? info.num_mnocports : 2;
hw_resource->mnoc_bus_width = info.mnoc_bus_width ? info.mnoc_bus_width : 32;
hw_resource->use_baselayer_for_stage = info.use_baselayer_for_stage;
+ hw_resource->line_width_constraints_count = info.line_width_constraints_count;
+ if (info.line_width_constraints_count) {
+ auto &width_constraints = hw_resource->line_width_constraints;
+ hw_resource->line_width_limits = std::move(info.line_width_limits);
+ width_constraints.push_back(std::make_pair(kPipeVigLimit, info.vig_limit_index));
+ width_constraints.push_back(std::make_pair(kPipeDmaLimit, info.dma_limit_index));
+ width_constraints.push_back(std::make_pair(kPipeScalingLimit, info.scaling_limit_index));
+ width_constraints.push_back(std::make_pair(kPipeRotationLimit, info.rotation_limit_index));
+ }
}
void HWInfoDRM::GetHWPlanesInfo(HWResourceInfo *hw_resource) {
@@ -755,10 +764,25 @@
}
DisplayError HWInfoDRM::GetFirstDisplayInterfaceType(HWDisplayInterfaceInfo *hw_disp_info) {
+ HWDisplaysInfo hw_displays_info;
+ DisplayError error = kErrorNone;
+
hw_disp_info->type = kBuiltIn;
hw_disp_info->is_connected = true;
- return kErrorNone;
+ error = GetDisplaysStatus(&hw_displays_info);
+ if (error == kErrorNone) {
+ for (auto &iter : hw_displays_info) {
+ auto &info = iter.second;
+ if (info.is_primary) {
+ hw_disp_info->type = info.display_type;
+ hw_disp_info->is_connected = info.is_connected;
+ break;
+ }
+ }
+ }
+
+ return error;
}
DisplayError HWInfoDRM::GetDisplaysStatus(HWDisplaysInfo *hw_displays_info) {
diff --git a/sdm/libs/hwc2/hwc_buffer_allocator.cpp b/sdm/libs/hwc2/hwc_buffer_allocator.cpp
index 3ea5a61..7085901 100644
--- a/sdm/libs/hwc2/hwc_buffer_allocator.cpp
+++ b/sdm/libs/hwc2/hwc_buffer_allocator.cpp
@@ -125,6 +125,9 @@
auto descriptor = BufferDescriptor();
mapper_V3_->createDescriptor(descriptor_info, [&](const auto &_error, const auto &_descriptor) {
hidl_err = _error;
+ if (hidl_err != MapperV3Error::NONE) {
+ return;
+ }
descriptor = _descriptor;
});
@@ -138,6 +141,9 @@
allocator_V3_->allocate(descriptor, 1,
[&](const auto &_error, const auto &_stride, const auto &_buffers) {
hidl_err = _error;
+ if (hidl_err != MapperV3Error::NONE) {
+ return;
+ }
raw_handle = _buffers[0];
});
@@ -148,6 +154,9 @@
mapper_V3_->importBuffer(raw_handle, [&](const auto &_error, const auto &_buffer) {
hidl_err = _error;
+ if (hidl_err != MapperV3Error::NONE) {
+ return;
+ }
buf = static_cast<const native_handle_t *>(_buffer);
});
@@ -169,6 +178,9 @@
auto descriptor = BufferDescriptor();
mapper_V2_->createDescriptor(descriptor_info, [&](const auto &_error, const auto &_descriptor) {
hidl_err = _error;
+ if (hidl_err != Error::NONE) {
+ return;
+ }
descriptor = _descriptor;
});
@@ -182,6 +194,9 @@
allocator_V2_->allocate(descriptor, 1,
[&](const auto &_error, const auto &_stride, const auto &_buffers) {
hidl_err = _error;
+ if (hidl_err != Error::NONE) {
+ return;
+ }
raw_handle = _buffers[0];
});
@@ -192,6 +207,9 @@
mapper_V2_->importBuffer(raw_handle, [&](const auto &_error, const auto &_buffer) {
hidl_err = _error;
+ if (hidl_err != Error::NONE) {
+ return;
+ }
buf = static_cast<const native_handle_t *>(_buffer);
});
diff --git a/sdm/libs/hwc2/hwc_display.cpp b/sdm/libs/hwc2/hwc_display.cpp
index 865afb9..269e0fe 100644
--- a/sdm/libs/hwc2/hwc_display.cpp
+++ b/sdm/libs/hwc2/hwc_display.cpp
@@ -1250,7 +1250,8 @@
validated_ = false;
break;
}
- case kThermalEvent: {
+ case kThermalEvent:
+ case kIdlePowerCollapse: {
SEQUENCE_WAIT_SCOPE_LOCK(HWCSession::locker_[id_]);
validated_ = false;
} break;
@@ -1264,8 +1265,6 @@
id_);
}
} break;
- case kIdlePowerCollapse:
- break;
default:
DLOGW("Unknown event: %d", event);
break;