diff options
author | Michael Chan <mchan@broadcom.com> | 2005-10-26 18:46:52 -0400 |
---|---|---|
committer | Jeff Garzik <jgarzik@pobox.com> | 2005-10-28 16:07:29 -0400 |
commit | a4e2b347848bf626b822599329933887dc90e50f (patch) | |
tree | 414564393157868b8c6d708bfb2c750cf49b1f6b /drivers/net/tg3.c | |
parent | 5fadd053d9bb4345ec6f405d24db4e7eb49cf81e (diff) |
[PATCH] tg3: add 5714/5715 support
Add complete support for 5714/5715. These chips are very similar to
5780 so the changes are very trivial. A TG3_FLG2_5780_CLASS flag is
added to identify these chips.
Signed-off-by: Michael Chan <mchan@broadcom.com>
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
Diffstat (limited to 'drivers/net/tg3.c')
-rw-r--r-- | drivers/net/tg3.c | 39 |
1 files changed, 25 insertions, 14 deletions
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c index 1802c3b48799..cf2204f5b7f9 100644 --- a/drivers/net/tg3.c +++ b/drivers/net/tg3.c | |||
@@ -219,6 +219,10 @@ static struct pci_device_id tg3_pci_tbl[] = { | |||
219 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, | 219 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, |
220 | { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753F, | 220 | { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753F, |
221 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, | 221 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, |
222 | { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714, | ||
223 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, | ||
224 | { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715, | ||
225 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, | ||
222 | { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780, | 226 | { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780, |
223 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, | 227 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, |
224 | { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780S, | 228 | { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780S, |
@@ -570,7 +574,7 @@ static void tg3_switch_clocks(struct tg3 *tp) | |||
570 | u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL); | 574 | u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL); |
571 | u32 orig_clock_ctrl; | 575 | u32 orig_clock_ctrl; |
572 | 576 | ||
573 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) | 577 | if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS) |
574 | return; | 578 | return; |
575 | 579 | ||
576 | orig_clock_ctrl = clock_ctrl; | 580 | orig_clock_ctrl = clock_ctrl; |
@@ -1210,7 +1214,7 @@ static int tg3_set_power_state(struct tg3 *tp, int state) | |||
1210 | CLOCK_CTRL_ALTCLK | | 1214 | CLOCK_CTRL_ALTCLK | |
1211 | CLOCK_CTRL_PWRDOWN_PLL133); | 1215 | CLOCK_CTRL_PWRDOWN_PLL133); |
1212 | udelay(40); | 1216 | udelay(40); |
1213 | } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) { | 1217 | } else if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS) { |
1214 | /* do nothing */ | 1218 | /* do nothing */ |
1215 | } else if (!((tp->tg3_flags2 & TG3_FLG2_5750_PLUS) && | 1219 | } else if (!((tp->tg3_flags2 & TG3_FLG2_5750_PLUS) && |
1216 | (tp->tg3_flags & TG3_FLAG_ENABLE_ASF))) { | 1220 | (tp->tg3_flags & TG3_FLAG_ENABLE_ASF))) { |
@@ -3712,14 +3716,14 @@ static inline void tg3_set_mtu(struct net_device *dev, struct tg3 *tp, | |||
3712 | dev->mtu = new_mtu; | 3716 | dev->mtu = new_mtu; |
3713 | 3717 | ||
3714 | if (new_mtu > ETH_DATA_LEN) { | 3718 | if (new_mtu > ETH_DATA_LEN) { |
3715 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) { | 3719 | if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS) { |
3716 | tp->tg3_flags2 &= ~TG3_FLG2_TSO_CAPABLE; | 3720 | tp->tg3_flags2 &= ~TG3_FLG2_TSO_CAPABLE; |
3717 | ethtool_op_set_tso(dev, 0); | 3721 | ethtool_op_set_tso(dev, 0); |
3718 | } | 3722 | } |
3719 | else | 3723 | else |
3720 | tp->tg3_flags |= TG3_FLAG_JUMBO_RING_ENABLE; | 3724 | tp->tg3_flags |= TG3_FLAG_JUMBO_RING_ENABLE; |
3721 | } else { | 3725 | } else { |
3722 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) | 3726 | if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS) |
3723 | tp->tg3_flags2 |= TG3_FLG2_TSO_CAPABLE; | 3727 | tp->tg3_flags2 |= TG3_FLG2_TSO_CAPABLE; |
3724 | tp->tg3_flags &= ~TG3_FLAG_JUMBO_RING_ENABLE; | 3728 | tp->tg3_flags &= ~TG3_FLAG_JUMBO_RING_ENABLE; |
3725 | } | 3729 | } |
@@ -3850,7 +3854,7 @@ static void tg3_init_rings(struct tg3 *tp) | |||
3850 | memset(tp->tx_ring, 0, TG3_TX_RING_BYTES); | 3854 | memset(tp->tx_ring, 0, TG3_TX_RING_BYTES); |
3851 | 3855 | ||
3852 | tp->rx_pkt_buf_sz = RX_PKT_BUF_SZ; | 3856 | tp->rx_pkt_buf_sz = RX_PKT_BUF_SZ; |
3853 | if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) && | 3857 | if ((tp->tg3_flags2 & TG3_FLG2_5780_CLASS) && |
3854 | (tp->dev->mtu > ETH_DATA_LEN)) | 3858 | (tp->dev->mtu > ETH_DATA_LEN)) |
3855 | tp->rx_pkt_buf_sz = RX_JUMBO_PKT_BUF_SZ; | 3859 | tp->rx_pkt_buf_sz = RX_JUMBO_PKT_BUF_SZ; |
3856 | 3860 | ||
@@ -4347,7 +4351,7 @@ static int tg3_chip_reset(struct tg3 *tp) | |||
4347 | val &= ~PCIX_CAPS_RELAXED_ORDERING; | 4351 | val &= ~PCIX_CAPS_RELAXED_ORDERING; |
4348 | pci_write_config_dword(tp->pdev, TG3PCI_X_CAPS, val); | 4352 | pci_write_config_dword(tp->pdev, TG3PCI_X_CAPS, val); |
4349 | 4353 | ||
4350 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) { | 4354 | if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS) { |
4351 | u32 val; | 4355 | u32 val; |
4352 | 4356 | ||
4353 | /* Chip reset on 5780 will reset MSI enable bit, | 4357 | /* Chip reset on 5780 will reset MSI enable bit, |
@@ -6003,7 +6007,7 @@ static int tg3_reset_hw(struct tg3 *tp) | |||
6003 | tw32(MAC_RCV_VALUE_1, 0xffffffff & RCV_RULE_DISABLE_MASK); | 6007 | tw32(MAC_RCV_VALUE_1, 0xffffffff & RCV_RULE_DISABLE_MASK); |
6004 | 6008 | ||
6005 | if ((tp->tg3_flags2 & TG3_FLG2_5705_PLUS) && | 6009 | if ((tp->tg3_flags2 & TG3_FLG2_5705_PLUS) && |
6006 | (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5780)) | 6010 | !(tp->tg3_flags2 & TG3_FLG2_5780_CLASS)) |
6007 | limit = 8; | 6011 | limit = 8; |
6008 | else | 6012 | else |
6009 | limit = 16; | 6013 | limit = 16; |
@@ -7237,7 +7241,7 @@ static int tg3_get_settings(struct net_device *dev, struct ethtool_cmd *cmd) | |||
7237 | cmd->supported |= (SUPPORTED_1000baseT_Half | | 7241 | cmd->supported |= (SUPPORTED_1000baseT_Half | |
7238 | SUPPORTED_1000baseT_Full); | 7242 | SUPPORTED_1000baseT_Full); |
7239 | 7243 | ||
7240 | if (!(tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)) | 7244 | if (!(tp->tg3_flags2 & TG3_FLG2_ANY_SERDES)) |
7241 | cmd->supported |= (SUPPORTED_100baseT_Half | | 7245 | cmd->supported |= (SUPPORTED_100baseT_Half | |
7242 | SUPPORTED_100baseT_Full | | 7246 | SUPPORTED_100baseT_Full | |
7243 | SUPPORTED_10baseT_Half | | 7247 | SUPPORTED_10baseT_Half | |
@@ -8380,7 +8384,7 @@ static void __devinit tg3_get_nvram_info(struct tg3 *tp) | |||
8380 | } | 8384 | } |
8381 | 8385 | ||
8382 | if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) || | 8386 | if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) || |
8383 | (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780)) { | 8387 | (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)) { |
8384 | switch (nvcfg1 & NVRAM_CFG1_VENDOR_MASK) { | 8388 | switch (nvcfg1 & NVRAM_CFG1_VENDOR_MASK) { |
8385 | case FLASH_VENDOR_ATMEL_FLASH_BUFFERED: | 8389 | case FLASH_VENDOR_ATMEL_FLASH_BUFFERED: |
8386 | tp->nvram_jedecnum = JEDEC_ATMEL; | 8390 | tp->nvram_jedecnum = JEDEC_ATMEL; |
@@ -8980,7 +8984,7 @@ static void __devinit tg3_get_eeprom_hw_cfg(struct tg3 *tp) | |||
8980 | 8984 | ||
8981 | tp->phy_id = eeprom_phy_id; | 8985 | tp->phy_id = eeprom_phy_id; |
8982 | if (eeprom_phy_serdes) { | 8986 | if (eeprom_phy_serdes) { |
8983 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) | 8987 | if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS) |
8984 | tp->tg3_flags2 |= TG3_FLG2_MII_SERDES; | 8988 | tp->tg3_flags2 |= TG3_FLG2_MII_SERDES; |
8985 | else | 8989 | else |
8986 | tp->tg3_flags2 |= TG3_FLG2_PHY_SERDES; | 8990 | tp->tg3_flags2 |= TG3_FLG2_PHY_SERDES; |
@@ -9393,8 +9397,11 @@ static int __devinit tg3_get_invariants(struct tg3 *tp) | |||
9393 | } | 9397 | } |
9394 | 9398 | ||
9395 | /* Find msi capability. */ | 9399 | /* Find msi capability. */ |
9396 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) | 9400 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780 || |
9401 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) { | ||
9402 | tp->tg3_flags2 |= TG3_FLG2_5780_CLASS; | ||
9397 | tp->msi_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_MSI); | 9403 | tp->msi_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_MSI); |
9404 | } | ||
9398 | 9405 | ||
9399 | /* Initialize misc host control in PCI block. */ | 9406 | /* Initialize misc host control in PCI block. */ |
9400 | tp->misc_host_ctrl |= (misc_ctrl_reg & | 9407 | tp->misc_host_ctrl |= (misc_ctrl_reg & |
@@ -9412,7 +9419,7 @@ static int __devinit tg3_get_invariants(struct tg3 *tp) | |||
9412 | 9419 | ||
9413 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 || | 9420 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 || |
9414 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 || | 9421 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 || |
9415 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) | 9422 | (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)) |
9416 | tp->tg3_flags2 |= TG3_FLG2_5750_PLUS; | 9423 | tp->tg3_flags2 |= TG3_FLG2_5750_PLUS; |
9417 | 9424 | ||
9418 | if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) || | 9425 | if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) || |
@@ -9607,7 +9614,7 @@ static int __devinit tg3_get_invariants(struct tg3 *tp) | |||
9607 | * ether_setup() via the alloc_etherdev() call | 9614 | * ether_setup() via the alloc_etherdev() call |
9608 | */ | 9615 | */ |
9609 | if (tp->dev->mtu > ETH_DATA_LEN && | 9616 | if (tp->dev->mtu > ETH_DATA_LEN && |
9610 | GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5780) | 9617 | !(tp->tg3_flags2 & TG3_FLG2_5780_CLASS)) |
9611 | tp->tg3_flags |= TG3_FLAG_JUMBO_RING_ENABLE; | 9618 | tp->tg3_flags |= TG3_FLAG_JUMBO_RING_ENABLE; |
9612 | 9619 | ||
9613 | /* Determine WakeOnLan speed to use. */ | 9620 | /* Determine WakeOnLan speed to use. */ |
@@ -9830,7 +9837,7 @@ static int __devinit tg3_get_device_address(struct tg3 *tp) | |||
9830 | mac_offset = 0x7c; | 9837 | mac_offset = 0x7c; |
9831 | if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 && | 9838 | if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 && |
9832 | !(tp->tg3_flags & TG3_FLG2_SUN_570X)) || | 9839 | !(tp->tg3_flags & TG3_FLG2_SUN_570X)) || |
9833 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) { | 9840 | (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)) { |
9834 | if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID) | 9841 | if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID) |
9835 | mac_offset = 0xcc; | 9842 | mac_offset = 0xcc; |
9836 | if (tg3_nvram_lock(tp)) | 9843 | if (tg3_nvram_lock(tp)) |
@@ -10148,6 +10155,9 @@ static int __devinit tg3_test_dma(struct tg3 *tp) | |||
10148 | } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) { | 10155 | } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) { |
10149 | /* 5780 always in PCIX mode */ | 10156 | /* 5780 always in PCIX mode */ |
10150 | tp->dma_rwctrl |= 0x00144000; | 10157 | tp->dma_rwctrl |= 0x00144000; |
10158 | } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) { | ||
10159 | /* 5714 always in PCIX mode */ | ||
10160 | tp->dma_rwctrl |= 0x00148000; | ||
10151 | } else { | 10161 | } else { |
10152 | tp->dma_rwctrl |= 0x001b000f; | 10162 | tp->dma_rwctrl |= 0x001b000f; |
10153 | } | 10163 | } |
@@ -10347,6 +10357,7 @@ static char * __devinit tg3_phy_string(struct tg3 *tp) | |||
10347 | case PHY_ID_BCM5705: return "5705"; | 10357 | case PHY_ID_BCM5705: return "5705"; |
10348 | case PHY_ID_BCM5750: return "5750"; | 10358 | case PHY_ID_BCM5750: return "5750"; |
10349 | case PHY_ID_BCM5752: return "5752"; | 10359 | case PHY_ID_BCM5752: return "5752"; |
10360 | case PHY_ID_BCM5714: return "5714"; | ||
10350 | case PHY_ID_BCM5780: return "5780"; | 10361 | case PHY_ID_BCM5780: return "5780"; |
10351 | case PHY_ID_BCM8002: return "8002/serdes"; | 10362 | case PHY_ID_BCM8002: return "8002/serdes"; |
10352 | case 0: return "serdes"; | 10363 | case 0: return "serdes"; |