1 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
2 /* Copyright (c) 2021, Microsoft Corporation. */
3
4 #include <linux/bitfield.h>
5 #include <linux/debugfs.h>
6 #include <linux/module.h>
7 #include <linux/pci.h>
8 #include <linux/sizes.h>
9 #include <linux/utsname.h>
10 #include <linux/version.h>
11 #include <linux/msi.h>
12 #include <linux/irqdomain.h>
13 #include <linux/export.h>
14 #include <linux/uaccess.h>
15
16 #include <net/mana/mana.h>
17 #include <net/mana/hw_channel.h>
18
19 struct dentry *mana_debugfs_root;
20
21 struct mana_dev_recovery {
22 struct list_head list;
23 struct pci_dev *pdev;
24 enum gdma_eqe_type type;
25 };
26
27 static struct mana_dev_recovery_work {
28 struct list_head dev_list;
29 struct delayed_work work;
30
31 /* Lock for dev_list above */
32 spinlock_t lock;
33 } mana_dev_recovery_work;
34
mana_gd_r32(struct gdma_context * g,u64 offset)35 static u32 mana_gd_r32(struct gdma_context *g, u64 offset)
36 {
37 return readl(g->bar0_va + offset);
38 }
39
mana_gd_r64(struct gdma_context * g,u64 offset)40 static u64 mana_gd_r64(struct gdma_context *g, u64 offset)
41 {
42 return readq(g->bar0_va + offset);
43 }
44
mana_gd_init_pf_regs(struct pci_dev * pdev)45 static int mana_gd_init_pf_regs(struct pci_dev *pdev)
46 {
47 struct gdma_context *gc = pci_get_drvdata(pdev);
48 u64 remaining_barsize;
49 u64 sriov_base_off;
50 u64 sriov_shm_off;
51
52 gc->db_page_size = mana_gd_r32(gc, GDMA_PF_REG_DB_PAGE_SIZE) & 0xFFFF;
53
54 /* mana_gd_ring_doorbell() accesses offsets up to DOORBELL_OFFSET_EQ
55 * (0xFF8) + 8 bytes = 4KB within each doorbell page, so the page
56 * size must be at least SZ_4K.
57 */
58 if (gc->db_page_size < SZ_4K) {
59 dev_err(gc->dev,
60 "Doorbell page size %llu too small (min %u)\n",
61 gc->db_page_size, SZ_4K);
62 return -EPROTO;
63 }
64
65 gc->db_page_off = mana_gd_r64(gc, GDMA_PF_REG_DB_PAGE_OFF);
66
67 /* Validate doorbell offset is within BAR0 */
68 if (gc->db_page_off >= gc->bar0_size) {
69 dev_err(gc->dev,
70 "Doorbell offset 0x%llx exceeds BAR0 size 0x%llx\n",
71 gc->db_page_off, (u64)gc->bar0_size);
72 return -EPROTO;
73 }
74
75 gc->db_page_base = gc->bar0_va + gc->db_page_off;
76 gc->phys_db_page_base = gc->bar0_pa + gc->db_page_off;
77
78 sriov_base_off = mana_gd_r64(gc, GDMA_SRIOV_REG_CFG_BASE_OFF);
79 if (sriov_base_off >= gc->bar0_size ||
80 gc->bar0_size - sriov_base_off <
81 GDMA_PF_REG_SHM_OFF + sizeof(u64) ||
82 !IS_ALIGNED(sriov_base_off, sizeof(u64))) {
83 dev_err(gc->dev,
84 "SRIOV base offset 0x%llx out of range or unaligned (BAR0 size 0x%llx)\n",
85 sriov_base_off, (u64)gc->bar0_size);
86 return -EPROTO;
87 }
88
89 remaining_barsize = gc->bar0_size - sriov_base_off;
90 sriov_shm_off = mana_gd_r64(gc, sriov_base_off + GDMA_PF_REG_SHM_OFF);
91 if (sriov_shm_off >= remaining_barsize ||
92 remaining_barsize - sriov_shm_off < SMC_APERTURE_SIZE ||
93 !IS_ALIGNED(sriov_shm_off, sizeof(u32))) {
94 dev_err(gc->dev,
95 "SRIOV SHM offset 0x%llx out of range or unaligned (BAR0 size 0x%llx)\n",
96 sriov_shm_off, (u64)gc->bar0_size);
97 return -EPROTO;
98 }
99
100 gc->shm_base = gc->bar0_va + sriov_base_off + sriov_shm_off;
101
102 return 0;
103 }
104
mana_gd_init_vf_regs(struct pci_dev * pdev)105 static int mana_gd_init_vf_regs(struct pci_dev *pdev)
106 {
107 struct gdma_context *gc = pci_get_drvdata(pdev);
108 u64 shm_off;
109
110 gc->db_page_size = mana_gd_r32(gc, GDMA_REG_DB_PAGE_SIZE) & 0xFFFF;
111
112 /* mana_gd_ring_doorbell() accesses offsets up to DOORBELL_OFFSET_EQ
113 * (0xFF8) + 8 bytes = 4KB within each doorbell page, so the page
114 * size must be at least SZ_4K.
115 */
116 if (gc->db_page_size < SZ_4K) {
117 dev_err(gc->dev,
118 "Doorbell page size %llu too small (min %u)\n",
119 gc->db_page_size, SZ_4K);
120 return -EPROTO;
121 }
122
123 gc->db_page_off = mana_gd_r64(gc, GDMA_REG_DB_PAGE_OFFSET);
124
125 /* Validate doorbell offset is within BAR0 */
126 if (gc->db_page_off >= gc->bar0_size) {
127 dev_err(gc->dev,
128 "Doorbell offset 0x%llx exceeds BAR0 size 0x%llx\n",
129 gc->db_page_off, (u64)gc->bar0_size);
130 return -EPROTO;
131 }
132
133 gc->db_page_base = gc->bar0_va + gc->db_page_off;
134 gc->phys_db_page_base = gc->bar0_pa + gc->db_page_off;
135
136 shm_off = mana_gd_r64(gc, GDMA_REG_SHM_OFFSET);
137 if (shm_off >= gc->bar0_size ||
138 gc->bar0_size - shm_off < SMC_APERTURE_SIZE ||
139 !IS_ALIGNED(shm_off, sizeof(u32))) {
140 dev_err(gc->dev,
141 "SHM offset 0x%llx out of range or unaligned (BAR0 size 0x%llx)\n",
142 shm_off, (u64)gc->bar0_size);
143 return -EPROTO;
144 }
145
146 gc->shm_base = gc->bar0_va + shm_off;
147
148 return 0;
149 }
150
mana_gd_init_registers(struct pci_dev * pdev)151 static int mana_gd_init_registers(struct pci_dev *pdev)
152 {
153 struct gdma_context *gc = pci_get_drvdata(pdev);
154
155 if (gc->is_pf && !gc->is_pf2)
156 return mana_gd_init_pf_regs(pdev);
157 else
158 return mana_gd_init_vf_regs(pdev);
159 }
160
161 /* Suppress logging when we set timeout to zero */
mana_need_log(struct gdma_context * gc,int err)162 bool mana_need_log(struct gdma_context *gc, int err)
163 {
164 struct hw_channel_context *hwc;
165
166 if (err != -ETIMEDOUT)
167 return true;
168
169 if (!gc)
170 return true;
171
172 hwc = gc->hwc.driver_data;
173 if (hwc && hwc->hwc_timeout == 0)
174 return false;
175
176 return true;
177 }
178
mana_gd_query_max_resources(struct pci_dev * pdev)179 static int mana_gd_query_max_resources(struct pci_dev *pdev)
180 {
181 struct gdma_context *gc = pci_get_drvdata(pdev);
182 struct gdma_query_max_resources_resp resp = {};
183 struct gdma_general_req req = {};
184 unsigned int max_num_queues;
185 unsigned int msix_vec_count;
186 u8 bm_hostmode;
187 u16 num_ports;
188 int err;
189
190 /* Reset msi_sharing so it is recomputed from current hardware
191 * state. On resume, num_online_cpus() or num_msix_usable may
192 * have changed, making dedicated MSI-X feasible where it was
193 * not before. Only reset on platforms that support dynamic
194 * MSI-X allocation; on non-dyn platforms msi_sharing is
195 * unconditionally true (set in mana_gd_setup_hwc_irqs).
196 */
197 if (pci_msix_can_alloc_dyn(to_pci_dev(gc->dev)))
198 gc->msi_sharing = false;
199
200 mana_gd_init_req_hdr(&req.hdr, GDMA_QUERY_MAX_RESOURCES,
201 sizeof(req), sizeof(resp));
202
203 err = mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp);
204 if (err || resp.hdr.status) {
205 dev_err(gc->dev, "Failed to query resource info: %d, 0x%x\n",
206 err, resp.hdr.status);
207 return err ? err : -EPROTO;
208 }
209
210 if (!pci_msix_can_alloc_dyn(pdev)) {
211 if (gc->num_msix_usable > resp.max_msix)
212 gc->num_msix_usable = resp.max_msix;
213 } else {
214 /* If dynamic allocation is enabled we have already allocated
215 * hwc msi
216 * Also, we make sure in this case the following is always true
217 * (num_msix_usable - 1 HWC) <= num_online_cpus()
218 */
219 gc->num_msix_usable = min(resp.max_msix, num_online_cpus() + 1);
220 }
221
222 /* MSI-X vectors are allocated by index into the device MSI-X table, so
223 * never ask for more than the table holds. It can be smaller than both
224 * resp.max_msix and the CPU count.
225 */
226 err = pci_msix_vec_count(pdev);
227 if (err <= 0) {
228 dev_err(gc->dev, "Failed to query MSI-X table size: %d\n", err);
229 return err < 0 ? err : -ENOSPC;
230 }
231 msix_vec_count = err;
232
233 if (gc->num_msix_usable > msix_vec_count) {
234 dev_info(gc->dev,
235 "Limiting MSI-X vectors from %u to table size %u\n",
236 gc->num_msix_usable, msix_vec_count);
237 gc->num_msix_usable = msix_vec_count;
238 }
239
240 if (gc->num_msix_usable <= 1)
241 return -ENOSPC;
242
243 gc->max_num_queues = num_online_cpus();
244 if (gc->max_num_queues > MANA_MAX_NUM_QUEUES)
245 gc->max_num_queues = MANA_MAX_NUM_QUEUES;
246
247 if (gc->max_num_queues > resp.max_eq)
248 gc->max_num_queues = resp.max_eq;
249
250 if (gc->max_num_queues > resp.max_cq)
251 gc->max_num_queues = resp.max_cq;
252
253 if (gc->max_num_queues > resp.max_sq)
254 gc->max_num_queues = resp.max_sq;
255
256 if (gc->max_num_queues > resp.max_rq)
257 gc->max_num_queues = resp.max_rq;
258
259 /* The Hardware Channel (HWC) used 1 MSI-X */
260 if (gc->max_num_queues > gc->num_msix_usable - 1)
261 gc->max_num_queues = gc->num_msix_usable - 1;
262
263 if (gc->max_num_queues == 0)
264 return -ENOSPC;
265
266 debugfs_create_u32("num_msix_usable", 0400, gc->mana_pci_debugfs,
267 &gc->num_msix_usable);
268 debugfs_create_u32("max_num_queues", 0400, gc->mana_pci_debugfs,
269 &gc->max_num_queues);
270
271 err = mana_gd_query_device_cfg(gc, MANA_MAJOR_VERSION,
272 MANA_MINOR_VERSION,
273 MANA_MICRO_VERSION,
274 &num_ports, &bm_hostmode);
275 if (err)
276 return err;
277
278 if (!num_ports) {
279 dev_err(gc->dev, "Failed to detect any vPort\n");
280 return -EINVAL;
281 }
282
283 /* Cap to the same limit used by mana_probe() for port instantiation,
284 * so MSI-X and queue budgeting matches the actual port count.
285 */
286 if (num_ports > MAX_PORTS_IN_MANA_DEV)
287 num_ports = MAX_PORTS_IN_MANA_DEV;
288
289 /*
290 * Adjust the per-vPort max queue count to allow dedicated
291 * MSIx for each vPort. Prefer at least MANA_DEF_NUM_QUEUES,
292 * but the hardware max (gc->max_num_queues) takes precedence.
293 */
294 max_num_queues = (gc->num_msix_usable - 1) / num_ports;
295 max_num_queues = rounddown_pow_of_two(max(max_num_queues, 1U));
296 if (max_num_queues < MANA_DEF_NUM_QUEUES)
297 max_num_queues = MANA_DEF_NUM_QUEUES;
298
299 /*
300 * Use dedicated MSIx for EQs whenever possible, use MSIx sharing for
301 * Ethernet EQs when (max_num_queues * num_ports > num_msix_usable - 1).
302 */
303 max_num_queues = min(gc->max_num_queues, max_num_queues);
304 if (max_num_queues * num_ports > gc->num_msix_usable - 1)
305 gc->msi_sharing = true;
306
307 /* If MSI is shared, use max allowed value */
308 if (gc->msi_sharing)
309 gc->max_num_queues_vport = min(gc->num_msix_usable - 1,
310 gc->max_num_queues);
311 else
312 gc->max_num_queues_vport = max_num_queues;
313
314 dev_info(gc->dev, "MSI sharing mode %u max queues %u\n",
315 gc->msi_sharing, gc->max_num_queues_vport);
316
317 return 0;
318 }
319
mana_gd_query_hwc_timeout(struct pci_dev * pdev,u32 * timeout_val)320 static int mana_gd_query_hwc_timeout(struct pci_dev *pdev, u32 *timeout_val)
321 {
322 struct gdma_context *gc = pci_get_drvdata(pdev);
323 struct gdma_query_hwc_timeout_resp resp = {};
324 struct gdma_query_hwc_timeout_req req = {};
325 int err;
326
327 mana_gd_init_req_hdr(&req.hdr, GDMA_QUERY_HWC_TIMEOUT,
328 sizeof(req), sizeof(resp));
329 req.timeout_ms = *timeout_val;
330 err = mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp);
331 if (err || resp.hdr.status)
332 return err ? err : -EPROTO;
333
334 *timeout_val = resp.timeout_ms;
335
336 return 0;
337 }
338
mana_gd_detect_devices(struct pci_dev * pdev)339 static int mana_gd_detect_devices(struct pci_dev *pdev)
340 {
341 struct gdma_context *gc = pci_get_drvdata(pdev);
342 struct gdma_list_devices_resp resp = {};
343 struct gdma_general_req req = {};
344 struct gdma_dev_id dev;
345 int found_dev = 0;
346 u16 dev_type;
347 int err;
348 u32 i;
349
350 mana_gd_init_req_hdr(&req.hdr, GDMA_LIST_DEVICES, sizeof(req),
351 sizeof(resp));
352
353 err = mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp);
354 if (err || resp.hdr.status) {
355 dev_err(gc->dev, "Failed to detect devices: %d, 0x%x\n", err,
356 resp.hdr.status);
357 return err ? err : -EPROTO;
358 }
359
360 for (i = 0; i < GDMA_DEV_LIST_SIZE &&
361 found_dev < resp.num_of_devs; i++) {
362 dev = resp.devs[i];
363 dev_type = dev.type;
364
365 /* Skip empty devices */
366 if (dev.as_uint32 == 0)
367 continue;
368
369 found_dev++;
370
371 /* HWC is already detected in mana_hwc_create_channel(). */
372 if (dev_type == GDMA_DEVICE_HWC)
373 continue;
374
375 if (dev_type == GDMA_DEVICE_MANA) {
376 gc->mana.gdma_context = gc;
377 gc->mana.dev_id = dev;
378 } else if (dev_type == GDMA_DEVICE_MANA_IB) {
379 gc->mana_ib.dev_id = dev;
380 gc->mana_ib.gdma_context = gc;
381 }
382 }
383
384 return gc->mana.dev_id.type == 0 ? -ENODEV : 0;
385 }
386
mana_gd_send_request(struct gdma_context * gc,u32 req_len,const void * req,u32 resp_len,void * resp)387 int mana_gd_send_request(struct gdma_context *gc, u32 req_len, const void *req,
388 u32 resp_len, void *resp)
389 {
390 struct hw_channel_context *hwc = gc->hwc.driver_data;
391
392 return mana_hwc_send_request(hwc, req_len, req, resp_len, resp);
393 }
394 EXPORT_SYMBOL_NS(mana_gd_send_request, "NET_MANA");
395
mana_gd_alloc_memory(struct gdma_context * gc,unsigned int length,struct gdma_mem_info * gmi,bool allow_scatter)396 int mana_gd_alloc_memory(struct gdma_context *gc, unsigned int length,
397 struct gdma_mem_info *gmi, bool allow_scatter)
398 {
399 unsigned int npages, i;
400 dma_addr_t dma_handle;
401 bool can_fallback;
402 void *buf;
403
404 if (length < MANA_PAGE_SIZE || !is_power_of_2(length))
405 return -EINVAL;
406
407 gmi->dev = gc->dev;
408
409 /* An allocation that fits in one page does not benefit from
410 * fallback.
411 */
412 can_fallback = allow_scatter && length > PAGE_SIZE;
413
414 /* Warn only when there is no fallback to rescue the failure. */
415 buf = dma_alloc_coherent(gmi->dev, length, &dma_handle,
416 GFP_KERNEL |
417 (can_fallback ? __GFP_NOWARN : 0));
418 if (buf) {
419 gmi->dma_handle = dma_handle;
420 gmi->virt_addr = buf;
421 gmi->length = length;
422 gmi->nr_pages = 0;
423 return 0;
424 }
425
426 if (!can_fallback)
427 return -ENOMEM;
428
429 /* length is a power of 2 above PAGE_SIZE, so this divides exactly. */
430 npages = length / PAGE_SIZE;
431
432 gmi->pages_va = kvzalloc_objs(*gmi->pages_va, npages);
433 if (!gmi->pages_va)
434 return -ENOMEM;
435
436 gmi->pages_dma = kvzalloc_objs(*gmi->pages_dma, npages);
437 if (!gmi->pages_dma)
438 goto free_va;
439
440 for (i = 0; i < npages; i++) {
441 gmi->pages_va[i] = dma_alloc_coherent(gmi->dev, PAGE_SIZE,
442 &gmi->pages_dma[i],
443 GFP_KERNEL);
444 if (!gmi->pages_va[i])
445 goto free_pages;
446 }
447
448 dev_info_ratelimited(gmi->dev,
449 "contiguous %u-byte DMA alloc failed; using %u scattered pages\n",
450 length, npages);
451
452 gmi->virt_addr = NULL;
453 gmi->dma_handle = 0;
454 gmi->length = length;
455 gmi->nr_pages = npages;
456
457 return 0;
458
459 free_pages:
460 while (i--)
461 dma_free_coherent(gmi->dev, PAGE_SIZE, gmi->pages_va[i],
462 gmi->pages_dma[i]);
463 kvfree(gmi->pages_dma);
464 gmi->pages_dma = NULL;
465 free_va:
466 kvfree(gmi->pages_va);
467 gmi->pages_va = NULL;
468 return -ENOMEM;
469 }
470
mana_gd_free_memory(struct gdma_mem_info * gmi)471 void mana_gd_free_memory(struct gdma_mem_info *gmi)
472 {
473 unsigned int i;
474
475 if (gmi->nr_pages > 0) {
476 for (i = 0; i < gmi->nr_pages; i++)
477 dma_free_coherent(gmi->dev, PAGE_SIZE, gmi->pages_va[i],
478 gmi->pages_dma[i]);
479 kvfree(gmi->pages_va);
480 kvfree(gmi->pages_dma);
481 gmi->pages_va = NULL;
482 gmi->pages_dma = NULL;
483 gmi->nr_pages = 0;
484 return;
485 }
486
487 dma_free_coherent(gmi->dev, gmi->length, gmi->virt_addr,
488 gmi->dma_handle);
489 }
490
mana_gd_create_hw_eq(struct gdma_context * gc,struct gdma_queue * queue)491 static int mana_gd_create_hw_eq(struct gdma_context *gc,
492 struct gdma_queue *queue)
493 {
494 struct gdma_create_queue_resp resp = {};
495 struct gdma_create_queue_req req = {};
496 int err;
497
498 if (queue->type != GDMA_EQ)
499 return -EINVAL;
500
501 mana_gd_init_req_hdr(&req.hdr, GDMA_CREATE_QUEUE,
502 sizeof(req), sizeof(resp));
503
504 req.hdr.dev_id = queue->gdma_dev->dev_id;
505 req.type = queue->type;
506 req.pdid = queue->gdma_dev->pdid;
507 req.doolbell_id = queue->gdma_dev->doorbell;
508 req.gdma_region = queue->mem_info.dma_region_handle;
509 req.queue_size = queue->queue_size;
510 req.log2_throttle_limit = queue->eq.log2_throttle_limit;
511 req.eq_pci_msix_index = queue->eq.msix_index;
512
513 err = mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp);
514 if (err || resp.hdr.status) {
515 dev_err(gc->dev, "Failed to create queue: %d, 0x%x\n", err,
516 resp.hdr.status);
517 return err ? err : -EPROTO;
518 }
519
520 queue->id = resp.queue_index;
521 queue->eq.disable_needed = true;
522 queue->mem_info.dma_region_handle = GDMA_INVALID_DMA_REGION;
523 return 0;
524 }
525
mana_gd_disable_queue(struct gdma_queue * queue)526 static int mana_gd_disable_queue(struct gdma_queue *queue)
527 {
528 struct gdma_context *gc = queue->gdma_dev->gdma_context;
529 struct gdma_disable_queue_req req = {};
530 struct gdma_general_resp resp = {};
531 int err;
532
533 WARN_ON(queue->type != GDMA_EQ);
534
535 mana_gd_init_req_hdr(&req.hdr, GDMA_DISABLE_QUEUE,
536 sizeof(req), sizeof(resp));
537
538 req.hdr.dev_id = queue->gdma_dev->dev_id;
539 req.type = queue->type;
540 req.queue_index = queue->id;
541 req.alloc_res_id_on_creation = 1;
542
543 err = mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp);
544 if (err || resp.hdr.status) {
545 if (mana_need_log(gc, err))
546 dev_err(gc->dev, "Failed to disable queue: %d, 0x%x\n", err,
547 resp.hdr.status);
548 return err ? err : -EPROTO;
549 }
550
551 return 0;
552 }
553
554 #define DOORBELL_OFFSET_SQ 0x0
555 #define DOORBELL_OFFSET_RQ 0x400
556 #define DOORBELL_OFFSET_CQ 0x800
557 #define DOORBELL_OFFSET_EQ 0xFF8
558 #define DOORBELL_OFFSET_DIM 0x820
559
mana_gd_ring_doorbell(struct gdma_context * gc,u32 db_index,enum gdma_queue_type q_type,u32 qid,u32 tail_ptr,u8 num_req)560 static void mana_gd_ring_doorbell(struct gdma_context *gc, u32 db_index,
561 enum gdma_queue_type q_type, u32 qid,
562 u32 tail_ptr, u8 num_req)
563 {
564 void __iomem *addr = gc->db_page_base + gc->db_page_size * db_index;
565 union gdma_doorbell_entry e = {};
566
567 switch (q_type) {
568 case GDMA_EQ:
569 e.eq.id = qid;
570 e.eq.tail_ptr = tail_ptr;
571 e.eq.arm = num_req;
572
573 addr += DOORBELL_OFFSET_EQ;
574 break;
575
576 case GDMA_CQ:
577 e.cq.id = qid;
578 e.cq.tail_ptr = tail_ptr;
579 e.cq.arm = num_req;
580
581 addr += DOORBELL_OFFSET_CQ;
582 break;
583
584 case GDMA_RQ:
585 e.rq.id = qid;
586 e.rq.tail_ptr = tail_ptr;
587 e.rq.wqe_cnt = num_req;
588
589 addr += DOORBELL_OFFSET_RQ;
590 break;
591
592 case GDMA_SQ:
593 e.sq.id = qid;
594 e.sq.tail_ptr = tail_ptr;
595
596 addr += DOORBELL_OFFSET_SQ;
597 break;
598
599 case GDMA_DIM:
600 e.dim.id = qid;
601 e.dim.mod_usec = FIELD_GET(MANA_INTR_MODR_USEC_MAX, tail_ptr);
602 e.dim.mod_usec_vld = !!(tail_ptr & MANA_INTR_MODR_USEC_VLD);
603 e.dim.mod_comps = FIELD_GET(MANA_INTR_MODR_COMP_MASK, tail_ptr);
604 e.dim.mod_comps_vld = num_req;
605
606 addr += DOORBELL_OFFSET_DIM;
607 break;
608
609 default:
610 WARN_ON(1);
611 return;
612 }
613
614 /* Ensure all writes are done before ring doorbell */
615 wmb();
616
617 writeq(e.as_uint64, addr);
618 }
619
mana_gd_wq_ring_doorbell(struct gdma_context * gc,struct gdma_queue * queue)620 void mana_gd_wq_ring_doorbell(struct gdma_context *gc, struct gdma_queue *queue)
621 {
622 /* Hardware Spec specifies that software client should set 0 for
623 * wqe_cnt for Receive Queues. This value is not used in Send Queues.
624 */
625 mana_gd_ring_doorbell(gc, queue->gdma_dev->doorbell, queue->type,
626 queue->id, queue->head * GDMA_WQE_BU_SIZE, 0);
627 }
628 EXPORT_SYMBOL_NS(mana_gd_wq_ring_doorbell, "NET_MANA");
629
mana_gd_ring_cq(struct gdma_queue * cq,u8 arm_bit)630 void mana_gd_ring_cq(struct gdma_queue *cq, u8 arm_bit)
631 {
632 struct gdma_context *gc = cq->gdma_dev->gdma_context;
633
634 u32 num_cqe = cq->queue_size / GDMA_CQE_SIZE;
635
636 u32 head = cq->head % (num_cqe << GDMA_CQE_OWNER_BITS);
637
638 mana_gd_ring_doorbell(gc, cq->gdma_dev->doorbell, cq->type, cq->id,
639 head, arm_bit);
640 }
641 EXPORT_SYMBOL_NS(mana_gd_ring_cq, "NET_MANA");
642
mana_gd_ring_dim(struct gdma_queue * cq,u32 mod_usec,bool mod_usec_vld,u32 mod_comps,bool mod_comps_vld)643 void mana_gd_ring_dim(struct gdma_queue *cq, u32 mod_usec, bool mod_usec_vld,
644 u32 mod_comps, bool mod_comps_vld)
645 {
646 struct gdma_context *gc = cq->gdma_dev->gdma_context;
647 u32 dim_val;
648
649 /* Convert the DIM values to doorbell parameters */
650 dim_val = FIELD_PREP(MANA_INTR_MODR_USEC_MAX, mod_usec) |
651 FIELD_PREP(MANA_INTR_MODR_COMP_MASK, mod_comps);
652 if (mod_usec_vld)
653 dim_val |= MANA_INTR_MODR_USEC_VLD;
654
655 mana_gd_ring_doorbell(gc, cq->gdma_dev->doorbell, GDMA_DIM, cq->id,
656 dim_val, mod_comps_vld);
657 }
658 EXPORT_SYMBOL_NS(mana_gd_ring_dim, "NET_MANA");
659
660 #define MANA_SERVICE_PERIOD 10
661
mana_serv_rescan(struct pci_dev * pdev)662 static void mana_serv_rescan(struct pci_dev *pdev)
663 {
664 struct pci_bus *parent;
665
666 pci_lock_rescan_remove();
667
668 parent = pdev->bus;
669 if (!parent) {
670 dev_err(&pdev->dev, "MANA service: no parent bus\n");
671 goto out;
672 }
673
674 pci_stop_and_remove_bus_device(pdev);
675 pci_rescan_bus(parent);
676
677 out:
678 pci_unlock_rescan_remove();
679 }
680
mana_serv_fpga(struct pci_dev * pdev)681 static void mana_serv_fpga(struct pci_dev *pdev)
682 {
683 struct pci_bus *bus, *parent;
684
685 pci_lock_rescan_remove();
686
687 bus = pdev->bus;
688 if (!bus) {
689 dev_err(&pdev->dev, "MANA service: no bus\n");
690 goto out;
691 }
692
693 parent = bus->parent;
694 if (!parent) {
695 dev_err(&pdev->dev, "MANA service: no parent bus\n");
696 goto out;
697 }
698
699 pci_stop_and_remove_bus_device(bus->self);
700
701 msleep(MANA_SERVICE_PERIOD * 1000);
702
703 pci_rescan_bus(parent);
704
705 out:
706 pci_unlock_rescan_remove();
707 }
708
mana_serv_reset(struct pci_dev * pdev)709 static void mana_serv_reset(struct pci_dev *pdev)
710 {
711 struct gdma_context *gc = pci_get_drvdata(pdev);
712 struct hw_channel_context *hwc;
713 int ret;
714
715 if (!gc) {
716 /* Perform PCI rescan on device if GC is not set up */
717 dev_err(&pdev->dev, "MANA service: GC not setup, rescanning\n");
718 mana_serv_rescan(pdev);
719 return;
720 }
721
722 hwc = gc->hwc.driver_data;
723 if (!hwc) {
724 dev_err(&pdev->dev, "MANA service: no HWC\n");
725 goto out;
726 }
727
728 /* HWC is not responding in this case, so don't wait */
729 hwc->hwc_timeout = 0;
730
731 dev_info(&pdev->dev, "MANA reset cycle start\n");
732
733 mana_gd_suspend(pdev, PMSG_SUSPEND);
734
735 msleep(MANA_SERVICE_PERIOD * 1000);
736
737 ret = mana_gd_resume(pdev);
738 if (ret == -ETIMEDOUT || ret == -EPROTO) {
739 /* Perform PCI rescan on device if we failed on HWC */
740 dev_err(&pdev->dev, "MANA service: resume failed, rescanning\n");
741 mana_serv_rescan(pdev);
742 return;
743 }
744
745 if (ret)
746 dev_info(&pdev->dev, "MANA reset cycle failed err %d\n", ret);
747 else
748 dev_info(&pdev->dev, "MANA reset cycle completed\n");
749
750 out:
751 clear_bit(GC_IN_SERVICE, &gc->flags);
752 }
753
mana_do_service(enum gdma_eqe_type type,struct pci_dev * pdev)754 static void mana_do_service(enum gdma_eqe_type type, struct pci_dev *pdev)
755 {
756 switch (type) {
757 case GDMA_EQE_HWC_FPGA_RECONFIG:
758 mana_serv_fpga(pdev);
759 break;
760
761 case GDMA_EQE_HWC_RESET_REQUEST:
762 mana_serv_reset(pdev);
763 break;
764
765 default:
766 dev_err(&pdev->dev, "MANA service: unknown type %d\n", type);
767 break;
768 }
769 }
770
mana_recovery_delayed_func(struct work_struct * w)771 static void mana_recovery_delayed_func(struct work_struct *w)
772 {
773 struct mana_dev_recovery_work *work;
774 struct mana_dev_recovery *dev;
775 unsigned long flags;
776
777 work = container_of(w, struct mana_dev_recovery_work, work.work);
778
779 spin_lock_irqsave(&work->lock, flags);
780
781 while (!list_empty(&work->dev_list)) {
782 dev = list_first_entry(&work->dev_list,
783 struct mana_dev_recovery, list);
784 list_del(&dev->list);
785 spin_unlock_irqrestore(&work->lock, flags);
786
787 mana_do_service(dev->type, dev->pdev);
788 pci_dev_put(dev->pdev);
789 kfree(dev);
790
791 spin_lock_irqsave(&work->lock, flags);
792 }
793
794 spin_unlock_irqrestore(&work->lock, flags);
795 }
796
mana_serv_func(struct work_struct * w)797 static void mana_serv_func(struct work_struct *w)
798 {
799 struct mana_serv_work *mns_wk;
800 struct pci_dev *pdev;
801
802 mns_wk = container_of(w, struct mana_serv_work, serv_work);
803 pdev = mns_wk->pdev;
804
805 if (pdev)
806 mana_do_service(mns_wk->type, pdev);
807
808 pci_dev_put(pdev);
809 kfree(mns_wk);
810 module_put(THIS_MODULE);
811 }
812
mana_schedule_serv_work(struct gdma_context * gc,enum gdma_eqe_type type)813 int mana_schedule_serv_work(struct gdma_context *gc, enum gdma_eqe_type type)
814 {
815 struct mana_serv_work *mns_wk;
816
817 if (test_and_set_bit(GC_IN_SERVICE, &gc->flags)) {
818 dev_info(gc->dev, "Already in service\n");
819 return -EBUSY;
820 }
821
822 if (!try_module_get(THIS_MODULE)) {
823 dev_info(gc->dev, "Module is unloading\n");
824 clear_bit(GC_IN_SERVICE, &gc->flags);
825 return -ENODEV;
826 }
827
828 mns_wk = kzalloc_obj(*mns_wk, GFP_ATOMIC);
829 if (!mns_wk) {
830 module_put(THIS_MODULE);
831 clear_bit(GC_IN_SERVICE, &gc->flags);
832 return -ENOMEM;
833 }
834
835 dev_info(gc->dev, "Start MANA service type:%d\n", type);
836 mns_wk->pdev = to_pci_dev(gc->dev);
837 mns_wk->type = type;
838 pci_dev_get(mns_wk->pdev);
839 INIT_WORK(&mns_wk->serv_work, mana_serv_func);
840 schedule_work(&mns_wk->serv_work);
841 return 0;
842 }
843
844 /* Return the CPU address of byte @offset within a queue's ring buffer. */
mana_gd_ring_ptr(const struct gdma_queue * q,u32 offset)845 static void *mana_gd_ring_ptr(const struct gdma_queue *q, u32 offset)
846 {
847 const struct gdma_mem_info *gmi = &q->mem_info;
848
849 if (gmi->nr_pages > 0)
850 return (u8 *)gmi->pages_va[offset / PAGE_SIZE] +
851 (offset & (PAGE_SIZE - 1));
852
853 return q->queue_mem_ptr + offset;
854 }
855
856 /* Number of bytes from @offset to the end of the CPU-contiguous region: the
857 * rest of the ring, or the rest of the current page when scattered.
858 */
mana_gd_ring_contig_avail(const struct gdma_queue * q,u32 offset)859 static u32 mana_gd_ring_contig_avail(const struct gdma_queue *q, u32 offset)
860 {
861 if (q->mem_info.nr_pages > 0)
862 return PAGE_SIZE - (offset & (PAGE_SIZE - 1));
863
864 return q->queue_size - offset;
865 }
866
867 /* Copy up to @count bytes from ring offset *@pos of @q into user buffer @buf,
868 * so a scattered ring reads back as if it were contiguous. Returns bytes
869 * copied, 0 at end of ring, or a negative errno.
870 */
mana_gd_read_ring(struct gdma_queue * q,char __user * buf,size_t count,loff_t * pos)871 ssize_t mana_gd_read_ring(struct gdma_queue *q, char __user *buf,
872 size_t count, loff_t *pos)
873 {
874 u32 size = q->queue_size;
875 loff_t off = *pos;
876 size_t copied = 0;
877
878 if (off < 0)
879 return -EINVAL;
880 if (off >= size || !count)
881 return 0;
882 count = min_t(size_t, count, size - off);
883
884 while (count) {
885 u32 offset = off;
886 u32 avail = mana_gd_ring_contig_avail(q, offset);
887 size_t chunk = min_t(size_t, count, avail);
888 size_t left = copy_to_user(buf, mana_gd_ring_ptr(q, offset),
889 chunk);
890
891 chunk -= left;
892 buf += chunk;
893 off += chunk;
894 copied += chunk;
895 count -= chunk;
896 if (left)
897 break;
898 }
899
900 if (!copied)
901 return -EFAULT;
902
903 *pos = off;
904 return copied;
905 }
906
mana_gd_process_eqe(struct gdma_queue * eq)907 static void mana_gd_process_eqe(struct gdma_queue *eq)
908 {
909 u32 head = eq->head % (eq->queue_size / GDMA_EQE_SIZE);
910 struct gdma_context *gc = eq->gdma_dev->gdma_context;
911 union gdma_eqe_info eqe_info;
912 enum gdma_eqe_type type;
913 struct gdma_event event;
914 struct gdma_queue *cq;
915 struct gdma_eqe *eqe;
916 u32 cq_id;
917
918 eqe = mana_gd_ring_ptr(eq, head * sizeof(*eqe));
919 eqe_info.as_uint32 = eqe->eqe_info;
920 type = eqe_info.type;
921
922 switch (type) {
923 case GDMA_EQE_COMPLETION:
924 cq_id = eqe->details[0] & 0xFFFFFF;
925 if (WARN_ON_ONCE(cq_id >= gc->max_num_cqs))
926 break;
927
928 cq = gc->cq_table[cq_id];
929 if (WARN_ON_ONCE(!cq || cq->type != GDMA_CQ || cq->id != cq_id))
930 break;
931
932 if (cq->cq.callback)
933 cq->cq.callback(cq->cq.context, cq);
934
935 break;
936
937 case GDMA_EQE_TEST_EVENT:
938 gc->test_event_eq_id = eq->id;
939 complete(&gc->eq_test_event);
940 break;
941
942 case GDMA_EQE_HWC_INIT_EQ_ID_DB:
943 case GDMA_EQE_HWC_INIT_DATA:
944 case GDMA_EQE_HWC_INIT_DONE:
945 case GDMA_EQE_HWC_SOC_SERVICE:
946 case GDMA_EQE_RNIC_QP_FATAL:
947 case GDMA_EQE_HWC_SOC_RECONFIG_DATA:
948 if (!eq->eq.callback)
949 break;
950
951 event.type = type;
952 memcpy(&event.details, &eqe->details, GDMA_EVENT_DATA_SIZE);
953 eq->eq.callback(eq->eq.context, eq, &event);
954 break;
955
956 case GDMA_EQE_HWC_FPGA_RECONFIG:
957 case GDMA_EQE_HWC_RESET_REQUEST:
958 dev_info(gc->dev, "Recv MANA service type:%d\n", type);
959
960 if (!test_and_set_bit(GC_PROBE_SUCCEEDED, &gc->flags)) {
961 /*
962 * Device is in probe and we received a hardware reset
963 * event, the probe function will detect that the flag
964 * has changed and perform service procedure.
965 */
966 dev_info(gc->dev,
967 "Service is to be processed in probe\n");
968 break;
969 }
970 mana_schedule_serv_work(gc, type);
971 break;
972
973 default:
974 break;
975 }
976 }
977
mana_gd_process_eq_events(void * arg)978 static void mana_gd_process_eq_events(void *arg)
979 {
980 u32 owner_bits, new_bits, old_bits;
981 union gdma_eqe_info eqe_info;
982 struct gdma_queue *eq = arg;
983 struct gdma_context *gc;
984 struct gdma_eqe *eqe;
985 u32 head, num_eqe;
986 int i;
987
988 gc = eq->gdma_dev->gdma_context;
989
990 num_eqe = eq->queue_size / GDMA_EQE_SIZE;
991
992 /* Process up to 5 EQEs at a time, and update the HW head. */
993 for (i = 0; i < 5; i++) {
994 eqe = mana_gd_ring_ptr(eq, (eq->head % num_eqe) * sizeof(*eqe));
995 eqe_info.as_uint32 = eqe->eqe_info;
996 owner_bits = eqe_info.owner_bits;
997
998 old_bits = (eq->head / num_eqe - 1) & GDMA_EQE_OWNER_MASK;
999 /* No more entries */
1000 if (owner_bits == old_bits) {
1001 /* return here without ringing the doorbell */
1002 if (i == 0)
1003 return;
1004 break;
1005 }
1006
1007 new_bits = (eq->head / num_eqe) & GDMA_EQE_OWNER_MASK;
1008 if (owner_bits != new_bits) {
1009 dev_err(gc->dev, "EQ %d: overflow detected\n", eq->id);
1010 break;
1011 }
1012
1013 /* Per GDMA spec, rmb is necessary after checking owner_bits, before
1014 * reading eqe.
1015 */
1016 rmb();
1017
1018 mana_gd_process_eqe(eq);
1019
1020 eq->head++;
1021 }
1022
1023 head = eq->head % (num_eqe << GDMA_EQE_OWNER_BITS);
1024
1025 mana_gd_ring_doorbell(gc, eq->gdma_dev->doorbell, eq->type, eq->id,
1026 head, SET_ARM_BIT);
1027 }
1028
mana_gd_register_irq(struct gdma_queue * queue,const struct gdma_queue_spec * spec)1029 static int mana_gd_register_irq(struct gdma_queue *queue,
1030 const struct gdma_queue_spec *spec)
1031 {
1032 struct gdma_dev *gd = queue->gdma_dev;
1033 struct gdma_irq_context *gic;
1034 struct gdma_context *gc;
1035 unsigned int msi_index;
1036 unsigned long flags;
1037 struct device *dev;
1038 int err = 0;
1039
1040 gc = gd->gdma_context;
1041 dev = gc->dev;
1042 msi_index = spec->eq.msix_index;
1043
1044 if (msi_index >= gc->num_msix_usable) {
1045 err = -ENOSPC;
1046 dev_err(dev, "Register IRQ err:%d, msi:%u nMSI:%u",
1047 err, msi_index, gc->num_msix_usable);
1048
1049 return err;
1050 }
1051
1052 queue->eq.msix_index = msi_index;
1053 /* The caller acquired a GIC reference via mana_gd_get_gic().
1054 * That refcount prevents mana_gd_put_gic() from erasing this
1055 * irq_contexts entry concurrently.
1056 */
1057 gic = xa_load(&gc->irq_contexts, msi_index);
1058 if (WARN_ON(!gic))
1059 return -EINVAL;
1060
1061 spin_lock_irqsave(&gic->lock, flags);
1062 list_add_rcu(&queue->entry, &gic->eq_list);
1063 spin_unlock_irqrestore(&gic->lock, flags);
1064
1065 return 0;
1066 }
1067
mana_gd_deregister_irq(struct gdma_queue * queue)1068 static void mana_gd_deregister_irq(struct gdma_queue *queue)
1069 {
1070 struct gdma_dev *gd = queue->gdma_dev;
1071 struct gdma_irq_context *gic;
1072 struct gdma_context *gc;
1073 unsigned int msix_index;
1074 unsigned long flags;
1075 struct gdma_queue *eq;
1076
1077 gc = gd->gdma_context;
1078
1079 /* At most num_online_cpus() + 1 interrupts are used. */
1080 msix_index = queue->eq.msix_index;
1081 if (WARN_ON(msix_index >= gc->num_msix_usable))
1082 return;
1083
1084 /* The caller releases the GIC reference via mana_gd_put_gic()
1085 * after this function returns. The refcount guarantees this
1086 * irq_contexts entry is still valid.
1087 */
1088 gic = xa_load(&gc->irq_contexts, msix_index);
1089 if (WARN_ON(!gic))
1090 return;
1091
1092 spin_lock_irqsave(&gic->lock, flags);
1093 list_for_each_entry_rcu(eq, &gic->eq_list, entry) {
1094 if (queue == eq) {
1095 list_del_rcu(&eq->entry);
1096 break;
1097 }
1098 }
1099 spin_unlock_irqrestore(&gic->lock, flags);
1100
1101 synchronize_rcu();
1102 }
1103
mana_gd_test_eq(struct gdma_context * gc,struct gdma_queue * eq)1104 int mana_gd_test_eq(struct gdma_context *gc, struct gdma_queue *eq)
1105 {
1106 struct gdma_generate_test_event_req req = {};
1107 struct gdma_general_resp resp = {};
1108 struct device *dev = gc->dev;
1109 int err;
1110
1111 mutex_lock(&gc->eq_test_event_mutex);
1112
1113 init_completion(&gc->eq_test_event);
1114 gc->test_event_eq_id = INVALID_QUEUE_ID;
1115
1116 mana_gd_init_req_hdr(&req.hdr, GDMA_GENERATE_TEST_EQE,
1117 sizeof(req), sizeof(resp));
1118
1119 req.hdr.dev_id = eq->gdma_dev->dev_id;
1120 req.queue_index = eq->id;
1121
1122 err = mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp);
1123 if (err) {
1124 if (mana_need_log(gc, err))
1125 dev_err(dev, "test_eq failed: %d\n", err);
1126 goto out;
1127 }
1128
1129 err = -EPROTO;
1130
1131 if (resp.hdr.status) {
1132 dev_err(dev, "test_eq failed: 0x%x\n", resp.hdr.status);
1133 goto out;
1134 }
1135
1136 if (!wait_for_completion_timeout(&gc->eq_test_event, 30 * HZ)) {
1137 dev_err(dev, "test_eq timed out on queue %d\n", eq->id);
1138 goto out;
1139 }
1140
1141 if (eq->id != gc->test_event_eq_id) {
1142 dev_err(dev, "test_eq got an event on wrong queue %d (%d)\n",
1143 gc->test_event_eq_id, eq->id);
1144 goto out;
1145 }
1146
1147 err = 0;
1148 out:
1149 mutex_unlock(&gc->eq_test_event_mutex);
1150 return err;
1151 }
1152
mana_gd_destroy_eq(struct gdma_context * gc,bool flush_evenets,struct gdma_queue * queue)1153 static void mana_gd_destroy_eq(struct gdma_context *gc, bool flush_evenets,
1154 struct gdma_queue *queue)
1155 {
1156 int err;
1157
1158 if (flush_evenets) {
1159 err = mana_gd_test_eq(gc, queue);
1160 if (err && mana_need_log(gc, err))
1161 dev_warn(gc->dev, "Failed to flush EQ: %d\n", err);
1162 }
1163
1164 mana_gd_deregister_irq(queue);
1165
1166 if (queue->eq.disable_needed)
1167 mana_gd_disable_queue(queue);
1168 }
1169
mana_gd_create_eq(struct gdma_dev * gd,const struct gdma_queue_spec * spec,bool create_hwq,struct gdma_queue * queue)1170 static int mana_gd_create_eq(struct gdma_dev *gd,
1171 const struct gdma_queue_spec *spec,
1172 bool create_hwq, struct gdma_queue *queue)
1173 {
1174 struct gdma_context *gc = gd->gdma_context;
1175 struct device *dev = gc->dev;
1176 u32 log2_num_entries;
1177 int err;
1178
1179 queue->eq.msix_index = INVALID_PCI_MSIX_INDEX;
1180 queue->id = INVALID_QUEUE_ID;
1181
1182 log2_num_entries = ilog2(queue->queue_size / GDMA_EQE_SIZE);
1183
1184 if (spec->eq.log2_throttle_limit > log2_num_entries) {
1185 dev_err(dev, "EQ throttling limit (%lu) > maximum EQE (%u)\n",
1186 spec->eq.log2_throttle_limit, log2_num_entries);
1187 return -EINVAL;
1188 }
1189
1190 err = mana_gd_register_irq(queue, spec);
1191 if (err) {
1192 dev_err(dev, "Failed to register irq: %d\n", err);
1193 return err;
1194 }
1195
1196 queue->eq.callback = spec->eq.callback;
1197 queue->eq.context = spec->eq.context;
1198 queue->head |= INITIALIZED_OWNER_BIT(log2_num_entries);
1199 queue->eq.log2_throttle_limit = spec->eq.log2_throttle_limit ?: 1;
1200
1201 if (create_hwq) {
1202 err = mana_gd_create_hw_eq(gc, queue);
1203 if (err)
1204 goto out;
1205
1206 err = mana_gd_test_eq(gc, queue);
1207 if (err)
1208 goto out;
1209 }
1210
1211 return 0;
1212 out:
1213 dev_err(dev, "Failed to create EQ: %d\n", err);
1214 mana_gd_destroy_eq(gc, false, queue);
1215 queue->eq.msix_index = INVALID_PCI_MSIX_INDEX;
1216 return err;
1217 }
1218
mana_gd_create_cq(const struct gdma_queue_spec * spec,struct gdma_queue * queue)1219 static void mana_gd_create_cq(const struct gdma_queue_spec *spec,
1220 struct gdma_queue *queue)
1221 {
1222 u32 log2_num_entries = ilog2(spec->queue_size / GDMA_CQE_SIZE);
1223
1224 queue->head |= INITIALIZED_OWNER_BIT(log2_num_entries);
1225 queue->cq.parent = spec->cq.parent_eq;
1226 queue->cq.context = spec->cq.context;
1227 queue->cq.callback = spec->cq.callback;
1228 }
1229
mana_gd_destroy_cq(struct gdma_context * gc,struct gdma_queue * queue)1230 static void mana_gd_destroy_cq(struct gdma_context *gc,
1231 struct gdma_queue *queue)
1232 {
1233 u32 id = queue->id;
1234
1235 if (id >= gc->max_num_cqs)
1236 return;
1237
1238 if (!gc->cq_table[id])
1239 return;
1240
1241 gc->cq_table[id] = NULL;
1242 }
1243
mana_gd_create_hwc_queue(struct gdma_dev * gd,const struct gdma_queue_spec * spec,struct gdma_queue ** queue_ptr)1244 int mana_gd_create_hwc_queue(struct gdma_dev *gd,
1245 const struct gdma_queue_spec *spec,
1246 struct gdma_queue **queue_ptr)
1247 {
1248 struct gdma_context *gc = gd->gdma_context;
1249 struct gdma_mem_info *gmi;
1250 struct gdma_queue *queue;
1251 int err;
1252
1253 queue = kzalloc_obj(*queue);
1254 if (!queue)
1255 return -ENOMEM;
1256
1257 gmi = &queue->mem_info;
1258 err = mana_gd_alloc_memory(gc, spec->queue_size, gmi, false);
1259 if (err) {
1260 dev_err(gc->dev, "GDMA queue type: %d, size: %u, gdma memory allocation err: %d\n",
1261 spec->type, spec->queue_size, err);
1262 goto free_q;
1263 }
1264
1265 queue->head = 0;
1266 queue->tail = 0;
1267 queue->queue_mem_ptr = gmi->virt_addr;
1268 queue->queue_size = spec->queue_size;
1269 queue->monitor_avl_buf = spec->monitor_avl_buf;
1270 queue->type = spec->type;
1271 queue->gdma_dev = gd;
1272
1273 if (spec->type == GDMA_EQ)
1274 err = mana_gd_create_eq(gd, spec, false, queue);
1275 else if (spec->type == GDMA_CQ)
1276 mana_gd_create_cq(spec, queue);
1277
1278 if (err)
1279 goto out;
1280
1281 *queue_ptr = queue;
1282 return 0;
1283 out:
1284 dev_err(gc->dev, "Failed to create queue type %d of size %u, err: %d\n",
1285 spec->type, spec->queue_size, err);
1286 mana_gd_free_memory(gmi);
1287 free_q:
1288 kfree(queue);
1289 return err;
1290 }
1291
mana_gd_destroy_dma_region(struct gdma_context * gc,u64 dma_region_handle)1292 int mana_gd_destroy_dma_region(struct gdma_context *gc, u64 dma_region_handle)
1293 {
1294 struct gdma_destroy_dma_region_req req = {};
1295 struct gdma_general_resp resp = {};
1296 int err;
1297
1298 if (dma_region_handle == GDMA_INVALID_DMA_REGION)
1299 return 0;
1300
1301 mana_gd_init_req_hdr(&req.hdr, GDMA_DESTROY_DMA_REGION, sizeof(req),
1302 sizeof(resp));
1303 req.dma_region_handle = dma_region_handle;
1304
1305 err = mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp);
1306 if (err || resp.hdr.status) {
1307 if (mana_need_log(gc, err))
1308 dev_err(gc->dev, "Failed to destroy DMA region: %d, 0x%x\n",
1309 err, resp.hdr.status);
1310 return -EPROTO;
1311 }
1312
1313 return 0;
1314 }
1315 EXPORT_SYMBOL_NS(mana_gd_destroy_dma_region, "NET_MANA");
1316
mana_gd_create_dma_region(struct gdma_dev * gd,struct gdma_mem_info * gmi)1317 static int mana_gd_create_dma_region(struct gdma_dev *gd,
1318 struct gdma_mem_info *gmi)
1319 {
1320 unsigned int num_page = gmi->length / MANA_PAGE_SIZE;
1321 struct gdma_create_dma_region_req *req = NULL;
1322 struct gdma_create_dma_region_resp resp = {};
1323 struct gdma_context *gc = gd->gdma_context;
1324 struct hw_channel_context *hwc;
1325 u32 length = gmi->length;
1326 size_t req_msg_size;
1327 int err;
1328 int i;
1329
1330 if (length < MANA_PAGE_SIZE || !is_power_of_2(length))
1331 return -EINVAL;
1332
1333 if (gmi->nr_pages == 0 && !MANA_PAGE_ALIGNED(gmi->virt_addr))
1334 return -EINVAL;
1335
1336 hwc = gc->hwc.driver_data;
1337 req_msg_size = struct_size(req, page_addr_list, num_page);
1338 if (req_msg_size > hwc->max_req_msg_size)
1339 return -EINVAL;
1340
1341 req = kzalloc(req_msg_size, GFP_KERNEL);
1342 if (!req)
1343 return -ENOMEM;
1344
1345 mana_gd_init_req_hdr(&req->hdr, GDMA_CREATE_DMA_REGION,
1346 req_msg_size, sizeof(resp));
1347 req->length = length;
1348 req->offset_in_page = 0;
1349 req->gdma_page_type = GDMA_PAGE_TYPE_4K;
1350 req->page_count = num_page;
1351 req->page_addr_list_len = num_page;
1352
1353 if (gmi->nr_pages > 0) {
1354 unsigned int subpages = PAGE_SIZE / MANA_PAGE_SIZE;
1355 unsigned int idx = 0;
1356 unsigned int pg, sub;
1357
1358 /* Each PAGE_SIZE chunk is physically contiguous and contains
1359 * PAGE_SIZE / MANA_PAGE_SIZE consecutive device pages.
1360 */
1361 for (pg = 0; pg < gmi->nr_pages; pg++)
1362 for (sub = 0; sub < subpages; sub++)
1363 req->page_addr_list[idx++] =
1364 gmi->pages_dma[pg] +
1365 sub * MANA_PAGE_SIZE;
1366 } else {
1367 for (i = 0; i < num_page; i++)
1368 req->page_addr_list[i] =
1369 gmi->dma_handle + i * MANA_PAGE_SIZE;
1370 }
1371
1372 err = mana_gd_send_request(gc, req_msg_size, req, sizeof(resp), &resp);
1373 if (err)
1374 goto out;
1375
1376 if (resp.hdr.status ||
1377 resp.dma_region_handle == GDMA_INVALID_DMA_REGION) {
1378 dev_err(gc->dev, "Failed to create DMA region: 0x%x\n",
1379 resp.hdr.status);
1380 err = -EPROTO;
1381 goto out;
1382 }
1383
1384 gmi->dma_region_handle = resp.dma_region_handle;
1385 dev_dbg(gc->dev, "Created DMA region handle 0x%llx\n",
1386 gmi->dma_region_handle);
1387 out:
1388 if (err)
1389 dev_dbg(gc->dev,
1390 "Failed to create DMA region of length: %u, page_type: %d, status: 0x%x, err: %d\n",
1391 length, req->gdma_page_type, resp.hdr.status, err);
1392 kfree(req);
1393 return err;
1394 }
1395
mana_gd_create_mana_eq(struct gdma_dev * gd,const struct gdma_queue_spec * spec,struct gdma_queue ** queue_ptr)1396 int mana_gd_create_mana_eq(struct gdma_dev *gd,
1397 const struct gdma_queue_spec *spec,
1398 struct gdma_queue **queue_ptr)
1399 {
1400 struct gdma_context *gc = gd->gdma_context;
1401 struct gdma_mem_info *gmi;
1402 struct gdma_queue *queue;
1403 int err;
1404
1405 if (spec->type != GDMA_EQ)
1406 return -EINVAL;
1407
1408 queue = kzalloc_obj(*queue);
1409 if (!queue)
1410 return -ENOMEM;
1411
1412 gmi = &queue->mem_info;
1413 err = mana_gd_alloc_memory(gc, spec->queue_size, gmi, true);
1414 if (err) {
1415 dev_err(gc->dev, "GDMA queue type: %d, size: %u, gdma memory allocation err: %d\n",
1416 spec->type, spec->queue_size, err);
1417 goto free_q;
1418 }
1419
1420 err = mana_gd_create_dma_region(gd, gmi);
1421 if (err)
1422 goto out;
1423
1424 queue->head = 0;
1425 queue->tail = 0;
1426 queue->queue_mem_ptr = gmi->virt_addr;
1427 queue->queue_size = spec->queue_size;
1428 queue->monitor_avl_buf = spec->monitor_avl_buf;
1429 queue->type = spec->type;
1430 queue->gdma_dev = gd;
1431
1432 err = mana_gd_create_eq(gd, spec, true, queue);
1433 if (err)
1434 goto out;
1435
1436 *queue_ptr = queue;
1437 return 0;
1438 out:
1439 dev_err(gc->dev, "Failed to create queue type %d of size: %u, err: %d\n",
1440 spec->type, spec->queue_size, err);
1441 mana_gd_free_memory(gmi);
1442 free_q:
1443 kfree(queue);
1444 return err;
1445 }
1446 EXPORT_SYMBOL_NS(mana_gd_create_mana_eq, "NET_MANA");
1447
mana_gd_create_mana_wq_cq(struct gdma_dev * gd,const struct gdma_queue_spec * spec,struct gdma_queue ** queue_ptr)1448 int mana_gd_create_mana_wq_cq(struct gdma_dev *gd,
1449 const struct gdma_queue_spec *spec,
1450 struct gdma_queue **queue_ptr)
1451 {
1452 struct gdma_context *gc = gd->gdma_context;
1453 struct gdma_mem_info *gmi;
1454 struct gdma_queue *queue;
1455 int err;
1456
1457 if (spec->type != GDMA_CQ && spec->type != GDMA_SQ &&
1458 spec->type != GDMA_RQ)
1459 return -EINVAL;
1460
1461 queue = kzalloc_obj(*queue);
1462 if (!queue)
1463 return -ENOMEM;
1464
1465 queue->id = INVALID_QUEUE_ID;
1466
1467 gmi = &queue->mem_info;
1468 err = mana_gd_alloc_memory(gc, spec->queue_size, gmi, true);
1469 if (err) {
1470 dev_err(gc->dev, "GDMA queue type: %d, size: %u, memory allocation err: %d\n",
1471 spec->type, spec->queue_size, err);
1472 goto free_q;
1473 }
1474
1475 err = mana_gd_create_dma_region(gd, gmi);
1476 if (err)
1477 goto out;
1478
1479 queue->head = 0;
1480 queue->tail = 0;
1481 queue->queue_mem_ptr = gmi->virt_addr;
1482 queue->queue_size = spec->queue_size;
1483 queue->monitor_avl_buf = spec->monitor_avl_buf;
1484 queue->type = spec->type;
1485 queue->gdma_dev = gd;
1486
1487 if (spec->type == GDMA_CQ)
1488 mana_gd_create_cq(spec, queue);
1489
1490 *queue_ptr = queue;
1491 return 0;
1492 out:
1493 dev_err(gc->dev, "Failed to create queue type %d of size: %u, err: %d\n",
1494 spec->type, spec->queue_size, err);
1495 mana_gd_free_memory(gmi);
1496 free_q:
1497 kfree(queue);
1498 return err;
1499 }
1500 EXPORT_SYMBOL_NS(mana_gd_create_mana_wq_cq, "NET_MANA");
1501
mana_gd_destroy_queue(struct gdma_context * gc,struct gdma_queue * queue)1502 void mana_gd_destroy_queue(struct gdma_context *gc, struct gdma_queue *queue)
1503 {
1504 struct gdma_mem_info *gmi = &queue->mem_info;
1505
1506 switch (queue->type) {
1507 case GDMA_EQ:
1508 mana_gd_destroy_eq(gc, queue->eq.disable_needed, queue);
1509 break;
1510
1511 case GDMA_CQ:
1512 mana_gd_destroy_cq(gc, queue);
1513 break;
1514
1515 case GDMA_RQ:
1516 break;
1517
1518 case GDMA_SQ:
1519 break;
1520
1521 default:
1522 dev_err(gc->dev, "Can't destroy unknown queue: type=%d\n",
1523 queue->type);
1524 return;
1525 }
1526
1527 mana_gd_destroy_dma_region(gc, gmi->dma_region_handle);
1528 mana_gd_free_memory(gmi);
1529 kfree(queue);
1530 }
1531 EXPORT_SYMBOL_NS(mana_gd_destroy_queue, "NET_MANA");
1532
mana_gd_verify_vf_version(struct pci_dev * pdev)1533 int mana_gd_verify_vf_version(struct pci_dev *pdev)
1534 {
1535 struct gdma_context *gc = pci_get_drvdata(pdev);
1536 struct gdma_verify_ver_resp resp = {};
1537 struct gdma_verify_ver_req req = {};
1538 struct hw_channel_context *hwc;
1539 int err;
1540
1541 hwc = gc->hwc.driver_data;
1542 mana_gd_init_req_hdr(&req.hdr, GDMA_VERIFY_VF_DRIVER_VERSION,
1543 sizeof(req), sizeof(resp));
1544
1545 req.protocol_ver_min = GDMA_PROTOCOL_FIRST;
1546 req.protocol_ver_max = GDMA_PROTOCOL_LAST;
1547
1548 req.gd_drv_cap_flags1 = GDMA_DRV_CAP_FLAGS1;
1549 req.gd_drv_cap_flags2 = GDMA_DRV_CAP_FLAGS2;
1550 req.gd_drv_cap_flags3 = GDMA_DRV_CAP_FLAGS3;
1551 req.gd_drv_cap_flags4 = GDMA_DRV_CAP_FLAGS4;
1552
1553 req.drv_ver = 0; /* Unused*/
1554 req.os_type = 0x10; /* Linux */
1555 req.os_ver_major = LINUX_VERSION_MAJOR;
1556 req.os_ver_minor = LINUX_VERSION_PATCHLEVEL;
1557 req.os_ver_build = LINUX_VERSION_SUBLEVEL;
1558 strscpy(req.os_ver_str1, utsname()->sysname, sizeof(req.os_ver_str1));
1559 strscpy(req.os_ver_str2, utsname()->release, sizeof(req.os_ver_str2));
1560 strscpy(req.os_ver_str3, utsname()->version, sizeof(req.os_ver_str3));
1561
1562 err = mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp);
1563 if (err || resp.hdr.status) {
1564 dev_err(gc->dev, "VfVerifyVersionOutput: %d, status=0x%x\n",
1565 err, resp.hdr.status);
1566 return err ? err : -EPROTO;
1567 }
1568 gc->pf_cap_flags1 = resp.pf_cap_flags1;
1569 gc->gdma_protocol_ver = resp.gdma_protocol_ver;
1570
1571 debugfs_create_x64("gdma_protocol_ver", 0400, gc->mana_pci_debugfs,
1572 &gc->gdma_protocol_ver);
1573 debugfs_create_x64("pf_cap_flags1", 0400, gc->mana_pci_debugfs,
1574 &gc->pf_cap_flags1);
1575
1576 if (resp.pf_cap_flags1 & GDMA_DRV_CAP_FLAG_1_HWC_TIMEOUT_RECONFIG) {
1577 err = mana_gd_query_hwc_timeout(pdev, &hwc->hwc_timeout);
1578 if (err) {
1579 dev_err(gc->dev, "Failed to set the hwc timeout %d\n", err);
1580 return err;
1581 }
1582 dev_dbg(gc->dev, "set the hwc timeout to %u\n", hwc->hwc_timeout);
1583 }
1584 return 0;
1585 }
1586
mana_gd_register_device(struct gdma_dev * gd)1587 int mana_gd_register_device(struct gdma_dev *gd)
1588 {
1589 struct gdma_context *gc = gd->gdma_context;
1590 struct gdma_register_device_resp resp = {};
1591 struct gdma_general_req req = {};
1592 int err;
1593
1594 gd->pdid = INVALID_PDID;
1595 gd->doorbell = INVALID_DOORBELL;
1596 gd->gpa_mkey = INVALID_MEM_KEY;
1597
1598 mana_gd_init_req_hdr(&req.hdr, GDMA_REGISTER_DEVICE, sizeof(req),
1599 sizeof(resp));
1600
1601 req.hdr.dev_id = gd->dev_id;
1602
1603 err = mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp);
1604 if (err || resp.hdr.status) {
1605 dev_err(gc->dev, "gdma_register_device_resp failed: %d, 0x%x\n",
1606 err, resp.hdr.status);
1607 return err ? err : -EPROTO;
1608 }
1609
1610 /* Validate that doorbell page for db_id is within the BAR0 region.
1611 * In mana_gd_ring_doorbell(), the address is calculated as:
1612 * addr = db_page_base + db_page_size * db_id
1613 * = (bar0_va + db_page_off) + (db_page_size * db_id)
1614 * So we need: db_page_off + db_page_size * (db_id + 1) <= bar0_size
1615 */
1616 if (gc->db_page_off + gc->db_page_size * ((u64)resp.db_id + 1) > gc->bar0_size) {
1617 dev_err(gc->dev, "Doorbell ID %u out of range\n", resp.db_id);
1618 return -EPROTO;
1619 }
1620
1621 gd->pdid = resp.pdid;
1622 gd->gpa_mkey = resp.gpa_mkey;
1623 gd->doorbell = resp.db_id;
1624
1625 return 0;
1626 }
1627
mana_gd_deregister_device(struct gdma_dev * gd)1628 int mana_gd_deregister_device(struct gdma_dev *gd)
1629 {
1630 struct gdma_context *gc = gd->gdma_context;
1631 struct gdma_general_resp resp = {};
1632 struct gdma_general_req req = {};
1633 int err;
1634
1635 if (gd->pdid == INVALID_PDID)
1636 return -EINVAL;
1637
1638 mana_gd_init_req_hdr(&req.hdr, GDMA_DEREGISTER_DEVICE, sizeof(req),
1639 sizeof(resp));
1640
1641 req.hdr.dev_id = gd->dev_id;
1642
1643 err = mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp);
1644 if (err || resp.hdr.status) {
1645 if (mana_need_log(gc, err))
1646 dev_err(gc->dev, "Failed to deregister device: %d, 0x%x\n",
1647 err, resp.hdr.status);
1648 if (!err)
1649 err = -EPROTO;
1650 }
1651
1652 gd->pdid = INVALID_PDID;
1653 gd->doorbell = INVALID_DOORBELL;
1654 gd->gpa_mkey = INVALID_MEM_KEY;
1655
1656 return err;
1657 }
1658
mana_gd_wq_avail_space(struct gdma_queue * wq)1659 u32 mana_gd_wq_avail_space(struct gdma_queue *wq)
1660 {
1661 u32 used_space = (wq->head - wq->tail) * GDMA_WQE_BU_SIZE;
1662 u32 wq_size = wq->queue_size;
1663
1664 WARN_ON_ONCE(used_space > wq_size);
1665
1666 return wq_size - used_space;
1667 }
1668
mana_gd_get_wqe_ptr(const struct gdma_queue * wq,u32 wqe_offset)1669 u8 *mana_gd_get_wqe_ptr(const struct gdma_queue *wq, u32 wqe_offset)
1670 {
1671 u32 offset = (wqe_offset * GDMA_WQE_BU_SIZE) & (wq->queue_size - 1);
1672
1673 WARN_ON_ONCE((offset + GDMA_WQE_BU_SIZE) > wq->queue_size);
1674
1675 return mana_gd_ring_ptr(wq, offset);
1676 }
1677
mana_gd_write_client_oob(const struct gdma_wqe_request * wqe_req,enum gdma_queue_type q_type,u32 client_oob_size,u32 sgl_data_size,u8 * wqe_ptr)1678 static u32 mana_gd_write_client_oob(const struct gdma_wqe_request *wqe_req,
1679 enum gdma_queue_type q_type,
1680 u32 client_oob_size, u32 sgl_data_size,
1681 u8 *wqe_ptr)
1682 {
1683 bool oob_in_sgl = !!(wqe_req->flags & GDMA_WR_OOB_IN_SGL);
1684 bool pad_data = !!(wqe_req->flags & GDMA_WR_PAD_BY_SGE0);
1685 struct gdma_wqe *header = (struct gdma_wqe *)wqe_ptr;
1686 u8 *ptr;
1687
1688 memset(header, 0, sizeof(struct gdma_wqe));
1689 header->num_sge = wqe_req->num_sge;
1690 header->inline_oob_size_div4 = client_oob_size / sizeof(u32);
1691
1692 if (oob_in_sgl) {
1693 WARN_ON_ONCE(wqe_req->num_sge < 2);
1694
1695 header->client_oob_in_sgl = 1;
1696
1697 if (pad_data)
1698 header->last_vbytes = wqe_req->sgl[0].size;
1699 }
1700
1701 if (q_type == GDMA_SQ)
1702 header->client_data_unit = wqe_req->client_data_unit;
1703
1704 /* The size of gdma_wqe + client_oob_size must be less than or equal
1705 * to one Basic Unit (i.e. 32 bytes), so the pointer can't go beyond
1706 * the queue memory buffer boundary.
1707 */
1708 ptr = wqe_ptr + sizeof(header);
1709
1710 if (wqe_req->inline_oob_data && wqe_req->inline_oob_size > 0) {
1711 memcpy(ptr, wqe_req->inline_oob_data, wqe_req->inline_oob_size);
1712
1713 if (client_oob_size > wqe_req->inline_oob_size)
1714 memset(ptr + wqe_req->inline_oob_size, 0,
1715 client_oob_size - wqe_req->inline_oob_size);
1716 }
1717
1718 return sizeof(header) + client_oob_size;
1719 }
1720
mana_gd_write_sgl(struct gdma_queue * wq,u32 sgl_offset,const struct gdma_wqe_request * wqe_req)1721 static void mana_gd_write_sgl(struct gdma_queue *wq, u32 sgl_offset,
1722 const struct gdma_wqe_request *wqe_req)
1723 {
1724 u32 size_to_end = mana_gd_ring_contig_avail(wq, sgl_offset);
1725 u32 sgl_size = sizeof(struct gdma_sge) * wqe_req->num_sge;
1726 const u8 *address = (u8 *)wqe_req->sgl;
1727
1728 if (size_to_end < sgl_size) {
1729 memcpy(mana_gd_ring_ptr(wq, sgl_offset), address, size_to_end);
1730
1731 address += size_to_end;
1732 sgl_size -= size_to_end;
1733 sgl_offset += size_to_end;
1734 if (sgl_offset == wq->queue_size)
1735 sgl_offset = 0;
1736 }
1737
1738 memcpy(mana_gd_ring_ptr(wq, sgl_offset), address, sgl_size);
1739 }
1740
mana_gd_post_work_request(struct gdma_queue * wq,const struct gdma_wqe_request * wqe_req,struct gdma_posted_wqe_info * wqe_info)1741 int mana_gd_post_work_request(struct gdma_queue *wq,
1742 const struct gdma_wqe_request *wqe_req,
1743 struct gdma_posted_wqe_info *wqe_info)
1744 {
1745 u32 client_oob_size = wqe_req->inline_oob_size;
1746 u32 sgl_data_size;
1747 u32 max_wqe_size;
1748 u32 wqe_offset;
1749 u32 sgl_offset;
1750 u32 wqe_size;
1751 u32 oob_len;
1752 u8 *wqe_ptr;
1753 u32 head;
1754
1755 if (wqe_req->num_sge == 0)
1756 return -EINVAL;
1757
1758 if (wq->type == GDMA_RQ) {
1759 if (client_oob_size != 0)
1760 return -EINVAL;
1761
1762 client_oob_size = INLINE_OOB_SMALL_SIZE;
1763
1764 max_wqe_size = GDMA_MAX_RQE_SIZE;
1765 } else {
1766 if (client_oob_size != INLINE_OOB_SMALL_SIZE &&
1767 client_oob_size != INLINE_OOB_LARGE_SIZE)
1768 return -EINVAL;
1769
1770 max_wqe_size = GDMA_MAX_SQE_SIZE;
1771 }
1772
1773 sgl_data_size = sizeof(struct gdma_sge) * wqe_req->num_sge;
1774 wqe_size = ALIGN(sizeof(struct gdma_wqe) + client_oob_size +
1775 sgl_data_size, GDMA_WQE_BU_SIZE);
1776 if (wqe_size > max_wqe_size)
1777 return -EINVAL;
1778
1779 if (wq->monitor_avl_buf && wqe_size > mana_gd_wq_avail_space(wq))
1780 return -ENOSPC;
1781
1782 if (wqe_info)
1783 wqe_info->wqe_size_in_bu = wqe_size / GDMA_WQE_BU_SIZE;
1784
1785 head = wq->head;
1786 wqe_offset = (head * GDMA_WQE_BU_SIZE) & (wq->queue_size - 1);
1787 wqe_ptr = mana_gd_get_wqe_ptr(wq, head);
1788 oob_len = mana_gd_write_client_oob(wqe_req, wq->type, client_oob_size,
1789 sgl_data_size, wqe_ptr);
1790
1791 sgl_offset = wqe_offset + oob_len;
1792 if (sgl_offset >= wq->queue_size)
1793 sgl_offset -= wq->queue_size;
1794
1795 mana_gd_write_sgl(wq, sgl_offset, wqe_req);
1796
1797 wq->head += wqe_size / GDMA_WQE_BU_SIZE;
1798
1799 return 0;
1800 }
1801 EXPORT_SYMBOL_NS(mana_gd_post_work_request, "NET_MANA");
1802
mana_gd_post_and_ring(struct gdma_queue * queue,const struct gdma_wqe_request * wqe_req,struct gdma_posted_wqe_info * wqe_info)1803 int mana_gd_post_and_ring(struct gdma_queue *queue,
1804 const struct gdma_wqe_request *wqe_req,
1805 struct gdma_posted_wqe_info *wqe_info)
1806 {
1807 struct gdma_context *gc = queue->gdma_dev->gdma_context;
1808 int err;
1809
1810 err = mana_gd_post_work_request(queue, wqe_req, wqe_info);
1811 if (err) {
1812 dev_err(gc->dev, "Failed to post work req from queue type %d of size %u (err=%d)\n",
1813 queue->type, queue->queue_size, err);
1814 return err;
1815 }
1816
1817 mana_gd_wq_ring_doorbell(gc, queue);
1818
1819 return 0;
1820 }
1821
mana_gd_read_cqe(struct gdma_queue * cq,struct gdma_comp * comp)1822 static int mana_gd_read_cqe(struct gdma_queue *cq, struct gdma_comp *comp)
1823 {
1824 unsigned int num_cqe = cq->queue_size / sizeof(struct gdma_cqe);
1825 u32 owner_bits, new_bits, old_bits;
1826 struct gdma_cqe *cqe;
1827
1828 cqe = mana_gd_ring_ptr(cq, (cq->head % num_cqe) * sizeof(*cqe));
1829 owner_bits = cqe->cqe_info.owner_bits;
1830
1831 old_bits = (cq->head / num_cqe - 1) & GDMA_CQE_OWNER_MASK;
1832 /* Return 0 if no more entries. */
1833 if (owner_bits == old_bits)
1834 return 0;
1835
1836 new_bits = (cq->head / num_cqe) & GDMA_CQE_OWNER_MASK;
1837 /* Return -1 if overflow detected. */
1838 if (WARN_ON_ONCE(owner_bits != new_bits))
1839 return -1;
1840
1841 /* Per GDMA spec, rmb is necessary after checking owner_bits, before
1842 * reading completion info
1843 */
1844 rmb();
1845
1846 comp->wq_num = cqe->cqe_info.wq_num;
1847 comp->is_sq = cqe->cqe_info.is_sq;
1848 memcpy(comp->cqe_data, cqe->cqe_data, GDMA_COMP_DATA_SIZE);
1849
1850 return 1;
1851 }
1852
mana_gd_poll_cq(struct gdma_queue * cq,struct gdma_comp * comp,int num_cqe)1853 int mana_gd_poll_cq(struct gdma_queue *cq, struct gdma_comp *comp, int num_cqe)
1854 {
1855 int cqe_idx;
1856 int ret;
1857
1858 for (cqe_idx = 0; cqe_idx < num_cqe; cqe_idx++) {
1859 ret = mana_gd_read_cqe(cq, &comp[cqe_idx]);
1860
1861 if (ret < 0) {
1862 cq->head -= cqe_idx;
1863 return ret;
1864 }
1865
1866 if (ret == 0)
1867 break;
1868
1869 cq->head++;
1870 }
1871
1872 return cqe_idx;
1873 }
1874 EXPORT_SYMBOL_NS(mana_gd_poll_cq, "NET_MANA");
1875
mana_gd_intr(int irq,void * arg)1876 static irqreturn_t mana_gd_intr(int irq, void *arg)
1877 {
1878 struct gdma_irq_context *gic = arg;
1879 struct list_head *eq_list = &gic->eq_list;
1880 struct gdma_queue *eq;
1881
1882 rcu_read_lock();
1883 list_for_each_entry_rcu(eq, eq_list, entry) {
1884 gic->handler(eq);
1885 }
1886 rcu_read_unlock();
1887
1888 return IRQ_HANDLED;
1889 }
1890
mana_gd_put_gic(struct gdma_context * gc,bool use_msi_bitmap,int msi)1891 void mana_gd_put_gic(struct gdma_context *gc, bool use_msi_bitmap, int msi)
1892 {
1893 struct pci_dev *dev = to_pci_dev(gc->dev);
1894 struct gdma_irq_context *gic;
1895 struct msi_map irq_map;
1896 int irq;
1897
1898 mutex_lock(&gc->gic_mutex);
1899
1900 gic = xa_load(&gc->irq_contexts, msi);
1901 if (WARN_ON(!gic)) {
1902 mutex_unlock(&gc->gic_mutex);
1903 return;
1904 }
1905
1906 if (use_msi_bitmap)
1907 gic->bitmap_refs--;
1908
1909 if (use_msi_bitmap && gic->bitmap_refs == 0)
1910 clear_bit(msi, gc->msi_bitmap);
1911
1912 if (!refcount_dec_and_test(&gic->refcount))
1913 goto out;
1914
1915 irq = gic->irq;
1916
1917 irq_update_affinity_hint(irq, NULL);
1918 free_irq(irq, gic);
1919
1920 if (gic->dyn_msix) {
1921 irq_map.virq = irq;
1922 irq_map.index = msi;
1923 pci_msix_free_irq(dev, irq_map);
1924 }
1925
1926 xa_erase(&gc->irq_contexts, msi);
1927 kfree(gic);
1928
1929 out:
1930 mutex_unlock(&gc->gic_mutex);
1931 }
1932 EXPORT_SYMBOL_NS(mana_gd_put_gic, "NET_MANA");
1933
1934 /*
1935 * Get a GIC (GDMA IRQ Context) on a MSI vector
1936 * a MSI can be shared between different EQs, this function supports setting
1937 * up separate MSIs using a bitmap, or directly using the MSI index
1938 *
1939 * @use_msi_bitmap:
1940 * True if MSI is assigned by this function on available slots from bitmap.
1941 * False if MSI is passed from *msi_requested
1942 */
mana_gd_get_gic(struct gdma_context * gc,bool use_msi_bitmap,int * msi_requested)1943 struct gdma_irq_context *mana_gd_get_gic(struct gdma_context *gc,
1944 bool use_msi_bitmap,
1945 int *msi_requested)
1946 {
1947 struct pci_dev *dev = to_pci_dev(gc->dev);
1948 struct gdma_irq_context *gic;
1949 struct msi_map irq_map = { };
1950 int irq;
1951 int msi;
1952 int err;
1953
1954 mutex_lock(&gc->gic_mutex);
1955
1956 if (use_msi_bitmap) {
1957 msi = find_first_zero_bit(gc->msi_bitmap, gc->num_msix_usable);
1958 if (msi >= gc->num_msix_usable) {
1959 dev_err(gc->dev, "No free MSI vectors available\n");
1960 gic = ERR_PTR(-ENOSPC);
1961 goto out;
1962 }
1963 *msi_requested = msi;
1964 } else {
1965 msi = *msi_requested;
1966 }
1967
1968 gic = xa_load(&gc->irq_contexts, msi);
1969 if (gic) {
1970 refcount_inc(&gic->refcount);
1971 if (use_msi_bitmap) {
1972 gic->bitmap_refs++;
1973 set_bit(msi, gc->msi_bitmap);
1974 }
1975 goto out;
1976 }
1977
1978 irq = pci_irq_vector(dev, msi);
1979 if (irq == -EINVAL) {
1980 irq_map = pci_msix_alloc_irq_at(dev, msi, NULL);
1981 if (!irq_map.virq) {
1982 err = irq_map.index;
1983 dev_err(gc->dev,
1984 "Failed to alloc irq_map msi %d err %d\n",
1985 msi, err);
1986 gic = ERR_PTR(err);
1987 goto out;
1988 }
1989 irq = irq_map.virq;
1990 msi = irq_map.index;
1991 *msi_requested = msi;
1992 }
1993
1994 gic = kzalloc_obj(*gic);
1995 if (!gic) {
1996 gic = ERR_PTR(-ENOMEM);
1997 if (irq_map.virq)
1998 pci_msix_free_irq(dev, irq_map);
1999 goto out;
2000 }
2001
2002 gic->handler = mana_gd_process_eq_events;
2003 gic->msi = msi;
2004 gic->irq = irq;
2005 INIT_LIST_HEAD(&gic->eq_list);
2006 spin_lock_init(&gic->lock);
2007
2008 if (!gic->msi)
2009 snprintf(gic->name, MANA_IRQ_NAME_SZ, "mana_hwc@pci:%s",
2010 pci_name(dev));
2011 else
2012 snprintf(gic->name, MANA_IRQ_NAME_SZ, "mana_msi%d@pci:%s",
2013 gic->msi, pci_name(dev));
2014
2015 err = request_irq(irq, mana_gd_intr, 0, gic->name, gic);
2016 if (err) {
2017 dev_err(gc->dev, "Failed to request irq %d %s\n",
2018 irq, gic->name);
2019 kfree(gic);
2020 gic = ERR_PTR(err);
2021 if (irq_map.virq)
2022 pci_msix_free_irq(dev, irq_map);
2023 goto out;
2024 }
2025
2026 gic->dyn_msix = !!irq_map.virq;
2027 refcount_set(&gic->refcount, 1);
2028 gic->bitmap_refs = use_msi_bitmap ? 1 : 0;
2029
2030 err = xa_err(xa_store(&gc->irq_contexts, msi, gic, GFP_KERNEL));
2031 if (err) {
2032 dev_err(gc->dev, "Failed to store irq context for msi %d: %d\n",
2033 msi, err);
2034 free_irq(irq, gic);
2035 kfree(gic);
2036 gic = ERR_PTR(err);
2037 if (irq_map.virq)
2038 pci_msix_free_irq(dev, irq_map);
2039 goto out;
2040 }
2041
2042 if (use_msi_bitmap)
2043 set_bit(msi, gc->msi_bitmap);
2044
2045 out:
2046 mutex_unlock(&gc->gic_mutex);
2047 return gic;
2048 }
2049 EXPORT_SYMBOL_NS(mana_gd_get_gic, "NET_MANA");
2050
mana_gd_alloc_res_map(u32 res_avail,struct gdma_resource * r)2051 int mana_gd_alloc_res_map(u32 res_avail, struct gdma_resource *r)
2052 {
2053 r->map = bitmap_zalloc(res_avail, GFP_KERNEL);
2054 if (!r->map)
2055 return -ENOMEM;
2056
2057 r->size = res_avail;
2058 spin_lock_init(&r->lock);
2059
2060 return 0;
2061 }
2062
mana_gd_free_res_map(struct gdma_resource * r)2063 void mana_gd_free_res_map(struct gdma_resource *r)
2064 {
2065 bitmap_free(r->map);
2066 r->map = NULL;
2067 r->size = 0;
2068 }
2069
2070 /*
2071 * Spread on CPUs with the following heuristics:
2072 *
2073 * 1. No more than one IRQ per CPU, if possible;
2074 * 2. NUMA locality is the second priority;
2075 * 3. Sibling dislocality is the last priority.
2076 *
2077 * Let's consider this topology:
2078 *
2079 * Node 0 1
2080 * Core 0 1 2 3
2081 * CPU 0 1 2 3 4 5 6 7
2082 *
2083 * The most performant IRQ distribution based on the above topology
2084 * and heuristics may look like this:
2085 *
2086 * IRQ Nodes Cores CPUs
2087 * 0 1 0 0-1
2088 * 1 1 1 2-3
2089 * 2 1 0 0-1
2090 * 3 1 1 2-3
2091 * 4 2 2 4-5
2092 * 5 2 3 6-7
2093 * 6 2 2 4-5
2094 * 7 2 3 6-7
2095 *
2096 * The heuristics is implemented as follows.
2097 *
2098 * The outer for_each() loop resets the 'weight' to the actual number
2099 * of CPUs in the hop. Then inner for_each() loop decrements it by the
2100 * number of sibling groups (cores) while assigning first set of IRQs
2101 * to each group. IRQs 0 and 1 above are distributed this way.
2102 *
2103 * Now, because NUMA locality is more important, we should walk the
2104 * same set of siblings and assign 2nd set of IRQs (2 and 3), and it's
2105 * implemented by the medium while() loop. We do like this unless the
2106 * number of IRQs assigned on this hop will not become equal to number
2107 * of CPUs in the hop (weight == 0). Then we switch to the next hop and
2108 * do the same thing.
2109 */
2110
mana_irq_setup_numa_aware(unsigned int * irqs,unsigned int len,int node,bool skip_first_cpu)2111 static int mana_irq_setup_numa_aware(unsigned int *irqs, unsigned int len,
2112 int node, bool skip_first_cpu)
2113 {
2114 const struct cpumask *next, *prev = cpu_none_mask;
2115 cpumask_var_t cpus __free(free_cpumask_var);
2116 int cpu, weight;
2117
2118 if (!alloc_cpumask_var(&cpus, GFP_KERNEL))
2119 return -ENOMEM;
2120
2121 rcu_read_lock();
2122 for_each_numa_hop_mask(next, node) {
2123 weight = cpumask_weight_andnot(next, prev);
2124 while (weight > 0) {
2125 cpumask_andnot(cpus, next, prev);
2126 for_each_cpu(cpu, cpus) {
2127 cpumask_andnot(cpus, cpus, topology_sibling_cpumask(cpu));
2128 --weight;
2129
2130 if (unlikely(skip_first_cpu)) {
2131 skip_first_cpu = false;
2132 continue;
2133 }
2134
2135 if (len-- == 0)
2136 goto done;
2137
2138 irq_set_affinity_and_hint(*irqs++, topology_sibling_cpumask(cpu));
2139 }
2140 }
2141 prev = next;
2142 }
2143 done:
2144 rcu_read_unlock();
2145 return 0;
2146 }
2147
2148 /* must be called with cpus_read_lock() held */
mana_irq_setup_linear(unsigned int * irqs,unsigned int len)2149 static void mana_irq_setup_linear(unsigned int *irqs, unsigned int len)
2150 {
2151 int cpu;
2152
2153 for_each_online_cpu(cpu) {
2154 if (len == 0)
2155 break;
2156
2157 irq_set_affinity_and_hint(*irqs++, cpumask_of(cpu));
2158 len--;
2159 }
2160 }
2161
mana_gd_setup_dyn_irqs(struct pci_dev * pdev,int nvec)2162 static int mana_gd_setup_dyn_irqs(struct pci_dev *pdev, int nvec)
2163 {
2164 struct gdma_context *gc = pci_get_drvdata(pdev);
2165 struct gdma_irq_context *gic;
2166 int *irqs, err, i, msi;
2167
2168 irqs = kmalloc_objs(int, nvec);
2169 if (!irqs)
2170 return -ENOMEM;
2171
2172 /*
2173 * In this function, num_msix_usable = HWC IRQ + Queue IRQ.
2174 * nvec is only Queue IRQ (HWC already setup).
2175 * While processing the next pci irq vector, we start with index 1,
2176 * as IRQ vector at index 0 is already processed for HWC.
2177 * However, the population of irqs array starts with index 0, to be
2178 * further used in mana_irq_setup_numa_aware()
2179 */
2180 for (i = 1; i <= nvec; i++) {
2181 msi = i;
2182 gic = mana_gd_get_gic(gc, false, &msi);
2183 if (IS_ERR(gic)) {
2184 err = PTR_ERR(gic);
2185 goto free_irq;
2186 }
2187
2188 irqs[i - 1] = gic->irq;
2189 }
2190
2191 /*
2192 * When calling mana_irq_setup_numa_aware() for dynamically added IRQs,
2193 * if number of CPUs is more than or equal to allocated MSI-X, we need to
2194 * skip the first CPU sibling group since they are already affinitized to
2195 * HWC IRQ
2196 */
2197 cpus_read_lock();
2198 if (gc->num_msix_usable <= num_online_cpus()) {
2199 err = mana_irq_setup_numa_aware(irqs, nvec, gc->numa_node,
2200 true);
2201 if (err) {
2202 cpus_read_unlock();
2203 goto free_irq;
2204 }
2205 } else {
2206 /*
2207 * When num_msix_usable are more than num_online_cpus, our
2208 * queue IRQs should be equal to num of online vCPUs.
2209 * We try to make sure queue IRQs spread across all vCPUs.
2210 * In such a case NUMA or CPU core affinity does not matter.
2211 * Note: in this case the total mana IRQ should always be
2212 * num_online_cpus + 1. The first HWC IRQ is already handled
2213 * in HWC setup calls
2214 * However, if CPUs went offline since num_msix_usable was
2215 * computed, queue IRQs will be more than num_online_cpus().
2216 * In such cases remaining extra IRQs will retain their default
2217 * affinity.
2218 */
2219 int first_unassigned = num_online_cpus();
2220
2221 if (nvec > first_unassigned) {
2222 char buf[32];
2223
2224 if (first_unassigned == nvec - 1)
2225 snprintf(buf, sizeof(buf), "%d",
2226 first_unassigned);
2227 else
2228 snprintf(buf, sizeof(buf), "%d-%d",
2229 first_unassigned, nvec - 1);
2230
2231 dev_dbg(&pdev->dev,
2232 "MANA IRQ indices #%s will retain the default CPU affinity\n",
2233 buf);
2234 }
2235
2236 mana_irq_setup_linear(irqs, nvec);
2237 }
2238
2239 cpus_read_unlock();
2240 kfree(irqs);
2241 return 0;
2242
2243 free_irq:
2244 for (i -= 1; i > 0; i--)
2245 mana_gd_put_gic(gc, false, i);
2246 kfree(irqs);
2247 return err;
2248 }
2249
mana_gd_setup_irqs(struct pci_dev * pdev,int nvec)2250 static int mana_gd_setup_irqs(struct pci_dev *pdev, int nvec)
2251 {
2252 struct gdma_context *gc = pci_get_drvdata(pdev);
2253 struct gdma_irq_context *gic;
2254 int *irqs, *start_irqs;
2255 unsigned int cpu;
2256 int err, i, msi;
2257
2258 irqs = kmalloc_objs(int, nvec);
2259 if (!irqs)
2260 return -ENOMEM;
2261
2262 start_irqs = irqs;
2263
2264 for (i = 0; i < nvec; i++) {
2265 msi = i;
2266 gic = mana_gd_get_gic(gc, false, &msi);
2267 if (IS_ERR(gic)) {
2268 err = PTR_ERR(gic);
2269 goto free_irq;
2270 }
2271
2272 irqs[i] = gic->irq;
2273 }
2274
2275 /* If number of IRQ is one extra than number of online CPUs,
2276 * then we need to assign IRQ0 (hwc irq) and IRQ1 to
2277 * same CPU.
2278 * Else we will use different CPUs for IRQ0 and IRQ1.
2279 * Also we are using cpumask_local_spread instead of
2280 * cpumask_first for the node, because the node can be
2281 * mem only.
2282 */
2283 cpus_read_lock();
2284 if (nvec > num_online_cpus()) {
2285 cpu = cpumask_local_spread(0, gc->numa_node);
2286 irq_set_affinity_and_hint(irqs[0], cpumask_of(cpu));
2287 irqs++;
2288 nvec -= 1;
2289 }
2290
2291 err = mana_irq_setup_numa_aware(irqs, nvec, gc->numa_node, false);
2292 if (err) {
2293 cpus_read_unlock();
2294 goto free_irq;
2295 }
2296
2297 cpus_read_unlock();
2298 kfree(start_irqs);
2299 return 0;
2300
2301 free_irq:
2302 for (i -= 1; i >= 0; i--)
2303 mana_gd_put_gic(gc, false, i);
2304
2305 kfree(start_irqs);
2306 return err;
2307 }
2308
mana_gd_setup_hwc_irqs(struct pci_dev * pdev)2309 static int mana_gd_setup_hwc_irqs(struct pci_dev *pdev)
2310 {
2311 struct gdma_context *gc = pci_get_drvdata(pdev);
2312 unsigned int max_irqs, min_irqs;
2313 int nvec, err;
2314
2315 if (pci_msix_can_alloc_dyn(pdev)) {
2316 max_irqs = 1;
2317 min_irqs = 1;
2318 } else {
2319 /* Need 1 interrupt for HWC */
2320 max_irqs = min(num_online_cpus(), MANA_MAX_NUM_QUEUES) + 1;
2321 min_irqs = 2;
2322 gc->msi_sharing = true;
2323 }
2324
2325 nvec = pci_alloc_irq_vectors(pdev, min_irqs, max_irqs, PCI_IRQ_MSIX);
2326 if (nvec < 0)
2327 return nvec;
2328
2329 err = mana_gd_setup_irqs(pdev, nvec);
2330 if (err) {
2331 pci_free_irq_vectors(pdev);
2332 return err;
2333 }
2334
2335 gc->num_msix_usable = nvec;
2336 gc->max_num_msix = nvec;
2337
2338 return 0;
2339 }
2340
mana_gd_setup_remaining_irqs(struct pci_dev * pdev)2341 static int mana_gd_setup_remaining_irqs(struct pci_dev *pdev)
2342 {
2343 struct gdma_context *gc = pci_get_drvdata(pdev);
2344 struct msi_map irq_map;
2345 int max_irqs, i, err;
2346
2347 if (!pci_msix_can_alloc_dyn(pdev))
2348 /* remain irqs are already allocated with HWC IRQ */
2349 return 0;
2350
2351 /* allocate only remaining IRQs*/
2352 max_irqs = gc->num_msix_usable - 1;
2353
2354 for (i = 1; i <= max_irqs; i++) {
2355 irq_map = pci_msix_alloc_irq_at(pdev, i, NULL);
2356 if (!irq_map.virq) {
2357 err = irq_map.index;
2358 /* caller will handle cleaning up all allocated
2359 * irqs, after HWC is destroyed
2360 */
2361 return err;
2362 }
2363 }
2364
2365 err = mana_gd_setup_dyn_irqs(pdev, max_irqs);
2366 if (err)
2367 return err;
2368
2369 gc->max_num_msix = gc->max_num_msix + max_irqs;
2370
2371 return 0;
2372 }
2373
mana_gd_remove_irqs(struct pci_dev * pdev)2374 static void mana_gd_remove_irqs(struct pci_dev *pdev)
2375 {
2376 struct gdma_context *gc = pci_get_drvdata(pdev);
2377 int i;
2378
2379 if (gc->max_num_msix < 1)
2380 return;
2381
2382 for (i = 0; i < gc->max_num_msix; i++) {
2383 if (!xa_load(&gc->irq_contexts, i))
2384 continue;
2385
2386 mana_gd_put_gic(gc, false, i);
2387 }
2388
2389 WARN_ON(!xa_empty(&gc->irq_contexts));
2390
2391 pci_free_irq_vectors(pdev);
2392
2393 bitmap_free(gc->msi_bitmap);
2394 gc->msi_bitmap = NULL;
2395 gc->max_num_msix = 0;
2396 gc->num_msix_usable = 0;
2397 }
2398
mana_gd_setup(struct pci_dev * pdev)2399 static int mana_gd_setup(struct pci_dev *pdev)
2400 {
2401 struct gdma_context *gc = pci_get_drvdata(pdev);
2402 int err;
2403
2404 gc->mana_pci_debugfs = debugfs_create_dir(pci_name(pdev),
2405 mana_debugfs_root);
2406
2407 err = mana_gd_init_registers(pdev);
2408 if (err)
2409 goto remove_debugfs;
2410
2411 mana_smc_init(&gc->shm_channel, gc->dev, gc->shm_base);
2412
2413 gc->service_wq = alloc_ordered_workqueue("gdma_service_wq", 0);
2414 if (!gc->service_wq) {
2415 err = -ENOMEM;
2416 goto remove_debugfs;
2417 }
2418
2419 err = mana_gd_setup_hwc_irqs(pdev);
2420 if (err) {
2421 dev_err(gc->dev, "Failed to setup IRQs for HWC creation: %d\n",
2422 err);
2423 goto free_workqueue;
2424 }
2425
2426 err = mana_hwc_create_channel(gc);
2427 if (err)
2428 goto remove_irq;
2429
2430 err = mana_gd_verify_vf_version(pdev);
2431 if (err)
2432 goto destroy_hwc;
2433
2434 err = mana_gd_detect_devices(pdev);
2435 if (err)
2436 goto destroy_hwc;
2437
2438 err = mana_gd_query_max_resources(pdev);
2439 if (err)
2440 goto destroy_hwc;
2441
2442 err = mana_gd_setup_remaining_irqs(pdev);
2443 if (err) {
2444 dev_err(gc->dev, "Failed to setup remaining IRQs: %d", err);
2445 goto destroy_hwc;
2446 }
2447
2448 if (!gc->msi_sharing) {
2449 gc->msi_bitmap = bitmap_zalloc(gc->num_msix_usable, GFP_KERNEL);
2450 if (!gc->msi_bitmap) {
2451 err = -ENOMEM;
2452 goto destroy_hwc;
2453 }
2454 /* Set bit for HWC */
2455 set_bit(0, gc->msi_bitmap);
2456 }
2457
2458 dev_dbg(&pdev->dev, "mana gdma setup successful\n");
2459 return 0;
2460
2461 destroy_hwc:
2462 mana_hwc_destroy_channel(gc);
2463 remove_irq:
2464 mana_gd_remove_irqs(pdev);
2465 free_workqueue:
2466 destroy_workqueue(gc->service_wq);
2467 gc->service_wq = NULL;
2468 remove_debugfs:
2469 debugfs_remove_recursive(gc->mana_pci_debugfs);
2470 gc->mana_pci_debugfs = NULL;
2471 dev_err(&pdev->dev, "%s failed (error %d)\n", __func__, err);
2472 return err;
2473 }
2474
mana_gd_cleanup_device(struct pci_dev * pdev)2475 static void mana_gd_cleanup_device(struct pci_dev *pdev)
2476 {
2477 struct gdma_context *gc = pci_get_drvdata(pdev);
2478
2479 mana_hwc_destroy_channel(gc);
2480
2481 mana_gd_remove_irqs(pdev);
2482
2483 if (gc->service_wq) {
2484 destroy_workqueue(gc->service_wq);
2485 gc->service_wq = NULL;
2486 }
2487
2488 debugfs_remove_recursive(gc->mana_pci_debugfs);
2489 gc->mana_pci_debugfs = NULL;
2490
2491 dev_dbg(&pdev->dev, "mana gdma cleanup successful\n");
2492 }
2493
mana_is_pf(unsigned short dev_id)2494 static bool mana_is_pf(unsigned short dev_id)
2495 {
2496 return dev_id == MANA_PF_DEVICE_ID || dev_id == MANA_PF2_DEVICE_ID;
2497 }
2498
mana_gd_probe(struct pci_dev * pdev,const struct pci_device_id * ent)2499 static int mana_gd_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
2500 {
2501 struct gdma_context *gc;
2502 void __iomem *bar0_va;
2503 int bar = 0;
2504 int err;
2505
2506 /* Each port has 2 CQs, each CQ has at most 1 EQE at a time */
2507 BUILD_BUG_ON(2 * MAX_PORTS_IN_MANA_DEV * GDMA_EQE_SIZE > EQ_SIZE);
2508
2509 err = pci_enable_device(pdev);
2510 if (err) {
2511 dev_err(&pdev->dev, "Failed to enable pci device (err=%d)\n", err);
2512 return -ENXIO;
2513 }
2514
2515 pci_set_master(pdev);
2516
2517 err = pci_request_regions(pdev, "mana");
2518 if (err)
2519 goto disable_dev;
2520
2521 err = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));
2522 if (err) {
2523 dev_err(&pdev->dev, "DMA set mask failed: %d\n", err);
2524 goto release_region;
2525 }
2526 dma_set_max_seg_size(&pdev->dev, UINT_MAX);
2527
2528 err = -ENOMEM;
2529 gc = vzalloc(sizeof(*gc));
2530 if (!gc)
2531 goto release_region;
2532
2533 mutex_init(&gc->eq_test_event_mutex);
2534 mutex_init(&gc->gic_mutex);
2535 pci_set_drvdata(pdev, gc);
2536 gc->bar0_pa = pci_resource_start(pdev, 0);
2537 gc->bar0_size = pci_resource_len(pdev, 0);
2538
2539 bar0_va = pci_iomap(pdev, bar, 0);
2540 if (!bar0_va)
2541 goto free_gc;
2542
2543 gc->numa_node = dev_to_node(&pdev->dev);
2544 gc->is_pf = mana_is_pf(pdev->device);
2545 gc->is_pf2 = (pdev->device == MANA_PF2_DEVICE_ID);
2546
2547 gc->bar0_va = bar0_va;
2548 gc->dev = &pdev->dev;
2549 xa_init(&gc->irq_contexts);
2550
2551 err = mana_gd_setup(pdev);
2552 if (err)
2553 goto unmap_bar;
2554
2555 err = mana_probe(&gc->mana, false);
2556 if (err)
2557 goto cleanup_gd;
2558
2559 err = mana_rdma_probe(&gc->mana_ib);
2560 if (err)
2561 goto cleanup_mana;
2562
2563 /*
2564 * If a hardware reset event has occurred over HWC during probe,
2565 * rollback and perform hardware reset procedure.
2566 */
2567 if (test_and_set_bit(GC_PROBE_SUCCEEDED, &gc->flags)) {
2568 err = -EPROTO;
2569 goto cleanup_mana_rdma;
2570 }
2571
2572 return 0;
2573
2574 cleanup_mana_rdma:
2575 mana_rdma_remove(&gc->mana_ib);
2576 cleanup_mana:
2577 mana_remove(&gc->mana, false);
2578 cleanup_gd:
2579 mana_gd_cleanup_device(pdev);
2580 unmap_bar:
2581 xa_destroy(&gc->irq_contexts);
2582 pci_iounmap(pdev, bar0_va);
2583 free_gc:
2584 pci_set_drvdata(pdev, NULL);
2585 vfree(gc);
2586 release_region:
2587 pci_release_regions(pdev);
2588 disable_dev:
2589 pci_disable_device(pdev);
2590 dev_err(&pdev->dev, "gdma probe failed: err = %d\n", err);
2591
2592 /*
2593 * Hardware could be in recovery mode and the HWC returns TIMEDOUT or
2594 * EPROTO from mana_gd_setup(), mana_probe() or mana_rdma_probe(), or
2595 * we received a hardware reset event over HWC interrupt. In this case,
2596 * perform the device recovery procedure after MANA_SERVICE_PERIOD
2597 * seconds.
2598 */
2599 if (err == -ETIMEDOUT || err == -EPROTO) {
2600 struct mana_dev_recovery *dev;
2601 unsigned long flags;
2602
2603 dev_info(&pdev->dev, "Start MANA recovery mode\n");
2604
2605 dev = kzalloc_obj(*dev);
2606 if (!dev)
2607 return err;
2608
2609 dev->pdev = pci_dev_get(pdev);
2610 dev->type = GDMA_EQE_HWC_RESET_REQUEST;
2611
2612 spin_lock_irqsave(&mana_dev_recovery_work.lock, flags);
2613 list_add_tail(&dev->list, &mana_dev_recovery_work.dev_list);
2614 spin_unlock_irqrestore(&mana_dev_recovery_work.lock, flags);
2615
2616 schedule_delayed_work(&mana_dev_recovery_work.work,
2617 secs_to_jiffies(MANA_SERVICE_PERIOD));
2618 }
2619
2620 return err;
2621 }
2622
mana_gd_remove(struct pci_dev * pdev)2623 static void mana_gd_remove(struct pci_dev *pdev)
2624 {
2625 struct gdma_context *gc = pci_get_drvdata(pdev);
2626
2627 pci_disable_sriov(pdev);
2628
2629 mana_rdma_remove(&gc->mana_ib);
2630 mana_remove(&gc->mana, false);
2631
2632 mana_gd_cleanup_device(pdev);
2633
2634 xa_destroy(&gc->irq_contexts);
2635
2636 pci_iounmap(pdev, gc->bar0_va);
2637
2638 vfree(gc);
2639
2640 pci_release_regions(pdev);
2641 pci_disable_device(pdev);
2642
2643 dev_dbg(&pdev->dev, "mana gdma remove successful\n");
2644 }
2645
2646 /* The 'state' parameter is not used. */
mana_gd_suspend(struct pci_dev * pdev,pm_message_t state)2647 int mana_gd_suspend(struct pci_dev *pdev, pm_message_t state)
2648 {
2649 struct gdma_context *gc = pci_get_drvdata(pdev);
2650
2651 mana_rdma_remove(&gc->mana_ib);
2652 mana_remove(&gc->mana, true);
2653
2654 mana_gd_cleanup_device(pdev);
2655
2656 return 0;
2657 }
2658
mana_gd_resume(struct pci_dev * pdev)2659 int mana_gd_resume(struct pci_dev *pdev)
2660 {
2661 struct gdma_context *gc = pci_get_drvdata(pdev);
2662 int err;
2663
2664 err = mana_gd_setup(pdev);
2665 if (err)
2666 return err;
2667
2668 err = mana_probe(&gc->mana, true);
2669 if (err)
2670 goto cleanup_gd;
2671
2672 err = mana_rdma_probe(&gc->mana_ib);
2673 if (err)
2674 mana_rdma_remove(&gc->mana_ib);
2675
2676 return err;
2677
2678 cleanup_gd:
2679 mana_gd_cleanup_device(pdev);
2680 return err;
2681 }
2682
2683 /* Quiesce the device for kexec. This is also called upon reboot/shutdown. */
mana_gd_shutdown(struct pci_dev * pdev)2684 static void mana_gd_shutdown(struct pci_dev *pdev)
2685 {
2686 struct gdma_context *gc = pci_get_drvdata(pdev);
2687
2688 dev_info(&pdev->dev, "Shutdown was called\n");
2689
2690 mana_rdma_remove(&gc->mana_ib);
2691 mana_remove(&gc->mana, true);
2692
2693 mana_gd_cleanup_device(pdev);
2694
2695 pci_disable_device(pdev);
2696 }
2697
mana_sriov_configure(struct pci_dev * pdev,int numvfs)2698 static int mana_sriov_configure(struct pci_dev *pdev, int numvfs)
2699 {
2700 int err = 0;
2701
2702 dev_info(&pdev->dev, "Requested num VFs: %d\n", numvfs);
2703
2704 if (numvfs > 0) {
2705 err = pci_enable_sriov(pdev, numvfs);
2706 } else {
2707 if (pci_vfs_assigned(pdev)) {
2708 dev_warn(&pdev->dev,
2709 "Cannot disable SR-IOV while VFs are assigned\n");
2710 return -EPERM;
2711 }
2712
2713 pci_disable_sriov(pdev);
2714 }
2715
2716 return err ? err : numvfs;
2717 }
2718
2719 static const struct pci_device_id mana_id_table[] = {
2720 { PCI_DEVICE(PCI_VENDOR_ID_MICROSOFT, MANA_PF_DEVICE_ID) },
2721 { PCI_DEVICE(PCI_VENDOR_ID_MICROSOFT, MANA_PF2_DEVICE_ID) },
2722 { PCI_DEVICE(PCI_VENDOR_ID_MICROSOFT, MANA_VF_DEVICE_ID) },
2723 { }
2724 };
2725
2726 static struct pci_driver mana_driver = {
2727 .name = "mana",
2728 .id_table = mana_id_table,
2729 .probe = mana_gd_probe,
2730 .remove = mana_gd_remove,
2731 .suspend = mana_gd_suspend,
2732 .resume = mana_gd_resume,
2733 .shutdown = mana_gd_shutdown,
2734 .sriov_configure = mana_sriov_configure,
2735 };
2736
mana_driver_init(void)2737 static int __init mana_driver_init(void)
2738 {
2739 int err;
2740
2741 INIT_LIST_HEAD(&mana_dev_recovery_work.dev_list);
2742 spin_lock_init(&mana_dev_recovery_work.lock);
2743 INIT_DELAYED_WORK(&mana_dev_recovery_work.work, mana_recovery_delayed_func);
2744
2745 mana_debugfs_root = debugfs_create_dir("mana", NULL);
2746
2747 err = pci_register_driver(&mana_driver);
2748 if (err) {
2749 debugfs_remove(mana_debugfs_root);
2750 mana_debugfs_root = NULL;
2751 }
2752
2753 return err;
2754 }
2755
mana_driver_exit(void)2756 static void __exit mana_driver_exit(void)
2757 {
2758 struct mana_dev_recovery *dev;
2759 unsigned long flags;
2760
2761 disable_delayed_work_sync(&mana_dev_recovery_work.work);
2762
2763 spin_lock_irqsave(&mana_dev_recovery_work.lock, flags);
2764 while (!list_empty(&mana_dev_recovery_work.dev_list)) {
2765 dev = list_first_entry(&mana_dev_recovery_work.dev_list,
2766 struct mana_dev_recovery, list);
2767 list_del(&dev->list);
2768 pci_dev_put(dev->pdev);
2769 kfree(dev);
2770 }
2771 spin_unlock_irqrestore(&mana_dev_recovery_work.lock, flags);
2772
2773 pci_unregister_driver(&mana_driver);
2774
2775 debugfs_remove(mana_debugfs_root);
2776
2777 mana_debugfs_root = NULL;
2778 }
2779
2780 module_init(mana_driver_init);
2781 module_exit(mana_driver_exit);
2782
2783 MODULE_DEVICE_TABLE(pci, mana_id_table);
2784
2785 MODULE_LICENSE("Dual BSD/GPL");
2786 MODULE_DESCRIPTION("Microsoft Azure Network Adapter driver");
2787