diff options
Diffstat (limited to 'drivers/net/tg3.c')
-rw-r--r-- | drivers/net/tg3.c | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c index 2de1ab6278d5..9ff97cc7e916 100644 --- a/drivers/net/tg3.c +++ b/drivers/net/tg3.c | |||
@@ -782,7 +782,7 @@ static int tg3_readphy(struct tg3 *tp, int reg, u32 *val) | |||
782 | 782 | ||
783 | *val = 0x0; | 783 | *val = 0x0; |
784 | 784 | ||
785 | frame_val = ((PHY_ADDR << MI_COM_PHY_ADDR_SHIFT) & | 785 | frame_val = ((tp->phy_addr << MI_COM_PHY_ADDR_SHIFT) & |
786 | MI_COM_PHY_ADDR_MASK); | 786 | MI_COM_PHY_ADDR_MASK); |
787 | frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) & | 787 | frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) & |
788 | MI_COM_REG_ADDR_MASK); | 788 | MI_COM_REG_ADDR_MASK); |
@@ -833,7 +833,7 @@ static int tg3_writephy(struct tg3 *tp, int reg, u32 val) | |||
833 | udelay(80); | 833 | udelay(80); |
834 | } | 834 | } |
835 | 835 | ||
836 | frame_val = ((PHY_ADDR << MI_COM_PHY_ADDR_SHIFT) & | 836 | frame_val = ((tp->phy_addr << MI_COM_PHY_ADDR_SHIFT) & |
837 | MI_COM_PHY_ADDR_MASK); | 837 | MI_COM_PHY_ADDR_MASK); |
838 | frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) & | 838 | frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) & |
839 | MI_COM_REG_ADDR_MASK); | 839 | MI_COM_REG_ADDR_MASK); |
@@ -1021,6 +1021,21 @@ static void tg3_mdio_start(struct tg3 *tp) | |||
1021 | tw32_f(MAC_MI_MODE, tp->mi_mode); | 1021 | tw32_f(MAC_MI_MODE, tp->mi_mode); |
1022 | udelay(80); | 1022 | udelay(80); |
1023 | 1023 | ||
1024 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717) { | ||
1025 | u32 funcnum, is_serdes; | ||
1026 | |||
1027 | funcnum = tr32(TG3_CPMU_STATUS) & TG3_CPMU_STATUS_PCIE_FUNC; | ||
1028 | if (funcnum) | ||
1029 | tp->phy_addr = 2; | ||
1030 | else | ||
1031 | tp->phy_addr = 1; | ||
1032 | |||
1033 | is_serdes = tr32(SG_DIG_STATUS) & SG_DIG_IS_SERDES; | ||
1034 | if (is_serdes) | ||
1035 | tp->phy_addr += 7; | ||
1036 | } else | ||
1037 | tp->phy_addr = PHY_ADDR; | ||
1038 | |||
1024 | if ((tp->tg3_flags3 & TG3_FLG3_MDIOBUS_INITED) && | 1039 | if ((tp->tg3_flags3 & TG3_FLG3_MDIOBUS_INITED) && |
1025 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) | 1040 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) |
1026 | tg3_mdio_config_5785(tp); | 1041 | tg3_mdio_config_5785(tp); |
@@ -9266,7 +9281,7 @@ static int tg3_get_settings(struct net_device *dev, struct ethtool_cmd *cmd) | |||
9266 | cmd->speed = tp->link_config.active_speed; | 9281 | cmd->speed = tp->link_config.active_speed; |
9267 | cmd->duplex = tp->link_config.active_duplex; | 9282 | cmd->duplex = tp->link_config.active_duplex; |
9268 | } | 9283 | } |
9269 | cmd->phy_address = PHY_ADDR; | 9284 | cmd->phy_address = tp->phy_addr; |
9270 | cmd->transceiver = XCVR_INTERNAL; | 9285 | cmd->transceiver = XCVR_INTERNAL; |
9271 | cmd->autoneg = tp->link_config.autoneg; | 9286 | cmd->autoneg = tp->link_config.autoneg; |
9272 | cmd->maxtxpkt = 0; | 9287 | cmd->maxtxpkt = 0; |
@@ -10570,7 +10585,7 @@ static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) | |||
10570 | 10585 | ||
10571 | switch(cmd) { | 10586 | switch(cmd) { |
10572 | case SIOCGMIIPHY: | 10587 | case SIOCGMIIPHY: |
10573 | data->phy_id = PHY_ADDR; | 10588 | data->phy_id = tp->phy_addr; |
10574 | 10589 | ||
10575 | /* fallthru */ | 10590 | /* fallthru */ |
10576 | case SIOCGMIIREG: { | 10591 | case SIOCGMIIREG: { |