@@ -99,6 +99,10 @@ enum nfp_nsp_cmd {
struct nfp_nsp {
struct nfp_cpp *cpp;
struct nfp_resource *res;
+ struct {
+ u16 major;
+ u16 minor;
+ } ver;
};
static int nfp_nsp_check(struct nfp_nsp *state)
@@ -120,11 +124,12 @@ static int nfp_nsp_check(struct nfp_nsp *state)
return -ENODEV;
}
- if (FIELD_GET(NSP_STATUS_MAJOR, reg) != NSP_MAJOR ||
- FIELD_GET(NSP_STATUS_MINOR, reg) < NSP_MINOR) {
- nfp_err(cpp, "Unsupported ABI %lld.%lld\n",
- FIELD_GET(NSP_STATUS_MAJOR, reg),
- FIELD_GET(NSP_STATUS_MINOR, reg));
+ state->ver.major = FIELD_GET(NSP_STATUS_MAJOR, reg);
+ state->ver.minor = FIELD_GET(NSP_STATUS_MINOR, reg);
+
+ if (state->ver.major != NSP_MAJOR || state->ver.minor < NSP_MINOR) {
+ nfp_err(cpp, "Unsupported ABI %hu.%hu\n",
+ state->ver.major, state->ver.minor);
return -EINVAL;
}
@@ -301,15 +306,9 @@ static int nfp_nsp_command_buf(struct nfp_nsp *nsp, u16 code, u32 option,
int ret, err;
u32 cpp_id;
- err = nfp_cpp_readq(cpp, nfp_resource_cpp_id(nsp->res),
- nfp_resource_address(nsp->res) + NSP_STATUS, ®);
- if (err < 0)
- return err;
-
- if (FIELD_GET(NSP_STATUS_MINOR, reg) < 13) {
- nfp_err(cpp, "NSP: Code 0x%04x with buffer not supported (ABI %lld.%lld)\n",
- code, FIELD_GET(NSP_STATUS_MAJOR, reg),
- FIELD_GET(NSP_STATUS_MINOR, reg));
+ if (nsp->ver.minor < 13) {
+ nfp_err(cpp, "NSP: Code 0x%04x with buffer not supported (ABI %hu.%hu)\n",
+ code, nsp->ver.major, nsp->ver.minor);
return -EOPNOTSUPP;
}
We read the status register on each NSP open, we can store the NSP ABI version in the state structure so that we don't have to read it again. Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com> --- .../net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c | 27 +++++++++++----------- 1 file changed, 13 insertions(+), 14 deletions(-)