]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
bnxt_en: Use firmware provided message timeout value.
authorMichael Chan <michael.chan@broadcom.com>
Fri, 26 Feb 2016 09:00:04 +0000 (04:00 -0500)
committerChuck Anderson <chuck.anderson@oracle.com>
Thu, 7 Jul 2016 00:36:58 +0000 (17:36 -0700)
Orabug: 23221795

Before this patch, we used a hardcoded value of 500 msec as the default
value for firmware message response timeout.  For better portability with
future hardware or debug platforms, use the value provided by firmware in
the first response and store it for all susequent messages.  Redefine the
macro HWRM_CMD_TIMEOUT to the stored value.  Since we don't have the
value yet in the first message, use the 500 ms default if the stored value
is zero.

Signed-off-by: Michael Chan <mchan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
(cherry picked from commit ff4fe81d2d49e3cad3bb45c8c5b9a49ca90ee10b)
Signed-off-by: Brian Maly <brian.maly@oracle.com>
drivers/net/ethernet/broadcom/bnxt/bnxt.c
drivers/net/ethernet/broadcom/bnxt/bnxt.h

index 9ef8b6dc804f37bbc9f85700dfdb0b0a9aa98594..2c60ae3e9d6f648cbc3e85497475b092cde95acb 100644 (file)
@@ -2642,6 +2642,9 @@ int _hwrm_send_message(struct bnxt *bp, void *msg, u32 msg_len, int timeout)
        /* Ring channel doorbell */
        writel(1, bp->bar0 + 0x100);
 
+       if (!timeout)
+               timeout = DFLT_HWRM_CMD_TIMEOUT;
+
        i = 0;
        if (intr_process) {
                /* Wait until hwrm response cmpl interrupt is processed */
@@ -3827,6 +3830,10 @@ static int bnxt_hwrm_ver_get(struct bnxt *bp)
                 resp->hwrm_fw_maj, resp->hwrm_fw_min, resp->hwrm_fw_bld,
                 resp->hwrm_intf_maj, resp->hwrm_intf_min, resp->hwrm_intf_upd);
 
+       bp->hwrm_cmd_timeout = le16_to_cpu(resp->def_req_timeout);
+       if (!bp->hwrm_cmd_timeout)
+               bp->hwrm_cmd_timeout = DFLT_HWRM_CMD_TIMEOUT;
+
 hwrm_ver_get_exit:
        mutex_unlock(&bp->hwrm_cmd_lock);
        return rc;
index ba67c4a66ef30298d490b06831b44ec11ee323c3..a3d49406c9c3f5436d62ad076653e4154603aab6 100644 (file)
@@ -477,7 +477,8 @@ struct rx_tpa_end_cmp_ext {
 #define RING_CMP(idx)          ((idx) & bp->cp_ring_mask)
 #define NEXT_CMP(idx)          RING_CMP(ADV_RAW_CMP(idx, 1))
 
-#define HWRM_CMD_TIMEOUT               500
+#define DFLT_HWRM_CMD_TIMEOUT          500
+#define HWRM_CMD_TIMEOUT               (bp->hwrm_cmd_timeout)
 #define HWRM_RESET_TIMEOUT             ((HWRM_CMD_TIMEOUT) * 4)
 #define HWRM_RESP_ERR_CODE_MASK                0xffff
 #define HWRM_RESP_LEN_MASK             0xffff0000
@@ -957,6 +958,7 @@ struct bnxt {
        void                    *hwrm_dbg_resp_addr;
        dma_addr_t              hwrm_dbg_resp_dma_addr;
 #define HWRM_DBG_REG_BUF_SIZE  128
+       int                     hwrm_cmd_timeout;
        struct mutex            hwrm_cmd_lock;  /* serialize hwrm messages */
        struct hwrm_ver_get_output      ver_resp;
 #define FW_VER_STR_LEN         32