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

!10210 hns3 udma: functions related to CQ bank IDs are supported.

Merge Pull Request from: @zhaoweibo3 
 
driver inclusion
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/IAE3IT


CVE: NA

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

This patch support a function that cq bank id
is related to port ID now.

Fixes: fd37bda1 ("hns3 udma: Modify qpn alloc function when share jfr is disabled.")
Signed-off-by: default avatarQi Xu <xuqi54@hisilicon.com>
Signed-off-by: default avatarJie Lei <leijie31@huawei.com>
Signed-off-by: default avatarWeibo Zhao <zhaoweibo3@huawei.com>
 
Link:https://gitee.com/openeuler/kernel/pulls/10210

 

Reviewed-by: default avatarChunzhi Hu <huchunzhi@huawei.com>
Signed-off-by: default avatarYang Yingliang <yangyingliang@huawei.com>
parents 53e3852f 99db780a
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -388,6 +388,9 @@ void udma_init_debugfs(void)

void udma_cleanup_debugfs(void)
{
	if (IS_ERR_OR_NULL(udma_dbgfs_root))
		return;

	debugfs_remove_recursive(udma_dbgfs_root);
	udma_dbgfs_root = NULL;
}
+8 −5
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@

#define MTT_MIN_COUNT				2

#define UDMA_NUM_QP_EN				0x2
#define UDMA_QP_BANK_NUM			8
#define QP_BANKID_SHIFT				3
#define QP_BANKID_MASK				GENMASK(2, 0)
@@ -438,6 +439,7 @@ struct udma_ucontext {
	uint32_t			eid_index;
	struct list_head		pgdir_list;
	struct mutex			pgdir_mutex;
	uint8_t				cq_bank_id;
};

struct udma_cmd_context {
@@ -496,7 +498,6 @@ struct udma_cmd_mailbox {
};

struct udma_netdev {
	spinlock_t		lock;
	struct net_device	*netdevs[UDMA_MAX_PORTS];
};

@@ -560,6 +561,7 @@ struct udma_hw {

struct udma_caps {
	uint64_t		fw_ver;
	uint8_t			num_qp_en;
	uint8_t			num_ports;
	int			pkey_table_len[UDMA_MAX_PORTS];
	int			local_ca_ack_delay;
@@ -698,10 +700,10 @@ struct udma_caps {
	uint8_t			reorder_cq_shift;
	uint32_t		onflight_size;
	uint8_t			dynamic_ack_timeout;
	uint32_t		num_jfc_shift;
	uint32_t		num_jfs_shift;
	uint32_t		num_jfr_shift;
	uint32_t		num_jetty_shift;
	uint32_t		num_jfc;
	uint32_t		num_jfs;
	uint32_t		num_jfr;
	uint32_t		num_jetty;
	uint8_t			poe_ch_num;
	uint32_t		speed;
	uint32_t		max_eid_cnt;
@@ -766,6 +768,7 @@ struct udma_jfc_table {
	struct udma_hem_table	table;
	struct udma_bank	bank[UDMA_CQ_BANK_NUM];
	struct mutex		bank_mutex;
	uint32_t		ctx_num[UDMA_CQ_BANK_NUM];
};

struct udma_jfs_table {
+5 −1
Original line number Diff line number Diff line
@@ -68,6 +68,7 @@ static int add_eid_entry(struct udma_dev *udma_dev, union ubcore_eid eid,
			 uint32_t eid_index)
{
	struct udma_eid *udma_eid;
	int local_ret;
	int ret;

	udma_eid = kcalloc(1, sizeof(*udma_eid), GFP_KERNEL);
@@ -92,7 +93,10 @@ static int add_eid_entry(struct udma_dev *udma_dev, union ubcore_eid eid,

	return ret;
err_store:
	clear_gmv_table(udma_dev, eid_index);
	local_ret = clear_gmv_table(udma_dev, eid_index);
	if (local_ret)
		dev_err(udma_dev->dev,
			"Failed to clear eid from GMV table, ret = %d.\n", local_ret);
err_config:
	kfree(udma_eid);
	return ret;
+10 −5
Original line number Diff line number Diff line
@@ -203,6 +203,16 @@ static void aeq_event_report(struct udma_dev *udma_dev,
	uint32_t queue_num = irq_work->queue_num;
	struct udma_aeqe *aeqe = &irq_work->aeqe;
	int event_type = irq_work->event_type;
	uint32_t *tmp = (uint32_t *)aeqe;
	int sub_type;

	sub_type = udma_get_field(aeqe->asyn,
				  UDMA_AEQE_SUB_TYPE_M,
				  UDMA_AEQE_SUB_TYPE_S);
	if (event_type != UDMA_EVENT_TYPE_COMM_EST)
		dev_err(udma_dev->dev,
			"print AEQE: 0x%x, 0x%x queue:0x%x event_type:0x%x, sub_type:0x%x\n",
			*tmp, *(tmp + 1), queue_num, event_type, sub_type);

	switch (event_type) {
	case UDMA_EVENT_TYPE_COMM_EST:
@@ -327,11 +337,6 @@ static int udma_aeq_int(struct udma_dev *udma_dev, struct udma_eq *eq)
					   UDMA_AEQE_EVENT_QUEUE_NUM_M,
					   UDMA_AEQE_EVENT_QUEUE_NUM_S);
		tmp = (uint32_t *)aeqe;
		if (event_type != UDMA_EVENT_TYPE_COMM_EST)
			dev_err(udma_dev->dev, "print AEQE: 0x%x, 0x%x; "
				"queue:0x%x event_type:0x%x, sub_type:0x%x\n",
				*tmp, *(tmp + 1), queue_num, event_type,
				sub_type);

		eq->event_type = event_type;
		eq->sub_type = sub_type;
+4 −2
Original line number Diff line number Diff line
@@ -1881,8 +1881,10 @@ void udma_buf_free(struct udma_dev *udma_dev, struct udma_buf *buf)
static void mtr_free_bufs(struct udma_dev *udma_dev, struct udma_mtr *mtr)
{
	/* release user buffers */
	if (mtr->umem) {
		ubcore_umem_release(mtr->umem);
		mtr->umem = NULL;
	}

	/* release kernel buffers */
	udma_buf_free(udma_dev, mtr->kmem);
Loading