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