diff options
author | Divy Le Ray <divy@chelsio.com> | 2007-09-05 18:58:20 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2007-10-10 19:51:04 -0400 |
commit | b4687ff753c2c5c330989efed7cdf1a6bc6b512e (patch) | |
tree | 0fdce28a3da7a32c114edacd6cf3be85f823f054 /drivers/net/cxgb3/xgmac.c | |
parent | 3eea3337a08a2ed2addac1551a9d446f2c16acd5 (diff) |
cxgb3 - remove false positive in xgmac workaround
Qualify toggling of xgmac tx enable with not getting pause frames,
we might not make forward progress because the peer is sending
lots of pause frames.
Signed-off-by: Divy Le Ray <divy@chelsio.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/net/cxgb3/xgmac.c')
-rw-r--r-- | drivers/net/cxgb3/xgmac.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/net/cxgb3/xgmac.c b/drivers/net/cxgb3/xgmac.c index 1d1c3919ab66..ff9e9dcbd87d 100644 --- a/drivers/net/cxgb3/xgmac.c +++ b/drivers/net/cxgb3/xgmac.c | |||
@@ -452,6 +452,7 @@ int t3_mac_enable(struct cmac *mac, int which) | |||
452 | A_XGM_TX_SPI4_SOP_EOP_CNT + | 452 | A_XGM_TX_SPI4_SOP_EOP_CNT + |
453 | oft))); | 453 | oft))); |
454 | mac->rx_mcnt = s->rx_frames; | 454 | mac->rx_mcnt = s->rx_frames; |
455 | mac->rx_pause = s->rx_pause; | ||
455 | mac->rx_xcnt = (G_TXSPI4SOPCNT(t3_read_reg(adap, | 456 | mac->rx_xcnt = (G_TXSPI4SOPCNT(t3_read_reg(adap, |
456 | A_XGM_RX_SPI4_SOP_EOP_CNT + | 457 | A_XGM_RX_SPI4_SOP_EOP_CNT + |
457 | oft))); | 458 | oft))); |
@@ -504,7 +505,7 @@ int t3b2_mac_watchdog_task(struct cmac *mac) | |||
504 | tx_xcnt = 1; /* By default tx_xcnt is making progress */ | 505 | tx_xcnt = 1; /* By default tx_xcnt is making progress */ |
505 | tx_tcnt = mac->tx_tcnt; /* If tx_mcnt is progressing ignore tx_tcnt */ | 506 | tx_tcnt = mac->tx_tcnt; /* If tx_mcnt is progressing ignore tx_tcnt */ |
506 | rx_xcnt = 1; /* By default rx_xcnt is making progress */ | 507 | rx_xcnt = 1; /* By default rx_xcnt is making progress */ |
507 | if (tx_mcnt == mac->tx_mcnt) { | 508 | if (tx_mcnt == mac->tx_mcnt && mac->rx_pause == s->rx_pause) { |
508 | tx_xcnt = (G_TXSPI4SOPCNT(t3_read_reg(adap, | 509 | tx_xcnt = (G_TXSPI4SOPCNT(t3_read_reg(adap, |
509 | A_XGM_TX_SPI4_SOP_EOP_CNT + | 510 | A_XGM_TX_SPI4_SOP_EOP_CNT + |
510 | mac->offset))); | 511 | mac->offset))); |
@@ -560,6 +561,7 @@ out: | |||
560 | mac->tx_mcnt = s->tx_frames; | 561 | mac->tx_mcnt = s->tx_frames; |
561 | mac->rx_xcnt = rx_xcnt; | 562 | mac->rx_xcnt = rx_xcnt; |
562 | mac->rx_mcnt = s->rx_frames; | 563 | mac->rx_mcnt = s->rx_frames; |
564 | mac->rx_pause = s->rx_pause; | ||
563 | if (status == 1) { | 565 | if (status == 1) { |
564 | t3_write_reg(adap, A_XGM_TX_CTRL + mac->offset, 0); | 566 | t3_write_reg(adap, A_XGM_TX_CTRL + mac->offset, 0); |
565 | t3_read_reg(adap, A_XGM_TX_CTRL + mac->offset); /* flush */ | 567 | t3_read_reg(adap, A_XGM_TX_CTRL + mac->offset); /* flush */ |