generic: ar8216: add support for separated mdio bus for phy access
[oweals/openwrt.git] / target / linux / generic / files / drivers / net / phy / ar8216.c
1 /*
2  * ar8216.c: AR8216 switch driver
3  *
4  * Copyright (C) 2009 Felix Fietkau <nbd@nbd.name>
5  * Copyright (C) 2011-2012 Gabor Juhos <juhosg@openwrt.org>
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  */
17
18 #include <linux/if.h>
19 #include <linux/module.h>
20 #include <linux/init.h>
21 #include <linux/list.h>
22 #include <linux/if_ether.h>
23 #include <linux/skbuff.h>
24 #include <linux/netdevice.h>
25 #include <linux/netlink.h>
26 #include <linux/of_device.h>
27 #include <linux/of_mdio.h>
28 #include <linux/of_net.h>
29 #include <linux/bitops.h>
30 #include <net/genetlink.h>
31 #include <linux/switch.h>
32 #include <linux/delay.h>
33 #include <linux/phy.h>
34 #include <linux/etherdevice.h>
35 #include <linux/lockdep.h>
36 #include <linux/ar8216_platform.h>
37 #include <linux/workqueue.h>
38 #include <linux/version.h>
39
40 #include "ar8216.h"
41
42 extern const struct ar8xxx_chip ar8327_chip;
43 extern const struct ar8xxx_chip ar8337_chip;
44
45 #define AR8XXX_MIB_WORK_DELAY   2000 /* msecs */
46
47 #define MIB_DESC(_s , _o, _n)   \
48         {                       \
49                 .size = (_s),   \
50                 .offset = (_o), \
51                 .name = (_n),   \
52         }
53
54 static const struct ar8xxx_mib_desc ar8216_mibs[] = {
55         MIB_DESC(1, AR8216_STATS_RXBROAD, "RxBroad"),
56         MIB_DESC(1, AR8216_STATS_RXPAUSE, "RxPause"),
57         MIB_DESC(1, AR8216_STATS_RXMULTI, "RxMulti"),
58         MIB_DESC(1, AR8216_STATS_RXFCSERR, "RxFcsErr"),
59         MIB_DESC(1, AR8216_STATS_RXALIGNERR, "RxAlignErr"),
60         MIB_DESC(1, AR8216_STATS_RXRUNT, "RxRunt"),
61         MIB_DESC(1, AR8216_STATS_RXFRAGMENT, "RxFragment"),
62         MIB_DESC(1, AR8216_STATS_RX64BYTE, "Rx64Byte"),
63         MIB_DESC(1, AR8216_STATS_RX128BYTE, "Rx128Byte"),
64         MIB_DESC(1, AR8216_STATS_RX256BYTE, "Rx256Byte"),
65         MIB_DESC(1, AR8216_STATS_RX512BYTE, "Rx512Byte"),
66         MIB_DESC(1, AR8216_STATS_RX1024BYTE, "Rx1024Byte"),
67         MIB_DESC(1, AR8216_STATS_RXMAXBYTE, "RxMaxByte"),
68         MIB_DESC(1, AR8216_STATS_RXTOOLONG, "RxTooLong"),
69         MIB_DESC(2, AR8216_STATS_RXGOODBYTE, "RxGoodByte"),
70         MIB_DESC(2, AR8216_STATS_RXBADBYTE, "RxBadByte"),
71         MIB_DESC(1, AR8216_STATS_RXOVERFLOW, "RxOverFlow"),
72         MIB_DESC(1, AR8216_STATS_FILTERED, "Filtered"),
73         MIB_DESC(1, AR8216_STATS_TXBROAD, "TxBroad"),
74         MIB_DESC(1, AR8216_STATS_TXPAUSE, "TxPause"),
75         MIB_DESC(1, AR8216_STATS_TXMULTI, "TxMulti"),
76         MIB_DESC(1, AR8216_STATS_TXUNDERRUN, "TxUnderRun"),
77         MIB_DESC(1, AR8216_STATS_TX64BYTE, "Tx64Byte"),
78         MIB_DESC(1, AR8216_STATS_TX128BYTE, "Tx128Byte"),
79         MIB_DESC(1, AR8216_STATS_TX256BYTE, "Tx256Byte"),
80         MIB_DESC(1, AR8216_STATS_TX512BYTE, "Tx512Byte"),
81         MIB_DESC(1, AR8216_STATS_TX1024BYTE, "Tx1024Byte"),
82         MIB_DESC(1, AR8216_STATS_TXMAXBYTE, "TxMaxByte"),
83         MIB_DESC(1, AR8216_STATS_TXOVERSIZE, "TxOverSize"),
84         MIB_DESC(2, AR8216_STATS_TXBYTE, "TxByte"),
85         MIB_DESC(1, AR8216_STATS_TXCOLLISION, "TxCollision"),
86         MIB_DESC(1, AR8216_STATS_TXABORTCOL, "TxAbortCol"),
87         MIB_DESC(1, AR8216_STATS_TXMULTICOL, "TxMultiCol"),
88         MIB_DESC(1, AR8216_STATS_TXSINGLECOL, "TxSingleCol"),
89         MIB_DESC(1, AR8216_STATS_TXEXCDEFER, "TxExcDefer"),
90         MIB_DESC(1, AR8216_STATS_TXDEFER, "TxDefer"),
91         MIB_DESC(1, AR8216_STATS_TXLATECOL, "TxLateCol"),
92 };
93
94 const struct ar8xxx_mib_desc ar8236_mibs[39] = {
95         MIB_DESC(1, AR8236_STATS_RXBROAD, "RxBroad"),
96         MIB_DESC(1, AR8236_STATS_RXPAUSE, "RxPause"),
97         MIB_DESC(1, AR8236_STATS_RXMULTI, "RxMulti"),
98         MIB_DESC(1, AR8236_STATS_RXFCSERR, "RxFcsErr"),
99         MIB_DESC(1, AR8236_STATS_RXALIGNERR, "RxAlignErr"),
100         MIB_DESC(1, AR8236_STATS_RXRUNT, "RxRunt"),
101         MIB_DESC(1, AR8236_STATS_RXFRAGMENT, "RxFragment"),
102         MIB_DESC(1, AR8236_STATS_RX64BYTE, "Rx64Byte"),
103         MIB_DESC(1, AR8236_STATS_RX128BYTE, "Rx128Byte"),
104         MIB_DESC(1, AR8236_STATS_RX256BYTE, "Rx256Byte"),
105         MIB_DESC(1, AR8236_STATS_RX512BYTE, "Rx512Byte"),
106         MIB_DESC(1, AR8236_STATS_RX1024BYTE, "Rx1024Byte"),
107         MIB_DESC(1, AR8236_STATS_RX1518BYTE, "Rx1518Byte"),
108         MIB_DESC(1, AR8236_STATS_RXMAXBYTE, "RxMaxByte"),
109         MIB_DESC(1, AR8236_STATS_RXTOOLONG, "RxTooLong"),
110         MIB_DESC(2, AR8236_STATS_RXGOODBYTE, "RxGoodByte"),
111         MIB_DESC(2, AR8236_STATS_RXBADBYTE, "RxBadByte"),
112         MIB_DESC(1, AR8236_STATS_RXOVERFLOW, "RxOverFlow"),
113         MIB_DESC(1, AR8236_STATS_FILTERED, "Filtered"),
114         MIB_DESC(1, AR8236_STATS_TXBROAD, "TxBroad"),
115         MIB_DESC(1, AR8236_STATS_TXPAUSE, "TxPause"),
116         MIB_DESC(1, AR8236_STATS_TXMULTI, "TxMulti"),
117         MIB_DESC(1, AR8236_STATS_TXUNDERRUN, "TxUnderRun"),
118         MIB_DESC(1, AR8236_STATS_TX64BYTE, "Tx64Byte"),
119         MIB_DESC(1, AR8236_STATS_TX128BYTE, "Tx128Byte"),
120         MIB_DESC(1, AR8236_STATS_TX256BYTE, "Tx256Byte"),
121         MIB_DESC(1, AR8236_STATS_TX512BYTE, "Tx512Byte"),
122         MIB_DESC(1, AR8236_STATS_TX1024BYTE, "Tx1024Byte"),
123         MIB_DESC(1, AR8236_STATS_TX1518BYTE, "Tx1518Byte"),
124         MIB_DESC(1, AR8236_STATS_TXMAXBYTE, "TxMaxByte"),
125         MIB_DESC(1, AR8236_STATS_TXOVERSIZE, "TxOverSize"),
126         MIB_DESC(2, AR8236_STATS_TXBYTE, "TxByte"),
127         MIB_DESC(1, AR8236_STATS_TXCOLLISION, "TxCollision"),
128         MIB_DESC(1, AR8236_STATS_TXABORTCOL, "TxAbortCol"),
129         MIB_DESC(1, AR8236_STATS_TXMULTICOL, "TxMultiCol"),
130         MIB_DESC(1, AR8236_STATS_TXSINGLECOL, "TxSingleCol"),
131         MIB_DESC(1, AR8236_STATS_TXEXCDEFER, "TxExcDefer"),
132         MIB_DESC(1, AR8236_STATS_TXDEFER, "TxDefer"),
133         MIB_DESC(1, AR8236_STATS_TXLATECOL, "TxLateCol"),
134 };
135
136 static DEFINE_MUTEX(ar8xxx_dev_list_lock);
137 static LIST_HEAD(ar8xxx_dev_list);
138
139 /* inspired by phy_poll_reset in drivers/net/phy/phy_device.c */
140 static int
141 ar8xxx_phy_poll_reset(struct mii_bus *bus)
142 {
143         unsigned int sleep_msecs = 20;
144         int ret, elapsed, i;
145
146         for (elapsed = sleep_msecs; elapsed <= 600;
147              elapsed += sleep_msecs) {
148                 msleep(sleep_msecs);
149                 for (i = 0; i < AR8XXX_NUM_PHYS; i++) {
150                         ret = mdiobus_read(bus, i, MII_BMCR);
151                         if (ret < 0)
152                                 return ret;
153                         if (ret & BMCR_RESET)
154                                 break;
155                         if (i == AR8XXX_NUM_PHYS - 1) {
156                                 usleep_range(1000, 2000);
157                                 return 0;
158                         }
159                 }
160         }
161         return -ETIMEDOUT;
162 }
163
164 static int
165 ar8xxx_phy_check_aneg(struct phy_device *phydev)
166 {
167         int ret;
168
169         if (phydev->autoneg != AUTONEG_ENABLE)
170                 return 0;
171         /*
172          * BMCR_ANENABLE might have been cleared
173          * by phy_init_hw in certain kernel versions
174          * therefore check for it
175          */
176         ret = phy_read(phydev, MII_BMCR);
177         if (ret < 0)
178                 return ret;
179         if (ret & BMCR_ANENABLE)
180                 return 0;
181
182         dev_info(&phydev->mdio.dev, "ANEG disabled, re-enabling ...\n");
183         ret |= BMCR_ANENABLE | BMCR_ANRESTART;
184         return phy_write(phydev, MII_BMCR, ret);
185 }
186
187 void
188 ar8xxx_phy_init(struct ar8xxx_priv *priv)
189 {
190         int i;
191         struct mii_bus *bus;
192
193         bus = priv->sw_mii_bus ?: priv->mii_bus;
194         for (i = 0; i < AR8XXX_NUM_PHYS; i++) {
195                 if (priv->chip->phy_fixup)
196                         priv->chip->phy_fixup(priv, i);
197
198                 /* initialize the port itself */
199                 mdiobus_write(bus, i, MII_ADVERTISE,
200                         ADVERTISE_ALL | ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM);
201                 if (ar8xxx_has_gige(priv))
202                         mdiobus_write(bus, i, MII_CTRL1000, ADVERTISE_1000FULL);
203                 mdiobus_write(bus, i, MII_BMCR, BMCR_RESET | BMCR_ANENABLE);
204         }
205
206         ar8xxx_phy_poll_reset(bus);
207 }
208
209 u32
210 ar8xxx_mii_read32(struct ar8xxx_priv *priv, int phy_id, int regnum)
211 {
212         struct mii_bus *bus = priv->mii_bus;
213         u16 lo, hi;
214
215         lo = bus->read(bus, phy_id, regnum);
216         hi = bus->read(bus, phy_id, regnum + 1);
217
218         return (hi << 16) | lo;
219 }
220
221 void
222 ar8xxx_mii_write32(struct ar8xxx_priv *priv, int phy_id, int regnum, u32 val)
223 {
224         struct mii_bus *bus = priv->mii_bus;
225         u16 lo, hi;
226
227         lo = val & 0xffff;
228         hi = (u16) (val >> 16);
229
230         if (priv->chip->mii_lo_first)
231         {
232                 bus->write(bus, phy_id, regnum, lo);
233                 bus->write(bus, phy_id, regnum + 1, hi);
234         } else {
235                 bus->write(bus, phy_id, regnum + 1, hi);
236                 bus->write(bus, phy_id, regnum, lo);
237         }
238 }
239
240 u32
241 ar8xxx_read(struct ar8xxx_priv *priv, int reg)
242 {
243         struct mii_bus *bus = priv->mii_bus;
244         u16 r1, r2, page;
245         u32 val;
246
247         split_addr((u32) reg, &r1, &r2, &page);
248
249         mutex_lock(&bus->mdio_lock);
250
251         bus->write(bus, 0x18, 0, page);
252         wait_for_page_switch();
253         val = ar8xxx_mii_read32(priv, 0x10 | r2, r1);
254
255         mutex_unlock(&bus->mdio_lock);
256
257         return val;
258 }
259
260 void
261 ar8xxx_write(struct ar8xxx_priv *priv, int reg, u32 val)
262 {
263         struct mii_bus *bus = priv->mii_bus;
264         u16 r1, r2, page;
265
266         split_addr((u32) reg, &r1, &r2, &page);
267
268         mutex_lock(&bus->mdio_lock);
269
270         bus->write(bus, 0x18, 0, page);
271         wait_for_page_switch();
272         ar8xxx_mii_write32(priv, 0x10 | r2, r1, val);
273
274         mutex_unlock(&bus->mdio_lock);
275 }
276
277 u32
278 ar8xxx_rmw(struct ar8xxx_priv *priv, int reg, u32 mask, u32 val)
279 {
280         struct mii_bus *bus = priv->mii_bus;
281         u16 r1, r2, page;
282         u32 ret;
283
284         split_addr((u32) reg, &r1, &r2, &page);
285
286         mutex_lock(&bus->mdio_lock);
287
288         bus->write(bus, 0x18, 0, page);
289         wait_for_page_switch();
290
291         ret = ar8xxx_mii_read32(priv, 0x10 | r2, r1);
292         ret &= ~mask;
293         ret |= val;
294         ar8xxx_mii_write32(priv, 0x10 | r2, r1, ret);
295
296         mutex_unlock(&bus->mdio_lock);
297
298         return ret;
299 }
300 void
301 ar8xxx_phy_dbg_read(struct ar8xxx_priv *priv, int phy_addr,
302            u16 dbg_addr, u16 *dbg_data)
303 {
304        struct mii_bus *bus = priv->mii_bus;
305
306        mutex_lock(&bus->mdio_lock);
307        bus->write(bus, phy_addr, MII_ATH_DBG_ADDR, dbg_addr);
308        *dbg_data = bus->read(bus, phy_addr, MII_ATH_DBG_DATA);
309        mutex_unlock(&bus->mdio_lock);
310 }
311
312 void
313 ar8xxx_phy_dbg_write(struct ar8xxx_priv *priv, int phy_addr,
314                      u16 dbg_addr, u16 dbg_data)
315 {
316         struct mii_bus *bus = priv->mii_bus;
317
318         mutex_lock(&bus->mdio_lock);
319         bus->write(bus, phy_addr, MII_ATH_DBG_ADDR, dbg_addr);
320         bus->write(bus, phy_addr, MII_ATH_DBG_DATA, dbg_data);
321         mutex_unlock(&bus->mdio_lock);
322 }
323
324 static inline void
325 ar8xxx_phy_mmd_prep(struct mii_bus *bus, int phy_addr, u16 addr, u16 reg)
326 {
327         bus->write(bus, phy_addr, MII_ATH_MMD_ADDR, addr);
328         bus->write(bus, phy_addr, MII_ATH_MMD_DATA, reg);
329         bus->write(bus, phy_addr, MII_ATH_MMD_ADDR, addr | 0x4000);
330 }
331
332 void
333 ar8xxx_phy_mmd_write(struct ar8xxx_priv *priv, int phy_addr, u16 addr, u16 reg, u16 data)
334 {
335         struct mii_bus *bus = priv->mii_bus;
336
337         mutex_lock(&bus->mdio_lock);
338         ar8xxx_phy_mmd_prep(bus, phy_addr, addr, reg);
339         bus->write(bus, phy_addr, MII_ATH_MMD_DATA, data);
340         mutex_unlock(&bus->mdio_lock);
341 }
342
343 u16
344 ar8xxx_phy_mmd_read(struct ar8xxx_priv *priv, int phy_addr, u16 addr, u16 reg)
345 {
346         struct mii_bus *bus = priv->mii_bus;
347         u16 data;
348
349         mutex_lock(&bus->mdio_lock);
350         ar8xxx_phy_mmd_prep(bus, phy_addr, addr, reg);
351         data = bus->read(bus, phy_addr, MII_ATH_MMD_DATA);
352         mutex_unlock(&bus->mdio_lock);
353
354         return data;
355 }
356
357 static int
358 ar8xxx_reg_wait(struct ar8xxx_priv *priv, u32 reg, u32 mask, u32 val,
359                 unsigned timeout)
360 {
361         int i;
362
363         for (i = 0; i < timeout; i++) {
364                 u32 t;
365
366                 t = ar8xxx_read(priv, reg);
367                 if ((t & mask) == val)
368                         return 0;
369
370                 usleep_range(1000, 2000);
371                 cond_resched();
372         }
373
374         return -ETIMEDOUT;
375 }
376
377 static int
378 ar8xxx_mib_op(struct ar8xxx_priv *priv, u32 op)
379 {
380         unsigned mib_func = priv->chip->mib_func;
381         int ret;
382
383         lockdep_assert_held(&priv->mib_lock);
384
385         /* Capture the hardware statistics for all ports */
386         ar8xxx_rmw(priv, mib_func, AR8216_MIB_FUNC, (op << AR8216_MIB_FUNC_S));
387
388         /* Wait for the capturing to complete. */
389         ret = ar8xxx_reg_wait(priv, mib_func, AR8216_MIB_BUSY, 0, 10);
390         if (ret)
391                 goto out;
392
393         ret = 0;
394
395 out:
396         return ret;
397 }
398
399 static int
400 ar8xxx_mib_capture(struct ar8xxx_priv *priv)
401 {
402         return ar8xxx_mib_op(priv, AR8216_MIB_FUNC_CAPTURE);
403 }
404
405 static int
406 ar8xxx_mib_flush(struct ar8xxx_priv *priv)
407 {
408         return ar8xxx_mib_op(priv, AR8216_MIB_FUNC_FLUSH);
409 }
410
411 static void
412 ar8xxx_mib_fetch_port_stat(struct ar8xxx_priv *priv, int port, bool flush)
413 {
414         unsigned int base;
415         u64 *mib_stats;
416         int i;
417
418         WARN_ON(port >= priv->dev.ports);
419
420         lockdep_assert_held(&priv->mib_lock);
421
422         base = priv->chip->reg_port_stats_start +
423                priv->chip->reg_port_stats_length * port;
424
425         mib_stats = &priv->mib_stats[port * priv->chip->num_mibs];
426         for (i = 0; i < priv->chip->num_mibs; i++) {
427                 const struct ar8xxx_mib_desc *mib;
428                 u64 t;
429
430                 mib = &priv->chip->mib_decs[i];
431                 t = ar8xxx_read(priv, base + mib->offset);
432                 if (mib->size == 2) {
433                         u64 hi;
434
435                         hi = ar8xxx_read(priv, base + mib->offset + 4);
436                         t |= hi << 32;
437                 }
438
439                 if (flush)
440                         mib_stats[i] = 0;
441                 else
442                         mib_stats[i] += t;
443                 cond_resched();
444         }
445 }
446
447 static void
448 ar8216_read_port_link(struct ar8xxx_priv *priv, int port,
449                       struct switch_port_link *link)
450 {
451         u32 status;
452         u32 speed;
453
454         memset(link, '\0', sizeof(*link));
455
456         status = priv->chip->read_port_status(priv, port);
457
458         link->aneg = !!(status & AR8216_PORT_STATUS_LINK_AUTO);
459         if (link->aneg) {
460                 link->link = !!(status & AR8216_PORT_STATUS_LINK_UP);
461         } else {
462                 link->link = true;
463
464                 if (priv->get_port_link) {
465                         int err;
466
467                         err = priv->get_port_link(port);
468                         if (err >= 0)
469                                 link->link = !!err;
470                 }
471         }
472
473         if (!link->link)
474                 return;
475
476         link->duplex = !!(status & AR8216_PORT_STATUS_DUPLEX);
477         link->tx_flow = !!(status & AR8216_PORT_STATUS_TXFLOW);
478         link->rx_flow = !!(status & AR8216_PORT_STATUS_RXFLOW);
479
480         if (link->aneg && link->duplex && priv->chip->read_port_eee_status)
481                 link->eee = priv->chip->read_port_eee_status(priv, port);
482
483         speed = (status & AR8216_PORT_STATUS_SPEED) >>
484                  AR8216_PORT_STATUS_SPEED_S;
485
486         switch (speed) {
487         case AR8216_PORT_SPEED_10M:
488                 link->speed = SWITCH_PORT_SPEED_10;
489                 break;
490         case AR8216_PORT_SPEED_100M:
491                 link->speed = SWITCH_PORT_SPEED_100;
492                 break;
493         case AR8216_PORT_SPEED_1000M:
494                 link->speed = SWITCH_PORT_SPEED_1000;
495                 break;
496         default:
497                 link->speed = SWITCH_PORT_SPEED_UNKNOWN;
498                 break;
499         }
500 }
501
502 static struct sk_buff *
503 ar8216_mangle_tx(struct net_device *dev, struct sk_buff *skb)
504 {
505         struct ar8xxx_priv *priv = dev->phy_ptr;
506         unsigned char *buf;
507
508         if (unlikely(!priv))
509                 goto error;
510
511         if (!priv->vlan)
512                 goto send;
513
514         if (unlikely(skb_headroom(skb) < 2)) {
515                 if (pskb_expand_head(skb, 2, 0, GFP_ATOMIC) < 0)
516                         goto error;
517         }
518
519         buf = skb_push(skb, 2);
520         buf[0] = 0x10;
521         buf[1] = 0x80;
522
523 send:
524         return skb;
525
526 error:
527         dev_kfree_skb_any(skb);
528         return NULL;
529 }
530
531 static void
532 ar8216_mangle_rx(struct net_device *dev, struct sk_buff *skb)
533 {
534         struct ar8xxx_priv *priv;
535         unsigned char *buf;
536         int port, vlan;
537
538         priv = dev->phy_ptr;
539         if (!priv)
540                 return;
541
542         /* don't strip the header if vlan mode is disabled */
543         if (!priv->vlan)
544                 return;
545
546         /* strip header, get vlan id */
547         buf = skb->data;
548         skb_pull(skb, 2);
549
550         /* check for vlan header presence */
551         if ((buf[12 + 2] != 0x81) || (buf[13 + 2] != 0x00))
552                 return;
553
554         port = buf[0] & 0x7;
555
556         /* no need to fix up packets coming from a tagged source */
557         if (priv->vlan_tagged & (1 << port))
558                 return;
559
560         /* lookup port vid from local table, the switch passes an invalid vlan id */
561         vlan = priv->vlan_id[priv->pvid[port]];
562
563         buf[14 + 2] &= 0xf0;
564         buf[14 + 2] |= vlan >> 8;
565         buf[15 + 2] = vlan & 0xff;
566 }
567
568 int
569 ar8216_wait_bit(struct ar8xxx_priv *priv, int reg, u32 mask, u32 val)
570 {
571         int timeout = 20;
572         u32 t = 0;
573
574         while (1) {
575                 t = ar8xxx_read(priv, reg);
576                 if ((t & mask) == val)
577                         return 0;
578
579                 if (timeout-- <= 0)
580                         break;
581
582                 udelay(10);
583                 cond_resched();
584         }
585
586         pr_err("ar8216: timeout on reg %08x: %08x & %08x != %08x\n",
587                (unsigned int) reg, t, mask, val);
588         return -ETIMEDOUT;
589 }
590
591 static void
592 ar8216_vtu_op(struct ar8xxx_priv *priv, u32 op, u32 val)
593 {
594         if (ar8216_wait_bit(priv, AR8216_REG_VTU, AR8216_VTU_ACTIVE, 0))
595                 return;
596         if ((op & AR8216_VTU_OP) == AR8216_VTU_OP_LOAD) {
597                 val &= AR8216_VTUDATA_MEMBER;
598                 val |= AR8216_VTUDATA_VALID;
599                 ar8xxx_write(priv, AR8216_REG_VTU_DATA, val);
600         }
601         op |= AR8216_VTU_ACTIVE;
602         ar8xxx_write(priv, AR8216_REG_VTU, op);
603 }
604
605 static void
606 ar8216_vtu_flush(struct ar8xxx_priv *priv)
607 {
608         ar8216_vtu_op(priv, AR8216_VTU_OP_FLUSH, 0);
609 }
610
611 static void
612 ar8216_vtu_load_vlan(struct ar8xxx_priv *priv, u32 vid, u32 port_mask)
613 {
614         u32 op;
615
616         op = AR8216_VTU_OP_LOAD | (vid << AR8216_VTU_VID_S);
617         ar8216_vtu_op(priv, op, port_mask);
618 }
619
620 static int
621 ar8216_atu_flush(struct ar8xxx_priv *priv)
622 {
623         int ret;
624
625         ret = ar8216_wait_bit(priv, AR8216_REG_ATU_FUNC0, AR8216_ATU_ACTIVE, 0);
626         if (!ret)
627                 ar8xxx_write(priv, AR8216_REG_ATU_FUNC0, AR8216_ATU_OP_FLUSH |
628                                                          AR8216_ATU_ACTIVE);
629
630         return ret;
631 }
632
633 static int
634 ar8216_atu_flush_port(struct ar8xxx_priv *priv, int port)
635 {
636         u32 t;
637         int ret;
638
639         ret = ar8216_wait_bit(priv, AR8216_REG_ATU_FUNC0, AR8216_ATU_ACTIVE, 0);
640         if (!ret) {
641                 t = (port << AR8216_ATU_PORT_NUM_S) | AR8216_ATU_OP_FLUSH_PORT;
642                 t |= AR8216_ATU_ACTIVE;
643                 ar8xxx_write(priv, AR8216_REG_ATU_FUNC0, t);
644         }
645
646         return ret;
647 }
648
649 static u32
650 ar8216_read_port_status(struct ar8xxx_priv *priv, int port)
651 {
652         return ar8xxx_read(priv, AR8216_REG_PORT_STATUS(port));
653 }
654
655 static void
656 ar8216_setup_port(struct ar8xxx_priv *priv, int port, u32 members)
657 {
658         u32 header;
659         u32 egress, ingress;
660         u32 pvid;
661
662         if (priv->vlan) {
663                 pvid = priv->vlan_id[priv->pvid[port]];
664                 if (priv->vlan_tagged & (1 << port))
665                         egress = AR8216_OUT_ADD_VLAN;
666                 else
667                         egress = AR8216_OUT_STRIP_VLAN;
668                 ingress = AR8216_IN_SECURE;
669         } else {
670                 pvid = port;
671                 egress = AR8216_OUT_KEEP;
672                 ingress = AR8216_IN_PORT_ONLY;
673         }
674
675         if (chip_is_ar8216(priv) && priv->vlan && port == AR8216_PORT_CPU)
676                 header = AR8216_PORT_CTRL_HEADER;
677         else
678                 header = 0;
679
680         ar8xxx_rmw(priv, AR8216_REG_PORT_CTRL(port),
681                    AR8216_PORT_CTRL_LEARN | AR8216_PORT_CTRL_VLAN_MODE |
682                    AR8216_PORT_CTRL_SINGLE_VLAN | AR8216_PORT_CTRL_STATE |
683                    AR8216_PORT_CTRL_HEADER | AR8216_PORT_CTRL_LEARN_LOCK,
684                    AR8216_PORT_CTRL_LEARN | header |
685                    (egress << AR8216_PORT_CTRL_VLAN_MODE_S) |
686                    (AR8216_PORT_STATE_FORWARD << AR8216_PORT_CTRL_STATE_S));
687
688         ar8xxx_rmw(priv, AR8216_REG_PORT_VLAN(port),
689                    AR8216_PORT_VLAN_DEST_PORTS | AR8216_PORT_VLAN_MODE |
690                    AR8216_PORT_VLAN_DEFAULT_ID,
691                    (members << AR8216_PORT_VLAN_DEST_PORTS_S) |
692                    (ingress << AR8216_PORT_VLAN_MODE_S) |
693                    (pvid << AR8216_PORT_VLAN_DEFAULT_ID_S));
694 }
695
696 static int
697 ar8216_hw_init(struct ar8xxx_priv *priv)
698 {
699         if (priv->initialized)
700                 return 0;
701
702         ar8xxx_phy_init(priv);
703
704         priv->initialized = true;
705         return 0;
706 }
707
708 static void
709 ar8216_init_globals(struct ar8xxx_priv *priv)
710 {
711         /* standard atheros magic */
712         ar8xxx_write(priv, 0x38, 0xc000050e);
713
714         ar8xxx_rmw(priv, AR8216_REG_GLOBAL_CTRL,
715                    AR8216_GCTRL_MTU, 1518 + 8 + 2);
716 }
717
718 static void
719 __ar8216_init_port(struct ar8xxx_priv *priv, int port,
720                    bool cpu_ge, bool flow_en)
721 {
722         /* Enable port learning and tx */
723         ar8xxx_write(priv, AR8216_REG_PORT_CTRL(port),
724                 AR8216_PORT_CTRL_LEARN |
725                 (4 << AR8216_PORT_CTRL_STATE_S));
726
727         ar8xxx_write(priv, AR8216_REG_PORT_VLAN(port), 0);
728
729         if (port == AR8216_PORT_CPU) {
730                 ar8xxx_write(priv, AR8216_REG_PORT_STATUS(port),
731                         AR8216_PORT_STATUS_LINK_UP |
732                         (cpu_ge ? AR8216_PORT_SPEED_1000M : AR8216_PORT_SPEED_100M) |
733                         AR8216_PORT_STATUS_TXMAC |
734                         AR8216_PORT_STATUS_RXMAC |
735                         (flow_en ? AR8216_PORT_STATUS_RXFLOW : 0) |
736                         (flow_en ? AR8216_PORT_STATUS_TXFLOW : 0) |
737                         AR8216_PORT_STATUS_DUPLEX);
738         } else {
739                 ar8xxx_write(priv, AR8216_REG_PORT_STATUS(port),
740                         AR8216_PORT_STATUS_LINK_AUTO);
741         }
742 }
743
744 static void
745 ar8216_init_port(struct ar8xxx_priv *priv, int port)
746 {
747         __ar8216_init_port(priv, port, ar8xxx_has_gige(priv),
748                            chip_is_ar8316(priv));
749 }
750
751 static void
752 ar8216_wait_atu_ready(struct ar8xxx_priv *priv, u16 r2, u16 r1)
753 {
754         int timeout = 20;
755
756         while (ar8xxx_mii_read32(priv, r2, r1) & AR8216_ATU_ACTIVE && --timeout) {
757                 udelay(10);
758                 cond_resched();
759         }
760
761         if (!timeout)
762                 pr_err("ar8216: timeout waiting for atu to become ready\n");
763 }
764
765 static void ar8216_get_arl_entry(struct ar8xxx_priv *priv,
766                                  struct arl_entry *a, u32 *status, enum arl_op op)
767 {
768         struct mii_bus *bus = priv->mii_bus;
769         u16 r2, page;
770         u16 r1_func0, r1_func1, r1_func2;
771         u32 t, val0, val1, val2;
772
773         split_addr(AR8216_REG_ATU_FUNC0, &r1_func0, &r2, &page);
774         r2 |= 0x10;
775
776         r1_func1 = (AR8216_REG_ATU_FUNC1 >> 1) & 0x1e;
777         r1_func2 = (AR8216_REG_ATU_FUNC2 >> 1) & 0x1e;
778
779         switch (op) {
780         case AR8XXX_ARL_INITIALIZE:
781                 /* all ATU registers are on the same page
782                 * therefore set page only once
783                 */
784                 bus->write(bus, 0x18, 0, page);
785                 wait_for_page_switch();
786
787                 ar8216_wait_atu_ready(priv, r2, r1_func0);
788
789                 ar8xxx_mii_write32(priv, r2, r1_func0, AR8216_ATU_OP_GET_NEXT);
790                 ar8xxx_mii_write32(priv, r2, r1_func1, 0);
791                 ar8xxx_mii_write32(priv, r2, r1_func2, 0);
792                 break;
793         case AR8XXX_ARL_GET_NEXT:
794                 t = ar8xxx_mii_read32(priv, r2, r1_func0);
795                 t |= AR8216_ATU_ACTIVE;
796                 ar8xxx_mii_write32(priv, r2, r1_func0, t);
797                 ar8216_wait_atu_ready(priv, r2, r1_func0);
798
799                 val0 = ar8xxx_mii_read32(priv, r2, r1_func0);
800                 val1 = ar8xxx_mii_read32(priv, r2, r1_func1);
801                 val2 = ar8xxx_mii_read32(priv, r2, r1_func2);
802
803                 *status = (val2 & AR8216_ATU_STATUS) >> AR8216_ATU_STATUS_S;
804                 if (!*status)
805                         break;
806
807                 a->portmap = (val2 & AR8216_ATU_PORTS) >> AR8216_ATU_PORTS_S;
808                 a->mac[0] = (val0 & AR8216_ATU_ADDR5) >> AR8216_ATU_ADDR5_S;
809                 a->mac[1] = (val0 & AR8216_ATU_ADDR4) >> AR8216_ATU_ADDR4_S;
810                 a->mac[2] = (val1 & AR8216_ATU_ADDR3) >> AR8216_ATU_ADDR3_S;
811                 a->mac[3] = (val1 & AR8216_ATU_ADDR2) >> AR8216_ATU_ADDR2_S;
812                 a->mac[4] = (val1 & AR8216_ATU_ADDR1) >> AR8216_ATU_ADDR1_S;
813                 a->mac[5] = (val1 & AR8216_ATU_ADDR0) >> AR8216_ATU_ADDR0_S;
814                 break;
815         }
816 }
817
818 static int
819 ar8229_hw_init(struct ar8xxx_priv *priv)
820 {
821         int phy_if_mode;
822
823         if (priv->initialized)
824                 return 0;
825
826         ar8xxx_write(priv, AR8216_REG_CTRL, AR8216_CTRL_RESET);
827         ar8xxx_reg_wait(priv, AR8216_REG_CTRL, AR8216_CTRL_RESET, 0, 1000);
828
829         phy_if_mode = of_get_phy_mode(priv->pdev->of_node);
830
831         if (phy_if_mode == PHY_INTERFACE_MODE_GMII) {
832                 ar8xxx_write(priv, AR8229_REG_OPER_MODE0,
833                                  AR8229_OPER_MODE0_MAC_GMII_EN);
834         } else if (phy_if_mode == PHY_INTERFACE_MODE_MII) {
835                 ar8xxx_write(priv, AR8229_REG_OPER_MODE0,
836                                  AR8229_OPER_MODE0_PHY_MII_EN);
837         } else {
838                 pr_err("ar8229: unsupported mii mode\n");
839                 return -EINVAL;
840         }
841
842         if (priv->port4_phy)
843                 ar8xxx_write(priv, AR8229_REG_OPER_MODE1,
844                              AR8229_REG_OPER_MODE1_PHY4_MII_EN);
845
846         ar8xxx_phy_init(priv);
847
848         priv->initialized = true;
849         return 0;
850 }
851
852 static void
853 ar8229_init_globals(struct ar8xxx_priv *priv)
854 {
855
856         /* Enable CPU port, and disable mirror port */
857         ar8xxx_write(priv, AR8216_REG_GLOBAL_CPUPORT,
858                      AR8216_GLOBAL_CPUPORT_EN |
859                      (15 << AR8216_GLOBAL_CPUPORT_MIRROR_PORT_S));
860
861         /* Setup TAG priority mapping */
862         ar8xxx_write(priv, AR8216_REG_TAG_PRIORITY, 0xfa50);
863
864         /* Enable aging, MAC replacing */
865         ar8xxx_write(priv, AR8216_REG_ATU_CTRL,
866                      0x2b /* 5 min age time */ |
867                      AR8216_ATU_CTRL_AGE_EN |
868                      AR8216_ATU_CTRL_LEARN_CHANGE);
869
870         /* Enable ARP frame acknowledge */
871         ar8xxx_reg_set(priv, AR8229_REG_QM_CTRL,
872                        AR8229_QM_CTRL_ARP_EN);
873
874         /* Enable Broadcast/Multicast frames transmitted to the CPU */
875         ar8xxx_reg_set(priv, AR8216_REG_FLOOD_MASK,
876                        AR8229_FLOOD_MASK_BC_DP(0) |
877                        AR8229_FLOOD_MASK_MC_DP(0));
878
879         /* setup MTU */
880         ar8xxx_rmw(priv, AR8216_REG_GLOBAL_CTRL,
881                    AR8236_GCTRL_MTU, AR8236_GCTRL_MTU);
882
883         /* Enable MIB counters */
884         ar8xxx_reg_set(priv, AR8216_REG_MIB_FUNC,
885                        AR8236_MIB_EN);
886
887         /* setup Service TAG */
888         ar8xxx_rmw(priv, AR8216_REG_SERVICE_TAG, AR8216_SERVICE_TAG_M, 0);
889 }
890
891 static void
892 ar8229_init_port(struct ar8xxx_priv *priv, int port)
893 {
894         __ar8216_init_port(priv, port, true, true);
895 }
896
897 static void
898 ar8236_setup_port(struct ar8xxx_priv *priv, int port, u32 members)
899 {
900         u32 egress, ingress;
901         u32 pvid;
902
903         if (priv->vlan) {
904                 pvid = priv->vlan_id[priv->pvid[port]];
905                 if (priv->vlan_tagged & (1 << port))
906                         egress = AR8216_OUT_ADD_VLAN;
907                 else
908                         egress = AR8216_OUT_STRIP_VLAN;
909                 ingress = AR8216_IN_SECURE;
910         } else {
911                 pvid = port;
912                 egress = AR8216_OUT_KEEP;
913                 ingress = AR8216_IN_PORT_ONLY;
914         }
915
916         ar8xxx_rmw(priv, AR8216_REG_PORT_CTRL(port),
917                    AR8216_PORT_CTRL_LEARN | AR8216_PORT_CTRL_VLAN_MODE |
918                    AR8216_PORT_CTRL_SINGLE_VLAN | AR8216_PORT_CTRL_STATE |
919                    AR8216_PORT_CTRL_HEADER | AR8216_PORT_CTRL_LEARN_LOCK,
920                    AR8216_PORT_CTRL_LEARN |
921                    (egress << AR8216_PORT_CTRL_VLAN_MODE_S) |
922                    (AR8216_PORT_STATE_FORWARD << AR8216_PORT_CTRL_STATE_S));
923
924         ar8xxx_rmw(priv, AR8236_REG_PORT_VLAN(port),
925                    AR8236_PORT_VLAN_DEFAULT_ID,
926                    (pvid << AR8236_PORT_VLAN_DEFAULT_ID_S));
927
928         ar8xxx_rmw(priv, AR8236_REG_PORT_VLAN2(port),
929                    AR8236_PORT_VLAN2_VLAN_MODE |
930                    AR8236_PORT_VLAN2_MEMBER,
931                    (ingress << AR8236_PORT_VLAN2_VLAN_MODE_S) |
932                    (members << AR8236_PORT_VLAN2_MEMBER_S));
933 }
934
935 static void
936 ar8236_init_globals(struct ar8xxx_priv *priv)
937 {
938         /* enable jumbo frames */
939         ar8xxx_rmw(priv, AR8216_REG_GLOBAL_CTRL,
940                    AR8316_GCTRL_MTU, 9018 + 8 + 2);
941
942         /* enable cpu port to receive arp frames */
943         ar8xxx_reg_set(priv, AR8216_REG_ATU_CTRL,
944                    AR8236_ATU_CTRL_RES);
945
946         /* enable cpu port to receive multicast and broadcast frames */
947         ar8xxx_reg_set(priv, AR8216_REG_FLOOD_MASK,
948                    AR8236_FM_CPU_BROADCAST_EN | AR8236_FM_CPU_BCAST_FWD_EN);
949
950         /* Enable MIB counters */
951         ar8xxx_rmw(priv, AR8216_REG_MIB_FUNC, AR8216_MIB_FUNC | AR8236_MIB_EN,
952                    (AR8216_MIB_FUNC_NO_OP << AR8216_MIB_FUNC_S) |
953                    AR8236_MIB_EN);
954 }
955
956 static int
957 ar8316_hw_init(struct ar8xxx_priv *priv)
958 {
959         u32 val, newval;
960
961         val = ar8xxx_read(priv, AR8316_REG_POSTRIP);
962
963         if (priv->phy->interface == PHY_INTERFACE_MODE_RGMII) {
964                 if (priv->port4_phy) {
965                         /* value taken from Ubiquiti RouterStation Pro */
966                         newval = 0x81461bea;
967                         pr_info("ar8316: Using port 4 as PHY\n");
968                 } else {
969                         newval = 0x01261be2;
970                         pr_info("ar8316: Using port 4 as switch port\n");
971                 }
972         } else if (priv->phy->interface == PHY_INTERFACE_MODE_GMII) {
973                 /* value taken from AVM Fritz!Box 7390 sources */
974                 newval = 0x010e5b71;
975         } else {
976                 /* no known value for phy interface */
977                 pr_err("ar8316: unsupported mii mode: %d.\n",
978                        priv->phy->interface);
979                 return -EINVAL;
980         }
981
982         if (val == newval)
983                 goto out;
984
985         ar8xxx_write(priv, AR8316_REG_POSTRIP, newval);
986
987         if (priv->port4_phy &&
988             priv->phy->interface == PHY_INTERFACE_MODE_RGMII) {
989                 /* work around for phy4 rgmii mode */
990                 ar8xxx_phy_dbg_write(priv, 4, 0x12, 0x480c);
991                 /* rx delay */
992                 ar8xxx_phy_dbg_write(priv, 4, 0x0, 0x824e);
993                 /* tx delay */
994                 ar8xxx_phy_dbg_write(priv, 4, 0x5, 0x3d47);
995                 msleep(1000);
996         }
997
998         ar8xxx_phy_init(priv);
999
1000 out:
1001         priv->initialized = true;
1002         return 0;
1003 }
1004
1005 static void
1006 ar8316_init_globals(struct ar8xxx_priv *priv)
1007 {
1008         /* standard atheros magic */
1009         ar8xxx_write(priv, 0x38, 0xc000050e);
1010
1011         /* enable cpu port to receive multicast and broadcast frames */
1012         ar8xxx_write(priv, AR8216_REG_FLOOD_MASK, 0x003f003f);
1013
1014         /* enable jumbo frames */
1015         ar8xxx_rmw(priv, AR8216_REG_GLOBAL_CTRL,
1016                    AR8316_GCTRL_MTU, 9018 + 8 + 2);
1017
1018         /* Enable MIB counters */
1019         ar8xxx_rmw(priv, AR8216_REG_MIB_FUNC, AR8216_MIB_FUNC | AR8236_MIB_EN,
1020                    (AR8216_MIB_FUNC_NO_OP << AR8216_MIB_FUNC_S) |
1021                    AR8236_MIB_EN);
1022 }
1023
1024 int
1025 ar8xxx_sw_set_vlan(struct switch_dev *dev, const struct switch_attr *attr,
1026                    struct switch_val *val)
1027 {
1028         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1029         priv->vlan = !!val->value.i;
1030         return 0;
1031 }
1032
1033 int
1034 ar8xxx_sw_get_vlan(struct switch_dev *dev, const struct switch_attr *attr,
1035                    struct switch_val *val)
1036 {
1037         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1038         val->value.i = priv->vlan;
1039         return 0;
1040 }
1041
1042
1043 int
1044 ar8xxx_sw_set_pvid(struct switch_dev *dev, int port, int vlan)
1045 {
1046         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1047
1048         /* make sure no invalid PVIDs get set */
1049
1050         if (vlan < 0 || vlan >= dev->vlans ||
1051             port < 0 || port >= AR8X16_MAX_PORTS)
1052                 return -EINVAL;
1053
1054         priv->pvid[port] = vlan;
1055         return 0;
1056 }
1057
1058 int
1059 ar8xxx_sw_get_pvid(struct switch_dev *dev, int port, int *vlan)
1060 {
1061         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1062
1063         if (port < 0 || port >= AR8X16_MAX_PORTS)
1064                 return -EINVAL;
1065
1066         *vlan = priv->pvid[port];
1067         return 0;
1068 }
1069
1070 static int
1071 ar8xxx_sw_set_vid(struct switch_dev *dev, const struct switch_attr *attr,
1072                   struct switch_val *val)
1073 {
1074         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1075
1076         if (val->port_vlan >= AR8X16_MAX_VLANS)
1077                 return -EINVAL;
1078
1079         priv->vlan_id[val->port_vlan] = val->value.i;
1080         return 0;
1081 }
1082
1083 static int
1084 ar8xxx_sw_get_vid(struct switch_dev *dev, const struct switch_attr *attr,
1085                   struct switch_val *val)
1086 {
1087         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1088         val->value.i = priv->vlan_id[val->port_vlan];
1089         return 0;
1090 }
1091
1092 int
1093 ar8xxx_sw_get_port_link(struct switch_dev *dev, int port,
1094                         struct switch_port_link *link)
1095 {
1096         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1097
1098         ar8216_read_port_link(priv, port, link);
1099         return 0;
1100 }
1101
1102 static int
1103 ar8xxx_sw_get_ports(struct switch_dev *dev, struct switch_val *val)
1104 {
1105         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1106         u8 ports;
1107         int i;
1108
1109         if (val->port_vlan >= AR8X16_MAX_VLANS)
1110                 return -EINVAL;
1111
1112         ports = priv->vlan_table[val->port_vlan];
1113         val->len = 0;
1114         for (i = 0; i < dev->ports; i++) {
1115                 struct switch_port *p;
1116
1117                 if (!(ports & (1 << i)))
1118                         continue;
1119
1120                 p = &val->value.ports[val->len++];
1121                 p->id = i;
1122                 if (priv->vlan_tagged & (1 << i))
1123                         p->flags = (1 << SWITCH_PORT_FLAG_TAGGED);
1124                 else
1125                         p->flags = 0;
1126         }
1127         return 0;
1128 }
1129
1130 static int
1131 ar8xxx_sw_set_ports(struct switch_dev *dev, struct switch_val *val)
1132 {
1133         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1134         u8 *vt = &priv->vlan_table[val->port_vlan];
1135         int i, j;
1136
1137         *vt = 0;
1138         for (i = 0; i < val->len; i++) {
1139                 struct switch_port *p = &val->value.ports[i];
1140
1141                 if (p->flags & (1 << SWITCH_PORT_FLAG_TAGGED)) {
1142                         priv->vlan_tagged |= (1 << p->id);
1143                 } else {
1144                         priv->vlan_tagged &= ~(1 << p->id);
1145                         priv->pvid[p->id] = val->port_vlan;
1146
1147                         /* make sure that an untagged port does not
1148                          * appear in other vlans */
1149                         for (j = 0; j < AR8X16_MAX_VLANS; j++) {
1150                                 if (j == val->port_vlan)
1151                                         continue;
1152                                 priv->vlan_table[j] &= ~(1 << p->id);
1153                         }
1154                 }
1155
1156                 *vt |= 1 << p->id;
1157         }
1158         return 0;
1159 }
1160
1161 static void
1162 ar8216_set_mirror_regs(struct ar8xxx_priv *priv)
1163 {
1164         int port;
1165
1166         /* reset all mirror registers */
1167         ar8xxx_rmw(priv, AR8216_REG_GLOBAL_CPUPORT,
1168                    AR8216_GLOBAL_CPUPORT_MIRROR_PORT,
1169                    (0xF << AR8216_GLOBAL_CPUPORT_MIRROR_PORT_S));
1170         for (port = 0; port < AR8216_NUM_PORTS; port++) {
1171                 ar8xxx_reg_clear(priv, AR8216_REG_PORT_CTRL(port),
1172                            AR8216_PORT_CTRL_MIRROR_RX);
1173
1174                 ar8xxx_reg_clear(priv, AR8216_REG_PORT_CTRL(port),
1175                            AR8216_PORT_CTRL_MIRROR_TX);
1176         }
1177
1178         /* now enable mirroring if necessary */
1179         if (priv->source_port >= AR8216_NUM_PORTS ||
1180             priv->monitor_port >= AR8216_NUM_PORTS ||
1181             priv->source_port == priv->monitor_port) {
1182                 return;
1183         }
1184
1185         ar8xxx_rmw(priv, AR8216_REG_GLOBAL_CPUPORT,
1186                    AR8216_GLOBAL_CPUPORT_MIRROR_PORT,
1187                    (priv->monitor_port << AR8216_GLOBAL_CPUPORT_MIRROR_PORT_S));
1188
1189         if (priv->mirror_rx)
1190                 ar8xxx_reg_set(priv, AR8216_REG_PORT_CTRL(priv->source_port),
1191                            AR8216_PORT_CTRL_MIRROR_RX);
1192
1193         if (priv->mirror_tx)
1194                 ar8xxx_reg_set(priv, AR8216_REG_PORT_CTRL(priv->source_port),
1195                            AR8216_PORT_CTRL_MIRROR_TX);
1196 }
1197
1198 static inline u32
1199 ar8xxx_age_time_val(int age_time)
1200 {
1201         return (age_time + AR8XXX_REG_ARL_CTRL_AGE_TIME_SECS / 2) /
1202                AR8XXX_REG_ARL_CTRL_AGE_TIME_SECS;
1203 }
1204
1205 static inline void
1206 ar8xxx_set_age_time(struct ar8xxx_priv *priv, int reg)
1207 {
1208         u32 age_time = ar8xxx_age_time_val(priv->arl_age_time);
1209         ar8xxx_rmw(priv, reg, AR8216_ATU_CTRL_AGE_TIME, age_time << AR8216_ATU_CTRL_AGE_TIME_S);
1210 }
1211
1212 int
1213 ar8xxx_sw_hw_apply(struct switch_dev *dev)
1214 {
1215         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1216         const struct ar8xxx_chip *chip = priv->chip;
1217         u8 portmask[AR8X16_MAX_PORTS];
1218         int i, j;
1219
1220         mutex_lock(&priv->reg_mutex);
1221         /* flush all vlan translation unit entries */
1222         priv->chip->vtu_flush(priv);
1223
1224         memset(portmask, 0, sizeof(portmask));
1225         if (!priv->init) {
1226                 /* calculate the port destination masks and load vlans
1227                  * into the vlan translation unit */
1228                 for (j = 0; j < AR8X16_MAX_VLANS; j++) {
1229                         u8 vp = priv->vlan_table[j];
1230
1231                         if (!vp)
1232                                 continue;
1233
1234                         for (i = 0; i < dev->ports; i++) {
1235                                 u8 mask = (1 << i);
1236                                 if (vp & mask)
1237                                         portmask[i] |= vp & ~mask;
1238                         }
1239
1240                         chip->vtu_load_vlan(priv, priv->vlan_id[j],
1241                                             priv->vlan_table[j]);
1242                 }
1243         } else {
1244                 /* vlan disabled:
1245                  * isolate all ports, but connect them to the cpu port */
1246                 for (i = 0; i < dev->ports; i++) {
1247                         if (i == AR8216_PORT_CPU)
1248                                 continue;
1249
1250                         portmask[i] = 1 << AR8216_PORT_CPU;
1251                         portmask[AR8216_PORT_CPU] |= (1 << i);
1252                 }
1253         }
1254
1255         /* update the port destination mask registers and tag settings */
1256         for (i = 0; i < dev->ports; i++) {
1257                 chip->setup_port(priv, i, portmask[i]);
1258         }
1259
1260         chip->set_mirror_regs(priv);
1261
1262         /* set age time */
1263         if (chip->reg_arl_ctrl)
1264                 ar8xxx_set_age_time(priv, chip->reg_arl_ctrl);
1265
1266         mutex_unlock(&priv->reg_mutex);
1267         return 0;
1268 }
1269
1270 int
1271 ar8xxx_sw_reset_switch(struct switch_dev *dev)
1272 {
1273         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1274         const struct ar8xxx_chip *chip = priv->chip;
1275         int i;
1276
1277         mutex_lock(&priv->reg_mutex);
1278         memset(&priv->vlan, 0, sizeof(struct ar8xxx_priv) -
1279                 offsetof(struct ar8xxx_priv, vlan));
1280
1281         for (i = 0; i < AR8X16_MAX_VLANS; i++)
1282                 priv->vlan_id[i] = i;
1283
1284         /* Configure all ports */
1285         for (i = 0; i < dev->ports; i++)
1286                 chip->init_port(priv, i);
1287
1288         priv->mirror_rx = false;
1289         priv->mirror_tx = false;
1290         priv->source_port = 0;
1291         priv->monitor_port = 0;
1292         priv->arl_age_time = AR8XXX_DEFAULT_ARL_AGE_TIME;
1293
1294         chip->init_globals(priv);
1295         chip->atu_flush(priv);
1296
1297         mutex_unlock(&priv->reg_mutex);
1298
1299         return chip->sw_hw_apply(dev);
1300 }
1301
1302 int
1303 ar8xxx_sw_set_reset_mibs(struct switch_dev *dev,
1304                          const struct switch_attr *attr,
1305                          struct switch_val *val)
1306 {
1307         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1308         unsigned int len;
1309         int ret;
1310
1311         if (!ar8xxx_has_mib_counters(priv))
1312                 return -EOPNOTSUPP;
1313
1314         mutex_lock(&priv->mib_lock);
1315
1316         len = priv->dev.ports * priv->chip->num_mibs *
1317               sizeof(*priv->mib_stats);
1318         memset(priv->mib_stats, '\0', len);
1319         ret = ar8xxx_mib_flush(priv);
1320         if (ret)
1321                 goto unlock;
1322
1323         ret = 0;
1324
1325 unlock:
1326         mutex_unlock(&priv->mib_lock);
1327         return ret;
1328 }
1329
1330 int
1331 ar8xxx_sw_set_mirror_rx_enable(struct switch_dev *dev,
1332                                const struct switch_attr *attr,
1333                                struct switch_val *val)
1334 {
1335         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1336
1337         mutex_lock(&priv->reg_mutex);
1338         priv->mirror_rx = !!val->value.i;
1339         priv->chip->set_mirror_regs(priv);
1340         mutex_unlock(&priv->reg_mutex);
1341
1342         return 0;
1343 }
1344
1345 int
1346 ar8xxx_sw_get_mirror_rx_enable(struct switch_dev *dev,
1347                                const struct switch_attr *attr,
1348                                struct switch_val *val)
1349 {
1350         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1351         val->value.i = priv->mirror_rx;
1352         return 0;
1353 }
1354
1355 int
1356 ar8xxx_sw_set_mirror_tx_enable(struct switch_dev *dev,
1357                                const struct switch_attr *attr,
1358                                struct switch_val *val)
1359 {
1360         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1361
1362         mutex_lock(&priv->reg_mutex);
1363         priv->mirror_tx = !!val->value.i;
1364         priv->chip->set_mirror_regs(priv);
1365         mutex_unlock(&priv->reg_mutex);
1366
1367         return 0;
1368 }
1369
1370 int
1371 ar8xxx_sw_get_mirror_tx_enable(struct switch_dev *dev,
1372                                const struct switch_attr *attr,
1373                                struct switch_val *val)
1374 {
1375         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1376         val->value.i = priv->mirror_tx;
1377         return 0;
1378 }
1379
1380 int
1381 ar8xxx_sw_set_mirror_monitor_port(struct switch_dev *dev,
1382                                   const struct switch_attr *attr,
1383                                   struct switch_val *val)
1384 {
1385         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1386
1387         mutex_lock(&priv->reg_mutex);
1388         priv->monitor_port = val->value.i;
1389         priv->chip->set_mirror_regs(priv);
1390         mutex_unlock(&priv->reg_mutex);
1391
1392         return 0;
1393 }
1394
1395 int
1396 ar8xxx_sw_get_mirror_monitor_port(struct switch_dev *dev,
1397                                   const struct switch_attr *attr,
1398                                   struct switch_val *val)
1399 {
1400         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1401         val->value.i = priv->monitor_port;
1402         return 0;
1403 }
1404
1405 int
1406 ar8xxx_sw_set_mirror_source_port(struct switch_dev *dev,
1407                                  const struct switch_attr *attr,
1408                                  struct switch_val *val)
1409 {
1410         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1411
1412         mutex_lock(&priv->reg_mutex);
1413         priv->source_port = val->value.i;
1414         priv->chip->set_mirror_regs(priv);
1415         mutex_unlock(&priv->reg_mutex);
1416
1417         return 0;
1418 }
1419
1420 int
1421 ar8xxx_sw_get_mirror_source_port(struct switch_dev *dev,
1422                                  const struct switch_attr *attr,
1423                                  struct switch_val *val)
1424 {
1425         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1426         val->value.i = priv->source_port;
1427         return 0;
1428 }
1429
1430 int
1431 ar8xxx_sw_set_port_reset_mib(struct switch_dev *dev,
1432                              const struct switch_attr *attr,
1433                              struct switch_val *val)
1434 {
1435         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1436         int port;
1437         int ret;
1438
1439         if (!ar8xxx_has_mib_counters(priv))
1440                 return -EOPNOTSUPP;
1441
1442         port = val->port_vlan;
1443         if (port >= dev->ports)
1444                 return -EINVAL;
1445
1446         mutex_lock(&priv->mib_lock);
1447         ret = ar8xxx_mib_capture(priv);
1448         if (ret)
1449                 goto unlock;
1450
1451         ar8xxx_mib_fetch_port_stat(priv, port, true);
1452
1453         ret = 0;
1454
1455 unlock:
1456         mutex_unlock(&priv->mib_lock);
1457         return ret;
1458 }
1459
1460 static void
1461 ar8xxx_byte_to_str(char *buf, int len, u64 byte)
1462 {
1463         unsigned long b;
1464         const char *unit;
1465
1466         if (byte >= 0x40000000) { /* 1 GiB */
1467                 b = byte * 10 / 0x40000000;
1468                 unit = "GiB";
1469         } else if (byte >= 0x100000) { /* 1 MiB */
1470                 b = byte * 10 / 0x100000;
1471                 unit = "MiB";
1472         } else if (byte >= 0x400) { /* 1 KiB */
1473                 b = byte * 10 / 0x400;
1474                 unit = "KiB";
1475         } else {
1476                 b = byte;
1477                 unit = "Byte";
1478         }
1479         if (strcmp(unit, "Byte"))
1480                 snprintf(buf, len, "%lu.%lu %s", b / 10, b % 10, unit);
1481         else
1482                 snprintf(buf, len, "%lu %s", b, unit);
1483 }
1484
1485 int
1486 ar8xxx_sw_get_port_mib(struct switch_dev *dev,
1487                        const struct switch_attr *attr,
1488                        struct switch_val *val)
1489 {
1490         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1491         const struct ar8xxx_chip *chip = priv->chip;
1492         u64 *mib_stats, mib_data;
1493         unsigned int port;
1494         int ret;
1495         char *buf = priv->buf;
1496         char buf1[64];
1497         const char *mib_name;
1498         int i, len = 0;
1499         bool mib_stats_empty = true;
1500
1501         if (!ar8xxx_has_mib_counters(priv))
1502                 return -EOPNOTSUPP;
1503
1504         port = val->port_vlan;
1505         if (port >= dev->ports)
1506                 return -EINVAL;
1507
1508         mutex_lock(&priv->mib_lock);
1509         ret = ar8xxx_mib_capture(priv);
1510         if (ret)
1511                 goto unlock;
1512
1513         ar8xxx_mib_fetch_port_stat(priv, port, false);
1514
1515         len += snprintf(buf + len, sizeof(priv->buf) - len,
1516                         "MIB counters\n");
1517
1518         mib_stats = &priv->mib_stats[port * chip->num_mibs];
1519         for (i = 0; i < chip->num_mibs; i++) {
1520                 mib_name = chip->mib_decs[i].name;
1521                 mib_data = mib_stats[i];
1522                 len += snprintf(buf + len, sizeof(priv->buf) - len,
1523                                 "%-12s: %llu\n", mib_name, mib_data);
1524                 if ((!strcmp(mib_name, "TxByte") ||
1525                     !strcmp(mib_name, "RxGoodByte")) &&
1526                     mib_data >= 1024) {
1527                         ar8xxx_byte_to_str(buf1, sizeof(buf1), mib_data);
1528                         --len; /* discard newline at the end of buf */
1529                         len += snprintf(buf + len, sizeof(priv->buf) - len,
1530                                         " (%s)\n", buf1);
1531                 }
1532                 if (mib_stats_empty && mib_data)
1533                         mib_stats_empty = false;
1534         }
1535
1536         if (mib_stats_empty)
1537                 len = snprintf(buf, sizeof(priv->buf), "No MIB data");
1538
1539         val->value.s = buf;
1540         val->len = len;
1541
1542         ret = 0;
1543
1544 unlock:
1545         mutex_unlock(&priv->mib_lock);
1546         return ret;
1547 }
1548
1549 int
1550 ar8xxx_sw_set_arl_age_time(struct switch_dev *dev, const struct switch_attr *attr,
1551                            struct switch_val *val)
1552 {
1553         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1554         int age_time = val->value.i;
1555         u32 age_time_val;
1556
1557         if (age_time < 0)
1558                 return -EINVAL;
1559
1560         age_time_val = ar8xxx_age_time_val(age_time);
1561         if (age_time_val == 0 || age_time_val > 0xffff)
1562                 return -EINVAL;
1563
1564         priv->arl_age_time = age_time;
1565         return 0;
1566 }
1567
1568 int
1569 ar8xxx_sw_get_arl_age_time(struct switch_dev *dev, const struct switch_attr *attr,
1570                    struct switch_val *val)
1571 {
1572         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1573         val->value.i = priv->arl_age_time;
1574         return 0;
1575 }
1576
1577 int
1578 ar8xxx_sw_get_arl_table(struct switch_dev *dev,
1579                         const struct switch_attr *attr,
1580                         struct switch_val *val)
1581 {
1582         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1583         struct mii_bus *bus = priv->mii_bus;
1584         const struct ar8xxx_chip *chip = priv->chip;
1585         char *buf = priv->arl_buf;
1586         int i, j, k, len = 0;
1587         struct arl_entry *a, *a1;
1588         u32 status;
1589
1590         if (!chip->get_arl_entry)
1591                 return -EOPNOTSUPP;
1592
1593         mutex_lock(&priv->reg_mutex);
1594         mutex_lock(&bus->mdio_lock);
1595
1596         chip->get_arl_entry(priv, NULL, NULL, AR8XXX_ARL_INITIALIZE);
1597
1598         for(i = 0; i < AR8XXX_NUM_ARL_RECORDS; ++i) {
1599                 a = &priv->arl_table[i];
1600                 duplicate:
1601                 chip->get_arl_entry(priv, a, &status, AR8XXX_ARL_GET_NEXT);
1602
1603                 if (!status)
1604                         break;
1605
1606                 /* avoid duplicates
1607                  * ARL table can include multiple valid entries
1608                  * per MAC, just with differing status codes
1609                  */
1610                 for (j = 0; j < i; ++j) {
1611                         a1 = &priv->arl_table[j];
1612                         if (!memcmp(a->mac, a1->mac, sizeof(a->mac))) {
1613                                 /* ignore ports already seen in former entry */
1614                                 a->portmap &= ~a1->portmap;
1615                                 if (!a->portmap)
1616                                         goto duplicate;
1617                         }
1618                 }
1619         }
1620
1621         mutex_unlock(&bus->mdio_lock);
1622
1623         len += snprintf(buf + len, sizeof(priv->arl_buf) - len,
1624                         "address resolution table\n");
1625
1626         if (i == AR8XXX_NUM_ARL_RECORDS)
1627                 len += snprintf(buf + len, sizeof(priv->arl_buf) - len,
1628                                 "Too many entries found, displaying the first %d only!\n",
1629                                 AR8XXX_NUM_ARL_RECORDS);
1630
1631         for (j = 0; j < priv->dev.ports; ++j) {
1632                 for (k = 0; k < i; ++k) {
1633                         a = &priv->arl_table[k];
1634                         if (!(a->portmap & BIT(j)))
1635                                 continue;
1636                         len += snprintf(buf + len, sizeof(priv->arl_buf) - len,
1637                                         "Port %d: MAC %02x:%02x:%02x:%02x:%02x:%02x\n",
1638                                         j,
1639                                         a->mac[5], a->mac[4], a->mac[3],
1640                                         a->mac[2], a->mac[1], a->mac[0]);
1641                 }
1642         }
1643
1644         val->value.s = buf;
1645         val->len = len;
1646
1647         mutex_unlock(&priv->reg_mutex);
1648
1649         return 0;
1650 }
1651
1652 int
1653 ar8xxx_sw_set_flush_arl_table(struct switch_dev *dev,
1654                               const struct switch_attr *attr,
1655                               struct switch_val *val)
1656 {
1657         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1658         int ret;
1659
1660         mutex_lock(&priv->reg_mutex);
1661         ret = priv->chip->atu_flush(priv);
1662         mutex_unlock(&priv->reg_mutex);
1663
1664         return ret;
1665 }
1666
1667 int
1668 ar8xxx_sw_set_flush_port_arl_table(struct switch_dev *dev,
1669                                    const struct switch_attr *attr,
1670                                    struct switch_val *val)
1671 {
1672         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1673         int port, ret;
1674
1675         port = val->port_vlan;
1676         if (port >= dev->ports)
1677                 return -EINVAL;
1678
1679         mutex_lock(&priv->reg_mutex);
1680         ret = priv->chip->atu_flush_port(priv, port);
1681         mutex_unlock(&priv->reg_mutex);
1682
1683         return ret;
1684 }
1685
1686 static int
1687 ar8xxx_phy_read(struct mii_bus *bus, int phy_addr, int reg_addr)
1688 {
1689         struct ar8xxx_priv *priv = bus->priv;
1690         return priv->chip->phy_read(priv, phy_addr, reg_addr);
1691 }
1692
1693 static int
1694 ar8xxx_phy_write(struct mii_bus *bus, int phy_addr, int reg_addr,
1695                  u16 reg_val)
1696 {
1697         struct ar8xxx_priv *priv = bus->priv;
1698         return priv->chip->phy_write(priv, phy_addr, reg_addr, reg_val);
1699 }
1700
1701 static const struct switch_attr ar8xxx_sw_attr_globals[] = {
1702         {
1703                 .type = SWITCH_TYPE_INT,
1704                 .name = "enable_vlan",
1705                 .description = "Enable VLAN mode",
1706                 .set = ar8xxx_sw_set_vlan,
1707                 .get = ar8xxx_sw_get_vlan,
1708                 .max = 1
1709         },
1710         {
1711                 .type = SWITCH_TYPE_NOVAL,
1712                 .name = "reset_mibs",
1713                 .description = "Reset all MIB counters",
1714                 .set = ar8xxx_sw_set_reset_mibs,
1715         },
1716         {
1717                 .type = SWITCH_TYPE_INT,
1718                 .name = "enable_mirror_rx",
1719                 .description = "Enable mirroring of RX packets",
1720                 .set = ar8xxx_sw_set_mirror_rx_enable,
1721                 .get = ar8xxx_sw_get_mirror_rx_enable,
1722                 .max = 1
1723         },
1724         {
1725                 .type = SWITCH_TYPE_INT,
1726                 .name = "enable_mirror_tx",
1727                 .description = "Enable mirroring of TX packets",
1728                 .set = ar8xxx_sw_set_mirror_tx_enable,
1729                 .get = ar8xxx_sw_get_mirror_tx_enable,
1730                 .max = 1
1731         },
1732         {
1733                 .type = SWITCH_TYPE_INT,
1734                 .name = "mirror_monitor_port",
1735                 .description = "Mirror monitor port",
1736                 .set = ar8xxx_sw_set_mirror_monitor_port,
1737                 .get = ar8xxx_sw_get_mirror_monitor_port,
1738                 .max = AR8216_NUM_PORTS - 1
1739         },
1740         {
1741                 .type = SWITCH_TYPE_INT,
1742                 .name = "mirror_source_port",
1743                 .description = "Mirror source port",
1744                 .set = ar8xxx_sw_set_mirror_source_port,
1745                 .get = ar8xxx_sw_get_mirror_source_port,
1746                 .max = AR8216_NUM_PORTS - 1
1747         },
1748         {
1749                 .type = SWITCH_TYPE_STRING,
1750                 .name = "arl_table",
1751                 .description = "Get ARL table",
1752                 .set = NULL,
1753                 .get = ar8xxx_sw_get_arl_table,
1754         },
1755         {
1756                 .type = SWITCH_TYPE_NOVAL,
1757                 .name = "flush_arl_table",
1758                 .description = "Flush ARL table",
1759                 .set = ar8xxx_sw_set_flush_arl_table,
1760         },
1761 };
1762
1763 const struct switch_attr ar8xxx_sw_attr_port[] = {
1764         {
1765                 .type = SWITCH_TYPE_NOVAL,
1766                 .name = "reset_mib",
1767                 .description = "Reset single port MIB counters",
1768                 .set = ar8xxx_sw_set_port_reset_mib,
1769         },
1770         {
1771                 .type = SWITCH_TYPE_STRING,
1772                 .name = "mib",
1773                 .description = "Get port's MIB counters",
1774                 .set = NULL,
1775                 .get = ar8xxx_sw_get_port_mib,
1776         },
1777         {
1778                 .type = SWITCH_TYPE_NOVAL,
1779                 .name = "flush_arl_table",
1780                 .description = "Flush port's ARL table entries",
1781                 .set = ar8xxx_sw_set_flush_port_arl_table,
1782         },
1783 };
1784
1785 const struct switch_attr ar8xxx_sw_attr_vlan[1] = {
1786         {
1787                 .type = SWITCH_TYPE_INT,
1788                 .name = "vid",
1789                 .description = "VLAN ID (0-4094)",
1790                 .set = ar8xxx_sw_set_vid,
1791                 .get = ar8xxx_sw_get_vid,
1792                 .max = 4094,
1793         },
1794 };
1795
1796 static const struct switch_dev_ops ar8xxx_sw_ops = {
1797         .attr_global = {
1798                 .attr = ar8xxx_sw_attr_globals,
1799                 .n_attr = ARRAY_SIZE(ar8xxx_sw_attr_globals),
1800         },
1801         .attr_port = {
1802                 .attr = ar8xxx_sw_attr_port,
1803                 .n_attr = ARRAY_SIZE(ar8xxx_sw_attr_port),
1804         },
1805         .attr_vlan = {
1806                 .attr = ar8xxx_sw_attr_vlan,
1807                 .n_attr = ARRAY_SIZE(ar8xxx_sw_attr_vlan),
1808         },
1809         .get_port_pvid = ar8xxx_sw_get_pvid,
1810         .set_port_pvid = ar8xxx_sw_set_pvid,
1811         .get_vlan_ports = ar8xxx_sw_get_ports,
1812         .set_vlan_ports = ar8xxx_sw_set_ports,
1813         .apply_config = ar8xxx_sw_hw_apply,
1814         .reset_switch = ar8xxx_sw_reset_switch,
1815         .get_port_link = ar8xxx_sw_get_port_link,
1816 /* The following op is disabled as it hogs the CPU and degrades performance.
1817    An implementation has been attempted in 4d8a66d but reading MIB data is slow
1818    on ar8xxx switches.
1819
1820    The high CPU load has been traced down to the ar8xxx_reg_wait() call in
1821    ar8xxx_mib_op(), which has to usleep_range() till the MIB busy flag set by
1822    the request to update the MIB counter is cleared. */
1823 #if 0
1824         .get_port_stats = ar8xxx_sw_get_port_stats,
1825 #endif
1826 };
1827
1828 static const struct ar8xxx_chip ar8216_chip = {
1829         .caps = AR8XXX_CAP_MIB_COUNTERS,
1830
1831         .reg_port_stats_start = 0x19000,
1832         .reg_port_stats_length = 0xa0,
1833         .reg_arl_ctrl = AR8216_REG_ATU_CTRL,
1834
1835         .name = "Atheros AR8216",
1836         .ports = AR8216_NUM_PORTS,
1837         .vlans = AR8216_NUM_VLANS,
1838         .swops = &ar8xxx_sw_ops,
1839
1840         .hw_init = ar8216_hw_init,
1841         .init_globals = ar8216_init_globals,
1842         .init_port = ar8216_init_port,
1843         .setup_port = ar8216_setup_port,
1844         .read_port_status = ar8216_read_port_status,
1845         .atu_flush = ar8216_atu_flush,
1846         .atu_flush_port = ar8216_atu_flush_port,
1847         .vtu_flush = ar8216_vtu_flush,
1848         .vtu_load_vlan = ar8216_vtu_load_vlan,
1849         .set_mirror_regs = ar8216_set_mirror_regs,
1850         .get_arl_entry = ar8216_get_arl_entry,
1851         .sw_hw_apply = ar8xxx_sw_hw_apply,
1852
1853         .num_mibs = ARRAY_SIZE(ar8216_mibs),
1854         .mib_decs = ar8216_mibs,
1855         .mib_func = AR8216_REG_MIB_FUNC
1856 };
1857
1858 static const struct ar8xxx_chip ar8229_chip = {
1859         .caps = AR8XXX_CAP_MIB_COUNTERS,
1860
1861         .reg_port_stats_start = 0x20000,
1862         .reg_port_stats_length = 0x100,
1863         .reg_arl_ctrl = AR8216_REG_ATU_CTRL,
1864
1865         .name = "Atheros AR8229",
1866         .ports = AR8216_NUM_PORTS,
1867         .vlans = AR8216_NUM_VLANS,
1868         .swops = &ar8xxx_sw_ops,
1869
1870         .hw_init = ar8229_hw_init,
1871         .init_globals = ar8229_init_globals,
1872         .init_port = ar8229_init_port,
1873         .setup_port = ar8236_setup_port,
1874         .read_port_status = ar8216_read_port_status,
1875         .atu_flush = ar8216_atu_flush,
1876         .atu_flush_port = ar8216_atu_flush_port,
1877         .vtu_flush = ar8216_vtu_flush,
1878         .vtu_load_vlan = ar8216_vtu_load_vlan,
1879         .set_mirror_regs = ar8216_set_mirror_regs,
1880         .get_arl_entry = ar8216_get_arl_entry,
1881         .sw_hw_apply = ar8xxx_sw_hw_apply,
1882
1883         .num_mibs = ARRAY_SIZE(ar8236_mibs),
1884         .mib_decs = ar8236_mibs,
1885         .mib_func = AR8216_REG_MIB_FUNC
1886 };
1887
1888 static const struct ar8xxx_chip ar8236_chip = {
1889         .caps = AR8XXX_CAP_MIB_COUNTERS,
1890
1891         .reg_port_stats_start = 0x20000,
1892         .reg_port_stats_length = 0x100,
1893         .reg_arl_ctrl = AR8216_REG_ATU_CTRL,
1894
1895         .name = "Atheros AR8236",
1896         .ports = AR8216_NUM_PORTS,
1897         .vlans = AR8216_NUM_VLANS,
1898         .swops = &ar8xxx_sw_ops,
1899
1900         .hw_init = ar8216_hw_init,
1901         .init_globals = ar8236_init_globals,
1902         .init_port = ar8216_init_port,
1903         .setup_port = ar8236_setup_port,
1904         .read_port_status = ar8216_read_port_status,
1905         .atu_flush = ar8216_atu_flush,
1906         .atu_flush_port = ar8216_atu_flush_port,
1907         .vtu_flush = ar8216_vtu_flush,
1908         .vtu_load_vlan = ar8216_vtu_load_vlan,
1909         .set_mirror_regs = ar8216_set_mirror_regs,
1910         .get_arl_entry = ar8216_get_arl_entry,
1911         .sw_hw_apply = ar8xxx_sw_hw_apply,
1912
1913         .num_mibs = ARRAY_SIZE(ar8236_mibs),
1914         .mib_decs = ar8236_mibs,
1915         .mib_func = AR8216_REG_MIB_FUNC
1916 };
1917
1918 static const struct ar8xxx_chip ar8316_chip = {
1919         .caps = AR8XXX_CAP_GIGE | AR8XXX_CAP_MIB_COUNTERS,
1920
1921         .reg_port_stats_start = 0x20000,
1922         .reg_port_stats_length = 0x100,
1923         .reg_arl_ctrl = AR8216_REG_ATU_CTRL,
1924
1925         .name = "Atheros AR8316",
1926         .ports = AR8216_NUM_PORTS,
1927         .vlans = AR8X16_MAX_VLANS,
1928         .swops = &ar8xxx_sw_ops,
1929
1930         .hw_init = ar8316_hw_init,
1931         .init_globals = ar8316_init_globals,
1932         .init_port = ar8216_init_port,
1933         .setup_port = ar8216_setup_port,
1934         .read_port_status = ar8216_read_port_status,
1935         .atu_flush = ar8216_atu_flush,
1936         .atu_flush_port = ar8216_atu_flush_port,
1937         .vtu_flush = ar8216_vtu_flush,
1938         .vtu_load_vlan = ar8216_vtu_load_vlan,
1939         .set_mirror_regs = ar8216_set_mirror_regs,
1940         .get_arl_entry = ar8216_get_arl_entry,
1941         .sw_hw_apply = ar8xxx_sw_hw_apply,
1942
1943         .num_mibs = ARRAY_SIZE(ar8236_mibs),
1944         .mib_decs = ar8236_mibs,
1945         .mib_func = AR8216_REG_MIB_FUNC
1946 };
1947
1948 static int
1949 ar8xxx_read_id(struct ar8xxx_priv *priv)
1950 {
1951         u32 val;
1952         u16 id;
1953         int i;
1954
1955         val = ar8xxx_read(priv, AR8216_REG_CTRL);
1956         if (val == ~0)
1957                 return -ENODEV;
1958
1959         id = val & (AR8216_CTRL_REVISION | AR8216_CTRL_VERSION);
1960         for (i = 0; i < AR8X16_PROBE_RETRIES; i++) {
1961                 u16 t;
1962
1963                 val = ar8xxx_read(priv, AR8216_REG_CTRL);
1964                 if (val == ~0)
1965                         return -ENODEV;
1966
1967                 t = val & (AR8216_CTRL_REVISION | AR8216_CTRL_VERSION);
1968                 if (t != id)
1969                         return -ENODEV;
1970         }
1971
1972         priv->chip_ver = (id & AR8216_CTRL_VERSION) >> AR8216_CTRL_VERSION_S;
1973         priv->chip_rev = (id & AR8216_CTRL_REVISION);
1974         return 0;
1975 }
1976
1977 static int
1978 ar8xxx_id_chip(struct ar8xxx_priv *priv)
1979 {
1980         int ret;
1981
1982         ret = ar8xxx_read_id(priv);
1983         if(ret)
1984                 return ret;
1985
1986         switch (priv->chip_ver) {
1987         case AR8XXX_VER_AR8216:
1988                 priv->chip = &ar8216_chip;
1989                 break;
1990         case AR8XXX_VER_AR8236:
1991                 priv->chip = &ar8236_chip;
1992                 break;
1993         case AR8XXX_VER_AR8316:
1994                 priv->chip = &ar8316_chip;
1995                 break;
1996         case AR8XXX_VER_AR8327:
1997                 priv->chip = &ar8327_chip;
1998                 break;
1999         case AR8XXX_VER_AR8337:
2000                 priv->chip = &ar8337_chip;
2001                 break;
2002         default:
2003                 pr_err("ar8216: Unknown Atheros device [ver=%d, rev=%d]\n",
2004                        priv->chip_ver, priv->chip_rev);
2005
2006                 return -ENODEV;
2007         }
2008
2009         return 0;
2010 }
2011
2012 static void
2013 ar8xxx_mib_work_func(struct work_struct *work)
2014 {
2015         struct ar8xxx_priv *priv;
2016         int err;
2017
2018         priv = container_of(work, struct ar8xxx_priv, mib_work.work);
2019
2020         mutex_lock(&priv->mib_lock);
2021
2022         err = ar8xxx_mib_capture(priv);
2023         if (err)
2024                 goto next_port;
2025
2026         ar8xxx_mib_fetch_port_stat(priv, priv->mib_next_port, false);
2027
2028 next_port:
2029         priv->mib_next_port++;
2030         if (priv->mib_next_port >= priv->dev.ports)
2031                 priv->mib_next_port = 0;
2032
2033         mutex_unlock(&priv->mib_lock);
2034         schedule_delayed_work(&priv->mib_work,
2035                               msecs_to_jiffies(AR8XXX_MIB_WORK_DELAY));
2036 }
2037
2038 static int
2039 ar8xxx_mib_init(struct ar8xxx_priv *priv)
2040 {
2041         unsigned int len;
2042
2043         if (!ar8xxx_has_mib_counters(priv))
2044                 return 0;
2045
2046         BUG_ON(!priv->chip->mib_decs || !priv->chip->num_mibs);
2047
2048         len = priv->dev.ports * priv->chip->num_mibs *
2049               sizeof(*priv->mib_stats);
2050         priv->mib_stats = kzalloc(len, GFP_KERNEL);
2051
2052         if (!priv->mib_stats)
2053                 return -ENOMEM;
2054
2055         return 0;
2056 }
2057
2058 static void
2059 ar8xxx_mib_start(struct ar8xxx_priv *priv)
2060 {
2061         if (!ar8xxx_has_mib_counters(priv))
2062                 return;
2063
2064         schedule_delayed_work(&priv->mib_work,
2065                               msecs_to_jiffies(AR8XXX_MIB_WORK_DELAY));
2066 }
2067
2068 static void
2069 ar8xxx_mib_stop(struct ar8xxx_priv *priv)
2070 {
2071         if (!ar8xxx_has_mib_counters(priv))
2072                 return;
2073
2074         cancel_delayed_work_sync(&priv->mib_work);
2075 }
2076
2077 static struct ar8xxx_priv *
2078 ar8xxx_create(void)
2079 {
2080         struct ar8xxx_priv *priv;
2081
2082         priv = kzalloc(sizeof(struct ar8xxx_priv), GFP_KERNEL);
2083         if (priv == NULL)
2084                 return NULL;
2085
2086         mutex_init(&priv->reg_mutex);
2087         mutex_init(&priv->mib_lock);
2088         INIT_DELAYED_WORK(&priv->mib_work, ar8xxx_mib_work_func);
2089
2090         return priv;
2091 }
2092
2093 static void
2094 ar8xxx_free(struct ar8xxx_priv *priv)
2095 {
2096         if (priv->chip && priv->chip->cleanup)
2097                 priv->chip->cleanup(priv);
2098
2099         kfree(priv->chip_data);
2100         kfree(priv->mib_stats);
2101         kfree(priv);
2102 }
2103
2104 static int
2105 ar8xxx_probe_switch(struct ar8xxx_priv *priv)
2106 {
2107         const struct ar8xxx_chip *chip;
2108         struct switch_dev *swdev;
2109         int ret;
2110
2111         chip = priv->chip;
2112
2113         swdev = &priv->dev;
2114         swdev->cpu_port = AR8216_PORT_CPU;
2115         swdev->name = chip->name;
2116         swdev->vlans = chip->vlans;
2117         swdev->ports = chip->ports;
2118         swdev->ops = chip->swops;
2119
2120         ret = ar8xxx_mib_init(priv);
2121         if (ret)
2122                 return ret;
2123
2124         return 0;
2125 }
2126
2127 static int
2128 ar8xxx_start(struct ar8xxx_priv *priv)
2129 {
2130         int ret;
2131
2132         priv->init = true;
2133
2134         ret = priv->chip->hw_init(priv);
2135         if (ret)
2136                 return ret;
2137
2138         ret = ar8xxx_sw_reset_switch(&priv->dev);
2139         if (ret)
2140                 return ret;
2141
2142         priv->init = false;
2143
2144         ar8xxx_mib_start(priv);
2145
2146         return 0;
2147 }
2148
2149 static int
2150 ar8xxx_phy_config_init(struct phy_device *phydev)
2151 {
2152         struct ar8xxx_priv *priv = phydev->priv;
2153         struct net_device *dev = phydev->attached_dev;
2154         int ret;
2155
2156         if (WARN_ON(!priv))
2157                 return -ENODEV;
2158
2159         if (priv->chip->config_at_probe)
2160                 return ar8xxx_phy_check_aneg(phydev);
2161
2162         priv->phy = phydev;
2163
2164         if (phydev->mdio.addr != 0) {
2165                 if (chip_is_ar8316(priv)) {
2166                         /* switch device has been initialized, reinit */
2167                         priv->dev.ports = (AR8216_NUM_PORTS - 1);
2168                         priv->initialized = false;
2169                         priv->port4_phy = true;
2170                         ar8316_hw_init(priv);
2171                         return 0;
2172                 }
2173
2174                 return 0;
2175         }
2176
2177         ret = ar8xxx_start(priv);
2178         if (ret)
2179                 return ret;
2180
2181         /* VID fixup only needed on ar8216 */
2182         if (chip_is_ar8216(priv)) {
2183                 dev->phy_ptr = priv;
2184                 dev->priv_flags |= IFF_NO_IP_ALIGN;
2185                 dev->eth_mangle_rx = ar8216_mangle_rx;
2186                 dev->eth_mangle_tx = ar8216_mangle_tx;
2187         }
2188
2189         return 0;
2190 }
2191
2192 static bool
2193 ar8xxx_check_link_states(struct ar8xxx_priv *priv)
2194 {
2195         bool link_new, changed = false;
2196         u32 status;
2197         int i;
2198
2199         mutex_lock(&priv->reg_mutex);
2200
2201         for (i = 0; i < priv->dev.ports; i++) {
2202                 status = priv->chip->read_port_status(priv, i);
2203                 link_new = !!(status & AR8216_PORT_STATUS_LINK_UP);
2204                 if (link_new == priv->link_up[i])
2205                         continue;
2206
2207                 priv->link_up[i] = link_new;
2208                 changed = true;
2209                 /* flush ARL entries for this port if it went down*/
2210                 if (!link_new)
2211                         priv->chip->atu_flush_port(priv, i);
2212                 dev_info(&priv->phy->mdio.dev, "Port %d is %s\n",
2213                          i, link_new ? "up" : "down");
2214         }
2215
2216         mutex_unlock(&priv->reg_mutex);
2217
2218         return changed;
2219 }
2220
2221 static int
2222 ar8xxx_phy_read_status(struct phy_device *phydev)
2223 {
2224         struct ar8xxx_priv *priv = phydev->priv;
2225         struct switch_port_link link;
2226
2227         /* check for switch port link changes */
2228         if (phydev->state == PHY_CHANGELINK)
2229                 ar8xxx_check_link_states(priv);
2230
2231         if (phydev->mdio.addr != 0)
2232                 return genphy_read_status(phydev);
2233
2234         ar8216_read_port_link(priv, phydev->mdio.addr, &link);
2235         phydev->link = !!link.link;
2236         if (!phydev->link)
2237                 return 0;
2238
2239         switch (link.speed) {
2240         case SWITCH_PORT_SPEED_10:
2241                 phydev->speed = SPEED_10;
2242                 break;
2243         case SWITCH_PORT_SPEED_100:
2244                 phydev->speed = SPEED_100;
2245                 break;
2246         case SWITCH_PORT_SPEED_1000:
2247                 phydev->speed = SPEED_1000;
2248                 break;
2249         default:
2250                 phydev->speed = 0;
2251         }
2252         phydev->duplex = link.duplex ? DUPLEX_FULL : DUPLEX_HALF;
2253
2254         phydev->state = PHY_RUNNING;
2255         netif_carrier_on(phydev->attached_dev);
2256         if (phydev->adjust_link)
2257                 phydev->adjust_link(phydev->attached_dev);
2258
2259         return 0;
2260 }
2261
2262 static int
2263 ar8xxx_phy_config_aneg(struct phy_device *phydev)
2264 {
2265         if (phydev->mdio.addr == 0)
2266                 return 0;
2267
2268         return genphy_config_aneg(phydev);
2269 }
2270
2271 static const u32 ar8xxx_phy_ids[] = {
2272         0x004dd033,
2273         0x004dd034, /* AR8327 */
2274         0x004dd036, /* AR8337 */
2275         0x004dd041,
2276         0x004dd042,
2277         0x004dd043, /* AR8236 */
2278 };
2279
2280 static bool
2281 ar8xxx_phy_match(u32 phy_id)
2282 {
2283         int i;
2284
2285         for (i = 0; i < ARRAY_SIZE(ar8xxx_phy_ids); i++)
2286                 if (phy_id == ar8xxx_phy_ids[i])
2287                         return true;
2288
2289         return false;
2290 }
2291
2292 static bool
2293 ar8xxx_is_possible(struct mii_bus *bus)
2294 {
2295         unsigned int i, found_phys = 0;
2296
2297         for (i = 0; i < 5; i++) {
2298                 u32 phy_id;
2299
2300                 phy_id = mdiobus_read(bus, i, MII_PHYSID1) << 16;
2301                 phy_id |= mdiobus_read(bus, i, MII_PHYSID2);
2302                 if (ar8xxx_phy_match(phy_id)) {
2303                         found_phys++;
2304                 } else if (phy_id) {
2305                         pr_debug("ar8xxx: unknown PHY at %s:%02x id:%08x\n",
2306                                  dev_name(&bus->dev), i, phy_id);
2307                 }
2308         }
2309         return !!found_phys;
2310 }
2311
2312 static int
2313 ar8xxx_phy_probe(struct phy_device *phydev)
2314 {
2315         struct ar8xxx_priv *priv;
2316         struct switch_dev *swdev;
2317         int ret;
2318
2319         /* skip PHYs at unused adresses */
2320         if (phydev->mdio.addr != 0 && phydev->mdio.addr != 3 && phydev->mdio.addr != 4)
2321                 return -ENODEV;
2322
2323         if (!ar8xxx_is_possible(phydev->mdio.bus))
2324                 return -ENODEV;
2325
2326         mutex_lock(&ar8xxx_dev_list_lock);
2327         list_for_each_entry(priv, &ar8xxx_dev_list, list)
2328                 if (priv->mii_bus == phydev->mdio.bus)
2329                         goto found;
2330
2331         priv = ar8xxx_create();
2332         if (priv == NULL) {
2333                 ret = -ENOMEM;
2334                 goto unlock;
2335         }
2336
2337         priv->mii_bus = phydev->mdio.bus;
2338         priv->pdev = &phydev->mdio.dev;
2339
2340         ret = ar8xxx_id_chip(priv);
2341         if (ret)
2342                 goto free_priv;
2343
2344         ret = ar8xxx_probe_switch(priv);
2345         if (ret)
2346                 goto free_priv;
2347
2348         swdev = &priv->dev;
2349         swdev->alias = dev_name(&priv->mii_bus->dev);
2350         ret = register_switch(swdev, NULL);
2351         if (ret)
2352                 goto free_priv;
2353
2354         pr_info("%s: %s rev. %u switch registered on %s\n",
2355                 swdev->devname, swdev->name, priv->chip_rev,
2356                 dev_name(&priv->mii_bus->dev));
2357
2358         list_add(&priv->list, &ar8xxx_dev_list);
2359
2360 found:
2361         priv->use_count++;
2362
2363         if (phydev->mdio.addr == 0) {
2364                 if (ar8xxx_has_gige(priv)) {
2365                         phydev->supported = SUPPORTED_1000baseT_Full;
2366                         phydev->advertising = ADVERTISED_1000baseT_Full;
2367                 } else {
2368                         phydev->supported = SUPPORTED_100baseT_Full;
2369                         phydev->advertising = ADVERTISED_100baseT_Full;
2370                 }
2371
2372                 if (priv->chip->config_at_probe) {
2373                         priv->phy = phydev;
2374
2375                         ret = ar8xxx_start(priv);
2376                         if (ret)
2377                                 goto err_unregister_switch;
2378                 }
2379         } else {
2380                 if (ar8xxx_has_gige(priv)) {
2381                         phydev->supported |= SUPPORTED_1000baseT_Full;
2382                         phydev->advertising |= ADVERTISED_1000baseT_Full;
2383                 }
2384                 if (priv->chip->phy_rgmii_set)
2385                         priv->chip->phy_rgmii_set(priv, phydev);
2386         }
2387
2388         phydev->priv = priv;
2389
2390         mutex_unlock(&ar8xxx_dev_list_lock);
2391
2392         return 0;
2393
2394 err_unregister_switch:
2395         if (--priv->use_count)
2396                 goto unlock;
2397
2398         unregister_switch(&priv->dev);
2399
2400 free_priv:
2401         ar8xxx_free(priv);
2402 unlock:
2403         mutex_unlock(&ar8xxx_dev_list_lock);
2404         return ret;
2405 }
2406
2407 static void
2408 ar8xxx_phy_detach(struct phy_device *phydev)
2409 {
2410         struct net_device *dev = phydev->attached_dev;
2411
2412         if (!dev)
2413                 return;
2414
2415         dev->phy_ptr = NULL;
2416         dev->priv_flags &= ~IFF_NO_IP_ALIGN;
2417         dev->eth_mangle_rx = NULL;
2418         dev->eth_mangle_tx = NULL;
2419 }
2420
2421 static void
2422 ar8xxx_phy_remove(struct phy_device *phydev)
2423 {
2424         struct ar8xxx_priv *priv = phydev->priv;
2425
2426         if (WARN_ON(!priv))
2427                 return;
2428
2429         phydev->priv = NULL;
2430
2431         mutex_lock(&ar8xxx_dev_list_lock);
2432
2433         if (--priv->use_count > 0) {
2434                 mutex_unlock(&ar8xxx_dev_list_lock);
2435                 return;
2436         }
2437
2438         list_del(&priv->list);
2439         mutex_unlock(&ar8xxx_dev_list_lock);
2440
2441         unregister_switch(&priv->dev);
2442         ar8xxx_mib_stop(priv);
2443         ar8xxx_free(priv);
2444 }
2445
2446 static int
2447 ar8xxx_phy_soft_reset(struct phy_device *phydev)
2448 {
2449         /* we don't need an extra reset */
2450         return 0;
2451 }
2452
2453 static struct phy_driver ar8xxx_phy_driver[] = {
2454         {
2455                 .phy_id         = 0x004d0000,
2456                 .name           = "Atheros AR8216/AR8236/AR8316",
2457                 .phy_id_mask    = 0xffff0000,
2458                 .features       = PHY_BASIC_FEATURES,
2459                 .probe          = ar8xxx_phy_probe,
2460                 .remove         = ar8xxx_phy_remove,
2461                 .detach         = ar8xxx_phy_detach,
2462                 .config_init    = ar8xxx_phy_config_init,
2463                 .config_aneg    = ar8xxx_phy_config_aneg,
2464                 .read_status    = ar8xxx_phy_read_status,
2465                 .soft_reset     = ar8xxx_phy_soft_reset,
2466         }
2467 };
2468
2469 static const struct of_device_id ar8xxx_mdiodev_of_match[] = {
2470         {
2471                 .compatible = "qca,ar8229",
2472                 .data = &ar8229_chip,
2473         }, {
2474                 .compatible = "qca,ar8236",
2475                 .data = &ar8236_chip,
2476         }, {
2477                 .compatible = "qca,ar8327",
2478                 .data = &ar8327_chip,
2479         },
2480         { /* sentinel */ },
2481 };
2482
2483 static int
2484 ar8xxx_mdiodev_probe(struct mdio_device *mdiodev)
2485 {
2486         const struct of_device_id *match;
2487         struct ar8xxx_priv *priv;
2488         struct switch_dev *swdev;
2489         struct device_node *mdio_node;
2490         int ret;
2491
2492         match = of_match_device(ar8xxx_mdiodev_of_match, &mdiodev->dev);
2493         if (!match)
2494                 return -EINVAL;
2495
2496         priv = ar8xxx_create();
2497         if (priv == NULL)
2498                 return -ENOMEM;
2499
2500         priv->mii_bus = mdiodev->bus;
2501         priv->pdev = &mdiodev->dev;
2502         priv->chip = (const struct ar8xxx_chip *) match->data;
2503
2504         ret = ar8xxx_read_id(priv);
2505         if (ret)
2506                 goto free_priv;
2507
2508         ret = ar8xxx_probe_switch(priv);
2509         if (ret)
2510                 goto free_priv;
2511
2512         if (priv->chip->phy_read && priv->chip->phy_write) {
2513                 priv->sw_mii_bus = devm_mdiobus_alloc(&mdiodev->dev);
2514                 priv->sw_mii_bus->name = "ar8xxx-mdio";
2515                 priv->sw_mii_bus->read = ar8xxx_phy_read;
2516                 priv->sw_mii_bus->write = ar8xxx_phy_write;
2517                 priv->sw_mii_bus->priv = priv;
2518                 priv->sw_mii_bus->parent = &mdiodev->dev;
2519                 snprintf(priv->sw_mii_bus->id, MII_BUS_ID_SIZE, "%s",
2520                          dev_name(&mdiodev->dev));
2521                 mdio_node = of_get_child_by_name(priv->pdev->of_node, "mdio-bus");
2522                 ret = of_mdiobus_register(priv->sw_mii_bus, mdio_node);
2523                 if (ret)
2524                         goto free_priv;
2525         }
2526
2527         swdev = &priv->dev;
2528         swdev->alias = dev_name(&mdiodev->dev);
2529         ret = register_switch(swdev, NULL);
2530         if (ret)
2531                 goto free_priv;
2532
2533         pr_info("%s: %s rev. %u switch registered on %s\n",
2534                 swdev->devname, swdev->name, priv->chip_rev,
2535                 dev_name(&priv->mii_bus->dev));
2536
2537         mutex_lock(&ar8xxx_dev_list_lock);
2538         list_add(&priv->list, &ar8xxx_dev_list);
2539         mutex_unlock(&ar8xxx_dev_list_lock);
2540
2541         priv->use_count++;
2542
2543         ret = ar8xxx_start(priv);
2544         if (ret)
2545                 goto err_unregister_switch;
2546
2547         dev_set_drvdata(&mdiodev->dev, priv);
2548
2549         return 0;
2550
2551 err_unregister_switch:
2552         if (--priv->use_count)
2553                 return ret;
2554
2555         unregister_switch(&priv->dev);
2556
2557 free_priv:
2558         ar8xxx_free(priv);
2559         return ret;
2560 }
2561
2562 static void
2563 ar8xxx_mdiodev_remove(struct mdio_device *mdiodev)
2564 {
2565         struct ar8xxx_priv *priv = dev_get_drvdata(&mdiodev->dev);
2566
2567         if (WARN_ON(!priv))
2568                 return;
2569
2570         mutex_lock(&ar8xxx_dev_list_lock);
2571
2572         if (--priv->use_count > 0) {
2573                 mutex_unlock(&ar8xxx_dev_list_lock);
2574                 return;
2575         }
2576
2577         list_del(&priv->list);
2578         mutex_unlock(&ar8xxx_dev_list_lock);
2579
2580         unregister_switch(&priv->dev);
2581         ar8xxx_mib_stop(priv);
2582         if(priv->sw_mii_bus)
2583                 mdiobus_unregister(priv->sw_mii_bus);
2584         ar8xxx_free(priv);
2585 }
2586
2587 static struct mdio_driver ar8xxx_mdio_driver = {
2588         .probe  = ar8xxx_mdiodev_probe,
2589         .remove = ar8xxx_mdiodev_remove,
2590         .mdiodrv.driver = {
2591                 .name = "ar8xxx-switch",
2592                 .of_match_table = ar8xxx_mdiodev_of_match,
2593         },
2594 };
2595
2596 static int __init ar8216_init(void)
2597 {
2598         int ret;
2599
2600         ret = phy_drivers_register(ar8xxx_phy_driver,
2601                                    ARRAY_SIZE(ar8xxx_phy_driver),
2602                                    THIS_MODULE);
2603         if (ret)
2604                 return ret;
2605
2606         ret = mdio_driver_register(&ar8xxx_mdio_driver);
2607         if (ret)
2608                 phy_drivers_unregister(ar8xxx_phy_driver,
2609                                        ARRAY_SIZE(ar8xxx_phy_driver));
2610
2611         return ret;
2612 }
2613 module_init(ar8216_init);
2614
2615 static void __exit ar8216_exit(void)
2616 {
2617         mdio_driver_unregister(&ar8xxx_mdio_driver);
2618         phy_drivers_unregister(ar8xxx_phy_driver,
2619                                 ARRAY_SIZE(ar8xxx_phy_driver));
2620 }
2621 module_exit(ar8216_exit);
2622
2623 MODULE_LICENSE("GPL");