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 (!pci_get_drvdata(pdev))
298 		return -ENOENT;
299 
300 	if (num_vfs == 0)
301 		return nfp_pcie_sriov_disable(pdev);
302 	else
303 		return nfp_pcie_sriov_enable(pdev, num_vfs);
304 }
305 
306 int nfp_flash_update_common(struct nfp_pf *pf, const char *path,
307 			    struct netlink_ext_ack *extack)
308 {
309 	struct device *dev = &pf->pdev->dev;
310 	const struct firmware *fw;
311 	struct nfp_nsp *nsp;
312 	int err;
313 
314 	nsp = nfp_nsp_open(pf->cpp);
315 	if (IS_ERR(nsp)) {
316 		err = PTR_ERR(nsp);
317 		if (extack)
318 			NL_SET_ERR_MSG_MOD(extack, "can't access NSP");
319 		else
320 			dev_err(dev, "Failed to access the NSP: %d\n", err);
321 		return err;
322 	}
323 
324 	err = request_firmware_direct(&fw, path, dev);
325 	if (err) {
326 		NL_SET_ERR_MSG_MOD(extack,
327 				   "unable to read flash file from disk");
328 		goto exit_close_nsp;
329 	}
330 
331 	dev_info(dev, "Please be patient while writing flash image: %s\n",
332 		 path);
333 
334 	err = nfp_nsp_write_flash(nsp, fw);
335 	if (err < 0)
336 		goto exit_release_fw;
337 	dev_info(dev, "Finished writing flash image\n");
338 	err = 0;
339 
340 exit_release_fw:
341 	release_firmware(fw);
342 exit_close_nsp:
343 	nfp_nsp_close(nsp);
344 	return err;
345 }
346 
347 static const struct firmware *
348 nfp_net_fw_request(struct pci_dev *pdev, struct nfp_pf *pf, const char *name)
349 {
350 	const struct firmware *fw = NULL;
351 	int err;
352 
353 	err = request_firmware_direct(&fw, name, &pdev->dev);
354 	nfp_info(pf->cpp, "  %s: %s\n",
355 		 name, err ? "not found" : "found, loading...");
356 	if (err)
357 		return NULL;
358 
359 	return fw;
360 }
361 
362 /**
363  * nfp_net_fw_find() - Find the correct firmware image for netdev mode
364  * @pdev:	PCI Device structure
365  * @pf:		NFP PF Device structure
366  *
367  * Return: firmware if found and requested successfully.
368  */
369 static const struct firmware *
370 nfp_net_fw_find(struct pci_dev *pdev, struct nfp_pf *pf)
371 {
372 	struct nfp_eth_table_port *port;
373 	const struct firmware *fw;
374 	const char *fw_model;
375 	char fw_name[256];
376 	const u8 *serial;
377 	u16 interface;
378 	int spc, i, j;
379 
380 	nfp_info(pf->cpp, "Looking for firmware file in order of priority:\n");
381 
382 	/* First try to find a firmware image specific for this device */
383 	interface = nfp_cpp_interface(pf->cpp);
384 	nfp_cpp_serial(pf->cpp, &serial);
385 	sprintf(fw_name, "netronome/serial-%pMF-%02hhx-%02hhx.nffw",
386 		serial, interface >> 8, interface & 0xff);
387 	fw = nfp_net_fw_request(pdev, pf, fw_name);
388 	if (fw)
389 		return fw;
390 
391 	/* Then try the PCI name */
392 	sprintf(fw_name, "netronome/pci-%s.nffw", pci_name(pdev));
393 	fw = nfp_net_fw_request(pdev, pf, fw_name);
394 	if (fw)
395 		return fw;
396 
397 	/* Finally try the card type and media */
398 	if (!pf->eth_tbl) {
399 		dev_err(&pdev->dev, "Error: can't identify media config\n");
400 		return NULL;
401 	}
402 
403 	fw_model = nfp_hwinfo_lookup(pf->hwinfo, "assembly.partno");
404 	if (!fw_model) {
405 		dev_err(&pdev->dev, "Error: can't read part number\n");
406 		return NULL;
407 	}
408 
409 	spc = ARRAY_SIZE(fw_name);
410 	spc -= snprintf(fw_name, spc, "netronome/nic_%s", fw_model);
411 
412 	for (i = 0; spc > 0 && i < pf->eth_tbl->count; i += j) {
413 		port = &pf->eth_tbl->ports[i];
414 		j = 1;
415 		while (i + j < pf->eth_tbl->count &&
416 		       port->speed == port[j].speed)
417 			j++;
418 
419 		spc -= snprintf(&fw_name[ARRAY_SIZE(fw_name) - spc], spc,
420 				"_%dx%d", j, port->speed / 1000);
421 	}
422 
423 	if (spc <= 0)
424 		return NULL;
425 
426 	spc -= snprintf(&fw_name[ARRAY_SIZE(fw_name) - spc], spc, ".nffw");
427 	if (spc <= 0)
428 		return NULL;
429 
430 	return nfp_net_fw_request(pdev, pf, fw_name);
431 }
432 
433 /**
434  * nfp_net_fw_load() - Load the firmware image
435  * @pdev:       PCI Device structure
436  * @pf:		NFP PF Device structure
437  * @nsp:	NFP SP handle
438  *
439  * Return: -ERRNO, 0 for no firmware loaded, 1 for firmware loaded
440  */
441 static int
442 nfp_fw_load(struct pci_dev *pdev, struct nfp_pf *pf, struct nfp_nsp *nsp)
443 {
444 	const struct firmware *fw;
445 	u16 interface;
446 	int err;
447 
448 	interface = nfp_cpp_interface(pf->cpp);
449 	if (NFP_CPP_INTERFACE_UNIT_of(interface) != 0) {
450 		/* Only Unit 0 should reset or load firmware */
451 		dev_info(&pdev->dev, "Firmware will be loaded by partner\n");
452 		return 0;
453 	}
454 
455 	fw = nfp_net_fw_find(pdev, pf);
456 	if (!fw) {
457 		if (nfp_nsp_has_stored_fw_load(nsp))
458 			nfp_nsp_load_stored_fw(nsp);
459 		return 0;
460 	}
461 
462 	dev_info(&pdev->dev, "Soft-reset, loading FW image\n");
463 	err = nfp_nsp_device_soft_reset(nsp);
464 	if (err < 0) {
465 		dev_err(&pdev->dev, "Failed to soft reset the NFP: %d\n",
466 			err);
467 		goto exit_release_fw;
468 	}
469 
470 	err = nfp_nsp_load_fw(nsp, fw);
471 	if (err < 0) {
472 		dev_err(&pdev->dev, "FW loading failed: %d\n", err);
473 		goto exit_release_fw;
474 	}
475 
476 	dev_info(&pdev->dev, "Finished loading FW image\n");
477 
478 exit_release_fw:
479 	release_firmware(fw);
480 
481 	return err < 0 ? err : 1;
482 }
483 
484 static void
485 nfp_nsp_init_ports(struct pci_dev *pdev, struct nfp_pf *pf,
486 		   struct nfp_nsp *nsp)
487 {
488 	bool needs_reinit = false;
489 	int i;
490 
491 	pf->eth_tbl = __nfp_eth_read_ports(pf->cpp, nsp);
492 	if (!pf->eth_tbl)
493 		return;
494 
495 	if (!nfp_nsp_has_mac_reinit(nsp))
496 		return;
497 
498 	for (i = 0; i < pf->eth_tbl->count; i++)
499 		needs_reinit |= pf->eth_tbl->ports[i].override_changed;
500 	if (!needs_reinit)
501 		return;
502 
503 	kfree(pf->eth_tbl);
504 	if (nfp_nsp_mac_reinit(nsp))
505 		dev_warn(&pdev->dev, "MAC reinit failed\n");
506 
507 	pf->eth_tbl = __nfp_eth_read_ports(pf->cpp, nsp);
508 }
509 
510 static int nfp_nsp_init(struct pci_dev *pdev, struct nfp_pf *pf)
511 {
512 	struct nfp_nsp *nsp;
513 	int err;
514 
515 	err = nfp_resource_wait(pf->cpp, NFP_RESOURCE_NSP, 30);
516 	if (err)
517 		return err;
518 
519 	nsp = nfp_nsp_open(pf->cpp);
520 	if (IS_ERR(nsp)) {
521 		err = PTR_ERR(nsp);
522 		dev_err(&pdev->dev, "Failed to access the NSP: %d\n", err);
523 		return err;
524 	}
525 
526 	err = nfp_nsp_wait(nsp);
527 	if (err < 0)
528 		goto exit_close_nsp;
529 
530 	nfp_nsp_init_ports(pdev, pf, nsp);
531 
532 	pf->nspi = __nfp_nsp_identify(nsp);
533 	if (pf->nspi)
534 		dev_info(&pdev->dev, "BSP: %s\n", pf->nspi->version);
535 
536 	err = nfp_fw_load(pdev, pf, nsp);
537 	if (err < 0) {
538 		kfree(pf->nspi);
539 		kfree(pf->eth_tbl);
540 		dev_err(&pdev->dev, "Failed to load FW\n");
541 		goto exit_close_nsp;
542 	}
543 
544 	pf->fw_loaded = !!err;
545 	err = 0;
546 
547 exit_close_nsp:
548 	nfp_nsp_close(nsp);
549 
550 	return err;
551 }
552 
553 static void nfp_fw_unload(struct nfp_pf *pf)
554 {
555 	struct nfp_nsp *nsp;
556 	int err;
557 
558 	nsp = nfp_nsp_open(pf->cpp);
559 	if (IS_ERR(nsp)) {
560 		nfp_err(pf->cpp, "Reset failed, can't open NSP\n");
561 		return;
562 	}
563 
564 	err = nfp_nsp_device_soft_reset(nsp);
565 	if (err < 0)
566 		dev_warn(&pf->pdev->dev, "Couldn't unload firmware: %d\n", err);
567 	else
568 		dev_info(&pf->pdev->dev, "Firmware safely unloaded\n");
569 
570 	nfp_nsp_close(nsp);
571 }
572 
573 static int nfp_pf_find_rtsyms(struct nfp_pf *pf)
574 {
575 	char pf_symbol[256];
576 	unsigned int pf_id;
577 
578 	pf_id = nfp_cppcore_pcie_unit(pf->cpp);
579 
580 	/* Optional per-PCI PF mailbox */
581 	snprintf(pf_symbol, sizeof(pf_symbol), NFP_MBOX_SYM_NAME, pf_id);
582 	pf->mbox = nfp_rtsym_lookup(pf->rtbl, pf_symbol);
583 	if (pf->mbox && nfp_rtsym_size(pf->mbox) < NFP_MBOX_SYM_MIN_SIZE) {
584 		nfp_err(pf->cpp, "PF mailbox symbol too small: %llu < %d\n",
585 			nfp_rtsym_size(pf->mbox), NFP_MBOX_SYM_MIN_SIZE);
586 		return -EINVAL;
587 	}
588 
589 	return 0;
590 }
591 
592 static int nfp_pci_probe(struct pci_dev *pdev,
593 			 const struct pci_device_id *pci_id)
594 {
595 	struct devlink *devlink;
596 	struct nfp_pf *pf;
597 	int err;
598 
599 	err = pci_enable_device(pdev);
600 	if (err < 0)
601 		return err;
602 
603 	pci_set_master(pdev);
604 
605 	err = dma_set_mask_and_coherent(&pdev->dev,
606 					DMA_BIT_MASK(NFP_NET_MAX_DMA_BITS));
607 	if (err)
608 		goto err_pci_disable;
609 
610 	err = pci_request_regions(pdev, nfp_driver_name);
611 	if (err < 0) {
612 		dev_err(&pdev->dev, "Unable to reserve pci resources.\n");
613 		goto err_pci_disable;
614 	}
615 
616 	devlink = devlink_alloc(&nfp_devlink_ops, sizeof(*pf));
617 	if (!devlink) {
618 		err = -ENOMEM;
619 		goto err_rel_regions;
620 	}
621 	pf = devlink_priv(devlink);
622 	INIT_LIST_HEAD(&pf->vnics);
623 	INIT_LIST_HEAD(&pf->ports);
624 	mutex_init(&pf->lock);
625 	pci_set_drvdata(pdev, pf);
626 	pf->pdev = pdev;
627 
628 	pf->wq = alloc_workqueue("nfp-%s", 0, 2, pci_name(pdev));
629 	if (!pf->wq) {
630 		err = -ENOMEM;
631 		goto err_pci_priv_unset;
632 	}
633 
634 	pf->cpp = nfp_cpp_from_nfp6000_pcie(pdev);
635 	if (IS_ERR_OR_NULL(pf->cpp)) {
636 		err = PTR_ERR(pf->cpp);
637 		if (err >= 0)
638 			err = -ENOMEM;
639 		goto err_disable_msix;
640 	}
641 
642 	err = nfp_resource_table_init(pf->cpp);
643 	if (err)
644 		goto err_cpp_free;
645 
646 	pf->hwinfo = nfp_hwinfo_read(pf->cpp);
647 
648 	dev_info(&pdev->dev, "Assembly: %s%s%s-%s CPLD: %s\n",
649 		 nfp_hwinfo_lookup(pf->hwinfo, "assembly.vendor"),
650 		 nfp_hwinfo_lookup(pf->hwinfo, "assembly.partno"),
651 		 nfp_hwinfo_lookup(pf->hwinfo, "assembly.serial"),
652 		 nfp_hwinfo_lookup(pf->hwinfo, "assembly.revision"),
653 		 nfp_hwinfo_lookup(pf->hwinfo, "cpld.version"));
654 
655 	err = nfp_pf_board_state_wait(pf);
656 	if (err)
657 		goto err_hwinfo_free;
658 
659 	err = nfp_nsp_init(pdev, pf);
660 	if (err)
661 		goto err_hwinfo_free;
662 
663 	pf->mip = nfp_mip_open(pf->cpp);
664 	pf->rtbl = __nfp_rtsym_table_read(pf->cpp, pf->mip);
665 
666 	err = nfp_pf_find_rtsyms(pf);
667 	if (err)
668 		goto err_fw_unload;
669 
670 	pf->dump_flag = NFP_DUMP_NSP_DIAG;
671 	pf->dumpspec = nfp_net_dump_load_dumpspec(pf->cpp, pf->rtbl);
672 
673 	err = nfp_pcie_sriov_read_nfd_limit(pf);
674 	if (err)
675 		goto err_fw_unload;
676 
677 	pf->num_vfs = pci_num_vf(pdev);
678 	if (pf->num_vfs > pf->limit_vfs) {
679 		dev_err(&pdev->dev,
680 			"Error: %d VFs already enabled, but loaded FW can only support %d\n",
681 			pf->num_vfs, pf->limit_vfs);
682 		err = -EINVAL;
683 		goto err_fw_unload;
684 	}
685 
686 	err = nfp_net_pci_probe(pf);
687 	if (err)
688 		goto err_fw_unload;
689 
690 	err = nfp_hwmon_register(pf);
691 	if (err) {
692 		dev_err(&pdev->dev, "Failed to register hwmon info\n");
693 		goto err_net_remove;
694 	}
695 
696 	return 0;
697 
698 err_net_remove:
699 	nfp_net_pci_remove(pf);
700 err_fw_unload:
701 	kfree(pf->rtbl);
702 	nfp_mip_close(pf->mip);
703 	if (pf->fw_loaded)
704 		nfp_fw_unload(pf);
705 	kfree(pf->eth_tbl);
706 	kfree(pf->nspi);
707 	vfree(pf->dumpspec);
708 err_hwinfo_free:
709 	kfree(pf->hwinfo);
710 err_cpp_free:
711 	nfp_cpp_free(pf->cpp);
712 err_disable_msix:
713 	destroy_workqueue(pf->wq);
714 err_pci_priv_unset:
715 	pci_set_drvdata(pdev, NULL);
716 	mutex_destroy(&pf->lock);
717 	devlink_free(devlink);
718 err_rel_regions:
719 	pci_release_regions(pdev);
720 err_pci_disable:
721 	pci_disable_device(pdev);
722 
723 	return err;
724 }
725 
726 static void __nfp_pci_shutdown(struct pci_dev *pdev, bool unload_fw)
727 {
728 	struct nfp_pf *pf;
729 
730 	pf = pci_get_drvdata(pdev);
731 	if (!pf)
732 		return;
733 
734 	nfp_hwmon_unregister(pf);
735 
736 	nfp_pcie_sriov_disable(pdev);
737 
738 	nfp_net_pci_remove(pf);
739 
740 	vfree(pf->dumpspec);
741 	kfree(pf->rtbl);
742 	nfp_mip_close(pf->mip);
743 	if (unload_fw && pf->fw_loaded)
744 		nfp_fw_unload(pf);
745 
746 	destroy_workqueue(pf->wq);
747 	pci_set_drvdata(pdev, NULL);
748 	kfree(pf->hwinfo);
749 	nfp_cpp_free(pf->cpp);
750 
751 	kfree(pf->eth_tbl);
752 	kfree(pf->nspi);
753 	mutex_destroy(&pf->lock);
754 	devlink_free(priv_to_devlink(pf));
755 	pci_release_regions(pdev);
756 	pci_disable_device(pdev);
757 }
758 
759 static void nfp_pci_remove(struct pci_dev *pdev)
760 {
761 	__nfp_pci_shutdown(pdev, true);
762 }
763 
764 static void nfp_pci_shutdown(struct pci_dev *pdev)
765 {
766 	__nfp_pci_shutdown(pdev, false);
767 }
768 
769 static struct pci_driver nfp_pci_driver = {
770 	.name			= nfp_driver_name,
771 	.id_table		= nfp_pci_device_ids,
772 	.probe			= nfp_pci_probe,
773 	.remove			= nfp_pci_remove,
774 	.shutdown		= nfp_pci_shutdown,
775 	.sriov_configure	= nfp_pcie_sriov_configure,
776 };
777 
778 static int __init nfp_main_init(void)
779 {
780 	int err;
781 
782 	pr_info("%s: NFP PCIe Driver, Copyright (C) 2014-2017 Netronome Systems\n",
783 		nfp_driver_name);
784 
785 	nfp_net_debugfs_create();
786 
787 	err = pci_register_driver(&nfp_pci_driver);
788 	if (err < 0)
789 		goto err_destroy_debugfs;
790 
791 	err = pci_register_driver(&nfp_netvf_pci_driver);
792 	if (err)
793 		goto err_unreg_pf;
794 
795 	return err;
796 
797 err_unreg_pf:
798 	pci_unregister_driver(&nfp_pci_driver);
799 err_destroy_debugfs:
800 	nfp_net_debugfs_destroy();
801 	return err;
802 }
803 
804 static void __exit nfp_main_exit(void)
805 {
806 	pci_unregister_driver(&nfp_netvf_pci_driver);
807 	pci_unregister_driver(&nfp_pci_driver);
808 	nfp_net_debugfs_destroy();
809 }
810 
811 module_init(nfp_main_init);
812 module_exit(nfp_main_exit);
813 
814 MODULE_FIRMWARE("netronome/nic_AMDA0081-0001_1x40.nffw");
815 MODULE_FIRMWARE("netronome/nic_AMDA0081-0001_4x10.nffw");
816 MODULE_FIRMWARE("netronome/nic_AMDA0096-0001_2x10.nffw");
817 MODULE_FIRMWARE("netronome/nic_AMDA0097-0001_2x40.nffw");
818 MODULE_FIRMWARE("netronome/nic_AMDA0097-0001_4x10_1x40.nffw");
819 MODULE_FIRMWARE("netronome/nic_AMDA0097-0001_8x10.nffw");
820 MODULE_FIRMWARE("netronome/nic_AMDA0099-0001_2x10.nffw");
821 MODULE_FIRMWARE("netronome/nic_AMDA0099-0001_2x25.nffw");
822 MODULE_FIRMWARE("netronome/nic_AMDA0099-0001_1x10_1x25.nffw");
823 
824 MODULE_AUTHOR("Netronome Systems <oss-drivers@netronome.com>");
825 MODULE_LICENSE("GPL");
826 MODULE_DESCRIPTION("The Netronome Flow Processor (NFP) driver.");
827 MODULE_VERSION(UTS_RELEASE);
828