diff options
Diffstat (limited to 'drivers/net/tg3.c')
-rw-r--r-- | drivers/net/tg3.c | 91 |
1 files changed, 61 insertions, 30 deletions
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c index 1802c3b48799..1828a6bf8458 100644 --- a/drivers/net/tg3.c +++ b/drivers/net/tg3.c | |||
@@ -37,6 +37,7 @@ | |||
37 | #include <linux/tcp.h> | 37 | #include <linux/tcp.h> |
38 | #include <linux/workqueue.h> | 38 | #include <linux/workqueue.h> |
39 | #include <linux/prefetch.h> | 39 | #include <linux/prefetch.h> |
40 | #include <linux/dma-mapping.h> | ||
40 | 41 | ||
41 | #include <net/checksum.h> | 42 | #include <net/checksum.h> |
42 | 43 | ||
@@ -67,8 +68,8 @@ | |||
67 | 68 | ||
68 | #define DRV_MODULE_NAME "tg3" | 69 | #define DRV_MODULE_NAME "tg3" |
69 | #define PFX DRV_MODULE_NAME ": " | 70 | #define PFX DRV_MODULE_NAME ": " |
70 | #define DRV_MODULE_VERSION "3.42" | 71 | #define DRV_MODULE_VERSION "3.43" |
71 | #define DRV_MODULE_RELDATE "Oct 3, 2005" | 72 | #define DRV_MODULE_RELDATE "Oct 24, 2005" |
72 | 73 | ||
73 | #define TG3_DEF_MAC_MODE 0 | 74 | #define TG3_DEF_MAC_MODE 0 |
74 | #define TG3_DEF_RX_MODE 0 | 75 | #define TG3_DEF_RX_MODE 0 |
@@ -219,6 +220,10 @@ static struct pci_device_id tg3_pci_tbl[] = { | |||
219 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, | 220 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, |
220 | { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753F, | 221 | { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753F, |
221 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, | 222 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, |
223 | { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714, | ||
224 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, | ||
225 | { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715, | ||
226 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, | ||
222 | { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780, | 227 | { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780, |
223 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, | 228 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, |
224 | { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780S, | 229 | { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780S, |
@@ -466,6 +471,15 @@ static void tg3_write_mem(struct tg3 *tp, u32 off, u32 val) | |||
466 | spin_unlock_irqrestore(&tp->indirect_lock, flags); | 471 | spin_unlock_irqrestore(&tp->indirect_lock, flags); |
467 | } | 472 | } |
468 | 473 | ||
474 | static void tg3_write_mem_fast(struct tg3 *tp, u32 off, u32 val) | ||
475 | { | ||
476 | /* If no workaround is needed, write to mem space directly */ | ||
477 | if (tp->write32 != tg3_write_indirect_reg32) | ||
478 | tw32(NIC_SRAM_WIN_BASE + off, val); | ||
479 | else | ||
480 | tg3_write_mem(tp, off, val); | ||
481 | } | ||
482 | |||
469 | static void tg3_read_mem(struct tg3 *tp, u32 off, u32 *val) | 483 | static void tg3_read_mem(struct tg3 *tp, u32 off, u32 *val) |
470 | { | 484 | { |
471 | unsigned long flags; | 485 | unsigned long flags; |
@@ -570,7 +584,7 @@ static void tg3_switch_clocks(struct tg3 *tp) | |||
570 | u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL); | 584 | u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL); |
571 | u32 orig_clock_ctrl; | 585 | u32 orig_clock_ctrl; |
572 | 586 | ||
573 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) | 587 | if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS) |
574 | return; | 588 | return; |
575 | 589 | ||
576 | orig_clock_ctrl = clock_ctrl; | 590 | orig_clock_ctrl = clock_ctrl; |
@@ -1210,7 +1224,7 @@ static int tg3_set_power_state(struct tg3 *tp, int state) | |||
1210 | CLOCK_CTRL_ALTCLK | | 1224 | CLOCK_CTRL_ALTCLK | |
1211 | CLOCK_CTRL_PWRDOWN_PLL133); | 1225 | CLOCK_CTRL_PWRDOWN_PLL133); |
1212 | udelay(40); | 1226 | udelay(40); |
1213 | } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) { | 1227 | } else if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS) { |
1214 | /* do nothing */ | 1228 | /* do nothing */ |
1215 | } else if (!((tp->tg3_flags2 & TG3_FLG2_5750_PLUS) && | 1229 | } else if (!((tp->tg3_flags2 & TG3_FLG2_5750_PLUS) && |
1216 | (tp->tg3_flags & TG3_FLAG_ENABLE_ASF))) { | 1230 | (tp->tg3_flags & TG3_FLAG_ENABLE_ASF))) { |
@@ -3712,14 +3726,14 @@ static inline void tg3_set_mtu(struct net_device *dev, struct tg3 *tp, | |||
3712 | dev->mtu = new_mtu; | 3726 | dev->mtu = new_mtu; |
3713 | 3727 | ||
3714 | if (new_mtu > ETH_DATA_LEN) { | 3728 | if (new_mtu > ETH_DATA_LEN) { |
3715 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) { | 3729 | if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS) { |
3716 | tp->tg3_flags2 &= ~TG3_FLG2_TSO_CAPABLE; | 3730 | tp->tg3_flags2 &= ~TG3_FLG2_TSO_CAPABLE; |
3717 | ethtool_op_set_tso(dev, 0); | 3731 | ethtool_op_set_tso(dev, 0); |
3718 | } | 3732 | } |
3719 | else | 3733 | else |
3720 | tp->tg3_flags |= TG3_FLAG_JUMBO_RING_ENABLE; | 3734 | tp->tg3_flags |= TG3_FLAG_JUMBO_RING_ENABLE; |
3721 | } else { | 3735 | } else { |
3722 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) | 3736 | if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS) |
3723 | tp->tg3_flags2 |= TG3_FLG2_TSO_CAPABLE; | 3737 | tp->tg3_flags2 |= TG3_FLG2_TSO_CAPABLE; |
3724 | tp->tg3_flags &= ~TG3_FLAG_JUMBO_RING_ENABLE; | 3738 | tp->tg3_flags &= ~TG3_FLAG_JUMBO_RING_ENABLE; |
3725 | } | 3739 | } |
@@ -3850,7 +3864,7 @@ static void tg3_init_rings(struct tg3 *tp) | |||
3850 | memset(tp->tx_ring, 0, TG3_TX_RING_BYTES); | 3864 | memset(tp->tx_ring, 0, TG3_TX_RING_BYTES); |
3851 | 3865 | ||
3852 | tp->rx_pkt_buf_sz = RX_PKT_BUF_SZ; | 3866 | tp->rx_pkt_buf_sz = RX_PKT_BUF_SZ; |
3853 | if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) && | 3867 | if ((tp->tg3_flags2 & TG3_FLG2_5780_CLASS) && |
3854 | (tp->dev->mtu > ETH_DATA_LEN)) | 3868 | (tp->dev->mtu > ETH_DATA_LEN)) |
3855 | tp->rx_pkt_buf_sz = RX_JUMBO_PKT_BUF_SZ; | 3869 | tp->rx_pkt_buf_sz = RX_JUMBO_PKT_BUF_SZ; |
3856 | 3870 | ||
@@ -3905,10 +3919,8 @@ static void tg3_init_rings(struct tg3 *tp) | |||
3905 | */ | 3919 | */ |
3906 | static void tg3_free_consistent(struct tg3 *tp) | 3920 | static void tg3_free_consistent(struct tg3 *tp) |
3907 | { | 3921 | { |
3908 | if (tp->rx_std_buffers) { | 3922 | kfree(tp->rx_std_buffers); |
3909 | kfree(tp->rx_std_buffers); | 3923 | tp->rx_std_buffers = NULL; |
3910 | tp->rx_std_buffers = NULL; | ||
3911 | } | ||
3912 | if (tp->rx_std) { | 3924 | if (tp->rx_std) { |
3913 | pci_free_consistent(tp->pdev, TG3_RX_RING_BYTES, | 3925 | pci_free_consistent(tp->pdev, TG3_RX_RING_BYTES, |
3914 | tp->rx_std, tp->rx_std_mapping); | 3926 | tp->rx_std, tp->rx_std_mapping); |
@@ -4347,7 +4359,7 @@ static int tg3_chip_reset(struct tg3 *tp) | |||
4347 | val &= ~PCIX_CAPS_RELAXED_ORDERING; | 4359 | val &= ~PCIX_CAPS_RELAXED_ORDERING; |
4348 | pci_write_config_dword(tp->pdev, TG3PCI_X_CAPS, val); | 4360 | pci_write_config_dword(tp->pdev, TG3PCI_X_CAPS, val); |
4349 | 4361 | ||
4350 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) { | 4362 | if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS) { |
4351 | u32 val; | 4363 | u32 val; |
4352 | 4364 | ||
4353 | /* Chip reset on 5780 will reset MSI enable bit, | 4365 | /* Chip reset on 5780 will reset MSI enable bit, |
@@ -6003,7 +6015,7 @@ static int tg3_reset_hw(struct tg3 *tp) | |||
6003 | tw32(MAC_RCV_VALUE_1, 0xffffffff & RCV_RULE_DISABLE_MASK); | 6015 | tw32(MAC_RCV_VALUE_1, 0xffffffff & RCV_RULE_DISABLE_MASK); |
6004 | 6016 | ||
6005 | if ((tp->tg3_flags2 & TG3_FLG2_5705_PLUS) && | 6017 | if ((tp->tg3_flags2 & TG3_FLG2_5705_PLUS) && |
6006 | (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5780)) | 6018 | !(tp->tg3_flags2 & TG3_FLG2_5780_CLASS)) |
6007 | limit = 8; | 6019 | limit = 8; |
6008 | else | 6020 | else |
6009 | limit = 16; | 6021 | limit = 16; |
@@ -6191,14 +6203,16 @@ static void tg3_timer(unsigned long __opaque) | |||
6191 | tp->timer_counter = tp->timer_multiplier; | 6203 | tp->timer_counter = tp->timer_multiplier; |
6192 | } | 6204 | } |
6193 | 6205 | ||
6194 | /* Heartbeat is only sent once every 120 seconds. */ | 6206 | /* Heartbeat is only sent once every 2 seconds. */ |
6195 | if (!--tp->asf_counter) { | 6207 | if (!--tp->asf_counter) { |
6196 | if (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) { | 6208 | if (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) { |
6197 | u32 val; | 6209 | u32 val; |
6198 | 6210 | ||
6199 | tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_ALIVE); | 6211 | tg3_write_mem_fast(tp, NIC_SRAM_FW_CMD_MBOX, |
6200 | tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 4); | 6212 | FWCMD_NICDRV_ALIVE2); |
6201 | tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX, 3); | 6213 | tg3_write_mem_fast(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 4); |
6214 | /* 5 seconds timeout */ | ||
6215 | tg3_write_mem_fast(tp, NIC_SRAM_FW_CMD_DATA_MBOX, 5); | ||
6202 | val = tr32(GRC_RX_CPU_EVENT); | 6216 | val = tr32(GRC_RX_CPU_EVENT); |
6203 | val |= (1 << 14); | 6217 | val |= (1 << 14); |
6204 | tw32(GRC_RX_CPU_EVENT, val); | 6218 | tw32(GRC_RX_CPU_EVENT, val); |
@@ -6409,7 +6423,7 @@ static int tg3_open(struct net_device *dev) | |||
6409 | tp->timer_counter = tp->timer_multiplier = | 6423 | tp->timer_counter = tp->timer_multiplier = |
6410 | (HZ / tp->timer_offset); | 6424 | (HZ / tp->timer_offset); |
6411 | tp->asf_counter = tp->asf_multiplier = | 6425 | tp->asf_counter = tp->asf_multiplier = |
6412 | ((HZ / tp->timer_offset) * 120); | 6426 | ((HZ / tp->timer_offset) * 2); |
6413 | 6427 | ||
6414 | init_timer(&tp->timer); | 6428 | init_timer(&tp->timer); |
6415 | tp->timer.expires = jiffies + tp->timer_offset; | 6429 | tp->timer.expires = jiffies + tp->timer_offset; |
@@ -7237,7 +7251,7 @@ static int tg3_get_settings(struct net_device *dev, struct ethtool_cmd *cmd) | |||
7237 | cmd->supported |= (SUPPORTED_1000baseT_Half | | 7251 | cmd->supported |= (SUPPORTED_1000baseT_Half | |
7238 | SUPPORTED_1000baseT_Full); | 7252 | SUPPORTED_1000baseT_Full); |
7239 | 7253 | ||
7240 | if (!(tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)) | 7254 | if (!(tp->tg3_flags2 & TG3_FLG2_ANY_SERDES)) |
7241 | cmd->supported |= (SUPPORTED_100baseT_Half | | 7255 | cmd->supported |= (SUPPORTED_100baseT_Half | |
7242 | SUPPORTED_100baseT_Full | | 7256 | SUPPORTED_100baseT_Full | |
7243 | SUPPORTED_10baseT_Half | | 7257 | SUPPORTED_10baseT_Half | |
@@ -7264,7 +7278,7 @@ static int tg3_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) | |||
7264 | { | 7278 | { |
7265 | struct tg3 *tp = netdev_priv(dev); | 7279 | struct tg3 *tp = netdev_priv(dev); |
7266 | 7280 | ||
7267 | if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) { | 7281 | if (tp->tg3_flags2 & TG3_FLG2_ANY_SERDES) { |
7268 | /* These are the only valid advertisement bits allowed. */ | 7282 | /* These are the only valid advertisement bits allowed. */ |
7269 | if (cmd->autoneg == AUTONEG_ENABLE && | 7283 | if (cmd->autoneg == AUTONEG_ENABLE && |
7270 | (cmd->advertising & ~(ADVERTISED_1000baseT_Half | | 7284 | (cmd->advertising & ~(ADVERTISED_1000baseT_Half | |
@@ -7272,7 +7286,17 @@ static int tg3_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) | |||
7272 | ADVERTISED_Autoneg | | 7286 | ADVERTISED_Autoneg | |
7273 | ADVERTISED_FIBRE))) | 7287 | ADVERTISED_FIBRE))) |
7274 | return -EINVAL; | 7288 | return -EINVAL; |
7275 | } | 7289 | /* Fiber can only do SPEED_1000. */ |
7290 | else if ((cmd->autoneg != AUTONEG_ENABLE) && | ||
7291 | (cmd->speed != SPEED_1000)) | ||
7292 | return -EINVAL; | ||
7293 | /* Copper cannot force SPEED_1000. */ | ||
7294 | } else if ((cmd->autoneg != AUTONEG_ENABLE) && | ||
7295 | (cmd->speed == SPEED_1000)) | ||
7296 | return -EINVAL; | ||
7297 | else if ((cmd->speed == SPEED_1000) && | ||
7298 | (tp->tg3_flags2 & TG3_FLAG_10_100_ONLY)) | ||
7299 | return -EINVAL; | ||
7276 | 7300 | ||
7277 | tg3_full_lock(tp, 0); | 7301 | tg3_full_lock(tp, 0); |
7278 | 7302 | ||
@@ -8380,7 +8404,7 @@ static void __devinit tg3_get_nvram_info(struct tg3 *tp) | |||
8380 | } | 8404 | } |
8381 | 8405 | ||
8382 | if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) || | 8406 | if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) || |
8383 | (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780)) { | 8407 | (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)) { |
8384 | switch (nvcfg1 & NVRAM_CFG1_VENDOR_MASK) { | 8408 | switch (nvcfg1 & NVRAM_CFG1_VENDOR_MASK) { |
8385 | case FLASH_VENDOR_ATMEL_FLASH_BUFFERED: | 8409 | case FLASH_VENDOR_ATMEL_FLASH_BUFFERED: |
8386 | tp->nvram_jedecnum = JEDEC_ATMEL; | 8410 | tp->nvram_jedecnum = JEDEC_ATMEL; |
@@ -8980,7 +9004,7 @@ static void __devinit tg3_get_eeprom_hw_cfg(struct tg3 *tp) | |||
8980 | 9004 | ||
8981 | tp->phy_id = eeprom_phy_id; | 9005 | tp->phy_id = eeprom_phy_id; |
8982 | if (eeprom_phy_serdes) { | 9006 | if (eeprom_phy_serdes) { |
8983 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) | 9007 | if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS) |
8984 | tp->tg3_flags2 |= TG3_FLG2_MII_SERDES; | 9008 | tp->tg3_flags2 |= TG3_FLG2_MII_SERDES; |
8985 | else | 9009 | else |
8986 | tp->tg3_flags2 |= TG3_FLG2_PHY_SERDES; | 9010 | tp->tg3_flags2 |= TG3_FLG2_PHY_SERDES; |
@@ -9393,8 +9417,11 @@ static int __devinit tg3_get_invariants(struct tg3 *tp) | |||
9393 | } | 9417 | } |
9394 | 9418 | ||
9395 | /* Find msi capability. */ | 9419 | /* Find msi capability. */ |
9396 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) | 9420 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780 || |
9421 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) { | ||
9422 | tp->tg3_flags2 |= TG3_FLG2_5780_CLASS; | ||
9397 | tp->msi_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_MSI); | 9423 | tp->msi_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_MSI); |
9424 | } | ||
9398 | 9425 | ||
9399 | /* Initialize misc host control in PCI block. */ | 9426 | /* Initialize misc host control in PCI block. */ |
9400 | tp->misc_host_ctrl |= (misc_ctrl_reg & | 9427 | tp->misc_host_ctrl |= (misc_ctrl_reg & |
@@ -9412,7 +9439,7 @@ static int __devinit tg3_get_invariants(struct tg3 *tp) | |||
9412 | 9439 | ||
9413 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 || | 9440 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 || |
9414 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 || | 9441 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 || |
9415 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) | 9442 | (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)) |
9416 | tp->tg3_flags2 |= TG3_FLG2_5750_PLUS; | 9443 | tp->tg3_flags2 |= TG3_FLG2_5750_PLUS; |
9417 | 9444 | ||
9418 | if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) || | 9445 | if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) || |
@@ -9607,7 +9634,7 @@ static int __devinit tg3_get_invariants(struct tg3 *tp) | |||
9607 | * ether_setup() via the alloc_etherdev() call | 9634 | * ether_setup() via the alloc_etherdev() call |
9608 | */ | 9635 | */ |
9609 | if (tp->dev->mtu > ETH_DATA_LEN && | 9636 | if (tp->dev->mtu > ETH_DATA_LEN && |
9610 | GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5780) | 9637 | !(tp->tg3_flags2 & TG3_FLG2_5780_CLASS)) |
9611 | tp->tg3_flags |= TG3_FLAG_JUMBO_RING_ENABLE; | 9638 | tp->tg3_flags |= TG3_FLAG_JUMBO_RING_ENABLE; |
9612 | 9639 | ||
9613 | /* Determine WakeOnLan speed to use. */ | 9640 | /* Determine WakeOnLan speed to use. */ |
@@ -9830,7 +9857,7 @@ static int __devinit tg3_get_device_address(struct tg3 *tp) | |||
9830 | mac_offset = 0x7c; | 9857 | mac_offset = 0x7c; |
9831 | if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 && | 9858 | if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 && |
9832 | !(tp->tg3_flags & TG3_FLG2_SUN_570X)) || | 9859 | !(tp->tg3_flags & TG3_FLG2_SUN_570X)) || |
9833 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) { | 9860 | (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)) { |
9834 | if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID) | 9861 | if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID) |
9835 | mac_offset = 0xcc; | 9862 | mac_offset = 0xcc; |
9836 | if (tg3_nvram_lock(tp)) | 9863 | if (tg3_nvram_lock(tp)) |
@@ -10148,6 +10175,9 @@ static int __devinit tg3_test_dma(struct tg3 *tp) | |||
10148 | } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) { | 10175 | } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) { |
10149 | /* 5780 always in PCIX mode */ | 10176 | /* 5780 always in PCIX mode */ |
10150 | tp->dma_rwctrl |= 0x00144000; | 10177 | tp->dma_rwctrl |= 0x00144000; |
10178 | } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) { | ||
10179 | /* 5714 always in PCIX mode */ | ||
10180 | tp->dma_rwctrl |= 0x00148000; | ||
10151 | } else { | 10181 | } else { |
10152 | tp->dma_rwctrl |= 0x001b000f; | 10182 | tp->dma_rwctrl |= 0x001b000f; |
10153 | } | 10183 | } |
@@ -10347,6 +10377,7 @@ static char * __devinit tg3_phy_string(struct tg3 *tp) | |||
10347 | case PHY_ID_BCM5705: return "5705"; | 10377 | case PHY_ID_BCM5705: return "5705"; |
10348 | case PHY_ID_BCM5750: return "5750"; | 10378 | case PHY_ID_BCM5750: return "5750"; |
10349 | case PHY_ID_BCM5752: return "5752"; | 10379 | case PHY_ID_BCM5752: return "5752"; |
10380 | case PHY_ID_BCM5714: return "5714"; | ||
10350 | case PHY_ID_BCM5780: return "5780"; | 10381 | case PHY_ID_BCM5780: return "5780"; |
10351 | case PHY_ID_BCM8002: return "8002/serdes"; | 10382 | case PHY_ID_BCM8002: return "8002/serdes"; |
10352 | case 0: return "serdes"; | 10383 | case 0: return "serdes"; |
@@ -10492,17 +10523,17 @@ static int __devinit tg3_init_one(struct pci_dev *pdev, | |||
10492 | } | 10523 | } |
10493 | 10524 | ||
10494 | /* Configure DMA attributes. */ | 10525 | /* Configure DMA attributes. */ |
10495 | err = pci_set_dma_mask(pdev, 0xffffffffffffffffULL); | 10526 | err = pci_set_dma_mask(pdev, DMA_64BIT_MASK); |
10496 | if (!err) { | 10527 | if (!err) { |
10497 | pci_using_dac = 1; | 10528 | pci_using_dac = 1; |
10498 | err = pci_set_consistent_dma_mask(pdev, 0xffffffffffffffffULL); | 10529 | err = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK); |
10499 | if (err < 0) { | 10530 | if (err < 0) { |
10500 | printk(KERN_ERR PFX "Unable to obtain 64 bit DMA " | 10531 | printk(KERN_ERR PFX "Unable to obtain 64 bit DMA " |
10501 | "for consistent allocations\n"); | 10532 | "for consistent allocations\n"); |
10502 | goto err_out_free_res; | 10533 | goto err_out_free_res; |
10503 | } | 10534 | } |
10504 | } else { | 10535 | } else { |
10505 | err = pci_set_dma_mask(pdev, 0xffffffffULL); | 10536 | err = pci_set_dma_mask(pdev, DMA_32BIT_MASK); |
10506 | if (err) { | 10537 | if (err) { |
10507 | printk(KERN_ERR PFX "No usable DMA configuration, " | 10538 | printk(KERN_ERR PFX "No usable DMA configuration, " |
10508 | "aborting.\n"); | 10539 | "aborting.\n"); |