1 // SPDX-License-Identifier: GPL-2.0-only
3 * Mediatek MT7530 DSA Switch driver
4 * Copyright (C) 2017 Sean Wang <sean.wang@mediatek.com>
6 #include <linux/etherdevice.h>
7 #include <linux/if_bridge.h>
8 #include <linux/iopoll.h>
9 #include <linux/mdio.h>
10 #include <linux/mfd/syscon.h>
11 #include <linux/module.h>
12 #include <linux/netdevice.h>
13 #include <linux/of_irq.h>
14 #include <linux/of_mdio.h>
15 #include <linux/of_net.h>
16 #include <linux/of_platform.h>
17 #include <linux/phylink.h>
18 #include <linux/regmap.h>
19 #include <linux/regulator/consumer.h>
20 #include <linux/reset.h>
21 #include <linux/gpio/consumer.h>
22 #include <linux/gpio/driver.h>
24 #include <net/pkt_cls.h>
28 static struct mt753x_pcs
*pcs_to_mt753x_pcs(struct phylink_pcs
*pcs
)
30 return container_of(pcs
, struct mt753x_pcs
, pcs
);
33 /* String, offset, and register size in bytes if different from 4 bytes */
34 static const struct mt7530_mib_desc mt7530_mib
[] = {
35 MIB_DESC(1, 0x00, "TxDrop"),
36 MIB_DESC(1, 0x04, "TxCrcErr"),
37 MIB_DESC(1, 0x08, "TxUnicast"),
38 MIB_DESC(1, 0x0c, "TxMulticast"),
39 MIB_DESC(1, 0x10, "TxBroadcast"),
40 MIB_DESC(1, 0x14, "TxCollision"),
41 MIB_DESC(1, 0x18, "TxSingleCollision"),
42 MIB_DESC(1, 0x1c, "TxMultipleCollision"),
43 MIB_DESC(1, 0x20, "TxDeferred"),
44 MIB_DESC(1, 0x24, "TxLateCollision"),
45 MIB_DESC(1, 0x28, "TxExcessiveCollistion"),
46 MIB_DESC(1, 0x2c, "TxPause"),
47 MIB_DESC(1, 0x30, "TxPktSz64"),
48 MIB_DESC(1, 0x34, "TxPktSz65To127"),
49 MIB_DESC(1, 0x38, "TxPktSz128To255"),
50 MIB_DESC(1, 0x3c, "TxPktSz256To511"),
51 MIB_DESC(1, 0x40, "TxPktSz512To1023"),
52 MIB_DESC(1, 0x44, "Tx1024ToMax"),
53 MIB_DESC(2, 0x48, "TxBytes"),
54 MIB_DESC(1, 0x60, "RxDrop"),
55 MIB_DESC(1, 0x64, "RxFiltering"),
56 MIB_DESC(1, 0x68, "RxUnicast"),
57 MIB_DESC(1, 0x6c, "RxMulticast"),
58 MIB_DESC(1, 0x70, "RxBroadcast"),
59 MIB_DESC(1, 0x74, "RxAlignErr"),
60 MIB_DESC(1, 0x78, "RxCrcErr"),
61 MIB_DESC(1, 0x7c, "RxUnderSizeErr"),
62 MIB_DESC(1, 0x80, "RxFragErr"),
63 MIB_DESC(1, 0x84, "RxOverSzErr"),
64 MIB_DESC(1, 0x88, "RxJabberErr"),
65 MIB_DESC(1, 0x8c, "RxPause"),
66 MIB_DESC(1, 0x90, "RxPktSz64"),
67 MIB_DESC(1, 0x94, "RxPktSz65To127"),
68 MIB_DESC(1, 0x98, "RxPktSz128To255"),
69 MIB_DESC(1, 0x9c, "RxPktSz256To511"),
70 MIB_DESC(1, 0xa0, "RxPktSz512To1023"),
71 MIB_DESC(1, 0xa4, "RxPktSz1024ToMax"),
72 MIB_DESC(2, 0xa8, "RxBytes"),
73 MIB_DESC(1, 0xb0, "RxCtrlDrop"),
74 MIB_DESC(1, 0xb4, "RxIngressDrop"),
75 MIB_DESC(1, 0xb8, "RxArlDrop"),
79 mt7530_mutex_lock(struct mt7530_priv
*priv
)
82 mutex_lock_nested(&priv
->bus
->mdio_lock
, MDIO_MUTEX_NESTED
);
86 mt7530_mutex_unlock(struct mt7530_priv
*priv
)
89 mutex_unlock(&priv
->bus
->mdio_lock
);
93 core_write(struct mt7530_priv
*priv
, u32 reg
, u32 val
)
95 struct mii_bus
*bus
= priv
->bus
;
98 mt7530_mutex_lock(priv
);
100 /* Write the desired MMD Devad */
101 ret
= bus
->write(bus
, MT753X_CTRL_PHY_ADDR(priv
->mdiodev
->addr
),
102 MII_MMD_CTRL
, MDIO_MMD_VEND2
);
106 /* Write the desired MMD register address */
107 ret
= bus
->write(bus
, MT753X_CTRL_PHY_ADDR(priv
->mdiodev
->addr
),
112 /* Select the Function : DATA with no post increment */
113 ret
= bus
->write(bus
, MT753X_CTRL_PHY_ADDR(priv
->mdiodev
->addr
),
114 MII_MMD_CTRL
, MDIO_MMD_VEND2
| MII_MMD_CTRL_NOINCR
);
118 /* Write the data into MMD's selected register */
119 ret
= bus
->write(bus
, MT753X_CTRL_PHY_ADDR(priv
->mdiodev
->addr
),
123 dev_err(&bus
->dev
, "failed to write mmd register\n");
125 mt7530_mutex_unlock(priv
);
129 core_rmw(struct mt7530_priv
*priv
, u32 reg
, u32 mask
, u32 set
)
131 struct mii_bus
*bus
= priv
->bus
;
135 mt7530_mutex_lock(priv
);
137 /* Write the desired MMD Devad */
138 ret
= bus
->write(bus
, MT753X_CTRL_PHY_ADDR(priv
->mdiodev
->addr
),
139 MII_MMD_CTRL
, MDIO_MMD_VEND2
);
143 /* Write the desired MMD register address */
144 ret
= bus
->write(bus
, MT753X_CTRL_PHY_ADDR(priv
->mdiodev
->addr
),
149 /* Select the Function : DATA with no post increment */
150 ret
= bus
->write(bus
, MT753X_CTRL_PHY_ADDR(priv
->mdiodev
->addr
),
151 MII_MMD_CTRL
, MDIO_MMD_VEND2
| MII_MMD_CTRL_NOINCR
);
155 /* Read the content of the MMD's selected register */
156 val
= bus
->read(bus
, MT753X_CTRL_PHY_ADDR(priv
->mdiodev
->addr
),
160 /* Write the data into MMD's selected register */
161 ret
= bus
->write(bus
, MT753X_CTRL_PHY_ADDR(priv
->mdiodev
->addr
),
165 dev_err(&bus
->dev
, "failed to write mmd register\n");
167 mt7530_mutex_unlock(priv
);
171 core_set(struct mt7530_priv
*priv
, u32 reg
, u32 val
)
173 core_rmw(priv
, reg
, 0, val
);
177 core_clear(struct mt7530_priv
*priv
, u32 reg
, u32 val
)
179 core_rmw(priv
, reg
, val
, 0);
183 mt7530_mii_write(struct mt7530_priv
*priv
, u32 reg
, u32 val
)
187 ret
= regmap_write(priv
->regmap
, reg
, val
);
191 "failed to write mt7530 register\n");
197 mt7530_mii_read(struct mt7530_priv
*priv
, u32 reg
)
202 ret
= regmap_read(priv
->regmap
, reg
, &val
);
206 "failed to read mt7530 register\n");
214 mt7530_write(struct mt7530_priv
*priv
, u32 reg
, u32 val
)
216 mt7530_mutex_lock(priv
);
218 mt7530_mii_write(priv
, reg
, val
);
220 mt7530_mutex_unlock(priv
);
224 _mt7530_unlocked_read(struct mt7530_dummy_poll
*p
)
226 return mt7530_mii_read(p
->priv
, p
->reg
);
230 _mt7530_read(struct mt7530_dummy_poll
*p
)
234 mt7530_mutex_lock(p
->priv
);
236 val
= mt7530_mii_read(p
->priv
, p
->reg
);
238 mt7530_mutex_unlock(p
->priv
);
244 mt7530_read(struct mt7530_priv
*priv
, u32 reg
)
246 struct mt7530_dummy_poll p
;
248 INIT_MT7530_DUMMY_POLL(&p
, priv
, reg
);
249 return _mt7530_read(&p
);
253 mt7530_rmw(struct mt7530_priv
*priv
, u32 reg
,
256 mt7530_mutex_lock(priv
);
258 regmap_update_bits(priv
->regmap
, reg
, mask
, set
);
260 mt7530_mutex_unlock(priv
);
264 mt7530_set(struct mt7530_priv
*priv
, u32 reg
, u32 val
)
266 mt7530_rmw(priv
, reg
, val
, val
);
270 mt7530_clear(struct mt7530_priv
*priv
, u32 reg
, u32 val
)
272 mt7530_rmw(priv
, reg
, val
, 0);
276 mt7530_fdb_cmd(struct mt7530_priv
*priv
, enum mt7530_fdb_cmd cmd
, u32
*rsp
)
280 struct mt7530_dummy_poll p
;
282 /* Set the command operating upon the MAC address entries */
283 val
= ATC_BUSY
| ATC_MAT(0) | cmd
;
284 mt7530_write(priv
, MT7530_ATC
, val
);
286 INIT_MT7530_DUMMY_POLL(&p
, priv
, MT7530_ATC
);
287 ret
= readx_poll_timeout(_mt7530_read
, &p
, val
,
288 !(val
& ATC_BUSY
), 20, 20000);
290 dev_err(priv
->dev
, "reset timeout\n");
294 /* Additional sanity for read command if the specified
297 val
= mt7530_read(priv
, MT7530_ATC
);
298 if ((cmd
== MT7530_FDB_READ
) && (val
& ATC_INVALID
))
308 mt7530_fdb_read(struct mt7530_priv
*priv
, struct mt7530_fdb
*fdb
)
313 /* Read from ARL table into an array */
314 for (i
= 0; i
< 3; i
++) {
315 reg
[i
] = mt7530_read(priv
, MT7530_TSRA1
+ (i
* 4));
317 dev_dbg(priv
->dev
, "%s(%d) reg[%d]=0x%x\n",
318 __func__
, __LINE__
, i
, reg
[i
]);
321 fdb
->vid
= (reg
[1] >> CVID
) & CVID_MASK
;
322 fdb
->aging
= (reg
[2] >> AGE_TIMER
) & AGE_TIMER_MASK
;
323 fdb
->port_mask
= (reg
[2] >> PORT_MAP
) & PORT_MAP_MASK
;
324 fdb
->mac
[0] = (reg
[0] >> MAC_BYTE_0
) & MAC_BYTE_MASK
;
325 fdb
->mac
[1] = (reg
[0] >> MAC_BYTE_1
) & MAC_BYTE_MASK
;
326 fdb
->mac
[2] = (reg
[0] >> MAC_BYTE_2
) & MAC_BYTE_MASK
;
327 fdb
->mac
[3] = (reg
[0] >> MAC_BYTE_3
) & MAC_BYTE_MASK
;
328 fdb
->mac
[4] = (reg
[1] >> MAC_BYTE_4
) & MAC_BYTE_MASK
;
329 fdb
->mac
[5] = (reg
[1] >> MAC_BYTE_5
) & MAC_BYTE_MASK
;
330 fdb
->noarp
= ((reg
[2] >> ENT_STATUS
) & ENT_STATUS_MASK
) == STATIC_ENT
;
334 mt7530_fdb_write(struct mt7530_priv
*priv
, u16 vid
,
335 u8 port_mask
, const u8
*mac
,
341 reg
[1] |= vid
& CVID_MASK
;
343 reg
[1] |= ATA2_FID(FID_BRIDGED
);
344 reg
[2] |= (aging
& AGE_TIMER_MASK
) << AGE_TIMER
;
345 reg
[2] |= (port_mask
& PORT_MAP_MASK
) << PORT_MAP
;
346 /* STATIC_ENT indicate that entry is static wouldn't
347 * be aged out and STATIC_EMP specified as erasing an
350 reg
[2] |= (type
& ENT_STATUS_MASK
) << ENT_STATUS
;
351 reg
[1] |= mac
[5] << MAC_BYTE_5
;
352 reg
[1] |= mac
[4] << MAC_BYTE_4
;
353 reg
[0] |= mac
[3] << MAC_BYTE_3
;
354 reg
[0] |= mac
[2] << MAC_BYTE_2
;
355 reg
[0] |= mac
[1] << MAC_BYTE_1
;
356 reg
[0] |= mac
[0] << MAC_BYTE_0
;
358 /* Write array into the ARL table */
359 for (i
= 0; i
< 3; i
++)
360 mt7530_write(priv
, MT7530_ATA1
+ (i
* 4), reg
[i
]);
363 /* Set up switch core clock for MT7530 */
364 static void mt7530_pll_setup(struct mt7530_priv
*priv
)
366 /* Disable core clock */
367 core_clear(priv
, CORE_TRGMII_GSW_CLK_CG
, REG_GSWCK_EN
);
370 core_write(priv
, CORE_GSWPLL_GRP1
, 0);
372 /* Set core clock into 500Mhz */
373 core_write(priv
, CORE_GSWPLL_GRP2
,
374 RG_GSWPLL_POSDIV_500M(1) |
375 RG_GSWPLL_FBKDIV_500M(25));
378 core_write(priv
, CORE_GSWPLL_GRP1
,
380 RG_GSWPLL_POSDIV_200M(2) |
381 RG_GSWPLL_FBKDIV_200M(32));
385 /* Enable core clock */
386 core_set(priv
, CORE_TRGMII_GSW_CLK_CG
, REG_GSWCK_EN
);
389 /* If port 6 is available as a CPU port, always prefer that as the default,
390 * otherwise don't care.
392 static struct dsa_port
*
393 mt753x_preferred_default_local_cpu_port(struct dsa_switch
*ds
)
395 struct dsa_port
*cpu_dp
= dsa_to_port(ds
, 6);
397 if (dsa_port_is_cpu(cpu_dp
))
403 /* Setup port 6 interface mode and TRGMII TX circuit */
405 mt7530_setup_port6(struct dsa_switch
*ds
, phy_interface_t interface
)
407 struct mt7530_priv
*priv
= ds
->priv
;
408 u32 ncpo1
, ssc_delta
, xtal
;
410 /* Disable the MT7530 TRGMII clocks */
411 core_clear(priv
, CORE_TRGMII_GSW_CLK_CG
, REG_TRGMIICK_EN
);
413 if (interface
== PHY_INTERFACE_MODE_RGMII
) {
414 mt7530_rmw(priv
, MT7530_P6ECR
, P6_INTF_MODE_MASK
,
419 mt7530_rmw(priv
, MT7530_P6ECR
, P6_INTF_MODE_MASK
, P6_INTF_MODE(1));
421 xtal
= mt7530_read(priv
, MT753X_MTRAP
) & MT7530_XTAL_MASK
;
423 if (xtal
== MT7530_XTAL_25MHZ
)
428 if (priv
->id
== ID_MT7621
) {
429 /* PLL frequency: 125MHz: 1.0GBit */
430 if (xtal
== MT7530_XTAL_40MHZ
)
432 if (xtal
== MT7530_XTAL_25MHZ
)
434 } else { /* PLL frequency: 250MHz: 2.0Gbit */
435 if (xtal
== MT7530_XTAL_40MHZ
)
437 if (xtal
== MT7530_XTAL_25MHZ
)
441 /* Setup the MT7530 TRGMII Tx Clock */
442 core_write(priv
, CORE_PLL_GROUP5
, RG_LCDDS_PCW_NCPO1(ncpo1
));
443 core_write(priv
, CORE_PLL_GROUP6
, RG_LCDDS_PCW_NCPO0(0));
444 core_write(priv
, CORE_PLL_GROUP10
, RG_LCDDS_SSC_DELTA(ssc_delta
));
445 core_write(priv
, CORE_PLL_GROUP11
, RG_LCDDS_SSC_DELTA1(ssc_delta
));
446 core_write(priv
, CORE_PLL_GROUP4
, RG_SYSPLL_DDSFBK_EN
|
447 RG_SYSPLL_BIAS_EN
| RG_SYSPLL_BIAS_LPF_EN
);
448 core_write(priv
, CORE_PLL_GROUP2
, RG_SYSPLL_EN_NORMAL
|
449 RG_SYSPLL_VODEN
| RG_SYSPLL_POSDIV(1));
450 core_write(priv
, CORE_PLL_GROUP7
, RG_LCDDS_PCW_NCPO_CHG
|
451 RG_LCCDS_C(3) | RG_LCDDS_PWDB
| RG_LCDDS_ISO_EN
);
453 /* Enable the MT7530 TRGMII clocks */
454 core_set(priv
, CORE_TRGMII_GSW_CLK_CG
, REG_TRGMIICK_EN
);
458 mt7531_pll_setup(struct mt7530_priv
*priv
)
460 enum mt7531_xtal_fsel xtal
;
465 val
= mt7530_read(priv
, MT7531_CREV
);
466 top_sig
= mt7530_read(priv
, MT7531_TOP_SIG_SR
);
467 hwstrap
= mt7530_read(priv
, MT753X_TRAP
);
468 if ((val
& CHIP_REV_M
) > 0)
469 xtal
= (top_sig
& PAD_MCM_SMI_EN
) ? MT7531_XTAL_FSEL_40MHZ
:
470 MT7531_XTAL_FSEL_25MHZ
;
472 xtal
= (hwstrap
& MT7531_XTAL25
) ? MT7531_XTAL_FSEL_25MHZ
:
473 MT7531_XTAL_FSEL_40MHZ
;
475 /* Step 1 : Disable MT7531 COREPLL */
476 val
= mt7530_read(priv
, MT7531_PLLGP_EN
);
478 mt7530_write(priv
, MT7531_PLLGP_EN
, val
);
480 /* Step 2: switch to XTAL output */
481 val
= mt7530_read(priv
, MT7531_PLLGP_EN
);
483 mt7530_write(priv
, MT7531_PLLGP_EN
, val
);
485 val
= mt7530_read(priv
, MT7531_PLLGP_CR0
);
486 val
&= ~RG_COREPLL_EN
;
487 mt7530_write(priv
, MT7531_PLLGP_CR0
, val
);
489 /* Step 3: disable PLLGP and enable program PLLGP */
490 val
= mt7530_read(priv
, MT7531_PLLGP_EN
);
492 mt7530_write(priv
, MT7531_PLLGP_EN
, val
);
494 /* Step 4: program COREPLL output frequency to 500MHz */
495 val
= mt7530_read(priv
, MT7531_PLLGP_CR0
);
496 val
&= ~RG_COREPLL_POSDIV_M
;
497 val
|= 2 << RG_COREPLL_POSDIV_S
;
498 mt7530_write(priv
, MT7531_PLLGP_CR0
, val
);
499 usleep_range(25, 35);
502 case MT7531_XTAL_FSEL_25MHZ
:
503 val
= mt7530_read(priv
, MT7531_PLLGP_CR0
);
504 val
&= ~RG_COREPLL_SDM_PCW_M
;
505 val
|= 0x140000 << RG_COREPLL_SDM_PCW_S
;
506 mt7530_write(priv
, MT7531_PLLGP_CR0
, val
);
508 case MT7531_XTAL_FSEL_40MHZ
:
509 val
= mt7530_read(priv
, MT7531_PLLGP_CR0
);
510 val
&= ~RG_COREPLL_SDM_PCW_M
;
511 val
|= 0x190000 << RG_COREPLL_SDM_PCW_S
;
512 mt7530_write(priv
, MT7531_PLLGP_CR0
, val
);
516 /* Set feedback divide ratio update signal to high */
517 val
= mt7530_read(priv
, MT7531_PLLGP_CR0
);
518 val
|= RG_COREPLL_SDM_PCW_CHG
;
519 mt7530_write(priv
, MT7531_PLLGP_CR0
, val
);
520 /* Wait for at least 16 XTAL clocks */
521 usleep_range(10, 20);
523 /* Step 5: set feedback divide ratio update signal to low */
524 val
= mt7530_read(priv
, MT7531_PLLGP_CR0
);
525 val
&= ~RG_COREPLL_SDM_PCW_CHG
;
526 mt7530_write(priv
, MT7531_PLLGP_CR0
, val
);
528 /* Enable 325M clock for SGMII */
529 mt7530_write(priv
, MT7531_ANA_PLLGP_CR5
, 0xad0000);
531 /* Enable 250SSC clock for RGMII */
532 mt7530_write(priv
, MT7531_ANA_PLLGP_CR2
, 0x4f40000);
534 /* Step 6: Enable MT7531 PLL */
535 val
= mt7530_read(priv
, MT7531_PLLGP_CR0
);
536 val
|= RG_COREPLL_EN
;
537 mt7530_write(priv
, MT7531_PLLGP_CR0
, val
);
539 val
= mt7530_read(priv
, MT7531_PLLGP_EN
);
541 mt7530_write(priv
, MT7531_PLLGP_EN
, val
);
542 usleep_range(25, 35);
546 mt7530_mib_reset(struct dsa_switch
*ds
)
548 struct mt7530_priv
*priv
= ds
->priv
;
550 mt7530_write(priv
, MT7530_MIB_CCR
, CCR_MIB_FLUSH
);
551 mt7530_write(priv
, MT7530_MIB_CCR
, CCR_MIB_ACTIVATE
);
554 static int mt7530_phy_read_c22(struct mt7530_priv
*priv
, int port
, int regnum
)
556 return mdiobus_read_nested(priv
->bus
, port
, regnum
);
559 static int mt7530_phy_write_c22(struct mt7530_priv
*priv
, int port
, int regnum
,
562 return mdiobus_write_nested(priv
->bus
, port
, regnum
, val
);
565 static int mt7530_phy_read_c45(struct mt7530_priv
*priv
, int port
,
566 int devad
, int regnum
)
568 return mdiobus_c45_read_nested(priv
->bus
, port
, devad
, regnum
);
571 static int mt7530_phy_write_c45(struct mt7530_priv
*priv
, int port
, int devad
,
574 return mdiobus_c45_write_nested(priv
->bus
, port
, devad
, regnum
, val
);
578 mt7531_ind_c45_phy_read(struct mt7530_priv
*priv
, int port
, int devad
,
581 struct mt7530_dummy_poll p
;
585 INIT_MT7530_DUMMY_POLL(&p
, priv
, MT7531_PHY_IAC
);
587 mt7530_mutex_lock(priv
);
589 ret
= readx_poll_timeout(_mt7530_unlocked_read
, &p
, val
,
590 !(val
& MT7531_PHY_ACS_ST
), 20, 100000);
592 dev_err(priv
->dev
, "poll timeout\n");
596 reg
= MT7531_MDIO_CL45_ADDR
| MT7531_MDIO_PHY_ADDR(port
) |
597 MT7531_MDIO_DEV_ADDR(devad
) | regnum
;
598 mt7530_mii_write(priv
, MT7531_PHY_IAC
, reg
| MT7531_PHY_ACS_ST
);
600 ret
= readx_poll_timeout(_mt7530_unlocked_read
, &p
, val
,
601 !(val
& MT7531_PHY_ACS_ST
), 20, 100000);
603 dev_err(priv
->dev
, "poll timeout\n");
607 reg
= MT7531_MDIO_CL45_READ
| MT7531_MDIO_PHY_ADDR(port
) |
608 MT7531_MDIO_DEV_ADDR(devad
);
609 mt7530_mii_write(priv
, MT7531_PHY_IAC
, reg
| MT7531_PHY_ACS_ST
);
611 ret
= readx_poll_timeout(_mt7530_unlocked_read
, &p
, val
,
612 !(val
& MT7531_PHY_ACS_ST
), 20, 100000);
614 dev_err(priv
->dev
, "poll timeout\n");
618 ret
= val
& MT7531_MDIO_RW_DATA_MASK
;
620 mt7530_mutex_unlock(priv
);
626 mt7531_ind_c45_phy_write(struct mt7530_priv
*priv
, int port
, int devad
,
627 int regnum
, u16 data
)
629 struct mt7530_dummy_poll p
;
633 INIT_MT7530_DUMMY_POLL(&p
, priv
, MT7531_PHY_IAC
);
635 mt7530_mutex_lock(priv
);
637 ret
= readx_poll_timeout(_mt7530_unlocked_read
, &p
, val
,
638 !(val
& MT7531_PHY_ACS_ST
), 20, 100000);
640 dev_err(priv
->dev
, "poll timeout\n");
644 reg
= MT7531_MDIO_CL45_ADDR
| MT7531_MDIO_PHY_ADDR(port
) |
645 MT7531_MDIO_DEV_ADDR(devad
) | regnum
;
646 mt7530_mii_write(priv
, MT7531_PHY_IAC
, reg
| MT7531_PHY_ACS_ST
);
648 ret
= readx_poll_timeout(_mt7530_unlocked_read
, &p
, val
,
649 !(val
& MT7531_PHY_ACS_ST
), 20, 100000);
651 dev_err(priv
->dev
, "poll timeout\n");
655 reg
= MT7531_MDIO_CL45_WRITE
| MT7531_MDIO_PHY_ADDR(port
) |
656 MT7531_MDIO_DEV_ADDR(devad
) | data
;
657 mt7530_mii_write(priv
, MT7531_PHY_IAC
, reg
| MT7531_PHY_ACS_ST
);
659 ret
= readx_poll_timeout(_mt7530_unlocked_read
, &p
, val
,
660 !(val
& MT7531_PHY_ACS_ST
), 20, 100000);
662 dev_err(priv
->dev
, "poll timeout\n");
667 mt7530_mutex_unlock(priv
);
673 mt7531_ind_c22_phy_read(struct mt7530_priv
*priv
, int port
, int regnum
)
675 struct mt7530_dummy_poll p
;
679 INIT_MT7530_DUMMY_POLL(&p
, priv
, MT7531_PHY_IAC
);
681 mt7530_mutex_lock(priv
);
683 ret
= readx_poll_timeout(_mt7530_unlocked_read
, &p
, val
,
684 !(val
& MT7531_PHY_ACS_ST
), 20, 100000);
686 dev_err(priv
->dev
, "poll timeout\n");
690 val
= MT7531_MDIO_CL22_READ
| MT7531_MDIO_PHY_ADDR(port
) |
691 MT7531_MDIO_REG_ADDR(regnum
);
693 mt7530_mii_write(priv
, MT7531_PHY_IAC
, val
| MT7531_PHY_ACS_ST
);
695 ret
= readx_poll_timeout(_mt7530_unlocked_read
, &p
, val
,
696 !(val
& MT7531_PHY_ACS_ST
), 20, 100000);
698 dev_err(priv
->dev
, "poll timeout\n");
702 ret
= val
& MT7531_MDIO_RW_DATA_MASK
;
704 mt7530_mutex_unlock(priv
);
710 mt7531_ind_c22_phy_write(struct mt7530_priv
*priv
, int port
, int regnum
,
713 struct mt7530_dummy_poll p
;
717 INIT_MT7530_DUMMY_POLL(&p
, priv
, MT7531_PHY_IAC
);
719 mt7530_mutex_lock(priv
);
721 ret
= readx_poll_timeout(_mt7530_unlocked_read
, &p
, reg
,
722 !(reg
& MT7531_PHY_ACS_ST
), 20, 100000);
724 dev_err(priv
->dev
, "poll timeout\n");
728 reg
= MT7531_MDIO_CL22_WRITE
| MT7531_MDIO_PHY_ADDR(port
) |
729 MT7531_MDIO_REG_ADDR(regnum
) | data
;
731 mt7530_mii_write(priv
, MT7531_PHY_IAC
, reg
| MT7531_PHY_ACS_ST
);
733 ret
= readx_poll_timeout(_mt7530_unlocked_read
, &p
, reg
,
734 !(reg
& MT7531_PHY_ACS_ST
), 20, 100000);
736 dev_err(priv
->dev
, "poll timeout\n");
741 mt7530_mutex_unlock(priv
);
747 mt753x_phy_read_c22(struct mii_bus
*bus
, int port
, int regnum
)
749 struct mt7530_priv
*priv
= bus
->priv
;
751 return priv
->info
->phy_read_c22(priv
, port
, regnum
);
755 mt753x_phy_read_c45(struct mii_bus
*bus
, int port
, int devad
, int regnum
)
757 struct mt7530_priv
*priv
= bus
->priv
;
759 return priv
->info
->phy_read_c45(priv
, port
, devad
, regnum
);
763 mt753x_phy_write_c22(struct mii_bus
*bus
, int port
, int regnum
, u16 val
)
765 struct mt7530_priv
*priv
= bus
->priv
;
767 return priv
->info
->phy_write_c22(priv
, port
, regnum
, val
);
771 mt753x_phy_write_c45(struct mii_bus
*bus
, int port
, int devad
, int regnum
,
774 struct mt7530_priv
*priv
= bus
->priv
;
776 return priv
->info
->phy_write_c45(priv
, port
, devad
, regnum
, val
);
780 mt7530_get_strings(struct dsa_switch
*ds
, int port
, u32 stringset
,
785 if (stringset
!= ETH_SS_STATS
)
788 for (i
= 0; i
< ARRAY_SIZE(mt7530_mib
); i
++)
789 ethtool_puts(&data
, mt7530_mib
[i
].name
);
793 mt7530_get_ethtool_stats(struct dsa_switch
*ds
, int port
,
796 struct mt7530_priv
*priv
= ds
->priv
;
797 const struct mt7530_mib_desc
*mib
;
801 for (i
= 0; i
< ARRAY_SIZE(mt7530_mib
); i
++) {
802 mib
= &mt7530_mib
[i
];
803 reg
= MT7530_PORT_MIB_COUNTER(port
) + mib
->offset
;
805 data
[i
] = mt7530_read(priv
, reg
);
806 if (mib
->size
== 2) {
807 hi
= mt7530_read(priv
, reg
+ 4);
814 mt7530_get_sset_count(struct dsa_switch
*ds
, int port
, int sset
)
816 if (sset
!= ETH_SS_STATS
)
819 return ARRAY_SIZE(mt7530_mib
);
823 mt7530_set_ageing_time(struct dsa_switch
*ds
, unsigned int msecs
)
825 struct mt7530_priv
*priv
= ds
->priv
;
826 unsigned int secs
= msecs
/ 1000;
827 unsigned int tmp_age_count
;
828 unsigned int error
= -1;
829 unsigned int age_count
;
830 unsigned int age_unit
;
832 /* Applied timer is (AGE_CNT + 1) * (AGE_UNIT + 1) seconds */
833 if (secs
< 1 || secs
> (AGE_CNT_MAX
+ 1) * (AGE_UNIT_MAX
+ 1))
836 /* iterate through all possible age_count to find the closest pair */
837 for (tmp_age_count
= 0; tmp_age_count
<= AGE_CNT_MAX
; ++tmp_age_count
) {
838 unsigned int tmp_age_unit
= secs
/ (tmp_age_count
+ 1) - 1;
840 if (tmp_age_unit
<= AGE_UNIT_MAX
) {
841 unsigned int tmp_error
= secs
-
842 (tmp_age_count
+ 1) * (tmp_age_unit
+ 1);
844 /* found a closer pair */
845 if (error
> tmp_error
) {
847 age_count
= tmp_age_count
;
848 age_unit
= tmp_age_unit
;
851 /* found the exact match, so break the loop */
857 mt7530_write(priv
, MT7530_AAC
, AGE_CNT(age_count
) | AGE_UNIT(age_unit
));
862 static const char *mt7530_p5_mode_str(unsigned int mode
)
874 static void mt7530_setup_port5(struct dsa_switch
*ds
, phy_interface_t interface
)
876 struct mt7530_priv
*priv
= ds
->priv
;
880 mutex_lock(&priv
->reg_mutex
);
882 val
= mt7530_read(priv
, MT753X_MTRAP
);
884 val
&= ~MT7530_P5_PHY0_SEL
& ~MT7530_P5_MAC_SEL
& ~MT7530_P5_RGMII_MODE
;
886 switch (priv
->p5_mode
) {
887 /* MUX_PHY_P0: P0 -> P5 -> SoC MAC */
889 val
|= MT7530_P5_PHY0_SEL
;
892 /* MUX_PHY_P4: P4 -> P5 -> SoC MAC */
894 /* Setup the MAC by default for the cpu port */
895 mt7530_write(priv
, MT753X_PMCR_P(5), 0x56300);
898 /* GMAC5: P5 -> SoC MAC or external PHY */
900 val
|= MT7530_P5_MAC_SEL
;
904 /* Setup RGMII settings */
905 if (phy_interface_mode_is_rgmii(interface
)) {
906 val
|= MT7530_P5_RGMII_MODE
;
908 /* P5 RGMII RX Clock Control: delay setting for 1000M */
909 mt7530_write(priv
, MT7530_P5RGMIIRXCR
, CSR_RGMII_EDGE_ALIGN
);
911 /* Don't set delay in DSA mode */
912 if (!dsa_is_dsa_port(priv
->ds
, 5) &&
913 (interface
== PHY_INTERFACE_MODE_RGMII_TXID
||
914 interface
== PHY_INTERFACE_MODE_RGMII_ID
))
915 tx_delay
= 4; /* n * 0.5 ns */
917 /* P5 RGMII TX Clock Control: delay x */
918 mt7530_write(priv
, MT7530_P5RGMIITXCR
,
919 CSR_RGMII_TXC_CFG(0x10 + tx_delay
));
921 /* reduce P5 RGMII Tx driving, 8mA */
922 mt7530_write(priv
, MT7530_IO_DRV_CR
,
923 P5_IO_CLK_DRV(1) | P5_IO_DATA_DRV(1));
926 mt7530_write(priv
, MT753X_MTRAP
, val
);
928 dev_dbg(ds
->dev
, "Setup P5, HWTRAP=0x%x, mode=%s, phy-mode=%s\n", val
,
929 mt7530_p5_mode_str(priv
->p5_mode
), phy_modes(interface
));
931 mutex_unlock(&priv
->reg_mutex
);
934 /* In Clause 5 of IEEE Std 802-2014, two sublayers of the data link layer (DLL)
935 * of the Open Systems Interconnection basic reference model (OSI/RM) are
936 * described; the medium access control (MAC) and logical link control (LLC)
937 * sublayers. The MAC sublayer is the one facing the physical layer.
939 * In 8.2 of IEEE Std 802.1Q-2022, the Bridge architecture is described. A
940 * Bridge component comprises a MAC Relay Entity for interconnecting the Ports
941 * of the Bridge, at least two Ports, and higher layer entities with at least a
942 * Spanning Tree Protocol Entity included.
944 * Each Bridge Port also functions as an end station and shall provide the MAC
945 * Service to an LLC Entity. Each instance of the MAC Service is provided to a
946 * distinct LLC Entity that supports protocol identification, multiplexing, and
947 * demultiplexing, for protocol data unit (PDU) transmission and reception by
948 * one or more higher layer entities.
950 * It is described in 8.13.9 of IEEE Std 802.1Q-2022 that in a Bridge, the LLC
951 * Entity associated with each Bridge Port is modeled as being directly
952 * connected to the attached Local Area Network (LAN).
954 * On the switch with CPU port architecture, CPU port functions as Management
955 * Port, and the Management Port functionality is provided by software which
956 * functions as an end station. Software is connected to an IEEE 802 LAN that is
957 * wholly contained within the system that incorporates the Bridge. Software
958 * provides access to the LLC Entity associated with each Bridge Port by the
959 * value of the source port field on the special tag on the frame received by
962 * We call frames that carry control information to determine the active
963 * topology and current extent of each Virtual Local Area Network (VLAN), i.e.,
964 * spanning tree or Shortest Path Bridging (SPB) and Multiple VLAN Registration
965 * Protocol Data Units (MVRPDUs), and frames from other link constrained
966 * protocols, such as Extensible Authentication Protocol over LAN (EAPOL) and
967 * Link Layer Discovery Protocol (LLDP), link-local frames. They are not
968 * forwarded by a Bridge. Permanently configured entries in the filtering
969 * database (FDB) ensure that such frames are discarded by the Forwarding
970 * Process. In 8.6.3 of IEEE Std 802.1Q-2022, this is described in detail:
972 * Each of the reserved MAC addresses specified in Table 8-1
973 * (01-80-C2-00-00-[00,01,02,03,04,05,06,07,08,09,0A,0B,0C,0D,0E,0F]) shall be
974 * permanently configured in the FDB in C-VLAN components and ERs.
976 * Each of the reserved MAC addresses specified in Table 8-2
977 * (01-80-C2-00-00-[01,02,03,04,05,06,07,08,09,0A,0E]) shall be permanently
978 * configured in the FDB in S-VLAN components.
980 * Each of the reserved MAC addresses specified in Table 8-3
981 * (01-80-C2-00-00-[01,02,04,0E]) shall be permanently configured in the FDB in
984 * The FDB entries for reserved MAC addresses shall specify filtering for all
985 * Bridge Ports and all VIDs. Management shall not provide the capability to
986 * modify or remove entries for reserved MAC addresses.
988 * The addresses in Table 8-1, Table 8-2, and Table 8-3 determine the scope of
989 * propagation of PDUs within a Bridged Network, as follows:
991 * The Nearest Bridge group address (01-80-C2-00-00-0E) is an address that no
992 * conformant Two-Port MAC Relay (TPMR) component, Service VLAN (S-VLAN)
993 * component, Customer VLAN (C-VLAN) component, or MAC Bridge can forward.
994 * PDUs transmitted using this destination address, or any other addresses
995 * that appear in Table 8-1, Table 8-2, and Table 8-3
996 * (01-80-C2-00-00-[00,01,02,03,04,05,06,07,08,09,0A,0B,0C,0D,0E,0F]), can
997 * therefore travel no further than those stations that can be reached via a
998 * single individual LAN from the originating station.
1000 * The Nearest non-TPMR Bridge group address (01-80-C2-00-00-03), is an
1001 * address that no conformant S-VLAN component, C-VLAN component, or MAC
1002 * Bridge can forward; however, this address is relayed by a TPMR component.
1003 * PDUs using this destination address, or any of the other addresses that
1004 * appear in both Table 8-1 and Table 8-2 but not in Table 8-3
1005 * (01-80-C2-00-00-[00,03,05,06,07,08,09,0A,0B,0C,0D,0F]), will be relayed by
1006 * any TPMRs but will propagate no further than the nearest S-VLAN component,
1007 * C-VLAN component, or MAC Bridge.
1009 * The Nearest Customer Bridge group address (01-80-C2-00-00-00) is an address
1010 * that no conformant C-VLAN component, MAC Bridge can forward; however, it is
1011 * relayed by TPMR components and S-VLAN components. PDUs using this
1012 * destination address, or any of the other addresses that appear in Table 8-1
1013 * but not in either Table 8-2 or Table 8-3 (01-80-C2-00-00-[00,0B,0C,0D,0F]),
1014 * will be relayed by TPMR components and S-VLAN components but will propagate
1015 * no further than the nearest C-VLAN component or MAC Bridge.
1017 * Because the LLC Entity associated with each Bridge Port is provided via CPU
1018 * port, we must not filter these frames but forward them to CPU port.
1020 * In a Bridge, the transmission Port is majorly decided by ingress and egress
1021 * rules, FDB, and spanning tree Port State functions of the Forwarding Process.
1022 * For link-local frames, only CPU port should be designated as destination port
1023 * in the FDB, and the other functions of the Forwarding Process must not
1024 * interfere with the decision of the transmission Port. We call this process
1025 * trapping frames to CPU port.
1027 * Therefore, on the switch with CPU port architecture, link-local frames must
1028 * be trapped to CPU port, and certain link-local frames received by a Port of a
1029 * Bridge comprising a TPMR component or an S-VLAN component must be excluded
1032 * A Bridge of the switch with CPU port architecture cannot comprise a Two-Port
1033 * MAC Relay (TPMR) component as a TPMR component supports only a subset of the
1034 * functionality of a MAC Bridge. A Bridge comprising two Ports (Management Port
1035 * doesn't count) of this architecture will either function as a standard MAC
1036 * Bridge or a standard VLAN Bridge.
1038 * Therefore, a Bridge of this architecture can only comprise S-VLAN components,
1039 * C-VLAN components, or MAC Bridge components. Since there's no TPMR component,
1040 * we don't need to relay PDUs using the destination addresses specified on the
1041 * Nearest non-TPMR section, and the proportion of the Nearest Customer Bridge
1042 * section where they must be relayed by TPMR components.
1044 * One option to trap link-local frames to CPU port is to add static FDB entries
1045 * with CPU port designated as destination port. However, because that
1046 * Independent VLAN Learning (IVL) is being used on every VID, each entry only
1047 * applies to a single VLAN Identifier (VID). For a Bridge comprising a MAC
1048 * Bridge component or a C-VLAN component, there would have to be 16 times 4096
1049 * entries. This switch intellectual property can only hold a maximum of 2048
1050 * entries. Using this option, there also isn't a mechanism to prevent
1051 * link-local frames from being discarded when the spanning tree Port State of
1052 * the reception Port is discarding.
1054 * The remaining option is to utilise the BPC, RGAC1, RGAC2, RGAC3, and RGAC4
1055 * registers. Whilst this applies to every VID, it doesn't contain all of the
1056 * reserved MAC addresses without affecting the remaining Standard Group MAC
1057 * Addresses. The REV_UN frame tag utilised using the RGAC4 register covers the
1058 * remaining 01-80-C2-00-00-[04,05,06,07,08,09,0A,0B,0C,0D,0F] destination
1059 * addresses. It also includes the 01-80-C2-00-00-22 to 01-80-C2-00-00-FF
1060 * destination addresses which may be relayed by MAC Bridges or VLAN Bridges.
1061 * The latter option provides better but not complete conformance.
1063 * This switch intellectual property also does not provide a mechanism to trap
1064 * link-local frames with specific destination addresses to CPU port by Bridge,
1065 * to conform to the filtering rules for the distinct Bridge components.
1067 * Therefore, regardless of the type of the Bridge component, link-local frames
1068 * with these destination addresses will be trapped to CPU port:
1070 * 01-80-C2-00-00-[00,01,02,03,0E]
1072 * In a Bridge comprising a MAC Bridge component or a C-VLAN component:
1074 * Link-local frames with these destination addresses won't be trapped to CPU
1075 * port which won't conform to IEEE Std 802.1Q-2022:
1077 * 01-80-C2-00-00-[04,05,06,07,08,09,0A,0B,0C,0D,0F]
1079 * In a Bridge comprising an S-VLAN component:
1081 * Link-local frames with these destination addresses will be trapped to CPU
1082 * port which won't conform to IEEE Std 802.1Q-2022:
1086 * Link-local frames with these destination addresses won't be trapped to CPU
1087 * port which won't conform to IEEE Std 802.1Q-2022:
1089 * 01-80-C2-00-00-[04,05,06,07,08,09,0A]
1091 * To trap link-local frames to CPU port as conformant as this switch
1092 * intellectual property can allow, link-local frames are made to be regarded as
1093 * Bridge Protocol Data Units (BPDUs). This is because this switch intellectual
1094 * property only lets the frames regarded as BPDUs bypass the spanning tree Port
1095 * State function of the Forwarding Process.
1097 * The only remaining interference is the ingress rules. When the reception Port
1098 * has no PVID assigned on software, VLAN-untagged frames won't be allowed in.
1099 * There doesn't seem to be a mechanism on the switch intellectual property to
1100 * have link-local frames bypass this function of the Forwarding Process.
1103 mt753x_trap_frames(struct mt7530_priv
*priv
)
1105 /* Trap 802.1X PAE frames and BPDUs to the CPU port(s) and egress them
1108 mt7530_rmw(priv
, MT753X_BPC
,
1109 PAE_BPDU_FR
| PAE_EG_TAG_MASK
| PAE_PORT_FW_MASK
|
1110 BPDU_EG_TAG_MASK
| BPDU_PORT_FW_MASK
,
1111 PAE_BPDU_FR
| PAE_EG_TAG(MT7530_VLAN_EG_UNTAGGED
) |
1112 PAE_PORT_FW(TO_CPU_FW_CPU_ONLY
) |
1113 BPDU_EG_TAG(MT7530_VLAN_EG_UNTAGGED
) |
1114 TO_CPU_FW_CPU_ONLY
);
1116 /* Trap frames with :01 and :02 MAC DAs to the CPU port(s) and egress
1117 * them VLAN-untagged.
1119 mt7530_rmw(priv
, MT753X_RGAC1
,
1120 R02_BPDU_FR
| R02_EG_TAG_MASK
| R02_PORT_FW_MASK
|
1121 R01_BPDU_FR
| R01_EG_TAG_MASK
| R01_PORT_FW_MASK
,
1122 R02_BPDU_FR
| R02_EG_TAG(MT7530_VLAN_EG_UNTAGGED
) |
1123 R02_PORT_FW(TO_CPU_FW_CPU_ONLY
) | R01_BPDU_FR
|
1124 R01_EG_TAG(MT7530_VLAN_EG_UNTAGGED
) |
1125 TO_CPU_FW_CPU_ONLY
);
1127 /* Trap frames with :03 and :0E MAC DAs to the CPU port(s) and egress
1128 * them VLAN-untagged.
1130 mt7530_rmw(priv
, MT753X_RGAC2
,
1131 R0E_BPDU_FR
| R0E_EG_TAG_MASK
| R0E_PORT_FW_MASK
|
1132 R03_BPDU_FR
| R03_EG_TAG_MASK
| R03_PORT_FW_MASK
,
1133 R0E_BPDU_FR
| R0E_EG_TAG(MT7530_VLAN_EG_UNTAGGED
) |
1134 R0E_PORT_FW(TO_CPU_FW_CPU_ONLY
) | R03_BPDU_FR
|
1135 R03_EG_TAG(MT7530_VLAN_EG_UNTAGGED
) |
1136 TO_CPU_FW_CPU_ONLY
);
1140 mt753x_cpu_port_enable(struct dsa_switch
*ds
, int port
)
1142 struct mt7530_priv
*priv
= ds
->priv
;
1144 /* Enable Mediatek header mode on the cpu port */
1145 mt7530_write(priv
, MT7530_PVC_P(port
),
1148 /* Enable flooding on the CPU port */
1149 mt7530_set(priv
, MT753X_MFC
, BC_FFP(BIT(port
)) | UNM_FFP(BIT(port
)) |
1150 UNU_FFP(BIT(port
)));
1152 /* Add the CPU port to the CPU port bitmap for MT7531 and the switch on
1153 * the MT7988 SoC. Trapped frames will be forwarded to the CPU port that
1154 * is affine to the inbound user port.
1156 if (priv
->id
== ID_MT7531
|| priv
->id
== ID_MT7988
||
1157 priv
->id
== ID_EN7581
)
1158 mt7530_set(priv
, MT7531_CFC
, MT7531_CPU_PMAP(BIT(port
)));
1160 /* CPU port gets connected to all user ports of
1163 mt7530_write(priv
, MT7530_PCR_P(port
),
1164 PCR_MATRIX(dsa_user_ports(priv
->ds
)));
1166 /* Set to fallback mode for independent VLAN learning */
1167 mt7530_rmw(priv
, MT7530_PCR_P(port
), PCR_PORT_VLAN_MASK
,
1168 MT7530_PORT_FALLBACK_MODE
);
1172 mt7530_port_enable(struct dsa_switch
*ds
, int port
,
1173 struct phy_device
*phy
)
1175 struct dsa_port
*dp
= dsa_to_port(ds
, port
);
1176 struct mt7530_priv
*priv
= ds
->priv
;
1178 mutex_lock(&priv
->reg_mutex
);
1180 /* Allow the user port gets connected to the cpu port and also
1181 * restore the port matrix if the port is the member of a certain
1184 if (dsa_port_is_user(dp
)) {
1185 struct dsa_port
*cpu_dp
= dp
->cpu_dp
;
1187 priv
->ports
[port
].pm
|= PCR_MATRIX(BIT(cpu_dp
->index
));
1189 priv
->ports
[port
].enable
= true;
1190 mt7530_rmw(priv
, MT7530_PCR_P(port
), PCR_MATRIX_MASK
,
1191 priv
->ports
[port
].pm
);
1193 mutex_unlock(&priv
->reg_mutex
);
1195 if (priv
->id
!= ID_MT7530
&& priv
->id
!= ID_MT7621
)
1199 mt7530_clear(priv
, MT753X_MTRAP
, MT7530_P5_DIS
);
1201 mt7530_clear(priv
, MT753X_MTRAP
, MT7530_P6_DIS
);
1207 mt7530_port_disable(struct dsa_switch
*ds
, int port
)
1209 struct mt7530_priv
*priv
= ds
->priv
;
1211 mutex_lock(&priv
->reg_mutex
);
1213 /* Clear up all port matrix which could be restored in the next
1214 * enablement for the port.
1216 priv
->ports
[port
].enable
= false;
1217 mt7530_rmw(priv
, MT7530_PCR_P(port
), PCR_MATRIX_MASK
,
1220 mutex_unlock(&priv
->reg_mutex
);
1222 if (priv
->id
!= ID_MT7530
&& priv
->id
!= ID_MT7621
)
1225 /* Do not set MT7530_P5_DIS when port 5 is being used for PHY muxing. */
1226 if (port
== 5 && priv
->p5_mode
== GMAC5
)
1227 mt7530_set(priv
, MT753X_MTRAP
, MT7530_P5_DIS
);
1229 mt7530_set(priv
, MT753X_MTRAP
, MT7530_P6_DIS
);
1233 mt7530_port_change_mtu(struct dsa_switch
*ds
, int port
, int new_mtu
)
1235 struct mt7530_priv
*priv
= ds
->priv
;
1239 /* When a new MTU is set, DSA always set the CPU port's MTU to the
1240 * largest MTU of the user ports. Because the switch only has a global
1241 * RX length register, only allowing CPU port here is enough.
1243 if (!dsa_is_cpu_port(ds
, port
))
1246 mt7530_mutex_lock(priv
);
1248 val
= mt7530_mii_read(priv
, MT7530_GMACCR
);
1249 val
&= ~MAX_RX_PKT_LEN_MASK
;
1251 /* RX length also includes Ethernet header, MTK tag, and FCS length */
1252 length
= new_mtu
+ ETH_HLEN
+ MTK_HDR_LEN
+ ETH_FCS_LEN
;
1253 if (length
<= 1522) {
1254 val
|= MAX_RX_PKT_LEN_1522
;
1255 } else if (length
<= 1536) {
1256 val
|= MAX_RX_PKT_LEN_1536
;
1257 } else if (length
<= 1552) {
1258 val
|= MAX_RX_PKT_LEN_1552
;
1260 val
&= ~MAX_RX_JUMBO_MASK
;
1261 val
|= MAX_RX_JUMBO(DIV_ROUND_UP(length
, 1024));
1262 val
|= MAX_RX_PKT_LEN_JUMBO
;
1265 mt7530_mii_write(priv
, MT7530_GMACCR
, val
);
1267 mt7530_mutex_unlock(priv
);
1273 mt7530_port_max_mtu(struct dsa_switch
*ds
, int port
)
1275 return MT7530_MAX_MTU
;
1279 mt7530_stp_state_set(struct dsa_switch
*ds
, int port
, u8 state
)
1281 struct mt7530_priv
*priv
= ds
->priv
;
1285 case BR_STATE_DISABLED
:
1286 stp_state
= MT7530_STP_DISABLED
;
1288 case BR_STATE_BLOCKING
:
1289 stp_state
= MT7530_STP_BLOCKING
;
1291 case BR_STATE_LISTENING
:
1292 stp_state
= MT7530_STP_LISTENING
;
1294 case BR_STATE_LEARNING
:
1295 stp_state
= MT7530_STP_LEARNING
;
1297 case BR_STATE_FORWARDING
:
1299 stp_state
= MT7530_STP_FORWARDING
;
1303 mt7530_rmw(priv
, MT7530_SSP_P(port
), FID_PST_MASK(FID_BRIDGED
),
1304 FID_PST(FID_BRIDGED
, stp_state
));
1307 static void mt7530_update_port_member(struct mt7530_priv
*priv
, int port
,
1308 const struct net_device
*bridge_dev
,
1309 bool join
) __must_hold(&priv
->reg_mutex
)
1311 struct dsa_port
*dp
= dsa_to_port(priv
->ds
, port
), *other_dp
;
1312 struct mt7530_port
*p
= &priv
->ports
[port
], *other_p
;
1313 struct dsa_port
*cpu_dp
= dp
->cpu_dp
;
1314 u32 port_bitmap
= BIT(cpu_dp
->index
);
1318 dsa_switch_for_each_user_port(other_dp
, priv
->ds
) {
1319 other_port
= other_dp
->index
;
1320 other_p
= &priv
->ports
[other_port
];
1325 /* Add/remove this port to/from the port matrix of the other
1326 * ports in the same bridge. If the port is disabled, port
1327 * matrix is kept and not being setup until the port becomes
1330 if (!dsa_port_offloads_bridge_dev(other_dp
, bridge_dev
))
1333 isolated
= p
->isolated
&& other_p
->isolated
;
1335 if (join
&& !isolated
) {
1336 other_p
->pm
|= PCR_MATRIX(BIT(port
));
1337 port_bitmap
|= BIT(other_port
);
1339 other_p
->pm
&= ~PCR_MATRIX(BIT(port
));
1342 if (other_p
->enable
)
1343 mt7530_rmw(priv
, MT7530_PCR_P(other_port
),
1344 PCR_MATRIX_MASK
, other_p
->pm
);
1347 /* Add/remove the all other ports to this port matrix. For !join
1348 * (leaving the bridge), only the CPU port will remain in the port matrix
1351 p
->pm
= PCR_MATRIX(port_bitmap
);
1352 if (priv
->ports
[port
].enable
)
1353 mt7530_rmw(priv
, MT7530_PCR_P(port
), PCR_MATRIX_MASK
, p
->pm
);
1357 mt7530_port_pre_bridge_flags(struct dsa_switch
*ds
, int port
,
1358 struct switchdev_brport_flags flags
,
1359 struct netlink_ext_ack
*extack
)
1361 if (flags
.mask
& ~(BR_LEARNING
| BR_FLOOD
| BR_MCAST_FLOOD
|
1362 BR_BCAST_FLOOD
| BR_ISOLATED
))
1369 mt7530_port_bridge_flags(struct dsa_switch
*ds
, int port
,
1370 struct switchdev_brport_flags flags
,
1371 struct netlink_ext_ack
*extack
)
1373 struct mt7530_priv
*priv
= ds
->priv
;
1375 if (flags
.mask
& BR_LEARNING
)
1376 mt7530_rmw(priv
, MT7530_PSC_P(port
), SA_DIS
,
1377 flags
.val
& BR_LEARNING
? 0 : SA_DIS
);
1379 if (flags
.mask
& BR_FLOOD
)
1380 mt7530_rmw(priv
, MT753X_MFC
, UNU_FFP(BIT(port
)),
1381 flags
.val
& BR_FLOOD
? UNU_FFP(BIT(port
)) : 0);
1383 if (flags
.mask
& BR_MCAST_FLOOD
)
1384 mt7530_rmw(priv
, MT753X_MFC
, UNM_FFP(BIT(port
)),
1385 flags
.val
& BR_MCAST_FLOOD
? UNM_FFP(BIT(port
)) : 0);
1387 if (flags
.mask
& BR_BCAST_FLOOD
)
1388 mt7530_rmw(priv
, MT753X_MFC
, BC_FFP(BIT(port
)),
1389 flags
.val
& BR_BCAST_FLOOD
? BC_FFP(BIT(port
)) : 0);
1391 if (flags
.mask
& BR_ISOLATED
) {
1392 struct dsa_port
*dp
= dsa_to_port(ds
, port
);
1393 struct net_device
*bridge_dev
= dsa_port_bridge_dev_get(dp
);
1395 priv
->ports
[port
].isolated
= !!(flags
.val
& BR_ISOLATED
);
1397 mutex_lock(&priv
->reg_mutex
);
1398 mt7530_update_port_member(priv
, port
, bridge_dev
, true);
1399 mutex_unlock(&priv
->reg_mutex
);
1406 mt7530_port_bridge_join(struct dsa_switch
*ds
, int port
,
1407 struct dsa_bridge bridge
, bool *tx_fwd_offload
,
1408 struct netlink_ext_ack
*extack
)
1410 struct mt7530_priv
*priv
= ds
->priv
;
1412 mutex_lock(&priv
->reg_mutex
);
1414 mt7530_update_port_member(priv
, port
, bridge
.dev
, true);
1416 /* Set to fallback mode for independent VLAN learning */
1417 mt7530_rmw(priv
, MT7530_PCR_P(port
), PCR_PORT_VLAN_MASK
,
1418 MT7530_PORT_FALLBACK_MODE
);
1420 mutex_unlock(&priv
->reg_mutex
);
1426 mt7530_port_set_vlan_unaware(struct dsa_switch
*ds
, int port
)
1428 struct mt7530_priv
*priv
= ds
->priv
;
1429 bool all_user_ports_removed
= true;
1432 /* This is called after .port_bridge_leave when leaving a VLAN-aware
1433 * bridge. Don't set standalone ports to fallback mode.
1435 if (dsa_port_bridge_dev_get(dsa_to_port(ds
, port
)))
1436 mt7530_rmw(priv
, MT7530_PCR_P(port
), PCR_PORT_VLAN_MASK
,
1437 MT7530_PORT_FALLBACK_MODE
);
1439 mt7530_rmw(priv
, MT7530_PVC_P(port
),
1440 VLAN_ATTR_MASK
| PVC_EG_TAG_MASK
| ACC_FRM_MASK
,
1441 VLAN_ATTR(MT7530_VLAN_TRANSPARENT
) |
1442 PVC_EG_TAG(MT7530_VLAN_EG_CONSISTENT
) |
1443 MT7530_VLAN_ACC_ALL
);
1446 mt7530_rmw(priv
, MT7530_PPBV1_P(port
), G0_PORT_VID_MASK
,
1449 for (i
= 0; i
< priv
->ds
->num_ports
; i
++) {
1450 if (dsa_is_user_port(ds
, i
) &&
1451 dsa_port_is_vlan_filtering(dsa_to_port(ds
, i
))) {
1452 all_user_ports_removed
= false;
1457 /* CPU port also does the same thing until all user ports belonging to
1458 * the CPU port get out of VLAN filtering mode.
1460 if (all_user_ports_removed
) {
1461 struct dsa_port
*dp
= dsa_to_port(ds
, port
);
1462 struct dsa_port
*cpu_dp
= dp
->cpu_dp
;
1464 mt7530_write(priv
, MT7530_PCR_P(cpu_dp
->index
),
1465 PCR_MATRIX(dsa_user_ports(priv
->ds
)));
1466 mt7530_write(priv
, MT7530_PVC_P(cpu_dp
->index
), PORT_SPEC_TAG
1467 | PVC_EG_TAG(MT7530_VLAN_EG_CONSISTENT
));
1472 mt7530_port_set_vlan_aware(struct dsa_switch
*ds
, int port
)
1474 struct mt7530_priv
*priv
= ds
->priv
;
1476 /* Trapped into security mode allows packet forwarding through VLAN
1479 if (dsa_is_user_port(ds
, port
)) {
1480 mt7530_rmw(priv
, MT7530_PCR_P(port
), PCR_PORT_VLAN_MASK
,
1481 MT7530_PORT_SECURITY_MODE
);
1482 mt7530_rmw(priv
, MT7530_PPBV1_P(port
), G0_PORT_VID_MASK
,
1483 G0_PORT_VID(priv
->ports
[port
].pvid
));
1485 /* Only accept tagged frames if PVID is not set */
1486 if (!priv
->ports
[port
].pvid
)
1487 mt7530_rmw(priv
, MT7530_PVC_P(port
), ACC_FRM_MASK
,
1488 MT7530_VLAN_ACC_TAGGED
);
1490 /* Set the port as a user port which is to be able to recognize
1491 * VID from incoming packets before fetching entry within the
1494 mt7530_rmw(priv
, MT7530_PVC_P(port
),
1495 VLAN_ATTR_MASK
| PVC_EG_TAG_MASK
,
1496 VLAN_ATTR(MT7530_VLAN_USER
) |
1497 PVC_EG_TAG(MT7530_VLAN_EG_DISABLED
));
1499 /* Also set CPU ports to the "user" VLAN port attribute, to
1500 * allow VLAN classification, but keep the EG_TAG attribute as
1501 * "consistent" (i.o.w. don't change its value) for packets
1502 * received by the switch from the CPU, so that tagged packets
1503 * are forwarded to user ports as tagged, and untagged as
1506 mt7530_rmw(priv
, MT7530_PVC_P(port
), VLAN_ATTR_MASK
,
1507 VLAN_ATTR(MT7530_VLAN_USER
));
1512 mt7530_port_bridge_leave(struct dsa_switch
*ds
, int port
,
1513 struct dsa_bridge bridge
)
1515 struct mt7530_priv
*priv
= ds
->priv
;
1517 mutex_lock(&priv
->reg_mutex
);
1519 mt7530_update_port_member(priv
, port
, bridge
.dev
, false);
1521 /* When a port is removed from the bridge, the port would be set up
1522 * back to the default as is at initial boot which is a VLAN-unaware
1525 mt7530_rmw(priv
, MT7530_PCR_P(port
), PCR_PORT_VLAN_MASK
,
1526 MT7530_PORT_MATRIX_MODE
);
1528 mutex_unlock(&priv
->reg_mutex
);
1532 mt7530_port_fdb_add(struct dsa_switch
*ds
, int port
,
1533 const unsigned char *addr
, u16 vid
,
1536 struct mt7530_priv
*priv
= ds
->priv
;
1538 u8 port_mask
= BIT(port
);
1540 mutex_lock(&priv
->reg_mutex
);
1541 mt7530_fdb_write(priv
, vid
, port_mask
, addr
, -1, STATIC_ENT
);
1542 ret
= mt7530_fdb_cmd(priv
, MT7530_FDB_WRITE
, NULL
);
1543 mutex_unlock(&priv
->reg_mutex
);
1549 mt7530_port_fdb_del(struct dsa_switch
*ds
, int port
,
1550 const unsigned char *addr
, u16 vid
,
1553 struct mt7530_priv
*priv
= ds
->priv
;
1555 u8 port_mask
= BIT(port
);
1557 mutex_lock(&priv
->reg_mutex
);
1558 mt7530_fdb_write(priv
, vid
, port_mask
, addr
, -1, STATIC_EMP
);
1559 ret
= mt7530_fdb_cmd(priv
, MT7530_FDB_WRITE
, NULL
);
1560 mutex_unlock(&priv
->reg_mutex
);
1566 mt7530_port_fdb_dump(struct dsa_switch
*ds
, int port
,
1567 dsa_fdb_dump_cb_t
*cb
, void *data
)
1569 struct mt7530_priv
*priv
= ds
->priv
;
1570 struct mt7530_fdb _fdb
= { 0 };
1571 int cnt
= MT7530_NUM_FDB_RECORDS
;
1575 mutex_lock(&priv
->reg_mutex
);
1577 ret
= mt7530_fdb_cmd(priv
, MT7530_FDB_START
, &rsp
);
1582 if (rsp
& ATC_SRCH_HIT
) {
1583 mt7530_fdb_read(priv
, &_fdb
);
1584 if (_fdb
.port_mask
& BIT(port
)) {
1585 ret
= cb(_fdb
.mac
, _fdb
.vid
, _fdb
.noarp
,
1592 !(rsp
& ATC_SRCH_END
) &&
1593 !mt7530_fdb_cmd(priv
, MT7530_FDB_NEXT
, &rsp
));
1595 mutex_unlock(&priv
->reg_mutex
);
1601 mt7530_port_mdb_add(struct dsa_switch
*ds
, int port
,
1602 const struct switchdev_obj_port_mdb
*mdb
,
1605 struct mt7530_priv
*priv
= ds
->priv
;
1606 const u8
*addr
= mdb
->addr
;
1611 mutex_lock(&priv
->reg_mutex
);
1613 mt7530_fdb_write(priv
, vid
, 0, addr
, 0, STATIC_EMP
);
1614 if (!mt7530_fdb_cmd(priv
, MT7530_FDB_READ
, NULL
))
1615 port_mask
= (mt7530_read(priv
, MT7530_ATRD
) >> PORT_MAP
)
1618 port_mask
|= BIT(port
);
1619 mt7530_fdb_write(priv
, vid
, port_mask
, addr
, -1, STATIC_ENT
);
1620 ret
= mt7530_fdb_cmd(priv
, MT7530_FDB_WRITE
, NULL
);
1622 mutex_unlock(&priv
->reg_mutex
);
1628 mt7530_port_mdb_del(struct dsa_switch
*ds
, int port
,
1629 const struct switchdev_obj_port_mdb
*mdb
,
1632 struct mt7530_priv
*priv
= ds
->priv
;
1633 const u8
*addr
= mdb
->addr
;
1638 mutex_lock(&priv
->reg_mutex
);
1640 mt7530_fdb_write(priv
, vid
, 0, addr
, 0, STATIC_EMP
);
1641 if (!mt7530_fdb_cmd(priv
, MT7530_FDB_READ
, NULL
))
1642 port_mask
= (mt7530_read(priv
, MT7530_ATRD
) >> PORT_MAP
)
1645 port_mask
&= ~BIT(port
);
1646 mt7530_fdb_write(priv
, vid
, port_mask
, addr
, -1,
1647 port_mask
? STATIC_ENT
: STATIC_EMP
);
1648 ret
= mt7530_fdb_cmd(priv
, MT7530_FDB_WRITE
, NULL
);
1650 mutex_unlock(&priv
->reg_mutex
);
1656 mt7530_vlan_cmd(struct mt7530_priv
*priv
, enum mt7530_vlan_cmd cmd
, u16 vid
)
1658 struct mt7530_dummy_poll p
;
1662 val
= VTCR_BUSY
| VTCR_FUNC(cmd
) | vid
;
1663 mt7530_write(priv
, MT7530_VTCR
, val
);
1665 INIT_MT7530_DUMMY_POLL(&p
, priv
, MT7530_VTCR
);
1666 ret
= readx_poll_timeout(_mt7530_read
, &p
, val
,
1667 !(val
& VTCR_BUSY
), 20, 20000);
1669 dev_err(priv
->dev
, "poll timeout\n");
1673 val
= mt7530_read(priv
, MT7530_VTCR
);
1674 if (val
& VTCR_INVALID
) {
1675 dev_err(priv
->dev
, "read VTCR invalid\n");
1683 mt7530_port_vlan_filtering(struct dsa_switch
*ds
, int port
, bool vlan_filtering
,
1684 struct netlink_ext_ack
*extack
)
1686 struct dsa_port
*dp
= dsa_to_port(ds
, port
);
1687 struct dsa_port
*cpu_dp
= dp
->cpu_dp
;
1689 if (vlan_filtering
) {
1690 /* The port is being kept as VLAN-unaware port when bridge is
1691 * set up with vlan_filtering not being set, Otherwise, the
1692 * port and the corresponding CPU port is required the setup
1693 * for becoming a VLAN-aware port.
1695 mt7530_port_set_vlan_aware(ds
, port
);
1696 mt7530_port_set_vlan_aware(ds
, cpu_dp
->index
);
1698 mt7530_port_set_vlan_unaware(ds
, port
);
1705 mt7530_hw_vlan_add(struct mt7530_priv
*priv
,
1706 struct mt7530_hw_vlan_entry
*entry
)
1708 struct dsa_port
*dp
= dsa_to_port(priv
->ds
, entry
->port
);
1712 new_members
= entry
->old_members
| BIT(entry
->port
);
1714 /* Validate the entry with independent learning, create egress tag per
1715 * VLAN and joining the port as one of the port members.
1717 val
= IVL_MAC
| VTAG_EN
| PORT_MEM(new_members
) | FID(FID_BRIDGED
) |
1719 mt7530_write(priv
, MT7530_VAWD1
, val
);
1721 /* Decide whether adding tag or not for those outgoing packets from the
1722 * port inside the VLAN.
1723 * CPU port is always taken as a tagged port for serving more than one
1724 * VLANs across and also being applied with egress type stack mode for
1725 * that VLAN tags would be appended after hardware special tag used as
1728 if (dsa_port_is_cpu(dp
))
1729 val
= MT7530_VLAN_EGRESS_STACK
;
1730 else if (entry
->untagged
)
1731 val
= MT7530_VLAN_EGRESS_UNTAG
;
1733 val
= MT7530_VLAN_EGRESS_TAG
;
1734 mt7530_rmw(priv
, MT7530_VAWD2
,
1735 ETAG_CTRL_P_MASK(entry
->port
),
1736 ETAG_CTRL_P(entry
->port
, val
));
1740 mt7530_hw_vlan_del(struct mt7530_priv
*priv
,
1741 struct mt7530_hw_vlan_entry
*entry
)
1746 new_members
= entry
->old_members
& ~BIT(entry
->port
);
1748 val
= mt7530_read(priv
, MT7530_VAWD1
);
1749 if (!(val
& VLAN_VALID
)) {
1751 "Cannot be deleted due to invalid entry\n");
1756 val
= IVL_MAC
| VTAG_EN
| PORT_MEM(new_members
) |
1758 mt7530_write(priv
, MT7530_VAWD1
, val
);
1760 mt7530_write(priv
, MT7530_VAWD1
, 0);
1761 mt7530_write(priv
, MT7530_VAWD2
, 0);
1766 mt7530_hw_vlan_update(struct mt7530_priv
*priv
, u16 vid
,
1767 struct mt7530_hw_vlan_entry
*entry
,
1768 mt7530_vlan_op vlan_op
)
1773 mt7530_vlan_cmd(priv
, MT7530_VTCR_RD_VID
, vid
);
1775 val
= mt7530_read(priv
, MT7530_VAWD1
);
1777 entry
->old_members
= (val
>> PORT_MEM_SHFT
) & PORT_MEM_MASK
;
1779 /* Manipulate entry */
1780 vlan_op(priv
, entry
);
1782 /* Flush result to hardware */
1783 mt7530_vlan_cmd(priv
, MT7530_VTCR_WR_VID
, vid
);
1787 mt7530_setup_vlan0(struct mt7530_priv
*priv
)
1791 /* Validate the entry with independent learning, keep the original
1792 * ingress tag attribute.
1794 val
= IVL_MAC
| EG_CON
| PORT_MEM(MT7530_ALL_MEMBERS
) | FID(FID_BRIDGED
) |
1796 mt7530_write(priv
, MT7530_VAWD1
, val
);
1798 return mt7530_vlan_cmd(priv
, MT7530_VTCR_WR_VID
, 0);
1802 mt7530_port_vlan_add(struct dsa_switch
*ds
, int port
,
1803 const struct switchdev_obj_port_vlan
*vlan
,
1804 struct netlink_ext_ack
*extack
)
1806 bool untagged
= vlan
->flags
& BRIDGE_VLAN_INFO_UNTAGGED
;
1807 bool pvid
= vlan
->flags
& BRIDGE_VLAN_INFO_PVID
;
1808 struct mt7530_hw_vlan_entry new_entry
;
1809 struct mt7530_priv
*priv
= ds
->priv
;
1811 mutex_lock(&priv
->reg_mutex
);
1813 mt7530_hw_vlan_entry_init(&new_entry
, port
, untagged
);
1814 mt7530_hw_vlan_update(priv
, vlan
->vid
, &new_entry
, mt7530_hw_vlan_add
);
1817 priv
->ports
[port
].pvid
= vlan
->vid
;
1819 /* Accept all frames if PVID is set */
1820 mt7530_rmw(priv
, MT7530_PVC_P(port
), ACC_FRM_MASK
,
1821 MT7530_VLAN_ACC_ALL
);
1823 /* Only configure PVID if VLAN filtering is enabled */
1824 if (dsa_port_is_vlan_filtering(dsa_to_port(ds
, port
)))
1825 mt7530_rmw(priv
, MT7530_PPBV1_P(port
),
1827 G0_PORT_VID(vlan
->vid
));
1828 } else if (vlan
->vid
&& priv
->ports
[port
].pvid
== vlan
->vid
) {
1829 /* This VLAN is overwritten without PVID, so unset it */
1830 priv
->ports
[port
].pvid
= G0_PORT_VID_DEF
;
1832 /* Only accept tagged frames if the port is VLAN-aware */
1833 if (dsa_port_is_vlan_filtering(dsa_to_port(ds
, port
)))
1834 mt7530_rmw(priv
, MT7530_PVC_P(port
), ACC_FRM_MASK
,
1835 MT7530_VLAN_ACC_TAGGED
);
1837 mt7530_rmw(priv
, MT7530_PPBV1_P(port
), G0_PORT_VID_MASK
,
1841 mutex_unlock(&priv
->reg_mutex
);
1847 mt7530_port_vlan_del(struct dsa_switch
*ds
, int port
,
1848 const struct switchdev_obj_port_vlan
*vlan
)
1850 struct mt7530_hw_vlan_entry target_entry
;
1851 struct mt7530_priv
*priv
= ds
->priv
;
1853 mutex_lock(&priv
->reg_mutex
);
1855 mt7530_hw_vlan_entry_init(&target_entry
, port
, 0);
1856 mt7530_hw_vlan_update(priv
, vlan
->vid
, &target_entry
,
1857 mt7530_hw_vlan_del
);
1859 /* PVID is being restored to the default whenever the PVID port
1860 * is being removed from the VLAN.
1862 if (priv
->ports
[port
].pvid
== vlan
->vid
) {
1863 priv
->ports
[port
].pvid
= G0_PORT_VID_DEF
;
1865 /* Only accept tagged frames if the port is VLAN-aware */
1866 if (dsa_port_is_vlan_filtering(dsa_to_port(ds
, port
)))
1867 mt7530_rmw(priv
, MT7530_PVC_P(port
), ACC_FRM_MASK
,
1868 MT7530_VLAN_ACC_TAGGED
);
1870 mt7530_rmw(priv
, MT7530_PPBV1_P(port
), G0_PORT_VID_MASK
,
1875 mutex_unlock(&priv
->reg_mutex
);
1880 static int mt753x_port_mirror_add(struct dsa_switch
*ds
, int port
,
1881 struct dsa_mall_mirror_tc_entry
*mirror
,
1882 bool ingress
, struct netlink_ext_ack
*extack
)
1884 struct mt7530_priv
*priv
= ds
->priv
;
1888 /* Check for existent entry */
1889 if ((ingress
? priv
->mirror_rx
: priv
->mirror_tx
) & BIT(port
))
1892 val
= mt7530_read(priv
, MT753X_MIRROR_REG(priv
->id
));
1894 /* MT7530 only supports one monitor port */
1895 monitor_port
= MT753X_MIRROR_PORT_GET(priv
->id
, val
);
1896 if (val
& MT753X_MIRROR_EN(priv
->id
) &&
1897 monitor_port
!= mirror
->to_local_port
)
1900 val
|= MT753X_MIRROR_EN(priv
->id
);
1901 val
&= ~MT753X_MIRROR_PORT_MASK(priv
->id
);
1902 val
|= MT753X_MIRROR_PORT_SET(priv
->id
, mirror
->to_local_port
);
1903 mt7530_write(priv
, MT753X_MIRROR_REG(priv
->id
), val
);
1905 val
= mt7530_read(priv
, MT7530_PCR_P(port
));
1908 priv
->mirror_rx
|= BIT(port
);
1911 priv
->mirror_tx
|= BIT(port
);
1913 mt7530_write(priv
, MT7530_PCR_P(port
), val
);
1918 static void mt753x_port_mirror_del(struct dsa_switch
*ds
, int port
,
1919 struct dsa_mall_mirror_tc_entry
*mirror
)
1921 struct mt7530_priv
*priv
= ds
->priv
;
1924 val
= mt7530_read(priv
, MT7530_PCR_P(port
));
1925 if (mirror
->ingress
) {
1926 val
&= ~PORT_RX_MIR
;
1927 priv
->mirror_rx
&= ~BIT(port
);
1929 val
&= ~PORT_TX_MIR
;
1930 priv
->mirror_tx
&= ~BIT(port
);
1932 mt7530_write(priv
, MT7530_PCR_P(port
), val
);
1934 if (!priv
->mirror_rx
&& !priv
->mirror_tx
) {
1935 val
= mt7530_read(priv
, MT753X_MIRROR_REG(priv
->id
));
1936 val
&= ~MT753X_MIRROR_EN(priv
->id
);
1937 mt7530_write(priv
, MT753X_MIRROR_REG(priv
->id
), val
);
1941 static enum dsa_tag_protocol
1942 mtk_get_tag_protocol(struct dsa_switch
*ds
, int port
,
1943 enum dsa_tag_protocol mp
)
1945 return DSA_TAG_PROTO_MTK
;
1948 #ifdef CONFIG_GPIOLIB
1950 mt7530_gpio_to_bit(unsigned int offset
)
1952 /* Map GPIO offset to register bit
1953 * [ 2: 0] port 0 LED 0..2 as GPIO 0..2
1954 * [ 6: 4] port 1 LED 0..2 as GPIO 3..5
1955 * [10: 8] port 2 LED 0..2 as GPIO 6..8
1956 * [14:12] port 3 LED 0..2 as GPIO 9..11
1957 * [18:16] port 4 LED 0..2 as GPIO 12..14
1959 return BIT(offset
+ offset
/ 3);
1963 mt7530_gpio_get(struct gpio_chip
*gc
, unsigned int offset
)
1965 struct mt7530_priv
*priv
= gpiochip_get_data(gc
);
1966 u32 bit
= mt7530_gpio_to_bit(offset
);
1968 return !!(mt7530_read(priv
, MT7530_LED_GPIO_DATA
) & bit
);
1972 mt7530_gpio_set(struct gpio_chip
*gc
, unsigned int offset
, int value
)
1974 struct mt7530_priv
*priv
= gpiochip_get_data(gc
);
1975 u32 bit
= mt7530_gpio_to_bit(offset
);
1978 mt7530_set(priv
, MT7530_LED_GPIO_DATA
, bit
);
1980 mt7530_clear(priv
, MT7530_LED_GPIO_DATA
, bit
);
1984 mt7530_gpio_get_direction(struct gpio_chip
*gc
, unsigned int offset
)
1986 struct mt7530_priv
*priv
= gpiochip_get_data(gc
);
1987 u32 bit
= mt7530_gpio_to_bit(offset
);
1989 return (mt7530_read(priv
, MT7530_LED_GPIO_DIR
) & bit
) ?
1990 GPIO_LINE_DIRECTION_OUT
: GPIO_LINE_DIRECTION_IN
;
1994 mt7530_gpio_direction_input(struct gpio_chip
*gc
, unsigned int offset
)
1996 struct mt7530_priv
*priv
= gpiochip_get_data(gc
);
1997 u32 bit
= mt7530_gpio_to_bit(offset
);
1999 mt7530_clear(priv
, MT7530_LED_GPIO_OE
, bit
);
2000 mt7530_clear(priv
, MT7530_LED_GPIO_DIR
, bit
);
2006 mt7530_gpio_direction_output(struct gpio_chip
*gc
, unsigned int offset
, int value
)
2008 struct mt7530_priv
*priv
= gpiochip_get_data(gc
);
2009 u32 bit
= mt7530_gpio_to_bit(offset
);
2011 mt7530_set(priv
, MT7530_LED_GPIO_DIR
, bit
);
2014 mt7530_set(priv
, MT7530_LED_GPIO_DATA
, bit
);
2016 mt7530_clear(priv
, MT7530_LED_GPIO_DATA
, bit
);
2018 mt7530_set(priv
, MT7530_LED_GPIO_OE
, bit
);
2024 mt7530_setup_gpio(struct mt7530_priv
*priv
)
2026 struct device
*dev
= priv
->dev
;
2027 struct gpio_chip
*gc
;
2029 gc
= devm_kzalloc(dev
, sizeof(*gc
), GFP_KERNEL
);
2033 mt7530_write(priv
, MT7530_LED_GPIO_OE
, 0);
2034 mt7530_write(priv
, MT7530_LED_GPIO_DIR
, 0);
2035 mt7530_write(priv
, MT7530_LED_IO_MODE
, 0);
2037 gc
->label
= "mt7530";
2039 gc
->owner
= THIS_MODULE
;
2040 gc
->get_direction
= mt7530_gpio_get_direction
;
2041 gc
->direction_input
= mt7530_gpio_direction_input
;
2042 gc
->direction_output
= mt7530_gpio_direction_output
;
2043 gc
->get
= mt7530_gpio_get
;
2044 gc
->set
= mt7530_gpio_set
;
2047 gc
->can_sleep
= true;
2049 return devm_gpiochip_add_data(dev
, gc
, priv
);
2051 #endif /* CONFIG_GPIOLIB */
2054 mt7530_irq_thread_fn(int irq
, void *dev_id
)
2056 struct mt7530_priv
*priv
= dev_id
;
2057 bool handled
= false;
2061 mt7530_mutex_lock(priv
);
2062 val
= mt7530_mii_read(priv
, MT7530_SYS_INT_STS
);
2063 mt7530_mii_write(priv
, MT7530_SYS_INT_STS
, val
);
2064 mt7530_mutex_unlock(priv
);
2066 for (p
= 0; p
< MT7530_NUM_PHYS
; p
++) {
2070 irq
= irq_find_mapping(priv
->irq_domain
, p
);
2071 handle_nested_irq(irq
);
2076 return IRQ_RETVAL(handled
);
2080 mt7530_irq_mask(struct irq_data
*d
)
2082 struct mt7530_priv
*priv
= irq_data_get_irq_chip_data(d
);
2084 priv
->irq_enable
&= ~BIT(d
->hwirq
);
2088 mt7530_irq_unmask(struct irq_data
*d
)
2090 struct mt7530_priv
*priv
= irq_data_get_irq_chip_data(d
);
2092 priv
->irq_enable
|= BIT(d
->hwirq
);
2096 mt7530_irq_bus_lock(struct irq_data
*d
)
2098 struct mt7530_priv
*priv
= irq_data_get_irq_chip_data(d
);
2100 mt7530_mutex_lock(priv
);
2104 mt7530_irq_bus_sync_unlock(struct irq_data
*d
)
2106 struct mt7530_priv
*priv
= irq_data_get_irq_chip_data(d
);
2108 mt7530_mii_write(priv
, MT7530_SYS_INT_EN
, priv
->irq_enable
);
2109 mt7530_mutex_unlock(priv
);
2112 static struct irq_chip mt7530_irq_chip
= {
2113 .name
= KBUILD_MODNAME
,
2114 .irq_mask
= mt7530_irq_mask
,
2115 .irq_unmask
= mt7530_irq_unmask
,
2116 .irq_bus_lock
= mt7530_irq_bus_lock
,
2117 .irq_bus_sync_unlock
= mt7530_irq_bus_sync_unlock
,
2121 mt7530_irq_map(struct irq_domain
*domain
, unsigned int irq
,
2122 irq_hw_number_t hwirq
)
2124 irq_set_chip_data(irq
, domain
->host_data
);
2125 irq_set_chip_and_handler(irq
, &mt7530_irq_chip
, handle_simple_irq
);
2126 irq_set_nested_thread(irq
, true);
2127 irq_set_noprobe(irq
);
2132 static const struct irq_domain_ops mt7530_irq_domain_ops
= {
2133 .map
= mt7530_irq_map
,
2134 .xlate
= irq_domain_xlate_onecell
,
2138 mt7988_irq_mask(struct irq_data
*d
)
2140 struct mt7530_priv
*priv
= irq_data_get_irq_chip_data(d
);
2142 priv
->irq_enable
&= ~BIT(d
->hwirq
);
2143 mt7530_mii_write(priv
, MT7530_SYS_INT_EN
, priv
->irq_enable
);
2147 mt7988_irq_unmask(struct irq_data
*d
)
2149 struct mt7530_priv
*priv
= irq_data_get_irq_chip_data(d
);
2151 priv
->irq_enable
|= BIT(d
->hwirq
);
2152 mt7530_mii_write(priv
, MT7530_SYS_INT_EN
, priv
->irq_enable
);
2155 static struct irq_chip mt7988_irq_chip
= {
2156 .name
= KBUILD_MODNAME
,
2157 .irq_mask
= mt7988_irq_mask
,
2158 .irq_unmask
= mt7988_irq_unmask
,
2162 mt7988_irq_map(struct irq_domain
*domain
, unsigned int irq
,
2163 irq_hw_number_t hwirq
)
2165 irq_set_chip_data(irq
, domain
->host_data
);
2166 irq_set_chip_and_handler(irq
, &mt7988_irq_chip
, handle_simple_irq
);
2167 irq_set_nested_thread(irq
, true);
2168 irq_set_noprobe(irq
);
2173 static const struct irq_domain_ops mt7988_irq_domain_ops
= {
2174 .map
= mt7988_irq_map
,
2175 .xlate
= irq_domain_xlate_onecell
,
2179 mt7530_setup_mdio_irq(struct mt7530_priv
*priv
)
2181 struct dsa_switch
*ds
= priv
->ds
;
2184 for (p
= 0; p
< MT7530_NUM_PHYS
; p
++) {
2185 if (BIT(p
) & ds
->phys_mii_mask
) {
2188 irq
= irq_create_mapping(priv
->irq_domain
, p
);
2189 ds
->user_mii_bus
->irq
[p
] = irq
;
2195 mt7530_setup_irq(struct mt7530_priv
*priv
)
2197 struct device
*dev
= priv
->dev
;
2198 struct device_node
*np
= dev
->of_node
;
2201 if (!of_property_read_bool(np
, "interrupt-controller")) {
2202 dev_info(dev
, "no interrupt support\n");
2206 priv
->irq
= of_irq_get(np
, 0);
2207 if (priv
->irq
<= 0) {
2208 dev_err(dev
, "failed to get parent IRQ: %d\n", priv
->irq
);
2209 return priv
->irq
? : -EINVAL
;
2212 if (priv
->id
== ID_MT7988
|| priv
->id
== ID_EN7581
)
2213 priv
->irq_domain
= irq_domain_add_linear(np
, MT7530_NUM_PHYS
,
2214 &mt7988_irq_domain_ops
,
2217 priv
->irq_domain
= irq_domain_add_linear(np
, MT7530_NUM_PHYS
,
2218 &mt7530_irq_domain_ops
,
2221 if (!priv
->irq_domain
) {
2222 dev_err(dev
, "failed to create IRQ domain\n");
2226 /* This register must be set for MT7530 to properly fire interrupts */
2227 if (priv
->id
== ID_MT7530
|| priv
->id
== ID_MT7621
)
2228 mt7530_set(priv
, MT7530_TOP_SIG_CTRL
, TOP_SIG_CTRL_NORMAL
);
2230 ret
= request_threaded_irq(priv
->irq
, NULL
, mt7530_irq_thread_fn
,
2231 IRQF_ONESHOT
, KBUILD_MODNAME
, priv
);
2233 irq_domain_remove(priv
->irq_domain
);
2234 dev_err(dev
, "failed to request IRQ: %d\n", ret
);
2242 mt7530_free_mdio_irq(struct mt7530_priv
*priv
)
2246 for (p
= 0; p
< MT7530_NUM_PHYS
; p
++) {
2247 if (BIT(p
) & priv
->ds
->phys_mii_mask
) {
2250 irq
= irq_find_mapping(priv
->irq_domain
, p
);
2251 irq_dispose_mapping(irq
);
2257 mt7530_free_irq_common(struct mt7530_priv
*priv
)
2259 free_irq(priv
->irq
, priv
);
2260 irq_domain_remove(priv
->irq_domain
);
2264 mt7530_free_irq(struct mt7530_priv
*priv
)
2266 struct device_node
*mnp
, *np
= priv
->dev
->of_node
;
2268 mnp
= of_get_child_by_name(np
, "mdio");
2270 mt7530_free_mdio_irq(priv
);
2273 mt7530_free_irq_common(priv
);
2277 mt7530_setup_mdio(struct mt7530_priv
*priv
)
2279 struct device_node
*mnp
, *np
= priv
->dev
->of_node
;
2280 struct dsa_switch
*ds
= priv
->ds
;
2281 struct device
*dev
= priv
->dev
;
2282 struct mii_bus
*bus
;
2286 mnp
= of_get_child_by_name(np
, "mdio");
2288 if (mnp
&& !of_device_is_available(mnp
))
2291 bus
= devm_mdiobus_alloc(dev
);
2298 ds
->user_mii_bus
= bus
;
2301 bus
->name
= KBUILD_MODNAME
"-mii";
2302 snprintf(bus
->id
, MII_BUS_ID_SIZE
, KBUILD_MODNAME
"-%d", idx
++);
2303 bus
->read
= mt753x_phy_read_c22
;
2304 bus
->write
= mt753x_phy_write_c22
;
2305 bus
->read_c45
= mt753x_phy_read_c45
;
2306 bus
->write_c45
= mt753x_phy_write_c45
;
2308 bus
->phy_mask
= ~ds
->phys_mii_mask
;
2310 if (priv
->irq
&& !mnp
)
2311 mt7530_setup_mdio_irq(priv
);
2313 ret
= devm_of_mdiobus_register(dev
, bus
, mnp
);
2315 dev_err(dev
, "failed to register MDIO bus: %d\n", ret
);
2316 if (priv
->irq
&& !mnp
)
2317 mt7530_free_mdio_irq(priv
);
2326 mt7530_setup(struct dsa_switch
*ds
)
2328 struct mt7530_priv
*priv
= ds
->priv
;
2329 struct device_node
*dn
= NULL
;
2330 struct device_node
*phy_node
;
2331 struct device_node
*mac_np
;
2332 struct mt7530_dummy_poll p
;
2333 phy_interface_t interface
;
2334 struct dsa_port
*cpu_dp
;
2338 /* The parent node of conduit netdev which holds the common system
2339 * controller also is the container for two GMACs nodes representing
2340 * as two netdev instances.
2342 dsa_switch_for_each_cpu_port(cpu_dp
, ds
) {
2343 dn
= cpu_dp
->conduit
->dev
.of_node
->parent
;
2344 /* It doesn't matter which CPU port is found first,
2345 * their conduits should share the same parent OF node
2351 dev_err(ds
->dev
, "parent OF node of DSA conduit not found");
2355 ds
->assisted_learning_on_cpu_port
= true;
2356 ds
->mtu_enforcement_ingress
= true;
2358 if (priv
->id
== ID_MT7530
) {
2359 regulator_set_voltage(priv
->core_pwr
, 1000000, 1000000);
2360 ret
= regulator_enable(priv
->core_pwr
);
2363 "Failed to enable core power: %d\n", ret
);
2367 regulator_set_voltage(priv
->io_pwr
, 3300000, 3300000);
2368 ret
= regulator_enable(priv
->io_pwr
);
2370 dev_err(priv
->dev
, "Failed to enable io pwr: %d\n",
2376 /* Reset whole chip through gpio pin or memory-mapped registers for
2377 * different type of hardware
2380 reset_control_assert(priv
->rstc
);
2381 usleep_range(5000, 5100);
2382 reset_control_deassert(priv
->rstc
);
2384 gpiod_set_value_cansleep(priv
->reset
, 0);
2385 usleep_range(5000, 5100);
2386 gpiod_set_value_cansleep(priv
->reset
, 1);
2389 /* Waiting for MT7530 got to stable */
2390 INIT_MT7530_DUMMY_POLL(&p
, priv
, MT753X_TRAP
);
2391 ret
= readx_poll_timeout(_mt7530_read
, &p
, val
, val
!= 0,
2394 dev_err(priv
->dev
, "reset timeout\n");
2398 id
= mt7530_read(priv
, MT7530_CREV
);
2399 id
>>= CHIP_NAME_SHIFT
;
2400 if (id
!= MT7530_ID
) {
2401 dev_err(priv
->dev
, "chip %x can't be supported\n", id
);
2405 if ((val
& MT7530_XTAL_MASK
) == MT7530_XTAL_20MHZ
) {
2407 "MT7530 with a 20MHz XTAL is not supported!\n");
2411 /* Reset the switch through internal reset */
2412 mt7530_write(priv
, MT7530_SYS_CTRL
,
2413 SYS_CTRL_PHY_RST
| SYS_CTRL_SW_RST
|
2416 /* Lower Tx driving for TRGMII path */
2417 for (i
= 0; i
< NUM_TRGMII_CTRL
; i
++)
2418 mt7530_write(priv
, MT7530_TRGMII_TD_ODT(i
),
2419 TD_DM_DRVP(8) | TD_DM_DRVN(8));
2421 for (i
= 0; i
< NUM_TRGMII_CTRL
; i
++)
2422 mt7530_rmw(priv
, MT7530_TRGMII_RD(i
),
2423 RD_TAP_MASK
, RD_TAP(16));
2425 /* Allow modifying the trap and directly access PHY registers via the
2426 * MDIO bus the switch is on.
2428 mt7530_rmw(priv
, MT753X_MTRAP
, MT7530_CHG_TRAP
|
2429 MT7530_PHY_INDIRECT_ACCESS
, MT7530_CHG_TRAP
);
2431 if ((val
& MT7530_XTAL_MASK
) == MT7530_XTAL_40MHZ
)
2432 mt7530_pll_setup(priv
);
2434 mt753x_trap_frames(priv
);
2436 /* Enable and reset MIB counters */
2437 mt7530_mib_reset(ds
);
2439 for (i
= 0; i
< priv
->ds
->num_ports
; i
++) {
2440 /* Clear link settings and enable force mode to force link down
2441 * on all ports until they're enabled later.
2443 mt7530_rmw(priv
, MT753X_PMCR_P(i
),
2444 PMCR_LINK_SETTINGS_MASK
|
2445 MT753X_FORCE_MODE(priv
->id
),
2446 MT753X_FORCE_MODE(priv
->id
));
2448 /* Disable forwarding by default on all ports */
2449 mt7530_rmw(priv
, MT7530_PCR_P(i
), PCR_MATRIX_MASK
,
2452 /* Disable learning by default on all ports */
2453 mt7530_set(priv
, MT7530_PSC_P(i
), SA_DIS
);
2455 if (dsa_is_cpu_port(ds
, i
)) {
2456 mt753x_cpu_port_enable(ds
, i
);
2458 mt7530_port_disable(ds
, i
);
2460 /* Set default PVID to 0 on all user ports */
2461 mt7530_rmw(priv
, MT7530_PPBV1_P(i
), G0_PORT_VID_MASK
,
2464 /* Enable consistent egress tag */
2465 mt7530_rmw(priv
, MT7530_PVC_P(i
), PVC_EG_TAG_MASK
,
2466 PVC_EG_TAG(MT7530_VLAN_EG_CONSISTENT
));
2469 /* Allow mirroring frames received on the local port (monitor port). */
2470 mt7530_set(priv
, MT753X_AGC
, LOCAL_EN
);
2472 /* Setup VLAN ID 0 for VLAN-unaware bridges */
2473 ret
= mt7530_setup_vlan0(priv
);
2477 /* Check for PHY muxing on port 5 */
2478 if (dsa_is_unused_port(ds
, 5)) {
2479 /* Scan the ethernet nodes. Look for GMAC1, lookup the used PHY.
2480 * Set priv->p5_mode to the appropriate value if PHY muxing is
2483 for_each_child_of_node(dn
, mac_np
) {
2484 if (!of_device_is_compatible(mac_np
,
2485 "mediatek,eth-mac"))
2488 ret
= of_property_read_u32(mac_np
, "reg", &id
);
2489 if (ret
< 0 || id
!= 1)
2492 phy_node
= of_parse_phandle(mac_np
, "phy-handle", 0);
2496 if (phy_node
->parent
== priv
->dev
->of_node
->parent
||
2497 phy_node
->parent
->parent
== priv
->dev
->of_node
) {
2498 ret
= of_get_phy_mode(mac_np
, &interface
);
2499 if (ret
&& ret
!= -ENODEV
) {
2500 of_node_put(mac_np
);
2501 of_node_put(phy_node
);
2504 id
= of_mdio_parse_addr(ds
->dev
, phy_node
);
2506 priv
->p5_mode
= MUX_PHY_P0
;
2508 priv
->p5_mode
= MUX_PHY_P4
;
2510 of_node_put(mac_np
);
2511 of_node_put(phy_node
);
2515 if (priv
->p5_mode
== MUX_PHY_P0
||
2516 priv
->p5_mode
== MUX_PHY_P4
) {
2517 mt7530_clear(priv
, MT753X_MTRAP
, MT7530_P5_DIS
);
2518 mt7530_setup_port5(ds
, interface
);
2522 #ifdef CONFIG_GPIOLIB
2523 if (of_property_read_bool(priv
->dev
->of_node
, "gpio-controller")) {
2524 ret
= mt7530_setup_gpio(priv
);
2528 #endif /* CONFIG_GPIOLIB */
2530 /* Flush the FDB table */
2531 ret
= mt7530_fdb_cmd(priv
, MT7530_FDB_FLUSH
, NULL
);
2539 mt7531_setup_common(struct dsa_switch
*ds
)
2541 struct mt7530_priv
*priv
= ds
->priv
;
2544 mt753x_trap_frames(priv
);
2546 /* Enable and reset MIB counters */
2547 mt7530_mib_reset(ds
);
2549 /* Disable flooding on all ports */
2550 mt7530_clear(priv
, MT753X_MFC
, BC_FFP_MASK
| UNM_FFP_MASK
|
2553 for (i
= 0; i
< priv
->ds
->num_ports
; i
++) {
2554 /* Clear link settings and enable force mode to force link down
2555 * on all ports until they're enabled later.
2557 mt7530_rmw(priv
, MT753X_PMCR_P(i
),
2558 PMCR_LINK_SETTINGS_MASK
|
2559 MT753X_FORCE_MODE(priv
->id
),
2560 MT753X_FORCE_MODE(priv
->id
));
2562 /* Disable forwarding by default on all ports */
2563 mt7530_rmw(priv
, MT7530_PCR_P(i
), PCR_MATRIX_MASK
,
2566 /* Disable learning by default on all ports */
2567 mt7530_set(priv
, MT7530_PSC_P(i
), SA_DIS
);
2569 mt7530_set(priv
, MT7531_DBG_CNT(i
), MT7531_DIS_CLR
);
2571 if (dsa_is_cpu_port(ds
, i
)) {
2572 mt753x_cpu_port_enable(ds
, i
);
2574 mt7530_port_disable(ds
, i
);
2576 /* Set default PVID to 0 on all user ports */
2577 mt7530_rmw(priv
, MT7530_PPBV1_P(i
), G0_PORT_VID_MASK
,
2581 /* Enable consistent egress tag */
2582 mt7530_rmw(priv
, MT7530_PVC_P(i
), PVC_EG_TAG_MASK
,
2583 PVC_EG_TAG(MT7530_VLAN_EG_CONSISTENT
));
2586 /* Allow mirroring frames received on the local port (monitor port). */
2587 mt7530_set(priv
, MT753X_AGC
, LOCAL_EN
);
2589 /* Flush the FDB table */
2590 ret
= mt7530_fdb_cmd(priv
, MT7530_FDB_FLUSH
, NULL
);
2598 mt7531_setup(struct dsa_switch
*ds
)
2600 struct mt7530_priv
*priv
= ds
->priv
;
2601 struct mt7530_dummy_poll p
;
2605 /* Reset whole chip through gpio pin or memory-mapped registers for
2606 * different type of hardware
2609 reset_control_assert(priv
->rstc
);
2610 usleep_range(5000, 5100);
2611 reset_control_deassert(priv
->rstc
);
2613 gpiod_set_value_cansleep(priv
->reset
, 0);
2614 usleep_range(5000, 5100);
2615 gpiod_set_value_cansleep(priv
->reset
, 1);
2618 /* Waiting for MT7530 got to stable */
2619 INIT_MT7530_DUMMY_POLL(&p
, priv
, MT753X_TRAP
);
2620 ret
= readx_poll_timeout(_mt7530_read
, &p
, val
, val
!= 0,
2623 dev_err(priv
->dev
, "reset timeout\n");
2627 id
= mt7530_read(priv
, MT7531_CREV
);
2628 id
>>= CHIP_NAME_SHIFT
;
2630 if (id
!= MT7531_ID
) {
2631 dev_err(priv
->dev
, "chip %x can't be supported\n", id
);
2635 /* MT7531AE has got two SGMII units. One for port 5, one for port 6.
2636 * MT7531BE has got only one SGMII unit which is for port 6.
2638 val
= mt7530_read(priv
, MT7531_TOP_SIG_SR
);
2639 priv
->p5_sgmii
= !!(val
& PAD_DUAL_SGMII_EN
);
2641 /* Force link down on all ports before internal reset */
2642 for (i
= 0; i
< priv
->ds
->num_ports
; i
++)
2643 mt7530_write(priv
, MT753X_PMCR_P(i
), MT7531_FORCE_MODE_LNK
);
2645 /* Reset the switch through internal reset */
2646 mt7530_write(priv
, MT7530_SYS_CTRL
, SYS_CTRL_SW_RST
| SYS_CTRL_REG_RST
);
2648 if (!priv
->p5_sgmii
) {
2649 mt7531_pll_setup(priv
);
2651 /* Unlike MT7531BE, the GPIO 6-12 pins are not used for RGMII on
2652 * MT7531AE. Set the GPIO 11-12 pins to function as MDC and MDIO
2653 * to expose the MDIO bus of the switch.
2655 mt7530_rmw(priv
, MT7531_GPIO_MODE1
, MT7531_GPIO11_RG_RXD2_MASK
,
2656 MT7531_EXT_P_MDC_11
);
2657 mt7530_rmw(priv
, MT7531_GPIO_MODE1
, MT7531_GPIO12_RG_RXD3_MASK
,
2658 MT7531_EXT_P_MDIO_12
);
2661 mt7530_rmw(priv
, MT7531_GPIO_MODE0
, MT7531_GPIO0_MASK
,
2662 MT7531_GPIO0_INTERRUPT
);
2664 /* Enable Energy-Efficient Ethernet (EEE) and PHY core PLL, since
2665 * phy_device has not yet been created provided for
2666 * phy_[read,write]_mmd_indirect is called, we provide our own
2667 * mt7531_ind_mmd_phy_[read,write] to complete this function.
2669 val
= mt7531_ind_c45_phy_read(priv
,
2670 MT753X_CTRL_PHY_ADDR(priv
->mdiodev
->addr
),
2671 MDIO_MMD_VEND2
, CORE_PLL_GROUP4
);
2672 val
|= MT7531_RG_SYSPLL_DMY2
| MT7531_PHY_PLL_BYPASS_MODE
;
2673 val
&= ~MT7531_PHY_PLL_OFF
;
2674 mt7531_ind_c45_phy_write(priv
,
2675 MT753X_CTRL_PHY_ADDR(priv
->mdiodev
->addr
),
2676 MDIO_MMD_VEND2
, CORE_PLL_GROUP4
, val
);
2678 /* Disable EEE advertisement on the switch PHYs. */
2679 for (i
= MT753X_CTRL_PHY_ADDR(priv
->mdiodev
->addr
);
2680 i
< MT753X_CTRL_PHY_ADDR(priv
->mdiodev
->addr
) + MT7530_NUM_PHYS
;
2682 mt7531_ind_c45_phy_write(priv
, i
, MDIO_MMD_AN
, MDIO_AN_EEE_ADV
,
2686 ret
= mt7531_setup_common(ds
);
2690 /* Setup VLAN ID 0 for VLAN-unaware bridges */
2691 ret
= mt7530_setup_vlan0(priv
);
2695 ds
->assisted_learning_on_cpu_port
= true;
2696 ds
->mtu_enforcement_ingress
= true;
2701 static void mt7530_mac_port_get_caps(struct dsa_switch
*ds
, int port
,
2702 struct phylink_config
*config
)
2704 config
->mac_capabilities
|= MAC_10
| MAC_100
| MAC_1000FD
;
2707 /* Ports which are connected to switch PHYs. There is no MII pinout. */
2709 __set_bit(PHY_INTERFACE_MODE_GMII
,
2710 config
->supported_interfaces
);
2713 /* Port 5 supports rgmii with delays, mii, and gmii. */
2715 phy_interface_set_rgmii(config
->supported_interfaces
);
2716 __set_bit(PHY_INTERFACE_MODE_MII
,
2717 config
->supported_interfaces
);
2718 __set_bit(PHY_INTERFACE_MODE_GMII
,
2719 config
->supported_interfaces
);
2722 /* Port 6 supports rgmii and trgmii. */
2724 __set_bit(PHY_INTERFACE_MODE_RGMII
,
2725 config
->supported_interfaces
);
2726 __set_bit(PHY_INTERFACE_MODE_TRGMII
,
2727 config
->supported_interfaces
);
2732 static void mt7531_mac_port_get_caps(struct dsa_switch
*ds
, int port
,
2733 struct phylink_config
*config
)
2735 struct mt7530_priv
*priv
= ds
->priv
;
2737 config
->mac_capabilities
|= MAC_10
| MAC_100
| MAC_1000FD
;
2740 /* Ports which are connected to switch PHYs. There is no MII pinout. */
2742 __set_bit(PHY_INTERFACE_MODE_GMII
,
2743 config
->supported_interfaces
);
2746 /* Port 5 supports rgmii with delays on MT7531BE, sgmii/802.3z on
2750 if (!priv
->p5_sgmii
) {
2751 phy_interface_set_rgmii(config
->supported_interfaces
);
2756 /* Port 6 supports sgmii/802.3z. */
2758 __set_bit(PHY_INTERFACE_MODE_SGMII
,
2759 config
->supported_interfaces
);
2760 __set_bit(PHY_INTERFACE_MODE_1000BASEX
,
2761 config
->supported_interfaces
);
2762 __set_bit(PHY_INTERFACE_MODE_2500BASEX
,
2763 config
->supported_interfaces
);
2765 config
->mac_capabilities
|= MAC_2500FD
;
2770 static void mt7988_mac_port_get_caps(struct dsa_switch
*ds
, int port
,
2771 struct phylink_config
*config
)
2774 /* Ports which are connected to switch PHYs. There is no MII pinout. */
2776 __set_bit(PHY_INTERFACE_MODE_INTERNAL
,
2777 config
->supported_interfaces
);
2779 config
->mac_capabilities
|= MAC_10
| MAC_100
| MAC_1000FD
;
2782 /* Port 6 is connected to SoC's XGMII MAC. There is no MII pinout. */
2784 __set_bit(PHY_INTERFACE_MODE_INTERNAL
,
2785 config
->supported_interfaces
);
2787 config
->mac_capabilities
|= MAC_10000FD
;
2792 static void en7581_mac_port_get_caps(struct dsa_switch
*ds
, int port
,
2793 struct phylink_config
*config
)
2796 /* Ports which are connected to switch PHYs. There is no MII pinout. */
2798 __set_bit(PHY_INTERFACE_MODE_INTERNAL
,
2799 config
->supported_interfaces
);
2801 config
->mac_capabilities
|= MAC_10
| MAC_100
| MAC_1000FD
;
2804 /* Port 6 is connected to SoC's XGMII MAC. There is no MII pinout. */
2806 __set_bit(PHY_INTERFACE_MODE_INTERNAL
,
2807 config
->supported_interfaces
);
2809 config
->mac_capabilities
|= MAC_10000FD
;
2815 mt7530_mac_config(struct dsa_switch
*ds
, int port
, unsigned int mode
,
2816 phy_interface_t interface
)
2818 struct mt7530_priv
*priv
= ds
->priv
;
2821 mt7530_setup_port5(priv
->ds
, interface
);
2823 mt7530_setup_port6(priv
->ds
, interface
);
2826 static void mt7531_rgmii_setup(struct mt7530_priv
*priv
,
2827 phy_interface_t interface
,
2828 struct phy_device
*phydev
)
2832 val
= mt7530_read(priv
, MT7531_CLKGEN_CTRL
);
2834 val
&= ~GP_MODE_MASK
;
2835 val
|= GP_MODE(MT7531_GP_MODE_RGMII
);
2836 val
&= ~CLK_SKEW_IN_MASK
;
2837 val
|= CLK_SKEW_IN(MT7531_CLK_SKEW_NO_CHG
);
2838 val
&= ~CLK_SKEW_OUT_MASK
;
2839 val
|= CLK_SKEW_OUT(MT7531_CLK_SKEW_NO_CHG
);
2840 val
|= TXCLK_NO_REVERSE
| RXCLK_NO_DELAY
;
2842 /* Do not adjust rgmii delay when vendor phy driver presents. */
2843 if (!phydev
|| phy_driver_is_genphy(phydev
)) {
2844 val
&= ~(TXCLK_NO_REVERSE
| RXCLK_NO_DELAY
);
2845 switch (interface
) {
2846 case PHY_INTERFACE_MODE_RGMII
:
2847 val
|= TXCLK_NO_REVERSE
;
2848 val
|= RXCLK_NO_DELAY
;
2850 case PHY_INTERFACE_MODE_RGMII_RXID
:
2851 val
|= TXCLK_NO_REVERSE
;
2853 case PHY_INTERFACE_MODE_RGMII_TXID
:
2854 val
|= RXCLK_NO_DELAY
;
2856 case PHY_INTERFACE_MODE_RGMII_ID
:
2863 mt7530_write(priv
, MT7531_CLKGEN_CTRL
, val
);
2867 mt7531_mac_config(struct dsa_switch
*ds
, int port
, unsigned int mode
,
2868 phy_interface_t interface
)
2870 struct mt7530_priv
*priv
= ds
->priv
;
2871 struct phy_device
*phydev
;
2872 struct dsa_port
*dp
;
2874 if (phy_interface_mode_is_rgmii(interface
)) {
2875 dp
= dsa_to_port(ds
, port
);
2876 phydev
= dp
->user
->phydev
;
2877 mt7531_rgmii_setup(priv
, interface
, phydev
);
2881 static struct phylink_pcs
*
2882 mt753x_phylink_mac_select_pcs(struct phylink_config
*config
,
2883 phy_interface_t interface
)
2885 struct dsa_port
*dp
= dsa_phylink_to_port(config
);
2886 struct mt7530_priv
*priv
= dp
->ds
->priv
;
2888 switch (interface
) {
2889 case PHY_INTERFACE_MODE_TRGMII
:
2890 return &priv
->pcs
[dp
->index
].pcs
;
2891 case PHY_INTERFACE_MODE_SGMII
:
2892 case PHY_INTERFACE_MODE_1000BASEX
:
2893 case PHY_INTERFACE_MODE_2500BASEX
:
2894 return priv
->ports
[dp
->index
].sgmii_pcs
;
2901 mt753x_phylink_mac_config(struct phylink_config
*config
, unsigned int mode
,
2902 const struct phylink_link_state
*state
)
2904 struct dsa_port
*dp
= dsa_phylink_to_port(config
);
2905 struct dsa_switch
*ds
= dp
->ds
;
2906 struct mt7530_priv
*priv
;
2907 int port
= dp
->index
;
2911 if ((port
== 5 || port
== 6) && priv
->info
->mac_port_config
)
2912 priv
->info
->mac_port_config(ds
, port
, mode
, state
->interface
);
2914 /* Are we connected to external phy */
2915 if (port
== 5 && dsa_is_user_port(ds
, 5))
2916 mt7530_set(priv
, MT753X_PMCR_P(port
), PMCR_EXT_PHY
);
2919 static void mt753x_phylink_mac_link_down(struct phylink_config
*config
,
2921 phy_interface_t interface
)
2923 struct dsa_port
*dp
= dsa_phylink_to_port(config
);
2924 struct mt7530_priv
*priv
= dp
->ds
->priv
;
2926 mt7530_clear(priv
, MT753X_PMCR_P(dp
->index
), PMCR_LINK_SETTINGS_MASK
);
2929 static void mt753x_phylink_mac_link_up(struct phylink_config
*config
,
2930 struct phy_device
*phydev
,
2932 phy_interface_t interface
,
2933 int speed
, int duplex
,
2934 bool tx_pause
, bool rx_pause
)
2936 struct dsa_port
*dp
= dsa_phylink_to_port(config
);
2937 struct mt7530_priv
*priv
= dp
->ds
->priv
;
2940 mcr
= PMCR_MAC_RX_EN
| PMCR_MAC_TX_EN
| PMCR_FORCE_LNK
;
2946 mcr
|= PMCR_FORCE_SPEED_1000
;
2949 mcr
|= PMCR_FORCE_SPEED_100
;
2952 if (duplex
== DUPLEX_FULL
) {
2953 mcr
|= PMCR_FORCE_FDX
;
2955 mcr
|= PMCR_FORCE_TX_FC_EN
;
2957 mcr
|= PMCR_FORCE_RX_FC_EN
;
2960 if (mode
== MLO_AN_PHY
&& phydev
&& phy_init_eee(phydev
, false) >= 0) {
2964 mcr
|= PMCR_FORCE_EEE1G
;
2967 mcr
|= PMCR_FORCE_EEE100
;
2972 mt7530_set(priv
, MT753X_PMCR_P(dp
->index
), mcr
);
2975 static void mt753x_phylink_get_caps(struct dsa_switch
*ds
, int port
,
2976 struct phylink_config
*config
)
2978 struct mt7530_priv
*priv
= ds
->priv
;
2980 config
->mac_capabilities
= MAC_ASYM_PAUSE
| MAC_SYM_PAUSE
;
2982 priv
->info
->mac_port_get_caps(ds
, port
, config
);
2985 static int mt753x_pcs_validate(struct phylink_pcs
*pcs
,
2986 unsigned long *supported
,
2987 const struct phylink_link_state
*state
)
2989 /* Autonegotiation is not supported in TRGMII nor 802.3z modes */
2990 if (state
->interface
== PHY_INTERFACE_MODE_TRGMII
||
2991 phy_interface_mode_is_8023z(state
->interface
))
2992 phylink_clear(supported
, Autoneg
);
2997 static void mt7530_pcs_get_state(struct phylink_pcs
*pcs
,
2998 struct phylink_link_state
*state
)
3000 struct mt7530_priv
*priv
= pcs_to_mt753x_pcs(pcs
)->priv
;
3001 int port
= pcs_to_mt753x_pcs(pcs
)->port
;
3004 pmsr
= mt7530_read(priv
, MT7530_PMSR_P(port
));
3006 state
->link
= (pmsr
& PMSR_LINK
);
3007 state
->an_complete
= state
->link
;
3008 state
->duplex
= !!(pmsr
& PMSR_DPX
);
3010 switch (pmsr
& PMSR_SPEED_MASK
) {
3012 state
->speed
= SPEED_10
;
3014 case PMSR_SPEED_100
:
3015 state
->speed
= SPEED_100
;
3017 case PMSR_SPEED_1000
:
3018 state
->speed
= SPEED_1000
;
3021 state
->speed
= SPEED_UNKNOWN
;
3025 state
->pause
&= ~(MLO_PAUSE_RX
| MLO_PAUSE_TX
);
3026 if (pmsr
& PMSR_RX_FC
)
3027 state
->pause
|= MLO_PAUSE_RX
;
3028 if (pmsr
& PMSR_TX_FC
)
3029 state
->pause
|= MLO_PAUSE_TX
;
3032 static int mt753x_pcs_config(struct phylink_pcs
*pcs
, unsigned int neg_mode
,
3033 phy_interface_t interface
,
3034 const unsigned long *advertising
,
3035 bool permit_pause_to_mac
)
3040 static void mt7530_pcs_an_restart(struct phylink_pcs
*pcs
)
3044 static const struct phylink_pcs_ops mt7530_pcs_ops
= {
3045 .pcs_validate
= mt753x_pcs_validate
,
3046 .pcs_get_state
= mt7530_pcs_get_state
,
3047 .pcs_config
= mt753x_pcs_config
,
3048 .pcs_an_restart
= mt7530_pcs_an_restart
,
3052 mt753x_setup(struct dsa_switch
*ds
)
3054 struct mt7530_priv
*priv
= ds
->priv
;
3055 int ret
= priv
->info
->sw_setup(ds
);
3061 ret
= mt7530_setup_irq(priv
);
3065 ret
= mt7530_setup_mdio(priv
);
3066 if (ret
&& priv
->irq
)
3067 mt7530_free_irq_common(priv
);
3071 /* Initialise the PCS devices */
3072 for (i
= 0; i
< priv
->ds
->num_ports
; i
++) {
3073 priv
->pcs
[i
].pcs
.ops
= priv
->info
->pcs_ops
;
3074 priv
->pcs
[i
].pcs
.neg_mode
= true;
3075 priv
->pcs
[i
].priv
= priv
;
3076 priv
->pcs
[i
].port
= i
;
3079 if (priv
->create_sgmii
) {
3080 ret
= priv
->create_sgmii(priv
);
3081 if (ret
&& priv
->irq
)
3082 mt7530_free_irq(priv
);
3088 static int mt753x_get_mac_eee(struct dsa_switch
*ds
, int port
,
3089 struct ethtool_keee
*e
)
3091 struct mt7530_priv
*priv
= ds
->priv
;
3092 u32 eeecr
= mt7530_read(priv
, MT753X_PMEEECR_P(port
));
3094 e
->tx_lpi_enabled
= !(eeecr
& LPI_MODE_EN
);
3095 e
->tx_lpi_timer
= LPI_THRESH_GET(eeecr
);
3100 static int mt753x_set_mac_eee(struct dsa_switch
*ds
, int port
,
3101 struct ethtool_keee
*e
)
3103 struct mt7530_priv
*priv
= ds
->priv
;
3104 u32 set
, mask
= LPI_THRESH_MASK
| LPI_MODE_EN
;
3106 if (e
->tx_lpi_timer
> 0xFFF)
3109 set
= LPI_THRESH_SET(e
->tx_lpi_timer
);
3110 if (!e
->tx_lpi_enabled
)
3111 /* Force LPI Mode without a delay */
3113 mt7530_rmw(priv
, MT753X_PMEEECR_P(port
), mask
, set
);
3119 mt753x_conduit_state_change(struct dsa_switch
*ds
,
3120 const struct net_device
*conduit
,
3123 struct dsa_port
*cpu_dp
= conduit
->dsa_ptr
;
3124 struct mt7530_priv
*priv
= ds
->priv
;
3128 /* Set the CPU port to trap frames to for MT7530. Trapped frames will be
3129 * forwarded to the numerically smallest CPU port whose conduit
3132 if (priv
->id
!= ID_MT7530
&& priv
->id
!= ID_MT7621
)
3135 mask
= BIT(cpu_dp
->index
);
3138 priv
->active_cpu_ports
|= mask
;
3140 priv
->active_cpu_ports
&= ~mask
;
3142 if (priv
->active_cpu_ports
) {
3143 val
= MT7530_CPU_EN
|
3144 MT7530_CPU_PORT(__ffs(priv
->active_cpu_ports
));
3147 mt7530_rmw(priv
, MT753X_MFC
, MT7530_CPU_EN
| MT7530_CPU_PORT_MASK
, val
);
3150 static int mt753x_tc_setup_qdisc_tbf(struct dsa_switch
*ds
, int port
,
3151 struct tc_tbf_qopt_offload
*qopt
)
3153 struct tc_tbf_qopt_offload_replace_params
*p
= &qopt
->replace_params
;
3154 struct mt7530_priv
*priv
= ds
->priv
;
3157 switch (qopt
->command
) {
3158 case TC_TBF_REPLACE
:
3159 rate
= div_u64(p
->rate
.rate_bytes_ps
, 1000) << 3; /* kbps */
3161 case TC_TBF_DESTROY
: {
3164 mt7530_rmw(priv
, MT753X_GERLCR
, EGR_BC_MASK
,
3165 EGR_BC_CRC_IPG_PREAMBLE
);
3167 /* if rate is greater than 10Mbps tick is 1/32 ms,
3170 tick
= rate
> 10000 ? 2 : 7;
3171 val
= FIELD_PREP(ERLCR_CIR_MASK
, (rate
>> 5)) |
3172 FIELD_PREP(ERLCR_EN_MASK
, !!rate
) |
3173 FIELD_PREP(ERLCR_EXP_MASK
, tick
) |
3174 ERLCR_TBF_MODE_MASK
|
3175 FIELD_PREP(ERLCR_MANT_MASK
, 0xf);
3176 mt7530_write(priv
, MT753X_ERLCR_P(port
), val
);
3186 static int mt753x_setup_tc(struct dsa_switch
*ds
, int port
,
3187 enum tc_setup_type type
, void *type_data
)
3190 case TC_SETUP_QDISC_TBF
:
3191 return mt753x_tc_setup_qdisc_tbf(ds
, port
, type_data
);
3197 static int mt7988_setup(struct dsa_switch
*ds
)
3199 struct mt7530_priv
*priv
= ds
->priv
;
3201 /* Reset the switch */
3202 reset_control_assert(priv
->rstc
);
3203 usleep_range(20, 50);
3204 reset_control_deassert(priv
->rstc
);
3205 usleep_range(20, 50);
3207 /* Reset the switch PHYs */
3208 mt7530_write(priv
, MT7530_SYS_CTRL
, SYS_CTRL_PHY_RST
);
3210 return mt7531_setup_common(ds
);
3213 const struct dsa_switch_ops mt7530_switch_ops
= {
3214 .get_tag_protocol
= mtk_get_tag_protocol
,
3215 .setup
= mt753x_setup
,
3216 .preferred_default_local_cpu_port
= mt753x_preferred_default_local_cpu_port
,
3217 .get_strings
= mt7530_get_strings
,
3218 .get_ethtool_stats
= mt7530_get_ethtool_stats
,
3219 .get_sset_count
= mt7530_get_sset_count
,
3220 .set_ageing_time
= mt7530_set_ageing_time
,
3221 .port_enable
= mt7530_port_enable
,
3222 .port_disable
= mt7530_port_disable
,
3223 .port_change_mtu
= mt7530_port_change_mtu
,
3224 .port_max_mtu
= mt7530_port_max_mtu
,
3225 .port_stp_state_set
= mt7530_stp_state_set
,
3226 .port_pre_bridge_flags
= mt7530_port_pre_bridge_flags
,
3227 .port_bridge_flags
= mt7530_port_bridge_flags
,
3228 .port_bridge_join
= mt7530_port_bridge_join
,
3229 .port_bridge_leave
= mt7530_port_bridge_leave
,
3230 .port_fdb_add
= mt7530_port_fdb_add
,
3231 .port_fdb_del
= mt7530_port_fdb_del
,
3232 .port_fdb_dump
= mt7530_port_fdb_dump
,
3233 .port_mdb_add
= mt7530_port_mdb_add
,
3234 .port_mdb_del
= mt7530_port_mdb_del
,
3235 .port_vlan_filtering
= mt7530_port_vlan_filtering
,
3236 .port_vlan_add
= mt7530_port_vlan_add
,
3237 .port_vlan_del
= mt7530_port_vlan_del
,
3238 .port_mirror_add
= mt753x_port_mirror_add
,
3239 .port_mirror_del
= mt753x_port_mirror_del
,
3240 .phylink_get_caps
= mt753x_phylink_get_caps
,
3241 .get_mac_eee
= mt753x_get_mac_eee
,
3242 .set_mac_eee
= mt753x_set_mac_eee
,
3243 .conduit_state_change
= mt753x_conduit_state_change
,
3244 .port_setup_tc
= mt753x_setup_tc
,
3246 EXPORT_SYMBOL_GPL(mt7530_switch_ops
);
3248 static const struct phylink_mac_ops mt753x_phylink_mac_ops
= {
3249 .mac_select_pcs
= mt753x_phylink_mac_select_pcs
,
3250 .mac_config
= mt753x_phylink_mac_config
,
3251 .mac_link_down
= mt753x_phylink_mac_link_down
,
3252 .mac_link_up
= mt753x_phylink_mac_link_up
,
3255 const struct mt753x_info mt753x_table
[] = {
3258 .pcs_ops
= &mt7530_pcs_ops
,
3259 .sw_setup
= mt7530_setup
,
3260 .phy_read_c22
= mt7530_phy_read_c22
,
3261 .phy_write_c22
= mt7530_phy_write_c22
,
3262 .phy_read_c45
= mt7530_phy_read_c45
,
3263 .phy_write_c45
= mt7530_phy_write_c45
,
3264 .mac_port_get_caps
= mt7530_mac_port_get_caps
,
3265 .mac_port_config
= mt7530_mac_config
,
3269 .pcs_ops
= &mt7530_pcs_ops
,
3270 .sw_setup
= mt7530_setup
,
3271 .phy_read_c22
= mt7530_phy_read_c22
,
3272 .phy_write_c22
= mt7530_phy_write_c22
,
3273 .phy_read_c45
= mt7530_phy_read_c45
,
3274 .phy_write_c45
= mt7530_phy_write_c45
,
3275 .mac_port_get_caps
= mt7530_mac_port_get_caps
,
3276 .mac_port_config
= mt7530_mac_config
,
3280 .pcs_ops
= &mt7530_pcs_ops
,
3281 .sw_setup
= mt7531_setup
,
3282 .phy_read_c22
= mt7531_ind_c22_phy_read
,
3283 .phy_write_c22
= mt7531_ind_c22_phy_write
,
3284 .phy_read_c45
= mt7531_ind_c45_phy_read
,
3285 .phy_write_c45
= mt7531_ind_c45_phy_write
,
3286 .mac_port_get_caps
= mt7531_mac_port_get_caps
,
3287 .mac_port_config
= mt7531_mac_config
,
3291 .pcs_ops
= &mt7530_pcs_ops
,
3292 .sw_setup
= mt7988_setup
,
3293 .phy_read_c22
= mt7531_ind_c22_phy_read
,
3294 .phy_write_c22
= mt7531_ind_c22_phy_write
,
3295 .phy_read_c45
= mt7531_ind_c45_phy_read
,
3296 .phy_write_c45
= mt7531_ind_c45_phy_write
,
3297 .mac_port_get_caps
= mt7988_mac_port_get_caps
,
3301 .pcs_ops
= &mt7530_pcs_ops
,
3302 .sw_setup
= mt7988_setup
,
3303 .phy_read_c22
= mt7531_ind_c22_phy_read
,
3304 .phy_write_c22
= mt7531_ind_c22_phy_write
,
3305 .phy_read_c45
= mt7531_ind_c45_phy_read
,
3306 .phy_write_c45
= mt7531_ind_c45_phy_write
,
3307 .mac_port_get_caps
= en7581_mac_port_get_caps
,
3310 EXPORT_SYMBOL_GPL(mt753x_table
);
3313 mt7530_probe_common(struct mt7530_priv
*priv
)
3315 struct device
*dev
= priv
->dev
;
3317 priv
->ds
= devm_kzalloc(dev
, sizeof(*priv
->ds
), GFP_KERNEL
);
3321 priv
->ds
->dev
= dev
;
3322 priv
->ds
->num_ports
= MT7530_NUM_PORTS
;
3324 /* Get the hardware identifier from the devicetree node.
3325 * We will need it for some of the clock and regulator setup.
3327 priv
->info
= of_device_get_match_data(dev
);
3331 priv
->id
= priv
->info
->id
;
3333 priv
->ds
->priv
= priv
;
3334 priv
->ds
->ops
= &mt7530_switch_ops
;
3335 priv
->ds
->phylink_mac_ops
= &mt753x_phylink_mac_ops
;
3336 mutex_init(&priv
->reg_mutex
);
3337 dev_set_drvdata(dev
, priv
);
3341 EXPORT_SYMBOL_GPL(mt7530_probe_common
);
3344 mt7530_remove_common(struct mt7530_priv
*priv
)
3347 mt7530_free_irq(priv
);
3349 dsa_unregister_switch(priv
->ds
);
3351 mutex_destroy(&priv
->reg_mutex
);
3353 EXPORT_SYMBOL_GPL(mt7530_remove_common
);
3355 MODULE_AUTHOR("Sean Wang <sean.wang@mediatek.com>");
3356 MODULE_DESCRIPTION("Driver for Mediatek MT7530 Switch");
3357 MODULE_LICENSE("GPL");