public inbox for stable@vger.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: stable@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	patches@lists.linux.dev, Kai Ye <yekai13@huawei.com>,
	Herbert Xu <herbert@gondor.apana.org.au>,
	Sasha Levin <sashal@kernel.org>
Subject: [PATCH 6.1 212/379] crypto: hisilicon/qm - split a debugfs.c from qm
Date: Wed, 15 Nov 2023 14:24:47 -0500	[thread overview]
Message-ID: <20231115192657.646943057@linuxfoundation.org> (raw)
In-Reply-To: <20231115192645.143643130@linuxfoundation.org>

6.1-stable review patch.  If anyone has any objections, please let me know.

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

From: Kai Ye <yekai13@huawei.com>

[ Upstream commit 94476b2b6d60bc926a585ae62e1bf69bd22c1dff ]

Considering that the qm feature and debugfs feature are independent.
The code related to debugfs is getting larger and larger. It should be
separate as a debugfs file. So move some debugfs code to new file from
qm file. The qm code logic is not modified. And maintainability is
enhanced.

Signed-off-by: Kai Ye <yekai13@huawei.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Stable-dep-of: 5831fc1fd4a5 ("crypto: hisilicon/qm - fix PF queue parameter issue")
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 drivers/crypto/hisilicon/Makefile    |    2 +-
 drivers/crypto/hisilicon/debugfs.c   | 1097 +++++++++++++++++++++
 drivers/crypto/hisilicon/qm.c        | 1348 ++------------------------
 drivers/crypto/hisilicon/qm_common.h |   87 ++
 4 files changed, 1277 insertions(+), 1257 deletions(-)
 create mode 100644 drivers/crypto/hisilicon/debugfs.c
 create mode 100644 drivers/crypto/hisilicon/qm_common.h

diff --git a/drivers/crypto/hisilicon/Makefile b/drivers/crypto/hisilicon/Makefile
index 1e89269a2e4b0..8595a5a5d2288 100644
--- a/drivers/crypto/hisilicon/Makefile
+++ b/drivers/crypto/hisilicon/Makefile
@@ -3,6 +3,6 @@ obj-$(CONFIG_CRYPTO_DEV_HISI_HPRE) += hpre/
 obj-$(CONFIG_CRYPTO_DEV_HISI_SEC) += sec/
 obj-$(CONFIG_CRYPTO_DEV_HISI_SEC2) += sec2/
 obj-$(CONFIG_CRYPTO_DEV_HISI_QM) += hisi_qm.o
-hisi_qm-objs = qm.o sgl.o
+hisi_qm-objs = qm.o sgl.o debugfs.o
 obj-$(CONFIG_CRYPTO_DEV_HISI_ZIP) += zip/
 obj-$(CONFIG_CRYPTO_DEV_HISI_TRNG) += trng/
diff --git a/drivers/crypto/hisilicon/debugfs.c b/drivers/crypto/hisilicon/debugfs.c
new file mode 100644
index 0000000000000..13bec8b2d7237
--- /dev/null
+++ b/drivers/crypto/hisilicon/debugfs.c
@@ -0,0 +1,1097 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Copyright (c) 2022 HiSilicon Limited. */
+#include <linux/hisi_acc_qm.h>
+#include "qm_common.h"
+
+#define QM_DFX_BASE			0x0100000
+#define QM_DFX_STATE1			0x0104000
+#define QM_DFX_STATE2			0x01040C8
+#define QM_DFX_COMMON			0x0000
+#define QM_DFX_BASE_LEN			0x5A
+#define QM_DFX_STATE1_LEN		0x2E
+#define QM_DFX_STATE2_LEN		0x11
+#define QM_DFX_COMMON_LEN		0xC3
+#define QM_DFX_REGS_LEN			4UL
+#define QM_DBG_TMP_BUF_LEN		22
+#define CURRENT_FUN_MASK		GENMASK(5, 0)
+#define CURRENT_Q_MASK			GENMASK(31, 16)
+#define QM_SQE_ADDR_MASK		GENMASK(7, 0)
+
+#define QM_DFX_MB_CNT_VF		0x104010
+#define QM_DFX_DB_CNT_VF		0x104020
+#define QM_DFX_SQE_CNT_VF_SQN		0x104030
+#define QM_DFX_CQE_CNT_VF_CQN		0x104040
+#define QM_DFX_QN_SHIFT			16
+#define QM_DFX_CNT_CLR_CE		0x100118
+#define QM_DBG_WRITE_LEN		1024
+
+static const char * const qm_debug_file_name[] = {
+	[CURRENT_QM]   = "current_qm",
+	[CURRENT_Q]    = "current_q",
+	[CLEAR_ENABLE] = "clear_enable",
+};
+
+struct qm_dfx_item {
+	const char *name;
+	u32 offset;
+};
+
+static struct qm_dfx_item qm_dfx_files[] = {
+	{"err_irq", offsetof(struct qm_dfx, err_irq_cnt)},
+	{"aeq_irq", offsetof(struct qm_dfx, aeq_irq_cnt)},
+	{"abnormal_irq", offsetof(struct qm_dfx, abnormal_irq_cnt)},
+	{"create_qp_err", offsetof(struct qm_dfx, create_qp_err_cnt)},
+	{"mb_err", offsetof(struct qm_dfx, mb_err_cnt)},
+};
+
+#define CNT_CYC_REGS_NUM		10
+static const struct debugfs_reg32 qm_dfx_regs[] = {
+	/* XXX_CNT are reading clear register */
+	{"QM_ECC_1BIT_CNT               ",  0x104000ull},
+	{"QM_ECC_MBIT_CNT               ",  0x104008ull},
+	{"QM_DFX_MB_CNT                 ",  0x104018ull},
+	{"QM_DFX_DB_CNT                 ",  0x104028ull},
+	{"QM_DFX_SQE_CNT                ",  0x104038ull},
+	{"QM_DFX_CQE_CNT                ",  0x104048ull},
+	{"QM_DFX_SEND_SQE_TO_ACC_CNT    ",  0x104050ull},
+	{"QM_DFX_WB_SQE_FROM_ACC_CNT    ",  0x104058ull},
+	{"QM_DFX_ACC_FINISH_CNT         ",  0x104060ull},
+	{"QM_DFX_CQE_ERR_CNT            ",  0x1040b4ull},
+	{"QM_DFX_FUNS_ACTIVE_ST         ",  0x200ull},
+	{"QM_ECC_1BIT_INF               ",  0x104004ull},
+	{"QM_ECC_MBIT_INF               ",  0x10400cull},
+	{"QM_DFX_ACC_RDY_VLD0           ",  0x1040a0ull},
+	{"QM_DFX_ACC_RDY_VLD1           ",  0x1040a4ull},
+	{"QM_DFX_AXI_RDY_VLD            ",  0x1040a8ull},
+	{"QM_DFX_FF_ST0                 ",  0x1040c8ull},
+	{"QM_DFX_FF_ST1                 ",  0x1040ccull},
+	{"QM_DFX_FF_ST2                 ",  0x1040d0ull},
+	{"QM_DFX_FF_ST3                 ",  0x1040d4ull},
+	{"QM_DFX_FF_ST4                 ",  0x1040d8ull},
+	{"QM_DFX_FF_ST5                 ",  0x1040dcull},
+	{"QM_DFX_FF_ST6                 ",  0x1040e0ull},
+	{"QM_IN_IDLE_ST                 ",  0x1040e4ull},
+};
+
+static const struct debugfs_reg32 qm_vf_dfx_regs[] = {
+	{"QM_DFX_FUNS_ACTIVE_ST         ",  0x200ull},
+};
+
+/* define the QM's dfx regs region and region length */
+static struct dfx_diff_registers qm_diff_regs[] = {
+	{
+		.reg_offset = QM_DFX_BASE,
+		.reg_len = QM_DFX_BASE_LEN,
+	}, {
+		.reg_offset = QM_DFX_STATE1,
+		.reg_len = QM_DFX_STATE1_LEN,
+	}, {
+		.reg_offset = QM_DFX_STATE2,
+		.reg_len = QM_DFX_STATE2_LEN,
+	}, {
+		.reg_offset = QM_DFX_COMMON,
+		.reg_len = QM_DFX_COMMON_LEN,
+	},
+};
+
+static struct hisi_qm *file_to_qm(struct debugfs_file *file)
+{
+	struct qm_debug *debug = file->debug;
+
+	return container_of(debug, struct hisi_qm, debug);
+}
+
+static ssize_t qm_cmd_read(struct file *filp, char __user *buffer,
+			   size_t count, loff_t *pos)
+{
+	char buf[QM_DBG_READ_LEN];
+	int len;
+
+	len = scnprintf(buf, QM_DBG_READ_LEN, "%s\n",
+			"Please echo help to cmd to get help information");
+
+	return simple_read_from_buffer(buffer, count, pos, buf, len);
+}
+
+static void dump_show(struct hisi_qm *qm, void *info,
+		     unsigned int info_size, char *info_name)
+{
+	struct device *dev = &qm->pdev->dev;
+	u8 *info_curr = info;
+	u32 i;
+#define BYTE_PER_DW	4
+
+	dev_info(dev, "%s DUMP\n", info_name);
+	for (i = 0; i < info_size; i += BYTE_PER_DW, info_curr += BYTE_PER_DW) {
+		pr_info("DW%u: %02X%02X %02X%02X\n", i / BYTE_PER_DW,
+			*(info_curr + 3), *(info_curr + 2), *(info_curr + 1), *(info_curr));
+	}
+}
+
+static int qm_sqc_dump(struct hisi_qm *qm, const char *s)
+{
+	struct device *dev = &qm->pdev->dev;
+	struct qm_sqc *sqc, *sqc_curr;
+	dma_addr_t sqc_dma;
+	u32 qp_id;
+	int ret;
+
+	if (!s)
+		return -EINVAL;
+
+	ret = kstrtou32(s, 0, &qp_id);
+	if (ret || qp_id >= qm->qp_num) {
+		dev_err(dev, "Please input qp num (0-%u)", qm->qp_num - 1);
+		return -EINVAL;
+	}
+
+	sqc = hisi_qm_ctx_alloc(qm, sizeof(*sqc), &sqc_dma);
+	if (IS_ERR(sqc))
+		return PTR_ERR(sqc);
+
+	ret = hisi_qm_mb(qm, QM_MB_CMD_SQC, sqc_dma, qp_id, 1);
+	if (ret) {
+		down_read(&qm->qps_lock);
+		if (qm->sqc) {
+			sqc_curr = qm->sqc + qp_id;
+
+			dump_show(qm, sqc_curr, sizeof(*sqc), "SOFT SQC");
+		}
+		up_read(&qm->qps_lock);
+
+		goto free_ctx;
+	}
+
+	dump_show(qm, sqc, sizeof(*sqc), "SQC");
+
+free_ctx:
+	hisi_qm_ctx_free(qm, sizeof(*sqc), sqc, &sqc_dma);
+	return 0;
+}
+
+static int qm_cqc_dump(struct hisi_qm *qm, const char *s)
+{
+	struct device *dev = &qm->pdev->dev;
+	struct qm_cqc *cqc, *cqc_curr;
+	dma_addr_t cqc_dma;
+	u32 qp_id;
+	int ret;
+
+	if (!s)
+		return -EINVAL;
+
+	ret = kstrtou32(s, 0, &qp_id);
+	if (ret || qp_id >= qm->qp_num) {
+		dev_err(dev, "Please input qp num (0-%u)", qm->qp_num - 1);
+		return -EINVAL;
+	}
+
+	cqc = hisi_qm_ctx_alloc(qm, sizeof(*cqc), &cqc_dma);
+	if (IS_ERR(cqc))
+		return PTR_ERR(cqc);
+
+	ret = hisi_qm_mb(qm, QM_MB_CMD_CQC, cqc_dma, qp_id, 1);
+	if (ret) {
+		down_read(&qm->qps_lock);
+		if (qm->cqc) {
+			cqc_curr = qm->cqc + qp_id;
+
+			dump_show(qm, cqc_curr, sizeof(*cqc), "SOFT CQC");
+		}
+		up_read(&qm->qps_lock);
+
+		goto free_ctx;
+	}
+
+	dump_show(qm, cqc, sizeof(*cqc), "CQC");
+
+free_ctx:
+	hisi_qm_ctx_free(qm, sizeof(*cqc), cqc, &cqc_dma);
+	return 0;
+}
+
+static int qm_eqc_aeqc_dump(struct hisi_qm *qm, char *s, size_t size,
+			    int cmd, char *name)
+{
+	struct device *dev = &qm->pdev->dev;
+	dma_addr_t xeqc_dma;
+	void *xeqc;
+	int ret;
+
+	if (strsep(&s, " ")) {
+		dev_err(dev, "Please do not input extra characters!\n");
+		return -EINVAL;
+	}
+
+	xeqc = hisi_qm_ctx_alloc(qm, size, &xeqc_dma);
+	if (IS_ERR(xeqc))
+		return PTR_ERR(xeqc);
+
+	ret = hisi_qm_mb(qm, cmd, xeqc_dma, 0, 1);
+	if (ret)
+		goto err_free_ctx;
+
+	dump_show(qm, xeqc, size, name);
+
+err_free_ctx:
+	hisi_qm_ctx_free(qm, size, xeqc, &xeqc_dma);
+	return ret;
+}
+
+static int q_dump_param_parse(struct hisi_qm *qm, char *s,
+			      u32 *e_id, u32 *q_id, u16 q_depth)
+{
+	struct device *dev = &qm->pdev->dev;
+	unsigned int qp_num = qm->qp_num;
+	char *presult;
+	int ret;
+
+	presult = strsep(&s, " ");
+	if (!presult) {
+		dev_err(dev, "Please input qp number!\n");
+		return -EINVAL;
+	}
+
+	ret = kstrtou32(presult, 0, q_id);
+	if (ret || *q_id >= qp_num) {
+		dev_err(dev, "Please input qp num (0-%u)", qp_num - 1);
+		return -EINVAL;
+	}
+
+	presult = strsep(&s, " ");
+	if (!presult) {
+		dev_err(dev, "Please input sqe number!\n");
+		return -EINVAL;
+	}
+
+	ret = kstrtou32(presult, 0, e_id);
+	if (ret || *e_id >= q_depth) {
+		dev_err(dev, "Please input sqe num (0-%u)", q_depth - 1);
+		return -EINVAL;
+	}
+
+	if (strsep(&s, " ")) {
+		dev_err(dev, "Please do not input extra characters!\n");
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static int qm_sq_dump(struct hisi_qm *qm, char *s)
+{
+	u16 sq_depth = qm->qp_array->cq_depth;
+	void *sqe, *sqe_curr;
+	struct hisi_qp *qp;
+	u32 qp_id, sqe_id;
+	int ret;
+
+	ret = q_dump_param_parse(qm, s, &sqe_id, &qp_id, sq_depth);
+	if (ret)
+		return ret;
+
+	sqe = kzalloc(qm->sqe_size * sq_depth, GFP_KERNEL);
+	if (!sqe)
+		return -ENOMEM;
+
+	qp = &qm->qp_array[qp_id];
+	memcpy(sqe, qp->sqe, qm->sqe_size * sq_depth);
+	sqe_curr = sqe + (u32)(sqe_id * qm->sqe_size);
+	memset(sqe_curr + qm->debug.sqe_mask_offset, QM_SQE_ADDR_MASK,
+	       qm->debug.sqe_mask_len);
+
+	dump_show(qm, sqe_curr, qm->sqe_size, "SQE");
+
+	kfree(sqe);
+
+	return 0;
+}
+
+static int qm_cq_dump(struct hisi_qm *qm, char *s)
+{
+	struct qm_cqe *cqe_curr;
+	struct hisi_qp *qp;
+	u32 qp_id, cqe_id;
+	int ret;
+
+	ret = q_dump_param_parse(qm, s, &cqe_id, &qp_id, qm->qp_array->cq_depth);
+	if (ret)
+		return ret;
+
+	qp = &qm->qp_array[qp_id];
+	cqe_curr = qp->cqe + cqe_id;
+	dump_show(qm, cqe_curr, sizeof(struct qm_cqe), "CQE");
+
+	return 0;
+}
+
+static int qm_eq_aeq_dump(struct hisi_qm *qm, const char *s,
+			  size_t size, char *name)
+{
+	struct device *dev = &qm->pdev->dev;
+	void *xeqe;
+	u32 xeqe_id;
+	int ret;
+
+	if (!s)
+		return -EINVAL;
+
+	ret = kstrtou32(s, 0, &xeqe_id);
+	if (ret)
+		return -EINVAL;
+
+	if (!strcmp(name, "EQE") && xeqe_id >= qm->eq_depth) {
+		dev_err(dev, "Please input eqe num (0-%u)", qm->eq_depth - 1);
+		return -EINVAL;
+	} else if (!strcmp(name, "AEQE") && xeqe_id >= qm->aeq_depth) {
+		dev_err(dev, "Please input aeqe num (0-%u)", qm->eq_depth - 1);
+		return -EINVAL;
+	}
+
+	down_read(&qm->qps_lock);
+
+	if (qm->eqe && !strcmp(name, "EQE")) {
+		xeqe = qm->eqe + xeqe_id;
+	} else if (qm->aeqe && !strcmp(name, "AEQE")) {
+		xeqe = qm->aeqe + xeqe_id;
+	} else {
+		ret = -EINVAL;
+		goto err_unlock;
+	}
+
+	dump_show(qm, xeqe, size, name);
+
+err_unlock:
+	up_read(&qm->qps_lock);
+	return ret;
+}
+
+static int qm_dbg_help(struct hisi_qm *qm, char *s)
+{
+	struct device *dev = &qm->pdev->dev;
+
+	if (strsep(&s, " ")) {
+		dev_err(dev, "Please do not input extra characters!\n");
+		return -EINVAL;
+	}
+
+	dev_info(dev, "available commands:\n");
+	dev_info(dev, "sqc <num>\n");
+	dev_info(dev, "cqc <num>\n");
+	dev_info(dev, "eqc\n");
+	dev_info(dev, "aeqc\n");
+	dev_info(dev, "sq <num> <e>\n");
+	dev_info(dev, "cq <num> <e>\n");
+	dev_info(dev, "eq <e>\n");
+	dev_info(dev, "aeq <e>\n");
+
+	return 0;
+}
+
+static int qm_cmd_write_dump(struct hisi_qm *qm, const char *cmd_buf)
+{
+	struct device *dev = &qm->pdev->dev;
+	char *presult, *s, *s_tmp;
+	int ret;
+
+	s = kstrdup(cmd_buf, GFP_KERNEL);
+	if (!s)
+		return -ENOMEM;
+
+	s_tmp = s;
+	presult = strsep(&s, " ");
+	if (!presult) {
+		ret = -EINVAL;
+		goto err_buffer_free;
+	}
+
+	if (!strcmp(presult, "sqc"))
+		ret = qm_sqc_dump(qm, s);
+	else if (!strcmp(presult, "cqc"))
+		ret = qm_cqc_dump(qm, s);
+	else if (!strcmp(presult, "eqc"))
+		ret = qm_eqc_aeqc_dump(qm, s, sizeof(struct qm_eqc),
+				       QM_MB_CMD_EQC, "EQC");
+	else if (!strcmp(presult, "aeqc"))
+		ret = qm_eqc_aeqc_dump(qm, s, sizeof(struct qm_aeqc),
+				       QM_MB_CMD_AEQC, "AEQC");
+	else if (!strcmp(presult, "sq"))
+		ret = qm_sq_dump(qm, s);
+	else if (!strcmp(presult, "cq"))
+		ret = qm_cq_dump(qm, s);
+	else if (!strcmp(presult, "eq"))
+		ret = qm_eq_aeq_dump(qm, s, sizeof(struct qm_eqe), "EQE");
+	else if (!strcmp(presult, "aeq"))
+		ret = qm_eq_aeq_dump(qm, s, sizeof(struct qm_aeqe), "AEQE");
+	else if (!strcmp(presult, "help"))
+		ret = qm_dbg_help(qm, s);
+	else
+		ret = -EINVAL;
+
+	if (ret)
+		dev_info(dev, "Please echo help\n");
+
+err_buffer_free:
+	kfree(s_tmp);
+
+	return ret;
+}
+
+static ssize_t qm_cmd_write(struct file *filp, const char __user *buffer,
+			    size_t count, loff_t *pos)
+{
+	struct hisi_qm *qm = filp->private_data;
+	char *cmd_buf, *cmd_buf_tmp;
+	int ret;
+
+	if (*pos)
+		return 0;
+
+	ret = hisi_qm_get_dfx_access(qm);
+	if (ret)
+		return ret;
+
+	/* Judge if the instance is being reset. */
+	if (unlikely(atomic_read(&qm->status.flags) == QM_STOP)) {
+		ret = 0;
+		goto put_dfx_access;
+	}
+
+	if (count > QM_DBG_WRITE_LEN) {
+		ret = -ENOSPC;
+		goto put_dfx_access;
+	}
+
+	cmd_buf = memdup_user_nul(buffer, count);
+	if (IS_ERR(cmd_buf)) {
+		ret = PTR_ERR(cmd_buf);
+		goto put_dfx_access;
+	}
+
+	cmd_buf_tmp = strchr(cmd_buf, '\n');
+	if (cmd_buf_tmp) {
+		*cmd_buf_tmp = '\0';
+		count = cmd_buf_tmp - cmd_buf + 1;
+	}
+
+	ret = qm_cmd_write_dump(qm, cmd_buf);
+	if (ret) {
+		kfree(cmd_buf);
+		goto put_dfx_access;
+	}
+
+	kfree(cmd_buf);
+
+	ret = count;
+
+put_dfx_access:
+	hisi_qm_put_dfx_access(qm);
+	return ret;
+}
+
+static const struct file_operations qm_cmd_fops = {
+	.owner = THIS_MODULE,
+	.open = simple_open,
+	.read = qm_cmd_read,
+	.write = qm_cmd_write,
+};
+
+/**
+ * hisi_qm_regs_dump() - Dump registers's value.
+ * @s: debugfs file handle.
+ * @regset: accelerator registers information.
+ *
+ * Dump accelerator registers.
+ */
+void hisi_qm_regs_dump(struct seq_file *s, struct debugfs_regset32 *regset)
+{
+	struct pci_dev *pdev = to_pci_dev(regset->dev);
+	struct hisi_qm *qm = pci_get_drvdata(pdev);
+	const struct debugfs_reg32 *regs = regset->regs;
+	int regs_len = regset->nregs;
+	int i, ret;
+	u32 val;
+
+	ret = hisi_qm_get_dfx_access(qm);
+	if (ret)
+		return;
+
+	for (i = 0; i < regs_len; i++) {
+		val = readl(regset->base + regs[i].offset);
+		seq_printf(s, "%s= 0x%08x\n", regs[i].name, val);
+	}
+
+	hisi_qm_put_dfx_access(qm);
+}
+EXPORT_SYMBOL_GPL(hisi_qm_regs_dump);
+
+static int qm_regs_show(struct seq_file *s, void *unused)
+{
+	struct hisi_qm *qm = s->private;
+	struct debugfs_regset32 regset;
+
+	if (qm->fun_type == QM_HW_PF) {
+		regset.regs = qm_dfx_regs;
+		regset.nregs = ARRAY_SIZE(qm_dfx_regs);
+	} else {
+		regset.regs = qm_vf_dfx_regs;
+		regset.nregs = ARRAY_SIZE(qm_vf_dfx_regs);
+	}
+
+	regset.base = qm->io_base;
+	regset.dev = &qm->pdev->dev;
+
+	hisi_qm_regs_dump(s, &regset);
+
+	return 0;
+}
+
+DEFINE_SHOW_ATTRIBUTE(qm_regs);
+
+static u32 current_q_read(struct hisi_qm *qm)
+{
+	return readl(qm->io_base + QM_DFX_SQE_CNT_VF_SQN) >> QM_DFX_QN_SHIFT;
+}
+
+static int current_q_write(struct hisi_qm *qm, u32 val)
+{
+	u32 tmp;
+
+	if (val >= qm->debug.curr_qm_qp_num)
+		return -EINVAL;
+
+	tmp = val << QM_DFX_QN_SHIFT |
+	      (readl(qm->io_base + QM_DFX_SQE_CNT_VF_SQN) & CURRENT_FUN_MASK);
+	writel(tmp, qm->io_base + QM_DFX_SQE_CNT_VF_SQN);
+
+	tmp = val << QM_DFX_QN_SHIFT |
+	      (readl(qm->io_base + QM_DFX_CQE_CNT_VF_CQN) & CURRENT_FUN_MASK);
+	writel(tmp, qm->io_base + QM_DFX_CQE_CNT_VF_CQN);
+
+	return 0;
+}
+
+static u32 clear_enable_read(struct hisi_qm *qm)
+{
+	return readl(qm->io_base + QM_DFX_CNT_CLR_CE);
+}
+
+/* rd_clr_ctrl 1 enable read clear, otherwise 0 disable it */
+static int clear_enable_write(struct hisi_qm *qm, u32 rd_clr_ctrl)
+{
+	if (rd_clr_ctrl > 1)
+		return -EINVAL;
+
+	writel(rd_clr_ctrl, qm->io_base + QM_DFX_CNT_CLR_CE);
+
+	return 0;
+}
+
+static u32 current_qm_read(struct hisi_qm *qm)
+{
+	return readl(qm->io_base + QM_DFX_MB_CNT_VF);
+}
+
+static int qm_get_vf_qp_num(struct hisi_qm *qm, u32 fun_num)
+{
+	u32 remain_q_num, vfq_num;
+	u32 num_vfs = qm->vfs_num;
+
+	vfq_num = (qm->ctrl_qp_num - qm->qp_num) / num_vfs;
+	if (vfq_num >= qm->max_qp_num)
+		return qm->max_qp_num;
+
+	remain_q_num = (qm->ctrl_qp_num - qm->qp_num) % num_vfs;
+	if (vfq_num + remain_q_num <= qm->max_qp_num)
+		return fun_num == num_vfs ? vfq_num + remain_q_num : vfq_num;
+
+	/*
+	 * if vfq_num + remain_q_num > max_qp_num, the last VFs,
+	 * each with one more queue.
+	 */
+	return fun_num + remain_q_num > num_vfs ? vfq_num + 1 : vfq_num;
+}
+
+static int current_qm_write(struct hisi_qm *qm, u32 val)
+{
+	u32 tmp;
+
+	if (val > qm->vfs_num)
+		return -EINVAL;
+
+	/* According PF or VF Dev ID to calculation curr_qm_qp_num and store */
+	if (!val)
+		qm->debug.curr_qm_qp_num = qm->qp_num;
+	else
+		qm->debug.curr_qm_qp_num = qm_get_vf_qp_num(qm, val);
+
+	writel(val, qm->io_base + QM_DFX_MB_CNT_VF);
+	writel(val, qm->io_base + QM_DFX_DB_CNT_VF);
+
+	tmp = val |
+	      (readl(qm->io_base + QM_DFX_SQE_CNT_VF_SQN) & CURRENT_Q_MASK);
+	writel(tmp, qm->io_base + QM_DFX_SQE_CNT_VF_SQN);
+
+	tmp = val |
+	      (readl(qm->io_base + QM_DFX_CQE_CNT_VF_CQN) & CURRENT_Q_MASK);
+	writel(tmp, qm->io_base + QM_DFX_CQE_CNT_VF_CQN);
+
+	return 0;
+}
+
+static ssize_t qm_debug_read(struct file *filp, char __user *buf,
+			     size_t count, loff_t *pos)
+{
+	struct debugfs_file *file = filp->private_data;
+	enum qm_debug_file index = file->index;
+	struct hisi_qm *qm = file_to_qm(file);
+	char tbuf[QM_DBG_TMP_BUF_LEN];
+	u32 val;
+	int ret;
+
+	ret = hisi_qm_get_dfx_access(qm);
+	if (ret)
+		return ret;
+
+	mutex_lock(&file->lock);
+	switch (index) {
+	case CURRENT_QM:
+		val = current_qm_read(qm);
+		break;
+	case CURRENT_Q:
+		val = current_q_read(qm);
+		break;
+	case CLEAR_ENABLE:
+		val = clear_enable_read(qm);
+		break;
+	default:
+		goto err_input;
+	}
+	mutex_unlock(&file->lock);
+
+	hisi_qm_put_dfx_access(qm);
+	ret = scnprintf(tbuf, QM_DBG_TMP_BUF_LEN, "%u\n", val);
+	return simple_read_from_buffer(buf, count, pos, tbuf, ret);
+
+err_input:
+	mutex_unlock(&file->lock);
+	hisi_qm_put_dfx_access(qm);
+	return -EINVAL;
+}
+
+static ssize_t qm_debug_write(struct file *filp, const char __user *buf,
+			      size_t count, loff_t *pos)
+{
+	struct debugfs_file *file = filp->private_data;
+	enum qm_debug_file index = file->index;
+	struct hisi_qm *qm = file_to_qm(file);
+	unsigned long val;
+	char tbuf[QM_DBG_TMP_BUF_LEN];
+	int len, ret;
+
+	if (*pos != 0)
+		return 0;
+
+	if (count >= QM_DBG_TMP_BUF_LEN)
+		return -ENOSPC;
+
+	len = simple_write_to_buffer(tbuf, QM_DBG_TMP_BUF_LEN - 1, pos, buf,
+				     count);
+	if (len < 0)
+		return len;
+
+	tbuf[len] = '\0';
+	if (kstrtoul(tbuf, 0, &val))
+		return -EFAULT;
+
+	ret = hisi_qm_get_dfx_access(qm);
+	if (ret)
+		return ret;
+
+	mutex_lock(&file->lock);
+	switch (index) {
+	case CURRENT_QM:
+		ret = current_qm_write(qm, val);
+		break;
+	case CURRENT_Q:
+		ret = current_q_write(qm, val);
+		break;
+	case CLEAR_ENABLE:
+		ret = clear_enable_write(qm, val);
+		break;
+	default:
+		ret = -EINVAL;
+	}
+	mutex_unlock(&file->lock);
+
+	hisi_qm_put_dfx_access(qm);
+
+	if (ret)
+		return ret;
+
+	return count;
+}
+
+static const struct file_operations qm_debug_fops = {
+	.owner = THIS_MODULE,
+	.open = simple_open,
+	.read = qm_debug_read,
+	.write = qm_debug_write,
+};
+
+static void dfx_regs_uninit(struct hisi_qm *qm,
+		struct dfx_diff_registers *dregs, int reg_len)
+{
+	int i;
+
+	/* Setting the pointer is NULL to prevent double free */
+	for (i = 0; i < reg_len; i++) {
+		kfree(dregs[i].regs);
+		dregs[i].regs = NULL;
+	}
+	kfree(dregs);
+}
+
+static struct dfx_diff_registers *dfx_regs_init(struct hisi_qm *qm,
+	const struct dfx_diff_registers *cregs, u32 reg_len)
+{
+	struct dfx_diff_registers *diff_regs;
+	u32 j, base_offset;
+	int i;
+
+	diff_regs = kcalloc(reg_len, sizeof(*diff_regs), GFP_KERNEL);
+	if (!diff_regs)
+		return ERR_PTR(-ENOMEM);
+
+	for (i = 0; i < reg_len; i++) {
+		if (!cregs[i].reg_len)
+			continue;
+
+		diff_regs[i].reg_offset = cregs[i].reg_offset;
+		diff_regs[i].reg_len = cregs[i].reg_len;
+		diff_regs[i].regs = kcalloc(QM_DFX_REGS_LEN, cregs[i].reg_len,
+					 GFP_KERNEL);
+		if (!diff_regs[i].regs)
+			goto alloc_error;
+
+		for (j = 0; j < diff_regs[i].reg_len; j++) {
+			base_offset = diff_regs[i].reg_offset +
+					j * QM_DFX_REGS_LEN;
+			diff_regs[i].regs[j] = readl(qm->io_base + base_offset);
+		}
+	}
+
+	return diff_regs;
+
+alloc_error:
+	while (i > 0) {
+		i--;
+		kfree(diff_regs[i].regs);
+	}
+	kfree(diff_regs);
+	return ERR_PTR(-ENOMEM);
+}
+
+static int qm_diff_regs_init(struct hisi_qm *qm,
+		struct dfx_diff_registers *dregs, u32 reg_len)
+{
+	qm->debug.qm_diff_regs = dfx_regs_init(qm, qm_diff_regs, ARRAY_SIZE(qm_diff_regs));
+	if (IS_ERR(qm->debug.qm_diff_regs))
+		return PTR_ERR(qm->debug.qm_diff_regs);
+
+	qm->debug.acc_diff_regs = dfx_regs_init(qm, dregs, reg_len);
+	if (IS_ERR(qm->debug.acc_diff_regs)) {
+		dfx_regs_uninit(qm, qm->debug.qm_diff_regs, ARRAY_SIZE(qm_diff_regs));
+		return PTR_ERR(qm->debug.acc_diff_regs);
+	}
+
+	return 0;
+}
+
+static void qm_last_regs_uninit(struct hisi_qm *qm)
+{
+	struct qm_debug *debug = &qm->debug;
+
+	if (qm->fun_type == QM_HW_VF || !debug->qm_last_words)
+		return;
+
+	kfree(debug->qm_last_words);
+	debug->qm_last_words = NULL;
+}
+
+static int qm_last_regs_init(struct hisi_qm *qm)
+{
+	int dfx_regs_num = ARRAY_SIZE(qm_dfx_regs);
+	struct qm_debug *debug = &qm->debug;
+	int i;
+
+	if (qm->fun_type == QM_HW_VF)
+		return 0;
+
+	debug->qm_last_words = kcalloc(dfx_regs_num, sizeof(unsigned int), GFP_KERNEL);
+	if (!debug->qm_last_words)
+		return -ENOMEM;
+
+	for (i = 0; i < dfx_regs_num; i++) {
+		debug->qm_last_words[i] = readl_relaxed(qm->io_base +
+			qm_dfx_regs[i].offset);
+	}
+
+	return 0;
+}
+
+static void qm_diff_regs_uninit(struct hisi_qm *qm, u32 reg_len)
+{
+	dfx_regs_uninit(qm, qm->debug.acc_diff_regs, reg_len);
+	dfx_regs_uninit(qm, qm->debug.qm_diff_regs, ARRAY_SIZE(qm_diff_regs));
+}
+
+/**
+ * hisi_qm_regs_debugfs_init() - Allocate memory for registers.
+ * @qm: device qm handle.
+ * @dregs: diff registers handle.
+ * @reg_len: diff registers region length.
+ */
+int hisi_qm_regs_debugfs_init(struct hisi_qm *qm,
+		struct dfx_diff_registers *dregs, u32 reg_len)
+{
+	int ret;
+
+	if (!qm || !dregs)
+		return -EINVAL;
+
+	if (qm->fun_type != QM_HW_PF)
+		return 0;
+
+	ret = qm_last_regs_init(qm);
+	if (ret) {
+		dev_info(&qm->pdev->dev, "failed to init qm words memory!\n");
+		return ret;
+	}
+
+	ret = qm_diff_regs_init(qm, dregs, reg_len);
+	if (ret) {
+		qm_last_regs_uninit(qm);
+		return ret;
+	}
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(hisi_qm_regs_debugfs_init);
+
+/**
+ * hisi_qm_regs_debugfs_uninit() - Free memory for registers.
+ * @qm: device qm handle.
+ * @reg_len: diff registers region length.
+ */
+void hisi_qm_regs_debugfs_uninit(struct hisi_qm *qm, u32 reg_len)
+{
+	if (!qm || qm->fun_type != QM_HW_PF)
+		return;
+
+	qm_diff_regs_uninit(qm, reg_len);
+	qm_last_regs_uninit(qm);
+}
+EXPORT_SYMBOL_GPL(hisi_qm_regs_debugfs_uninit);
+
+/**
+ * hisi_qm_acc_diff_regs_dump() - Dump registers's value.
+ * @qm: device qm handle.
+ * @s: Debugfs file handle.
+ * @dregs: diff registers handle.
+ * @regs_len: diff registers region length.
+ */
+void hisi_qm_acc_diff_regs_dump(struct hisi_qm *qm, struct seq_file *s,
+	struct dfx_diff_registers *dregs, u32 regs_len)
+{
+	u32 j, val, base_offset;
+	int i, ret;
+
+	if (!qm || !s || !dregs)
+		return;
+
+	ret = hisi_qm_get_dfx_access(qm);
+	if (ret)
+		return;
+
+	down_read(&qm->qps_lock);
+	for (i = 0; i < regs_len; i++) {
+		if (!dregs[i].reg_len)
+			continue;
+
+		for (j = 0; j < dregs[i].reg_len; j++) {
+			base_offset = dregs[i].reg_offset + j * QM_DFX_REGS_LEN;
+			val = readl(qm->io_base + base_offset);
+			if (val != dregs[i].regs[j])
+				seq_printf(s, "0x%08x = 0x%08x ---> 0x%08x\n",
+					   base_offset, dregs[i].regs[j], val);
+		}
+	}
+	up_read(&qm->qps_lock);
+
+	hisi_qm_put_dfx_access(qm);
+}
+EXPORT_SYMBOL_GPL(hisi_qm_acc_diff_regs_dump);
+
+void hisi_qm_show_last_dfx_regs(struct hisi_qm *qm)
+{
+	struct qm_debug *debug = &qm->debug;
+	struct pci_dev *pdev = qm->pdev;
+	u32 val;
+	int i;
+
+	if (qm->fun_type == QM_HW_VF || !debug->qm_last_words)
+		return;
+
+	for (i = 0; i < ARRAY_SIZE(qm_dfx_regs); i++) {
+		val = readl_relaxed(qm->io_base + qm_dfx_regs[i].offset);
+		if (debug->qm_last_words[i] != val)
+			pci_info(pdev, "%s \t= 0x%08x => 0x%08x\n",
+			qm_dfx_regs[i].name, debug->qm_last_words[i], val);
+	}
+}
+
+static int qm_diff_regs_show(struct seq_file *s, void *unused)
+{
+	struct hisi_qm *qm = s->private;
+
+	hisi_qm_acc_diff_regs_dump(qm, s, qm->debug.qm_diff_regs,
+					ARRAY_SIZE(qm_diff_regs));
+
+	return 0;
+}
+DEFINE_SHOW_ATTRIBUTE(qm_diff_regs);
+
+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, len;
+
+	val = atomic_read(&qm->status.flags);
+	len = scnprintf(buf, QM_DBG_READ_LEN, "%s\n", qm_s[val]);
+
+	return simple_read_from_buffer(buffer, count, pos, buf, len);
+}
+
+static const struct file_operations qm_status_fops = {
+	.owner = THIS_MODULE,
+	.open = simple_open,
+	.read = qm_status_read,
+};
+
+static void qm_create_debugfs_file(struct hisi_qm *qm, struct dentry *dir,
+				   enum qm_debug_file index)
+{
+	struct debugfs_file *file = qm->debug.files + index;
+
+	debugfs_create_file(qm_debug_file_name[index], 0600, dir, file,
+			    &qm_debug_fops);
+
+	file->index = index;
+	mutex_init(&file->lock);
+	file->debug = &qm->debug;
+}
+
+static int qm_debugfs_atomic64_set(void *data, u64 val)
+{
+	if (val)
+		return -EINVAL;
+
+	atomic64_set((atomic64_t *)data, 0);
+
+	return 0;
+}
+
+static int qm_debugfs_atomic64_get(void *data, u64 *val)
+{
+	*val = atomic64_read((atomic64_t *)data);
+
+	return 0;
+}
+
+DEFINE_DEBUGFS_ATTRIBUTE(qm_atomic64_ops, qm_debugfs_atomic64_get,
+			 qm_debugfs_atomic64_set, "%llu\n");
+
+/**
+ * hisi_qm_debug_init() - Initialize qm related debugfs files.
+ * @qm: The qm for which we want to add debugfs files.
+ *
+ * Create qm related debugfs files.
+ */
+void hisi_qm_debug_init(struct hisi_qm *qm)
+{
+	struct dfx_diff_registers *qm_regs = qm->debug.qm_diff_regs;
+	struct qm_dfx *dfx = &qm->debug.dfx;
+	struct dentry *qm_d;
+	void *data;
+	int i;
+
+	qm_d = debugfs_create_dir("qm", qm->debug.debug_root);
+	qm->debug.qm_d = qm_d;
+
+	/* only show this in PF */
+	if (qm->fun_type == QM_HW_PF) {
+		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);
+	}
+
+	if (qm_regs)
+		debugfs_create_file("diff_regs", 0444, qm->debug.qm_d,
+					qm, &qm_diff_regs_fops);
+
+	debugfs_create_file("regs", 0444, qm->debug.qm_d, qm, &qm_regs_fops);
+
+	debugfs_create_file("cmd", 0600, qm->debug.qm_d, qm, &qm_cmd_fops);
+
+	debugfs_create_file("status", 0444, qm->debug.qm_d, qm,
+			&qm_status_fops);
+	for (i = 0; i < ARRAY_SIZE(qm_dfx_files); i++) {
+		data = (atomic64_t *)((uintptr_t)dfx + qm_dfx_files[i].offset);
+		debugfs_create_file(qm_dfx_files[i].name,
+			0644,
+			qm_d,
+			data,
+			&qm_atomic64_ops);
+	}
+
+	if (test_bit(QM_SUPPORT_FUNC_QOS, &qm->caps))
+		hisi_qm_set_algqos_init(qm);
+}
+EXPORT_SYMBOL_GPL(hisi_qm_debug_init);
+
+/**
+ * hisi_qm_debug_regs_clear() - clear qm debug related registers.
+ * @qm: The qm for which we want to clear its debug registers.
+ */
+void hisi_qm_debug_regs_clear(struct hisi_qm *qm)
+{
+	const struct debugfs_reg32 *regs;
+	int i;
+
+	/* clear current_qm */
+	writel(0x0, qm->io_base + QM_DFX_MB_CNT_VF);
+	writel(0x0, qm->io_base + QM_DFX_DB_CNT_VF);
+
+	/* clear current_q */
+	writel(0x0, qm->io_base + QM_DFX_SQE_CNT_VF_SQN);
+	writel(0x0, qm->io_base + QM_DFX_CQE_CNT_VF_CQN);
+
+	/*
+	 * these registers are reading and clearing, so clear them after
+	 * reading them.
+	 */
+	writel(0x1, qm->io_base + QM_DFX_CNT_CLR_CE);
+
+	regs = qm_dfx_regs;
+	for (i = 0; i < CNT_CYC_REGS_NUM; i++) {
+		readl(qm->io_base + regs->offset);
+		regs++;
+	}
+
+	/* clear clear_enable */
+	writel(0x0, qm->io_base + QM_DFX_CNT_CLR_CE);
+}
+EXPORT_SYMBOL_GPL(hisi_qm_debug_regs_clear);
diff --git a/drivers/crypto/hisilicon/qm.c b/drivers/crypto/hisilicon/qm.c
index 0a5056108b94f..35c59818b3e7f 100644
--- a/drivers/crypto/hisilicon/qm.c
+++ b/drivers/crypto/hisilicon/qm.c
@@ -16,6 +16,7 @@
 #include <linux/uaccess.h>
 #include <uapi/misc/uacce/hisi_qm.h>
 #include <linux/hisi_acc_qm.h>
+#include "qm_common.h"
 
 /* eq/aeq irq enable */
 #define QM_VF_AEQ_INT_SOURCE		0x0
@@ -119,8 +120,6 @@
 #define QM_SQC_VFT_NUM_SHIFT_V2		45
 #define QM_SQC_VFT_NUM_MASK_v2		GENMASK(9, 0)
 
-#define QM_DFX_CNT_CLR_CE		0x100118
-
 #define QM_ABNORMAL_INT_SOURCE		0x100000
 #define QM_ABNORMAL_INT_MASK		0x100004
 #define QM_ABNORMAL_INT_MASK_VALUE	0x7fff
@@ -187,14 +186,6 @@
 #define QM_VF_RESET_WAIT_TIMEOUT_US    \
 	(QM_VF_RESET_WAIT_US * QM_VF_RESET_WAIT_CNT)
 
-#define QM_DFX_MB_CNT_VF		0x104010
-#define QM_DFX_DB_CNT_VF		0x104020
-#define QM_DFX_SQE_CNT_VF_SQN		0x104030
-#define QM_DFX_CQE_CNT_VF_CQN		0x104040
-#define QM_DFX_QN_SHIFT			16
-#define CURRENT_FUN_MASK		GENMASK(5, 0)
-#define CURRENT_Q_MASK			GENMASK(31, 16)
-
 #define POLL_PERIOD			10
 #define POLL_TIMEOUT			1000
 #define WAIT_PERIOD_US_MAX		200
@@ -211,19 +202,15 @@
 #define QMC_ALIGN(sz)			ALIGN(sz, 32)
 
 #define QM_DBG_READ_LEN		256
-#define QM_DBG_WRITE_LEN		1024
-#define QM_DBG_TMP_BUF_LEN		22
 #define QM_PCI_COMMAND_INVALID		~0
 #define QM_RESET_STOP_TX_OFFSET		1
 #define QM_RESET_STOP_RX_OFFSET		2
 
 #define WAIT_PERIOD			20
 #define REMOVE_WAIT_DELAY		10
-#define QM_SQE_ADDR_MASK		GENMASK(7, 0)
 
 #define QM_DRIVER_REMOVING		0
 #define QM_RST_SCHED			1
-#define QM_RESETTING			2
 #define QM_QOS_PARAM_NUM		2
 #define QM_QOS_VAL_NUM			1
 #define QM_QOS_BDF_PARAM_NUM		4
@@ -250,15 +237,6 @@
 #define QM_QOS_MIN_CIR_B		100
 #define QM_QOS_MAX_CIR_U		6
 #define QM_QOS_MAX_CIR_S		11
-#define QM_DFX_BASE		0x0100000
-#define QM_DFX_STATE1		0x0104000
-#define QM_DFX_STATE2		0x01040C8
-#define QM_DFX_COMMON		0x0000
-#define QM_DFX_BASE_LEN		0x5A
-#define QM_DFX_STATE1_LEN		0x2E
-#define QM_DFX_STATE2_LEN		0x11
-#define QM_DFX_COMMON_LEN		0xC3
-#define QM_DFX_REGS_LEN		4UL
 #define QM_AUTOSUSPEND_DELAY		3000
 
 #define QM_MK_CQC_DW3_V1(hop_num, pg_sz, buf_sz, cqe_sz) \
@@ -368,73 +346,6 @@ static const struct hisi_qm_cap_info qm_basic_info[] = {
 	{QM_VF_IRQ_NUM_CAP,     0x311c,   0,  GENMASK(15, 0), 0x1,       0x2,       0x3},
 };
 
-struct qm_cqe {
-	__le32 rsvd0;
-	__le16 cmd_id;
-	__le16 rsvd1;
-	__le16 sq_head;
-	__le16 sq_num;
-	__le16 rsvd2;
-	__le16 w7;
-};
-
-struct qm_eqe {
-	__le32 dw0;
-};
-
-struct qm_aeqe {
-	__le32 dw0;
-};
-
-struct qm_sqc {
-	__le16 head;
-	__le16 tail;
-	__le32 base_l;
-	__le32 base_h;
-	__le32 dw3;
-	__le16 w8;
-	__le16 rsvd0;
-	__le16 pasid;
-	__le16 w11;
-	__le16 cq_num;
-	__le16 w13;
-	__le32 rsvd1;
-};
-
-struct qm_cqc {
-	__le16 head;
-	__le16 tail;
-	__le32 base_l;
-	__le32 base_h;
-	__le32 dw3;
-	__le16 w8;
-	__le16 rsvd0;
-	__le16 pasid;
-	__le16 w11;
-	__le32 dw6;
-	__le32 rsvd1;
-};
-
-struct qm_eqc {
-	__le16 head;
-	__le16 tail;
-	__le32 base_l;
-	__le32 base_h;
-	__le32 dw3;
-	__le32 rsvd[2];
-	__le32 dw6;
-};
-
-struct qm_aeqc {
-	__le16 head;
-	__le16 tail;
-	__le32 base_l;
-	__le32 base_h;
-	__le32 dw3;
-	__le32 rsvd[2];
-	__le32 dw6;
-};
-
 struct qm_mailbox {
 	__le16 w0;
 	__le16 queue_num;
@@ -467,25 +378,6 @@ struct hisi_qm_hw_ops {
 	int (*set_msi)(struct hisi_qm *qm, bool set);
 };
 
-struct qm_dfx_item {
-	const char *name;
-	u32 offset;
-};
-
-static struct qm_dfx_item qm_dfx_files[] = {
-	{"err_irq", offsetof(struct qm_dfx, err_irq_cnt)},
-	{"aeq_irq", offsetof(struct qm_dfx, aeq_irq_cnt)},
-	{"abnormal_irq", offsetof(struct qm_dfx, abnormal_irq_cnt)},
-	{"create_qp_err", offsetof(struct qm_dfx, create_qp_err_cnt)},
-	{"mb_err", offsetof(struct qm_dfx, mb_err_cnt)},
-};
-
-static const char * const qm_debug_file_name[] = {
-	[CURRENT_QM]   = "current_qm",
-	[CURRENT_Q]    = "current_q",
-	[CLEAR_ENABLE] = "clear_enable",
-};
-
 struct hisi_qm_hw_error {
 	u32 int_msk;
 	const char *msg;
@@ -510,23 +402,6 @@ static const struct hisi_qm_hw_error qm_hw_error[] = {
 	{ /* sentinel */ }
 };
 
-/* define the QM's dfx regs region and region length */
-static struct dfx_diff_registers qm_diff_regs[] = {
-	{
-		.reg_offset = QM_DFX_BASE,
-		.reg_len = QM_DFX_BASE_LEN,
-	}, {
-		.reg_offset = QM_DFX_STATE1,
-		.reg_len = QM_DFX_STATE1_LEN,
-	}, {
-		.reg_offset = QM_DFX_STATE2,
-		.reg_len = QM_DFX_STATE2_LEN,
-	}, {
-		.reg_offset = QM_DFX_COMMON,
-		.reg_len = QM_DFX_COMMON_LEN,
-	},
-};
-
 static const char * const qm_db_timeout[] = {
 	"sq", "cq", "eq", "aeq",
 };
@@ -535,10 +410,6 @@ static const char * const qm_fifo_overflow[] = {
 	"cq", "eq", "aeq",
 };
 
-static const char * const qm_s[] = {
-	"init", "start", "close", "stop",
-};
-
 static const char * const qp_s[] = {
 	"none", "init", "start", "stop", "close",
 };
@@ -1332,1046 +1203,150 @@ static void qm_vft_data_cfg(struct hisi_qm *qm, enum vft_type type, u32 base,
 				(QM_SHAPER_CBS_B << QM_SHAPER_FACTOR_CBS_B_SHIFT) |
 				(factor->cbs_s << QM_SHAPER_FACTOR_CBS_S_SHIFT);
 			}
-			break;
-		}
-	}
-
-	writel(lower_32_bits(tmp), qm->io_base + QM_VFT_CFG_DATA_L);
-	writel(upper_32_bits(tmp), qm->io_base + QM_VFT_CFG_DATA_H);
-}
-
-static int qm_set_vft_common(struct hisi_qm *qm, enum vft_type type,
-			     u32 fun_num, u32 base, u32 number)
-{
-	struct qm_shaper_factor *factor = NULL;
-	unsigned int val;
-	int ret;
-
-	if (type == SHAPER_VFT && test_bit(QM_SUPPORT_FUNC_QOS, &qm->caps))
-		factor = &qm->factor[fun_num];
-
-	ret = readl_relaxed_poll_timeout(qm->io_base + QM_VFT_CFG_RDY, val,
-					 val & BIT(0), POLL_PERIOD,
-					 POLL_TIMEOUT);
-	if (ret)
-		return ret;
-
-	writel(0x0, qm->io_base + QM_VFT_CFG_OP_WR);
-	writel(type, qm->io_base + QM_VFT_CFG_TYPE);
-	if (type == SHAPER_VFT)
-		fun_num |= base << QM_SHAPER_VFT_OFFSET;
-
-	writel(fun_num, qm->io_base + QM_VFT_CFG);
-
-	qm_vft_data_cfg(qm, type, base, number, factor);
-
-	writel(0x0, qm->io_base + QM_VFT_CFG_RDY);
-	writel(0x1, qm->io_base + QM_VFT_CFG_OP_ENABLE);
-
-	return readl_relaxed_poll_timeout(qm->io_base + QM_VFT_CFG_RDY, val,
-					  val & BIT(0), POLL_PERIOD,
-					  POLL_TIMEOUT);
-}
-
-static int qm_shaper_init_vft(struct hisi_qm *qm, u32 fun_num)
-{
-	u32 qos = qm->factor[fun_num].func_qos;
-	int ret, i;
-
-	ret = qm_get_shaper_para(qos * QM_QOS_RATE, &qm->factor[fun_num]);
-	if (ret) {
-		dev_err(&qm->pdev->dev, "failed to calculate shaper parameter!\n");
-		return ret;
-	}
-	writel(qm->type_rate, qm->io_base + QM_SHAPER_CFG);
-	for (i = ALG_TYPE_0; i <= ALG_TYPE_1; i++) {
-		/* The base number of queue reuse for different alg type */
-		ret = qm_set_vft_common(qm, SHAPER_VFT, fun_num, i, 1);
-		if (ret)
-			return ret;
-	}
-
-	return 0;
-}
-
-/* The config should be conducted after qm_dev_mem_reset() */
-static int qm_set_sqc_cqc_vft(struct hisi_qm *qm, u32 fun_num, u32 base,
-			      u32 number)
-{
-	int ret, i;
-
-	for (i = SQC_VFT; i <= CQC_VFT; i++) {
-		ret = qm_set_vft_common(qm, i, fun_num, base, number);
-		if (ret)
-			return ret;
-	}
-
-	/* init default shaper qos val */
-	if (test_bit(QM_SUPPORT_FUNC_QOS, &qm->caps)) {
-		ret = qm_shaper_init_vft(qm, fun_num);
-		if (ret)
-			goto back_sqc_cqc;
-	}
-
-	return 0;
-back_sqc_cqc:
-	for (i = SQC_VFT; i <= CQC_VFT; i++)
-		qm_set_vft_common(qm, i, fun_num, 0, 0);
-
-	return ret;
-}
-
-static int qm_get_vft_v2(struct hisi_qm *qm, u32 *base, u32 *number)
-{
-	u64 sqc_vft;
-	int ret;
-
-	ret = hisi_qm_mb(qm, QM_MB_CMD_SQC_VFT_V2, 0, 0, 1);
-	if (ret)
-		return ret;
-
-	sqc_vft = readl(qm->io_base + QM_MB_CMD_DATA_ADDR_L) |
-		  ((u64)readl(qm->io_base + QM_MB_CMD_DATA_ADDR_H) << 32);
-	*base = QM_SQC_VFT_BASE_MASK_V2 & (sqc_vft >> QM_SQC_VFT_BASE_SHIFT_V2);
-	*number = (QM_SQC_VFT_NUM_MASK_v2 &
-		   (sqc_vft >> QM_SQC_VFT_NUM_SHIFT_V2)) + 1;
-
-	return 0;
-}
-
-static int qm_get_vf_qp_num(struct hisi_qm *qm, u32 fun_num)
-{
-	u32 remain_q_num, vfq_num;
-	u32 num_vfs = qm->vfs_num;
-
-	vfq_num = (qm->ctrl_qp_num - qm->qp_num) / num_vfs;
-	if (vfq_num >= qm->max_qp_num)
-		return qm->max_qp_num;
-
-	remain_q_num = (qm->ctrl_qp_num - qm->qp_num) % num_vfs;
-	if (vfq_num + remain_q_num <= qm->max_qp_num)
-		return fun_num == num_vfs ? vfq_num + remain_q_num : vfq_num;
-
-	/*
-	 * if vfq_num + remain_q_num > max_qp_num, the last VFs,
-	 * each with one more queue.
-	 */
-	return fun_num + remain_q_num > num_vfs ? vfq_num + 1 : vfq_num;
-}
-
-static struct hisi_qm *file_to_qm(struct debugfs_file *file)
-{
-	struct qm_debug *debug = file->debug;
-
-	return container_of(debug, struct hisi_qm, debug);
-}
-
-static u32 current_q_read(struct hisi_qm *qm)
-{
-	return readl(qm->io_base + QM_DFX_SQE_CNT_VF_SQN) >> QM_DFX_QN_SHIFT;
-}
-
-static int current_q_write(struct hisi_qm *qm, u32 val)
-{
-	u32 tmp;
-
-	if (val >= qm->debug.curr_qm_qp_num)
-		return -EINVAL;
-
-	tmp = val << QM_DFX_QN_SHIFT |
-	      (readl(qm->io_base + QM_DFX_SQE_CNT_VF_SQN) & CURRENT_FUN_MASK);
-	writel(tmp, qm->io_base + QM_DFX_SQE_CNT_VF_SQN);
-
-	tmp = val << QM_DFX_QN_SHIFT |
-	      (readl(qm->io_base + QM_DFX_CQE_CNT_VF_CQN) & CURRENT_FUN_MASK);
-	writel(tmp, qm->io_base + QM_DFX_CQE_CNT_VF_CQN);
-
-	return 0;
-}
-
-static u32 clear_enable_read(struct hisi_qm *qm)
-{
-	return readl(qm->io_base + QM_DFX_CNT_CLR_CE);
-}
-
-/* rd_clr_ctrl 1 enable read clear, otherwise 0 disable it */
-static int clear_enable_write(struct hisi_qm *qm, u32 rd_clr_ctrl)
-{
-	if (rd_clr_ctrl > 1)
-		return -EINVAL;
-
-	writel(rd_clr_ctrl, qm->io_base + QM_DFX_CNT_CLR_CE);
-
-	return 0;
-}
-
-static u32 current_qm_read(struct hisi_qm *qm)
-{
-	return readl(qm->io_base + QM_DFX_MB_CNT_VF);
-}
-
-static int current_qm_write(struct hisi_qm *qm, u32 val)
-{
-	u32 tmp;
-
-	if (val > qm->vfs_num)
-		return -EINVAL;
-
-	/* According PF or VF Dev ID to calculation curr_qm_qp_num and store */
-	if (!val)
-		qm->debug.curr_qm_qp_num = qm->qp_num;
-	else
-		qm->debug.curr_qm_qp_num = qm_get_vf_qp_num(qm, val);
-
-	writel(val, qm->io_base + QM_DFX_MB_CNT_VF);
-	writel(val, qm->io_base + QM_DFX_DB_CNT_VF);
-
-	tmp = val |
-	      (readl(qm->io_base + QM_DFX_SQE_CNT_VF_SQN) & CURRENT_Q_MASK);
-	writel(tmp, qm->io_base + QM_DFX_SQE_CNT_VF_SQN);
-
-	tmp = val |
-	      (readl(qm->io_base + QM_DFX_CQE_CNT_VF_CQN) & CURRENT_Q_MASK);
-	writel(tmp, qm->io_base + QM_DFX_CQE_CNT_VF_CQN);
-
-	return 0;
-}
-
-static ssize_t qm_debug_read(struct file *filp, char __user *buf,
-			     size_t count, loff_t *pos)
-{
-	struct debugfs_file *file = filp->private_data;
-	enum qm_debug_file index = file->index;
-	struct hisi_qm *qm = file_to_qm(file);
-	char tbuf[QM_DBG_TMP_BUF_LEN];
-	u32 val;
-	int ret;
-
-	ret = hisi_qm_get_dfx_access(qm);
-	if (ret)
-		return ret;
-
-	mutex_lock(&file->lock);
-	switch (index) {
-	case CURRENT_QM:
-		val = current_qm_read(qm);
-		break;
-	case CURRENT_Q:
-		val = current_q_read(qm);
-		break;
-	case CLEAR_ENABLE:
-		val = clear_enable_read(qm);
-		break;
-	default:
-		goto err_input;
-	}
-	mutex_unlock(&file->lock);
-
-	hisi_qm_put_dfx_access(qm);
-	ret = scnprintf(tbuf, QM_DBG_TMP_BUF_LEN, "%u\n", val);
-	return simple_read_from_buffer(buf, count, pos, tbuf, ret);
-
-err_input:
-	mutex_unlock(&file->lock);
-	hisi_qm_put_dfx_access(qm);
-	return -EINVAL;
-}
-
-static ssize_t qm_debug_write(struct file *filp, const char __user *buf,
-			      size_t count, loff_t *pos)
-{
-	struct debugfs_file *file = filp->private_data;
-	enum qm_debug_file index = file->index;
-	struct hisi_qm *qm = file_to_qm(file);
-	unsigned long val;
-	char tbuf[QM_DBG_TMP_BUF_LEN];
-	int len, ret;
-
-	if (*pos != 0)
-		return 0;
-
-	if (count >= QM_DBG_TMP_BUF_LEN)
-		return -ENOSPC;
-
-	len = simple_write_to_buffer(tbuf, QM_DBG_TMP_BUF_LEN - 1, pos, buf,
-				     count);
-	if (len < 0)
-		return len;
-
-	tbuf[len] = '\0';
-	if (kstrtoul(tbuf, 0, &val))
-		return -EFAULT;
-
-	ret = hisi_qm_get_dfx_access(qm);
-	if (ret)
-		return ret;
-
-	mutex_lock(&file->lock);
-	switch (index) {
-	case CURRENT_QM:
-		ret = current_qm_write(qm, val);
-		break;
-	case CURRENT_Q:
-		ret = current_q_write(qm, val);
-		break;
-	case CLEAR_ENABLE:
-		ret = clear_enable_write(qm, val);
-		break;
-	default:
-		ret = -EINVAL;
-	}
-	mutex_unlock(&file->lock);
-
-	hisi_qm_put_dfx_access(qm);
-
-	if (ret)
-		return ret;
-
-	return count;
-}
-
-static const struct file_operations qm_debug_fops = {
-	.owner = THIS_MODULE,
-	.open = simple_open,
-	.read = qm_debug_read,
-	.write = qm_debug_write,
-};
-
-#define CNT_CYC_REGS_NUM		10
-static const struct debugfs_reg32 qm_dfx_regs[] = {
-	/* XXX_CNT are reading clear register */
-	{"QM_ECC_1BIT_CNT               ",  0x104000ull},
-	{"QM_ECC_MBIT_CNT               ",  0x104008ull},
-	{"QM_DFX_MB_CNT                 ",  0x104018ull},
-	{"QM_DFX_DB_CNT                 ",  0x104028ull},
-	{"QM_DFX_SQE_CNT                ",  0x104038ull},
-	{"QM_DFX_CQE_CNT                ",  0x104048ull},
-	{"QM_DFX_SEND_SQE_TO_ACC_CNT    ",  0x104050ull},
-	{"QM_DFX_WB_SQE_FROM_ACC_CNT    ",  0x104058ull},
-	{"QM_DFX_ACC_FINISH_CNT         ",  0x104060ull},
-	{"QM_DFX_CQE_ERR_CNT            ",  0x1040b4ull},
-	{"QM_DFX_FUNS_ACTIVE_ST         ",  0x200ull},
-	{"QM_ECC_1BIT_INF               ",  0x104004ull},
-	{"QM_ECC_MBIT_INF               ",  0x10400cull},
-	{"QM_DFX_ACC_RDY_VLD0           ",  0x1040a0ull},
-	{"QM_DFX_ACC_RDY_VLD1           ",  0x1040a4ull},
-	{"QM_DFX_AXI_RDY_VLD            ",  0x1040a8ull},
-	{"QM_DFX_FF_ST0                 ",  0x1040c8ull},
-	{"QM_DFX_FF_ST1                 ",  0x1040ccull},
-	{"QM_DFX_FF_ST2                 ",  0x1040d0ull},
-	{"QM_DFX_FF_ST3                 ",  0x1040d4ull},
-	{"QM_DFX_FF_ST4                 ",  0x1040d8ull},
-	{"QM_DFX_FF_ST5                 ",  0x1040dcull},
-	{"QM_DFX_FF_ST6                 ",  0x1040e0ull},
-	{"QM_IN_IDLE_ST                 ",  0x1040e4ull},
-};
-
-static const struct debugfs_reg32 qm_vf_dfx_regs[] = {
-	{"QM_DFX_FUNS_ACTIVE_ST         ",  0x200ull},
-};
-
-/**
- * hisi_qm_regs_dump() - Dump registers's value.
- * @s: debugfs file handle.
- * @regset: accelerator registers information.
- *
- * Dump accelerator registers.
- */
-void hisi_qm_regs_dump(struct seq_file *s, struct debugfs_regset32 *regset)
-{
-	struct pci_dev *pdev = to_pci_dev(regset->dev);
-	struct hisi_qm *qm = pci_get_drvdata(pdev);
-	const struct debugfs_reg32 *regs = regset->regs;
-	int regs_len = regset->nregs;
-	int i, ret;
-	u32 val;
-
-	ret = hisi_qm_get_dfx_access(qm);
-	if (ret)
-		return;
-
-	for (i = 0; i < regs_len; i++) {
-		val = readl(regset->base + regs[i].offset);
-		seq_printf(s, "%s= 0x%08x\n", regs[i].name, val);
-	}
-
-	hisi_qm_put_dfx_access(qm);
-}
-EXPORT_SYMBOL_GPL(hisi_qm_regs_dump);
-
-static int qm_regs_show(struct seq_file *s, void *unused)
-{
-	struct hisi_qm *qm = s->private;
-	struct debugfs_regset32 regset;
-
-	if (qm->fun_type == QM_HW_PF) {
-		regset.regs = qm_dfx_regs;
-		regset.nregs = ARRAY_SIZE(qm_dfx_regs);
-	} else {
-		regset.regs = qm_vf_dfx_regs;
-		regset.nregs = ARRAY_SIZE(qm_vf_dfx_regs);
-	}
-
-	regset.base = qm->io_base;
-	regset.dev = &qm->pdev->dev;
-
-	hisi_qm_regs_dump(s, &regset);
-
-	return 0;
-}
-
-DEFINE_SHOW_ATTRIBUTE(qm_regs);
-
-static void dfx_regs_uninit(struct hisi_qm *qm,
-		struct dfx_diff_registers *dregs, int reg_len)
-{
-	int i;
-
-	/* Setting the pointer is NULL to prevent double free */
-	for (i = 0; i < reg_len; i++) {
-		kfree(dregs[i].regs);
-		dregs[i].regs = NULL;
-	}
-	kfree(dregs);
-}
-
-static struct dfx_diff_registers *dfx_regs_init(struct hisi_qm *qm,
-	const struct dfx_diff_registers *cregs, u32 reg_len)
-{
-	struct dfx_diff_registers *diff_regs;
-	u32 j, base_offset;
-	int i;
-
-	diff_regs = kcalloc(reg_len, sizeof(*diff_regs), GFP_KERNEL);
-	if (!diff_regs)
-		return ERR_PTR(-ENOMEM);
-
-	for (i = 0; i < reg_len; i++) {
-		if (!cregs[i].reg_len)
-			continue;
-
-		diff_regs[i].reg_offset = cregs[i].reg_offset;
-		diff_regs[i].reg_len = cregs[i].reg_len;
-		diff_regs[i].regs = kcalloc(QM_DFX_REGS_LEN, cregs[i].reg_len,
-					 GFP_KERNEL);
-		if (!diff_regs[i].regs)
-			goto alloc_error;
-
-		for (j = 0; j < diff_regs[i].reg_len; j++) {
-			base_offset = diff_regs[i].reg_offset +
-					j * QM_DFX_REGS_LEN;
-			diff_regs[i].regs[j] = readl(qm->io_base + base_offset);
-		}
-	}
-
-	return diff_regs;
-
-alloc_error:
-	while (i > 0) {
-		i--;
-		kfree(diff_regs[i].regs);
-	}
-	kfree(diff_regs);
-	return ERR_PTR(-ENOMEM);
-}
-
-static int qm_diff_regs_init(struct hisi_qm *qm,
-		struct dfx_diff_registers *dregs, u32 reg_len)
-{
-	qm->debug.qm_diff_regs = dfx_regs_init(qm, qm_diff_regs, ARRAY_SIZE(qm_diff_regs));
-	if (IS_ERR(qm->debug.qm_diff_regs))
-		return PTR_ERR(qm->debug.qm_diff_regs);
-
-	qm->debug.acc_diff_regs = dfx_regs_init(qm, dregs, reg_len);
-	if (IS_ERR(qm->debug.acc_diff_regs)) {
-		dfx_regs_uninit(qm, qm->debug.qm_diff_regs, ARRAY_SIZE(qm_diff_regs));
-		return PTR_ERR(qm->debug.acc_diff_regs);
-	}
-
-	return 0;
-}
-
-static void qm_last_regs_uninit(struct hisi_qm *qm)
-{
-	struct qm_debug *debug = &qm->debug;
-
-	if (qm->fun_type == QM_HW_VF || !debug->qm_last_words)
-		return;
-
-	kfree(debug->qm_last_words);
-	debug->qm_last_words = NULL;
-}
-
-static int qm_last_regs_init(struct hisi_qm *qm)
-{
-	int dfx_regs_num = ARRAY_SIZE(qm_dfx_regs);
-	struct qm_debug *debug = &qm->debug;
-	int i;
-
-	if (qm->fun_type == QM_HW_VF)
-		return 0;
-
-	debug->qm_last_words = kcalloc(dfx_regs_num, sizeof(unsigned int), GFP_KERNEL);
-	if (!debug->qm_last_words)
-		return -ENOMEM;
-
-	for (i = 0; i < dfx_regs_num; i++) {
-		debug->qm_last_words[i] = readl_relaxed(qm->io_base +
-			qm_dfx_regs[i].offset);
-	}
-
-	return 0;
-}
-
-static void qm_diff_regs_uninit(struct hisi_qm *qm, u32 reg_len)
-{
-	dfx_regs_uninit(qm, qm->debug.acc_diff_regs, reg_len);
-	dfx_regs_uninit(qm, qm->debug.qm_diff_regs, ARRAY_SIZE(qm_diff_regs));
-}
-
-/**
- * hisi_qm_regs_debugfs_init() - Allocate memory for registers.
- * @qm: device qm handle.
- * @dregs: diff registers handle.
- * @reg_len: diff registers region length.
- */
-int hisi_qm_regs_debugfs_init(struct hisi_qm *qm,
-		struct dfx_diff_registers *dregs, u32 reg_len)
-{
-	int ret;
-
-	if (!qm || !dregs)
-		return -EINVAL;
-
-	if (qm->fun_type != QM_HW_PF)
-		return 0;
-
-	ret = qm_last_regs_init(qm);
-	if (ret) {
-		dev_info(&qm->pdev->dev, "failed to init qm words memory!\n");
-		return ret;
-	}
-
-	ret = qm_diff_regs_init(qm, dregs, reg_len);
-	if (ret) {
-		qm_last_regs_uninit(qm);
-		return ret;
-	}
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(hisi_qm_regs_debugfs_init);
-
-/**
- * hisi_qm_regs_debugfs_uninit() - Free memory for registers.
- * @qm: device qm handle.
- * @reg_len: diff registers region length.
- */
-void hisi_qm_regs_debugfs_uninit(struct hisi_qm *qm, u32 reg_len)
-{
-	if (!qm || qm->fun_type != QM_HW_PF)
-		return;
-
-	qm_diff_regs_uninit(qm, reg_len);
-	qm_last_regs_uninit(qm);
-}
-EXPORT_SYMBOL_GPL(hisi_qm_regs_debugfs_uninit);
-
-/**
- * hisi_qm_acc_diff_regs_dump() - Dump registers's value.
- * @qm: device qm handle.
- * @s: Debugfs file handle.
- * @dregs: diff registers handle.
- * @regs_len: diff registers region length.
- */
-void hisi_qm_acc_diff_regs_dump(struct hisi_qm *qm, struct seq_file *s,
-	struct dfx_diff_registers *dregs, u32 regs_len)
-{
-	u32 j, val, base_offset;
-	int i, ret;
-
-	if (!qm || !s || !dregs)
-		return;
-
-	ret = hisi_qm_get_dfx_access(qm);
-	if (ret)
-		return;
-
-	down_read(&qm->qps_lock);
-	for (i = 0; i < regs_len; i++) {
-		if (!dregs[i].reg_len)
-			continue;
-
-		for (j = 0; j < dregs[i].reg_len; j++) {
-			base_offset = dregs[i].reg_offset + j * QM_DFX_REGS_LEN;
-			val = readl(qm->io_base + base_offset);
-			if (val != dregs[i].regs[j])
-				seq_printf(s, "0x%08x = 0x%08x ---> 0x%08x\n",
-					   base_offset, dregs[i].regs[j], val);
-		}
-	}
-	up_read(&qm->qps_lock);
-
-	hisi_qm_put_dfx_access(qm);
-}
-EXPORT_SYMBOL_GPL(hisi_qm_acc_diff_regs_dump);
-
-static int qm_diff_regs_show(struct seq_file *s, void *unused)
-{
-	struct hisi_qm *qm = s->private;
-
-	hisi_qm_acc_diff_regs_dump(qm, s, qm->debug.qm_diff_regs,
-					ARRAY_SIZE(qm_diff_regs));
-
-	return 0;
-}
-DEFINE_SHOW_ATTRIBUTE(qm_diff_regs);
-
-static ssize_t qm_cmd_read(struct file *filp, char __user *buffer,
-			   size_t count, loff_t *pos)
-{
-	char buf[QM_DBG_READ_LEN];
-	int len;
-
-	len = scnprintf(buf, QM_DBG_READ_LEN, "%s\n",
-			"Please echo help to cmd to get help information");
-
-	return simple_read_from_buffer(buffer, count, pos, buf, len);
-}
-
-static void *qm_ctx_alloc(struct hisi_qm *qm, size_t ctx_size,
-			  dma_addr_t *dma_addr)
-{
-	struct device *dev = &qm->pdev->dev;
-	void *ctx_addr;
-
-	ctx_addr = kzalloc(ctx_size, GFP_KERNEL);
-	if (!ctx_addr)
-		return ERR_PTR(-ENOMEM);
-
-	*dma_addr = dma_map_single(dev, ctx_addr, ctx_size, DMA_FROM_DEVICE);
-	if (dma_mapping_error(dev, *dma_addr)) {
-		dev_err(dev, "DMA mapping error!\n");
-		kfree(ctx_addr);
-		return ERR_PTR(-ENOMEM);
-	}
-
-	return ctx_addr;
-}
-
-static void qm_ctx_free(struct hisi_qm *qm, size_t ctx_size,
-			const void *ctx_addr, dma_addr_t *dma_addr)
-{
-	struct device *dev = &qm->pdev->dev;
-
-	dma_unmap_single(dev, *dma_addr, ctx_size, DMA_FROM_DEVICE);
-	kfree(ctx_addr);
-}
-
-static void dump_show(struct hisi_qm *qm, void *info,
-		     unsigned int info_size, char *info_name)
-{
-	struct device *dev = &qm->pdev->dev;
-	u8 *info_curr = info;
-	u32 i;
-#define BYTE_PER_DW	4
-
-	dev_info(dev, "%s DUMP\n", info_name);
-	for (i = 0; i < info_size; i += BYTE_PER_DW, info_curr += BYTE_PER_DW) {
-		pr_info("DW%u: %02X%02X %02X%02X\n", i / BYTE_PER_DW,
-			*(info_curr + 3), *(info_curr + 2), *(info_curr + 1), *(info_curr));
-	}
-}
-
-static int qm_dump_sqc_raw(struct hisi_qm *qm, dma_addr_t dma_addr, u16 qp_id)
-{
-	return hisi_qm_mb(qm, QM_MB_CMD_SQC, dma_addr, qp_id, 1);
-}
-
-static int qm_dump_cqc_raw(struct hisi_qm *qm, dma_addr_t dma_addr, u16 qp_id)
-{
-	return hisi_qm_mb(qm, QM_MB_CMD_CQC, dma_addr, qp_id, 1);
-}
-
-static int qm_sqc_dump(struct hisi_qm *qm, const char *s)
-{
-	struct device *dev = &qm->pdev->dev;
-	struct qm_sqc *sqc, *sqc_curr;
-	dma_addr_t sqc_dma;
-	u32 qp_id;
-	int ret;
-
-	if (!s)
-		return -EINVAL;
-
-	ret = kstrtou32(s, 0, &qp_id);
-	if (ret || qp_id >= qm->qp_num) {
-		dev_err(dev, "Please input qp num (0-%u)", qm->qp_num - 1);
-		return -EINVAL;
-	}
-
-	sqc = qm_ctx_alloc(qm, sizeof(*sqc), &sqc_dma);
-	if (IS_ERR(sqc))
-		return PTR_ERR(sqc);
-
-	ret = qm_dump_sqc_raw(qm, sqc_dma, qp_id);
-	if (ret) {
-		down_read(&qm->qps_lock);
-		if (qm->sqc) {
-			sqc_curr = qm->sqc + qp_id;
-
-			dump_show(qm, sqc_curr, sizeof(*sqc), "SOFT SQC");
-		}
-		up_read(&qm->qps_lock);
-
-		goto free_ctx;
-	}
-
-	dump_show(qm, sqc, sizeof(*sqc), "SQC");
-
-free_ctx:
-	qm_ctx_free(qm, sizeof(*sqc), sqc, &sqc_dma);
-	return 0;
-}
-
-static int qm_cqc_dump(struct hisi_qm *qm, const char *s)
-{
-	struct device *dev = &qm->pdev->dev;
-	struct qm_cqc *cqc, *cqc_curr;
-	dma_addr_t cqc_dma;
-	u32 qp_id;
-	int ret;
-
-	if (!s)
-		return -EINVAL;
-
-	ret = kstrtou32(s, 0, &qp_id);
-	if (ret || qp_id >= qm->qp_num) {
-		dev_err(dev, "Please input qp num (0-%u)", qm->qp_num - 1);
-		return -EINVAL;
-	}
-
-	cqc = qm_ctx_alloc(qm, sizeof(*cqc), &cqc_dma);
-	if (IS_ERR(cqc))
-		return PTR_ERR(cqc);
-
-	ret = qm_dump_cqc_raw(qm, cqc_dma, qp_id);
-	if (ret) {
-		down_read(&qm->qps_lock);
-		if (qm->cqc) {
-			cqc_curr = qm->cqc + qp_id;
-
-			dump_show(qm, cqc_curr, sizeof(*cqc), "SOFT CQC");
+			break;
 		}
-		up_read(&qm->qps_lock);
-
-		goto free_ctx;
 	}
 
-	dump_show(qm, cqc, sizeof(*cqc), "CQC");
-
-free_ctx:
-	qm_ctx_free(qm, sizeof(*cqc), cqc, &cqc_dma);
-	return 0;
+	writel(lower_32_bits(tmp), qm->io_base + QM_VFT_CFG_DATA_L);
+	writel(upper_32_bits(tmp), qm->io_base + QM_VFT_CFG_DATA_H);
 }
 
-static int qm_eqc_aeqc_dump(struct hisi_qm *qm, char *s, size_t size,
-			    int cmd, char *name)
+static int qm_set_vft_common(struct hisi_qm *qm, enum vft_type type,
+			     u32 fun_num, u32 base, u32 number)
 {
-	struct device *dev = &qm->pdev->dev;
-	dma_addr_t xeqc_dma;
-	void *xeqc;
+	struct qm_shaper_factor *factor = NULL;
+	unsigned int val;
 	int ret;
 
-	if (strsep(&s, " ")) {
-		dev_err(dev, "Please do not input extra characters!\n");
-		return -EINVAL;
-	}
-
-	xeqc = qm_ctx_alloc(qm, size, &xeqc_dma);
-	if (IS_ERR(xeqc))
-		return PTR_ERR(xeqc);
+	if (type == SHAPER_VFT && test_bit(QM_SUPPORT_FUNC_QOS, &qm->caps))
+		factor = &qm->factor[fun_num];
 
-	ret = hisi_qm_mb(qm, cmd, xeqc_dma, 0, 1);
+	ret = readl_relaxed_poll_timeout(qm->io_base + QM_VFT_CFG_RDY, val,
+					 val & BIT(0), POLL_PERIOD,
+					 POLL_TIMEOUT);
 	if (ret)
-		goto err_free_ctx;
+		return ret;
 
-	dump_show(qm, xeqc, size, name);
+	writel(0x0, qm->io_base + QM_VFT_CFG_OP_WR);
+	writel(type, qm->io_base + QM_VFT_CFG_TYPE);
+	if (type == SHAPER_VFT)
+		fun_num |= base << QM_SHAPER_VFT_OFFSET;
 
-err_free_ctx:
-	qm_ctx_free(qm, size, xeqc, &xeqc_dma);
-	return ret;
-}
+	writel(fun_num, qm->io_base + QM_VFT_CFG);
 
-static int q_dump_param_parse(struct hisi_qm *qm, char *s,
-			      u32 *e_id, u32 *q_id, u16 q_depth)
-{
-	struct device *dev = &qm->pdev->dev;
-	unsigned int qp_num = qm->qp_num;
-	char *presult;
-	int ret;
+	qm_vft_data_cfg(qm, type, base, number, factor);
 
-	presult = strsep(&s, " ");
-	if (!presult) {
-		dev_err(dev, "Please input qp number!\n");
-		return -EINVAL;
-	}
+	writel(0x0, qm->io_base + QM_VFT_CFG_RDY);
+	writel(0x1, qm->io_base + QM_VFT_CFG_OP_ENABLE);
 
-	ret = kstrtou32(presult, 0, q_id);
-	if (ret || *q_id >= qp_num) {
-		dev_err(dev, "Please input qp num (0-%u)", qp_num - 1);
-		return -EINVAL;
-	}
+	return readl_relaxed_poll_timeout(qm->io_base + QM_VFT_CFG_RDY, val,
+					  val & BIT(0), POLL_PERIOD,
+					  POLL_TIMEOUT);
+}
 
-	presult = strsep(&s, " ");
-	if (!presult) {
-		dev_err(dev, "Please input sqe number!\n");
-		return -EINVAL;
-	}
+static int qm_shaper_init_vft(struct hisi_qm *qm, u32 fun_num)
+{
+	u32 qos = qm->factor[fun_num].func_qos;
+	int ret, i;
 
-	ret = kstrtou32(presult, 0, e_id);
-	if (ret || *e_id >= q_depth) {
-		dev_err(dev, "Please input sqe num (0-%u)", q_depth - 1);
-		return -EINVAL;
+	ret = qm_get_shaper_para(qos * QM_QOS_RATE, &qm->factor[fun_num]);
+	if (ret) {
+		dev_err(&qm->pdev->dev, "failed to calculate shaper parameter!\n");
+		return ret;
 	}
-
-	if (strsep(&s, " ")) {
-		dev_err(dev, "Please do not input extra characters!\n");
-		return -EINVAL;
+	writel(qm->type_rate, qm->io_base + QM_SHAPER_CFG);
+	for (i = ALG_TYPE_0; i <= ALG_TYPE_1; i++) {
+		/* The base number of queue reuse for different alg type */
+		ret = qm_set_vft_common(qm, SHAPER_VFT, fun_num, i, 1);
+		if (ret)
+			return ret;
 	}
 
 	return 0;
 }
 
-static int qm_sq_dump(struct hisi_qm *qm, char *s)
+/* The config should be conducted after qm_dev_mem_reset() */
+static int qm_set_sqc_cqc_vft(struct hisi_qm *qm, u32 fun_num, u32 base,
+			      u32 number)
 {
-	u16 sq_depth = qm->qp_array->cq_depth;
-	void *sqe, *sqe_curr;
-	struct hisi_qp *qp;
-	u32 qp_id, sqe_id;
-	int ret;
-
-	ret = q_dump_param_parse(qm, s, &sqe_id, &qp_id, sq_depth);
-	if (ret)
-		return ret;
-
-	sqe = kzalloc(qm->sqe_size * sq_depth, GFP_KERNEL);
-	if (!sqe)
-		return -ENOMEM;
-
-	qp = &qm->qp_array[qp_id];
-	memcpy(sqe, qp->sqe, qm->sqe_size * sq_depth);
-	sqe_curr = sqe + (u32)(sqe_id * qm->sqe_size);
-	memset(sqe_curr + qm->debug.sqe_mask_offset, QM_SQE_ADDR_MASK,
-	       qm->debug.sqe_mask_len);
+	int ret, i;
 
-	dump_show(qm, sqe_curr, qm->sqe_size, "SQE");
+	for (i = SQC_VFT; i <= CQC_VFT; i++) {
+		ret = qm_set_vft_common(qm, i, fun_num, base, number);
+		if (ret)
+			return ret;
+	}
 
-	kfree(sqe);
+	/* init default shaper qos val */
+	if (test_bit(QM_SUPPORT_FUNC_QOS, &qm->caps)) {
+		ret = qm_shaper_init_vft(qm, fun_num);
+		if (ret)
+			goto back_sqc_cqc;
+	}
 
 	return 0;
+back_sqc_cqc:
+	for (i = SQC_VFT; i <= CQC_VFT; i++)
+		qm_set_vft_common(qm, i, fun_num, 0, 0);
+
+	return ret;
 }
 
-static int qm_cq_dump(struct hisi_qm *qm, char *s)
+static int qm_get_vft_v2(struct hisi_qm *qm, u32 *base, u32 *number)
 {
-	struct qm_cqe *cqe_curr;
-	struct hisi_qp *qp;
-	u32 qp_id, cqe_id;
+	u64 sqc_vft;
 	int ret;
 
-	ret = q_dump_param_parse(qm, s, &cqe_id, &qp_id, qm->qp_array->cq_depth);
+	ret = hisi_qm_mb(qm, QM_MB_CMD_SQC_VFT_V2, 0, 0, 1);
 	if (ret)
 		return ret;
 
-	qp = &qm->qp_array[qp_id];
-	cqe_curr = qp->cqe + cqe_id;
-	dump_show(qm, cqe_curr, sizeof(struct qm_cqe), "CQE");
+	sqc_vft = readl(qm->io_base + QM_MB_CMD_DATA_ADDR_L) |
+		  ((u64)readl(qm->io_base + QM_MB_CMD_DATA_ADDR_H) << 32);
+	*base = QM_SQC_VFT_BASE_MASK_V2 & (sqc_vft >> QM_SQC_VFT_BASE_SHIFT_V2);
+	*number = (QM_SQC_VFT_NUM_MASK_v2 &
+		   (sqc_vft >> QM_SQC_VFT_NUM_SHIFT_V2)) + 1;
 
 	return 0;
 }
 
-static int qm_eq_aeq_dump(struct hisi_qm *qm, const char *s,
-			  size_t size, char *name)
+void *hisi_qm_ctx_alloc(struct hisi_qm *qm, size_t ctx_size,
+			  dma_addr_t *dma_addr)
 {
 	struct device *dev = &qm->pdev->dev;
-	void *xeqe;
-	u32 xeqe_id;
-	int ret;
-
-	if (!s)
-		return -EINVAL;
-
-	ret = kstrtou32(s, 0, &xeqe_id);
-	if (ret)
-		return -EINVAL;
-
-	if (!strcmp(name, "EQE") && xeqe_id >= qm->eq_depth) {
-		dev_err(dev, "Please input eqe num (0-%u)", qm->eq_depth - 1);
-		return -EINVAL;
-	} else if (!strcmp(name, "AEQE") && xeqe_id >= qm->aeq_depth) {
-		dev_err(dev, "Please input aeqe num (0-%u)", qm->eq_depth - 1);
-		return -EINVAL;
-	}
-
-	down_read(&qm->qps_lock);
-
-	if (qm->eqe && !strcmp(name, "EQE")) {
-		xeqe = qm->eqe + xeqe_id;
-	} else if (qm->aeqe && !strcmp(name, "AEQE")) {
-		xeqe = qm->aeqe + xeqe_id;
-	} else {
-		ret = -EINVAL;
-		goto err_unlock;
-	}
-
-	dump_show(qm, xeqe, size, name);
-
-err_unlock:
-	up_read(&qm->qps_lock);
-	return ret;
-}
+	void *ctx_addr;
 
-static int qm_dbg_help(struct hisi_qm *qm, char *s)
-{
-	struct device *dev = &qm->pdev->dev;
+	ctx_addr = kzalloc(ctx_size, GFP_KERNEL);
+	if (!ctx_addr)
+		return ERR_PTR(-ENOMEM);
 
-	if (strsep(&s, " ")) {
-		dev_err(dev, "Please do not input extra characters!\n");
-		return -EINVAL;
+	*dma_addr = dma_map_single(dev, ctx_addr, ctx_size, DMA_FROM_DEVICE);
+	if (dma_mapping_error(dev, *dma_addr)) {
+		dev_err(dev, "DMA mapping error!\n");
+		kfree(ctx_addr);
+		return ERR_PTR(-ENOMEM);
 	}
 
-	dev_info(dev, "available commands:\n");
-	dev_info(dev, "sqc <num>\n");
-	dev_info(dev, "cqc <num>\n");
-	dev_info(dev, "eqc\n");
-	dev_info(dev, "aeqc\n");
-	dev_info(dev, "sq <num> <e>\n");
-	dev_info(dev, "cq <num> <e>\n");
-	dev_info(dev, "eq <e>\n");
-	dev_info(dev, "aeq <e>\n");
-
-	return 0;
+	return ctx_addr;
 }
 
-static int qm_cmd_write_dump(struct hisi_qm *qm, const char *cmd_buf)
+void hisi_qm_ctx_free(struct hisi_qm *qm, size_t ctx_size,
+			const void *ctx_addr, dma_addr_t *dma_addr)
 {
 	struct device *dev = &qm->pdev->dev;
-	char *presult, *s, *s_tmp;
-	int ret;
-
-	s = kstrdup(cmd_buf, GFP_KERNEL);
-	if (!s)
-		return -ENOMEM;
-
-	s_tmp = s;
-	presult = strsep(&s, " ");
-	if (!presult) {
-		ret = -EINVAL;
-		goto err_buffer_free;
-	}
-
-	if (!strcmp(presult, "sqc"))
-		ret = qm_sqc_dump(qm, s);
-	else if (!strcmp(presult, "cqc"))
-		ret = qm_cqc_dump(qm, s);
-	else if (!strcmp(presult, "eqc"))
-		ret = qm_eqc_aeqc_dump(qm, s, sizeof(struct qm_eqc),
-				       QM_MB_CMD_EQC, "EQC");
-	else if (!strcmp(presult, "aeqc"))
-		ret = qm_eqc_aeqc_dump(qm, s, sizeof(struct qm_aeqc),
-				       QM_MB_CMD_AEQC, "AEQC");
-	else if (!strcmp(presult, "sq"))
-		ret = qm_sq_dump(qm, s);
-	else if (!strcmp(presult, "cq"))
-		ret = qm_cq_dump(qm, s);
-	else if (!strcmp(presult, "eq"))
-		ret = qm_eq_aeq_dump(qm, s, sizeof(struct qm_eqe), "EQE");
-	else if (!strcmp(presult, "aeq"))
-		ret = qm_eq_aeq_dump(qm, s, sizeof(struct qm_aeqe), "AEQE");
-	else if (!strcmp(presult, "help"))
-		ret = qm_dbg_help(qm, s);
-	else
-		ret = -EINVAL;
-
-	if (ret)
-		dev_info(dev, "Please echo help\n");
-
-err_buffer_free:
-	kfree(s_tmp);
 
-	return ret;
+	dma_unmap_single(dev, *dma_addr, ctx_size, DMA_FROM_DEVICE);
+	kfree(ctx_addr);
 }
 
-static ssize_t qm_cmd_write(struct file *filp, const char __user *buffer,
-			    size_t count, loff_t *pos)
+static int qm_dump_sqc_raw(struct hisi_qm *qm, dma_addr_t dma_addr, u16 qp_id)
 {
-	struct hisi_qm *qm = filp->private_data;
-	char *cmd_buf, *cmd_buf_tmp;
-	int ret;
-
-	if (*pos)
-		return 0;
-
-	ret = hisi_qm_get_dfx_access(qm);
-	if (ret)
-		return ret;
-
-	/* Judge if the instance is being reset. */
-	if (unlikely(atomic_read(&qm->status.flags) == QM_STOP)) {
-		ret = 0;
-		goto put_dfx_access;
-	}
-
-	if (count > QM_DBG_WRITE_LEN) {
-		ret = -ENOSPC;
-		goto put_dfx_access;
-	}
-
-	cmd_buf = memdup_user_nul(buffer, count);
-	if (IS_ERR(cmd_buf)) {
-		ret = PTR_ERR(cmd_buf);
-		goto put_dfx_access;
-	}
-
-	cmd_buf_tmp = strchr(cmd_buf, '\n');
-	if (cmd_buf_tmp) {
-		*cmd_buf_tmp = '\0';
-		count = cmd_buf_tmp - cmd_buf + 1;
-	}
-
-	ret = qm_cmd_write_dump(qm, cmd_buf);
-	if (ret) {
-		kfree(cmd_buf);
-		goto put_dfx_access;
-	}
-
-	kfree(cmd_buf);
-
-	ret = count;
-
-put_dfx_access:
-	hisi_qm_put_dfx_access(qm);
-	return ret;
+	return hisi_qm_mb(qm, QM_MB_CMD_SQC, dma_addr, qp_id, 1);
 }
 
-static const struct file_operations qm_cmd_fops = {
-	.owner = THIS_MODULE,
-	.open = simple_open,
-	.read = qm_cmd_read,
-	.write = qm_cmd_write,
-};
-
-static void qm_create_debugfs_file(struct hisi_qm *qm, struct dentry *dir,
-				   enum qm_debug_file index)
+static int qm_dump_cqc_raw(struct hisi_qm *qm, dma_addr_t dma_addr, u16 qp_id)
 {
-	struct debugfs_file *file = qm->debug.files + index;
-
-	debugfs_create_file(qm_debug_file_name[index], 0600, dir, file,
-			    &qm_debug_fops);
-
-	file->index = index;
-	mutex_init(&file->lock);
-	file->debug = &qm->debug;
+	return hisi_qm_mb(qm, QM_MB_CMD_CQC, dma_addr, qp_id, 1);
 }
 
 static void qm_hw_error_init_v1(struct hisi_qm *qm)
@@ -3155,7 +2130,7 @@ static int qm_drain_qp(struct hisi_qp *qp)
 		return ret;
 	}
 
-	addr = qm_ctx_alloc(qm, size, &dma_addr);
+	addr = hisi_qm_ctx_alloc(qm, size, &dma_addr);
 	if (IS_ERR(addr)) {
 		dev_err(dev, "Failed to alloc ctx for sqc and cqc!\n");
 		return -ENOMEM;
@@ -3190,7 +2165,7 @@ static int qm_drain_qp(struct hisi_qp *qp)
 		usleep_range(WAIT_PERIOD_US_MIN, WAIT_PERIOD_US_MAX);
 	}
 
-	qm_ctx_free(qm, size, addr, &dma_addr);
+	hisi_qm_ctx_free(qm, size, addr, &dma_addr);
 
 	return ret;
 }
@@ -4173,45 +3148,6 @@ int hisi_qm_stop(struct hisi_qm *qm, enum qm_stop_reason r)
 }
 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, len;
-
-	val = atomic_read(&qm->status.flags);
-	len = scnprintf(buf, QM_DBG_READ_LEN, "%s\n", qm_s[val]);
-
-	return simple_read_from_buffer(buffer, count, pos, buf, 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)
-{
-	if (val)
-		return -EINVAL;
-
-	atomic64_set((atomic64_t *)data, 0);
-
-	return 0;
-}
-
-static int qm_debugfs_atomic64_get(void *data, u64 *val)
-{
-	*val = atomic64_read((atomic64_t *)data);
-
-	return 0;
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(qm_atomic64_ops, qm_debugfs_atomic64_get,
-			 qm_debugfs_atomic64_set, "%llu\n");
-
 static void qm_hw_error_init(struct hisi_qm *qm)
 {
 	if (!qm->ops->hw_error_init) {
@@ -4750,7 +3686,7 @@ static const struct file_operations qm_algqos_fops = {
  *
  * Create function qos debugfs files, VF ping PF to get function qos.
  */
-static void hisi_qm_set_algqos_init(struct hisi_qm *qm)
+void hisi_qm_set_algqos_init(struct hisi_qm *qm)
 {
 	if (qm->fun_type == QM_HW_PF)
 		debugfs_create_file("alg_qos", 0644, qm->debug.debug_root,
@@ -4760,88 +3696,6 @@ static void hisi_qm_set_algqos_init(struct hisi_qm *qm)
 				    qm, &qm_algqos_fops);
 }
 
-/**
- * hisi_qm_debug_init() - Initialize qm related debugfs files.
- * @qm: The qm for which we want to add debugfs files.
- *
- * Create qm related debugfs files.
- */
-void hisi_qm_debug_init(struct hisi_qm *qm)
-{
-	struct dfx_diff_registers *qm_regs = qm->debug.qm_diff_regs;
-	struct qm_dfx *dfx = &qm->debug.dfx;
-	struct dentry *qm_d;
-	void *data;
-	int i;
-
-	qm_d = debugfs_create_dir("qm", qm->debug.debug_root);
-	qm->debug.qm_d = qm_d;
-
-	/* only show this in PF */
-	if (qm->fun_type == QM_HW_PF) {
-		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);
-	}
-
-	if (qm_regs)
-		debugfs_create_file("diff_regs", 0444, qm->debug.qm_d,
-					qm, &qm_diff_regs_fops);
-
-	debugfs_create_file("regs", 0444, qm->debug.qm_d, qm, &qm_regs_fops);
-
-	debugfs_create_file("cmd", 0600, qm->debug.qm_d, qm, &qm_cmd_fops);
-
-	debugfs_create_file("status", 0444, qm->debug.qm_d, qm,
-			&qm_status_fops);
-	for (i = 0; i < ARRAY_SIZE(qm_dfx_files); i++) {
-		data = (atomic64_t *)((uintptr_t)dfx + qm_dfx_files[i].offset);
-		debugfs_create_file(qm_dfx_files[i].name,
-			0644,
-			qm_d,
-			data,
-			&qm_atomic64_ops);
-	}
-
-	if (test_bit(QM_SUPPORT_FUNC_QOS, &qm->caps))
-		hisi_qm_set_algqos_init(qm);
-}
-EXPORT_SYMBOL_GPL(hisi_qm_debug_init);
-
-/**
- * hisi_qm_debug_regs_clear() - clear qm debug related registers.
- * @qm: The qm for which we want to clear its debug registers.
- */
-void hisi_qm_debug_regs_clear(struct hisi_qm *qm)
-{
-	const struct debugfs_reg32 *regs;
-	int i;
-
-	/* clear current_qm */
-	writel(0x0, qm->io_base + QM_DFX_MB_CNT_VF);
-	writel(0x0, qm->io_base + QM_DFX_DB_CNT_VF);
-
-	/* clear current_q */
-	writel(0x0, qm->io_base + QM_DFX_SQE_CNT_VF_SQN);
-	writel(0x0, qm->io_base + QM_DFX_CQE_CNT_VF_CQN);
-
-	/*
-	 * these registers are reading and clearing, so clear them after
-	 * reading them.
-	 */
-	writel(0x1, qm->io_base + QM_DFX_CNT_CLR_CE);
-
-	regs = qm_dfx_regs;
-	for (i = 0; i < CNT_CYC_REGS_NUM; i++) {
-		readl(qm->io_base + regs->offset);
-		regs++;
-	}
-
-	/* clear clear_enable */
-	writel(0x0, qm->io_base + QM_DFX_CNT_CLR_CE);
-}
-EXPORT_SYMBOL_GPL(hisi_qm_debug_regs_clear);
-
 static void hisi_qm_init_vf_qos(struct hisi_qm *qm, int total_func)
 {
 	int i;
@@ -5480,24 +4334,6 @@ static int qm_controller_reset_done(struct hisi_qm *qm)
 	return 0;
 }
 
-static void qm_show_last_dfx_regs(struct hisi_qm *qm)
-{
-	struct qm_debug *debug = &qm->debug;
-	struct pci_dev *pdev = qm->pdev;
-	u32 val;
-	int i;
-
-	if (qm->fun_type == QM_HW_VF || !debug->qm_last_words)
-		return;
-
-	for (i = 0; i < ARRAY_SIZE(qm_dfx_regs); i++) {
-		val = readl_relaxed(qm->io_base + qm_dfx_regs[i].offset);
-		if (debug->qm_last_words[i] != val)
-			pci_info(pdev, "%s \t= 0x%08x => 0x%08x\n",
-			qm_dfx_regs[i].name, debug->qm_last_words[i], val);
-	}
-}
-
 static int qm_controller_reset(struct hisi_qm *qm)
 {
 	struct pci_dev *pdev = qm->pdev;
@@ -5513,7 +4349,7 @@ static int qm_controller_reset(struct hisi_qm *qm)
 		return ret;
 	}
 
-	qm_show_last_dfx_regs(qm);
+	hisi_qm_show_last_dfx_regs(qm);
 	if (qm->err_ini->show_last_dfx_regs)
 		qm->err_ini->show_last_dfx_regs(qm);
 
diff --git a/drivers/crypto/hisilicon/qm_common.h b/drivers/crypto/hisilicon/qm_common.h
new file mode 100644
index 0000000000000..1406a422d4551
--- /dev/null
+++ b/drivers/crypto/hisilicon/qm_common.h
@@ -0,0 +1,87 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/* Copyright (c) 2022 HiSilicon Limited. */
+#ifndef QM_COMMON_H
+#define QM_COMMON_H
+
+#define QM_DBG_READ_LEN		256
+#define QM_RESETTING		2
+
+struct qm_cqe {
+	__le32 rsvd0;
+	__le16 cmd_id;
+	__le16 rsvd1;
+	__le16 sq_head;
+	__le16 sq_num;
+	__le16 rsvd2;
+	__le16 w7;
+};
+
+struct qm_eqe {
+	__le32 dw0;
+};
+
+struct qm_aeqe {
+	__le32 dw0;
+};
+
+struct qm_sqc {
+	__le16 head;
+	__le16 tail;
+	__le32 base_l;
+	__le32 base_h;
+	__le32 dw3;
+	__le16 w8;
+	__le16 rsvd0;
+	__le16 pasid;
+	__le16 w11;
+	__le16 cq_num;
+	__le16 w13;
+	__le32 rsvd1;
+};
+
+struct qm_cqc {
+	__le16 head;
+	__le16 tail;
+	__le32 base_l;
+	__le32 base_h;
+	__le32 dw3;
+	__le16 w8;
+	__le16 rsvd0;
+	__le16 pasid;
+	__le16 w11;
+	__le32 dw6;
+	__le32 rsvd1;
+};
+
+struct qm_eqc {
+	__le16 head;
+	__le16 tail;
+	__le32 base_l;
+	__le32 base_h;
+	__le32 dw3;
+	__le32 rsvd[2];
+	__le32 dw6;
+};
+
+struct qm_aeqc {
+	__le16 head;
+	__le16 tail;
+	__le32 base_l;
+	__le32 base_h;
+	__le32 dw3;
+	__le32 rsvd[2];
+	__le32 dw6;
+};
+
+static const char * const qm_s[] = {
+	"init", "start", "close", "stop",
+};
+
+void *hisi_qm_ctx_alloc(struct hisi_qm *qm, size_t ctx_size,
+			dma_addr_t *dma_addr);
+void hisi_qm_ctx_free(struct hisi_qm *qm, size_t ctx_size,
+		      const void *ctx_addr, dma_addr_t *dma_addr);
+void hisi_qm_show_last_dfx_regs(struct hisi_qm *qm);
+void hisi_qm_set_algqos_init(struct hisi_qm *qm);
+
+#endif
-- 
2.42.0




  parent reply	other threads:[~2023-11-15 19:57 UTC|newest]

Thread overview: 388+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-11-15 19:21 [PATCH 6.1 000/379] 6.1.63-rc1 review Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 001/379] hwmon: (nct6775) Fix incorrect variable reuse in fan_div calculation Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 002/379] sched/fair: Fix cfs_rq_is_decayed() on !SMP Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 003/379] iov_iter, x86: Be consistent about the __user tag on copy_mc_to_user() Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 004/379] sched/uclamp: Set max_spare_cap_cpu even if max_spare_cap is 0 Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 005/379] sched/uclamp: Ignore (util == 0) optimization in feec() when p_util_max = 0 Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 006/379] objtool: Propagate early errors Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 007/379] sched: Fix stop_one_cpu_nowait() vs hotplug Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 008/379] vfs: fix readahead(2) on block devices Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 009/379] writeback, cgroup: switch inodes with dirty timestamps to release dying cgwbs Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 010/379] x86/srso: Fix SBPB enablement for (possible) future fixed HW Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 011/379] futex: Dont include process MM in futex key on no-MMU Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 012/379] x86/numa: Introduce numa_fill_memblks() Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 013/379] ACPI/NUMA: Apply SRAT proximity domain to entire CFMWS window Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 014/379] x86/sev-es: Allow copy_from_kernel_nofault() in earlier boot Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 015/379] x86/boot: Fix incorrect startup_gdt_descr.size Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 016/379] drivers/clocksource/timer-ti-dm: Dont call clk_get_rate() in stop function Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 017/379] pstore/platform: Add check for kstrdup Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 018/379] string: Adjust strtomem() logic to allow for smaller sources Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 019/379] genirq/matrix: Exclude managed interrupts in irq_matrix_allocated() Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 020/379] wifi: cfg80211: add flush functions for wiphy work Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 021/379] wifi: mac80211: move radar detect work to " Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 022/379] wifi: mac80211: move scan " Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 023/379] wifi: mac80211: move offchannel works " Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 024/379] wifi: mac80211: move sched-scan stop work " Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 025/379] wifi: mac80211: fix # of MSDU in A-MSDU calculation Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 026/379] wifi: iwlwifi: honor the enable_ini value Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 027/379] i40e: fix potential memory leaks in i40e_remove() Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 028/379] iavf: Fix promiscuous mode configuration flow messages Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 029/379] selftests/bpf: Correct map_fd to data_fd in tailcalls Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 030/379] wifi: iwlwifi: Use FW rate for non-data frames Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 031/379] udp: add missing WRITE_ONCE() around up->encap_rcv Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 032/379] tcp: call tcp_try_undo_recovery when an RTOd TFO SYNACK is ACKed Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 033/379] gve: Use size_add() in call to struct_size() Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 034/379] mlxsw: Use size_mul() " Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 035/379] tls: Only use data field in crypto completion function Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 036/379] tls: Use size_add() in call to struct_size() Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 037/379] tipc: Use size_add() in calls " Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 038/379] net: spider_net: Use size_add() in call " Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 039/379] net: ethernet: mtk_wed: fix EXT_INT_STATUS_RX_FBUF definitions for MT7986 SoC Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 040/379] wifi: rtw88: debug: Fix the NULL vs IS_ERR() bug for debugfs_create_file() Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 041/379] wifi: ath11k: fix boot failure with one MSI vector Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 042/379] wifi: mt76: mt7603: rework/fix rx pse hang check Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 043/379] wifi: mt76: mt7603: improve watchdog reset reliablity Greg Kroah-Hartman
2023-11-15 19:21 ` [PATCH 6.1 044/379] wifi: mt76: mt7603: improve stuck beacon handling Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 045/379] wifi: mt76: mt7915: fix beamforming availability check Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 046/379] wifi: ath: dfs_pattern_detector: Fix a memory initialization issue Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 047/379] tcp_metrics: add missing barriers on delete Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 048/379] tcp_metrics: properly set tp->snd_ssthresh in tcp_init_metrics() Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 049/379] tcp_metrics: do not create an entry from tcp_init_metrics() Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 050/379] wifi: rtlwifi: fix EDCA limit set by BT coexistence Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 051/379] ACPI: property: Allow _DSD buffer data only for byte accessors Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 052/379] =?UTF-8?q?ACPI:=20video:=20Add=20acpi=5Fbacklight=3Dvendor=20quir?= =?UTF-8?q?k=20for=20Toshiba=20Port=C3=A9g=C3=A9=20R100?= Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 053/379] wifi: ath11k: fix Tx power value during active CAC Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 054/379] can: dev: can_restart(): dont crash kernel if carrier is OK Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 055/379] can: dev: can_restart(): fix race condition between controller restart and netif_carrier_on() Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 056/379] can: dev: can_put_echo_skb(): dont crash kernel if can_priv::echo_skb is accessed out of bounds Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 057/379] PM / devfreq: rockchip-dfi: Make pmu regmap mandatory Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 058/379] wifi: wfx: fix case where rates are out of order Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 059/379] netfilter: nf_tables: Drop pointless memset when dumping rules Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 060/379] thermal: core: prevent potential string overflow Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 061/379] r8169: use tp_to_dev instead of open code Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 062/379] r8169: fix rare issue with broken rx after link-down on RTL8125 Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 063/379] selftests: netfilter: test for sctp collision processing in nf_conntrack Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 064/379] net: skb_find_text: Ignore patterns extending past to Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 065/379] chtls: fix tp->rcv_tstamp initialization Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 066/379] tcp: fix cookie_init_timestamp() overflows Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 067/379] wifi: iwlwifi: call napi_synchronize() before freeing rx/tx queues Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 068/379] wifi: iwlwifi: pcie: synchronize IRQs before NAPI Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 069/379] wifi: iwlwifi: empty overflow queue during flush Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 070/379] Bluetooth: hci_sync: Fix Opcode prints in bt_dev_dbg/err Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 071/379] bpf: Fix unnecessary -EBUSY from htab_lock_bucket Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 072/379] ACPI: sysfs: Fix create_pnp_modalias() and create_of_modalias() Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 073/379] ipv6: avoid atomic fragment on GSO packets Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 074/379] net: add DEV_STATS_READ() helper Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 075/379] ipvlan: properly track tx_errors Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 076/379] regmap: debugfs: Fix a erroneous check after snprintf() Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 077/379] spi: tegra: Fix missing IRQ check in tegra_slink_probe() Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 078/379] clk: qcom: gcc-msm8996: Remove RPM bus clocks Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 079/379] clk: qcom: clk-rcg2: Fix clock rate overflow for high parent frequencies Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 080/379] clk: qcom: mmcc-msm8998: Dont check halt bit on some branch clks Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 081/379] clk: qcom: mmcc-msm8998: Fix the SMMU GDSC Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 082/379] clk: qcom: gcc-sm8150: Fix gcc_sdcc2_apps_clk_src Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 083/379] regulator: mt6358: Fail probe on unknown chip ID Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 084/379] clk: imx: Select MXC_CLK for CLK_IMX8QXP Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 085/379] clk: imx: imx8mq: correct error handling path Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 086/379] clk: imx: imx8qxp: Fix elcdif_pll clock Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 087/379] clk: renesas: rcar-gen3: Extend SDnH divider table Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 088/379] clk: renesas: rzg2l: Wait for status bit of SD mux before continuing Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 089/379] clk: renesas: rzg2l: Lock around writes to mux register Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 090/379] clk: renesas: rzg2l: Trust value returned by hardware Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 091/379] clk: renesas: rzg2l: Use FIELD_GET() for PLL register fields Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 092/379] clk: renesas: rzg2l: Fix computation formula Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 093/379] clk: linux/clk-provider.h: fix kernel-doc warnings and typos Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 094/379] spi: nxp-fspi: use the correct ioremap function Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 095/379] clk: keystone: pll: fix a couple NULL vs IS_ERR() checks Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 096/379] clk: ti: change ti_clk_register[_omap_hw]() API Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 097/379] clk: ti: fix double free in of_ti_divider_clk_setup() Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 098/379] clk: npcm7xx: Fix incorrect kfree Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 099/379] clk: mediatek: clk-mt6765: Add check for mtk_alloc_clk_data Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 100/379] clk: mediatek: clk-mt6779: " Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 101/379] clk: mediatek: clk-mt6797: " Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 102/379] clk: mediatek: clk-mt7629-eth: " Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 103/379] clk: mediatek: clk-mt7629: " Greg Kroah-Hartman
2023-11-15 19:22 ` [PATCH 6.1 104/379] clk: mediatek: clk-mt2701: " Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 105/379] clk: qcom: config IPQ_APSS_6018 should depend on QCOM_SMEM Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 106/379] platform/x86: wmi: Fix probe failure when failing to register WMI devices Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 107/379] platform/x86: wmi: Fix opening of char device Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 108/379] hwmon: (axi-fan-control) Fix possible NULL pointer dereference Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 109/379] hwmon: (coretemp) Fix potentially truncated sysfs attribute name Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 110/379] Revert "hwmon: (sch56xx-common) Add DMI override table" Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 111/379] Revert "hwmon: (sch56xx-common) Add automatic module loading on supported devices" Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 112/379] hwmon: (sch5627) Use bit macros when accessing the control register Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 113/379] hwmon: (sch5627) Disallow write access if virtual registers are locked Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 114/379] hte: tegra: Fix missing error code in tegra_hte_test_probe() Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 115/379] drm/rockchip: vop: Fix reset of state in duplicate state crtc funcs Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 116/379] drm/rockchip: vop: Fix call to crtc reset helper Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 117/379] drm/rockchip: vop2: Dont crash for invalid duplicate_state Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 118/379] drm/rockchip: vop2: Add missing call to crtc reset helper Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 119/379] drm/radeon: possible buffer overflow Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 120/379] drm: bridge: it66121: Fix invalid connector dereference Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 121/379] drm/bridge: lt8912b: Add hot plug detection Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 122/379] drm/bridge: lt8912b: Fix bridge_detach Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 123/379] drm/bridge: lt8912b: Fix crash on bridge detach Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 124/379] drm/bridge: lt8912b: Manually disable HPD only if it was enabled Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 125/379] drm/bridge: lt8912b: Add missing drm_bridge_attach call Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 126/379] drm/bridge: tc358768: Fix use of uninitialized variable Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 127/379] drm/bridge: tc358768: Fix bit updates Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 128/379] drm/bridge: tc358768: remove unused variable Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 129/379] drm/bridge: tc358768: Use struct videomode Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 130/379] drm/bridge: tc358768: Print logical values, not raw register values Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 131/379] drm/bridge: tc358768: Use dev for dbg prints, not priv->dev Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 132/379] drm/bridge: tc358768: Rename dsibclk to hsbyteclk Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 133/379] drm/bridge: tc358768: Clean up clock period code Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 134/379] drm/bridge: tc358768: Fix tc358768_ns_to_cnt() Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 135/379] drm/amdkfd: fix some race conditions in vram buffer alloc/free of svm code Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 136/379] drm/amd/display: Check all enabled planes in dm_check_crtc_cursor Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 137/379] drm/amd/display: Refactor dm_get_plane_scale helper Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 138/379] drm/amd/display: Bail from dm_check_crtc_cursor if no relevant change Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 139/379] io_uring/kbuf: Fix check of BID wrapping in provided buffers Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 140/379] io_uring/kbuf: Allow the full buffer id space for " Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 141/379] drm/mediatek: Fix iommu fault by swapping FBs after updating plane state Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 142/379] drm/mediatek: Fix iommu fault during crtc enabling Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 143/379] drm/rockchip: cdn-dp: Fix some error handling paths in cdn_dp_probe() Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 144/379] gpu: host1x: Correct allocated size for contexts Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 145/379] drm/bridge: lt9611uxc: fix the race in the error path Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 146/379] arm64/arm: xen: enlighten: Fix KPTI checks Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 147/379] drm/rockchip: Fix type promotion bug in rockchip_gem_iommu_map() Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 148/379] xenbus: fix error exit in xenbus_init() Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 149/379] xen-pciback: Consider INTx disabled when MSI/MSI-X is enabled Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 150/379] drm/msm/dsi: use msm_gem_kernel_put to free TX buffer Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 151/379] drm/msm/dsi: free TX buffer in unbind Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 152/379] clocksource/drivers/arm_arch_timer: limit XGene-1 workaround Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 153/379] drm: mediatek: mtk_dsi: Fix NO_EOT_PACKET settings/handling Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 154/379] drivers/perf: hisi: use cpuhp_state_remove_instance_nocalls() for hisi_hns3_pmu uninit process Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 155/379] perf/arm-cmn: Revamp model detection Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 156/379] perf/arm-cmn: Fix DTC domain detection Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 157/379] drivers/perf: hisi_pcie: Check the type first in pmu::event_init() Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 158/379] perf: hisi: Fix use-after-free when register pmu fails Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 159/379] ARM: dts: renesas: blanche: Fix typo in GP_11_2 pin name Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 160/379] arm64: dts: qcom: sdm845: cheza doesnt support LMh node Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 161/379] arm64: dts: qcom: sc7280: link usb3_phy_wrapper_gcc_usb30_pipe_clk Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 162/379] arm64: dts: qcom: msm8916: Fix iommu local address range Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 163/379] arm64: dts: qcom: msm8992-libra: drop duplicated reserved memory Greg Kroah-Hartman
2023-11-15 19:23 ` [PATCH 6.1 164/379] arm64: dts: qcom: sc7280: Add missing LMH interrupts Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 165/379] arm64: dts: qcom: sm8150: add ref clock to PCIe PHYs Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 166/379] arm64: dts: qcom: sm8350: fix pinctrl for UART18 Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 167/379] arm64: dts: qcom: sdm845-mtp: fix WiFi configuration Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 168/379] ARM64: dts: marvell: cn9310: Use appropriate label for spi1 pins Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 169/379] arm64: dts: qcom: apq8016-sbc: Add missing ADV7533 regulators Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 170/379] ARM: dts: qcom: mdm9615: populate vsdcc fixed regulator Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 171/379] soc: qcom: llcc: Handle a second device without data corruption Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 172/379] kunit: Fix missed memory release in kunit_free_suite_set() Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 173/379] firmware: ti_sci: Mark driver as non removable Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 174/379] arm64: dts: ti: k3-am62a7-sk: Drop i2c-1 to 100Khz Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 175/379] firmware: arm_ffa: Assign the missing IDR allocation ID to the FFA device Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 176/379] firmware: arm_ffa: Allow the FF-A drivers to use 32bit mode of messaging Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 177/379] ARM: dts: am3517-evm: Fix LED3/4 pinmux Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 178/379] clk: scmi: Free scmi_clk allocated when the clocks with invalid info are skipped Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 179/379] arm64: dts: imx8qm-ss-img: Fix jpegenc compatible entry Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 180/379] arm64: dts: imx8mm: Add sound-dai-cells to micfil node Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 181/379] arm64: dts: imx8mn: " Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 182/379] arm64: tegra: Use correct interrupts for Tegra234 TKE Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 183/379] selftests/pidfd: Fix ksft print formats Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 184/379] selftests/resctrl: Ensure the benchmark commands fits to its array Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 185/379] module/decompress: use vmalloc() for gzip decompression workspace Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 186/379] ASoC: cs35l41: Verify PM runtime resume errors in IRQ handler Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 187/379] ASoC: cs35l41: Undo runtime PM changes at driver exit time Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 188/379] ALSA: hda: cs35l41: Fix unbalanced pm_runtime_get() Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 189/379] ALSA: hda: cs35l41: Undo runtime PM changes at driver exit time Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 190/379] KEYS: Include linux/errno.h in linux/verification.h Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 191/379] crypto: hisilicon/hpre - Fix a erroneous check after snprintf() Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 192/379] hwrng: bcm2835 - Fix hwrng throughput regression Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 193/379] hwrng: geode - fix accessing registers Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 194/379] RDMA/core: Use size_{add,sub,mul}() in calls to struct_size() Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 195/379] crypto: qat - ignore subsequent state up commands Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 196/379] crypto: qat - relocate bufferlist logic Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 197/379] crypto: qat - rename bufferlist functions Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 198/379] crypto: qat - change bufferlist logic interface Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 199/379] crypto: qat - generalize crypto request buffers Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 200/379] crypto: qat - extend buffer list interface Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 201/379] crypto: qat - fix unregistration of crypto algorithms Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 202/379] scsi: ibmvfc: Fix erroneous use of rtas_busy_delay with hcall return code Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 203/379] libnvdimm/of_pmem: Use devm_kstrdup instead of kstrdup and check its return value Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 204/379] nd_btt: Make BTT lanes preemptible Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 205/379] crypto: caam/qi2 - fix Chacha20 + Poly1305 self test failure Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 206/379] crypto: caam/jr " Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 207/379] crypto: qat - increase size of buffers Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 208/379] PCI: vmd: Correct PCI Header Type Registers multi-function check Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 209/379] hid: cp2112: Fix duplicate workqueue initialization Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 210/379] crypto: hisilicon/qm - delete redundant null assignment operations Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 211/379] crypto: hisilicon/qm - modify the process of regs dfx Greg Kroah-Hartman
2023-11-15 19:24 ` Greg Kroah-Hartman [this message]
2023-11-15 19:24 ` [PATCH 6.1 213/379] crypto: hisilicon/qm - fix PF queue parameter issue Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 214/379] ARM: 9321/1: memset: cast the constant byte to unsigned char Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 215/379] ext4: move ix sanity check to corrent position Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 216/379] ASoC: fsl: mpc5200_dma.c: Fix warning of Function parameter or member not described Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 217/379] IB/mlx5: Fix rdma counter binding for RAW QP Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 218/379] RDMA/hns: Fix printing level of asynchronous events Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 219/379] RDMA/hns: Fix uninitialized ucmd in hns_roce_create_qp_common() Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 220/379] RDMA/hns: Fix signed-unsigned mixed comparisons Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 221/379] RDMA/hns: Add check for SL Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 222/379] RDMA/hns: The UD mode can only be configured with DCQCN Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 223/379] ASoC: SOF: core: Ensure sof_ops_free() is still called when probe never ran Greg Kroah-Hartman
2023-11-15 19:24 ` [PATCH 6.1 224/379] ASoC: fsl: Fix PM disable depth imbalance in fsl_easrc_probe Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 225/379] scsi: ufs: core: Leave space for \0 in utf8 desc string Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 226/379] RDMA/hfi1: Workaround truncation compilation error Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 227/379] HID: cp2112: Make irq_chip immutable Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 228/379] hid: cp2112: Fix IRQ shutdown stopping polling for all IRQs on chip Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 229/379] sh: bios: Revive earlyprintk support Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 230/379] Revert "HID: logitech-hidpp: add a module parameter to keep firmware gestures" Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 231/379] HID: logitech-hidpp: Remove HIDPP_QUIRK_NO_HIDINPUT quirk Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 232/379] HID: logitech-hidpp: Dont restart IO, instead defer hid_connect() only Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 233/379] HID: logitech-hidpp: Revert "Dont restart communication if not necessary" Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 234/379] HID: logitech-hidpp: Move get_wireless_feature_index() check to hidpp_connect_event() Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 235/379] ASoC: Intel: Skylake: Fix mem leak when parsing UUIDs fails Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 236/379] padata: Fix refcnt handling in padata_free_shell() Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 237/379] crypto: qat - fix deadlock in backlog processing Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 238/379] ASoC: ams-delta.c: use component after check Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 239/379] IB/mlx5: Fix init stage error handling to avoid double free of same QP and UAF Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 240/379] mfd: core: Un-constify mfd_cell.of_reg Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 241/379] mfd: core: Ensure disabled devices are skipped without aborting Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 242/379] mfd: dln2: Fix double put in dln2_probe Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 243/379] dt-bindings: mfd: mt6397: Add binding for MT6357 Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 244/379] dt-bindings: mfd: mt6397: Split out compatible for MediaTek MT6366 PMIC Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 245/379] mfd: arizona-spi: Set pdata.hpdet_channel for ACPI enumerated devs Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 246/379] leds: turris-omnia: Drop unnecessary mutex locking Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 247/379] leds: turris-omnia: Do not use SMBUS calls Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 248/379] leds: pwm: Dont disable the PWM when the LED should be off Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 249/379] leds: trigger: ledtrig-cpu:: Fix output may be truncated issue for cpu Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 250/379] kunit: add macro to allow conditionally exposing static symbols to tests Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 251/379] apparmor: test: make static symbols visible during kunit testing Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 252/379] apparmor: fix invalid reference on profile->disconnected Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 253/379] perf stat: Fix aggr mode initialization Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 254/379] iio: frequency: adf4350: Use device managed functions and fix power down issue Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 255/379] perf kwork: Fix incorrect and missing free atom in work_push_atom() Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 256/379] perf kwork: Add the supported subcommands to the document Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 257/379] perf kwork: Set ordered_events to true in struct perf_tool Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 258/379] filemap: add filemap_get_folios_tag() Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 259/379] f2fs: convert f2fs_write_cache_pages() to use filemap_get_folios_tag() Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 260/379] f2fs: compress: fix deadloop in f2fs_write_cache_pages() Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 261/379] f2fs: compress: fix to avoid use-after-free on dic Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 262/379] f2fs: compress: fix to avoid redundant compress extension Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 263/379] tty: tty_jobctrl: fix pid memleak in disassociate_ctty() Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 264/379] livepatch: Fix missing newline character in klp_resolve_symbols() Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 265/379] pinctrl: renesas: rzg2l: Make reverse order of enable() for disable() Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 266/379] perf record: Fix BTF type checks in the off-cpu profiling Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 267/379] dmaengine: idxd: Register dsa_bus_type before registering idxd sub-drivers Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 268/379] usb: dwc2: fix possible NULL pointer dereference caused by driver concurrency Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 269/379] usb: chipidea: Fix DMA overwrite for Tegra Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 270/379] usb: chipidea: Simplify Tegra DMA alignment code Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 271/379] dmaengine: ti: edma: handle irq_of_parse_and_map() errors Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 272/379] misc: st_core: Do not call kfree_skb() under spin_lock_irqsave() Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 273/379] tools: iio: iio_generic_buffer ensure alignment Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 274/379] USB: usbip: fix stub_dev hub disconnect Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 275/379] dmaengine: pxa_dma: Remove an erroneous BUG_ON() in pxad_free_desc() Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 276/379] f2fs: fix to initialize map.m_pblk in f2fs_precache_extents() Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 277/379] interconnect: qcom: sc7180: Retire DEFINE_QBCM Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 278/379] interconnect: qcom: sc7180: Set ACV enable_mask Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 279/379] interconnect: qcom: sc7280: " Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 280/379] interconnect: qcom: sc8180x: " Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 281/379] interconnect: qcom: sc8280xp: " Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 282/379] interconnect: qcom: sdm845: Retire DEFINE_QBCM Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 283/379] interconnect: qcom: sdm845: Set ACV enable_mask Greg Kroah-Hartman
2023-11-15 19:25 ` [PATCH 6.1 284/379] interconnect: qcom: sm6350: Retire DEFINE_QBCM Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 285/379] interconnect: qcom: sm6350: Set ACV enable_mask Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 286/379] interconnect: move ignore_list out of of_count_icc_providers() Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 287/379] interconnect: qcom: sm8150: Drop IP0 interconnects Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 288/379] interconnect: qcom: sm8150: Retire DEFINE_QBCM Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 289/379] interconnect: qcom: sm8150: Set ACV enable_mask Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 290/379] interconnect: qcom: sm8350: Retire DEFINE_QBCM Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 291/379] interconnect: qcom: sm8350: Set ACV enable_mask Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 292/379] powerpc: Only define __parse_fpscr() when required Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 293/379] modpost: fix tee MODULE_DEVICE_TABLE built on big-endian host Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 294/379] modpost: fix ishtp " Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 295/379] powerpc/40x: Remove stale PTE_ATOMIC_UPDATES macro Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 296/379] powerpc/xive: Fix endian conversion size Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 297/379] powerpc/vas: Limit open window failure messages in log bufffer Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 298/379] powerpc/imc-pmu: Use the correct spinlock initializer Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 299/379] powerpc/pseries: fix potential memory leak in init_cpu_associativity() Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 300/379] xhci: Loosen RPM as default policy to cover for AMD xHC 1.1 Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 301/379] usb: host: xhci-plat: fix possible kernel oops while resuming Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 302/379] perf machine: Avoid out of bounds LBR memory read Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 303/379] perf hist: Add missing puts to hist__account_cycles Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 304/379] 9p/net: fix possible memory leak in p9_check_errors() Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 305/379] i3c: Fix potential refcount leak in i3c_master_register_new_i3c_devs Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 306/379] cxl/mem: Fix shutdown order Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 307/379] crypto: ccp - Name -1 return value as SEV_RET_NO_FW_CALL Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 308/379] x86/sev: Change snp_guest_issue_request()s fw_err argument Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 309/379] virt: sevguest: Fix passing a stack buffer as a scatterlist target Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 310/379] rtc: pcf85363: fix wrong mask/val parameters in regmap_update_bits call Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 311/379] pcmcia: cs: fix possible hung task and memory leak pccardd() Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 312/379] pcmcia: ds: fix refcount leak in pcmcia_device_add() Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 313/379] pcmcia: ds: fix possible name leak in error path " Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 314/379] media: hantro: Check whether reset op is defined before use Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 315/379] media: verisilicon: Do not enable G2 postproc downscale if source is narrower than destination Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 316/379] media: ov5640: Drop dead code using frame_interval Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 317/379] media: ov5640: fix vblank unchange issue when work at dvp mode Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 318/379] media: i2c: max9286: Fix some redundant of_node_put() calls Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 319/379] media: ov5640: Fix a memory leak when ov5640_probe fails Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 320/379] media: bttv: fix use after free error due to btv->timeout timer Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 321/379] media: amphion: handle firmware debug message Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 322/379] media: mtk-jpegenc: Fix bug in JPEG encode quality selection Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 323/379] media: s3c-camif: Avoid inappropriate kfree() Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 324/379] media: vidtv: psi: Add check for kstrdup Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 325/379] media: vidtv: mux: Add check and kfree " Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 326/379] media: cedrus: Fix clock/reset sequence Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 327/379] media: cadence: csi2rx: Unregister v4l2 async notifier Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 328/379] media: dvb-usb-v2: af9035: fix missing unlock Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 329/379] media: cec: meson: always include meson sub-directory in Makefile Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 330/379] regmap: prevent noinc writes from clobbering cache Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 331/379] pwm: sti: Reduce number of allocations and drop usage of chip_data Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 332/379] pwm: brcmstb: Utilize appropriate clock APIs in suspend/resume Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 333/379] Input: synaptics-rmi4 - fix use after free in rmi_unregister_function() Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 334/379] watchdog: ixp4xx: Make sure restart always works Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 335/379] llc: verify mac len before reading mac header Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 336/379] hsr: Prevent use after free in prp_create_tagged_frame() Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 337/379] tipc: Change nla_policy for bearer-related names to NLA_NUL_STRING Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 338/379] bpf: Check map->usercnt after timer->timer is assigned Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 339/379] inet: shrink struct flowi_common Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 340/379] octeontx2-pf: Fix error codes Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 341/379] octeontx2-pf: Fix holes in error code Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 342/379] net: page_pool: add missing free_percpu when page_pool_init fail Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 343/379] dccp: Call security_inet_conn_request() after setting IPv4 addresses Greg Kroah-Hartman
2023-11-15 19:26 ` [PATCH 6.1 344/379] dccp/tcp: Call security_inet_conn_request() after setting IPv6 addresses Greg Kroah-Hartman
2023-11-15 19:27 ` [PATCH 6.1 345/379] net: r8169: Disable multicast filter for RTL8168H and RTL8107E Greg Kroah-Hartman
2023-11-15 19:27 ` [PATCH 6.1 346/379] Fix termination state for idr_for_each_entry_ul() Greg Kroah-Hartman
2023-11-15 19:27 ` [PATCH 6.1 347/379] net: stmmac: xgmac: Enable support for multiple Flexible PPS outputs Greg Kroah-Hartman
2023-11-15 19:27 ` [PATCH 6.1 348/379] selftests: pmtu.sh: fix result checking Greg Kroah-Hartman
2023-11-15 19:27 ` [PATCH 6.1 349/379] octeontx2-pf: Rename tot_tx_queues to non_qos_queues Greg Kroah-Hartman
2023-11-15 19:27 ` [PATCH 6.1 350/379] octeontx2-pf: qos send queues management Greg Kroah-Hartman
2023-11-15 19:27 ` [PATCH 6.1 351/379] octeontx2-pf: Free pending and dropped SQEs Greg Kroah-Hartman
2023-11-15 19:27 ` [PATCH 6.1 352/379] net/smc: fix dangling sock under state SMC_APPFINCLOSEWAIT Greg Kroah-Hartman
2023-11-15 19:27 ` [PATCH 6.1 353/379] net/smc: allow cdc msg send rather than drop it with NULL sndbuf_desc Greg Kroah-Hartman
2023-11-15 19:27 ` [PATCH 6.1 354/379] net/smc: put sk reference if close work was canceled Greg Kroah-Hartman
2023-11-15 19:27 ` [PATCH 6.1 355/379] nvme: fix error-handling for io_uring nvme-passthrough Greg Kroah-Hartman
2023-11-15 19:27 ` [PATCH 6.1 356/379] tg3: power down device only on SYSTEM_POWER_OFF Greg Kroah-Hartman
2023-11-15 19:27 ` [PATCH 6.1 357/379] nbd: fix uaf in nbd_open Greg Kroah-Hartman
2023-11-15 19:27 ` [PATCH 6.1 358/379] blk-core: use pr_warn_ratelimited() in bio_check_ro() Greg Kroah-Hartman
2023-11-15 19:27 ` [PATCH 6.1 359/379] virtio/vsock: replace virtio_vsock_pkt with sk_buff Greg Kroah-Hartman
2023-11-15 19:27 ` [PATCH 6.1 360/379] vsock/virtio: remove socket from connected/bound list on shutdown Greg Kroah-Hartman
2023-11-15 19:27 ` [PATCH 6.1 361/379] r8169: respect userspace disabling IFF_MULTICAST Greg Kroah-Hartman
2023-11-15 19:27 ` [PATCH 6.1 362/379] i2c: iproc: handle invalid slave state Greg Kroah-Hartman
2023-11-15 19:27 ` [PATCH 6.1 363/379] netfilter: xt_recent: fix (increase) ipv6 literal buffer length Greg Kroah-Hartman
2023-11-15 19:27 ` [PATCH 6.1 364/379] netfilter: nft_redir: use `struct nf_nat_range2` throughout and deduplicate eval call-backs Greg Kroah-Hartman
2023-11-15 19:27 ` [PATCH 6.1 365/379] netfilter: nat: fix ipv6 nat redirect with mapped and scoped addresses Greg Kroah-Hartman
2023-11-15 19:27 ` [PATCH 6.1 366/379] RISC-V: Dont fail in riscv_of_parent_hartid() for disabled HARTs Greg Kroah-Hartman
2023-11-15 19:27 ` [PATCH 6.1 367/379] drm/syncobj: fix DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE Greg Kroah-Hartman
2023-11-15 19:27 ` [PATCH 6.1 368/379] ASoC: mediatek: mt8186_mt6366_rt1019_rt5682s: trivial: fix error messages Greg Kroah-Hartman
2023-11-15 19:27 ` [PATCH 6.1 369/379] ASoC: hdmi-codec: register hpd callback on component probe Greg Kroah-Hartman
2023-11-15 19:27 ` [PATCH 6.1 370/379] ASoC: dapm: fix clock get name Greg Kroah-Hartman
2023-11-15 19:27 ` [PATCH 6.1 371/379] spi: spi-zynq-qspi: add spi-mem to driver kconfig dependencies Greg Kroah-Hartman
2023-11-15 19:27 ` [PATCH 6.1 372/379] fbdev: imsttfb: Fix error path of imsttfb_probe() Greg Kroah-Hartman
2023-11-15 19:27 ` [PATCH 6.1 373/379] fbdev: imsttfb: fix a resource leak in probe Greg Kroah-Hartman
2023-11-15 19:27 ` [PATCH 6.1 374/379] fbdev: fsl-diu-fb: mark wr_reg_wa() static Greg Kroah-Hartman
2023-11-15 19:27 ` [PATCH 6.1 375/379] tracing/kprobes: Fix the order of argument descriptions Greg Kroah-Hartman
2023-11-15 19:27 ` [PATCH 6.1 376/379] io_uring/net: ensure socket is marked connected on connect retry Greg Kroah-Hartman
2023-11-15 19:27 ` [PATCH 6.1 377/379] x86/amd_nb: Use Family 19h Models 60h-7Fh Function 4 IDs Greg Kroah-Hartman
2023-11-15 19:27 ` [PATCH 6.1 378/379] Revert "mmc: core: Capture correct oemid-bits for eMMC cards" Greg Kroah-Hartman
2023-11-15 19:27 ` [PATCH 6.1 379/379] btrfs: use u64 for buffer sizes in the tree search ioctls Greg Kroah-Hartman
2023-11-15 22:31 ` [PATCH 6.1 000/379] 6.1.63-rc1 review SeongJae Park
2023-11-15 23:26 ` Florian Fainelli
2023-11-16 18:23 ` Naresh Kamboju
2023-11-16 23:43 ` Guenter Roeck
2023-11-17  9:14 ` Ron Economos
2023-11-17 17:01 ` Pavel Machek
2023-11-17 19:27 ` Allen Pais
2023-11-17 19:57 ` Pavel Machek

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20231115192657.646943057@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=herbert@gondor.apana.org.au \
    --cc=patches@lists.linux.dev \
    --cc=sashal@kernel.org \
    --cc=stable@vger.kernel.org \
    --cc=yekai13@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox