OSDN Git Service

net: dsa: move fixed link registration helpers
authorVivien Didelot <vivien.didelot@savoirfairelinux.com>
Thu, 26 Oct 2017 14:50:07 +0000 (10:50 -0400)
committerDavid S. Miller <davem@davemloft.net>
Sat, 28 Oct 2017 09:50:12 +0000 (18:50 +0900)
The new bindings (dsa2.c) and the old bindings (legacy.c) share two
helpers dsa_cpu_dsa_setup and dsa_cpu_dsa_destroy, used to register or
deregister a fixed PHY if a given port has a corresponding device node.

Unclutter the code by moving them into two new port.c helpers,
dsa_port_fixed_link_register_of and dsa_port_fixed_link_(un)register_of.

Signed-off-by: Vivien Didelot <vivien.didelot@savoirfairelinux.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/dsa/dsa.c
net/dsa/dsa2.c
net/dsa/dsa_priv.h
net/dsa/legacy.c
net/dsa/port.c

index fe00817..b8f2d9f 100644 (file)
@@ -68,37 +68,6 @@ const struct dsa_device_ops *dsa_device_ops[DSA_TAG_LAST] = {
        [DSA_TAG_PROTO_NONE] = &none_ops,
 };
 
-int dsa_cpu_dsa_setup(struct dsa_port *port)
-{
-       struct device_node *port_dn = port->dn;
-       struct dsa_switch *ds = port->ds;
-       struct phy_device *phydev;
-       int ret, mode;
-
-       if (of_phy_is_fixed_link(port_dn)) {
-               ret = of_phy_register_fixed_link(port_dn);
-               if (ret) {
-                       dev_err(ds->dev, "failed to register fixed PHY\n");
-                       return ret;
-               }
-               phydev = of_phy_find_device(port_dn);
-
-               mode = of_get_phy_mode(port_dn);
-               if (mode < 0)
-                       mode = PHY_INTERFACE_MODE_NA;
-               phydev->interface = mode;
-
-               genphy_config_init(phydev);
-               genphy_read_status(phydev);
-               if (ds->ops->adjust_link)
-                       ds->ops->adjust_link(ds, port->index, phydev);
-
-               put_device(&phydev->mdio.dev);
-       }
-
-       return 0;
-}
-
 const struct dsa_device_ops *dsa_resolve_tag_protocol(int tag_protocol)
 {
        const struct dsa_device_ops *ops;
@@ -113,14 +82,6 @@ const struct dsa_device_ops *dsa_resolve_tag_protocol(int tag_protocol)
        return ops;
 }
 
-void dsa_cpu_dsa_destroy(struct dsa_port *port)
-{
-       struct device_node *port_dn = port->dn;
-
-       if (of_phy_is_fixed_link(port_dn))
-               of_phy_deregister_fixed_link(port_dn);
-}
-
 static int dev_is_class(struct device *dev, void *class)
 {
        if (dev->class != NULL && !strcmp(dev->class->name, class))
index ec58654..de91c48 100644 (file)
@@ -219,7 +219,7 @@ static int dsa_dsa_port_apply(struct dsa_port *port)
        struct dsa_switch *ds = port->ds;
        int err;
 
-       err = dsa_cpu_dsa_setup(port);
+       err = dsa_port_fixed_link_register_of(port);
        if (err) {
                dev_warn(ds->dev, "Failed to setup dsa port %d: %d\n",
                         port->index, err);
@@ -235,7 +235,7 @@ static int dsa_dsa_port_apply(struct dsa_port *port)
 static void dsa_dsa_port_unapply(struct dsa_port *port)
 {
        devlink_port_unregister(&port->devlink_port);
-       dsa_cpu_dsa_destroy(port);
+       dsa_port_fixed_link_unregister_of(port);
 }
 
 static int dsa_cpu_port_apply(struct dsa_port *port)
@@ -243,7 +243,7 @@ static int dsa_cpu_port_apply(struct dsa_port *port)
        struct dsa_switch *ds = port->ds;
        int err;
 
-       err = dsa_cpu_dsa_setup(port);
+       err = dsa_port_fixed_link_register_of(port);
        if (err) {
                dev_warn(ds->dev, "Failed to setup cpu port %d: %d\n",
                         port->index, err);
@@ -259,7 +259,7 @@ static int dsa_cpu_port_apply(struct dsa_port *port)
 static void dsa_cpu_port_unapply(struct dsa_port *port)
 {
        devlink_port_unregister(&port->devlink_port);
-       dsa_cpu_dsa_destroy(port);
+       dsa_port_fixed_link_unregister_of(port);
 }
 
 static int dsa_user_port_apply(struct dsa_port *port)
index 1e99140..1e65afd 100644 (file)
@@ -93,8 +93,6 @@ struct dsa_slave_priv {
 };
 
 /* dsa.c */
-int dsa_cpu_dsa_setup(struct dsa_port *port);
-void dsa_cpu_dsa_destroy(struct dsa_port *dport);
 const struct dsa_device_ops *dsa_resolve_tag_protocol(int tag_protocol);
 bool dsa_schedule_work(struct work_struct *work);
 
@@ -159,6 +157,9 @@ int dsa_port_vlan_add(struct dsa_port *dp,
                      struct switchdev_trans *trans);
 int dsa_port_vlan_del(struct dsa_port *dp,
                      const struct switchdev_obj_port_vlan *vlan);
+int dsa_port_fixed_link_register_of(struct dsa_port *dp);
+void dsa_port_fixed_link_unregister_of(struct dsa_port *dp);
+
 /* slave.c */
 extern const struct dsa_device_ops notag_netdev_ops;
 void dsa_slave_mii_bus_init(struct dsa_switch *ds);
index 93e1b11..ed7aae3 100644 (file)
@@ -86,7 +86,7 @@ static int dsa_cpu_dsa_setups(struct dsa_switch *ds)
                if (!(dsa_is_cpu_port(ds, port) || dsa_is_dsa_port(ds, port)))
                        continue;
 
-               ret = dsa_cpu_dsa_setup(&ds->ports[port]);
+               ret = dsa_port_fixed_link_register_of(&ds->ports[port]);
                if (ret)
                        return ret;
        }
@@ -274,7 +274,7 @@ static void dsa_switch_destroy(struct dsa_switch *ds)
        for (port = 0; port < ds->num_ports; port++) {
                if (!(dsa_is_cpu_port(ds, port) || dsa_is_dsa_port(ds, port)))
                        continue;
-               dsa_cpu_dsa_destroy(&ds->ports[port]);
+               dsa_port_fixed_link_unregister_of(&ds->ports[port]);
        }
 
        if (ds->slave_mii_bus && ds->ops->phy_read)
index 72c8dbd..bb30b1a 100644 (file)
@@ -12,6 +12,8 @@
 
 #include <linux/if_bridge.h>
 #include <linux/notifier.h>
+#include <linux/of_mdio.h>
+#include <linux/of_net.h>
 
 #include "dsa_priv.h"
 
@@ -264,3 +266,48 @@ int dsa_port_vlan_del(struct dsa_port *dp,
 
        return dsa_port_notify(dp, DSA_NOTIFIER_VLAN_DEL, &info);
 }
+
+int dsa_port_fixed_link_register_of(struct dsa_port *dp)
+{
+       struct device_node *dn = dp->dn;
+       struct dsa_switch *ds = dp->ds;
+       struct phy_device *phydev;
+       int port = dp->index;
+       int mode;
+       int err;
+
+       if (of_phy_is_fixed_link(dn)) {
+               err = of_phy_register_fixed_link(dn);
+               if (err) {
+                       dev_err(ds->dev,
+                               "failed to register the fixed PHY of port %d\n",
+                               port);
+                       return err;
+               }
+
+               phydev = of_phy_find_device(dn);
+
+               mode = of_get_phy_mode(dn);
+               if (mode < 0)
+                       mode = PHY_INTERFACE_MODE_NA;
+               phydev->interface = mode;
+
+               genphy_config_init(phydev);
+               genphy_read_status(phydev);
+
+               if (ds->ops->adjust_link)
+                       ds->ops->adjust_link(ds, port, phydev);
+
+               put_device(&phydev->mdio.dev);
+       }
+
+       return 0;
+}
+
+void dsa_port_fixed_link_unregister_of(struct dsa_port *dp)
+{
+       struct device_node *dn = dp->dn;
+
+       if (of_phy_is_fixed_link(dn))
+               of_phy_deregister_fixed_link(dn);
+}