video: driver: follow vcodec power collapse seq for PC failure case

if PC fails for 10 times then video driver is treating that situation
as fatal and doing force core_deinit(), in this case firmware will not
follow vcodec power_collapse sequence and if there any pending
transaction from any session it will cause smmu_fault during next
firmware_boot sequence. Added change to perform vcodec power_collapse
from power_off_iris3_hardware() incase of core_deinit due to PC failure.

Change-Id: I45e32985d87b5cc882c4f96f77d1cabc796e6ba0
Signed-off-by: Govindaraj Rajagopal <quic_grajagop@quicinc.com>
Signed-off-by: Ankush Mitra <quic_ankumitr@quicinc.com>
This commit is contained in:
Ankush Mitra
2022-09-07 18:50:21 +05:30
کامیت شده توسط Gerrit - the friendly Code Review server
والد 78246c24fb
کامیت dc39a04e6e
5فایلهای تغییر یافته به همراه27 افزوده شده و 13 حذف شده

مشاهده پرونده

@@ -274,19 +274,22 @@ static int __power_off_iris3_hardware(struct msm_vidc_core *core)
bool pwr_collapsed = false;
/*
* Incase hw power control is enabled, when CPU WD occurred, check for power
* status to decide on executing NOC reset sequence before disabling power.
* If there is no CPU WD and hw_power_control is enabled, fw is expected
* Incase hw power control is enabled, for both CPU WD, video
* hw unresponsive cases, check for power status to decide on
* executing NOC reset sequence before disabling power. If there
* is no CPU WD and hw_power_control is enabled, fw is expected
* to power collapse video hw always.
*/
if (core->hw_power_control) {
pwr_collapsed = is_iris3_hw_power_collapsed(core);
if (core->cpu_watchdog) {
if (core->cpu_watchdog || core->video_unresponsive) {
if (pwr_collapsed) {
d_vpr_e("%s: CPU WD and video hw power collapsed\n", __func__);
d_vpr_e("%s: video hw power collapsed %d, %d\n",
__func__, core->cpu_watchdog, core->video_unresponsive);
goto disable_power;
} else {
d_vpr_e("%s: CPU WD and video hw is power ON\n", __func__);
d_vpr_e("%s: video hw is power ON %d, %d\n",
__func__, core->cpu_watchdog, core->video_unresponsive);
}
} else {
if (!pwr_collapsed)

مشاهده پرونده

@@ -285,19 +285,22 @@ static int __power_off_iris33_hardware(struct msm_vidc_core *core)
bool pwr_collapsed = false;
/*
* Incase hw power control is enabled, when CPU WD occurred, check for power
* status to decide on executing NOC reset sequence before disabling power.
* If there is no CPU WD and hw_power_control is enabled, fw is expected
* Incase hw power control is enabled, for both CPU WD, video
* hw unresponsive cases, check for power status to decide on
* executing NOC reset sequence before disabling power. If there
* is no CPU WD and hw_power_control is enabled, fw is expected
* to power collapse video hw always.
*/
if (core->hw_power_control) {
pwr_collapsed = is_iris33_hw_power_collapsed(core);
if (core->cpu_watchdog) {
if (core->cpu_watchdog || core->video_unresponsive) {
if (pwr_collapsed) {
d_vpr_e("%s: CPU WD and video hw power collapsed\n", __func__);
d_vpr_e("%s: video hw power collapsed %d, %d\n",
__func__, core->cpu_watchdog, core->video_unresponsive);
goto disable_power;
} else {
d_vpr_e("%s: CPU WD and video hw is power ON\n", __func__);
d_vpr_e("%s: video hw is power ON %d, %d\n",
__func__, core->cpu_watchdog, core->video_unresponsive);
}
} else {
if (!pwr_collapsed)