1 // SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2 /* Copyright (C) 2015-2018 Netronome Systems, Inc. */
3 
4 /*
5  * nfp_main.c
6  * Authors: Jakub Kicinski <jakub.kicinski@netronome.com>
7  *          Alejandro Lucero <alejandro.lucero@netronome.com>
8  *          Jason McMullan <jason.mcmullan@netronome.com>
9  *          Rolf Neugebauer <rolf.neugebauer@netronome.com>
10  */
11 
12 #include <linux/kernel.h>
13 #include <linux/module.h>
14 #include <linux/mutex.h>
15 #include <linux/pci.h>
16 #include <linux/firmware.h>
17 #include <linux/vermagic.h>
18 #include <linux/vmalloc.h>
19 #include <net/devlink.h>
20 
21 #include "nfpcore/nfp.h"
22 #include "nfpcore/nfp_cpp.h"
23 #include "nfpcore/nfp_nffw.h"
24 #include "nfpcore/nfp_nsp.h"
25 
26 #include "nfpcore/nfp6000_pcie.h"
27 
28 #include "nfp_abi.h"
29 #include "nfp_app.h"
30 #include "nfp_main.h"
31 #include "nfp_net.h"
32 
33 static const char nfp_driver_name[] = "nfp";
34 const char nfp_driver_version[] = VERMAGIC_STRING;
35 
36 static const struct pci_device_id nfp_pci_device_ids[] = {
37 	{ PCI_VENDOR_ID_NETRONOME, PCI_DEVICE_ID_NETRONOME_NFP6000,
38 	  PCI_VENDOR_ID_NETRONOME, PCI_ANY_ID,
39 	  PCI_ANY_ID, 0,
40 	},
41 	{ PCI_VENDOR_ID_NETRONOME, PCI_DEVICE_ID_NETRONOME_NFP5000,
42 	  PCI_VENDOR_ID_NETRONOME, PCI_ANY_ID,
43 	  PCI_ANY_ID, 0,
44 	},
45 	{ PCI_VENDOR_ID_NETRONOME, PCI_DEVICE_ID_NETRONOME_NFP4000,
46 	  PCI_VENDOR_ID_NETRONOME, PCI_ANY_ID,
47 	  PCI_ANY_ID, 0,
48 	},
49 	{ 0, } /* Required last entry. */
50 };
51 MODULE_DEVICE_TABLE(pci, nfp_pci_device_ids);
52 
53 int nfp_pf_rtsym_read_optional(struct nfp_pf *pf, const char *format,
54 			       unsigned int default_val)
55 {
56 	char name[256];
57 	int err = 0;
58 	u64 val;
59 
60 	snprintf(name, sizeof(name), format, nfp_cppcore_pcie_unit(pf->cpp));
61 
62 	val = nfp_rtsym_read_le(pf->rtbl, name, &err);
63 	if (err) {
64 		if (err == -ENOENT)
65 			return default_val;
66 		nfp_err(pf->cpp, "Unable to read symbol %s\n", name);
67 		return err;
68 	}
69 
70 	return val;
71 }
72 
73 u8 __iomem *
74 nfp_pf_map_rtsym(struct nfp_pf *pf, const char *name, const char *sym_fmt,
75 		 unsigned int min_size, struct nfp_cpp_area **area)
76 {
77 	char pf_symbol[256];
78 
79 	snprintf(pf_symbol, sizeof(pf_symbol), sym_fmt,
80 		 nfp_cppcore_pcie_unit(pf->cpp));
81 
82 	return nfp_rtsym_map(pf->rtbl, pf_symbol, name, min_size, area);
83 }
84 
85 /* Callers should hold the devlink instance lock */
86 int nfp_mbox_cmd(struct nfp_pf *pf, u32 cmd, void *in_data, u64 in_length,
87 		 void *out_data, u64 out_length)
88 {
89 	unsigned long err_at;
90 	u64 max_data_sz;
91 	u32 val = 0;
92 	int n, err;
93 
94 	if (!pf->mbox)
95 		return -EOPNOTSUPP;
96 
97 	max_data_sz = nfp_rtsym_size(pf->mbox) - NFP_MBOX_SYM_MIN_SIZE;
98 
99 	/* Check if cmd field is clear */
100 	err = nfp_rtsym_readl(pf->cpp, pf->mbox, NFP_MBOX_CMD, &val);
101 	if (err || val) {
102 		nfp_warn(pf->cpp, "failed to issue command (%u): %u, err: %d\n",
103 			 cmd, val, err);
104 		return err ?: -EBUSY;
105 	}
106 
107 	in_length = min(in_length, max_data_sz);
108 	n = nfp_rtsym_write(pf->cpp, pf->mbox, NFP_MBOX_DATA, in_data,
109 			    in_length);
110 	if (n != in_length)
111 		return -EIO;
112 	/* Write data_len and wipe reserved */
113 	err = nfp_rtsym_writeq(pf->cpp, pf->mbox, NFP_MBOX_DATA_LEN, in_length);
114 	if (err)
115 		return err;
116 
117 	/* Read back for ordering */
118 	err = nfp_rtsym_readl(pf->cpp, pf->mbox, NFP_MBOX_DATA_LEN, &val);
119 	if (err)
120 		return err;
121 
122 	/* Write cmd and wipe return value */
123 	err = nfp_rtsym_writeq(pf->cpp, pf->mbox, NFP_MBOX_CMD, cmd);
124 	if (err)
125 		return err;
126 
127 	err_at = jiffies + 5 * HZ;
128 	while (true) {
129 		/* Wait for command to go to 0 (NFP_MBOX_NO_CMD) */
130 		err = nfp_rtsym_readl(pf->cpp, pf->mbox, NFP_MBOX_CMD, &val);
131 		if (err)
132 			return err;
133 		if (!val)
134 			break;
135 
136 		if (time_is_before_eq_jiffies(err_at))
137 			return -ETIMEDOUT;
138 
139 		msleep(5);
140 	}
141 
142 	/* Copy output if any (could be error info, do it before reading ret) */
143 	err = nfp_rtsym_readl(pf->cpp, pf->mbox, NFP_MBOX_DATA_LEN, &val);
144 	if (err)
145 		return err;
146 
147 	out_length = min_t(u32, val, min(out_length, max_data_sz));
148 	n = nfp_rtsym_read(pf->cpp, pf->mbox, NFP_MBOX_DATA,
149 			   out_data, out_length);
150 	if (n != out_length)
151 		return -EIO;
152 
153 	/* Check if there is an error */
154 	err = nfp_rtsym_readl(pf->cpp, pf->mbox, NFP_MBOX_RET, &val);
155 	if (err)
156 		return err;
157 	if (val)
158 		return -val;
159 
160 	return out_length;
161 }
162 
163 static bool nfp_board_ready(struct nfp_pf *pf)
164 {
165 	const char *cp;
166 	long state;
167 	int err;
168 
169 	cp = nfp_hwinfo_lookup(pf->hwinfo, "board.state");
170 	if (!cp)
171 		return false;
172 
173 	err = kstrtol(cp, 0, &state);
174 	if (err < 0)
175 		return false;
176 
177 	return state == 15;
178 }
179 
180 static int nfp_pf_board_state_wait(struct nfp_pf *pf)
181 {
182 	const unsigned long wait_until = jiffies + 10 * HZ;
183 
184 	while (!nfp_board_ready(pf)) {
185 		if (time_is_before_eq_jiffies(wait_until)) {
186 			nfp_err(pf->cpp, "NFP board initialization timeout\n");
187 			return -EINVAL;
188 		}
189 
190 		nfp_info(pf->cpp, "waiting for board initialization\n");
191 		if (msleep_interruptible(500))
192 			return -ERESTARTSYS;
193 
194 		/* Refresh cached information */
195 		kfree(pf->hwinfo);
196 		pf->hwinfo = nfp_hwinfo_read(pf->cpp);
197 	}
198 
199 	return 0;
200 }
201 
202 static int nfp_pcie_sriov_read_nfd_limit(struct nfp_pf *pf)
203 {
204 	int err;
205 
206 	pf->limit_vfs = nfp_rtsym_read_le(pf->rtbl, "nfd_vf_cfg_max_vfs", &err);
207 	if (err) {
208 		/* For backwards compatibility if symbol not found allow all */
209 		pf->limit_vfs = ~0;
210 		if (err == -ENOENT)
211 			return 0;
212 
213 		nfp_warn(pf->cpp, "Warning: VF limit read failed: %d\n", err);
214 		return err;
215 	}
216 
217 	err = pci_sriov_set_totalvfs(pf->pdev, pf->limit_vfs);
218 	if (err)
219 		nfp_warn(pf->cpp, "Failed to set VF count in sysfs: %d\n", err);
220 	return 0;
221 }
222 
223 static int nfp_pcie_sriov_enable(struct pci_dev *pdev, int num_vfs)
224 {
225 #ifdef CONFIG_PCI_IOV
226 	struct nfp_pf *pf = pci_get_drvdata(pdev);
227 	int err;
228 
229 	if (num_vfs > pf->limit_vfs) {
230 		nfp_info(pf->cpp, "Firmware limits number of VFs to %u\n",
231 			 pf->limit_vfs);
232 		return -EINVAL;
233 	}
234 
235 	err = pci_enable_sriov(pdev, num_vfs);
236 	if (err) {
237 		dev_warn(&pdev->dev, "Failed to enable PCI SR-IOV: %d\n", err);
238 		return err;
239 	}
240 
241 	mutex_lock(&pf->lock);
242 
243 	err = nfp_app_sriov_enable(pf->app, num_vfs);
244 	if (err) {
245 		dev_warn(&pdev->dev,
246 			 "App specific PCI SR-IOV configuration failed: %d\n",
247 			 err);
248 		goto err_sriov_disable;
249 	}
250 
251 	pf->num_vfs = num_vfs;
252 
253 	dev_dbg(&pdev->dev, "Created %d VFs.\n", pf->num_vfs);
254 
255 	mutex_unlock(&pf->lock);
256 	return num_vfs;
257 
258 err_sriov_disable:
259 	mutex_unlock(&pf->lock);
260 	pci_disable_sriov(pdev);
261 	return err;
262 #endif
263 	return 0;
264 }
265 
266 static int nfp_pcie_sriov_disable(struct pci_dev *pdev)
267 {
268 #ifdef CONFIG_PCI_IOV
269 	struct nfp_pf *pf = pci_get_drvdata(pdev);
270 
271 	mutex_lock(&pf->lock);
272 
273 	/* If the VFs are assigned we cannot shut down SR-IOV without
274 	 * causing issues, so just leave the hardware available but
275 	 * disabled
276 	 */
277 	if (pci_vfs_assigned(pdev)) {
278 		dev_warn(&pdev->dev, "Disabling while VFs assigned - VFs will not be deallocated\n");
279 		mutex_unlock(&pf->lock);
280 		return -EPERM;
281 	}
282 
283 	nfp_app_sriov_disable(pf->app);
284 
285 	pf->num_vfs = 0;
286 
287 	mutex_unlock(&pf->lock);
288 
289 	pci_disable_sriov(pdev);
290 	dev_dbg(&pdev->dev, "Removed VFs.\n");
291 #endif
292 	return 0;
293 }
294 
295 static int nfp_pcie_sriov_configure(struct pci_dev *pdev, int num_vfs)
296 {
297 	if (num_vfs == 0)
298 		return nfp_pcie_sriov_disable(pdev);
299 	else
300 		return nfp_pcie_sriov_enable(pdev, num_vfs);
301 }
302 
303 static const struct firmware *
304 nfp_net_fw_request(struct pci_dev *pdev, struct nfp_pf *pf, const char *name)
305 {
306 	const struct firmware *fw = NULL;
307 	int err;
308 
309 	err = request_firmware_direct(&fw, name, &pdev->dev);
310 	nfp_info(pf->cpp, "  %s: %s\n",
311 		 name, err ? "not found" : "found, loading...");
312 	if (err)
313 		return NULL;
314 
315 	return fw;
316 }
317 
318 /**
319  * nfp_net_fw_find() - Find the correct firmware image for netdev mode
320  * @pdev:	PCI Device structure
321  * @pf:		NFP PF Device structure
322  *
323  * Return: firmware if found and requested successfully.
324  */
325 static const struct firmware *
326 nfp_net_fw_find(struct pci_dev *pdev, struct nfp_pf *pf)
327 {
328 	struct nfp_eth_table_port *port;
329 	const struct firmware *fw;
330 	const char *fw_model;
331 	char fw_name[256];
332 	const u8 *serial;
333 	u16 interface;
334 	int spc, i, j;
335 
336 	nfp_info(pf->cpp, "Looking for firmware file in order of priority:\n");
337 
338 	/* First try to find a firmware image specific for this device */
339 	interface = nfp_cpp_interface(pf->cpp);
340 	nfp_cpp_serial(pf->cpp, &serial);
341 	sprintf(fw_name, "netronome/serial-%pMF-%02hhx-%02hhx.nffw",
342 		serial, interface >> 8, interface & 0xff);
343 	fw = nfp_net_fw_request(pdev, pf, fw_name);
344 	if (fw)
345 		return fw;
346 
347 	/* Then try the PCI name */
348 	sprintf(fw_name, "netronome/pci-%s.nffw", pci_name(pdev));
349 	fw = nfp_net_fw_request(pdev, pf, fw_name);
350 	if (fw)
351 		return fw;
352 
353 	/* Finally try the card type and media */
354 	if (!pf->eth_tbl) {
355 		dev_err(&pdev->dev, "Error: can't identify media config\n");
356 		return NULL;
357 	}
358 
359 	fw_model = nfp_hwinfo_lookup(pf->hwinfo, "assembly.partno");
360 	if (!fw_model) {
361 		dev_err(&pdev->dev, "Error: can't read part number\n");
362 		return NULL;
363 	}
364 
365 	spc = ARRAY_SIZE(fw_name);
366 	spc -= snprintf(fw_name, spc, "netronome/nic_%s", fw_model);
367 
368 	for (i = 0; spc > 0 && i < pf->eth_tbl->count; i += j) {
369 		port = &pf->eth_tbl->ports[i];
370 		j = 1;
371 		while (i + j < pf->eth_tbl->count &&
372 		       port->speed == port[j].speed)
373 			j++;
374 
375 		spc -= snprintf(&fw_name[ARRAY_SIZE(fw_name) - spc], spc,
376 				"_%dx%d", j, port->speed / 1000);
377 	}
378 
379 	if (spc <= 0)
380 		return NULL;
381 
382 	spc -= snprintf(&fw_name[ARRAY_SIZE(fw_name) - spc], spc, ".nffw");
383 	if (spc <= 0)
384 		return NULL;
385 
386 	return nfp_net_fw_request(pdev, pf, fw_name);
387 }
388 
389 /**
390  * nfp_net_fw_load() - Load the firmware image
391  * @pdev:       PCI Device structure
392  * @pf:		NFP PF Device structure
393  * @nsp:	NFP SP handle
394  *
395  * Return: -ERRNO, 0 for no firmware loaded, 1 for firmware loaded
396  */
397 static int
398 nfp_fw_load(struct pci_dev *pdev, struct nfp_pf *pf, struct nfp_nsp *nsp)
399 {
400 	const struct firmware *fw;
401 	u16 interface;
402 	int err;
403 
404 	interface = nfp_cpp_interface(pf->cpp);
405 	if (NFP_CPP_INTERFACE_UNIT_of(interface) != 0) {
406 		/* Only Unit 0 should reset or load firmware */
407 		dev_info(&pdev->dev, "Firmware will be loaded by partner\n");
408 		return 0;
409 	}
410 
411 	fw = nfp_net_fw_find(pdev, pf);
412 	if (!fw) {
413 		if (nfp_nsp_has_stored_fw_load(nsp))
414 			nfp_nsp_load_stored_fw(nsp);
415 		return 0;
416 	}
417 
418 	dev_info(&pdev->dev, "Soft-reset, loading FW image\n");
419 	err = nfp_nsp_device_soft_reset(nsp);
420 	if (err < 0) {
421 		dev_err(&pdev->dev, "Failed to soft reset the NFP: %d\n",
422 			err);
423 		goto exit_release_fw;
424 	}
425 
426 	err = nfp_nsp_load_fw(nsp, fw);
427 	if (err < 0) {
428 		dev_err(&pdev->dev, "FW loading failed: %d\n", err);
429 		goto exit_release_fw;
430 	}
431 
432 	dev_info(&pdev->dev, "Finished loading FW image\n");
433 
434 exit_release_fw:
435 	release_firmware(fw);
436 
437 	return err < 0 ? err : 1;
438 }
439 
440 static void
441 nfp_nsp_init_ports(struct pci_dev *pdev, struct nfp_pf *pf,
442 		   struct nfp_nsp *nsp)
443 {
444 	bool needs_reinit = false;
445 	int i;
446 
447 	pf->eth_tbl = __nfp_eth_read_ports(pf->cpp, nsp);
448 	if (!pf->eth_tbl)
449 		return;
450 
451 	if (!nfp_nsp_has_mac_reinit(nsp))
452 		return;
453 
454 	for (i = 0; i < pf->eth_tbl->count; i++)
455 		needs_reinit |= pf->eth_tbl->ports[i].override_changed;
456 	if (!needs_reinit)
457 		return;
458 
459 	kfree(pf->eth_tbl);
460 	if (nfp_nsp_mac_reinit(nsp))
461 		dev_warn(&pdev->dev, "MAC reinit failed\n");
462 
463 	pf->eth_tbl = __nfp_eth_read_ports(pf->cpp, nsp);
464 }
465 
466 static int nfp_nsp_init(struct pci_dev *pdev, struct nfp_pf *pf)
467 {
468 	struct nfp_nsp *nsp;
469 	int err;
470 
471 	err = nfp_resource_wait(pf->cpp, NFP_RESOURCE_NSP, 30);
472 	if (err)
473 		return err;
474 
475 	nsp = nfp_nsp_open(pf->cpp);
476 	if (IS_ERR(nsp)) {
477 		err = PTR_ERR(nsp);
478 		dev_err(&pdev->dev, "Failed to access the NSP: %d\n", err);
479 		return err;
480 	}
481 
482 	err = nfp_nsp_wait(nsp);
483 	if (err < 0)
484 		goto exit_close_nsp;
485 
486 	nfp_nsp_init_ports(pdev, pf, nsp);
487 
488 	pf->nspi = __nfp_nsp_identify(nsp);
489 	if (pf->nspi)
490 		dev_info(&pdev->dev, "BSP: %s\n", pf->nspi->version);
491 
492 	err = nfp_fw_load(pdev, pf, nsp);
493 	if (err < 0) {
494 		kfree(pf->nspi);
495 		kfree(pf->eth_tbl);
496 		dev_err(&pdev->dev, "Failed to load FW\n");
497 		goto exit_close_nsp;
498 	}
499 
500 	pf->fw_loaded = !!err;
501 	err = 0;
502 
503 exit_close_nsp:
504 	nfp_nsp_close(nsp);
505 
506 	return err;
507 }
508 
509 static void nfp_fw_unload(struct nfp_pf *pf)
510 {
511 	struct nfp_nsp *nsp;
512 	int err;
513 
514 	nsp = nfp_nsp_open(pf->cpp);
515 	if (IS_ERR(nsp)) {
516 		nfp_err(pf->cpp, "Reset failed, can't open NSP\n");
517 		return;
518 	}
519 
520 	err = nfp_nsp_device_soft_reset(nsp);
521 	if (err < 0)
522 		dev_warn(&pf->pdev->dev, "Couldn't unload firmware: %d\n", err);
523 	else
524 		dev_info(&pf->pdev->dev, "Firmware safely unloaded\n");
525 
526 	nfp_nsp_close(nsp);
527 }
528 
529 static int nfp_pf_find_rtsyms(struct nfp_pf *pf)
530 {
531 	char pf_symbol[256];
532 	unsigned int pf_id;
533 
534 	pf_id = nfp_cppcore_pcie_unit(pf->cpp);
535 
536 	/* Optional per-PCI PF mailbox */
537 	snprintf(pf_symbol, sizeof(pf_symbol), NFP_MBOX_SYM_NAME, pf_id);
538 	pf->mbox = nfp_rtsym_lookup(pf->rtbl, pf_symbol);
539 	if (pf->mbox && nfp_rtsym_size(pf->mbox) < NFP_MBOX_SYM_MIN_SIZE) {
540 		nfp_err(pf->cpp, "PF mailbox symbol too small: %llu < %d\n",
541 			nfp_rtsym_size(pf->mbox), NFP_MBOX_SYM_MIN_SIZE);
542 		return -EINVAL;
543 	}
544 
545 	return 0;
546 }
547 
548 static int nfp_pci_probe(struct pci_dev *pdev,
549 			 const struct pci_device_id *pci_id)
550 {
551 	struct devlink *devlink;
552 	struct nfp_pf *pf;
553 	int err;
554 
555 	err = pci_enable_device(pdev);
556 	if (err < 0)
557 		return err;
558 
559 	pci_set_master(pdev);
560 
561 	err = dma_set_mask_and_coherent(&pdev->dev,
562 					DMA_BIT_MASK(NFP_NET_MAX_DMA_BITS));
563 	if (err)
564 		goto err_pci_disable;
565 
566 	err = pci_request_regions(pdev, nfp_driver_name);
567 	if (err < 0) {
568 		dev_err(&pdev->dev, "Unable to reserve pci resources.\n");
569 		goto err_pci_disable;
570 	}
571 
572 	devlink = devlink_alloc(&nfp_devlink_ops, sizeof(*pf));
573 	if (!devlink) {
574 		err = -ENOMEM;
575 		goto err_rel_regions;
576 	}
577 	pf = devlink_priv(devlink);
578 	INIT_LIST_HEAD(&pf->vnics);
579 	INIT_LIST_HEAD(&pf->ports);
580 	mutex_init(&pf->lock);
581 	pci_set_drvdata(pdev, pf);
582 	pf->pdev = pdev;
583 
584 	pf->wq = alloc_workqueue("nfp-%s", 0, 2, pci_name(pdev));
585 	if (!pf->wq) {
586 		err = -ENOMEM;
587 		goto err_pci_priv_unset;
588 	}
589 
590 	pf->cpp = nfp_cpp_from_nfp6000_pcie(pdev);
591 	if (IS_ERR_OR_NULL(pf->cpp)) {
592 		err = PTR_ERR(pf->cpp);
593 		if (err >= 0)
594 			err = -ENOMEM;
595 		goto err_disable_msix;
596 	}
597 
598 	err = nfp_resource_table_init(pf->cpp);
599 	if (err)
600 		goto err_cpp_free;
601 
602 	pf->hwinfo = nfp_hwinfo_read(pf->cpp);
603 
604 	dev_info(&pdev->dev, "Assembly: %s%s%s-%s CPLD: %s\n",
605 		 nfp_hwinfo_lookup(pf->hwinfo, "assembly.vendor"),
606 		 nfp_hwinfo_lookup(pf->hwinfo, "assembly.partno"),
607 		 nfp_hwinfo_lookup(pf->hwinfo, "assembly.serial"),
608 		 nfp_hwinfo_lookup(pf->hwinfo, "assembly.revision"),
609 		 nfp_hwinfo_lookup(pf->hwinfo, "cpld.version"));
610 
611 	err = nfp_pf_board_state_wait(pf);
612 	if (err)
613 		goto err_hwinfo_free;
614 
615 	err = nfp_nsp_init(pdev, pf);
616 	if (err)
617 		goto err_hwinfo_free;
618 
619 	pf->mip = nfp_mip_open(pf->cpp);
620 	pf->rtbl = __nfp_rtsym_table_read(pf->cpp, pf->mip);
621 
622 	err = nfp_pf_find_rtsyms(pf);
623 	if (err)
624 		goto err_fw_unload;
625 
626 	pf->dump_flag = NFP_DUMP_NSP_DIAG;
627 	pf->dumpspec = nfp_net_dump_load_dumpspec(pf->cpp, pf->rtbl);
628 
629 	err = nfp_pcie_sriov_read_nfd_limit(pf);
630 	if (err)
631 		goto err_fw_unload;
632 
633 	pf->num_vfs = pci_num_vf(pdev);
634 	if (pf->num_vfs > pf->limit_vfs) {
635 		dev_err(&pdev->dev,
636 			"Error: %d VFs already enabled, but loaded FW can only support %d\n",
637 			pf->num_vfs, pf->limit_vfs);
638 		err = -EINVAL;
639 		goto err_fw_unload;
640 	}
641 
642 	err = nfp_net_pci_probe(pf);
643 	if (err)
644 		goto err_fw_unload;
645 
646 	err = nfp_hwmon_register(pf);
647 	if (err) {
648 		dev_err(&pdev->dev, "Failed to register hwmon info\n");
649 		goto err_net_remove;
650 	}
651 
652 	return 0;
653 
654 err_net_remove:
655 	nfp_net_pci_remove(pf);
656 err_fw_unload:
657 	kfree(pf->rtbl);
658 	nfp_mip_close(pf->mip);
659 	if (pf->fw_loaded)
660 		nfp_fw_unload(pf);
661 	kfree(pf->eth_tbl);
662 	kfree(pf->nspi);
663 	vfree(pf->dumpspec);
664 err_hwinfo_free:
665 	kfree(pf->hwinfo);
666 err_cpp_free:
667 	nfp_cpp_free(pf->cpp);
668 err_disable_msix:
669 	destroy_workqueue(pf->wq);
670 err_pci_priv_unset:
671 	pci_set_drvdata(pdev, NULL);
672 	mutex_destroy(&pf->lock);
673 	devlink_free(devlink);
674 err_rel_regions:
675 	pci_release_regions(pdev);
676 err_pci_disable:
677 	pci_disable_device(pdev);
678 
679 	return err;
680 }
681 
682 static void nfp_pci_remove(struct pci_dev *pdev)
683 {
684 	struct nfp_pf *pf = pci_get_drvdata(pdev);
685 
686 	nfp_hwmon_unregister(pf);
687 
688 	nfp_pcie_sriov_disable(pdev);
689 
690 	nfp_net_pci_remove(pf);
691 
692 	vfree(pf->dumpspec);
693 	kfree(pf->rtbl);
694 	nfp_mip_close(pf->mip);
695 	if (pf->fw_loaded)
696 		nfp_fw_unload(pf);
697 
698 	destroy_workqueue(pf->wq);
699 	pci_set_drvdata(pdev, NULL);
700 	kfree(pf->hwinfo);
701 	nfp_cpp_free(pf->cpp);
702 
703 	kfree(pf->eth_tbl);
704 	kfree(pf->nspi);
705 	mutex_destroy(&pf->lock);
706 	devlink_free(priv_to_devlink(pf));
707 	pci_release_regions(pdev);
708 	pci_disable_device(pdev);
709 }
710 
711 static struct pci_driver nfp_pci_driver = {
712 	.name			= nfp_driver_name,
713 	.id_table		= nfp_pci_device_ids,
714 	.probe			= nfp_pci_probe,
715 	.remove			= nfp_pci_remove,
716 	.sriov_configure	= nfp_pcie_sriov_configure,
717 };
718 
719 static int __init nfp_main_init(void)
720 {
721 	int err;
722 
723 	pr_info("%s: NFP PCIe Driver, Copyright (C) 2014-2017 Netronome Systems\n",
724 		nfp_driver_name);
725 
726 	nfp_net_debugfs_create();
727 
728 	err = pci_register_driver(&nfp_pci_driver);
729 	if (err < 0)
730 		goto err_destroy_debugfs;
731 
732 	err = pci_register_driver(&nfp_netvf_pci_driver);
733 	if (err)
734 		goto err_unreg_pf;
735 
736 	return err;
737 
738 err_unreg_pf:
739 	pci_unregister_driver(&nfp_pci_driver);
740 err_destroy_debugfs:
741 	nfp_net_debugfs_destroy();
742 	return err;
743 }
744 
745 static void __exit nfp_main_exit(void)
746 {
747 	pci_unregister_driver(&nfp_netvf_pci_driver);
748 	pci_unregister_driver(&nfp_pci_driver);
749 	nfp_net_debugfs_destroy();
750 }
751 
752 module_init(nfp_main_init);
753 module_exit(nfp_main_exit);
754 
755 MODULE_FIRMWARE("netronome/nic_AMDA0081-0001_1x40.nffw");
756 MODULE_FIRMWARE("netronome/nic_AMDA0081-0001_4x10.nffw");
757 MODULE_FIRMWARE("netronome/nic_AMDA0096-0001_2x10.nffw");
758 MODULE_FIRMWARE("netronome/nic_AMDA0097-0001_2x40.nffw");
759 MODULE_FIRMWARE("netronome/nic_AMDA0097-0001_4x10_1x40.nffw");
760 MODULE_FIRMWARE("netronome/nic_AMDA0097-0001_8x10.nffw");
761 MODULE_FIRMWARE("netronome/nic_AMDA0099-0001_2x10.nffw");
762 MODULE_FIRMWARE("netronome/nic_AMDA0099-0001_2x25.nffw");
763 MODULE_FIRMWARE("netronome/nic_AMDA0099-0001_1x10_1x25.nffw");
764 
765 MODULE_AUTHOR("Netronome Systems <oss-drivers@netronome.com>");
766 MODULE_LICENSE("GPL");
767 MODULE_DESCRIPTION("The Netronome Flow Processor (NFP) driver.");
768 MODULE_VERSION(UTS_RELEASE);
769