aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/tg3.c21
-rw-r--r--drivers/net/tg3.h9
2 files changed, 22 insertions, 8 deletions
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c
index 4f9fbe268ec9..482b7df55247 100644
--- a/drivers/net/tg3.c
+++ b/drivers/net/tg3.c
@@ -595,7 +595,8 @@ static void tg3_switch_clocks(struct tg3 *tp)
595 u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL); 595 u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL);
596 u32 orig_clock_ctrl; 596 u32 orig_clock_ctrl;
597 597
598 if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS) 598 if ((tp->tg3_flags & TG3_FLAG_CPMU_PRESENT) ||
599 (tp->tg3_flags2 & TG3_FLG2_5780_CLASS))
599 return; 600 return;
600 601
601 orig_clock_ctrl = clock_ctrl; 602 orig_clock_ctrl = clock_ctrl;
@@ -1400,6 +1401,7 @@ static int tg3_set_power_state(struct tg3 *tp, pci_power_t state)
1400 tw32_wait_f(TG3PCI_CLOCK_CTRL, base_val | CLOCK_CTRL_ALTCLK | 1401 tw32_wait_f(TG3PCI_CLOCK_CTRL, base_val | CLOCK_CTRL_ALTCLK |
1401 CLOCK_CTRL_PWRDOWN_PLL133, 40); 1402 CLOCK_CTRL_PWRDOWN_PLL133, 40);
1402 } else if ((tp->tg3_flags2 & TG3_FLG2_5780_CLASS) || 1403 } else if ((tp->tg3_flags2 & TG3_FLG2_5780_CLASS) ||
1404 (tp->tg3_flags & TG3_FLAG_CPMU_PRESENT) ||
1403 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)) { 1405 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)) {
1404 /* do nothing */ 1406 /* do nothing */
1405 } else if (!((tp->tg3_flags2 & TG3_FLG2_5750_PLUS) && 1407 } else if (!((tp->tg3_flags2 & TG3_FLG2_5750_PLUS) &&
@@ -6147,11 +6149,13 @@ static int tg3_reset_hw(struct tg3 *tp, int reset_phy)
6147 /* This works around an issue with Athlon chipsets on 6149 /* This works around an issue with Athlon chipsets on
6148 * B3 tigon3 silicon. This bit has no effect on any 6150 * B3 tigon3 silicon. This bit has no effect on any
6149 * other revision. But do not set this on PCI Express 6151 * other revision. But do not set this on PCI Express
6150 * chips. 6152 * chips and don't even touch the clocks if the CPMU is present.
6151 */ 6153 */
6152 if (!(tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS)) 6154 if (!(tp->tg3_flags & TG3_FLAG_CPMU_PRESENT)) {
6153 tp->pci_clock_ctrl |= CLOCK_CTRL_DELAY_PCI_GRANT; 6155 if (!(tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS))
6154 tw32_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl); 6156 tp->pci_clock_ctrl |= CLOCK_CTRL_DELAY_PCI_GRANT;
6157 tw32_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl);
6158 }
6155 6159
6156 if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0 && 6160 if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0 &&
6157 (tp->tg3_flags & TG3_FLAG_PCIX_MODE)) { 6161 (tp->tg3_flags & TG3_FLAG_PCIX_MODE)) {
@@ -10527,6 +10531,13 @@ static int __devinit tg3_get_invariants(struct tg3 *tp)
10527 10531
10528 tp->pci_chip_rev_id = (misc_ctrl_reg >> 10532 tp->pci_chip_rev_id = (misc_ctrl_reg >>
10529 MISC_HOST_CTRL_CHIPREV_SHIFT); 10533 MISC_HOST_CTRL_CHIPREV_SHIFT);
10534 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_USE_PROD_ID_REG) {
10535 u32 prod_id_asic_rev;
10536
10537 pci_read_config_dword(tp->pdev, TG3PCI_PRODID_ASICREV,
10538 &prod_id_asic_rev);
10539 tp->pci_chip_rev_id = prod_id_asic_rev & PROD_ID_ASIC_REV_MASK;
10540 }
10530 10541
10531 /* Wrong chip ID in 5752 A0. This code can be removed later 10542 /* Wrong chip ID in 5752 A0. This code can be removed later
10532 * as A0 is not in production. 10543 * as A0 is not in production.
diff --git a/drivers/net/tg3.h b/drivers/net/tg3.h
index c4f845dd1e8b..79ce68cf836b 100644
--- a/drivers/net/tg3.h
+++ b/drivers/net/tg3.h
@@ -121,6 +121,7 @@
121#define ASIC_REV_5755 0x0a 121#define ASIC_REV_5755 0x0a
122#define ASIC_REV_5787 0x0b 122#define ASIC_REV_5787 0x0b
123#define ASIC_REV_5906 0x0c 123#define ASIC_REV_5906 0x0c
124#define ASIC_REV_USE_PROD_ID_REG 0x0f
124#define GET_CHIP_REV(CHIP_REV_ID) ((CHIP_REV_ID) >> 8) 125#define GET_CHIP_REV(CHIP_REV_ID) ((CHIP_REV_ID) >> 8)
125#define CHIPREV_5700_AX 0x70 126#define CHIPREV_5700_AX 0x70
126#define CHIPREV_5700_BX 0x71 127#define CHIPREV_5700_BX 0x71
@@ -214,7 +215,9 @@
214#define TG3PCI_DUAL_MAC_CTRL 0x000000b8 215#define TG3PCI_DUAL_MAC_CTRL 0x000000b8
215#define DUAL_MAC_CTRL_CH_MASK 0x00000003 216#define DUAL_MAC_CTRL_CH_MASK 0x00000003
216#define DUAL_MAC_CTRL_ID 0x00000004 217#define DUAL_MAC_CTRL_ID 0x00000004
217/* 0xbc --> 0x100 unused */ 218#define TG3PCI_PRODID_ASICREV 0x000000bc
219#define PROD_ID_ASIC_REV_MASK 0x0fffffff
220/* 0xc0 --> 0x100 unused */
218 221
219/* 0x100 --> 0x200 unused */ 222/* 0x100 --> 0x200 unused */
220 223
@@ -2213,7 +2216,7 @@ struct tg3 {
2213#define TG3_FLAG_JUMBO_RING_ENABLE 0x00800000 2216#define TG3_FLAG_JUMBO_RING_ENABLE 0x00800000
2214#define TG3_FLAG_10_100_ONLY 0x01000000 2217#define TG3_FLAG_10_100_ONLY 0x01000000
2215#define TG3_FLAG_PAUSE_AUTONEG 0x02000000 2218#define TG3_FLAG_PAUSE_AUTONEG 0x02000000
2216 2219#define TG3_FLAG_CPMU_PRESENT 0x04000000
2217#define TG3_FLAG_40BIT_DMA_BUG 0x08000000 2220#define TG3_FLAG_40BIT_DMA_BUG 0x08000000
2218#define TG3_FLAG_BROKEN_CHECKSUMS 0x10000000 2221#define TG3_FLAG_BROKEN_CHECKSUMS 0x10000000
2219#define TG3_FLAG_SUPPORT_MSI 0x20000000 2222#define TG3_FLAG_SUPPORT_MSI 0x20000000
@@ -2285,7 +2288,7 @@ struct tg3 {
2285 u32 pwrmgmt_thresh; 2288 u32 pwrmgmt_thresh;
2286 2289
2287 /* PCI block */ 2290 /* PCI block */
2288 u16 pci_chip_rev_id; 2291 u32 pci_chip_rev_id;
2289 u8 pci_cacheline_sz; 2292 u8 pci_cacheline_sz;
2290 u8 pci_lat_timer; 2293 u8 pci_lat_timer;
2291 u8 pci_hdr_type; 2294 u8 pci_hdr_type;