xref: /openbmc/linux/net/dsa/slave.c (revision f50f212749e8a28803af3628acbeb85ee0458ed5)
1 /*
2  * net/dsa/slave.c - Slave device handling
3  * Copyright (c) 2008-2009 Marvell Semiconductor
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  */
10 
11 #include <linux/list.h>
12 #include <linux/etherdevice.h>
13 #include <linux/netdevice.h>
14 #include <linux/phy.h>
15 #include <linux/phy_fixed.h>
16 #include <linux/of_net.h>
17 #include <linux/of_mdio.h>
18 #include <linux/mdio.h>
19 #include <linux/list.h>
20 #include <net/rtnetlink.h>
21 #include <net/switchdev.h>
22 #include <net/pkt_cls.h>
23 #include <net/tc_act/tc_mirred.h>
24 #include <linux/if_bridge.h>
25 #include <linux/netpoll.h>
26 #include "dsa_priv.h"
27 
28 static bool dsa_slave_dev_check(struct net_device *dev);
29 
30 /* slave mii_bus handling ***************************************************/
31 static int dsa_slave_phy_read(struct mii_bus *bus, int addr, int reg)
32 {
33 	struct dsa_switch *ds = bus->priv;
34 
35 	if (ds->phys_mii_mask & (1 << addr))
36 		return ds->ops->phy_read(ds, addr, reg);
37 
38 	return 0xffff;
39 }
40 
41 static int dsa_slave_phy_write(struct mii_bus *bus, int addr, int reg, u16 val)
42 {
43 	struct dsa_switch *ds = bus->priv;
44 
45 	if (ds->phys_mii_mask & (1 << addr))
46 		return ds->ops->phy_write(ds, addr, reg, val);
47 
48 	return 0;
49 }
50 
51 void dsa_slave_mii_bus_init(struct dsa_switch *ds)
52 {
53 	ds->slave_mii_bus->priv = (void *)ds;
54 	ds->slave_mii_bus->name = "dsa slave smi";
55 	ds->slave_mii_bus->read = dsa_slave_phy_read;
56 	ds->slave_mii_bus->write = dsa_slave_phy_write;
57 	snprintf(ds->slave_mii_bus->id, MII_BUS_ID_SIZE, "dsa-%d.%d",
58 		 ds->dst->tree, ds->index);
59 	ds->slave_mii_bus->parent = ds->dev;
60 	ds->slave_mii_bus->phy_mask = ~ds->phys_mii_mask;
61 }
62 
63 
64 /* slave device handling ****************************************************/
65 static int dsa_slave_get_iflink(const struct net_device *dev)
66 {
67 	struct dsa_slave_priv *p = netdev_priv(dev);
68 
69 	return p->dp->ds->dst->master_netdev->ifindex;
70 }
71 
72 static inline bool dsa_port_is_bridged(struct dsa_port *dp)
73 {
74 	return !!dp->bridge_dev;
75 }
76 
77 static void dsa_port_set_stp_state(struct dsa_switch *ds, int port, u8 state)
78 {
79 	struct dsa_port *dp = &ds->ports[port];
80 
81 	if (ds->ops->port_stp_state_set)
82 		ds->ops->port_stp_state_set(ds, port, state);
83 
84 	if (ds->ops->port_fast_age) {
85 		/* Fast age FDB entries or flush appropriate forwarding database
86 		 * for the given port, if we are moving it from Learning or
87 		 * Forwarding state, to Disabled or Blocking or Listening state.
88 		 */
89 
90 		if ((dp->stp_state == BR_STATE_LEARNING ||
91 		     dp->stp_state == BR_STATE_FORWARDING) &&
92 		    (state == BR_STATE_DISABLED ||
93 		     state == BR_STATE_BLOCKING ||
94 		     state == BR_STATE_LISTENING))
95 			ds->ops->port_fast_age(ds, port);
96 	}
97 
98 	dp->stp_state = state;
99 }
100 
101 static int dsa_slave_open(struct net_device *dev)
102 {
103 	struct dsa_slave_priv *p = netdev_priv(dev);
104 	struct net_device *master = p->dp->ds->dst->master_netdev;
105 	struct dsa_switch *ds = p->dp->ds;
106 	u8 stp_state = dsa_port_is_bridged(p->dp) ?
107 			BR_STATE_BLOCKING : BR_STATE_FORWARDING;
108 	int err;
109 
110 	if (!(master->flags & IFF_UP))
111 		return -ENETDOWN;
112 
113 	if (!ether_addr_equal(dev->dev_addr, master->dev_addr)) {
114 		err = dev_uc_add(master, dev->dev_addr);
115 		if (err < 0)
116 			goto out;
117 	}
118 
119 	if (dev->flags & IFF_ALLMULTI) {
120 		err = dev_set_allmulti(master, 1);
121 		if (err < 0)
122 			goto del_unicast;
123 	}
124 	if (dev->flags & IFF_PROMISC) {
125 		err = dev_set_promiscuity(master, 1);
126 		if (err < 0)
127 			goto clear_allmulti;
128 	}
129 
130 	if (ds->ops->port_enable) {
131 		err = ds->ops->port_enable(ds, p->dp->index, p->phy);
132 		if (err)
133 			goto clear_promisc;
134 	}
135 
136 	dsa_port_set_stp_state(ds, p->dp->index, stp_state);
137 
138 	if (p->phy)
139 		phy_start(p->phy);
140 
141 	return 0;
142 
143 clear_promisc:
144 	if (dev->flags & IFF_PROMISC)
145 		dev_set_promiscuity(master, -1);
146 clear_allmulti:
147 	if (dev->flags & IFF_ALLMULTI)
148 		dev_set_allmulti(master, -1);
149 del_unicast:
150 	if (!ether_addr_equal(dev->dev_addr, master->dev_addr))
151 		dev_uc_del(master, dev->dev_addr);
152 out:
153 	return err;
154 }
155 
156 static int dsa_slave_close(struct net_device *dev)
157 {
158 	struct dsa_slave_priv *p = netdev_priv(dev);
159 	struct net_device *master = p->dp->ds->dst->master_netdev;
160 	struct dsa_switch *ds = p->dp->ds;
161 
162 	if (p->phy)
163 		phy_stop(p->phy);
164 
165 	dev_mc_unsync(master, dev);
166 	dev_uc_unsync(master, dev);
167 	if (dev->flags & IFF_ALLMULTI)
168 		dev_set_allmulti(master, -1);
169 	if (dev->flags & IFF_PROMISC)
170 		dev_set_promiscuity(master, -1);
171 
172 	if (!ether_addr_equal(dev->dev_addr, master->dev_addr))
173 		dev_uc_del(master, dev->dev_addr);
174 
175 	if (ds->ops->port_disable)
176 		ds->ops->port_disable(ds, p->dp->index, p->phy);
177 
178 	dsa_port_set_stp_state(ds, p->dp->index, BR_STATE_DISABLED);
179 
180 	return 0;
181 }
182 
183 static void dsa_slave_change_rx_flags(struct net_device *dev, int change)
184 {
185 	struct dsa_slave_priv *p = netdev_priv(dev);
186 	struct net_device *master = p->dp->ds->dst->master_netdev;
187 
188 	if (change & IFF_ALLMULTI)
189 		dev_set_allmulti(master, dev->flags & IFF_ALLMULTI ? 1 : -1);
190 	if (change & IFF_PROMISC)
191 		dev_set_promiscuity(master, dev->flags & IFF_PROMISC ? 1 : -1);
192 }
193 
194 static void dsa_slave_set_rx_mode(struct net_device *dev)
195 {
196 	struct dsa_slave_priv *p = netdev_priv(dev);
197 	struct net_device *master = p->dp->ds->dst->master_netdev;
198 
199 	dev_mc_sync(master, dev);
200 	dev_uc_sync(master, dev);
201 }
202 
203 static int dsa_slave_set_mac_address(struct net_device *dev, void *a)
204 {
205 	struct dsa_slave_priv *p = netdev_priv(dev);
206 	struct net_device *master = p->dp->ds->dst->master_netdev;
207 	struct sockaddr *addr = a;
208 	int err;
209 
210 	if (!is_valid_ether_addr(addr->sa_data))
211 		return -EADDRNOTAVAIL;
212 
213 	if (!(dev->flags & IFF_UP))
214 		goto out;
215 
216 	if (!ether_addr_equal(addr->sa_data, master->dev_addr)) {
217 		err = dev_uc_add(master, addr->sa_data);
218 		if (err < 0)
219 			return err;
220 	}
221 
222 	if (!ether_addr_equal(dev->dev_addr, master->dev_addr))
223 		dev_uc_del(master, dev->dev_addr);
224 
225 out:
226 	ether_addr_copy(dev->dev_addr, addr->sa_data);
227 
228 	return 0;
229 }
230 
231 static int dsa_slave_port_vlan_add(struct net_device *dev,
232 				   const struct switchdev_obj_port_vlan *vlan,
233 				   struct switchdev_trans *trans)
234 {
235 	struct dsa_slave_priv *p = netdev_priv(dev);
236 	struct dsa_port *dp = p->dp;
237 	struct dsa_switch *ds = dp->ds;
238 
239 	if (switchdev_trans_ph_prepare(trans)) {
240 		if (!ds->ops->port_vlan_prepare || !ds->ops->port_vlan_add)
241 			return -EOPNOTSUPP;
242 
243 		return ds->ops->port_vlan_prepare(ds, dp->index, vlan, trans);
244 	}
245 
246 	ds->ops->port_vlan_add(ds, dp->index, vlan, trans);
247 
248 	return 0;
249 }
250 
251 static int dsa_slave_port_vlan_del(struct net_device *dev,
252 				   const struct switchdev_obj_port_vlan *vlan)
253 {
254 	struct dsa_slave_priv *p = netdev_priv(dev);
255 	struct dsa_switch *ds = p->dp->ds;
256 
257 	if (!ds->ops->port_vlan_del)
258 		return -EOPNOTSUPP;
259 
260 	return ds->ops->port_vlan_del(ds, p->dp->index, vlan);
261 }
262 
263 static int dsa_slave_port_vlan_dump(struct net_device *dev,
264 				    struct switchdev_obj_port_vlan *vlan,
265 				    switchdev_obj_dump_cb_t *cb)
266 {
267 	struct dsa_slave_priv *p = netdev_priv(dev);
268 	struct dsa_switch *ds = p->dp->ds;
269 
270 	if (ds->ops->port_vlan_dump)
271 		return ds->ops->port_vlan_dump(ds, p->dp->index, vlan, cb);
272 
273 	return -EOPNOTSUPP;
274 }
275 
276 static int dsa_slave_port_fdb_add(struct net_device *dev,
277 				  const struct switchdev_obj_port_fdb *fdb,
278 				  struct switchdev_trans *trans)
279 {
280 	struct dsa_slave_priv *p = netdev_priv(dev);
281 	struct dsa_switch *ds = p->dp->ds;
282 
283 	if (switchdev_trans_ph_prepare(trans)) {
284 		if (!ds->ops->port_fdb_prepare || !ds->ops->port_fdb_add)
285 			return -EOPNOTSUPP;
286 
287 		return ds->ops->port_fdb_prepare(ds, p->dp->index, fdb, trans);
288 	}
289 
290 	ds->ops->port_fdb_add(ds, p->dp->index, fdb, trans);
291 
292 	return 0;
293 }
294 
295 static int dsa_slave_port_fdb_del(struct net_device *dev,
296 				  const struct switchdev_obj_port_fdb *fdb)
297 {
298 	struct dsa_slave_priv *p = netdev_priv(dev);
299 	struct dsa_switch *ds = p->dp->ds;
300 	int ret = -EOPNOTSUPP;
301 
302 	if (ds->ops->port_fdb_del)
303 		ret = ds->ops->port_fdb_del(ds, p->dp->index, fdb);
304 
305 	return ret;
306 }
307 
308 static int dsa_slave_port_fdb_dump(struct net_device *dev,
309 				   struct switchdev_obj_port_fdb *fdb,
310 				   switchdev_obj_dump_cb_t *cb)
311 {
312 	struct dsa_slave_priv *p = netdev_priv(dev);
313 	struct dsa_switch *ds = p->dp->ds;
314 
315 	if (ds->ops->port_fdb_dump)
316 		return ds->ops->port_fdb_dump(ds, p->dp->index, fdb, cb);
317 
318 	return -EOPNOTSUPP;
319 }
320 
321 static int dsa_slave_port_mdb_add(struct net_device *dev,
322 				  const struct switchdev_obj_port_mdb *mdb,
323 				  struct switchdev_trans *trans)
324 {
325 	struct dsa_slave_priv *p = netdev_priv(dev);
326 	struct dsa_switch *ds = p->dp->ds;
327 
328 	if (switchdev_trans_ph_prepare(trans)) {
329 		if (!ds->ops->port_mdb_prepare || !ds->ops->port_mdb_add)
330 			return -EOPNOTSUPP;
331 
332 		return ds->ops->port_mdb_prepare(ds, p->dp->index, mdb, trans);
333 	}
334 
335 	ds->ops->port_mdb_add(ds, p->dp->index, mdb, trans);
336 
337 	return 0;
338 }
339 
340 static int dsa_slave_port_mdb_del(struct net_device *dev,
341 				  const struct switchdev_obj_port_mdb *mdb)
342 {
343 	struct dsa_slave_priv *p = netdev_priv(dev);
344 	struct dsa_switch *ds = p->dp->ds;
345 
346 	if (ds->ops->port_mdb_del)
347 		return ds->ops->port_mdb_del(ds, p->dp->index, mdb);
348 
349 	return -EOPNOTSUPP;
350 }
351 
352 static int dsa_slave_port_mdb_dump(struct net_device *dev,
353 				   struct switchdev_obj_port_mdb *mdb,
354 				   switchdev_obj_dump_cb_t *cb)
355 {
356 	struct dsa_slave_priv *p = netdev_priv(dev);
357 	struct dsa_switch *ds = p->dp->ds;
358 
359 	if (ds->ops->port_mdb_dump)
360 		return ds->ops->port_mdb_dump(ds, p->dp->index, mdb, cb);
361 
362 	return -EOPNOTSUPP;
363 }
364 
365 static int dsa_slave_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
366 {
367 	struct dsa_slave_priv *p = netdev_priv(dev);
368 
369 	if (p->phy != NULL)
370 		return phy_mii_ioctl(p->phy, ifr, cmd);
371 
372 	return -EOPNOTSUPP;
373 }
374 
375 static int dsa_slave_stp_state_set(struct net_device *dev,
376 				   const struct switchdev_attr *attr,
377 				   struct switchdev_trans *trans)
378 {
379 	struct dsa_slave_priv *p = netdev_priv(dev);
380 	struct dsa_switch *ds = p->dp->ds;
381 
382 	if (switchdev_trans_ph_prepare(trans))
383 		return ds->ops->port_stp_state_set ? 0 : -EOPNOTSUPP;
384 
385 	dsa_port_set_stp_state(ds, p->dp->index, attr->u.stp_state);
386 
387 	return 0;
388 }
389 
390 static int dsa_slave_vlan_filtering(struct net_device *dev,
391 				    const struct switchdev_attr *attr,
392 				    struct switchdev_trans *trans)
393 {
394 	struct dsa_slave_priv *p = netdev_priv(dev);
395 	struct dsa_switch *ds = p->dp->ds;
396 
397 	/* bridge skips -EOPNOTSUPP, so skip the prepare phase */
398 	if (switchdev_trans_ph_prepare(trans))
399 		return 0;
400 
401 	if (ds->ops->port_vlan_filtering)
402 		return ds->ops->port_vlan_filtering(ds, p->dp->index,
403 						    attr->u.vlan_filtering);
404 
405 	return 0;
406 }
407 
408 static int dsa_fastest_ageing_time(struct dsa_switch *ds,
409 				   unsigned int ageing_time)
410 {
411 	int i;
412 
413 	for (i = 0; i < ds->num_ports; ++i) {
414 		struct dsa_port *dp = &ds->ports[i];
415 
416 		if (dp && dp->ageing_time && dp->ageing_time < ageing_time)
417 			ageing_time = dp->ageing_time;
418 	}
419 
420 	return ageing_time;
421 }
422 
423 static int dsa_slave_ageing_time(struct net_device *dev,
424 				 const struct switchdev_attr *attr,
425 				 struct switchdev_trans *trans)
426 {
427 	struct dsa_slave_priv *p = netdev_priv(dev);
428 	struct dsa_switch *ds = p->dp->ds;
429 	unsigned long ageing_jiffies = clock_t_to_jiffies(attr->u.ageing_time);
430 	unsigned int ageing_time = jiffies_to_msecs(ageing_jiffies);
431 
432 	/* bridge skips -EOPNOTSUPP, so skip the prepare phase */
433 	if (switchdev_trans_ph_prepare(trans))
434 		return 0;
435 
436 	/* Keep the fastest ageing time in case of multiple bridges */
437 	p->dp->ageing_time = ageing_time;
438 	ageing_time = dsa_fastest_ageing_time(ds, ageing_time);
439 
440 	if (ds->ops->set_ageing_time)
441 		return ds->ops->set_ageing_time(ds, ageing_time);
442 
443 	return 0;
444 }
445 
446 static int dsa_slave_port_attr_set(struct net_device *dev,
447 				   const struct switchdev_attr *attr,
448 				   struct switchdev_trans *trans)
449 {
450 	int ret;
451 
452 	switch (attr->id) {
453 	case SWITCHDEV_ATTR_ID_PORT_STP_STATE:
454 		ret = dsa_slave_stp_state_set(dev, attr, trans);
455 		break;
456 	case SWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING:
457 		ret = dsa_slave_vlan_filtering(dev, attr, trans);
458 		break;
459 	case SWITCHDEV_ATTR_ID_BRIDGE_AGEING_TIME:
460 		ret = dsa_slave_ageing_time(dev, attr, trans);
461 		break;
462 	default:
463 		ret = -EOPNOTSUPP;
464 		break;
465 	}
466 
467 	return ret;
468 }
469 
470 static int dsa_slave_port_obj_add(struct net_device *dev,
471 				  const struct switchdev_obj *obj,
472 				  struct switchdev_trans *trans)
473 {
474 	int err;
475 
476 	/* For the prepare phase, ensure the full set of changes is feasable in
477 	 * one go in order to signal a failure properly. If an operation is not
478 	 * supported, return -EOPNOTSUPP.
479 	 */
480 
481 	switch (obj->id) {
482 	case SWITCHDEV_OBJ_ID_PORT_FDB:
483 		err = dsa_slave_port_fdb_add(dev,
484 					     SWITCHDEV_OBJ_PORT_FDB(obj),
485 					     trans);
486 		break;
487 	case SWITCHDEV_OBJ_ID_PORT_MDB:
488 		err = dsa_slave_port_mdb_add(dev, SWITCHDEV_OBJ_PORT_MDB(obj),
489 					     trans);
490 		break;
491 	case SWITCHDEV_OBJ_ID_PORT_VLAN:
492 		err = dsa_slave_port_vlan_add(dev,
493 					      SWITCHDEV_OBJ_PORT_VLAN(obj),
494 					      trans);
495 		break;
496 	default:
497 		err = -EOPNOTSUPP;
498 		break;
499 	}
500 
501 	return err;
502 }
503 
504 static int dsa_slave_port_obj_del(struct net_device *dev,
505 				  const struct switchdev_obj *obj)
506 {
507 	int err;
508 
509 	switch (obj->id) {
510 	case SWITCHDEV_OBJ_ID_PORT_FDB:
511 		err = dsa_slave_port_fdb_del(dev,
512 					     SWITCHDEV_OBJ_PORT_FDB(obj));
513 		break;
514 	case SWITCHDEV_OBJ_ID_PORT_MDB:
515 		err = dsa_slave_port_mdb_del(dev, SWITCHDEV_OBJ_PORT_MDB(obj));
516 		break;
517 	case SWITCHDEV_OBJ_ID_PORT_VLAN:
518 		err = dsa_slave_port_vlan_del(dev,
519 					      SWITCHDEV_OBJ_PORT_VLAN(obj));
520 		break;
521 	default:
522 		err = -EOPNOTSUPP;
523 		break;
524 	}
525 
526 	return err;
527 }
528 
529 static int dsa_slave_port_obj_dump(struct net_device *dev,
530 				   struct switchdev_obj *obj,
531 				   switchdev_obj_dump_cb_t *cb)
532 {
533 	int err;
534 
535 	switch (obj->id) {
536 	case SWITCHDEV_OBJ_ID_PORT_FDB:
537 		err = dsa_slave_port_fdb_dump(dev,
538 					      SWITCHDEV_OBJ_PORT_FDB(obj),
539 					      cb);
540 		break;
541 	case SWITCHDEV_OBJ_ID_PORT_MDB:
542 		err = dsa_slave_port_mdb_dump(dev, SWITCHDEV_OBJ_PORT_MDB(obj),
543 					      cb);
544 		break;
545 	case SWITCHDEV_OBJ_ID_PORT_VLAN:
546 		err = dsa_slave_port_vlan_dump(dev,
547 					       SWITCHDEV_OBJ_PORT_VLAN(obj),
548 					       cb);
549 		break;
550 	default:
551 		err = -EOPNOTSUPP;
552 		break;
553 	}
554 
555 	return err;
556 }
557 
558 static int dsa_slave_bridge_port_join(struct net_device *dev,
559 				      struct net_device *br)
560 {
561 	struct dsa_slave_priv *p = netdev_priv(dev);
562 	struct dsa_switch *ds = p->dp->ds;
563 	int ret = -EOPNOTSUPP;
564 
565 	p->dp->bridge_dev = br;
566 
567 	if (ds->ops->port_bridge_join)
568 		ret = ds->ops->port_bridge_join(ds, p->dp->index, br);
569 
570 	return ret == -EOPNOTSUPP ? 0 : ret;
571 }
572 
573 static void dsa_slave_bridge_port_leave(struct net_device *dev,
574 					struct net_device *br)
575 {
576 	struct dsa_slave_priv *p = netdev_priv(dev);
577 	struct dsa_switch *ds = p->dp->ds;
578 
579 	p->dp->bridge_dev = NULL;
580 
581 	if (ds->ops->port_bridge_leave)
582 		ds->ops->port_bridge_leave(ds, p->dp->index, br);
583 
584 	/* Port left the bridge, put in BR_STATE_DISABLED by the bridge layer,
585 	 * so allow it to be in BR_STATE_FORWARDING to be kept functional
586 	 */
587 	dsa_port_set_stp_state(ds, p->dp->index, BR_STATE_FORWARDING);
588 }
589 
590 static int dsa_slave_port_attr_get(struct net_device *dev,
591 				   struct switchdev_attr *attr)
592 {
593 	struct dsa_slave_priv *p = netdev_priv(dev);
594 	struct dsa_switch *ds = p->dp->ds;
595 
596 	switch (attr->id) {
597 	case SWITCHDEV_ATTR_ID_PORT_PARENT_ID:
598 		attr->u.ppid.id_len = sizeof(ds->index);
599 		memcpy(&attr->u.ppid.id, &ds->index, attr->u.ppid.id_len);
600 		break;
601 	default:
602 		return -EOPNOTSUPP;
603 	}
604 
605 	return 0;
606 }
607 
608 static inline netdev_tx_t dsa_netpoll_send_skb(struct dsa_slave_priv *p,
609 					       struct sk_buff *skb)
610 {
611 #ifdef CONFIG_NET_POLL_CONTROLLER
612 	if (p->netpoll)
613 		netpoll_send_skb(p->netpoll, skb);
614 #else
615 	BUG();
616 #endif
617 	return NETDEV_TX_OK;
618 }
619 
620 static netdev_tx_t dsa_slave_xmit(struct sk_buff *skb, struct net_device *dev)
621 {
622 	struct dsa_slave_priv *p = netdev_priv(dev);
623 	struct sk_buff *nskb;
624 
625 	dev->stats.tx_packets++;
626 	dev->stats.tx_bytes += skb->len;
627 
628 	/* Transmit function may have to reallocate the original SKB */
629 	nskb = p->xmit(skb, dev);
630 	if (!nskb)
631 		return NETDEV_TX_OK;
632 
633 	/* SKB for netpoll still need to be mangled with the protocol-specific
634 	 * tag to be successfully transmitted
635 	 */
636 	if (unlikely(netpoll_tx_running(dev)))
637 		return dsa_netpoll_send_skb(p, nskb);
638 
639 	/* Queue the SKB for transmission on the parent interface, but
640 	 * do not modify its EtherType
641 	 */
642 	nskb->dev = p->dp->ds->dst->master_netdev;
643 	dev_queue_xmit(nskb);
644 
645 	return NETDEV_TX_OK;
646 }
647 
648 /* ethtool operations *******************************************************/
649 static int
650 dsa_slave_get_link_ksettings(struct net_device *dev,
651 			     struct ethtool_link_ksettings *cmd)
652 {
653 	struct dsa_slave_priv *p = netdev_priv(dev);
654 	int err;
655 
656 	err = -EOPNOTSUPP;
657 	if (p->phy != NULL) {
658 		err = phy_read_status(p->phy);
659 		if (err == 0)
660 			err = phy_ethtool_ksettings_get(p->phy, cmd);
661 	}
662 
663 	return err;
664 }
665 
666 static int
667 dsa_slave_set_link_ksettings(struct net_device *dev,
668 			     const struct ethtool_link_ksettings *cmd)
669 {
670 	struct dsa_slave_priv *p = netdev_priv(dev);
671 
672 	if (p->phy != NULL)
673 		return phy_ethtool_ksettings_set(p->phy, cmd);
674 
675 	return -EOPNOTSUPP;
676 }
677 
678 static void dsa_slave_get_drvinfo(struct net_device *dev,
679 				  struct ethtool_drvinfo *drvinfo)
680 {
681 	strlcpy(drvinfo->driver, "dsa", sizeof(drvinfo->driver));
682 	strlcpy(drvinfo->fw_version, "N/A", sizeof(drvinfo->fw_version));
683 	strlcpy(drvinfo->bus_info, "platform", sizeof(drvinfo->bus_info));
684 }
685 
686 static int dsa_slave_get_regs_len(struct net_device *dev)
687 {
688 	struct dsa_slave_priv *p = netdev_priv(dev);
689 	struct dsa_switch *ds = p->dp->ds;
690 
691 	if (ds->ops->get_regs_len)
692 		return ds->ops->get_regs_len(ds, p->dp->index);
693 
694 	return -EOPNOTSUPP;
695 }
696 
697 static void
698 dsa_slave_get_regs(struct net_device *dev, struct ethtool_regs *regs, void *_p)
699 {
700 	struct dsa_slave_priv *p = netdev_priv(dev);
701 	struct dsa_switch *ds = p->dp->ds;
702 
703 	if (ds->ops->get_regs)
704 		ds->ops->get_regs(ds, p->dp->index, regs, _p);
705 }
706 
707 static int dsa_slave_nway_reset(struct net_device *dev)
708 {
709 	struct dsa_slave_priv *p = netdev_priv(dev);
710 
711 	if (p->phy != NULL)
712 		return genphy_restart_aneg(p->phy);
713 
714 	return -EOPNOTSUPP;
715 }
716 
717 static u32 dsa_slave_get_link(struct net_device *dev)
718 {
719 	struct dsa_slave_priv *p = netdev_priv(dev);
720 
721 	if (p->phy != NULL) {
722 		genphy_update_link(p->phy);
723 		return p->phy->link;
724 	}
725 
726 	return -EOPNOTSUPP;
727 }
728 
729 static int dsa_slave_get_eeprom_len(struct net_device *dev)
730 {
731 	struct dsa_slave_priv *p = netdev_priv(dev);
732 	struct dsa_switch *ds = p->dp->ds;
733 
734 	if (ds->cd && ds->cd->eeprom_len)
735 		return ds->cd->eeprom_len;
736 
737 	if (ds->ops->get_eeprom_len)
738 		return ds->ops->get_eeprom_len(ds);
739 
740 	return 0;
741 }
742 
743 static int dsa_slave_get_eeprom(struct net_device *dev,
744 				struct ethtool_eeprom *eeprom, u8 *data)
745 {
746 	struct dsa_slave_priv *p = netdev_priv(dev);
747 	struct dsa_switch *ds = p->dp->ds;
748 
749 	if (ds->ops->get_eeprom)
750 		return ds->ops->get_eeprom(ds, eeprom, data);
751 
752 	return -EOPNOTSUPP;
753 }
754 
755 static int dsa_slave_set_eeprom(struct net_device *dev,
756 				struct ethtool_eeprom *eeprom, u8 *data)
757 {
758 	struct dsa_slave_priv *p = netdev_priv(dev);
759 	struct dsa_switch *ds = p->dp->ds;
760 
761 	if (ds->ops->set_eeprom)
762 		return ds->ops->set_eeprom(ds, eeprom, data);
763 
764 	return -EOPNOTSUPP;
765 }
766 
767 static void dsa_slave_get_strings(struct net_device *dev,
768 				  uint32_t stringset, uint8_t *data)
769 {
770 	struct dsa_slave_priv *p = netdev_priv(dev);
771 	struct dsa_switch *ds = p->dp->ds;
772 
773 	if (stringset == ETH_SS_STATS) {
774 		int len = ETH_GSTRING_LEN;
775 
776 		strncpy(data, "tx_packets", len);
777 		strncpy(data + len, "tx_bytes", len);
778 		strncpy(data + 2 * len, "rx_packets", len);
779 		strncpy(data + 3 * len, "rx_bytes", len);
780 		if (ds->ops->get_strings)
781 			ds->ops->get_strings(ds, p->dp->index, data + 4 * len);
782 	}
783 }
784 
785 static void dsa_cpu_port_get_ethtool_stats(struct net_device *dev,
786 					   struct ethtool_stats *stats,
787 					   uint64_t *data)
788 {
789 	struct dsa_switch_tree *dst = dev->dsa_ptr;
790 	struct dsa_switch *ds = dst->cpu_switch;
791 	s8 cpu_port = dst->cpu_port;
792 	int count = 0;
793 
794 	if (dst->master_ethtool_ops.get_sset_count) {
795 		count = dst->master_ethtool_ops.get_sset_count(dev,
796 							       ETH_SS_STATS);
797 		dst->master_ethtool_ops.get_ethtool_stats(dev, stats, data);
798 	}
799 
800 	if (ds->ops->get_ethtool_stats)
801 		ds->ops->get_ethtool_stats(ds, cpu_port, data + count);
802 }
803 
804 static int dsa_cpu_port_get_sset_count(struct net_device *dev, int sset)
805 {
806 	struct dsa_switch_tree *dst = dev->dsa_ptr;
807 	struct dsa_switch *ds = dst->cpu_switch;
808 	int count = 0;
809 
810 	if (dst->master_ethtool_ops.get_sset_count)
811 		count += dst->master_ethtool_ops.get_sset_count(dev, sset);
812 
813 	if (sset == ETH_SS_STATS && ds->ops->get_sset_count)
814 		count += ds->ops->get_sset_count(ds);
815 
816 	return count;
817 }
818 
819 static void dsa_cpu_port_get_strings(struct net_device *dev,
820 				     uint32_t stringset, uint8_t *data)
821 {
822 	struct dsa_switch_tree *dst = dev->dsa_ptr;
823 	struct dsa_switch *ds = dst->cpu_switch;
824 	s8 cpu_port = dst->cpu_port;
825 	int len = ETH_GSTRING_LEN;
826 	int mcount = 0, count;
827 	unsigned int i;
828 	uint8_t pfx[4];
829 	uint8_t *ndata;
830 
831 	snprintf(pfx, sizeof(pfx), "p%.2d", cpu_port);
832 	/* We do not want to be NULL-terminated, since this is a prefix */
833 	pfx[sizeof(pfx) - 1] = '_';
834 
835 	if (dst->master_ethtool_ops.get_sset_count) {
836 		mcount = dst->master_ethtool_ops.get_sset_count(dev,
837 								ETH_SS_STATS);
838 		dst->master_ethtool_ops.get_strings(dev, stringset, data);
839 	}
840 
841 	if (stringset == ETH_SS_STATS && ds->ops->get_strings) {
842 		ndata = data + mcount * len;
843 		/* This function copies ETH_GSTRINGS_LEN bytes, we will mangle
844 		 * the output after to prepend our CPU port prefix we
845 		 * constructed earlier
846 		 */
847 		ds->ops->get_strings(ds, cpu_port, ndata);
848 		count = ds->ops->get_sset_count(ds);
849 		for (i = 0; i < count; i++) {
850 			memmove(ndata + (i * len + sizeof(pfx)),
851 				ndata + i * len, len - sizeof(pfx));
852 			memcpy(ndata + i * len, pfx, sizeof(pfx));
853 		}
854 	}
855 }
856 
857 static void dsa_slave_get_ethtool_stats(struct net_device *dev,
858 					struct ethtool_stats *stats,
859 					uint64_t *data)
860 {
861 	struct dsa_slave_priv *p = netdev_priv(dev);
862 	struct dsa_switch *ds = p->dp->ds;
863 
864 	data[0] = dev->stats.tx_packets;
865 	data[1] = dev->stats.tx_bytes;
866 	data[2] = dev->stats.rx_packets;
867 	data[3] = dev->stats.rx_bytes;
868 	if (ds->ops->get_ethtool_stats)
869 		ds->ops->get_ethtool_stats(ds, p->dp->index, data + 4);
870 }
871 
872 static int dsa_slave_get_sset_count(struct net_device *dev, int sset)
873 {
874 	struct dsa_slave_priv *p = netdev_priv(dev);
875 	struct dsa_switch *ds = p->dp->ds;
876 
877 	if (sset == ETH_SS_STATS) {
878 		int count;
879 
880 		count = 4;
881 		if (ds->ops->get_sset_count)
882 			count += ds->ops->get_sset_count(ds);
883 
884 		return count;
885 	}
886 
887 	return -EOPNOTSUPP;
888 }
889 
890 static void dsa_slave_get_wol(struct net_device *dev, struct ethtool_wolinfo *w)
891 {
892 	struct dsa_slave_priv *p = netdev_priv(dev);
893 	struct dsa_switch *ds = p->dp->ds;
894 
895 	if (ds->ops->get_wol)
896 		ds->ops->get_wol(ds, p->dp->index, w);
897 }
898 
899 static int dsa_slave_set_wol(struct net_device *dev, struct ethtool_wolinfo *w)
900 {
901 	struct dsa_slave_priv *p = netdev_priv(dev);
902 	struct dsa_switch *ds = p->dp->ds;
903 	int ret = -EOPNOTSUPP;
904 
905 	if (ds->ops->set_wol)
906 		ret = ds->ops->set_wol(ds, p->dp->index, w);
907 
908 	return ret;
909 }
910 
911 static int dsa_slave_set_eee(struct net_device *dev, struct ethtool_eee *e)
912 {
913 	struct dsa_slave_priv *p = netdev_priv(dev);
914 	struct dsa_switch *ds = p->dp->ds;
915 	int ret;
916 
917 	if (!ds->ops->set_eee)
918 		return -EOPNOTSUPP;
919 
920 	ret = ds->ops->set_eee(ds, p->dp->index, p->phy, e);
921 	if (ret)
922 		return ret;
923 
924 	if (p->phy)
925 		ret = phy_ethtool_set_eee(p->phy, e);
926 
927 	return ret;
928 }
929 
930 static int dsa_slave_get_eee(struct net_device *dev, struct ethtool_eee *e)
931 {
932 	struct dsa_slave_priv *p = netdev_priv(dev);
933 	struct dsa_switch *ds = p->dp->ds;
934 	int ret;
935 
936 	if (!ds->ops->get_eee)
937 		return -EOPNOTSUPP;
938 
939 	ret = ds->ops->get_eee(ds, p->dp->index, e);
940 	if (ret)
941 		return ret;
942 
943 	if (p->phy)
944 		ret = phy_ethtool_get_eee(p->phy, e);
945 
946 	return ret;
947 }
948 
949 #ifdef CONFIG_NET_POLL_CONTROLLER
950 static int dsa_slave_netpoll_setup(struct net_device *dev,
951 				   struct netpoll_info *ni)
952 {
953 	struct dsa_slave_priv *p = netdev_priv(dev);
954 	struct dsa_switch *ds = p->dp->ds;
955 	struct net_device *master = ds->dst->master_netdev;
956 	struct netpoll *netpoll;
957 	int err = 0;
958 
959 	netpoll = kzalloc(sizeof(*netpoll), GFP_KERNEL);
960 	if (!netpoll)
961 		return -ENOMEM;
962 
963 	err = __netpoll_setup(netpoll, master);
964 	if (err) {
965 		kfree(netpoll);
966 		goto out;
967 	}
968 
969 	p->netpoll = netpoll;
970 out:
971 	return err;
972 }
973 
974 static void dsa_slave_netpoll_cleanup(struct net_device *dev)
975 {
976 	struct dsa_slave_priv *p = netdev_priv(dev);
977 	struct netpoll *netpoll = p->netpoll;
978 
979 	if (!netpoll)
980 		return;
981 
982 	p->netpoll = NULL;
983 
984 	__netpoll_free_async(netpoll);
985 }
986 
987 static void dsa_slave_poll_controller(struct net_device *dev)
988 {
989 }
990 #endif
991 
992 static int dsa_slave_get_phys_port_name(struct net_device *dev,
993 					char *name, size_t len)
994 {
995 	struct dsa_slave_priv *p = netdev_priv(dev);
996 
997 	if (snprintf(name, len, "p%d", p->dp->index) >= len)
998 		return -EINVAL;
999 
1000 	return 0;
1001 }
1002 
1003 static struct dsa_mall_tc_entry *
1004 dsa_slave_mall_tc_entry_find(struct dsa_slave_priv *p,
1005 			     unsigned long cookie)
1006 {
1007 	struct dsa_mall_tc_entry *mall_tc_entry;
1008 
1009 	list_for_each_entry(mall_tc_entry, &p->mall_tc_list, list)
1010 		if (mall_tc_entry->cookie == cookie)
1011 			return mall_tc_entry;
1012 
1013 	return NULL;
1014 }
1015 
1016 static int dsa_slave_add_cls_matchall(struct net_device *dev,
1017 				      __be16 protocol,
1018 				      struct tc_cls_matchall_offload *cls,
1019 				      bool ingress)
1020 {
1021 	struct dsa_slave_priv *p = netdev_priv(dev);
1022 	struct dsa_mall_tc_entry *mall_tc_entry;
1023 	struct dsa_switch *ds = p->dp->ds;
1024 	struct net *net = dev_net(dev);
1025 	struct dsa_slave_priv *to_p;
1026 	struct net_device *to_dev;
1027 	const struct tc_action *a;
1028 	int err = -EOPNOTSUPP;
1029 	LIST_HEAD(actions);
1030 	int ifindex;
1031 
1032 	if (!ds->ops->port_mirror_add)
1033 		return err;
1034 
1035 	if (!tc_single_action(cls->exts))
1036 		return err;
1037 
1038 	tcf_exts_to_list(cls->exts, &actions);
1039 	a = list_first_entry(&actions, struct tc_action, list);
1040 
1041 	if (is_tcf_mirred_egress_mirror(a) && protocol == htons(ETH_P_ALL)) {
1042 		struct dsa_mall_mirror_tc_entry *mirror;
1043 
1044 		ifindex = tcf_mirred_ifindex(a);
1045 		to_dev = __dev_get_by_index(net, ifindex);
1046 		if (!to_dev)
1047 			return -EINVAL;
1048 
1049 		if (!dsa_slave_dev_check(to_dev))
1050 			return -EOPNOTSUPP;
1051 
1052 		mall_tc_entry = kzalloc(sizeof(*mall_tc_entry), GFP_KERNEL);
1053 		if (!mall_tc_entry)
1054 			return -ENOMEM;
1055 
1056 		mall_tc_entry->cookie = cls->cookie;
1057 		mall_tc_entry->type = DSA_PORT_MALL_MIRROR;
1058 		mirror = &mall_tc_entry->mirror;
1059 
1060 		to_p = netdev_priv(to_dev);
1061 
1062 		mirror->to_local_port = to_p->dp->index;
1063 		mirror->ingress = ingress;
1064 
1065 		err = ds->ops->port_mirror_add(ds, p->dp->index, mirror,
1066 					       ingress);
1067 		if (err) {
1068 			kfree(mall_tc_entry);
1069 			return err;
1070 		}
1071 
1072 		list_add_tail(&mall_tc_entry->list, &p->mall_tc_list);
1073 	}
1074 
1075 	return 0;
1076 }
1077 
1078 static void dsa_slave_del_cls_matchall(struct net_device *dev,
1079 				       struct tc_cls_matchall_offload *cls)
1080 {
1081 	struct dsa_slave_priv *p = netdev_priv(dev);
1082 	struct dsa_mall_tc_entry *mall_tc_entry;
1083 	struct dsa_switch *ds = p->dp->ds;
1084 
1085 	if (!ds->ops->port_mirror_del)
1086 		return;
1087 
1088 	mall_tc_entry = dsa_slave_mall_tc_entry_find(p, cls->cookie);
1089 	if (!mall_tc_entry)
1090 		return;
1091 
1092 	list_del(&mall_tc_entry->list);
1093 
1094 	switch (mall_tc_entry->type) {
1095 	case DSA_PORT_MALL_MIRROR:
1096 		ds->ops->port_mirror_del(ds, p->dp->index,
1097 					 &mall_tc_entry->mirror);
1098 		break;
1099 	default:
1100 		WARN_ON(1);
1101 	}
1102 
1103 	kfree(mall_tc_entry);
1104 }
1105 
1106 static int dsa_slave_setup_tc(struct net_device *dev, u32 handle,
1107 			      __be16 protocol, struct tc_to_netdev *tc)
1108 {
1109 	bool ingress = TC_H_MAJ(handle) == TC_H_MAJ(TC_H_INGRESS);
1110 	int ret = -EOPNOTSUPP;
1111 
1112 	switch (tc->type) {
1113 	case TC_SETUP_MATCHALL:
1114 		switch (tc->cls_mall->command) {
1115 		case TC_CLSMATCHALL_REPLACE:
1116 			return dsa_slave_add_cls_matchall(dev, protocol,
1117 							  tc->cls_mall,
1118 							  ingress);
1119 		case TC_CLSMATCHALL_DESTROY:
1120 			dsa_slave_del_cls_matchall(dev, tc->cls_mall);
1121 			return 0;
1122 		}
1123 	default:
1124 		break;
1125 	}
1126 
1127 	return ret;
1128 }
1129 
1130 void dsa_cpu_port_ethtool_init(struct ethtool_ops *ops)
1131 {
1132 	ops->get_sset_count = dsa_cpu_port_get_sset_count;
1133 	ops->get_ethtool_stats = dsa_cpu_port_get_ethtool_stats;
1134 	ops->get_strings = dsa_cpu_port_get_strings;
1135 }
1136 
1137 static int dsa_slave_get_rxnfc(struct net_device *dev,
1138 			       struct ethtool_rxnfc *nfc, u32 *rule_locs)
1139 {
1140 	struct dsa_slave_priv *p = netdev_priv(dev);
1141 	struct dsa_switch *ds = p->dp->ds;
1142 
1143 	if (!ds->ops->get_rxnfc)
1144 		return -EOPNOTSUPP;
1145 
1146 	return ds->ops->get_rxnfc(ds, p->dp->index, nfc, rule_locs);
1147 }
1148 
1149 static int dsa_slave_set_rxnfc(struct net_device *dev,
1150 			       struct ethtool_rxnfc *nfc)
1151 {
1152 	struct dsa_slave_priv *p = netdev_priv(dev);
1153 	struct dsa_switch *ds = p->dp->ds;
1154 
1155 	if (!ds->ops->set_rxnfc)
1156 		return -EOPNOTSUPP;
1157 
1158 	return ds->ops->set_rxnfc(ds, p->dp->index, nfc);
1159 }
1160 
1161 static const struct ethtool_ops dsa_slave_ethtool_ops = {
1162 	.get_drvinfo		= dsa_slave_get_drvinfo,
1163 	.get_regs_len		= dsa_slave_get_regs_len,
1164 	.get_regs		= dsa_slave_get_regs,
1165 	.nway_reset		= dsa_slave_nway_reset,
1166 	.get_link		= dsa_slave_get_link,
1167 	.get_eeprom_len		= dsa_slave_get_eeprom_len,
1168 	.get_eeprom		= dsa_slave_get_eeprom,
1169 	.set_eeprom		= dsa_slave_set_eeprom,
1170 	.get_strings		= dsa_slave_get_strings,
1171 	.get_ethtool_stats	= dsa_slave_get_ethtool_stats,
1172 	.get_sset_count		= dsa_slave_get_sset_count,
1173 	.set_wol		= dsa_slave_set_wol,
1174 	.get_wol		= dsa_slave_get_wol,
1175 	.set_eee		= dsa_slave_set_eee,
1176 	.get_eee		= dsa_slave_get_eee,
1177 	.get_link_ksettings	= dsa_slave_get_link_ksettings,
1178 	.set_link_ksettings	= dsa_slave_set_link_ksettings,
1179 	.get_rxnfc		= dsa_slave_get_rxnfc,
1180 	.set_rxnfc		= dsa_slave_set_rxnfc,
1181 };
1182 
1183 static const struct net_device_ops dsa_slave_netdev_ops = {
1184 	.ndo_open	 	= dsa_slave_open,
1185 	.ndo_stop		= dsa_slave_close,
1186 	.ndo_start_xmit		= dsa_slave_xmit,
1187 	.ndo_change_rx_flags	= dsa_slave_change_rx_flags,
1188 	.ndo_set_rx_mode	= dsa_slave_set_rx_mode,
1189 	.ndo_set_mac_address	= dsa_slave_set_mac_address,
1190 	.ndo_fdb_add		= switchdev_port_fdb_add,
1191 	.ndo_fdb_del		= switchdev_port_fdb_del,
1192 	.ndo_fdb_dump		= switchdev_port_fdb_dump,
1193 	.ndo_do_ioctl		= dsa_slave_ioctl,
1194 	.ndo_get_iflink		= dsa_slave_get_iflink,
1195 #ifdef CONFIG_NET_POLL_CONTROLLER
1196 	.ndo_netpoll_setup	= dsa_slave_netpoll_setup,
1197 	.ndo_netpoll_cleanup	= dsa_slave_netpoll_cleanup,
1198 	.ndo_poll_controller	= dsa_slave_poll_controller,
1199 #endif
1200 	.ndo_bridge_getlink	= switchdev_port_bridge_getlink,
1201 	.ndo_bridge_setlink	= switchdev_port_bridge_setlink,
1202 	.ndo_bridge_dellink	= switchdev_port_bridge_dellink,
1203 	.ndo_get_phys_port_name	= dsa_slave_get_phys_port_name,
1204 	.ndo_setup_tc		= dsa_slave_setup_tc,
1205 };
1206 
1207 static const struct switchdev_ops dsa_slave_switchdev_ops = {
1208 	.switchdev_port_attr_get	= dsa_slave_port_attr_get,
1209 	.switchdev_port_attr_set	= dsa_slave_port_attr_set,
1210 	.switchdev_port_obj_add		= dsa_slave_port_obj_add,
1211 	.switchdev_port_obj_del		= dsa_slave_port_obj_del,
1212 	.switchdev_port_obj_dump	= dsa_slave_port_obj_dump,
1213 };
1214 
1215 static struct device_type dsa_type = {
1216 	.name	= "dsa",
1217 };
1218 
1219 static void dsa_slave_adjust_link(struct net_device *dev)
1220 {
1221 	struct dsa_slave_priv *p = netdev_priv(dev);
1222 	struct dsa_switch *ds = p->dp->ds;
1223 	unsigned int status_changed = 0;
1224 
1225 	if (p->old_link != p->phy->link) {
1226 		status_changed = 1;
1227 		p->old_link = p->phy->link;
1228 	}
1229 
1230 	if (p->old_duplex != p->phy->duplex) {
1231 		status_changed = 1;
1232 		p->old_duplex = p->phy->duplex;
1233 	}
1234 
1235 	if (p->old_pause != p->phy->pause) {
1236 		status_changed = 1;
1237 		p->old_pause = p->phy->pause;
1238 	}
1239 
1240 	if (ds->ops->adjust_link && status_changed)
1241 		ds->ops->adjust_link(ds, p->dp->index, p->phy);
1242 
1243 	if (status_changed)
1244 		phy_print_status(p->phy);
1245 }
1246 
1247 static int dsa_slave_fixed_link_update(struct net_device *dev,
1248 				       struct fixed_phy_status *status)
1249 {
1250 	struct dsa_slave_priv *p;
1251 	struct dsa_switch *ds;
1252 
1253 	if (dev) {
1254 		p = netdev_priv(dev);
1255 		ds = p->dp->ds;
1256 		if (ds->ops->fixed_link_update)
1257 			ds->ops->fixed_link_update(ds, p->dp->index, status);
1258 	}
1259 
1260 	return 0;
1261 }
1262 
1263 /* slave device setup *******************************************************/
1264 static int dsa_slave_phy_connect(struct dsa_slave_priv *p,
1265 				 struct net_device *slave_dev,
1266 				 int addr)
1267 {
1268 	struct dsa_switch *ds = p->dp->ds;
1269 
1270 	p->phy = mdiobus_get_phy(ds->slave_mii_bus, addr);
1271 	if (!p->phy) {
1272 		netdev_err(slave_dev, "no phy at %d\n", addr);
1273 		return -ENODEV;
1274 	}
1275 
1276 	/* Use already configured phy mode */
1277 	if (p->phy_interface == PHY_INTERFACE_MODE_NA)
1278 		p->phy_interface = p->phy->interface;
1279 	return phy_connect_direct(slave_dev, p->phy, dsa_slave_adjust_link,
1280 				  p->phy_interface);
1281 }
1282 
1283 static int dsa_slave_phy_setup(struct dsa_slave_priv *p,
1284 				struct net_device *slave_dev)
1285 {
1286 	struct dsa_switch *ds = p->dp->ds;
1287 	struct device_node *phy_dn, *port_dn;
1288 	bool phy_is_fixed = false;
1289 	u32 phy_flags = 0;
1290 	int mode, ret;
1291 
1292 	port_dn = p->dp->dn;
1293 	mode = of_get_phy_mode(port_dn);
1294 	if (mode < 0)
1295 		mode = PHY_INTERFACE_MODE_NA;
1296 	p->phy_interface = mode;
1297 
1298 	phy_dn = of_parse_phandle(port_dn, "phy-handle", 0);
1299 	if (!phy_dn && of_phy_is_fixed_link(port_dn)) {
1300 		/* In the case of a fixed PHY, the DT node associated
1301 		 * to the fixed PHY is the Port DT node
1302 		 */
1303 		ret = of_phy_register_fixed_link(port_dn);
1304 		if (ret) {
1305 			netdev_err(slave_dev, "failed to register fixed PHY: %d\n", ret);
1306 			return ret;
1307 		}
1308 		phy_is_fixed = true;
1309 		phy_dn = of_node_get(port_dn);
1310 	}
1311 
1312 	if (ds->ops->get_phy_flags)
1313 		phy_flags = ds->ops->get_phy_flags(ds, p->dp->index);
1314 
1315 	if (phy_dn) {
1316 		int phy_id = of_mdio_parse_addr(&slave_dev->dev, phy_dn);
1317 
1318 		/* If this PHY address is part of phys_mii_mask, which means
1319 		 * that we need to divert reads and writes to/from it, then we
1320 		 * want to bind this device using the slave MII bus created by
1321 		 * DSA to make that happen.
1322 		 */
1323 		if (!phy_is_fixed && phy_id >= 0 &&
1324 		    (ds->phys_mii_mask & (1 << phy_id))) {
1325 			ret = dsa_slave_phy_connect(p, slave_dev, phy_id);
1326 			if (ret) {
1327 				netdev_err(slave_dev, "failed to connect to phy%d: %d\n", phy_id, ret);
1328 				of_node_put(phy_dn);
1329 				return ret;
1330 			}
1331 		} else {
1332 			p->phy = of_phy_connect(slave_dev, phy_dn,
1333 						dsa_slave_adjust_link,
1334 						phy_flags,
1335 						p->phy_interface);
1336 		}
1337 
1338 		of_node_put(phy_dn);
1339 	}
1340 
1341 	if (p->phy && phy_is_fixed)
1342 		fixed_phy_set_link_update(p->phy, dsa_slave_fixed_link_update);
1343 
1344 	/* We could not connect to a designated PHY, so use the switch internal
1345 	 * MDIO bus instead
1346 	 */
1347 	if (!p->phy) {
1348 		ret = dsa_slave_phy_connect(p, slave_dev, p->dp->index);
1349 		if (ret) {
1350 			netdev_err(slave_dev, "failed to connect to port %d: %d\n",
1351 				   p->dp->index, ret);
1352 			if (phy_is_fixed)
1353 				of_phy_deregister_fixed_link(port_dn);
1354 			return ret;
1355 		}
1356 	}
1357 
1358 	phy_attached_info(p->phy);
1359 
1360 	return 0;
1361 }
1362 
1363 static struct lock_class_key dsa_slave_netdev_xmit_lock_key;
1364 static void dsa_slave_set_lockdep_class_one(struct net_device *dev,
1365 					    struct netdev_queue *txq,
1366 					    void *_unused)
1367 {
1368 	lockdep_set_class(&txq->_xmit_lock,
1369 			  &dsa_slave_netdev_xmit_lock_key);
1370 }
1371 
1372 int dsa_slave_suspend(struct net_device *slave_dev)
1373 {
1374 	struct dsa_slave_priv *p = netdev_priv(slave_dev);
1375 
1376 	netif_device_detach(slave_dev);
1377 
1378 	if (p->phy) {
1379 		phy_stop(p->phy);
1380 		p->old_pause = -1;
1381 		p->old_link = -1;
1382 		p->old_duplex = -1;
1383 		phy_suspend(p->phy);
1384 	}
1385 
1386 	return 0;
1387 }
1388 
1389 int dsa_slave_resume(struct net_device *slave_dev)
1390 {
1391 	struct dsa_slave_priv *p = netdev_priv(slave_dev);
1392 
1393 	netif_device_attach(slave_dev);
1394 
1395 	if (p->phy) {
1396 		phy_resume(p->phy);
1397 		phy_start(p->phy);
1398 	}
1399 
1400 	return 0;
1401 }
1402 
1403 int dsa_slave_create(struct dsa_switch *ds, struct device *parent,
1404 		     int port, const char *name)
1405 {
1406 	struct dsa_switch_tree *dst = ds->dst;
1407 	struct net_device *master;
1408 	struct net_device *slave_dev;
1409 	struct dsa_slave_priv *p;
1410 	int ret;
1411 
1412 	master = ds->dst->master_netdev;
1413 	if (ds->master_netdev)
1414 		master = ds->master_netdev;
1415 
1416 	slave_dev = alloc_netdev(sizeof(struct dsa_slave_priv), name,
1417 				 NET_NAME_UNKNOWN, ether_setup);
1418 	if (slave_dev == NULL)
1419 		return -ENOMEM;
1420 
1421 	slave_dev->features = master->vlan_features | NETIF_F_HW_TC;
1422 	slave_dev->hw_features |= NETIF_F_HW_TC;
1423 	slave_dev->ethtool_ops = &dsa_slave_ethtool_ops;
1424 	eth_hw_addr_inherit(slave_dev, master);
1425 	slave_dev->priv_flags |= IFF_NO_QUEUE;
1426 	slave_dev->netdev_ops = &dsa_slave_netdev_ops;
1427 	slave_dev->switchdev_ops = &dsa_slave_switchdev_ops;
1428 	slave_dev->min_mtu = 0;
1429 	slave_dev->max_mtu = ETH_MAX_MTU;
1430 	SET_NETDEV_DEVTYPE(slave_dev, &dsa_type);
1431 
1432 	netdev_for_each_tx_queue(slave_dev, dsa_slave_set_lockdep_class_one,
1433 				 NULL);
1434 
1435 	SET_NETDEV_DEV(slave_dev, parent);
1436 	slave_dev->dev.of_node = ds->ports[port].dn;
1437 	slave_dev->vlan_features = master->vlan_features;
1438 
1439 	p = netdev_priv(slave_dev);
1440 	p->dp = &ds->ports[port];
1441 	INIT_LIST_HEAD(&p->mall_tc_list);
1442 	p->xmit = dst->tag_ops->xmit;
1443 
1444 	p->old_pause = -1;
1445 	p->old_link = -1;
1446 	p->old_duplex = -1;
1447 
1448 	ds->ports[port].netdev = slave_dev;
1449 	ret = register_netdev(slave_dev);
1450 	if (ret) {
1451 		netdev_err(master, "error %d registering interface %s\n",
1452 			   ret, slave_dev->name);
1453 		ds->ports[port].netdev = NULL;
1454 		free_netdev(slave_dev);
1455 		return ret;
1456 	}
1457 
1458 	netif_carrier_off(slave_dev);
1459 
1460 	ret = dsa_slave_phy_setup(p, slave_dev);
1461 	if (ret) {
1462 		netdev_err(master, "error %d setting up slave phy\n", ret);
1463 		unregister_netdev(slave_dev);
1464 		free_netdev(slave_dev);
1465 		return ret;
1466 	}
1467 
1468 	return 0;
1469 }
1470 
1471 void dsa_slave_destroy(struct net_device *slave_dev)
1472 {
1473 	struct dsa_slave_priv *p = netdev_priv(slave_dev);
1474 	struct device_node *port_dn;
1475 
1476 	port_dn = p->dp->dn;
1477 
1478 	netif_carrier_off(slave_dev);
1479 	if (p->phy) {
1480 		phy_disconnect(p->phy);
1481 
1482 		if (of_phy_is_fixed_link(port_dn))
1483 			of_phy_deregister_fixed_link(port_dn);
1484 	}
1485 	unregister_netdev(slave_dev);
1486 	free_netdev(slave_dev);
1487 }
1488 
1489 static bool dsa_slave_dev_check(struct net_device *dev)
1490 {
1491 	return dev->netdev_ops == &dsa_slave_netdev_ops;
1492 }
1493 
1494 static int dsa_slave_port_upper_event(struct net_device *dev,
1495 				      unsigned long event, void *ptr)
1496 {
1497 	struct netdev_notifier_changeupper_info *info = ptr;
1498 	struct net_device *upper = info->upper_dev;
1499 	int err = 0;
1500 
1501 	switch (event) {
1502 	case NETDEV_CHANGEUPPER:
1503 		if (netif_is_bridge_master(upper)) {
1504 			if (info->linking)
1505 				err = dsa_slave_bridge_port_join(dev, upper);
1506 			else
1507 				dsa_slave_bridge_port_leave(dev, upper);
1508 		}
1509 
1510 		break;
1511 	}
1512 
1513 	return notifier_from_errno(err);
1514 }
1515 
1516 static int dsa_slave_port_event(struct net_device *dev, unsigned long event,
1517 				void *ptr)
1518 {
1519 	switch (event) {
1520 	case NETDEV_CHANGEUPPER:
1521 		return dsa_slave_port_upper_event(dev, event, ptr);
1522 	}
1523 
1524 	return NOTIFY_DONE;
1525 }
1526 
1527 int dsa_slave_netdevice_event(struct notifier_block *unused,
1528 			      unsigned long event, void *ptr)
1529 {
1530 	struct net_device *dev = netdev_notifier_info_to_dev(ptr);
1531 
1532 	if (dsa_slave_dev_check(dev))
1533 		return dsa_slave_port_event(dev, event, ptr);
1534 
1535 	return NOTIFY_DONE;
1536 }
1537