Merge "msm: cvp: Make CVP SMMU fault non-fatal error"

This commit is contained in:
qctecmdr 2020-09-21 15:06:34 -07:00 committed by Gerrit - the friendly Code Review server
commit 7a4254dd0a
5 changed files with 18 additions and 6 deletions

View File

@ -659,7 +659,9 @@ static void handle_sys_error(enum hal_command_response cmd, void *data)
cur_state = core->state; cur_state = core->state;
core->state = CVP_CORE_UNINIT; core->state = CVP_CORE_UNINIT;
dprintk(CVP_WARN, "SYS_ERROR received for core %pK\n", core); dprintk(CVP_WARN, "SYS_ERROR from core %pK ssr_sess_cnt %lld\n",
core, core->ssr_sess_cnt);
core->ssr_sess_cnt = 0;
msm_cvp_noc_error_info(core); msm_cvp_noc_error_info(core);
call_hfi_op(hdev, flush_debug_queue, hdev->hfi_device_data); call_hfi_op(hdev, flush_debug_queue, hdev->hfi_device_data);
list_for_each_entry(inst, &core->instances, list) { list_for_each_entry(inst, &core->instances, list) {
@ -1367,7 +1369,7 @@ int msm_cvp_trigger_ssr(struct msm_cvp_core *core,
void msm_cvp_ssr_handler(struct work_struct *work) void msm_cvp_ssr_handler(struct work_struct *work)
{ {
int rc; int rc, max_retries = CVP_MAX_SSR_RETRIES;
struct msm_cvp_core *core; struct msm_cvp_core *core;
struct cvp_hfi_device *hdev; struct cvp_hfi_device *hdev;
@ -1427,6 +1429,7 @@ send_again:
mutex_unlock(&core->lock); mutex_unlock(&core->lock);
usleep_range(500, 1000); usleep_range(500, 1000);
dprintk(CVP_WARN, "Retry ssr\n"); dprintk(CVP_WARN, "Retry ssr\n");
if (max_retries-- > 0)
goto send_again; goto send_again;
} }
dprintk(CVP_ERR, "%s: trigger_ssr failed\n", dprintk(CVP_ERR, "%s: trigger_ssr failed\n",

View File

@ -211,6 +211,7 @@ void *msm_cvp_open(int core_id, int session_type)
mutex_lock(&core->lock); mutex_lock(&core->lock);
list_add_tail(&inst->list, &core->instances); list_add_tail(&inst->list, &core->instances);
core->ssr_sess_cnt++;
mutex_unlock(&core->lock); mutex_unlock(&core->lock);
__init_fence_queue(inst); __init_fence_queue(inst);

View File

@ -50,6 +50,8 @@
/* Adjust this value to admit non-realtime session */ /* Adjust this value to admit non-realtime session */
#define CVP_RT_PRIO_THRESHOLD 0 #define CVP_RT_PRIO_THRESHOLD 0
#define CVP_MAX_SSR_RETRIES 5
struct msm_cvp_inst; struct msm_cvp_inst;
enum cvp_core_state { enum cvp_core_state {
@ -284,6 +286,7 @@ struct msm_cvp_core {
bool smmu_fault_handled; bool smmu_fault_handled;
u32 last_fault_addr; u32 last_fault_addr;
bool trigger_ssr; bool trigger_ssr;
u64 ssr_sess_cnt;
unsigned long curr_freq; unsigned long curr_freq;
struct cvp_cycle_info dyn_clk; struct cvp_cycle_info dyn_clk;
atomic64_t kernel_trans_id; atomic64_t kernel_trans_id;

View File

@ -149,7 +149,11 @@ static struct msm_cvp_common_data sm8350_common_data[] = {
{ {
.key = "qcom,debug-timeout", .key = "qcom,debug-timeout",
.value = 0, .value = 0,
} },
{
.key = "qcom,domain-attr-non-fatal-faults",
.value = 1,
},
}; };

View File

@ -925,8 +925,9 @@ int msm_cvp_smmu_fault_handler(struct iommu_domain *domain,
if (core->smmu_fault_handled) { if (core->smmu_fault_handled) {
if (core->resources.non_fatal_pagefaults) { if (core->resources.non_fatal_pagefaults) {
WARN_ONCE(1, "%s: non-fatal pagefault address: %lx\n", pr_err_ratelimited(
__func__, iova); "msm_cvp: non-fatal pagefault address %lx\n",
iova);
*pfaddr = (*pfaddr == 0) ? iova : (*pfaddr); *pfaddr = (*pfaddr == 0) ? iova : (*pfaddr);
return 0; return 0;
} }