From 839dee404325c45f4181712fd63917229e737652 Mon Sep 17 00:00:00 2001 From: Kalesh AP Date: Tue, 10 Dec 2019 20:35:29 +0530 Subject: [PATCH] net/bnxt: add a field for FW capabilities The purpose of this patch is used to add a new field "fw_cap" in bnxt structure. The new "fw_cap" field store all the capabilities reported by the FW. This information will help us to determine the device capabilities when registering feature support with FW. Signed-off-by: Kalesh AP Reviewed-by: Ajit Khaparde --- drivers/net/bnxt/bnxt.h | 24 +++++++++++++----------- drivers/net/bnxt/bnxt_cpr.c | 2 +- drivers/net/bnxt/bnxt_ethdev.c | 4 +++- drivers/net/bnxt/bnxt_hwrm.c | 24 +++++++++--------------- 4 files changed, 26 insertions(+), 28 deletions(-) diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h index f9e4d76e47..ab18e8acd8 100644 --- a/drivers/net/bnxt/bnxt.h +++ b/drivers/net/bnxt/bnxt.h @@ -507,17 +507,13 @@ struct bnxt { #define BNXT_FLAG_STINGRAY BIT(14) #define BNXT_FLAG_FW_RESET BIT(15) #define BNXT_FLAG_FATAL_ERROR BIT(16) -#define BNXT_FLAG_FW_CAP_IF_CHANGE BIT(17) -#define BNXT_FLAG_IF_CHANGE_HOT_FW_RESET_DONE BIT(18) -#define BNXT_FLAG_FW_CAP_ERROR_RECOVERY BIT(19) -#define BNXT_FLAG_FW_HEALTH_CHECK_SCHEDULED BIT(20) -#define BNXT_FLAG_FW_CAP_ERR_RECOVER_RELOAD BIT(21) -#define BNXT_FLAG_EXT_STATS_SUPPORTED BIT(22) -#define BNXT_FLAG_NEW_RM BIT(23) -#define BNXT_FLAG_INIT_DONE BIT(24) -#define BNXT_FLAG_FW_CAP_ONE_STEP_TX_TS BIT(25) -#define BNXT_FLAG_ADV_FLOW_MGMT BIT(26) -#define BNXT_FLAG_FW_CAP_HOT_RESET BIT(27) +#define BNXT_FLAG_IF_CHANGE_HOT_FW_RESET_DONE BIT(17) +#define BNXT_FLAG_FW_HEALTH_CHECK_SCHEDULED BIT(18) +#define BNXT_FLAG_EXT_STATS_SUPPORTED BIT(19) +#define BNXT_FLAG_NEW_RM BIT(20) +#define BNXT_FLAG_INIT_DONE BIT(21) +#define BNXT_FLAG_FW_CAP_ONE_STEP_TX_TS BIT(22) +#define BNXT_FLAG_ADV_FLOW_MGMT BIT(23) #define BNXT_PF(bp) (!((bp)->flags & BNXT_FLAG_VF)) #define BNXT_VF(bp) ((bp)->flags & BNXT_FLAG_VF) #define BNXT_NPAR(bp) ((bp)->port_partition_type) @@ -531,6 +527,12 @@ struct bnxt { #define BNXT_HAS_NQ(bp) BNXT_CHIP_THOR(bp) #define BNXT_HAS_RING_GRPS(bp) (!BNXT_CHIP_THOR(bp)) + uint32_t fw_cap; +#define BNXT_FW_CAP_HOT_RESET BIT(0) +#define BNXT_FW_CAP_IF_CHANGE BIT(1) +#define BNXT_FW_CAP_ERROR_RECOVERY BIT(2) +#define BNXT_FW_CAP_ERR_RECOVER_RELOAD BIT(3) + uint32_t flow_flags; #define BNXT_FLOW_FLAG_L2_HDR_SRC_FILTER_EN BIT(0) pthread_mutex_t flow_lock; diff --git a/drivers/net/bnxt/bnxt_cpr.c b/drivers/net/bnxt/bnxt_cpr.c index e6f30fecbf..2c3129fe28 100644 --- a/drivers/net/bnxt/bnxt_cpr.c +++ b/drivers/net/bnxt/bnxt_cpr.c @@ -21,7 +21,7 @@ void bnxt_wait_for_device_shutdown(struct bnxt *bp) * the SHUTDOWN bit in health register */ if (!(bp->recovery_info && - (bp->flags & BNXT_FLAG_FW_CAP_ERR_RECOVER_RELOAD))) + (bp->fw_cap & BNXT_FW_CAP_ERR_RECOVER_RELOAD))) return; /* Driver has to wait for fw_reset_max_msecs or shutdown bit which comes diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c index 146f04b619..1b4ed293d0 100644 --- a/drivers/net/bnxt/bnxt_ethdev.c +++ b/drivers/net/bnxt/bnxt_ethdev.c @@ -4617,6 +4617,8 @@ static int bnxt_init_fw(struct bnxt *bp) uint16_t mtu; int rc = 0; + bp->fw_cap = 0; + rc = bnxt_hwrm_ver_get(bp); if (rc) return rc; @@ -4652,7 +4654,7 @@ static int bnxt_init_fw(struct bnxt *bp) /* Get the adapter error recovery support info */ rc = bnxt_hwrm_error_recovery_qcfg(bp); if (rc) - bp->flags &= ~BNXT_FLAG_FW_CAP_ERROR_RECOVERY; + bp->fw_cap &= ~BNXT_FW_CAP_ERROR_RECOVERY; bnxt_hwrm_port_led_qcaps(bp); diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c index d30da9b87c..d0dcd561c1 100644 --- a/drivers/net/bnxt/bnxt_hwrm.c +++ b/drivers/net/bnxt/bnxt_hwrm.c @@ -661,21 +661,15 @@ static int __bnxt_hwrm_func_qcaps(struct bnxt *bp) bp->flags |= BNXT_FLAG_EXT_STATS_SUPPORTED; if (flags & HWRM_FUNC_QCAPS_OUTPUT_FLAGS_ERROR_RECOVERY_CAPABLE) { - bp->flags |= BNXT_FLAG_FW_CAP_ERROR_RECOVERY; + bp->fw_cap |= BNXT_FW_CAP_ERROR_RECOVERY; PMD_DRV_LOG(DEBUG, "Adapter Error recovery SUPPORTED\n"); - } else { - bp->flags &= ~BNXT_FLAG_FW_CAP_ERROR_RECOVERY; } if (flags & HWRM_FUNC_QCAPS_OUTPUT_FLAGS_ERR_RECOVER_RELOAD) - bp->flags |= BNXT_FLAG_FW_CAP_ERR_RECOVER_RELOAD; - else - bp->flags &= ~BNXT_FLAG_FW_CAP_ERR_RECOVER_RELOAD; + bp->fw_cap |= BNXT_FW_CAP_ERR_RECOVER_RELOAD; if (flags & HWRM_FUNC_QCAPS_OUTPUT_FLAGS_HOT_RESET_CAPABLE) - bp->flags |= BNXT_FLAG_FW_CAP_HOT_RESET; - else - bp->flags &= ~BNXT_FLAG_FW_CAP_HOT_RESET; + bp->fw_cap |= BNXT_FW_CAP_HOT_RESET; HWRM_UNLOCK(); @@ -761,9 +755,9 @@ int bnxt_hwrm_func_driver_register(struct bnxt *bp) if (bp->flags & BNXT_FLAG_REGISTERED) return 0; - if (bp->flags & BNXT_FLAG_FW_CAP_HOT_RESET) + if (bp->fw_cap & BNXT_FW_CAP_HOT_RESET) flags = HWRM_FUNC_DRV_RGTR_INPUT_FLAGS_HOT_RESET_SUPPORT; - if (bp->flags & BNXT_FLAG_FW_CAP_ERROR_RECOVERY) + if (bp->fw_cap & BNXT_FW_CAP_ERROR_RECOVERY) flags |= HWRM_FUNC_DRV_RGTR_INPUT_FLAGS_ERROR_RECOVERY_SUPPORT; /* PFs and trusted VFs should indicate the support of the @@ -803,7 +797,7 @@ int bnxt_hwrm_func_driver_register(struct bnxt *bp) ASYNC_CMPL_EVENT_ID_LINK_SPEED_CFG_CHANGE | ASYNC_CMPL_EVENT_ID_LINK_SPEED_CHANGE | ASYNC_CMPL_EVENT_ID_RESET_NOTIFY); - if (bp->flags & BNXT_FLAG_FW_CAP_ERROR_RECOVERY) + if (bp->fw_cap & BNXT_FW_CAP_ERROR_RECOVERY) req.async_event_fwd[0] |= rte_cpu_to_le_32(ASYNC_CMPL_EVENT_ID_ERROR_RECOVERY); req.async_event_fwd[1] |= @@ -816,7 +810,7 @@ int bnxt_hwrm_func_driver_register(struct bnxt *bp) flags = rte_le_to_cpu_32(resp->flags); if (flags & HWRM_FUNC_DRV_RGTR_OUTPUT_FLAGS_IF_CHANGE_SUPPORTED) - bp->flags |= BNXT_FLAG_FW_CAP_IF_CHANGE; + bp->fw_cap |= BNXT_FW_CAP_IF_CHANGE; HWRM_UNLOCK(); @@ -4849,7 +4843,7 @@ int bnxt_hwrm_if_change(struct bnxt *bp, bool up) uint32_t flags; int rc; - if (!(bp->flags & BNXT_FLAG_FW_CAP_IF_CHANGE)) + if (!(bp->fw_cap & BNXT_FW_CAP_IF_CHANGE)) return 0; /* Do not issue FUNC_DRV_IF_CHANGE during reset recovery. @@ -4892,7 +4886,7 @@ int bnxt_hwrm_error_recovery_qcfg(struct bnxt *bp) int rc; /* Older FW does not have error recovery support */ - if (!(bp->flags & BNXT_FLAG_FW_CAP_ERROR_RECOVERY)) + if (!(bp->fw_cap & BNXT_FW_CAP_ERROR_RECOVERY)) return 0; if (!info) { -- 2.20.1