[BNX2]: Workaround hw interrupt bug
Add workaround for a hardware interrupt issue. When using INTA, unmasking of the interrupt and the tag update should be done separately to avoid some spurious interrupts, Signed-off-by: Michael Chan <mchan@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ade2bfe7d1
commit
1269a8a64a
1 changed files with 17 additions and 2 deletions
|
@ -315,6 +315,10 @@ bnx2_enable_int(struct bnx2 *bp)
|
||||||
{
|
{
|
||||||
u32 val;
|
u32 val;
|
||||||
|
|
||||||
|
REG_WR(bp, BNX2_PCICFG_INT_ACK_CMD,
|
||||||
|
BNX2_PCICFG_INT_ACK_CMD_INDEX_VALID |
|
||||||
|
BNX2_PCICFG_INT_ACK_CMD_MASK_INT | bp->last_status_idx);
|
||||||
|
|
||||||
REG_WR(bp, BNX2_PCICFG_INT_ACK_CMD,
|
REG_WR(bp, BNX2_PCICFG_INT_ACK_CMD,
|
||||||
BNX2_PCICFG_INT_ACK_CMD_INDEX_VALID | bp->last_status_idx);
|
BNX2_PCICFG_INT_ACK_CMD_INDEX_VALID | bp->last_status_idx);
|
||||||
|
|
||||||
|
@ -1892,9 +1896,20 @@ bnx2_poll(struct net_device *dev, int *budget)
|
||||||
|
|
||||||
if (!bnx2_has_work(bp)) {
|
if (!bnx2_has_work(bp)) {
|
||||||
netif_rx_complete(dev);
|
netif_rx_complete(dev);
|
||||||
|
if (likely(bp->flags & USING_MSI_FLAG)) {
|
||||||
|
REG_WR(bp, BNX2_PCICFG_INT_ACK_CMD,
|
||||||
|
BNX2_PCICFG_INT_ACK_CMD_INDEX_VALID |
|
||||||
|
bp->last_status_idx);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
REG_WR(bp, BNX2_PCICFG_INT_ACK_CMD,
|
REG_WR(bp, BNX2_PCICFG_INT_ACK_CMD,
|
||||||
BNX2_PCICFG_INT_ACK_CMD_INDEX_VALID |
|
BNX2_PCICFG_INT_ACK_CMD_INDEX_VALID |
|
||||||
bp->last_status_idx);
|
BNX2_PCICFG_INT_ACK_CMD_MASK_INT |
|
||||||
|
bp->last_status_idx);
|
||||||
|
|
||||||
|
REG_WR(bp, BNX2_PCICFG_INT_ACK_CMD,
|
||||||
|
BNX2_PCICFG_INT_ACK_CMD_INDEX_VALID |
|
||||||
|
bp->last_status_idx);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue