On 4/14/2020 11:10 AM, Robert Marko wrote: > This patch adds the driver for the MDIO interface > inside of Qualcomm IPQ40xx series SoC-s. > > Signed-off-by: Christian Lamparter <chunkeey@xxxxxxxxx> > Signed-off-by: Robert Marko <robert.marko@xxxxxxxxxx> > Cc: Luka Perkov <luka.perkov@xxxxxxxxxx> > --- > Changes from v1 to v2: > * Remove magic default value > * Remove lockdep_assert_held > * Add C45 check > * Simplify the driver > * Drop device and mii_bus structs from private struct > * Use devm_mdiobus_alloc_size() > > drivers/net/phy/Kconfig | 7 ++ > drivers/net/phy/Makefile | 1 + > drivers/net/phy/mdio-ipq40xx.c | 176 +++++++++++++++++++++++++++++++++ > 3 files changed, 184 insertions(+) > create mode 100644 drivers/net/phy/mdio-ipq40xx.c > > diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig > index 3fa33d27eeba..815d52fa6080 100644 > --- a/drivers/net/phy/Kconfig > +++ b/drivers/net/phy/Kconfig > @@ -157,6 +157,13 @@ config MDIO_I2C > > This is library mode. > > +config MDIO_IPQ40XX > + tristate "Qualcomm IPQ40xx MDIO interface" > + depends on HAS_IOMEM && OF You can drop the OF dependency here, of_mdiobus_register() becomes mdiobus_register() with CONFIG_OF=n. [snip] > +static int ipq40xx_mdio_wait_busy(struct mii_bus *bus) > +{ > + struct ipq40xx_mdio_data *priv = bus->priv; > + int i; > + > + for (i = 0; i < IPQ40XX_MDIO_RETRY; i++) { > + unsigned int busy; > + > + busy = readl(priv->membase + MDIO_CTRL_4_REG) & > + MDIO_CTRL_4_ACCESS_BUSY; > + if (!busy) > + return 0; > + > + /* BUSY might take to be cleard by 15~20 times of loop */ typo: cleard instead of cleared. > + udelay(IPQ40XX_MDIO_DELAY); > + } consider using readl_poll_timeout() for this loop. With that fixed: Reviewed-by: Florian Fainelli <f.fainelli@xxxxxxxxx> -- Florian