On Fri, Apr 17, 2020 at 09:28:57PM +0200, Michael Walle wrote: > +static int bcm54140_get_base_addr_and_port(struct phy_device *phydev) > +{ > + struct bcm54140_phy_priv *priv = phydev->priv; > + struct mii_bus *bus = phydev->mdio.bus; > + int addr, min_addr, max_addr; > + int step = 1; > + u32 phy_id; > + int tmp; > + > + min_addr = phydev->mdio.addr; > + max_addr = phydev->mdio.addr; > + addr = phydev->mdio.addr; > + > + /* We scan forward and backwards and look for PHYs which have the > + * same phy_id like we do. Step 1 will scan forward, step 2 > + * backwards. Once we are finished, we have a min_addr and > + * max_addr which resembles the range of PHY addresses of the same > + * type of PHY. There is one caveat; there may be many PHYs of > + * the same type, but we know that each PHY takes exactly 4 > + * consecutive addresses. Therefore we can deduce our offset > + * to the base address of this quad PHY. > + */ Hi Michael How much flexibility is there in setting the base address using strapping etc? Is it limited to a multiple of 4?