aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorStephen Hemminger <shemminger@linux-foundation.org>2007-11-21 17:55:26 -0500
committerJeff Garzik <jeff@garzik.org>2007-11-23 22:09:01 -0500
commit8b31cfbcd1b54362ef06c85beb40e65a349169a2 (patch)
tree51314ceaf05a61127af0872a69e7e84b387e63a6 /drivers/net
parent58dd8258fccbb68e0d0e1898038442822cb833c0 (diff)
sky2: disable rx checksum on Yukon XL
The Marvell Yukon XL chipset appears to have a hardware glitch where it will repeat the checksum of the last packet. Of course, this is timing sensitive and only happens sometimes... More info: http://bugzilla.kernel.org/show_bug.cgi?id=9381 As a workaround just disable hardware checksumming by default on this chip version. The earlier workaround for PCIX, dual port was also on Yukon XL so don't need to disable checksumming there. Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org> Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/sky2.c6
1 files changed, 1 insertions, 5 deletions
diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c
index a2070db725c9..8c4c7430d906 100644
--- a/drivers/net/sky2.c
+++ b/drivers/net/sky2.c
@@ -1320,15 +1320,11 @@ static int sky2_up(struct net_device *dev)
1320 */ 1320 */
1321 if (otherdev && netif_running(otherdev) && 1321 if (otherdev && netif_running(otherdev) &&
1322 (cap = pci_find_capability(hw->pdev, PCI_CAP_ID_PCIX))) { 1322 (cap = pci_find_capability(hw->pdev, PCI_CAP_ID_PCIX))) {
1323 struct sky2_port *osky2 = netdev_priv(otherdev);
1324 u16 cmd; 1323 u16 cmd;
1325 1324
1326 pci_read_config_word(hw->pdev, cap + PCI_X_CMD, &cmd); 1325 pci_read_config_word(hw->pdev, cap + PCI_X_CMD, &cmd);
1327 cmd &= ~PCI_X_CMD_MAX_SPLIT; 1326 cmd &= ~PCI_X_CMD_MAX_SPLIT;
1328 pci_write_config_word(hw->pdev, cap + PCI_X_CMD, cmd); 1327 pci_write_config_word(hw->pdev, cap + PCI_X_CMD, cmd);
1329
1330 sky2->rx_csum = 0;
1331 osky2->rx_csum = 0;
1332 } 1328 }
1333 1329
1334 if (netif_msg_ifup(sky2)) 1330 if (netif_msg_ifup(sky2))
@@ -4013,7 +4009,7 @@ static __devinit struct net_device *sky2_init_netdev(struct sky2_hw *hw,
4013 sky2->duplex = -1; 4009 sky2->duplex = -1;
4014 sky2->speed = -1; 4010 sky2->speed = -1;
4015 sky2->advertising = sky2_supported_modes(hw); 4011 sky2->advertising = sky2_supported_modes(hw);
4016 sky2->rx_csum = 1; 4012 sky2->rx_csum = (hw->chip_id != CHIP_ID_YUKON_XL);
4017 sky2->wol = wol; 4013 sky2->wol = wol;
4018 4014
4019 spin_lock_init(&sky2->phy_lock); 4015 spin_lock_init(&sky2->phy_lock);