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;