net/bnxt: fix default timeout for getting FW version
authorRahul Gupta <rahul.gupta@broadcom.com>
Thu, 6 Feb 2020 16:33:09 +0000 (22:03 +0530)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 14 Feb 2020 11:42:12 +0000 (12:42 +0100)
Initially when driver is loading, there is no HWRM timeout configured
by FW, the VER_GET command needs use default timeout as 500ms and
while recovering from fatal/non-fatal FW error, it should use timeout
as 50ms.

Fixes: 458f0360e8dc ("net/bnxt: get default HWRM command timeout from FW")
Cc: stable@dpdk.org
Signed-off-by: Rahul Gupta <rahul.gupta@broadcom.com>
Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
drivers/net/bnxt/bnxt.h
drivers/net/bnxt/bnxt_ethdev.c
drivers/net/bnxt/bnxt_hwrm.c
drivers/net/bnxt/bnxt_hwrm.h

index 68786a8..e8a30fa 100644 (file)
@@ -606,8 +606,10 @@ struct bnxt {
        uint16_t                        max_resp_len;
        uint16_t                        hwrm_max_ext_req_len;
 
-        /* default command timeout value of 50ms */
-#define HWRM_CMD_TIMEOUT               50000
+        /* default command timeout value of 500ms */
+#define DFLT_HWRM_CMD_TIMEOUT          500000
+        /* short command timeout value of 50ms */
+#define SHORT_HWRM_CMD_TIMEOUT         50000
        /* default HWRM request timeout value */
        uint32_t                        hwrm_cmd_timeout;
 
index 5378209..7147cc8 100644 (file)
@@ -3998,7 +3998,7 @@ static void bnxt_dev_recover(void *arg)
        bp->flags &= ~BNXT_FLAG_FATAL_ERROR;
 
        do {
-               rc = bnxt_hwrm_ver_get(bp);
+               rc = bnxt_hwrm_ver_get(bp, SHORT_HWRM_CMD_TIMEOUT);
                if (rc == 0)
                        break;
                rte_delay_ms(BNXT_FW_READY_WAIT_INTERVAL);
@@ -4688,7 +4688,7 @@ static int bnxt_init_fw(struct bnxt *bp)
 
        bp->fw_cap = 0;
 
-       rc = bnxt_hwrm_ver_get(bp);
+       rc = bnxt_hwrm_ver_get(bp, DFLT_HWRM_CMD_TIMEOUT);
        if (rc)
                return rc;
 
index f325aff..96b3431 100644 (file)
@@ -100,11 +100,7 @@ static int bnxt_hwrm_send_message(struct bnxt *bp, void *msg,
        if (bp->flags & BNXT_FLAG_FATAL_ERROR)
                return 0;
 
-       /* For VER_GET command, set timeout as 50ms */
-       if (rte_cpu_to_le_16(req->req_type) == HWRM_VER_GET)
-               timeout = HWRM_CMD_TIMEOUT;
-       else
-               timeout = bp->hwrm_cmd_timeout;
+       timeout = bp->hwrm_cmd_timeout;
 
        if (bp->flags & BNXT_FLAG_SHORT_CMD ||
            msg_len > bp->max_req_len) {
@@ -949,7 +945,7 @@ int bnxt_hwrm_func_resc_qcaps(struct bnxt *bp)
        return rc;
 }
 
-int bnxt_hwrm_ver_get(struct bnxt *bp)
+int bnxt_hwrm_ver_get(struct bnxt *bp, uint32_t timeout)
 {
        int rc = 0;
        struct hwrm_ver_get_input req = {.req_type = 0 };
@@ -960,6 +956,7 @@ int bnxt_hwrm_ver_get(struct bnxt *bp)
        uint32_t dev_caps_cfg;
 
        bp->max_req_len = HWRM_MAX_REQ_LEN;
+       bp->hwrm_cmd_timeout = timeout;
        HWRM_PREP(req, VER_GET, BNXT_USE_CHIMP_MB);
 
        req.hwrm_intf_maj = HWRM_VERSION_MAJOR;
@@ -994,7 +991,7 @@ int bnxt_hwrm_ver_get(struct bnxt *bp)
        /* convert timeout to usec */
        bp->hwrm_cmd_timeout *= 1000;
        if (!bp->hwrm_cmd_timeout)
-               bp->hwrm_cmd_timeout = HWRM_CMD_TIMEOUT;
+               bp->hwrm_cmd_timeout = DFLT_HWRM_CMD_TIMEOUT;
 
        if (resp->hwrm_intf_maj_8b != HWRM_VERSION_MAJOR) {
                PMD_DRV_LOG(ERR, "Unsupported firmware API version\n");
index d8d1360..2753720 100644 (file)
@@ -120,7 +120,7 @@ int bnxt_hwrm_stat_ctx_free(struct bnxt *bp,
 int bnxt_hwrm_ctx_qstats(struct bnxt *bp, uint32_t cid, int idx,
                         struct rte_eth_stats *stats, uint8_t rx);
 
-int bnxt_hwrm_ver_get(struct bnxt *bp);
+int bnxt_hwrm_ver_get(struct bnxt *bp, uint32_t timeout);
 
 int bnxt_hwrm_vnic_alloc(struct bnxt *bp, struct bnxt_vnic_info *vnic);
 int bnxt_hwrm_vnic_cfg(struct bnxt *bp, struct bnxt_vnic_info *vnic);