return 0;
 }
 
-static int gswip_port_enable(struct dsa_switch *ds, int port,
-                            struct phy_device *phydev)
+static int gswip_port_setup(struct dsa_switch *ds, int port)
 {
        struct gswip_priv *priv = ds->priv;
        int err;
 
        if (!dsa_is_cpu_port(ds, port)) {
-               u32 mdio_phy = 0;
-
                err = gswip_add_single_port_br(priv, port, true);
                if (err)
                        return err;
+       }
+
+       return 0;
+}
+
+static int gswip_port_enable(struct dsa_switch *ds, int port,
+                            struct phy_device *phydev)
+{
+       struct gswip_priv *priv = ds->priv;
+
+       if (!dsa_is_cpu_port(ds, port)) {
+               u32 mdio_phy = 0;
 
                if (phydev)
                        mdio_phy = phydev->mdio.addr & GSWIP_MDIO_PHY_ADDR_MASK;
 static const struct dsa_switch_ops gswip_xrx200_switch_ops = {
        .get_tag_protocol       = gswip_get_tag_protocol,
        .setup                  = gswip_setup,
+       .port_setup             = gswip_port_setup,
        .port_enable            = gswip_port_enable,
        .port_disable           = gswip_port_disable,
        .port_bridge_join       = gswip_port_bridge_join,