diff options
author | Michael Chan <mchan@broadcom.com> | 2006-09-27 19:09:25 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2006-09-28 21:01:41 -0400 |
commit | 715116a12610b67c1d301a9b845ce95f7247dad3 (patch) | |
tree | 1f9b680e4cfc32cc7759b82481f104eae6e22f24 /drivers/net | |
parent | b5d3772ccbe0bc5ac8ffbb5356b74ca698aee28c (diff) |
[TG3]: Add 5709 PHY support.
Add support for the 5709 10/100 PHY.
Signed-off-by: Michael Chan <mchan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/tg3.c | 37 | ||||
-rw-r--r-- | drivers/net/tg3.h | 6 |
2 files changed, 39 insertions, 4 deletions
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c index 2b062d776511..23f5744bdffa 100644 --- a/drivers/net/tg3.c +++ b/drivers/net/tg3.c | |||
@@ -1035,6 +1035,24 @@ out: | |||
1035 | phy_reg | MII_TG3_EXT_CTRL_FIFO_ELASTIC); | 1035 | phy_reg | MII_TG3_EXT_CTRL_FIFO_ELASTIC); |
1036 | } | 1036 | } |
1037 | 1037 | ||
1038 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { | ||
1039 | u32 phy_reg; | ||
1040 | |||
1041 | /* adjust output voltage */ | ||
1042 | tg3_writephy(tp, MII_TG3_EPHY_PTEST, 0x12); | ||
1043 | |||
1044 | if (!tg3_readphy(tp, MII_TG3_EPHY_TEST, &phy_reg)) { | ||
1045 | u32 phy_reg2; | ||
1046 | |||
1047 | tg3_writephy(tp, MII_TG3_EPHY_TEST, | ||
1048 | phy_reg | MII_TG3_EPHY_SHADOW_EN); | ||
1049 | /* Enable auto-MDIX */ | ||
1050 | if (!tg3_readphy(tp, 0x10, &phy_reg2)) | ||
1051 | tg3_writephy(tp, 0x10, phy_reg2 | 0x4000); | ||
1052 | tg3_writephy(tp, MII_TG3_EPHY_TEST, phy_reg); | ||
1053 | } | ||
1054 | } | ||
1055 | |||
1038 | tg3_phy_set_wirespeed(tp); | 1056 | tg3_phy_set_wirespeed(tp); |
1039 | return 0; | 1057 | return 0; |
1040 | } | 1058 | } |
@@ -1151,8 +1169,11 @@ static void tg3_power_down_phy(struct tg3 *tp) | |||
1151 | if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) | 1169 | if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) |
1152 | return; | 1170 | return; |
1153 | 1171 | ||
1154 | tg3_writephy(tp, MII_TG3_EXT_CTRL, MII_TG3_EXT_CTRL_FORCE_LED_OFF); | 1172 | if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5906) { |
1155 | tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x01b2); | 1173 | tg3_writephy(tp, MII_TG3_EXT_CTRL, |
1174 | MII_TG3_EXT_CTRL_FORCE_LED_OFF); | ||
1175 | tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x01b2); | ||
1176 | } | ||
1156 | 1177 | ||
1157 | /* The PHY should not be powered down on some chips because | 1178 | /* The PHY should not be powered down on some chips because |
1158 | * of bugs. | 1179 | * of bugs. |
@@ -1505,6 +1526,13 @@ static void tg3_aux_stat_to_speed_duplex(struct tg3 *tp, u32 val, u16 *speed, u8 | |||
1505 | break; | 1526 | break; |
1506 | 1527 | ||
1507 | default: | 1528 | default: |
1529 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { | ||
1530 | *speed = (val & MII_TG3_AUX_STAT_100) ? SPEED_100 : | ||
1531 | SPEED_10; | ||
1532 | *duplex = (val & MII_TG3_AUX_STAT_FULL) ? DUPLEX_FULL : | ||
1533 | DUPLEX_HALF; | ||
1534 | break; | ||
1535 | } | ||
1508 | *speed = SPEED_INVALID; | 1536 | *speed = SPEED_INVALID; |
1509 | *duplex = DUPLEX_INVALID; | 1537 | *duplex = DUPLEX_INVALID; |
1510 | break; | 1538 | break; |
@@ -1787,7 +1815,7 @@ static int tg3_setup_copper_phy(struct tg3 *tp, int force_reset) | |||
1787 | 1815 | ||
1788 | if (tp->tg3_flags & TG3_FLAG_USE_MI_INTERRUPT) | 1816 | if (tp->tg3_flags & TG3_FLAG_USE_MI_INTERRUPT) |
1789 | tg3_writephy(tp, MII_TG3_IMASK, ~MII_TG3_INT_LINKCHG); | 1817 | tg3_writephy(tp, MII_TG3_IMASK, ~MII_TG3_INT_LINKCHG); |
1790 | else | 1818 | else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5906) |
1791 | tg3_writephy(tp, MII_TG3_IMASK, ~0); | 1819 | tg3_writephy(tp, MII_TG3_IMASK, ~0); |
1792 | 1820 | ||
1793 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || | 1821 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || |
@@ -6552,7 +6580,8 @@ static int tg3_reset_hw(struct tg3 *tp, int reset_phy) | |||
6552 | if (err) | 6580 | if (err) |
6553 | return err; | 6581 | return err; |
6554 | 6582 | ||
6555 | if (!(tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)) { | 6583 | if (!(tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) && |
6584 | GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5906) { | ||
6556 | u32 tmp; | 6585 | u32 tmp; |
6557 | 6586 | ||
6558 | /* Clear CRC stats. */ | 6587 | /* Clear CRC stats. */ |
diff --git a/drivers/net/tg3.h b/drivers/net/tg3.h index 2f5e00c96016..9259d12fabd9 100644 --- a/drivers/net/tg3.h +++ b/drivers/net/tg3.h | |||
@@ -1624,6 +1624,7 @@ | |||
1624 | #define MII_TG3_DSP_RW_PORT 0x15 /* DSP coefficient read/write port */ | 1624 | #define MII_TG3_DSP_RW_PORT 0x15 /* DSP coefficient read/write port */ |
1625 | 1625 | ||
1626 | #define MII_TG3_DSP_ADDRESS 0x17 /* DSP address register */ | 1626 | #define MII_TG3_DSP_ADDRESS 0x17 /* DSP address register */ |
1627 | #define MII_TG3_EPHY_PTEST 0x17 /* 5906 PHY register */ | ||
1627 | 1628 | ||
1628 | #define MII_TG3_AUX_CTRL 0x18 /* auxilliary control register */ | 1629 | #define MII_TG3_AUX_CTRL 0x18 /* auxilliary control register */ |
1629 | 1630 | ||
@@ -1637,6 +1638,8 @@ | |||
1637 | #define MII_TG3_AUX_STAT_100FULL 0x0500 | 1638 | #define MII_TG3_AUX_STAT_100FULL 0x0500 |
1638 | #define MII_TG3_AUX_STAT_1000HALF 0x0600 | 1639 | #define MII_TG3_AUX_STAT_1000HALF 0x0600 |
1639 | #define MII_TG3_AUX_STAT_1000FULL 0x0700 | 1640 | #define MII_TG3_AUX_STAT_1000FULL 0x0700 |
1641 | #define MII_TG3_AUX_STAT_100 0x0008 | ||
1642 | #define MII_TG3_AUX_STAT_FULL 0x0001 | ||
1640 | 1643 | ||
1641 | #define MII_TG3_ISTAT 0x1a /* IRQ status register */ | 1644 | #define MII_TG3_ISTAT 0x1a /* IRQ status register */ |
1642 | #define MII_TG3_IMASK 0x1b /* IRQ mask register */ | 1645 | #define MII_TG3_IMASK 0x1b /* IRQ mask register */ |
@@ -1647,6 +1650,9 @@ | |||
1647 | #define MII_TG3_INT_DUPLEXCHG 0x0008 | 1650 | #define MII_TG3_INT_DUPLEXCHG 0x0008 |
1648 | #define MII_TG3_INT_ANEG_PAGE_RX 0x0400 | 1651 | #define MII_TG3_INT_ANEG_PAGE_RX 0x0400 |
1649 | 1652 | ||
1653 | #define MII_TG3_EPHY_TEST 0x1f /* 5906 PHY register */ | ||
1654 | #define MII_TG3_EPHY_SHADOW_EN 0x80 | ||
1655 | |||
1650 | /* There are two ways to manage the TX descriptors on the tigon3. | 1656 | /* There are two ways to manage the TX descriptors on the tigon3. |
1651 | * Either the descriptors are in host DMA'able memory, or they | 1657 | * Either the descriptors are in host DMA'able memory, or they |
1652 | * exist only in the cards on-chip SRAM. All 16 send bds are under | 1658 | * exist only in the cards on-chip SRAM. All 16 send bds are under |