1 // SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause
3 * Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All rights reserved.
7 #include "efa_regs_defs.h"
9 #define ADMIN_CMD_TIMEOUT_US 30000000 /* usecs */
11 #define EFA_REG_READ_TIMEOUT_US 50000 /* usecs */
12 #define EFA_MMIO_READ_INVALID 0xffffffff
14 #define EFA_POLL_INTERVAL_MS 100 /* msecs */
16 #define EFA_ASYNC_QUEUE_DEPTH 16
17 #define EFA_ADMIN_QUEUE_DEPTH 32
19 #define EFA_CTRL_MAJOR 0
20 #define EFA_CTRL_MINOR 0
21 #define EFA_CTRL_SUB_MINOR 1
23 #define EFA_DMA_ADDR_TO_UINT32_LOW(x) ((u32)((u64)(x)))
24 #define EFA_DMA_ADDR_TO_UINT32_HIGH(x) ((u32)(((u64)(x)) >> 32))
32 struct completion wait_event
;
33 struct efa_admin_acq_entry
*user_cqe
;
35 enum efa_cmd_status status
;
36 /* status from the device */
42 static const char *efa_com_cmd_str(u8 cmd
)
44 #define EFA_CMD_STR_CASE(_cmd) case EFA_ADMIN_##_cmd: return #_cmd
47 EFA_CMD_STR_CASE(CREATE_QP
);
48 EFA_CMD_STR_CASE(MODIFY_QP
);
49 EFA_CMD_STR_CASE(QUERY_QP
);
50 EFA_CMD_STR_CASE(DESTROY_QP
);
51 EFA_CMD_STR_CASE(CREATE_AH
);
52 EFA_CMD_STR_CASE(DESTROY_AH
);
53 EFA_CMD_STR_CASE(REG_MR
);
54 EFA_CMD_STR_CASE(DEREG_MR
);
55 EFA_CMD_STR_CASE(CREATE_CQ
);
56 EFA_CMD_STR_CASE(DESTROY_CQ
);
57 EFA_CMD_STR_CASE(GET_FEATURE
);
58 EFA_CMD_STR_CASE(SET_FEATURE
);
59 EFA_CMD_STR_CASE(GET_STATS
);
60 EFA_CMD_STR_CASE(ALLOC_PD
);
61 EFA_CMD_STR_CASE(DEALLOC_PD
);
62 EFA_CMD_STR_CASE(ALLOC_UAR
);
63 EFA_CMD_STR_CASE(DEALLOC_UAR
);
64 default: return "unknown command opcode";
66 #undef EFA_CMD_STR_CASE
69 static u32
efa_com_reg_read32(struct efa_com_dev
*edev
, u16 offset
)
71 struct efa_com_mmio_read
*mmio_read
= &edev
->mmio_read
;
72 struct efa_admin_mmio_req_read_less_resp
*read_resp
;
73 unsigned long exp_time
;
74 u32 mmio_read_reg
= 0;
77 read_resp
= mmio_read
->read_resp
;
79 spin_lock(&mmio_read
->lock
);
82 /* trash DMA req_id to identify when hardware is done */
83 read_resp
->req_id
= mmio_read
->seq_num
+ 0x9aL
;
84 EFA_SET(&mmio_read_reg
, EFA_REGS_MMIO_REG_READ_REG_OFF
, offset
);
85 EFA_SET(&mmio_read_reg
, EFA_REGS_MMIO_REG_READ_REQ_ID
,
88 writel(mmio_read_reg
, edev
->reg_bar
+ EFA_REGS_MMIO_REG_READ_OFF
);
90 exp_time
= jiffies
+ usecs_to_jiffies(mmio_read
->mmio_read_timeout
);
92 if (READ_ONCE(read_resp
->req_id
) == mmio_read
->seq_num
)
95 } while (time_is_after_jiffies(exp_time
));
97 if (read_resp
->req_id
!= mmio_read
->seq_num
) {
98 ibdev_err_ratelimited(
100 "Reading register timed out. expected: req id[%u] offset[%#x] actual: req id[%u] offset[%#x]\n",
101 mmio_read
->seq_num
, offset
, read_resp
->req_id
,
103 err
= EFA_MMIO_READ_INVALID
;
107 if (read_resp
->reg_off
!= offset
) {
108 ibdev_err_ratelimited(
110 "Reading register failed: wrong offset provided\n");
111 err
= EFA_MMIO_READ_INVALID
;
115 err
= read_resp
->reg_val
;
117 spin_unlock(&mmio_read
->lock
);
121 static int efa_com_admin_init_sq(struct efa_com_dev
*edev
)
123 struct efa_com_admin_queue
*aq
= &edev
->aq
;
124 struct efa_com_admin_sq
*sq
= &aq
->sq
;
125 u16 size
= aq
->depth
* sizeof(*sq
->entries
);
131 dma_alloc_coherent(aq
->dmadev
, size
, &sq
->dma_addr
, GFP_KERNEL
);
135 spin_lock_init(&sq
->lock
);
141 sq
->db_addr
= (u32 __iomem
*)(edev
->reg_bar
+ EFA_REGS_AQ_PROD_DB_OFF
);
143 addr_high
= EFA_DMA_ADDR_TO_UINT32_HIGH(sq
->dma_addr
);
144 addr_low
= EFA_DMA_ADDR_TO_UINT32_LOW(sq
->dma_addr
);
146 writel(addr_low
, edev
->reg_bar
+ EFA_REGS_AQ_BASE_LO_OFF
);
147 writel(addr_high
, edev
->reg_bar
+ EFA_REGS_AQ_BASE_HI_OFF
);
149 EFA_SET(&aq_caps
, EFA_REGS_AQ_CAPS_AQ_DEPTH
, aq
->depth
);
150 EFA_SET(&aq_caps
, EFA_REGS_AQ_CAPS_AQ_ENTRY_SIZE
,
151 sizeof(struct efa_admin_aq_entry
));
153 writel(aq_caps
, edev
->reg_bar
+ EFA_REGS_AQ_CAPS_OFF
);
158 static int efa_com_admin_init_cq(struct efa_com_dev
*edev
)
160 struct efa_com_admin_queue
*aq
= &edev
->aq
;
161 struct efa_com_admin_cq
*cq
= &aq
->cq
;
162 u16 size
= aq
->depth
* sizeof(*cq
->entries
);
168 dma_alloc_coherent(aq
->dmadev
, size
, &cq
->dma_addr
, GFP_KERNEL
);
172 spin_lock_init(&cq
->lock
);
177 addr_high
= EFA_DMA_ADDR_TO_UINT32_HIGH(cq
->dma_addr
);
178 addr_low
= EFA_DMA_ADDR_TO_UINT32_LOW(cq
->dma_addr
);
180 writel(addr_low
, edev
->reg_bar
+ EFA_REGS_ACQ_BASE_LO_OFF
);
181 writel(addr_high
, edev
->reg_bar
+ EFA_REGS_ACQ_BASE_HI_OFF
);
183 EFA_SET(&acq_caps
, EFA_REGS_ACQ_CAPS_ACQ_DEPTH
, aq
->depth
);
184 EFA_SET(&acq_caps
, EFA_REGS_ACQ_CAPS_ACQ_ENTRY_SIZE
,
185 sizeof(struct efa_admin_acq_entry
));
186 EFA_SET(&acq_caps
, EFA_REGS_ACQ_CAPS_ACQ_MSIX_VECTOR
,
187 aq
->msix_vector_idx
);
189 writel(acq_caps
, edev
->reg_bar
+ EFA_REGS_ACQ_CAPS_OFF
);
194 static int efa_com_admin_init_aenq(struct efa_com_dev
*edev
,
195 struct efa_aenq_handlers
*aenq_handlers
)
197 struct efa_com_aenq
*aenq
= &edev
->aenq
;
198 u32 addr_low
, addr_high
;
202 if (!aenq_handlers
) {
203 ibdev_err(edev
->efa_dev
, "aenq handlers pointer is NULL\n");
207 size
= EFA_ASYNC_QUEUE_DEPTH
* sizeof(*aenq
->entries
);
208 aenq
->entries
= dma_alloc_coherent(edev
->dmadev
, size
, &aenq
->dma_addr
,
213 aenq
->aenq_handlers
= aenq_handlers
;
214 aenq
->depth
= EFA_ASYNC_QUEUE_DEPTH
;
218 addr_low
= EFA_DMA_ADDR_TO_UINT32_LOW(aenq
->dma_addr
);
219 addr_high
= EFA_DMA_ADDR_TO_UINT32_HIGH(aenq
->dma_addr
);
221 writel(addr_low
, edev
->reg_bar
+ EFA_REGS_AENQ_BASE_LO_OFF
);
222 writel(addr_high
, edev
->reg_bar
+ EFA_REGS_AENQ_BASE_HI_OFF
);
224 EFA_SET(&aenq_caps
, EFA_REGS_AENQ_CAPS_AENQ_DEPTH
, aenq
->depth
);
225 EFA_SET(&aenq_caps
, EFA_REGS_AENQ_CAPS_AENQ_ENTRY_SIZE
,
226 sizeof(struct efa_admin_aenq_entry
));
227 EFA_SET(&aenq_caps
, EFA_REGS_AENQ_CAPS_AENQ_MSIX_VECTOR
,
228 aenq
->msix_vector_idx
);
229 writel(aenq_caps
, edev
->reg_bar
+ EFA_REGS_AENQ_CAPS_OFF
);
232 * Init cons_db to mark that all entries in the queue
233 * are initially available
235 writel(edev
->aenq
.cc
, edev
->reg_bar
+ EFA_REGS_AENQ_CONS_DB_OFF
);
240 /* ID to be used with efa_com_get_comp_ctx */
241 static u16
efa_com_alloc_ctx_id(struct efa_com_admin_queue
*aq
)
245 spin_lock(&aq
->comp_ctx_lock
);
246 ctx_id
= aq
->comp_ctx_pool
[aq
->comp_ctx_pool_next
];
247 aq
->comp_ctx_pool_next
++;
248 spin_unlock(&aq
->comp_ctx_lock
);
253 static void efa_com_dealloc_ctx_id(struct efa_com_admin_queue
*aq
,
256 spin_lock(&aq
->comp_ctx_lock
);
257 aq
->comp_ctx_pool_next
--;
258 aq
->comp_ctx_pool
[aq
->comp_ctx_pool_next
] = ctx_id
;
259 spin_unlock(&aq
->comp_ctx_lock
);
262 static inline void efa_com_put_comp_ctx(struct efa_com_admin_queue
*aq
,
263 struct efa_comp_ctx
*comp_ctx
)
265 u16 cmd_id
= EFA_GET(&comp_ctx
->user_cqe
->acq_common_descriptor
.command
,
266 EFA_ADMIN_ACQ_COMMON_DESC_COMMAND_ID
);
267 u16 ctx_id
= cmd_id
& (aq
->depth
- 1);
269 ibdev_dbg(aq
->efa_dev
, "Put completion command_id %#x\n", cmd_id
);
270 comp_ctx
->occupied
= 0;
271 efa_com_dealloc_ctx_id(aq
, ctx_id
);
274 static struct efa_comp_ctx
*efa_com_get_comp_ctx(struct efa_com_admin_queue
*aq
,
275 u16 cmd_id
, bool capture
)
277 u16 ctx_id
= cmd_id
& (aq
->depth
- 1);
279 if (aq
->comp_ctx
[ctx_id
].occupied
&& capture
) {
280 ibdev_err_ratelimited(
282 "Completion context for command_id %#x is occupied\n",
288 aq
->comp_ctx
[ctx_id
].occupied
= 1;
289 ibdev_dbg(aq
->efa_dev
,
290 "Take completion ctxt for command_id %#x\n", cmd_id
);
293 return &aq
->comp_ctx
[ctx_id
];
296 static struct efa_comp_ctx
*__efa_com_submit_admin_cmd(struct efa_com_admin_queue
*aq
,
297 struct efa_admin_aq_entry
*cmd
,
298 size_t cmd_size_in_bytes
,
299 struct efa_admin_acq_entry
*comp
,
300 size_t comp_size_in_bytes
)
302 struct efa_admin_aq_entry
*aqe
;
303 struct efa_comp_ctx
*comp_ctx
;
309 queue_size_mask
= aq
->depth
- 1;
310 pi
= aq
->sq
.pc
& queue_size_mask
;
312 ctx_id
= efa_com_alloc_ctx_id(aq
);
314 /* cmd_id LSBs are the ctx_id and MSBs are entropy bits from pc */
315 cmd_id
= ctx_id
& queue_size_mask
;
316 cmd_id
|= aq
->sq
.pc
& ~queue_size_mask
;
317 cmd_id
&= EFA_ADMIN_AQ_COMMON_DESC_COMMAND_ID_MASK
;
319 cmd
->aq_common_descriptor
.command_id
= cmd_id
;
320 EFA_SET(&cmd
->aq_common_descriptor
.flags
,
321 EFA_ADMIN_AQ_COMMON_DESC_PHASE
, aq
->sq
.phase
);
323 comp_ctx
= efa_com_get_comp_ctx(aq
, cmd_id
, true);
325 efa_com_dealloc_ctx_id(aq
, ctx_id
);
326 return ERR_PTR(-EINVAL
);
329 comp_ctx
->status
= EFA_CMD_SUBMITTED
;
330 comp_ctx
->comp_size
= comp_size_in_bytes
;
331 comp_ctx
->user_cqe
= comp
;
332 comp_ctx
->cmd_opcode
= cmd
->aq_common_descriptor
.opcode
;
334 reinit_completion(&comp_ctx
->wait_event
);
336 aqe
= &aq
->sq
.entries
[pi
];
337 memset(aqe
, 0, sizeof(*aqe
));
338 memcpy(aqe
, cmd
, cmd_size_in_bytes
);
341 atomic64_inc(&aq
->stats
.submitted_cmd
);
343 if ((aq
->sq
.pc
& queue_size_mask
) == 0)
344 aq
->sq
.phase
= !aq
->sq
.phase
;
346 /* barrier not needed in case of writel */
347 writel(aq
->sq
.pc
, aq
->sq
.db_addr
);
352 static inline int efa_com_init_comp_ctxt(struct efa_com_admin_queue
*aq
)
354 size_t pool_size
= aq
->depth
* sizeof(*aq
->comp_ctx_pool
);
355 size_t size
= aq
->depth
* sizeof(struct efa_comp_ctx
);
356 struct efa_comp_ctx
*comp_ctx
;
359 aq
->comp_ctx
= devm_kzalloc(aq
->dmadev
, size
, GFP_KERNEL
);
360 aq
->comp_ctx_pool
= devm_kzalloc(aq
->dmadev
, pool_size
, GFP_KERNEL
);
361 if (!aq
->comp_ctx
|| !aq
->comp_ctx_pool
) {
362 devm_kfree(aq
->dmadev
, aq
->comp_ctx_pool
);
363 devm_kfree(aq
->dmadev
, aq
->comp_ctx
);
367 for (i
= 0; i
< aq
->depth
; i
++) {
368 comp_ctx
= efa_com_get_comp_ctx(aq
, i
, false);
370 init_completion(&comp_ctx
->wait_event
);
372 aq
->comp_ctx_pool
[i
] = i
;
375 spin_lock_init(&aq
->comp_ctx_lock
);
377 aq
->comp_ctx_pool_next
= 0;
382 static struct efa_comp_ctx
*efa_com_submit_admin_cmd(struct efa_com_admin_queue
*aq
,
383 struct efa_admin_aq_entry
*cmd
,
384 size_t cmd_size_in_bytes
,
385 struct efa_admin_acq_entry
*comp
,
386 size_t comp_size_in_bytes
)
388 struct efa_comp_ctx
*comp_ctx
;
390 spin_lock(&aq
->sq
.lock
);
391 if (!test_bit(EFA_AQ_STATE_RUNNING_BIT
, &aq
->state
)) {
392 ibdev_err_ratelimited(aq
->efa_dev
, "Admin queue is closed\n");
393 spin_unlock(&aq
->sq
.lock
);
394 return ERR_PTR(-ENODEV
);
397 comp_ctx
= __efa_com_submit_admin_cmd(aq
, cmd
, cmd_size_in_bytes
, comp
,
399 spin_unlock(&aq
->sq
.lock
);
400 if (IS_ERR(comp_ctx
))
401 clear_bit(EFA_AQ_STATE_RUNNING_BIT
, &aq
->state
);
406 static void efa_com_handle_single_admin_completion(struct efa_com_admin_queue
*aq
,
407 struct efa_admin_acq_entry
*cqe
)
409 struct efa_comp_ctx
*comp_ctx
;
412 cmd_id
= EFA_GET(&cqe
->acq_common_descriptor
.command
,
413 EFA_ADMIN_ACQ_COMMON_DESC_COMMAND_ID
);
415 comp_ctx
= efa_com_get_comp_ctx(aq
, cmd_id
, false);
417 ibdev_err(aq
->efa_dev
,
418 "comp_ctx is NULL. Changing the admin queue running state\n");
419 clear_bit(EFA_AQ_STATE_RUNNING_BIT
, &aq
->state
);
423 comp_ctx
->status
= EFA_CMD_COMPLETED
;
424 comp_ctx
->comp_status
= cqe
->acq_common_descriptor
.status
;
425 if (comp_ctx
->user_cqe
)
426 memcpy(comp_ctx
->user_cqe
, cqe
, comp_ctx
->comp_size
);
428 if (!test_bit(EFA_AQ_STATE_POLLING_BIT
, &aq
->state
))
429 complete(&comp_ctx
->wait_event
);
432 static void efa_com_handle_admin_completion(struct efa_com_admin_queue
*aq
)
434 struct efa_admin_acq_entry
*cqe
;
440 queue_size_mask
= aq
->depth
- 1;
442 ci
= aq
->cq
.cc
& queue_size_mask
;
443 phase
= aq
->cq
.phase
;
445 cqe
= &aq
->cq
.entries
[ci
];
447 /* Go over all the completions */
448 while ((READ_ONCE(cqe
->acq_common_descriptor
.flags
) &
449 EFA_ADMIN_ACQ_COMMON_DESC_PHASE_MASK
) == phase
) {
451 * Do not read the rest of the completion entry before the
452 * phase bit was validated
455 efa_com_handle_single_admin_completion(aq
, cqe
);
459 if (ci
== aq
->depth
) {
464 cqe
= &aq
->cq
.entries
[ci
];
467 aq
->cq
.cc
+= comp_num
;
468 aq
->cq
.phase
= phase
;
469 aq
->sq
.cc
+= comp_num
;
470 atomic64_add(comp_num
, &aq
->stats
.completed_cmd
);
473 static int efa_com_comp_status_to_errno(u8 comp_status
)
475 switch (comp_status
) {
476 case EFA_ADMIN_SUCCESS
:
478 case EFA_ADMIN_RESOURCE_ALLOCATION_FAILURE
:
480 case EFA_ADMIN_UNSUPPORTED_OPCODE
:
482 case EFA_ADMIN_BAD_OPCODE
:
483 case EFA_ADMIN_MALFORMED_REQUEST
:
484 case EFA_ADMIN_ILLEGAL_PARAMETER
:
485 case EFA_ADMIN_UNKNOWN_ERROR
:
492 static int efa_com_wait_and_process_admin_cq_polling(struct efa_comp_ctx
*comp_ctx
,
493 struct efa_com_admin_queue
*aq
)
495 unsigned long timeout
;
499 timeout
= jiffies
+ usecs_to_jiffies(aq
->completion_timeout
);
502 spin_lock_irqsave(&aq
->cq
.lock
, flags
);
503 efa_com_handle_admin_completion(aq
);
504 spin_unlock_irqrestore(&aq
->cq
.lock
, flags
);
506 if (comp_ctx
->status
!= EFA_CMD_SUBMITTED
)
509 if (time_is_before_jiffies(timeout
)) {
510 ibdev_err_ratelimited(
512 "Wait for completion (polling) timeout\n");
513 /* EFA didn't have any completion */
514 atomic64_inc(&aq
->stats
.no_completion
);
516 clear_bit(EFA_AQ_STATE_RUNNING_BIT
, &aq
->state
);
521 msleep(aq
->poll_interval
);
524 err
= efa_com_comp_status_to_errno(comp_ctx
->comp_status
);
526 efa_com_put_comp_ctx(aq
, comp_ctx
);
530 static int efa_com_wait_and_process_admin_cq_interrupts(struct efa_comp_ctx
*comp_ctx
,
531 struct efa_com_admin_queue
*aq
)
536 wait_for_completion_timeout(&comp_ctx
->wait_event
,
537 usecs_to_jiffies(aq
->completion_timeout
));
540 * In case the command wasn't completed find out the root cause.
541 * There might be 2 kinds of errors
542 * 1) No completion (timeout reached)
543 * 2) There is completion but the device didn't get any msi-x interrupt.
545 if (comp_ctx
->status
== EFA_CMD_SUBMITTED
) {
546 spin_lock_irqsave(&aq
->cq
.lock
, flags
);
547 efa_com_handle_admin_completion(aq
);
548 spin_unlock_irqrestore(&aq
->cq
.lock
, flags
);
550 atomic64_inc(&aq
->stats
.no_completion
);
552 if (comp_ctx
->status
== EFA_CMD_COMPLETED
)
553 ibdev_err_ratelimited(
555 "The device sent a completion but the driver didn't receive any MSI-X interrupt for admin cmd %s(%d) status %d (ctx: 0x%p, sq producer: %d, sq consumer: %d, cq consumer: %d)\n",
556 efa_com_cmd_str(comp_ctx
->cmd_opcode
),
557 comp_ctx
->cmd_opcode
, comp_ctx
->status
,
558 comp_ctx
, aq
->sq
.pc
, aq
->sq
.cc
, aq
->cq
.cc
);
560 ibdev_err_ratelimited(
562 "The device didn't send any completion for admin cmd %s(%d) status %d (ctx 0x%p, sq producer: %d, sq consumer: %d, cq consumer: %d)\n",
563 efa_com_cmd_str(comp_ctx
->cmd_opcode
),
564 comp_ctx
->cmd_opcode
, comp_ctx
->status
,
565 comp_ctx
, aq
->sq
.pc
, aq
->sq
.cc
, aq
->cq
.cc
);
567 clear_bit(EFA_AQ_STATE_RUNNING_BIT
, &aq
->state
);
572 err
= efa_com_comp_status_to_errno(comp_ctx
->comp_status
);
574 efa_com_put_comp_ctx(aq
, comp_ctx
);
579 * There are two types to wait for completion.
580 * Polling mode - wait until the completion is available.
581 * Async mode - wait on wait queue until the completion is ready
582 * (or the timeout expired).
583 * It is expected that the IRQ called efa_com_handle_admin_completion
584 * to mark the completions.
586 static int efa_com_wait_and_process_admin_cq(struct efa_comp_ctx
*comp_ctx
,
587 struct efa_com_admin_queue
*aq
)
589 if (test_bit(EFA_AQ_STATE_POLLING_BIT
, &aq
->state
))
590 return efa_com_wait_and_process_admin_cq_polling(comp_ctx
, aq
);
592 return efa_com_wait_and_process_admin_cq_interrupts(comp_ctx
, aq
);
596 * efa_com_cmd_exec - Execute admin command
598 * @cmd: the admin command to execute.
599 * @cmd_size: the command size.
600 * @comp: command completion return entry.
601 * @comp_size: command completion size.
602 * Submit an admin command and then wait until the device will return a
604 * The completion will be copied into comp.
606 * @return - 0 on success, negative value on failure.
608 int efa_com_cmd_exec(struct efa_com_admin_queue
*aq
,
609 struct efa_admin_aq_entry
*cmd
,
611 struct efa_admin_acq_entry
*comp
,
614 struct efa_comp_ctx
*comp_ctx
;
619 /* In case of queue FULL */
620 down(&aq
->avail_cmds
);
622 ibdev_dbg(aq
->efa_dev
, "%s (opcode %d)\n",
623 efa_com_cmd_str(cmd
->aq_common_descriptor
.opcode
),
624 cmd
->aq_common_descriptor
.opcode
);
625 comp_ctx
= efa_com_submit_admin_cmd(aq
, cmd
, cmd_size
, comp
, comp_size
);
626 if (IS_ERR(comp_ctx
)) {
627 ibdev_err_ratelimited(
629 "Failed to submit command %s (opcode %u) err %ld\n",
630 efa_com_cmd_str(cmd
->aq_common_descriptor
.opcode
),
631 cmd
->aq_common_descriptor
.opcode
, PTR_ERR(comp_ctx
));
634 atomic64_inc(&aq
->stats
.cmd_err
);
635 return PTR_ERR(comp_ctx
);
638 err
= efa_com_wait_and_process_admin_cq(comp_ctx
, aq
);
640 ibdev_err_ratelimited(
642 "Failed to process command %s (opcode %u) comp_status %d err %d\n",
643 efa_com_cmd_str(cmd
->aq_common_descriptor
.opcode
),
644 cmd
->aq_common_descriptor
.opcode
, comp_ctx
->comp_status
,
646 atomic64_inc(&aq
->stats
.cmd_err
);
655 * efa_com_admin_destroy - Destroy the admin and the async events queues.
656 * @edev: EFA communication layer struct
658 void efa_com_admin_destroy(struct efa_com_dev
*edev
)
660 struct efa_com_admin_queue
*aq
= &edev
->aq
;
661 struct efa_com_aenq
*aenq
= &edev
->aenq
;
662 struct efa_com_admin_cq
*cq
= &aq
->cq
;
663 struct efa_com_admin_sq
*sq
= &aq
->sq
;
666 clear_bit(EFA_AQ_STATE_RUNNING_BIT
, &aq
->state
);
668 devm_kfree(edev
->dmadev
, aq
->comp_ctx_pool
);
669 devm_kfree(edev
->dmadev
, aq
->comp_ctx
);
671 size
= aq
->depth
* sizeof(*sq
->entries
);
672 dma_free_coherent(edev
->dmadev
, size
, sq
->entries
, sq
->dma_addr
);
674 size
= aq
->depth
* sizeof(*cq
->entries
);
675 dma_free_coherent(edev
->dmadev
, size
, cq
->entries
, cq
->dma_addr
);
677 size
= aenq
->depth
* sizeof(*aenq
->entries
);
678 dma_free_coherent(edev
->dmadev
, size
, aenq
->entries
, aenq
->dma_addr
);
682 * efa_com_set_admin_polling_mode - Set the admin completion queue polling mode
683 * @edev: EFA communication layer struct
684 * @polling: Enable/Disable polling mode
686 * Set the admin completion mode.
688 void efa_com_set_admin_polling_mode(struct efa_com_dev
*edev
, bool polling
)
693 EFA_SET(&mask_value
, EFA_REGS_INTR_MASK_EN
, 1);
695 writel(mask_value
, edev
->reg_bar
+ EFA_REGS_INTR_MASK_OFF
);
697 set_bit(EFA_AQ_STATE_POLLING_BIT
, &edev
->aq
.state
);
699 clear_bit(EFA_AQ_STATE_POLLING_BIT
, &edev
->aq
.state
);
702 static void efa_com_stats_init(struct efa_com_dev
*edev
)
704 atomic64_t
*s
= (atomic64_t
*)&edev
->aq
.stats
;
707 for (i
= 0; i
< sizeof(edev
->aq
.stats
) / sizeof(*s
); i
++, s
++)
712 * efa_com_admin_init - Init the admin and the async queues
713 * @edev: EFA communication layer struct
714 * @aenq_handlers: Those handlers to be called upon event.
716 * Initialize the admin submission and completion queues.
717 * Initialize the asynchronous events notification queues.
719 * @return - 0 on success, negative value on failure.
721 int efa_com_admin_init(struct efa_com_dev
*edev
,
722 struct efa_aenq_handlers
*aenq_handlers
)
724 struct efa_com_admin_queue
*aq
= &edev
->aq
;
730 dev_sts
= efa_com_reg_read32(edev
, EFA_REGS_DEV_STS_OFF
);
731 if (!EFA_GET(&dev_sts
, EFA_REGS_DEV_STS_READY
)) {
732 ibdev_err(edev
->efa_dev
,
733 "Device isn't ready, abort com init %#x\n", dev_sts
);
737 aq
->depth
= EFA_ADMIN_QUEUE_DEPTH
;
739 aq
->dmadev
= edev
->dmadev
;
740 aq
->efa_dev
= edev
->efa_dev
;
741 set_bit(EFA_AQ_STATE_POLLING_BIT
, &aq
->state
);
743 sema_init(&aq
->avail_cmds
, aq
->depth
);
745 efa_com_stats_init(edev
);
747 err
= efa_com_init_comp_ctxt(aq
);
751 err
= efa_com_admin_init_sq(edev
);
753 goto err_destroy_comp_ctxt
;
755 err
= efa_com_admin_init_cq(edev
);
759 efa_com_set_admin_polling_mode(edev
, false);
761 err
= efa_com_admin_init_aenq(edev
, aenq_handlers
);
765 cap
= efa_com_reg_read32(edev
, EFA_REGS_CAPS_OFF
);
766 timeout
= EFA_GET(&cap
, EFA_REGS_CAPS_ADMIN_CMD_TO
);
768 /* the resolution of timeout reg is 100ms */
769 aq
->completion_timeout
= timeout
* 100000;
771 aq
->completion_timeout
= ADMIN_CMD_TIMEOUT_US
;
773 aq
->poll_interval
= EFA_POLL_INTERVAL_MS
;
775 set_bit(EFA_AQ_STATE_RUNNING_BIT
, &aq
->state
);
780 dma_free_coherent(edev
->dmadev
, aq
->depth
* sizeof(*aq
->cq
.entries
),
781 aq
->cq
.entries
, aq
->cq
.dma_addr
);
783 dma_free_coherent(edev
->dmadev
, aq
->depth
* sizeof(*aq
->sq
.entries
),
784 aq
->sq
.entries
, aq
->sq
.dma_addr
);
785 err_destroy_comp_ctxt
:
786 devm_kfree(edev
->dmadev
, aq
->comp_ctx
);
792 * efa_com_admin_q_comp_intr_handler - admin queue interrupt handler
793 * @edev: EFA communication layer struct
795 * This method goes over the admin completion queue and wakes up
796 * all the pending threads that wait on the commands wait event.
798 * @note: Should be called after MSI-X interrupt.
800 void efa_com_admin_q_comp_intr_handler(struct efa_com_dev
*edev
)
804 spin_lock_irqsave(&edev
->aq
.cq
.lock
, flags
);
805 efa_com_handle_admin_completion(&edev
->aq
);
806 spin_unlock_irqrestore(&edev
->aq
.cq
.lock
, flags
);
810 * efa_handle_specific_aenq_event:
811 * return the handler that is relevant to the specific event group
813 static efa_aenq_handler
efa_com_get_specific_aenq_cb(struct efa_com_dev
*edev
,
816 struct efa_aenq_handlers
*aenq_handlers
= edev
->aenq
.aenq_handlers
;
818 if (group
< EFA_MAX_HANDLERS
&& aenq_handlers
->handlers
[group
])
819 return aenq_handlers
->handlers
[group
];
821 return aenq_handlers
->unimplemented_handler
;
825 * efa_com_aenq_intr_handler - AENQ interrupt handler
826 * @edev: EFA communication layer struct
827 * @data: Data of interrupt handler.
829 * Go over the async event notification queue and call the proper aenq handler.
831 void efa_com_aenq_intr_handler(struct efa_com_dev
*edev
, void *data
)
833 struct efa_admin_aenq_common_desc
*aenq_common
;
834 struct efa_com_aenq
*aenq
= &edev
->aenq
;
835 struct efa_admin_aenq_entry
*aenq_e
;
836 efa_aenq_handler handler_cb
;
841 ci
= aenq
->cc
& (aenq
->depth
- 1);
843 aenq_e
= &aenq
->entries
[ci
]; /* Get first entry */
844 aenq_common
= &aenq_e
->aenq_common_desc
;
846 /* Go over all the events */
847 while ((READ_ONCE(aenq_common
->flags
) &
848 EFA_ADMIN_AENQ_COMMON_DESC_PHASE_MASK
) == phase
) {
850 * Do not read the rest of the completion entry before the
851 * phase bit was validated
855 /* Handle specific event*/
856 handler_cb
= efa_com_get_specific_aenq_cb(edev
,
858 handler_cb(data
, aenq_e
); /* call the actual event handler*/
860 /* Get next event entry */
864 if (ci
== aenq
->depth
) {
868 aenq_e
= &aenq
->entries
[ci
];
869 aenq_common
= &aenq_e
->aenq_common_desc
;
872 aenq
->cc
+= processed
;
875 /* Don't update aenq doorbell if there weren't any processed events */
879 /* barrier not needed in case of writel */
880 writel(aenq
->cc
, edev
->reg_bar
+ EFA_REGS_AENQ_CONS_DB_OFF
);
883 static void efa_com_mmio_reg_read_resp_addr_init(struct efa_com_dev
*edev
)
885 struct efa_com_mmio_read
*mmio_read
= &edev
->mmio_read
;
889 /* dma_addr_bits is unknown at this point */
890 addr_high
= (mmio_read
->read_resp_dma_addr
>> 32) & GENMASK(31, 0);
891 addr_low
= mmio_read
->read_resp_dma_addr
& GENMASK(31, 0);
893 writel(addr_high
, edev
->reg_bar
+ EFA_REGS_MMIO_RESP_HI_OFF
);
894 writel(addr_low
, edev
->reg_bar
+ EFA_REGS_MMIO_RESP_LO_OFF
);
897 int efa_com_mmio_reg_read_init(struct efa_com_dev
*edev
)
899 struct efa_com_mmio_read
*mmio_read
= &edev
->mmio_read
;
901 spin_lock_init(&mmio_read
->lock
);
902 mmio_read
->read_resp
=
903 dma_alloc_coherent(edev
->dmadev
, sizeof(*mmio_read
->read_resp
),
904 &mmio_read
->read_resp_dma_addr
, GFP_KERNEL
);
905 if (!mmio_read
->read_resp
)
908 efa_com_mmio_reg_read_resp_addr_init(edev
);
910 mmio_read
->read_resp
->req_id
= 0;
911 mmio_read
->seq_num
= 0;
912 mmio_read
->mmio_read_timeout
= EFA_REG_READ_TIMEOUT_US
;
917 void efa_com_mmio_reg_read_destroy(struct efa_com_dev
*edev
)
919 struct efa_com_mmio_read
*mmio_read
= &edev
->mmio_read
;
921 dma_free_coherent(edev
->dmadev
, sizeof(*mmio_read
->read_resp
),
922 mmio_read
->read_resp
, mmio_read
->read_resp_dma_addr
);
925 int efa_com_validate_version(struct efa_com_dev
*edev
)
927 u32 min_ctrl_ver
= 0;
934 * Make sure the EFA version and the controller version are at least
935 * as the driver expects
937 ver
= efa_com_reg_read32(edev
, EFA_REGS_VERSION_OFF
);
938 ctrl_ver
= efa_com_reg_read32(edev
,
939 EFA_REGS_CONTROLLER_VERSION_OFF
);
941 ibdev_dbg(edev
->efa_dev
, "efa device version: %d.%d\n",
942 EFA_GET(&ver
, EFA_REGS_VERSION_MAJOR_VERSION
),
943 EFA_GET(&ver
, EFA_REGS_VERSION_MINOR_VERSION
));
945 EFA_SET(&min_ver
, EFA_REGS_VERSION_MAJOR_VERSION
,
946 EFA_ADMIN_API_VERSION_MAJOR
);
947 EFA_SET(&min_ver
, EFA_REGS_VERSION_MINOR_VERSION
,
948 EFA_ADMIN_API_VERSION_MINOR
);
950 ibdev_err(edev
->efa_dev
,
951 "EFA version is lower than the minimal version the driver supports\n");
957 "efa controller version: %d.%d.%d implementation version %d\n",
958 EFA_GET(&ctrl_ver
, EFA_REGS_CONTROLLER_VERSION_MAJOR_VERSION
),
959 EFA_GET(&ctrl_ver
, EFA_REGS_CONTROLLER_VERSION_MINOR_VERSION
),
961 EFA_REGS_CONTROLLER_VERSION_SUBMINOR_VERSION
),
962 EFA_GET(&ctrl_ver
, EFA_REGS_CONTROLLER_VERSION_IMPL_ID
));
965 EFA_GET(&ctrl_ver
, EFA_REGS_CONTROLLER_VERSION_MAJOR_VERSION
) |
966 EFA_GET(&ctrl_ver
, EFA_REGS_CONTROLLER_VERSION_MINOR_VERSION
) |
968 EFA_REGS_CONTROLLER_VERSION_SUBMINOR_VERSION
);
970 EFA_SET(&min_ctrl_ver
, EFA_REGS_CONTROLLER_VERSION_MAJOR_VERSION
,
972 EFA_SET(&min_ctrl_ver
, EFA_REGS_CONTROLLER_VERSION_MINOR_VERSION
,
974 EFA_SET(&min_ctrl_ver
, EFA_REGS_CONTROLLER_VERSION_SUBMINOR_VERSION
,
976 /* Validate the ctrl version without the implementation ID */
977 if (ctrl_ver_masked
< min_ctrl_ver
) {
978 ibdev_err(edev
->efa_dev
,
979 "EFA ctrl version is lower than the minimal ctrl version the driver supports\n");
987 * efa_com_get_dma_width - Retrieve physical dma address width the device
989 * @edev: EFA communication layer struct
991 * Retrieve the maximum physical address bits the device can handle.
993 * @return: > 0 on Success and negative value otherwise.
995 int efa_com_get_dma_width(struct efa_com_dev
*edev
)
997 u32 caps
= efa_com_reg_read32(edev
, EFA_REGS_CAPS_OFF
);
1000 width
= EFA_GET(&caps
, EFA_REGS_CAPS_DMA_ADDR_WIDTH
);
1002 ibdev_dbg(edev
->efa_dev
, "DMA width: %d\n", width
);
1004 if (width
< 32 || width
> 64) {
1005 ibdev_err(edev
->efa_dev
, "DMA width illegal value: %d\n", width
);
1009 edev
->dma_addr_bits
= width
;
1014 static int wait_for_reset_state(struct efa_com_dev
*edev
, u32 timeout
, int on
)
1018 for (i
= 0; i
< timeout
; i
++) {
1019 val
= efa_com_reg_read32(edev
, EFA_REGS_DEV_STS_OFF
);
1021 if (EFA_GET(&val
, EFA_REGS_DEV_STS_RESET_IN_PROGRESS
) == on
)
1024 ibdev_dbg(edev
->efa_dev
, "Reset indication val %d\n", val
);
1025 msleep(EFA_POLL_INTERVAL_MS
);
1032 * efa_com_dev_reset - Perform device FLR to the device.
1033 * @edev: EFA communication layer struct
1034 * @reset_reason: Specify what is the trigger for the reset in case of an error.
1036 * @return - 0 on success, negative value on failure.
1038 int efa_com_dev_reset(struct efa_com_dev
*edev
,
1039 enum efa_regs_reset_reason_types reset_reason
)
1041 u32 stat
, timeout
, cap
;
1045 stat
= efa_com_reg_read32(edev
, EFA_REGS_DEV_STS_OFF
);
1046 cap
= efa_com_reg_read32(edev
, EFA_REGS_CAPS_OFF
);
1048 if (!EFA_GET(&stat
, EFA_REGS_DEV_STS_READY
)) {
1049 ibdev_err(edev
->efa_dev
,
1050 "Device isn't ready, can't reset device\n");
1054 timeout
= EFA_GET(&cap
, EFA_REGS_CAPS_RESET_TIMEOUT
);
1056 ibdev_err(edev
->efa_dev
, "Invalid timeout value\n");
1061 EFA_SET(&reset_val
, EFA_REGS_DEV_CTL_DEV_RESET
, 1);
1062 EFA_SET(&reset_val
, EFA_REGS_DEV_CTL_RESET_REASON
, reset_reason
);
1063 writel(reset_val
, edev
->reg_bar
+ EFA_REGS_DEV_CTL_OFF
);
1065 /* reset clears the mmio readless address, restore it */
1066 efa_com_mmio_reg_read_resp_addr_init(edev
);
1068 err
= wait_for_reset_state(edev
, timeout
, 1);
1070 ibdev_err(edev
->efa_dev
, "Reset indication didn't turn on\n");
1075 writel(0, edev
->reg_bar
+ EFA_REGS_DEV_CTL_OFF
);
1076 err
= wait_for_reset_state(edev
, timeout
, 0);
1078 ibdev_err(edev
->efa_dev
, "Reset indication didn't turn off\n");
1082 timeout
= EFA_GET(&cap
, EFA_REGS_CAPS_ADMIN_CMD_TO
);
1084 /* the resolution of timeout reg is 100ms */
1085 edev
->aq
.completion_timeout
= timeout
* 100000;
1087 edev
->aq
.completion_timeout
= ADMIN_CMD_TIMEOUT_US
;