All of lore.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.