aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorMatt Carlson <mcarlson@broadcom.com>2009-08-25 06:09:36 -0400
committerDavid S. Miller <davem@davemloft.net>2009-08-26 18:47:58 -0400
commit535ef6e1124d445efbcc13b7126561dc544b0b64 (patch)
treea961c86394eca3c40f660743ac79585dc2c0613c /drivers
parentbb85fbb6a98d8edab81599913559c7ff0a963984 (diff)
tg3: Create MII_TG3_FET namespace
Broadcom's phys come in two distinctly different register layouts. For the lack of an official term to distinguish between the two formats, we can loosely categorize them by their fast ethernet or gigabit ethernet transceiver description. This patch creates the (driver-internal) Fast Ethernet Transceiver (FET) namespace and converts the 5906 EPHY definitions over. Signed-off-by: Matt Carlson <mcarlson@broadcom.com> Reviewed-by: Michael Chan <mchan@broadcom.com> Reviewed-by: Benjamin Li <benli@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/tg3.c38
-rw-r--r--drivers/net/tg3.h21
2 files changed, 34 insertions, 25 deletions
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c
index 41e0d40259e3..800f98069c1c 100644
--- a/drivers/net/tg3.c
+++ b/drivers/net/tg3.c
@@ -1514,17 +1514,19 @@ static void tg3_phy_toggle_automdix(struct tg3 *tp, int enable)
1514 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 1514 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
1515 u32 ephy; 1515 u32 ephy;
1516 1516
1517 if (!tg3_readphy(tp, MII_TG3_EPHY_TEST, &ephy)) { 1517 if (!tg3_readphy(tp, MII_TG3_FET_TEST, &ephy)) {
1518 tg3_writephy(tp, MII_TG3_EPHY_TEST, 1518 u32 reg = MII_TG3_FET_SHDW_MISCCTRL;
1519 ephy | MII_TG3_EPHY_SHADOW_EN); 1519
1520 if (!tg3_readphy(tp, MII_TG3_EPHYTST_MISCCTRL, &phy)) { 1520 tg3_writephy(tp, MII_TG3_FET_TEST,
1521 ephy | MII_TG3_FET_SHADOW_EN);
1522 if (!tg3_readphy(tp, reg, &phy)) {
1521 if (enable) 1523 if (enable)
1522 phy |= MII_TG3_EPHYTST_MISCCTRL_MDIX; 1524 phy |= MII_TG3_FET_SHDW_MISCCTRL_MDIX;
1523 else 1525 else
1524 phy &= ~MII_TG3_EPHYTST_MISCCTRL_MDIX; 1526 phy &= ~MII_TG3_FET_SHDW_MISCCTRL_MDIX;
1525 tg3_writephy(tp, MII_TG3_EPHYTST_MISCCTRL, phy); 1527 tg3_writephy(tp, reg, phy);
1526 } 1528 }
1527 tg3_writephy(tp, MII_TG3_EPHY_TEST, ephy); 1529 tg3_writephy(tp, MII_TG3_FET_TEST, ephy);
1528 } 1530 }
1529 } else { 1531 } else {
1530 phy = MII_TG3_AUXCTL_MISC_RDSEL_MISC | 1532 phy = MII_TG3_AUXCTL_MISC_RDSEL_MISC |
@@ -1915,7 +1917,7 @@ out:
1915 1917
1916 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 1918 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
1917 /* adjust output voltage */ 1919 /* adjust output voltage */
1918 tg3_writephy(tp, MII_TG3_EPHY_PTEST, 0x12); 1920 tg3_writephy(tp, MII_TG3_FET_PTEST, 0x12);
1919 } 1921 }
1920 1922
1921 tg3_phy_toggle_automdix(tp, 1); 1923 tg3_phy_toggle_automdix(tp, 1);
@@ -9747,14 +9749,16 @@ static int tg3_run_loopback(struct tg3 *tp, int loopback_mode)
9747 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 9749 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
9748 u32 phytest; 9750 u32 phytest;
9749 9751
9750 if (!tg3_readphy(tp, MII_TG3_EPHY_TEST, &phytest)) { 9752 if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) {
9751 u32 phy; 9753 u32 phy, reg = MII_TG3_FET_SHDW_AUXSTAT2;
9752 9754
9753 tg3_writephy(tp, MII_TG3_EPHY_TEST, 9755 tg3_writephy(tp, MII_TG3_FET_TEST,
9754 phytest | MII_TG3_EPHY_SHADOW_EN); 9756 phytest | MII_TG3_FET_SHADOW_EN);
9755 if (!tg3_readphy(tp, 0x1b, &phy)) 9757 if (!tg3_readphy(tp, reg, &phy)) {
9756 tg3_writephy(tp, 0x1b, phy & ~0x20); 9758 phy &= ~MII_TG3_FET_SHDW_AUXSTAT2_APD;
9757 tg3_writephy(tp, MII_TG3_EPHY_TEST, phytest); 9759 tg3_writephy(tp, reg, phy);
9760 }
9761 tg3_writephy(tp, MII_TG3_FET_TEST, phytest);
9758 } 9762 }
9759 val = BMCR_LOOPBACK | BMCR_FULLDPLX | BMCR_SPEED100; 9763 val = BMCR_LOOPBACK | BMCR_FULLDPLX | BMCR_SPEED100;
9760 } else 9764 } else
@@ -9767,7 +9771,7 @@ static int tg3_run_loopback(struct tg3 *tp, int loopback_mode)
9767 9771
9768 mac_mode = tp->mac_mode & ~MAC_MODE_PORT_MODE_MASK; 9772 mac_mode = tp->mac_mode & ~MAC_MODE_PORT_MODE_MASK;
9769 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 9773 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
9770 tg3_writephy(tp, MII_TG3_EPHY_PTEST, 0x1800); 9774 tg3_writephy(tp, MII_TG3_FET_PTEST, 0x1800);
9771 mac_mode |= MAC_MODE_PORT_MODE_MII; 9775 mac_mode |= MAC_MODE_PORT_MODE_MII;
9772 } else 9776 } else
9773 mac_mode |= MAC_MODE_PORT_MODE_GMII; 9777 mac_mode |= MAC_MODE_PORT_MODE_GMII;
diff --git a/drivers/net/tg3.h b/drivers/net/tg3.h
index d096e10ad634..b8339c9ae0e3 100644
--- a/drivers/net/tg3.h
+++ b/drivers/net/tg3.h
@@ -1909,7 +1909,6 @@
1909 1909
1910#define MII_TG3_DSP_RW_PORT 0x15 /* DSP coefficient read/write port */ 1910#define MII_TG3_DSP_RW_PORT 0x15 /* DSP coefficient read/write port */
1911 1911
1912#define MII_TG3_EPHY_PTEST 0x17 /* 5906 PHY register */
1913#define MII_TG3_DSP_ADDRESS 0x17 /* DSP address register */ 1912#define MII_TG3_DSP_ADDRESS 0x17 /* DSP address register */
1914 1913
1915#define MII_TG3_DSP_TAP1 0x0001 1914#define MII_TG3_DSP_TAP1 0x0001
@@ -1976,17 +1975,23 @@
1976#define MII_TG3_MISC_SHDW_SCR5_LPED 0x0010 1975#define MII_TG3_MISC_SHDW_SCR5_LPED 0x0010
1977#define MII_TG3_MISC_SHDW_SCR5_SEL 0x1400 1976#define MII_TG3_MISC_SHDW_SCR5_SEL 0x1400
1978 1977
1979
1980#define MII_TG3_EPHY_TEST 0x1f /* 5906 PHY register */
1981#define MII_TG3_EPHY_SHADOW_EN 0x80
1982
1983#define MII_TG3_EPHYTST_MISCCTRL 0x10 /* 5906 EPHY misc ctrl shadow register */
1984#define MII_TG3_EPHYTST_MISCCTRL_MDIX 0x4000
1985
1986#define MII_TG3_TEST1 0x1e 1978#define MII_TG3_TEST1 0x1e
1987#define MII_TG3_TEST1_TRIM_EN 0x0010 1979#define MII_TG3_TEST1_TRIM_EN 0x0010
1988#define MII_TG3_TEST1_CRC_EN 0x8000 1980#define MII_TG3_TEST1_CRC_EN 0x8000
1989 1981
1982
1983/* Fast Ethernet Tranceiver definitions */
1984#define MII_TG3_FET_PTEST 0x17
1985#define MII_TG3_FET_TEST 0x1f
1986#define MII_TG3_FET_SHADOW_EN 0x0080
1987
1988#define MII_TG3_FET_SHDW_MISCCTRL 0x10
1989#define MII_TG3_FET_SHDW_MISCCTRL_MDIX 0x4000
1990
1991#define MII_TG3_FET_SHDW_AUXSTAT2 0x1b
1992#define MII_TG3_FET_SHDW_AUXSTAT2_APD 0x0020
1993
1994
1990/* APE registers. Accessible through BAR1 */ 1995/* APE registers. Accessible through BAR1 */
1991#define TG3_APE_EVENT 0x000c 1996#define TG3_APE_EVENT 0x000c
1992#define APE_EVENT_1 0x00000001 1997#define APE_EVENT_1 0x00000001