Commit 389a3389 authored by Russell King's avatar Russell King Committed by David S. Miller

net: phy: read MMD ID from all present MMDs

Expand the device_ids[] array to allow all MMD IDs to be read rather
than just the first 8 MMDs, but only read the ID if the MDIO_STAT2
register reports that a device really is present here for these new
devices to maintain compatibility with our current behaviour.  Note
that only a limited number of devices have MDIO_STAT2.

88X3310 PHY vendor MMDs do are marked as present in the
devices_in_package, but do not contain IEE 802.3 compatible register
sets in their lower space.  This avoids reading incorrect values as MMD
identifiers.
Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
Signed-off-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 320ed3bf
......@@ -774,6 +774,19 @@ static int get_phy_c45_ids(struct mii_bus *bus, int addr,
if (!(devs_in_pkg & (1 << i)))
continue;
if (i == MDIO_MMD_VEND1 || i == MDIO_MMD_VEND2) {
/* Probe the "Device Present" bits for the vendor MMDs
* to ignore these if they do not contain IEEE 802.3
* registers.
*/
ret = phy_c45_probe_present(bus, addr, i);
if (ret < 0)
return ret;
if (!ret)
continue;
}
phy_reg = mdiobus_c45_read(bus, addr, i, MII_PHYSID1);
if (phy_reg < 0)
return -EIO;
......
......@@ -399,7 +399,7 @@ enum phy_state {
struct phy_c45_device_ids {
u32 devices_in_package;
u32 mmds_present;
u32 device_ids[8];
u32 device_ids[MDIO_MMD_NUM];
};
struct macsec_context;
......
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