video: iris3: Fix the issue in power collapsing video hardware

During power collapse, video driver would power collapse video
hardware followed by video controller.
While power collapsing video hardware, it may happen that video
firmware has already power collapsed the video hardware, since
it is hardware controlled. For certain cases, like XS WD, it
may happen that video hardware may not be power collapsed by
video firmware. In such scenario, skipping power collapse sequence
of video hardware would lead to unhandled transactions from video
hardware.
There is a power status register which can clearly suggest if the
video hardware is power down or not. Added a check to confirm the
power status of video hardware before skipping or executing the
power collapse sequence for video hardware.

Change-Id: Ibd9cd708a259897262fcc6cab27b26aaf37f1b13
Signed-off-by: Vikash Garodia <quic_vgarodia@quicinc.com>
这个提交包含在:
Vikash Garodia
2022-07-05 10:19:25 +05:30
提交者 Darshana Patil
父节点 2e52eecb78
当前提交 9f34254da3
修改 3 个文件,包含 42 行新增2 行删除

查看文件

@@ -119,6 +119,7 @@ struct msm_vidc_core {
bool handoff_done;
bool hw_power_control;
bool pm_suspended;
bool cpu_watchdog;
};
#endif // _MSM_VIDC_CORE_H_

查看文件

@@ -2456,6 +2456,7 @@ int __load_fw(struct msm_vidc_core *core)
d_vpr_h("%s\n", __func__);
core->handoff_done = false;
core->hw_power_control = false;
core->cpu_watchdog = false;
trace_msm_v4l2_vidc_fw_load("START");
rc = __init_resources(core);
@@ -2533,6 +2534,8 @@ void __unload_fw(struct msm_vidc_core *core)
__venus_power_off(core);
__deinit_resources(core);
core->cpu_watchdog = false;
d_vpr_h("%s done\n", __func__);
}
@@ -2542,6 +2545,8 @@ static int __response_handler(struct msm_vidc_core *core)
if (call_venus_op(core, watchdog, core, core->intr_status)) {
struct hfi_packet pkt = {.type = HFI_SYS_ERROR_WD_TIMEOUT};
core->cpu_watchdog = true;
d_vpr_e("%s: CPU WD error received\n", __func__);
return handle_system_error(core, &pkt);
}