sdm: Set idle pc state to IDLE_PC_NONE after commit
Set the idle pc state to IDLE_PC_NONE after the atomic commit to avoid
overriding of idle pc state set using debug node.
Change-Id: Ib86cd5dd703921a434cb82dfb5eec2b573ab1c69
CRs-Fixed: 2437994
diff --git a/sdm/libs/core/drm/hw_peripheral_drm.cpp b/sdm/libs/core/drm/hw_peripheral_drm.cpp
index 06b4b99..964ff28 100644
--- a/sdm/libs/core/drm/hw_peripheral_drm.cpp
+++ b/sdm/libs/core/drm/hw_peripheral_drm.cpp
@@ -156,6 +156,7 @@
// Initialize to default after successful commit
synchronous_commit_ = false;
+ idle_pc_state_ = sde_drm::DRMIdlePCState::NONE;
return error;
}
@@ -440,15 +441,14 @@
}
DisplayError HWPeripheralDRM::ControlIdlePowerCollapse(bool enable, bool synchronous) {
- sde_drm::DRMIdlePCState idle_pc_state =
- enable ? sde_drm::DRMIdlePCState::ENABLE : sde_drm::DRMIdlePCState::DISABLE;
- if (idle_pc_state == idle_pc_state_) {
+ if (enable == idle_pc_enabled_) {
return kErrorNone;
}
+ idle_pc_state_ = enable ? sde_drm::DRMIdlePCState::ENABLE : sde_drm::DRMIdlePCState::DISABLE;
// As idle PC is disabled after subsequent commit, Make sure to have synchrounous commit and
// ensure TA accesses the display_cc registers after idle PC is disabled.
- idle_pc_state_ = idle_pc_state;
synchronous_commit_ = !enable ? synchronous : false;
+ idle_pc_enabled_ = enable;
return kErrorNone;
}
@@ -462,13 +462,16 @@
if (first_cycle_) {
return kErrorNone;
}
- drm_atomic_intf_->Perform(sde_drm::DRMOps::CRTC_SET_IDLE_PC_STATE, token_.crtc_id,
- sde_drm::DRMIdlePCState::ENABLE);
+ if (!idle_pc_enabled_) {
+ drm_atomic_intf_->Perform(sde_drm::DRMOps::CRTC_SET_IDLE_PC_STATE, token_.crtc_id,
+ sde_drm::DRMIdlePCState::ENABLE);
+ }
DisplayError err = HWDeviceDRM::PowerOn(qos_data, release_fence);
if (err != kErrorNone) {
return err;
}
- idle_pc_state_ = sde_drm::DRMIdlePCState::ENABLE;
+ idle_pc_state_ = sde_drm::DRMIdlePCState::NONE;
+ idle_pc_enabled_ = true;
return kErrorNone;
}
diff --git a/sdm/libs/core/drm/hw_peripheral_drm.h b/sdm/libs/core/drm/hw_peripheral_drm.h
index 5a8993d..5800e27 100644
--- a/sdm/libs/core/drm/hw_peripheral_drm.h
+++ b/sdm/libs/core/drm/hw_peripheral_drm.h
@@ -88,6 +88,7 @@
std::vector<SDEScaler> scalar_data_ = {};
CWBConfig cwb_config_ = {};
sde_drm::DRMIdlePCState idle_pc_state_ = sde_drm::DRMIdlePCState::NONE;
+ bool idle_pc_enabled_ = true;
std::vector<DestScalarCache> dest_scalar_cache_ = {};
drm_msm_ad4_roi_cfg ad4_roi_cfg_ = {};
bool needs_ds_update_ = false;