Merge remote-tracking branches 'asoc/fix/tlv320aic3x' and 'asoc/fix/wm8962' into...
[linux-drm-fsl-dcu.git] / net / dsa / slave.c
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 <net/rtnetlink.h>
19 #include <net/switchdev.h>
20 #include <linux/if_bridge.h>
21 #include <linux/netpoll.h>
22 #include "dsa_priv.h"
23
24 /* slave mii_bus handling ***************************************************/
25 static int dsa_slave_phy_read(struct mii_bus *bus, int addr, int reg)
26 {
27         struct dsa_switch *ds = bus->priv;
28
29         if (ds->phys_mii_mask & (1 << addr))
30                 return ds->drv->phy_read(ds, addr, reg);
31
32         return 0xffff;
33 }
34
35 static int dsa_slave_phy_write(struct mii_bus *bus, int addr, int reg, u16 val)
36 {
37         struct dsa_switch *ds = bus->priv;
38
39         if (ds->phys_mii_mask & (1 << addr))
40                 return ds->drv->phy_write(ds, addr, reg, val);
41
42         return 0;
43 }
44
45 void dsa_slave_mii_bus_init(struct dsa_switch *ds)
46 {
47         ds->slave_mii_bus->priv = (void *)ds;
48         ds->slave_mii_bus->name = "dsa slave smi";
49         ds->slave_mii_bus->read = dsa_slave_phy_read;
50         ds->slave_mii_bus->write = dsa_slave_phy_write;
51         snprintf(ds->slave_mii_bus->id, MII_BUS_ID_SIZE, "dsa-%d:%.2x",
52                         ds->index, ds->pd->sw_addr);
53         ds->slave_mii_bus->parent = ds->master_dev;
54         ds->slave_mii_bus->phy_mask = ~ds->phys_mii_mask;
55 }
56
57
58 /* slave device handling ****************************************************/
59 static int dsa_slave_get_iflink(const struct net_device *dev)
60 {
61         struct dsa_slave_priv *p = netdev_priv(dev);
62
63         return p->parent->dst->master_netdev->ifindex;
64 }
65
66 static inline bool dsa_port_is_bridged(struct dsa_slave_priv *p)
67 {
68         return !!p->bridge_dev;
69 }
70
71 static int dsa_slave_open(struct net_device *dev)
72 {
73         struct dsa_slave_priv *p = netdev_priv(dev);
74         struct net_device *master = p->parent->dst->master_netdev;
75         struct dsa_switch *ds = p->parent;
76         u8 stp_state = dsa_port_is_bridged(p) ?
77                         BR_STATE_BLOCKING : BR_STATE_FORWARDING;
78         int err;
79
80         if (!(master->flags & IFF_UP))
81                 return -ENETDOWN;
82
83         if (!ether_addr_equal(dev->dev_addr, master->dev_addr)) {
84                 err = dev_uc_add(master, dev->dev_addr);
85                 if (err < 0)
86                         goto out;
87         }
88
89         if (dev->flags & IFF_ALLMULTI) {
90                 err = dev_set_allmulti(master, 1);
91                 if (err < 0)
92                         goto del_unicast;
93         }
94         if (dev->flags & IFF_PROMISC) {
95                 err = dev_set_promiscuity(master, 1);
96                 if (err < 0)
97                         goto clear_allmulti;
98         }
99
100         if (ds->drv->port_enable) {
101                 err = ds->drv->port_enable(ds, p->port, p->phy);
102                 if (err)
103                         goto clear_promisc;
104         }
105
106         if (ds->drv->port_stp_update)
107                 ds->drv->port_stp_update(ds, p->port, stp_state);
108
109         if (p->phy)
110                 phy_start(p->phy);
111
112         return 0;
113
114 clear_promisc:
115         if (dev->flags & IFF_PROMISC)
116                 dev_set_promiscuity(master, -1);
117 clear_allmulti:
118         if (dev->flags & IFF_ALLMULTI)
119                 dev_set_allmulti(master, -1);
120 del_unicast:
121         if (!ether_addr_equal(dev->dev_addr, master->dev_addr))
122                 dev_uc_del(master, dev->dev_addr);
123 out:
124         return err;
125 }
126
127 static int dsa_slave_close(struct net_device *dev)
128 {
129         struct dsa_slave_priv *p = netdev_priv(dev);
130         struct net_device *master = p->parent->dst->master_netdev;
131         struct dsa_switch *ds = p->parent;
132
133         if (p->phy)
134                 phy_stop(p->phy);
135
136         dev_mc_unsync(master, dev);
137         dev_uc_unsync(master, dev);
138         if (dev->flags & IFF_ALLMULTI)
139                 dev_set_allmulti(master, -1);
140         if (dev->flags & IFF_PROMISC)
141                 dev_set_promiscuity(master, -1);
142
143         if (!ether_addr_equal(dev->dev_addr, master->dev_addr))
144                 dev_uc_del(master, dev->dev_addr);
145
146         if (ds->drv->port_disable)
147                 ds->drv->port_disable(ds, p->port, p->phy);
148
149         if (ds->drv->port_stp_update)
150                 ds->drv->port_stp_update(ds, p->port, BR_STATE_DISABLED);
151
152         return 0;
153 }
154
155 static void dsa_slave_change_rx_flags(struct net_device *dev, int change)
156 {
157         struct dsa_slave_priv *p = netdev_priv(dev);
158         struct net_device *master = p->parent->dst->master_netdev;
159
160         if (change & IFF_ALLMULTI)
161                 dev_set_allmulti(master, dev->flags & IFF_ALLMULTI ? 1 : -1);
162         if (change & IFF_PROMISC)
163                 dev_set_promiscuity(master, dev->flags & IFF_PROMISC ? 1 : -1);
164 }
165
166 static void dsa_slave_set_rx_mode(struct net_device *dev)
167 {
168         struct dsa_slave_priv *p = netdev_priv(dev);
169         struct net_device *master = p->parent->dst->master_netdev;
170
171         dev_mc_sync(master, dev);
172         dev_uc_sync(master, dev);
173 }
174
175 static int dsa_slave_set_mac_address(struct net_device *dev, void *a)
176 {
177         struct dsa_slave_priv *p = netdev_priv(dev);
178         struct net_device *master = p->parent->dst->master_netdev;
179         struct sockaddr *addr = a;
180         int err;
181
182         if (!is_valid_ether_addr(addr->sa_data))
183                 return -EADDRNOTAVAIL;
184
185         if (!(dev->flags & IFF_UP))
186                 goto out;
187
188         if (!ether_addr_equal(addr->sa_data, master->dev_addr)) {
189                 err = dev_uc_add(master, addr->sa_data);
190                 if (err < 0)
191                         return err;
192         }
193
194         if (!ether_addr_equal(dev->dev_addr, master->dev_addr))
195                 dev_uc_del(master, dev->dev_addr);
196
197 out:
198         ether_addr_copy(dev->dev_addr, addr->sa_data);
199
200         return 0;
201 }
202
203 static int dsa_bridge_check_vlan_range(struct dsa_switch *ds,
204                                        const struct net_device *bridge,
205                                        u16 vid_begin, u16 vid_end)
206 {
207         struct dsa_slave_priv *p;
208         struct net_device *dev, *vlan_br;
209         DECLARE_BITMAP(members, DSA_MAX_PORTS);
210         DECLARE_BITMAP(untagged, DSA_MAX_PORTS);
211         u16 vid;
212         int member, err;
213
214         if (!ds->drv->vlan_getnext || !vid_begin)
215                 return -EOPNOTSUPP;
216
217         vid = vid_begin - 1;
218
219         do {
220                 err = ds->drv->vlan_getnext(ds, &vid, members, untagged);
221                 if (err)
222                         break;
223
224                 if (vid > vid_end)
225                         break;
226
227                 member = find_first_bit(members, DSA_MAX_PORTS);
228                 if (member == DSA_MAX_PORTS)
229                         continue;
230
231                 dev = ds->ports[member];
232                 p = netdev_priv(dev);
233                 vlan_br = p->bridge_dev;
234                 if (vlan_br == bridge)
235                         continue;
236
237                 netdev_dbg(vlan_br, "hardware VLAN %d already in use\n", vid);
238                 return -EOPNOTSUPP;
239         } while (vid < vid_end);
240
241         return err == -ENOENT ? 0 : err;
242 }
243
244 static int dsa_slave_port_vlan_add(struct net_device *dev,
245                                    struct switchdev_obj *obj)
246 {
247         struct switchdev_obj_vlan *vlan = &obj->u.vlan;
248         struct dsa_slave_priv *p = netdev_priv(dev);
249         struct dsa_switch *ds = p->parent;
250         u16 vid;
251         int err;
252
253         switch (obj->trans) {
254         case SWITCHDEV_TRANS_PREPARE:
255                 if (!ds->drv->port_vlan_add || !ds->drv->port_pvid_set)
256                         return -EOPNOTSUPP;
257
258                 /* If the requested port doesn't belong to the same bridge as
259                  * the VLAN members, fallback to software VLAN (hopefully).
260                  */
261                 err = dsa_bridge_check_vlan_range(ds, p->bridge_dev,
262                                                   vlan->vid_begin,
263                                                   vlan->vid_end);
264                 if (err)
265                         return err;
266                 break;
267         case SWITCHDEV_TRANS_COMMIT:
268                 for (vid = vlan->vid_begin; vid <= vlan->vid_end; ++vid) {
269                         err = ds->drv->port_vlan_add(ds, p->port, vid,
270                                                      vlan->flags &
271                                                      BRIDGE_VLAN_INFO_UNTAGGED);
272                         if (!err && vlan->flags & BRIDGE_VLAN_INFO_PVID)
273                                 err = ds->drv->port_pvid_set(ds, p->port, vid);
274                         if (err)
275                                 return err;
276                 }
277                 break;
278         default:
279                 return -EOPNOTSUPP;
280         }
281
282         return 0;
283 }
284
285 static int dsa_slave_port_vlan_del(struct net_device *dev,
286                                    struct switchdev_obj *obj)
287 {
288         struct switchdev_obj_vlan *vlan = &obj->u.vlan;
289         struct dsa_slave_priv *p = netdev_priv(dev);
290         struct dsa_switch *ds = p->parent;
291         u16 vid;
292         int err;
293
294         if (!ds->drv->port_vlan_del)
295                 return -EOPNOTSUPP;
296
297         for (vid = vlan->vid_begin; vid <= vlan->vid_end; ++vid) {
298                 err = ds->drv->port_vlan_del(ds, p->port, vid);
299                 if (err)
300                         return err;
301         }
302
303         return 0;
304 }
305
306 static int dsa_slave_port_vlan_dump(struct net_device *dev,
307                                     struct switchdev_obj *obj)
308 {
309         struct switchdev_obj_vlan *vlan = &obj->u.vlan;
310         struct dsa_slave_priv *p = netdev_priv(dev);
311         struct dsa_switch *ds = p->parent;
312         DECLARE_BITMAP(members, DSA_MAX_PORTS);
313         DECLARE_BITMAP(untagged, DSA_MAX_PORTS);
314         u16 pvid, vid = 0;
315         int err;
316
317         if (!ds->drv->vlan_getnext || !ds->drv->port_pvid_get)
318                 return -EOPNOTSUPP;
319
320         err = ds->drv->port_pvid_get(ds, p->port, &pvid);
321         if (err)
322                 return err;
323
324         for (;;) {
325                 err = ds->drv->vlan_getnext(ds, &vid, members, untagged);
326                 if (err)
327                         break;
328
329                 if (!test_bit(p->port, members))
330                         continue;
331
332                 memset(vlan, 0, sizeof(*vlan));
333                 vlan->vid_begin = vlan->vid_end = vid;
334
335                 if (vid == pvid)
336                         vlan->flags |= BRIDGE_VLAN_INFO_PVID;
337
338                 if (test_bit(p->port, untagged))
339                         vlan->flags |= BRIDGE_VLAN_INFO_UNTAGGED;
340
341                 err = obj->cb(dev, obj);
342                 if (err)
343                         break;
344         }
345
346         return err == -ENOENT ? 0 : err;
347 }
348
349 static int dsa_slave_port_fdb_add(struct net_device *dev,
350                                   struct switchdev_obj *obj)
351 {
352         struct switchdev_obj_fdb *fdb = &obj->u.fdb;
353         struct dsa_slave_priv *p = netdev_priv(dev);
354         struct dsa_switch *ds = p->parent;
355         int ret = -EOPNOTSUPP;
356
357         if (obj->trans == SWITCHDEV_TRANS_PREPARE)
358                 ret = ds->drv->port_fdb_add ? 0 : -EOPNOTSUPP;
359         else if (obj->trans == SWITCHDEV_TRANS_COMMIT)
360                 ret = ds->drv->port_fdb_add(ds, p->port, fdb->addr, fdb->vid);
361
362         return ret;
363 }
364
365 static int dsa_slave_port_fdb_del(struct net_device *dev,
366                                   struct switchdev_obj *obj)
367 {
368         struct switchdev_obj_fdb *fdb = &obj->u.fdb;
369         struct dsa_slave_priv *p = netdev_priv(dev);
370         struct dsa_switch *ds = p->parent;
371         int ret = -EOPNOTSUPP;
372
373         if (ds->drv->port_fdb_del)
374                 ret = ds->drv->port_fdb_del(ds, p->port, fdb->addr, fdb->vid);
375
376         return ret;
377 }
378
379 static int dsa_slave_port_fdb_dump(struct net_device *dev,
380                                    struct switchdev_obj *obj)
381 {
382         struct dsa_slave_priv *p = netdev_priv(dev);
383         struct dsa_switch *ds = p->parent;
384         unsigned char addr[ETH_ALEN] = { 0 };
385         u16 vid = 0;
386         int ret;
387
388         if (!ds->drv->port_fdb_getnext)
389                 return -EOPNOTSUPP;
390
391         for (;;) {
392                 bool is_static;
393
394                 ret = ds->drv->port_fdb_getnext(ds, p->port, addr, &vid,
395                                                 &is_static);
396                 if (ret < 0)
397                         break;
398
399                 obj->u.fdb.addr = addr;
400                 obj->u.fdb.vid = vid;
401                 obj->u.fdb.ndm_state = is_static ? NUD_NOARP : NUD_REACHABLE;
402
403                 ret = obj->cb(dev, obj);
404                 if (ret < 0)
405                         break;
406         }
407
408         return ret == -ENOENT ? 0 : ret;
409 }
410
411 static int dsa_slave_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
412 {
413         struct dsa_slave_priv *p = netdev_priv(dev);
414
415         if (p->phy != NULL)
416                 return phy_mii_ioctl(p->phy, ifr, cmd);
417
418         return -EOPNOTSUPP;
419 }
420
421 /* Return a bitmask of all ports being currently bridged within a given bridge
422  * device. Note that on leave, the mask will still return the bitmask of ports
423  * currently bridged, prior to port removal, and this is exactly what we want.
424  */
425 static u32 dsa_slave_br_port_mask(struct dsa_switch *ds,
426                                   struct net_device *bridge)
427 {
428         struct dsa_slave_priv *p;
429         unsigned int port;
430         u32 mask = 0;
431
432         for (port = 0; port < DSA_MAX_PORTS; port++) {
433                 if (!dsa_is_port_initialized(ds, port))
434                         continue;
435
436                 p = netdev_priv(ds->ports[port]);
437
438                 if (ds->ports[port]->priv_flags & IFF_BRIDGE_PORT &&
439                     p->bridge_dev == bridge)
440                         mask |= 1 << port;
441         }
442
443         return mask;
444 }
445
446 static int dsa_slave_stp_update(struct net_device *dev, u8 state)
447 {
448         struct dsa_slave_priv *p = netdev_priv(dev);
449         struct dsa_switch *ds = p->parent;
450         int ret = -EOPNOTSUPP;
451
452         if (ds->drv->port_stp_update)
453                 ret = ds->drv->port_stp_update(ds, p->port, state);
454
455         return ret;
456 }
457
458 static int dsa_slave_port_attr_set(struct net_device *dev,
459                                    struct switchdev_attr *attr)
460 {
461         struct dsa_slave_priv *p = netdev_priv(dev);
462         struct dsa_switch *ds = p->parent;
463         int ret;
464
465         switch (attr->id) {
466         case SWITCHDEV_ATTR_PORT_STP_STATE:
467                 if (attr->trans == SWITCHDEV_TRANS_PREPARE)
468                         ret = ds->drv->port_stp_update ? 0 : -EOPNOTSUPP;
469                 else
470                         ret = ds->drv->port_stp_update(ds, p->port,
471                                                        attr->u.stp_state);
472                 break;
473         default:
474                 ret = -EOPNOTSUPP;
475                 break;
476         }
477
478         return ret;
479 }
480
481 static int dsa_slave_port_obj_add(struct net_device *dev,
482                                   struct switchdev_obj *obj)
483 {
484         int err;
485
486         /* For the prepare phase, ensure the full set of changes is feasable in
487          * one go in order to signal a failure properly. If an operation is not
488          * supported, return -EOPNOTSUPP.
489          */
490
491         switch (obj->id) {
492         case SWITCHDEV_OBJ_PORT_FDB:
493                 err = dsa_slave_port_fdb_add(dev, obj);
494                 break;
495         case SWITCHDEV_OBJ_PORT_VLAN:
496                 err = dsa_slave_port_vlan_add(dev, obj);
497                 break;
498         default:
499                 err = -EOPNOTSUPP;
500                 break;
501         }
502
503         return err;
504 }
505
506 static int dsa_slave_port_obj_del(struct net_device *dev,
507                                   struct switchdev_obj *obj)
508 {
509         int err;
510
511         switch (obj->id) {
512         case SWITCHDEV_OBJ_PORT_FDB:
513                 err = dsa_slave_port_fdb_del(dev, obj);
514                 break;
515         case SWITCHDEV_OBJ_PORT_VLAN:
516                 err = dsa_slave_port_vlan_del(dev, obj);
517                 break;
518         default:
519                 err = -EOPNOTSUPP;
520                 break;
521         }
522
523         return err;
524 }
525
526 static int dsa_slave_port_obj_dump(struct net_device *dev,
527                                    struct switchdev_obj *obj)
528 {
529         int err;
530
531         switch (obj->id) {
532         case SWITCHDEV_OBJ_PORT_FDB:
533                 err = dsa_slave_port_fdb_dump(dev, obj);
534                 break;
535         case SWITCHDEV_OBJ_PORT_VLAN:
536                 err = dsa_slave_port_vlan_dump(dev, obj);
537                 break;
538         default:
539                 err = -EOPNOTSUPP;
540                 break;
541         }
542
543         return err;
544 }
545
546 static int dsa_slave_bridge_port_join(struct net_device *dev,
547                                       struct net_device *br)
548 {
549         struct dsa_slave_priv *p = netdev_priv(dev);
550         struct dsa_switch *ds = p->parent;
551         int ret = -EOPNOTSUPP;
552
553         p->bridge_dev = br;
554
555         if (ds->drv->port_join_bridge)
556                 ret = ds->drv->port_join_bridge(ds, p->port,
557                                                 dsa_slave_br_port_mask(ds, br));
558
559         return ret;
560 }
561
562 static int dsa_slave_bridge_port_leave(struct net_device *dev)
563 {
564         struct dsa_slave_priv *p = netdev_priv(dev);
565         struct dsa_switch *ds = p->parent;
566         int ret = -EOPNOTSUPP;
567
568
569         if (ds->drv->port_leave_bridge)
570                 ret = ds->drv->port_leave_bridge(ds, p->port,
571                                                  dsa_slave_br_port_mask(ds, p->bridge_dev));
572
573         p->bridge_dev = NULL;
574
575         /* Port left the bridge, put in BR_STATE_DISABLED by the bridge layer,
576          * so allow it to be in BR_STATE_FORWARDING to be kept functional
577          */
578         dsa_slave_stp_update(dev, BR_STATE_FORWARDING);
579
580         return ret;
581 }
582
583 static int dsa_slave_port_attr_get(struct net_device *dev,
584                                    struct switchdev_attr *attr)
585 {
586         struct dsa_slave_priv *p = netdev_priv(dev);
587         struct dsa_switch *ds = p->parent;
588
589         switch (attr->id) {
590         case SWITCHDEV_ATTR_PORT_PARENT_ID:
591                 attr->u.ppid.id_len = sizeof(ds->index);
592                 memcpy(&attr->u.ppid.id, &ds->index, attr->u.ppid.id_len);
593                 break;
594         default:
595                 return -EOPNOTSUPP;
596         }
597
598         return 0;
599 }
600
601 static inline netdev_tx_t dsa_netpoll_send_skb(struct dsa_slave_priv *p,
602                                                struct sk_buff *skb)
603 {
604 #ifdef CONFIG_NET_POLL_CONTROLLER
605         if (p->netpoll)
606                 netpoll_send_skb(p->netpoll, skb);
607 #else
608         BUG();
609 #endif
610         return NETDEV_TX_OK;
611 }
612
613 static netdev_tx_t dsa_slave_xmit(struct sk_buff *skb, struct net_device *dev)
614 {
615         struct dsa_slave_priv *p = netdev_priv(dev);
616         struct sk_buff *nskb;
617
618         dev->stats.tx_packets++;
619         dev->stats.tx_bytes += skb->len;
620
621         /* Transmit function may have to reallocate the original SKB */
622         nskb = p->xmit(skb, dev);
623         if (!nskb)
624                 return NETDEV_TX_OK;
625
626         /* SKB for netpoll still need to be mangled with the protocol-specific
627          * tag to be successfully transmitted
628          */
629         if (unlikely(netpoll_tx_running(dev)))
630                 return dsa_netpoll_send_skb(p, nskb);
631
632         /* Queue the SKB for transmission on the parent interface, but
633          * do not modify its EtherType
634          */
635         nskb->dev = p->parent->dst->master_netdev;
636         dev_queue_xmit(nskb);
637
638         return NETDEV_TX_OK;
639 }
640
641 static struct sk_buff *dsa_slave_notag_xmit(struct sk_buff *skb,
642                                             struct net_device *dev)
643 {
644         /* Just return the original SKB */
645         return skb;
646 }
647
648
649 /* ethtool operations *******************************************************/
650 static int
651 dsa_slave_get_settings(struct net_device *dev, struct ethtool_cmd *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_gset(p->phy, cmd);
661         }
662
663         return err;
664 }
665
666 static int
667 dsa_slave_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
668 {
669         struct dsa_slave_priv *p = netdev_priv(dev);
670
671         if (p->phy != NULL)
672                 return phy_ethtool_sset(p->phy, cmd);
673
674         return -EOPNOTSUPP;
675 }
676
677 static void dsa_slave_get_drvinfo(struct net_device *dev,
678                                   struct ethtool_drvinfo *drvinfo)
679 {
680         strlcpy(drvinfo->driver, "dsa", sizeof(drvinfo->driver));
681         strlcpy(drvinfo->version, dsa_driver_version, sizeof(drvinfo->version));
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->parent;
690
691         if (ds->drv->get_regs_len)
692                 return ds->drv->get_regs_len(ds, p->port);
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->parent;
702
703         if (ds->drv->get_regs)
704                 ds->drv->get_regs(ds, p->port, 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->parent;
733
734         if (ds->pd->eeprom_len)
735                 return ds->pd->eeprom_len;
736
737         if (ds->drv->get_eeprom_len)
738                 return ds->drv->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->parent;
748
749         if (ds->drv->get_eeprom)
750                 return ds->drv->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->parent;
760
761         if (ds->drv->set_eeprom)
762                 return ds->drv->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->parent;
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->drv->get_strings != NULL)
781                         ds->drv->get_strings(ds, p->port, data + 4 * len);
782         }
783 }
784
785 static void dsa_slave_get_ethtool_stats(struct net_device *dev,
786                                         struct ethtool_stats *stats,
787                                         uint64_t *data)
788 {
789         struct dsa_slave_priv *p = netdev_priv(dev);
790         struct dsa_switch *ds = p->parent;
791
792         data[0] = p->dev->stats.tx_packets;
793         data[1] = p->dev->stats.tx_bytes;
794         data[2] = p->dev->stats.rx_packets;
795         data[3] = p->dev->stats.rx_bytes;
796         if (ds->drv->get_ethtool_stats != NULL)
797                 ds->drv->get_ethtool_stats(ds, p->port, data + 4);
798 }
799
800 static int dsa_slave_get_sset_count(struct net_device *dev, int sset)
801 {
802         struct dsa_slave_priv *p = netdev_priv(dev);
803         struct dsa_switch *ds = p->parent;
804
805         if (sset == ETH_SS_STATS) {
806                 int count;
807
808                 count = 4;
809                 if (ds->drv->get_sset_count != NULL)
810                         count += ds->drv->get_sset_count(ds);
811
812                 return count;
813         }
814
815         return -EOPNOTSUPP;
816 }
817
818 static void dsa_slave_get_wol(struct net_device *dev, struct ethtool_wolinfo *w)
819 {
820         struct dsa_slave_priv *p = netdev_priv(dev);
821         struct dsa_switch *ds = p->parent;
822
823         if (ds->drv->get_wol)
824                 ds->drv->get_wol(ds, p->port, w);
825 }
826
827 static int dsa_slave_set_wol(struct net_device *dev, struct ethtool_wolinfo *w)
828 {
829         struct dsa_slave_priv *p = netdev_priv(dev);
830         struct dsa_switch *ds = p->parent;
831         int ret = -EOPNOTSUPP;
832
833         if (ds->drv->set_wol)
834                 ret = ds->drv->set_wol(ds, p->port, w);
835
836         return ret;
837 }
838
839 static int dsa_slave_set_eee(struct net_device *dev, struct ethtool_eee *e)
840 {
841         struct dsa_slave_priv *p = netdev_priv(dev);
842         struct dsa_switch *ds = p->parent;
843         int ret;
844
845         if (!ds->drv->set_eee)
846                 return -EOPNOTSUPP;
847
848         ret = ds->drv->set_eee(ds, p->port, p->phy, e);
849         if (ret)
850                 return ret;
851
852         if (p->phy)
853                 ret = phy_ethtool_set_eee(p->phy, e);
854
855         return ret;
856 }
857
858 static int dsa_slave_get_eee(struct net_device *dev, struct ethtool_eee *e)
859 {
860         struct dsa_slave_priv *p = netdev_priv(dev);
861         struct dsa_switch *ds = p->parent;
862         int ret;
863
864         if (!ds->drv->get_eee)
865                 return -EOPNOTSUPP;
866
867         ret = ds->drv->get_eee(ds, p->port, e);
868         if (ret)
869                 return ret;
870
871         if (p->phy)
872                 ret = phy_ethtool_get_eee(p->phy, e);
873
874         return ret;
875 }
876
877 #ifdef CONFIG_NET_POLL_CONTROLLER
878 static int dsa_slave_netpoll_setup(struct net_device *dev,
879                                    struct netpoll_info *ni)
880 {
881         struct dsa_slave_priv *p = netdev_priv(dev);
882         struct dsa_switch *ds = p->parent;
883         struct net_device *master = ds->dst->master_netdev;
884         struct netpoll *netpoll;
885         int err = 0;
886
887         netpoll = kzalloc(sizeof(*netpoll), GFP_KERNEL);
888         if (!netpoll)
889                 return -ENOMEM;
890
891         err = __netpoll_setup(netpoll, master);
892         if (err) {
893                 kfree(netpoll);
894                 goto out;
895         }
896
897         p->netpoll = netpoll;
898 out:
899         return err;
900 }
901
902 static void dsa_slave_netpoll_cleanup(struct net_device *dev)
903 {
904         struct dsa_slave_priv *p = netdev_priv(dev);
905         struct netpoll *netpoll = p->netpoll;
906
907         if (!netpoll)
908                 return;
909
910         p->netpoll = NULL;
911
912         __netpoll_free_async(netpoll);
913 }
914
915 static void dsa_slave_poll_controller(struct net_device *dev)
916 {
917 }
918 #endif
919
920 static const struct ethtool_ops dsa_slave_ethtool_ops = {
921         .get_settings           = dsa_slave_get_settings,
922         .set_settings           = dsa_slave_set_settings,
923         .get_drvinfo            = dsa_slave_get_drvinfo,
924         .get_regs_len           = dsa_slave_get_regs_len,
925         .get_regs               = dsa_slave_get_regs,
926         .nway_reset             = dsa_slave_nway_reset,
927         .get_link               = dsa_slave_get_link,
928         .get_eeprom_len         = dsa_slave_get_eeprom_len,
929         .get_eeprom             = dsa_slave_get_eeprom,
930         .set_eeprom             = dsa_slave_set_eeprom,
931         .get_strings            = dsa_slave_get_strings,
932         .get_ethtool_stats      = dsa_slave_get_ethtool_stats,
933         .get_sset_count         = dsa_slave_get_sset_count,
934         .set_wol                = dsa_slave_set_wol,
935         .get_wol                = dsa_slave_get_wol,
936         .set_eee                = dsa_slave_set_eee,
937         .get_eee                = dsa_slave_get_eee,
938 };
939
940 static const struct net_device_ops dsa_slave_netdev_ops = {
941         .ndo_open               = dsa_slave_open,
942         .ndo_stop               = dsa_slave_close,
943         .ndo_start_xmit         = dsa_slave_xmit,
944         .ndo_change_rx_flags    = dsa_slave_change_rx_flags,
945         .ndo_set_rx_mode        = dsa_slave_set_rx_mode,
946         .ndo_set_mac_address    = dsa_slave_set_mac_address,
947         .ndo_fdb_add            = switchdev_port_fdb_add,
948         .ndo_fdb_del            = switchdev_port_fdb_del,
949         .ndo_fdb_dump           = switchdev_port_fdb_dump,
950         .ndo_do_ioctl           = dsa_slave_ioctl,
951         .ndo_get_iflink         = dsa_slave_get_iflink,
952 #ifdef CONFIG_NET_POLL_CONTROLLER
953         .ndo_netpoll_setup      = dsa_slave_netpoll_setup,
954         .ndo_netpoll_cleanup    = dsa_slave_netpoll_cleanup,
955         .ndo_poll_controller    = dsa_slave_poll_controller,
956 #endif
957         .ndo_bridge_getlink     = switchdev_port_bridge_getlink,
958         .ndo_bridge_setlink     = switchdev_port_bridge_setlink,
959         .ndo_bridge_dellink     = switchdev_port_bridge_dellink,
960 };
961
962 static const struct switchdev_ops dsa_slave_switchdev_ops = {
963         .switchdev_port_attr_get        = dsa_slave_port_attr_get,
964         .switchdev_port_attr_set        = dsa_slave_port_attr_set,
965         .switchdev_port_obj_add         = dsa_slave_port_obj_add,
966         .switchdev_port_obj_del         = dsa_slave_port_obj_del,
967         .switchdev_port_obj_dump        = dsa_slave_port_obj_dump,
968 };
969
970 static void dsa_slave_adjust_link(struct net_device *dev)
971 {
972         struct dsa_slave_priv *p = netdev_priv(dev);
973         struct dsa_switch *ds = p->parent;
974         unsigned int status_changed = 0;
975
976         if (p->old_link != p->phy->link) {
977                 status_changed = 1;
978                 p->old_link = p->phy->link;
979         }
980
981         if (p->old_duplex != p->phy->duplex) {
982                 status_changed = 1;
983                 p->old_duplex = p->phy->duplex;
984         }
985
986         if (p->old_pause != p->phy->pause) {
987                 status_changed = 1;
988                 p->old_pause = p->phy->pause;
989         }
990
991         if (ds->drv->adjust_link && status_changed)
992                 ds->drv->adjust_link(ds, p->port, p->phy);
993
994         if (status_changed)
995                 phy_print_status(p->phy);
996 }
997
998 static int dsa_slave_fixed_link_update(struct net_device *dev,
999                                        struct fixed_phy_status *status)
1000 {
1001         struct dsa_slave_priv *p = netdev_priv(dev);
1002         struct dsa_switch *ds = p->parent;
1003
1004         if (ds->drv->fixed_link_update)
1005                 ds->drv->fixed_link_update(ds, p->port, status);
1006
1007         return 0;
1008 }
1009
1010 /* slave device setup *******************************************************/
1011 static int dsa_slave_phy_connect(struct dsa_slave_priv *p,
1012                                  struct net_device *slave_dev,
1013                                  int addr)
1014 {
1015         struct dsa_switch *ds = p->parent;
1016
1017         p->phy = ds->slave_mii_bus->phy_map[addr];
1018         if (!p->phy)
1019                 return -ENODEV;
1020
1021         /* Use already configured phy mode */
1022         if (p->phy_interface == PHY_INTERFACE_MODE_NA)
1023                 p->phy_interface = p->phy->interface;
1024         phy_connect_direct(slave_dev, p->phy, dsa_slave_adjust_link,
1025                            p->phy_interface);
1026
1027         return 0;
1028 }
1029
1030 static int dsa_slave_phy_setup(struct dsa_slave_priv *p,
1031                                 struct net_device *slave_dev)
1032 {
1033         struct dsa_switch *ds = p->parent;
1034         struct dsa_chip_data *cd = ds->pd;
1035         struct device_node *phy_dn, *port_dn;
1036         bool phy_is_fixed = false;
1037         u32 phy_flags = 0;
1038         int mode, ret;
1039
1040         port_dn = cd->port_dn[p->port];
1041         mode = of_get_phy_mode(port_dn);
1042         if (mode < 0)
1043                 mode = PHY_INTERFACE_MODE_NA;
1044         p->phy_interface = mode;
1045
1046         phy_dn = of_parse_phandle(port_dn, "phy-handle", 0);
1047         if (of_phy_is_fixed_link(port_dn)) {
1048                 /* In the case of a fixed PHY, the DT node associated
1049                  * to the fixed PHY is the Port DT node
1050                  */
1051                 ret = of_phy_register_fixed_link(port_dn);
1052                 if (ret) {
1053                         netdev_err(slave_dev, "failed to register fixed PHY\n");
1054                         return ret;
1055                 }
1056                 phy_is_fixed = true;
1057                 phy_dn = port_dn;
1058         }
1059
1060         if (ds->drv->get_phy_flags)
1061                 phy_flags = ds->drv->get_phy_flags(ds, p->port);
1062
1063         if (phy_dn) {
1064                 ret = of_mdio_parse_addr(&slave_dev->dev, phy_dn);
1065                 /* If this PHY address is part of phys_mii_mask, which means
1066                  * that we need to divert reads and writes to/from it, then we
1067                  * want to bind this device using the slave MII bus created by
1068                  * DSA to make that happen.
1069                  */
1070                 if (!phy_is_fixed && ret >= 0 &&
1071                     (ds->phys_mii_mask & (1 << ret))) {
1072                         ret = dsa_slave_phy_connect(p, slave_dev, ret);
1073                         if (ret)
1074                                 return ret;
1075                 } else {
1076                         p->phy = of_phy_connect(slave_dev, phy_dn,
1077                                                 dsa_slave_adjust_link,
1078                                                 phy_flags,
1079                                                 p->phy_interface);
1080                 }
1081         }
1082
1083         if (p->phy && phy_is_fixed)
1084                 fixed_phy_set_link_update(p->phy, dsa_slave_fixed_link_update);
1085
1086         /* We could not connect to a designated PHY, so use the switch internal
1087          * MDIO bus instead
1088          */
1089         if (!p->phy) {
1090                 ret = dsa_slave_phy_connect(p, slave_dev, p->port);
1091                 if (ret)
1092                         return ret;
1093         } else {
1094                 netdev_info(slave_dev, "attached PHY at address %d [%s]\n",
1095                             p->phy->addr, p->phy->drv->name);
1096         }
1097
1098         return 0;
1099 }
1100
1101 static struct lock_class_key dsa_slave_netdev_xmit_lock_key;
1102 static void dsa_slave_set_lockdep_class_one(struct net_device *dev,
1103                                             struct netdev_queue *txq,
1104                                             void *_unused)
1105 {
1106         lockdep_set_class(&txq->_xmit_lock,
1107                           &dsa_slave_netdev_xmit_lock_key);
1108 }
1109
1110 int dsa_slave_suspend(struct net_device *slave_dev)
1111 {
1112         struct dsa_slave_priv *p = netdev_priv(slave_dev);
1113
1114         if (p->phy) {
1115                 phy_stop(p->phy);
1116                 p->old_pause = -1;
1117                 p->old_link = -1;
1118                 p->old_duplex = -1;
1119                 phy_suspend(p->phy);
1120         }
1121
1122         return 0;
1123 }
1124
1125 int dsa_slave_resume(struct net_device *slave_dev)
1126 {
1127         struct dsa_slave_priv *p = netdev_priv(slave_dev);
1128
1129         netif_device_attach(slave_dev);
1130
1131         if (p->phy) {
1132                 phy_resume(p->phy);
1133                 phy_start(p->phy);
1134         }
1135
1136         return 0;
1137 }
1138
1139 int dsa_slave_create(struct dsa_switch *ds, struct device *parent,
1140                      int port, char *name)
1141 {
1142         struct net_device *master = ds->dst->master_netdev;
1143         struct net_device *slave_dev;
1144         struct dsa_slave_priv *p;
1145         int ret;
1146
1147         slave_dev = alloc_netdev(sizeof(struct dsa_slave_priv), name,
1148                                  NET_NAME_UNKNOWN, ether_setup);
1149         if (slave_dev == NULL)
1150                 return -ENOMEM;
1151
1152         slave_dev->features = master->vlan_features;
1153         slave_dev->ethtool_ops = &dsa_slave_ethtool_ops;
1154         eth_hw_addr_inherit(slave_dev, master);
1155         slave_dev->priv_flags |= IFF_NO_QUEUE;
1156         slave_dev->netdev_ops = &dsa_slave_netdev_ops;
1157         slave_dev->switchdev_ops = &dsa_slave_switchdev_ops;
1158
1159         netdev_for_each_tx_queue(slave_dev, dsa_slave_set_lockdep_class_one,
1160                                  NULL);
1161
1162         SET_NETDEV_DEV(slave_dev, parent);
1163         slave_dev->dev.of_node = ds->pd->port_dn[port];
1164         slave_dev->vlan_features = master->vlan_features;
1165
1166         p = netdev_priv(slave_dev);
1167         p->dev = slave_dev;
1168         p->parent = ds;
1169         p->port = port;
1170
1171         switch (ds->dst->tag_protocol) {
1172 #ifdef CONFIG_NET_DSA_TAG_DSA
1173         case DSA_TAG_PROTO_DSA:
1174                 p->xmit = dsa_netdev_ops.xmit;
1175                 break;
1176 #endif
1177 #ifdef CONFIG_NET_DSA_TAG_EDSA
1178         case DSA_TAG_PROTO_EDSA:
1179                 p->xmit = edsa_netdev_ops.xmit;
1180                 break;
1181 #endif
1182 #ifdef CONFIG_NET_DSA_TAG_TRAILER
1183         case DSA_TAG_PROTO_TRAILER:
1184                 p->xmit = trailer_netdev_ops.xmit;
1185                 break;
1186 #endif
1187 #ifdef CONFIG_NET_DSA_TAG_BRCM
1188         case DSA_TAG_PROTO_BRCM:
1189                 p->xmit = brcm_netdev_ops.xmit;
1190                 break;
1191 #endif
1192         default:
1193                 p->xmit = dsa_slave_notag_xmit;
1194                 break;
1195         }
1196
1197         p->old_pause = -1;
1198         p->old_link = -1;
1199         p->old_duplex = -1;
1200
1201         ret = dsa_slave_phy_setup(p, slave_dev);
1202         if (ret) {
1203                 free_netdev(slave_dev);
1204                 return ret;
1205         }
1206
1207         ds->ports[port] = slave_dev;
1208         ret = register_netdev(slave_dev);
1209         if (ret) {
1210                 netdev_err(master, "error %d registering interface %s\n",
1211                            ret, slave_dev->name);
1212                 phy_disconnect(p->phy);
1213                 ds->ports[port] = NULL;
1214                 free_netdev(slave_dev);
1215                 return ret;
1216         }
1217
1218         netif_carrier_off(slave_dev);
1219
1220         return 0;
1221 }
1222
1223 static bool dsa_slave_dev_check(struct net_device *dev)
1224 {
1225         return dev->netdev_ops == &dsa_slave_netdev_ops;
1226 }
1227
1228 static int dsa_slave_master_changed(struct net_device *dev)
1229 {
1230         struct net_device *master = netdev_master_upper_dev_get(dev);
1231         struct dsa_slave_priv *p = netdev_priv(dev);
1232         int err = 0;
1233
1234         if (master && master->rtnl_link_ops &&
1235             !strcmp(master->rtnl_link_ops->kind, "bridge"))
1236                 err = dsa_slave_bridge_port_join(dev, master);
1237         else if (dsa_port_is_bridged(p))
1238                 err = dsa_slave_bridge_port_leave(dev);
1239
1240         return err;
1241 }
1242
1243 int dsa_slave_netdevice_event(struct notifier_block *unused,
1244                               unsigned long event, void *ptr)
1245 {
1246         struct net_device *dev;
1247         int err = 0;
1248
1249         switch (event) {
1250         case NETDEV_CHANGEUPPER:
1251                 dev = netdev_notifier_info_to_dev(ptr);
1252                 if (!dsa_slave_dev_check(dev))
1253                         goto out;
1254
1255                 err = dsa_slave_master_changed(dev);
1256                 if (err)
1257                         netdev_warn(dev, "failed to reflect master change\n");
1258
1259                 break;
1260         }
1261
1262 out:
1263         return NOTIFY_DONE;
1264 }