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