diff mbox series

[SRU,F/Oracle,2/3] bnxt_en: Do not enable legacy TX push on older firmware.

Message ID 20200820165748.10264-3-khalid.elmously@canonical.com
State New
Headers show
Series [SRU,F/Oracle,1/3] bnxt_en: Store the running firmware version code. | expand

Commit Message

Khalid Elmously Aug. 20, 2020, 4:57 p.m. UTC
From: Michael Chan <michael.chan@broadcom.com>

BugLink: http://bugs.launchpad.net/bugs/1892397

Older firmware may not support legacy TX push properly and may not
be disabling it.  So we check certain firmware versions that may
have this problem and disable legacy TX push unconditionally.

Fixes: c0c050c58d84 ("bnxt_en: New Broadcom ethernet driver.")
Reviewed-by: Edwin Peer <edwin.peer@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
(cherry picked from commit fed7edd18143c68c63ea049999a7e861123de6de)
Signed-off-by: Khalid Elmously <khalid.elmously@canonical.com>
---
 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 3 ++-
 drivers/net/ethernet/broadcom/bnxt/bnxt.h | 1 +
 2 files changed, 3 insertions(+), 1 deletion(-)

Comments

William Breathitt Gray Aug. 20, 2020, 5:55 p.m. UTC | #1
On Thu, Aug 20, 2020 at 12:57:47PM -0400, Khalid Elmously wrote:
> From: Michael Chan <michael.chan@broadcom.com>
> 
> BugLink: http://bugs.launchpad.net/bugs/1892397
> 
> Older firmware may not support legacy TX push properly and may not
> be disabling it.  So we check certain firmware versions that may
> have this problem and disable legacy TX push unconditionally.
> 
> Fixes: c0c050c58d84 ("bnxt_en: New Broadcom ethernet driver.")
> Reviewed-by: Edwin Peer <edwin.peer@broadcom.com>
> Signed-off-by: Michael Chan <michael.chan@broadcom.com>
> Signed-off-by: David S. Miller <davem@davemloft.net>
> (cherry picked from commit fed7edd18143c68c63ea049999a7e861123de6de)
> Signed-off-by: Khalid Elmously <khalid.elmously@canonical.com>

Acked-by: William Breathitt Gray <william.gray@canonical.com>

> ---
>  drivers/net/ethernet/broadcom/bnxt/bnxt.c | 3 ++-
>  drivers/net/ethernet/broadcom/bnxt/bnxt.h | 1 +
>  2 files changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
> index 3c398c7632c9..93d02e8339c4 100644
> --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
> +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
> @@ -6960,7 +6960,8 @@ static int __bnxt_hwrm_func_qcaps(struct bnxt *bp)
>  		bp->fw_cap |= BNXT_FW_CAP_ERR_RECOVER_RELOAD;
>  
>  	bp->tx_push_thresh = 0;
> -	if (flags & FUNC_QCAPS_RESP_FLAGS_PUSH_MODE_SUPPORTED)
> +	if ((flags & FUNC_QCAPS_RESP_FLAGS_PUSH_MODE_SUPPORTED) &&
> +	    BNXT_FW_MAJ(bp) > 217)
>  		bp->tx_push_thresh = BNXT_TX_PUSH_THRESH;
>  
>  	hw_resc->max_rsscos_ctxs = le16_to_cpu(resp->max_rsscos_ctx);
> diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
> index 2f428cb486b8..2e7575b944aa 100644
> --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h
> +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
> @@ -1702,6 +1702,7 @@ struct bnxt {
>  	u64			fw_ver_code;
>  #define BNXT_FW_VER_CODE(maj, min, bld, rsv)			\
>  	((u64)(maj) << 48 | (u64)(min) << 32 | (u64)(bld) << 16 | (rsv))
> +#define BNXT_FW_MAJ(bp)		((bp)->fw_ver_code >> 48)
>  
>  	__be16			vxlan_port;
>  	u8			vxlan_port_cnt;
> -- 
> 2.17.1
> 
> 
> -- 
> kernel-team mailing list
> kernel-team@lists.ubuntu.com
> https://lists.ubuntu.com/mailman/listinfo/kernel-team
diff mbox series

Patch

diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index 3c398c7632c9..93d02e8339c4 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -6960,7 +6960,8 @@  static int __bnxt_hwrm_func_qcaps(struct bnxt *bp)
 		bp->fw_cap |= BNXT_FW_CAP_ERR_RECOVER_RELOAD;
 
 	bp->tx_push_thresh = 0;
-	if (flags & FUNC_QCAPS_RESP_FLAGS_PUSH_MODE_SUPPORTED)
+	if ((flags & FUNC_QCAPS_RESP_FLAGS_PUSH_MODE_SUPPORTED) &&
+	    BNXT_FW_MAJ(bp) > 217)
 		bp->tx_push_thresh = BNXT_TX_PUSH_THRESH;
 
 	hw_resc->max_rsscos_ctxs = le16_to_cpu(resp->max_rsscos_ctx);
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
index 2f428cb486b8..2e7575b944aa 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
@@ -1702,6 +1702,7 @@  struct bnxt {
 	u64			fw_ver_code;
 #define BNXT_FW_VER_CODE(maj, min, bld, rsv)			\
 	((u64)(maj) << 48 | (u64)(min) << 32 | (u64)(bld) << 16 | (rsv))
+#define BNXT_FW_MAJ(bp)		((bp)->fw_ver_code >> 48)
 
 	__be16			vxlan_port;
 	u8			vxlan_port_cnt;