[U-Boot] [PATCH v2 6/6] net: mvpp2: use new MVMDIO driver

Ramon Fried rfried.dev at gmail.com
Sat Aug 3 13:57:22 UTC 2019


On Sat, Aug 3, 2019 at 4:56 AM <nhed+uboot at starry.com> wrote:
>
> From: Nevo Hed <nhed+github at 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+github at 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 at lists.denx.de
> https://lists.denx.de/listinfo/u-boot

Reviewed-By: Ramon Fried <rfried.dev at gmail.com>


More information about the U-Boot mailing list