Lines Matching refs:dp

23  * @dp: port on which change occurred
33 static int dsa_port_notify(const struct dsa_port *dp, unsigned long e, void *v)
35 return dsa_tree_notify(dp->ds->dst, e, v);
38 static void dsa_port_notify_bridge_fdb_flush(const struct dsa_port *dp, u16 vid)
40 struct net_device *brport_dev = dsa_port_to_bridge_port(dp);
55 static void dsa_port_fast_age(const struct dsa_port *dp)
57 struct dsa_switch *ds = dp->ds;
62 ds->ops->port_fast_age(ds, dp->index);
65 dsa_port_notify_bridge_fdb_flush(dp, 0);
68 static int dsa_port_vlan_fast_age(const struct dsa_port *dp, u16 vid)
70 struct dsa_switch *ds = dp->ds;
76 err = ds->ops->port_vlan_fast_age(ds, dp->index, vid);
79 dsa_port_notify_bridge_fdb_flush(dp, vid);
84 static int dsa_port_msti_fast_age(const struct dsa_port *dp, u16 msti)
89 err = br_mst_get_info(dsa_port_bridge_dev_get(dp), msti, vids);
94 err = dsa_port_vlan_fast_age(dp, vid);
102 static bool dsa_port_can_configure_learning(struct dsa_port *dp)
107 struct dsa_switch *ds = dp->ds;
113 err = ds->ops->port_pre_bridge_flags(ds, dp->index, flags, NULL);
117 bool dsa_port_supports_hwtstamp(struct dsa_port *dp)
119 struct dsa_switch *ds = dp->ds;
131 err = ds->ops->port_hwtstamp_get(ds, dp->index, &ifr);
135 int dsa_port_set_state(struct dsa_port *dp, u8 state, bool do_fast_age)
137 struct dsa_switch *ds = dp->ds;
138 int port = dp->index;
145 if (!dsa_port_can_configure_learning(dp) ||
146 (do_fast_age && dp->learning)) {
155 if ((dp->stp_state == BR_STATE_LEARNING ||
156 dp->stp_state == BR_STATE_FORWARDING) &&
160 dsa_port_fast_age(dp);
163 dp->stp_state = state;
168 static void dsa_port_set_state_now(struct dsa_port *dp, u8 state,
171 struct dsa_switch *ds = dp->ds;
174 err = dsa_port_set_state(dp, state, do_fast_age);
177 dp->index, state, ERR_PTR(err));
181 int dsa_port_set_mst_state(struct dsa_port *dp,
185 struct dsa_switch *ds = dp->ds;
192 err = br_mst_get_state(dsa_port_to_bridge_port(dp), state->msti,
197 err = ds->ops->port_mst_state_set(ds, dp->index, state);
201 if (!(dp->learning &&
209 err = dsa_port_msti_fast_age(dp, state->msti);
217 int dsa_port_enable_rt(struct dsa_port *dp, struct phy_device *phy)
219 struct dsa_switch *ds = dp->ds;
220 int port = dp->index;
229 if (!dp->bridge)
230 dsa_port_set_state_now(dp, BR_STATE_FORWARDING, false);
232 if (dp->pl)
233 phylink_start(dp->pl);
238 int dsa_port_enable(struct dsa_port *dp, struct phy_device *phy)
243 err = dsa_port_enable_rt(dp, phy);
249 void dsa_port_disable_rt(struct dsa_port *dp)
251 struct dsa_switch *ds = dp->ds;
252 int port = dp->index;
254 if (dp->pl)
255 phylink_stop(dp->pl);
257 if (!dp->bridge)
258 dsa_port_set_state_now(dp, BR_STATE_DISABLED, false);
264 void dsa_port_disable(struct dsa_port *dp)
267 dsa_port_disable_rt(dp);
271 static void dsa_port_reset_vlan_filtering(struct dsa_port *dp,
276 struct dsa_switch *ds = dp->ds;
313 err = dsa_port_vlan_filtering(dp, vlan_filtering, &extack);
315 dev_err(ds->dev, "port %d: %s\n", dp->index,
321 dp->index, vlan_filtering, ERR_PTR(err));
325 static int dsa_port_inherit_brport_flags(struct dsa_port *dp,
330 struct net_device *brport_dev = dsa_port_to_bridge_port(dp);
341 err = dsa_port_bridge_flags(dp, flags, extack);
349 static void dsa_port_clear_brport_flags(struct dsa_port *dp)
362 err = dsa_port_bridge_flags(dp, flags, NULL);
364 dev_err(dp->ds->dev,
370 static int dsa_port_switchdev_sync_attrs(struct dsa_port *dp,
373 struct net_device *brport_dev = dsa_port_to_bridge_port(dp);
374 struct net_device *br = dsa_port_bridge_dev_get(dp);
377 err = dsa_port_inherit_brport_flags(dp, extack);
381 err = dsa_port_set_state(dp, br_port_get_stp_state(brport_dev), false);
385 err = dsa_port_vlan_filtering(dp, br_vlan_enabled(br), extack);
389 err = dsa_port_ageing_time(dp, br_get_ageing_time(br));
396 static void dsa_port_switchdev_unsync_attrs(struct dsa_port *dp,
410 dsa_port_clear_brport_flags(dp);
415 dsa_port_set_state_now(dp, BR_STATE_FORWARDING, true);
417 dsa_port_reset_vlan_filtering(dp, bridge);
424 static int dsa_port_bridge_create(struct dsa_port *dp,
428 struct dsa_switch *ds = dp->ds;
434 dp->bridge = bridge;
454 dp->bridge = bridge;
459 static void dsa_port_bridge_destroy(struct dsa_port *dp,
462 struct dsa_bridge *bridge = dp->bridge;
464 dp->bridge = NULL;
475 static bool dsa_port_supports_mst(struct dsa_port *dp)
477 struct dsa_switch *ds = dp->ds;
482 dsa_port_can_configure_learning(dp);
485 int dsa_port_bridge_join(struct dsa_port *dp, struct net_device *br,
489 .dp = dp,
492 struct net_device *dev = dp->slave;
496 if (br_mst_enabled(br) && !dsa_port_supports_mst(dp))
502 err = dsa_port_bridge_create(dp, br, extack);
506 brport_dev = dsa_port_to_bridge_port(dp);
508 info.bridge = *dp->bridge;
514 dp->bridge->tx_fwd_offload = info.tx_fwd_offload;
516 err = switchdev_bridge_port_offload(brport_dev, dev, dp,
519 dp->bridge->tx_fwd_offload, extack);
523 err = dsa_port_switchdev_sync_attrs(dp, extack);
530 switchdev_bridge_port_unoffload(brport_dev, dp,
537 dsa_port_bridge_destroy(dp, br);
541 void dsa_port_pre_bridge_leave(struct dsa_port *dp, struct net_device *br)
543 struct net_device *brport_dev = dsa_port_to_bridge_port(dp);
549 switchdev_bridge_port_unoffload(brport_dev, dp,
556 void dsa_port_bridge_leave(struct dsa_port *dp, struct net_device *br)
559 .dp = dp,
566 if (!dp->bridge)
569 info.bridge = *dp->bridge;
574 dsa_port_bridge_destroy(dp, br);
578 dev_err(dp->ds->dev,
580 dp->index, ERR_PTR(err));
582 dsa_port_switchdev_unsync_attrs(dp, info.bridge);
585 int dsa_port_lag_change(struct dsa_port *dp,
589 .dp = dp,
593 if (!dp->lag)
603 if (tx_enabled == dp->lag_tx_enabled)
606 dp->lag_tx_enabled = tx_enabled;
608 return dsa_port_notify(dp, DSA_NOTIFIER_LAG_CHANGE, &info);
611 static int dsa_port_lag_create(struct dsa_port *dp,
614 struct dsa_switch *ds = dp->ds;
620 dp->lag = lag;
633 dp->lag = lag;
638 static void dsa_port_lag_destroy(struct dsa_port *dp)
640 struct dsa_lag *lag = dp->lag;
642 dp->lag = NULL;
643 dp->lag_tx_enabled = false;
649 dsa_lag_unmap(dp->ds->dst, lag);
653 int dsa_port_lag_join(struct dsa_port *dp, struct net_device *lag_dev,
658 .dp = dp,
665 err = dsa_port_lag_create(dp, lag_dev);
669 info.lag = *dp->lag;
670 err = dsa_port_notify(dp, DSA_NOTIFIER_LAG_JOIN, &info);
678 err = dsa_port_bridge_join(dp, bridge_dev, extack);
685 dsa_port_notify(dp, DSA_NOTIFIER_LAG_LEAVE, &info);
687 dsa_port_lag_destroy(dp);
692 void dsa_port_pre_lag_leave(struct dsa_port *dp, struct net_device *lag_dev)
694 struct net_device *br = dsa_port_bridge_dev_get(dp);
697 dsa_port_pre_bridge_leave(dp, br);
700 void dsa_port_lag_leave(struct dsa_port *dp, struct net_device *lag_dev)
702 struct net_device *br = dsa_port_bridge_dev_get(dp);
704 .dp = dp,
708 if (!dp->lag)
715 dsa_port_bridge_leave(dp, br);
717 info.lag = *dp->lag;
719 dsa_port_lag_destroy(dp);
721 err = dsa_port_notify(dp, DSA_NOTIFIER_LAG_LEAVE, &info);
723 dev_err(dp->ds->dev,
725 dp->index, ERR_PTR(err));
729 static bool dsa_port_can_apply_vlan_filtering(struct dsa_port *dp,
733 struct dsa_switch *ds = dp->ds;
742 if (vlan_filtering && dsa_port_is_user(dp)) {
743 struct net_device *br = dsa_port_bridge_dev_get(dp);
744 struct net_device *upper_dev, *slave = dp->slave;
783 if (!other_br || other_br == dsa_port_bridge_dev_get(dp))
795 int dsa_port_vlan_filtering(struct dsa_port *dp, bool vlan_filtering,
798 bool old_vlan_filtering = dsa_port_is_vlan_filtering(dp);
799 struct dsa_switch *ds = dp->ds;
811 apply = dsa_port_can_apply_vlan_filtering(dp, vlan_filtering, extack);
816 if (dsa_port_is_vlan_filtering(dp) == vlan_filtering)
819 err = ds->ops->port_vlan_filtering(ds, dp->index, vlan_filtering,
844 dp->vlan_filtering = vlan_filtering;
846 err = dsa_slave_manage_vlan_filtering(dp->slave,
855 ds->ops->port_vlan_filtering(ds, dp->index, old_vlan_filtering, NULL);
860 dp->vlan_filtering = old_vlan_filtering;
868 bool dsa_port_skip_vlan_configuration(struct dsa_port *dp)
870 struct net_device *br = dsa_port_bridge_dev_get(dp);
871 struct dsa_switch *ds = dp->ds;
879 int dsa_port_ageing_time(struct dsa_port *dp, clock_t ageing_clock)
888 err = dsa_port_notify(dp, DSA_NOTIFIER_AGEING_TIME, &info);
892 dp->ageing_time = ageing_time;
897 int dsa_port_mst_enable(struct dsa_port *dp, bool on,
900 if (on && !dsa_port_supports_mst(dp)) {
908 int dsa_port_pre_bridge_flags(const struct dsa_port *dp,
912 struct dsa_switch *ds = dp->ds;
917 return ds->ops->port_pre_bridge_flags(ds, dp->index, flags, extack);
920 int dsa_port_bridge_flags(struct dsa_port *dp,
924 struct dsa_switch *ds = dp->ds;
930 err = ds->ops->port_bridge_flags(ds, dp->index, flags, extack);
937 if (learning == dp->learning)
940 if ((dp->learning && !learning) &&
941 (dp->stp_state == BR_STATE_LEARNING ||
942 dp->stp_state == BR_STATE_FORWARDING))
943 dsa_port_fast_age(dp);
945 dp->learning = learning;
951 void dsa_port_set_host_flood(struct dsa_port *dp, bool uc, bool mc)
953 struct dsa_switch *ds = dp->ds;
956 ds->ops->port_set_host_flood(ds, dp->index, uc, mc);
959 int dsa_port_vlan_msti(struct dsa_port *dp,
962 struct dsa_switch *ds = dp->ds;
967 return ds->ops->vlan_msti_set(ds, *dp->bridge, msti);
970 int dsa_port_mtu_change(struct dsa_port *dp, int new_mtu)
973 .dp = dp,
977 return dsa_port_notify(dp, DSA_NOTIFIER_MTU, &info);
980 int dsa_port_fdb_add(struct dsa_port *dp, const unsigned char *addr,
984 .dp = dp,
989 .bridge = *dp->bridge,
997 if (!dp->ds->fdb_isolation)
1000 return dsa_port_notify(dp, DSA_NOTIFIER_FDB_ADD, &info);
1003 int dsa_port_fdb_del(struct dsa_port *dp, const unsigned char *addr,
1007 .dp = dp,
1012 .bridge = *dp->bridge,
1016 if (!dp->ds->fdb_isolation)
1019 return dsa_port_notify(dp, DSA_NOTIFIER_FDB_DEL, &info);
1022 static int dsa_port_host_fdb_add(struct dsa_port *dp,
1027 .dp = dp,
1033 return dsa_port_notify(dp, DSA_NOTIFIER_HOST_FDB_ADD, &info);
1036 int dsa_port_standalone_host_fdb_add(struct dsa_port *dp,
1041 .dp = dp,
1044 return dsa_port_host_fdb_add(dp, addr, vid, db);
1047 int dsa_port_bridge_host_fdb_add(struct dsa_port *dp,
1050 struct net_device *master = dsa_port_to_master(dp);
1053 .bridge = *dp->bridge,
1057 if (!dp->ds->fdb_isolation)
1070 return dsa_port_host_fdb_add(dp, addr, vid, db);
1073 static int dsa_port_host_fdb_del(struct dsa_port *dp,
1078 .dp = dp,
1084 return dsa_port_notify(dp, DSA_NOTIFIER_HOST_FDB_DEL, &info);
1087 int dsa_port_standalone_host_fdb_del(struct dsa_port *dp,
1092 .dp = dp,
1095 return dsa_port_host_fdb_del(dp, addr, vid, db);
1098 int dsa_port_bridge_host_fdb_del(struct dsa_port *dp,
1101 struct net_device *master = dsa_port_to_master(dp);
1104 .bridge = *dp->bridge,
1108 if (!dp->ds->fdb_isolation)
1117 return dsa_port_host_fdb_del(dp, addr, vid, db);
1120 int dsa_port_lag_fdb_add(struct dsa_port *dp, const unsigned char *addr,
1124 .lag = dp->lag,
1129 .bridge = *dp->bridge,
1133 if (!dp->ds->fdb_isolation)
1136 return dsa_port_notify(dp, DSA_NOTIFIER_LAG_FDB_ADD, &info);
1139 int dsa_port_lag_fdb_del(struct dsa_port *dp, const unsigned char *addr,
1143 .lag = dp->lag,
1148 .bridge = *dp->bridge,
1152 if (!dp->ds->fdb_isolation)
1155 return dsa_port_notify(dp, DSA_NOTIFIER_LAG_FDB_DEL, &info);
1158 int dsa_port_fdb_dump(struct dsa_port *dp, dsa_fdb_dump_cb_t *cb, void *data)
1160 struct dsa_switch *ds = dp->ds;
1161 int port = dp->index;
1169 int dsa_port_mdb_add(const struct dsa_port *dp,
1173 .dp = dp,
1177 .bridge = *dp->bridge,
1181 if (!dp->ds->fdb_isolation)
1184 return dsa_port_notify(dp, DSA_NOTIFIER_MDB_ADD, &info);
1187 int dsa_port_mdb_del(const struct dsa_port *dp,
1191 .dp = dp,
1195 .bridge = *dp->bridge,
1199 if (!dp->ds->fdb_isolation)
1202 return dsa_port_notify(dp, DSA_NOTIFIER_MDB_DEL, &info);
1205 static int dsa_port_host_mdb_add(const struct dsa_port *dp,
1210 .dp = dp,
1215 return dsa_port_notify(dp, DSA_NOTIFIER_HOST_MDB_ADD, &info);
1218 int dsa_port_standalone_host_mdb_add(const struct dsa_port *dp,
1223 .dp = dp,
1226 return dsa_port_host_mdb_add(dp, mdb, db);
1229 int dsa_port_bridge_host_mdb_add(const struct dsa_port *dp,
1232 struct net_device *master = dsa_port_to_master(dp);
1235 .bridge = *dp->bridge,
1239 if (!dp->ds->fdb_isolation)
1246 return dsa_port_host_mdb_add(dp, mdb, db);
1249 static int dsa_port_host_mdb_del(const struct dsa_port *dp,
1254 .dp = dp,
1259 return dsa_port_notify(dp, DSA_NOTIFIER_HOST_MDB_DEL, &info);
1262 int dsa_port_standalone_host_mdb_del(const struct dsa_port *dp,
1267 .dp = dp,
1270 return dsa_port_host_mdb_del(dp, mdb, db);
1273 int dsa_port_bridge_host_mdb_del(const struct dsa_port *dp,
1276 struct net_device *master = dsa_port_to_master(dp);
1279 .bridge = *dp->bridge,
1283 if (!dp->ds->fdb_isolation)
1290 return dsa_port_host_mdb_del(dp, mdb, db);
1293 int dsa_port_vlan_add(struct dsa_port *dp,
1298 .dp = dp,
1303 return dsa_port_notify(dp, DSA_NOTIFIER_VLAN_ADD, &info);
1306 int dsa_port_vlan_del(struct dsa_port *dp,
1310 .dp = dp,
1314 return dsa_port_notify(dp, DSA_NOTIFIER_VLAN_DEL, &info);
1317 int dsa_port_host_vlan_add(struct dsa_port *dp,
1321 struct net_device *master = dsa_port_to_master(dp);
1323 .dp = dp,
1329 err = dsa_port_notify(dp, DSA_NOTIFIER_HOST_VLAN_ADD, &info);
1338 int dsa_port_host_vlan_del(struct dsa_port *dp,
1341 struct net_device *master = dsa_port_to_master(dp);
1343 .dp = dp,
1348 err = dsa_port_notify(dp, DSA_NOTIFIER_HOST_VLAN_DEL, &info);
1357 int dsa_port_mrp_add(const struct dsa_port *dp,
1360 struct dsa_switch *ds = dp->ds;
1365 return ds->ops->port_mrp_add(ds, dp->index, mrp);
1368 int dsa_port_mrp_del(const struct dsa_port *dp,
1371 struct dsa_switch *ds = dp->ds;
1376 return ds->ops->port_mrp_del(ds, dp->index, mrp);
1379 int dsa_port_mrp_add_ring_role(const struct dsa_port *dp,
1382 struct dsa_switch *ds = dp->ds;
1387 return ds->ops->port_mrp_add_ring_role(ds, dp->index, mrp);
1390 int dsa_port_mrp_del_ring_role(const struct dsa_port *dp,
1393 struct dsa_switch *ds = dp->ds;
1398 return ds->ops->port_mrp_del_ring_role(ds, dp->index, mrp);
1401 static int dsa_port_assign_master(struct dsa_port *dp,
1406 struct dsa_switch *ds = dp->ds;
1407 int port = dp->index, err;
1417 dp->cpu_dp = master->dsa_ptr;
1418 dp->cpu_port_in_lag = netif_is_lag_master(master);
1423 /* Change the dp->cpu_dp affinity for a user port. Note that both cross-chip
1431 int dsa_port_change_master(struct dsa_port *dp, struct net_device *master,
1434 struct net_device *bridge_dev = dsa_port_bridge_dev_get(dp);
1435 struct net_device *old_master = dsa_port_to_master(dp);
1436 struct net_device *dev = dp->slave;
1437 struct dsa_switch *ds = dp->ds;
1446 dsa_port_pre_bridge_leave(dp, bridge_dev);
1447 dsa_port_bridge_leave(dp, bridge_dev);
1455 vlan_filtering = dsa_port_is_vlan_filtering(dp);
1470 err = dsa_port_assign_master(dp, master, extack, true);
1486 err = dsa_port_bridge_join(dp, bridge_dev, extack);
1503 dsa_port_assign_master(dp, old_master, NULL, false);
1514 dp->index, ERR_PTR(tmp));
1520 tmp = dsa_port_bridge_join(dp, bridge_dev, extack);
1524 dp->index, bridge_dev->name, ERR_PTR(tmp));
1538 static struct phy_device *dsa_port_get_phy_device(struct dsa_port *dp)
1543 phy_dn = of_parse_phandle(dp->dn, "phy-handle", 0);
1575 struct dsa_port *dp = container_of(config, struct dsa_port, pl_config);
1577 struct dsa_switch *ds = dp->ds;
1580 pcs = ds->ops->phylink_mac_select_pcs(ds, dp->index, interface);
1589 struct dsa_port *dp = container_of(config, struct dsa_port, pl_config);
1590 struct dsa_switch *ds = dp->ds;
1594 err = ds->ops->phylink_mac_prepare(ds, dp->index, mode,
1604 struct dsa_port *dp = container_of(config, struct dsa_port, pl_config);
1605 struct dsa_switch *ds = dp->ds;
1610 ds->ops->phylink_mac_config(ds, dp->index, mode, state);
1617 struct dsa_port *dp = container_of(config, struct dsa_port, pl_config);
1618 struct dsa_switch *ds = dp->ds;
1622 err = ds->ops->phylink_mac_finish(ds, dp->index, mode,
1632 struct dsa_port *dp = container_of(config, struct dsa_port, pl_config);
1634 struct dsa_switch *ds = dp->ds;
1636 if (dsa_port_is_user(dp))
1637 phydev = dp->slave->phydev;
1641 ds->ops->adjust_link(ds, dp->index, phydev);
1645 ds->ops->phylink_mac_link_down(ds, dp->index, mode, interface);
1655 struct dsa_port *dp = container_of(config, struct dsa_port, pl_config);
1656 struct dsa_switch *ds = dp->ds;
1660 ds->ops->adjust_link(ds, dp->index, phydev);
1664 ds->ops->phylink_mac_link_up(ds, dp->index, mode, interface, phydev,
1678 int dsa_port_phylink_create(struct dsa_port *dp)
1680 struct dsa_switch *ds = dp->ds;
1685 err = of_get_phy_mode(dp->dn, &mode);
1690 ds->ops->phylink_get_caps(ds, dp->index, &dp->pl_config);
1694 __set_bit(mode, dp->pl_config.supported_interfaces);
1697 dp->pl_config.supported_interfaces);
1699 dp->pl_config.supported_interfaces);
1703 pl = phylink_create(&dp->pl_config, of_fwnode_handle(dp->dn),
1710 dp->pl = pl;
1715 void dsa_port_phylink_destroy(struct dsa_port *dp)
1717 phylink_destroy(dp->pl);
1718 dp->pl = NULL;
1721 static int dsa_shared_port_setup_phy_of(struct dsa_port *dp, bool enable)
1723 struct dsa_switch *ds = dp->ds;
1725 int port = dp->index;
1728 phydev = dsa_port_get_phy_device(dp);
1759 static int dsa_shared_port_fixed_link_register_of(struct dsa_port *dp)
1761 struct device_node *dn = dp->dn;
1762 struct dsa_switch *ds = dp->ds;
1764 int port = dp->index;
1793 static int dsa_shared_port_phylink_register(struct dsa_port *dp)
1795 struct dsa_switch *ds = dp->ds;
1796 struct device_node *port_dn = dp->dn;
1799 dp->pl_config.dev = ds->dev;
1800 dp->pl_config.type = PHYLINK_DEV;
1802 err = dsa_port_phylink_create(dp);
1806 err = phylink_of_phy_connect(dp->pl, port_dn, 0);
1815 dsa_port_phylink_destroy(dp);
1933 static void dsa_shared_port_validate_of(struct dsa_port *dp,
1937 struct device_node *dn = dp->dn, *phy_np;
1938 struct dsa_switch *ds = dp->ds;
1948 dn, dsa_port_is_cpu(dp) ? "CPU" : "DSA", dp->index);
1967 dn, dsa_port_is_cpu(dp) ? "CPU" : "DSA", dp->index);
1970 int dsa_shared_port_link_register_of(struct dsa_port *dp)
1972 struct dsa_switch *ds = dp->ds;
1975 int port = dp->index;
1977 dsa_shared_port_validate_of(dp, &missing_phy_mode,
1989 dsa_port_is_cpu(dp) ? "CPU" : "DSA", dp->index);
1995 return dsa_shared_port_phylink_register(dp);
2003 if (of_phy_is_fixed_link(dp->dn))
2004 return dsa_shared_port_fixed_link_register_of(dp);
2006 return dsa_shared_port_setup_phy_of(dp, true);
2009 void dsa_shared_port_link_unregister_of(struct dsa_port *dp)
2011 struct dsa_switch *ds = dp->ds;
2013 if (!ds->ops->adjust_link && dp->pl) {
2015 phylink_disconnect_phy(dp->pl);
2017 dsa_port_phylink_destroy(dp);
2021 if (of_phy_is_fixed_link(dp->dn))
2022 of_phy_deregister_fixed_link(dp->dn);
2024 dsa_shared_port_setup_phy_of(dp, false);
2027 int dsa_port_hsr_join(struct dsa_port *dp, struct net_device *hsr)
2029 struct dsa_switch *ds = dp->ds;
2035 dp->hsr_dev = hsr;
2037 err = ds->ops->port_hsr_join(ds, dp->index, hsr);
2039 dp->hsr_dev = NULL;
2044 void dsa_port_hsr_leave(struct dsa_port *dp, struct net_device *hsr)
2046 struct dsa_switch *ds = dp->ds;
2049 dp->hsr_dev = NULL;
2052 err = ds->ops->port_hsr_leave(ds, dp->index, hsr);
2054 dev_err(dp->ds->dev,
2056 dp->index, hsr->name, ERR_PTR(err));
2060 int dsa_port_tag_8021q_vlan_add(struct dsa_port *dp, u16 vid, bool broadcast)
2063 .dp = dp,
2070 return dsa_port_notify(dp, DSA_NOTIFIER_TAG_8021Q_VLAN_ADD, &info);
2073 void dsa_port_tag_8021q_vlan_del(struct dsa_port *dp, u16 vid, bool broadcast)
2076 .dp = dp,
2084 err = dsa_port_notify(dp, DSA_NOTIFIER_TAG_8021Q_VLAN_DEL, &info);
2086 dev_err(dp->ds->dev,
2088 dp->index, vid, ERR_PTR(err));