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/bitops.h>
29 #include <net/genetlink.h>
30 #include <linux/switch.h>
31 #include <linux/delay.h>
32 #include <linux/phy.h>
33 #include <linux/etherdevice.h>
34 #include <linux/lockdep.h>
35 #include <linux/ar8216_platform.h>
36 #include <linux/workqueue.h>
37 #include <linux/version.h>
41 extern const struct ar8xxx_chip ar8327_chip
;
42 extern const struct ar8xxx_chip ar8337_chip
;
44 #define AR8XXX_MIB_WORK_DELAY 2000 /* msecs */
46 #define MIB_DESC(_s , _o, _n) \
53 static const struct ar8xxx_mib_desc ar8216_mibs
[] = {
54 MIB_DESC(1, AR8216_STATS_RXBROAD
, "RxBroad"),
55 MIB_DESC(1, AR8216_STATS_RXPAUSE
, "RxPause"),
56 MIB_DESC(1, AR8216_STATS_RXMULTI
, "RxMulti"),
57 MIB_DESC(1, AR8216_STATS_RXFCSERR
, "RxFcsErr"),
58 MIB_DESC(1, AR8216_STATS_RXALIGNERR
, "RxAlignErr"),
59 MIB_DESC(1, AR8216_STATS_RXRUNT
, "RxRunt"),
60 MIB_DESC(1, AR8216_STATS_RXFRAGMENT
, "RxFragment"),
61 MIB_DESC(1, AR8216_STATS_RX64BYTE
, "Rx64Byte"),
62 MIB_DESC(1, AR8216_STATS_RX128BYTE
, "Rx128Byte"),
63 MIB_DESC(1, AR8216_STATS_RX256BYTE
, "Rx256Byte"),
64 MIB_DESC(1, AR8216_STATS_RX512BYTE
, "Rx512Byte"),
65 MIB_DESC(1, AR8216_STATS_RX1024BYTE
, "Rx1024Byte"),
66 MIB_DESC(1, AR8216_STATS_RXMAXBYTE
, "RxMaxByte"),
67 MIB_DESC(1, AR8216_STATS_RXTOOLONG
, "RxTooLong"),
68 MIB_DESC(2, AR8216_STATS_RXGOODBYTE
, "RxGoodByte"),
69 MIB_DESC(2, AR8216_STATS_RXBADBYTE
, "RxBadByte"),
70 MIB_DESC(1, AR8216_STATS_RXOVERFLOW
, "RxOverFlow"),
71 MIB_DESC(1, AR8216_STATS_FILTERED
, "Filtered"),
72 MIB_DESC(1, AR8216_STATS_TXBROAD
, "TxBroad"),
73 MIB_DESC(1, AR8216_STATS_TXPAUSE
, "TxPause"),
74 MIB_DESC(1, AR8216_STATS_TXMULTI
, "TxMulti"),
75 MIB_DESC(1, AR8216_STATS_TXUNDERRUN
, "TxUnderRun"),
76 MIB_DESC(1, AR8216_STATS_TX64BYTE
, "Tx64Byte"),
77 MIB_DESC(1, AR8216_STATS_TX128BYTE
, "Tx128Byte"),
78 MIB_DESC(1, AR8216_STATS_TX256BYTE
, "Tx256Byte"),
79 MIB_DESC(1, AR8216_STATS_TX512BYTE
, "Tx512Byte"),
80 MIB_DESC(1, AR8216_STATS_TX1024BYTE
, "Tx1024Byte"),
81 MIB_DESC(1, AR8216_STATS_TXMAXBYTE
, "TxMaxByte"),
82 MIB_DESC(1, AR8216_STATS_TXOVERSIZE
, "TxOverSize"),
83 MIB_DESC(2, AR8216_STATS_TXBYTE
, "TxByte"),
84 MIB_DESC(1, AR8216_STATS_TXCOLLISION
, "TxCollision"),
85 MIB_DESC(1, AR8216_STATS_TXABORTCOL
, "TxAbortCol"),
86 MIB_DESC(1, AR8216_STATS_TXMULTICOL
, "TxMultiCol"),
87 MIB_DESC(1, AR8216_STATS_TXSINGLECOL
, "TxSingleCol"),
88 MIB_DESC(1, AR8216_STATS_TXEXCDEFER
, "TxExcDefer"),
89 MIB_DESC(1, AR8216_STATS_TXDEFER
, "TxDefer"),
90 MIB_DESC(1, AR8216_STATS_TXLATECOL
, "TxLateCol"),
93 const struct ar8xxx_mib_desc ar8236_mibs
[39] = {
94 MIB_DESC(1, AR8236_STATS_RXBROAD
, "RxBroad"),
95 MIB_DESC(1, AR8236_STATS_RXPAUSE
, "RxPause"),
96 MIB_DESC(1, AR8236_STATS_RXMULTI
, "RxMulti"),
97 MIB_DESC(1, AR8236_STATS_RXFCSERR
, "RxFcsErr"),
98 MIB_DESC(1, AR8236_STATS_RXALIGNERR
, "RxAlignErr"),
99 MIB_DESC(1, AR8236_STATS_RXRUNT
, "RxRunt"),
100 MIB_DESC(1, AR8236_STATS_RXFRAGMENT
, "RxFragment"),
101 MIB_DESC(1, AR8236_STATS_RX64BYTE
, "Rx64Byte"),
102 MIB_DESC(1, AR8236_STATS_RX128BYTE
, "Rx128Byte"),
103 MIB_DESC(1, AR8236_STATS_RX256BYTE
, "Rx256Byte"),
104 MIB_DESC(1, AR8236_STATS_RX512BYTE
, "Rx512Byte"),
105 MIB_DESC(1, AR8236_STATS_RX1024BYTE
, "Rx1024Byte"),
106 MIB_DESC(1, AR8236_STATS_RX1518BYTE
, "Rx1518Byte"),
107 MIB_DESC(1, AR8236_STATS_RXMAXBYTE
, "RxMaxByte"),
108 MIB_DESC(1, AR8236_STATS_RXTOOLONG
, "RxTooLong"),
109 MIB_DESC(2, AR8236_STATS_RXGOODBYTE
, "RxGoodByte"),
110 MIB_DESC(2, AR8236_STATS_RXBADBYTE
, "RxBadByte"),
111 MIB_DESC(1, AR8236_STATS_RXOVERFLOW
, "RxOverFlow"),
112 MIB_DESC(1, AR8236_STATS_FILTERED
, "Filtered"),
113 MIB_DESC(1, AR8236_STATS_TXBROAD
, "TxBroad"),
114 MIB_DESC(1, AR8236_STATS_TXPAUSE
, "TxPause"),
115 MIB_DESC(1, AR8236_STATS_TXMULTI
, "TxMulti"),
116 MIB_DESC(1, AR8236_STATS_TXUNDERRUN
, "TxUnderRun"),
117 MIB_DESC(1, AR8236_STATS_TX64BYTE
, "Tx64Byte"),
118 MIB_DESC(1, AR8236_STATS_TX128BYTE
, "Tx128Byte"),
119 MIB_DESC(1, AR8236_STATS_TX256BYTE
, "Tx256Byte"),
120 MIB_DESC(1, AR8236_STATS_TX512BYTE
, "Tx512Byte"),
121 MIB_DESC(1, AR8236_STATS_TX1024BYTE
, "Tx1024Byte"),
122 MIB_DESC(1, AR8236_STATS_TX1518BYTE
, "Tx1518Byte"),
123 MIB_DESC(1, AR8236_STATS_TXMAXBYTE
, "TxMaxByte"),
124 MIB_DESC(1, AR8236_STATS_TXOVERSIZE
, "TxOverSize"),
125 MIB_DESC(2, AR8236_STATS_TXBYTE
, "TxByte"),
126 MIB_DESC(1, AR8236_STATS_TXCOLLISION
, "TxCollision"),
127 MIB_DESC(1, AR8236_STATS_TXABORTCOL
, "TxAbortCol"),
128 MIB_DESC(1, AR8236_STATS_TXMULTICOL
, "TxMultiCol"),
129 MIB_DESC(1, AR8236_STATS_TXSINGLECOL
, "TxSingleCol"),
130 MIB_DESC(1, AR8236_STATS_TXEXCDEFER
, "TxExcDefer"),
131 MIB_DESC(1, AR8236_STATS_TXDEFER
, "TxDefer"),
132 MIB_DESC(1, AR8236_STATS_TXLATECOL
, "TxLateCol"),
135 static DEFINE_MUTEX(ar8xxx_dev_list_lock
);
136 static LIST_HEAD(ar8xxx_dev_list
);
138 /* inspired by phy_poll_reset in drivers/net/phy/phy_device.c */
140 ar8xxx_phy_poll_reset(struct mii_bus
*bus
)
142 unsigned int sleep_msecs
= 20;
145 for (elapsed
= sleep_msecs
; elapsed
<= 600;
146 elapsed
+= sleep_msecs
) {
148 for (i
= 0; i
< AR8XXX_NUM_PHYS
; i
++) {
149 ret
= mdiobus_read(bus
, i
, MII_BMCR
);
152 if (ret
& BMCR_RESET
)
154 if (i
== AR8XXX_NUM_PHYS
- 1) {
155 usleep_range(1000, 2000);
164 ar8xxx_phy_check_aneg(struct phy_device
*phydev
)
168 if (phydev
->autoneg
!= AUTONEG_ENABLE
)
171 * BMCR_ANENABLE might have been cleared
172 * by phy_init_hw in certain kernel versions
173 * therefore check for it
175 ret
= phy_read(phydev
, MII_BMCR
);
178 if (ret
& BMCR_ANENABLE
)
181 dev_info(&phydev
->mdio
.dev
, "ANEG disabled, re-enabling ...\n");
182 ret
|= BMCR_ANENABLE
| BMCR_ANRESTART
;
183 return phy_write(phydev
, MII_BMCR
, ret
);
187 ar8xxx_phy_init(struct ar8xxx_priv
*priv
)
193 for (i
= 0; i
< AR8XXX_NUM_PHYS
; i
++) {
194 if (priv
->chip
->phy_fixup
)
195 priv
->chip
->phy_fixup(priv
, i
);
197 /* initialize the port itself */
198 mdiobus_write(bus
, i
, MII_ADVERTISE
,
199 ADVERTISE_ALL
| ADVERTISE_PAUSE_CAP
| ADVERTISE_PAUSE_ASYM
);
200 if (ar8xxx_has_gige(priv
))
201 mdiobus_write(bus
, i
, MII_CTRL1000
, ADVERTISE_1000FULL
);
202 mdiobus_write(bus
, i
, MII_BMCR
, BMCR_RESET
| BMCR_ANENABLE
);
205 ar8xxx_phy_poll_reset(bus
);
209 ar8xxx_mii_read32(struct ar8xxx_priv
*priv
, int phy_id
, int regnum
)
211 struct mii_bus
*bus
= priv
->mii_bus
;
214 lo
= bus
->read(bus
, phy_id
, regnum
);
215 hi
= bus
->read(bus
, phy_id
, regnum
+ 1);
217 return (hi
<< 16) | lo
;
221 ar8xxx_mii_write32(struct ar8xxx_priv
*priv
, int phy_id
, int regnum
, u32 val
)
223 struct mii_bus
*bus
= priv
->mii_bus
;
227 hi
= (u16
) (val
>> 16);
229 if (priv
->chip
->mii_lo_first
)
231 bus
->write(bus
, phy_id
, regnum
, lo
);
232 bus
->write(bus
, phy_id
, regnum
+ 1, hi
);
234 bus
->write(bus
, phy_id
, regnum
+ 1, hi
);
235 bus
->write(bus
, phy_id
, regnum
, lo
);
240 ar8xxx_read(struct ar8xxx_priv
*priv
, int reg
)
242 struct mii_bus
*bus
= priv
->mii_bus
;
246 split_addr((u32
) reg
, &r1
, &r2
, &page
);
248 mutex_lock(&bus
->mdio_lock
);
250 bus
->write(bus
, 0x18, 0, page
);
251 wait_for_page_switch();
252 val
= ar8xxx_mii_read32(priv
, 0x10 | r2
, r1
);
254 mutex_unlock(&bus
->mdio_lock
);
260 ar8xxx_write(struct ar8xxx_priv
*priv
, int reg
, u32 val
)
262 struct mii_bus
*bus
= priv
->mii_bus
;
265 split_addr((u32
) reg
, &r1
, &r2
, &page
);
267 mutex_lock(&bus
->mdio_lock
);
269 bus
->write(bus
, 0x18, 0, page
);
270 wait_for_page_switch();
271 ar8xxx_mii_write32(priv
, 0x10 | r2
, r1
, val
);
273 mutex_unlock(&bus
->mdio_lock
);
277 ar8xxx_rmw(struct ar8xxx_priv
*priv
, int reg
, u32 mask
, u32 val
)
279 struct mii_bus
*bus
= priv
->mii_bus
;
283 split_addr((u32
) reg
, &r1
, &r2
, &page
);
285 mutex_lock(&bus
->mdio_lock
);
287 bus
->write(bus
, 0x18, 0, page
);
288 wait_for_page_switch();
290 ret
= ar8xxx_mii_read32(priv
, 0x10 | r2
, r1
);
293 ar8xxx_mii_write32(priv
, 0x10 | r2
, r1
, ret
);
295 mutex_unlock(&bus
->mdio_lock
);
300 ar8xxx_phy_dbg_read(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 *dbg_data
= bus
->read(bus
, phy_addr
, MII_ATH_DBG_DATA
);
308 mutex_unlock(&bus
->mdio_lock
);
312 ar8xxx_phy_dbg_write(struct ar8xxx_priv
*priv
, int phy_addr
,
313 u16 dbg_addr
, u16 dbg_data
)
315 struct mii_bus
*bus
= priv
->mii_bus
;
317 mutex_lock(&bus
->mdio_lock
);
318 bus
->write(bus
, phy_addr
, MII_ATH_DBG_ADDR
, dbg_addr
);
319 bus
->write(bus
, phy_addr
, MII_ATH_DBG_DATA
, dbg_data
);
320 mutex_unlock(&bus
->mdio_lock
);
324 ar8xxx_phy_mmd_prep(struct mii_bus
*bus
, int phy_addr
, u16 addr
, u16 reg
)
326 bus
->write(bus
, phy_addr
, MII_ATH_MMD_ADDR
, addr
);
327 bus
->write(bus
, phy_addr
, MII_ATH_MMD_DATA
, reg
);
328 bus
->write(bus
, phy_addr
, MII_ATH_MMD_ADDR
, addr
| 0x4000);
332 ar8xxx_phy_mmd_write(struct ar8xxx_priv
*priv
, int phy_addr
, u16 addr
, u16 reg
, u16 data
)
334 struct mii_bus
*bus
= priv
->mii_bus
;
336 mutex_lock(&bus
->mdio_lock
);
337 ar8xxx_phy_mmd_prep(bus
, phy_addr
, addr
, reg
);
338 bus
->write(bus
, phy_addr
, MII_ATH_MMD_DATA
, data
);
339 mutex_unlock(&bus
->mdio_lock
);
343 ar8xxx_phy_mmd_read(struct ar8xxx_priv
*priv
, int phy_addr
, u16 addr
, u16 reg
)
345 struct mii_bus
*bus
= priv
->mii_bus
;
348 mutex_lock(&bus
->mdio_lock
);
349 ar8xxx_phy_mmd_prep(bus
, phy_addr
, addr
, reg
);
350 data
= bus
->read(bus
, phy_addr
, MII_ATH_MMD_DATA
);
351 mutex_unlock(&bus
->mdio_lock
);
357 ar8xxx_reg_wait(struct ar8xxx_priv
*priv
, u32 reg
, u32 mask
, u32 val
,
362 for (i
= 0; i
< timeout
; i
++) {
365 t
= ar8xxx_read(priv
, reg
);
366 if ((t
& mask
) == val
)
369 usleep_range(1000, 2000);
377 ar8xxx_mib_op(struct ar8xxx_priv
*priv
, u32 op
)
379 unsigned mib_func
= priv
->chip
->mib_func
;
382 lockdep_assert_held(&priv
->mib_lock
);
384 /* Capture the hardware statistics for all ports */
385 ar8xxx_rmw(priv
, mib_func
, AR8216_MIB_FUNC
, (op
<< AR8216_MIB_FUNC_S
));
387 /* Wait for the capturing to complete. */
388 ret
= ar8xxx_reg_wait(priv
, mib_func
, AR8216_MIB_BUSY
, 0, 10);
399 ar8xxx_mib_capture(struct ar8xxx_priv
*priv
)
401 return ar8xxx_mib_op(priv
, AR8216_MIB_FUNC_CAPTURE
);
405 ar8xxx_mib_flush(struct ar8xxx_priv
*priv
)
407 return ar8xxx_mib_op(priv
, AR8216_MIB_FUNC_FLUSH
);
411 ar8xxx_mib_fetch_port_stat(struct ar8xxx_priv
*priv
, int port
, bool flush
)
417 WARN_ON(port
>= priv
->dev
.ports
);
419 lockdep_assert_held(&priv
->mib_lock
);
421 base
= priv
->chip
->reg_port_stats_start
+
422 priv
->chip
->reg_port_stats_length
* port
;
424 mib_stats
= &priv
->mib_stats
[port
* priv
->chip
->num_mibs
];
425 for (i
= 0; i
< priv
->chip
->num_mibs
; i
++) {
426 const struct ar8xxx_mib_desc
*mib
;
429 mib
= &priv
->chip
->mib_decs
[i
];
430 t
= ar8xxx_read(priv
, base
+ mib
->offset
);
431 if (mib
->size
== 2) {
434 hi
= ar8xxx_read(priv
, base
+ mib
->offset
+ 4);
447 ar8216_read_port_link(struct ar8xxx_priv
*priv
, int port
,
448 struct switch_port_link
*link
)
453 memset(link
, '\0', sizeof(*link
));
455 status
= priv
->chip
->read_port_status(priv
, port
);
457 link
->aneg
= !!(status
& AR8216_PORT_STATUS_LINK_AUTO
);
459 link
->link
= !!(status
& AR8216_PORT_STATUS_LINK_UP
);
463 if (priv
->get_port_link
) {
466 err
= priv
->get_port_link(port
);
475 link
->duplex
= !!(status
& AR8216_PORT_STATUS_DUPLEX
);
476 link
->tx_flow
= !!(status
& AR8216_PORT_STATUS_TXFLOW
);
477 link
->rx_flow
= !!(status
& AR8216_PORT_STATUS_RXFLOW
);
479 if (link
->aneg
&& link
->duplex
&& priv
->chip
->read_port_eee_status
)
480 link
->eee
= priv
->chip
->read_port_eee_status(priv
, port
);
482 speed
= (status
& AR8216_PORT_STATUS_SPEED
) >>
483 AR8216_PORT_STATUS_SPEED_S
;
486 case AR8216_PORT_SPEED_10M
:
487 link
->speed
= SWITCH_PORT_SPEED_10
;
489 case AR8216_PORT_SPEED_100M
:
490 link
->speed
= SWITCH_PORT_SPEED_100
;
492 case AR8216_PORT_SPEED_1000M
:
493 link
->speed
= SWITCH_PORT_SPEED_1000
;
496 link
->speed
= SWITCH_PORT_SPEED_UNKNOWN
;
501 static struct sk_buff
*
502 ar8216_mangle_tx(struct net_device
*dev
, struct sk_buff
*skb
)
504 struct ar8xxx_priv
*priv
= dev
->phy_ptr
;
513 if (unlikely(skb_headroom(skb
) < 2)) {
514 if (pskb_expand_head(skb
, 2, 0, GFP_ATOMIC
) < 0)
518 buf
= skb_push(skb
, 2);
526 dev_kfree_skb_any(skb
);
531 ar8216_mangle_rx(struct net_device
*dev
, struct sk_buff
*skb
)
533 struct ar8xxx_priv
*priv
;
541 /* don't strip the header if vlan mode is disabled */
545 /* strip header, get vlan id */
549 /* check for vlan header presence */
550 if ((buf
[12 + 2] != 0x81) || (buf
[13 + 2] != 0x00))
555 /* no need to fix up packets coming from a tagged source */
556 if (priv
->vlan_tagged
& (1 << port
))
559 /* lookup port vid from local table, the switch passes an invalid vlan id */
560 vlan
= priv
->vlan_id
[priv
->pvid
[port
]];
563 buf
[14 + 2] |= vlan
>> 8;
564 buf
[15 + 2] = vlan
& 0xff;
568 ar8216_wait_bit(struct ar8xxx_priv
*priv
, int reg
, u32 mask
, u32 val
)
574 t
= ar8xxx_read(priv
, reg
);
575 if ((t
& mask
) == val
)
585 pr_err("ar8216: timeout on reg %08x: %08x & %08x != %08x\n",
586 (unsigned int) reg
, t
, mask
, val
);
591 ar8216_vtu_op(struct ar8xxx_priv
*priv
, u32 op
, u32 val
)
593 if (ar8216_wait_bit(priv
, AR8216_REG_VTU
, AR8216_VTU_ACTIVE
, 0))
595 if ((op
& AR8216_VTU_OP
) == AR8216_VTU_OP_LOAD
) {
596 val
&= AR8216_VTUDATA_MEMBER
;
597 val
|= AR8216_VTUDATA_VALID
;
598 ar8xxx_write(priv
, AR8216_REG_VTU_DATA
, val
);
600 op
|= AR8216_VTU_ACTIVE
;
601 ar8xxx_write(priv
, AR8216_REG_VTU
, op
);
605 ar8216_vtu_flush(struct ar8xxx_priv
*priv
)
607 ar8216_vtu_op(priv
, AR8216_VTU_OP_FLUSH
, 0);
611 ar8216_vtu_load_vlan(struct ar8xxx_priv
*priv
, u32 vid
, u32 port_mask
)
615 op
= AR8216_VTU_OP_LOAD
| (vid
<< AR8216_VTU_VID_S
);
616 ar8216_vtu_op(priv
, op
, port_mask
);
620 ar8216_atu_flush(struct ar8xxx_priv
*priv
)
624 ret
= ar8216_wait_bit(priv
, AR8216_REG_ATU_FUNC0
, AR8216_ATU_ACTIVE
, 0);
626 ar8xxx_write(priv
, AR8216_REG_ATU_FUNC0
, AR8216_ATU_OP_FLUSH
|
633 ar8216_atu_flush_port(struct ar8xxx_priv
*priv
, int port
)
638 ret
= ar8216_wait_bit(priv
, AR8216_REG_ATU_FUNC0
, AR8216_ATU_ACTIVE
, 0);
640 t
= (port
<< AR8216_ATU_PORT_NUM_S
) | AR8216_ATU_OP_FLUSH_PORT
;
641 t
|= AR8216_ATU_ACTIVE
;
642 ar8xxx_write(priv
, AR8216_REG_ATU_FUNC0
, t
);
649 ar8216_read_port_status(struct ar8xxx_priv
*priv
, int port
)
651 return ar8xxx_read(priv
, AR8216_REG_PORT_STATUS(port
));
655 ar8216_setup_port(struct ar8xxx_priv
*priv
, int port
, u32 members
)
662 pvid
= priv
->vlan_id
[priv
->pvid
[port
]];
663 if (priv
->vlan_tagged
& (1 << port
))
664 egress
= AR8216_OUT_ADD_VLAN
;
666 egress
= AR8216_OUT_STRIP_VLAN
;
667 ingress
= AR8216_IN_SECURE
;
670 egress
= AR8216_OUT_KEEP
;
671 ingress
= AR8216_IN_PORT_ONLY
;
674 if (chip_is_ar8216(priv
) && priv
->vlan
&& port
== AR8216_PORT_CPU
)
675 header
= AR8216_PORT_CTRL_HEADER
;
679 ar8xxx_rmw(priv
, AR8216_REG_PORT_CTRL(port
),
680 AR8216_PORT_CTRL_LEARN
| AR8216_PORT_CTRL_VLAN_MODE
|
681 AR8216_PORT_CTRL_SINGLE_VLAN
| AR8216_PORT_CTRL_STATE
|
682 AR8216_PORT_CTRL_HEADER
| AR8216_PORT_CTRL_LEARN_LOCK
,
683 AR8216_PORT_CTRL_LEARN
| header
|
684 (egress
<< AR8216_PORT_CTRL_VLAN_MODE_S
) |
685 (AR8216_PORT_STATE_FORWARD
<< AR8216_PORT_CTRL_STATE_S
));
687 ar8xxx_rmw(priv
, AR8216_REG_PORT_VLAN(port
),
688 AR8216_PORT_VLAN_DEST_PORTS
| AR8216_PORT_VLAN_MODE
|
689 AR8216_PORT_VLAN_DEFAULT_ID
,
690 (members
<< AR8216_PORT_VLAN_DEST_PORTS_S
) |
691 (ingress
<< AR8216_PORT_VLAN_MODE_S
) |
692 (pvid
<< AR8216_PORT_VLAN_DEFAULT_ID_S
));
696 ar8216_hw_init(struct ar8xxx_priv
*priv
)
698 if (priv
->initialized
)
701 ar8xxx_phy_init(priv
);
703 priv
->initialized
= true;
708 ar8216_init_globals(struct ar8xxx_priv
*priv
)
710 /* standard atheros magic */
711 ar8xxx_write(priv
, 0x38, 0xc000050e);
713 ar8xxx_rmw(priv
, AR8216_REG_GLOBAL_CTRL
,
714 AR8216_GCTRL_MTU
, 1518 + 8 + 2);
718 ar8216_init_port(struct ar8xxx_priv
*priv
, int port
)
720 /* Enable port learning and tx */
721 ar8xxx_write(priv
, AR8216_REG_PORT_CTRL(port
),
722 AR8216_PORT_CTRL_LEARN
|
723 (4 << AR8216_PORT_CTRL_STATE_S
));
725 ar8xxx_write(priv
, AR8216_REG_PORT_VLAN(port
), 0);
727 if (port
== AR8216_PORT_CPU
) {
728 ar8xxx_write(priv
, AR8216_REG_PORT_STATUS(port
),
729 AR8216_PORT_STATUS_LINK_UP
|
730 (ar8xxx_has_gige(priv
) ?
731 AR8216_PORT_SPEED_1000M
: AR8216_PORT_SPEED_100M
) |
732 AR8216_PORT_STATUS_TXMAC
|
733 AR8216_PORT_STATUS_RXMAC
|
734 (chip_is_ar8316(priv
) ? AR8216_PORT_STATUS_RXFLOW
: 0) |
735 (chip_is_ar8316(priv
) ? AR8216_PORT_STATUS_TXFLOW
: 0) |
736 AR8216_PORT_STATUS_DUPLEX
);
738 ar8xxx_write(priv
, AR8216_REG_PORT_STATUS(port
),
739 AR8216_PORT_STATUS_LINK_AUTO
);
744 ar8216_wait_atu_ready(struct ar8xxx_priv
*priv
, u16 r2
, u16 r1
)
748 while (ar8xxx_mii_read32(priv
, r2
, r1
) & AR8216_ATU_ACTIVE
&& --timeout
) {
754 pr_err("ar8216: timeout waiting for atu to become ready\n");
757 static void ar8216_get_arl_entry(struct ar8xxx_priv
*priv
,
758 struct arl_entry
*a
, u32
*status
, enum arl_op op
)
760 struct mii_bus
*bus
= priv
->mii_bus
;
762 u16 r1_func0
, r1_func1
, r1_func2
;
763 u32 t
, val0
, val1
, val2
;
765 split_addr(AR8216_REG_ATU_FUNC0
, &r1_func0
, &r2
, &page
);
768 r1_func1
= (AR8216_REG_ATU_FUNC1
>> 1) & 0x1e;
769 r1_func2
= (AR8216_REG_ATU_FUNC2
>> 1) & 0x1e;
772 case AR8XXX_ARL_INITIALIZE
:
773 /* all ATU registers are on the same page
774 * therefore set page only once
776 bus
->write(bus
, 0x18, 0, page
);
777 wait_for_page_switch();
779 ar8216_wait_atu_ready(priv
, r2
, r1_func0
);
781 ar8xxx_mii_write32(priv
, r2
, r1_func0
, AR8216_ATU_OP_GET_NEXT
);
782 ar8xxx_mii_write32(priv
, r2
, r1_func1
, 0);
783 ar8xxx_mii_write32(priv
, r2
, r1_func2
, 0);
785 case AR8XXX_ARL_GET_NEXT
:
786 t
= ar8xxx_mii_read32(priv
, r2
, r1_func0
);
787 t
|= AR8216_ATU_ACTIVE
;
788 ar8xxx_mii_write32(priv
, r2
, r1_func0
, t
);
789 ar8216_wait_atu_ready(priv
, r2
, r1_func0
);
791 val0
= ar8xxx_mii_read32(priv
, r2
, r1_func0
);
792 val1
= ar8xxx_mii_read32(priv
, r2
, r1_func1
);
793 val2
= ar8xxx_mii_read32(priv
, r2
, r1_func2
);
795 *status
= (val2
& AR8216_ATU_STATUS
) >> AR8216_ATU_STATUS_S
;
799 a
->portmap
= (val2
& AR8216_ATU_PORTS
) >> AR8216_ATU_PORTS_S
;
800 a
->mac
[0] = (val0
& AR8216_ATU_ADDR5
) >> AR8216_ATU_ADDR5_S
;
801 a
->mac
[1] = (val0
& AR8216_ATU_ADDR4
) >> AR8216_ATU_ADDR4_S
;
802 a
->mac
[2] = (val1
& AR8216_ATU_ADDR3
) >> AR8216_ATU_ADDR3_S
;
803 a
->mac
[3] = (val1
& AR8216_ATU_ADDR2
) >> AR8216_ATU_ADDR2_S
;
804 a
->mac
[4] = (val1
& AR8216_ATU_ADDR1
) >> AR8216_ATU_ADDR1_S
;
805 a
->mac
[5] = (val1
& AR8216_ATU_ADDR0
) >> AR8216_ATU_ADDR0_S
;
811 ar8236_setup_port(struct ar8xxx_priv
*priv
, int port
, u32 members
)
817 pvid
= priv
->vlan_id
[priv
->pvid
[port
]];
818 if (priv
->vlan_tagged
& (1 << port
))
819 egress
= AR8216_OUT_ADD_VLAN
;
821 egress
= AR8216_OUT_STRIP_VLAN
;
822 ingress
= AR8216_IN_SECURE
;
825 egress
= AR8216_OUT_KEEP
;
826 ingress
= AR8216_IN_PORT_ONLY
;
829 ar8xxx_rmw(priv
, AR8216_REG_PORT_CTRL(port
),
830 AR8216_PORT_CTRL_LEARN
| AR8216_PORT_CTRL_VLAN_MODE
|
831 AR8216_PORT_CTRL_SINGLE_VLAN
| AR8216_PORT_CTRL_STATE
|
832 AR8216_PORT_CTRL_HEADER
| AR8216_PORT_CTRL_LEARN_LOCK
,
833 AR8216_PORT_CTRL_LEARN
|
834 (egress
<< AR8216_PORT_CTRL_VLAN_MODE_S
) |
835 (AR8216_PORT_STATE_FORWARD
<< AR8216_PORT_CTRL_STATE_S
));
837 ar8xxx_rmw(priv
, AR8236_REG_PORT_VLAN(port
),
838 AR8236_PORT_VLAN_DEFAULT_ID
,
839 (pvid
<< AR8236_PORT_VLAN_DEFAULT_ID_S
));
841 ar8xxx_rmw(priv
, AR8236_REG_PORT_VLAN2(port
),
842 AR8236_PORT_VLAN2_VLAN_MODE
|
843 AR8236_PORT_VLAN2_MEMBER
,
844 (ingress
<< AR8236_PORT_VLAN2_VLAN_MODE_S
) |
845 (members
<< AR8236_PORT_VLAN2_MEMBER_S
));
849 ar8236_init_globals(struct ar8xxx_priv
*priv
)
851 /* enable jumbo frames */
852 ar8xxx_rmw(priv
, AR8216_REG_GLOBAL_CTRL
,
853 AR8316_GCTRL_MTU
, 9018 + 8 + 2);
855 /* enable cpu port to receive arp frames */
856 ar8xxx_reg_set(priv
, AR8216_REG_ATU_CTRL
,
857 AR8236_ATU_CTRL_RES
);
859 /* enable cpu port to receive multicast and broadcast frames */
860 ar8xxx_reg_set(priv
, AR8216_REG_FLOOD_MASK
,
861 AR8236_FM_CPU_BROADCAST_EN
| AR8236_FM_CPU_BCAST_FWD_EN
);
863 /* Enable MIB counters */
864 ar8xxx_rmw(priv
, AR8216_REG_MIB_FUNC
, AR8216_MIB_FUNC
| AR8236_MIB_EN
,
865 (AR8216_MIB_FUNC_NO_OP
<< AR8216_MIB_FUNC_S
) |
870 ar8316_hw_init(struct ar8xxx_priv
*priv
)
874 val
= ar8xxx_read(priv
, AR8316_REG_POSTRIP
);
876 if (priv
->phy
->interface
== PHY_INTERFACE_MODE_RGMII
) {
877 if (priv
->port4_phy
) {
878 /* value taken from Ubiquiti RouterStation Pro */
880 pr_info("ar8316: Using port 4 as PHY\n");
883 pr_info("ar8316: Using port 4 as switch port\n");
885 } else if (priv
->phy
->interface
== PHY_INTERFACE_MODE_GMII
) {
886 /* value taken from AVM Fritz!Box 7390 sources */
889 /* no known value for phy interface */
890 pr_err("ar8316: unsupported mii mode: %d.\n",
891 priv
->phy
->interface
);
898 ar8xxx_write(priv
, AR8316_REG_POSTRIP
, newval
);
900 if (priv
->port4_phy
&&
901 priv
->phy
->interface
== PHY_INTERFACE_MODE_RGMII
) {
902 /* work around for phy4 rgmii mode */
903 ar8xxx_phy_dbg_write(priv
, 4, 0x12, 0x480c);
905 ar8xxx_phy_dbg_write(priv
, 4, 0x0, 0x824e);
907 ar8xxx_phy_dbg_write(priv
, 4, 0x5, 0x3d47);
911 ar8xxx_phy_init(priv
);
914 priv
->initialized
= true;
919 ar8316_init_globals(struct ar8xxx_priv
*priv
)
921 /* standard atheros magic */
922 ar8xxx_write(priv
, 0x38, 0xc000050e);
924 /* enable cpu port to receive multicast and broadcast frames */
925 ar8xxx_write(priv
, AR8216_REG_FLOOD_MASK
, 0x003f003f);
927 /* enable jumbo frames */
928 ar8xxx_rmw(priv
, AR8216_REG_GLOBAL_CTRL
,
929 AR8316_GCTRL_MTU
, 9018 + 8 + 2);
931 /* Enable MIB counters */
932 ar8xxx_rmw(priv
, AR8216_REG_MIB_FUNC
, AR8216_MIB_FUNC
| AR8236_MIB_EN
,
933 (AR8216_MIB_FUNC_NO_OP
<< AR8216_MIB_FUNC_S
) |
938 ar8xxx_sw_set_vlan(struct switch_dev
*dev
, const struct switch_attr
*attr
,
939 struct switch_val
*val
)
941 struct ar8xxx_priv
*priv
= swdev_to_ar8xxx(dev
);
942 priv
->vlan
= !!val
->value
.i
;
947 ar8xxx_sw_get_vlan(struct switch_dev
*dev
, const struct switch_attr
*attr
,
948 struct switch_val
*val
)
950 struct ar8xxx_priv
*priv
= swdev_to_ar8xxx(dev
);
951 val
->value
.i
= priv
->vlan
;
957 ar8xxx_sw_set_pvid(struct switch_dev
*dev
, int port
, int vlan
)
959 struct ar8xxx_priv
*priv
= swdev_to_ar8xxx(dev
);
961 /* make sure no invalid PVIDs get set */
963 if (vlan
< 0 || vlan
>= dev
->vlans
||
964 port
< 0 || port
>= AR8X16_MAX_PORTS
)
967 priv
->pvid
[port
] = vlan
;
972 ar8xxx_sw_get_pvid(struct switch_dev
*dev
, int port
, int *vlan
)
974 struct ar8xxx_priv
*priv
= swdev_to_ar8xxx(dev
);
976 if (port
< 0 || port
>= AR8X16_MAX_PORTS
)
979 *vlan
= priv
->pvid
[port
];
984 ar8xxx_sw_set_vid(struct switch_dev
*dev
, const struct switch_attr
*attr
,
985 struct switch_val
*val
)
987 struct ar8xxx_priv
*priv
= swdev_to_ar8xxx(dev
);
989 if (val
->port_vlan
>= AR8X16_MAX_VLANS
)
992 priv
->vlan_id
[val
->port_vlan
] = val
->value
.i
;
997 ar8xxx_sw_get_vid(struct switch_dev
*dev
, const struct switch_attr
*attr
,
998 struct switch_val
*val
)
1000 struct ar8xxx_priv
*priv
= swdev_to_ar8xxx(dev
);
1001 val
->value
.i
= priv
->vlan_id
[val
->port_vlan
];
1006 ar8xxx_sw_get_port_link(struct switch_dev
*dev
, int port
,
1007 struct switch_port_link
*link
)
1009 struct ar8xxx_priv
*priv
= swdev_to_ar8xxx(dev
);
1011 ar8216_read_port_link(priv
, port
, link
);
1016 ar8xxx_sw_get_ports(struct switch_dev
*dev
, struct switch_val
*val
)
1018 struct ar8xxx_priv
*priv
= swdev_to_ar8xxx(dev
);
1022 if (val
->port_vlan
>= AR8X16_MAX_VLANS
)
1025 ports
= priv
->vlan_table
[val
->port_vlan
];
1027 for (i
= 0; i
< dev
->ports
; i
++) {
1028 struct switch_port
*p
;
1030 if (!(ports
& (1 << i
)))
1033 p
= &val
->value
.ports
[val
->len
++];
1035 if (priv
->vlan_tagged
& (1 << i
))
1036 p
->flags
= (1 << SWITCH_PORT_FLAG_TAGGED
);
1044 ar8xxx_sw_set_ports(struct switch_dev
*dev
, struct switch_val
*val
)
1046 struct ar8xxx_priv
*priv
= swdev_to_ar8xxx(dev
);
1047 u8
*vt
= &priv
->vlan_table
[val
->port_vlan
];
1051 for (i
= 0; i
< val
->len
; i
++) {
1052 struct switch_port
*p
= &val
->value
.ports
[i
];
1054 if (p
->flags
& (1 << SWITCH_PORT_FLAG_TAGGED
)) {
1055 priv
->vlan_tagged
|= (1 << p
->id
);
1057 priv
->vlan_tagged
&= ~(1 << p
->id
);
1058 priv
->pvid
[p
->id
] = val
->port_vlan
;
1060 /* make sure that an untagged port does not
1061 * appear in other vlans */
1062 for (j
= 0; j
< AR8X16_MAX_VLANS
; j
++) {
1063 if (j
== val
->port_vlan
)
1065 priv
->vlan_table
[j
] &= ~(1 << p
->id
);
1075 ar8216_set_mirror_regs(struct ar8xxx_priv
*priv
)
1079 /* reset all mirror registers */
1080 ar8xxx_rmw(priv
, AR8216_REG_GLOBAL_CPUPORT
,
1081 AR8216_GLOBAL_CPUPORT_MIRROR_PORT
,
1082 (0xF << AR8216_GLOBAL_CPUPORT_MIRROR_PORT_S
));
1083 for (port
= 0; port
< AR8216_NUM_PORTS
; port
++) {
1084 ar8xxx_reg_clear(priv
, AR8216_REG_PORT_CTRL(port
),
1085 AR8216_PORT_CTRL_MIRROR_RX
);
1087 ar8xxx_reg_clear(priv
, AR8216_REG_PORT_CTRL(port
),
1088 AR8216_PORT_CTRL_MIRROR_TX
);
1091 /* now enable mirroring if necessary */
1092 if (priv
->source_port
>= AR8216_NUM_PORTS
||
1093 priv
->monitor_port
>= AR8216_NUM_PORTS
||
1094 priv
->source_port
== priv
->monitor_port
) {
1098 ar8xxx_rmw(priv
, AR8216_REG_GLOBAL_CPUPORT
,
1099 AR8216_GLOBAL_CPUPORT_MIRROR_PORT
,
1100 (priv
->monitor_port
<< AR8216_GLOBAL_CPUPORT_MIRROR_PORT_S
));
1102 if (priv
->mirror_rx
)
1103 ar8xxx_reg_set(priv
, AR8216_REG_PORT_CTRL(priv
->source_port
),
1104 AR8216_PORT_CTRL_MIRROR_RX
);
1106 if (priv
->mirror_tx
)
1107 ar8xxx_reg_set(priv
, AR8216_REG_PORT_CTRL(priv
->source_port
),
1108 AR8216_PORT_CTRL_MIRROR_TX
);
1112 ar8xxx_age_time_val(int age_time
)
1114 return (age_time
+ AR8XXX_REG_ARL_CTRL_AGE_TIME_SECS
/ 2) /
1115 AR8XXX_REG_ARL_CTRL_AGE_TIME_SECS
;
1119 ar8xxx_set_age_time(struct ar8xxx_priv
*priv
, int reg
)
1121 u32 age_time
= ar8xxx_age_time_val(priv
->arl_age_time
);
1122 ar8xxx_rmw(priv
, reg
, AR8216_ATU_CTRL_AGE_TIME
, age_time
<< AR8216_ATU_CTRL_AGE_TIME_S
);
1126 ar8xxx_sw_hw_apply(struct switch_dev
*dev
)
1128 struct ar8xxx_priv
*priv
= swdev_to_ar8xxx(dev
);
1129 const struct ar8xxx_chip
*chip
= priv
->chip
;
1130 u8 portmask
[AR8X16_MAX_PORTS
];
1133 mutex_lock(&priv
->reg_mutex
);
1134 /* flush all vlan translation unit entries */
1135 priv
->chip
->vtu_flush(priv
);
1137 memset(portmask
, 0, sizeof(portmask
));
1139 /* calculate the port destination masks and load vlans
1140 * into the vlan translation unit */
1141 for (j
= 0; j
< AR8X16_MAX_VLANS
; j
++) {
1142 u8 vp
= priv
->vlan_table
[j
];
1147 for (i
= 0; i
< dev
->ports
; i
++) {
1150 portmask
[i
] |= vp
& ~mask
;
1153 chip
->vtu_load_vlan(priv
, priv
->vlan_id
[j
],
1154 priv
->vlan_table
[j
]);
1158 * isolate all ports, but connect them to the cpu port */
1159 for (i
= 0; i
< dev
->ports
; i
++) {
1160 if (i
== AR8216_PORT_CPU
)
1163 portmask
[i
] = 1 << AR8216_PORT_CPU
;
1164 portmask
[AR8216_PORT_CPU
] |= (1 << i
);
1168 /* update the port destination mask registers and tag settings */
1169 for (i
= 0; i
< dev
->ports
; i
++) {
1170 chip
->setup_port(priv
, i
, portmask
[i
]);
1173 chip
->set_mirror_regs(priv
);
1176 if (chip
->reg_arl_ctrl
)
1177 ar8xxx_set_age_time(priv
, chip
->reg_arl_ctrl
);
1179 mutex_unlock(&priv
->reg_mutex
);
1184 ar8xxx_sw_reset_switch(struct switch_dev
*dev
)
1186 struct ar8xxx_priv
*priv
= swdev_to_ar8xxx(dev
);
1187 const struct ar8xxx_chip
*chip
= priv
->chip
;
1190 mutex_lock(&priv
->reg_mutex
);
1191 memset(&priv
->vlan
, 0, sizeof(struct ar8xxx_priv
) -
1192 offsetof(struct ar8xxx_priv
, vlan
));
1194 for (i
= 0; i
< AR8X16_MAX_VLANS
; i
++)
1195 priv
->vlan_id
[i
] = i
;
1197 /* Configure all ports */
1198 for (i
= 0; i
< dev
->ports
; i
++)
1199 chip
->init_port(priv
, i
);
1201 priv
->mirror_rx
= false;
1202 priv
->mirror_tx
= false;
1203 priv
->source_port
= 0;
1204 priv
->monitor_port
= 0;
1205 priv
->arl_age_time
= AR8XXX_DEFAULT_ARL_AGE_TIME
;
1207 chip
->init_globals(priv
);
1208 chip
->atu_flush(priv
);
1210 mutex_unlock(&priv
->reg_mutex
);
1212 return chip
->sw_hw_apply(dev
);
1216 ar8xxx_sw_set_reset_mibs(struct switch_dev
*dev
,
1217 const struct switch_attr
*attr
,
1218 struct switch_val
*val
)
1220 struct ar8xxx_priv
*priv
= swdev_to_ar8xxx(dev
);
1224 if (!ar8xxx_has_mib_counters(priv
))
1227 mutex_lock(&priv
->mib_lock
);
1229 len
= priv
->dev
.ports
* priv
->chip
->num_mibs
*
1230 sizeof(*priv
->mib_stats
);
1231 memset(priv
->mib_stats
, '\0', len
);
1232 ret
= ar8xxx_mib_flush(priv
);
1239 mutex_unlock(&priv
->mib_lock
);
1244 ar8xxx_sw_set_mirror_rx_enable(struct switch_dev
*dev
,
1245 const struct switch_attr
*attr
,
1246 struct switch_val
*val
)
1248 struct ar8xxx_priv
*priv
= swdev_to_ar8xxx(dev
);
1250 mutex_lock(&priv
->reg_mutex
);
1251 priv
->mirror_rx
= !!val
->value
.i
;
1252 priv
->chip
->set_mirror_regs(priv
);
1253 mutex_unlock(&priv
->reg_mutex
);
1259 ar8xxx_sw_get_mirror_rx_enable(struct switch_dev
*dev
,
1260 const struct switch_attr
*attr
,
1261 struct switch_val
*val
)
1263 struct ar8xxx_priv
*priv
= swdev_to_ar8xxx(dev
);
1264 val
->value
.i
= priv
->mirror_rx
;
1269 ar8xxx_sw_set_mirror_tx_enable(struct switch_dev
*dev
,
1270 const struct switch_attr
*attr
,
1271 struct switch_val
*val
)
1273 struct ar8xxx_priv
*priv
= swdev_to_ar8xxx(dev
);
1275 mutex_lock(&priv
->reg_mutex
);
1276 priv
->mirror_tx
= !!val
->value
.i
;
1277 priv
->chip
->set_mirror_regs(priv
);
1278 mutex_unlock(&priv
->reg_mutex
);
1284 ar8xxx_sw_get_mirror_tx_enable(struct switch_dev
*dev
,
1285 const struct switch_attr
*attr
,
1286 struct switch_val
*val
)
1288 struct ar8xxx_priv
*priv
= swdev_to_ar8xxx(dev
);
1289 val
->value
.i
= priv
->mirror_tx
;
1294 ar8xxx_sw_set_mirror_monitor_port(struct switch_dev
*dev
,
1295 const struct switch_attr
*attr
,
1296 struct switch_val
*val
)
1298 struct ar8xxx_priv
*priv
= swdev_to_ar8xxx(dev
);
1300 mutex_lock(&priv
->reg_mutex
);
1301 priv
->monitor_port
= val
->value
.i
;
1302 priv
->chip
->set_mirror_regs(priv
);
1303 mutex_unlock(&priv
->reg_mutex
);
1309 ar8xxx_sw_get_mirror_monitor_port(struct switch_dev
*dev
,
1310 const struct switch_attr
*attr
,
1311 struct switch_val
*val
)
1313 struct ar8xxx_priv
*priv
= swdev_to_ar8xxx(dev
);
1314 val
->value
.i
= priv
->monitor_port
;
1319 ar8xxx_sw_set_mirror_source_port(struct switch_dev
*dev
,
1320 const struct switch_attr
*attr
,
1321 struct switch_val
*val
)
1323 struct ar8xxx_priv
*priv
= swdev_to_ar8xxx(dev
);
1325 mutex_lock(&priv
->reg_mutex
);
1326 priv
->source_port
= val
->value
.i
;
1327 priv
->chip
->set_mirror_regs(priv
);
1328 mutex_unlock(&priv
->reg_mutex
);
1334 ar8xxx_sw_get_mirror_source_port(struct switch_dev
*dev
,
1335 const struct switch_attr
*attr
,
1336 struct switch_val
*val
)
1338 struct ar8xxx_priv
*priv
= swdev_to_ar8xxx(dev
);
1339 val
->value
.i
= priv
->source_port
;
1344 ar8xxx_sw_set_port_reset_mib(struct switch_dev
*dev
,
1345 const struct switch_attr
*attr
,
1346 struct switch_val
*val
)
1348 struct ar8xxx_priv
*priv
= swdev_to_ar8xxx(dev
);
1352 if (!ar8xxx_has_mib_counters(priv
))
1355 port
= val
->port_vlan
;
1356 if (port
>= dev
->ports
)
1359 mutex_lock(&priv
->mib_lock
);
1360 ret
= ar8xxx_mib_capture(priv
);
1364 ar8xxx_mib_fetch_port_stat(priv
, port
, true);
1369 mutex_unlock(&priv
->mib_lock
);
1374 ar8xxx_byte_to_str(char *buf
, int len
, u64 byte
)
1379 if (byte
>= 0x40000000) { /* 1 GiB */
1380 b
= byte
* 10 / 0x40000000;
1382 } else if (byte
>= 0x100000) { /* 1 MiB */
1383 b
= byte
* 10 / 0x100000;
1385 } else if (byte
>= 0x400) { /* 1 KiB */
1386 b
= byte
* 10 / 0x400;
1392 if (strcmp(unit
, "Byte"))
1393 snprintf(buf
, len
, "%lu.%lu %s", b
/ 10, b
% 10, unit
);
1395 snprintf(buf
, len
, "%lu %s", b
, unit
);
1399 ar8xxx_sw_get_port_mib(struct switch_dev
*dev
,
1400 const struct switch_attr
*attr
,
1401 struct switch_val
*val
)
1403 struct ar8xxx_priv
*priv
= swdev_to_ar8xxx(dev
);
1404 const struct ar8xxx_chip
*chip
= priv
->chip
;
1405 u64
*mib_stats
, mib_data
;
1408 char *buf
= priv
->buf
;
1410 const char *mib_name
;
1412 bool mib_stats_empty
= true;
1414 if (!ar8xxx_has_mib_counters(priv
))
1417 port
= val
->port_vlan
;
1418 if (port
>= dev
->ports
)
1421 mutex_lock(&priv
->mib_lock
);
1422 ret
= ar8xxx_mib_capture(priv
);
1426 ar8xxx_mib_fetch_port_stat(priv
, port
, false);
1428 len
+= snprintf(buf
+ len
, sizeof(priv
->buf
) - len
,
1431 mib_stats
= &priv
->mib_stats
[port
* chip
->num_mibs
];
1432 for (i
= 0; i
< chip
->num_mibs
; i
++) {
1433 mib_name
= chip
->mib_decs
[i
].name
;
1434 mib_data
= mib_stats
[i
];
1435 len
+= snprintf(buf
+ len
, sizeof(priv
->buf
) - len
,
1436 "%-12s: %llu\n", mib_name
, mib_data
);
1437 if ((!strcmp(mib_name
, "TxByte") ||
1438 !strcmp(mib_name
, "RxGoodByte")) &&
1440 ar8xxx_byte_to_str(buf1
, sizeof(buf1
), mib_data
);
1441 --len
; /* discard newline at the end of buf */
1442 len
+= snprintf(buf
+ len
, sizeof(priv
->buf
) - len
,
1445 if (mib_stats_empty
&& mib_data
)
1446 mib_stats_empty
= false;
1449 if (mib_stats_empty
)
1450 len
= snprintf(buf
, sizeof(priv
->buf
), "No MIB data");
1458 mutex_unlock(&priv
->mib_lock
);
1463 ar8xxx_sw_set_arl_age_time(struct switch_dev
*dev
, const struct switch_attr
*attr
,
1464 struct switch_val
*val
)
1466 struct ar8xxx_priv
*priv
= swdev_to_ar8xxx(dev
);
1467 int age_time
= val
->value
.i
;
1473 age_time_val
= ar8xxx_age_time_val(age_time
);
1474 if (age_time_val
== 0 || age_time_val
> 0xffff)
1477 priv
->arl_age_time
= age_time
;
1482 ar8xxx_sw_get_arl_age_time(struct switch_dev
*dev
, const struct switch_attr
*attr
,
1483 struct switch_val
*val
)
1485 struct ar8xxx_priv
*priv
= swdev_to_ar8xxx(dev
);
1486 val
->value
.i
= priv
->arl_age_time
;
1491 ar8xxx_sw_get_arl_table(struct switch_dev
*dev
,
1492 const struct switch_attr
*attr
,
1493 struct switch_val
*val
)
1495 struct ar8xxx_priv
*priv
= swdev_to_ar8xxx(dev
);
1496 struct mii_bus
*bus
= priv
->mii_bus
;
1497 const struct ar8xxx_chip
*chip
= priv
->chip
;
1498 char *buf
= priv
->arl_buf
;
1499 int i
, j
, k
, len
= 0;
1500 struct arl_entry
*a
, *a1
;
1503 if (!chip
->get_arl_entry
)
1506 mutex_lock(&priv
->reg_mutex
);
1507 mutex_lock(&bus
->mdio_lock
);
1509 chip
->get_arl_entry(priv
, NULL
, NULL
, AR8XXX_ARL_INITIALIZE
);
1511 for(i
= 0; i
< AR8XXX_NUM_ARL_RECORDS
; ++i
) {
1512 a
= &priv
->arl_table
[i
];
1514 chip
->get_arl_entry(priv
, a
, &status
, AR8XXX_ARL_GET_NEXT
);
1520 * ARL table can include multiple valid entries
1521 * per MAC, just with differing status codes
1523 for (j
= 0; j
< i
; ++j
) {
1524 a1
= &priv
->arl_table
[j
];
1525 if (!memcmp(a
->mac
, a1
->mac
, sizeof(a
->mac
))) {
1526 /* ignore ports already seen in former entry */
1527 a
->portmap
&= ~a1
->portmap
;
1534 mutex_unlock(&bus
->mdio_lock
);
1536 len
+= snprintf(buf
+ len
, sizeof(priv
->arl_buf
) - len
,
1537 "address resolution table\n");
1539 if (i
== AR8XXX_NUM_ARL_RECORDS
)
1540 len
+= snprintf(buf
+ len
, sizeof(priv
->arl_buf
) - len
,
1541 "Too many entries found, displaying the first %d only!\n",
1542 AR8XXX_NUM_ARL_RECORDS
);
1544 for (j
= 0; j
< priv
->dev
.ports
; ++j
) {
1545 for (k
= 0; k
< i
; ++k
) {
1546 a
= &priv
->arl_table
[k
];
1547 if (!(a
->portmap
& BIT(j
)))
1549 len
+= snprintf(buf
+ len
, sizeof(priv
->arl_buf
) - len
,
1550 "Port %d: MAC %02x:%02x:%02x:%02x:%02x:%02x\n",
1552 a
->mac
[5], a
->mac
[4], a
->mac
[3],
1553 a
->mac
[2], a
->mac
[1], a
->mac
[0]);
1560 mutex_unlock(&priv
->reg_mutex
);
1566 ar8xxx_sw_set_flush_arl_table(struct switch_dev
*dev
,
1567 const struct switch_attr
*attr
,
1568 struct switch_val
*val
)
1570 struct ar8xxx_priv
*priv
= swdev_to_ar8xxx(dev
);
1573 mutex_lock(&priv
->reg_mutex
);
1574 ret
= priv
->chip
->atu_flush(priv
);
1575 mutex_unlock(&priv
->reg_mutex
);
1581 ar8xxx_sw_set_flush_port_arl_table(struct switch_dev
*dev
,
1582 const struct switch_attr
*attr
,
1583 struct switch_val
*val
)
1585 struct ar8xxx_priv
*priv
= swdev_to_ar8xxx(dev
);
1588 port
= val
->port_vlan
;
1589 if (port
>= dev
->ports
)
1592 mutex_lock(&priv
->reg_mutex
);
1593 ret
= priv
->chip
->atu_flush_port(priv
, port
);
1594 mutex_unlock(&priv
->reg_mutex
);
1599 static const struct switch_attr ar8xxx_sw_attr_globals
[] = {
1601 .type
= SWITCH_TYPE_INT
,
1602 .name
= "enable_vlan",
1603 .description
= "Enable VLAN mode",
1604 .set
= ar8xxx_sw_set_vlan
,
1605 .get
= ar8xxx_sw_get_vlan
,
1609 .type
= SWITCH_TYPE_NOVAL
,
1610 .name
= "reset_mibs",
1611 .description
= "Reset all MIB counters",
1612 .set
= ar8xxx_sw_set_reset_mibs
,
1615 .type
= SWITCH_TYPE_INT
,
1616 .name
= "enable_mirror_rx",
1617 .description
= "Enable mirroring of RX packets",
1618 .set
= ar8xxx_sw_set_mirror_rx_enable
,
1619 .get
= ar8xxx_sw_get_mirror_rx_enable
,
1623 .type
= SWITCH_TYPE_INT
,
1624 .name
= "enable_mirror_tx",
1625 .description
= "Enable mirroring of TX packets",
1626 .set
= ar8xxx_sw_set_mirror_tx_enable
,
1627 .get
= ar8xxx_sw_get_mirror_tx_enable
,
1631 .type
= SWITCH_TYPE_INT
,
1632 .name
= "mirror_monitor_port",
1633 .description
= "Mirror monitor port",
1634 .set
= ar8xxx_sw_set_mirror_monitor_port
,
1635 .get
= ar8xxx_sw_get_mirror_monitor_port
,
1636 .max
= AR8216_NUM_PORTS
- 1
1639 .type
= SWITCH_TYPE_INT
,
1640 .name
= "mirror_source_port",
1641 .description
= "Mirror source port",
1642 .set
= ar8xxx_sw_set_mirror_source_port
,
1643 .get
= ar8xxx_sw_get_mirror_source_port
,
1644 .max
= AR8216_NUM_PORTS
- 1
1647 .type
= SWITCH_TYPE_STRING
,
1648 .name
= "arl_table",
1649 .description
= "Get ARL table",
1651 .get
= ar8xxx_sw_get_arl_table
,
1654 .type
= SWITCH_TYPE_NOVAL
,
1655 .name
= "flush_arl_table",
1656 .description
= "Flush ARL table",
1657 .set
= ar8xxx_sw_set_flush_arl_table
,
1661 const struct switch_attr ar8xxx_sw_attr_port
[] = {
1663 .type
= SWITCH_TYPE_NOVAL
,
1664 .name
= "reset_mib",
1665 .description
= "Reset single port MIB counters",
1666 .set
= ar8xxx_sw_set_port_reset_mib
,
1669 .type
= SWITCH_TYPE_STRING
,
1671 .description
= "Get port's MIB counters",
1673 .get
= ar8xxx_sw_get_port_mib
,
1676 .type
= SWITCH_TYPE_NOVAL
,
1677 .name
= "flush_arl_table",
1678 .description
= "Flush port's ARL table entries",
1679 .set
= ar8xxx_sw_set_flush_port_arl_table
,
1683 const struct switch_attr ar8xxx_sw_attr_vlan
[1] = {
1685 .type
= SWITCH_TYPE_INT
,
1687 .description
= "VLAN ID (0-4094)",
1688 .set
= ar8xxx_sw_set_vid
,
1689 .get
= ar8xxx_sw_get_vid
,
1694 static const struct switch_dev_ops ar8xxx_sw_ops
= {
1696 .attr
= ar8xxx_sw_attr_globals
,
1697 .n_attr
= ARRAY_SIZE(ar8xxx_sw_attr_globals
),
1700 .attr
= ar8xxx_sw_attr_port
,
1701 .n_attr
= ARRAY_SIZE(ar8xxx_sw_attr_port
),
1704 .attr
= ar8xxx_sw_attr_vlan
,
1705 .n_attr
= ARRAY_SIZE(ar8xxx_sw_attr_vlan
),
1707 .get_port_pvid
= ar8xxx_sw_get_pvid
,
1708 .set_port_pvid
= ar8xxx_sw_set_pvid
,
1709 .get_vlan_ports
= ar8xxx_sw_get_ports
,
1710 .set_vlan_ports
= ar8xxx_sw_set_ports
,
1711 .apply_config
= ar8xxx_sw_hw_apply
,
1712 .reset_switch
= ar8xxx_sw_reset_switch
,
1713 .get_port_link
= ar8xxx_sw_get_port_link
,
1714 /* The following op is disabled as it hogs the CPU and degrades performance.
1715 An implementation has been attempted in 4d8a66d but reading MIB data is slow
1718 The high CPU load has been traced down to the ar8xxx_reg_wait() call in
1719 ar8xxx_mib_op(), which has to usleep_range() till the MIB busy flag set by
1720 the request to update the MIB counter is cleared. */
1722 .get_port_stats
= ar8xxx_sw_get_port_stats
,
1726 static const struct ar8xxx_chip ar8216_chip
= {
1727 .caps
= AR8XXX_CAP_MIB_COUNTERS
,
1729 .reg_port_stats_start
= 0x19000,
1730 .reg_port_stats_length
= 0xa0,
1731 .reg_arl_ctrl
= AR8216_REG_ATU_CTRL
,
1733 .name
= "Atheros AR8216",
1734 .ports
= AR8216_NUM_PORTS
,
1735 .vlans
= AR8216_NUM_VLANS
,
1736 .swops
= &ar8xxx_sw_ops
,
1738 .hw_init
= ar8216_hw_init
,
1739 .init_globals
= ar8216_init_globals
,
1740 .init_port
= ar8216_init_port
,
1741 .setup_port
= ar8216_setup_port
,
1742 .read_port_status
= ar8216_read_port_status
,
1743 .atu_flush
= ar8216_atu_flush
,
1744 .atu_flush_port
= ar8216_atu_flush_port
,
1745 .vtu_flush
= ar8216_vtu_flush
,
1746 .vtu_load_vlan
= ar8216_vtu_load_vlan
,
1747 .set_mirror_regs
= ar8216_set_mirror_regs
,
1748 .get_arl_entry
= ar8216_get_arl_entry
,
1749 .sw_hw_apply
= ar8xxx_sw_hw_apply
,
1751 .num_mibs
= ARRAY_SIZE(ar8216_mibs
),
1752 .mib_decs
= ar8216_mibs
,
1753 .mib_func
= AR8216_REG_MIB_FUNC
1756 static const struct ar8xxx_chip ar8236_chip
= {
1757 .caps
= AR8XXX_CAP_MIB_COUNTERS
,
1759 .reg_port_stats_start
= 0x20000,
1760 .reg_port_stats_length
= 0x100,
1761 .reg_arl_ctrl
= AR8216_REG_ATU_CTRL
,
1763 .name
= "Atheros AR8236",
1764 .ports
= AR8216_NUM_PORTS
,
1765 .vlans
= AR8216_NUM_VLANS
,
1766 .swops
= &ar8xxx_sw_ops
,
1768 .hw_init
= ar8216_hw_init
,
1769 .init_globals
= ar8236_init_globals
,
1770 .init_port
= ar8216_init_port
,
1771 .setup_port
= ar8236_setup_port
,
1772 .read_port_status
= ar8216_read_port_status
,
1773 .atu_flush
= ar8216_atu_flush
,
1774 .atu_flush_port
= ar8216_atu_flush_port
,
1775 .vtu_flush
= ar8216_vtu_flush
,
1776 .vtu_load_vlan
= ar8216_vtu_load_vlan
,
1777 .set_mirror_regs
= ar8216_set_mirror_regs
,
1778 .get_arl_entry
= ar8216_get_arl_entry
,
1779 .sw_hw_apply
= ar8xxx_sw_hw_apply
,
1781 .num_mibs
= ARRAY_SIZE(ar8236_mibs
),
1782 .mib_decs
= ar8236_mibs
,
1783 .mib_func
= AR8216_REG_MIB_FUNC
1786 static const struct ar8xxx_chip ar8316_chip
= {
1787 .caps
= AR8XXX_CAP_GIGE
| AR8XXX_CAP_MIB_COUNTERS
,
1789 .reg_port_stats_start
= 0x20000,
1790 .reg_port_stats_length
= 0x100,
1791 .reg_arl_ctrl
= AR8216_REG_ATU_CTRL
,
1793 .name
= "Atheros AR8316",
1794 .ports
= AR8216_NUM_PORTS
,
1795 .vlans
= AR8X16_MAX_VLANS
,
1796 .swops
= &ar8xxx_sw_ops
,
1798 .hw_init
= ar8316_hw_init
,
1799 .init_globals
= ar8316_init_globals
,
1800 .init_port
= ar8216_init_port
,
1801 .setup_port
= ar8216_setup_port
,
1802 .read_port_status
= ar8216_read_port_status
,
1803 .atu_flush
= ar8216_atu_flush
,
1804 .atu_flush_port
= ar8216_atu_flush_port
,
1805 .vtu_flush
= ar8216_vtu_flush
,
1806 .vtu_load_vlan
= ar8216_vtu_load_vlan
,
1807 .set_mirror_regs
= ar8216_set_mirror_regs
,
1808 .get_arl_entry
= ar8216_get_arl_entry
,
1809 .sw_hw_apply
= ar8xxx_sw_hw_apply
,
1811 .num_mibs
= ARRAY_SIZE(ar8236_mibs
),
1812 .mib_decs
= ar8236_mibs
,
1813 .mib_func
= AR8216_REG_MIB_FUNC
1817 ar8xxx_read_id(struct ar8xxx_priv
*priv
)
1823 val
= ar8xxx_read(priv
, AR8216_REG_CTRL
);
1827 id
= val
& (AR8216_CTRL_REVISION
| AR8216_CTRL_VERSION
);
1828 for (i
= 0; i
< AR8X16_PROBE_RETRIES
; i
++) {
1831 val
= ar8xxx_read(priv
, AR8216_REG_CTRL
);
1835 t
= val
& (AR8216_CTRL_REVISION
| AR8216_CTRL_VERSION
);
1840 priv
->chip_ver
= (id
& AR8216_CTRL_VERSION
) >> AR8216_CTRL_VERSION_S
;
1841 priv
->chip_rev
= (id
& AR8216_CTRL_REVISION
);
1846 ar8xxx_id_chip(struct ar8xxx_priv
*priv
)
1850 ret
= ar8xxx_read_id(priv
);
1854 switch (priv
->chip_ver
) {
1855 case AR8XXX_VER_AR8216
:
1856 priv
->chip
= &ar8216_chip
;
1858 case AR8XXX_VER_AR8236
:
1859 priv
->chip
= &ar8236_chip
;
1861 case AR8XXX_VER_AR8316
:
1862 priv
->chip
= &ar8316_chip
;
1864 case AR8XXX_VER_AR8327
:
1865 priv
->chip
= &ar8327_chip
;
1867 case AR8XXX_VER_AR8337
:
1868 priv
->chip
= &ar8337_chip
;
1871 pr_err("ar8216: Unknown Atheros device [ver=%d, rev=%d]\n",
1872 priv
->chip_ver
, priv
->chip_rev
);
1881 ar8xxx_mib_work_func(struct work_struct
*work
)
1883 struct ar8xxx_priv
*priv
;
1886 priv
= container_of(work
, struct ar8xxx_priv
, mib_work
.work
);
1888 mutex_lock(&priv
->mib_lock
);
1890 err
= ar8xxx_mib_capture(priv
);
1894 ar8xxx_mib_fetch_port_stat(priv
, priv
->mib_next_port
, false);
1897 priv
->mib_next_port
++;
1898 if (priv
->mib_next_port
>= priv
->dev
.ports
)
1899 priv
->mib_next_port
= 0;
1901 mutex_unlock(&priv
->mib_lock
);
1902 schedule_delayed_work(&priv
->mib_work
,
1903 msecs_to_jiffies(AR8XXX_MIB_WORK_DELAY
));
1907 ar8xxx_mib_init(struct ar8xxx_priv
*priv
)
1911 if (!ar8xxx_has_mib_counters(priv
))
1914 BUG_ON(!priv
->chip
->mib_decs
|| !priv
->chip
->num_mibs
);
1916 len
= priv
->dev
.ports
* priv
->chip
->num_mibs
*
1917 sizeof(*priv
->mib_stats
);
1918 priv
->mib_stats
= kzalloc(len
, GFP_KERNEL
);
1920 if (!priv
->mib_stats
)
1927 ar8xxx_mib_start(struct ar8xxx_priv
*priv
)
1929 if (!ar8xxx_has_mib_counters(priv
))
1932 schedule_delayed_work(&priv
->mib_work
,
1933 msecs_to_jiffies(AR8XXX_MIB_WORK_DELAY
));
1937 ar8xxx_mib_stop(struct ar8xxx_priv
*priv
)
1939 if (!ar8xxx_has_mib_counters(priv
))
1942 cancel_delayed_work_sync(&priv
->mib_work
);
1945 static struct ar8xxx_priv
*
1948 struct ar8xxx_priv
*priv
;
1950 priv
= kzalloc(sizeof(struct ar8xxx_priv
), GFP_KERNEL
);
1954 mutex_init(&priv
->reg_mutex
);
1955 mutex_init(&priv
->mib_lock
);
1956 INIT_DELAYED_WORK(&priv
->mib_work
, ar8xxx_mib_work_func
);
1962 ar8xxx_free(struct ar8xxx_priv
*priv
)
1964 if (priv
->chip
&& priv
->chip
->cleanup
)
1965 priv
->chip
->cleanup(priv
);
1967 kfree(priv
->chip_data
);
1968 kfree(priv
->mib_stats
);
1973 ar8xxx_probe_switch(struct ar8xxx_priv
*priv
)
1975 const struct ar8xxx_chip
*chip
;
1976 struct switch_dev
*swdev
;
1982 swdev
->cpu_port
= AR8216_PORT_CPU
;
1983 swdev
->name
= chip
->name
;
1984 swdev
->vlans
= chip
->vlans
;
1985 swdev
->ports
= chip
->ports
;
1986 swdev
->ops
= chip
->swops
;
1988 ret
= ar8xxx_mib_init(priv
);
1996 ar8xxx_start(struct ar8xxx_priv
*priv
)
2002 ret
= priv
->chip
->hw_init(priv
);
2006 ret
= ar8xxx_sw_reset_switch(&priv
->dev
);
2012 ar8xxx_mib_start(priv
);
2018 ar8xxx_phy_config_init(struct phy_device
*phydev
)
2020 struct ar8xxx_priv
*priv
= phydev
->priv
;
2021 struct net_device
*dev
= phydev
->attached_dev
;
2027 if (priv
->chip
->config_at_probe
)
2028 return ar8xxx_phy_check_aneg(phydev
);
2032 if (phydev
->mdio
.addr
!= 0) {
2033 if (chip_is_ar8316(priv
)) {
2034 /* switch device has been initialized, reinit */
2035 priv
->dev
.ports
= (AR8216_NUM_PORTS
- 1);
2036 priv
->initialized
= false;
2037 priv
->port4_phy
= true;
2038 ar8316_hw_init(priv
);
2045 ret
= ar8xxx_start(priv
);
2049 /* VID fixup only needed on ar8216 */
2050 if (chip_is_ar8216(priv
)) {
2051 dev
->phy_ptr
= priv
;
2052 dev
->priv_flags
|= IFF_NO_IP_ALIGN
;
2053 dev
->eth_mangle_rx
= ar8216_mangle_rx
;
2054 dev
->eth_mangle_tx
= ar8216_mangle_tx
;
2061 ar8xxx_check_link_states(struct ar8xxx_priv
*priv
)
2063 bool link_new
, changed
= false;
2067 mutex_lock(&priv
->reg_mutex
);
2069 for (i
= 0; i
< priv
->dev
.ports
; i
++) {
2070 status
= priv
->chip
->read_port_status(priv
, i
);
2071 link_new
= !!(status
& AR8216_PORT_STATUS_LINK_UP
);
2072 if (link_new
== priv
->link_up
[i
])
2075 priv
->link_up
[i
] = link_new
;
2077 /* flush ARL entries for this port if it went down*/
2079 priv
->chip
->atu_flush_port(priv
, i
);
2080 dev_info(&priv
->phy
->mdio
.dev
, "Port %d is %s\n",
2081 i
, link_new
? "up" : "down");
2084 mutex_unlock(&priv
->reg_mutex
);
2090 ar8xxx_phy_read_status(struct phy_device
*phydev
)
2092 struct ar8xxx_priv
*priv
= phydev
->priv
;
2093 struct switch_port_link link
;
2095 /* check for switch port link changes */
2096 if (phydev
->state
== PHY_CHANGELINK
)
2097 ar8xxx_check_link_states(priv
);
2099 if (phydev
->mdio
.addr
!= 0)
2100 return genphy_read_status(phydev
);
2102 ar8216_read_port_link(priv
, phydev
->mdio
.addr
, &link
);
2103 phydev
->link
= !!link
.link
;
2107 switch (link
.speed
) {
2108 case SWITCH_PORT_SPEED_10
:
2109 phydev
->speed
= SPEED_10
;
2111 case SWITCH_PORT_SPEED_100
:
2112 phydev
->speed
= SPEED_100
;
2114 case SWITCH_PORT_SPEED_1000
:
2115 phydev
->speed
= SPEED_1000
;
2120 phydev
->duplex
= link
.duplex
? DUPLEX_FULL
: DUPLEX_HALF
;
2122 phydev
->state
= PHY_RUNNING
;
2123 netif_carrier_on(phydev
->attached_dev
);
2124 if (phydev
->adjust_link
)
2125 phydev
->adjust_link(phydev
->attached_dev
);
2131 ar8xxx_phy_config_aneg(struct phy_device
*phydev
)
2133 if (phydev
->mdio
.addr
== 0)
2136 return genphy_config_aneg(phydev
);
2139 static const u32 ar8xxx_phy_ids
[] = {
2141 0x004dd034, /* AR8327 */
2142 0x004dd036, /* AR8337 */
2145 0x004dd043, /* AR8236 */
2149 ar8xxx_phy_match(u32 phy_id
)
2153 for (i
= 0; i
< ARRAY_SIZE(ar8xxx_phy_ids
); i
++)
2154 if (phy_id
== ar8xxx_phy_ids
[i
])
2161 ar8xxx_is_possible(struct mii_bus
*bus
)
2163 unsigned int i
, found_phys
= 0;
2165 for (i
= 0; i
< 5; i
++) {
2168 phy_id
= mdiobus_read(bus
, i
, MII_PHYSID1
) << 16;
2169 phy_id
|= mdiobus_read(bus
, i
, MII_PHYSID2
);
2170 if (ar8xxx_phy_match(phy_id
)) {
2172 } else if (phy_id
) {
2173 pr_debug("ar8xxx: unknown PHY at %s:%02x id:%08x\n",
2174 dev_name(&bus
->dev
), i
, phy_id
);
2177 return !!found_phys
;
2181 ar8xxx_phy_probe(struct phy_device
*phydev
)
2183 struct ar8xxx_priv
*priv
;
2184 struct switch_dev
*swdev
;
2187 /* skip PHYs at unused adresses */
2188 if (phydev
->mdio
.addr
!= 0 && phydev
->mdio
.addr
!= 3 && phydev
->mdio
.addr
!= 4)
2191 if (!ar8xxx_is_possible(phydev
->mdio
.bus
))
2194 mutex_lock(&ar8xxx_dev_list_lock
);
2195 list_for_each_entry(priv
, &ar8xxx_dev_list
, list
)
2196 if (priv
->mii_bus
== phydev
->mdio
.bus
)
2199 priv
= ar8xxx_create();
2205 priv
->mii_bus
= phydev
->mdio
.bus
;
2206 priv
->pdev
= &phydev
->mdio
.dev
;
2208 ret
= ar8xxx_id_chip(priv
);
2212 ret
= ar8xxx_probe_switch(priv
);
2217 swdev
->alias
= dev_name(&priv
->mii_bus
->dev
);
2218 ret
= register_switch(swdev
, NULL
);
2222 pr_info("%s: %s rev. %u switch registered on %s\n",
2223 swdev
->devname
, swdev
->name
, priv
->chip_rev
,
2224 dev_name(&priv
->mii_bus
->dev
));
2226 list_add(&priv
->list
, &ar8xxx_dev_list
);
2231 if (phydev
->mdio
.addr
== 0) {
2232 if (ar8xxx_has_gige(priv
)) {
2233 phydev
->supported
= SUPPORTED_1000baseT_Full
;
2234 phydev
->advertising
= ADVERTISED_1000baseT_Full
;
2236 phydev
->supported
= SUPPORTED_100baseT_Full
;
2237 phydev
->advertising
= ADVERTISED_100baseT_Full
;
2240 if (priv
->chip
->config_at_probe
) {
2243 ret
= ar8xxx_start(priv
);
2245 goto err_unregister_switch
;
2248 if (ar8xxx_has_gige(priv
)) {
2249 phydev
->supported
|= SUPPORTED_1000baseT_Full
;
2250 phydev
->advertising
|= ADVERTISED_1000baseT_Full
;
2252 if (priv
->chip
->phy_rgmii_set
)
2253 priv
->chip
->phy_rgmii_set(priv
, phydev
);
2256 phydev
->priv
= priv
;
2258 mutex_unlock(&ar8xxx_dev_list_lock
);
2262 err_unregister_switch
:
2263 if (--priv
->use_count
)
2266 unregister_switch(&priv
->dev
);
2271 mutex_unlock(&ar8xxx_dev_list_lock
);
2276 ar8xxx_phy_detach(struct phy_device
*phydev
)
2278 struct net_device
*dev
= phydev
->attached_dev
;
2283 dev
->phy_ptr
= NULL
;
2284 dev
->priv_flags
&= ~IFF_NO_IP_ALIGN
;
2285 dev
->eth_mangle_rx
= NULL
;
2286 dev
->eth_mangle_tx
= NULL
;
2290 ar8xxx_phy_remove(struct phy_device
*phydev
)
2292 struct ar8xxx_priv
*priv
= phydev
->priv
;
2297 phydev
->priv
= NULL
;
2299 mutex_lock(&ar8xxx_dev_list_lock
);
2301 if (--priv
->use_count
> 0) {
2302 mutex_unlock(&ar8xxx_dev_list_lock
);
2306 list_del(&priv
->list
);
2307 mutex_unlock(&ar8xxx_dev_list_lock
);
2309 unregister_switch(&priv
->dev
);
2310 ar8xxx_mib_stop(priv
);
2315 ar8xxx_phy_soft_reset(struct phy_device
*phydev
)
2317 /* we don't need an extra reset */
2321 static struct phy_driver ar8xxx_phy_driver
[] = {
2323 .phy_id
= 0x004d0000,
2324 .name
= "Atheros AR8216/AR8236/AR8316",
2325 .phy_id_mask
= 0xffff0000,
2326 .features
= PHY_BASIC_FEATURES
,
2327 .probe
= ar8xxx_phy_probe
,
2328 .remove
= ar8xxx_phy_remove
,
2329 .detach
= ar8xxx_phy_detach
,
2330 .config_init
= ar8xxx_phy_config_init
,
2331 .config_aneg
= ar8xxx_phy_config_aneg
,
2332 .read_status
= ar8xxx_phy_read_status
,
2333 .soft_reset
= ar8xxx_phy_soft_reset
,
2337 static const struct of_device_id ar8xxx_mdiodev_of_match
[] = {
2339 .compatible
= "qca,ar8236",
2340 .data
= &ar8236_chip
,
2342 .compatible
= "qca,ar8327",
2343 .data
= &ar8327_chip
,
2349 ar8xxx_mdiodev_probe(struct mdio_device
*mdiodev
)
2351 const struct of_device_id
*match
;
2352 struct ar8xxx_priv
*priv
;
2353 struct switch_dev
*swdev
;
2356 match
= of_match_device(ar8xxx_mdiodev_of_match
, &mdiodev
->dev
);
2360 priv
= ar8xxx_create();
2364 priv
->mii_bus
= mdiodev
->bus
;
2365 priv
->pdev
= &mdiodev
->dev
;
2366 priv
->chip
= (const struct ar8xxx_chip
*) match
->data
;
2368 ret
= ar8xxx_read_id(priv
);
2372 ret
= ar8xxx_probe_switch(priv
);
2377 swdev
->alias
= dev_name(&mdiodev
->dev
);
2378 ret
= register_switch(swdev
, NULL
);
2382 pr_info("%s: %s rev. %u switch registered on %s\n",
2383 swdev
->devname
, swdev
->name
, priv
->chip_rev
,
2384 dev_name(&priv
->mii_bus
->dev
));
2386 mutex_lock(&ar8xxx_dev_list_lock
);
2387 list_add(&priv
->list
, &ar8xxx_dev_list
);
2388 mutex_unlock(&ar8xxx_dev_list_lock
);
2392 ret
= ar8xxx_start(priv
);
2394 goto err_unregister_switch
;
2396 dev_set_drvdata(&mdiodev
->dev
, priv
);
2400 err_unregister_switch
:
2401 if (--priv
->use_count
)
2404 unregister_switch(&priv
->dev
);
2412 ar8xxx_mdiodev_remove(struct mdio_device
*mdiodev
)
2414 struct ar8xxx_priv
*priv
= dev_get_drvdata(&mdiodev
->dev
);
2419 mutex_lock(&ar8xxx_dev_list_lock
);
2421 if (--priv
->use_count
> 0) {
2422 mutex_unlock(&ar8xxx_dev_list_lock
);
2426 list_del(&priv
->list
);
2427 mutex_unlock(&ar8xxx_dev_list_lock
);
2429 unregister_switch(&priv
->dev
);
2430 ar8xxx_mib_stop(priv
);
2434 static struct mdio_driver ar8xxx_mdio_driver
= {
2435 .probe
= ar8xxx_mdiodev_probe
,
2436 .remove
= ar8xxx_mdiodev_remove
,
2438 .name
= "ar8xxx-switch",
2439 .of_match_table
= ar8xxx_mdiodev_of_match
,
2443 static int __init
ar8216_init(void)
2447 ret
= phy_drivers_register(ar8xxx_phy_driver
,
2448 ARRAY_SIZE(ar8xxx_phy_driver
),
2453 ret
= mdio_driver_register(&ar8xxx_mdio_driver
);
2455 phy_drivers_unregister(ar8xxx_phy_driver
,
2456 ARRAY_SIZE(ar8xxx_phy_driver
));
2460 module_init(ar8216_init
);
2462 static void __exit
ar8216_exit(void)
2464 mdio_driver_unregister(&ar8xxx_mdio_driver
);
2465 phy_drivers_unregister(ar8xxx_phy_driver
,
2466 ARRAY_SIZE(ar8xxx_phy_driver
));
2468 module_exit(ar8216_exit
);
2470 MODULE_LICENSE("GPL");