hwc2: add support to enforce pipe split for built-in display

Add support to enforce pipe split when there is only one
built-in display connected when the panel fps is above 60.
This is needed to keep MDP clock down for high fps
use-cases.

Change-Id: Ie8cdd8eb45df98684d04ac8c96552fa33484d93b
CRs-Fixed: 2512607
diff --git a/include/display_properties.h b/include/display_properties.h
index a5c1378..5096591 100644
--- a/include/display_properties.h
+++ b/include/display_properties.h
@@ -128,5 +128,6 @@
 #define ENABLE_ASYNC_POWERMODE               DISPLAY_PROP("enable_async_powermode")
 #define DISABLE_UI_3D_TONEMAP                DISPLAY_PROP("disable_ui_3d_tonemap")
 #define DISABLE_PARALLEL_CACHE               DISPLAY_PROP("disable_parallel_cache")
+#define ENABLE_FORCE_SPLIT                   DISPLAY_PROP("enable_force_split")
 
 #endif  // __DISPLAY_PROPERTIES_H__
diff --git a/sdm/include/private/resource_interface.h b/sdm/include/private/resource_interface.h
index 03a797b..338af95 100644
--- a/sdm/include/private/resource_interface.h
+++ b/sdm/include/private/resource_interface.h
@@ -38,6 +38,7 @@
     kCmdDisableRotatorOneFrame,
     kCmdSetDisplayState,
     kCmdUpdateSyncHandle,
+    kCmdCheckEnforceSplit,
     kCmdMax,
   };
 
diff --git a/sdm/libs/core/comp_manager.cpp b/sdm/libs/core/comp_manager.cpp
index fa15c9f..5f6db7e 100644
--- a/sdm/libs/core/comp_manager.cpp
+++ b/sdm/libs/core/comp_manager.cpp
@@ -186,6 +186,18 @@
   return kErrorNone;
 }
 
+DisplayError CompManager::CheckEnforceSplit(Handle comp_handle,
+                                            uint32_t new_refresh_rate) {
+  SCOPE_LOCK(locker_);
+  DisplayError error = kErrorNone;
+  DisplayCompositionContext *display_comp_ctx =
+                             reinterpret_cast<DisplayCompositionContext *>(comp_handle);
+
+  error = resource_intf_->Perform(ResourceInterface::kCmdCheckEnforceSplit,
+                                  display_comp_ctx->display_resource_ctx, new_refresh_rate);
+  return error;
+}
+
 DisplayError CompManager::ReconfigureDisplay(Handle comp_handle,
                                              const HWDisplayAttributes &display_attributes,
                                              const HWPanelInfo &hw_panel_info,
@@ -211,6 +223,12 @@
     return error;
   }
 
+  error = resource_intf_->Perform(ResourceInterface::kCmdCheckEnforceSplit,
+                                  display_comp_ctx->display_resource_ctx, display_attributes.fps);
+  if (error != kErrorNone) {
+    return error;
+  }
+
   if (display_comp_ctx->strategy) {
     error = display_comp_ctx->strategy->Reconfigure(hw_panel_info, display_attributes,
                                                     mixer_attributes, fb_config);
diff --git a/sdm/libs/core/comp_manager.h b/sdm/libs/core/comp_manager.h
index 30b100f..86117c5 100644
--- a/sdm/libs/core/comp_manager.h
+++ b/sdm/libs/core/comp_manager.h
@@ -86,6 +86,7 @@
   bool IsSafeMode() { return safe_mode_; }
   void GenerateROI(Handle display_ctx, HWLayers *hw_layers);
   bool CanSkipValidate(Handle display_ctx);
+  DisplayError CheckEnforceSplit(Handle comp_handle, uint32_t new_refresh_rate);
 
  private:
   static const int kMaxThermalLevel = 3;
diff --git a/sdm/libs/core/display_builtin.cpp b/sdm/libs/core/display_builtin.cpp
index 153b018..14adcd1 100644
--- a/sdm/libs/core/display_builtin.cpp
+++ b/sdm/libs/core/display_builtin.cpp
@@ -335,6 +335,11 @@
       handle_idle_timeout_ = false;
       return error;
     }
+
+    error = comp_manager_->CheckEnforceSplit(display_comp_ctx_, refresh_rate);
+    if (error != kErrorNone) {
+      return error;
+    }
   }
 
   // On success, set current refresh rate to new refresh rate