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;
|
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,7 +1429,8 @@ 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");
|
||||||
goto send_again;
|
if (max_retries-- > 0)
|
||||||
|
goto send_again;
|
||||||
}
|
}
|
||||||
dprintk(CVP_ERR, "%s: trigger_ssr failed\n",
|
dprintk(CVP_ERR, "%s: trigger_ssr failed\n",
|
||||||
__func__);
|
__func__);
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
|
@ -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,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user