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/of_device.h>
27 #include <linux/of_mdio.h>
28 #include <linux/of_net.h>
29 #include <linux/bitops.h>
30 #include <net/genetlink.h>
31 #include <linux/switch.h>
32 #include <linux/delay.h>
33 #include <linux/phy.h>
34 #include <linux/etherdevice.h>
35 #include <linux/lockdep.h>
36 #include <linux/ar8216_platform.h>
37 #include <linux/workqueue.h>
38 #include <linux/version.h>
42 extern const struct ar8xxx_chip ar8327_chip;
43 extern const struct ar8xxx_chip ar8337_chip;
45 #define AR8XXX_MIB_WORK_DELAY 2000 /* msecs */
47 #define MIB_DESC(_s , _o, _n) \
54 static const struct ar8xxx_mib_desc ar8216_mibs[] = {
55 MIB_DESC(1, AR8216_STATS_RXBROAD, "RxBroad"),
56 MIB_DESC(1, AR8216_STATS_RXPAUSE, "RxPause"),
57 MIB_DESC(1, AR8216_STATS_RXMULTI, "RxMulti"),
58 MIB_DESC(1, AR8216_STATS_RXFCSERR, "RxFcsErr"),
59 MIB_DESC(1, AR8216_STATS_RXALIGNERR, "RxAlignErr"),
60 MIB_DESC(1, AR8216_STATS_RXRUNT, "RxRunt"),
61 MIB_DESC(1, AR8216_STATS_RXFRAGMENT, "RxFragment"),
62 MIB_DESC(1, AR8216_STATS_RX64BYTE, "Rx64Byte"),
63 MIB_DESC(1, AR8216_STATS_RX128BYTE, "Rx128Byte"),
64 MIB_DESC(1, AR8216_STATS_RX256BYTE, "Rx256Byte"),
65 MIB_DESC(1, AR8216_STATS_RX512BYTE, "Rx512Byte"),
66 MIB_DESC(1, AR8216_STATS_RX1024BYTE, "Rx1024Byte"),
67 MIB_DESC(1, AR8216_STATS_RXMAXBYTE, "RxMaxByte"),
68 MIB_DESC(1, AR8216_STATS_RXTOOLONG, "RxTooLong"),
69 MIB_DESC(2, AR8216_STATS_RXGOODBYTE, "RxGoodByte"),
70 MIB_DESC(2, AR8216_STATS_RXBADBYTE, "RxBadByte"),
71 MIB_DESC(1, AR8216_STATS_RXOVERFLOW, "RxOverFlow"),
72 MIB_DESC(1, AR8216_STATS_FILTERED, "Filtered"),
73 MIB_DESC(1, AR8216_STATS_TXBROAD, "TxBroad"),
74 MIB_DESC(1, AR8216_STATS_TXPAUSE, "TxPause"),
75 MIB_DESC(1, AR8216_STATS_TXMULTI, "TxMulti"),
76 MIB_DESC(1, AR8216_STATS_TXUNDERRUN, "TxUnderRun"),
77 MIB_DESC(1, AR8216_STATS_TX64BYTE, "Tx64Byte"),
78 MIB_DESC(1, AR8216_STATS_TX128BYTE, "Tx128Byte"),
79 MIB_DESC(1, AR8216_STATS_TX256BYTE, "Tx256Byte"),
80 MIB_DESC(1, AR8216_STATS_TX512BYTE, "Tx512Byte"),
81 MIB_DESC(1, AR8216_STATS_TX1024BYTE, "Tx1024Byte"),
82 MIB_DESC(1, AR8216_STATS_TXMAXBYTE, "TxMaxByte"),
83 MIB_DESC(1, AR8216_STATS_TXOVERSIZE, "TxOverSize"),
84 MIB_DESC(2, AR8216_STATS_TXBYTE, "TxByte"),
85 MIB_DESC(1, AR8216_STATS_TXCOLLISION, "TxCollision"),
86 MIB_DESC(1, AR8216_STATS_TXABORTCOL, "TxAbortCol"),
87 MIB_DESC(1, AR8216_STATS_TXMULTICOL, "TxMultiCol"),
88 MIB_DESC(1, AR8216_STATS_TXSINGLECOL, "TxSingleCol"),
89 MIB_DESC(1, AR8216_STATS_TXEXCDEFER, "TxExcDefer"),
90 MIB_DESC(1, AR8216_STATS_TXDEFER, "TxDefer"),
91 MIB_DESC(1, AR8216_STATS_TXLATECOL, "TxLateCol"),
94 const struct ar8xxx_mib_desc ar8236_mibs[39] = {
95 MIB_DESC(1, AR8236_STATS_RXBROAD, "RxBroad"),
96 MIB_DESC(1, AR8236_STATS_RXPAUSE, "RxPause"),
97 MIB_DESC(1, AR8236_STATS_RXMULTI, "RxMulti"),
98 MIB_DESC(1, AR8236_STATS_RXFCSERR, "RxFcsErr"),
99 MIB_DESC(1, AR8236_STATS_RXALIGNERR, "RxAlignErr"),
100 MIB_DESC(1, AR8236_STATS_RXRUNT, "RxRunt"),
101 MIB_DESC(1, AR8236_STATS_RXFRAGMENT, "RxFragment"),
102 MIB_DESC(1, AR8236_STATS_RX64BYTE, "Rx64Byte"),
103 MIB_DESC(1, AR8236_STATS_RX128BYTE, "Rx128Byte"),
104 MIB_DESC(1, AR8236_STATS_RX256BYTE, "Rx256Byte"),
105 MIB_DESC(1, AR8236_STATS_RX512BYTE, "Rx512Byte"),
106 MIB_DESC(1, AR8236_STATS_RX1024BYTE, "Rx1024Byte"),
107 MIB_DESC(1, AR8236_STATS_RX1518BYTE, "Rx1518Byte"),
108 MIB_DESC(1, AR8236_STATS_RXMAXBYTE, "RxMaxByte"),
109 MIB_DESC(1, AR8236_STATS_RXTOOLONG, "RxTooLong"),
110 MIB_DESC(2, AR8236_STATS_RXGOODBYTE, "RxGoodByte"),
111 MIB_DESC(2, AR8236_STATS_RXBADBYTE, "RxBadByte"),
112 MIB_DESC(1, AR8236_STATS_RXOVERFLOW, "RxOverFlow"),
113 MIB_DESC(1, AR8236_STATS_FILTERED, "Filtered"),
114 MIB_DESC(1, AR8236_STATS_TXBROAD, "TxBroad"),
115 MIB_DESC(1, AR8236_STATS_TXPAUSE, "TxPause"),
116 MIB_DESC(1, AR8236_STATS_TXMULTI, "TxMulti"),
117 MIB_DESC(1, AR8236_STATS_TXUNDERRUN, "TxUnderRun"),
118 MIB_DESC(1, AR8236_STATS_TX64BYTE, "Tx64Byte"),
119 MIB_DESC(1, AR8236_STATS_TX128BYTE, "Tx128Byte"),
120 MIB_DESC(1, AR8236_STATS_TX256BYTE, "Tx256Byte"),
121 MIB_DESC(1, AR8236_STATS_TX512BYTE, "Tx512Byte"),
122 MIB_DESC(1, AR8236_STATS_TX1024BYTE, "Tx1024Byte"),
123 MIB_DESC(1, AR8236_STATS_TX1518BYTE, "Tx1518Byte"),
124 MIB_DESC(1, AR8236_STATS_TXMAXBYTE, "TxMaxByte"),
125 MIB_DESC(1, AR8236_STATS_TXOVERSIZE, "TxOverSize"),
126 MIB_DESC(2, AR8236_STATS_TXBYTE, "TxByte"),
127 MIB_DESC(1, AR8236_STATS_TXCOLLISION, "TxCollision"),
128 MIB_DESC(1, AR8236_STATS_TXABORTCOL, "TxAbortCol"),
129 MIB_DESC(1, AR8236_STATS_TXMULTICOL, "TxMultiCol"),
130 MIB_DESC(1, AR8236_STATS_TXSINGLECOL, "TxSingleCol"),
131 MIB_DESC(1, AR8236_STATS_TXEXCDEFER, "TxExcDefer"),
132 MIB_DESC(1, AR8236_STATS_TXDEFER, "TxDefer"),
133 MIB_DESC(1, AR8236_STATS_TXLATECOL, "TxLateCol"),
136 static DEFINE_MUTEX(ar8xxx_dev_list_lock);
137 static LIST_HEAD(ar8xxx_dev_list);
139 /* inspired by phy_poll_reset in drivers/net/phy/phy_device.c */
141 ar8xxx_phy_poll_reset(struct mii_bus *bus)
143 unsigned int sleep_msecs = 20;
146 for (elapsed = sleep_msecs; elapsed <= 600;
147 elapsed += sleep_msecs) {
149 for (i = 0; i < AR8XXX_NUM_PHYS; i++) {
150 ret = mdiobus_read(bus, i, MII_BMCR);
153 if (ret & BMCR_RESET)
155 if (i == AR8XXX_NUM_PHYS - 1) {
156 usleep_range(1000, 2000);
165 ar8xxx_phy_check_aneg(struct phy_device *phydev)
169 if (phydev->autoneg != AUTONEG_ENABLE)
172 * BMCR_ANENABLE might have been cleared
173 * by phy_init_hw in certain kernel versions
174 * therefore check for it
176 ret = phy_read(phydev, MII_BMCR);
179 if (ret & BMCR_ANENABLE)
182 dev_info(&phydev->mdio.dev, "ANEG disabled, re-enabling ...\n");
183 ret |= BMCR_ANENABLE | BMCR_ANRESTART;
184 return phy_write(phydev, MII_BMCR, ret);
188 ar8xxx_phy_init(struct ar8xxx_priv *priv)
193 bus = priv->sw_mii_bus ?: priv->mii_bus;
194 for (i = 0; i < AR8XXX_NUM_PHYS; i++) {
195 if (priv->chip->phy_fixup)
196 priv->chip->phy_fixup(priv, i);
198 /* initialize the port itself */
199 mdiobus_write(bus, i, MII_ADVERTISE,
200 ADVERTISE_ALL | ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM);
201 if (ar8xxx_has_gige(priv))
202 mdiobus_write(bus, i, MII_CTRL1000, ADVERTISE_1000FULL);
203 mdiobus_write(bus, i, MII_BMCR, BMCR_RESET | BMCR_ANENABLE);
206 ar8xxx_phy_poll_reset(bus);
210 ar8xxx_mii_read32(struct ar8xxx_priv *priv, int phy_id, int regnum)
212 struct mii_bus *bus = priv->mii_bus;
215 lo = bus->read(bus, phy_id, regnum);
216 hi = bus->read(bus, phy_id, regnum + 1);
218 return (hi << 16) | lo;
222 ar8xxx_mii_write32(struct ar8xxx_priv *priv, int phy_id, int regnum, u32 val)
224 struct mii_bus *bus = priv->mii_bus;
228 hi = (u16) (val >> 16);
230 if (priv->chip->mii_lo_first)
232 bus->write(bus, phy_id, regnum, lo);
233 bus->write(bus, phy_id, regnum + 1, hi);
235 bus->write(bus, phy_id, regnum + 1, hi);
236 bus->write(bus, phy_id, regnum, lo);
241 ar8xxx_read(struct ar8xxx_priv *priv, int reg)
243 struct mii_bus *bus = priv->mii_bus;
247 split_addr((u32) reg, &r1, &r2, &page);
249 mutex_lock(&bus->mdio_lock);
251 bus->write(bus, 0x18, 0, page);
252 wait_for_page_switch();
253 val = ar8xxx_mii_read32(priv, 0x10 | r2, r1);
255 mutex_unlock(&bus->mdio_lock);
261 ar8xxx_write(struct ar8xxx_priv *priv, int reg, u32 val)
263 struct mii_bus *bus = priv->mii_bus;
266 split_addr((u32) reg, &r1, &r2, &page);
268 mutex_lock(&bus->mdio_lock);
270 bus->write(bus, 0x18, 0, page);
271 wait_for_page_switch();
272 ar8xxx_mii_write32(priv, 0x10 | r2, r1, val);
274 mutex_unlock(&bus->mdio_lock);
278 ar8xxx_rmw(struct ar8xxx_priv *priv, int reg, u32 mask, u32 val)
280 struct mii_bus *bus = priv->mii_bus;
284 split_addr((u32) reg, &r1, &r2, &page);
286 mutex_lock(&bus->mdio_lock);
288 bus->write(bus, 0x18, 0, page);
289 wait_for_page_switch();
291 ret = ar8xxx_mii_read32(priv, 0x10 | r2, r1);
294 ar8xxx_mii_write32(priv, 0x10 | r2, r1, ret);
296 mutex_unlock(&bus->mdio_lock);
301 ar8xxx_phy_dbg_read(struct ar8xxx_priv *priv, int phy_addr,
302 u16 dbg_addr, u16 *dbg_data)
304 struct mii_bus *bus = priv->mii_bus;
306 mutex_lock(&bus->mdio_lock);
307 bus->write(bus, phy_addr, MII_ATH_DBG_ADDR, dbg_addr);
308 *dbg_data = bus->read(bus, phy_addr, MII_ATH_DBG_DATA);
309 mutex_unlock(&bus->mdio_lock);
313 ar8xxx_phy_dbg_write(struct ar8xxx_priv *priv, int phy_addr,
314 u16 dbg_addr, u16 dbg_data)
316 struct mii_bus *bus = priv->mii_bus;
318 mutex_lock(&bus->mdio_lock);
319 bus->write(bus, phy_addr, MII_ATH_DBG_ADDR, dbg_addr);
320 bus->write(bus, phy_addr, MII_ATH_DBG_DATA, dbg_data);
321 mutex_unlock(&bus->mdio_lock);
325 ar8xxx_phy_mmd_prep(struct mii_bus *bus, int phy_addr, u16 addr, u16 reg)
327 bus->write(bus, phy_addr, MII_ATH_MMD_ADDR, addr);
328 bus->write(bus, phy_addr, MII_ATH_MMD_DATA, reg);
329 bus->write(bus, phy_addr, MII_ATH_MMD_ADDR, addr | 0x4000);
333 ar8xxx_phy_mmd_write(struct ar8xxx_priv *priv, int phy_addr, u16 addr, u16 reg, u16 data)
335 struct mii_bus *bus = priv->mii_bus;
337 mutex_lock(&bus->mdio_lock);
338 ar8xxx_phy_mmd_prep(bus, phy_addr, addr, reg);
339 bus->write(bus, phy_addr, MII_ATH_MMD_DATA, data);
340 mutex_unlock(&bus->mdio_lock);
344 ar8xxx_phy_mmd_read(struct ar8xxx_priv *priv, int phy_addr, u16 addr, u16 reg)
346 struct mii_bus *bus = priv->mii_bus;
349 mutex_lock(&bus->mdio_lock);
350 ar8xxx_phy_mmd_prep(bus, phy_addr, addr, reg);
351 data = bus->read(bus, phy_addr, MII_ATH_MMD_DATA);
352 mutex_unlock(&bus->mdio_lock);
358 ar8xxx_reg_wait(struct ar8xxx_priv *priv, u32 reg, u32 mask, u32 val,
363 for (i = 0; i < timeout; i++) {
366 t = ar8xxx_read(priv, reg);
367 if ((t & mask) == val)
370 usleep_range(1000, 2000);
378 ar8xxx_mib_op(struct ar8xxx_priv *priv, u32 op)
380 unsigned mib_func = priv->chip->mib_func;
383 lockdep_assert_held(&priv->mib_lock);
385 /* Capture the hardware statistics for all ports */
386 ar8xxx_rmw(priv, mib_func, AR8216_MIB_FUNC, (op << AR8216_MIB_FUNC_S));
388 /* Wait for the capturing to complete. */
389 ret = ar8xxx_reg_wait(priv, mib_func, AR8216_MIB_BUSY, 0, 10);
400 ar8xxx_mib_capture(struct ar8xxx_priv *priv)
402 return ar8xxx_mib_op(priv, AR8216_MIB_FUNC_CAPTURE);
406 ar8xxx_mib_flush(struct ar8xxx_priv *priv)
408 return ar8xxx_mib_op(priv, AR8216_MIB_FUNC_FLUSH);
412 ar8xxx_mib_fetch_port_stat(struct ar8xxx_priv *priv, int port, bool flush)
418 WARN_ON(port >= priv->dev.ports);
420 lockdep_assert_held(&priv->mib_lock);
422 base = priv->chip->reg_port_stats_start +
423 priv->chip->reg_port_stats_length * port;
425 mib_stats = &priv->mib_stats[port * priv->chip->num_mibs];
426 for (i = 0; i < priv->chip->num_mibs; i++) {
427 const struct ar8xxx_mib_desc *mib;
430 mib = &priv->chip->mib_decs[i];
431 t = ar8xxx_read(priv, base + mib->offset);
432 if (mib->size == 2) {
435 hi = ar8xxx_read(priv, base + mib->offset + 4);
448 ar8216_read_port_link(struct ar8xxx_priv *priv, int port,
449 struct switch_port_link *link)
454 memset(link, '\0', sizeof(*link));
456 status = priv->chip->read_port_status(priv, port);
458 link->aneg = !!(status & AR8216_PORT_STATUS_LINK_AUTO);
460 link->link = !!(status & AR8216_PORT_STATUS_LINK_UP);
464 if (priv->get_port_link) {
467 err = priv->get_port_link(port);
476 link->duplex = !!(status & AR8216_PORT_STATUS_DUPLEX);
477 link->tx_flow = !!(status & AR8216_PORT_STATUS_TXFLOW);
478 link->rx_flow = !!(status & AR8216_PORT_STATUS_RXFLOW);
480 if (link->aneg && link->duplex && priv->chip->read_port_eee_status)
481 link->eee = priv->chip->read_port_eee_status(priv, port);
483 speed = (status & AR8216_PORT_STATUS_SPEED) >>
484 AR8216_PORT_STATUS_SPEED_S;
487 case AR8216_PORT_SPEED_10M:
488 link->speed = SWITCH_PORT_SPEED_10;
490 case AR8216_PORT_SPEED_100M:
491 link->speed = SWITCH_PORT_SPEED_100;
493 case AR8216_PORT_SPEED_1000M:
494 link->speed = SWITCH_PORT_SPEED_1000;
497 link->speed = SWITCH_PORT_SPEED_UNKNOWN;
502 static struct sk_buff *
503 ar8216_mangle_tx(struct net_device *dev, struct sk_buff *skb)
505 struct ar8xxx_priv *priv = dev->phy_ptr;
514 if (unlikely(skb_headroom(skb) < 2)) {
515 if (pskb_expand_head(skb, 2, 0, GFP_ATOMIC) < 0)
519 buf = skb_push(skb, 2);
527 dev_kfree_skb_any(skb);
532 ar8216_mangle_rx(struct net_device *dev, struct sk_buff *skb)
534 struct ar8xxx_priv *priv;
542 /* don't strip the header if vlan mode is disabled */
546 /* strip header, get vlan id */
550 /* check for vlan header presence */
551 if ((buf[12 + 2] != 0x81) || (buf[13 + 2] != 0x00))
556 /* no need to fix up packets coming from a tagged source */
557 if (priv->vlan_tagged & (1 << port))
560 /* lookup port vid from local table, the switch passes an invalid vlan id */
561 vlan = priv->vlan_id[priv->pvid[port]];
564 buf[14 + 2] |= vlan >> 8;
565 buf[15 + 2] = vlan & 0xff;
569 ar8216_wait_bit(struct ar8xxx_priv *priv, int reg, u32 mask, u32 val)
575 t = ar8xxx_read(priv, reg);
576 if ((t & mask) == val)
586 pr_err("ar8216: timeout on reg %08x: %08x & %08x != %08x\n",
587 (unsigned int) reg, t, mask, val);
592 ar8216_vtu_op(struct ar8xxx_priv *priv, u32 op, u32 val)
594 if (ar8216_wait_bit(priv, AR8216_REG_VTU, AR8216_VTU_ACTIVE, 0))
596 if ((op & AR8216_VTU_OP) == AR8216_VTU_OP_LOAD) {
597 val &= AR8216_VTUDATA_MEMBER;
598 val |= AR8216_VTUDATA_VALID;
599 ar8xxx_write(priv, AR8216_REG_VTU_DATA, val);
601 op |= AR8216_VTU_ACTIVE;
602 ar8xxx_write(priv, AR8216_REG_VTU, op);
606 ar8216_vtu_flush(struct ar8xxx_priv *priv)
608 ar8216_vtu_op(priv, AR8216_VTU_OP_FLUSH, 0);
612 ar8216_vtu_load_vlan(struct ar8xxx_priv *priv, u32 vid, u32 port_mask)
616 op = AR8216_VTU_OP_LOAD | (vid << AR8216_VTU_VID_S);
617 ar8216_vtu_op(priv, op, port_mask);
621 ar8216_atu_flush(struct ar8xxx_priv *priv)
625 ret = ar8216_wait_bit(priv, AR8216_REG_ATU_FUNC0, AR8216_ATU_ACTIVE, 0);
627 ar8xxx_write(priv, AR8216_REG_ATU_FUNC0, AR8216_ATU_OP_FLUSH |
634 ar8216_atu_flush_port(struct ar8xxx_priv *priv, int port)
639 ret = ar8216_wait_bit(priv, AR8216_REG_ATU_FUNC0, AR8216_ATU_ACTIVE, 0);
641 t = (port << AR8216_ATU_PORT_NUM_S) | AR8216_ATU_OP_FLUSH_PORT;
642 t |= AR8216_ATU_ACTIVE;
643 ar8xxx_write(priv, AR8216_REG_ATU_FUNC0, t);
650 ar8216_read_port_status(struct ar8xxx_priv *priv, int port)
652 return ar8xxx_read(priv, AR8216_REG_PORT_STATUS(port));
656 __ar8216_setup_port(struct ar8xxx_priv *priv, int port, u32 members,
664 pvid = priv->vlan_id[priv->pvid[port]];
665 if (priv->vlan_tagged & (1 << port))
666 egress = AR8216_OUT_ADD_VLAN;
668 egress = AR8216_OUT_STRIP_VLAN;
669 ingress = AR8216_IN_SECURE;
672 egress = AR8216_OUT_KEEP;
673 ingress = AR8216_IN_PORT_ONLY;
676 header = ath_hdr_en ? AR8216_PORT_CTRL_HEADER : 0;
678 ar8xxx_rmw(priv, AR8216_REG_PORT_CTRL(port),
679 AR8216_PORT_CTRL_LEARN | AR8216_PORT_CTRL_VLAN_MODE |
680 AR8216_PORT_CTRL_SINGLE_VLAN | AR8216_PORT_CTRL_STATE |
681 AR8216_PORT_CTRL_HEADER | AR8216_PORT_CTRL_LEARN_LOCK,
682 AR8216_PORT_CTRL_LEARN | header |
683 (egress << AR8216_PORT_CTRL_VLAN_MODE_S) |
684 (AR8216_PORT_STATE_FORWARD << AR8216_PORT_CTRL_STATE_S));
686 ar8xxx_rmw(priv, AR8216_REG_PORT_VLAN(port),
687 AR8216_PORT_VLAN_DEST_PORTS | AR8216_PORT_VLAN_MODE |
688 AR8216_PORT_VLAN_DEFAULT_ID,
689 (members << AR8216_PORT_VLAN_DEST_PORTS_S) |
690 (ingress << AR8216_PORT_VLAN_MODE_S) |
691 (pvid << AR8216_PORT_VLAN_DEFAULT_ID_S));
695 ar8216_setup_port(struct ar8xxx_priv *priv, int port, u32 members)
697 return __ar8216_setup_port(priv, port, members,
698 chip_is_ar8216(priv) && priv->vlan &&
699 port == AR8216_PORT_CPU);
703 ar8216_hw_init(struct ar8xxx_priv *priv)
705 if (priv->initialized)
708 ar8xxx_phy_init(priv);
710 priv->initialized = true;
715 ar8216_init_globals(struct ar8xxx_priv *priv)
717 /* standard atheros magic */
718 ar8xxx_write(priv, 0x38, 0xc000050e);
720 ar8xxx_rmw(priv, AR8216_REG_GLOBAL_CTRL,
721 AR8216_GCTRL_MTU, 1518 + 8 + 2);
725 __ar8216_init_port(struct ar8xxx_priv *priv, int port,
726 bool cpu_ge, bool flow_en)
728 /* Enable port learning and tx */
729 ar8xxx_write(priv, AR8216_REG_PORT_CTRL(port),
730 AR8216_PORT_CTRL_LEARN |
731 (4 << AR8216_PORT_CTRL_STATE_S));
733 ar8xxx_write(priv, AR8216_REG_PORT_VLAN(port), 0);
735 if (port == AR8216_PORT_CPU) {
736 ar8xxx_write(priv, AR8216_REG_PORT_STATUS(port),
737 AR8216_PORT_STATUS_LINK_UP |
738 (cpu_ge ? AR8216_PORT_SPEED_1000M : AR8216_PORT_SPEED_100M) |
739 AR8216_PORT_STATUS_TXMAC |
740 AR8216_PORT_STATUS_RXMAC |
741 (flow_en ? AR8216_PORT_STATUS_RXFLOW : 0) |
742 (flow_en ? AR8216_PORT_STATUS_TXFLOW : 0) |
743 AR8216_PORT_STATUS_DUPLEX);
745 ar8xxx_write(priv, AR8216_REG_PORT_STATUS(port),
746 AR8216_PORT_STATUS_LINK_AUTO);
751 ar8216_init_port(struct ar8xxx_priv *priv, int port)
753 __ar8216_init_port(priv, port, ar8xxx_has_gige(priv),
754 chip_is_ar8316(priv));
758 ar8216_wait_atu_ready(struct ar8xxx_priv *priv, u16 r2, u16 r1)
762 while (ar8xxx_mii_read32(priv, r2, r1) & AR8216_ATU_ACTIVE && --timeout) {
768 pr_err("ar8216: timeout waiting for atu to become ready\n");
771 static void ar8216_get_arl_entry(struct ar8xxx_priv *priv,
772 struct arl_entry *a, u32 *status, enum arl_op op)
774 struct mii_bus *bus = priv->mii_bus;
776 u16 r1_func0, r1_func1, r1_func2;
777 u32 t, val0, val1, val2;
779 split_addr(AR8216_REG_ATU_FUNC0, &r1_func0, &r2, &page);
782 r1_func1 = (AR8216_REG_ATU_FUNC1 >> 1) & 0x1e;
783 r1_func2 = (AR8216_REG_ATU_FUNC2 >> 1) & 0x1e;
786 case AR8XXX_ARL_INITIALIZE:
787 /* all ATU registers are on the same page
788 * therefore set page only once
790 bus->write(bus, 0x18, 0, page);
791 wait_for_page_switch();
793 ar8216_wait_atu_ready(priv, r2, r1_func0);
795 ar8xxx_mii_write32(priv, r2, r1_func0, AR8216_ATU_OP_GET_NEXT);
796 ar8xxx_mii_write32(priv, r2, r1_func1, 0);
797 ar8xxx_mii_write32(priv, r2, r1_func2, 0);
799 case AR8XXX_ARL_GET_NEXT:
800 t = ar8xxx_mii_read32(priv, r2, r1_func0);
801 t |= AR8216_ATU_ACTIVE;
802 ar8xxx_mii_write32(priv, r2, r1_func0, t);
803 ar8216_wait_atu_ready(priv, r2, r1_func0);
805 val0 = ar8xxx_mii_read32(priv, r2, r1_func0);
806 val1 = ar8xxx_mii_read32(priv, r2, r1_func1);
807 val2 = ar8xxx_mii_read32(priv, r2, r1_func2);
809 *status = (val2 & AR8216_ATU_STATUS) >> AR8216_ATU_STATUS_S;
813 a->portmap = (val2 & AR8216_ATU_PORTS) >> AR8216_ATU_PORTS_S;
814 a->mac[0] = (val0 & AR8216_ATU_ADDR5) >> AR8216_ATU_ADDR5_S;
815 a->mac[1] = (val0 & AR8216_ATU_ADDR4) >> AR8216_ATU_ADDR4_S;
816 a->mac[2] = (val1 & AR8216_ATU_ADDR3) >> AR8216_ATU_ADDR3_S;
817 a->mac[3] = (val1 & AR8216_ATU_ADDR2) >> AR8216_ATU_ADDR2_S;
818 a->mac[4] = (val1 & AR8216_ATU_ADDR1) >> AR8216_ATU_ADDR1_S;
819 a->mac[5] = (val1 & AR8216_ATU_ADDR0) >> AR8216_ATU_ADDR0_S;
825 ar8216_phy_read(struct ar8xxx_priv *priv, int addr, int regnum)
830 if (addr >= AR8216_NUM_PORTS)
832 t = (regnum << AR8216_MDIO_CTRL_REG_ADDR_S) |
833 (addr << AR8216_MDIO_CTRL_PHY_ADDR_S) |
834 AR8216_MDIO_CTRL_MASTER_EN |
835 AR8216_MDIO_CTRL_BUSY |
836 AR8216_MDIO_CTRL_CMD_READ;
838 ar8xxx_write(priv, AR8216_REG_MDIO_CTRL, t);
839 err = ar8xxx_reg_wait(priv, AR8216_REG_MDIO_CTRL,
840 AR8216_MDIO_CTRL_BUSY, 0, 5);
842 val = ar8xxx_read(priv, AR8216_REG_MDIO_CTRL);
844 return val & AR8216_MDIO_CTRL_DATA_M;
848 ar8216_phy_write(struct ar8xxx_priv *priv, int addr, int regnum, u16 val)
853 if (addr >= AR8216_NUM_PORTS)
856 t = (addr << AR8216_MDIO_CTRL_PHY_ADDR_S) |
857 (regnum << AR8216_MDIO_CTRL_REG_ADDR_S) |
858 AR8216_MDIO_CTRL_MASTER_EN |
859 AR8216_MDIO_CTRL_BUSY |
860 AR8216_MDIO_CTRL_CMD_WRITE |
863 ar8xxx_write(priv, AR8216_REG_MDIO_CTRL, t);
864 ret = ar8xxx_reg_wait(priv, AR8216_REG_MDIO_CTRL,
865 AR8216_MDIO_CTRL_BUSY, 0, 5);
871 ar8229_hw_init(struct ar8xxx_priv *priv)
875 if (priv->initialized)
878 ar8xxx_write(priv, AR8216_REG_CTRL, AR8216_CTRL_RESET);
879 ar8xxx_reg_wait(priv, AR8216_REG_CTRL, AR8216_CTRL_RESET, 0, 1000);
881 phy_if_mode = of_get_phy_mode(priv->pdev->of_node);
883 if (phy_if_mode == PHY_INTERFACE_MODE_GMII) {
884 ar8xxx_write(priv, AR8229_REG_OPER_MODE0,
885 AR8229_OPER_MODE0_MAC_GMII_EN);
886 } else if (phy_if_mode == PHY_INTERFACE_MODE_MII) {
887 ar8xxx_write(priv, AR8229_REG_OPER_MODE0,
888 AR8229_OPER_MODE0_PHY_MII_EN);
890 pr_err("ar8229: unsupported mii mode\n");
894 if (priv->port4_phy) {
895 ar8xxx_write(priv, AR8229_REG_OPER_MODE1,
896 AR8229_REG_OPER_MODE1_PHY4_MII_EN);
897 /* disable port5 to prevent mii conflict */
898 ar8xxx_write(priv, AR8216_REG_PORT_STATUS(5), 0);
901 ar8xxx_phy_init(priv);
903 priv->initialized = true;
908 ar8229_init_globals(struct ar8xxx_priv *priv)
911 /* Enable CPU port, and disable mirror port */
912 ar8xxx_write(priv, AR8216_REG_GLOBAL_CPUPORT,
913 AR8216_GLOBAL_CPUPORT_EN |
914 (15 << AR8216_GLOBAL_CPUPORT_MIRROR_PORT_S));
916 /* Setup TAG priority mapping */
917 ar8xxx_write(priv, AR8216_REG_TAG_PRIORITY, 0xfa50);
919 /* Enable aging, MAC replacing */
920 ar8xxx_write(priv, AR8216_REG_ATU_CTRL,
921 0x2b /* 5 min age time */ |
922 AR8216_ATU_CTRL_AGE_EN |
923 AR8216_ATU_CTRL_LEARN_CHANGE);
925 /* Enable ARP frame acknowledge */
926 ar8xxx_reg_set(priv, AR8229_REG_QM_CTRL,
927 AR8229_QM_CTRL_ARP_EN);
929 /* Enable Broadcast/Multicast frames transmitted to the CPU */
930 ar8xxx_reg_set(priv, AR8216_REG_FLOOD_MASK,
931 AR8229_FLOOD_MASK_BC_DP(0) |
932 AR8229_FLOOD_MASK_MC_DP(0));
935 ar8xxx_rmw(priv, AR8216_REG_GLOBAL_CTRL,
936 AR8236_GCTRL_MTU, AR8236_GCTRL_MTU);
938 /* Enable MIB counters */
939 ar8xxx_reg_set(priv, AR8216_REG_MIB_FUNC,
942 /* setup Service TAG */
943 ar8xxx_rmw(priv, AR8216_REG_SERVICE_TAG, AR8216_SERVICE_TAG_M, 0);
947 ar8229_init_port(struct ar8xxx_priv *priv, int port)
949 __ar8216_init_port(priv, port, true, true);
954 ar7240sw_hw_init(struct ar8xxx_priv *priv)
956 if (priv->initialized)
959 ar8xxx_write(priv, AR8216_REG_CTRL, AR8216_CTRL_RESET);
960 ar8xxx_reg_wait(priv, AR8216_REG_CTRL, AR8216_CTRL_RESET, 0, 1000);
963 /* disable port5 to prevent mii conflict */
964 ar8xxx_write(priv, AR8216_REG_PORT_STATUS(5), 0);
966 ar8xxx_phy_init(priv);
968 priv->initialized = true;
973 ar7240sw_init_globals(struct ar8xxx_priv *priv)
976 /* Enable CPU port, and disable mirror port */
977 ar8xxx_write(priv, AR8216_REG_GLOBAL_CPUPORT,
978 AR8216_GLOBAL_CPUPORT_EN |
979 (15 << AR8216_GLOBAL_CPUPORT_MIRROR_PORT_S));
981 /* Setup TAG priority mapping */
982 ar8xxx_write(priv, AR8216_REG_TAG_PRIORITY, 0xfa50);
984 /* Enable ARP frame acknowledge, aging, MAC replacing */
985 ar8xxx_write(priv, AR8216_REG_ATU_CTRL,
986 AR8216_ATU_CTRL_RESERVED |
987 0x2b /* 5 min age time */ |
988 AR8216_ATU_CTRL_AGE_EN |
989 AR8216_ATU_CTRL_ARP_EN |
990 AR8216_ATU_CTRL_LEARN_CHANGE);
992 /* Enable Broadcast frames transmitted to the CPU */
993 ar8xxx_reg_set(priv, AR8216_REG_FLOOD_MASK,
994 AR8236_FM_CPU_BROADCAST_EN);
997 ar8xxx_rmw(priv, AR8216_REG_GLOBAL_CTRL,
1001 /* setup Service TAG */
1002 ar8xxx_rmw(priv, AR8216_REG_SERVICE_TAG, AR8216_SERVICE_TAG_M, 0);
1006 ar7240sw_setup_port(struct ar8xxx_priv *priv, int port, u32 members)
1008 return __ar8216_setup_port(priv, port, members, false);
1012 ar8236_setup_port(struct ar8xxx_priv *priv, int port, u32 members)
1014 u32 egress, ingress;
1018 pvid = priv->vlan_id[priv->pvid[port]];
1019 if (priv->vlan_tagged & (1 << port))
1020 egress = AR8216_OUT_ADD_VLAN;
1022 egress = AR8216_OUT_STRIP_VLAN;
1023 ingress = AR8216_IN_SECURE;
1026 egress = AR8216_OUT_KEEP;
1027 ingress = AR8216_IN_PORT_ONLY;
1030 ar8xxx_rmw(priv, AR8216_REG_PORT_CTRL(port),
1031 AR8216_PORT_CTRL_LEARN | AR8216_PORT_CTRL_VLAN_MODE |
1032 AR8216_PORT_CTRL_SINGLE_VLAN | AR8216_PORT_CTRL_STATE |
1033 AR8216_PORT_CTRL_HEADER | AR8216_PORT_CTRL_LEARN_LOCK,
1034 AR8216_PORT_CTRL_LEARN |
1035 (egress << AR8216_PORT_CTRL_VLAN_MODE_S) |
1036 (AR8216_PORT_STATE_FORWARD << AR8216_PORT_CTRL_STATE_S));
1038 ar8xxx_rmw(priv, AR8236_REG_PORT_VLAN(port),
1039 AR8236_PORT_VLAN_DEFAULT_ID,
1040 (pvid << AR8236_PORT_VLAN_DEFAULT_ID_S));
1042 ar8xxx_rmw(priv, AR8236_REG_PORT_VLAN2(port),
1043 AR8236_PORT_VLAN2_VLAN_MODE |
1044 AR8236_PORT_VLAN2_MEMBER,
1045 (ingress << AR8236_PORT_VLAN2_VLAN_MODE_S) |
1046 (members << AR8236_PORT_VLAN2_MEMBER_S));
1050 ar8236_init_globals(struct ar8xxx_priv *priv)
1052 /* enable jumbo frames */
1053 ar8xxx_rmw(priv, AR8216_REG_GLOBAL_CTRL,
1054 AR8316_GCTRL_MTU, 9018 + 8 + 2);
1056 /* enable cpu port to receive arp frames */
1057 ar8xxx_reg_set(priv, AR8216_REG_ATU_CTRL,
1058 AR8236_ATU_CTRL_RES);
1060 /* enable cpu port to receive multicast and broadcast frames */
1061 ar8xxx_reg_set(priv, AR8216_REG_FLOOD_MASK,
1062 AR8236_FM_CPU_BROADCAST_EN | AR8236_FM_CPU_BCAST_FWD_EN);
1064 /* Enable MIB counters */
1065 ar8xxx_rmw(priv, AR8216_REG_MIB_FUNC, AR8216_MIB_FUNC | AR8236_MIB_EN,
1066 (AR8216_MIB_FUNC_NO_OP << AR8216_MIB_FUNC_S) |
1071 ar8316_hw_init(struct ar8xxx_priv *priv)
1075 val = ar8xxx_read(priv, AR8316_REG_POSTRIP);
1077 if (priv->phy->interface == PHY_INTERFACE_MODE_RGMII) {
1078 if (priv->port4_phy) {
1079 /* value taken from Ubiquiti RouterStation Pro */
1080 newval = 0x81461bea;
1081 pr_info("ar8316: Using port 4 as PHY\n");
1083 newval = 0x01261be2;
1084 pr_info("ar8316: Using port 4 as switch port\n");
1086 } else if (priv->phy->interface == PHY_INTERFACE_MODE_GMII) {
1087 /* value taken from AVM Fritz!Box 7390 sources */
1088 newval = 0x010e5b71;
1090 /* no known value for phy interface */
1091 pr_err("ar8316: unsupported mii mode: %d.\n",
1092 priv->phy->interface);
1099 ar8xxx_write(priv, AR8316_REG_POSTRIP, newval);
1101 if (priv->port4_phy &&
1102 priv->phy->interface == PHY_INTERFACE_MODE_RGMII) {
1103 /* work around for phy4 rgmii mode */
1104 ar8xxx_phy_dbg_write(priv, 4, 0x12, 0x480c);
1106 ar8xxx_phy_dbg_write(priv, 4, 0x0, 0x824e);
1108 ar8xxx_phy_dbg_write(priv, 4, 0x5, 0x3d47);
1112 ar8xxx_phy_init(priv);
1115 priv->initialized = true;
1120 ar8316_init_globals(struct ar8xxx_priv *priv)
1122 /* standard atheros magic */
1123 ar8xxx_write(priv, 0x38, 0xc000050e);
1125 /* enable cpu port to receive multicast and broadcast frames */
1126 ar8xxx_write(priv, AR8216_REG_FLOOD_MASK, 0x003f003f);
1128 /* enable jumbo frames */
1129 ar8xxx_rmw(priv, AR8216_REG_GLOBAL_CTRL,
1130 AR8316_GCTRL_MTU, 9018 + 8 + 2);
1132 /* Enable MIB counters */
1133 ar8xxx_rmw(priv, AR8216_REG_MIB_FUNC, AR8216_MIB_FUNC | AR8236_MIB_EN,
1134 (AR8216_MIB_FUNC_NO_OP << AR8216_MIB_FUNC_S) |
1139 ar8xxx_sw_set_vlan(struct switch_dev *dev, const struct switch_attr *attr,
1140 struct switch_val *val)
1142 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1143 priv->vlan = !!val->value.i;
1148 ar8xxx_sw_get_vlan(struct switch_dev *dev, const struct switch_attr *attr,
1149 struct switch_val *val)
1151 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1152 val->value.i = priv->vlan;
1158 ar8xxx_sw_set_pvid(struct switch_dev *dev, int port, int vlan)
1160 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1162 /* make sure no invalid PVIDs get set */
1164 if (vlan < 0 || vlan >= dev->vlans ||
1165 port < 0 || port >= AR8X16_MAX_PORTS)
1168 priv->pvid[port] = vlan;
1173 ar8xxx_sw_get_pvid(struct switch_dev *dev, int port, int *vlan)
1175 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1177 if (port < 0 || port >= AR8X16_MAX_PORTS)
1180 *vlan = priv->pvid[port];
1185 ar8xxx_sw_set_vid(struct switch_dev *dev, const struct switch_attr *attr,
1186 struct switch_val *val)
1188 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1190 if (val->port_vlan >= AR8X16_MAX_VLANS)
1193 priv->vlan_id[val->port_vlan] = val->value.i;
1198 ar8xxx_sw_get_vid(struct switch_dev *dev, const struct switch_attr *attr,
1199 struct switch_val *val)
1201 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1202 val->value.i = priv->vlan_id[val->port_vlan];
1207 ar8xxx_sw_get_port_link(struct switch_dev *dev, int port,
1208 struct switch_port_link *link)
1210 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1212 ar8216_read_port_link(priv, port, link);
1217 ar8xxx_sw_get_ports(struct switch_dev *dev, struct switch_val *val)
1219 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1223 if (val->port_vlan >= AR8X16_MAX_VLANS)
1226 ports = priv->vlan_table[val->port_vlan];
1228 for (i = 0; i < dev->ports; i++) {
1229 struct switch_port *p;
1231 if (!(ports & (1 << i)))
1234 p = &val->value.ports[val->len++];
1236 if (priv->vlan_tagged & (1 << i))
1237 p->flags = (1 << SWITCH_PORT_FLAG_TAGGED);
1245 ar8xxx_sw_set_ports(struct switch_dev *dev, struct switch_val *val)
1247 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1248 u8 *vt = &priv->vlan_table[val->port_vlan];
1252 for (i = 0; i < val->len; i++) {
1253 struct switch_port *p = &val->value.ports[i];
1255 if (p->flags & (1 << SWITCH_PORT_FLAG_TAGGED)) {
1256 priv->vlan_tagged |= (1 << p->id);
1258 priv->vlan_tagged &= ~(1 << p->id);
1259 priv->pvid[p->id] = val->port_vlan;
1261 /* make sure that an untagged port does not
1262 * appear in other vlans */
1263 for (j = 0; j < AR8X16_MAX_VLANS; j++) {
1264 if (j == val->port_vlan)
1266 priv->vlan_table[j] &= ~(1 << p->id);
1276 ar8216_set_mirror_regs(struct ar8xxx_priv *priv)
1280 /* reset all mirror registers */
1281 ar8xxx_rmw(priv, AR8216_REG_GLOBAL_CPUPORT,
1282 AR8216_GLOBAL_CPUPORT_MIRROR_PORT,
1283 (0xF << AR8216_GLOBAL_CPUPORT_MIRROR_PORT_S));
1284 for (port = 0; port < AR8216_NUM_PORTS; port++) {
1285 ar8xxx_reg_clear(priv, AR8216_REG_PORT_CTRL(port),
1286 AR8216_PORT_CTRL_MIRROR_RX);
1288 ar8xxx_reg_clear(priv, AR8216_REG_PORT_CTRL(port),
1289 AR8216_PORT_CTRL_MIRROR_TX);
1292 /* now enable mirroring if necessary */
1293 if (priv->source_port >= AR8216_NUM_PORTS ||
1294 priv->monitor_port >= AR8216_NUM_PORTS ||
1295 priv->source_port == priv->monitor_port) {
1299 ar8xxx_rmw(priv, AR8216_REG_GLOBAL_CPUPORT,
1300 AR8216_GLOBAL_CPUPORT_MIRROR_PORT,
1301 (priv->monitor_port << AR8216_GLOBAL_CPUPORT_MIRROR_PORT_S));
1303 if (priv->mirror_rx)
1304 ar8xxx_reg_set(priv, AR8216_REG_PORT_CTRL(priv->source_port),
1305 AR8216_PORT_CTRL_MIRROR_RX);
1307 if (priv->mirror_tx)
1308 ar8xxx_reg_set(priv, AR8216_REG_PORT_CTRL(priv->source_port),
1309 AR8216_PORT_CTRL_MIRROR_TX);
1313 ar8xxx_age_time_val(int age_time)
1315 return (age_time + AR8XXX_REG_ARL_CTRL_AGE_TIME_SECS / 2) /
1316 AR8XXX_REG_ARL_CTRL_AGE_TIME_SECS;
1320 ar8xxx_set_age_time(struct ar8xxx_priv *priv, int reg)
1322 u32 age_time = ar8xxx_age_time_val(priv->arl_age_time);
1323 ar8xxx_rmw(priv, reg, AR8216_ATU_CTRL_AGE_TIME, age_time << AR8216_ATU_CTRL_AGE_TIME_S);
1327 ar8xxx_sw_hw_apply(struct switch_dev *dev)
1329 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1330 const struct ar8xxx_chip *chip = priv->chip;
1331 u8 portmask[AR8X16_MAX_PORTS];
1334 mutex_lock(&priv->reg_mutex);
1335 /* flush all vlan translation unit entries */
1336 priv->chip->vtu_flush(priv);
1338 memset(portmask, 0, sizeof(portmask));
1340 /* calculate the port destination masks and load vlans
1341 * into the vlan translation unit */
1342 for (j = 0; j < AR8X16_MAX_VLANS; j++) {
1343 u8 vp = priv->vlan_table[j];
1348 for (i = 0; i < dev->ports; i++) {
1351 portmask[i] |= vp & ~mask;
1354 chip->vtu_load_vlan(priv, priv->vlan_id[j],
1355 priv->vlan_table[j]);
1359 * isolate all ports, but connect them to the cpu port */
1360 for (i = 0; i < dev->ports; i++) {
1361 if (i == AR8216_PORT_CPU)
1364 portmask[i] = 1 << AR8216_PORT_CPU;
1365 portmask[AR8216_PORT_CPU] |= (1 << i);
1369 /* update the port destination mask registers and tag settings */
1370 for (i = 0; i < dev->ports; i++) {
1371 chip->setup_port(priv, i, portmask[i]);
1374 chip->set_mirror_regs(priv);
1377 if (chip->reg_arl_ctrl)
1378 ar8xxx_set_age_time(priv, chip->reg_arl_ctrl);
1380 mutex_unlock(&priv->reg_mutex);
1385 ar8xxx_sw_reset_switch(struct switch_dev *dev)
1387 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1388 const struct ar8xxx_chip *chip = priv->chip;
1391 mutex_lock(&priv->reg_mutex);
1392 memset(&priv->vlan, 0, sizeof(struct ar8xxx_priv) -
1393 offsetof(struct ar8xxx_priv, vlan));
1395 for (i = 0; i < AR8X16_MAX_VLANS; i++)
1396 priv->vlan_id[i] = i;
1398 /* Configure all ports */
1399 for (i = 0; i < dev->ports; i++)
1400 chip->init_port(priv, i);
1402 priv->mirror_rx = false;
1403 priv->mirror_tx = false;
1404 priv->source_port = 0;
1405 priv->monitor_port = 0;
1406 priv->arl_age_time = AR8XXX_DEFAULT_ARL_AGE_TIME;
1408 chip->init_globals(priv);
1409 chip->atu_flush(priv);
1411 mutex_unlock(&priv->reg_mutex);
1413 return chip->sw_hw_apply(dev);
1417 ar8xxx_sw_set_reset_mibs(struct switch_dev *dev,
1418 const struct switch_attr *attr,
1419 struct switch_val *val)
1421 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1425 if (!ar8xxx_has_mib_counters(priv))
1428 mutex_lock(&priv->mib_lock);
1430 len = priv->dev.ports * priv->chip->num_mibs *
1431 sizeof(*priv->mib_stats);
1432 memset(priv->mib_stats, '\0', len);
1433 ret = ar8xxx_mib_flush(priv);
1440 mutex_unlock(&priv->mib_lock);
1445 ar8xxx_sw_set_mirror_rx_enable(struct switch_dev *dev,
1446 const struct switch_attr *attr,
1447 struct switch_val *val)
1449 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1451 mutex_lock(&priv->reg_mutex);
1452 priv->mirror_rx = !!val->value.i;
1453 priv->chip->set_mirror_regs(priv);
1454 mutex_unlock(&priv->reg_mutex);
1460 ar8xxx_sw_get_mirror_rx_enable(struct switch_dev *dev,
1461 const struct switch_attr *attr,
1462 struct switch_val *val)
1464 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1465 val->value.i = priv->mirror_rx;
1470 ar8xxx_sw_set_mirror_tx_enable(struct switch_dev *dev,
1471 const struct switch_attr *attr,
1472 struct switch_val *val)
1474 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1476 mutex_lock(&priv->reg_mutex);
1477 priv->mirror_tx = !!val->value.i;
1478 priv->chip->set_mirror_regs(priv);
1479 mutex_unlock(&priv->reg_mutex);
1485 ar8xxx_sw_get_mirror_tx_enable(struct switch_dev *dev,
1486 const struct switch_attr *attr,
1487 struct switch_val *val)
1489 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1490 val->value.i = priv->mirror_tx;
1495 ar8xxx_sw_set_mirror_monitor_port(struct switch_dev *dev,
1496 const struct switch_attr *attr,
1497 struct switch_val *val)
1499 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1501 mutex_lock(&priv->reg_mutex);
1502 priv->monitor_port = val->value.i;
1503 priv->chip->set_mirror_regs(priv);
1504 mutex_unlock(&priv->reg_mutex);
1510 ar8xxx_sw_get_mirror_monitor_port(struct switch_dev *dev,
1511 const struct switch_attr *attr,
1512 struct switch_val *val)
1514 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1515 val->value.i = priv->monitor_port;
1520 ar8xxx_sw_set_mirror_source_port(struct switch_dev *dev,
1521 const struct switch_attr *attr,
1522 struct switch_val *val)
1524 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1526 mutex_lock(&priv->reg_mutex);
1527 priv->source_port = val->value.i;
1528 priv->chip->set_mirror_regs(priv);
1529 mutex_unlock(&priv->reg_mutex);
1535 ar8xxx_sw_get_mirror_source_port(struct switch_dev *dev,
1536 const struct switch_attr *attr,
1537 struct switch_val *val)
1539 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1540 val->value.i = priv->source_port;
1545 ar8xxx_sw_set_port_reset_mib(struct switch_dev *dev,
1546 const struct switch_attr *attr,
1547 struct switch_val *val)
1549 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1553 if (!ar8xxx_has_mib_counters(priv))
1556 port = val->port_vlan;
1557 if (port >= dev->ports)
1560 mutex_lock(&priv->mib_lock);
1561 ret = ar8xxx_mib_capture(priv);
1565 ar8xxx_mib_fetch_port_stat(priv, port, true);
1570 mutex_unlock(&priv->mib_lock);
1575 ar8xxx_byte_to_str(char *buf, int len, u64 byte)
1580 if (byte >= 0x40000000) { /* 1 GiB */
1581 b = byte * 10 / 0x40000000;
1583 } else if (byte >= 0x100000) { /* 1 MiB */
1584 b = byte * 10 / 0x100000;
1586 } else if (byte >= 0x400) { /* 1 KiB */
1587 b = byte * 10 / 0x400;
1593 if (strcmp(unit, "Byte"))
1594 snprintf(buf, len, "%lu.%lu %s", b / 10, b % 10, unit);
1596 snprintf(buf, len, "%lu %s", b, unit);
1600 ar8xxx_sw_get_port_mib(struct switch_dev *dev,
1601 const struct switch_attr *attr,
1602 struct switch_val *val)
1604 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1605 const struct ar8xxx_chip *chip = priv->chip;
1606 u64 *mib_stats, mib_data;
1609 char *buf = priv->buf;
1611 const char *mib_name;
1613 bool mib_stats_empty = true;
1615 if (!ar8xxx_has_mib_counters(priv))
1618 port = val->port_vlan;
1619 if (port >= dev->ports)
1622 mutex_lock(&priv->mib_lock);
1623 ret = ar8xxx_mib_capture(priv);
1627 ar8xxx_mib_fetch_port_stat(priv, port, false);
1629 len += snprintf(buf + len, sizeof(priv->buf) - len,
1632 mib_stats = &priv->mib_stats[port * chip->num_mibs];
1633 for (i = 0; i < chip->num_mibs; i++) {
1634 mib_name = chip->mib_decs[i].name;
1635 mib_data = mib_stats[i];
1636 len += snprintf(buf + len, sizeof(priv->buf) - len,
1637 "%-12s: %llu\n", mib_name, mib_data);
1638 if ((!strcmp(mib_name, "TxByte") ||
1639 !strcmp(mib_name, "RxGoodByte")) &&
1641 ar8xxx_byte_to_str(buf1, sizeof(buf1), mib_data);
1642 --len; /* discard newline at the end of buf */
1643 len += snprintf(buf + len, sizeof(priv->buf) - len,
1646 if (mib_stats_empty && mib_data)
1647 mib_stats_empty = false;
1650 if (mib_stats_empty)
1651 len = snprintf(buf, sizeof(priv->buf), "No MIB data");
1659 mutex_unlock(&priv->mib_lock);
1664 ar8xxx_sw_set_arl_age_time(struct switch_dev *dev, const struct switch_attr *attr,
1665 struct switch_val *val)
1667 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1668 int age_time = val->value.i;
1674 age_time_val = ar8xxx_age_time_val(age_time);
1675 if (age_time_val == 0 || age_time_val > 0xffff)
1678 priv->arl_age_time = age_time;
1683 ar8xxx_sw_get_arl_age_time(struct switch_dev *dev, const struct switch_attr *attr,
1684 struct switch_val *val)
1686 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1687 val->value.i = priv->arl_age_time;
1692 ar8xxx_sw_get_arl_table(struct switch_dev *dev,
1693 const struct switch_attr *attr,
1694 struct switch_val *val)
1696 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1697 struct mii_bus *bus = priv->mii_bus;
1698 const struct ar8xxx_chip *chip = priv->chip;
1699 char *buf = priv->arl_buf;
1700 int i, j, k, len = 0;
1701 struct arl_entry *a, *a1;
1704 if (!chip->get_arl_entry)
1707 mutex_lock(&priv->reg_mutex);
1708 mutex_lock(&bus->mdio_lock);
1710 chip->get_arl_entry(priv, NULL, NULL, AR8XXX_ARL_INITIALIZE);
1712 for(i = 0; i < AR8XXX_NUM_ARL_RECORDS; ++i) {
1713 a = &priv->arl_table[i];
1715 chip->get_arl_entry(priv, a, &status, AR8XXX_ARL_GET_NEXT);
1721 * ARL table can include multiple valid entries
1722 * per MAC, just with differing status codes
1724 for (j = 0; j < i; ++j) {
1725 a1 = &priv->arl_table[j];
1726 if (!memcmp(a->mac, a1->mac, sizeof(a->mac))) {
1727 /* ignore ports already seen in former entry */
1728 a->portmap &= ~a1->portmap;
1735 mutex_unlock(&bus->mdio_lock);
1737 len += snprintf(buf + len, sizeof(priv->arl_buf) - len,
1738 "address resolution table\n");
1740 if (i == AR8XXX_NUM_ARL_RECORDS)
1741 len += snprintf(buf + len, sizeof(priv->arl_buf) - len,
1742 "Too many entries found, displaying the first %d only!\n",
1743 AR8XXX_NUM_ARL_RECORDS);
1745 for (j = 0; j < priv->dev.ports; ++j) {
1746 for (k = 0; k < i; ++k) {
1747 a = &priv->arl_table[k];
1748 if (!(a->portmap & BIT(j)))
1750 len += snprintf(buf + len, sizeof(priv->arl_buf) - len,
1751 "Port %d: MAC %02x:%02x:%02x:%02x:%02x:%02x\n",
1753 a->mac[5], a->mac[4], a->mac[3],
1754 a->mac[2], a->mac[1], a->mac[0]);
1761 mutex_unlock(&priv->reg_mutex);
1767 ar8xxx_sw_set_flush_arl_table(struct switch_dev *dev,
1768 const struct switch_attr *attr,
1769 struct switch_val *val)
1771 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1774 mutex_lock(&priv->reg_mutex);
1775 ret = priv->chip->atu_flush(priv);
1776 mutex_unlock(&priv->reg_mutex);
1782 ar8xxx_sw_set_flush_port_arl_table(struct switch_dev *dev,
1783 const struct switch_attr *attr,
1784 struct switch_val *val)
1786 struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1789 port = val->port_vlan;
1790 if (port >= dev->ports)
1793 mutex_lock(&priv->reg_mutex);
1794 ret = priv->chip->atu_flush_port(priv, port);
1795 mutex_unlock(&priv->reg_mutex);
1801 ar8xxx_phy_read(struct mii_bus *bus, int phy_addr, int reg_addr)
1803 struct ar8xxx_priv *priv = bus->priv;
1804 return priv->chip->phy_read(priv, phy_addr, reg_addr);
1808 ar8xxx_phy_write(struct mii_bus *bus, int phy_addr, int reg_addr,
1811 struct ar8xxx_priv *priv = bus->priv;
1812 return priv->chip->phy_write(priv, phy_addr, reg_addr, reg_val);
1815 static const struct switch_attr ar8xxx_sw_attr_globals[] = {
1817 .type = SWITCH_TYPE_INT,
1818 .name = "enable_vlan",
1819 .description = "Enable VLAN mode",
1820 .set = ar8xxx_sw_set_vlan,
1821 .get = ar8xxx_sw_get_vlan,
1825 .type = SWITCH_TYPE_NOVAL,
1826 .name = "reset_mibs",
1827 .description = "Reset all MIB counters",
1828 .set = ar8xxx_sw_set_reset_mibs,
1831 .type = SWITCH_TYPE_INT,
1832 .name = "enable_mirror_rx",
1833 .description = "Enable mirroring of RX packets",
1834 .set = ar8xxx_sw_set_mirror_rx_enable,
1835 .get = ar8xxx_sw_get_mirror_rx_enable,
1839 .type = SWITCH_TYPE_INT,
1840 .name = "enable_mirror_tx",
1841 .description = "Enable mirroring of TX packets",
1842 .set = ar8xxx_sw_set_mirror_tx_enable,
1843 .get = ar8xxx_sw_get_mirror_tx_enable,
1847 .type = SWITCH_TYPE_INT,
1848 .name = "mirror_monitor_port",
1849 .description = "Mirror monitor port",
1850 .set = ar8xxx_sw_set_mirror_monitor_port,
1851 .get = ar8xxx_sw_get_mirror_monitor_port,
1852 .max = AR8216_NUM_PORTS - 1
1855 .type = SWITCH_TYPE_INT,
1856 .name = "mirror_source_port",
1857 .description = "Mirror source port",
1858 .set = ar8xxx_sw_set_mirror_source_port,
1859 .get = ar8xxx_sw_get_mirror_source_port,
1860 .max = AR8216_NUM_PORTS - 1
1863 .type = SWITCH_TYPE_STRING,
1864 .name = "arl_table",
1865 .description = "Get ARL table",
1867 .get = ar8xxx_sw_get_arl_table,
1870 .type = SWITCH_TYPE_NOVAL,
1871 .name = "flush_arl_table",
1872 .description = "Flush ARL table",
1873 .set = ar8xxx_sw_set_flush_arl_table,
1877 const struct switch_attr ar8xxx_sw_attr_port[] = {
1879 .type = SWITCH_TYPE_NOVAL,
1880 .name = "reset_mib",
1881 .description = "Reset single port MIB counters",
1882 .set = ar8xxx_sw_set_port_reset_mib,
1885 .type = SWITCH_TYPE_STRING,
1887 .description = "Get port's MIB counters",
1889 .get = ar8xxx_sw_get_port_mib,
1892 .type = SWITCH_TYPE_NOVAL,
1893 .name = "flush_arl_table",
1894 .description = "Flush port's ARL table entries",
1895 .set = ar8xxx_sw_set_flush_port_arl_table,
1899 const struct switch_attr ar8xxx_sw_attr_vlan[1] = {
1901 .type = SWITCH_TYPE_INT,
1903 .description = "VLAN ID (0-4094)",
1904 .set = ar8xxx_sw_set_vid,
1905 .get = ar8xxx_sw_get_vid,
1910 static const struct switch_dev_ops ar8xxx_sw_ops = {
1912 .attr = ar8xxx_sw_attr_globals,
1913 .n_attr = ARRAY_SIZE(ar8xxx_sw_attr_globals),
1916 .attr = ar8xxx_sw_attr_port,
1917 .n_attr = ARRAY_SIZE(ar8xxx_sw_attr_port),
1920 .attr = ar8xxx_sw_attr_vlan,
1921 .n_attr = ARRAY_SIZE(ar8xxx_sw_attr_vlan),
1923 .get_port_pvid = ar8xxx_sw_get_pvid,
1924 .set_port_pvid = ar8xxx_sw_set_pvid,
1925 .get_vlan_ports = ar8xxx_sw_get_ports,
1926 .set_vlan_ports = ar8xxx_sw_set_ports,
1927 .apply_config = ar8xxx_sw_hw_apply,
1928 .reset_switch = ar8xxx_sw_reset_switch,
1929 .get_port_link = ar8xxx_sw_get_port_link,
1930 /* The following op is disabled as it hogs the CPU and degrades performance.
1931 An implementation has been attempted in 4d8a66d but reading MIB data is slow
1934 The high CPU load has been traced down to the ar8xxx_reg_wait() call in
1935 ar8xxx_mib_op(), which has to usleep_range() till the MIB busy flag set by
1936 the request to update the MIB counter is cleared. */
1938 .get_port_stats = ar8xxx_sw_get_port_stats,
1942 static const struct ar8xxx_chip ar7240sw_chip = {
1943 .caps = AR8XXX_CAP_MIB_COUNTERS,
1945 .reg_port_stats_start = 0x20000,
1946 .reg_port_stats_length = 0x100,
1947 .reg_arl_ctrl = AR8216_REG_ATU_CTRL,
1949 .name = "Atheros AR724X/AR933X built-in",
1950 .ports = AR7240SW_NUM_PORTS,
1951 .vlans = AR8216_NUM_VLANS,
1952 .swops = &ar8xxx_sw_ops,
1954 .hw_init = ar7240sw_hw_init,
1955 .init_globals = ar7240sw_init_globals,
1956 .init_port = ar8229_init_port,
1957 .phy_read = ar8216_phy_read,
1958 .phy_write = ar8216_phy_write,
1959 .setup_port = ar7240sw_setup_port,
1960 .read_port_status = ar8216_read_port_status,
1961 .atu_flush = ar8216_atu_flush,
1962 .atu_flush_port = ar8216_atu_flush_port,
1963 .vtu_flush = ar8216_vtu_flush,
1964 .vtu_load_vlan = ar8216_vtu_load_vlan,
1965 .set_mirror_regs = ar8216_set_mirror_regs,
1966 .get_arl_entry = ar8216_get_arl_entry,
1967 .sw_hw_apply = ar8xxx_sw_hw_apply,
1969 .num_mibs = ARRAY_SIZE(ar8236_mibs),
1970 .mib_decs = ar8236_mibs,
1971 .mib_func = AR8216_REG_MIB_FUNC
1974 static const struct ar8xxx_chip ar8216_chip = {
1975 .caps = AR8XXX_CAP_MIB_COUNTERS,
1977 .reg_port_stats_start = 0x19000,
1978 .reg_port_stats_length = 0xa0,
1979 .reg_arl_ctrl = AR8216_REG_ATU_CTRL,
1981 .name = "Atheros AR8216",
1982 .ports = AR8216_NUM_PORTS,
1983 .vlans = AR8216_NUM_VLANS,
1984 .swops = &ar8xxx_sw_ops,
1986 .hw_init = ar8216_hw_init,
1987 .init_globals = ar8216_init_globals,
1988 .init_port = ar8216_init_port,
1989 .setup_port = ar8216_setup_port,
1990 .read_port_status = ar8216_read_port_status,
1991 .atu_flush = ar8216_atu_flush,
1992 .atu_flush_port = ar8216_atu_flush_port,
1993 .vtu_flush = ar8216_vtu_flush,
1994 .vtu_load_vlan = ar8216_vtu_load_vlan,
1995 .set_mirror_regs = ar8216_set_mirror_regs,
1996 .get_arl_entry = ar8216_get_arl_entry,
1997 .sw_hw_apply = ar8xxx_sw_hw_apply,
1999 .num_mibs = ARRAY_SIZE(ar8216_mibs),
2000 .mib_decs = ar8216_mibs,
2001 .mib_func = AR8216_REG_MIB_FUNC
2004 static const struct ar8xxx_chip ar8229_chip = {
2005 .caps = AR8XXX_CAP_MIB_COUNTERS,
2007 .reg_port_stats_start = 0x20000,
2008 .reg_port_stats_length = 0x100,
2009 .reg_arl_ctrl = AR8216_REG_ATU_CTRL,
2011 .name = "Atheros AR8229",
2012 .ports = AR8216_NUM_PORTS,
2013 .vlans = AR8216_NUM_VLANS,
2014 .swops = &ar8xxx_sw_ops,
2016 .hw_init = ar8229_hw_init,
2017 .init_globals = ar8229_init_globals,
2018 .init_port = ar8229_init_port,
2019 .phy_read = ar8216_phy_read,
2020 .phy_write = ar8216_phy_write,
2021 .setup_port = ar8236_setup_port,
2022 .read_port_status = ar8216_read_port_status,
2023 .atu_flush = ar8216_atu_flush,
2024 .atu_flush_port = ar8216_atu_flush_port,
2025 .vtu_flush = ar8216_vtu_flush,
2026 .vtu_load_vlan = ar8216_vtu_load_vlan,
2027 .set_mirror_regs = ar8216_set_mirror_regs,
2028 .get_arl_entry = ar8216_get_arl_entry,
2029 .sw_hw_apply = ar8xxx_sw_hw_apply,
2031 .num_mibs = ARRAY_SIZE(ar8236_mibs),
2032 .mib_decs = ar8236_mibs,
2033 .mib_func = AR8216_REG_MIB_FUNC
2036 static const struct ar8xxx_chip ar8236_chip = {
2037 .caps = AR8XXX_CAP_MIB_COUNTERS,
2039 .reg_port_stats_start = 0x20000,
2040 .reg_port_stats_length = 0x100,
2041 .reg_arl_ctrl = AR8216_REG_ATU_CTRL,
2043 .name = "Atheros AR8236",
2044 .ports = AR8216_NUM_PORTS,
2045 .vlans = AR8216_NUM_VLANS,
2046 .swops = &ar8xxx_sw_ops,
2048 .hw_init = ar8216_hw_init,
2049 .init_globals = ar8236_init_globals,
2050 .init_port = ar8216_init_port,
2051 .setup_port = ar8236_setup_port,
2052 .read_port_status = ar8216_read_port_status,
2053 .atu_flush = ar8216_atu_flush,
2054 .atu_flush_port = ar8216_atu_flush_port,
2055 .vtu_flush = ar8216_vtu_flush,
2056 .vtu_load_vlan = ar8216_vtu_load_vlan,
2057 .set_mirror_regs = ar8216_set_mirror_regs,
2058 .get_arl_entry = ar8216_get_arl_entry,
2059 .sw_hw_apply = ar8xxx_sw_hw_apply,
2061 .num_mibs = ARRAY_SIZE(ar8236_mibs),
2062 .mib_decs = ar8236_mibs,
2063 .mib_func = AR8216_REG_MIB_FUNC
2066 static const struct ar8xxx_chip ar8316_chip = {
2067 .caps = AR8XXX_CAP_GIGE | AR8XXX_CAP_MIB_COUNTERS,
2069 .reg_port_stats_start = 0x20000,
2070 .reg_port_stats_length = 0x100,
2071 .reg_arl_ctrl = AR8216_REG_ATU_CTRL,
2073 .name = "Atheros AR8316",
2074 .ports = AR8216_NUM_PORTS,
2075 .vlans = AR8X16_MAX_VLANS,
2076 .swops = &ar8xxx_sw_ops,
2078 .hw_init = ar8316_hw_init,
2079 .init_globals = ar8316_init_globals,
2080 .init_port = ar8216_init_port,
2081 .setup_port = ar8216_setup_port,
2082 .read_port_status = ar8216_read_port_status,
2083 .atu_flush = ar8216_atu_flush,
2084 .atu_flush_port = ar8216_atu_flush_port,
2085 .vtu_flush = ar8216_vtu_flush,
2086 .vtu_load_vlan = ar8216_vtu_load_vlan,
2087 .set_mirror_regs = ar8216_set_mirror_regs,
2088 .get_arl_entry = ar8216_get_arl_entry,
2089 .sw_hw_apply = ar8xxx_sw_hw_apply,
2091 .num_mibs = ARRAY_SIZE(ar8236_mibs),
2092 .mib_decs = ar8236_mibs,
2093 .mib_func = AR8216_REG_MIB_FUNC
2097 ar8xxx_read_id(struct ar8xxx_priv *priv)
2103 val = ar8xxx_read(priv, AR8216_REG_CTRL);
2107 id = val & (AR8216_CTRL_REVISION | AR8216_CTRL_VERSION);
2108 for (i = 0; i < AR8X16_PROBE_RETRIES; i++) {
2111 val = ar8xxx_read(priv, AR8216_REG_CTRL);
2115 t = val & (AR8216_CTRL_REVISION | AR8216_CTRL_VERSION);
2120 priv->chip_ver = (id & AR8216_CTRL_VERSION) >> AR8216_CTRL_VERSION_S;
2121 priv->chip_rev = (id & AR8216_CTRL_REVISION);
2126 ar8xxx_id_chip(struct ar8xxx_priv *priv)
2130 ret = ar8xxx_read_id(priv);
2134 switch (priv->chip_ver) {
2135 case AR8XXX_VER_AR8216:
2136 priv->chip = &ar8216_chip;
2138 case AR8XXX_VER_AR8236:
2139 priv->chip = &ar8236_chip;
2141 case AR8XXX_VER_AR8316:
2142 priv->chip = &ar8316_chip;
2144 case AR8XXX_VER_AR8327:
2145 priv->chip = &ar8327_chip;
2147 case AR8XXX_VER_AR8337:
2148 priv->chip = &ar8337_chip;
2151 pr_err("ar8216: Unknown Atheros device [ver=%d, rev=%d]\n",
2152 priv->chip_ver, priv->chip_rev);
2161 ar8xxx_mib_work_func(struct work_struct *work)
2163 struct ar8xxx_priv *priv;
2166 priv = container_of(work, struct ar8xxx_priv, mib_work.work);
2168 mutex_lock(&priv->mib_lock);
2170 err = ar8xxx_mib_capture(priv);
2174 ar8xxx_mib_fetch_port_stat(priv, priv->mib_next_port, false);
2177 priv->mib_next_port++;
2178 if (priv->mib_next_port >= priv->dev.ports)
2179 priv->mib_next_port = 0;
2181 mutex_unlock(&priv->mib_lock);
2182 schedule_delayed_work(&priv->mib_work,
2183 msecs_to_jiffies(AR8XXX_MIB_WORK_DELAY));
2187 ar8xxx_mib_init(struct ar8xxx_priv *priv)
2191 if (!ar8xxx_has_mib_counters(priv))
2194 BUG_ON(!priv->chip->mib_decs || !priv->chip->num_mibs);
2196 len = priv->dev.ports * priv->chip->num_mibs *
2197 sizeof(*priv->mib_stats);
2198 priv->mib_stats = kzalloc(len, GFP_KERNEL);
2200 if (!priv->mib_stats)
2207 ar8xxx_mib_start(struct ar8xxx_priv *priv)
2209 if (!ar8xxx_has_mib_counters(priv))
2212 schedule_delayed_work(&priv->mib_work,
2213 msecs_to_jiffies(AR8XXX_MIB_WORK_DELAY));
2217 ar8xxx_mib_stop(struct ar8xxx_priv *priv)
2219 if (!ar8xxx_has_mib_counters(priv))
2222 cancel_delayed_work_sync(&priv->mib_work);
2225 static struct ar8xxx_priv *
2228 struct ar8xxx_priv *priv;
2230 priv = kzalloc(sizeof(struct ar8xxx_priv), GFP_KERNEL);
2234 mutex_init(&priv->reg_mutex);
2235 mutex_init(&priv->mib_lock);
2236 INIT_DELAYED_WORK(&priv->mib_work, ar8xxx_mib_work_func);
2242 ar8xxx_free(struct ar8xxx_priv *priv)
2244 if (priv->chip && priv->chip->cleanup)
2245 priv->chip->cleanup(priv);
2247 kfree(priv->chip_data);
2248 kfree(priv->mib_stats);
2253 ar8xxx_probe_switch(struct ar8xxx_priv *priv)
2255 const struct ar8xxx_chip *chip;
2256 struct switch_dev *swdev;
2262 swdev->cpu_port = AR8216_PORT_CPU;
2263 swdev->name = chip->name;
2264 swdev->vlans = chip->vlans;
2265 swdev->ports = chip->ports;
2266 swdev->ops = chip->swops;
2268 ret = ar8xxx_mib_init(priv);
2276 ar8xxx_start(struct ar8xxx_priv *priv)
2282 ret = priv->chip->hw_init(priv);
2286 ret = ar8xxx_sw_reset_switch(&priv->dev);
2292 ar8xxx_mib_start(priv);
2298 ar8xxx_phy_config_init(struct phy_device *phydev)
2300 struct ar8xxx_priv *priv = phydev->priv;
2301 struct net_device *dev = phydev->attached_dev;
2307 if (priv->chip->config_at_probe)
2308 return ar8xxx_phy_check_aneg(phydev);
2312 if (phydev->mdio.addr != 0) {
2313 if (chip_is_ar8316(priv)) {
2314 /* switch device has been initialized, reinit */
2315 priv->dev.ports = (AR8216_NUM_PORTS - 1);
2316 priv->initialized = false;
2317 priv->port4_phy = true;
2318 ar8316_hw_init(priv);
2325 ret = ar8xxx_start(priv);
2329 /* VID fixup only needed on ar8216 */
2330 if (chip_is_ar8216(priv)) {
2331 dev->phy_ptr = priv;
2332 dev->priv_flags |= IFF_NO_IP_ALIGN;
2333 dev->eth_mangle_rx = ar8216_mangle_rx;
2334 dev->eth_mangle_tx = ar8216_mangle_tx;
2341 ar8xxx_check_link_states(struct ar8xxx_priv *priv)
2343 bool link_new, changed = false;
2347 mutex_lock(&priv->reg_mutex);
2349 for (i = 0; i < priv->dev.ports; i++) {
2350 status = priv->chip->read_port_status(priv, i);
2351 link_new = !!(status & AR8216_PORT_STATUS_LINK_UP);
2352 if (link_new == priv->link_up[i])
2355 priv->link_up[i] = link_new;
2357 /* flush ARL entries for this port if it went down*/
2359 priv->chip->atu_flush_port(priv, i);
2360 dev_info(&priv->phy->mdio.dev, "Port %d is %s\n",
2361 i, link_new ? "up" : "down");
2364 mutex_unlock(&priv->reg_mutex);
2370 ar8xxx_phy_read_status(struct phy_device *phydev)
2372 struct ar8xxx_priv *priv = phydev->priv;
2373 struct switch_port_link link;
2375 /* check for switch port link changes */
2376 if (phydev->state == PHY_CHANGELINK)
2377 ar8xxx_check_link_states(priv);
2379 if (phydev->mdio.addr != 0)
2380 return genphy_read_status(phydev);
2382 ar8216_read_port_link(priv, phydev->mdio.addr, &link);
2383 phydev->link = !!link.link;
2387 switch (link.speed) {
2388 case SWITCH_PORT_SPEED_10:
2389 phydev->speed = SPEED_10;
2391 case SWITCH_PORT_SPEED_100:
2392 phydev->speed = SPEED_100;
2394 case SWITCH_PORT_SPEED_1000:
2395 phydev->speed = SPEED_1000;
2400 phydev->duplex = link.duplex ? DUPLEX_FULL : DUPLEX_HALF;
2402 phydev->state = PHY_RUNNING;
2403 netif_carrier_on(phydev->attached_dev);
2404 if (phydev->adjust_link)
2405 phydev->adjust_link(phydev->attached_dev);
2411 ar8xxx_phy_config_aneg(struct phy_device *phydev)
2413 if (phydev->mdio.addr == 0)
2416 return genphy_config_aneg(phydev);
2419 static const u32 ar8xxx_phy_ids[] = {
2421 0x004dd034, /* AR8327 */
2422 0x004dd036, /* AR8337 */
2425 0x004dd043, /* AR8236 */
2429 ar8xxx_phy_match(u32 phy_id)
2433 for (i = 0; i < ARRAY_SIZE(ar8xxx_phy_ids); i++)
2434 if (phy_id == ar8xxx_phy_ids[i])
2441 ar8xxx_is_possible(struct mii_bus *bus)
2443 unsigned int i, found_phys = 0;
2445 for (i = 0; i < 5; i++) {
2448 phy_id = mdiobus_read(bus, i, MII_PHYSID1) << 16;
2449 phy_id |= mdiobus_read(bus, i, MII_PHYSID2);
2450 if (ar8xxx_phy_match(phy_id)) {
2452 } else if (phy_id) {
2453 pr_debug("ar8xxx: unknown PHY at %s:%02x id:%08x\n",
2454 dev_name(&bus->dev), i, phy_id);
2457 return !!found_phys;
2461 ar8xxx_phy_probe(struct phy_device *phydev)
2463 struct ar8xxx_priv *priv;
2464 struct switch_dev *swdev;
2467 /* skip PHYs at unused adresses */
2468 if (phydev->mdio.addr != 0 && phydev->mdio.addr != 3 && phydev->mdio.addr != 4)
2471 if (!ar8xxx_is_possible(phydev->mdio.bus))
2474 mutex_lock(&ar8xxx_dev_list_lock);
2475 list_for_each_entry(priv, &ar8xxx_dev_list, list)
2476 if (priv->mii_bus == phydev->mdio.bus)
2479 priv = ar8xxx_create();
2485 priv->mii_bus = phydev->mdio.bus;
2486 priv->pdev = &phydev->mdio.dev;
2488 ret = ar8xxx_id_chip(priv);
2492 ret = ar8xxx_probe_switch(priv);
2497 swdev->alias = dev_name(&priv->mii_bus->dev);
2498 ret = register_switch(swdev, NULL);
2502 pr_info("%s: %s rev. %u switch registered on %s\n",
2503 swdev->devname, swdev->name, priv->chip_rev,
2504 dev_name(&priv->mii_bus->dev));
2506 list_add(&priv->list, &ar8xxx_dev_list);
2511 if (phydev->mdio.addr == 0) {
2512 if (ar8xxx_has_gige(priv)) {
2513 phydev->supported = SUPPORTED_1000baseT_Full;
2514 phydev->advertising = ADVERTISED_1000baseT_Full;
2516 phydev->supported = SUPPORTED_100baseT_Full;
2517 phydev->advertising = ADVERTISED_100baseT_Full;
2520 if (priv->chip->config_at_probe) {
2523 ret = ar8xxx_start(priv);
2525 goto err_unregister_switch;
2528 if (ar8xxx_has_gige(priv)) {
2529 phydev->supported |= SUPPORTED_1000baseT_Full;
2530 phydev->advertising |= ADVERTISED_1000baseT_Full;
2532 if (priv->chip->phy_rgmii_set)
2533 priv->chip->phy_rgmii_set(priv, phydev);
2536 phydev->priv = priv;
2538 mutex_unlock(&ar8xxx_dev_list_lock);
2542 err_unregister_switch:
2543 if (--priv->use_count)
2546 unregister_switch(&priv->dev);
2551 mutex_unlock(&ar8xxx_dev_list_lock);
2556 ar8xxx_phy_detach(struct phy_device *phydev)
2558 struct net_device *dev = phydev->attached_dev;
2563 dev->phy_ptr = NULL;
2564 dev->priv_flags &= ~IFF_NO_IP_ALIGN;
2565 dev->eth_mangle_rx = NULL;
2566 dev->eth_mangle_tx = NULL;
2570 ar8xxx_phy_remove(struct phy_device *phydev)
2572 struct ar8xxx_priv *priv = phydev->priv;
2577 phydev->priv = NULL;
2579 mutex_lock(&ar8xxx_dev_list_lock);
2581 if (--priv->use_count > 0) {
2582 mutex_unlock(&ar8xxx_dev_list_lock);
2586 list_del(&priv->list);
2587 mutex_unlock(&ar8xxx_dev_list_lock);
2589 unregister_switch(&priv->dev);
2590 ar8xxx_mib_stop(priv);
2595 ar8xxx_phy_soft_reset(struct phy_device *phydev)
2597 /* we don't need an extra reset */
2601 static struct phy_driver ar8xxx_phy_driver[] = {
2603 .phy_id = 0x004d0000,
2604 .name = "Atheros AR8216/AR8236/AR8316",
2605 .phy_id_mask = 0xffff0000,
2606 .features = PHY_BASIC_FEATURES,
2607 .probe = ar8xxx_phy_probe,
2608 .remove = ar8xxx_phy_remove,
2609 .detach = ar8xxx_phy_detach,
2610 .config_init = ar8xxx_phy_config_init,
2611 .config_aneg = ar8xxx_phy_config_aneg,
2612 .read_status = ar8xxx_phy_read_status,
2613 .soft_reset = ar8xxx_phy_soft_reset,
2617 static const struct of_device_id ar8xxx_mdiodev_of_match[] = {
2619 .compatible = "qca,ar7240sw",
2620 .data = &ar7240sw_chip,
2622 .compatible = "qca,ar8229",
2623 .data = &ar8229_chip,
2625 .compatible = "qca,ar8236",
2626 .data = &ar8236_chip,
2628 .compatible = "qca,ar8327",
2629 .data = &ar8327_chip,
2635 ar8xxx_mdiodev_probe(struct mdio_device *mdiodev)
2637 const struct of_device_id *match;
2638 struct ar8xxx_priv *priv;
2639 struct switch_dev *swdev;
2640 struct device_node *mdio_node;
2643 match = of_match_device(ar8xxx_mdiodev_of_match, &mdiodev->dev);
2647 priv = ar8xxx_create();
2651 priv->mii_bus = mdiodev->bus;
2652 priv->pdev = &mdiodev->dev;
2653 priv->chip = (const struct ar8xxx_chip *) match->data;
2655 ret = ar8xxx_read_id(priv);
2659 ret = ar8xxx_probe_switch(priv);
2663 if (priv->chip->phy_read && priv->chip->phy_write) {
2664 priv->sw_mii_bus = devm_mdiobus_alloc(&mdiodev->dev);
2665 priv->sw_mii_bus->name = "ar8xxx-mdio";
2666 priv->sw_mii_bus->read = ar8xxx_phy_read;
2667 priv->sw_mii_bus->write = ar8xxx_phy_write;
2668 priv->sw_mii_bus->priv = priv;
2669 priv->sw_mii_bus->parent = &mdiodev->dev;
2670 snprintf(priv->sw_mii_bus->id, MII_BUS_ID_SIZE, "%s",
2671 dev_name(&mdiodev->dev));
2672 mdio_node = of_get_child_by_name(priv->pdev->of_node, "mdio-bus");
2673 ret = of_mdiobus_register(priv->sw_mii_bus, mdio_node);
2679 swdev->alias = dev_name(&mdiodev->dev);
2681 if (of_property_read_bool(priv->pdev->of_node, "qca,phy4-mii-enable")) {
2682 priv->port4_phy = true;
2686 ret = register_switch(swdev, NULL);
2690 pr_info("%s: %s rev. %u switch registered on %s\n",
2691 swdev->devname, swdev->name, priv->chip_rev,
2692 dev_name(&priv->mii_bus->dev));
2694 mutex_lock(&ar8xxx_dev_list_lock);
2695 list_add(&priv->list, &ar8xxx_dev_list);
2696 mutex_unlock(&ar8xxx_dev_list_lock);
2700 ret = ar8xxx_start(priv);
2702 goto err_unregister_switch;
2704 dev_set_drvdata(&mdiodev->dev, priv);
2708 err_unregister_switch:
2709 if (--priv->use_count)
2712 unregister_switch(&priv->dev);
2720 ar8xxx_mdiodev_remove(struct mdio_device *mdiodev)
2722 struct ar8xxx_priv *priv = dev_get_drvdata(&mdiodev->dev);
2727 mutex_lock(&ar8xxx_dev_list_lock);
2729 if (--priv->use_count > 0) {
2730 mutex_unlock(&ar8xxx_dev_list_lock);
2734 list_del(&priv->list);
2735 mutex_unlock(&ar8xxx_dev_list_lock);
2737 unregister_switch(&priv->dev);
2738 ar8xxx_mib_stop(priv);
2739 if(priv->sw_mii_bus)
2740 mdiobus_unregister(priv->sw_mii_bus);
2744 static struct mdio_driver ar8xxx_mdio_driver = {
2745 .probe = ar8xxx_mdiodev_probe,
2746 .remove = ar8xxx_mdiodev_remove,
2748 .name = "ar8xxx-switch",
2749 .of_match_table = ar8xxx_mdiodev_of_match,
2753 static int __init ar8216_init(void)
2757 ret = phy_drivers_register(ar8xxx_phy_driver,
2758 ARRAY_SIZE(ar8xxx_phy_driver),
2763 ret = mdio_driver_register(&ar8xxx_mdio_driver);
2765 phy_drivers_unregister(ar8xxx_phy_driver,
2766 ARRAY_SIZE(ar8xxx_phy_driver));
2770 module_init(ar8216_init);
2772 static void __exit ar8216_exit(void)
2774 mdio_driver_unregister(&ar8xxx_mdio_driver);
2775 phy_drivers_unregister(ar8xxx_phy_driver,
2776 ARRAY_SIZE(ar8xxx_phy_driver));
2778 module_exit(ar8216_exit);
2780 MODULE_LICENSE("GPL");