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

CVP SSR can recover CVP SMMU in most cases.

Change-Id: I98480841d31e83fc78c872d11a8fb7c6c80c354a
Signed-off-by: George Shen <sqiao@codeaurora.org>
This commit is contained in:
George Shen 2020-07-08 21:48:29 -07:00
parent 2251e53c39
commit ef7fc5db60
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;
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);
call_hfi_op(hdev, flush_debug_queue, hdev->hfi_device_data);
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)
{
int rc;
int rc, max_retries = CVP_MAX_SSR_RETRIES;
struct msm_cvp_core *core;
struct cvp_hfi_device *hdev;
@ -1427,7 +1429,8 @@ send_again:
mutex_unlock(&core->lock);
usleep_range(500, 1000);
dprintk(CVP_WARN, "Retry ssr\n");
goto send_again;
if (max_retries-- > 0)
goto send_again;
}
dprintk(CVP_ERR, "%s: trigger_ssr failed\n",
__func__);

View File

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

View File

@ -49,6 +49,8 @@
#define CVP_RT_PRIO_THRESHOLD 1
#define CVP_MAX_SSR_RETRIES 5
struct msm_cvp_inst;
enum cvp_core_state {
@ -283,6 +285,7 @@ struct msm_cvp_core {
bool smmu_fault_handled;
u32 last_fault_addr;
bool trigger_ssr;
u64 ssr_sess_cnt;
unsigned long curr_freq;
struct cvp_cycle_info dyn_clk;
atomic64_t kernel_trans_id;

View File

@ -149,7 +149,11 @@ static struct msm_cvp_common_data sm8350_common_data[] = {
{
.key = "qcom,debug-timeout",
.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->resources.non_fatal_pagefaults) {
WARN_ONCE(1, "%s: non-fatal pagefault address: %lx\n",
__func__, iova);
pr_err_ratelimited(
"msm_cvp: non-fatal pagefault address %lx\n",
iova);
*pfaddr = (*pfaddr == 0) ? iova : (*pfaddr);
return 0;
}