diff options
author | Ben Hutchings <bhutchings@solarflare.com> | 2009-11-28 00:35:09 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-11-29 02:58:52 -0500 |
commit | fb45f2c154be470ad950bcf16f3662ec0ca48695 (patch) | |
tree | ad737364a12db15a08ba3f8e5f2152a6dabd4dce /drivers/net/sfc | |
parent | b895d73e9836fccc402e48a8f63e6805d2edc87b (diff) |
sfc: Limit some hardware workarounds to Falcon
Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/sfc')
-rw-r--r-- | drivers/net/sfc/ethtool.c | 2 | ||||
-rw-r--r-- | drivers/net/sfc/workarounds.h | 5 |
2 files changed, 4 insertions, 3 deletions
diff --git a/drivers/net/sfc/ethtool.c b/drivers/net/sfc/ethtool.c index bb9abf24f545..6515b8a4b38b 100644 --- a/drivers/net/sfc/ethtool.c +++ b/drivers/net/sfc/ethtool.c | |||
@@ -683,7 +683,7 @@ static int efx_ethtool_set_pauseparam(struct net_device *net_dev, | |||
683 | * and fix it be cycling transmit flow control on this end. */ | 683 | * and fix it be cycling transmit flow control on this end. */ |
684 | reset = (wanted_fc & EFX_FC_TX) && !(efx->wanted_fc & EFX_FC_TX); | 684 | reset = (wanted_fc & EFX_FC_TX) && !(efx->wanted_fc & EFX_FC_TX); |
685 | if (EFX_WORKAROUND_11482(efx) && reset) { | 685 | if (EFX_WORKAROUND_11482(efx) && reset) { |
686 | if (falcon_rev(efx) >= FALCON_REV_B0) { | 686 | if (falcon_rev(efx) == FALCON_REV_B0) { |
687 | /* Recover by resetting the EM block */ | 687 | /* Recover by resetting the EM block */ |
688 | if (efx->link_state.up) | 688 | if (efx->link_state.up) |
689 | falcon_drain_tx_fifo(efx); | 689 | falcon_drain_tx_fifo(efx); |
diff --git a/drivers/net/sfc/workarounds.h b/drivers/net/sfc/workarounds.h index 325029949488..84e579e40b88 100644 --- a/drivers/net/sfc/workarounds.h +++ b/drivers/net/sfc/workarounds.h | |||
@@ -17,6 +17,7 @@ | |||
17 | 17 | ||
18 | #define EFX_WORKAROUND_ALWAYS(efx) 1 | 18 | #define EFX_WORKAROUND_ALWAYS(efx) 1 |
19 | #define EFX_WORKAROUND_FALCON_A(efx) (falcon_rev(efx) <= FALCON_REV_A1) | 19 | #define EFX_WORKAROUND_FALCON_A(efx) (falcon_rev(efx) <= FALCON_REV_A1) |
20 | #define EFX_WORKAROUND_FALCON_AB(efx) (falcon_rev(efx) <= FALCON_REV_B0) | ||
20 | #define EFX_WORKAROUND_10G(efx) EFX_IS10G(efx) | 21 | #define EFX_WORKAROUND_10G(efx) EFX_IS10G(efx) |
21 | #define EFX_WORKAROUND_SFT9001(efx) ((efx)->phy_type == PHY_TYPE_SFT9001A || \ | 22 | #define EFX_WORKAROUND_SFT9001(efx) ((efx)->phy_type == PHY_TYPE_SFT9001A || \ |
22 | (efx)->phy_type == PHY_TYPE_SFT9001B) | 23 | (efx)->phy_type == PHY_TYPE_SFT9001B) |
@@ -33,11 +34,11 @@ | |||
33 | * or a PCIe error (bug 11028) */ | 34 | * or a PCIe error (bug 11028) */ |
34 | #define EFX_WORKAROUND_10727 EFX_WORKAROUND_ALWAYS | 35 | #define EFX_WORKAROUND_10727 EFX_WORKAROUND_ALWAYS |
35 | /* Transmit flow control may get disabled */ | 36 | /* Transmit flow control may get disabled */ |
36 | #define EFX_WORKAROUND_11482 EFX_WORKAROUND_ALWAYS | 37 | #define EFX_WORKAROUND_11482 EFX_WORKAROUND_FALCON_AB |
37 | /* Flush events can take a very long time to appear */ | 38 | /* Flush events can take a very long time to appear */ |
38 | #define EFX_WORKAROUND_11557 EFX_WORKAROUND_ALWAYS | 39 | #define EFX_WORKAROUND_11557 EFX_WORKAROUND_ALWAYS |
39 | /* Truncated IPv4 packets can confuse the TX packet parser */ | 40 | /* Truncated IPv4 packets can confuse the TX packet parser */ |
40 | #define EFX_WORKAROUND_15592 EFX_WORKAROUND_ALWAYS | 41 | #define EFX_WORKAROUND_15592 EFX_WORKAROUND_FALCON_AB |
41 | 42 | ||
42 | /* Spurious parity errors in TSORT buffers */ | 43 | /* Spurious parity errors in TSORT buffers */ |
43 | #define EFX_WORKAROUND_5129 EFX_WORKAROUND_FALCON_A | 44 | #define EFX_WORKAROUND_5129 EFX_WORKAROUND_FALCON_A |