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:
@@ -1177,10 +1177,6 @@ static void cvp_dump_csr(struct iris_hfi_device *dev)
|
|||||||
dprintk(CVP_ERR, "CVP_WRAPPER_CPU_STATUS: %x\n", reg);
|
dprintk(CVP_ERR, "CVP_WRAPPER_CPU_STATUS: %x\n", reg);
|
||||||
reg = __read_register(dev, CVP_CPU_CS_SCIACMDARG0);
|
reg = __read_register(dev, CVP_CPU_CS_SCIACMDARG0);
|
||||||
dprintk(CVP_ERR, "CVP_CPU_CS_SCIACMDARG0: %x\n", reg);
|
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);
|
reg = __read_register(dev, CVP_WRAPPER_INTR_STATUS);
|
||||||
dprintk(CVP_ERR, "CVP_WRAPPER_INTR_STATUS: %x\n", reg);
|
dprintk(CVP_ERR, "CVP_WRAPPER_INTR_STATUS: %x\n", reg);
|
||||||
reg = __read_register(dev, CVP_CPU_CS_H2ASOFTINT);
|
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);
|
dprintk(CVP_ERR, "CVP_CC_MVS1C_GDSCR: %x\n", reg);
|
||||||
reg = __read_register(dev, CVP_CC_MVS1C_CBCR);
|
reg = __read_register(dev, CVP_CC_MVS1C_CBCR);
|
||||||
dprintk(CVP_ERR, "CVP_CC_MVS1C_CBCR: %x\n", reg);
|
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;
|
dev->reg_dumped = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -311,5 +311,5 @@ unsigned int get_msg_errorcode(void *msg);
|
|||||||
int get_msg_opconfigs(void *msg, unsigned int *session_id,
|
int get_msg_opconfigs(void *msg, unsigned int *session_id,
|
||||||
unsigned int *error_type, unsigned int *config_id);
|
unsigned int *error_type, unsigned int *config_id);
|
||||||
extern const struct msm_cvp_hfi_defs cvp_hfi_defs[MAX_PKT_IDX];
|
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__ */
|
#endif /*__CVP_HFI_API_H__ */
|
||||||
|
@@ -9,7 +9,7 @@
|
|||||||
#include "msm_cvp_buf.h"
|
#include "msm_cvp_buf.h"
|
||||||
#include "cvp_comm_def.h"
|
#include "cvp_comm_def.h"
|
||||||
#include "cvp_power.h"
|
#include "cvp_power.h"
|
||||||
|
#include "cvp_hfi_api.h"
|
||||||
static int cvp_enqueue_pkt(struct msm_cvp_inst* inst,
|
static int cvp_enqueue_pkt(struct msm_cvp_inst* inst,
|
||||||
struct eva_kmd_hfi_packet *in_pkt,
|
struct eva_kmd_hfi_packet *in_pkt,
|
||||||
unsigned int in_offset,
|
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,
|
if (wait_event_timeout(sq->wq,
|
||||||
cvp_msg_pending(sq, &msg, ktid), timeout) == 0) {
|
cvp_msg_pending(sq, &msg, ktid), timeout) == 0) {
|
||||||
dprintk(CVP_WARN, "session queue wait timeout\n");
|
dprintk(CVP_WARN, "session queue wait timeout\n");
|
||||||
|
if(inst && inst->core && inst->core->device){
|
||||||
|
print_hfi_queue_info(inst->core->device);
|
||||||
|
}
|
||||||
rc = -ETIMEDOUT;
|
rc = -ETIMEDOUT;
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
@@ -58,16 +58,26 @@ static void dump_hfi_queue(struct iris_hfi_device *device)
|
|||||||
read_ptr = (u32 *)((qinfo->q_array.align_virtual_addr) +
|
read_ptr = (u32 *)((qinfo->q_array.align_virtual_addr) +
|
||||||
(read_idx << 2));
|
(read_idx << 2));
|
||||||
dprintk(CVP_ERR,
|
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[0], read_ptr[1], read_ptr[2],
|
||||||
read_ptr[3], read_ptr[4], read_ptr[5],
|
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);
|
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 *get_cvp_core(int core_id)
|
||||||
{
|
{
|
||||||
struct msm_cvp_core *core;
|
struct msm_cvp_core *core;
|
||||||
@@ -378,8 +388,7 @@ int wait_for_sess_signal_receipt(struct msm_cvp_inst *inst,
|
|||||||
if (!rc) {
|
if (!rc) {
|
||||||
dprintk(CVP_WARN, "Wait interrupted or timed out: %d\n",
|
dprintk(CVP_WARN, "Wait interrupted or timed out: %d\n",
|
||||||
SESSION_MSG_INDEX(cmd));
|
SESSION_MSG_INDEX(cmd));
|
||||||
call_hfi_op(hdev, flush_debug_queue, hdev->hfi_device_data);
|
print_hfi_queue_info(hdev);
|
||||||
dump_hfi_queue(hdev->hfi_device_data);
|
|
||||||
rc = -ETIMEDOUT;
|
rc = -ETIMEDOUT;
|
||||||
} else if (inst->state == MSM_CVP_CORE_INVALID) {
|
} else if (inst->state == MSM_CVP_CORE_INVALID) {
|
||||||
rc = -ECONNRESET;
|
rc = -ECONNRESET;
|
||||||
@@ -862,8 +871,7 @@ static int msm_comm_session_abort(struct msm_cvp_inst *inst)
|
|||||||
if (!rc) {
|
if (!rc) {
|
||||||
dprintk(CVP_ERR, "%s: inst %pK session %x abort timed out\n",
|
dprintk(CVP_ERR, "%s: inst %pK session %x abort timed out\n",
|
||||||
__func__, inst, hash32_ptr(inst->session));
|
__func__, inst, hash32_ptr(inst->session));
|
||||||
call_hfi_op(hdev, flush_debug_queue, hdev->hfi_device_data);
|
print_hfi_queue_info(hdev);
|
||||||
dump_hfi_queue(hdev->hfi_device_data);
|
|
||||||
msm_cvp_comm_generate_sys_error(inst);
|
msm_cvp_comm_generate_sys_error(inst);
|
||||||
rc = -EBUSY;
|
rc = -EBUSY;
|
||||||
} else {
|
} 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",
|
dprintk(CVP_ERR, "%s: Wait interrupted or timed out: %d\n",
|
||||||
__func__, SYS_MSG_INDEX(HAL_SYS_INIT_DONE));
|
__func__, SYS_MSG_INDEX(HAL_SYS_INIT_DONE));
|
||||||
hdev = core->device;
|
hdev = core->device;
|
||||||
call_hfi_op(hdev, flush_debug_queue, hdev->hfi_device_data);
|
print_hfi_queue_info(hdev);
|
||||||
dump_hfi_queue(hdev->hfi_device_data);
|
|
||||||
rc = -EIO;
|
rc = -EIO;
|
||||||
goto exit;
|
goto exit;
|
||||||
} else {
|
} else {
|
||||||
@@ -1336,10 +1343,7 @@ void msm_cvp_ssr_handler(struct work_struct *work)
|
|||||||
s = cvp_get_inst_validate(inst->core, inst);
|
s = cvp_get_inst_validate(inst->core, inst);
|
||||||
if (!s)
|
if (!s)
|
||||||
return;
|
return;
|
||||||
|
print_hfi_queue_info(hdev);
|
||||||
call_hfi_op(hdev, flush_debug_queue,
|
|
||||||
hdev->hfi_device_data);
|
|
||||||
dump_hfi_queue(hdev->hfi_device_data);
|
|
||||||
msm_cvp_comm_kill_session(inst);
|
msm_cvp_comm_kill_session(inst);
|
||||||
cvp_put_inst(s);
|
cvp_put_inst(s);
|
||||||
} else {
|
} else {
|
||||||
|
Reference in New Issue
Block a user