Merge branch 'net-phy-c22-c45-enumeration'
From: Andrew Lunn <andrew@lunn.ch> To: Heiner Kallweit <hkallweit1@gmail.com>, Russell King <linux@armlinux.org.uk>, "David S. Miller" <davem@davemloft.net>, Eric Dumazet <edumazet@google.com>, Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>, Florian Fainelli <f.fainelli@gmail.com>, Vladimir Oltean <olteanv@gmail.com> Cc: netdev@vger.kernel.org, Tim Menninger <tmenninger@purestorage.com>, Andrew Lunn <andrew@lunn.ch> ==================== net: Unify C22 and C45 error handling during bus enumeration When enumerating an MDIO bus, an MDIO bus driver can return -ENODEV to a C22 read transaction to indicate there is no device at that address on the bus. Enumeration will then continue with the next address on the bus. Modify C45 enumeration so that it also accepts -ENODEV and moves to the next address on the bus, rather than consider -ENODEV as a fatal error. Convert the mv88e6xxx driver to return -ENODEV rather than 0xffff on read for families which do not support C45 bus transactions. This is more efficient, since enumeration will scan multiple devices at one address when 0xffff is returned, where as -EONDEV immediately jumps to the next address on the bus. ==================== Signed-off-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
1e8f1477ab
@ -3659,7 +3659,7 @@ static int mv88e6xxx_mdio_read_c45(struct mii_bus *bus, int phy, int devad,
|
||||
int err;
|
||||
|
||||
if (!chip->info->ops->phy_read_c45)
|
||||
return 0xffff;
|
||||
return -ENODEV;
|
||||
|
||||
mv88e6xxx_reg_lock(chip);
|
||||
err = chip->info->ops->phy_read_c45(chip, bus, phy, devad, reg, &val);
|
||||
|
@ -780,7 +780,7 @@ static int get_phy_c45_devs_in_pkg(struct mii_bus *bus, int addr, int dev_addr,
|
||||
* and identifiers in @c45_ids.
|
||||
*
|
||||
* Returns zero on success, %-EIO on bus access error, or %-ENODEV if
|
||||
* the "devices in package" is invalid.
|
||||
* the "devices in package" is invalid or no device responds.
|
||||
*/
|
||||
static int get_phy_c45_ids(struct mii_bus *bus, int addr,
|
||||
struct phy_c45_device_ids *c45_ids)
|
||||
@ -803,7 +803,11 @@ static int get_phy_c45_ids(struct mii_bus *bus, int addr,
|
||||
*/
|
||||
ret = phy_c45_probe_present(bus, addr, i);
|
||||
if (ret < 0)
|
||||
return -EIO;
|
||||
/* returning -ENODEV doesn't stop bus
|
||||
* scanning
|
||||
*/
|
||||
return (phy_reg == -EIO ||
|
||||
phy_reg == -ENODEV) ? -ENODEV : -EIO;
|
||||
|
||||
if (!ret)
|
||||
continue;
|
||||
|
Loading…
x
Reference in New Issue
Block a user