diff options
author | Jakub Kicinski <jakub.kicinski@netronome.com> | 2019-02-26 23:19:30 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2019-03-01 14:36:00 -0500 |
commit | 882cdcb5d3abb99926d474d24902636f87b583c1 (patch) | |
tree | cd56644ac760729446ada5330b7fbd8e3f1597bc | |
parent | 1e301a140763c75e9123411b3f7243522c2b6578 (diff) |
nfp: nsp: use fractional size of the buffer
NSP expresses the buffer size in MB and 4 kB blocks. For small
buffers the kB part may make a difference, so count it in.
Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Reviewed-by: Dirk van der Merwe <dirk.vandermerwe@netronome.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c index a9d53df0070c..22208b03ff49 100644 --- a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c +++ b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c | |||
@@ -49,6 +49,7 @@ | |||
49 | #define NSP_DFLT_BUFFER_ADDRESS GENMASK_ULL(39, 0) | 49 | #define NSP_DFLT_BUFFER_ADDRESS GENMASK_ULL(39, 0) |
50 | 50 | ||
51 | #define NSP_DFLT_BUFFER_CONFIG 0x20 | 51 | #define NSP_DFLT_BUFFER_CONFIG 0x20 |
52 | #define NSP_DFLT_BUFFER_SIZE_4KB GENMASK_ULL(15, 8) | ||
52 | #define NSP_DFLT_BUFFER_SIZE_MB GENMASK_ULL(7, 0) | 53 | #define NSP_DFLT_BUFFER_SIZE_MB GENMASK_ULL(7, 0) |
53 | 54 | ||
54 | #define NSP_MAGIC 0xab10 | 55 | #define NSP_MAGIC 0xab10 |
@@ -413,8 +414,8 @@ static int nfp_nsp_command(struct nfp_nsp *state, u16 code) | |||
413 | static int | 414 | static int |
414 | nfp_nsp_command_buf(struct nfp_nsp *nsp, struct nfp_nsp_command_buf_arg *arg) | 415 | nfp_nsp_command_buf(struct nfp_nsp *nsp, struct nfp_nsp_command_buf_arg *arg) |
415 | { | 416 | { |
417 | unsigned int def_size, max_size; | ||
416 | struct nfp_cpp *cpp = nsp->cpp; | 418 | struct nfp_cpp *cpp = nsp->cpp; |
417 | unsigned int max_size; | ||
418 | u64 reg, cpp_buf; | 419 | u64 reg, cpp_buf; |
419 | int ret, err; | 420 | int ret, err; |
420 | u32 cpp_id; | 421 | u32 cpp_id; |
@@ -433,11 +434,11 @@ nfp_nsp_command_buf(struct nfp_nsp *nsp, struct nfp_nsp_command_buf_arg *arg) | |||
433 | return err; | 434 | return err; |
434 | 435 | ||
435 | max_size = max(arg->in_size, arg->out_size); | 436 | max_size = max(arg->in_size, arg->out_size); |
436 | if (FIELD_GET(NSP_DFLT_BUFFER_SIZE_MB, reg) * SZ_1M < max_size) { | 437 | def_size = FIELD_GET(NSP_DFLT_BUFFER_SIZE_MB, reg) * SZ_1M + |
437 | nfp_err(cpp, "NSP: default buffer too small for command 0x%04x (%llu < %u)\n", | 438 | FIELD_GET(NSP_DFLT_BUFFER_SIZE_4KB, reg) * SZ_4K; |
438 | arg->arg.code, | 439 | if (def_size < max_size) { |
439 | FIELD_GET(NSP_DFLT_BUFFER_SIZE_MB, reg) * SZ_1M, | 440 | nfp_err(cpp, "NSP: default buffer too small for command 0x%04x (%u < %u)\n", |
440 | max_size); | 441 | arg->arg.code, def_size, max_size); |
441 | return -EINVAL; | 442 | return -EINVAL; |
442 | } | 443 | } |
443 | 444 | ||