Skip to content

Commit

Permalink
nfp: keep MIP object around
Browse files Browse the repository at this point in the history
Microcode Information Page contains some useful information, like
application firmware build name.  Keep it around, similar to RTSym
and HWInfo.

Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Jakub Kicinski authored and David S. Miller committed Jun 9, 2017
1 parent 9baa488 commit 0be40e6
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 4 deletions.
5 changes: 4 additions & 1 deletion drivers/net/ethernet/netronome/nfp/nfp_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -375,7 +375,8 @@ static int nfp_pci_probe(struct pci_dev *pdev,
if (err)
goto err_devlink_unreg;

pf->rtbl = nfp_rtsym_table_read(pf->cpp);
pf->mip = nfp_mip_open(pf->cpp);
pf->rtbl = __nfp_rtsym_table_read(pf->cpp, pf->mip);

err = nfp_pcie_sriov_read_nfd_limit(pf);
if (err)
Expand All @@ -399,6 +400,7 @@ static int nfp_pci_probe(struct pci_dev *pdev,
pci_sriov_set_totalvfs(pf->pdev, 0);
err_fw_unload:
kfree(pf->rtbl);
nfp_mip_close(pf->mip);
if (pf->fw_loaded)
nfp_fw_unload(pf);
kfree(pf->eth_tbl);
Expand Down Expand Up @@ -437,6 +439,7 @@ static void nfp_pci_remove(struct pci_dev *pdev)
devlink_unregister(devlink);

kfree(pf->rtbl);
nfp_mip_close(pf->mip);
if (pf->fw_loaded)
nfp_fw_unload(pf);

Expand Down
3 changes: 3 additions & 0 deletions drivers/net/ethernet/netronome/nfp/nfp_main.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ struct nfp_cpp;
struct nfp_cpp_area;
struct nfp_eth_table;
struct nfp_hwinfo;
struct nfp_mip;
struct nfp_net;
struct nfp_nsp_identify;
struct nfp_rtsym_table;
Expand All @@ -72,6 +73,7 @@ struct nfp_rtsym_table;
* @num_vfs: Number of SR-IOV VFs enabled
* @fw_loaded: Is the firmware loaded?
* @ctrl_vnic: Pointer to the control vNIC if available
* @mip: MIP handle
* @rtbl: RTsym table
* @hwinfo: HWInfo table
* @eth_tbl: NSP ETH table
Expand Down Expand Up @@ -105,6 +107,7 @@ struct nfp_pf {

struct nfp_net *ctrl_vnic;

const struct nfp_mip *mip;
struct nfp_rtsym_table *rtbl;
struct nfp_hwinfo *hwinfo;
struct nfp_eth_table *eth_tbl;
Expand Down
2 changes: 2 additions & 0 deletions drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nffw.h
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,8 @@ struct nfp_rtsym {
struct nfp_rtsym_table;

struct nfp_rtsym_table *nfp_rtsym_table_read(struct nfp_cpp *cpp);
struct nfp_rtsym_table *
__nfp_rtsym_table_read(struct nfp_cpp *cpp, const struct nfp_mip *mip);
int nfp_rtsym_count(struct nfp_rtsym_table *rtbl);
const struct nfp_rtsym *nfp_rtsym_get(struct nfp_rtsym_table *rtbl, int idx);
const struct nfp_rtsym *
Expand Down
16 changes: 13 additions & 3 deletions drivers/net/ethernet/netronome/nfp/nfpcore/nfp_rtsym.c
Original file line number Diff line number Diff line change
Expand Up @@ -108,22 +108,32 @@ nfp_rtsym_sw_entry_init(struct nfp_rtsym_table *cache, u32 strtab_size,
}

struct nfp_rtsym_table *nfp_rtsym_table_read(struct nfp_cpp *cpp)
{
struct nfp_rtsym_table *rtbl;
const struct nfp_mip *mip;

mip = nfp_mip_open(cpp);
rtbl = __nfp_rtsym_table_read(cpp, mip);
nfp_mip_close(mip);

return rtbl;
}

struct nfp_rtsym_table *
__nfp_rtsym_table_read(struct nfp_cpp *cpp, const struct nfp_mip *mip)
{
const u32 dram = NFP_CPP_ID(NFP_CPP_TARGET_MU, NFP_CPP_ACTION_RW, 0) |
NFP_ISL_EMEM0;
u32 strtab_addr, symtab_addr, strtab_size, symtab_size;
struct nfp_rtsym_entry *rtsymtab;
struct nfp_rtsym_table *cache;
const struct nfp_mip *mip;
int err, n, size;

mip = nfp_mip_open(cpp);
if (!mip)
return NULL;

nfp_mip_strtab(mip, &strtab_addr, &strtab_size);
nfp_mip_symtab(mip, &symtab_addr, &symtab_size);
nfp_mip_close(mip);

if (!symtab_size || !strtab_size || symtab_size % sizeof(*rtsymtab))
return NULL;
Expand Down

0 comments on commit 0be40e6

Please sign in to comment.