diff options
author | Vikas batchu <quic_vikabatc@quicinc.com> | 2022-07-25 17:31:54 +0530 |
---|---|---|
committer | Vikas batchu <quic_vikabatc@quicinc.com> | 2022-07-25 18:31:41 +0530 |
commit | 2ebcf32f4ac1f430b1b9e2c9e8178d262ed73765 (patch) | |
tree | b38584ad481a4457c4efde85321ee9cd4dcbd676 | |
parent | 1d3fbf542c1afd13ce878949d452a0349e41d781 (diff) |
sdm: populate retire fence on external display power off.
-- Observed errors with Register Vsync at external power on.
-- Wait on appropriate retire fence at external power on
and avoid errors due to register vsync getting called
before power on is complete.
Change-Id: I55b0b24f12b2d111e29f9a127f89d6a0cda2b1f6
-rw-r--r-- | sdm/libs/core/drm/hw_tv_drm.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/sdm/libs/core/drm/hw_tv_drm.cpp b/sdm/libs/core/drm/hw_tv_drm.cpp index 67fe39db..4834a542 100644 --- a/sdm/libs/core/drm/hw_tv_drm.cpp +++ b/sdm/libs/core/drm/hw_tv_drm.cpp @@ -254,12 +254,19 @@ DisplayError HWTVDRM::PowerOff(bool teardown, SyncPoints *sync_points) { // LP connecter prop N/A for External drm_atomic_intf_->Perform(DRMOps::CRTC_SET_ACTIVE, token_.crtc_id, 0); } + + int64_t retire_fence_fd = -1; + drm_atomic_intf_->Perform(DRMOps::CONNECTOR_GET_RETIRE_FENCE, token_.conn_id, &retire_fence_fd); + int ret = drm_atomic_intf_->Commit(true /* synchronous */, false /* retain_planes*/); + shared_ptr<Fence> retire_fence = Fence::Create(INT(retire_fence_fd), "retire_power_off"); if (ret) { DLOGE("%s failed with error %d", __FUNCTION__, ret); return kErrorHardware; } + sync_points->retire_fence = retire_fence; + return kErrorNone; } |