Commit da6b2d01 authored by Michael Chan's avatar Michael Chan Committed by David S. Miller

[TG3]: Fix SerDes detection

A problem was reported by Grant Grundler on an HP rx8620 using IOX
Core LAN partno(A7109-6) 5701 copper NIC. The tg3 driver mistakenly
detects this NIC as having a SerDes PHY and link does not come up as a
result.

The problem was caused by an incorrectly programmed eeprom that set the
NIC_SRAM_DATA_CFG_PHY_TYPE_FIBER bit in the NIC_SRAM_DATA_CFG location.

This patch will override the NIC_SRAM_DATA_CFG_PHY_TYPE_FIBER bit if a
valid PHY ID is read from the MII registers on older 570x chips where
the MII interface is not used on SerDes chips. On newer chips such as
the 5780 that use MII for both copper and SerDes, SerDes detection must
rely on the eeprom.

This patch will make the SerDes detection identical to versions 3.25 and
older.
Signed-off-by: default avatarMichael Chan <mchan@broadcom.com>
Acked-by: default avatarGrant Grundler <iod00d@hp.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 91aa9fb5
...@@ -8970,6 +8970,8 @@ static int __devinit tg3_phy_probe(struct tg3 *tp) ...@@ -8970,6 +8970,8 @@ static int __devinit tg3_phy_probe(struct tg3 *tp)
tp->phy_id = hw_phy_id; tp->phy_id = hw_phy_id;
if (hw_phy_id_masked == PHY_ID_BCM8002) if (hw_phy_id_masked == PHY_ID_BCM8002)
tp->tg3_flags2 |= TG3_FLG2_PHY_SERDES; tp->tg3_flags2 |= TG3_FLG2_PHY_SERDES;
else
tp->tg3_flags2 &= ~TG3_FLG2_PHY_SERDES;
} else { } else {
if (tp->phy_id != PHY_ID_INVALID) { if (tp->phy_id != PHY_ID_INVALID) {
/* Do nothing, phy ID already set up in /* Do nothing, phy ID already set up in
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment