eva-kernel: hfi q info at session timeout

Printing hfi q info at the of
           session queue time out to get debug
           info on missed cmd/frame pkt.

Change-Id: I9b324a6496699272f9f1b9cb794f3e322d5421ae
Signed-off-by: Nagesh Gunna <quic_ngunna@quicinc.com>
This commit is contained in:
Nagesh Gunna
2023-03-13 19:31:48 +05:30
parent 6aabaf3247
commit 79c9987bbe
4 changed files with 25 additions and 18 deletions

View File

@@ -1177,10 +1177,6 @@ static void cvp_dump_csr(struct iris_hfi_device *dev)
dprintk(CVP_ERR, "CVP_WRAPPER_CPU_STATUS: %x\n", reg);
reg = __read_register(dev, CVP_CPU_CS_SCIACMDARG0);
dprintk(CVP_ERR, "CVP_CPU_CS_SCIACMDARG0: %x\n", reg);
reg = __read_register(dev, CVP_WRAPPER_CPU_CLOCK_CONFIG);
dprintk(CVP_ERR, "CVP_WRAPPER_CPU_CLOCK_CONFIG: %x\n", reg);
reg = __read_register(dev, CVP_WRAPPER_CORE_CLOCK_CONFIG);
dprintk(CVP_ERR, "CVP_WRAPPER_CORE_CLOCK_CONFIG: %x\n", reg);
reg = __read_register(dev, CVP_WRAPPER_INTR_STATUS);
dprintk(CVP_ERR, "CVP_WRAPPER_INTR_STATUS: %x\n", reg);
reg = __read_register(dev, CVP_CPU_CS_H2ASOFTINT);
@@ -1191,6 +1187,10 @@ static void cvp_dump_csr(struct iris_hfi_device *dev)
dprintk(CVP_ERR, "CVP_CC_MVS1C_GDSCR: %x\n", reg);
reg = __read_register(dev, CVP_CC_MVS1C_CBCR);
dprintk(CVP_ERR, "CVP_CC_MVS1C_CBCR: %x\n", reg);
reg = __read_register(dev, CVP_WRAPPER_CPU_CLOCK_CONFIG);
dprintk(CVP_ERR, "CVP_WRAPPER_CPU_CLOCK_CONFIG: %x\n", reg);
reg = __read_register(dev, CVP_WRAPPER_CORE_CLOCK_CONFIG);
dprintk(CVP_ERR, "CVP_WRAPPER_CORE_CLOCK_CONFIG: %x\n", reg);
dev->reg_dumped = true;
}

View File

@@ -311,5 +311,5 @@ unsigned int get_msg_errorcode(void *msg);
int get_msg_opconfigs(void *msg, unsigned int *session_id,
unsigned int *error_type, unsigned int *config_id);
extern const struct msm_cvp_hfi_defs cvp_hfi_defs[MAX_PKT_IDX];
void print_hfi_queue_info(struct cvp_hfi_device *hdev);
#endif /*__CVP_HFI_API_H__ */

View File

@@ -9,7 +9,7 @@
#include "msm_cvp_buf.h"
#include "cvp_comm_def.h"
#include "cvp_power.h"
#include "cvp_hfi_api.h"
static int cvp_enqueue_pkt(struct msm_cvp_inst* inst,
struct eva_kmd_hfi_packet *in_pkt,
unsigned int in_offset,
@@ -94,6 +94,9 @@ static int cvp_wait_process_message(struct msm_cvp_inst *inst,
if (wait_event_timeout(sq->wq,
cvp_msg_pending(sq, &msg, ktid), timeout) == 0) {
dprintk(CVP_WARN, "session queue wait timeout\n");
if(inst && inst->core && inst->core->device){
print_hfi_queue_info(inst->core->device);
}
rc = -ETIMEDOUT;
goto exit;
}

View File

@@ -58,16 +58,26 @@ static void dump_hfi_queue(struct iris_hfi_device *device)
read_ptr = (u32 *)((qinfo->q_array.align_virtual_addr) +
(read_idx << 2));
dprintk(CVP_ERR,
"queue payload: %x %x %x %x %x %x %x %x\n",
"queue payload: %x %x %x %x %x %x %x %x %x\n",
read_ptr[0], read_ptr[1], read_ptr[2],
read_ptr[3], read_ptr[4], read_ptr[5],
read_ptr[6], read_ptr[7]);
read_ptr[6], read_ptr[7], read_ptr[8]);
}
}
mutex_unlock(&device->lock);
}
void print_hfi_queue_info(struct cvp_hfi_device *hdev)
{
if(hdev && hdev->hfi_device_data){
call_hfi_op(hdev, flush_debug_queue, hdev->hfi_device_data);
dump_hfi_queue(hdev->hfi_device_data);
}
}
struct msm_cvp_core *get_cvp_core(int core_id)
{
struct msm_cvp_core *core;
@@ -378,8 +388,7 @@ int wait_for_sess_signal_receipt(struct msm_cvp_inst *inst,
if (!rc) {
dprintk(CVP_WARN, "Wait interrupted or timed out: %d\n",
SESSION_MSG_INDEX(cmd));
call_hfi_op(hdev, flush_debug_queue, hdev->hfi_device_data);
dump_hfi_queue(hdev->hfi_device_data);
print_hfi_queue_info(hdev);
rc = -ETIMEDOUT;
} else if (inst->state == MSM_CVP_CORE_INVALID) {
rc = -ECONNRESET;
@@ -862,8 +871,7 @@ static int msm_comm_session_abort(struct msm_cvp_inst *inst)
if (!rc) {
dprintk(CVP_ERR, "%s: inst %pK session %x abort timed out\n",
__func__, inst, hash32_ptr(inst->session));
call_hfi_op(hdev, flush_debug_queue, hdev->hfi_device_data);
dump_hfi_queue(hdev->hfi_device_data);
print_hfi_queue_info(hdev);
msm_cvp_comm_generate_sys_error(inst);
rc = -EBUSY;
} else {
@@ -947,8 +955,7 @@ int msm_cvp_comm_check_core_init(struct msm_cvp_core *core)
dprintk(CVP_ERR, "%s: Wait interrupted or timed out: %d\n",
__func__, SYS_MSG_INDEX(HAL_SYS_INIT_DONE));
hdev = core->device;
call_hfi_op(hdev, flush_debug_queue, hdev->hfi_device_data);
dump_hfi_queue(hdev->hfi_device_data);
print_hfi_queue_info(hdev);
rc = -EIO;
goto exit;
} else {
@@ -1336,10 +1343,7 @@ void msm_cvp_ssr_handler(struct work_struct *work)
s = cvp_get_inst_validate(inst->core, inst);
if (!s)
return;
call_hfi_op(hdev, flush_debug_queue,
hdev->hfi_device_data);
dump_hfi_queue(hdev->hfi_device_data);
print_hfi_queue_info(hdev);
msm_cvp_comm_kill_session(inst);
cvp_put_inst(s);
} else {