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: Wong Vee Khee <vee.khee.wong@linux.intel.com> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
d409989b59
commit
b040aab763
@ -870,6 +870,18 @@ struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45)
|
||||
if (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);
|
||||
}
|
||||
EXPORT_SYMBOL(get_phy_device);
|
||||
|
Loading…
x
Reference in New Issue
Block a user