Commit 0a3a3960 authored by Longfang Liu's avatar Longfang Liu Committed by Herbert Xu

crypto: hisilicon/qm - add debugfs to the QM state machine

The QM driver uses debugfs to provides the current state of
the QM state machine
Signed-off-by: default avatarLongfang Liu <liulongfang@huawei.com>
Signed-off-by: default avatarShukun Tan <tanshukun1@huawei.com>
Reviewed-by: default avatarZhou Wang <wangzhou1@hisilicon.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent 85026525
...@@ -86,3 +86,10 @@ Date: Apr 2020 ...@@ -86,3 +86,10 @@ Date: Apr 2020
Contact: linux-crypto@vger.kernel.org Contact: linux-crypto@vger.kernel.org
Description: Dump the number of failed QM mailbox commands. Description: Dump the number of failed QM mailbox commands.
Available for both PF and VF, and take no other effect on HPRE. Available for both PF and VF, and take no other effect on HPRE.
What: /sys/kernel/debug/hisi_hpre/<bdf>/qm/status
Date: Apr 2020
Contact: linux-crypto@vger.kernel.org
Description: Dump the status of the QM.
Four states: initiated, started, stopped and closed.
Available for both PF and VF, and take no other effect on HPRE.
...@@ -72,3 +72,10 @@ Date: Apr 2020 ...@@ -72,3 +72,10 @@ Date: Apr 2020
Contact: linux-crypto@vger.kernel.org Contact: linux-crypto@vger.kernel.org
Description: Dump the number of failed QM mailbox commands. Description: Dump the number of failed QM mailbox commands.
Available for both PF and VF, and take no other effect on SEC. Available for both PF and VF, and take no other effect on SEC.
What: /sys/kernel/debug/hisi_sec2/<bdf>/qm/status
Date: Apr 2020
Contact: linux-crypto@vger.kernel.org
Description: Dump the status of the QM.
Four states: initiated, started, stopped and closed.
Available for both PF and VF, and take no other effect on SEC.
...@@ -79,3 +79,10 @@ Date: Apr 2020 ...@@ -79,3 +79,10 @@ Date: Apr 2020
Contact: linux-crypto@vger.kernel.org Contact: linux-crypto@vger.kernel.org
Description: Dump the number of failed QM mailbox commands. Description: Dump the number of failed QM mailbox commands.
Available for both PF and VF, and take no other effect on ZIP. Available for both PF and VF, and take no other effect on ZIP.
What: /sys/kernel/debug/hisi_zip/<bdf>/qm/status
Date: Apr 2020
Contact: linux-crypto@vger.kernel.org
Description: Dump the status of the QM.
Four states: initiated, started, stopped and closed.
Available for both PF and VF, and take no other effect on ZIP.
...@@ -175,6 +175,7 @@ ...@@ -175,6 +175,7 @@
#define QM_SQE_DATA_ALIGN_MASK GENMASK(6, 0) #define QM_SQE_DATA_ALIGN_MASK GENMASK(6, 0)
#define QMC_ALIGN(sz) ALIGN(sz, 32) #define QMC_ALIGN(sz) ALIGN(sz, 32)
#define QM_DBG_READ_LEN 256
#define QM_DBG_TMP_BUF_LEN 22 #define QM_DBG_TMP_BUF_LEN 22
#define QM_PCI_COMMAND_INVALID ~0 #define QM_PCI_COMMAND_INVALID ~0
...@@ -2268,6 +2269,37 @@ int hisi_qm_stop(struct hisi_qm *qm) ...@@ -2268,6 +2269,37 @@ int hisi_qm_stop(struct hisi_qm *qm)
} }
EXPORT_SYMBOL_GPL(hisi_qm_stop); EXPORT_SYMBOL_GPL(hisi_qm_stop);
static ssize_t qm_status_read(struct file *filp, char __user *buffer,
size_t count, loff_t *pos)
{
struct hisi_qm *qm = filp->private_data;
char buf[QM_DBG_READ_LEN];
int val, cp_len, len;
if (*pos)
return 0;
if (count < QM_DBG_READ_LEN)
return -ENOSPC;
val = atomic_read(&qm->status.flags);
len = snprintf(buf, QM_DBG_READ_LEN, "%s\n", qm_s[val]);
if (!len)
return -EFAULT;
cp_len = copy_to_user(buffer, buf, len);
if (cp_len)
return -EFAULT;
return (*pos = len);
}
static const struct file_operations qm_status_fops = {
.owner = THIS_MODULE,
.open = simple_open,
.read = qm_status_read,
};
static int qm_debugfs_atomic64_set(void *data, u64 val) static int qm_debugfs_atomic64_set(void *data, u64 val)
{ {
if (val) if (val)
...@@ -2314,6 +2346,8 @@ int hisi_qm_debug_init(struct hisi_qm *qm) ...@@ -2314,6 +2346,8 @@ int hisi_qm_debug_init(struct hisi_qm *qm)
debugfs_create_file("qm_regs", 0444, qm->debug.qm_d, qm, &qm_regs_fops); debugfs_create_file("qm_regs", 0444, qm->debug.qm_d, qm, &qm_regs_fops);
debugfs_create_file("status", 0444, qm->debug.qm_d, qm,
&qm_status_fops);
for (i = 0; i < ARRAY_SIZE(qm_dfx_files); i++) { for (i = 0; i < ARRAY_SIZE(qm_dfx_files); i++) {
data = (atomic64_t *)((uintptr_t)dfx + qm_dfx_files[i].offset); data = (atomic64_t *)((uintptr_t)dfx + qm_dfx_files[i].offset);
debugfs_create_file(qm_dfx_files[i].name, debugfs_create_file(qm_dfx_files[i].name,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment