Lines Matching refs:pf

72 int nfp_pf_rtsym_read_optional(struct nfp_pf *pf, const char *format,
79 snprintf(name, sizeof(name), format, nfp_cppcore_pcie_unit(pf->cpp));
81 val = nfp_rtsym_read_le(pf->rtbl, name, &err);
85 nfp_err(pf->cpp, "Unable to read symbol %s\n", name);
93 nfp_pf_map_rtsym(struct nfp_pf *pf, const char *name, const char *sym_fmt,
99 nfp_cppcore_pcie_unit(pf->cpp));
101 return nfp_rtsym_map(pf->rtbl, pf_symbol, name, min_size, area);
105 int nfp_mbox_cmd(struct nfp_pf *pf, u32 cmd, void *in_data, u64 in_length,
113 if (!pf->mbox)
116 max_data_sz = nfp_rtsym_size(pf->mbox) - NFP_MBOX_SYM_MIN_SIZE;
119 err = nfp_rtsym_readl(pf->cpp, pf->mbox, NFP_MBOX_CMD, &val);
121 nfp_warn(pf->cpp, "failed to issue command (%u): %u, err: %d\n",
127 n = nfp_rtsym_write(pf->cpp, pf->mbox, NFP_MBOX_DATA, in_data,
132 err = nfp_rtsym_writeq(pf->cpp, pf->mbox, NFP_MBOX_DATA_LEN, in_length);
137 err = nfp_rtsym_readl(pf->cpp, pf->mbox, NFP_MBOX_DATA_LEN, &val);
142 err = nfp_rtsym_writeq(pf->cpp, pf->mbox, NFP_MBOX_CMD, cmd);
149 err = nfp_rtsym_readl(pf->cpp, pf->mbox, NFP_MBOX_CMD, &val);
162 err = nfp_rtsym_readl(pf->cpp, pf->mbox, NFP_MBOX_DATA_LEN, &val);
167 n = nfp_rtsym_read(pf->cpp, pf->mbox, NFP_MBOX_DATA,
173 err = nfp_rtsym_readl(pf->cpp, pf->mbox, NFP_MBOX_RET, &val);
182 static bool nfp_board_ready(struct nfp_pf *pf)
188 cp = nfp_hwinfo_lookup(pf->hwinfo, "board.state");
199 static int nfp_pf_board_state_wait(struct nfp_pf *pf)
203 while (!nfp_board_ready(pf)) {
205 nfp_err(pf->cpp, "NFP board initialization timeout\n");
209 nfp_info(pf->cpp, "waiting for board initialization\n");
214 kfree(pf->hwinfo);
215 pf->hwinfo = nfp_hwinfo_read(pf->cpp);
221 static int nfp_pcie_sriov_read_nfd_limit(struct nfp_pf *pf)
225 pf->limit_vfs = nfp_rtsym_read_le(pf->rtbl, "nfd_vf_cfg_max_vfs", &err);
228 pf->limit_vfs = ~0;
232 nfp_warn(pf->cpp, "Warning: VF limit read failed: %d\n", err);
236 err = pci_sriov_set_totalvfs(pf->pdev, pf->limit_vfs);
238 nfp_warn(pf->cpp, "Failed to set VF count in sysfs: %d\n", err);
245 struct nfp_pf *pf = pci_get_drvdata(pdev);
249 if (num_vfs > pf->limit_vfs) {
250 nfp_info(pf->cpp, "Firmware limits number of VFs to %u\n",
251 pf->limit_vfs);
261 devlink = priv_to_devlink(pf);
264 err = nfp_app_sriov_enable(pf->app, num_vfs);
272 pf->num_vfs = num_vfs;
274 dev_dbg(&pdev->dev, "Created %d VFs.\n", pf->num_vfs);
290 struct nfp_pf *pf = pci_get_drvdata(pdev);
293 devlink = priv_to_devlink(pf);
306 nfp_app_sriov_disable(pf->app);
308 pf->num_vfs = 0;
329 int nfp_flash_update_common(struct nfp_pf *pf, const struct firmware *fw,
332 struct device *dev = &pf->pdev->dev;
336 nsp = nfp_nsp_open(pf->cpp);
358 nfp_net_fw_request(struct pci_dev *pdev, struct nfp_pf *pf, const char *name)
364 nfp_info(pf->cpp, " %s: %s\n",
375 * @pf: NFP PF Device structure
380 nfp_net_fw_find(struct pci_dev *pdev, struct nfp_pf *pf)
390 nfp_info(pf->cpp, "Looking for firmware file in order of priority:\n");
393 interface = nfp_cpp_interface(pf->cpp);
394 nfp_cpp_serial(pf->cpp, &serial);
397 fw = nfp_net_fw_request(pdev, pf, fw_name);
403 fw = nfp_net_fw_request(pdev, pf, fw_name);
408 if (!pf->eth_tbl) {
413 fw_model = nfp_hwinfo_lookup(pf->hwinfo, "nffw.partno");
415 fw_model = nfp_hwinfo_lookup(pf->hwinfo, "assembly.partno");
424 for (i = 0; spc > 0 && i < pf->eth_tbl->count; i += j) {
425 port = &pf->eth_tbl->ports[i];
427 while (i + j < pf->eth_tbl->count &&
442 return nfp_net_fw_request(pdev, pf, fw_name);
475 * @pf: NFP PF Device structure
481 nfp_fw_load(struct pci_dev *pdev, struct nfp_pf *pf, struct nfp_nsp *nsp)
496 interface = nfp_cpp_interface(pf->cpp);
531 fw = nfp_net_fw_find(pdev, pf);
581 pf->unload_fw_on_remove = true;
587 nfp_nsp_init_ports(struct pci_dev *pdev, struct nfp_pf *pf,
593 pf->eth_tbl = __nfp_eth_read_ports(pf->cpp, nsp);
594 if (!pf->eth_tbl)
600 for (i = 0; i < pf->eth_tbl->count; i++)
601 needs_reinit |= pf->eth_tbl->ports[i].override_changed;
605 kfree(pf->eth_tbl);
609 pf->eth_tbl = __nfp_eth_read_ports(pf->cpp, nsp);
612 static int nfp_nsp_init(struct pci_dev *pdev, struct nfp_pf *pf)
617 err = nfp_resource_wait(pf->cpp, NFP_RESOURCE_NSP, 30);
621 nsp = nfp_nsp_open(pf->cpp);
632 nfp_nsp_init_ports(pdev, pf, nsp);
634 pf->nspi = __nfp_nsp_identify(nsp);
635 if (pf->nspi)
636 dev_info(&pdev->dev, "BSP: %s\n", pf->nspi->version);
638 err = nfp_fw_load(pdev, pf, nsp);
640 kfree(pf->nspi);
641 kfree(pf->eth_tbl);
646 pf->fw_loaded = !!err;
655 static void nfp_fw_unload(struct nfp_pf *pf)
660 nsp = nfp_nsp_open(pf->cpp);
662 nfp_err(pf->cpp, "Reset failed, can't open NSP\n");
668 dev_warn(&pf->pdev->dev, "Couldn't unload firmware: %d\n", err);
670 dev_info(&pf->pdev->dev, "Firmware safely unloaded\n");
675 static int nfp_pf_find_rtsyms(struct nfp_pf *pf)
680 pf_id = nfp_cppcore_pcie_unit(pf->cpp);
684 pf->mbox = nfp_rtsym_lookup(pf->rtbl, pf_symbol);
685 if (pf->mbox && nfp_rtsym_size(pf->mbox) < NFP_MBOX_SYM_MIN_SIZE) {
686 nfp_err(pf->cpp, "PF mailbox symbol too small: %llu < %d\n",
687 nfp_rtsym_size(pf->mbox), NFP_MBOX_SYM_MIN_SIZE);
694 int nfp_net_pf_get_app_id(struct nfp_pf *pf)
696 return nfp_pf_rtsym_read_optional(pf, "_pf%u_net_app_id",
700 static u64 nfp_net_pf_get_app_cap(struct nfp_pf *pf)
706 snprintf(name, sizeof(name), "_pf%u_net_app_cap", nfp_cppcore_pcie_unit(pf->cpp));
708 val = nfp_rtsym_read_le(pf->rtbl, name, &err);
711 nfp_err(pf->cpp, "Unable to read symbol %s\n", name);
719 static void nfp_pf_cfg_hwinfo(struct nfp_pf *pf)
726 nsp = nfp_nsp_open(pf->cpp);
733 sp_indiff = (nfp_net_pf_get_app_id(pf) == NFP_APP_FLOWER_NIC) ||
734 (nfp_net_pf_get_app_cap(pf) & NFP_NET_APP_CAP_SP_INDIFF);
743 nfp_warn(pf->cpp, "HWinfo(sp_indiff=%d) set failed: %d\n", sp_indiff, err);
748 kfree(pf->eth_tbl);
749 pf->eth_tbl = __nfp_eth_read_ports(pf->cpp, nsp);
761 struct nfp_pf *pf;
788 devlink = devlink_alloc(&nfp_devlink_ops, sizeof(*pf), &pdev->dev);
793 pf = devlink_priv(devlink);
794 INIT_LIST_HEAD(&pf->vnics);
795 INIT_LIST_HEAD(&pf->ports);
796 pci_set_drvdata(pdev, pf);
797 pf->pdev = pdev;
798 pf->dev_info = dev_info;
800 pf->wq = alloc_workqueue("nfp-%s", 0, 2, pci_name(pdev));
801 if (!pf->wq) {
806 pf->cpp = nfp_cpp_from_nfp6000_pcie(pdev, dev_info);
807 if (IS_ERR(pf->cpp)) {
808 err = PTR_ERR(pf->cpp);
812 err = nfp_resource_table_init(pf->cpp);
816 pf->hwinfo = nfp_hwinfo_read(pf->cpp);
819 nfp_hwinfo_lookup(pf->hwinfo, "assembly.vendor"),
820 nfp_hwinfo_lookup(pf->hwinfo, "assembly.partno"),
821 nfp_hwinfo_lookup(pf->hwinfo, "assembly.serial"),
822 nfp_hwinfo_lookup(pf->hwinfo, "assembly.revision"),
823 nfp_hwinfo_lookup(pf->hwinfo, "cpld.version"));
825 err = nfp_pf_board_state_wait(pf);
829 err = nfp_nsp_init(pdev, pf);
833 pf->mip = nfp_mip_open(pf->cpp);
834 pf->rtbl = __nfp_rtsym_table_read(pf->cpp, pf->mip);
836 err = nfp_pf_find_rtsyms(pf);
840 pf->dump_flag = NFP_DUMP_NSP_DIAG;
841 pf->dumpspec = nfp_net_dump_load_dumpspec(pf->cpp, pf->rtbl);
843 err = nfp_pcie_sriov_read_nfd_limit(pf);
847 pf->num_vfs = pci_num_vf(pdev);
848 if (pf->num_vfs > pf->limit_vfs) {
851 pf->num_vfs, pf->limit_vfs);
856 nfp_pf_cfg_hwinfo(pf);
858 err = nfp_net_pci_probe(pf);
862 err = nfp_hwmon_register(pf);
871 nfp_net_pci_remove(pf);
873 kfree(pf->rtbl);
874 nfp_mip_close(pf->mip);
875 if (pf->unload_fw_on_remove)
876 nfp_fw_unload(pf);
877 kfree(pf->eth_tbl);
878 kfree(pf->nspi);
879 vfree(pf->dumpspec);
881 kfree(pf->hwinfo);
883 nfp_cpp_free(pf->cpp);
885 destroy_workqueue(pf->wq);
899 struct nfp_pf *pf;
901 pf = pci_get_drvdata(pdev);
902 if (!pf)
905 nfp_hwmon_unregister(pf);
909 nfp_net_pci_remove(pf);
911 vfree(pf->dumpspec);
912 kfree(pf->rtbl);
913 nfp_mip_close(pf->mip);
914 if (unload_fw && pf->unload_fw_on_remove)
915 nfp_fw_unload(pf);
917 destroy_workqueue(pf->wq);
919 kfree(pf->hwinfo);
920 nfp_cpp_free(pf->cpp);
922 kfree(pf->eth_tbl);
923 kfree(pf->nspi);
924 devlink_free(priv_to_devlink(pf));