diff mbox series

[U-Boot,3/7] net: mvpp2: mark phy as invalid in case of missing appropriate driver

Message ID 20190802175435.10441-4-nhed+uboot@starry.com
State Superseded, archived
Delegated to: Joe Hershberger
Headers show
Series [U-Boot,1/7] net: mvpp2x: fix traffic stuck after PHY start error | expand

Commit Message

Nevo Hed Aug. 2, 2019, 5:54 p.m. UTC
From: Grzegorz Jaszczyk <jaz@semihalf.com>

If the phy doesn't match with any existing u-boot drivers the phy
framework will connect it to generic one which uid == 0xffffffff. In
this case act as if the phy wouldn't be declared in dts. Otherwise in
case of 3310 (for which the driver doesn't exist) the link will be
marked as always down. Removing phy entry from dts in case of 3310 is
not good option because it is required for the phy_fw_down procedure.

This patch fixes the issue with the link always down on MCBIN board.

Signed-off-by: Grzegorz Jaszczyk <jaz@semihalf.com>
Reviewed-by: Igal Liberman <igall@marvell.com>
Tested-by: Igal Liberman <igall@marvell.com>
Signed-off-by: Nevo Hed <nhed+github@starry.com>
---

 drivers/net/mvpp2.c | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

Comments

Joe Hershberger Aug. 14, 2019, 3:43 p.m. UTC | #1
On Fri, Aug 2, 2019 at 12:54 PM <nhed+uboot@starry.com> wrote:
>
> From: Grzegorz Jaszczyk <jaz@semihalf.com>
>
> If the phy doesn't match with any existing u-boot drivers the phy
> framework will connect it to generic one which uid == 0xffffffff. In
> this case act as if the phy wouldn't be declared in dts. Otherwise in
> case of 3310 (for which the driver doesn't exist) the link will be
> marked as always down. Removing phy entry from dts in case of 3310 is
> not good option because it is required for the phy_fw_down procedure.
>
> This patch fixes the issue with the link always down on MCBIN board.
>
> Signed-off-by: Grzegorz Jaszczyk <jaz@semihalf.com>
> Reviewed-by: Igal Liberman <igall@marvell.com>
> Tested-by: Igal Liberman <igall@marvell.com>
> Signed-off-by: Nevo Hed <nhed+github@starry.com>
> ---
>
>  drivers/net/mvpp2.c | 21 +++++++++++++++++++++
>  1 file changed, 21 insertions(+)
>
> diff --git a/drivers/net/mvpp2.c b/drivers/net/mvpp2.c
> index b6dfed5c54..fae7090121 100644
> --- a/drivers/net/mvpp2.c
> +++ b/drivers/net/mvpp2.c
> @@ -4484,6 +4484,27 @@ static void mvpp2_phy_connect(struct udevice *dev, struct mvpp2_port *port)
>         if (!port->init || port->link == 0) {
>                 phy_dev = phy_connect(port->bus, port->phyaddr, dev,
>                                       port->phy_interface);
> +
> +               /* If the phy doesn't match with any existing u-boot drivers the

Please use the project multi-line comment format. First line should be just: /*

> +                * phy framework will connect it to generic one which
> +                * uid == 0xffffffff. In this case act as if the phy wouldn't be
> +                * declared in dts. Otherwise in case of 3310 (for which the
> +                * driver doesn't exist) the link will not be correctly
> +                * detected. Removing phy entry from dts in case of 3310 is not
> +                * an option because it is required for the phy_fw_down
> +                * procedure.
> +                */
> +               if (phy_dev->drv->uid == 0xffffffff) {/* Generic phy */
> +                       netdev_warn(port->dev,
> +                                   "Marking phy as invalid, link will not be checked\n");
> +                       /* set phy_addr to invalid value */
> +                       port->phyaddr = PHY_MAX_ADDR;
> +                       mvpp2_egress_enable(port);
> +                       mvpp2_ingress_enable(port);
> +
> +                       return;
> +               }
> +
>                 port->phy_dev = phy_dev;
>                 if (!phy_dev) {
>                         netdev_err(port->dev, "cannot connect to phy\n");
> --
> 2.21.0
>
diff mbox series

Patch

diff --git a/drivers/net/mvpp2.c b/drivers/net/mvpp2.c
index b6dfed5c54..fae7090121 100644
--- a/drivers/net/mvpp2.c
+++ b/drivers/net/mvpp2.c
@@ -4484,6 +4484,27 @@  static void mvpp2_phy_connect(struct udevice *dev, struct mvpp2_port *port)
 	if (!port->init || port->link == 0) {
 		phy_dev = phy_connect(port->bus, 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
+		 * uid == 0xffffffff. In this case act as if the phy wouldn't be
+		 * declared in dts. Otherwise in case of 3310 (for which the
+		 * driver doesn't exist) the link will not be correctly
+		 * detected. Removing phy entry from dts in case of 3310 is not
+		 * an option because it is required for the phy_fw_down
+		 * procedure.
+		 */
+		if (phy_dev->drv->uid == 0xffffffff) {/* Generic phy */
+			netdev_warn(port->dev,
+				    "Marking phy as invalid, link will not be checked\n");
+			/* set phy_addr to invalid value */
+			port->phyaddr = PHY_MAX_ADDR;
+			mvpp2_egress_enable(port);
+			mvpp2_ingress_enable(port);
+
+			return;
+		}
+
 		port->phy_dev = phy_dev;
 		if (!phy_dev) {
 			netdev_err(port->dev, "cannot connect to phy\n");