diff options
-rw-r--r-- | drivers/net/tg3.c | 35 | ||||
-rw-r--r-- | include/linux/pci_ids.h | 2 |
2 files changed, 36 insertions, 1 deletions
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c index 6c6c5498899f..b0de6b2754cc 100644 --- a/drivers/net/tg3.c +++ b/drivers/net/tg3.c | |||
@@ -223,8 +223,12 @@ static struct pci_device_id tg3_pci_tbl[] = { | |||
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_5714, | 224 | { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714, |
225 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, | 225 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, |
226 | { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714S, | ||
227 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, | ||
226 | { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715, | 228 | { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715, |
227 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, | 229 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, |
230 | { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715S, | ||
231 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, | ||
228 | { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780, | 232 | { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780, |
229 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, | 233 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, |
230 | { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780S, | 234 | { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780S, |
@@ -2680,6 +2684,12 @@ static int tg3_setup_fiber_mii_phy(struct tg3 *tp, int force_reset) | |||
2680 | 2684 | ||
2681 | err |= tg3_readphy(tp, MII_BMSR, &bmsr); | 2685 | err |= tg3_readphy(tp, MII_BMSR, &bmsr); |
2682 | err |= tg3_readphy(tp, MII_BMSR, &bmsr); | 2686 | err |= tg3_readphy(tp, MII_BMSR, &bmsr); |
2687 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) { | ||
2688 | if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP) | ||
2689 | bmsr |= BMSR_LSTATUS; | ||
2690 | else | ||
2691 | bmsr &= ~BMSR_LSTATUS; | ||
2692 | } | ||
2683 | 2693 | ||
2684 | err |= tg3_readphy(tp, MII_BMCR, &bmcr); | 2694 | err |= tg3_readphy(tp, MII_BMCR, &bmcr); |
2685 | 2695 | ||
@@ -2748,6 +2758,13 @@ static int tg3_setup_fiber_mii_phy(struct tg3 *tp, int force_reset) | |||
2748 | bmcr = new_bmcr; | 2758 | bmcr = new_bmcr; |
2749 | err |= tg3_readphy(tp, MII_BMSR, &bmsr); | 2759 | err |= tg3_readphy(tp, MII_BMSR, &bmsr); |
2750 | err |= tg3_readphy(tp, MII_BMSR, &bmsr); | 2760 | err |= tg3_readphy(tp, MII_BMSR, &bmsr); |
2761 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == | ||
2762 | ASIC_REV_5714) { | ||
2763 | if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP) | ||
2764 | bmsr |= BMSR_LSTATUS; | ||
2765 | else | ||
2766 | bmsr &= ~BMSR_LSTATUS; | ||
2767 | } | ||
2751 | tp->tg3_flags2 &= ~TG3_FLG2_PARALLEL_DETECT; | 2768 | tp->tg3_flags2 &= ~TG3_FLG2_PARALLEL_DETECT; |
2752 | } | 2769 | } |
2753 | } | 2770 | } |
@@ -5585,6 +5602,9 @@ static int tg3_reset_hw(struct tg3 *tp) | |||
5585 | tg3_abort_hw(tp, 1); | 5602 | tg3_abort_hw(tp, 1); |
5586 | } | 5603 | } |
5587 | 5604 | ||
5605 | if (tp->tg3_flags2 & TG3_FLG2_MII_SERDES) | ||
5606 | tg3_phy_reset(tp); | ||
5607 | |||
5588 | err = tg3_chip_reset(tp); | 5608 | err = tg3_chip_reset(tp); |
5589 | if (err) | 5609 | if (err) |
5590 | return err; | 5610 | return err; |
@@ -6097,6 +6117,17 @@ static int tg3_reset_hw(struct tg3 *tp) | |||
6097 | tp->tg3_flags2 |= TG3_FLG2_HW_AUTONEG; | 6117 | tp->tg3_flags2 |= TG3_FLG2_HW_AUTONEG; |
6098 | } | 6118 | } |
6099 | 6119 | ||
6120 | if ((tp->tg3_flags2 & TG3_FLG2_MII_SERDES) && | ||
6121 | (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714)) { | ||
6122 | u32 tmp; | ||
6123 | |||
6124 | tmp = tr32(SERDES_RX_CTRL); | ||
6125 | tw32(SERDES_RX_CTRL, tmp | SERDES_RX_SIG_DETECT); | ||
6126 | tp->grc_local_ctrl &= ~GRC_LCLCTRL_USE_EXT_SIG_DETECT; | ||
6127 | tp->grc_local_ctrl |= GRC_LCLCTRL_USE_SIG_DETECT; | ||
6128 | tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl); | ||
6129 | } | ||
6130 | |||
6100 | err = tg3_setup_phy(tp, 1); | 6131 | err = tg3_setup_phy(tp, 1); |
6101 | if (err) | 6132 | if (err) |
6102 | return err; | 6133 | return err; |
@@ -6476,7 +6507,9 @@ static int tg3_open(struct net_device *dev) | |||
6476 | 6507 | ||
6477 | if ((tp->tg3_flags2 & TG3_FLG2_5750_PLUS) && | 6508 | if ((tp->tg3_flags2 & TG3_FLG2_5750_PLUS) && |
6478 | (GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5750_AX) && | 6509 | (GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5750_AX) && |
6479 | (GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5750_BX)) { | 6510 | (GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5750_BX) && |
6511 | !((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) && | ||
6512 | (tp->pdev_peer == tp->pdev))) { | ||
6480 | /* All MSI supporting chips should support tagged | 6513 | /* All MSI supporting chips should support tagged |
6481 | * status. Assert that this is the case. | 6514 | * status. Assert that this is the case. |
6482 | */ | 6515 | */ |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index 751eea58bde8..a3a09cceb026 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
@@ -1857,12 +1857,14 @@ | |||
1857 | #define PCI_DEVICE_ID_TIGON3_5705M 0x165d | 1857 | #define PCI_DEVICE_ID_TIGON3_5705M 0x165d |
1858 | #define PCI_DEVICE_ID_TIGON3_5705M_2 0x165e | 1858 | #define PCI_DEVICE_ID_TIGON3_5705M_2 0x165e |
1859 | #define PCI_DEVICE_ID_TIGON3_5714 0x1668 | 1859 | #define PCI_DEVICE_ID_TIGON3_5714 0x1668 |
1860 | #define PCI_DEVICE_ID_TIGON3_5714S 0x1669 | ||
1860 | #define PCI_DEVICE_ID_TIGON3_5780 0x166a | 1861 | #define PCI_DEVICE_ID_TIGON3_5780 0x166a |
1861 | #define PCI_DEVICE_ID_TIGON3_5780S 0x166b | 1862 | #define PCI_DEVICE_ID_TIGON3_5780S 0x166b |
1862 | #define PCI_DEVICE_ID_TIGON3_5705F 0x166e | 1863 | #define PCI_DEVICE_ID_TIGON3_5705F 0x166e |
1863 | #define PCI_DEVICE_ID_TIGON3_5750 0x1676 | 1864 | #define PCI_DEVICE_ID_TIGON3_5750 0x1676 |
1864 | #define PCI_DEVICE_ID_TIGON3_5751 0x1677 | 1865 | #define PCI_DEVICE_ID_TIGON3_5751 0x1677 |
1865 | #define PCI_DEVICE_ID_TIGON3_5715 0x1678 | 1866 | #define PCI_DEVICE_ID_TIGON3_5715 0x1678 |
1867 | #define PCI_DEVICE_ID_TIGON3_5715S 0x1679 | ||
1866 | #define PCI_DEVICE_ID_TIGON3_5750M 0x167c | 1868 | #define PCI_DEVICE_ID_TIGON3_5750M 0x167c |
1867 | #define PCI_DEVICE_ID_TIGON3_5751M 0x167d | 1869 | #define PCI_DEVICE_ID_TIGON3_5751M 0x167d |
1868 | #define PCI_DEVICE_ID_TIGON3_5751F 0x167e | 1870 | #define PCI_DEVICE_ID_TIGON3_5751F 0x167e |