提交 d25f5a67 编写于 作者: S Stephen Hemminger 提交者: Jeff Garzik

[PATCH] skge: handle Tx/Rx arbiter timeout

Need to handle receive and transmit packet arbiter timeouts.
Transmit arbiter timeouts happens when Gigabit sends to 100Mbit port
on same switch and pause occurs.
Signed-off-by: NStephen Hemminger <shemminger@osdl.org>
上级 7e676d91
...@@ -2731,6 +2731,24 @@ static irqreturn_t skge_intr(int irq, void *dev_id, struct pt_regs *regs) ...@@ -2731,6 +2731,24 @@ static irqreturn_t skge_intr(int irq, void *dev_id, struct pt_regs *regs)
if (status & IS_XA2_F) if (status & IS_XA2_F)
skge_tx_intr(hw->dev[1]); skge_tx_intr(hw->dev[1]);
if (status & IS_PA_TO_RX1) {
struct skge_port *skge = netdev_priv(hw->dev[0]);
++skge->net_stats.rx_over_errors;
skge_write16(hw, B3_PA_CTRL, PA_CLR_TO_RX1);
}
if (status & IS_PA_TO_RX2) {
struct skge_port *skge = netdev_priv(hw->dev[1]);
++skge->net_stats.rx_over_errors;
skge_write16(hw, B3_PA_CTRL, PA_CLR_TO_RX2);
}
if (status & IS_PA_TO_TX1)
skge_write16(hw, B3_PA_CTRL, PA_CLR_TO_TX1);
if (status & IS_PA_TO_TX2)
skge_write16(hw, B3_PA_CTRL, PA_CLR_TO_TX2);
if (status & IS_MAC1) if (status & IS_MAC1)
skge_mac_intr(hw, 0); skge_mac_intr(hw, 0);
......
...@@ -203,8 +203,11 @@ enum { ...@@ -203,8 +203,11 @@ enum {
IS_XA2_F = 1<<1, /* Q_XA2 End of Frame */ IS_XA2_F = 1<<1, /* Q_XA2 End of Frame */
IS_XA2_C = 1<<0, /* Q_XA2 Encoding Error */ IS_XA2_C = 1<<0, /* Q_XA2 Encoding Error */
IS_PORT_1 = IS_XA1_F| IS_R1_F| IS_MAC1, IS_TO_PORT1 = IS_PA_TO_RX1 | IS_PA_TO_TX1,
IS_PORT_2 = IS_XA2_F| IS_R2_F| IS_MAC2, IS_TO_PORT2 = IS_PA_TO_RX2 | IS_PA_TO_TX2,
IS_PORT_1 = IS_XA1_F| IS_R1_F | IS_TO_PORT1 | IS_MAC1,
IS_PORT_2 = IS_XA2_F| IS_R2_F | IS_TO_PORT2 | IS_MAC2,
}; };
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册