Merge "sdm: Disable rotator for non secure layer at the end of secure display"
diff --git a/sdm/include/private/resource_interface.h b/sdm/include/private/resource_interface.h
index 5bb2c4b..14f156b 100644
--- a/sdm/include/private/resource_interface.h
+++ b/sdm/include/private/resource_interface.h
@@ -35,6 +35,7 @@
   enum ResourceCmd {
     kCmdResetLUT,
     kCmdGetDefaultClk,
+    kCmdDisableRotatorOneFrame,
     kCmdMax,
   };
 
diff --git a/sdm/libs/core/comp_manager.cpp b/sdm/libs/core/comp_manager.cpp
index 838de0c..9a9e75b 100644
--- a/sdm/libs/core/comp_manager.cpp
+++ b/sdm/libs/core/comp_manager.cpp
@@ -596,4 +596,17 @@
   return kErrorNone;
 }
 
+void CompManager::HandleSecureEvent(Handle display_ctx, SecureEvent secure_event) {
+  DisplayCompositionContext *display_comp_ctx =
+                             reinterpret_cast<DisplayCompositionContext *>(display_ctx);
+  // Disable rotator for non secure layers at the end of secure display session, because scm call
+  // has been made to end secure display session during the display commit. Since then access to
+  // non secure memory is unavailable. So this results in smmu page fault when rotator tries to
+  // access the non secure memory.
+  if (secure_event == kSecureDisplayEnd) {
+    resource_intf_->Perform(ResourceInterface::kCmdDisableRotatorOneFrame,
+                            display_comp_ctx->display_resource_ctx);
+  }
+}
+
 }  // namespace sdm
diff --git a/sdm/libs/core/comp_manager.h b/sdm/libs/core/comp_manager.h
index 5814a67..7a5f77c 100644
--- a/sdm/libs/core/comp_manager.h
+++ b/sdm/libs/core/comp_manager.h
@@ -81,6 +81,7 @@
   DisplayError SetColorModesInfo(Handle display_ctx,
                                  const std::vector<PrimariesTransfer> &colormodes_cs);
   DisplayError SetBlendSpace(Handle display_ctx, const PrimariesTransfer &blend_space);
+  void HandleSecureEvent(Handle display_ctx, SecureEvent secure_event);
 
  private:
   static const int kMaxThermalLevel = 3;
diff --git a/sdm/libs/core/display_builtin.cpp b/sdm/libs/core/display_builtin.cpp
index f93ac18..e4882b8 100644
--- a/sdm/libs/core/display_builtin.cpp
+++ b/sdm/libs/core/display_builtin.cpp
@@ -561,7 +561,13 @@
 }
 
 DisplayError DisplayBuiltIn::HandleSecureEvent(SecureEvent secure_event) {
-  return hw_intf_->HandleSecureEvent(secure_event);
+  DisplayError err = hw_intf_->HandleSecureEvent(secure_event);
+  if (err != kErrorNone) {
+    return err;
+  }
+  comp_manager_->HandleSecureEvent(display_comp_ctx_, secure_event);
+
+  return kErrorNone;
 }
 
 DisplayError DisplayBuiltIn::SetQSyncMode(QSyncMode qsync_mode) {
diff --git a/sdm/libs/core/drm/hw_peripheral_drm.cpp b/sdm/libs/core/drm/hw_peripheral_drm.cpp
index 29a4660..f35b11e 100644
--- a/sdm/libs/core/drm/hw_peripheral_drm.cpp
+++ b/sdm/libs/core/drm/hw_peripheral_drm.cpp
@@ -225,6 +225,7 @@
         }
       }
       secure_display_active_ = false;
+      synchronous_commit_ = true;
     }
     break;