xref: /openbmc/linux/net/dsa/port.c (revision c832da79)
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  * Handling of a single switch port
4  *
5  * Copyright (c) 2017 Savoir-faire Linux Inc.
6  *	Vivien Didelot <vivien.didelot@savoirfairelinux.com>
7  */
8 
9 #include <linux/if_bridge.h>
10 #include <linux/notifier.h>
11 #include <linux/of_mdio.h>
12 #include <linux/of_net.h>
13 
14 #include "dsa_priv.h"
15 
16 /**
17  * dsa_port_notify - Notify the switching fabric of changes to a port
18  * @dp: port on which change occurred
19  * @e: event, must be of type DSA_NOTIFIER_*
20  * @v: event-specific value.
21  *
22  * Notify all switches in the DSA tree that this port's switch belongs to,
23  * including this switch itself, of an event. Allows the other switches to
24  * reconfigure themselves for cross-chip operations. Can also be used to
25  * reconfigure ports without net_devices (CPU ports, DSA links) whenever
26  * a user port's state changes.
27  */
28 static int dsa_port_notify(const struct dsa_port *dp, unsigned long e, void *v)
29 {
30 	return dsa_tree_notify(dp->ds->dst, e, v);
31 }
32 
33 static void dsa_port_notify_bridge_fdb_flush(const struct dsa_port *dp, u16 vid)
34 {
35 	struct net_device *brport_dev = dsa_port_to_bridge_port(dp);
36 	struct switchdev_notifier_fdb_info info = {
37 		.vid = vid,
38 	};
39 
40 	/* When the port becomes standalone it has already left the bridge.
41 	 * Don't notify the bridge in that case.
42 	 */
43 	if (!brport_dev)
44 		return;
45 
46 	call_switchdev_notifiers(SWITCHDEV_FDB_FLUSH_TO_BRIDGE,
47 				 brport_dev, &info.info, NULL);
48 }
49 
50 static void dsa_port_fast_age(const struct dsa_port *dp)
51 {
52 	struct dsa_switch *ds = dp->ds;
53 
54 	if (!ds->ops->port_fast_age)
55 		return;
56 
57 	ds->ops->port_fast_age(ds, dp->index);
58 
59 	/* flush all VLANs */
60 	dsa_port_notify_bridge_fdb_flush(dp, 0);
61 }
62 
63 static int dsa_port_vlan_fast_age(const struct dsa_port *dp, u16 vid)
64 {
65 	struct dsa_switch *ds = dp->ds;
66 	int err;
67 
68 	if (!ds->ops->port_vlan_fast_age)
69 		return -EOPNOTSUPP;
70 
71 	err = ds->ops->port_vlan_fast_age(ds, dp->index, vid);
72 
73 	if (!err)
74 		dsa_port_notify_bridge_fdb_flush(dp, vid);
75 
76 	return err;
77 }
78 
79 static int dsa_port_msti_fast_age(const struct dsa_port *dp, u16 msti)
80 {
81 	DECLARE_BITMAP(vids, VLAN_N_VID) = { 0 };
82 	int err, vid;
83 
84 	err = br_mst_get_info(dsa_port_bridge_dev_get(dp), msti, vids);
85 	if (err)
86 		return err;
87 
88 	for_each_set_bit(vid, vids, VLAN_N_VID) {
89 		err = dsa_port_vlan_fast_age(dp, vid);
90 		if (err)
91 			return err;
92 	}
93 
94 	return 0;
95 }
96 
97 static bool dsa_port_can_configure_learning(struct dsa_port *dp)
98 {
99 	struct switchdev_brport_flags flags = {
100 		.mask = BR_LEARNING,
101 	};
102 	struct dsa_switch *ds = dp->ds;
103 	int err;
104 
105 	if (!ds->ops->port_bridge_flags || !ds->ops->port_pre_bridge_flags)
106 		return false;
107 
108 	err = ds->ops->port_pre_bridge_flags(ds, dp->index, flags, NULL);
109 	return !err;
110 }
111 
112 int dsa_port_set_state(struct dsa_port *dp, u8 state, bool do_fast_age)
113 {
114 	struct dsa_switch *ds = dp->ds;
115 	int port = dp->index;
116 
117 	if (!ds->ops->port_stp_state_set)
118 		return -EOPNOTSUPP;
119 
120 	ds->ops->port_stp_state_set(ds, port, state);
121 
122 	if (!dsa_port_can_configure_learning(dp) ||
123 	    (do_fast_age && dp->learning)) {
124 		/* Fast age FDB entries or flush appropriate forwarding database
125 		 * for the given port, if we are moving it from Learning or
126 		 * Forwarding state, to Disabled or Blocking or Listening state.
127 		 * Ports that were standalone before the STP state change don't
128 		 * need to fast age the FDB, since address learning is off in
129 		 * standalone mode.
130 		 */
131 
132 		if ((dp->stp_state == BR_STATE_LEARNING ||
133 		     dp->stp_state == BR_STATE_FORWARDING) &&
134 		    (state == BR_STATE_DISABLED ||
135 		     state == BR_STATE_BLOCKING ||
136 		     state == BR_STATE_LISTENING))
137 			dsa_port_fast_age(dp);
138 	}
139 
140 	dp->stp_state = state;
141 
142 	return 0;
143 }
144 
145 static void dsa_port_set_state_now(struct dsa_port *dp, u8 state,
146 				   bool do_fast_age)
147 {
148 	int err;
149 
150 	err = dsa_port_set_state(dp, state, do_fast_age);
151 	if (err)
152 		pr_err("DSA: failed to set STP state %u (%d)\n", state, err);
153 }
154 
155 int dsa_port_set_mst_state(struct dsa_port *dp,
156 			   const struct switchdev_mst_state *state,
157 			   struct netlink_ext_ack *extack)
158 {
159 	struct dsa_switch *ds = dp->ds;
160 	u8 prev_state;
161 	int err;
162 
163 	if (!ds->ops->port_mst_state_set)
164 		return -EOPNOTSUPP;
165 
166 	err = br_mst_get_state(dsa_port_to_bridge_port(dp), state->msti,
167 			       &prev_state);
168 	if (err)
169 		return err;
170 
171 	err = ds->ops->port_mst_state_set(ds, dp->index, state);
172 	if (err)
173 		return err;
174 
175 	if (!(dp->learning &&
176 	      (prev_state == BR_STATE_LEARNING ||
177 	       prev_state == BR_STATE_FORWARDING) &&
178 	      (state->state == BR_STATE_DISABLED ||
179 	       state->state == BR_STATE_BLOCKING ||
180 	       state->state == BR_STATE_LISTENING)))
181 		return 0;
182 
183 	err = dsa_port_msti_fast_age(dp, state->msti);
184 	if (err)
185 		NL_SET_ERR_MSG_MOD(extack,
186 				   "Unable to flush associated VLANs");
187 
188 	return 0;
189 }
190 
191 int dsa_port_enable_rt(struct dsa_port *dp, struct phy_device *phy)
192 {
193 	struct dsa_switch *ds = dp->ds;
194 	int port = dp->index;
195 	int err;
196 
197 	if (ds->ops->port_enable) {
198 		err = ds->ops->port_enable(ds, port, phy);
199 		if (err)
200 			return err;
201 	}
202 
203 	if (!dp->bridge)
204 		dsa_port_set_state_now(dp, BR_STATE_FORWARDING, false);
205 
206 	if (dp->pl)
207 		phylink_start(dp->pl);
208 
209 	return 0;
210 }
211 
212 int dsa_port_enable(struct dsa_port *dp, struct phy_device *phy)
213 {
214 	int err;
215 
216 	rtnl_lock();
217 	err = dsa_port_enable_rt(dp, phy);
218 	rtnl_unlock();
219 
220 	return err;
221 }
222 
223 void dsa_port_disable_rt(struct dsa_port *dp)
224 {
225 	struct dsa_switch *ds = dp->ds;
226 	int port = dp->index;
227 
228 	if (dp->pl)
229 		phylink_stop(dp->pl);
230 
231 	if (!dp->bridge)
232 		dsa_port_set_state_now(dp, BR_STATE_DISABLED, false);
233 
234 	if (ds->ops->port_disable)
235 		ds->ops->port_disable(ds, port);
236 }
237 
238 void dsa_port_disable(struct dsa_port *dp)
239 {
240 	rtnl_lock();
241 	dsa_port_disable_rt(dp);
242 	rtnl_unlock();
243 }
244 
245 static void dsa_port_reset_vlan_filtering(struct dsa_port *dp,
246 					  struct dsa_bridge bridge)
247 {
248 	struct netlink_ext_ack extack = {0};
249 	bool change_vlan_filtering = false;
250 	struct dsa_switch *ds = dp->ds;
251 	struct dsa_port *other_dp;
252 	bool vlan_filtering;
253 	int err;
254 
255 	if (ds->needs_standalone_vlan_filtering &&
256 	    !br_vlan_enabled(bridge.dev)) {
257 		change_vlan_filtering = true;
258 		vlan_filtering = true;
259 	} else if (!ds->needs_standalone_vlan_filtering &&
260 		   br_vlan_enabled(bridge.dev)) {
261 		change_vlan_filtering = true;
262 		vlan_filtering = false;
263 	}
264 
265 	/* If the bridge was vlan_filtering, the bridge core doesn't trigger an
266 	 * event for changing vlan_filtering setting upon slave ports leaving
267 	 * it. That is a good thing, because that lets us handle it and also
268 	 * handle the case where the switch's vlan_filtering setting is global
269 	 * (not per port). When that happens, the correct moment to trigger the
270 	 * vlan_filtering callback is only when the last port leaves the last
271 	 * VLAN-aware bridge.
272 	 */
273 	if (change_vlan_filtering && ds->vlan_filtering_is_global) {
274 		dsa_switch_for_each_port(other_dp, ds) {
275 			struct net_device *br = dsa_port_bridge_dev_get(other_dp);
276 
277 			if (br && br_vlan_enabled(br)) {
278 				change_vlan_filtering = false;
279 				break;
280 			}
281 		}
282 	}
283 
284 	if (!change_vlan_filtering)
285 		return;
286 
287 	err = dsa_port_vlan_filtering(dp, vlan_filtering, &extack);
288 	if (extack._msg) {
289 		dev_err(ds->dev, "port %d: %s\n", dp->index,
290 			extack._msg);
291 	}
292 	if (err && err != -EOPNOTSUPP) {
293 		dev_err(ds->dev,
294 			"port %d failed to reset VLAN filtering to %d: %pe\n",
295 		       dp->index, vlan_filtering, ERR_PTR(err));
296 	}
297 }
298 
299 static int dsa_port_inherit_brport_flags(struct dsa_port *dp,
300 					 struct netlink_ext_ack *extack)
301 {
302 	const unsigned long mask = BR_LEARNING | BR_FLOOD | BR_MCAST_FLOOD |
303 				   BR_BCAST_FLOOD | BR_PORT_LOCKED;
304 	struct net_device *brport_dev = dsa_port_to_bridge_port(dp);
305 	int flag, err;
306 
307 	for_each_set_bit(flag, &mask, 32) {
308 		struct switchdev_brport_flags flags = {0};
309 
310 		flags.mask = BIT(flag);
311 
312 		if (br_port_flag_is_set(brport_dev, BIT(flag)))
313 			flags.val = BIT(flag);
314 
315 		err = dsa_port_bridge_flags(dp, flags, extack);
316 		if (err && err != -EOPNOTSUPP)
317 			return err;
318 	}
319 
320 	return 0;
321 }
322 
323 static void dsa_port_clear_brport_flags(struct dsa_port *dp)
324 {
325 	const unsigned long val = BR_FLOOD | BR_MCAST_FLOOD | BR_BCAST_FLOOD;
326 	const unsigned long mask = BR_LEARNING | BR_FLOOD | BR_MCAST_FLOOD |
327 				   BR_BCAST_FLOOD | BR_PORT_LOCKED;
328 	int flag, err;
329 
330 	for_each_set_bit(flag, &mask, 32) {
331 		struct switchdev_brport_flags flags = {0};
332 
333 		flags.mask = BIT(flag);
334 		flags.val = val & BIT(flag);
335 
336 		err = dsa_port_bridge_flags(dp, flags, NULL);
337 		if (err && err != -EOPNOTSUPP)
338 			dev_err(dp->ds->dev,
339 				"failed to clear bridge port flag %lu: %pe\n",
340 				flags.val, ERR_PTR(err));
341 	}
342 }
343 
344 static int dsa_port_switchdev_sync_attrs(struct dsa_port *dp,
345 					 struct netlink_ext_ack *extack)
346 {
347 	struct net_device *brport_dev = dsa_port_to_bridge_port(dp);
348 	struct net_device *br = dsa_port_bridge_dev_get(dp);
349 	int err;
350 
351 	err = dsa_port_inherit_brport_flags(dp, extack);
352 	if (err)
353 		return err;
354 
355 	err = dsa_port_set_state(dp, br_port_get_stp_state(brport_dev), false);
356 	if (err && err != -EOPNOTSUPP)
357 		return err;
358 
359 	err = dsa_port_vlan_filtering(dp, br_vlan_enabled(br), extack);
360 	if (err && err != -EOPNOTSUPP)
361 		return err;
362 
363 	err = dsa_port_ageing_time(dp, br_get_ageing_time(br));
364 	if (err && err != -EOPNOTSUPP)
365 		return err;
366 
367 	return 0;
368 }
369 
370 static void dsa_port_switchdev_unsync_attrs(struct dsa_port *dp,
371 					    struct dsa_bridge bridge)
372 {
373 	/* Configure the port for standalone mode (no address learning,
374 	 * flood everything).
375 	 * The bridge only emits SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS events
376 	 * when the user requests it through netlink or sysfs, but not
377 	 * automatically at port join or leave, so we need to handle resetting
378 	 * the brport flags ourselves. But we even prefer it that way, because
379 	 * otherwise, some setups might never get the notification they need,
380 	 * for example, when a port leaves a LAG that offloads the bridge,
381 	 * it becomes standalone, but as far as the bridge is concerned, no
382 	 * port ever left.
383 	 */
384 	dsa_port_clear_brport_flags(dp);
385 
386 	/* Port left the bridge, put in BR_STATE_DISABLED by the bridge layer,
387 	 * so allow it to be in BR_STATE_FORWARDING to be kept functional
388 	 */
389 	dsa_port_set_state_now(dp, BR_STATE_FORWARDING, true);
390 
391 	dsa_port_reset_vlan_filtering(dp, bridge);
392 
393 	/* Ageing time may be global to the switch chip, so don't change it
394 	 * here because we have no good reason (or value) to change it to.
395 	 */
396 }
397 
398 static int dsa_port_bridge_create(struct dsa_port *dp,
399 				  struct net_device *br,
400 				  struct netlink_ext_ack *extack)
401 {
402 	struct dsa_switch *ds = dp->ds;
403 	struct dsa_bridge *bridge;
404 
405 	bridge = dsa_tree_bridge_find(ds->dst, br);
406 	if (bridge) {
407 		refcount_inc(&bridge->refcount);
408 		dp->bridge = bridge;
409 		return 0;
410 	}
411 
412 	bridge = kzalloc(sizeof(*bridge), GFP_KERNEL);
413 	if (!bridge)
414 		return -ENOMEM;
415 
416 	refcount_set(&bridge->refcount, 1);
417 
418 	bridge->dev = br;
419 
420 	bridge->num = dsa_bridge_num_get(br, ds->max_num_bridges);
421 	if (ds->max_num_bridges && !bridge->num) {
422 		NL_SET_ERR_MSG_MOD(extack,
423 				   "Range of offloadable bridges exceeded");
424 		kfree(bridge);
425 		return -EOPNOTSUPP;
426 	}
427 
428 	dp->bridge = bridge;
429 
430 	return 0;
431 }
432 
433 static void dsa_port_bridge_destroy(struct dsa_port *dp,
434 				    const struct net_device *br)
435 {
436 	struct dsa_bridge *bridge = dp->bridge;
437 
438 	dp->bridge = NULL;
439 
440 	if (!refcount_dec_and_test(&bridge->refcount))
441 		return;
442 
443 	if (bridge->num)
444 		dsa_bridge_num_put(br, bridge->num);
445 
446 	kfree(bridge);
447 }
448 
449 static bool dsa_port_supports_mst(struct dsa_port *dp)
450 {
451 	struct dsa_switch *ds = dp->ds;
452 
453 	return ds->ops->vlan_msti_set &&
454 		ds->ops->port_mst_state_set &&
455 		ds->ops->port_vlan_fast_age &&
456 		dsa_port_can_configure_learning(dp);
457 }
458 
459 int dsa_port_bridge_join(struct dsa_port *dp, struct net_device *br,
460 			 struct netlink_ext_ack *extack)
461 {
462 	struct dsa_notifier_bridge_info info = {
463 		.dp = dp,
464 		.extack = extack,
465 	};
466 	struct net_device *dev = dp->slave;
467 	struct net_device *brport_dev;
468 	int err;
469 
470 	if (br_mst_enabled(br) && !dsa_port_supports_mst(dp))
471 		return -EOPNOTSUPP;
472 
473 	/* Here the interface is already bridged. Reflect the current
474 	 * configuration so that drivers can program their chips accordingly.
475 	 */
476 	err = dsa_port_bridge_create(dp, br, extack);
477 	if (err)
478 		return err;
479 
480 	brport_dev = dsa_port_to_bridge_port(dp);
481 
482 	info.bridge = *dp->bridge;
483 	err = dsa_broadcast(DSA_NOTIFIER_BRIDGE_JOIN, &info);
484 	if (err)
485 		goto out_rollback;
486 
487 	/* Drivers which support bridge TX forwarding should set this */
488 	dp->bridge->tx_fwd_offload = info.tx_fwd_offload;
489 
490 	err = switchdev_bridge_port_offload(brport_dev, dev, dp,
491 					    &dsa_slave_switchdev_notifier,
492 					    &dsa_slave_switchdev_blocking_notifier,
493 					    dp->bridge->tx_fwd_offload, extack);
494 	if (err)
495 		goto out_rollback_unbridge;
496 
497 	err = dsa_port_switchdev_sync_attrs(dp, extack);
498 	if (err)
499 		goto out_rollback_unoffload;
500 
501 	return 0;
502 
503 out_rollback_unoffload:
504 	switchdev_bridge_port_unoffload(brport_dev, dp,
505 					&dsa_slave_switchdev_notifier,
506 					&dsa_slave_switchdev_blocking_notifier);
507 	dsa_flush_workqueue();
508 out_rollback_unbridge:
509 	dsa_broadcast(DSA_NOTIFIER_BRIDGE_LEAVE, &info);
510 out_rollback:
511 	dsa_port_bridge_destroy(dp, br);
512 	return err;
513 }
514 
515 void dsa_port_pre_bridge_leave(struct dsa_port *dp, struct net_device *br)
516 {
517 	struct net_device *brport_dev = dsa_port_to_bridge_port(dp);
518 
519 	/* Don't try to unoffload something that is not offloaded */
520 	if (!brport_dev)
521 		return;
522 
523 	switchdev_bridge_port_unoffload(brport_dev, dp,
524 					&dsa_slave_switchdev_notifier,
525 					&dsa_slave_switchdev_blocking_notifier);
526 
527 	dsa_flush_workqueue();
528 }
529 
530 void dsa_port_bridge_leave(struct dsa_port *dp, struct net_device *br)
531 {
532 	struct dsa_notifier_bridge_info info = {
533 		.dp = dp,
534 	};
535 	int err;
536 
537 	/* If the port could not be offloaded to begin with, then
538 	 * there is nothing to do.
539 	 */
540 	if (!dp->bridge)
541 		return;
542 
543 	info.bridge = *dp->bridge;
544 
545 	/* Here the port is already unbridged. Reflect the current configuration
546 	 * so that drivers can program their chips accordingly.
547 	 */
548 	dsa_port_bridge_destroy(dp, br);
549 
550 	err = dsa_broadcast(DSA_NOTIFIER_BRIDGE_LEAVE, &info);
551 	if (err)
552 		dev_err(dp->ds->dev,
553 			"port %d failed to notify DSA_NOTIFIER_BRIDGE_LEAVE: %pe\n",
554 			dp->index, ERR_PTR(err));
555 
556 	dsa_port_switchdev_unsync_attrs(dp, info.bridge);
557 }
558 
559 int dsa_port_lag_change(struct dsa_port *dp,
560 			struct netdev_lag_lower_state_info *linfo)
561 {
562 	struct dsa_notifier_lag_info info = {
563 		.dp = dp,
564 	};
565 	bool tx_enabled;
566 
567 	if (!dp->lag)
568 		return 0;
569 
570 	/* On statically configured aggregates (e.g. loadbalance
571 	 * without LACP) ports will always be tx_enabled, even if the
572 	 * link is down. Thus we require both link_up and tx_enabled
573 	 * in order to include it in the tx set.
574 	 */
575 	tx_enabled = linfo->link_up && linfo->tx_enabled;
576 
577 	if (tx_enabled == dp->lag_tx_enabled)
578 		return 0;
579 
580 	dp->lag_tx_enabled = tx_enabled;
581 
582 	return dsa_port_notify(dp, DSA_NOTIFIER_LAG_CHANGE, &info);
583 }
584 
585 static int dsa_port_lag_create(struct dsa_port *dp,
586 			       struct net_device *lag_dev)
587 {
588 	struct dsa_switch *ds = dp->ds;
589 	struct dsa_lag *lag;
590 
591 	lag = dsa_tree_lag_find(ds->dst, lag_dev);
592 	if (lag) {
593 		refcount_inc(&lag->refcount);
594 		dp->lag = lag;
595 		return 0;
596 	}
597 
598 	lag = kzalloc(sizeof(*lag), GFP_KERNEL);
599 	if (!lag)
600 		return -ENOMEM;
601 
602 	refcount_set(&lag->refcount, 1);
603 	mutex_init(&lag->fdb_lock);
604 	INIT_LIST_HEAD(&lag->fdbs);
605 	lag->dev = lag_dev;
606 	dsa_lag_map(ds->dst, lag);
607 	dp->lag = lag;
608 
609 	return 0;
610 }
611 
612 static void dsa_port_lag_destroy(struct dsa_port *dp)
613 {
614 	struct dsa_lag *lag = dp->lag;
615 
616 	dp->lag = NULL;
617 	dp->lag_tx_enabled = false;
618 
619 	if (!refcount_dec_and_test(&lag->refcount))
620 		return;
621 
622 	WARN_ON(!list_empty(&lag->fdbs));
623 	dsa_lag_unmap(dp->ds->dst, lag);
624 	kfree(lag);
625 }
626 
627 int dsa_port_lag_join(struct dsa_port *dp, struct net_device *lag_dev,
628 		      struct netdev_lag_upper_info *uinfo,
629 		      struct netlink_ext_ack *extack)
630 {
631 	struct dsa_notifier_lag_info info = {
632 		.dp = dp,
633 		.info = uinfo,
634 	};
635 	struct net_device *bridge_dev;
636 	int err;
637 
638 	err = dsa_port_lag_create(dp, lag_dev);
639 	if (err)
640 		goto err_lag_create;
641 
642 	info.lag = *dp->lag;
643 	err = dsa_port_notify(dp, DSA_NOTIFIER_LAG_JOIN, &info);
644 	if (err)
645 		goto err_lag_join;
646 
647 	bridge_dev = netdev_master_upper_dev_get(lag_dev);
648 	if (!bridge_dev || !netif_is_bridge_master(bridge_dev))
649 		return 0;
650 
651 	err = dsa_port_bridge_join(dp, bridge_dev, extack);
652 	if (err)
653 		goto err_bridge_join;
654 
655 	return 0;
656 
657 err_bridge_join:
658 	dsa_port_notify(dp, DSA_NOTIFIER_LAG_LEAVE, &info);
659 err_lag_join:
660 	dsa_port_lag_destroy(dp);
661 err_lag_create:
662 	return err;
663 }
664 
665 void dsa_port_pre_lag_leave(struct dsa_port *dp, struct net_device *lag_dev)
666 {
667 	struct net_device *br = dsa_port_bridge_dev_get(dp);
668 
669 	if (br)
670 		dsa_port_pre_bridge_leave(dp, br);
671 }
672 
673 void dsa_port_lag_leave(struct dsa_port *dp, struct net_device *lag_dev)
674 {
675 	struct net_device *br = dsa_port_bridge_dev_get(dp);
676 	struct dsa_notifier_lag_info info = {
677 		.dp = dp,
678 	};
679 	int err;
680 
681 	if (!dp->lag)
682 		return;
683 
684 	/* Port might have been part of a LAG that in turn was
685 	 * attached to a bridge.
686 	 */
687 	if (br)
688 		dsa_port_bridge_leave(dp, br);
689 
690 	info.lag = *dp->lag;
691 
692 	dsa_port_lag_destroy(dp);
693 
694 	err = dsa_port_notify(dp, DSA_NOTIFIER_LAG_LEAVE, &info);
695 	if (err)
696 		dev_err(dp->ds->dev,
697 			"port %d failed to notify DSA_NOTIFIER_LAG_LEAVE: %pe\n",
698 			dp->index, ERR_PTR(err));
699 }
700 
701 /* Must be called under rcu_read_lock() */
702 static bool dsa_port_can_apply_vlan_filtering(struct dsa_port *dp,
703 					      bool vlan_filtering,
704 					      struct netlink_ext_ack *extack)
705 {
706 	struct dsa_switch *ds = dp->ds;
707 	struct dsa_port *other_dp;
708 	int err;
709 
710 	/* VLAN awareness was off, so the question is "can we turn it on".
711 	 * We may have had 8021q uppers, those need to go. Make sure we don't
712 	 * enter an inconsistent state: deny changing the VLAN awareness state
713 	 * as long as we have 8021q uppers.
714 	 */
715 	if (vlan_filtering && dsa_port_is_user(dp)) {
716 		struct net_device *br = dsa_port_bridge_dev_get(dp);
717 		struct net_device *upper_dev, *slave = dp->slave;
718 		struct list_head *iter;
719 
720 		netdev_for_each_upper_dev_rcu(slave, upper_dev, iter) {
721 			struct bridge_vlan_info br_info;
722 			u16 vid;
723 
724 			if (!is_vlan_dev(upper_dev))
725 				continue;
726 
727 			vid = vlan_dev_vlan_id(upper_dev);
728 
729 			/* br_vlan_get_info() returns -EINVAL or -ENOENT if the
730 			 * device, respectively the VID is not found, returning
731 			 * 0 means success, which is a failure for us here.
732 			 */
733 			err = br_vlan_get_info(br, vid, &br_info);
734 			if (err == 0) {
735 				NL_SET_ERR_MSG_MOD(extack,
736 						   "Must first remove VLAN uppers having VIDs also present in bridge");
737 				return false;
738 			}
739 		}
740 	}
741 
742 	if (!ds->vlan_filtering_is_global)
743 		return true;
744 
745 	/* For cases where enabling/disabling VLAN awareness is global to the
746 	 * switch, we need to handle the case where multiple bridges span
747 	 * different ports of the same switch device and one of them has a
748 	 * different setting than what is being requested.
749 	 */
750 	dsa_switch_for_each_port(other_dp, ds) {
751 		struct net_device *other_br = dsa_port_bridge_dev_get(other_dp);
752 
753 		/* If it's the same bridge, it also has same
754 		 * vlan_filtering setting => no need to check
755 		 */
756 		if (!other_br || other_br == dsa_port_bridge_dev_get(dp))
757 			continue;
758 
759 		if (br_vlan_enabled(other_br) != vlan_filtering) {
760 			NL_SET_ERR_MSG_MOD(extack,
761 					   "VLAN filtering is a global setting");
762 			return false;
763 		}
764 	}
765 	return true;
766 }
767 
768 int dsa_port_vlan_filtering(struct dsa_port *dp, bool vlan_filtering,
769 			    struct netlink_ext_ack *extack)
770 {
771 	bool old_vlan_filtering = dsa_port_is_vlan_filtering(dp);
772 	struct dsa_switch *ds = dp->ds;
773 	bool apply;
774 	int err;
775 
776 	if (!ds->ops->port_vlan_filtering)
777 		return -EOPNOTSUPP;
778 
779 	/* We are called from dsa_slave_switchdev_blocking_event(),
780 	 * which is not under rcu_read_lock(), unlike
781 	 * dsa_slave_switchdev_event().
782 	 */
783 	rcu_read_lock();
784 	apply = dsa_port_can_apply_vlan_filtering(dp, vlan_filtering, extack);
785 	rcu_read_unlock();
786 	if (!apply)
787 		return -EINVAL;
788 
789 	if (dsa_port_is_vlan_filtering(dp) == vlan_filtering)
790 		return 0;
791 
792 	err = ds->ops->port_vlan_filtering(ds, dp->index, vlan_filtering,
793 					   extack);
794 	if (err)
795 		return err;
796 
797 	if (ds->vlan_filtering_is_global) {
798 		struct dsa_port *other_dp;
799 
800 		ds->vlan_filtering = vlan_filtering;
801 
802 		dsa_switch_for_each_user_port(other_dp, ds) {
803 			struct net_device *slave = other_dp->slave;
804 
805 			/* We might be called in the unbind path, so not
806 			 * all slave devices might still be registered.
807 			 */
808 			if (!slave)
809 				continue;
810 
811 			err = dsa_slave_manage_vlan_filtering(slave,
812 							      vlan_filtering);
813 			if (err)
814 				goto restore;
815 		}
816 	} else {
817 		dp->vlan_filtering = vlan_filtering;
818 
819 		err = dsa_slave_manage_vlan_filtering(dp->slave,
820 						      vlan_filtering);
821 		if (err)
822 			goto restore;
823 	}
824 
825 	return 0;
826 
827 restore:
828 	ds->ops->port_vlan_filtering(ds, dp->index, old_vlan_filtering, NULL);
829 
830 	if (ds->vlan_filtering_is_global)
831 		ds->vlan_filtering = old_vlan_filtering;
832 	else
833 		dp->vlan_filtering = old_vlan_filtering;
834 
835 	return err;
836 }
837 
838 /* This enforces legacy behavior for switch drivers which assume they can't
839  * receive VLAN configuration when enslaved to a bridge with vlan_filtering=0
840  */
841 bool dsa_port_skip_vlan_configuration(struct dsa_port *dp)
842 {
843 	struct net_device *br = dsa_port_bridge_dev_get(dp);
844 	struct dsa_switch *ds = dp->ds;
845 
846 	if (!br)
847 		return false;
848 
849 	return !ds->configure_vlan_while_not_filtering && !br_vlan_enabled(br);
850 }
851 
852 int dsa_port_ageing_time(struct dsa_port *dp, clock_t ageing_clock)
853 {
854 	unsigned long ageing_jiffies = clock_t_to_jiffies(ageing_clock);
855 	unsigned int ageing_time = jiffies_to_msecs(ageing_jiffies);
856 	struct dsa_notifier_ageing_time_info info;
857 	int err;
858 
859 	info.ageing_time = ageing_time;
860 
861 	err = dsa_port_notify(dp, DSA_NOTIFIER_AGEING_TIME, &info);
862 	if (err)
863 		return err;
864 
865 	dp->ageing_time = ageing_time;
866 
867 	return 0;
868 }
869 
870 int dsa_port_mst_enable(struct dsa_port *dp, bool on,
871 			struct netlink_ext_ack *extack)
872 {
873 	if (on && !dsa_port_supports_mst(dp)) {
874 		NL_SET_ERR_MSG_MOD(extack, "Hardware does not support MST");
875 		return -EINVAL;
876 	}
877 
878 	return 0;
879 }
880 
881 int dsa_port_pre_bridge_flags(const struct dsa_port *dp,
882 			      struct switchdev_brport_flags flags,
883 			      struct netlink_ext_ack *extack)
884 {
885 	struct dsa_switch *ds = dp->ds;
886 
887 	if (!ds->ops->port_pre_bridge_flags)
888 		return -EINVAL;
889 
890 	return ds->ops->port_pre_bridge_flags(ds, dp->index, flags, extack);
891 }
892 
893 int dsa_port_bridge_flags(struct dsa_port *dp,
894 			  struct switchdev_brport_flags flags,
895 			  struct netlink_ext_ack *extack)
896 {
897 	struct dsa_switch *ds = dp->ds;
898 	int err;
899 
900 	if (!ds->ops->port_bridge_flags)
901 		return -EOPNOTSUPP;
902 
903 	err = ds->ops->port_bridge_flags(ds, dp->index, flags, extack);
904 	if (err)
905 		return err;
906 
907 	if (flags.mask & BR_LEARNING) {
908 		bool learning = flags.val & BR_LEARNING;
909 
910 		if (learning == dp->learning)
911 			return 0;
912 
913 		if ((dp->learning && !learning) &&
914 		    (dp->stp_state == BR_STATE_LEARNING ||
915 		     dp->stp_state == BR_STATE_FORWARDING))
916 			dsa_port_fast_age(dp);
917 
918 		dp->learning = learning;
919 	}
920 
921 	return 0;
922 }
923 
924 void dsa_port_set_host_flood(struct dsa_port *dp, bool uc, bool mc)
925 {
926 	struct dsa_switch *ds = dp->ds;
927 
928 	if (ds->ops->port_set_host_flood)
929 		ds->ops->port_set_host_flood(ds, dp->index, uc, mc);
930 }
931 
932 int dsa_port_vlan_msti(struct dsa_port *dp,
933 		       const struct switchdev_vlan_msti *msti)
934 {
935 	struct dsa_switch *ds = dp->ds;
936 
937 	if (!ds->ops->vlan_msti_set)
938 		return -EOPNOTSUPP;
939 
940 	return ds->ops->vlan_msti_set(ds, *dp->bridge, msti);
941 }
942 
943 int dsa_port_mtu_change(struct dsa_port *dp, int new_mtu)
944 {
945 	struct dsa_notifier_mtu_info info = {
946 		.dp = dp,
947 		.mtu = new_mtu,
948 	};
949 
950 	return dsa_port_notify(dp, DSA_NOTIFIER_MTU, &info);
951 }
952 
953 int dsa_port_fdb_add(struct dsa_port *dp, const unsigned char *addr,
954 		     u16 vid)
955 {
956 	struct dsa_notifier_fdb_info info = {
957 		.dp = dp,
958 		.addr = addr,
959 		.vid = vid,
960 		.db = {
961 			.type = DSA_DB_BRIDGE,
962 			.bridge = *dp->bridge,
963 		},
964 	};
965 
966 	/* Refcounting takes bridge.num as a key, and should be global for all
967 	 * bridges in the absence of FDB isolation, and per bridge otherwise.
968 	 * Force the bridge.num to zero here in the absence of FDB isolation.
969 	 */
970 	if (!dp->ds->fdb_isolation)
971 		info.db.bridge.num = 0;
972 
973 	return dsa_port_notify(dp, DSA_NOTIFIER_FDB_ADD, &info);
974 }
975 
976 int dsa_port_fdb_del(struct dsa_port *dp, const unsigned char *addr,
977 		     u16 vid)
978 {
979 	struct dsa_notifier_fdb_info info = {
980 		.dp = dp,
981 		.addr = addr,
982 		.vid = vid,
983 		.db = {
984 			.type = DSA_DB_BRIDGE,
985 			.bridge = *dp->bridge,
986 		},
987 	};
988 
989 	if (!dp->ds->fdb_isolation)
990 		info.db.bridge.num = 0;
991 
992 	return dsa_port_notify(dp, DSA_NOTIFIER_FDB_DEL, &info);
993 }
994 
995 static int dsa_port_host_fdb_add(struct dsa_port *dp,
996 				 const unsigned char *addr, u16 vid,
997 				 struct dsa_db db)
998 {
999 	struct dsa_notifier_fdb_info info = {
1000 		.dp = dp,
1001 		.addr = addr,
1002 		.vid = vid,
1003 		.db = db,
1004 	};
1005 
1006 	if (!dp->ds->fdb_isolation)
1007 		info.db.bridge.num = 0;
1008 
1009 	return dsa_port_notify(dp, DSA_NOTIFIER_HOST_FDB_ADD, &info);
1010 }
1011 
1012 int dsa_port_standalone_host_fdb_add(struct dsa_port *dp,
1013 				     const unsigned char *addr, u16 vid)
1014 {
1015 	struct dsa_db db = {
1016 		.type = DSA_DB_PORT,
1017 		.dp = dp,
1018 	};
1019 
1020 	return dsa_port_host_fdb_add(dp, addr, vid, db);
1021 }
1022 
1023 int dsa_port_bridge_host_fdb_add(struct dsa_port *dp,
1024 				 const unsigned char *addr, u16 vid)
1025 {
1026 	struct dsa_port *cpu_dp = dp->cpu_dp;
1027 	struct dsa_db db = {
1028 		.type = DSA_DB_BRIDGE,
1029 		.bridge = *dp->bridge,
1030 	};
1031 	int err;
1032 
1033 	/* Avoid a call to __dev_set_promiscuity() on the master, which
1034 	 * requires rtnl_lock(), since we can't guarantee that is held here,
1035 	 * and we can't take it either.
1036 	 */
1037 	if (cpu_dp->master->priv_flags & IFF_UNICAST_FLT) {
1038 		err = dev_uc_add(cpu_dp->master, addr);
1039 		if (err)
1040 			return err;
1041 	}
1042 
1043 	return dsa_port_host_fdb_add(dp, addr, vid, db);
1044 }
1045 
1046 static int dsa_port_host_fdb_del(struct dsa_port *dp,
1047 				 const unsigned char *addr, u16 vid,
1048 				 struct dsa_db db)
1049 {
1050 	struct dsa_notifier_fdb_info info = {
1051 		.dp = dp,
1052 		.addr = addr,
1053 		.vid = vid,
1054 		.db = db,
1055 	};
1056 
1057 	if (!dp->ds->fdb_isolation)
1058 		info.db.bridge.num = 0;
1059 
1060 	return dsa_port_notify(dp, DSA_NOTIFIER_HOST_FDB_DEL, &info);
1061 }
1062 
1063 int dsa_port_standalone_host_fdb_del(struct dsa_port *dp,
1064 				     const unsigned char *addr, u16 vid)
1065 {
1066 	struct dsa_db db = {
1067 		.type = DSA_DB_PORT,
1068 		.dp = dp,
1069 	};
1070 
1071 	return dsa_port_host_fdb_del(dp, addr, vid, db);
1072 }
1073 
1074 int dsa_port_bridge_host_fdb_del(struct dsa_port *dp,
1075 				 const unsigned char *addr, u16 vid)
1076 {
1077 	struct dsa_port *cpu_dp = dp->cpu_dp;
1078 	struct dsa_db db = {
1079 		.type = DSA_DB_BRIDGE,
1080 		.bridge = *dp->bridge,
1081 	};
1082 	int err;
1083 
1084 	if (cpu_dp->master->priv_flags & IFF_UNICAST_FLT) {
1085 		err = dev_uc_del(cpu_dp->master, addr);
1086 		if (err)
1087 			return err;
1088 	}
1089 
1090 	return dsa_port_host_fdb_del(dp, addr, vid, db);
1091 }
1092 
1093 int dsa_port_lag_fdb_add(struct dsa_port *dp, const unsigned char *addr,
1094 			 u16 vid)
1095 {
1096 	struct dsa_notifier_lag_fdb_info info = {
1097 		.lag = dp->lag,
1098 		.addr = addr,
1099 		.vid = vid,
1100 		.db = {
1101 			.type = DSA_DB_BRIDGE,
1102 			.bridge = *dp->bridge,
1103 		},
1104 	};
1105 
1106 	if (!dp->ds->fdb_isolation)
1107 		info.db.bridge.num = 0;
1108 
1109 	return dsa_port_notify(dp, DSA_NOTIFIER_LAG_FDB_ADD, &info);
1110 }
1111 
1112 int dsa_port_lag_fdb_del(struct dsa_port *dp, const unsigned char *addr,
1113 			 u16 vid)
1114 {
1115 	struct dsa_notifier_lag_fdb_info info = {
1116 		.lag = dp->lag,
1117 		.addr = addr,
1118 		.vid = vid,
1119 		.db = {
1120 			.type = DSA_DB_BRIDGE,
1121 			.bridge = *dp->bridge,
1122 		},
1123 	};
1124 
1125 	if (!dp->ds->fdb_isolation)
1126 		info.db.bridge.num = 0;
1127 
1128 	return dsa_port_notify(dp, DSA_NOTIFIER_LAG_FDB_DEL, &info);
1129 }
1130 
1131 int dsa_port_fdb_dump(struct dsa_port *dp, dsa_fdb_dump_cb_t *cb, void *data)
1132 {
1133 	struct dsa_switch *ds = dp->ds;
1134 	int port = dp->index;
1135 
1136 	if (!ds->ops->port_fdb_dump)
1137 		return -EOPNOTSUPP;
1138 
1139 	return ds->ops->port_fdb_dump(ds, port, cb, data);
1140 }
1141 
1142 int dsa_port_mdb_add(const struct dsa_port *dp,
1143 		     const struct switchdev_obj_port_mdb *mdb)
1144 {
1145 	struct dsa_notifier_mdb_info info = {
1146 		.dp = dp,
1147 		.mdb = mdb,
1148 		.db = {
1149 			.type = DSA_DB_BRIDGE,
1150 			.bridge = *dp->bridge,
1151 		},
1152 	};
1153 
1154 	if (!dp->ds->fdb_isolation)
1155 		info.db.bridge.num = 0;
1156 
1157 	return dsa_port_notify(dp, DSA_NOTIFIER_MDB_ADD, &info);
1158 }
1159 
1160 int dsa_port_mdb_del(const struct dsa_port *dp,
1161 		     const struct switchdev_obj_port_mdb *mdb)
1162 {
1163 	struct dsa_notifier_mdb_info info = {
1164 		.dp = dp,
1165 		.mdb = mdb,
1166 		.db = {
1167 			.type = DSA_DB_BRIDGE,
1168 			.bridge = *dp->bridge,
1169 		},
1170 	};
1171 
1172 	if (!dp->ds->fdb_isolation)
1173 		info.db.bridge.num = 0;
1174 
1175 	return dsa_port_notify(dp, DSA_NOTIFIER_MDB_DEL, &info);
1176 }
1177 
1178 static int dsa_port_host_mdb_add(const struct dsa_port *dp,
1179 				 const struct switchdev_obj_port_mdb *mdb,
1180 				 struct dsa_db db)
1181 {
1182 	struct dsa_notifier_mdb_info info = {
1183 		.dp = dp,
1184 		.mdb = mdb,
1185 		.db = db,
1186 	};
1187 
1188 	if (!dp->ds->fdb_isolation)
1189 		info.db.bridge.num = 0;
1190 
1191 	return dsa_port_notify(dp, DSA_NOTIFIER_HOST_MDB_ADD, &info);
1192 }
1193 
1194 int dsa_port_standalone_host_mdb_add(const struct dsa_port *dp,
1195 				     const struct switchdev_obj_port_mdb *mdb)
1196 {
1197 	struct dsa_db db = {
1198 		.type = DSA_DB_PORT,
1199 		.dp = dp,
1200 	};
1201 
1202 	return dsa_port_host_mdb_add(dp, mdb, db);
1203 }
1204 
1205 int dsa_port_bridge_host_mdb_add(const struct dsa_port *dp,
1206 				 const struct switchdev_obj_port_mdb *mdb)
1207 {
1208 	struct dsa_port *cpu_dp = dp->cpu_dp;
1209 	struct dsa_db db = {
1210 		.type = DSA_DB_BRIDGE,
1211 		.bridge = *dp->bridge,
1212 	};
1213 	int err;
1214 
1215 	err = dev_mc_add(cpu_dp->master, mdb->addr);
1216 	if (err)
1217 		return err;
1218 
1219 	return dsa_port_host_mdb_add(dp, mdb, db);
1220 }
1221 
1222 static int dsa_port_host_mdb_del(const struct dsa_port *dp,
1223 				 const struct switchdev_obj_port_mdb *mdb,
1224 				 struct dsa_db db)
1225 {
1226 	struct dsa_notifier_mdb_info info = {
1227 		.dp = dp,
1228 		.mdb = mdb,
1229 		.db = db,
1230 	};
1231 
1232 	if (!dp->ds->fdb_isolation)
1233 		info.db.bridge.num = 0;
1234 
1235 	return dsa_port_notify(dp, DSA_NOTIFIER_HOST_MDB_DEL, &info);
1236 }
1237 
1238 int dsa_port_standalone_host_mdb_del(const struct dsa_port *dp,
1239 				     const struct switchdev_obj_port_mdb *mdb)
1240 {
1241 	struct dsa_db db = {
1242 		.type = DSA_DB_PORT,
1243 		.dp = dp,
1244 	};
1245 
1246 	return dsa_port_host_mdb_del(dp, mdb, db);
1247 }
1248 
1249 int dsa_port_bridge_host_mdb_del(const struct dsa_port *dp,
1250 				 const struct switchdev_obj_port_mdb *mdb)
1251 {
1252 	struct dsa_port *cpu_dp = dp->cpu_dp;
1253 	struct dsa_db db = {
1254 		.type = DSA_DB_BRIDGE,
1255 		.bridge = *dp->bridge,
1256 	};
1257 	int err;
1258 
1259 	err = dev_mc_del(cpu_dp->master, mdb->addr);
1260 	if (err)
1261 		return err;
1262 
1263 	return dsa_port_host_mdb_del(dp, mdb, db);
1264 }
1265 
1266 int dsa_port_vlan_add(struct dsa_port *dp,
1267 		      const struct switchdev_obj_port_vlan *vlan,
1268 		      struct netlink_ext_ack *extack)
1269 {
1270 	struct dsa_notifier_vlan_info info = {
1271 		.dp = dp,
1272 		.vlan = vlan,
1273 		.extack = extack,
1274 	};
1275 
1276 	return dsa_port_notify(dp, DSA_NOTIFIER_VLAN_ADD, &info);
1277 }
1278 
1279 int dsa_port_vlan_del(struct dsa_port *dp,
1280 		      const struct switchdev_obj_port_vlan *vlan)
1281 {
1282 	struct dsa_notifier_vlan_info info = {
1283 		.dp = dp,
1284 		.vlan = vlan,
1285 	};
1286 
1287 	return dsa_port_notify(dp, DSA_NOTIFIER_VLAN_DEL, &info);
1288 }
1289 
1290 int dsa_port_host_vlan_add(struct dsa_port *dp,
1291 			   const struct switchdev_obj_port_vlan *vlan,
1292 			   struct netlink_ext_ack *extack)
1293 {
1294 	struct dsa_notifier_vlan_info info = {
1295 		.dp = dp,
1296 		.vlan = vlan,
1297 		.extack = extack,
1298 	};
1299 	struct dsa_port *cpu_dp = dp->cpu_dp;
1300 	int err;
1301 
1302 	err = dsa_port_notify(dp, DSA_NOTIFIER_HOST_VLAN_ADD, &info);
1303 	if (err && err != -EOPNOTSUPP)
1304 		return err;
1305 
1306 	vlan_vid_add(cpu_dp->master, htons(ETH_P_8021Q), vlan->vid);
1307 
1308 	return err;
1309 }
1310 
1311 int dsa_port_host_vlan_del(struct dsa_port *dp,
1312 			   const struct switchdev_obj_port_vlan *vlan)
1313 {
1314 	struct dsa_notifier_vlan_info info = {
1315 		.dp = dp,
1316 		.vlan = vlan,
1317 	};
1318 	struct dsa_port *cpu_dp = dp->cpu_dp;
1319 	int err;
1320 
1321 	err = dsa_port_notify(dp, DSA_NOTIFIER_HOST_VLAN_DEL, &info);
1322 	if (err && err != -EOPNOTSUPP)
1323 		return err;
1324 
1325 	vlan_vid_del(cpu_dp->master, htons(ETH_P_8021Q), vlan->vid);
1326 
1327 	return err;
1328 }
1329 
1330 int dsa_port_mrp_add(const struct dsa_port *dp,
1331 		     const struct switchdev_obj_mrp *mrp)
1332 {
1333 	struct dsa_switch *ds = dp->ds;
1334 
1335 	if (!ds->ops->port_mrp_add)
1336 		return -EOPNOTSUPP;
1337 
1338 	return ds->ops->port_mrp_add(ds, dp->index, mrp);
1339 }
1340 
1341 int dsa_port_mrp_del(const struct dsa_port *dp,
1342 		     const struct switchdev_obj_mrp *mrp)
1343 {
1344 	struct dsa_switch *ds = dp->ds;
1345 
1346 	if (!ds->ops->port_mrp_del)
1347 		return -EOPNOTSUPP;
1348 
1349 	return ds->ops->port_mrp_del(ds, dp->index, mrp);
1350 }
1351 
1352 int dsa_port_mrp_add_ring_role(const struct dsa_port *dp,
1353 			       const struct switchdev_obj_ring_role_mrp *mrp)
1354 {
1355 	struct dsa_switch *ds = dp->ds;
1356 
1357 	if (!ds->ops->port_mrp_add_ring_role)
1358 		return -EOPNOTSUPP;
1359 
1360 	return ds->ops->port_mrp_add_ring_role(ds, dp->index, mrp);
1361 }
1362 
1363 int dsa_port_mrp_del_ring_role(const struct dsa_port *dp,
1364 			       const struct switchdev_obj_ring_role_mrp *mrp)
1365 {
1366 	struct dsa_switch *ds = dp->ds;
1367 
1368 	if (!ds->ops->port_mrp_del_ring_role)
1369 		return -EOPNOTSUPP;
1370 
1371 	return ds->ops->port_mrp_del_ring_role(ds, dp->index, mrp);
1372 }
1373 
1374 void dsa_port_set_tag_protocol(struct dsa_port *cpu_dp,
1375 			       const struct dsa_device_ops *tag_ops)
1376 {
1377 	cpu_dp->rcv = tag_ops->rcv;
1378 	cpu_dp->tag_ops = tag_ops;
1379 }
1380 
1381 static struct phy_device *dsa_port_get_phy_device(struct dsa_port *dp)
1382 {
1383 	struct device_node *phy_dn;
1384 	struct phy_device *phydev;
1385 
1386 	phy_dn = of_parse_phandle(dp->dn, "phy-handle", 0);
1387 	if (!phy_dn)
1388 		return NULL;
1389 
1390 	phydev = of_phy_find_device(phy_dn);
1391 	if (!phydev) {
1392 		of_node_put(phy_dn);
1393 		return ERR_PTR(-EPROBE_DEFER);
1394 	}
1395 
1396 	of_node_put(phy_dn);
1397 	return phydev;
1398 }
1399 
1400 static void dsa_port_phylink_validate(struct phylink_config *config,
1401 				      unsigned long *supported,
1402 				      struct phylink_link_state *state)
1403 {
1404 	struct dsa_port *dp = container_of(config, struct dsa_port, pl_config);
1405 	struct dsa_switch *ds = dp->ds;
1406 
1407 	if (!ds->ops->phylink_validate) {
1408 		if (config->mac_capabilities)
1409 			phylink_generic_validate(config, supported, state);
1410 		return;
1411 	}
1412 
1413 	ds->ops->phylink_validate(ds, dp->index, supported, state);
1414 }
1415 
1416 static void dsa_port_phylink_mac_pcs_get_state(struct phylink_config *config,
1417 					       struct phylink_link_state *state)
1418 {
1419 	struct dsa_port *dp = container_of(config, struct dsa_port, pl_config);
1420 	struct dsa_switch *ds = dp->ds;
1421 	int err;
1422 
1423 	/* Only called for inband modes */
1424 	if (!ds->ops->phylink_mac_link_state) {
1425 		state->link = 0;
1426 		return;
1427 	}
1428 
1429 	err = ds->ops->phylink_mac_link_state(ds, dp->index, state);
1430 	if (err < 0) {
1431 		dev_err(ds->dev, "p%d: phylink_mac_link_state() failed: %d\n",
1432 			dp->index, err);
1433 		state->link = 0;
1434 	}
1435 }
1436 
1437 static struct phylink_pcs *
1438 dsa_port_phylink_mac_select_pcs(struct phylink_config *config,
1439 				phy_interface_t interface)
1440 {
1441 	struct dsa_port *dp = container_of(config, struct dsa_port, pl_config);
1442 	struct phylink_pcs *pcs = ERR_PTR(-EOPNOTSUPP);
1443 	struct dsa_switch *ds = dp->ds;
1444 
1445 	if (ds->ops->phylink_mac_select_pcs)
1446 		pcs = ds->ops->phylink_mac_select_pcs(ds, dp->index, interface);
1447 
1448 	return pcs;
1449 }
1450 
1451 static void dsa_port_phylink_mac_config(struct phylink_config *config,
1452 					unsigned int mode,
1453 					const struct phylink_link_state *state)
1454 {
1455 	struct dsa_port *dp = container_of(config, struct dsa_port, pl_config);
1456 	struct dsa_switch *ds = dp->ds;
1457 
1458 	if (!ds->ops->phylink_mac_config)
1459 		return;
1460 
1461 	ds->ops->phylink_mac_config(ds, dp->index, mode, state);
1462 }
1463 
1464 static void dsa_port_phylink_mac_an_restart(struct phylink_config *config)
1465 {
1466 	struct dsa_port *dp = container_of(config, struct dsa_port, pl_config);
1467 	struct dsa_switch *ds = dp->ds;
1468 
1469 	if (!ds->ops->phylink_mac_an_restart)
1470 		return;
1471 
1472 	ds->ops->phylink_mac_an_restart(ds, dp->index);
1473 }
1474 
1475 static void dsa_port_phylink_mac_link_down(struct phylink_config *config,
1476 					   unsigned int mode,
1477 					   phy_interface_t interface)
1478 {
1479 	struct dsa_port *dp = container_of(config, struct dsa_port, pl_config);
1480 	struct phy_device *phydev = NULL;
1481 	struct dsa_switch *ds = dp->ds;
1482 
1483 	if (dsa_port_is_user(dp))
1484 		phydev = dp->slave->phydev;
1485 
1486 	if (!ds->ops->phylink_mac_link_down) {
1487 		if (ds->ops->adjust_link && phydev)
1488 			ds->ops->adjust_link(ds, dp->index, phydev);
1489 		return;
1490 	}
1491 
1492 	ds->ops->phylink_mac_link_down(ds, dp->index, mode, interface);
1493 }
1494 
1495 static void dsa_port_phylink_mac_link_up(struct phylink_config *config,
1496 					 struct phy_device *phydev,
1497 					 unsigned int mode,
1498 					 phy_interface_t interface,
1499 					 int speed, int duplex,
1500 					 bool tx_pause, bool rx_pause)
1501 {
1502 	struct dsa_port *dp = container_of(config, struct dsa_port, pl_config);
1503 	struct dsa_switch *ds = dp->ds;
1504 
1505 	if (!ds->ops->phylink_mac_link_up) {
1506 		if (ds->ops->adjust_link && phydev)
1507 			ds->ops->adjust_link(ds, dp->index, phydev);
1508 		return;
1509 	}
1510 
1511 	ds->ops->phylink_mac_link_up(ds, dp->index, mode, interface, phydev,
1512 				     speed, duplex, tx_pause, rx_pause);
1513 }
1514 
1515 static const struct phylink_mac_ops dsa_port_phylink_mac_ops = {
1516 	.validate = dsa_port_phylink_validate,
1517 	.mac_select_pcs = dsa_port_phylink_mac_select_pcs,
1518 	.mac_pcs_get_state = dsa_port_phylink_mac_pcs_get_state,
1519 	.mac_config = dsa_port_phylink_mac_config,
1520 	.mac_an_restart = dsa_port_phylink_mac_an_restart,
1521 	.mac_link_down = dsa_port_phylink_mac_link_down,
1522 	.mac_link_up = dsa_port_phylink_mac_link_up,
1523 };
1524 
1525 int dsa_port_phylink_create(struct dsa_port *dp)
1526 {
1527 	struct dsa_switch *ds = dp->ds;
1528 	phy_interface_t mode;
1529 	int err;
1530 
1531 	err = of_get_phy_mode(dp->dn, &mode);
1532 	if (err)
1533 		mode = PHY_INTERFACE_MODE_NA;
1534 
1535 	/* Presence of phylink_mac_link_state or phylink_mac_an_restart is
1536 	 * an indicator of a legacy phylink driver.
1537 	 */
1538 	if (ds->ops->phylink_mac_link_state ||
1539 	    ds->ops->phylink_mac_an_restart)
1540 		dp->pl_config.legacy_pre_march2020 = true;
1541 
1542 	if (ds->ops->phylink_get_caps)
1543 		ds->ops->phylink_get_caps(ds, dp->index, &dp->pl_config);
1544 
1545 	dp->pl = phylink_create(&dp->pl_config, of_fwnode_handle(dp->dn),
1546 				mode, &dsa_port_phylink_mac_ops);
1547 	if (IS_ERR(dp->pl)) {
1548 		pr_err("error creating PHYLINK: %ld\n", PTR_ERR(dp->pl));
1549 		return PTR_ERR(dp->pl);
1550 	}
1551 
1552 	return 0;
1553 }
1554 
1555 static int dsa_port_setup_phy_of(struct dsa_port *dp, bool enable)
1556 {
1557 	struct dsa_switch *ds = dp->ds;
1558 	struct phy_device *phydev;
1559 	int port = dp->index;
1560 	int err = 0;
1561 
1562 	phydev = dsa_port_get_phy_device(dp);
1563 	if (!phydev)
1564 		return 0;
1565 
1566 	if (IS_ERR(phydev))
1567 		return PTR_ERR(phydev);
1568 
1569 	if (enable) {
1570 		err = genphy_resume(phydev);
1571 		if (err < 0)
1572 			goto err_put_dev;
1573 
1574 		err = genphy_read_status(phydev);
1575 		if (err < 0)
1576 			goto err_put_dev;
1577 	} else {
1578 		err = genphy_suspend(phydev);
1579 		if (err < 0)
1580 			goto err_put_dev;
1581 	}
1582 
1583 	if (ds->ops->adjust_link)
1584 		ds->ops->adjust_link(ds, port, phydev);
1585 
1586 	dev_dbg(ds->dev, "enabled port's phy: %s", phydev_name(phydev));
1587 
1588 err_put_dev:
1589 	put_device(&phydev->mdio.dev);
1590 	return err;
1591 }
1592 
1593 static int dsa_port_fixed_link_register_of(struct dsa_port *dp)
1594 {
1595 	struct device_node *dn = dp->dn;
1596 	struct dsa_switch *ds = dp->ds;
1597 	struct phy_device *phydev;
1598 	int port = dp->index;
1599 	phy_interface_t mode;
1600 	int err;
1601 
1602 	err = of_phy_register_fixed_link(dn);
1603 	if (err) {
1604 		dev_err(ds->dev,
1605 			"failed to register the fixed PHY of port %d\n",
1606 			port);
1607 		return err;
1608 	}
1609 
1610 	phydev = of_phy_find_device(dn);
1611 
1612 	err = of_get_phy_mode(dn, &mode);
1613 	if (err)
1614 		mode = PHY_INTERFACE_MODE_NA;
1615 	phydev->interface = mode;
1616 
1617 	genphy_read_status(phydev);
1618 
1619 	if (ds->ops->adjust_link)
1620 		ds->ops->adjust_link(ds, port, phydev);
1621 
1622 	put_device(&phydev->mdio.dev);
1623 
1624 	return 0;
1625 }
1626 
1627 static int dsa_port_phylink_register(struct dsa_port *dp)
1628 {
1629 	struct dsa_switch *ds = dp->ds;
1630 	struct device_node *port_dn = dp->dn;
1631 	int err;
1632 
1633 	dp->pl_config.dev = ds->dev;
1634 	dp->pl_config.type = PHYLINK_DEV;
1635 
1636 	err = dsa_port_phylink_create(dp);
1637 	if (err)
1638 		return err;
1639 
1640 	err = phylink_of_phy_connect(dp->pl, port_dn, 0);
1641 	if (err && err != -ENODEV) {
1642 		pr_err("could not attach to PHY: %d\n", err);
1643 		goto err_phy_connect;
1644 	}
1645 
1646 	return 0;
1647 
1648 err_phy_connect:
1649 	phylink_destroy(dp->pl);
1650 	return err;
1651 }
1652 
1653 int dsa_port_link_register_of(struct dsa_port *dp)
1654 {
1655 	struct dsa_switch *ds = dp->ds;
1656 	struct device_node *phy_np;
1657 	int port = dp->index;
1658 
1659 	if (!ds->ops->adjust_link) {
1660 		phy_np = of_parse_phandle(dp->dn, "phy-handle", 0);
1661 		if (of_phy_is_fixed_link(dp->dn) || phy_np) {
1662 			if (ds->ops->phylink_mac_link_down)
1663 				ds->ops->phylink_mac_link_down(ds, port,
1664 					MLO_AN_FIXED, PHY_INTERFACE_MODE_NA);
1665 			of_node_put(phy_np);
1666 			return dsa_port_phylink_register(dp);
1667 		}
1668 		of_node_put(phy_np);
1669 		return 0;
1670 	}
1671 
1672 	dev_warn(ds->dev,
1673 		 "Using legacy PHYLIB callbacks. Please migrate to PHYLINK!\n");
1674 
1675 	if (of_phy_is_fixed_link(dp->dn))
1676 		return dsa_port_fixed_link_register_of(dp);
1677 	else
1678 		return dsa_port_setup_phy_of(dp, true);
1679 }
1680 
1681 void dsa_port_link_unregister_of(struct dsa_port *dp)
1682 {
1683 	struct dsa_switch *ds = dp->ds;
1684 
1685 	if (!ds->ops->adjust_link && dp->pl) {
1686 		rtnl_lock();
1687 		phylink_disconnect_phy(dp->pl);
1688 		rtnl_unlock();
1689 		phylink_destroy(dp->pl);
1690 		dp->pl = NULL;
1691 		return;
1692 	}
1693 
1694 	if (of_phy_is_fixed_link(dp->dn))
1695 		of_phy_deregister_fixed_link(dp->dn);
1696 	else
1697 		dsa_port_setup_phy_of(dp, false);
1698 }
1699 
1700 int dsa_port_hsr_join(struct dsa_port *dp, struct net_device *hsr)
1701 {
1702 	struct dsa_switch *ds = dp->ds;
1703 	int err;
1704 
1705 	if (!ds->ops->port_hsr_join)
1706 		return -EOPNOTSUPP;
1707 
1708 	dp->hsr_dev = hsr;
1709 
1710 	err = ds->ops->port_hsr_join(ds, dp->index, hsr);
1711 	if (err)
1712 		dp->hsr_dev = NULL;
1713 
1714 	return err;
1715 }
1716 
1717 void dsa_port_hsr_leave(struct dsa_port *dp, struct net_device *hsr)
1718 {
1719 	struct dsa_switch *ds = dp->ds;
1720 	int err;
1721 
1722 	dp->hsr_dev = NULL;
1723 
1724 	if (ds->ops->port_hsr_leave) {
1725 		err = ds->ops->port_hsr_leave(ds, dp->index, hsr);
1726 		if (err)
1727 			dev_err(dp->ds->dev,
1728 				"port %d failed to leave HSR %s: %pe\n",
1729 				dp->index, hsr->name, ERR_PTR(err));
1730 	}
1731 }
1732 
1733 int dsa_port_tag_8021q_vlan_add(struct dsa_port *dp, u16 vid, bool broadcast)
1734 {
1735 	struct dsa_notifier_tag_8021q_vlan_info info = {
1736 		.dp = dp,
1737 		.vid = vid,
1738 	};
1739 
1740 	if (broadcast)
1741 		return dsa_broadcast(DSA_NOTIFIER_TAG_8021Q_VLAN_ADD, &info);
1742 
1743 	return dsa_port_notify(dp, DSA_NOTIFIER_TAG_8021Q_VLAN_ADD, &info);
1744 }
1745 
1746 void dsa_port_tag_8021q_vlan_del(struct dsa_port *dp, u16 vid, bool broadcast)
1747 {
1748 	struct dsa_notifier_tag_8021q_vlan_info info = {
1749 		.dp = dp,
1750 		.vid = vid,
1751 	};
1752 	int err;
1753 
1754 	if (broadcast)
1755 		err = dsa_broadcast(DSA_NOTIFIER_TAG_8021Q_VLAN_DEL, &info);
1756 	else
1757 		err = dsa_port_notify(dp, DSA_NOTIFIER_TAG_8021Q_VLAN_DEL, &info);
1758 	if (err)
1759 		dev_err(dp->ds->dev,
1760 			"port %d failed to notify tag_8021q VLAN %d deletion: %pe\n",
1761 			dp->index, vid, ERR_PTR(err));
1762 }
1763