forked from Minki/linux
nfp: refactor NSP initialization and add error message
When acquiring NSP communication resource fails user is left with "probe failed with error -2" PCI code message but no info on what caused the problem. Some development boards may not have NSP FW in the flash image. Help users with a more verbouse message. While at it move the whole NSP init to a separate function to keep .probe() callback nice and simple. Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
c1ceee5efe
commit
a9c83f7bc7
@ -228,6 +228,40 @@ exit_release_fw:
|
|||||||
return err < 0 ? err : 1;
|
return err < 0 ? err : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int nfp_nsp_init(struct pci_dev *pdev, struct nfp_pf *pf)
|
||||||
|
{
|
||||||
|
struct nfp_nsp *nsp;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
nsp = nfp_nsp_open(pf->cpp);
|
||||||
|
if (IS_ERR(nsp)) {
|
||||||
|
err = PTR_ERR(nsp);
|
||||||
|
dev_err(&pdev->dev, "Failed to access the NSP: %d\n", err);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
err = nfp_nsp_wait(nsp);
|
||||||
|
if (err < 0)
|
||||||
|
goto exit_close_nsp;
|
||||||
|
|
||||||
|
pf->eth_tbl = __nfp_eth_read_ports(pf->cpp, nsp);
|
||||||
|
|
||||||
|
err = nfp_fw_load(pdev, pf, nsp);
|
||||||
|
if (err < 0) {
|
||||||
|
kfree(pf->eth_tbl);
|
||||||
|
dev_err(&pdev->dev, "Failed to load FW\n");
|
||||||
|
goto exit_close_nsp;
|
||||||
|
}
|
||||||
|
|
||||||
|
pf->fw_loaded = !!err;
|
||||||
|
err = 0;
|
||||||
|
|
||||||
|
exit_close_nsp:
|
||||||
|
nfp_nsp_close(nsp);
|
||||||
|
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
static void nfp_fw_unload(struct nfp_pf *pf)
|
static void nfp_fw_unload(struct nfp_pf *pf)
|
||||||
{
|
{
|
||||||
struct nfp_nsp *nsp;
|
struct nfp_nsp *nsp;
|
||||||
@ -251,7 +285,6 @@ static void nfp_fw_unload(struct nfp_pf *pf)
|
|||||||
static int nfp_pci_probe(struct pci_dev *pdev,
|
static int nfp_pci_probe(struct pci_dev *pdev,
|
||||||
const struct pci_device_id *pci_id)
|
const struct pci_device_id *pci_id)
|
||||||
{
|
{
|
||||||
struct nfp_nsp *nsp;
|
|
||||||
struct nfp_pf *pf;
|
struct nfp_pf *pf;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
@ -289,28 +322,9 @@ static int nfp_pci_probe(struct pci_dev *pdev,
|
|||||||
goto err_disable_msix;
|
goto err_disable_msix;
|
||||||
}
|
}
|
||||||
|
|
||||||
nsp = nfp_nsp_open(pf->cpp);
|
err = nfp_nsp_init(pdev, pf);
|
||||||
if (IS_ERR(nsp)) {
|
if (err)
|
||||||
err = PTR_ERR(nsp);
|
|
||||||
goto err_cpp_free;
|
goto err_cpp_free;
|
||||||
}
|
|
||||||
|
|
||||||
err = nfp_nsp_wait(nsp);
|
|
||||||
if (err < 0) {
|
|
||||||
nfp_nsp_close(nsp);
|
|
||||||
goto err_cpp_free;
|
|
||||||
}
|
|
||||||
|
|
||||||
pf->eth_tbl = __nfp_eth_read_ports(pf->cpp, nsp);
|
|
||||||
|
|
||||||
err = nfp_fw_load(pdev, pf, nsp);
|
|
||||||
nfp_nsp_close(nsp);
|
|
||||||
if (err < 0) {
|
|
||||||
dev_err(&pdev->dev, "Failed to load FW\n");
|
|
||||||
goto err_eth_tbl_free;
|
|
||||||
}
|
|
||||||
|
|
||||||
pf->fw_loaded = !!err;
|
|
||||||
|
|
||||||
err = nfp_net_pci_probe(pf);
|
err = nfp_net_pci_probe(pf);
|
||||||
if (err)
|
if (err)
|
||||||
@ -321,7 +335,6 @@ static int nfp_pci_probe(struct pci_dev *pdev,
|
|||||||
err_fw_unload:
|
err_fw_unload:
|
||||||
if (pf->fw_loaded)
|
if (pf->fw_loaded)
|
||||||
nfp_fw_unload(pf);
|
nfp_fw_unload(pf);
|
||||||
err_eth_tbl_free:
|
|
||||||
kfree(pf->eth_tbl);
|
kfree(pf->eth_tbl);
|
||||||
err_cpp_free:
|
err_cpp_free:
|
||||||
nfp_cpp_free(pf->cpp);
|
nfp_cpp_free(pf->cpp);
|
||||||
|
Loading…
Reference in New Issue
Block a user