RDMA/hns: Add mailbox's implementation for hip08 RoCE driver
[linux-block.git] / drivers / infiniband / hw / hns / hns_roce_hw_v2.h
CommitLineData
a04ff739
WHX
1/*
2 * Copyright (c) 2016-2017 Hisilicon Limited.
3 *
4 * This software is available to you under a choice of one of two
5 * licenses. You may choose to be licensed under the terms of the GNU
6 * General Public License (GPL) Version 2, available from the file
7 * COPYING in the main directory of this source tree, or the
8 * OpenIB.org BSD license below:
9 *
10 * Redistribution and use in source and binary forms, with or
11 * without modification, are permitted provided that the following
12 * conditions are met:
13 *
14 * - Redistributions of source code must retain the above
15 * copyright notice, this list of conditions and the following
16 * disclaimer.
17 *
18 * - Redistributions in binary form must reproduce the above
19 * copyright notice, this list of conditions and the following
20 * disclaimer in the documentation and/or other materials
21 * provided with the distribution.
22 *
23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
27 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
28 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
29 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30 * SOFTWARE.
31 */
32
33#ifndef _HNS_ROCE_HW_V2_H
34#define _HNS_ROCE_HW_V2_H
35
cfc85f3e
WHX
36#include <linux/bitops.h>
37
38#define HNS_ROCE_VF_QPC_BT_NUM 256
39#define HNS_ROCE_VF_SRQC_BT_NUM 64
40#define HNS_ROCE_VF_CQC_BT_NUM 64
41#define HNS_ROCE_VF_MPT_BT_NUM 64
42#define HNS_ROCE_VF_EQC_NUM 64
43#define HNS_ROCE_VF_SMAC_NUM 32
44#define HNS_ROCE_VF_SGID_NUM 32
45#define HNS_ROCE_VF_SL_NUM 8
46
47#define HNS_ROCE_V2_MAX_QP_NUM 0x2000
48#define HNS_ROCE_V2_MAX_WQE_NUM 0x8000
49#define HNS_ROCE_V2_MAX_CQ_NUM 0x8000
50#define HNS_ROCE_V2_MAX_CQE_NUM 0x400000
51#define HNS_ROCE_V2_MAX_RQ_SGE_NUM 0x100
52#define HNS_ROCE_V2_MAX_SQ_SGE_NUM 0xff
53#define HNS_ROCE_V2_MAX_SQ_INLINE 0x20
54#define HNS_ROCE_V2_UAR_NUM 256
55#define HNS_ROCE_V2_PHY_UAR_NUM 1
56#define HNS_ROCE_V2_MAX_MTPT_NUM 0x8000
57#define HNS_ROCE_V2_MAX_MTT_SEGS 0x100000
58#define HNS_ROCE_V2_MAX_CQE_SEGS 0x10000
59#define HNS_ROCE_V2_MAX_PD_NUM 0x400000
60#define HNS_ROCE_V2_MAX_QP_INIT_RDMA 128
61#define HNS_ROCE_V2_MAX_QP_DEST_RDMA 128
62#define HNS_ROCE_V2_MAX_SQ_DESC_SZ 64
63#define HNS_ROCE_V2_MAX_RQ_DESC_SZ 16
64#define HNS_ROCE_V2_MAX_SRQ_DESC_SZ 64
65#define HNS_ROCE_V2_QPC_ENTRY_SZ 256
66#define HNS_ROCE_V2_IRRL_ENTRY_SZ 64
67#define HNS_ROCE_V2_CQC_ENTRY_SZ 64
68#define HNS_ROCE_V2_MTPT_ENTRY_SZ 64
69#define HNS_ROCE_V2_MTT_ENTRY_SZ 64
70#define HNS_ROCE_V2_CQE_ENTRY_SIZE 32
71#define HNS_ROCE_V2_PAGE_SIZE_SUPPORTED 0xFFFFF000
72#define HNS_ROCE_V2_MAX_INNER_MTPT_NUM 2
a04ff739
WHX
73#define HNS_ROCE_CMQ_TX_TIMEOUT 200
74
75#define HNS_ROCE_CMD_FLAG_IN_VALID_SHIFT 0
76#define HNS_ROCE_CMD_FLAG_OUT_VALID_SHIFT 1
77#define HNS_ROCE_CMD_FLAG_NEXT_SHIFT 2
78#define HNS_ROCE_CMD_FLAG_WR_OR_RD_SHIFT 3
79#define HNS_ROCE_CMD_FLAG_NO_INTR_SHIFT 4
80#define HNS_ROCE_CMD_FLAG_ERR_INTR_SHIFT 5
81
82#define HNS_ROCE_CMD_FLAG_IN BIT(HNS_ROCE_CMD_FLAG_IN_VALID_SHIFT)
83#define HNS_ROCE_CMD_FLAG_OUT BIT(HNS_ROCE_CMD_FLAG_OUT_VALID_SHIFT)
84#define HNS_ROCE_CMD_FLAG_NEXT BIT(HNS_ROCE_CMD_FLAG_NEXT_SHIFT)
85#define HNS_ROCE_CMD_FLAG_WR BIT(HNS_ROCE_CMD_FLAG_WR_OR_RD_SHIFT)
86#define HNS_ROCE_CMD_FLAG_NO_INTR BIT(HNS_ROCE_CMD_FLAG_NO_INTR_SHIFT)
87#define HNS_ROCE_CMD_FLAG_ERR_INTR BIT(HNS_ROCE_CMD_FLAG_ERR_INTR_SHIFT)
88
89#define HNS_ROCE_CMQ_DESC_NUM_S 3
90#define HNS_ROCE_CMQ_EN_B 16
91#define HNS_ROCE_CMQ_ENABLE BIT(HNS_ROCE_CMQ_EN_B)
92
93/* CMQ command */
94enum hns_roce_opcode_type {
95 HNS_ROCE_OPC_QUERY_HW_VER = 0x8000,
96 HNS_ROCE_OPC_CFG_GLOBAL_PARAM = 0x8001,
97 HNS_ROCE_OPC_ALLOC_PF_RES = 0x8004,
98 HNS_ROCE_OPC_QUERY_PF_RES = 0x8400,
99 HNS_ROCE_OPC_ALLOC_VF_RES = 0x8401,
100 HNS_ROCE_OPC_CFG_BT_ATTR = 0x8506,
101};
102
103enum {
104 TYPE_CRQ,
105 TYPE_CSQ,
106};
107
108enum hns_roce_cmd_return_status {
109 CMD_EXEC_SUCCESS = 0,
110 CMD_NO_AUTH = 1,
111 CMD_NOT_EXEC = 2,
112 CMD_QUEUE_FULL = 3,
113};
114
cfc85f3e
WHX
115struct hns_roce_query_version {
116 __le16 rocee_vendor_id;
117 __le16 rocee_hw_version;
118 __le32 rsv[5];
119};
120
121struct hns_roce_cfg_global_param {
122 __le32 time_cfg_udp_port;
123 __le32 rsv[5];
124};
125
126#define CFG_GLOBAL_PARAM_DATA_0_ROCEE_TIME_1US_CFG_S 0
127#define CFG_GLOBAL_PARAM_DATA_0_ROCEE_TIME_1US_CFG_M GENMASK(9, 0)
128
129#define CFG_GLOBAL_PARAM_DATA_0_ROCEE_UDP_PORT_S 16
130#define CFG_GLOBAL_PARAM_DATA_0_ROCEE_UDP_PORT_M GENMASK(31, 16)
131
132struct hns_roce_pf_res {
133 __le32 rsv;
134 __le32 qpc_bt_idx_num;
135 __le32 srqc_bt_idx_num;
136 __le32 cqc_bt_idx_num;
137 __le32 mpt_bt_idx_num;
138 __le32 eqc_bt_idx_num;
139};
140
141#define PF_RES_DATA_1_PF_QPC_BT_IDX_S 0
142#define PF_RES_DATA_1_PF_QPC_BT_IDX_M GENMASK(10, 0)
143
144#define PF_RES_DATA_1_PF_QPC_BT_NUM_S 16
145#define PF_RES_DATA_1_PF_QPC_BT_NUM_M GENMASK(27, 16)
146
147#define PF_RES_DATA_2_PF_SRQC_BT_IDX_S 0
148#define PF_RES_DATA_2_PF_SRQC_BT_IDX_M GENMASK(8, 0)
149
150#define PF_RES_DATA_2_PF_SRQC_BT_NUM_S 16
151#define PF_RES_DATA_2_PF_SRQC_BT_NUM_M GENMASK(25, 16)
152
153#define PF_RES_DATA_3_PF_CQC_BT_IDX_S 0
154#define PF_RES_DATA_3_PF_CQC_BT_IDX_M GENMASK(8, 0)
155
156#define PF_RES_DATA_3_PF_CQC_BT_NUM_S 16
157#define PF_RES_DATA_3_PF_CQC_BT_NUM_M GENMASK(25, 16)
158
159#define PF_RES_DATA_4_PF_MPT_BT_IDX_S 0
160#define PF_RES_DATA_4_PF_MPT_BT_IDX_M GENMASK(8, 0)
161
162#define PF_RES_DATA_4_PF_MPT_BT_NUM_S 16
163#define PF_RES_DATA_4_PF_MPT_BT_NUM_M GENMASK(25, 16)
164
165#define PF_RES_DATA_5_PF_EQC_BT_IDX_S 0
166#define PF_RES_DATA_5_PF_EQC_BT_IDX_M GENMASK(8, 0)
167
168#define PF_RES_DATA_5_PF_EQC_BT_NUM_S 16
169#define PF_RES_DATA_5_PF_EQC_BT_NUM_M GENMASK(25, 16)
170
171struct hns_roce_vf_res_a {
172 u32 vf_id;
173 u32 vf_qpc_bt_idx_num;
174 u32 vf_srqc_bt_idx_num;
175 u32 vf_cqc_bt_idx_num;
176 u32 vf_mpt_bt_idx_num;
177 u32 vf_eqc_bt_idx_num;
178};
179
180#define VF_RES_A_DATA_1_VF_QPC_BT_IDX_S 0
181#define VF_RES_A_DATA_1_VF_QPC_BT_IDX_M GENMASK(10, 0)
182
183#define VF_RES_A_DATA_1_VF_QPC_BT_NUM_S 16
184#define VF_RES_A_DATA_1_VF_QPC_BT_NUM_M GENMASK(27, 16)
185
186#define VF_RES_A_DATA_2_VF_SRQC_BT_IDX_S 0
187#define VF_RES_A_DATA_2_VF_SRQC_BT_IDX_M GENMASK(8, 0)
188
189#define VF_RES_A_DATA_2_VF_SRQC_BT_NUM_S 16
190#define VF_RES_A_DATA_2_VF_SRQC_BT_NUM_M GENMASK(25, 16)
191
192#define VF_RES_A_DATA_3_VF_CQC_BT_IDX_S 0
193#define VF_RES_A_DATA_3_VF_CQC_BT_IDX_M GENMASK(8, 0)
194
195#define VF_RES_A_DATA_3_VF_CQC_BT_NUM_S 16
196#define VF_RES_A_DATA_3_VF_CQC_BT_NUM_M GENMASK(25, 16)
197
198#define VF_RES_A_DATA_4_VF_MPT_BT_IDX_S 0
199#define VF_RES_A_DATA_4_VF_MPT_BT_IDX_M GENMASK(8, 0)
200
201#define VF_RES_A_DATA_4_VF_MPT_BT_NUM_S 16
202#define VF_RES_A_DATA_4_VF_MPT_BT_NUM_M GENMASK(25, 16)
203
204#define VF_RES_A_DATA_5_VF_EQC_IDX_S 0
205#define VF_RES_A_DATA_5_VF_EQC_IDX_M GENMASK(8, 0)
206
207#define VF_RES_A_DATA_5_VF_EQC_NUM_S 16
208#define VF_RES_A_DATA_5_VF_EQC_NUM_M GENMASK(25, 16)
209
210struct hns_roce_vf_res_b {
211 u32 rsv0;
212 u32 vf_smac_idx_num;
213 u32 vf_sgid_idx_num;
214 u32 vf_qid_idx_sl_num;
215 u32 rsv[2];
216};
217
218#define VF_RES_B_DATA_0_VF_ID_S 0
219#define VF_RES_B_DATA_0_VF_ID_M GENMASK(7, 0)
220
221#define VF_RES_B_DATA_1_VF_SMAC_IDX_S 0
222#define VF_RES_B_DATA_1_VF_SMAC_IDX_M GENMASK(7, 0)
223
224#define VF_RES_B_DATA_1_VF_SMAC_NUM_S 8
225#define VF_RES_B_DATA_1_VF_SMAC_NUM_M GENMASK(16, 8)
226
227#define VF_RES_B_DATA_2_VF_SGID_IDX_S 0
228#define VF_RES_B_DATA_2_VF_SGID_IDX_M GENMASK(7, 0)
229
230#define VF_RES_B_DATA_2_VF_SGID_NUM_S 8
231#define VF_RES_B_DATA_2_VF_SGID_NUM_M GENMASK(16, 8)
232
233#define VF_RES_B_DATA_3_VF_QID_IDX_S 0
234#define VF_RES_B_DATA_3_VF_QID_IDX_M GENMASK(9, 0)
235
236#define VF_RES_B_DATA_3_VF_SL_NUM_S 16
237#define VF_RES_B_DATA_3_VF_SL_NUM_M GENMASK(19, 16)
238
a04ff739
WHX
239struct hns_roce_cmq_desc {
240 u16 opcode;
241 u16 flag;
242 u16 retval;
243 u16 rsv;
244 u32 data[6];
245};
246
a680f2f3
WHX
247#define ROCEE_VF_MB_CFG0_REG 0x40
248#define ROCEE_VF_MB_STATUS_REG 0x58
249
250#define HNS_ROCE_V2_GO_BIT_TIMEOUT_MSECS 10000
251
252#define HNS_ROCE_HW_RUN_BIT_SHIFT 31
253#define HNS_ROCE_HW_MB_STATUS_MASK 0xFF
254
255#define HNS_ROCE_VF_MB4_TAG_MASK 0xFFFFFF00
256#define HNS_ROCE_VF_MB4_TAG_SHIFT 8
257
258#define HNS_ROCE_VF_MB4_CMD_MASK 0xFF
259#define HNS_ROCE_VF_MB4_CMD_SHIFT 0
260
261#define HNS_ROCE_VF_MB5_EVENT_MASK 0x10000
262#define HNS_ROCE_VF_MB5_EVENT_SHIFT 16
263
264#define HNS_ROCE_VF_MB5_TOKEN_MASK 0xFFFF
265#define HNS_ROCE_VF_MB5_TOKEN_SHIFT 0
266
a04ff739
WHX
267struct hns_roce_v2_cmq_ring {
268 dma_addr_t desc_dma_addr;
269 struct hns_roce_cmq_desc *desc;
270 u32 head;
271 u32 tail;
272
273 u16 buf_size;
274 u16 desc_num;
275 int next_to_use;
276 int next_to_clean;
277 u8 flag;
278 spinlock_t lock; /* command queue lock */
279};
280
281struct hns_roce_v2_cmq {
282 struct hns_roce_v2_cmq_ring csq;
283 struct hns_roce_v2_cmq_ring crq;
284 u16 tx_timeout;
285 u16 last_status;
286};
287
288struct hns_roce_v2_priv {
289 struct hns_roce_v2_cmq cmq;
290};
291
292#endif