Commit b040aab7 authored by Wong Vee Khee's avatar Wong Vee Khee Committed by David S. Miller

net: phy: probe for C45 PHYs that return PHY ID of zero in C22 space

PHY devices such as the Marvell Alaska 88E2110 does not return a valid
PHY ID when probed using Clause-22. The current implementation treats
PHY ID of zero as a non-error and valid PHY ID, and causing the PHY
device failed to bind to the Marvell driver.

For such devices, we do an additional probe in the Clause-45 space,
if a valid PHY ID is returned, we then proceed to attach the PHY
device to the matching PHY ID driver.
Signed-off-by: default avatarWong Vee Khee <vee.khee.wong@linux.intel.com>
Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent d409989b
...@@ -870,6 +870,18 @@ struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45) ...@@ -870,6 +870,18 @@ struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45)
if (r) if (r)
return ERR_PTR(r); return ERR_PTR(r);
/* PHY device such as the Marvell Alaska 88E2110 will return a PHY ID
* of 0 when probed using get_phy_c22_id() with no error. Proceed to
* probe with C45 to see if we're able to get a valid PHY ID in the C45
* space, if successful, create the C45 PHY device.
*/
if (!is_c45 && phy_id == 0 && bus->probe_capabilities >= MDIOBUS_C45) {
r = get_phy_c45_ids(bus, addr, &c45_ids);
if (!r)
return phy_device_create(bus, addr, phy_id,
true, &c45_ids);
}
return phy_device_create(bus, addr, phy_id, is_c45, &c45_ids); return phy_device_create(bus, addr, phy_id, is_c45, &c45_ids);
} }
EXPORT_SYMBOL(get_phy_device); EXPORT_SYMBOL(get_phy_device);
......
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