Merge "msm: cvp: Make CVP SMMU fault non-fatal error"
This commit is contained in:
commit
7a4254dd0a
@ -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__);
|
||||
|
@ -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);
|
||||
|
@ -50,6 +50,8 @@
|
||||
/* Adjust this value to admit non-realtime session */
|
||||
#define CVP_RT_PRIO_THRESHOLD 0
|
||||
|
||||
#define CVP_MAX_SSR_RETRIES 5
|
||||
|
||||
struct msm_cvp_inst;
|
||||
|
||||
enum cvp_core_state {
|
||||
@ -284,6 +286,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;
|
||||
|
@ -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,
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user