[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20190817191452.16716-3-marek.behun@nic.cz>
Date: Sat, 17 Aug 2019 21:14:50 +0200
From: Marek Behún <marek.behun@....cz>
To: netdev@...r.kernel.org
Cc: Andrew Lunn <andrew@...n.ch>,
Vivien Didelot <vivien.didelot@...il.com>,
Florian Fainelli <f.fainelli@...il.com>,
Vladimir Oltean <olteanv@...il.com>,
Marek Behún <marek.behun@....cz>
Subject: [PATCH RFC v2 net-next 2/4] net: dsa: call port_enable/port_disable for CPU/DSA ports
Call dsa_port_enable for CPU/DSA ports in dsa_port_setup, and
dsa_port_disable for CPU/DSA ports in dsa_port_teardown. This requires
changing all DSA drivers, since they expect the port_enable/port_disable
methods to be called only for user ports.
Signed-off-by: Marek Behún <marek.behun@....cz>
Cc: Andrew Lunn <andrew@...n.ch>
Cc: Florian Fainelli <f.fainelli@...il.com>
Cc: Vladimir Oltean <olteanv@...il.com>
Cc: Vivien Didelot <vivien.didelot@...il.com>
---
net/dsa/dsa2.c | 21 ++++++++++++++++++++-
net/dsa/port.c | 4 ++--
2 files changed, 22 insertions(+), 3 deletions(-)
diff --git a/net/dsa/dsa2.c b/net/dsa/dsa2.c
index 3abd173ebacb..98ea5c158ee3 100644
--- a/net/dsa/dsa2.c
+++ b/net/dsa/dsa2.c
@@ -315,6 +315,16 @@ static int dsa_port_setup(struct dsa_port *dp)
break;
}
+ switch (dp->type) {
+ case DSA_PORT_TYPE_CPU:
+ case DSA_PORT_TYPE_DSA:
+ if (!err)
+ err = dsa_port_enable(dp, NULL);
+ break;
+ default:
+ break;
+ }
+
if (err)
devlink_port_unregister(&dp->devlink_port);
@@ -323,8 +333,17 @@ static int dsa_port_setup(struct dsa_port *dp)
static void dsa_port_teardown(struct dsa_port *dp)
{
- if (dp->type != DSA_PORT_TYPE_UNUSED)
+ switch (dp->type) {
+ case DSA_PORT_TYPE_UNUSED:
+ break;
+ case DSA_PORT_TYPE_CPU:
+ case DSA_PORT_TYPE_DSA:
+ dsa_port_disable(dp);
+ /* fall-through */
+ case DSA_PORT_TYPE_USER:
devlink_port_unregister(&dp->devlink_port);
+ break;
+ }
switch (dp->type) {
case DSA_PORT_TYPE_UNUSED:
diff --git a/net/dsa/port.c b/net/dsa/port.c
index f071acf2842b..0cadda57df1f 100644
--- a/net/dsa/port.c
+++ b/net/dsa/port.c
@@ -75,7 +75,7 @@ int dsa_port_enable(struct dsa_port *dp, struct phy_device *phy)
return err;
}
- if (!dp->bridge_dev)
+ if (dp->type == DSA_PORT_TYPE_USER && !dp->bridge_dev)
dsa_port_set_state_now(dp, BR_STATE_FORWARDING);
return 0;
@@ -86,7 +86,7 @@ void dsa_port_disable(struct dsa_port *dp)
struct dsa_switch *ds = dp->ds;
int port = dp->index;
- if (!dp->bridge_dev)
+ if (dp->type == DSA_PORT_TYPE_USER && !dp->bridge_dev)
dsa_port_set_state_now(dp, BR_STATE_DISABLED);
if (ds->ops->port_disable)
--
2.21.0
Powered by blists - more mailing lists