generic: ar8216: add support for ar724x/ar933x builtin switch
[openwrt/staging/nbd.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 bool ath_hdr_en)
658 {
659 u32 header;
660 u32 egress, ingress;
661 u32 pvid;
662
663 if (priv->vlan) {
664 pvid = priv->vlan_id[priv->pvid[port]];
665 if (priv->vlan_tagged & (1 << port))
666 egress = AR8216_OUT_ADD_VLAN;
667 else
668 egress = AR8216_OUT_STRIP_VLAN;
669 ingress = AR8216_IN_SECURE;
670 } else {
671 pvid = port;
672 egress = AR8216_OUT_KEEP;
673 ingress = AR8216_IN_PORT_ONLY;
674 }
675
676 header = ath_hdr_en ? AR8216_PORT_CTRL_HEADER : 0;
677
678 ar8xxx_rmw(priv, AR8216_REG_PORT_CTRL(port),
679 AR8216_PORT_CTRL_LEARN | AR8216_PORT_CTRL_VLAN_MODE |
680 AR8216_PORT_CTRL_SINGLE_VLAN | AR8216_PORT_CTRL_STATE |
681 AR8216_PORT_CTRL_HEADER | AR8216_PORT_CTRL_LEARN_LOCK,
682 AR8216_PORT_CTRL_LEARN | header |
683 (egress << AR8216_PORT_CTRL_VLAN_MODE_S) |
684 (AR8216_PORT_STATE_FORWARD << AR8216_PORT_CTRL_STATE_S));
685
686 ar8xxx_rmw(priv, AR8216_REG_PORT_VLAN(port),
687 AR8216_PORT_VLAN_DEST_PORTS | AR8216_PORT_VLAN_MODE |
688 AR8216_PORT_VLAN_DEFAULT_ID,
689 (members << AR8216_PORT_VLAN_DEST_PORTS_S) |
690 (ingress << AR8216_PORT_VLAN_MODE_S) |
691 (pvid << AR8216_PORT_VLAN_DEFAULT_ID_S));
692 }
693
694 static void
695 ar8216_setup_port(struct ar8xxx_priv *priv, int port, u32 members)
696 {
697 return __ar8216_setup_port(priv, port, members,
698 chip_is_ar8216(priv) && priv->vlan &&
699 port == AR8216_PORT_CPU);
700 }
701
702 static int
703 ar8216_hw_init(struct ar8xxx_priv *priv)
704 {
705 if (priv->initialized)
706 return 0;
707
708 ar8xxx_phy_init(priv);
709
710 priv->initialized = true;
711 return 0;
712 }
713
714 static void
715 ar8216_init_globals(struct ar8xxx_priv *priv)
716 {
717 /* standard atheros magic */
718 ar8xxx_write(priv, 0x38, 0xc000050e);
719
720 ar8xxx_rmw(priv, AR8216_REG_GLOBAL_CTRL,
721 AR8216_GCTRL_MTU, 1518 + 8 + 2);
722 }
723
724 static void
725 __ar8216_init_port(struct ar8xxx_priv *priv, int port,
726 bool cpu_ge, bool flow_en)
727 {
728 /* Enable port learning and tx */
729 ar8xxx_write(priv, AR8216_REG_PORT_CTRL(port),
730 AR8216_PORT_CTRL_LEARN |
731 (4 << AR8216_PORT_CTRL_STATE_S));
732
733 ar8xxx_write(priv, AR8216_REG_PORT_VLAN(port), 0);
734
735 if (port == AR8216_PORT_CPU) {
736 ar8xxx_write(priv, AR8216_REG_PORT_STATUS(port),
737 AR8216_PORT_STATUS_LINK_UP |
738 (cpu_ge ? AR8216_PORT_SPEED_1000M : AR8216_PORT_SPEED_100M) |
739 AR8216_PORT_STATUS_TXMAC |
740 AR8216_PORT_STATUS_RXMAC |
741 (flow_en ? AR8216_PORT_STATUS_RXFLOW : 0) |
742 (flow_en ? AR8216_PORT_STATUS_TXFLOW : 0) |
743 AR8216_PORT_STATUS_DUPLEX);
744 } else {
745 ar8xxx_write(priv, AR8216_REG_PORT_STATUS(port),
746 AR8216_PORT_STATUS_LINK_AUTO);
747 }
748 }
749
750 static void
751 ar8216_init_port(struct ar8xxx_priv *priv, int port)
752 {
753 __ar8216_init_port(priv, port, ar8xxx_has_gige(priv),
754 chip_is_ar8316(priv));
755 }
756
757 static void
758 ar8216_wait_atu_ready(struct ar8xxx_priv *priv, u16 r2, u16 r1)
759 {
760 int timeout = 20;
761
762 while (ar8xxx_mii_read32(priv, r2, r1) & AR8216_ATU_ACTIVE && --timeout) {
763 udelay(10);
764 cond_resched();
765 }
766
767 if (!timeout)
768 pr_err("ar8216: timeout waiting for atu to become ready\n");
769 }
770
771 static void ar8216_get_arl_entry(struct ar8xxx_priv *priv,
772 struct arl_entry *a, u32 *status, enum arl_op op)
773 {
774 struct mii_bus *bus = priv->mii_bus;
775 u16 r2, page;
776 u16 r1_func0, r1_func1, r1_func2;
777 u32 t, val0, val1, val2;
778
779 split_addr(AR8216_REG_ATU_FUNC0, &r1_func0, &r2, &page);
780 r2 |= 0x10;
781
782 r1_func1 = (AR8216_REG_ATU_FUNC1 >> 1) & 0x1e;
783 r1_func2 = (AR8216_REG_ATU_FUNC2 >> 1) & 0x1e;
784
785 switch (op) {
786 case AR8XXX_ARL_INITIALIZE:
787 /* all ATU registers are on the same page
788 * therefore set page only once
789 */
790 bus->write(bus, 0x18, 0, page);
791 wait_for_page_switch();
792
793 ar8216_wait_atu_ready(priv, r2, r1_func0);
794
795 ar8xxx_mii_write32(priv, r2, r1_func0, AR8216_ATU_OP_GET_NEXT);
796 ar8xxx_mii_write32(priv, r2, r1_func1, 0);
797 ar8xxx_mii_write32(priv, r2, r1_func2, 0);
798 break;
799 case AR8XXX_ARL_GET_NEXT:
800 t = ar8xxx_mii_read32(priv, r2, r1_func0);
801 t |= AR8216_ATU_ACTIVE;
802 ar8xxx_mii_write32(priv, r2, r1_func0, t);
803 ar8216_wait_atu_ready(priv, r2, r1_func0);
804
805 val0 = ar8xxx_mii_read32(priv, r2, r1_func0);
806 val1 = ar8xxx_mii_read32(priv, r2, r1_func1);
807 val2 = ar8xxx_mii_read32(priv, r2, r1_func2);
808
809 *status = (val2 & AR8216_ATU_STATUS) >> AR8216_ATU_STATUS_S;
810 if (!*status)
811 break;
812
813 a->portmap = (val2 & AR8216_ATU_PORTS) >> AR8216_ATU_PORTS_S;
814 a->mac[0] = (val0 & AR8216_ATU_ADDR5) >> AR8216_ATU_ADDR5_S;
815 a->mac[1] = (val0 & AR8216_ATU_ADDR4) >> AR8216_ATU_ADDR4_S;
816 a->mac[2] = (val1 & AR8216_ATU_ADDR3) >> AR8216_ATU_ADDR3_S;
817 a->mac[3] = (val1 & AR8216_ATU_ADDR2) >> AR8216_ATU_ADDR2_S;
818 a->mac[4] = (val1 & AR8216_ATU_ADDR1) >> AR8216_ATU_ADDR1_S;
819 a->mac[5] = (val1 & AR8216_ATU_ADDR0) >> AR8216_ATU_ADDR0_S;
820 break;
821 }
822 }
823
824 static int
825 ar8216_phy_read(struct ar8xxx_priv *priv, int addr, int regnum)
826 {
827 u32 t, val = 0xffff;
828 int err;
829
830 if (addr >= AR8216_NUM_PORTS)
831 return 0xffff;
832 t = (regnum << AR8216_MDIO_CTRL_REG_ADDR_S) |
833 (addr << AR8216_MDIO_CTRL_PHY_ADDR_S) |
834 AR8216_MDIO_CTRL_MASTER_EN |
835 AR8216_MDIO_CTRL_BUSY |
836 AR8216_MDIO_CTRL_CMD_READ;
837
838 ar8xxx_write(priv, AR8216_REG_MDIO_CTRL, t);
839 err = ar8xxx_reg_wait(priv, AR8216_REG_MDIO_CTRL,
840 AR8216_MDIO_CTRL_BUSY, 0, 5);
841 if (!err)
842 val = ar8xxx_read(priv, AR8216_REG_MDIO_CTRL);
843
844 return val & AR8216_MDIO_CTRL_DATA_M;
845 }
846
847 static int
848 ar8216_phy_write(struct ar8xxx_priv *priv, int addr, int regnum, u16 val)
849 {
850 u32 t;
851 int ret;
852
853 if (addr >= AR8216_NUM_PORTS)
854 return -EINVAL;
855
856 t = (addr << AR8216_MDIO_CTRL_PHY_ADDR_S) |
857 (regnum << AR8216_MDIO_CTRL_REG_ADDR_S) |
858 AR8216_MDIO_CTRL_MASTER_EN |
859 AR8216_MDIO_CTRL_BUSY |
860 AR8216_MDIO_CTRL_CMD_WRITE |
861 val;
862
863 ar8xxx_write(priv, AR8216_REG_MDIO_CTRL, t);
864 ret = ar8xxx_reg_wait(priv, AR8216_REG_MDIO_CTRL,
865 AR8216_MDIO_CTRL_BUSY, 0, 5);
866
867 return ret;
868 }
869
870 static int
871 ar8229_hw_init(struct ar8xxx_priv *priv)
872 {
873 int phy_if_mode;
874
875 if (priv->initialized)
876 return 0;
877
878 ar8xxx_write(priv, AR8216_REG_CTRL, AR8216_CTRL_RESET);
879 ar8xxx_reg_wait(priv, AR8216_REG_CTRL, AR8216_CTRL_RESET, 0, 1000);
880
881 phy_if_mode = of_get_phy_mode(priv->pdev->of_node);
882
883 if (phy_if_mode == PHY_INTERFACE_MODE_GMII) {
884 ar8xxx_write(priv, AR8229_REG_OPER_MODE0,
885 AR8229_OPER_MODE0_MAC_GMII_EN);
886 } else if (phy_if_mode == PHY_INTERFACE_MODE_MII) {
887 ar8xxx_write(priv, AR8229_REG_OPER_MODE0,
888 AR8229_OPER_MODE0_PHY_MII_EN);
889 } else {
890 pr_err("ar8229: unsupported mii mode\n");
891 return -EINVAL;
892 }
893
894 if (priv->port4_phy) {
895 ar8xxx_write(priv, AR8229_REG_OPER_MODE1,
896 AR8229_REG_OPER_MODE1_PHY4_MII_EN);
897 /* disable port5 to prevent mii conflict */
898 ar8xxx_write(priv, AR8216_REG_PORT_STATUS(5), 0);
899 }
900
901 ar8xxx_phy_init(priv);
902
903 priv->initialized = true;
904 return 0;
905 }
906
907 static void
908 ar8229_init_globals(struct ar8xxx_priv *priv)
909 {
910
911 /* Enable CPU port, and disable mirror port */
912 ar8xxx_write(priv, AR8216_REG_GLOBAL_CPUPORT,
913 AR8216_GLOBAL_CPUPORT_EN |
914 (15 << AR8216_GLOBAL_CPUPORT_MIRROR_PORT_S));
915
916 /* Setup TAG priority mapping */
917 ar8xxx_write(priv, AR8216_REG_TAG_PRIORITY, 0xfa50);
918
919 /* Enable aging, MAC replacing */
920 ar8xxx_write(priv, AR8216_REG_ATU_CTRL,
921 0x2b /* 5 min age time */ |
922 AR8216_ATU_CTRL_AGE_EN |
923 AR8216_ATU_CTRL_LEARN_CHANGE);
924
925 /* Enable ARP frame acknowledge */
926 ar8xxx_reg_set(priv, AR8229_REG_QM_CTRL,
927 AR8229_QM_CTRL_ARP_EN);
928
929 /* Enable Broadcast/Multicast frames transmitted to the CPU */
930 ar8xxx_reg_set(priv, AR8216_REG_FLOOD_MASK,
931 AR8229_FLOOD_MASK_BC_DP(0) |
932 AR8229_FLOOD_MASK_MC_DP(0));
933
934 /* setup MTU */
935 ar8xxx_rmw(priv, AR8216_REG_GLOBAL_CTRL,
936 AR8236_GCTRL_MTU, AR8236_GCTRL_MTU);
937
938 /* Enable MIB counters */
939 ar8xxx_reg_set(priv, AR8216_REG_MIB_FUNC,
940 AR8236_MIB_EN);
941
942 /* setup Service TAG */
943 ar8xxx_rmw(priv, AR8216_REG_SERVICE_TAG, AR8216_SERVICE_TAG_M, 0);
944 }
945
946 static void
947 ar8229_init_port(struct ar8xxx_priv *priv, int port)
948 {
949 __ar8216_init_port(priv, port, true, true);
950 }
951
952
953 static int
954 ar7240sw_hw_init(struct ar8xxx_priv *priv)
955 {
956 if (priv->initialized)
957 return 0;
958
959 ar8xxx_write(priv, AR8216_REG_CTRL, AR8216_CTRL_RESET);
960 ar8xxx_reg_wait(priv, AR8216_REG_CTRL, AR8216_CTRL_RESET, 0, 1000);
961
962 priv->port4_phy = 1;
963 /* disable port5 to prevent mii conflict */
964 ar8xxx_write(priv, AR8216_REG_PORT_STATUS(5), 0);
965
966 ar8xxx_phy_init(priv);
967
968 priv->initialized = true;
969 return 0;
970 }
971
972 static void
973 ar7240sw_init_globals(struct ar8xxx_priv *priv)
974 {
975
976 /* Enable CPU port, and disable mirror port */
977 ar8xxx_write(priv, AR8216_REG_GLOBAL_CPUPORT,
978 AR8216_GLOBAL_CPUPORT_EN |
979 (15 << AR8216_GLOBAL_CPUPORT_MIRROR_PORT_S));
980
981 /* Setup TAG priority mapping */
982 ar8xxx_write(priv, AR8216_REG_TAG_PRIORITY, 0xfa50);
983
984 /* Enable ARP frame acknowledge, aging, MAC replacing */
985 ar8xxx_write(priv, AR8216_REG_ATU_CTRL,
986 AR8216_ATU_CTRL_RESERVED |
987 0x2b /* 5 min age time */ |
988 AR8216_ATU_CTRL_AGE_EN |
989 AR8216_ATU_CTRL_ARP_EN |
990 AR8216_ATU_CTRL_LEARN_CHANGE);
991
992 /* Enable Broadcast frames transmitted to the CPU */
993 ar8xxx_reg_set(priv, AR8216_REG_FLOOD_MASK,
994 AR8236_FM_CPU_BROADCAST_EN);
995
996 /* setup MTU */
997 ar8xxx_rmw(priv, AR8216_REG_GLOBAL_CTRL,
998 AR8216_GCTRL_MTU,
999 AR8216_GCTRL_MTU);
1000
1001 /* setup Service TAG */
1002 ar8xxx_rmw(priv, AR8216_REG_SERVICE_TAG, AR8216_SERVICE_TAG_M, 0);
1003 }
1004
1005 static void
1006 ar7240sw_setup_port(struct ar8xxx_priv *priv, int port, u32 members)
1007 {
1008 return __ar8216_setup_port(priv, port, members, false);
1009 }
1010
1011 static void
1012 ar8236_setup_port(struct ar8xxx_priv *priv, int port, u32 members)
1013 {
1014 u32 egress, ingress;
1015 u32 pvid;
1016
1017 if (priv->vlan) {
1018 pvid = priv->vlan_id[priv->pvid[port]];
1019 if (priv->vlan_tagged & (1 << port))
1020 egress = AR8216_OUT_ADD_VLAN;
1021 else
1022 egress = AR8216_OUT_STRIP_VLAN;
1023 ingress = AR8216_IN_SECURE;
1024 } else {
1025 pvid = port;
1026 egress = AR8216_OUT_KEEP;
1027 ingress = AR8216_IN_PORT_ONLY;
1028 }
1029
1030 ar8xxx_rmw(priv, AR8216_REG_PORT_CTRL(port),
1031 AR8216_PORT_CTRL_LEARN | AR8216_PORT_CTRL_VLAN_MODE |
1032 AR8216_PORT_CTRL_SINGLE_VLAN | AR8216_PORT_CTRL_STATE |
1033 AR8216_PORT_CTRL_HEADER | AR8216_PORT_CTRL_LEARN_LOCK,
1034 AR8216_PORT_CTRL_LEARN |
1035 (egress << AR8216_PORT_CTRL_VLAN_MODE_S) |
1036 (AR8216_PORT_STATE_FORWARD << AR8216_PORT_CTRL_STATE_S));
1037
1038 ar8xxx_rmw(priv, AR8236_REG_PORT_VLAN(port),
1039 AR8236_PORT_VLAN_DEFAULT_ID,
1040 (pvid << AR8236_PORT_VLAN_DEFAULT_ID_S));
1041
1042 ar8xxx_rmw(priv, AR8236_REG_PORT_VLAN2(port),
1043 AR8236_PORT_VLAN2_VLAN_MODE |
1044 AR8236_PORT_VLAN2_MEMBER,
1045 (ingress << AR8236_PORT_VLAN2_VLAN_MODE_S) |
1046 (members << AR8236_PORT_VLAN2_MEMBER_S));
1047 }
1048
1049 static void
1050 ar8236_init_globals(struct ar8xxx_priv *priv)
1051 {
1052 /* enable jumbo frames */
1053 ar8xxx_rmw(priv, AR8216_REG_GLOBAL_CTRL,
1054 AR8316_GCTRL_MTU, 9018 + 8 + 2);
1055
1056 /* enable cpu port to receive arp frames */
1057 ar8xxx_reg_set(priv, AR8216_REG_ATU_CTRL,
1058 AR8236_ATU_CTRL_RES);
1059
1060 /* enable cpu port to receive multicast and broadcast frames */
1061 ar8xxx_reg_set(priv, AR8216_REG_FLOOD_MASK,
1062 AR8236_FM_CPU_BROADCAST_EN | AR8236_FM_CPU_BCAST_FWD_EN);
1063
1064 /* Enable MIB counters */
1065 ar8xxx_rmw(priv, AR8216_REG_MIB_FUNC, AR8216_MIB_FUNC | AR8236_MIB_EN,
1066 (AR8216_MIB_FUNC_NO_OP << AR8216_MIB_FUNC_S) |
1067 AR8236_MIB_EN);
1068 }
1069
1070 static int
1071 ar8316_hw_init(struct ar8xxx_priv *priv)
1072 {
1073 u32 val, newval;
1074
1075 val = ar8xxx_read(priv, AR8316_REG_POSTRIP);
1076
1077 if (priv->phy->interface == PHY_INTERFACE_MODE_RGMII) {
1078 if (priv->port4_phy) {
1079 /* value taken from Ubiquiti RouterStation Pro */
1080 newval = 0x81461bea;
1081 pr_info("ar8316: Using port 4 as PHY\n");
1082 } else {
1083 newval = 0x01261be2;
1084 pr_info("ar8316: Using port 4 as switch port\n");
1085 }
1086 } else if (priv->phy->interface == PHY_INTERFACE_MODE_GMII) {
1087 /* value taken from AVM Fritz!Box 7390 sources */
1088 newval = 0x010e5b71;
1089 } else {
1090 /* no known value for phy interface */
1091 pr_err("ar8316: unsupported mii mode: %d.\n",
1092 priv->phy->interface);
1093 return -EINVAL;
1094 }
1095
1096 if (val == newval)
1097 goto out;
1098
1099 ar8xxx_write(priv, AR8316_REG_POSTRIP, newval);
1100
1101 if (priv->port4_phy &&
1102 priv->phy->interface == PHY_INTERFACE_MODE_RGMII) {
1103 /* work around for phy4 rgmii mode */
1104 ar8xxx_phy_dbg_write(priv, 4, 0x12, 0x480c);
1105 /* rx delay */
1106 ar8xxx_phy_dbg_write(priv, 4, 0x0, 0x824e);
1107 /* tx delay */
1108 ar8xxx_phy_dbg_write(priv, 4, 0x5, 0x3d47);
1109 msleep(1000);
1110 }
1111
1112 ar8xxx_phy_init(priv);
1113
1114 out:
1115 priv->initialized = true;
1116 return 0;
1117 }
1118
1119 static void
1120 ar8316_init_globals(struct ar8xxx_priv *priv)
1121 {
1122 /* standard atheros magic */
1123 ar8xxx_write(priv, 0x38, 0xc000050e);
1124
1125 /* enable cpu port to receive multicast and broadcast frames */
1126 ar8xxx_write(priv, AR8216_REG_FLOOD_MASK, 0x003f003f);
1127
1128 /* enable jumbo frames */
1129 ar8xxx_rmw(priv, AR8216_REG_GLOBAL_CTRL,
1130 AR8316_GCTRL_MTU, 9018 + 8 + 2);
1131
1132 /* Enable MIB counters */
1133 ar8xxx_rmw(priv, AR8216_REG_MIB_FUNC, AR8216_MIB_FUNC | AR8236_MIB_EN,
1134 (AR8216_MIB_FUNC_NO_OP << AR8216_MIB_FUNC_S) |
1135 AR8236_MIB_EN);
1136 }
1137
1138 int
1139 ar8xxx_sw_set_vlan(struct switch_dev *dev, const struct switch_attr *attr,
1140 struct switch_val *val)
1141 {
1142 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1143 priv->vlan = !!val->value.i;
1144 return 0;
1145 }
1146
1147 int
1148 ar8xxx_sw_get_vlan(struct switch_dev *dev, const struct switch_attr *attr,
1149 struct switch_val *val)
1150 {
1151 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1152 val->value.i = priv->vlan;
1153 return 0;
1154 }
1155
1156
1157 int
1158 ar8xxx_sw_set_pvid(struct switch_dev *dev, int port, int vlan)
1159 {
1160 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1161
1162 /* make sure no invalid PVIDs get set */
1163
1164 if (vlan < 0 || vlan >= dev->vlans ||
1165 port < 0 || port >= AR8X16_MAX_PORTS)
1166 return -EINVAL;
1167
1168 priv->pvid[port] = vlan;
1169 return 0;
1170 }
1171
1172 int
1173 ar8xxx_sw_get_pvid(struct switch_dev *dev, int port, int *vlan)
1174 {
1175 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1176
1177 if (port < 0 || port >= AR8X16_MAX_PORTS)
1178 return -EINVAL;
1179
1180 *vlan = priv->pvid[port];
1181 return 0;
1182 }
1183
1184 static int
1185 ar8xxx_sw_set_vid(struct switch_dev *dev, const struct switch_attr *attr,
1186 struct switch_val *val)
1187 {
1188 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1189
1190 if (val->port_vlan >= AR8X16_MAX_VLANS)
1191 return -EINVAL;
1192
1193 priv->vlan_id[val->port_vlan] = val->value.i;
1194 return 0;
1195 }
1196
1197 static int
1198 ar8xxx_sw_get_vid(struct switch_dev *dev, const struct switch_attr *attr,
1199 struct switch_val *val)
1200 {
1201 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1202 val->value.i = priv->vlan_id[val->port_vlan];
1203 return 0;
1204 }
1205
1206 int
1207 ar8xxx_sw_get_port_link(struct switch_dev *dev, int port,
1208 struct switch_port_link *link)
1209 {
1210 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1211
1212 ar8216_read_port_link(priv, port, link);
1213 return 0;
1214 }
1215
1216 static int
1217 ar8xxx_sw_get_ports(struct switch_dev *dev, struct switch_val *val)
1218 {
1219 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1220 u8 ports;
1221 int i;
1222
1223 if (val->port_vlan >= AR8X16_MAX_VLANS)
1224 return -EINVAL;
1225
1226 ports = priv->vlan_table[val->port_vlan];
1227 val->len = 0;
1228 for (i = 0; i < dev->ports; i++) {
1229 struct switch_port *p;
1230
1231 if (!(ports & (1 << i)))
1232 continue;
1233
1234 p = &val->value.ports[val->len++];
1235 p->id = i;
1236 if (priv->vlan_tagged & (1 << i))
1237 p->flags = (1 << SWITCH_PORT_FLAG_TAGGED);
1238 else
1239 p->flags = 0;
1240 }
1241 return 0;
1242 }
1243
1244 static int
1245 ar8xxx_sw_set_ports(struct switch_dev *dev, struct switch_val *val)
1246 {
1247 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1248 u8 *vt = &priv->vlan_table[val->port_vlan];
1249 int i, j;
1250
1251 *vt = 0;
1252 for (i = 0; i < val->len; i++) {
1253 struct switch_port *p = &val->value.ports[i];
1254
1255 if (p->flags & (1 << SWITCH_PORT_FLAG_TAGGED)) {
1256 priv->vlan_tagged |= (1 << p->id);
1257 } else {
1258 priv->vlan_tagged &= ~(1 << p->id);
1259 priv->pvid[p->id] = val->port_vlan;
1260
1261 /* make sure that an untagged port does not
1262 * appear in other vlans */
1263 for (j = 0; j < AR8X16_MAX_VLANS; j++) {
1264 if (j == val->port_vlan)
1265 continue;
1266 priv->vlan_table[j] &= ~(1 << p->id);
1267 }
1268 }
1269
1270 *vt |= 1 << p->id;
1271 }
1272 return 0;
1273 }
1274
1275 static void
1276 ar8216_set_mirror_regs(struct ar8xxx_priv *priv)
1277 {
1278 int port;
1279
1280 /* reset all mirror registers */
1281 ar8xxx_rmw(priv, AR8216_REG_GLOBAL_CPUPORT,
1282 AR8216_GLOBAL_CPUPORT_MIRROR_PORT,
1283 (0xF << AR8216_GLOBAL_CPUPORT_MIRROR_PORT_S));
1284 for (port = 0; port < AR8216_NUM_PORTS; port++) {
1285 ar8xxx_reg_clear(priv, AR8216_REG_PORT_CTRL(port),
1286 AR8216_PORT_CTRL_MIRROR_RX);
1287
1288 ar8xxx_reg_clear(priv, AR8216_REG_PORT_CTRL(port),
1289 AR8216_PORT_CTRL_MIRROR_TX);
1290 }
1291
1292 /* now enable mirroring if necessary */
1293 if (priv->source_port >= AR8216_NUM_PORTS ||
1294 priv->monitor_port >= AR8216_NUM_PORTS ||
1295 priv->source_port == priv->monitor_port) {
1296 return;
1297 }
1298
1299 ar8xxx_rmw(priv, AR8216_REG_GLOBAL_CPUPORT,
1300 AR8216_GLOBAL_CPUPORT_MIRROR_PORT,
1301 (priv->monitor_port << AR8216_GLOBAL_CPUPORT_MIRROR_PORT_S));
1302
1303 if (priv->mirror_rx)
1304 ar8xxx_reg_set(priv, AR8216_REG_PORT_CTRL(priv->source_port),
1305 AR8216_PORT_CTRL_MIRROR_RX);
1306
1307 if (priv->mirror_tx)
1308 ar8xxx_reg_set(priv, AR8216_REG_PORT_CTRL(priv->source_port),
1309 AR8216_PORT_CTRL_MIRROR_TX);
1310 }
1311
1312 static inline u32
1313 ar8xxx_age_time_val(int age_time)
1314 {
1315 return (age_time + AR8XXX_REG_ARL_CTRL_AGE_TIME_SECS / 2) /
1316 AR8XXX_REG_ARL_CTRL_AGE_TIME_SECS;
1317 }
1318
1319 static inline void
1320 ar8xxx_set_age_time(struct ar8xxx_priv *priv, int reg)
1321 {
1322 u32 age_time = ar8xxx_age_time_val(priv->arl_age_time);
1323 ar8xxx_rmw(priv, reg, AR8216_ATU_CTRL_AGE_TIME, age_time << AR8216_ATU_CTRL_AGE_TIME_S);
1324 }
1325
1326 int
1327 ar8xxx_sw_hw_apply(struct switch_dev *dev)
1328 {
1329 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1330 const struct ar8xxx_chip *chip = priv->chip;
1331 u8 portmask[AR8X16_MAX_PORTS];
1332 int i, j;
1333
1334 mutex_lock(&priv->reg_mutex);
1335 /* flush all vlan translation unit entries */
1336 priv->chip->vtu_flush(priv);
1337
1338 memset(portmask, 0, sizeof(portmask));
1339 if (!priv->init) {
1340 /* calculate the port destination masks and load vlans
1341 * into the vlan translation unit */
1342 for (j = 0; j < AR8X16_MAX_VLANS; j++) {
1343 u8 vp = priv->vlan_table[j];
1344
1345 if (!vp)
1346 continue;
1347
1348 for (i = 0; i < dev->ports; i++) {
1349 u8 mask = (1 << i);
1350 if (vp & mask)
1351 portmask[i] |= vp & ~mask;
1352 }
1353
1354 chip->vtu_load_vlan(priv, priv->vlan_id[j],
1355 priv->vlan_table[j]);
1356 }
1357 } else {
1358 /* vlan disabled:
1359 * isolate all ports, but connect them to the cpu port */
1360 for (i = 0; i < dev->ports; i++) {
1361 if (i == AR8216_PORT_CPU)
1362 continue;
1363
1364 portmask[i] = 1 << AR8216_PORT_CPU;
1365 portmask[AR8216_PORT_CPU] |= (1 << i);
1366 }
1367 }
1368
1369 /* update the port destination mask registers and tag settings */
1370 for (i = 0; i < dev->ports; i++) {
1371 chip->setup_port(priv, i, portmask[i]);
1372 }
1373
1374 chip->set_mirror_regs(priv);
1375
1376 /* set age time */
1377 if (chip->reg_arl_ctrl)
1378 ar8xxx_set_age_time(priv, chip->reg_arl_ctrl);
1379
1380 mutex_unlock(&priv->reg_mutex);
1381 return 0;
1382 }
1383
1384 int
1385 ar8xxx_sw_reset_switch(struct switch_dev *dev)
1386 {
1387 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1388 const struct ar8xxx_chip *chip = priv->chip;
1389 int i;
1390
1391 mutex_lock(&priv->reg_mutex);
1392 memset(&priv->vlan, 0, sizeof(struct ar8xxx_priv) -
1393 offsetof(struct ar8xxx_priv, vlan));
1394
1395 for (i = 0; i < AR8X16_MAX_VLANS; i++)
1396 priv->vlan_id[i] = i;
1397
1398 /* Configure all ports */
1399 for (i = 0; i < dev->ports; i++)
1400 chip->init_port(priv, i);
1401
1402 priv->mirror_rx = false;
1403 priv->mirror_tx = false;
1404 priv->source_port = 0;
1405 priv->monitor_port = 0;
1406 priv->arl_age_time = AR8XXX_DEFAULT_ARL_AGE_TIME;
1407
1408 chip->init_globals(priv);
1409 chip->atu_flush(priv);
1410
1411 mutex_unlock(&priv->reg_mutex);
1412
1413 return chip->sw_hw_apply(dev);
1414 }
1415
1416 int
1417 ar8xxx_sw_set_reset_mibs(struct switch_dev *dev,
1418 const struct switch_attr *attr,
1419 struct switch_val *val)
1420 {
1421 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1422 unsigned int len;
1423 int ret;
1424
1425 if (!ar8xxx_has_mib_counters(priv))
1426 return -EOPNOTSUPP;
1427
1428 mutex_lock(&priv->mib_lock);
1429
1430 len = priv->dev.ports * priv->chip->num_mibs *
1431 sizeof(*priv->mib_stats);
1432 memset(priv->mib_stats, '\0', len);
1433 ret = ar8xxx_mib_flush(priv);
1434 if (ret)
1435 goto unlock;
1436
1437 ret = 0;
1438
1439 unlock:
1440 mutex_unlock(&priv->mib_lock);
1441 return ret;
1442 }
1443
1444 int
1445 ar8xxx_sw_set_mirror_rx_enable(struct switch_dev *dev,
1446 const struct switch_attr *attr,
1447 struct switch_val *val)
1448 {
1449 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1450
1451 mutex_lock(&priv->reg_mutex);
1452 priv->mirror_rx = !!val->value.i;
1453 priv->chip->set_mirror_regs(priv);
1454 mutex_unlock(&priv->reg_mutex);
1455
1456 return 0;
1457 }
1458
1459 int
1460 ar8xxx_sw_get_mirror_rx_enable(struct switch_dev *dev,
1461 const struct switch_attr *attr,
1462 struct switch_val *val)
1463 {
1464 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1465 val->value.i = priv->mirror_rx;
1466 return 0;
1467 }
1468
1469 int
1470 ar8xxx_sw_set_mirror_tx_enable(struct switch_dev *dev,
1471 const struct switch_attr *attr,
1472 struct switch_val *val)
1473 {
1474 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1475
1476 mutex_lock(&priv->reg_mutex);
1477 priv->mirror_tx = !!val->value.i;
1478 priv->chip->set_mirror_regs(priv);
1479 mutex_unlock(&priv->reg_mutex);
1480
1481 return 0;
1482 }
1483
1484 int
1485 ar8xxx_sw_get_mirror_tx_enable(struct switch_dev *dev,
1486 const struct switch_attr *attr,
1487 struct switch_val *val)
1488 {
1489 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1490 val->value.i = priv->mirror_tx;
1491 return 0;
1492 }
1493
1494 int
1495 ar8xxx_sw_set_mirror_monitor_port(struct switch_dev *dev,
1496 const struct switch_attr *attr,
1497 struct switch_val *val)
1498 {
1499 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1500
1501 mutex_lock(&priv->reg_mutex);
1502 priv->monitor_port = val->value.i;
1503 priv->chip->set_mirror_regs(priv);
1504 mutex_unlock(&priv->reg_mutex);
1505
1506 return 0;
1507 }
1508
1509 int
1510 ar8xxx_sw_get_mirror_monitor_port(struct switch_dev *dev,
1511 const struct switch_attr *attr,
1512 struct switch_val *val)
1513 {
1514 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1515 val->value.i = priv->monitor_port;
1516 return 0;
1517 }
1518
1519 int
1520 ar8xxx_sw_set_mirror_source_port(struct switch_dev *dev,
1521 const struct switch_attr *attr,
1522 struct switch_val *val)
1523 {
1524 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1525
1526 mutex_lock(&priv->reg_mutex);
1527 priv->source_port = val->value.i;
1528 priv->chip->set_mirror_regs(priv);
1529 mutex_unlock(&priv->reg_mutex);
1530
1531 return 0;
1532 }
1533
1534 int
1535 ar8xxx_sw_get_mirror_source_port(struct switch_dev *dev,
1536 const struct switch_attr *attr,
1537 struct switch_val *val)
1538 {
1539 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1540 val->value.i = priv->source_port;
1541 return 0;
1542 }
1543
1544 int
1545 ar8xxx_sw_set_port_reset_mib(struct switch_dev *dev,
1546 const struct switch_attr *attr,
1547 struct switch_val *val)
1548 {
1549 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1550 int port;
1551 int ret;
1552
1553 if (!ar8xxx_has_mib_counters(priv))
1554 return -EOPNOTSUPP;
1555
1556 port = val->port_vlan;
1557 if (port >= dev->ports)
1558 return -EINVAL;
1559
1560 mutex_lock(&priv->mib_lock);
1561 ret = ar8xxx_mib_capture(priv);
1562 if (ret)
1563 goto unlock;
1564
1565 ar8xxx_mib_fetch_port_stat(priv, port, true);
1566
1567 ret = 0;
1568
1569 unlock:
1570 mutex_unlock(&priv->mib_lock);
1571 return ret;
1572 }
1573
1574 static void
1575 ar8xxx_byte_to_str(char *buf, int len, u64 byte)
1576 {
1577 unsigned long b;
1578 const char *unit;
1579
1580 if (byte >= 0x40000000) { /* 1 GiB */
1581 b = byte * 10 / 0x40000000;
1582 unit = "GiB";
1583 } else if (byte >= 0x100000) { /* 1 MiB */
1584 b = byte * 10 / 0x100000;
1585 unit = "MiB";
1586 } else if (byte >= 0x400) { /* 1 KiB */
1587 b = byte * 10 / 0x400;
1588 unit = "KiB";
1589 } else {
1590 b = byte;
1591 unit = "Byte";
1592 }
1593 if (strcmp(unit, "Byte"))
1594 snprintf(buf, len, "%lu.%lu %s", b / 10, b % 10, unit);
1595 else
1596 snprintf(buf, len, "%lu %s", b, unit);
1597 }
1598
1599 int
1600 ar8xxx_sw_get_port_mib(struct switch_dev *dev,
1601 const struct switch_attr *attr,
1602 struct switch_val *val)
1603 {
1604 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1605 const struct ar8xxx_chip *chip = priv->chip;
1606 u64 *mib_stats, mib_data;
1607 unsigned int port;
1608 int ret;
1609 char *buf = priv->buf;
1610 char buf1[64];
1611 const char *mib_name;
1612 int i, len = 0;
1613 bool mib_stats_empty = true;
1614
1615 if (!ar8xxx_has_mib_counters(priv))
1616 return -EOPNOTSUPP;
1617
1618 port = val->port_vlan;
1619 if (port >= dev->ports)
1620 return -EINVAL;
1621
1622 mutex_lock(&priv->mib_lock);
1623 ret = ar8xxx_mib_capture(priv);
1624 if (ret)
1625 goto unlock;
1626
1627 ar8xxx_mib_fetch_port_stat(priv, port, false);
1628
1629 len += snprintf(buf + len, sizeof(priv->buf) - len,
1630 "MIB counters\n");
1631
1632 mib_stats = &priv->mib_stats[port * chip->num_mibs];
1633 for (i = 0; i < chip->num_mibs; i++) {
1634 mib_name = chip->mib_decs[i].name;
1635 mib_data = mib_stats[i];
1636 len += snprintf(buf + len, sizeof(priv->buf) - len,
1637 "%-12s: %llu\n", mib_name, mib_data);
1638 if ((!strcmp(mib_name, "TxByte") ||
1639 !strcmp(mib_name, "RxGoodByte")) &&
1640 mib_data >= 1024) {
1641 ar8xxx_byte_to_str(buf1, sizeof(buf1), mib_data);
1642 --len; /* discard newline at the end of buf */
1643 len += snprintf(buf + len, sizeof(priv->buf) - len,
1644 " (%s)\n", buf1);
1645 }
1646 if (mib_stats_empty && mib_data)
1647 mib_stats_empty = false;
1648 }
1649
1650 if (mib_stats_empty)
1651 len = snprintf(buf, sizeof(priv->buf), "No MIB data");
1652
1653 val->value.s = buf;
1654 val->len = len;
1655
1656 ret = 0;
1657
1658 unlock:
1659 mutex_unlock(&priv->mib_lock);
1660 return ret;
1661 }
1662
1663 int
1664 ar8xxx_sw_set_arl_age_time(struct switch_dev *dev, const struct switch_attr *attr,
1665 struct switch_val *val)
1666 {
1667 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1668 int age_time = val->value.i;
1669 u32 age_time_val;
1670
1671 if (age_time < 0)
1672 return -EINVAL;
1673
1674 age_time_val = ar8xxx_age_time_val(age_time);
1675 if (age_time_val == 0 || age_time_val > 0xffff)
1676 return -EINVAL;
1677
1678 priv->arl_age_time = age_time;
1679 return 0;
1680 }
1681
1682 int
1683 ar8xxx_sw_get_arl_age_time(struct switch_dev *dev, const struct switch_attr *attr,
1684 struct switch_val *val)
1685 {
1686 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1687 val->value.i = priv->arl_age_time;
1688 return 0;
1689 }
1690
1691 int
1692 ar8xxx_sw_get_arl_table(struct switch_dev *dev,
1693 const struct switch_attr *attr,
1694 struct switch_val *val)
1695 {
1696 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1697 struct mii_bus *bus = priv->mii_bus;
1698 const struct ar8xxx_chip *chip = priv->chip;
1699 char *buf = priv->arl_buf;
1700 int i, j, k, len = 0;
1701 struct arl_entry *a, *a1;
1702 u32 status;
1703
1704 if (!chip->get_arl_entry)
1705 return -EOPNOTSUPP;
1706
1707 mutex_lock(&priv->reg_mutex);
1708 mutex_lock(&bus->mdio_lock);
1709
1710 chip->get_arl_entry(priv, NULL, NULL, AR8XXX_ARL_INITIALIZE);
1711
1712 for(i = 0; i < AR8XXX_NUM_ARL_RECORDS; ++i) {
1713 a = &priv->arl_table[i];
1714 duplicate:
1715 chip->get_arl_entry(priv, a, &status, AR8XXX_ARL_GET_NEXT);
1716
1717 if (!status)
1718 break;
1719
1720 /* avoid duplicates
1721 * ARL table can include multiple valid entries
1722 * per MAC, just with differing status codes
1723 */
1724 for (j = 0; j < i; ++j) {
1725 a1 = &priv->arl_table[j];
1726 if (!memcmp(a->mac, a1->mac, sizeof(a->mac))) {
1727 /* ignore ports already seen in former entry */
1728 a->portmap &= ~a1->portmap;
1729 if (!a->portmap)
1730 goto duplicate;
1731 }
1732 }
1733 }
1734
1735 mutex_unlock(&bus->mdio_lock);
1736
1737 len += snprintf(buf + len, sizeof(priv->arl_buf) - len,
1738 "address resolution table\n");
1739
1740 if (i == AR8XXX_NUM_ARL_RECORDS)
1741 len += snprintf(buf + len, sizeof(priv->arl_buf) - len,
1742 "Too many entries found, displaying the first %d only!\n",
1743 AR8XXX_NUM_ARL_RECORDS);
1744
1745 for (j = 0; j < priv->dev.ports; ++j) {
1746 for (k = 0; k < i; ++k) {
1747 a = &priv->arl_table[k];
1748 if (!(a->portmap & BIT(j)))
1749 continue;
1750 len += snprintf(buf + len, sizeof(priv->arl_buf) - len,
1751 "Port %d: MAC %02x:%02x:%02x:%02x:%02x:%02x\n",
1752 j,
1753 a->mac[5], a->mac[4], a->mac[3],
1754 a->mac[2], a->mac[1], a->mac[0]);
1755 }
1756 }
1757
1758 val->value.s = buf;
1759 val->len = len;
1760
1761 mutex_unlock(&priv->reg_mutex);
1762
1763 return 0;
1764 }
1765
1766 int
1767 ar8xxx_sw_set_flush_arl_table(struct switch_dev *dev,
1768 const struct switch_attr *attr,
1769 struct switch_val *val)
1770 {
1771 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1772 int ret;
1773
1774 mutex_lock(&priv->reg_mutex);
1775 ret = priv->chip->atu_flush(priv);
1776 mutex_unlock(&priv->reg_mutex);
1777
1778 return ret;
1779 }
1780
1781 int
1782 ar8xxx_sw_set_flush_port_arl_table(struct switch_dev *dev,
1783 const struct switch_attr *attr,
1784 struct switch_val *val)
1785 {
1786 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1787 int port, ret;
1788
1789 port = val->port_vlan;
1790 if (port >= dev->ports)
1791 return -EINVAL;
1792
1793 mutex_lock(&priv->reg_mutex);
1794 ret = priv->chip->atu_flush_port(priv, port);
1795 mutex_unlock(&priv->reg_mutex);
1796
1797 return ret;
1798 }
1799
1800 static int
1801 ar8xxx_phy_read(struct mii_bus *bus, int phy_addr, int reg_addr)
1802 {
1803 struct ar8xxx_priv *priv = bus->priv;
1804 return priv->chip->phy_read(priv, phy_addr, reg_addr);
1805 }
1806
1807 static int
1808 ar8xxx_phy_write(struct mii_bus *bus, int phy_addr, int reg_addr,
1809 u16 reg_val)
1810 {
1811 struct ar8xxx_priv *priv = bus->priv;
1812 return priv->chip->phy_write(priv, phy_addr, reg_addr, reg_val);
1813 }
1814
1815 static const struct switch_attr ar8xxx_sw_attr_globals[] = {
1816 {
1817 .type = SWITCH_TYPE_INT,
1818 .name = "enable_vlan",
1819 .description = "Enable VLAN mode",
1820 .set = ar8xxx_sw_set_vlan,
1821 .get = ar8xxx_sw_get_vlan,
1822 .max = 1
1823 },
1824 {
1825 .type = SWITCH_TYPE_NOVAL,
1826 .name = "reset_mibs",
1827 .description = "Reset all MIB counters",
1828 .set = ar8xxx_sw_set_reset_mibs,
1829 },
1830 {
1831 .type = SWITCH_TYPE_INT,
1832 .name = "enable_mirror_rx",
1833 .description = "Enable mirroring of RX packets",
1834 .set = ar8xxx_sw_set_mirror_rx_enable,
1835 .get = ar8xxx_sw_get_mirror_rx_enable,
1836 .max = 1
1837 },
1838 {
1839 .type = SWITCH_TYPE_INT,
1840 .name = "enable_mirror_tx",
1841 .description = "Enable mirroring of TX packets",
1842 .set = ar8xxx_sw_set_mirror_tx_enable,
1843 .get = ar8xxx_sw_get_mirror_tx_enable,
1844 .max = 1
1845 },
1846 {
1847 .type = SWITCH_TYPE_INT,
1848 .name = "mirror_monitor_port",
1849 .description = "Mirror monitor port",
1850 .set = ar8xxx_sw_set_mirror_monitor_port,
1851 .get = ar8xxx_sw_get_mirror_monitor_port,
1852 .max = AR8216_NUM_PORTS - 1
1853 },
1854 {
1855 .type = SWITCH_TYPE_INT,
1856 .name = "mirror_source_port",
1857 .description = "Mirror source port",
1858 .set = ar8xxx_sw_set_mirror_source_port,
1859 .get = ar8xxx_sw_get_mirror_source_port,
1860 .max = AR8216_NUM_PORTS - 1
1861 },
1862 {
1863 .type = SWITCH_TYPE_STRING,
1864 .name = "arl_table",
1865 .description = "Get ARL table",
1866 .set = NULL,
1867 .get = ar8xxx_sw_get_arl_table,
1868 },
1869 {
1870 .type = SWITCH_TYPE_NOVAL,
1871 .name = "flush_arl_table",
1872 .description = "Flush ARL table",
1873 .set = ar8xxx_sw_set_flush_arl_table,
1874 },
1875 };
1876
1877 const struct switch_attr ar8xxx_sw_attr_port[] = {
1878 {
1879 .type = SWITCH_TYPE_NOVAL,
1880 .name = "reset_mib",
1881 .description = "Reset single port MIB counters",
1882 .set = ar8xxx_sw_set_port_reset_mib,
1883 },
1884 {
1885 .type = SWITCH_TYPE_STRING,
1886 .name = "mib",
1887 .description = "Get port's MIB counters",
1888 .set = NULL,
1889 .get = ar8xxx_sw_get_port_mib,
1890 },
1891 {
1892 .type = SWITCH_TYPE_NOVAL,
1893 .name = "flush_arl_table",
1894 .description = "Flush port's ARL table entries",
1895 .set = ar8xxx_sw_set_flush_port_arl_table,
1896 },
1897 };
1898
1899 const struct switch_attr ar8xxx_sw_attr_vlan[1] = {
1900 {
1901 .type = SWITCH_TYPE_INT,
1902 .name = "vid",
1903 .description = "VLAN ID (0-4094)",
1904 .set = ar8xxx_sw_set_vid,
1905 .get = ar8xxx_sw_get_vid,
1906 .max = 4094,
1907 },
1908 };
1909
1910 static const struct switch_dev_ops ar8xxx_sw_ops = {
1911 .attr_global = {
1912 .attr = ar8xxx_sw_attr_globals,
1913 .n_attr = ARRAY_SIZE(ar8xxx_sw_attr_globals),
1914 },
1915 .attr_port = {
1916 .attr = ar8xxx_sw_attr_port,
1917 .n_attr = ARRAY_SIZE(ar8xxx_sw_attr_port),
1918 },
1919 .attr_vlan = {
1920 .attr = ar8xxx_sw_attr_vlan,
1921 .n_attr = ARRAY_SIZE(ar8xxx_sw_attr_vlan),
1922 },
1923 .get_port_pvid = ar8xxx_sw_get_pvid,
1924 .set_port_pvid = ar8xxx_sw_set_pvid,
1925 .get_vlan_ports = ar8xxx_sw_get_ports,
1926 .set_vlan_ports = ar8xxx_sw_set_ports,
1927 .apply_config = ar8xxx_sw_hw_apply,
1928 .reset_switch = ar8xxx_sw_reset_switch,
1929 .get_port_link = ar8xxx_sw_get_port_link,
1930 /* The following op is disabled as it hogs the CPU and degrades performance.
1931 An implementation has been attempted in 4d8a66d but reading MIB data is slow
1932 on ar8xxx switches.
1933
1934 The high CPU load has been traced down to the ar8xxx_reg_wait() call in
1935 ar8xxx_mib_op(), which has to usleep_range() till the MIB busy flag set by
1936 the request to update the MIB counter is cleared. */
1937 #if 0
1938 .get_port_stats = ar8xxx_sw_get_port_stats,
1939 #endif
1940 };
1941
1942 static const struct ar8xxx_chip ar7240sw_chip = {
1943 .caps = AR8XXX_CAP_MIB_COUNTERS,
1944
1945 .reg_port_stats_start = 0x20000,
1946 .reg_port_stats_length = 0x100,
1947 .reg_arl_ctrl = AR8216_REG_ATU_CTRL,
1948
1949 .name = "Atheros AR724X/AR933X built-in",
1950 .ports = AR7240SW_NUM_PORTS,
1951 .vlans = AR8216_NUM_VLANS,
1952 .swops = &ar8xxx_sw_ops,
1953
1954 .hw_init = ar7240sw_hw_init,
1955 .init_globals = ar7240sw_init_globals,
1956 .init_port = ar8229_init_port,
1957 .phy_read = ar8216_phy_read,
1958 .phy_write = ar8216_phy_write,
1959 .setup_port = ar7240sw_setup_port,
1960 .read_port_status = ar8216_read_port_status,
1961 .atu_flush = ar8216_atu_flush,
1962 .atu_flush_port = ar8216_atu_flush_port,
1963 .vtu_flush = ar8216_vtu_flush,
1964 .vtu_load_vlan = ar8216_vtu_load_vlan,
1965 .set_mirror_regs = ar8216_set_mirror_regs,
1966 .get_arl_entry = ar8216_get_arl_entry,
1967 .sw_hw_apply = ar8xxx_sw_hw_apply,
1968
1969 .num_mibs = ARRAY_SIZE(ar8236_mibs),
1970 .mib_decs = ar8236_mibs,
1971 .mib_func = AR8216_REG_MIB_FUNC
1972 };
1973
1974 static const struct ar8xxx_chip ar8216_chip = {
1975 .caps = AR8XXX_CAP_MIB_COUNTERS,
1976
1977 .reg_port_stats_start = 0x19000,
1978 .reg_port_stats_length = 0xa0,
1979 .reg_arl_ctrl = AR8216_REG_ATU_CTRL,
1980
1981 .name = "Atheros AR8216",
1982 .ports = AR8216_NUM_PORTS,
1983 .vlans = AR8216_NUM_VLANS,
1984 .swops = &ar8xxx_sw_ops,
1985
1986 .hw_init = ar8216_hw_init,
1987 .init_globals = ar8216_init_globals,
1988 .init_port = ar8216_init_port,
1989 .setup_port = ar8216_setup_port,
1990 .read_port_status = ar8216_read_port_status,
1991 .atu_flush = ar8216_atu_flush,
1992 .atu_flush_port = ar8216_atu_flush_port,
1993 .vtu_flush = ar8216_vtu_flush,
1994 .vtu_load_vlan = ar8216_vtu_load_vlan,
1995 .set_mirror_regs = ar8216_set_mirror_regs,
1996 .get_arl_entry = ar8216_get_arl_entry,
1997 .sw_hw_apply = ar8xxx_sw_hw_apply,
1998
1999 .num_mibs = ARRAY_SIZE(ar8216_mibs),
2000 .mib_decs = ar8216_mibs,
2001 .mib_func = AR8216_REG_MIB_FUNC
2002 };
2003
2004 static const struct ar8xxx_chip ar8229_chip = {
2005 .caps = AR8XXX_CAP_MIB_COUNTERS,
2006
2007 .reg_port_stats_start = 0x20000,
2008 .reg_port_stats_length = 0x100,
2009 .reg_arl_ctrl = AR8216_REG_ATU_CTRL,
2010
2011 .name = "Atheros AR8229",
2012 .ports = AR8216_NUM_PORTS,
2013 .vlans = AR8216_NUM_VLANS,
2014 .swops = &ar8xxx_sw_ops,
2015
2016 .hw_init = ar8229_hw_init,
2017 .init_globals = ar8229_init_globals,
2018 .init_port = ar8229_init_port,
2019 .phy_read = ar8216_phy_read,
2020 .phy_write = ar8216_phy_write,
2021 .setup_port = ar8236_setup_port,
2022 .read_port_status = ar8216_read_port_status,
2023 .atu_flush = ar8216_atu_flush,
2024 .atu_flush_port = ar8216_atu_flush_port,
2025 .vtu_flush = ar8216_vtu_flush,
2026 .vtu_load_vlan = ar8216_vtu_load_vlan,
2027 .set_mirror_regs = ar8216_set_mirror_regs,
2028 .get_arl_entry = ar8216_get_arl_entry,
2029 .sw_hw_apply = ar8xxx_sw_hw_apply,
2030
2031 .num_mibs = ARRAY_SIZE(ar8236_mibs),
2032 .mib_decs = ar8236_mibs,
2033 .mib_func = AR8216_REG_MIB_FUNC
2034 };
2035
2036 static const struct ar8xxx_chip ar8236_chip = {
2037 .caps = AR8XXX_CAP_MIB_COUNTERS,
2038
2039 .reg_port_stats_start = 0x20000,
2040 .reg_port_stats_length = 0x100,
2041 .reg_arl_ctrl = AR8216_REG_ATU_CTRL,
2042
2043 .name = "Atheros AR8236",
2044 .ports = AR8216_NUM_PORTS,
2045 .vlans = AR8216_NUM_VLANS,
2046 .swops = &ar8xxx_sw_ops,
2047
2048 .hw_init = ar8216_hw_init,
2049 .init_globals = ar8236_init_globals,
2050 .init_port = ar8216_init_port,
2051 .setup_port = ar8236_setup_port,
2052 .read_port_status = ar8216_read_port_status,
2053 .atu_flush = ar8216_atu_flush,
2054 .atu_flush_port = ar8216_atu_flush_port,
2055 .vtu_flush = ar8216_vtu_flush,
2056 .vtu_load_vlan = ar8216_vtu_load_vlan,
2057 .set_mirror_regs = ar8216_set_mirror_regs,
2058 .get_arl_entry = ar8216_get_arl_entry,
2059 .sw_hw_apply = ar8xxx_sw_hw_apply,
2060
2061 .num_mibs = ARRAY_SIZE(ar8236_mibs),
2062 .mib_decs = ar8236_mibs,
2063 .mib_func = AR8216_REG_MIB_FUNC
2064 };
2065
2066 static const struct ar8xxx_chip ar8316_chip = {
2067 .caps = AR8XXX_CAP_GIGE | AR8XXX_CAP_MIB_COUNTERS,
2068
2069 .reg_port_stats_start = 0x20000,
2070 .reg_port_stats_length = 0x100,
2071 .reg_arl_ctrl = AR8216_REG_ATU_CTRL,
2072
2073 .name = "Atheros AR8316",
2074 .ports = AR8216_NUM_PORTS,
2075 .vlans = AR8X16_MAX_VLANS,
2076 .swops = &ar8xxx_sw_ops,
2077
2078 .hw_init = ar8316_hw_init,
2079 .init_globals = ar8316_init_globals,
2080 .init_port = ar8216_init_port,
2081 .setup_port = ar8216_setup_port,
2082 .read_port_status = ar8216_read_port_status,
2083 .atu_flush = ar8216_atu_flush,
2084 .atu_flush_port = ar8216_atu_flush_port,
2085 .vtu_flush = ar8216_vtu_flush,
2086 .vtu_load_vlan = ar8216_vtu_load_vlan,
2087 .set_mirror_regs = ar8216_set_mirror_regs,
2088 .get_arl_entry = ar8216_get_arl_entry,
2089 .sw_hw_apply = ar8xxx_sw_hw_apply,
2090
2091 .num_mibs = ARRAY_SIZE(ar8236_mibs),
2092 .mib_decs = ar8236_mibs,
2093 .mib_func = AR8216_REG_MIB_FUNC
2094 };
2095
2096 static int
2097 ar8xxx_read_id(struct ar8xxx_priv *priv)
2098 {
2099 u32 val;
2100 u16 id;
2101 int i;
2102
2103 val = ar8xxx_read(priv, AR8216_REG_CTRL);
2104 if (val == ~0)
2105 return -ENODEV;
2106
2107 id = val & (AR8216_CTRL_REVISION | AR8216_CTRL_VERSION);
2108 for (i = 0; i < AR8X16_PROBE_RETRIES; i++) {
2109 u16 t;
2110
2111 val = ar8xxx_read(priv, AR8216_REG_CTRL);
2112 if (val == ~0)
2113 return -ENODEV;
2114
2115 t = val & (AR8216_CTRL_REVISION | AR8216_CTRL_VERSION);
2116 if (t != id)
2117 return -ENODEV;
2118 }
2119
2120 priv->chip_ver = (id & AR8216_CTRL_VERSION) >> AR8216_CTRL_VERSION_S;
2121 priv->chip_rev = (id & AR8216_CTRL_REVISION);
2122 return 0;
2123 }
2124
2125 static int
2126 ar8xxx_id_chip(struct ar8xxx_priv *priv)
2127 {
2128 int ret;
2129
2130 ret = ar8xxx_read_id(priv);
2131 if(ret)
2132 return ret;
2133
2134 switch (priv->chip_ver) {
2135 case AR8XXX_VER_AR8216:
2136 priv->chip = &ar8216_chip;
2137 break;
2138 case AR8XXX_VER_AR8236:
2139 priv->chip = &ar8236_chip;
2140 break;
2141 case AR8XXX_VER_AR8316:
2142 priv->chip = &ar8316_chip;
2143 break;
2144 case AR8XXX_VER_AR8327:
2145 priv->chip = &ar8327_chip;
2146 break;
2147 case AR8XXX_VER_AR8337:
2148 priv->chip = &ar8337_chip;
2149 break;
2150 default:
2151 pr_err("ar8216: Unknown Atheros device [ver=%d, rev=%d]\n",
2152 priv->chip_ver, priv->chip_rev);
2153
2154 return -ENODEV;
2155 }
2156
2157 return 0;
2158 }
2159
2160 static void
2161 ar8xxx_mib_work_func(struct work_struct *work)
2162 {
2163 struct ar8xxx_priv *priv;
2164 int err;
2165
2166 priv = container_of(work, struct ar8xxx_priv, mib_work.work);
2167
2168 mutex_lock(&priv->mib_lock);
2169
2170 err = ar8xxx_mib_capture(priv);
2171 if (err)
2172 goto next_port;
2173
2174 ar8xxx_mib_fetch_port_stat(priv, priv->mib_next_port, false);
2175
2176 next_port:
2177 priv->mib_next_port++;
2178 if (priv->mib_next_port >= priv->dev.ports)
2179 priv->mib_next_port = 0;
2180
2181 mutex_unlock(&priv->mib_lock);
2182 schedule_delayed_work(&priv->mib_work,
2183 msecs_to_jiffies(AR8XXX_MIB_WORK_DELAY));
2184 }
2185
2186 static int
2187 ar8xxx_mib_init(struct ar8xxx_priv *priv)
2188 {
2189 unsigned int len;
2190
2191 if (!ar8xxx_has_mib_counters(priv))
2192 return 0;
2193
2194 BUG_ON(!priv->chip->mib_decs || !priv->chip->num_mibs);
2195
2196 len = priv->dev.ports * priv->chip->num_mibs *
2197 sizeof(*priv->mib_stats);
2198 priv->mib_stats = kzalloc(len, GFP_KERNEL);
2199
2200 if (!priv->mib_stats)
2201 return -ENOMEM;
2202
2203 return 0;
2204 }
2205
2206 static void
2207 ar8xxx_mib_start(struct ar8xxx_priv *priv)
2208 {
2209 if (!ar8xxx_has_mib_counters(priv))
2210 return;
2211
2212 schedule_delayed_work(&priv->mib_work,
2213 msecs_to_jiffies(AR8XXX_MIB_WORK_DELAY));
2214 }
2215
2216 static void
2217 ar8xxx_mib_stop(struct ar8xxx_priv *priv)
2218 {
2219 if (!ar8xxx_has_mib_counters(priv))
2220 return;
2221
2222 cancel_delayed_work_sync(&priv->mib_work);
2223 }
2224
2225 static struct ar8xxx_priv *
2226 ar8xxx_create(void)
2227 {
2228 struct ar8xxx_priv *priv;
2229
2230 priv = kzalloc(sizeof(struct ar8xxx_priv), GFP_KERNEL);
2231 if (priv == NULL)
2232 return NULL;
2233
2234 mutex_init(&priv->reg_mutex);
2235 mutex_init(&priv->mib_lock);
2236 INIT_DELAYED_WORK(&priv->mib_work, ar8xxx_mib_work_func);
2237
2238 return priv;
2239 }
2240
2241 static void
2242 ar8xxx_free(struct ar8xxx_priv *priv)
2243 {
2244 if (priv->chip && priv->chip->cleanup)
2245 priv->chip->cleanup(priv);
2246
2247 kfree(priv->chip_data);
2248 kfree(priv->mib_stats);
2249 kfree(priv);
2250 }
2251
2252 static int
2253 ar8xxx_probe_switch(struct ar8xxx_priv *priv)
2254 {
2255 const struct ar8xxx_chip *chip;
2256 struct switch_dev *swdev;
2257 int ret;
2258
2259 chip = priv->chip;
2260
2261 swdev = &priv->dev;
2262 swdev->cpu_port = AR8216_PORT_CPU;
2263 swdev->name = chip->name;
2264 swdev->vlans = chip->vlans;
2265 swdev->ports = chip->ports;
2266 swdev->ops = chip->swops;
2267
2268 ret = ar8xxx_mib_init(priv);
2269 if (ret)
2270 return ret;
2271
2272 return 0;
2273 }
2274
2275 static int
2276 ar8xxx_start(struct ar8xxx_priv *priv)
2277 {
2278 int ret;
2279
2280 priv->init = true;
2281
2282 ret = priv->chip->hw_init(priv);
2283 if (ret)
2284 return ret;
2285
2286 ret = ar8xxx_sw_reset_switch(&priv->dev);
2287 if (ret)
2288 return ret;
2289
2290 priv->init = false;
2291
2292 ar8xxx_mib_start(priv);
2293
2294 return 0;
2295 }
2296
2297 static int
2298 ar8xxx_phy_config_init(struct phy_device *phydev)
2299 {
2300 struct ar8xxx_priv *priv = phydev->priv;
2301 struct net_device *dev = phydev->attached_dev;
2302 int ret;
2303
2304 if (WARN_ON(!priv))
2305 return -ENODEV;
2306
2307 if (priv->chip->config_at_probe)
2308 return ar8xxx_phy_check_aneg(phydev);
2309
2310 priv->phy = phydev;
2311
2312 if (phydev->mdio.addr != 0) {
2313 if (chip_is_ar8316(priv)) {
2314 /* switch device has been initialized, reinit */
2315 priv->dev.ports = (AR8216_NUM_PORTS - 1);
2316 priv->initialized = false;
2317 priv->port4_phy = true;
2318 ar8316_hw_init(priv);
2319 return 0;
2320 }
2321
2322 return 0;
2323 }
2324
2325 ret = ar8xxx_start(priv);
2326 if (ret)
2327 return ret;
2328
2329 /* VID fixup only needed on ar8216 */
2330 if (chip_is_ar8216(priv)) {
2331 dev->phy_ptr = priv;
2332 dev->priv_flags |= IFF_NO_IP_ALIGN;
2333 dev->eth_mangle_rx = ar8216_mangle_rx;
2334 dev->eth_mangle_tx = ar8216_mangle_tx;
2335 }
2336
2337 return 0;
2338 }
2339
2340 static bool
2341 ar8xxx_check_link_states(struct ar8xxx_priv *priv)
2342 {
2343 bool link_new, changed = false;
2344 u32 status;
2345 int i;
2346
2347 mutex_lock(&priv->reg_mutex);
2348
2349 for (i = 0; i < priv->dev.ports; i++) {
2350 status = priv->chip->read_port_status(priv, i);
2351 link_new = !!(status & AR8216_PORT_STATUS_LINK_UP);
2352 if (link_new == priv->link_up[i])
2353 continue;
2354
2355 priv->link_up[i] = link_new;
2356 changed = true;
2357 /* flush ARL entries for this port if it went down*/
2358 if (!link_new)
2359 priv->chip->atu_flush_port(priv, i);
2360 dev_info(&priv->phy->mdio.dev, "Port %d is %s\n",
2361 i, link_new ? "up" : "down");
2362 }
2363
2364 mutex_unlock(&priv->reg_mutex);
2365
2366 return changed;
2367 }
2368
2369 static int
2370 ar8xxx_phy_read_status(struct phy_device *phydev)
2371 {
2372 struct ar8xxx_priv *priv = phydev->priv;
2373 struct switch_port_link link;
2374
2375 /* check for switch port link changes */
2376 if (phydev->state == PHY_CHANGELINK)
2377 ar8xxx_check_link_states(priv);
2378
2379 if (phydev->mdio.addr != 0)
2380 return genphy_read_status(phydev);
2381
2382 ar8216_read_port_link(priv, phydev->mdio.addr, &link);
2383 phydev->link = !!link.link;
2384 if (!phydev->link)
2385 return 0;
2386
2387 switch (link.speed) {
2388 case SWITCH_PORT_SPEED_10:
2389 phydev->speed = SPEED_10;
2390 break;
2391 case SWITCH_PORT_SPEED_100:
2392 phydev->speed = SPEED_100;
2393 break;
2394 case SWITCH_PORT_SPEED_1000:
2395 phydev->speed = SPEED_1000;
2396 break;
2397 default:
2398 phydev->speed = 0;
2399 }
2400 phydev->duplex = link.duplex ? DUPLEX_FULL : DUPLEX_HALF;
2401
2402 phydev->state = PHY_RUNNING;
2403 netif_carrier_on(phydev->attached_dev);
2404 if (phydev->adjust_link)
2405 phydev->adjust_link(phydev->attached_dev);
2406
2407 return 0;
2408 }
2409
2410 static int
2411 ar8xxx_phy_config_aneg(struct phy_device *phydev)
2412 {
2413 if (phydev->mdio.addr == 0)
2414 return 0;
2415
2416 return genphy_config_aneg(phydev);
2417 }
2418
2419 static const u32 ar8xxx_phy_ids[] = {
2420 0x004dd033,
2421 0x004dd034, /* AR8327 */
2422 0x004dd036, /* AR8337 */
2423 0x004dd041,
2424 0x004dd042,
2425 0x004dd043, /* AR8236 */
2426 };
2427
2428 static bool
2429 ar8xxx_phy_match(u32 phy_id)
2430 {
2431 int i;
2432
2433 for (i = 0; i < ARRAY_SIZE(ar8xxx_phy_ids); i++)
2434 if (phy_id == ar8xxx_phy_ids[i])
2435 return true;
2436
2437 return false;
2438 }
2439
2440 static bool
2441 ar8xxx_is_possible(struct mii_bus *bus)
2442 {
2443 unsigned int i, found_phys = 0;
2444
2445 for (i = 0; i < 5; i++) {
2446 u32 phy_id;
2447
2448 phy_id = mdiobus_read(bus, i, MII_PHYSID1) << 16;
2449 phy_id |= mdiobus_read(bus, i, MII_PHYSID2);
2450 if (ar8xxx_phy_match(phy_id)) {
2451 found_phys++;
2452 } else if (phy_id) {
2453 pr_debug("ar8xxx: unknown PHY at %s:%02x id:%08x\n",
2454 dev_name(&bus->dev), i, phy_id);
2455 }
2456 }
2457 return !!found_phys;
2458 }
2459
2460 static int
2461 ar8xxx_phy_probe(struct phy_device *phydev)
2462 {
2463 struct ar8xxx_priv *priv;
2464 struct switch_dev *swdev;
2465 int ret;
2466
2467 /* skip PHYs at unused adresses */
2468 if (phydev->mdio.addr != 0 && phydev->mdio.addr != 3 && phydev->mdio.addr != 4)
2469 return -ENODEV;
2470
2471 if (!ar8xxx_is_possible(phydev->mdio.bus))
2472 return -ENODEV;
2473
2474 mutex_lock(&ar8xxx_dev_list_lock);
2475 list_for_each_entry(priv, &ar8xxx_dev_list, list)
2476 if (priv->mii_bus == phydev->mdio.bus)
2477 goto found;
2478
2479 priv = ar8xxx_create();
2480 if (priv == NULL) {
2481 ret = -ENOMEM;
2482 goto unlock;
2483 }
2484
2485 priv->mii_bus = phydev->mdio.bus;
2486 priv->pdev = &phydev->mdio.dev;
2487
2488 ret = ar8xxx_id_chip(priv);
2489 if (ret)
2490 goto free_priv;
2491
2492 ret = ar8xxx_probe_switch(priv);
2493 if (ret)
2494 goto free_priv;
2495
2496 swdev = &priv->dev;
2497 swdev->alias = dev_name(&priv->mii_bus->dev);
2498 ret = register_switch(swdev, NULL);
2499 if (ret)
2500 goto free_priv;
2501
2502 pr_info("%s: %s rev. %u switch registered on %s\n",
2503 swdev->devname, swdev->name, priv->chip_rev,
2504 dev_name(&priv->mii_bus->dev));
2505
2506 list_add(&priv->list, &ar8xxx_dev_list);
2507
2508 found:
2509 priv->use_count++;
2510
2511 if (phydev->mdio.addr == 0) {
2512 if (ar8xxx_has_gige(priv)) {
2513 phydev->supported = SUPPORTED_1000baseT_Full;
2514 phydev->advertising = ADVERTISED_1000baseT_Full;
2515 } else {
2516 phydev->supported = SUPPORTED_100baseT_Full;
2517 phydev->advertising = ADVERTISED_100baseT_Full;
2518 }
2519
2520 if (priv->chip->config_at_probe) {
2521 priv->phy = phydev;
2522
2523 ret = ar8xxx_start(priv);
2524 if (ret)
2525 goto err_unregister_switch;
2526 }
2527 } else {
2528 if (ar8xxx_has_gige(priv)) {
2529 phydev->supported |= SUPPORTED_1000baseT_Full;
2530 phydev->advertising |= ADVERTISED_1000baseT_Full;
2531 }
2532 if (priv->chip->phy_rgmii_set)
2533 priv->chip->phy_rgmii_set(priv, phydev);
2534 }
2535
2536 phydev->priv = priv;
2537
2538 mutex_unlock(&ar8xxx_dev_list_lock);
2539
2540 return 0;
2541
2542 err_unregister_switch:
2543 if (--priv->use_count)
2544 goto unlock;
2545
2546 unregister_switch(&priv->dev);
2547
2548 free_priv:
2549 ar8xxx_free(priv);
2550 unlock:
2551 mutex_unlock(&ar8xxx_dev_list_lock);
2552 return ret;
2553 }
2554
2555 static void
2556 ar8xxx_phy_detach(struct phy_device *phydev)
2557 {
2558 struct net_device *dev = phydev->attached_dev;
2559
2560 if (!dev)
2561 return;
2562
2563 dev->phy_ptr = NULL;
2564 dev->priv_flags &= ~IFF_NO_IP_ALIGN;
2565 dev->eth_mangle_rx = NULL;
2566 dev->eth_mangle_tx = NULL;
2567 }
2568
2569 static void
2570 ar8xxx_phy_remove(struct phy_device *phydev)
2571 {
2572 struct ar8xxx_priv *priv = phydev->priv;
2573
2574 if (WARN_ON(!priv))
2575 return;
2576
2577 phydev->priv = NULL;
2578
2579 mutex_lock(&ar8xxx_dev_list_lock);
2580
2581 if (--priv->use_count > 0) {
2582 mutex_unlock(&ar8xxx_dev_list_lock);
2583 return;
2584 }
2585
2586 list_del(&priv->list);
2587 mutex_unlock(&ar8xxx_dev_list_lock);
2588
2589 unregister_switch(&priv->dev);
2590 ar8xxx_mib_stop(priv);
2591 ar8xxx_free(priv);
2592 }
2593
2594 static int
2595 ar8xxx_phy_soft_reset(struct phy_device *phydev)
2596 {
2597 /* we don't need an extra reset */
2598 return 0;
2599 }
2600
2601 static struct phy_driver ar8xxx_phy_driver[] = {
2602 {
2603 .phy_id = 0x004d0000,
2604 .name = "Atheros AR8216/AR8236/AR8316",
2605 .phy_id_mask = 0xffff0000,
2606 .features = PHY_BASIC_FEATURES,
2607 .probe = ar8xxx_phy_probe,
2608 .remove = ar8xxx_phy_remove,
2609 .detach = ar8xxx_phy_detach,
2610 .config_init = ar8xxx_phy_config_init,
2611 .config_aneg = ar8xxx_phy_config_aneg,
2612 .read_status = ar8xxx_phy_read_status,
2613 .soft_reset = ar8xxx_phy_soft_reset,
2614 }
2615 };
2616
2617 static const struct of_device_id ar8xxx_mdiodev_of_match[] = {
2618 {
2619 .compatible = "qca,ar7240sw",
2620 .data = &ar7240sw_chip,
2621 }, {
2622 .compatible = "qca,ar8229",
2623 .data = &ar8229_chip,
2624 }, {
2625 .compatible = "qca,ar8236",
2626 .data = &ar8236_chip,
2627 }, {
2628 .compatible = "qca,ar8327",
2629 .data = &ar8327_chip,
2630 },
2631 { /* sentinel */ },
2632 };
2633
2634 static int
2635 ar8xxx_mdiodev_probe(struct mdio_device *mdiodev)
2636 {
2637 const struct of_device_id *match;
2638 struct ar8xxx_priv *priv;
2639 struct switch_dev *swdev;
2640 struct device_node *mdio_node;
2641 int ret;
2642
2643 match = of_match_device(ar8xxx_mdiodev_of_match, &mdiodev->dev);
2644 if (!match)
2645 return -EINVAL;
2646
2647 priv = ar8xxx_create();
2648 if (priv == NULL)
2649 return -ENOMEM;
2650
2651 priv->mii_bus = mdiodev->bus;
2652 priv->pdev = &mdiodev->dev;
2653 priv->chip = (const struct ar8xxx_chip *) match->data;
2654
2655 ret = ar8xxx_read_id(priv);
2656 if (ret)
2657 goto free_priv;
2658
2659 ret = ar8xxx_probe_switch(priv);
2660 if (ret)
2661 goto free_priv;
2662
2663 if (priv->chip->phy_read && priv->chip->phy_write) {
2664 priv->sw_mii_bus = devm_mdiobus_alloc(&mdiodev->dev);
2665 priv->sw_mii_bus->name = "ar8xxx-mdio";
2666 priv->sw_mii_bus->read = ar8xxx_phy_read;
2667 priv->sw_mii_bus->write = ar8xxx_phy_write;
2668 priv->sw_mii_bus->priv = priv;
2669 priv->sw_mii_bus->parent = &mdiodev->dev;
2670 snprintf(priv->sw_mii_bus->id, MII_BUS_ID_SIZE, "%s",
2671 dev_name(&mdiodev->dev));
2672 mdio_node = of_get_child_by_name(priv->pdev->of_node, "mdio-bus");
2673 ret = of_mdiobus_register(priv->sw_mii_bus, mdio_node);
2674 if (ret)
2675 goto free_priv;
2676 }
2677
2678 swdev = &priv->dev;
2679 swdev->alias = dev_name(&mdiodev->dev);
2680
2681 if (of_property_read_bool(priv->pdev->of_node, "qca,phy4-mii-enable")) {
2682 priv->port4_phy = true;
2683 swdev->ports--;
2684 }
2685
2686 ret = register_switch(swdev, NULL);
2687 if (ret)
2688 goto free_priv;
2689
2690 pr_info("%s: %s rev. %u switch registered on %s\n",
2691 swdev->devname, swdev->name, priv->chip_rev,
2692 dev_name(&priv->mii_bus->dev));
2693
2694 mutex_lock(&ar8xxx_dev_list_lock);
2695 list_add(&priv->list, &ar8xxx_dev_list);
2696 mutex_unlock(&ar8xxx_dev_list_lock);
2697
2698 priv->use_count++;
2699
2700 ret = ar8xxx_start(priv);
2701 if (ret)
2702 goto err_unregister_switch;
2703
2704 dev_set_drvdata(&mdiodev->dev, priv);
2705
2706 return 0;
2707
2708 err_unregister_switch:
2709 if (--priv->use_count)
2710 return ret;
2711
2712 unregister_switch(&priv->dev);
2713
2714 free_priv:
2715 ar8xxx_free(priv);
2716 return ret;
2717 }
2718
2719 static void
2720 ar8xxx_mdiodev_remove(struct mdio_device *mdiodev)
2721 {
2722 struct ar8xxx_priv *priv = dev_get_drvdata(&mdiodev->dev);
2723
2724 if (WARN_ON(!priv))
2725 return;
2726
2727 mutex_lock(&ar8xxx_dev_list_lock);
2728
2729 if (--priv->use_count > 0) {
2730 mutex_unlock(&ar8xxx_dev_list_lock);
2731 return;
2732 }
2733
2734 list_del(&priv->list);
2735 mutex_unlock(&ar8xxx_dev_list_lock);
2736
2737 unregister_switch(&priv->dev);
2738 ar8xxx_mib_stop(priv);
2739 if(priv->sw_mii_bus)
2740 mdiobus_unregister(priv->sw_mii_bus);
2741 ar8xxx_free(priv);
2742 }
2743
2744 static struct mdio_driver ar8xxx_mdio_driver = {
2745 .probe = ar8xxx_mdiodev_probe,
2746 .remove = ar8xxx_mdiodev_remove,
2747 .mdiodrv.driver = {
2748 .name = "ar8xxx-switch",
2749 .of_match_table = ar8xxx_mdiodev_of_match,
2750 },
2751 };
2752
2753 static int __init ar8216_init(void)
2754 {
2755 int ret;
2756
2757 ret = phy_drivers_register(ar8xxx_phy_driver,
2758 ARRAY_SIZE(ar8xxx_phy_driver),
2759 THIS_MODULE);
2760 if (ret)
2761 return ret;
2762
2763 ret = mdio_driver_register(&ar8xxx_mdio_driver);
2764 if (ret)
2765 phy_drivers_unregister(ar8xxx_phy_driver,
2766 ARRAY_SIZE(ar8xxx_phy_driver));
2767
2768 return ret;
2769 }
2770 module_init(ar8216_init);
2771
2772 static void __exit ar8216_exit(void)
2773 {
2774 mdio_driver_unregister(&ar8xxx_mdio_driver);
2775 phy_drivers_unregister(ar8xxx_phy_driver,
2776 ARRAY_SIZE(ar8xxx_phy_driver));
2777 }
2778 module_exit(ar8216_exit);
2779
2780 MODULE_LICENSE("GPL");