From bc48e4fc495221abf7212273f517d1a588c43ecd Mon Sep 17 00:00:00 2001 From: Han Gao Date: Wed, 6 Mar 2024 14:37:05 +0800 Subject: [PATCH] sync: npu: ax3386 sdk 1.3.3 Signed-off-by: Han Gao --- drivers/nna/vha/vha_api.c | 24 ++++++++++++++++++++---- drivers/nna/vha/vha_common.h | 21 +++++++++++++++------ drivers/nna/vha/vha_dbg.c | 19 +++++++++++++------ 3 files changed, 48 insertions(+), 16 deletions(-) diff --git a/drivers/nna/vha/vha_api.c b/drivers/nna/vha/vha_api.c index d9a835266..3e0ac3c1d 100644 --- a/drivers/nna/vha/vha_api.c +++ b/drivers/nna/vha/vha_api.c @@ -89,14 +89,14 @@ static ssize_t vha_read(struct file *file, char __user *buf, mutex_unlock(&vha->lock); if (file->f_flags & O_NONBLOCK) { - dev_dbg(miscdev->this_device, + dev_err(miscdev->this_device, "%s: returning, no block!\n", __func__); return -EAGAIN; } dev_dbg(miscdev->this_device, "%s: going to sleep\n", __func__); if (wait_event_interruptible(session->wq, !list_empty(&session->rsps))) { - dev_dbg(miscdev->this_device, "%s: signal\n", __func__); + dev_err(miscdev->this_device, "%s: signal\n", __func__); return -ERESTARTSYS; } @@ -109,6 +109,7 @@ static ssize_t vha_read(struct file *file, char __user *buf, if (list_empty(&session->rsps)) { ret = 0; + dev_err(miscdev->this_device, "%s: empty rsps!\n", __func__); goto out_unlock; } @@ -125,10 +126,15 @@ static ssize_t vha_read(struct file *file, char __user *buf, ret = copy_to_user(buf, &rsp->user_rsp, rsp->size); if (ret) { ret = -EFAULT; + dev_err(miscdev->this_device, "%s: copy to user failed!\n", __func__); goto out_unlock; } list_del(&rsp->list); + + vha->stats.cnn_responsed++; + session->responsed++; + mutex_unlock(&vha->lock); ret = rsp->size; @@ -200,6 +206,9 @@ static unsigned int vha_poll(struct file *file, poll_table *wait) /* if no response item available just return 0 */ } + vha->stats.cnn_polled++; + session->polled++; + mutex_unlock(&vha->lock); return mask; } @@ -250,8 +259,10 @@ static ssize_t vha_write(struct file *file, const char __user *buf, } cmd = kzalloc(sizeof(*cmd) - sizeof(cmd->user_cmd) + size, GFP_KERNEL); - if (!cmd) + if (!cmd) { + dev_err(miscdev->this_device, "%s: kzalloc failed!\n", __func__); return -ENOMEM; + } cmd->size = size; cmd->session = session; @@ -266,9 +277,14 @@ static ssize_t vha_write(struct file *file, const char __user *buf, } ret = mutex_lock_interruptible(&vha->lock); - if (ret) + if (ret) { + dev_err(miscdev->this_device, "%s: mutex lock failed <0x%x>!\n", + __func__, ret); goto out_free_item; + } + vha->stats.cnn_add_cmds++; + session->kicks++; ret = vha_add_cmd(session, cmd); mutex_unlock(&vha->lock); if (ret) diff --git a/drivers/nna/vha/vha_common.h b/drivers/nna/vha/vha_common.h index 26825a032..5aec82bfe 100644 --- a/drivers/nna/vha/vha_common.h +++ b/drivers/nna/vha/vha_common.h @@ -361,17 +361,23 @@ struct vha_stats { /* Latest processing time of the core (CNN) */ uint64_t last_proc_us; /* Total number of hw kicks for which a failure has been detected */ - uint32_t total_failures; + uint64_t total_failures; + /* Total cnn add cmds */ + uint64_t cnn_add_cmds; + /* Total cnn polled cmds */ + uint64_t cnn_polled; + /* Total cnn responsed cmds */ + uint64_t cnn_responsed; /* Total cnn kicks */ - uint32_t cnn_kicks; + uint64_t cnn_kicks; /* Total cnn kicks that were queued */ - uint32_t cnn_kicks_queued; + uint64_t cnn_kicks_queued; /* Total cnn kicks that were completed */ - uint32_t cnn_kicks_completed; + uint64_t cnn_kicks_completed; /* Total cnn kicks that were cancelled */ - uint32_t cnn_kicks_cancelled; + uint64_t cnn_kicks_cancelled; /* Total cnn kicks that were interrupted during processing */ - uint32_t cnn_kicks_aborted; + uint64_t cnn_kicks_aborted; /* CNN total processing time */ uint64_t cnn_total_proc_us; /* CNN last processing time */ @@ -750,6 +756,9 @@ struct vha_session { for device buffers allocated in the kernel */ struct dentry *dbgfs; /* file in debugfs */ struct cnn_dbg cnn_dbg; + uint64_t kicks; + uint64_t polled; + uint64_t responsed; }; /* pdump cache info structure used for LDB commands */ diff --git a/drivers/nna/vha/vha_dbg.c b/drivers/nna/vha/vha_dbg.c index 3423e950d..da379df5d 100644 --- a/drivers/nna/vha/vha_dbg.c +++ b/drivers/nna/vha/vha_dbg.c @@ -740,6 +740,10 @@ int vha_dbg_create_hwbufs(struct vha_session *session) dev_warn(vha->dev, "%s: failed to create buffer_dump!\n", __func__); + + debugfs_create_u64("sess_kicks", S_IRUGO, session->dbgfs, &session->kicks); + debugfs_create_u64("sess_polled", S_IRUGO, session->dbgfs, &session->polled); + debugfs_create_u64("sess_responsed", S_IRUGO, session->dbgfs, &session->responsed); } } @@ -1778,11 +1782,14 @@ void vha_dbg_init(struct vha_dev *vha) #ifndef CONFIG_HW_MULTICORE VHA_DBGFS_CREATE_RO(u64, "core_last_proc_us", stats.last_proc_us, debugfs_dir); #endif - VHA_DBGFS_CREATE_RO(u32, "cnn_kicks", stats.cnn_kicks, debugfs_dir); - VHA_DBGFS_CREATE_RO(u32, "cnn_kicks_queued", stats.cnn_kicks_queued, debugfs_dir); - VHA_DBGFS_CREATE_RO(u32, "cnn_kicks_completed", stats.cnn_kicks_completed, debugfs_dir); - VHA_DBGFS_CREATE_RO(u32, "cnn_kicks_cancelled", stats.cnn_kicks_cancelled, debugfs_dir); - VHA_DBGFS_CREATE_RO(u32, "cnn_kicks_aborted", stats.cnn_kicks_aborted, debugfs_dir); + VHA_DBGFS_CREATE_RO(u64, "cnn_add_cmds", stats.cnn_add_cmds, debugfs_dir); + VHA_DBGFS_CREATE_RO(u64, "cnn_kicks", stats.cnn_kicks, debugfs_dir); + VHA_DBGFS_CREATE_RO(u64, "cnn_polled", stats.cnn_polled, debugfs_dir); + VHA_DBGFS_CREATE_RO(u64, "cnn_responsed", stats.cnn_responsed, debugfs_dir); + VHA_DBGFS_CREATE_RO(u64, "cnn_kicks_queued", stats.cnn_kicks_queued, debugfs_dir); + VHA_DBGFS_CREATE_RO(u64, "cnn_kicks_completed", stats.cnn_kicks_completed, debugfs_dir); + VHA_DBGFS_CREATE_RO(u64, "cnn_kicks_cancelled", stats.cnn_kicks_cancelled, debugfs_dir); + VHA_DBGFS_CREATE_RO(u64, "cnn_kicks_aborted", stats.cnn_kicks_aborted, debugfs_dir); VHA_DBGFS_CREATE_RO(u64, "cnn_total_proc_us", stats.cnn_total_proc_us, debugfs_dir); VHA_DBGFS_CREATE_RO(u64, "cnn_last_proc_us", stats.cnn_last_proc_us, debugfs_dir); VHA_DBGFS_CREATE_RO(u64, "cnn_avg_proc_us", stats.cnn_avg_proc_us, debugfs_dir); @@ -1797,7 +1804,7 @@ void vha_dbg_init(struct vha_dev *vha) VHA_DBGFS_CREATE_RO(u32, "mem_usage_last", stats.mem_usage_last, debugfs_dir); VHA_DBGFS_CREATE_RO(u32, "mmu_usage_last", stats.mmu_usage_last, debugfs_dir); - VHA_DBGFS_CREATE_RO(u32, "total_failures", stats.total_failures, debugfs_dir); + VHA_DBGFS_CREATE_RO(u64, "total_failures", stats.total_failures, debugfs_dir); if (vha->hw_props.supported.rtm) { CTX_DBGFS_CREATE_RW(u64, "rtm_ctrl", rtm_ctrl, debugfs_dir);