aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/tg3.c27
-rw-r--r--drivers/net/tg3.h6
2 files changed, 30 insertions, 3 deletions
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c
index d4f5b58e1dd4..e6ed940d7714 100644
--- a/drivers/net/tg3.c
+++ b/drivers/net/tg3.c
@@ -221,6 +221,14 @@ static struct pci_device_id tg3_pci_tbl[] = {
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_5753F, 222 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753F,
223 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, 223 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
224 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754,
225 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
226 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754M,
227 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
228 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787,
229 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
230 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787M,
231 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
224 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714, 232 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714,
225 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, 233 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
226 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714S, 234 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714S,
@@ -4388,6 +4396,10 @@ static int tg3_chip_reset(struct tg3 *tp)
4388 tp->nvram_lock_cnt = 0; 4396 tp->nvram_lock_cnt = 0;
4389 } 4397 }
4390 4398
4399 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 ||
4400 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787)
4401 tw32(GRC_FASTBOOT_PC, 0);
4402
4391 /* 4403 /*
4392 * We must avoid the readl() that normally takes place. 4404 * We must avoid the readl() that normally takes place.
4393 * It locks machines, causes machine checks, and other 4405 * It locks machines, causes machine checks, and other
@@ -6018,6 +6030,10 @@ static int tg3_reset_hw(struct tg3 *tp)
6018 } 6030 }
6019 } 6031 }
6020 6032
6033 /* Enable host coalescing bug fix */
6034 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787)
6035 val |= (1 << 29);
6036
6021 tw32_f(WDMAC_MODE, val); 6037 tw32_f(WDMAC_MODE, val);
6022 udelay(40); 6038 udelay(40);
6023 6039
@@ -8326,6 +8342,9 @@ static void tg3_self_test(struct net_device *dev, struct ethtool_test *etest,
8326 if (!err) 8342 if (!err)
8327 tg3_nvram_unlock(tp); 8343 tg3_nvram_unlock(tp);
8328 8344
8345 if (tp->tg3_flags2 & TG3_FLG2_MII_SERDES)
8346 tg3_phy_reset(tp);
8347
8329 if (tg3_test_registers(tp) != 0) { 8348 if (tg3_test_registers(tp) != 0) {
8330 etest->flags |= ETH_TEST_FL_FAILED; 8349 etest->flags |= ETH_TEST_FL_FAILED;
8331 data[2] = 1; 8350 data[2] = 1;
@@ -9681,6 +9700,7 @@ static int __devinit tg3_get_invariants(struct tg3 *tp)
9681 9700
9682 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 || 9701 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 ||
9683 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 || 9702 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 ||
9703 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
9684 (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)) 9704 (tp->tg3_flags2 & TG3_FLG2_5780_CLASS))
9685 tp->tg3_flags2 |= TG3_FLG2_5750_PLUS; 9705 tp->tg3_flags2 |= TG3_FLG2_5750_PLUS;
9686 9706
@@ -9693,7 +9713,8 @@ static int __devinit tg3_get_invariants(struct tg3 *tp)
9693 9713
9694 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705 && 9714 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705 &&
9695 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5750 && 9715 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5750 &&
9696 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5752) 9716 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5752 &&
9717 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5787)
9697 tp->tg3_flags2 |= TG3_FLG2_JUMBO_CAPABLE; 9718 tp->tg3_flags2 |= TG3_FLG2_JUMBO_CAPABLE;
9698 9719
9699 if (pci_find_capability(tp->pdev, PCI_CAP_ID_EXP) != 0) 9720 if (pci_find_capability(tp->pdev, PCI_CAP_ID_EXP) != 0)
@@ -9903,7 +9924,8 @@ static int __devinit tg3_get_invariants(struct tg3 *tp)
9903 if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0) 9924 if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0)
9904 tp->tg3_flags2 |= TG3_FLG2_PHY_5704_A0_BUG; 9925 tp->tg3_flags2 |= TG3_FLG2_PHY_5704_A0_BUG;
9905 9926
9906 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) 9927 if ((tp->tg3_flags2 & TG3_FLG2_5705_PLUS) &&
9928 (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5787))
9907 tp->tg3_flags2 |= TG3_FLG2_PHY_BER_BUG; 9929 tp->tg3_flags2 |= TG3_FLG2_PHY_BER_BUG;
9908 9930
9909 tp->coalesce_mode = 0; 9931 tp->coalesce_mode = 0;
@@ -10628,6 +10650,7 @@ static char * __devinit tg3_phy_string(struct tg3 *tp)
10628 case PHY_ID_BCM5752: return "5752"; 10650 case PHY_ID_BCM5752: return "5752";
10629 case PHY_ID_BCM5714: return "5714"; 10651 case PHY_ID_BCM5714: return "5714";
10630 case PHY_ID_BCM5780: return "5780"; 10652 case PHY_ID_BCM5780: return "5780";
10653 case PHY_ID_BCM5787: return "5787";
10631 case PHY_ID_BCM8002: return "8002/serdes"; 10654 case PHY_ID_BCM8002: return "8002/serdes";
10632 case 0: return "serdes"; 10655 case 0: return "serdes";
10633 default: return "unknown"; 10656 default: return "unknown";
diff --git a/drivers/net/tg3.h b/drivers/net/tg3.h
index 7e3b613afb29..8d32fbe0d303 100644
--- a/drivers/net/tg3.h
+++ b/drivers/net/tg3.h
@@ -138,6 +138,7 @@
138#define ASIC_REV_5752 0x06 138#define ASIC_REV_5752 0x06
139#define ASIC_REV_5780 0x08 139#define ASIC_REV_5780 0x08
140#define ASIC_REV_5714 0x09 140#define ASIC_REV_5714 0x09
141#define ASIC_REV_5787 0x0b
141#define GET_CHIP_REV(CHIP_REV_ID) ((CHIP_REV_ID) >> 8) 142#define GET_CHIP_REV(CHIP_REV_ID) ((CHIP_REV_ID) >> 8)
142#define CHIPREV_5700_AX 0x70 143#define CHIPREV_5700_AX 0x70
143#define CHIPREV_5700_BX 0x71 144#define CHIPREV_5700_BX 0x71
@@ -1393,6 +1394,7 @@
1393#define GRC_MDI_CTRL 0x00006844 1394#define GRC_MDI_CTRL 0x00006844
1394#define GRC_SEEPROM_DELAY 0x00006848 1395#define GRC_SEEPROM_DELAY 0x00006848
1395/* 0x684c --> 0x6c00 unused */ 1396/* 0x684c --> 0x6c00 unused */
1397#define GRC_FASTBOOT_PC 0x00006894 /* 5752, 5755, 5787 */
1396 1398
1397/* 0x6c00 --> 0x7000 unused */ 1399/* 0x6c00 --> 0x7000 unused */
1398 1400
@@ -2247,6 +2249,7 @@ struct tg3 {
2247#define PHY_ID_BCM5752 0x60008100 2249#define PHY_ID_BCM5752 0x60008100
2248#define PHY_ID_BCM5714 0x60008340 2250#define PHY_ID_BCM5714 0x60008340
2249#define PHY_ID_BCM5780 0x60008350 2251#define PHY_ID_BCM5780 0x60008350
2252#define PHY_ID_BCM5787 0xbc050ce0
2250#define PHY_ID_BCM8002 0x60010140 2253#define PHY_ID_BCM8002 0x60010140
2251#define PHY_ID_INVALID 0xffffffff 2254#define PHY_ID_INVALID 0xffffffff
2252#define PHY_ID_REV_MASK 0x0000000f 2255#define PHY_ID_REV_MASK 0x0000000f
@@ -2271,7 +2274,8 @@ struct tg3 {
2271 (X) == PHY_ID_BCM5703 || (X) == PHY_ID_BCM5704 || \ 2274 (X) == PHY_ID_BCM5703 || (X) == PHY_ID_BCM5704 || \
2272 (X) == PHY_ID_BCM5705 || (X) == PHY_ID_BCM5750 || \ 2275 (X) == PHY_ID_BCM5705 || (X) == PHY_ID_BCM5750 || \
2273 (X) == PHY_ID_BCM5752 || (X) == PHY_ID_BCM5714 || \ 2276 (X) == PHY_ID_BCM5752 || (X) == PHY_ID_BCM5714 || \
2274 (X) == PHY_ID_BCM5780 || (X) == PHY_ID_BCM8002) 2277 (X) == PHY_ID_BCM5780 || (X) == PHY_ID_BCM5787 || \
2278 (X) == PHY_ID_BCM8002)
2275 2279
2276 struct tg3_hw_stats *hw_stats; 2280 struct tg3_hw_stats *hw_stats;
2277 dma_addr_t stats_mapping; 2281 dma_addr_t stats_mapping;