Commit aa6603e1 authored by Weili Qian's avatar Weili Qian Committed by JiangShui
Browse files

crypto: hisilicon/qm - support get device state

driver inclusion
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I8LFYK


CVE: NA

----------------------------------------------------------------------

Support get device state. The value 0 indicates that the device is busy,
and the value 1 indicates that the device is idle.

Signed-off-by: default avatarWeili Qian <qianweili@huawei.com>
Signed-off-by: default avatarJiangShui Yang <yangjiangshui@h-partners.com>
parent 5ab37851
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -109,6 +109,13 @@ Description: Dump the stop queue status of the QM. The default value is 0,
		will return non-zero value. Available for both PF and VF,
		and take no other effect on HPRE.

What:		/sys/kernel/debug/hisi_hpre/<bdf>/qm/qm_state
Date:		Dec 2023
Contact:	qianweili@huawei.com
Description:	Dump the status of the device.
		0: busy, 1: idle.
		Only available for PF, and take no other effect on HPRE.

What:           /sys/kernel/debug/hisi_hpre/<bdf>/hpre_dfx/send_cnt
Date:           Apr 2020
Contact:        linux-crypto@vger.kernel.org
+7 −0
Original line number Diff line number Diff line
@@ -89,6 +89,13 @@ Description: Dump the stop queue status of the QM. The default value is 0,
		will return non-zero value. Available for both PF and VF,
		and take no other effect on SEC.

What:		/sys/kernel/debug/hisi_sec2/<bdf>/qm/qm_state
Date:		Dec 2023
Contact:	qianweili@huawei.com
Description:	Dump the status of the device.
		0: busy, 1: idle.
		Only available for PF, and take no other effect on SEC.

What:           /sys/kernel/debug/hisi_sec2/<bdf>/sec_dfx/send_cnt
Date:           Apr 2020
Contact:        linux-crypto@vger.kernel.org
+7 −0
Original line number Diff line number Diff line
@@ -102,6 +102,13 @@ Description: Dump the stop queue status of the QM. The default value is 0,
		will return non-zero value. Available for both PF and VF,
		and take no other effect on ZIP.

What:		/sys/kernel/debug/hisi_zip/<bdf>/qm/qm_state
Date:		Dec 2023
Contact:	qianweili@huawei.com
Description:	Dump the status of the device.
		0: busy, 1: idle.
		Only available for PF, and take no other effect on ZIP.

What:           /sys/kernel/debug/hisi_zip/<bdf>/zip_dfx/send_cnt
Date:           Apr 2020
Contact:        linux-crypto@vger.kernel.org
+29 −0
Original line number Diff line number Diff line
@@ -24,6 +24,8 @@
#define QM_DFX_QN_SHIFT			16
#define QM_DFX_CNT_CLR_CE		0x100118
#define QM_DBG_WRITE_LEN		1024
#define QM_IN_IDLE_ST_REG		0x1040e4
#define QM_IN_IDLE_STATE		0x1

static const char * const qm_debug_file_name[] = {
	[CURRENT_QM]   = "current_qm",
@@ -1001,6 +1003,30 @@ static int qm_diff_regs_show(struct seq_file *s, void *unused)
}
DEFINE_SHOW_ATTRIBUTE(qm_diff_regs);

static int qm_state_show(struct seq_file *s, void *unused)
{
	struct hisi_qm *qm = s->private;
	u32 val;
	int ret;

	ret = hisi_qm_get_dfx_access(qm);
	if (!ret) {
		val = readl(qm->io_base + QM_IN_IDLE_ST_REG);
		hisi_qm_put_dfx_access(qm);
	} else if (ret == -EAGAIN) {
		/* If device is in suspended, directly return the idle state. */
		val = QM_IN_IDLE_STATE;
	} else {
		return ret;
	}

	seq_printf(s, "%u\n", val);

	return 0;
}

DEFINE_SHOW_ATTRIBUTE(qm_state);

static ssize_t qm_status_read(struct file *filp, char __user *buffer,
			      size_t count, loff_t *pos)
{
@@ -1073,6 +1099,9 @@ void hisi_qm_debug_init(struct hisi_qm *qm)

	/* only show this in PF */
	if (qm->fun_type == QM_HW_PF) {
		debugfs_create_file("qm_state", 0444, qm->debug.qm_d,
					qm, &qm_state_fops);

		qm_create_debugfs_file(qm, qm->debug.debug_root, CURRENT_QM);
		for (i = CURRENT_Q; i < DEBUG_FILE_NUM; i++)
			qm_create_debugfs_file(qm, qm->debug.qm_d, i);