msm: vidc: Add debug timeout support
Add debug timeout support to get additional debugging
information when video driver or firmware error occurs.
CRs-Fixed: 2096561
Change-Id: Id21d774c0fefd1754cdc219c70e0abc5af5d566e
Signed-off-by: Maheshwar Ajja <majja@codeaurora.org>
diff --git a/drivers/media/platform/msm/vidc/msm_vidc_common.c b/drivers/media/platform/msm/vidc/msm_vidc_common.c
index 1b8e438..c53e3d7 100644
--- a/drivers/media/platform/msm/vidc/msm_vidc_common.c
+++ b/drivers/media/platform/msm/vidc/msm_vidc_common.c
@@ -2788,6 +2788,8 @@
}
core->state = VIDC_CORE_INIT;
core->smmu_fault_handled = false;
+ core->trigger_ssr = false;
+
core_already_inited:
change_inst_state(inst, MSM_VIDC_CORE_INIT);
mutex_unlock(&core->lock);
@@ -5024,11 +5026,14 @@
* to know if fatal error is due to SSR or not. Handle
* user SSR as non-fatal.
*/
- mutex_lock(&core->lock);
- core->resources.debug_timeout = false;
- mutex_unlock(&core->lock);
+ core->trigger_ssr = true;
rc = call_hfi_op(hdev, core_trigger_ssr,
hdev->hfi_device_data, type);
+ if (rc) {
+ dprintk(VIDC_ERR, "%s: trigger_ssr failed\n",
+ __func__);
+ core->trigger_ssr = false;
+ }
}
return rc;
diff --git a/drivers/media/platform/msm/vidc/msm_vidc_debug.c b/drivers/media/platform/msm/vidc/msm_vidc_debug.c
index 5be1ee2..98120ac 100644
--- a/drivers/media/platform/msm/vidc/msm_vidc_debug.c
+++ b/drivers/media/platform/msm/vidc/msm_vidc_debug.c
@@ -29,7 +29,6 @@
bool msm_vidc_sys_idle_indicator = !true;
bool msm_vidc_thermal_mitigation_disabled = !true;
bool msm_vidc_clock_scaling = true;
-bool msm_vidc_debug_timeout = !true;
bool msm_vidc_syscache_disable = !true;
#define MAX_DBG_BUF_SIZE 4096
@@ -208,8 +207,6 @@
&msm_vidc_thermal_mitigation_disabled) &&
__debugfs_create(bool, "clock_scaling",
&msm_vidc_clock_scaling) &&
- __debugfs_create(bool, "debug_timeout",
- &msm_vidc_debug_timeout) &&
__debugfs_create(bool, "disable_video_syscache",
&msm_vidc_syscache_disable);
diff --git a/drivers/media/platform/msm/vidc/msm_vidc_debug.h b/drivers/media/platform/msm/vidc/msm_vidc_debug.h
index 9a798b5..7a73a50 100644
--- a/drivers/media/platform/msm/vidc/msm_vidc_debug.h
+++ b/drivers/media/platform/msm/vidc/msm_vidc_debug.h
@@ -61,7 +61,6 @@
extern bool msm_vidc_sys_idle_indicator;
extern bool msm_vidc_thermal_mitigation_disabled;
extern bool msm_vidc_clock_scaling;
-extern bool msm_vidc_debug_timeout;
extern bool msm_vidc_syscache_disable;
#define VIDC_MSG_PRIO2STRING(__level) ({ \
@@ -184,7 +183,18 @@
{
bool enable_fatal;
- enable_fatal = msm_vidc_debug_timeout;
+ enable_fatal = core->resources.debug_timeout;
+
+ /*
+ * In current implementation user-initiated SSR triggers
+ * a fatal error from hardware. However, there is no way
+ * to know if fatal error is due to SSR or not. Handle
+ * user SSR as non-fatal.
+ */
+ if (core->trigger_ssr) {
+ core->trigger_ssr = false;
+ enable_fatal = false;
+ }
/* Video driver can decide FATAL handling of HW errors
* based on multiple factors. This condition check will
diff --git a/drivers/media/platform/msm/vidc/msm_vidc_internal.h b/drivers/media/platform/msm/vidc/msm_vidc_internal.h
index 57dfd52..787a8fc 100644
--- a/drivers/media/platform/msm/vidc/msm_vidc_internal.h
+++ b/drivers/media/platform/msm/vidc/msm_vidc_internal.h
@@ -317,6 +317,7 @@
struct msm_vidc_capability *capabilities;
struct delayed_work fw_unload_work;
bool smmu_fault_handled;
+ bool trigger_ssr;
unsigned long min_freq;
unsigned long curr_freq;
struct vidc_bus_vote_data *vote_data;
diff --git a/drivers/media/platform/msm/vidc/msm_vidc_platform.c b/drivers/media/platform/msm/vidc/msm_vidc_platform.c
index 8a701cb..aa17a3d 100644
--- a/drivers/media/platform/msm/vidc/msm_vidc_platform.c
+++ b/drivers/media/platform/msm/vidc/msm_vidc_platform.c
@@ -99,6 +99,10 @@
.key = "qcom,hw-resp-timeout",
.value = 250,
},
+ {
+ .key = "qcom,debug-timeout",
+ .value = 0,
+ },
};
diff --git a/drivers/media/platform/msm/vidc/msm_vidc_res_parse.c b/drivers/media/platform/msm/vidc/msm_vidc_res_parse.c
index 039b457..35984f5 100644
--- a/drivers/media/platform/msm/vidc/msm_vidc_res_parse.c
+++ b/drivers/media/platform/msm/vidc/msm_vidc_res_parse.c
@@ -765,8 +765,6 @@
res->debug_timeout = find_key_value(platform_data,
"qcom,debug-timeout");
- res->debug_timeout |= msm_vidc_debug_timeout;
-
res->pm_qos_latency_us = find_key_value(platform_data,
"qcom,pm-qos-latency-us");