Skip to content
Snippets Groups Projects
Commit ee8fa20f authored by Andy Fleming's avatar Andy Fleming Committed by Wolfgang Denk
Browse files

phylib: Detect link on 10G devices correctly


gen10g_startup() had 2 bugs:

1) It had a boolean logic error in checking the MMD mask, and
always checked all of them.

2) It checked devices which don't actually report link state, which
meant that it would never believe the link was fully up.

Fix the boolean logic, and then mask the MMD mask so only link-reporting
devices are checked.

Signed-off-by: default avatarAndy Fleming <afleming@freescale.com>
Reported-by: default avatarEd Swarthout <Ed.Swarthout@freescale.com>
parent 09e3a67d
No related branches found
No related tags found
No related merge requests found
......@@ -36,7 +36,7 @@ int gen10g_shutdown(struct phy_device *phydev)
int gen10g_startup(struct phy_device *phydev)
{
int devad, reg;
u32 mmd_mask = phydev->mmds;
u32 mmd_mask = phydev->mmds & MDIO_DEVS_LINK;
phydev->link = 1;
......@@ -44,8 +44,12 @@ int gen10g_startup(struct phy_device *phydev)
phydev->speed = SPEED_10000;
phydev->duplex = DUPLEX_FULL;
/*
* Go through all the link-reporting devices, and make sure
* they're all up and happy
*/
for (devad = 0; mmd_mask; devad++, mmd_mask = mmd_mask >> 1) {
if (!mmd_mask & 1)
if (!(mmd_mask & 1))
continue;
/* Read twice because link state is latched and a
......
......@@ -120,6 +120,14 @@
#define MDIO_DEVS_VEND1 MDIO_DEVS_PRESENT(MDIO_MMD_VEND1)
#define MDIO_DEVS_VEND2 MDIO_DEVS_PRESENT(MDIO_MMD_VEND2)
#define MDIO_DEVS_LINK (MDIO_DEVS_PMAPMD | \
MDIO_DEVS_WIS | \
MDIO_DEVS_PCS | \
MDIO_DEVS_PHYXS | \
MDIO_DEVS_DTEXS | \
MDIO_DEVS_AN)
/* Control register 2. */
#define MDIO_PMA_CTRL2_TYPE 0x000f /* PMA/PMD type selection */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment