Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 010e2f9c authored by David Brunecz's avatar David Brunecz Committed by David S. Miller
Browse files

nfp: add NSP routine to get static information



Retrieve identifying information from the NSP.  For now it only
contains versions of firmware subcomponents.

Signed-off-by: default avatarDavid Brunecz <david.brunecz@netronome.com>
Signed-off-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent e524a6a9
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@ nfp-objs := \
	    nfpcore/nfp_mutex.o \
	    nfpcore/nfp_nffw.o \
	    nfpcore/nfp_nsp.o \
	    nfpcore/nfp_nsp_cmds.o \
	    nfpcore/nfp_nsp_eth.o \
	    nfpcore/nfp_resource.o \
	    nfpcore/nfp_rtsym.o \
+7 −0
Original line number Diff line number Diff line
@@ -253,6 +253,7 @@ nfp_fw_load(struct pci_dev *pdev, struct nfp_pf *pf, struct nfp_nsp *nsp)

static int nfp_nsp_init(struct pci_dev *pdev, struct nfp_pf *pf)
{
	struct nfp_nsp_identify *nspi;
	struct nfp_nsp *nsp;
	int err;

@@ -269,6 +270,12 @@ static int nfp_nsp_init(struct pci_dev *pdev, struct nfp_pf *pf)

	pf->eth_tbl = __nfp_eth_read_ports(pf->cpp, nsp);

	nspi = __nfp_nsp_identify(nsp);
	if (nspi) {
		dev_info(&pdev->dev, "BSP: %s\n", nspi->version);
		kfree(nspi);
	}

	err = nfp_fw_load(pdev, pf, nsp);
	if (err < 0) {
		kfree(pf->eth_tbl);
+1 −0
Original line number Diff line number Diff line
@@ -63,6 +63,7 @@ void nfp_nsp_config_clear_state(struct nfp_nsp *state);
int nfp_nsp_read_eth_table(struct nfp_nsp *state, void *buf, unsigned int size);
int nfp_nsp_write_eth_table(struct nfp_nsp *state,
			    const void *buf, unsigned int size);
int nfp_nsp_read_identify(struct nfp_nsp *state, void *buf, unsigned int size);

/* Implemented in nfp_resource.c */

+7 −0
Original line number Diff line number Diff line
@@ -93,6 +93,7 @@ enum nfp_nsp_cmd {
	SPCODE_FW_LOAD		= 6, /* Load fw from buffer, len in option */
	SPCODE_ETH_RESCAN	= 7, /* Rescan ETHs, write ETH_TABLE to buf */
	SPCODE_ETH_CONTROL	= 8, /* Update media config from buffer */
	SPCODE_NSP_IDENTIFY	= 13, /* Read NSP version */

	__MAX_SPCODE,
};
@@ -493,3 +494,9 @@ int nfp_nsp_write_eth_table(struct nfp_nsp *state,
	return nfp_nsp_command_buf(state, SPCODE_ETH_CONTROL, size, buf, size,
				   NULL, 0);
}

int nfp_nsp_read_identify(struct nfp_nsp *state, void *buf, unsigned int size)
{
	return nfp_nsp_command_buf(state, SPCODE_NSP_IDENTIFY, size, NULL, 0,
				   buf, size);
}
+24 −0
Original line number Diff line number Diff line
@@ -147,4 +147,28 @@ int __nfp_eth_set_aneg(struct nfp_nsp *nsp, enum nfp_eth_aneg mode);
int __nfp_eth_set_speed(struct nfp_nsp *nsp, unsigned int speed);
int __nfp_eth_set_split(struct nfp_nsp *nsp, unsigned int lanes);

/**
 * struct nfp_nsp_identify - NSP static information
 * @version:      opaque version string
 * @flags:        version flags
 * @br_primary:   branch id of primary bootloader
 * @br_secondary: branch id of secondary bootloader
 * @br_nsp:       branch id of NSP
 * @primary:      version of primarary bootloader
 * @secondary:    version id of secondary bootloader
 * @nsp:          version id of NSP
 */
struct nfp_nsp_identify {
	char version[40];
	u8 flags;
	u8 br_primary;
	u8 br_secondary;
	u8 br_nsp;
	u16 primary;
	u16 secondary;
	u16 nsp;
};

struct nfp_nsp_identify *__nfp_nsp_identify(struct nfp_nsp *nsp);

#endif
Loading