xref: /linux/drivers/net/ethernet/microsoft/mana/gdma_main.c (revision 1fc5a74b108fc90951890ec513ac81869f5eaff1)
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