Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit da1da284 authored by Shengzhou Liu's avatar Shengzhou Liu Committed by David S. Miller
Browse files

net/phy: tune get_phy_c45_ids to support more c45 phy



As some C45 10G PHYs(e.g. Cortina CS4315/CS4340 PHY) have
zero Devices In package, current driver can't get correct
devices_in_package value by non-zero Devices In package.
so let's probe more with zero Devices In package to support
more C45 PHYs.

Signed-off-by: default avatarShengzhou Liu <Shengzhou.Liu@freescale.com>
Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent d53c66a5
Loading
Loading
Loading
Loading
+14 −6
Original line number Diff line number Diff line
@@ -230,7 +230,7 @@ static int get_phy_c45_ids(struct mii_bus *bus, int addr, u32 *phy_id,
	for (i = 1;
	     i < num_ids && c45_ids->devices_in_package == 0;
	     i++) {
		reg_addr = MII_ADDR_C45 | i << 16 | MDIO_DEVS2;
retry:		reg_addr = MII_ADDR_C45 | i << 16 | MDIO_DEVS2;
		phy_reg = mdiobus_read(bus, addr, reg_addr);
		if (phy_reg < 0)
			return -EIO;
@@ -242,14 +242,22 @@ static int get_phy_c45_ids(struct mii_bus *bus, int addr, u32 *phy_id,
			return -EIO;
		c45_ids->devices_in_package |= (phy_reg & 0xffff);

		if ((c45_ids->devices_in_package & 0x1fffffff) == 0x1fffffff) {
			if (i) {
				/*  If mostly Fs, there is no device there,
		 * let's get out of here.
				 *  then let's continue to probe more, as some
				 *  10G PHYs have zero Devices In package,
				 *  e.g. Cortina CS4315/CS4340 PHY.
				 */
		if ((c45_ids->devices_in_package & 0x1fffffff) == 0x1fffffff) {
				i = 0;
				goto retry;
			} else {
				/* no device there, let's get out of here */
				*phy_id = 0xffffffff;
				return 0;
			}
		}
	}

	/* Now probe Device Identifiers for each device present. */
	for (i = 1; i < num_ids; i++) {