Unverified Commit acaaafd2 authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!6555 udma: fix bugs in non-share jfr and remove rm mode

Merge Pull Request from: @zhaoweibo3 
 
The patches fixes the following problems:
1、Adaptation of the chip logic.
2、Modify the process of querying JFR context in DFX.
3、Modify qpn alloc function when share jfr is disabled.
4、Change the number of Jetty creation times to the maximum.
5、remove RM mode of jetty. No longer support RM mode.
6、fix a bug of wrong ext_sge address in RC mode.

https://gitee.com/open_euler/dashboard?issue_id=I8V1IQ 
 
Link:https://gitee.com/openeuler/kernel/pulls/6555

 

Reviewed-by: default avatarChunzhi Hu <huchunzhi@huawei.com>
Signed-off-by: default avatarJialin Zhang <zhangjialin11@huawei.com>
parents 23e3d9bd 78061f84
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -34,7 +34,6 @@
enum {
	UDMA_MMAP_UAR_PAGE,
	UDMA_MMAP_DWQE_PAGE,
	UDMA_MMAP_DCA_PAGE,
	UDMA_MMAP_RESET_PAGE,
	UDMA_MMAP_TYPE_DCA
};
@@ -64,6 +63,7 @@ struct udma_create_jfr_ucmd {
	uint32_t sqe_shift;
	uint32_t sge_cnt;
	uint32_t sge_shift;
	bool     share_jfr;
};

enum udma_jfr_cap_flags {
@@ -116,6 +116,7 @@ struct udma_create_tp_ucmd {
struct udma_create_jetty_ucmd {
	struct udma_create_tp_ucmd	create_tp_ucmd;
	uint32_t			jfr_id;
	uint32_t			srqn;
	uint64_t			buf_addr;
	uint64_t			sdb_addr;
};
@@ -138,8 +139,8 @@ struct udma_create_tp_resp {
	uint64_t		cap_flags;
	uint32_t		qpn;
	uint32_t		path_mtu;
	uint8_t			priority;
	struct udp_srcport	um_srcport;
	uint8_t			priority;
};

struct udma_create_jetty_resp {
@@ -187,7 +188,6 @@ struct udma_create_ctx_resp {
	uint8_t chip_id;
	uint8_t die_id;
	uint8_t func_id;
	bool rm_support;
};

struct flush_cqe_param {
+20 −9
Original line number Diff line number Diff line
@@ -21,6 +21,8 @@
#include "hns3_udma_cmd.h"

static int debug_switch = 1;
static int cnt_mailbox = 1;

int udma_cmd_init(struct udma_dev *udma_dev)
{
	sema_init(&udma_dev->cmd.poll_sem, 1);
@@ -268,24 +270,30 @@ void udma_cmq_setup_basic_desc(struct udma_cmq_desc *desc,
static void dump_desc(struct udma_dev *dev,
		      struct udma_cmq_desc *desc)
{
	if (desc->opcode == UDMA_OPC_QUERY_MB_ST)
	static int num_mailbox;

	if (desc->opcode == UDMA_OPC_QUERY_MB_ST ||
	    desc->opcode == UDMA_OPC_CFG_GMV_BT)
		return;

	if (desc->opcode == UDMA_OPC_POST_MB && cnt_mailbox)
		++num_mailbox;

	if (((desc->data[SUB_OPCODE_IDX] & 0xFF) ==
	     UDMA_CMD_WRITE_QPC_TIMER_BT0) ||
	    ((desc->data[SUB_OPCODE_IDX] & 0xFF) ==
	     UDMA_CMD_WRITE_CQC_TIMER_BT0))
		dev_err_ratelimited(dev->dev,
			"Send cmd opcode:0x%4x, data: %08x %08x %08x %08x %08x %08x\n",
			desc->opcode, desc->data[0],
			desc->data[1], desc->data[2],
			desc->data[3], desc->data[4], desc->data[5]);
			"Send cmd opcode:0x%4x, data: %08x %08x %08x %08x %08x %08x, mlbox: %08x\n",
			desc->opcode, desc->data[0], desc->data[1],
			desc->data[2], desc->data[3], desc->data[4],
			desc->data[5], num_mailbox);
	else
		dev_info_ratelimited(dev->dev,
			"Send cmd opcode:0x%4x, data: %08x %08x %08x %08x %08x %08x\n",
			desc->opcode, desc->data[0],
			desc->data[1], desc->data[2],
			desc->data[3], desc->data[4], desc->data[5]);
			"Send cmd opcode:0x%4x, data: %08x %08x %08x %08x %08x %08x, mlbox: %08x\n",
			desc->opcode, desc->data[0], desc->data[1],
			desc->data[2], desc->data[3], desc->data[4],
			desc->data[5], num_mailbox);
}

static int __udma_cmq_send(struct udma_dev *dev, struct udma_cmq_desc *desc,
@@ -609,3 +617,6 @@ int udma_cmd_mbox(struct udma_dev *dev, struct udma_cmq_desc *desc,

module_param(debug_switch, int, 0444);
MODULE_PARM_DESC(debug_switch, "set debug print ON, default: 1");

module_param(cnt_mailbox, int, 0444);
MODULE_PARM_DESC(cnt_mailbox, "Count the number of mailbox, default: 1");
+1 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@
#ifndef _UDMA_COMMON_H
#define _UDMA_COMMON_H
#include <linux/bitfield.h>
#include <linux/types.h>

#define ub_write(dev, reg, val)	writel((val), (dev)->reg_base + (reg))
#define ub_read(dev, reg)	readl((dev)->reg_base + (reg))
+3 −2
Original line number Diff line number Diff line
@@ -321,6 +321,7 @@ static uint32_t alloc_dca_num(struct udma_dca_ctx *ctx)

	stop_free_dca_buf(ctx, ret);
	update_dca_buf_status(ctx, ret, false);

	return ret;
}

@@ -548,8 +549,7 @@ static void udca_mem_aging_work(struct work_struct *work)
						aging_dwork.work);
	struct udma_ucontext *ucontext = container_of(ctx, struct udma_ucontext,
						      dca_ctx);
	struct udma_dev *udma_dev = container_of(ucontext->uctx.ub_dev,
						 struct udma_dev, ub_dev);
	struct udma_dev *udma_dev = to_udma_dev(ucontext->uctx.ub_dev);

	cancel_delayed_work(&ctx->aging_dwork);
	process_aging_dca_mem(udma_dev, ctx);
@@ -863,6 +863,7 @@ static uint32_t assign_dca_pages(struct udma_dca_ctx *ctx, uint32_t buf_id,
	attr.unit = unit;
	attr.max = count;
	travel_dca_pages(ctx, &attr, assign_dca_pages_proc);

	return attr.total;
}

+3 −4
Original line number Diff line number Diff line
@@ -42,7 +42,6 @@
#define UDMA_DCA_TAG_MASK GENMASK(28, 22)
#define UDMA_DCA_OWN_MASK GENMASK(21, 0)

#define UDMA_DCA_BUF_ID_TO_TAG(buf_id) (((buf_id) & UDMA_DCA_TAG_MASK) >> 22)
#define UDMA_DCA_BUF_ID_TO_QPN(buf_id) ((buf_id) & UDMA_DCA_OWN_MASK)
#define UDMA_DCA_TO_BUF_ID(qpn, tag) (((qpn) & UDMA_DCA_OWN_MASK) | \
				      (((tag) << 22) & UDMA_DCA_TAG_MASK))
@@ -56,7 +55,7 @@ struct dca_page_state {
};

struct dca_mem {
	uint32_t		flags;
	uint32_t		flags; /* dca mem usages status */
	struct list_head	list; /* link to mem list in dca context */
	spinlock_t		lock; /* protect the @flags and @list */
	uint32_t		page_count; /* page count in this mem obj */
@@ -214,4 +213,4 @@ void udma_unregister_udca(struct udma_dev *udma_dev,

void udma_enum_dca_pool(struct udma_dca_ctx *dca_ctx, void *param,
			udma_dca_enum_callback cb);
#endif
#endif /* _UDMA_DCA_H */
Loading