| From 179f5dc36b0a1aa31538d7d8823deb65c39847b3 Mon Sep 17 00:00:00 2001 |
| From: Alexander Sverdlin <alexander.sverdlin@nokia.com> |
| Date: Fri, 16 Oct 2020 12:18:57 +0200 |
| Subject: staging: octeon: repair "fixed-link" support |
| |
| From: Alexander Sverdlin <alexander.sverdlin@nokia.com> |
| |
| commit 179f5dc36b0a1aa31538d7d8823deb65c39847b3 upstream. |
| |
| The PHYs must be registered once in device probe function, not in device |
| open callback because it's only possible to register them once. |
| |
| Fixes: a25e278020bf ("staging: octeon: support fixed-link phys") |
| Signed-off-by: Alexander Sverdlin <alexander.sverdlin@nokia.com> |
| Cc: stable <stable@vger.kernel.org> |
| Link: https://lore.kernel.org/r/20201016101858.11374-1-alexander.sverdlin@nokia.com |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/staging/octeon/ethernet-mdio.c | 6 ------ |
| drivers/staging/octeon/ethernet.c | 9 +++++++++ |
| 2 files changed, 9 insertions(+), 6 deletions(-) |
| |
| --- a/drivers/staging/octeon/ethernet-mdio.c |
| +++ b/drivers/staging/octeon/ethernet-mdio.c |
| @@ -147,12 +147,6 @@ int cvm_oct_phy_setup_device(struct net_ |
| |
| phy_node = of_parse_phandle(priv->of_node, "phy-handle", 0); |
| if (!phy_node && of_phy_is_fixed_link(priv->of_node)) { |
| - int rc; |
| - |
| - rc = of_phy_register_fixed_link(priv->of_node); |
| - if (rc) |
| - return rc; |
| - |
| phy_node = of_node_get(priv->of_node); |
| } |
| if (!phy_node) |
| --- a/drivers/staging/octeon/ethernet.c |
| +++ b/drivers/staging/octeon/ethernet.c |
| @@ -13,6 +13,7 @@ |
| #include <linux/phy.h> |
| #include <linux/slab.h> |
| #include <linux/interrupt.h> |
| +#include <linux/of_mdio.h> |
| #include <linux/of_net.h> |
| #include <linux/if_ether.h> |
| #include <linux/if_vlan.h> |
| @@ -892,6 +893,14 @@ static int cvm_oct_probe(struct platform |
| break; |
| } |
| |
| + if (priv->of_node && of_phy_is_fixed_link(priv->of_node)) { |
| + if (of_phy_register_fixed_link(priv->of_node)) { |
| + netdev_err(dev, "Failed to register fixed link for interface %d, port %d\n", |
| + interface, priv->port); |
| + dev->netdev_ops = NULL; |
| + } |
| + } |
| + |
| if (!dev->netdev_ops) { |
| free_netdev(dev); |
| } else if (register_netdev(dev) < 0) { |