File Index
Files and directories
Sign in
FILE

bnge_rmem.h

File preview with syntax highlighting.

linux-6.19.14/drivers/net/ethernet/broadcom/bnge/bnge_rmem.h C
  1/* SPDX-License-Identifier: GPL-2.0 */
  2/* Copyright (c) 2025 Broadcom */
  3
  4#ifndef _BNGE_RMEM_H_
  5#define _BNGE_RMEM_H_
  6
  7struct bnge_ctx_mem_type;
  8struct bnge_dev;
  9struct bnge_net;
 10
 11#define PTU_PTE_VALID             0x1UL
 12#define PTU_PTE_LAST              0x2UL
 13#define PTU_PTE_NEXT_TO_LAST      0x4UL
 14
 15struct bnge_ring_mem_info {
 16	/* Number of pages to next level */
 17	int			nr_pages;
 18	int			page_size;
 19	u16			flags;
 20#define BNGE_RMEM_VALID_PTE_FLAG	1
 21#define BNGE_RMEM_RING_PTE_FLAG		2
 22#define BNGE_RMEM_USE_FULL_PAGE_FLAG	4
 23
 24	u16			depth;
 25
 26	void			**pg_arr;
 27	dma_addr_t		*dma_arr;
 28
 29	__le64			*pg_tbl;
 30	dma_addr_t		dma_pg_tbl;
 31
 32	int			vmem_size;
 33	void			**vmem;
 34
 35	struct bnge_ctx_mem_type	*ctx_mem;
 36};
 37
 38/* The hardware supports certain page sizes.
 39 * Use the supported page sizes to allocate the rings.
 40 */
 41#if (PAGE_SHIFT < 12)
 42#define BNGE_PAGE_SHIFT	12
 43#elif (PAGE_SHIFT <= 13)
 44#define BNGE_PAGE_SHIFT	PAGE_SHIFT
 45#elif (PAGE_SHIFT < 16)
 46#define BNGE_PAGE_SHIFT	13
 47#else
 48#define BNGE_PAGE_SHIFT	16
 49#endif
 50#define BNGE_PAGE_SIZE	(1 << BNGE_PAGE_SHIFT)
 51/* The RXBD length is 16-bit so we can only support page sizes < 64K */
 52#if (PAGE_SHIFT > 15)
 53#define BNGE_RX_PAGE_SHIFT 15
 54#else
 55#define BNGE_RX_PAGE_SHIFT PAGE_SHIFT
 56#endif
 57#define MAX_CTX_PAGES	(BNGE_PAGE_SIZE / 8)
 58#define MAX_CTX_TOTAL_PAGES	(MAX_CTX_PAGES * MAX_CTX_PAGES)
 59
 60struct bnge_ctx_pg_info {
 61	u32		entries;
 62	u32		nr_pages;
 63	void		*ctx_pg_arr[MAX_CTX_PAGES];
 64	dma_addr_t	ctx_dma_arr[MAX_CTX_PAGES];
 65	struct bnge_ring_mem_info ring_mem;
 66	struct bnge_ctx_pg_info **ctx_pg_tbl;
 67};
 68
 69#define BNGE_MAX_TQM_SP_RINGS		1
 70#define BNGE_MAX_TQM_FP_RINGS		8
 71#define BNGE_MAX_TQM_RINGS		\
 72	(BNGE_MAX_TQM_SP_RINGS + BNGE_MAX_TQM_FP_RINGS)
 73#define BNGE_BACKING_STORE_CFG_LEGACY_LEN	256
 74#define BNGE_SET_CTX_PAGE_ATTR(attr)					\
 75do {									\
 76	if (BNGE_PAGE_SIZE == 0x2000)					\
 77		attr = FUNC_BACKING_STORE_CFG_REQ_SRQ_PG_SIZE_PG_8K;	\
 78	else if (BNGE_PAGE_SIZE == 0x10000)				\
 79		attr = FUNC_BACKING_STORE_CFG_REQ_QPC_PG_SIZE_PG_64K;	\
 80	else								\
 81		attr = FUNC_BACKING_STORE_CFG_REQ_QPC_PG_SIZE_PG_4K;	\
 82} while (0)
 83
 84#define BNGE_CTX_MRAV_AV_SPLIT_ENTRY	0
 85
 86#define BNGE_CTX_QP	\
 87	FUNC_BACKING_STORE_QCAPS_V2_REQ_TYPE_QP
 88#define BNGE_CTX_SRQ	\
 89	FUNC_BACKING_STORE_QCAPS_V2_REQ_TYPE_SRQ
 90#define BNGE_CTX_CQ	\
 91	FUNC_BACKING_STORE_QCAPS_V2_REQ_TYPE_CQ
 92#define BNGE_CTX_VNIC	\
 93	FUNC_BACKING_STORE_QCAPS_V2_REQ_TYPE_VNIC
 94#define BNGE_CTX_STAT	\
 95	FUNC_BACKING_STORE_QCAPS_V2_REQ_TYPE_STAT
 96#define BNGE_CTX_STQM	\
 97	FUNC_BACKING_STORE_QCAPS_V2_REQ_TYPE_SP_TQM_RING
 98#define BNGE_CTX_FTQM	\
 99	FUNC_BACKING_STORE_QCAPS_V2_REQ_TYPE_FP_TQM_RING
100#define BNGE_CTX_MRAV	\
101	FUNC_BACKING_STORE_QCAPS_V2_REQ_TYPE_MRAV
102#define BNGE_CTX_TIM	\
103	FUNC_BACKING_STORE_QCAPS_V2_REQ_TYPE_TIM
104#define BNGE_CTX_TCK	\
105	FUNC_BACKING_STORE_QCAPS_V2_REQ_TYPE_TX_CK
106#define BNGE_CTX_RCK	\
107	FUNC_BACKING_STORE_QCAPS_V2_REQ_TYPE_RX_CK
108#define BNGE_CTX_MTQM	\
109	FUNC_BACKING_STORE_QCAPS_V2_REQ_TYPE_MP_TQM_RING
110#define BNGE_CTX_SQDBS	\
111	FUNC_BACKING_STORE_QCAPS_V2_REQ_TYPE_SQ_DB_SHADOW
112#define BNGE_CTX_RQDBS	\
113	FUNC_BACKING_STORE_QCAPS_V2_REQ_TYPE_RQ_DB_SHADOW
114#define BNGE_CTX_SRQDBS	\
115	FUNC_BACKING_STORE_QCAPS_V2_REQ_TYPE_SRQ_DB_SHADOW
116#define BNGE_CTX_CQDBS	\
117	FUNC_BACKING_STORE_QCAPS_V2_REQ_TYPE_CQ_DB_SHADOW
118#define BNGE_CTX_SRT_TRACE	\
119	FUNC_BACKING_STORE_QCAPS_V2_REQ_TYPE_SRT_TRACE
120#define BNGE_CTX_SRT2_TRACE	\
121	FUNC_BACKING_STORE_QCAPS_V2_REQ_TYPE_SRT2_TRACE
122#define BNGE_CTX_CRT_TRACE	\
123	FUNC_BACKING_STORE_QCAPS_V2_REQ_TYPE_CRT_TRACE
124#define BNGE_CTX_CRT2_TRACE	\
125	FUNC_BACKING_STORE_QCAPS_V2_REQ_TYPE_CRT2_TRACE
126#define BNGE_CTX_RIGP0_TRACE	\
127	FUNC_BACKING_STORE_QCAPS_V2_REQ_TYPE_RIGP0_TRACE
128#define BNGE_CTX_L2_HWRM_TRACE	\
129	FUNC_BACKING_STORE_QCAPS_V2_REQ_TYPE_L2_HWRM_TRACE
130#define BNGE_CTX_ROCE_HWRM_TRACE	\
131	FUNC_BACKING_STORE_QCAPS_V2_REQ_TYPE_ROCE_HWRM_TRACE
132
133#define BNGE_CTX_MAX		(BNGE_CTX_TIM + 1)
134#define BNGE_CTX_L2_MAX		(BNGE_CTX_FTQM + 1)
135#define BNGE_CTX_INV		((u16)-1)
136
137#define BNGE_CTX_V2_MAX	\
138	(FUNC_BACKING_STORE_QCAPS_V2_REQ_TYPE_ROCE_HWRM_TRACE + 1)
139
140#define BNGE_BS_CFG_ALL_DONE	\
141	FUNC_BACKING_STORE_CFG_V2_REQ_FLAGS_BS_CFG_ALL_DONE
142
143struct bnge_ctx_mem_type {
144	u16	type;
145	u16	entry_size;
146	u32	flags;
147#define BNGE_CTX_MEM_TYPE_VALID	\
148	FUNC_BACKING_STORE_QCAPS_V2_RESP_FLAGS_TYPE_VALID
149	u32	instance_bmap;
150	u8	init_value;
151	u8	entry_multiple;
152	u16	init_offset;
153#define	BNGE_CTX_INIT_INVALID_OFFSET	0xffff
154	u32	max_entries;
155	u32	min_entries;
156	u8	last:1;
157	u8	split_entry_cnt;
158#define BNGE_MAX_SPLIT_ENTRY	4
159	union {
160		struct {
161			u32	qp_l2_entries;
162			u32	qp_qp1_entries;
163			u32	qp_fast_qpmd_entries;
164		};
165		u32	srq_l2_entries;
166		u32	cq_l2_entries;
167		u32	vnic_entries;
168		struct {
169			u32	mrav_av_entries;
170			u32	mrav_num_entries_units;
171		};
172		u32	split[BNGE_MAX_SPLIT_ENTRY];
173	};
174	struct bnge_ctx_pg_info	*pg_info;
175};
176
177struct bnge_ctx_mem_info {
178	u8	tqm_fp_rings_count;
179	u32	flags;
180#define BNGE_CTX_FLAG_INITED	0x01
181	struct bnge_ctx_mem_type	ctx_arr[BNGE_CTX_V2_MAX];
182};
183
184struct bnge_ring_struct {
185	struct bnge_ring_mem_info	ring_mem;
186
187	u16			fw_ring_id;
188	union {
189		u16		grp_idx;
190		u16		map_idx; /* Used by NQs */
191	};
192	u32			handle;
193	u8			queue_id;
194};
195
196int bnge_alloc_ring(struct bnge_dev *bd, struct bnge_ring_mem_info *rmem);
197void bnge_free_ring(struct bnge_dev *bd, struct bnge_ring_mem_info *rmem);
198int bnge_alloc_ctx_mem(struct bnge_dev *bd);
199void bnge_free_ctx_mem(struct bnge_dev *bd);
200void bnge_init_ring_struct(struct bnge_net *bn);
201
202#endif /* _BNGE_RMEM_H_ */
~/ Read-only file preview.