Commit 9ba30f6bc2741ae4d49724cdd32ca1c9a48f6155

Authored by Sascha Silbe
Committed by Tom Rini
1 parent 971c450a44

phy: fix 10/100Mbps operation on 1Gbps-capable links

de1d786 [add support for Xilinx 1000BASE-X phy (GTX)] introduced a
check for the extended status register in order to support
1Gbps-capable PHYs that don't have the 1000BASE-T registers. Since
Extended Status only indicates what the PHY (i.e. the local side) is
capable of, this broke communication with non-1Gbps peers.

Only check the extended status if the 1000BASE-T registers are
actually missing so we don't end up setting speed to 1Gbps even though
the previous test (for the combination of local and peer support for
1Gbps) already indicated we can't do 1Gbps with the current peer.

Signed-off-by: Sascha Silbe <t-uboot@infra-silbe.de>
Tested-by: Fabio Estevam <fabio.estevam@freescale.com>
Reviewed-by: Joe Hershberger <joe.hershberger@ni.com>

Showing 1 changed file with 9 additions and 1 deletions Side-by-side Diff

drivers/net/phy/phy.c
... ... @@ -333,7 +333,15 @@
333 333 } else if (lpa & LPA_10FULL)
334 334 phydev->duplex = DUPLEX_FULL;
335 335  
336   - if (mii_reg & BMSR_ESTATEN)
  336 + /*
  337 + * Extended status may indicate that the PHY supports
  338 + * 1000BASE-T/X even though the 1000BASE-T registers
  339 + * are missing. In this case we can't tell whether the
  340 + * peer also supports it, so we only check extended
  341 + * status if the 1000BASE-T registers are actually
  342 + * missing.
  343 + */
  344 + if ((mii_reg & BMSR_ESTATEN) && !(mii_reg & BMSR_ERCAP))
337 345 estatus = phy_read(phydev, MDIO_DEVAD_NONE,
338 346 MII_ESTATUS);
339 347