1 // SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause
2 /*
3 * Copyright 2018-2026 Amazon.com, Inc. or its affiliates. All rights reserved.
4 */
5
6 #include <linux/crc16.h>
7 #include <linux/log2.h>
8
9 #include "efa_com.h"
10 #include "efa_regs_defs.h"
11
12 #define ADMIN_CMD_TIMEOUT_US 30000000 /* usecs */
13
14 #define EFA_REG_READ_TIMEOUT_US 50000 /* usecs */
15 #define EFA_MMIO_READ_INVALID 0xffffffff
16
17 #define EFA_POLL_INTERVAL_MS 100 /* msecs */
18
19 #define EFA_ASYNC_QUEUE_DEPTH 16
20 #define EFA_ADMIN_QUEUE_DEPTH 32
21
22 #define EFA_CTRL_MAJOR 0
23 #define EFA_CTRL_MINOR 0
24 #define EFA_CTRL_SUB_MINOR 1
25
26 #define EFA_CRC16_INIT_VAL 0xffff
27
28 #define EFA_ADMIN_SQ_MAX_ENT_SIZE sizeof(struct efa_admin_aq_entry_v2)
29
30 #define EFA_CRC_MIN_API_VERSION_MAJOR 0
31 #define EFA_CRC_MIN_API_VERSION_MINOR 2
32
33 #define EFA_ADMIN_V2_MIN_API_VERSION_MAJOR 0
34 #define EFA_ADMIN_V2_MIN_API_VERSION_MINOR 3
35
36 #define EFA_MIN_API_VERSION_MAJOR 0
37 #define EFA_MIN_API_VERSION_MINOR 1
38
39 enum efa_cmd_status {
40 EFA_CMD_UNUSED,
41 EFA_CMD_ALLOCATED,
42 EFA_CMD_SUBMITTED,
43 EFA_CMD_COMPLETED,
44 };
45
46 struct efa_comp_ctx {
47 struct completion wait_event;
48 struct efa_admin_acq_entry *user_cqe;
49 u32 comp_size;
50 enum efa_cmd_status status;
51 u16 cmd_id;
52 u8 cmd_opcode;
53 };
54
efa_com_cmd_str(u8 cmd)55 static const char *efa_com_cmd_str(u8 cmd)
56 {
57 #define EFA_CMD_STR_CASE(_cmd) case EFA_ADMIN_##_cmd: return #_cmd
58
59 switch (cmd) {
60 EFA_CMD_STR_CASE(CREATE_QP);
61 EFA_CMD_STR_CASE(MODIFY_QP);
62 EFA_CMD_STR_CASE(QUERY_QP);
63 EFA_CMD_STR_CASE(DESTROY_QP);
64 EFA_CMD_STR_CASE(CREATE_AH);
65 EFA_CMD_STR_CASE(DESTROY_AH);
66 EFA_CMD_STR_CASE(REG_MR);
67 EFA_CMD_STR_CASE(DEREG_MR);
68 EFA_CMD_STR_CASE(CREATE_CQ);
69 EFA_CMD_STR_CASE(DESTROY_CQ);
70 EFA_CMD_STR_CASE(GET_FEATURE);
71 EFA_CMD_STR_CASE(SET_FEATURE);
72 EFA_CMD_STR_CASE(GET_STATS);
73 EFA_CMD_STR_CASE(ALLOC_PD);
74 EFA_CMD_STR_CASE(DEALLOC_PD);
75 EFA_CMD_STR_CASE(ALLOC_UAR);
76 EFA_CMD_STR_CASE(DEALLOC_UAR);
77 EFA_CMD_STR_CASE(CREATE_EQ);
78 EFA_CMD_STR_CASE(DESTROY_EQ);
79 default: return "unknown command opcode";
80 }
81 #undef EFA_CMD_STR_CASE
82 }
83
efa_com_set_dma_addr(dma_addr_t addr,u32 * addr_high,u32 * addr_low)84 void efa_com_set_dma_addr(dma_addr_t addr, u32 *addr_high, u32 *addr_low)
85 {
86 *addr_low = lower_32_bits(addr);
87 *addr_high = upper_32_bits(addr);
88 }
89
efa_com_construct_ver(u32 major,u32 minor)90 static u32 efa_com_construct_ver(u32 major, u32 minor)
91 {
92 u32 ver = 0;
93
94 EFA_SET(&ver, EFA_REGS_VERSION_MAJOR_VERSION, major);
95 EFA_SET(&ver, EFA_REGS_VERSION_MINOR_VERSION, minor);
96
97 return ver;
98 }
99
efa_com_reg_read32(struct efa_com_dev * edev,u16 offset)100 static u32 efa_com_reg_read32(struct efa_com_dev *edev, u16 offset)
101 {
102 struct efa_com_mmio_read *mmio_read = &edev->mmio_read;
103 struct efa_admin_mmio_req_read_less_resp *read_resp;
104 unsigned long exp_time;
105 u32 mmio_read_reg = 0;
106 u32 err;
107
108 read_resp = mmio_read->read_resp;
109
110 spin_lock(&mmio_read->lock);
111 mmio_read->seq_num++;
112
113 /* trash DMA req_id to identify when hardware is done */
114 read_resp->req_id = mmio_read->seq_num + 0x9aL;
115 EFA_SET(&mmio_read_reg, EFA_REGS_MMIO_REG_READ_REG_OFF, offset);
116 EFA_SET(&mmio_read_reg, EFA_REGS_MMIO_REG_READ_REQ_ID,
117 mmio_read->seq_num);
118
119 writel(mmio_read_reg, edev->reg_bar + EFA_REGS_MMIO_REG_READ_OFF);
120
121 exp_time = jiffies + usecs_to_jiffies(mmio_read->mmio_read_timeout);
122 do {
123 if (READ_ONCE(read_resp->req_id) == mmio_read->seq_num)
124 break;
125 udelay(1);
126 } while (time_is_after_jiffies(exp_time));
127
128 if (read_resp->req_id != mmio_read->seq_num) {
129 ibdev_err_ratelimited(
130 edev->efa_dev,
131 "Reading register timed out. expected: req id[%u] offset[%#x] actual: req id[%u] offset[%#x]\n",
132 mmio_read->seq_num, offset, read_resp->req_id,
133 read_resp->reg_off);
134 err = EFA_MMIO_READ_INVALID;
135 goto out;
136 }
137
138 if (read_resp->reg_off != offset) {
139 ibdev_err_ratelimited(
140 edev->efa_dev,
141 "Reading register failed: wrong offset provided\n");
142 err = EFA_MMIO_READ_INVALID;
143 goto out;
144 }
145
146 err = read_resp->reg_val;
147 out:
148 spin_unlock(&mmio_read->lock);
149 return err;
150 }
151
efa_com_admin_init_sq(struct efa_com_dev * edev)152 static int efa_com_admin_init_sq(struct efa_com_dev *edev)
153 {
154 struct efa_com_admin_queue *aq = &edev->aq;
155 struct efa_com_admin_sq *sq = &aq->sq;
156 u32 aq_caps = 0, admin_v2_min_ver = 0;
157 u32 addr_high, addr_low;
158
159 admin_v2_min_ver = efa_com_construct_ver(EFA_ADMIN_V2_MIN_API_VERSION_MAJOR,
160 EFA_ADMIN_V2_MIN_API_VERSION_MINOR);
161 if (edev->dev_api_ver >= admin_v2_min_ver) {
162 sq->entry_size = sizeof(struct efa_admin_aq_entry_v2);
163 sq->payload_offset = offsetof(struct efa_admin_aq_entry_v2, request_payload);
164 sq->proto_ver = EFA_ADMIN_V2_PROTO_VER;
165 } else {
166 sq->entry_size = sizeof(struct efa_admin_aq_entry);
167 sq->payload_offset = offsetof(struct efa_admin_aq_entry, request_payload);
168 sq->proto_ver = EFA_ADMIN_V1_PROTO_VER;
169 }
170
171 sq->max_payload_size = sq->entry_size - sq->payload_offset;
172
173 sq->buffer = dma_alloc_coherent(aq->dmadev, aq->depth * sq->entry_size,
174 &sq->dma_addr, GFP_KERNEL);
175 if (!sq->buffer)
176 return -ENOMEM;
177
178 spin_lock_init(&sq->lock);
179
180 sq->cc = 0;
181 sq->pc = 0;
182 sq->phase = 1;
183
184 sq->db_addr = (u32 __iomem *)(edev->reg_bar + EFA_REGS_AQ_PROD_DB_OFF);
185
186 addr_high = upper_32_bits(sq->dma_addr);
187 addr_low = lower_32_bits(sq->dma_addr);
188
189 writel(addr_low, edev->reg_bar + EFA_REGS_AQ_BASE_LO_OFF);
190 writel(addr_high, edev->reg_bar + EFA_REGS_AQ_BASE_HI_OFF);
191
192 EFA_SET(&aq_caps, EFA_REGS_AQ_CAPS_AQ_DEPTH, aq->depth);
193 EFA_SET(&aq_caps, EFA_REGS_AQ_CAPS_AQ_ENTRY_SIZE, sq->entry_size);
194
195 writel(aq_caps, edev->reg_bar + EFA_REGS_AQ_CAPS_OFF);
196
197 return 0;
198 }
199
efa_com_admin_init_cq(struct efa_com_dev * edev)200 static int efa_com_admin_init_cq(struct efa_com_dev *edev)
201 {
202 struct efa_com_admin_queue *aq = &edev->aq;
203 struct efa_com_admin_cq *cq = &aq->cq;
204 u16 size = aq->depth * sizeof(*cq->entries);
205 u32 acq_caps = 0, crc_min_ver = 0;
206 u32 addr_high, addr_low;
207
208 cq->entries =
209 dma_alloc_coherent(aq->dmadev, size, &cq->dma_addr, GFP_KERNEL);
210 if (!cq->entries)
211 return -ENOMEM;
212
213 spin_lock_init(&cq->lock);
214
215 crc_min_ver = efa_com_construct_ver(EFA_CRC_MIN_API_VERSION_MAJOR,
216 EFA_CRC_MIN_API_VERSION_MINOR);
217 if (edev->dev_api_ver >= crc_min_ver)
218 cq->validate_checksum = true;
219
220 cq->cc = 0;
221 cq->phase = 1;
222
223 addr_high = upper_32_bits(cq->dma_addr);
224 addr_low = lower_32_bits(cq->dma_addr);
225
226 writel(addr_low, edev->reg_bar + EFA_REGS_ACQ_BASE_LO_OFF);
227 writel(addr_high, edev->reg_bar + EFA_REGS_ACQ_BASE_HI_OFF);
228
229 EFA_SET(&acq_caps, EFA_REGS_ACQ_CAPS_ACQ_DEPTH, aq->depth);
230 EFA_SET(&acq_caps, EFA_REGS_ACQ_CAPS_ACQ_ENTRY_SIZE,
231 sizeof(struct efa_admin_acq_entry));
232 EFA_SET(&acq_caps, EFA_REGS_ACQ_CAPS_ACQ_MSIX_VECTOR,
233 aq->msix_vector_idx);
234
235 writel(acq_caps, edev->reg_bar + EFA_REGS_ACQ_CAPS_OFF);
236
237 return 0;
238 }
239
efa_com_admin_init_aenq(struct efa_com_dev * edev,struct efa_aenq_handlers * aenq_handlers)240 static int efa_com_admin_init_aenq(struct efa_com_dev *edev,
241 struct efa_aenq_handlers *aenq_handlers)
242 {
243 struct efa_com_aenq *aenq = &edev->aenq;
244 u32 addr_low, addr_high;
245 u32 aenq_caps = 0;
246 u16 size;
247
248 if (!aenq_handlers) {
249 ibdev_err(edev->efa_dev, "aenq handlers pointer is NULL\n");
250 return -EINVAL;
251 }
252
253 size = EFA_ASYNC_QUEUE_DEPTH * sizeof(*aenq->entries);
254 aenq->entries = dma_alloc_coherent(edev->dmadev, size, &aenq->dma_addr,
255 GFP_KERNEL);
256 if (!aenq->entries)
257 return -ENOMEM;
258
259 aenq->aenq_handlers = aenq_handlers;
260 aenq->depth = EFA_ASYNC_QUEUE_DEPTH;
261 aenq->cc = 0;
262 aenq->phase = 1;
263
264 addr_low = lower_32_bits(aenq->dma_addr);
265 addr_high = upper_32_bits(aenq->dma_addr);
266
267 writel(addr_low, edev->reg_bar + EFA_REGS_AENQ_BASE_LO_OFF);
268 writel(addr_high, edev->reg_bar + EFA_REGS_AENQ_BASE_HI_OFF);
269
270 EFA_SET(&aenq_caps, EFA_REGS_AENQ_CAPS_AENQ_DEPTH, aenq->depth);
271 EFA_SET(&aenq_caps, EFA_REGS_AENQ_CAPS_AENQ_ENTRY_SIZE,
272 sizeof(struct efa_admin_aenq_entry));
273 EFA_SET(&aenq_caps, EFA_REGS_AENQ_CAPS_AENQ_MSIX_VECTOR,
274 aenq->msix_vector_idx);
275 writel(aenq_caps, edev->reg_bar + EFA_REGS_AENQ_CAPS_OFF);
276
277 /*
278 * Init cons_db to mark that all entries in the queue
279 * are initially available
280 */
281 writel(edev->aenq.cc, edev->reg_bar + EFA_REGS_AENQ_CONS_DB_OFF);
282
283 return 0;
284 }
285
efa_com_alloc_ctx_id(struct efa_com_admin_queue * aq)286 static u16 efa_com_alloc_ctx_id(struct efa_com_admin_queue *aq)
287 {
288 u16 ctx_id;
289
290 spin_lock(&aq->comp_ctx_lock);
291 ctx_id = aq->comp_ctx_pool[aq->comp_ctx_pool_next];
292 aq->comp_ctx_pool_next++;
293 spin_unlock(&aq->comp_ctx_lock);
294
295 return ctx_id;
296 }
297
efa_com_dealloc_ctx_id(struct efa_com_admin_queue * aq,u16 ctx_id)298 static void efa_com_dealloc_ctx_id(struct efa_com_admin_queue *aq,
299 u16 ctx_id)
300 {
301 spin_lock(&aq->comp_ctx_lock);
302 aq->comp_ctx_pool_next--;
303 aq->comp_ctx_pool[aq->comp_ctx_pool_next] = ctx_id;
304 spin_unlock(&aq->comp_ctx_lock);
305 }
306
efa_com_alloc_comp_ctx(struct efa_com_admin_queue * aq)307 static struct efa_comp_ctx *efa_com_alloc_comp_ctx(struct efa_com_admin_queue *aq)
308 {
309 struct efa_comp_ctx *comp_ctx;
310 u16 ctx_id;
311
312 ctx_id = efa_com_alloc_ctx_id(aq);
313
314 comp_ctx = &aq->comp_ctx[ctx_id];
315 if (comp_ctx->status != EFA_CMD_UNUSED) {
316 efa_com_dealloc_ctx_id(aq, ctx_id);
317 ibdev_err_ratelimited(aq->efa_dev,
318 "Completion context[%u] is used[%u]\n",
319 ctx_id, comp_ctx->status);
320 return NULL;
321 }
322
323 comp_ctx->status = EFA_CMD_ALLOCATED;
324 ibdev_dbg(aq->efa_dev, "Take completion context[%u]\n", ctx_id);
325 return comp_ctx;
326 }
327
efa_com_get_comp_ctx_id(struct efa_com_admin_queue * aq,struct efa_comp_ctx * comp_ctx)328 static inline u16 efa_com_get_comp_ctx_id(struct efa_com_admin_queue *aq,
329 struct efa_comp_ctx *comp_ctx)
330 {
331 return comp_ctx - aq->comp_ctx;
332 }
333
efa_com_dealloc_comp_ctx(struct efa_com_admin_queue * aq,struct efa_comp_ctx * comp_ctx)334 static inline void efa_com_dealloc_comp_ctx(struct efa_com_admin_queue *aq,
335 struct efa_comp_ctx *comp_ctx)
336 {
337 u16 ctx_id = efa_com_get_comp_ctx_id(aq, comp_ctx);
338
339 ibdev_dbg(aq->efa_dev, "Put completion context[%u]\n", ctx_id);
340 comp_ctx->status = EFA_CMD_UNUSED;
341 efa_com_dealloc_ctx_id(aq, ctx_id);
342 }
343
efa_com_get_comp_ctx_by_cmd_id(struct efa_com_admin_queue * aq,u16 cmd_id)344 static inline struct efa_comp_ctx *efa_com_get_comp_ctx_by_cmd_id(struct efa_com_admin_queue *aq,
345 u16 cmd_id)
346 {
347 u16 ctx_id = cmd_id & (aq->depth - 1);
348
349 return &aq->comp_ctx[ctx_id];
350 }
351
efa_com_calc_crc16_checksum(u8 * buff,u32 buff_size)352 static u16 efa_com_calc_crc16_checksum(u8 *buff, u32 buff_size)
353 {
354 return crc16(EFA_CRC16_INIT_VAL, buff, buff_size) ^ EFA_CRC16_INIT_VAL;
355 }
356
efa_com_construct_aq_entry(struct efa_com_admin_queue * aq,u8 * aq_entry,u16 cmd_id,u8 opcode,u8 flags,void * payload,size_t payload_size)357 static void efa_com_construct_aq_entry(struct efa_com_admin_queue *aq, u8 *aq_entry, u16 cmd_id,
358 u8 opcode, u8 flags, void *payload, size_t payload_size)
359 {
360 struct efa_admin_aq_common_desc_v2 *common_v2 = NULL;
361 struct efa_admin_aq_common_desc *common;
362 struct efa_com_admin_sq *sq = &aq->sq;
363
364 if (sq->proto_ver == EFA_ADMIN_V1_PROTO_VER) {
365 common = (struct efa_admin_aq_common_desc *)aq_entry;
366 } else {
367 common_v2 = (struct efa_admin_aq_common_desc_v2 *)aq_entry;
368 common = &common_v2->common;
369 }
370
371 common->command_id = cmd_id;
372 common->opcode = opcode;
373 common->flags = flags;
374 EFA_SET(&common->flags, EFA_ADMIN_AQ_COMMON_DESC_PHASE, sq->phase);
375
376 if (payload)
377 memcpy(aq_entry + sq->payload_offset, payload, payload_size);
378
379 if (common_v2)
380 common_v2->checksum = efa_com_calc_crc16_checksum(aq_entry, sq->entry_size);
381 }
382
__efa_com_submit_admin_cmd(struct efa_com_admin_queue * aq,struct efa_comp_ctx * comp_ctx,u8 opcode,u8 flags,void * payload,size_t payload_size,struct efa_admin_acq_entry * comp,size_t comp_size_in_bytes)383 static void __efa_com_submit_admin_cmd(struct efa_com_admin_queue *aq,
384 struct efa_comp_ctx *comp_ctx,
385 u8 opcode, u8 flags,
386 void *payload, size_t payload_size,
387 struct efa_admin_acq_entry *comp,
388 size_t comp_size_in_bytes)
389 {
390 u8 aq_entry[EFA_ADMIN_SQ_MAX_ENT_SIZE] __aligned(sizeof(u64)) = {};
391 u16 queue_size_mask, cmd_id, ctx_id, pi;
392 struct efa_com_admin_sq *sq = &aq->sq;
393 u8 *aqe;
394
395 queue_size_mask = aq->depth - 1;
396 pi = sq->pc & queue_size_mask;
397 ctx_id = efa_com_get_comp_ctx_id(aq, comp_ctx);
398
399 /* cmd_id LSBs are the ctx_id and MSBs are entropy bits from pc */
400 cmd_id = ctx_id & queue_size_mask;
401 cmd_id |= sq->pc << ilog2(aq->depth);
402 cmd_id &= EFA_ADMIN_AQ_COMMON_DESC_COMMAND_ID_MASK;
403
404 efa_com_construct_aq_entry(aq, aq_entry, cmd_id, opcode, flags, payload, payload_size);
405
406 comp_ctx->status = EFA_CMD_SUBMITTED;
407 comp_ctx->comp_size = comp_size_in_bytes;
408 comp_ctx->user_cqe = comp;
409 comp_ctx->cmd_opcode = opcode;
410 comp_ctx->cmd_id = cmd_id;
411
412 reinit_completion(&comp_ctx->wait_event);
413
414 aqe = sq->buffer + sq->entry_size * pi;
415 memset(aqe, 0, sq->entry_size);
416 memcpy(aqe, aq_entry, sq->entry_size);
417
418 sq->pc++;
419 atomic64_inc(&aq->stats.submitted_cmd);
420
421 if ((sq->pc & queue_size_mask) == 0)
422 sq->phase = !sq->phase;
423
424 /* barrier not needed in case of writel */
425 writel(sq->pc, sq->db_addr);
426 }
427
efa_com_init_comp_ctxt(struct efa_com_admin_queue * aq)428 static inline int efa_com_init_comp_ctxt(struct efa_com_admin_queue *aq)
429 {
430 size_t pool_size = aq->depth * sizeof(*aq->comp_ctx_pool);
431 size_t size = aq->depth * sizeof(struct efa_comp_ctx);
432 struct efa_comp_ctx *comp_ctx;
433 u16 i;
434
435 aq->comp_ctx = devm_kzalloc(aq->dmadev, size, GFP_KERNEL);
436 aq->comp_ctx_pool = devm_kzalloc(aq->dmadev, pool_size, GFP_KERNEL);
437 if (!aq->comp_ctx || !aq->comp_ctx_pool) {
438 devm_kfree(aq->dmadev, aq->comp_ctx_pool);
439 devm_kfree(aq->dmadev, aq->comp_ctx);
440 return -ENOMEM;
441 }
442
443 for (i = 0; i < aq->depth; i++) {
444 comp_ctx = &aq->comp_ctx[i];
445 comp_ctx->status = EFA_CMD_UNUSED;
446 init_completion(&comp_ctx->wait_event);
447
448 aq->comp_ctx_pool[i] = i;
449 }
450
451 spin_lock_init(&aq->comp_ctx_lock);
452
453 aq->comp_ctx_pool_next = 0;
454
455 return 0;
456 }
457
efa_com_submit_admin_cmd(struct efa_com_admin_queue * aq,struct efa_comp_ctx * comp_ctx,u8 opcode,u8 flags,void * payload,size_t payload_size,struct efa_admin_acq_entry * comp,size_t comp_size_in_bytes)458 static int efa_com_submit_admin_cmd(struct efa_com_admin_queue *aq,
459 struct efa_comp_ctx *comp_ctx,
460 u8 opcode, u8 flags,
461 void *payload, size_t payload_size,
462 struct efa_admin_acq_entry *comp,
463 size_t comp_size_in_bytes)
464 {
465 spin_lock(&aq->sq.lock);
466 if (!test_bit(EFA_AQ_STATE_RUNNING_BIT, &aq->state)) {
467 ibdev_err_ratelimited(aq->efa_dev, "Admin queue is closed\n");
468 spin_unlock(&aq->sq.lock);
469 return -ENODEV;
470 }
471
472 __efa_com_submit_admin_cmd(aq, comp_ctx, opcode, flags, payload,
473 payload_size, comp, comp_size_in_bytes);
474 spin_unlock(&aq->sq.lock);
475
476 return 0;
477 }
478
efa_com_cqe_checksum_valid(struct efa_com_admin_queue * aq,struct efa_admin_acq_entry * cqe)479 static bool efa_com_cqe_checksum_valid(struct efa_com_admin_queue *aq,
480 struct efa_admin_acq_entry *cqe)
481 {
482 u16 cqe_checksum = cqe->acq_common_descriptor.checksum;
483 u16 calc_checksum;
484
485 cqe->acq_common_descriptor.checksum = 0;
486
487 calc_checksum = efa_com_calc_crc16_checksum((u8 *)cqe, sizeof(*cqe));
488 if (calc_checksum != cqe_checksum) {
489 ibdev_err(aq->efa_dev,
490 "Received completion with invalid checksum, cqe[%u], calc[%u], sq producer[%d], sq consumer[%d], cq consumer[%d]\n",
491 cqe_checksum, calc_checksum, aq->sq.pc, aq->sq.cc,
492 aq->cq.cc);
493 return false;
494 }
495
496 return true;
497 }
498
efa_com_handle_single_admin_completion(struct efa_com_admin_queue * aq,struct efa_admin_acq_entry * cqe)499 static int efa_com_handle_single_admin_completion(struct efa_com_admin_queue *aq,
500 struct efa_admin_acq_entry *cqe)
501 {
502 struct efa_comp_ctx *comp_ctx;
503 u16 cmd_id;
504
505 if (aq->cq.validate_checksum && !efa_com_cqe_checksum_valid(aq, cqe))
506 return -EINVAL;
507
508 cmd_id = EFA_GET(&cqe->acq_common_descriptor.command,
509 EFA_ADMIN_ACQ_COMMON_DESC_COMMAND_ID);
510
511 comp_ctx = efa_com_get_comp_ctx_by_cmd_id(aq, cmd_id);
512 if (comp_ctx->status != EFA_CMD_SUBMITTED || comp_ctx->cmd_id != cmd_id) {
513 ibdev_err(aq->efa_dev,
514 "Received completion with unexpected command id[%x], status[%d] sq producer[%d], sq consumer[%d], cq consumer[%d]\n",
515 cmd_id, comp_ctx->status, aq->sq.pc, aq->sq.cc,
516 aq->cq.cc);
517 return -EINVAL;
518 }
519
520 comp_ctx->status = EFA_CMD_COMPLETED;
521 memcpy(comp_ctx->user_cqe, cqe, comp_ctx->comp_size);
522
523 if (!test_bit(EFA_AQ_STATE_POLLING_BIT, &aq->state))
524 complete(&comp_ctx->wait_event);
525
526 return 0;
527 }
528
efa_com_handle_admin_completion(struct efa_com_admin_queue * aq)529 static void efa_com_handle_admin_completion(struct efa_com_admin_queue *aq)
530 {
531 struct efa_admin_acq_entry *cqe;
532 u16 queue_size_mask;
533 u16 comp_cmds = 0;
534 u8 phase;
535 int err;
536 u16 ci;
537
538 queue_size_mask = aq->depth - 1;
539
540 ci = aq->cq.cc & queue_size_mask;
541 phase = aq->cq.phase;
542
543 cqe = &aq->cq.entries[ci];
544
545 /* Go over all the completions */
546 while ((READ_ONCE(cqe->acq_common_descriptor.flags) &
547 EFA_ADMIN_ACQ_COMMON_DESC_PHASE_MASK) == phase) {
548 /*
549 * Do not read the rest of the completion entry before the
550 * phase bit was validated
551 */
552 dma_rmb();
553 err = efa_com_handle_single_admin_completion(aq, cqe);
554 if (!err)
555 comp_cmds++;
556
557 aq->cq.cc++;
558 ci++;
559 if (ci == aq->depth) {
560 ci = 0;
561 phase = !phase;
562 }
563
564 cqe = &aq->cq.entries[ci];
565 }
566
567 aq->cq.phase = phase;
568 aq->sq.cc += comp_cmds;
569 atomic64_add(comp_cmds, &aq->stats.completed_cmd);
570 }
571
efa_com_comp_status_to_errno(u8 comp_status)572 static int efa_com_comp_status_to_errno(u8 comp_status)
573 {
574 switch (comp_status) {
575 case EFA_ADMIN_SUCCESS:
576 return 0;
577 case EFA_ADMIN_RESOURCE_ALLOCATION_FAILURE:
578 return -ENOMEM;
579 case EFA_ADMIN_UNSUPPORTED_OPCODE:
580 return -EOPNOTSUPP;
581 case EFA_ADMIN_BAD_OPCODE:
582 case EFA_ADMIN_MALFORMED_REQUEST:
583 case EFA_ADMIN_ILLEGAL_PARAMETER:
584 case EFA_ADMIN_UNKNOWN_ERROR:
585 return -EINVAL;
586 default:
587 return -EINVAL;
588 }
589 }
590
efa_com_wait_and_process_admin_cq_polling(struct efa_comp_ctx * comp_ctx,struct efa_com_admin_queue * aq)591 static int efa_com_wait_and_process_admin_cq_polling(struct efa_comp_ctx *comp_ctx,
592 struct efa_com_admin_queue *aq)
593 {
594 unsigned long timeout;
595 unsigned long flags;
596
597 timeout = jiffies + usecs_to_jiffies(aq->completion_timeout);
598
599 while (1) {
600 spin_lock_irqsave(&aq->cq.lock, flags);
601 efa_com_handle_admin_completion(aq);
602 spin_unlock_irqrestore(&aq->cq.lock, flags);
603
604 if (comp_ctx->status != EFA_CMD_SUBMITTED)
605 break;
606
607 if (time_is_before_jiffies(timeout)) {
608 ibdev_err_ratelimited(
609 aq->efa_dev,
610 "Wait for completion (polling) timeout\n");
611 /* EFA didn't have any completion */
612 atomic64_inc(&aq->stats.no_completion);
613
614 clear_bit(EFA_AQ_STATE_RUNNING_BIT, &aq->state);
615 return -ETIME;
616 }
617
618 msleep(aq->poll_interval);
619 }
620
621 return efa_com_comp_status_to_errno(
622 comp_ctx->user_cqe->acq_common_descriptor.status);
623 }
624
efa_com_wait_and_process_admin_cq_interrupts(struct efa_comp_ctx * comp_ctx,struct efa_com_admin_queue * aq)625 static int efa_com_wait_and_process_admin_cq_interrupts(struct efa_comp_ctx *comp_ctx,
626 struct efa_com_admin_queue *aq)
627 {
628 unsigned long flags;
629
630 wait_for_completion_timeout(&comp_ctx->wait_event,
631 usecs_to_jiffies(aq->completion_timeout));
632
633 /*
634 * In case the command wasn't completed find out the root cause.
635 * There might be 2 kinds of errors
636 * 1) No completion (timeout reached)
637 * 2) There is completion but the device didn't get any msi-x interrupt.
638 */
639 if (comp_ctx->status == EFA_CMD_SUBMITTED) {
640 spin_lock_irqsave(&aq->cq.lock, flags);
641 efa_com_handle_admin_completion(aq);
642 spin_unlock_irqrestore(&aq->cq.lock, flags);
643
644 atomic64_inc(&aq->stats.no_completion);
645
646 if (comp_ctx->status == EFA_CMD_COMPLETED)
647 ibdev_err_ratelimited(
648 aq->efa_dev,
649 "The device sent a completion but the driver didn't receive any MSI-X interrupt for admin cmd %s(%d) status %d (id: %d, sq producer: %d, sq consumer: %d, cq consumer: %d)\n",
650 efa_com_cmd_str(comp_ctx->cmd_opcode),
651 comp_ctx->cmd_opcode, comp_ctx->status,
652 comp_ctx->cmd_id, aq->sq.pc, aq->sq.cc,
653 aq->cq.cc);
654 else
655 ibdev_err_ratelimited(
656 aq->efa_dev,
657 "The device didn't send any completion for admin cmd %s(%d) status %d (id: %d, sq producer: %d, sq consumer: %d, cq consumer: %d)\n",
658 efa_com_cmd_str(comp_ctx->cmd_opcode),
659 comp_ctx->cmd_opcode, comp_ctx->status,
660 comp_ctx->cmd_id, aq->sq.pc, aq->sq.cc,
661 aq->cq.cc);
662
663 clear_bit(EFA_AQ_STATE_RUNNING_BIT, &aq->state);
664 return -ETIME;
665 }
666
667 return efa_com_comp_status_to_errno(
668 comp_ctx->user_cqe->acq_common_descriptor.status);
669 }
670
671 /*
672 * There are two types to wait for completion.
673 * Polling mode - wait until the completion is available.
674 * Async mode - wait on wait queue until the completion is ready
675 * (or the timeout expired).
676 * It is expected that the IRQ called efa_com_handle_admin_completion
677 * to mark the completions.
678 */
efa_com_wait_and_process_admin_cq(struct efa_comp_ctx * comp_ctx,struct efa_com_admin_queue * aq)679 static int efa_com_wait_and_process_admin_cq(struct efa_comp_ctx *comp_ctx,
680 struct efa_com_admin_queue *aq)
681 {
682 if (test_bit(EFA_AQ_STATE_POLLING_BIT, &aq->state))
683 return efa_com_wait_and_process_admin_cq_polling(comp_ctx, aq);
684
685 return efa_com_wait_and_process_admin_cq_interrupts(comp_ctx, aq);
686 }
687
688 /**
689 * efa_com_cmd_exec - Execute admin command
690 * @aq: admin queue.
691 * @opcode: the admin command opcode.
692 * @flags: the admin command header flags.
693 * @payload: the admin command payload.
694 * @payload_size: the payload size.
695 * @comp: command completion return entry.
696 * @comp_size: command completion size.
697 * Submit an admin command and then wait until the device will return a
698 * completion.
699 * The completion will be copied into comp.
700 *
701 * @return - 0 on success, negative value on failure.
702 */
efa_com_cmd_exec(struct efa_com_admin_queue * aq,u8 opcode,u8 flags,void * payload,size_t payload_size,struct efa_admin_acq_entry * comp,size_t comp_size)703 int efa_com_cmd_exec(struct efa_com_admin_queue *aq,
704 u8 opcode, u8 flags,
705 void *payload, size_t payload_size,
706 struct efa_admin_acq_entry *comp, size_t comp_size)
707 {
708 struct efa_comp_ctx *comp_ctx;
709 int err;
710
711 if (payload_size > aq->sq.max_payload_size)
712 return -EINVAL;
713
714 might_sleep();
715
716 /* In case of queue FULL */
717 down(&aq->avail_cmds);
718
719 ibdev_dbg(aq->efa_dev, "%s (opcode %d)\n", efa_com_cmd_str(opcode),
720 opcode);
721
722 comp_ctx = efa_com_alloc_comp_ctx(aq);
723 if (!comp_ctx) {
724 clear_bit(EFA_AQ_STATE_RUNNING_BIT, &aq->state);
725 up(&aq->avail_cmds);
726 return -EINVAL;
727 }
728
729 err = efa_com_submit_admin_cmd(aq, comp_ctx, opcode, flags, payload, payload_size, comp,
730 comp_size);
731 if (err) {
732 ibdev_err_ratelimited(
733 aq->efa_dev,
734 "Failed to submit command %s (opcode %u) err %d\n",
735 efa_com_cmd_str(opcode), opcode, err);
736
737 efa_com_dealloc_comp_ctx(aq, comp_ctx);
738 up(&aq->avail_cmds);
739 atomic64_inc(&aq->stats.cmd_err);
740 return err;
741 }
742
743 err = efa_com_wait_and_process_admin_cq(comp_ctx, aq);
744 if (err) {
745 ibdev_err_ratelimited(
746 aq->efa_dev,
747 "Failed to process command %s (opcode %u) err %d\n",
748 efa_com_cmd_str(opcode), opcode, err);
749 atomic64_inc(&aq->stats.cmd_err);
750 }
751
752 efa_com_dealloc_comp_ctx(aq, comp_ctx);
753 up(&aq->avail_cmds);
754
755 return err;
756 }
757
758 /**
759 * efa_com_admin_destroy - Destroy the admin and the async events queues.
760 * @edev: EFA communication layer struct
761 */
efa_com_admin_destroy(struct efa_com_dev * edev)762 void efa_com_admin_destroy(struct efa_com_dev *edev)
763 {
764 struct efa_com_admin_queue *aq = &edev->aq;
765 struct efa_com_aenq *aenq = &edev->aenq;
766 struct efa_com_admin_cq *cq = &aq->cq;
767 struct efa_com_admin_sq *sq = &aq->sq;
768 u16 size;
769
770 clear_bit(EFA_AQ_STATE_RUNNING_BIT, &aq->state);
771
772 devm_kfree(edev->dmadev, aq->comp_ctx_pool);
773 devm_kfree(edev->dmadev, aq->comp_ctx);
774
775 size = aq->depth * sq->entry_size;
776 dma_free_coherent(edev->dmadev, size, sq->buffer, sq->dma_addr);
777
778 size = aq->depth * sizeof(*cq->entries);
779 dma_free_coherent(edev->dmadev, size, cq->entries, cq->dma_addr);
780
781 size = aenq->depth * sizeof(*aenq->entries);
782 dma_free_coherent(edev->dmadev, size, aenq->entries, aenq->dma_addr);
783
784 efa_ah_cache_destroy(&edev->ah_cache);
785 }
786
787 /**
788 * efa_com_set_admin_polling_mode - Set the admin completion queue polling mode
789 * @edev: EFA communication layer struct
790 * @polling: Enable/Disable polling mode
791 *
792 * Set the admin completion mode.
793 */
efa_com_set_admin_polling_mode(struct efa_com_dev * edev,bool polling)794 void efa_com_set_admin_polling_mode(struct efa_com_dev *edev, bool polling)
795 {
796 u32 mask_value = 0;
797
798 if (polling)
799 EFA_SET(&mask_value, EFA_REGS_INTR_MASK_EN, 1);
800
801 writel(mask_value, edev->reg_bar + EFA_REGS_INTR_MASK_OFF);
802 if (polling)
803 set_bit(EFA_AQ_STATE_POLLING_BIT, &edev->aq.state);
804 else
805 clear_bit(EFA_AQ_STATE_POLLING_BIT, &edev->aq.state);
806 }
807
efa_com_stats_init(struct efa_com_dev * edev)808 static void efa_com_stats_init(struct efa_com_dev *edev)
809 {
810 atomic64_t *s = (atomic64_t *)&edev->aq.stats;
811 int i;
812
813 for (i = 0; i < sizeof(edev->aq.stats) / sizeof(*s); i++, s++)
814 atomic64_set(s, 0);
815 }
816
817 /**
818 * efa_com_admin_init - Init the admin and the async queues
819 * @edev: EFA communication layer struct
820 * @aenq_handlers: Those handlers to be called upon event.
821 *
822 * Initialize the admin submission and completion queues.
823 * Initialize the asynchronous events notification queues.
824 *
825 * @return - 0 on success, negative value on failure.
826 */
efa_com_admin_init(struct efa_com_dev * edev,struct efa_aenq_handlers * aenq_handlers)827 int efa_com_admin_init(struct efa_com_dev *edev,
828 struct efa_aenq_handlers *aenq_handlers)
829 {
830 struct efa_com_admin_queue *aq = &edev->aq;
831 u32 timeout;
832 u32 dev_sts;
833 u32 cap;
834 int err;
835
836 dev_sts = efa_com_reg_read32(edev, EFA_REGS_DEV_STS_OFF);
837 if (!EFA_GET(&dev_sts, EFA_REGS_DEV_STS_READY)) {
838 ibdev_err(edev->efa_dev,
839 "Device isn't ready, abort com init %#x\n", dev_sts);
840 return -ENODEV;
841 }
842
843 err = efa_ah_cache_init(&edev->ah_cache);
844 if (err) {
845 ibdev_err(edev->efa_dev, "Failed to init AH cache\n");
846 return err;
847 }
848
849 aq->depth = EFA_ADMIN_QUEUE_DEPTH;
850
851 aq->dmadev = edev->dmadev;
852 aq->efa_dev = edev->efa_dev;
853 efa_com_set_admin_polling_mode(edev, true);
854
855 sema_init(&aq->avail_cmds, aq->depth);
856
857 efa_com_stats_init(edev);
858
859 err = efa_com_init_comp_ctxt(aq);
860 if (err)
861 goto err_destroy_ah_cache;
862
863 err = efa_com_admin_init_sq(edev);
864 if (err)
865 goto err_destroy_comp_ctxt;
866
867 err = efa_com_admin_init_cq(edev);
868 if (err)
869 goto err_destroy_sq;
870
871 err = efa_com_admin_init_aenq(edev, aenq_handlers);
872 if (err)
873 goto err_destroy_cq;
874
875 cap = efa_com_reg_read32(edev, EFA_REGS_CAPS_OFF);
876 timeout = EFA_GET(&cap, EFA_REGS_CAPS_ADMIN_CMD_TO);
877 if (timeout)
878 /* the resolution of timeout reg is 100ms */
879 aq->completion_timeout = timeout * 100000;
880 else
881 aq->completion_timeout = ADMIN_CMD_TIMEOUT_US;
882
883 aq->poll_interval = EFA_POLL_INTERVAL_MS;
884
885 set_bit(EFA_AQ_STATE_RUNNING_BIT, &aq->state);
886
887 return 0;
888
889 err_destroy_cq:
890 dma_free_coherent(edev->dmadev, aq->depth * sizeof(*aq->cq.entries),
891 aq->cq.entries, aq->cq.dma_addr);
892 err_destroy_sq:
893 dma_free_coherent(edev->dmadev, aq->depth * aq->sq.entry_size,
894 aq->sq.buffer, aq->sq.dma_addr);
895 err_destroy_comp_ctxt:
896 devm_kfree(edev->dmadev, aq->comp_ctx);
897 err_destroy_ah_cache:
898 efa_ah_cache_destroy(&edev->ah_cache);
899
900 return err;
901 }
902
903 /**
904 * efa_com_admin_q_comp_intr_handler - admin queue interrupt handler
905 * @edev: EFA communication layer struct
906 *
907 * This method goes over the admin completion queue and wakes up
908 * all the pending threads that wait on the commands wait event.
909 *
910 * Note: Should be called after MSI-X interrupt.
911 */
efa_com_admin_q_comp_intr_handler(struct efa_com_dev * edev)912 void efa_com_admin_q_comp_intr_handler(struct efa_com_dev *edev)
913 {
914 unsigned long flags;
915
916 spin_lock_irqsave(&edev->aq.cq.lock, flags);
917 efa_com_handle_admin_completion(&edev->aq);
918 spin_unlock_irqrestore(&edev->aq.cq.lock, flags);
919 }
920
921 /*
922 * efa_handle_specific_aenq_event:
923 * return the handler that is relevant to the specific event group
924 */
efa_com_get_specific_aenq_cb(struct efa_com_dev * edev,u16 group)925 static efa_aenq_handler efa_com_get_specific_aenq_cb(struct efa_com_dev *edev,
926 u16 group)
927 {
928 struct efa_aenq_handlers *aenq_handlers = edev->aenq.aenq_handlers;
929
930 if (group < EFA_MAX_HANDLERS && aenq_handlers->handlers[group])
931 return aenq_handlers->handlers[group];
932
933 return aenq_handlers->unimplemented_handler;
934 }
935
936 /**
937 * efa_com_aenq_intr_handler - AENQ interrupt handler
938 * @edev: EFA communication layer struct
939 * @data: Data of interrupt handler.
940 *
941 * Go over the async event notification queue and call the proper aenq handler.
942 */
efa_com_aenq_intr_handler(struct efa_com_dev * edev,void * data)943 void efa_com_aenq_intr_handler(struct efa_com_dev *edev, void *data)
944 {
945 struct efa_admin_aenq_common_desc *aenq_common;
946 struct efa_com_aenq *aenq = &edev->aenq;
947 struct efa_admin_aenq_entry *aenq_e;
948 efa_aenq_handler handler_cb;
949 u32 processed = 0;
950 u8 phase;
951 u32 ci;
952
953 ci = aenq->cc & (aenq->depth - 1);
954 phase = aenq->phase;
955 aenq_e = &aenq->entries[ci]; /* Get first entry */
956 aenq_common = &aenq_e->aenq_common_desc;
957
958 /* Go over all the events */
959 while ((READ_ONCE(aenq_common->flags) &
960 EFA_ADMIN_AENQ_COMMON_DESC_PHASE_MASK) == phase) {
961 /*
962 * Do not read the rest of the completion entry before the
963 * phase bit was validated
964 */
965 dma_rmb();
966
967 /* Handle specific event*/
968 handler_cb = efa_com_get_specific_aenq_cb(edev,
969 aenq_common->group);
970 handler_cb(data, aenq_e); /* call the actual event handler*/
971
972 /* Get next event entry */
973 ci++;
974 processed++;
975
976 if (ci == aenq->depth) {
977 ci = 0;
978 phase = !phase;
979 }
980 aenq_e = &aenq->entries[ci];
981 aenq_common = &aenq_e->aenq_common_desc;
982 }
983
984 aenq->cc += processed;
985 aenq->phase = phase;
986
987 /* Don't update aenq doorbell if there weren't any processed events */
988 if (!processed)
989 return;
990
991 /* barrier not needed in case of writel */
992 writel(aenq->cc, edev->reg_bar + EFA_REGS_AENQ_CONS_DB_OFF);
993 }
994
efa_com_mmio_reg_read_resp_addr_init(struct efa_com_dev * edev)995 static void efa_com_mmio_reg_read_resp_addr_init(struct efa_com_dev *edev)
996 {
997 struct efa_com_mmio_read *mmio_read = &edev->mmio_read;
998 u32 addr_high;
999 u32 addr_low;
1000
1001 /* dma_addr_bits is unknown at this point */
1002 addr_high = (mmio_read->read_resp_dma_addr >> 32) & GENMASK(31, 0);
1003 addr_low = mmio_read->read_resp_dma_addr & GENMASK(31, 0);
1004
1005 writel(addr_high, edev->reg_bar + EFA_REGS_MMIO_RESP_HI_OFF);
1006 writel(addr_low, edev->reg_bar + EFA_REGS_MMIO_RESP_LO_OFF);
1007 }
1008
efa_com_mmio_reg_read_init(struct efa_com_dev * edev)1009 int efa_com_mmio_reg_read_init(struct efa_com_dev *edev)
1010 {
1011 struct efa_com_mmio_read *mmio_read = &edev->mmio_read;
1012
1013 spin_lock_init(&mmio_read->lock);
1014 mmio_read->read_resp =
1015 dma_alloc_coherent(edev->dmadev, sizeof(*mmio_read->read_resp),
1016 &mmio_read->read_resp_dma_addr, GFP_KERNEL);
1017 if (!mmio_read->read_resp)
1018 return -ENOMEM;
1019
1020 efa_com_mmio_reg_read_resp_addr_init(edev);
1021
1022 mmio_read->read_resp->req_id = 0;
1023 mmio_read->seq_num = 0;
1024 mmio_read->mmio_read_timeout = EFA_REG_READ_TIMEOUT_US;
1025
1026 return 0;
1027 }
1028
efa_com_mmio_reg_read_destroy(struct efa_com_dev * edev)1029 void efa_com_mmio_reg_read_destroy(struct efa_com_dev *edev)
1030 {
1031 struct efa_com_mmio_read *mmio_read = &edev->mmio_read;
1032
1033 dma_free_coherent(edev->dmadev, sizeof(*mmio_read->read_resp),
1034 mmio_read->read_resp, mmio_read->read_resp_dma_addr);
1035 }
1036
efa_com_validate_version(struct efa_com_dev * edev)1037 int efa_com_validate_version(struct efa_com_dev *edev)
1038 {
1039 u32 min_ctrl_ver = 0;
1040 u32 ctrl_ver_masked;
1041 u32 min_ver = 0;
1042 u32 ctrl_ver;
1043 u32 ver;
1044
1045 /*
1046 * Make sure the EFA version and the controller version are at least
1047 * as the driver expects
1048 */
1049 ver = efa_com_reg_read32(edev, EFA_REGS_VERSION_OFF);
1050 ctrl_ver = efa_com_reg_read32(edev,
1051 EFA_REGS_CONTROLLER_VERSION_OFF);
1052
1053 ibdev_dbg(edev->efa_dev, "efa device version: %d.%d\n",
1054 EFA_GET(&ver, EFA_REGS_VERSION_MAJOR_VERSION),
1055 EFA_GET(&ver, EFA_REGS_VERSION_MINOR_VERSION));
1056
1057 min_ver = efa_com_construct_ver(EFA_MIN_API_VERSION_MAJOR,
1058 EFA_MIN_API_VERSION_MINOR);
1059 if (ver < min_ver) {
1060 ibdev_err(edev->efa_dev,
1061 "EFA version is lower than the minimal version the driver supports\n");
1062 return -EOPNOTSUPP;
1063 }
1064
1065 edev->dev_api_ver = ver;
1066
1067 ibdev_dbg(
1068 edev->efa_dev,
1069 "efa controller version: %d.%d.%d implementation version %d\n",
1070 EFA_GET(&ctrl_ver, EFA_REGS_CONTROLLER_VERSION_MAJOR_VERSION),
1071 EFA_GET(&ctrl_ver, EFA_REGS_CONTROLLER_VERSION_MINOR_VERSION),
1072 EFA_GET(&ctrl_ver,
1073 EFA_REGS_CONTROLLER_VERSION_SUBMINOR_VERSION),
1074 EFA_GET(&ctrl_ver, EFA_REGS_CONTROLLER_VERSION_IMPL_ID));
1075
1076 ctrl_ver_masked =
1077 EFA_GET(&ctrl_ver, EFA_REGS_CONTROLLER_VERSION_MAJOR_VERSION) |
1078 EFA_GET(&ctrl_ver, EFA_REGS_CONTROLLER_VERSION_MINOR_VERSION) |
1079 EFA_GET(&ctrl_ver,
1080 EFA_REGS_CONTROLLER_VERSION_SUBMINOR_VERSION);
1081
1082 EFA_SET(&min_ctrl_ver, EFA_REGS_CONTROLLER_VERSION_MAJOR_VERSION,
1083 EFA_CTRL_MAJOR);
1084 EFA_SET(&min_ctrl_ver, EFA_REGS_CONTROLLER_VERSION_MINOR_VERSION,
1085 EFA_CTRL_MINOR);
1086 EFA_SET(&min_ctrl_ver, EFA_REGS_CONTROLLER_VERSION_SUBMINOR_VERSION,
1087 EFA_CTRL_SUB_MINOR);
1088 /* Validate the ctrl version without the implementation ID */
1089 if (ctrl_ver_masked < min_ctrl_ver) {
1090 ibdev_err(edev->efa_dev,
1091 "EFA ctrl version is lower than the minimal ctrl version the driver supports\n");
1092 return -EOPNOTSUPP;
1093 }
1094
1095 return 0;
1096 }
1097
1098 /**
1099 * efa_com_get_dma_width - Retrieve physical dma address width the device
1100 * supports.
1101 * @edev: EFA communication layer struct
1102 *
1103 * Retrieve the maximum physical address bits the device can handle.
1104 *
1105 * @return: > 0 on Success and negative value otherwise.
1106 */
efa_com_get_dma_width(struct efa_com_dev * edev)1107 int efa_com_get_dma_width(struct efa_com_dev *edev)
1108 {
1109 u32 caps = efa_com_reg_read32(edev, EFA_REGS_CAPS_OFF);
1110 int width;
1111
1112 width = EFA_GET(&caps, EFA_REGS_CAPS_DMA_ADDR_WIDTH);
1113
1114 ibdev_dbg(edev->efa_dev, "DMA width: %d\n", width);
1115
1116 if (width < 32 || width > 64) {
1117 ibdev_err(edev->efa_dev, "DMA width illegal value: %d\n", width);
1118 return -EINVAL;
1119 }
1120
1121 edev->dma_addr_bits = width;
1122
1123 return width;
1124 }
1125
wait_for_reset_state(struct efa_com_dev * edev,u32 timeout,int on)1126 static int wait_for_reset_state(struct efa_com_dev *edev, u32 timeout, int on)
1127 {
1128 u32 val, i;
1129
1130 for (i = 0; i < timeout; i++) {
1131 val = efa_com_reg_read32(edev, EFA_REGS_DEV_STS_OFF);
1132
1133 if (EFA_GET(&val, EFA_REGS_DEV_STS_RESET_IN_PROGRESS) == on)
1134 return 0;
1135
1136 ibdev_dbg(edev->efa_dev, "Reset indication val %d\n", val);
1137 msleep(EFA_POLL_INTERVAL_MS);
1138 }
1139
1140 return -ETIME;
1141 }
1142
1143 /**
1144 * efa_com_dev_reset - Perform device FLR to the device.
1145 * @edev: EFA communication layer struct
1146 * @reset_reason: Specify what is the trigger for the reset in case of an error.
1147 *
1148 * @return - 0 on success, negative value on failure.
1149 */
efa_com_dev_reset(struct efa_com_dev * edev,enum efa_regs_reset_reason_types reset_reason)1150 int efa_com_dev_reset(struct efa_com_dev *edev,
1151 enum efa_regs_reset_reason_types reset_reason)
1152 {
1153 u32 stat, timeout, cap;
1154 u32 reset_val = 0;
1155 int err;
1156
1157 stat = efa_com_reg_read32(edev, EFA_REGS_DEV_STS_OFF);
1158 cap = efa_com_reg_read32(edev, EFA_REGS_CAPS_OFF);
1159
1160 if (!EFA_GET(&stat, EFA_REGS_DEV_STS_READY)) {
1161 ibdev_err(edev->efa_dev,
1162 "Device isn't ready, can't reset device\n");
1163 return -EINVAL;
1164 }
1165
1166 timeout = EFA_GET(&cap, EFA_REGS_CAPS_RESET_TIMEOUT);
1167 if (!timeout) {
1168 ibdev_err(edev->efa_dev, "Invalid timeout value\n");
1169 return -EINVAL;
1170 }
1171
1172 /* start reset */
1173 EFA_SET(&reset_val, EFA_REGS_DEV_CTL_DEV_RESET, 1);
1174 EFA_SET(&reset_val, EFA_REGS_DEV_CTL_RESET_REASON, reset_reason);
1175 writel(reset_val, edev->reg_bar + EFA_REGS_DEV_CTL_OFF);
1176
1177 /* reset clears the mmio readless address, restore it */
1178 efa_com_mmio_reg_read_resp_addr_init(edev);
1179
1180 err = wait_for_reset_state(edev, timeout, 1);
1181 if (err) {
1182 ibdev_err(edev->efa_dev, "Reset indication didn't turn on\n");
1183 return err;
1184 }
1185
1186 /* reset done */
1187 writel(0, edev->reg_bar + EFA_REGS_DEV_CTL_OFF);
1188 err = wait_for_reset_state(edev, timeout, 0);
1189 if (err) {
1190 ibdev_err(edev->efa_dev, "Reset indication didn't turn off\n");
1191 return err;
1192 }
1193
1194 timeout = EFA_GET(&cap, EFA_REGS_CAPS_ADMIN_CMD_TO);
1195 if (timeout)
1196 /* the resolution of timeout reg is 100ms */
1197 edev->aq.completion_timeout = timeout * 100000;
1198 else
1199 edev->aq.completion_timeout = ADMIN_CMD_TIMEOUT_US;
1200
1201 return 0;
1202 }
1203
efa_com_create_eq(struct efa_com_dev * edev,struct efa_com_create_eq_params * params,struct efa_com_create_eq_result * result)1204 static int efa_com_create_eq(struct efa_com_dev *edev,
1205 struct efa_com_create_eq_params *params,
1206 struct efa_com_create_eq_result *result)
1207 {
1208 struct efa_com_admin_queue *aq = &edev->aq;
1209 struct efa_admin_create_eq_resp resp = {};
1210 struct efa_admin_create_eq_cmd cmd = {};
1211 int err;
1212
1213 EFA_SET(&cmd.caps, EFA_ADMIN_CREATE_EQ_CMD_ENTRY_SIZE_WORDS,
1214 params->entry_size_in_bytes / 4);
1215 cmd.depth = params->depth;
1216 cmd.event_bitmask = params->event_bitmask;
1217 cmd.msix_vec = params->msix_vec;
1218
1219 efa_com_set_dma_addr(params->dma_addr, &cmd.ba.mem_addr_high,
1220 &cmd.ba.mem_addr_low);
1221
1222 err = efa_com_cmd_exec(aq, EFA_ADMIN_CREATE_EQ, 0,
1223 &cmd, sizeof(cmd),
1224 (struct efa_admin_acq_entry *)&resp, sizeof(resp));
1225 if (err) {
1226 ibdev_err_ratelimited(edev->efa_dev,
1227 "Failed to create eq[%d]\n", err);
1228 return err;
1229 }
1230
1231 result->eqn = resp.eqn;
1232
1233 return 0;
1234 }
1235
efa_com_destroy_eq(struct efa_com_dev * edev,struct efa_com_destroy_eq_params * params)1236 static void efa_com_destroy_eq(struct efa_com_dev *edev,
1237 struct efa_com_destroy_eq_params *params)
1238 {
1239 struct efa_com_admin_queue *aq = &edev->aq;
1240 struct efa_admin_destroy_eq_resp resp = {};
1241 struct efa_admin_destroy_eq_cmd cmd = {};
1242 int err;
1243
1244 cmd.eqn = params->eqn;
1245
1246 err = efa_com_cmd_exec(aq, EFA_ADMIN_DESTROY_EQ, 0,
1247 &cmd, sizeof(cmd),
1248 (struct efa_admin_acq_entry *)&resp, sizeof(resp));
1249 if (err)
1250 ibdev_err_ratelimited(edev->efa_dev,
1251 "Failed to destroy EQ-%u [%d]\n", cmd.eqn,
1252 err);
1253 }
1254
efa_com_arm_eq(struct efa_com_dev * edev,struct efa_com_eq * eeq)1255 void efa_com_arm_eq(struct efa_com_dev *edev, struct efa_com_eq *eeq)
1256 {
1257 u32 val = 0;
1258
1259 EFA_SET(&val, EFA_REGS_EQ_DB_EQN, eeq->eqn);
1260 EFA_SET(&val, EFA_REGS_EQ_DB_ARM, 1);
1261
1262 writel(val, edev->reg_bar + EFA_REGS_EQ_DB_OFF);
1263 }
1264
efa_com_eq_comp_intr_handler(struct efa_com_dev * edev,struct efa_com_eq * eeq)1265 void efa_com_eq_comp_intr_handler(struct efa_com_dev *edev,
1266 struct efa_com_eq *eeq)
1267 {
1268 struct efa_admin_eqe *eqe;
1269 u32 processed = 0;
1270 u8 phase;
1271 u32 ci;
1272
1273 ci = eeq->cc & (eeq->depth - 1);
1274 phase = eeq->phase;
1275 eqe = &eeq->eqes[ci];
1276
1277 /* Go over all the events */
1278 while ((READ_ONCE(eqe->common) & EFA_ADMIN_EQE_PHASE_MASK) == phase) {
1279 /*
1280 * Do not read the rest of the completion entry before the
1281 * phase bit was validated
1282 */
1283 dma_rmb();
1284
1285 eeq->cb(eeq, eqe);
1286
1287 /* Get next event entry */
1288 ci++;
1289 processed++;
1290
1291 if (ci == eeq->depth) {
1292 ci = 0;
1293 phase = !phase;
1294 }
1295
1296 eqe = &eeq->eqes[ci];
1297 }
1298
1299 eeq->cc += processed;
1300 eeq->phase = phase;
1301 efa_com_arm_eq(eeq->edev, eeq);
1302 }
1303
efa_com_eq_destroy(struct efa_com_dev * edev,struct efa_com_eq * eeq)1304 void efa_com_eq_destroy(struct efa_com_dev *edev, struct efa_com_eq *eeq)
1305 {
1306 struct efa_com_destroy_eq_params params = {
1307 .eqn = eeq->eqn,
1308 };
1309
1310 efa_com_destroy_eq(edev, ¶ms);
1311 dma_free_coherent(edev->dmadev, eeq->depth * sizeof(*eeq->eqes),
1312 eeq->eqes, eeq->dma_addr);
1313 }
1314
efa_com_eq_init(struct efa_com_dev * edev,struct efa_com_eq * eeq,efa_eqe_handler cb,u16 depth,u8 msix_vec)1315 int efa_com_eq_init(struct efa_com_dev *edev, struct efa_com_eq *eeq,
1316 efa_eqe_handler cb, u16 depth, u8 msix_vec)
1317 {
1318 struct efa_com_create_eq_params params = {};
1319 struct efa_com_create_eq_result result = {};
1320 int err;
1321
1322 params.depth = depth;
1323 params.entry_size_in_bytes = sizeof(*eeq->eqes);
1324 EFA_SET(¶ms.event_bitmask,
1325 EFA_ADMIN_CREATE_EQ_CMD_COMPLETION_EVENTS, 1);
1326 params.msix_vec = msix_vec;
1327
1328 eeq->eqes = dma_alloc_coherent(edev->dmadev,
1329 params.depth * sizeof(*eeq->eqes),
1330 ¶ms.dma_addr, GFP_KERNEL);
1331 if (!eeq->eqes)
1332 return -ENOMEM;
1333
1334 err = efa_com_create_eq(edev, ¶ms, &result);
1335 if (err)
1336 goto err_free_coherent;
1337
1338 eeq->eqn = result.eqn;
1339 eeq->edev = edev;
1340 eeq->dma_addr = params.dma_addr;
1341 eeq->phase = 1;
1342 eeq->depth = params.depth;
1343 eeq->cb = cb;
1344
1345 return 0;
1346
1347 err_free_coherent:
1348 dma_free_coherent(edev->dmadev, params.depth * sizeof(*eeq->eqes),
1349 eeq->eqes, params.dma_addr);
1350 return err;
1351 }
1352