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 
nfp_pf_rtsym_read_optional(struct nfp_pf * pf,const char * format,unsigned int default_val)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 *
nfp_pf_map_rtsym(struct nfp_pf * pf,const char * name,const char * sym_fmt,unsigned int min_size,struct nfp_cpp_area ** area)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 */
nfp_mbox_cmd(struct nfp_pf * pf,u32 cmd,void * in_data,u64 in_length,void * out_data,u64 out_length)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 
nfp_board_ready(struct nfp_pf * pf)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 
nfp_pf_board_state_wait(struct nfp_pf * pf)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 
nfp_pcie_sriov_read_nfd_limit(struct nfp_pf * pf)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 
nfp_pcie_sriov_enable(struct pci_dev * pdev,int num_vfs)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 
nfp_pcie_sriov_disable(struct pci_dev * pdev)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 
nfp_pcie_sriov_configure(struct pci_dev * pdev,int num_vfs)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 
nfp_flash_update_common(struct nfp_pf * pf,const char * path,struct netlink_ext_ack * extack)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 *
nfp_net_fw_request(struct pci_dev * pdev,struct nfp_pf * pf,const char * name)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");
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 *
nfp_net_fw_find(struct pci_dev * pdev,struct nfp_pf * pf)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 static int
nfp_get_fw_policy_value(struct pci_dev * pdev,struct nfp_nsp * nsp,const char * key,const char * default_val,int max_val,int * value)434 nfp_get_fw_policy_value(struct pci_dev *pdev, struct nfp_nsp *nsp,
435 			const char *key, const char *default_val, int max_val,
436 			int *value)
437 {
438 	char hwinfo[64];
439 	long hi_val;
440 	int err;
441 
442 	snprintf(hwinfo, sizeof(hwinfo), key);
443 	err = nfp_nsp_hwinfo_lookup_optional(nsp, hwinfo, sizeof(hwinfo),
444 					     default_val);
445 	if (err)
446 		return err;
447 
448 	err = kstrtol(hwinfo, 0, &hi_val);
449 	if (err || hi_val < 0 || hi_val > max_val) {
450 		dev_warn(&pdev->dev,
451 			 "Invalid value '%s' from '%s', ignoring\n",
452 			 hwinfo, key);
453 		err = kstrtol(default_val, 0, &hi_val);
454 	}
455 
456 	*value = hi_val;
457 	return err;
458 }
459 
460 /**
461  * nfp_fw_load() - Load the firmware image
462  * @pdev:       PCI Device structure
463  * @pf:		NFP PF Device structure
464  * @nsp:	NFP SP handle
465  *
466  * Return: -ERRNO, 0 for no firmware loaded, 1 for firmware loaded
467  */
468 static int
nfp_fw_load(struct pci_dev * pdev,struct nfp_pf * pf,struct nfp_nsp * nsp)469 nfp_fw_load(struct pci_dev *pdev, struct nfp_pf *pf, struct nfp_nsp *nsp)
470 {
471 	bool do_reset, fw_loaded = false;
472 	const struct firmware *fw = NULL;
473 	int err, reset, policy, ifcs = 0;
474 	char *token, *ptr;
475 	char hwinfo[64];
476 	u16 interface;
477 
478 	snprintf(hwinfo, sizeof(hwinfo), "abi_drv_load_ifc");
479 	err = nfp_nsp_hwinfo_lookup_optional(nsp, hwinfo, sizeof(hwinfo),
480 					     NFP_NSP_DRV_LOAD_IFC_DEFAULT);
481 	if (err)
482 		return err;
483 
484 	interface = nfp_cpp_interface(pf->cpp);
485 	ptr = hwinfo;
486 	while ((token = strsep(&ptr, ","))) {
487 		unsigned long interface_hi;
488 
489 		err = kstrtoul(token, 0, &interface_hi);
490 		if (err) {
491 			dev_err(&pdev->dev,
492 				"Failed to parse interface '%s': %d\n",
493 				token, err);
494 			return err;
495 		}
496 
497 		ifcs++;
498 		if (interface == interface_hi)
499 			break;
500 	}
501 
502 	if (!token) {
503 		dev_info(&pdev->dev, "Firmware will be loaded by partner\n");
504 		return 0;
505 	}
506 
507 	err = nfp_get_fw_policy_value(pdev, nsp, "abi_drv_reset",
508 				      NFP_NSP_DRV_RESET_DEFAULT,
509 				      NFP_NSP_DRV_RESET_NEVER, &reset);
510 	if (err)
511 		return err;
512 
513 	err = nfp_get_fw_policy_value(pdev, nsp, "app_fw_from_flash",
514 				      NFP_NSP_APP_FW_LOAD_DEFAULT,
515 				      NFP_NSP_APP_FW_LOAD_PREF, &policy);
516 	if (err)
517 		return err;
518 
519 	fw = nfp_net_fw_find(pdev, pf);
520 	do_reset = reset == NFP_NSP_DRV_RESET_ALWAYS ||
521 		   (fw && reset == NFP_NSP_DRV_RESET_DISK);
522 
523 	if (do_reset) {
524 		dev_info(&pdev->dev, "Soft-resetting the NFP\n");
525 		err = nfp_nsp_device_soft_reset(nsp);
526 		if (err < 0) {
527 			dev_err(&pdev->dev,
528 				"Failed to soft reset the NFP: %d\n", err);
529 			goto exit_release_fw;
530 		}
531 	}
532 
533 	if (fw && policy != NFP_NSP_APP_FW_LOAD_FLASH) {
534 		if (nfp_nsp_has_fw_loaded(nsp) && nfp_nsp_fw_loaded(nsp))
535 			goto exit_release_fw;
536 
537 		err = nfp_nsp_load_fw(nsp, fw);
538 		if (err < 0) {
539 			dev_err(&pdev->dev, "FW loading failed: %d\n",
540 				err);
541 			goto exit_release_fw;
542 		}
543 		dev_info(&pdev->dev, "Finished loading FW image\n");
544 		fw_loaded = true;
545 	} else if (policy != NFP_NSP_APP_FW_LOAD_DISK &&
546 		   nfp_nsp_has_stored_fw_load(nsp)) {
547 
548 		/* Don't propagate this error to stick with legacy driver
549 		 * behavior, failure will be detected later during init.
550 		 */
551 		if (!nfp_nsp_load_stored_fw(nsp))
552 			dev_info(&pdev->dev, "Finished loading stored FW image\n");
553 
554 		/* Don't flag the fw_loaded in this case since other devices
555 		 * may reuse the firmware when configured this way
556 		 */
557 	} else {
558 		dev_warn(&pdev->dev, "Didn't load firmware, please update flash or reconfigure card\n");
559 	}
560 
561 exit_release_fw:
562 	release_firmware(fw);
563 
564 	/* We don't want to unload firmware when other devices may still be
565 	 * dependent on it, which could be the case if there are multiple
566 	 * devices that could load firmware.
567 	 */
568 	if (fw_loaded && ifcs == 1)
569 		pf->unload_fw_on_remove = true;
570 
571 	return err < 0 ? err : fw_loaded;
572 }
573 
574 static void
nfp_nsp_init_ports(struct pci_dev * pdev,struct nfp_pf * pf,struct nfp_nsp * nsp)575 nfp_nsp_init_ports(struct pci_dev *pdev, struct nfp_pf *pf,
576 		   struct nfp_nsp *nsp)
577 {
578 	bool needs_reinit = false;
579 	int i;
580 
581 	pf->eth_tbl = __nfp_eth_read_ports(pf->cpp, nsp);
582 	if (!pf->eth_tbl)
583 		return;
584 
585 	if (!nfp_nsp_has_mac_reinit(nsp))
586 		return;
587 
588 	for (i = 0; i < pf->eth_tbl->count; i++)
589 		needs_reinit |= pf->eth_tbl->ports[i].override_changed;
590 	if (!needs_reinit)
591 		return;
592 
593 	kfree(pf->eth_tbl);
594 	if (nfp_nsp_mac_reinit(nsp))
595 		dev_warn(&pdev->dev, "MAC reinit failed\n");
596 
597 	pf->eth_tbl = __nfp_eth_read_ports(pf->cpp, nsp);
598 }
599 
nfp_nsp_init(struct pci_dev * pdev,struct nfp_pf * pf)600 static int nfp_nsp_init(struct pci_dev *pdev, struct nfp_pf *pf)
601 {
602 	struct nfp_nsp *nsp;
603 	int err;
604 
605 	err = nfp_resource_wait(pf->cpp, NFP_RESOURCE_NSP, 30);
606 	if (err)
607 		return err;
608 
609 	nsp = nfp_nsp_open(pf->cpp);
610 	if (IS_ERR(nsp)) {
611 		err = PTR_ERR(nsp);
612 		dev_err(&pdev->dev, "Failed to access the NSP: %d\n", err);
613 		return err;
614 	}
615 
616 	err = nfp_nsp_wait(nsp);
617 	if (err < 0)
618 		goto exit_close_nsp;
619 
620 	nfp_nsp_init_ports(pdev, pf, nsp);
621 
622 	pf->nspi = __nfp_nsp_identify(nsp);
623 	if (pf->nspi)
624 		dev_info(&pdev->dev, "BSP: %s\n", pf->nspi->version);
625 
626 	err = nfp_fw_load(pdev, pf, nsp);
627 	if (err < 0) {
628 		kfree(pf->nspi);
629 		kfree(pf->eth_tbl);
630 		dev_err(&pdev->dev, "Failed to load FW\n");
631 		goto exit_close_nsp;
632 	}
633 
634 	pf->fw_loaded = !!err;
635 	err = 0;
636 
637 exit_close_nsp:
638 	nfp_nsp_close(nsp);
639 
640 	return err;
641 }
642 
nfp_fw_unload(struct nfp_pf * pf)643 static void nfp_fw_unload(struct nfp_pf *pf)
644 {
645 	struct nfp_nsp *nsp;
646 	int err;
647 
648 	nsp = nfp_nsp_open(pf->cpp);
649 	if (IS_ERR(nsp)) {
650 		nfp_err(pf->cpp, "Reset failed, can't open NSP\n");
651 		return;
652 	}
653 
654 	err = nfp_nsp_device_soft_reset(nsp);
655 	if (err < 0)
656 		dev_warn(&pf->pdev->dev, "Couldn't unload firmware: %d\n", err);
657 	else
658 		dev_info(&pf->pdev->dev, "Firmware safely unloaded\n");
659 
660 	nfp_nsp_close(nsp);
661 }
662 
nfp_pf_find_rtsyms(struct nfp_pf * pf)663 static int nfp_pf_find_rtsyms(struct nfp_pf *pf)
664 {
665 	char pf_symbol[256];
666 	unsigned int pf_id;
667 
668 	pf_id = nfp_cppcore_pcie_unit(pf->cpp);
669 
670 	/* Optional per-PCI PF mailbox */
671 	snprintf(pf_symbol, sizeof(pf_symbol), NFP_MBOX_SYM_NAME, pf_id);
672 	pf->mbox = nfp_rtsym_lookup(pf->rtbl, pf_symbol);
673 	if (pf->mbox && nfp_rtsym_size(pf->mbox) < NFP_MBOX_SYM_MIN_SIZE) {
674 		nfp_err(pf->cpp, "PF mailbox symbol too small: %llu < %d\n",
675 			nfp_rtsym_size(pf->mbox), NFP_MBOX_SYM_MIN_SIZE);
676 		return -EINVAL;
677 	}
678 
679 	return 0;
680 }
681 
nfp_pci_probe(struct pci_dev * pdev,const struct pci_device_id * pci_id)682 static int nfp_pci_probe(struct pci_dev *pdev,
683 			 const struct pci_device_id *pci_id)
684 {
685 	struct devlink *devlink;
686 	struct nfp_pf *pf;
687 	int err;
688 
689 	if (pdev->vendor == PCI_VENDOR_ID_NETRONOME &&
690 	    pdev->device == PCI_DEVICE_ID_NETRONOME_NFP6000_VF)
691 		dev_warn(&pdev->dev, "Binding NFP VF device to the NFP PF driver, the VF driver is called 'nfp_netvf'\n");
692 
693 	err = pci_enable_device(pdev);
694 	if (err < 0)
695 		return err;
696 
697 	pci_set_master(pdev);
698 
699 	err = dma_set_mask_and_coherent(&pdev->dev,
700 					DMA_BIT_MASK(NFP_NET_MAX_DMA_BITS));
701 	if (err)
702 		goto err_pci_disable;
703 
704 	err = pci_request_regions(pdev, nfp_driver_name);
705 	if (err < 0) {
706 		dev_err(&pdev->dev, "Unable to reserve pci resources.\n");
707 		goto err_pci_disable;
708 	}
709 
710 	devlink = devlink_alloc(&nfp_devlink_ops, sizeof(*pf));
711 	if (!devlink) {
712 		err = -ENOMEM;
713 		goto err_rel_regions;
714 	}
715 	pf = devlink_priv(devlink);
716 	INIT_LIST_HEAD(&pf->vnics);
717 	INIT_LIST_HEAD(&pf->ports);
718 	mutex_init(&pf->lock);
719 	pci_set_drvdata(pdev, pf);
720 	pf->pdev = pdev;
721 
722 	pf->wq = alloc_workqueue("nfp-%s", 0, 2, pci_name(pdev));
723 	if (!pf->wq) {
724 		err = -ENOMEM;
725 		goto err_pci_priv_unset;
726 	}
727 
728 	pf->cpp = nfp_cpp_from_nfp6000_pcie(pdev);
729 	if (IS_ERR_OR_NULL(pf->cpp)) {
730 		err = PTR_ERR(pf->cpp);
731 		if (err >= 0)
732 			err = -ENOMEM;
733 		goto err_disable_msix;
734 	}
735 
736 	err = nfp_resource_table_init(pf->cpp);
737 	if (err)
738 		goto err_cpp_free;
739 
740 	pf->hwinfo = nfp_hwinfo_read(pf->cpp);
741 
742 	dev_info(&pdev->dev, "Assembly: %s%s%s-%s CPLD: %s\n",
743 		 nfp_hwinfo_lookup(pf->hwinfo, "assembly.vendor"),
744 		 nfp_hwinfo_lookup(pf->hwinfo, "assembly.partno"),
745 		 nfp_hwinfo_lookup(pf->hwinfo, "assembly.serial"),
746 		 nfp_hwinfo_lookup(pf->hwinfo, "assembly.revision"),
747 		 nfp_hwinfo_lookup(pf->hwinfo, "cpld.version"));
748 
749 	err = nfp_pf_board_state_wait(pf);
750 	if (err)
751 		goto err_hwinfo_free;
752 
753 	err = nfp_nsp_init(pdev, pf);
754 	if (err)
755 		goto err_hwinfo_free;
756 
757 	pf->mip = nfp_mip_open(pf->cpp);
758 	pf->rtbl = __nfp_rtsym_table_read(pf->cpp, pf->mip);
759 
760 	err = nfp_pf_find_rtsyms(pf);
761 	if (err)
762 		goto err_fw_unload;
763 
764 	pf->dump_flag = NFP_DUMP_NSP_DIAG;
765 	pf->dumpspec = nfp_net_dump_load_dumpspec(pf->cpp, pf->rtbl);
766 
767 	err = nfp_pcie_sriov_read_nfd_limit(pf);
768 	if (err)
769 		goto err_fw_unload;
770 
771 	pf->num_vfs = pci_num_vf(pdev);
772 	if (pf->num_vfs > pf->limit_vfs) {
773 		dev_err(&pdev->dev,
774 			"Error: %d VFs already enabled, but loaded FW can only support %d\n",
775 			pf->num_vfs, pf->limit_vfs);
776 		err = -EINVAL;
777 		goto err_fw_unload;
778 	}
779 
780 	err = nfp_net_pci_probe(pf);
781 	if (err)
782 		goto err_fw_unload;
783 
784 	err = nfp_hwmon_register(pf);
785 	if (err) {
786 		dev_err(&pdev->dev, "Failed to register hwmon info\n");
787 		goto err_net_remove;
788 	}
789 
790 	return 0;
791 
792 err_net_remove:
793 	nfp_net_pci_remove(pf);
794 err_fw_unload:
795 	kfree(pf->rtbl);
796 	nfp_mip_close(pf->mip);
797 	if (pf->unload_fw_on_remove)
798 		nfp_fw_unload(pf);
799 	kfree(pf->eth_tbl);
800 	kfree(pf->nspi);
801 	vfree(pf->dumpspec);
802 err_hwinfo_free:
803 	kfree(pf->hwinfo);
804 err_cpp_free:
805 	nfp_cpp_free(pf->cpp);
806 err_disable_msix:
807 	destroy_workqueue(pf->wq);
808 err_pci_priv_unset:
809 	pci_set_drvdata(pdev, NULL);
810 	mutex_destroy(&pf->lock);
811 	devlink_free(devlink);
812 err_rel_regions:
813 	pci_release_regions(pdev);
814 err_pci_disable:
815 	pci_disable_device(pdev);
816 
817 	return err;
818 }
819 
__nfp_pci_shutdown(struct pci_dev * pdev,bool unload_fw)820 static void __nfp_pci_shutdown(struct pci_dev *pdev, bool unload_fw)
821 {
822 	struct nfp_pf *pf;
823 
824 	pf = pci_get_drvdata(pdev);
825 	if (!pf)
826 		return;
827 
828 	nfp_hwmon_unregister(pf);
829 
830 	nfp_pcie_sriov_disable(pdev);
831 
832 	nfp_net_pci_remove(pf);
833 
834 	vfree(pf->dumpspec);
835 	kfree(pf->rtbl);
836 	nfp_mip_close(pf->mip);
837 	if (unload_fw && pf->unload_fw_on_remove)
838 		nfp_fw_unload(pf);
839 
840 	destroy_workqueue(pf->wq);
841 	pci_set_drvdata(pdev, NULL);
842 	kfree(pf->hwinfo);
843 	nfp_cpp_free(pf->cpp);
844 
845 	kfree(pf->eth_tbl);
846 	kfree(pf->nspi);
847 	mutex_destroy(&pf->lock);
848 	devlink_free(priv_to_devlink(pf));
849 	pci_release_regions(pdev);
850 	pci_disable_device(pdev);
851 }
852 
nfp_pci_remove(struct pci_dev * pdev)853 static void nfp_pci_remove(struct pci_dev *pdev)
854 {
855 	__nfp_pci_shutdown(pdev, true);
856 }
857 
nfp_pci_shutdown(struct pci_dev * pdev)858 static void nfp_pci_shutdown(struct pci_dev *pdev)
859 {
860 	__nfp_pci_shutdown(pdev, false);
861 }
862 
863 static struct pci_driver nfp_pci_driver = {
864 	.name			= nfp_driver_name,
865 	.id_table		= nfp_pci_device_ids,
866 	.probe			= nfp_pci_probe,
867 	.remove			= nfp_pci_remove,
868 	.shutdown		= nfp_pci_shutdown,
869 	.sriov_configure	= nfp_pcie_sriov_configure,
870 };
871 
nfp_main_init(void)872 static int __init nfp_main_init(void)
873 {
874 	int err;
875 
876 	pr_info("%s: NFP PCIe Driver, Copyright (C) 2014-2017 Netronome Systems\n",
877 		nfp_driver_name);
878 
879 	nfp_net_debugfs_create();
880 
881 	err = pci_register_driver(&nfp_pci_driver);
882 	if (err < 0)
883 		goto err_destroy_debugfs;
884 
885 	err = pci_register_driver(&nfp_netvf_pci_driver);
886 	if (err)
887 		goto err_unreg_pf;
888 
889 	return err;
890 
891 err_unreg_pf:
892 	pci_unregister_driver(&nfp_pci_driver);
893 err_destroy_debugfs:
894 	nfp_net_debugfs_destroy();
895 	return err;
896 }
897 
nfp_main_exit(void)898 static void __exit nfp_main_exit(void)
899 {
900 	pci_unregister_driver(&nfp_netvf_pci_driver);
901 	pci_unregister_driver(&nfp_pci_driver);
902 	nfp_net_debugfs_destroy();
903 }
904 
905 module_init(nfp_main_init);
906 module_exit(nfp_main_exit);
907 
908 MODULE_FIRMWARE("netronome/nic_AMDA0058-0011_2x40.nffw");
909 MODULE_FIRMWARE("netronome/nic_AMDA0058-0012_2x40.nffw");
910 MODULE_FIRMWARE("netronome/nic_AMDA0081-0001_1x40.nffw");
911 MODULE_FIRMWARE("netronome/nic_AMDA0081-0001_4x10.nffw");
912 MODULE_FIRMWARE("netronome/nic_AMDA0096-0001_2x10.nffw");
913 MODULE_FIRMWARE("netronome/nic_AMDA0097-0001_2x40.nffw");
914 MODULE_FIRMWARE("netronome/nic_AMDA0097-0001_4x10_1x40.nffw");
915 MODULE_FIRMWARE("netronome/nic_AMDA0097-0001_8x10.nffw");
916 MODULE_FIRMWARE("netronome/nic_AMDA0099-0001_2x10.nffw");
917 MODULE_FIRMWARE("netronome/nic_AMDA0099-0001_2x25.nffw");
918 MODULE_FIRMWARE("netronome/nic_AMDA0099-0001_1x10_1x25.nffw");
919 
920 MODULE_AUTHOR("Netronome Systems <oss-drivers@netronome.com>");
921 MODULE_LICENSE("GPL");
922 MODULE_DESCRIPTION("The Netronome Flow Processor (NFP) driver.");
923 MODULE_VERSION(UTS_RELEASE);
924