On Sat, Aug 3, 2019 at 4:56 AM <nhed+ub...@starry.com> wrote: > > From: Nevo Hed <nhed+git...@starry.com> > > An eralier commit in this changeset is taken from Marvells repos but was > based on an MVMDIO implementation that never made it into U-Boot. With > this patch the mvpp2 driver switches to use the new MVMDIO driver that is > based on a more universal mdio-uclass implementation. > > Signed-off-by: Nevo Hed <nhed+git...@starry.com> > --- > drivers/net/Kconfig | 1 + > drivers/net/mvpp2.c | 45 ++++++++++----------------------------------- > 2 files changed, 11 insertions(+), 35 deletions(-) > > diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig > index d8c4dd6f4d..81f39d0928 100644 > --- a/drivers/net/Kconfig > +++ b/drivers/net/Kconfig > @@ -298,6 +298,7 @@ config MVPP2 > depends on ARMADA_375 || ARMADA_8K > select PHYLIB > select MVMDIO > + select DM_MDIO > help > This driver supports the network interface units in the > Marvell ARMADA 375, 7K and 8K SoCs. > diff --git a/drivers/net/mvpp2.c b/drivers/net/mvpp2.c > index 5f908113f2..de1b8fce84 100644 > --- a/drivers/net/mvpp2.c > +++ b/drivers/net/mvpp2.c > @@ -32,7 +32,7 @@ > #include <linux/mbus.h> > #include <asm-generic/gpio.h> > #include <fdt_support.h> > -#include <mdio.h> > +#include <linux/mdio.h> > > DECLARE_GLOBAL_DATA_PTR; > > @@ -936,7 +936,6 @@ struct mvpp2_port { > > /* Per-port registers' base address */ > void __iomem *base; > - void __iomem *mdio_base; > > struct mvpp2_rx_queue **rxqs; > struct mvpp2_tx_queue **txqs; > @@ -958,7 +957,7 @@ struct mvpp2_port { > struct phy_device *phy_dev; > phy_interface_t phy_interface; > int phyaddr; > - struct mii_dev *bus; > + struct udevice *mdio_dev; > #ifdef CONFIG_DM_GPIO > struct gpio_desc phy_reset_gpio; > struct gpio_desc phy_tx_disable_gpio; > @@ -4482,8 +4481,8 @@ static void mvpp2_phy_connect(struct udevice *dev, > struct mvpp2_port *port) > struct phy_device *phy_dev; > > if (!port->init || port->link == 0) { > - phy_dev = phy_connect(port->bus, port->phyaddr, dev, > - port->phy_interface); > + phy_dev = dm_mdio_phy_connect(port->mdio_dev, port->phyaddr, > + dev, port->phy_interface); > > /* If the phy doesn't match with any existing u-boot drivers > the > * phy framework will connect it to generic one which > @@ -4708,24 +4707,18 @@ static int phy_info_parse(struct udevice *dev, struct > mvpp2_port *port) > int phy_mode = -1; > int ret; > > - /* Default mdio_base from the same eth base */ > - if (port->priv->hw_version == MVPP21) > - port->mdio_base = port->priv->lms_base + MVPP21_SMI; > - else > - port->mdio_base = port->priv->iface_base + MVPP22_SMI; > - > phy_node = fdtdec_lookup_phandle(gd->fdt_blob, port_node, "phy"); > > if (phy_node > 0) { > - ofnode phy_ofnode; > - fdt_addr_t phy_base; > - > + int parent; > phyaddr = fdtdec_get_int(gd->fdt_blob, phy_node, "reg", 0); > if (phyaddr < 0) { > dev_err(&pdev->dev, "could not find phy address\n"); > return -1; > } > - ret = mdio_mii_bus_get_from_phy(phy_node, &port->bus); > + parent = fdt_parent_offset(gd->fdt_blob, phy_node); > + ret = uclass_get_device_by_of_offset(UCLASS_MDIO, parent, > + &port->mdio_dev); > if (ret) > return ret; > } else { > @@ -5044,7 +5037,7 @@ static int mvpp2_init(struct udevice *dev, struct mvpp2 > *priv) > return 0; > } > > -int mvpp2_recv(struct udevice *dev, int flags, uchar **packetp) > +static int mvpp2_recv(struct udevice *dev, int flags, uchar **packetp) > { > struct mvpp2_port *port = dev_get_priv(dev); > struct mvpp2_rx_desc *rx_desc; > @@ -5309,31 +5302,13 @@ static int mvpp2_probe(struct udevice *dev) > { > struct mvpp2_port *port = dev_get_priv(dev); > struct mvpp2 *priv = dev_get_priv(dev->parent); > - struct mii_dev *bus; > int err; > > /* Only call the probe function for the parent once */ > if (!priv->probe_done) > err = mvpp2_base_probe(dev->parent); > > - port->priv = dev_get_priv(dev->parent); > - > - /* Create and register the MDIO bus driver */ > - bus = mdio_alloc(); > - if (!bus) { > - printf("Failed to allocate MDIO bus\n"); > - return -ENOMEM; > - } > - > - bus->read = mpp2_mdio_read; > - bus->write = mpp2_mdio_write; > - snprintf(bus->name, sizeof(bus->name), dev->name); > - bus->priv = (void *)port; > - port->bus = bus; > - > - err = mdio_register(bus); > - if (err) > - return err; > + port->priv = priv; > > err = phy_info_parse(dev, port); > if (err) > -- > 2.21.0 > > _______________________________________________ > U-Boot mailing list > U-Boot@lists.denx.de > https://lists.denx.de/listinfo/u-boot
Reviewed-By: Ramon Fried <rfried....@gmail.com> _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot