Skip to content

Commit

Permalink
nfp: add support for service processor access
Browse files Browse the repository at this point in the history
NFP Service Processor (NSP) is an ARM core inside the chip which
is responsible for management and control functions.  Add support
for chip reset, FW load and external module access using the NSP.

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 Feb 10, 2017
1 parent 5f30fe4 commit 1a64821
Showing 7 changed files with 799 additions and 0 deletions.
2 changes: 2 additions & 0 deletions drivers/net/ethernet/netronome/nfp/Makefile
Original file line number Diff line number Diff line change
@@ -7,6 +7,8 @@ nfp-objs := \
nfpcore/nfp_hwinfo.o \
nfpcore/nfp_mip.o \
nfpcore/nfp_nffw.o \
nfpcore/nfp_nsp.o \
nfpcore/nfp_nsp_eth.o \
nfpcore/nfp_resource.o \
nfpcore/nfp_rtsym.o \
nfpcore/nfp_target.o \
14 changes: 14 additions & 0 deletions drivers/net/ethernet/netronome/nfp/nfpcore/nfp.h
Original file line number Diff line number Diff line change
@@ -47,6 +47,20 @@

const char *nfp_hwinfo_lookup(struct nfp_cpp *cpp, const char *lookup);

/* Implemented in nfp_nsp.c */

struct nfp_nsp;
struct firmware;

struct nfp_nsp *nfp_nsp_open(struct nfp_cpp *cpp);
void nfp_nsp_close(struct nfp_nsp *state);
int nfp_nsp_wait(struct nfp_nsp *state);
int nfp_nsp_device_soft_reset(struct nfp_nsp *state);
int nfp_nsp_load_fw(struct nfp_nsp *state, const struct firmware *fw);
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);

/* Implemented in nfp_resource.c */

#define NFP_RESOURCE_TBL_TARGET NFP_CPP_TARGET_MU
2 changes: 2 additions & 0 deletions drivers/net/ethernet/netronome/nfp/nfpcore/nfp_cpp.h
Original file line number Diff line number Diff line change
@@ -224,6 +224,8 @@ void nfp_hwinfo_cache_set(struct nfp_cpp *cpp, void *val);
void *nfp_rtsym_cache(struct nfp_cpp *cpp);
void nfp_rtsym_cache_set(struct nfp_cpp *cpp, void *val);

void nfp_nffw_cache_flush(struct nfp_cpp *cpp);

struct nfp_cpp_area *nfp_cpp_area_alloc_with_name(struct nfp_cpp *cpp,
u32 cpp_id,
const char *name,
13 changes: 13 additions & 0 deletions drivers/net/ethernet/netronome/nfp/nfpcore/nfp_cppcore.c
Original file line number Diff line number Diff line change
@@ -304,6 +304,19 @@ void nfp_rtsym_cache_set(struct nfp_cpp *cpp, void *val)
cpp->rtsym = val;
}

/**
* nfp_nffw_cache_flush() - Flush cached firmware information
* @cpp: NFP CPP handle
*
* Flush cached firmware information. This function should be called
* every time firmware is loaded on unloaded.
*/
void nfp_nffw_cache_flush(struct nfp_cpp *cpp)
{
kfree(nfp_rtsym_cache(cpp));
nfp_rtsym_cache_set(cpp, NULL);
}

/**
* nfp_cpp_area_alloc_with_name() - allocate a new CPP area
* @cpp: CPP device handle
Loading

0 comments on commit 1a64821

Please sign in to comment.