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 <kalesh-anakkur.purayil@broadcom.com>
Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
This commit is contained in:
Kalesh AP 2019-12-10 20:35:29 +05:30 committed by Ferruh Yigit
parent 7105de7085
commit 839dee4043
4 changed files with 26 additions and 28 deletions

View File

@ -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;

View File

@ -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

View File

@ -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);

View File

@ -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) {