Commit 0f1e6dbf authored by Weili Qian's avatar Weili Qian Committed by JangShui Yang
Browse files

crypto: hisilicon/qm - support get device state

maillist inclusion
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I925L9
CVE: NA

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev.git/commit/?id=8413fe3e7fdfb412baa9e31b3f1d2eaf6d21a373



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

Support get device current state. The value 0 indicates that
the device is busy, and the value 1 indicates that the
device is idle. When the device is in suspended, 1 is returned.

Signed-off-by: default avatarWeili Qian <qianweili@huawei.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: default avatarJangShui Yang <yangjiangshui@h-partners.com>
parent c6091402
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -111,6 +111,13 @@ Description: QM debug registers(regs) read hardware register value. This
		node is used to show the change of the qm register values. This
		node can be help users to check the change of register values.

What:		/sys/kernel/debug/hisi_hpre/<bdf>/qm/qm_state
Date:		Jan 2024
Contact:	linux-crypto@vger.kernel.org
Description:	Dump the state 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/diff_regs
Date:		Mar 2022
Contact:	linux-crypto@vger.kernel.org
+7 −0
Original line number Diff line number Diff line
@@ -91,6 +91,13 @@ Description: QM debug registers(regs) read hardware register value. This
		node is used to show the change of the qm register values. This
		node can be help users to check the change of register values.

What:		/sys/kernel/debug/hisi_sec2/<bdf>/qm/qm_state
Date:		Jan 2024
Contact:	linux-crypto@vger.kernel.org
Description:	Dump the state 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/diff_regs
Date:		Mar 2022
Contact:	linux-crypto@vger.kernel.org
+7 −0
Original line number Diff line number Diff line
@@ -104,6 +104,13 @@ Description: QM debug registers(regs) read hardware register value. This
		node is used to show the change of the qm registers value. This
		node can be help users to check the change of register values.

What:		/sys/kernel/debug/hisi_zip/<bdf>/qm/qm_state
Date:		Jan 2024
Contact:	linux-crypto@vger.kernel.org
Description:	Dump the state 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/diff_regs
Date:		Mar 2022
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;

	/* If device is in suspended, directly return the idle state. */
	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) {
		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)
{
@@ -1072,6 +1098,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);