aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Chan <michael.chan@broadcom.com>2019-04-08 17:39:55 -0400
committerDavid S. Miller <davem@davemloft.net>2019-04-08 19:39:41 -0400
commit8e44e96c6c8e8fb80b84a2ca11798a8554f710f2 (patch)
tree7b1eb914a292614696493cd4c802a504a6c52320
parenta1b0e4e684e9c300b9e759b46cb7a0147e61ddff (diff)
bnxt_en: Reset device on RX buffer errors.
If the RX completion indicates RX buffers errors, the RX ring will be disabled by firmware and no packets will be received on that ring from that point on. Recover by resetting the device. Fixes: c0c050c58d84 ("bnxt_en: New Broadcom ethernet driver.") Signed-off-by: Michael Chan <michael.chan@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/broadcom/bnxt/bnxt.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index 3df847b7079f..4c586ba4364b 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -1614,11 +1614,17 @@ static int bnxt_rx_pkt(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,
1614 1614
1615 rx_buf->data = NULL; 1615 rx_buf->data = NULL;
1616 if (rxcmp1->rx_cmp_cfa_code_errors_v2 & RX_CMP_L2_ERRORS) { 1616 if (rxcmp1->rx_cmp_cfa_code_errors_v2 & RX_CMP_L2_ERRORS) {
1617 u32 rx_err = le32_to_cpu(rxcmp1->rx_cmp_cfa_code_errors_v2);
1618
1617 bnxt_reuse_rx_data(rxr, cons, data); 1619 bnxt_reuse_rx_data(rxr, cons, data);
1618 if (agg_bufs) 1620 if (agg_bufs)
1619 bnxt_reuse_rx_agg_bufs(cpr, cp_cons, agg_bufs); 1621 bnxt_reuse_rx_agg_bufs(cpr, cp_cons, agg_bufs);
1620 1622
1621 rc = -EIO; 1623 rc = -EIO;
1624 if (rx_err & RX_CMPL_ERRORS_BUFFER_ERROR_MASK) {
1625 netdev_warn(bp->dev, "RX buffer error %x\n", rx_err);
1626 bnxt_sched_reset(bp, rxr);
1627 }
1622 goto next_rx; 1628 goto next_rx;
1623 } 1629 }
1624 1630