2 * ar8216.c: AR8216 switch driver
4 * Copyright (C) 2009 Felix Fietkau <nbd@nbd.name>
5 * Copyright (C) 2011-2012 Gabor Juhos <juhosg@openwrt.org>
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.
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.
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>
40 extern const struct ar8xxx_chip ar8327_chip;
41 extern const struct ar8xxx_chip ar8337_chip;
43 #define AR8XXX_MIB_WORK_DELAY 2000 /* msecs */
45 #define MIB_DESC(_s , _o, _n) \
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"),
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"),
134 static DEFINE_MUTEX(ar8xxx_dev_list_lock);
135 static LIST_HEAD(ar8xxx_dev_list);
137 /* inspired by phy_poll_reset in drivers/net/phy/phy_device.c */
139 ar8xxx_phy_poll_reset(struct mii_bus *bus)
141 unsigned int sleep_msecs = 20;
144 for (elapsed = sleep_msecs; elapsed <= 600;
145 elapsed += sleep_msecs) {
147 for (i = 0; i < AR8XXX_NUM_PHYS; i++) {
148 ret = mdiobus_read(bus, i, MII_BMCR);
151 if (ret & BMCR_RESET)
153 if (i == AR8XXX_NUM_PHYS - 1) {
154 usleep_range(1000, 2000);
163 ar8xxx_phy_check_aneg(struct phy_device *phydev)
167 if (phydev->autoneg != AUTONEG_ENABLE)
170 * BMCR_ANENABLE might have been cleared
171 * by phy_init_hw in certain kernel versions
172 * therefore check for it
174 ret = phy_read(phydev, MII_BMCR);
177 if (ret & BMCR_ANENABLE)
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);
186 ar8xxx_phy_init(struct ar8xxx_priv *priv)
192 for (i = 0; i < AR8XXX_NUM_PHYS; i++) {
193 if (priv->chip->phy_fixup)
194 priv->chip->phy_fixup(priv, i);
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);
204 ar8xxx_phy_poll_reset(bus);
208 ar8xxx_mii_read32(struct ar8xxx_priv *priv, int phy_id, int regnum)
210 struct mii_bus *bus = priv->mii_bus;
213 lo = bus->read(bus, phy_id, regnum);
214 hi = bus->read(bus, phy_id, regnum + 1);
216 return (hi << 16) | lo;
220 ar8xxx_mii_write32(struct ar8xxx_priv *priv, int phy_id, int regnum, u32 val)
222 struct mii_bus *bus = priv->mii_bus;
226 hi = (u16) (val >> 16);
228 if (priv->chip->mii_lo_first)
230 bus->write(bus, phy_id, regnum, lo);
231 bus->write(bus, phy_id, regnum + 1, hi);
233 bus->write(bus, phy_id, regnum + 1, hi);
234 bus->write(bus, phy_id, regnum, lo);
239 ar8xxx_read(struct ar8xxx_priv *priv, int reg)
241 struct mii_bus *bus = priv->mii_bus;
245 split_addr((u32) reg, &r1, &r2, &page);
247 mutex_lock(&bus->mdio_lock);
249 bus->write(bus, 0x18, 0, page);
250 wait_for_page_switch();
251 val = ar8xxx_mii_read32(priv, 0x10 | r2, r1);
253 mutex_unlock(&bus->mdio_lock);
259 ar8xxx_write(struct ar8xxx_priv *priv, int reg, u32 val)
261 struct mii_bus *bus = priv->mii_bus;
264 split_addr((u32) reg, &r1, &r2, &page);
266 mutex_lock(&bus->mdio_lock);
268 bus->write(bus, 0x18, 0, page);
269 wait_for_page_switch();
270 ar8xxx_mii_write32(priv, 0x10 | r2, r1, val);
272 mutex_unlock(&bus->mdio_lock);
276 ar8xxx_rmw(struct ar8xxx_priv *priv, int reg, u32 mask, u32 val)
278 struct mii_bus *bus = priv->mii_bus;
282 split_addr((u32) reg, &r1, &r2, &page);
284 mutex_lock(&bus->mdio_lock);
286 bus->write(bus, 0x18, 0, page);
287 wait_for_page_switch();
289 ret = ar8xxx_mii_read32(priv, 0x10 | r2, r1);
292 ar8xxx_mii_write32(priv, 0x10 | r2, r1, ret);
294 mutex_unlock(&bus->mdio_lock);
300 ar8xxx_phy_dbg_write(struct ar8xxx_priv *priv, int phy_addr,
301 u16 dbg_addr, u16 dbg_data)
303 struct mii_bus *bus = priv->mii_bus;
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);
312 ar8xxx_phy_mmd_prep(struct mii_bus *bus, int phy_addr, u16 addr, u16 reg)
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);
320 ar8xxx_phy_mmd_write(struct ar8xxx_priv *priv, int phy_addr, u16 addr, u16 reg, u16 data)
322 struct mii_bus *bus = priv->mii_bus;
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);
331 ar8xxx_phy_mmd_read(struct ar8xxx_priv *priv, int phy_addr, u16 addr, u16 reg)
333 struct mii_bus *bus = priv->mii_bus;
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);
345 ar8xxx_reg_wait(struct ar8xxx_priv *priv, u32 reg, u32 mask, u32 val,
350 for (i = 0; i < timeout; i++) {
353 t = ar8xxx_read(priv, reg);
354 if ((t & mask) == val)
357 usleep_range(1000, 2000);
365 ar8xxx_mib_op(struct ar8xxx_priv *priv, u32 op)
367 unsigned mib_func = priv->chip->mib_func;
370 lockdep_assert_held(&priv->mib_lock);
372 /* Capture the hardware statistics for all ports */
373 ar8xxx_rmw(priv, mib_func, AR8216_MIB_FUNC, (op << AR8216_MIB_FUNC_S));
375 /* Wait for the capturing to complete. */
376 ret = ar8xxx_reg_wait(priv, mib_func, AR8216_MIB_BUSY, 0, 10);
387 ar8xxx_mib_capture(struct ar8xxx_priv *priv)
389 return ar8xxx_mib_op(priv, AR8216_MIB_FUNC_CAPTURE);
393 ar8xxx_mib_flush(struct ar8xxx_priv *priv)
395 return ar8xxx_mib_op(priv, AR8216_MIB_FUNC_FLUSH);
399 ar8xxx_mib_fetch_port_stat(struct ar8xxx_priv *priv, int port, bool flush)
405 WARN_ON(port >= priv->dev.ports);
407 lockdep_assert_held(&priv->mib_lock);
409 base = priv->chip->reg_port_stats_start +
410 priv->chip->reg_port_stats_length * port;
412 mib_stats = &priv->mib_stats[port * priv->chip->num_mibs];
413 for (i = 0; i < priv->chip->num_mibs; i++) {
414 const struct ar8xxx_mib_desc *mib;
417 mib = &priv->chip->mib_decs[i];
418 t = ar8xxx_read(priv, base + mib->offset);
419 if (mib->size == 2) {
422 hi = ar8xxx_read(priv, base + mib->offset + 4);
435 ar8216_read_port_link(struct ar8xxx_priv *priv, int port,
436 struct switch_port_link *link)
441 memset(link, '\0', sizeof(*link));
443 status = priv->chip->read_port_status(priv, port);
445 link->aneg = !!(status & AR8216_PORT_STATUS_LINK_AUTO);
447 link->link = !!(status & AR8216_PORT_STATUS_LINK_UP);
451 if (priv->get_port_link) {
454 err = priv->get_port_link(port);
463 link->duplex = !!(status & AR8216_PORT_STATUS_DUPLEX);
464 link->tx_flow = !!(status & AR8216_PORT_STATUS_TXFLOW);
465 link->rx_flow = !!(status & AR8216_PORT_STATUS_RXFLOW);
467 if (link->aneg && link->duplex && priv->chip->read_port_eee_status)
468 link->eee = priv->chip->read_port_eee_status(priv, port);
470 speed = (status & AR8216_PORT_STATUS_SPEED) >>
471 AR8216_PORT_STATUS_SPEED_S;
474 case AR8216_PORT_SPEED_10M:
475 link->speed = SWITCH_PORT_SPEED_10;
477 case AR8216_PORT_SPEED_100M:
478 link->speed = SWITCH_PORT_SPEED_100;
480 case AR8216_PORT_SPEED_1000M:
481 link->speed = SWITCH_PORT_SPEED_1000;
484 link->speed = SWITCH_PORT_SPEED_UNKNOWN;
489 static struct sk_buff *
490 ar8216_mangle_tx(struct net_device *dev, struct sk_buff *skb)
492 struct ar8xxx_priv *priv = dev->phy_ptr;
501 if (unlikely(skb_headroom(skb) < 2)) {
502 if (pskb_expand_head(skb, 2, 0, GFP_ATOMIC) < 0)
506 buf = skb_push(skb, 2);
514 dev_kfree_skb_any(skb);
519 ar8216_mangle_rx(struct net_device *dev, struct sk_buff *skb)
521 struct ar8xxx_priv *priv;
529 /* don't strip the header if vlan mode is disabled */
533 /* strip header, get vlan id */
537 /* check for vlan header presence */
538 if ((buf[12 + 2] != 0x81) || (buf[13 + 2] != 0x00))
543 /* no need to fix up packets coming from a tagged source */
544 if (priv->vlan_tagged & (1 << port))
547 /* lookup port vid from local table, the switch passes an invalid vlan id */
548 vlan = priv->vlan_id[priv->pvid[port]];
551 buf[14 + 2] |= vlan >> 8;
552 buf[15 + 2] = vlan & 0xff;
556 ar8216_wait_bit(struct ar8xxx_priv *priv, int reg, u32 mask, u32 val)
562 t = ar8xxx_read(priv, reg);
563 if ((t & mask) == val)
573 pr_err("ar8216: timeout on reg %08x: %08x & %08x != %08x\n",
574 (unsigned int) reg, t, mask, val);
579 ar8216_vtu_op(struct ar8xxx_priv *priv, u32 op, u32 val)
581 if (ar8216_wait_bit(priv, AR8216_REG_VTU, AR8216_VTU_ACTIVE, 0))
583 if ((op & AR8216_VTU_OP) == AR8216_VTU_OP_LOAD) {
584 val &= AR8216_VTUDATA_MEMBER;
585 val |= AR8216_VTUDATA_VALID;
586 ar8xxx_write(priv, AR8216_REG_VTU_DATA, val);
588 op |= AR8216_VTU_ACTIVE;
589 ar8xxx_write(priv, AR8216_REG_VTU, op);
593 ar8216_vtu_flush(struct ar8xxx_priv *priv)
595 ar8216_vtu_op(priv, AR8216_VTU_OP_FLUSH, 0);
599 ar8216_vtu_load_vlan(struct ar8xxx_priv *priv, u32 vid, u32 port_mask)
603 op = AR8216_VTU_OP_LOAD | (vid << AR8216_VTU_VID_S);
604 ar8216_vtu_op(priv, op, port_mask);
608 ar8216_atu_flush(struct ar8xxx_priv *priv)
612 ret = ar8216_wait_bit(priv, AR8216_REG_ATU_FUNC0, AR8216_ATU_ACTIVE, 0);
614 ar8xxx_write(priv, AR8216_REG_ATU_FUNC0, AR8216_ATU_OP_FLUSH |
621 ar8216_atu_flush_port(struct ar8xxx_priv *priv, int port)
626 ret = ar8216_wait_bit(priv, AR8216_REG_ATU_FUNC0, AR8216_ATU_ACTIVE, 0);
628 t = (port << AR8216_ATU_PORT_NUM_S) | AR8216_ATU_OP_FLUSH_PORT;
629 t |= AR8216_ATU_ACTIVE;
630 ar8xxx_write(priv, AR8216_REG_ATU_FUNC0, t);
637 ar8216_read_port_status(struct ar8xxx_priv *priv, int port)
639 return ar8xxx_read(priv, AR8216_REG_PORT_STATUS(port));
643 ar8216_setup_port(struct ar8xxx_priv *priv, int port, u32 members)
650 pvid = priv->vlan_id[priv->pvid[port]];
651 if (priv->vlan_tagged & (1 << port))
652 egress = AR8216_OUT_ADD_VLAN;
654 egress = AR8216_OUT_STRIP_VLAN;
655 ingress = AR8216_IN_SECURE;
658 egress = AR8216_OUT_KEEP;
659 ingress = AR8216_IN_PORT_ONLY;
662 if (chip_is_ar8216(priv) && priv->vlan && port == AR8216_PORT_CPU)
663 header = AR8216_PORT_CTRL_HEADER;
667 ar8xxx_rmw(priv, AR8216_REG_PORT_CTRL(port),
668 AR8216_PORT_CTRL_LEARN | AR8216_PORT_CTRL_VLAN_MODE |
669 AR8216_PORT_CTRL_SINGLE_VLAN | AR8216_PORT_CTRL_STATE |
670 AR8216_PORT_CTRL_HEADER | AR8216_PORT_CTRL_LEARN_LOCK,
671 AR8216_PORT_CTRL_LEARN | header |
672 (egress << AR8216_PORT_CTRL_VLAN_MODE_S) |
673 (AR8216_PORT_STATE_FORWARD << AR8216_PORT_CTRL_STATE_S));
675 ar8xxx_rmw(priv, AR8216_REG_PORT_VLAN(port),
676 AR8216_PORT_VLAN_DEST_PORTS | AR8216_PORT_VLAN_MODE |
677 AR8216_PORT_VLAN_DEFAULT_ID,
678 (members << AR8216_PORT_VLAN_DEST_PORTS_S) |
679 (ingress << AR8216_PORT_VLAN_MODE_S) |
680 (pvid << AR8216_PORT_VLAN_DEFAULT_ID_S));
684 ar8216_hw_init(struct ar8xxx_priv *priv)
686 if (priv->initialized)
689 ar8xxx_phy_init(priv);
691 priv->initialized = true;
696 ar8216_init_globals(struct ar8xxx_priv *priv)
698 /* standard atheros magic */
699 ar8xxx_write(priv, 0x38, 0xc000050e);
701 ar8xxx_rmw(priv, AR8216_REG_GLOBAL_CTRL,
702 AR8216_GCTRL_MTU, 1518 + 8 + 2);
706 ar8216_init_port(struct ar8xxx_priv *priv, int port)
708 /* Enable port learning and tx */
709 ar8xxx_write(priv, AR8216_REG_PORT_CTRL(port),
710 AR8216_PORT_CTRL_LEARN |
711 (4 << AR8216_PORT_CTRL_STATE_S));
713 ar8xxx_write(priv, AR8216_REG_PORT_VLAN(port), 0);
715 if (port == AR8216_PORT_CPU) {
716 ar8xxx_write(priv, AR8216_REG_PORT_STATUS(port),
717 AR8216_PORT_STATUS_LINK_UP |
718 (ar8xxx_has_gige(priv) ?
719 AR8216_PORT_SPEED_1000M : AR8216_PORT_SPEED_100M) |
720 AR8216_PORT_STATUS_TXMAC |
721 AR8216_PORT_STATUS_RXMAC |
722 (chip_is_ar8316(priv) ? AR8216_PORT_STATUS_RXFLOW : 0) |
723 (chip_is_ar8316(priv) ? AR8216_PORT_STATUS_TXFLOW : 0) |
724 AR8216_PORT_STATUS_DUPLEX);
726 ar8xxx_write(priv, AR8216_REG_PORT_STATUS(port),
727 AR8216_PORT_STATUS_LINK_AUTO);
732 ar8216_wait_atu_ready(struct ar8xxx_priv *priv, u16 r2, u16 r1)
736 while (ar8xxx_mii_read32(priv, r2, r1) & AR8216_ATU_ACTIVE && --timeout) {
742 pr_err("ar8216: timeout waiting for atu to become ready\n");
745 static void ar8216_get_arl_entry(struct ar8xxx_priv *priv,
746 struct arl_entry *a, u32 *status, enum arl_op op)
748 struct mii_bus *bus = priv->mii_bus;
750 u16 r1_func0, r1_func1, r1_func2;
751 u32 t, val0, val1, val2;
753 split_addr(AR8216_REG_ATU_FUNC0, &r1_func0, &r2, &page);
756 r1_func1 = (AR8216_REG_ATU_FUNC1 >> 1) & 0x1e;
757 r1_func2 = (AR8216_REG_ATU_FUNC2 >> 1) & 0x1e;
760 case AR8XXX_ARL_INITIALIZE:
761 /* all ATU registers are on the same page
762 * therefore set page only once
764 bus->write(bus, 0x18, 0, page);
765 wait_for_page_switch();
767 ar8216_wait_atu_ready(priv, r2, r1_func0);
769 ar8xxx_mii_write32(priv, r2, r1_func0, AR8216_ATU_OP_GET_NEXT);
770 ar8xxx_mii_write32(priv, r2, r1_func1, 0);
771 ar8xxx_mii_write32(priv, r2, r1_func2, 0);
773 case AR8XXX_ARL_GET_NEXT:
774 t = ar8xxx_mii_read32(priv, r2, r1_func0);
775 t |= AR8216_ATU_ACTIVE;
776 ar8xxx_mii_write32(priv, r2, r1_func0, t);
777 ar8216_wait_atu_ready(priv, r2, r1_func0);
779 val0 = ar8xxx_mii_read32(priv, r2, r1_func0);
780 val1 = ar8xxx_mii_read32(priv, r2, r1_func1);
781 val2 = ar8xxx_mii_read32(priv, r2, r1_func2);
783 *status = (val2 & AR8216_ATU_STATUS) >> AR8216_ATU_STATUS_S;
787 a->portmap = (val2 & AR8216_ATU_PORTS) >> AR8216_ATU_PORTS_S;
788 a->mac[0] = (val0 & AR8216_ATU_ADDR5) >> AR8216_ATU_ADDR5_S;
789 a->mac[1] = (val0 & AR8216_ATU_ADDR4) >> AR8216_ATU_ADDR4_S;
790 a->mac[2] = (val1 & AR8216_ATU_ADDR3) >> AR8216_ATU_ADDR3_S;
791 a->mac[3] = (val1 & AR8216_ATU_ADDR2) >> AR8216_ATU_ADDR2_S;
792 a->mac[4] = (val1 & AR8216_ATU_ADDR1) >> AR8216_ATU_ADDR1_S;
793 a->mac[5] = (val1 & AR8216_ATU_ADDR0) >> AR8216_ATU_ADDR0_S;
799 ar8236_setup_port(struct ar8xxx_priv *priv, int port, u32 members)
805 pvid = priv->vlan_id[priv->pvid[port]];
806 if (priv->vlan_tagged & (1 << port))
807 egress = AR8216_OUT_ADD_VLAN;
809 egress = AR8216_OUT_STRIP_VLAN;
810 ingress = AR8216_IN_SECURE;
813 egress = AR8216_OUT_KEEP;
814 ingress = AR8216_IN_PORT_ONLY;
817 ar8xxx_rmw(priv, AR8216_REG_PORT_CTRL(port),
818 AR8216_PORT_CTRL_LEARN | AR8216_PORT_CTRL_VLAN_MODE |
819 AR8216_PORT_CTRL_SINGLE_VLAN | AR8216_PORT_CTRL_STATE |
820 AR8216_PORT_CTRL_HEADER | AR8216_PORT_CTRL_LEARN_LOCK,
821 AR8216_PORT_CTRL_LEARN |
822 (egress << AR8216_PORT_CTRL_VLAN_MODE_S) |
823 (AR8216_PORT_STATE_FORWARD << AR8216_PORT_CTRL_STATE_S));
825 ar8xxx_rmw(priv, AR8236_REG_PORT_VLAN(port),
826 AR8236_PORT_VLAN_DEFAULT_ID,
827 (pvid << AR8236_PORT_VLAN_DEFAULT_ID_S));
829 ar8xxx_rmw(priv, AR8236_REG_PORT_VLAN2(port),
830 AR8236_PORT_VLAN2_VLAN_MODE |
831 AR8236_PORT_VLAN2_MEMBER,
832 (ingress << AR8236_PORT_VLAN2_VLAN_MODE_S) |
833 (members << AR8236_PORT_VLAN2_MEMBER_S));
837 ar8236_init_globals(struct ar8xxx_priv *priv)
839 /* enable jumbo frames */
840 ar8xxx_rmw(priv, AR8216_REG_GLOBAL_CTRL,
841 AR8316_GCTRL_MTU, 9018 + 8 + 2);
843 /* enable cpu port to receive arp frames */
844 ar8xxx_reg_set(priv, AR8216_REG_ATU_CTRL,
845 AR8236_ATU_CTRL_RES);
847 /* enable cpu port to receive multicast and broadcast frames */
848 ar8xxx_reg_set(priv, AR8216_REG_FLOOD_MASK,
849 AR8236_FM_CPU_BROADCAST_EN | AR8236_FM_CPU_BCAST_FWD_EN);
851 /* Enable MIB counters */
852 ar8xxx_rmw(priv, AR8216_REG_MIB_FUNC, AR8216_MIB_FUNC | AR8236_MIB_EN,
853 (AR8216_MIB_FUNC_NO_OP << AR8216_MIB_FUNC_S) |
858 ar8316_hw_init(struct ar8xxx_priv *priv)
862 val = ar8xxx_read(priv, AR8316_REG_POSTRIP);
864 if (priv->phy->interface == PHY_INTERFACE_MODE_RGMII) {
865 if (priv->port4_phy) {
866 /* value taken from Ubiquiti RouterStation Pro */
868 pr_info("ar8316: Using port 4 as PHY\n");
871 pr_info("ar8316: Using port 4 as switch port\n");
873 } else if (priv->phy->interface == PHY_INTERFACE_MODE_GMII) {
874 /* value taken from AVM Fritz!Box 7390 sources */
877 /* no known value for phy interface */
878 pr_err("ar8316: unsupported mii mode: %d.\n",
879 priv->phy->interface);
886 ar8xxx_write(priv, AR8316_REG_POSTRIP, newval);
888 if (priv->port4_phy &&
889 priv->phy->interface == PHY_INTERFACE_MODE_RGMII) {
890 /* work around for phy4 rgmii mode */
891 ar8xxx_phy_dbg_write(priv, 4, 0x12, 0x480c);
893 ar8xxx_phy_dbg_write(priv, 4, 0x0, 0x824e);
895 ar8xxx_phy_dbg_write(priv, 4, 0x5, 0x3d47);
899 ar8xxx_phy_init(priv);
902 priv->initialized = true;
907 ar8316_init_globals(struct ar8xxx_priv *priv)
909 /* standard atheros magic */
910 ar8xxx_write(priv, 0x38, 0xc000050e);
912 /* enable cpu port to receive multicast and broadcast frames */
913 ar8xxx_write(priv, AR8216_REG_FLOOD_MASK, 0x003f003f);
915 /* enable jumbo frames */
916 ar8xxx_rmw(priv, AR8216_REG_GLOBAL_CTRL,
917 AR8316_GCTRL_MTU, 9018 + 8 + 2);
919 /* Enable MIB counters */
920 ar8xxx_rmw(priv, AR8216_REG_MIB_FUNC, AR8216_MIB_FUNC | AR8236_MIB_EN,
921 (AR8216_MIB_FUNC_NO_OP << AR8216_MIB_FUNC_S) |
926 ar8xxx_sw_set_vlan(struct switch_dev *dev, const struct switch_attr *attr,
927 struct switch_val *val)
929 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
930 priv->vlan = !!val->value.i;
935 ar8xxx_sw_get_vlan(struct switch_dev *dev, const struct switch_attr *attr,
936 struct switch_val *val)
938 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
939 val->value.i = priv->vlan;
945 ar8xxx_sw_set_pvid(struct switch_dev *dev, int port, int vlan)
947 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
949 /* make sure no invalid PVIDs get set */
951 if (vlan < 0 || vlan >= dev->vlans ||
952 port < 0 || port >= AR8X16_MAX_PORTS)
955 priv->pvid[port] = vlan;
960 ar8xxx_sw_get_pvid(struct switch_dev *dev, int port, int *vlan)
962 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
964 if (port < 0 || port >= AR8X16_MAX_PORTS)
967 *vlan = priv->pvid[port];
972 ar8xxx_sw_set_vid(struct switch_dev *dev, const struct switch_attr *attr,
973 struct switch_val *val)
975 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
977 if (val->port_vlan >= AR8X16_MAX_VLANS)
980 priv->vlan_id[val->port_vlan] = val->value.i;
985 ar8xxx_sw_get_vid(struct switch_dev *dev, const struct switch_attr *attr,
986 struct switch_val *val)
988 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
989 val->value.i = priv->vlan_id[val->port_vlan];
994 ar8xxx_sw_get_port_link(struct switch_dev *dev, int port,
995 struct switch_port_link *link)
997 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
999 ar8216_read_port_link(priv, port, link);
1004 ar8xxx_sw_get_ports(struct switch_dev *dev, struct switch_val *val)
1006 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1010 if (val->port_vlan >= AR8X16_MAX_VLANS)
1013 ports = priv->vlan_table[val->port_vlan];
1015 for (i = 0; i < dev->ports; i++) {
1016 struct switch_port *p;
1018 if (!(ports & (1 << i)))
1021 p = &val->value.ports[val->len++];
1023 if (priv->vlan_tagged & (1 << i))
1024 p->flags = (1 << SWITCH_PORT_FLAG_TAGGED);
1032 ar8xxx_sw_set_ports(struct switch_dev *dev, struct switch_val *val)
1034 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1035 u8 *vt = &priv->vlan_table[val->port_vlan];
1039 for (i = 0; i < val->len; i++) {
1040 struct switch_port *p = &val->value.ports[i];
1042 if (p->flags & (1 << SWITCH_PORT_FLAG_TAGGED)) {
1043 priv->vlan_tagged |= (1 << p->id);
1045 priv->vlan_tagged &= ~(1 << p->id);
1046 priv->pvid[p->id] = val->port_vlan;
1048 /* make sure that an untagged port does not
1049 * appear in other vlans */
1050 for (j = 0; j < AR8X16_MAX_VLANS; j++) {
1051 if (j == val->port_vlan)
1053 priv->vlan_table[j] &= ~(1 << p->id);
1063 ar8216_set_mirror_regs(struct ar8xxx_priv *priv)
1067 /* reset all mirror registers */
1068 ar8xxx_rmw(priv, AR8216_REG_GLOBAL_CPUPORT,
1069 AR8216_GLOBAL_CPUPORT_MIRROR_PORT,
1070 (0xF << AR8216_GLOBAL_CPUPORT_MIRROR_PORT_S));
1071 for (port = 0; port < AR8216_NUM_PORTS; port++) {
1072 ar8xxx_reg_clear(priv, AR8216_REG_PORT_CTRL(port),
1073 AR8216_PORT_CTRL_MIRROR_RX);
1075 ar8xxx_reg_clear(priv, AR8216_REG_PORT_CTRL(port),
1076 AR8216_PORT_CTRL_MIRROR_TX);
1079 /* now enable mirroring if necessary */
1080 if (priv->source_port >= AR8216_NUM_PORTS ||
1081 priv->monitor_port >= AR8216_NUM_PORTS ||
1082 priv->source_port == priv->monitor_port) {
1086 ar8xxx_rmw(priv, AR8216_REG_GLOBAL_CPUPORT,
1087 AR8216_GLOBAL_CPUPORT_MIRROR_PORT,
1088 (priv->monitor_port << AR8216_GLOBAL_CPUPORT_MIRROR_PORT_S));
1090 if (priv->mirror_rx)
1091 ar8xxx_reg_set(priv, AR8216_REG_PORT_CTRL(priv->source_port),
1092 AR8216_PORT_CTRL_MIRROR_RX);
1094 if (priv->mirror_tx)
1095 ar8xxx_reg_set(priv, AR8216_REG_PORT_CTRL(priv->source_port),
1096 AR8216_PORT_CTRL_MIRROR_TX);
1100 ar8xxx_age_time_val(int age_time)
1102 return (age_time + AR8XXX_REG_ARL_CTRL_AGE_TIME_SECS / 2) /
1103 AR8XXX_REG_ARL_CTRL_AGE_TIME_SECS;
1107 ar8xxx_set_age_time(struct ar8xxx_priv *priv, int reg)
1109 u32 age_time = ar8xxx_age_time_val(priv->arl_age_time);
1110 ar8xxx_rmw(priv, reg, AR8216_ATU_CTRL_AGE_TIME, age_time << AR8216_ATU_CTRL_AGE_TIME_S);
1114 ar8xxx_sw_hw_apply(struct switch_dev *dev)
1116 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1117 const struct ar8xxx_chip *chip = priv->chip;
1118 u8 portmask[AR8X16_MAX_PORTS];
1121 mutex_lock(&priv->reg_mutex);
1122 /* flush all vlan translation unit entries */
1123 priv->chip->vtu_flush(priv);
1125 memset(portmask, 0, sizeof(portmask));
1127 /* calculate the port destination masks and load vlans
1128 * into the vlan translation unit */
1129 for (j = 0; j < AR8X16_MAX_VLANS; j++) {
1130 u8 vp = priv->vlan_table[j];
1135 for (i = 0; i < dev->ports; i++) {
1138 portmask[i] |= vp & ~mask;
1141 chip->vtu_load_vlan(priv, priv->vlan_id[j],
1142 priv->vlan_table[j]);
1146 * isolate all ports, but connect them to the cpu port */
1147 for (i = 0; i < dev->ports; i++) {
1148 if (i == AR8216_PORT_CPU)
1151 portmask[i] = 1 << AR8216_PORT_CPU;
1152 portmask[AR8216_PORT_CPU] |= (1 << i);
1156 /* update the port destination mask registers and tag settings */
1157 for (i = 0; i < dev->ports; i++) {
1158 chip->setup_port(priv, i, portmask[i]);
1161 chip->set_mirror_regs(priv);
1164 if (chip->reg_arl_ctrl)
1165 ar8xxx_set_age_time(priv, chip->reg_arl_ctrl);
1167 mutex_unlock(&priv->reg_mutex);
1172 ar8xxx_sw_reset_switch(struct switch_dev *dev)
1174 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1175 const struct ar8xxx_chip *chip = priv->chip;
1178 mutex_lock(&priv->reg_mutex);
1179 memset(&priv->vlan, 0, sizeof(struct ar8xxx_priv) -
1180 offsetof(struct ar8xxx_priv, vlan));
1182 for (i = 0; i < AR8X16_MAX_VLANS; i++)
1183 priv->vlan_id[i] = i;
1185 /* Configure all ports */
1186 for (i = 0; i < dev->ports; i++)
1187 chip->init_port(priv, i);
1189 priv->mirror_rx = false;
1190 priv->mirror_tx = false;
1191 priv->source_port = 0;
1192 priv->monitor_port = 0;
1193 priv->arl_age_time = AR8XXX_DEFAULT_ARL_AGE_TIME;
1195 chip->init_globals(priv);
1196 chip->atu_flush(priv);
1198 mutex_unlock(&priv->reg_mutex);
1200 return chip->sw_hw_apply(dev);
1204 ar8xxx_sw_set_reset_mibs(struct switch_dev *dev,
1205 const struct switch_attr *attr,
1206 struct switch_val *val)
1208 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1212 if (!ar8xxx_has_mib_counters(priv))
1215 mutex_lock(&priv->mib_lock);
1217 len = priv->dev.ports * priv->chip->num_mibs *
1218 sizeof(*priv->mib_stats);
1219 memset(priv->mib_stats, '\0', len);
1220 ret = ar8xxx_mib_flush(priv);
1227 mutex_unlock(&priv->mib_lock);
1232 ar8xxx_sw_set_mirror_rx_enable(struct switch_dev *dev,
1233 const struct switch_attr *attr,
1234 struct switch_val *val)
1236 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1238 mutex_lock(&priv->reg_mutex);
1239 priv->mirror_rx = !!val->value.i;
1240 priv->chip->set_mirror_regs(priv);
1241 mutex_unlock(&priv->reg_mutex);
1247 ar8xxx_sw_get_mirror_rx_enable(struct switch_dev *dev,
1248 const struct switch_attr *attr,
1249 struct switch_val *val)
1251 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1252 val->value.i = priv->mirror_rx;
1257 ar8xxx_sw_set_mirror_tx_enable(struct switch_dev *dev,
1258 const struct switch_attr *attr,
1259 struct switch_val *val)
1261 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1263 mutex_lock(&priv->reg_mutex);
1264 priv->mirror_tx = !!val->value.i;
1265 priv->chip->set_mirror_regs(priv);
1266 mutex_unlock(&priv->reg_mutex);
1272 ar8xxx_sw_get_mirror_tx_enable(struct switch_dev *dev,
1273 const struct switch_attr *attr,
1274 struct switch_val *val)
1276 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1277 val->value.i = priv->mirror_tx;
1282 ar8xxx_sw_set_mirror_monitor_port(struct switch_dev *dev,
1283 const struct switch_attr *attr,
1284 struct switch_val *val)
1286 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1288 mutex_lock(&priv->reg_mutex);
1289 priv->monitor_port = val->value.i;
1290 priv->chip->set_mirror_regs(priv);
1291 mutex_unlock(&priv->reg_mutex);
1297 ar8xxx_sw_get_mirror_monitor_port(struct switch_dev *dev,
1298 const struct switch_attr *attr,
1299 struct switch_val *val)
1301 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1302 val->value.i = priv->monitor_port;
1307 ar8xxx_sw_set_mirror_source_port(struct switch_dev *dev,
1308 const struct switch_attr *attr,
1309 struct switch_val *val)
1311 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1313 mutex_lock(&priv->reg_mutex);
1314 priv->source_port = val->value.i;
1315 priv->chip->set_mirror_regs(priv);
1316 mutex_unlock(&priv->reg_mutex);
1322 ar8xxx_sw_get_mirror_source_port(struct switch_dev *dev,
1323 const struct switch_attr *attr,
1324 struct switch_val *val)
1326 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1327 val->value.i = priv->source_port;
1332 ar8xxx_sw_set_port_reset_mib(struct switch_dev *dev,
1333 const struct switch_attr *attr,
1334 struct switch_val *val)
1336 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1340 if (!ar8xxx_has_mib_counters(priv))
1343 port = val->port_vlan;
1344 if (port >= dev->ports)
1347 mutex_lock(&priv->mib_lock);
1348 ret = ar8xxx_mib_capture(priv);
1352 ar8xxx_mib_fetch_port_stat(priv, port, true);
1357 mutex_unlock(&priv->mib_lock);
1362 ar8xxx_byte_to_str(char *buf, int len, u64 byte)
1367 if (byte >= 0x40000000) { /* 1 GiB */
1368 b = byte * 10 / 0x40000000;
1370 } else if (byte >= 0x100000) { /* 1 MiB */
1371 b = byte * 10 / 0x100000;
1373 } else if (byte >= 0x400) { /* 1 KiB */
1374 b = byte * 10 / 0x400;
1380 if (strcmp(unit, "Byte"))
1381 snprintf(buf, len, "%lu.%lu %s", b / 10, b % 10, unit);
1383 snprintf(buf, len, "%lu %s", b, unit);
1387 ar8xxx_sw_get_port_mib(struct switch_dev *dev,
1388 const struct switch_attr *attr,
1389 struct switch_val *val)
1391 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1392 const struct ar8xxx_chip *chip = priv->chip;
1393 u64 *mib_stats, mib_data;
1396 char *buf = priv->buf;
1398 const char *mib_name;
1400 bool mib_stats_empty = true;
1402 if (!ar8xxx_has_mib_counters(priv))
1405 port = val->port_vlan;
1406 if (port >= dev->ports)
1409 mutex_lock(&priv->mib_lock);
1410 ret = ar8xxx_mib_capture(priv);
1414 ar8xxx_mib_fetch_port_stat(priv, port, false);
1416 len += snprintf(buf + len, sizeof(priv->buf) - len,
1419 mib_stats = &priv->mib_stats[port * chip->num_mibs];
1420 for (i = 0; i < chip->num_mibs; i++) {
1421 mib_name = chip->mib_decs[i].name;
1422 mib_data = mib_stats[i];
1423 len += snprintf(buf + len, sizeof(priv->buf) - len,
1424 "%-12s: %llu\n", mib_name, mib_data);
1425 if ((!strcmp(mib_name, "TxByte") ||
1426 !strcmp(mib_name, "RxGoodByte")) &&
1428 ar8xxx_byte_to_str(buf1, sizeof(buf1), mib_data);
1429 --len; /* discard newline at the end of buf */
1430 len += snprintf(buf + len, sizeof(priv->buf) - len,
1433 if (mib_stats_empty && mib_data)
1434 mib_stats_empty = false;
1437 if (mib_stats_empty)
1438 len = snprintf(buf, sizeof(priv->buf), "No MIB data");
1446 mutex_unlock(&priv->mib_lock);
1451 ar8xxx_sw_set_arl_age_time(struct switch_dev *dev, const struct switch_attr *attr,
1452 struct switch_val *val)
1454 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1455 int age_time = val->value.i;
1461 age_time_val = ar8xxx_age_time_val(age_time);
1462 if (age_time_val == 0 || age_time_val > 0xffff)
1465 priv->arl_age_time = age_time;
1470 ar8xxx_sw_get_arl_age_time(struct switch_dev *dev, const struct switch_attr *attr,
1471 struct switch_val *val)
1473 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1474 val->value.i = priv->arl_age_time;
1479 ar8xxx_sw_get_arl_table(struct switch_dev *dev,
1480 const struct switch_attr *attr,
1481 struct switch_val *val)
1483 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1484 struct mii_bus *bus = priv->mii_bus;
1485 const struct ar8xxx_chip *chip = priv->chip;
1486 char *buf = priv->arl_buf;
1487 int i, j, k, len = 0;
1488 struct arl_entry *a, *a1;
1491 if (!chip->get_arl_entry)
1494 mutex_lock(&priv->reg_mutex);
1495 mutex_lock(&bus->mdio_lock);
1497 chip->get_arl_entry(priv, NULL, NULL, AR8XXX_ARL_INITIALIZE);
1499 for(i = 0; i < AR8XXX_NUM_ARL_RECORDS; ++i) {
1500 a = &priv->arl_table[i];
1502 chip->get_arl_entry(priv, a, &status, AR8XXX_ARL_GET_NEXT);
1508 * ARL table can include multiple valid entries
1509 * per MAC, just with differing status codes
1511 for (j = 0; j < i; ++j) {
1512 a1 = &priv->arl_table[j];
1513 if (!memcmp(a->mac, a1->mac, sizeof(a->mac))) {
1514 /* ignore ports already seen in former entry */
1515 a->portmap &= ~a1->portmap;
1522 mutex_unlock(&bus->mdio_lock);
1524 len += snprintf(buf + len, sizeof(priv->arl_buf) - len,
1525 "address resolution table\n");
1527 if (i == AR8XXX_NUM_ARL_RECORDS)
1528 len += snprintf(buf + len, sizeof(priv->arl_buf) - len,
1529 "Too many entries found, displaying the first %d only!\n",
1530 AR8XXX_NUM_ARL_RECORDS);
1532 for (j = 0; j < priv->dev.ports; ++j) {
1533 for (k = 0; k < i; ++k) {
1534 a = &priv->arl_table[k];
1535 if (!(a->portmap & BIT(j)))
1537 len += snprintf(buf + len, sizeof(priv->arl_buf) - len,
1538 "Port %d: MAC %02x:%02x:%02x:%02x:%02x:%02x\n",
1540 a->mac[5], a->mac[4], a->mac[3],
1541 a->mac[2], a->mac[1], a->mac[0]);
1548 mutex_unlock(&priv->reg_mutex);
1554 ar8xxx_sw_set_flush_arl_table(struct switch_dev *dev,
1555 const struct switch_attr *attr,
1556 struct switch_val *val)
1558 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1561 mutex_lock(&priv->reg_mutex);
1562 ret = priv->chip->atu_flush(priv);
1563 mutex_unlock(&priv->reg_mutex);
1569 ar8xxx_sw_set_flush_port_arl_table(struct switch_dev *dev,
1570 const struct switch_attr *attr,
1571 struct switch_val *val)
1573 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1576 port = val->port_vlan;
1577 if (port >= dev->ports)
1580 mutex_lock(&priv->reg_mutex);
1581 ret = priv->chip->atu_flush_port(priv, port);
1582 mutex_unlock(&priv->reg_mutex);
1587 static const struct switch_attr ar8xxx_sw_attr_globals[] = {
1589 .type = SWITCH_TYPE_INT,
1590 .name = "enable_vlan",
1591 .description = "Enable VLAN mode",
1592 .set = ar8xxx_sw_set_vlan,
1593 .get = ar8xxx_sw_get_vlan,
1597 .type = SWITCH_TYPE_NOVAL,
1598 .name = "reset_mibs",
1599 .description = "Reset all MIB counters",
1600 .set = ar8xxx_sw_set_reset_mibs,
1603 .type = SWITCH_TYPE_INT,
1604 .name = "enable_mirror_rx",
1605 .description = "Enable mirroring of RX packets",
1606 .set = ar8xxx_sw_set_mirror_rx_enable,
1607 .get = ar8xxx_sw_get_mirror_rx_enable,
1611 .type = SWITCH_TYPE_INT,
1612 .name = "enable_mirror_tx",
1613 .description = "Enable mirroring of TX packets",
1614 .set = ar8xxx_sw_set_mirror_tx_enable,
1615 .get = ar8xxx_sw_get_mirror_tx_enable,
1619 .type = SWITCH_TYPE_INT,
1620 .name = "mirror_monitor_port",
1621 .description = "Mirror monitor port",
1622 .set = ar8xxx_sw_set_mirror_monitor_port,
1623 .get = ar8xxx_sw_get_mirror_monitor_port,
1624 .max = AR8216_NUM_PORTS - 1
1627 .type = SWITCH_TYPE_INT,
1628 .name = "mirror_source_port",
1629 .description = "Mirror source port",
1630 .set = ar8xxx_sw_set_mirror_source_port,
1631 .get = ar8xxx_sw_get_mirror_source_port,
1632 .max = AR8216_NUM_PORTS - 1
1635 .type = SWITCH_TYPE_STRING,
1636 .name = "arl_table",
1637 .description = "Get ARL table",
1639 .get = ar8xxx_sw_get_arl_table,
1642 .type = SWITCH_TYPE_NOVAL,
1643 .name = "flush_arl_table",
1644 .description = "Flush ARL table",
1645 .set = ar8xxx_sw_set_flush_arl_table,
1649 const struct switch_attr ar8xxx_sw_attr_port[] = {
1651 .type = SWITCH_TYPE_NOVAL,
1652 .name = "reset_mib",
1653 .description = "Reset single port MIB counters",
1654 .set = ar8xxx_sw_set_port_reset_mib,
1657 .type = SWITCH_TYPE_STRING,
1659 .description = "Get port's MIB counters",
1661 .get = ar8xxx_sw_get_port_mib,
1664 .type = SWITCH_TYPE_NOVAL,
1665 .name = "flush_arl_table",
1666 .description = "Flush port's ARL table entries",
1667 .set = ar8xxx_sw_set_flush_port_arl_table,
1671 const struct switch_attr ar8xxx_sw_attr_vlan[1] = {
1673 .type = SWITCH_TYPE_INT,
1675 .description = "VLAN ID (0-4094)",
1676 .set = ar8xxx_sw_set_vid,
1677 .get = ar8xxx_sw_get_vid,
1682 static const struct switch_dev_ops ar8xxx_sw_ops = {
1684 .attr = ar8xxx_sw_attr_globals,
1685 .n_attr = ARRAY_SIZE(ar8xxx_sw_attr_globals),
1688 .attr = ar8xxx_sw_attr_port,
1689 .n_attr = ARRAY_SIZE(ar8xxx_sw_attr_port),
1692 .attr = ar8xxx_sw_attr_vlan,
1693 .n_attr = ARRAY_SIZE(ar8xxx_sw_attr_vlan),
1695 .get_port_pvid = ar8xxx_sw_get_pvid,
1696 .set_port_pvid = ar8xxx_sw_set_pvid,
1697 .get_vlan_ports = ar8xxx_sw_get_ports,
1698 .set_vlan_ports = ar8xxx_sw_set_ports,
1699 .apply_config = ar8xxx_sw_hw_apply,
1700 .reset_switch = ar8xxx_sw_reset_switch,
1701 .get_port_link = ar8xxx_sw_get_port_link,
1702 /* The following op is disabled as it hogs the CPU and degrades performance.
1703 An implementation has been attempted in 4d8a66d but reading MIB data is slow
1706 The high CPU load has been traced down to the ar8xxx_reg_wait() call in
1707 ar8xxx_mib_op(), which has to usleep_range() till the MIB busy flag set by
1708 the request to update the MIB counter is cleared. */
1710 .get_port_stats = ar8xxx_sw_get_port_stats,
1714 static const struct ar8xxx_chip ar8216_chip = {
1715 .caps = AR8XXX_CAP_MIB_COUNTERS,
1717 .reg_port_stats_start = 0x19000,
1718 .reg_port_stats_length = 0xa0,
1719 .reg_arl_ctrl = AR8216_REG_ATU_CTRL,
1721 .name = "Atheros AR8216",
1722 .ports = AR8216_NUM_PORTS,
1723 .vlans = AR8216_NUM_VLANS,
1724 .swops = &ar8xxx_sw_ops,
1726 .hw_init = ar8216_hw_init,
1727 .init_globals = ar8216_init_globals,
1728 .init_port = ar8216_init_port,
1729 .setup_port = ar8216_setup_port,
1730 .read_port_status = ar8216_read_port_status,
1731 .atu_flush = ar8216_atu_flush,
1732 .atu_flush_port = ar8216_atu_flush_port,
1733 .vtu_flush = ar8216_vtu_flush,
1734 .vtu_load_vlan = ar8216_vtu_load_vlan,
1735 .set_mirror_regs = ar8216_set_mirror_regs,
1736 .get_arl_entry = ar8216_get_arl_entry,
1737 .sw_hw_apply = ar8xxx_sw_hw_apply,
1739 .num_mibs = ARRAY_SIZE(ar8216_mibs),
1740 .mib_decs = ar8216_mibs,
1741 .mib_func = AR8216_REG_MIB_FUNC
1744 static const struct ar8xxx_chip ar8236_chip = {
1745 .caps = AR8XXX_CAP_MIB_COUNTERS,
1747 .reg_port_stats_start = 0x20000,
1748 .reg_port_stats_length = 0x100,
1749 .reg_arl_ctrl = AR8216_REG_ATU_CTRL,
1751 .name = "Atheros AR8236",
1752 .ports = AR8216_NUM_PORTS,
1753 .vlans = AR8216_NUM_VLANS,
1754 .swops = &ar8xxx_sw_ops,
1756 .hw_init = ar8216_hw_init,
1757 .init_globals = ar8236_init_globals,
1758 .init_port = ar8216_init_port,
1759 .setup_port = ar8236_setup_port,
1760 .read_port_status = ar8216_read_port_status,
1761 .atu_flush = ar8216_atu_flush,
1762 .atu_flush_port = ar8216_atu_flush_port,
1763 .vtu_flush = ar8216_vtu_flush,
1764 .vtu_load_vlan = ar8216_vtu_load_vlan,
1765 .set_mirror_regs = ar8216_set_mirror_regs,
1766 .get_arl_entry = ar8216_get_arl_entry,
1767 .sw_hw_apply = ar8xxx_sw_hw_apply,
1769 .num_mibs = ARRAY_SIZE(ar8236_mibs),
1770 .mib_decs = ar8236_mibs,
1771 .mib_func = AR8216_REG_MIB_FUNC
1774 static const struct ar8xxx_chip ar8316_chip = {
1775 .caps = AR8XXX_CAP_GIGE | AR8XXX_CAP_MIB_COUNTERS,
1777 .reg_port_stats_start = 0x20000,
1778 .reg_port_stats_length = 0x100,
1779 .reg_arl_ctrl = AR8216_REG_ATU_CTRL,
1781 .name = "Atheros AR8316",
1782 .ports = AR8216_NUM_PORTS,
1783 .vlans = AR8X16_MAX_VLANS,
1784 .swops = &ar8xxx_sw_ops,
1786 .hw_init = ar8316_hw_init,
1787 .init_globals = ar8316_init_globals,
1788 .init_port = ar8216_init_port,
1789 .setup_port = ar8216_setup_port,
1790 .read_port_status = ar8216_read_port_status,
1791 .atu_flush = ar8216_atu_flush,
1792 .atu_flush_port = ar8216_atu_flush_port,
1793 .vtu_flush = ar8216_vtu_flush,
1794 .vtu_load_vlan = ar8216_vtu_load_vlan,
1795 .set_mirror_regs = ar8216_set_mirror_regs,
1796 .get_arl_entry = ar8216_get_arl_entry,
1797 .sw_hw_apply = ar8xxx_sw_hw_apply,
1799 .num_mibs = ARRAY_SIZE(ar8236_mibs),
1800 .mib_decs = ar8236_mibs,
1801 .mib_func = AR8216_REG_MIB_FUNC
1805 ar8xxx_id_chip(struct ar8xxx_priv *priv)
1811 val = ar8xxx_read(priv, AR8216_REG_CTRL);
1815 id = val & (AR8216_CTRL_REVISION | AR8216_CTRL_VERSION);
1816 for (i = 0; i < AR8X16_PROBE_RETRIES; i++) {
1819 val = ar8xxx_read(priv, AR8216_REG_CTRL);
1823 t = val & (AR8216_CTRL_REVISION | AR8216_CTRL_VERSION);
1828 priv->chip_ver = (id & AR8216_CTRL_VERSION) >> AR8216_CTRL_VERSION_S;
1829 priv->chip_rev = (id & AR8216_CTRL_REVISION);
1831 switch (priv->chip_ver) {
1832 case AR8XXX_VER_AR8216:
1833 priv->chip = &ar8216_chip;
1835 case AR8XXX_VER_AR8236:
1836 priv->chip = &ar8236_chip;
1838 case AR8XXX_VER_AR8316:
1839 priv->chip = &ar8316_chip;
1841 case AR8XXX_VER_AR8327:
1842 priv->chip = &ar8327_chip;
1844 case AR8XXX_VER_AR8337:
1845 priv->chip = &ar8337_chip;
1848 pr_err("ar8216: Unknown Atheros device [ver=%d, rev=%d]\n",
1849 priv->chip_ver, priv->chip_rev);
1858 ar8xxx_mib_work_func(struct work_struct *work)
1860 struct ar8xxx_priv *priv;
1863 priv = container_of(work, struct ar8xxx_priv, mib_work.work);
1865 mutex_lock(&priv->mib_lock);
1867 err = ar8xxx_mib_capture(priv);
1871 ar8xxx_mib_fetch_port_stat(priv, priv->mib_next_port, false);
1874 priv->mib_next_port++;
1875 if (priv->mib_next_port >= priv->dev.ports)
1876 priv->mib_next_port = 0;
1878 mutex_unlock(&priv->mib_lock);
1879 schedule_delayed_work(&priv->mib_work,
1880 msecs_to_jiffies(AR8XXX_MIB_WORK_DELAY));
1884 ar8xxx_mib_init(struct ar8xxx_priv *priv)
1888 if (!ar8xxx_has_mib_counters(priv))
1891 BUG_ON(!priv->chip->mib_decs || !priv->chip->num_mibs);
1893 len = priv->dev.ports * priv->chip->num_mibs *
1894 sizeof(*priv->mib_stats);
1895 priv->mib_stats = kzalloc(len, GFP_KERNEL);
1897 if (!priv->mib_stats)
1904 ar8xxx_mib_start(struct ar8xxx_priv *priv)
1906 if (!ar8xxx_has_mib_counters(priv))
1909 schedule_delayed_work(&priv->mib_work,
1910 msecs_to_jiffies(AR8XXX_MIB_WORK_DELAY));
1914 ar8xxx_mib_stop(struct ar8xxx_priv *priv)
1916 if (!ar8xxx_has_mib_counters(priv))
1919 cancel_delayed_work_sync(&priv->mib_work);
1922 static struct ar8xxx_priv *
1925 struct ar8xxx_priv *priv;
1927 priv = kzalloc(sizeof(struct ar8xxx_priv), GFP_KERNEL);
1931 mutex_init(&priv->reg_mutex);
1932 mutex_init(&priv->mib_lock);
1933 INIT_DELAYED_WORK(&priv->mib_work, ar8xxx_mib_work_func);
1939 ar8xxx_free(struct ar8xxx_priv *priv)
1941 if (priv->chip && priv->chip->cleanup)
1942 priv->chip->cleanup(priv);
1944 kfree(priv->chip_data);
1945 kfree(priv->mib_stats);
1950 ar8xxx_probe_switch(struct ar8xxx_priv *priv)
1952 const struct ar8xxx_chip *chip;
1953 struct switch_dev *swdev;
1956 ret = ar8xxx_id_chip(priv);
1963 swdev->cpu_port = AR8216_PORT_CPU;
1964 swdev->name = chip->name;
1965 swdev->vlans = chip->vlans;
1966 swdev->ports = chip->ports;
1967 swdev->ops = chip->swops;
1969 ret = ar8xxx_mib_init(priv);
1977 ar8xxx_start(struct ar8xxx_priv *priv)
1983 ret = priv->chip->hw_init(priv);
1987 ret = ar8xxx_sw_reset_switch(&priv->dev);
1993 ar8xxx_mib_start(priv);
1999 ar8xxx_phy_config_init(struct phy_device *phydev)
2001 struct ar8xxx_priv *priv = phydev->priv;
2002 struct net_device *dev = phydev->attached_dev;
2008 if (priv->chip->config_at_probe)
2009 return ar8xxx_phy_check_aneg(phydev);
2013 if (phydev->mdio.addr != 0) {
2014 if (chip_is_ar8316(priv)) {
2015 /* switch device has been initialized, reinit */
2016 priv->dev.ports = (AR8216_NUM_PORTS - 1);
2017 priv->initialized = false;
2018 priv->port4_phy = true;
2019 ar8316_hw_init(priv);
2026 ret = ar8xxx_start(priv);
2030 /* VID fixup only needed on ar8216 */
2031 if (chip_is_ar8216(priv)) {
2032 dev->phy_ptr = priv;
2033 dev->priv_flags |= IFF_NO_IP_ALIGN;
2034 dev->eth_mangle_rx = ar8216_mangle_rx;
2035 dev->eth_mangle_tx = ar8216_mangle_tx;
2042 ar8xxx_check_link_states(struct ar8xxx_priv *priv)
2044 bool link_new, changed = false;
2048 mutex_lock(&priv->reg_mutex);
2050 for (i = 0; i < priv->dev.ports; i++) {
2051 status = priv->chip->read_port_status(priv, i);
2052 link_new = !!(status & AR8216_PORT_STATUS_LINK_UP);
2053 if (link_new == priv->link_up[i])
2056 priv->link_up[i] = link_new;
2058 /* flush ARL entries for this port if it went down*/
2060 priv->chip->atu_flush_port(priv, i);
2061 dev_info(&priv->phy->mdio.dev, "Port %d is %s\n",
2062 i, link_new ? "up" : "down");
2065 mutex_unlock(&priv->reg_mutex);
2071 ar8xxx_phy_read_status(struct phy_device *phydev)
2073 struct ar8xxx_priv *priv = phydev->priv;
2074 struct switch_port_link link;
2076 /* check for switch port link changes */
2077 if (phydev->state == PHY_CHANGELINK)
2078 ar8xxx_check_link_states(priv);
2080 if (phydev->mdio.addr != 0)
2081 return genphy_read_status(phydev);
2083 ar8216_read_port_link(priv, phydev->mdio.addr, &link);
2084 phydev->link = !!link.link;
2088 switch (link.speed) {
2089 case SWITCH_PORT_SPEED_10:
2090 phydev->speed = SPEED_10;
2092 case SWITCH_PORT_SPEED_100:
2093 phydev->speed = SPEED_100;
2095 case SWITCH_PORT_SPEED_1000:
2096 phydev->speed = SPEED_1000;
2101 phydev->duplex = link.duplex ? DUPLEX_FULL : DUPLEX_HALF;
2103 phydev->state = PHY_RUNNING;
2104 netif_carrier_on(phydev->attached_dev);
2105 if (phydev->adjust_link)
2106 phydev->adjust_link(phydev->attached_dev);
2112 ar8xxx_phy_config_aneg(struct phy_device *phydev)
2114 if (phydev->mdio.addr == 0)
2117 return genphy_config_aneg(phydev);
2120 static const u32 ar8xxx_phy_ids[] = {
2122 0x004dd034, /* AR8327 */
2123 0x004dd036, /* AR8337 */
2126 0x004dd043, /* AR8236 */
2130 ar8xxx_phy_match(u32 phy_id)
2134 for (i = 0; i < ARRAY_SIZE(ar8xxx_phy_ids); i++)
2135 if (phy_id == ar8xxx_phy_ids[i])
2142 ar8xxx_is_possible(struct mii_bus *bus)
2144 unsigned int i, found_phys = 0;
2146 for (i = 0; i < 5; i++) {
2149 phy_id = mdiobus_read(bus, i, MII_PHYSID1) << 16;
2150 phy_id |= mdiobus_read(bus, i, MII_PHYSID2);
2151 if (ar8xxx_phy_match(phy_id)) {
2153 } else if (phy_id) {
2154 pr_debug("ar8xxx: unknown PHY at %s:%02x id:%08x\n",
2155 dev_name(&bus->dev), i, phy_id);
2158 return !!found_phys;
2162 ar8xxx_phy_probe(struct phy_device *phydev)
2164 struct ar8xxx_priv *priv;
2165 struct switch_dev *swdev;
2168 /* skip PHYs at unused adresses */
2169 if (phydev->mdio.addr != 0 && phydev->mdio.addr != 4)
2172 if (!ar8xxx_is_possible(phydev->mdio.bus))
2175 mutex_lock(&ar8xxx_dev_list_lock);
2176 list_for_each_entry(priv, &ar8xxx_dev_list, list)
2177 if (priv->mii_bus == phydev->mdio.bus)
2180 priv = ar8xxx_create();
2186 priv->mii_bus = phydev->mdio.bus;
2188 ret = ar8xxx_probe_switch(priv);
2193 swdev->alias = dev_name(&priv->mii_bus->dev);
2194 ret = register_switch(swdev, NULL);
2198 pr_info("%s: %s rev. %u switch registered on %s\n",
2199 swdev->devname, swdev->name, priv->chip_rev,
2200 dev_name(&priv->mii_bus->dev));
2202 list_add(&priv->list, &ar8xxx_dev_list);
2207 if (phydev->mdio.addr == 0) {
2208 if (ar8xxx_has_gige(priv)) {
2209 phydev->supported = SUPPORTED_1000baseT_Full;
2210 phydev->advertising = ADVERTISED_1000baseT_Full;
2212 phydev->supported = SUPPORTED_100baseT_Full;
2213 phydev->advertising = ADVERTISED_100baseT_Full;
2216 if (priv->chip->config_at_probe) {
2219 ret = ar8xxx_start(priv);
2221 goto err_unregister_switch;
2224 if (ar8xxx_has_gige(priv)) {
2225 phydev->supported |= SUPPORTED_1000baseT_Full;
2226 phydev->advertising |= ADVERTISED_1000baseT_Full;
2230 phydev->priv = priv;
2232 mutex_unlock(&ar8xxx_dev_list_lock);
2236 err_unregister_switch:
2237 if (--priv->use_count)
2240 unregister_switch(&priv->dev);
2245 mutex_unlock(&ar8xxx_dev_list_lock);
2250 ar8xxx_phy_detach(struct phy_device *phydev)
2252 struct net_device *dev = phydev->attached_dev;
2257 dev->phy_ptr = NULL;
2258 dev->priv_flags &= ~IFF_NO_IP_ALIGN;
2259 dev->eth_mangle_rx = NULL;
2260 dev->eth_mangle_tx = NULL;
2264 ar8xxx_phy_remove(struct phy_device *phydev)
2266 struct ar8xxx_priv *priv = phydev->priv;
2271 phydev->priv = NULL;
2273 mutex_lock(&ar8xxx_dev_list_lock);
2275 if (--priv->use_count > 0) {
2276 mutex_unlock(&ar8xxx_dev_list_lock);
2280 list_del(&priv->list);
2281 mutex_unlock(&ar8xxx_dev_list_lock);
2283 unregister_switch(&priv->dev);
2284 ar8xxx_mib_stop(priv);
2289 ar8xxx_phy_soft_reset(struct phy_device *phydev)
2291 /* we don't need an extra reset */
2295 static struct phy_driver ar8xxx_phy_driver[] = {
2297 .phy_id = 0x004d0000,
2298 .name = "Atheros AR8216/AR8236/AR8316",
2299 .phy_id_mask = 0xffff0000,
2300 .features = PHY_BASIC_FEATURES,
2301 .probe = ar8xxx_phy_probe,
2302 .remove = ar8xxx_phy_remove,
2303 .detach = ar8xxx_phy_detach,
2304 .config_init = ar8xxx_phy_config_init,
2305 .config_aneg = ar8xxx_phy_config_aneg,
2306 .read_status = ar8xxx_phy_read_status,
2307 .soft_reset = ar8xxx_phy_soft_reset,
2311 module_phy_driver(ar8xxx_phy_driver);
2312 MODULE_LICENSE("GPL");