1 From af2a09446e793fe72da3a2689d0139bb7e62fe44 Mon Sep 17 00:00:00 2001
2 From: Michael Chan <michael.chan@broadcom.com>
3 Date: Mon, 8 Apr 2019 17:39:55 -0400
4 Subject: bnxt_en: Reset device on RX buffer errors.
6 [ Upstream commit 8e44e96c6c8e8fb80b84a2ca11798a8554f710f2 ]
8 If the RX completion indicates RX buffers errors, the RX ring will be
9 disabled by firmware and no packets will be received on that ring from
10 that point on. Recover by resetting the device.
12 Fixes: c0c050c58d84 ("bnxt_en: New Broadcom ethernet driver.")
13 Signed-off-by: Michael Chan <michael.chan@broadcom.com>
14 Signed-off-by: David S. Miller <davem@davemloft.net>
15 Signed-off-by: Sasha Levin <sashal@kernel.org>
17 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 6 ++++++
18 1 file changed, 6 insertions(+)
20 diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
21 index 351417e74ae2..40ca339ec3df 100644
22 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
23 +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
24 @@ -1610,11 +1610,17 @@ static int bnxt_rx_pkt(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,
27 if (rxcmp1->rx_cmp_cfa_code_errors_v2 & RX_CMP_L2_ERRORS) {
28 + u32 rx_err = le32_to_cpu(rxcmp1->rx_cmp_cfa_code_errors_v2);
30 bnxt_reuse_rx_data(rxr, cons, data);
32 bnxt_reuse_rx_agg_bufs(cpr, cp_cons, agg_bufs);
35 + if (rx_err & RX_CMPL_ERRORS_BUFFER_ERROR_MASK) {
36 + netdev_warn(bp->dev, "RX buffer error %x\n", rx_err);
37 + bnxt_sched_reset(bp, rxr);