aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/nfp/nfpcore
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/nfp/nfpcore')
-rw-r--r--drivers/net/nfp/nfpcore/nfp-common/nfp_cppat.h3
-rw-r--r--drivers/net/nfp/nfpcore/nfp_cpp_pcie_ops.c18
-rw-r--r--drivers/net/nfp/nfpcore/nfp_cppcore.c9
3 files changed, 21 insertions, 9 deletions
diff --git a/drivers/net/nfp/nfpcore/nfp-common/nfp_cppat.h b/drivers/net/nfp/nfpcore/nfp-common/nfp_cppat.h
index 6e380cca..538f882b 100644
--- a/drivers/net/nfp/nfpcore/nfp-common/nfp_cppat.h
+++ b/drivers/net/nfp/nfpcore/nfp-common/nfp_cppat.h
@@ -368,6 +368,9 @@ _nfp6000_encode_mu(uint64_t *addr, int dest_island, int mode, int addr40,
isld[1] = isld1;
locality_lsb = _nfp6000_cppat_mu_locality_lsb(mode, addr40);
+ if (locality_lsb < 0)
+ return NFP_ERRNO(EINVAL);
+
if (((*addr >> locality_lsb) & 3) == _NIC_NFP6000_MU_LOCALITY_DIRECT)
da = 1;
else
diff --git a/drivers/net/nfp/nfpcore/nfp_cpp_pcie_ops.c b/drivers/net/nfp/nfpcore/nfp_cpp_pcie_ops.c
index c68d9400..37b7991f 100644
--- a/drivers/net/nfp/nfpcore/nfp_cpp_pcie_ops.c
+++ b/drivers/net/nfp/nfpcore/nfp_cpp_pcie_ops.c
@@ -16,7 +16,9 @@
#include <assert.h>
#include <stdio.h>
+#if defined(RTE_BACKTRACE)
#include <execinfo.h>
+#endif
#include <stdlib.h>
#include <unistd.h>
#include <stdint.h>
@@ -788,17 +790,17 @@ nfp6000_init(struct nfp_cpp *cpp, struct rte_pci_device *dev)
if (cpp->driver_lock_needed) {
ret = nfp_acquire_process_lock(desc);
if (ret)
- return -1;
+ goto error;
}
if (nfp6000_set_model(dev, cpp) < 0)
- return -1;
+ goto error;
if (nfp6000_set_interface(dev, cpp) < 0)
- return -1;
+ goto error;
if (nfp6000_set_serial(dev, cpp) < 0)
- return -1;
+ goto error;
if (nfp6000_set_barsz(dev, desc) < 0)
- return -1;
+ goto error;
desc->cfg = (char *)dev->mem_resource[0].addr;
@@ -809,7 +811,11 @@ nfp6000_init(struct nfp_cpp *cpp, struct rte_pci_device *dev)
model = __nfp_cpp_model_autodetect(cpp);
nfp_cpp_model_set(cpp, model);
- return ret;
+ return 0;
+
+error:
+ free(desc);
+ return -1;
}
static void
diff --git a/drivers/net/nfp/nfpcore/nfp_cppcore.c b/drivers/net/nfp/nfpcore/nfp_cppcore.c
index 75d3c974..dec4a8b6 100644
--- a/drivers/net/nfp/nfpcore/nfp_cppcore.c
+++ b/drivers/net/nfp/nfpcore/nfp_cppcore.c
@@ -801,7 +801,8 @@ __nfp_cpp_model_autodetect(struct nfp_cpp *cpp)
uint32_t arm_id = NFP_CPP_ID(NFP_CPP_TARGET_ARM, 0, 0);
uint32_t model = 0;
- nfp_cpp_readl(cpp, arm_id, NFP6000_ARM_GCSR_SOFTMODEL0, &model);
+ if (nfp_cpp_readl(cpp, arm_id, NFP6000_ARM_GCSR_SOFTMODEL0, &model))
+ return 0;
if (NFP_CPP_MODEL_IS_6000(model)) {
uint32_t tmp;
@@ -810,8 +811,10 @@ __nfp_cpp_model_autodetect(struct nfp_cpp *cpp)
/* The PL's PluDeviceID revision code is authoratative */
model &= ~0xff;
- nfp_xpb_readl(cpp, NFP_XPB_DEVICE(1, 1, 16) +
- NFP_PL_DEVICE_ID, &tmp);
+ if (nfp_xpb_readl(cpp, NFP_XPB_DEVICE(1, 1, 16) +
+ NFP_PL_DEVICE_ID, &tmp))
+ return 0;
+
model |= (NFP_PL_DEVICE_ID_MASK & tmp) - 0x10;
}