summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVivien Didelot <vivien.didelot@gmail.com>2019-08-19 16:00:50 -0400
committerDavid S. Miller <davem@davemloft.net>2019-08-20 15:33:49 -0400
commit0394a63acfe2a6e1c08af0eb1a9133ee8650d7bd (patch)
tree82c72e93676d75af4c67b6c345fe09eeed70beaf
parent74be4babe72fd1ed1bba6b52d0bdc0d1e13f7af8 (diff)
net: dsa: enable and disable all ports
Call the .port_enable and .port_disable functions for all ports, not only the user ports, so that drivers may optimize the power consumption of all ports after a successful setup. Unused ports are now disabled on setup. CPU and DSA ports are now enabled on setup and disabled on teardown. User ports were already enabled at slave creation and disabled at slave destruction. Signed-off-by: Vivien Didelot <vivien.didelot@gmail.com> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/dsa/dsa2.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/net/dsa/dsa2.c b/net/dsa/dsa2.c
index 405552ac4c08..8c4eccb0cfe6 100644
--- a/net/dsa/dsa2.c
+++ b/net/dsa/dsa2.c
@@ -264,6 +264,7 @@ static int dsa_port_setup(struct dsa_port *dp)
264 264
265 switch (dp->type) { 265 switch (dp->type) {
266 case DSA_PORT_TYPE_UNUSED: 266 case DSA_PORT_TYPE_UNUSED:
267 dsa_port_disable(dp);
267 break; 268 break;
268 case DSA_PORT_TYPE_CPU: 269 case DSA_PORT_TYPE_CPU:
269 memset(dlp, 0, sizeof(*dlp)); 270 memset(dlp, 0, sizeof(*dlp));
@@ -276,6 +277,10 @@ static int dsa_port_setup(struct dsa_port *dp)
276 err = dsa_port_link_register_of(dp); 277 err = dsa_port_link_register_of(dp);
277 if (err) 278 if (err)
278 return err; 279 return err;
280
281 err = dsa_port_enable(dp, NULL);
282 if (err)
283 return err;
279 break; 284 break;
280 case DSA_PORT_TYPE_DSA: 285 case DSA_PORT_TYPE_DSA:
281 memset(dlp, 0, sizeof(*dlp)); 286 memset(dlp, 0, sizeof(*dlp));
@@ -288,6 +293,10 @@ static int dsa_port_setup(struct dsa_port *dp)
288 err = dsa_port_link_register_of(dp); 293 err = dsa_port_link_register_of(dp);
289 if (err) 294 if (err)
290 return err; 295 return err;
296
297 err = dsa_port_enable(dp, NULL);
298 if (err)
299 return err;
291 break; 300 break;
292 case DSA_PORT_TYPE_USER: 301 case DSA_PORT_TYPE_USER:
293 memset(dlp, 0, sizeof(*dlp)); 302 memset(dlp, 0, sizeof(*dlp));
@@ -317,11 +326,13 @@ static void dsa_port_teardown(struct dsa_port *dp)
317 case DSA_PORT_TYPE_UNUSED: 326 case DSA_PORT_TYPE_UNUSED:
318 break; 327 break;
319 case DSA_PORT_TYPE_CPU: 328 case DSA_PORT_TYPE_CPU:
329 dsa_port_disable(dp);
320 dsa_tag_driver_put(dp->tag_ops); 330 dsa_tag_driver_put(dp->tag_ops);
321 devlink_port_unregister(dlp); 331 devlink_port_unregister(dlp);
322 dsa_port_link_unregister_of(dp); 332 dsa_port_link_unregister_of(dp);
323 break; 333 break;
324 case DSA_PORT_TYPE_DSA: 334 case DSA_PORT_TYPE_DSA:
335 dsa_port_disable(dp);
325 devlink_port_unregister(dlp); 336 devlink_port_unregister(dlp);
326 dsa_port_link_unregister_of(dp); 337 dsa_port_link_unregister_of(dp);
327 break; 338 break;