From 530762b1be86223ff89df0d4c7f2c55046d570a1 Mon Sep 17 00:00:00 2001 From: Shivendra Kakrania Date: Wed, 31 Jul 2019 17:33:38 -0700 Subject: [PATCH] msm: vidc: Enable error recovery by default Error recovery is enabled by default & it will get triggered for all sys error reported by video firmware. For debugging purpose it can be disabled as: 1. disable error recovery for noc error: echo 1 > /d/msm_vidc/disable_err_recovery 2. disable error recovery for non-noc error: echo 2 > /d/msm_vidc/disable_err_recovery 3. disable error recovery for all cases echo 3 > /d/msm_vidc/disable_err_recovery Change-Id: Ie260485842704d3e278ded8c6d1722bc19c80f6f Signed-off-by: Shivendra Kakrania --- msm/vidc/msm_vidc_common.c | 8 ++++++-- msm/vidc/msm_vidc_debug.c | 5 ++++- msm/vidc/msm_vidc_debug.h | 6 ++++++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/msm/vidc/msm_vidc_common.c b/msm/vidc/msm_vidc_common.c index 238c359e29d6..60f8d6e79d84 100644 --- a/msm/vidc/msm_vidc_common.c +++ b/msm/vidc/msm_vidc_common.c @@ -2231,8 +2231,12 @@ static void handle_sys_error(enum hal_command_response cmd, void *data) /* handle the hw error before core released to get full debug info */ msm_vidc_handle_hw_error(core); - if (response->status == VIDC_ERR_NOC_ERROR) { - d_vpr_e("Got NOC error"); + if ((response->status == VIDC_ERR_NOC_ERROR && + (msm_vidc_err_recovery_disable & + VIDC_DISABLE_NOC_ERR_RECOV)) || + (msm_vidc_err_recovery_disable & + VIDC_DISABLE_NON_NOC_ERR_RECOV)) { + d_vpr_e("Got unrecoverable video fw error"); MSM_VIDC_ERROR(true); } diff --git a/msm/vidc/msm_vidc_debug.c b/msm/vidc/msm_vidc_debug.c index 6be7fd301782..a9d9d6bf73bb 100644 --- a/msm/vidc/msm_vidc_debug.c +++ b/msm/vidc/msm_vidc_debug.c @@ -23,6 +23,7 @@ bool msm_vidc_thermal_mitigation_disabled = !true; int msm_vidc_clock_voting = !1; bool msm_vidc_syscache_disable = !true; bool msm_vidc_cvp_usage = true; +int msm_vidc_err_recovery_disable = !1; #define MAX_DBG_BUF_SIZE 4096 @@ -239,7 +240,9 @@ struct dentry *msm_vidc_debugfs_init_drv(void) &msm_vidc_syscache_disable) && __debugfs_create(bool, "cvp_usage", &msm_vidc_cvp_usage) && __debugfs_create(bool, "lossless_encoding", - &msm_vidc_lossless_encode); + &msm_vidc_lossless_encode) && + __debugfs_create(u32, "disable_err_recovery", + &msm_vidc_err_recovery_disable); #undef __debugfs_create diff --git a/msm/vidc/msm_vidc_debug.h b/msm/vidc/msm_vidc_debug.h index a3b2c99b0471..8186e545313d 100644 --- a/msm/vidc/msm_vidc_debug.h +++ b/msm/vidc/msm_vidc_debug.h @@ -61,6 +61,11 @@ enum msm_vidc_debugfs_event { MSM_VIDC_DEBUGFS_EVENT_FBD, }; +enum vidc_err_recovery_disable { + VIDC_DISABLE_NOC_ERR_RECOV = 0x0001, + VIDC_DISABLE_NON_NOC_ERR_RECOV = 0x0002 +}; + extern int msm_vidc_debug; extern int msm_vidc_fw_debug_mode; extern bool msm_vidc_fw_coverage; @@ -69,6 +74,7 @@ extern int msm_vidc_clock_voting; extern bool msm_vidc_syscache_disable; extern bool msm_vidc_lossless_encode; extern bool msm_vidc_cvp_usage; +extern int msm_vidc_err_recovery_disable; struct log_cookie { u32 used;