OSDN Git Service

nfp: store NSP ABI version in state structure
authorJakub Kicinski <jakub.kicinski@netronome.com>
Sun, 19 Feb 2017 19:58:10 +0000 (11:58 -0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 20 Feb 2017 16:18:49 +0000 (11:18 -0500)
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>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c

index f07f2fc..f2d737c 100644 (file)
@@ -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, &reg);
-       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;
        }