Re: [PATCH 1/13] cxgb3 - MAC workaround update

2007-08-13 Thread Jeff Garzik

Divy Le Ray wrote:

From: Divy Le Ray [EMAIL PROTECTED]

Update the MAC workaround to deal with switches that do not
honor pause frames.

Signed-off-by: Divy Le Ray [EMAIL PROTECTED]
---

 drivers/net/cxgb3/common.h |1 +
 drivers/net/cxgb3/xgmac.c  |   22 +++---
 2 files changed, 12 insertions(+), 11 deletions(-)


applied


-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 1/13] cxgb3 - MAC workaround update

2007-08-11 Thread Divy Le Ray
From: Divy Le Ray [EMAIL PROTECTED]

Update the MAC workaround to deal with switches that do not
honor pause frames.

Signed-off-by: Divy Le Ray [EMAIL PROTECTED]
---

 drivers/net/cxgb3/common.h |1 +
 drivers/net/cxgb3/xgmac.c  |   22 +++---
 2 files changed, 12 insertions(+), 11 deletions(-)

diff --git a/drivers/net/cxgb3/common.h b/drivers/net/cxgb3/common.h
index 1637800..c46c249 100644
--- a/drivers/net/cxgb3/common.h
+++ b/drivers/net/cxgb3/common.h
@@ -507,6 +507,7 @@ struct cmac {
unsigned int tx_xcnt;
u64 tx_mcnt;
unsigned int rx_xcnt;
+   unsigned int rx_ocnt;
u64 rx_mcnt;
unsigned int toggle_cnt;
unsigned int txen;
diff --git a/drivers/net/cxgb3/xgmac.c b/drivers/net/cxgb3/xgmac.c
index c302b1a..1d1c391 100644
--- a/drivers/net/cxgb3/xgmac.c
+++ b/drivers/net/cxgb3/xgmac.c
@@ -437,12 +437,13 @@ int t3_mac_enable(struct cmac *mac, int which)
struct mac_stats *s = mac-stats;

if (which  MAC_DIRECTION_TX) {
-   t3_write_reg(adap, A_XGM_TX_CTRL + oft, F_TXEN);
t3_write_reg(adap, A_TP_PIO_ADDR, A_TP_TX_DROP_CFG_CH0 + idx);
t3_write_reg(adap, A_TP_PIO_DATA, 0xc0ede401);
t3_write_reg(adap, A_TP_PIO_ADDR, A_TP_TX_DROP_MODE);
t3_set_reg_field(adap, A_TP_PIO_DATA, 1  idx, 1  idx);
 
+   t3_write_reg(adap, A_XGM_TX_CTRL + oft, F_TXEN);
+
t3_write_reg(adap, A_TP_PIO_ADDR, A_TP_TX_DROP_CNT_CH0 + idx);
mac-tx_mcnt = s-tx_frames;
mac-tx_tcnt = (G_TXDROPCNTCH0RCVD(t3_read_reg(adap,
@@ -454,6 +455,7 @@ int t3_mac_enable(struct cmac *mac, int which)
mac-rx_xcnt = (G_TXSPI4SOPCNT(t3_read_reg(adap,
A_XGM_RX_SPI4_SOP_EOP_CNT +
oft)));
+   mac-rx_ocnt = s-rx_fifo_ovfl;
mac-txen = F_TXEN;
mac-toggle_cnt = 0;
}
@@ -464,24 +466,19 @@ int t3_mac_enable(struct cmac *mac, int which)
 
 int t3_mac_disable(struct cmac *mac, int which)
 {
-   int idx = macidx(mac);
struct adapter *adap = mac-adapter;
-   int val;
 
if (which  MAC_DIRECTION_TX) {
t3_write_reg(adap, A_XGM_TX_CTRL + mac-offset, 0);
-   t3_write_reg(adap, A_TP_PIO_ADDR, A_TP_TX_DROP_CFG_CH0 + idx);
-   t3_write_reg(adap, A_TP_PIO_DATA, 0xc01f);
-   t3_write_reg(adap, A_TP_PIO_ADDR, A_TP_TX_DROP_MODE);
-   t3_set_reg_field(adap, A_TP_PIO_DATA, 1  idx, 1  idx);
mac-txen = 0;
}
if (which  MAC_DIRECTION_RX) {
+   int val = F_MAC_RESET_;
+
t3_set_reg_field(mac-adapter, A_XGM_RESET_CTRL + mac-offset,
 F_PCS_RESET_, 0);
msleep(100);
t3_write_reg(adap, A_XGM_RX_CTRL + mac-offset, 0);
-   val = F_MAC_RESET_;
if (is_10G(adap))
val |= F_PCS_RESET_;
else if (uses_xaui(adap))
@@ -541,11 +538,14 @@ int t3b2_mac_watchdog_task(struct cmac *mac)
}
 
 rxcheck:
-   if (rx_mcnt != mac-rx_mcnt)
+   if (rx_mcnt != mac-rx_mcnt) {
rx_xcnt = (G_TXSPI4SOPCNT(t3_read_reg(adap,
A_XGM_RX_SPI4_SOP_EOP_CNT +
-   mac-offset)));
-   else
+   mac-offset))) +
+   (s-rx_fifo_ovfl -
+mac-rx_ocnt);
+   mac-rx_ocnt = s-rx_fifo_ovfl;
+   } else
goto out;
 
if (mac-rx_mcnt != s-rx_frames  rx_xcnt == 0 
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html