diff --git a/net/dsa/dsa2.c b/net/dsa/dsa2.c index 405552ac4c084487a07db6760b36fb952a8548eb..8c4eccb0cfe6b79477359981b260889069f35618 100644 --- a/net/dsa/dsa2.c +++ b/net/dsa/dsa2.c @@ -264,6 +264,7 @@ static int dsa_port_setup(struct dsa_port *dp) switch (dp->type) { case DSA_PORT_TYPE_UNUSED: + dsa_port_disable(dp); break; case DSA_PORT_TYPE_CPU: memset(dlp, 0, sizeof(*dlp)); @@ -274,6 +275,10 @@ static int dsa_port_setup(struct dsa_port *dp) return err; err = dsa_port_link_register_of(dp); + if (err) + return err; + + err = dsa_port_enable(dp, NULL); if (err) return err; break; @@ -286,6 +291,10 @@ static int dsa_port_setup(struct dsa_port *dp) return err; err = dsa_port_link_register_of(dp); + if (err) + return err; + + err = dsa_port_enable(dp, NULL); if (err) return err; break; @@ -317,11 +326,13 @@ static void dsa_port_teardown(struct dsa_port *dp) case DSA_PORT_TYPE_UNUSED: break; case DSA_PORT_TYPE_CPU: + dsa_port_disable(dp); dsa_tag_driver_put(dp->tag_ops); devlink_port_unregister(dlp); dsa_port_link_unregister_of(dp); break; case DSA_PORT_TYPE_DSA: + dsa_port_disable(dp); devlink_port_unregister(dlp); dsa_port_link_unregister_of(dp); break;