xref: /linux/drivers/net/dsa/mt7530.c (revision 68993ced0f618e36cf33388f1e50223e5e6e78cc)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Mediatek MT7530 DSA Switch driver
4  * Copyright (C) 2017 Sean Wang <sean.wang@mediatek.com>
5  */
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>
23 #include <net/dsa.h>
24 #include <net/pkt_cls.h>
25 
26 #include "mt7530.h"
27 
28 #define MT7530_STATS_POLL_INTERVAL	(1 * HZ)
29 #define MT7530_STATS_RATE_LIMIT		(HZ / 10)
30 
pcs_to_mt753x_pcs(struct phylink_pcs * pcs)31 static struct mt753x_pcs *pcs_to_mt753x_pcs(struct phylink_pcs *pcs)
32 {
33 	return container_of(pcs, struct mt753x_pcs, pcs);
34 }
35 
36 /* String, offset, and register size in bytes if different from 4 bytes */
37 static const struct mt7530_mib_desc mt7530_mib[] = {
38 	MIB_DESC(1, MT7530_PORT_MIB_TX_DROP, "TxDrop"),
39 	MIB_DESC(1, MT7530_PORT_MIB_TX_CRC_ERR, "TxCrcErr"),
40 	MIB_DESC(1, MT7530_PORT_MIB_TX_COLLISION, "TxCollision"),
41 	MIB_DESC(1, MT7530_PORT_MIB_RX_DROP, "RxDrop"),
42 	MIB_DESC(1, MT7530_PORT_MIB_RX_FILTERING, "RxFiltering"),
43 	MIB_DESC(1, MT7530_PORT_MIB_RX_CRC_ERR, "RxCrcErr"),
44 	MIB_DESC(1, MT7530_PORT_MIB_RX_CTRL_DROP, "RxCtrlDrop"),
45 	MIB_DESC(1, MT7530_PORT_MIB_RX_INGRESS_DROP, "RxIngressDrop"),
46 	MIB_DESC(1, MT7530_PORT_MIB_RX_ARL_DROP, "RxArlDrop"),
47 };
48 
49 static void
mt7530_mutex_lock(struct mt7530_priv * priv)50 mt7530_mutex_lock(struct mt7530_priv *priv)
51 {
52 	if (priv->bus)
53 		mutex_lock_nested(&priv->bus->mdio_lock, MDIO_MUTEX_NESTED);
54 }
55 
56 static void
mt7530_mutex_unlock(struct mt7530_priv * priv)57 mt7530_mutex_unlock(struct mt7530_priv *priv)
58 {
59 	if (priv->bus)
60 		mutex_unlock(&priv->bus->mdio_lock);
61 }
62 
63 static void
core_write(struct mt7530_priv * priv,u32 reg,u32 val)64 core_write(struct mt7530_priv *priv, u32 reg, u32 val)
65 {
66 	struct mii_bus *bus = priv->bus;
67 	int ret;
68 
69 	mt7530_mutex_lock(priv);
70 
71 	/* Write the desired MMD Devad */
72 	ret = bus->write(bus, MT753X_CTRL_PHY_ADDR(priv->mdiodev->addr),
73 			 MII_MMD_CTRL, MDIO_MMD_VEND2);
74 	if (ret < 0)
75 		goto err;
76 
77 	/* Write the desired MMD register address */
78 	ret = bus->write(bus, MT753X_CTRL_PHY_ADDR(priv->mdiodev->addr),
79 			 MII_MMD_DATA, reg);
80 	if (ret < 0)
81 		goto err;
82 
83 	/* Select the Function : DATA with no post increment */
84 	ret = bus->write(bus, MT753X_CTRL_PHY_ADDR(priv->mdiodev->addr),
85 			 MII_MMD_CTRL, MDIO_MMD_VEND2 | MII_MMD_CTRL_NOINCR);
86 	if (ret < 0)
87 		goto err;
88 
89 	/* Write the data into MMD's selected register */
90 	ret = bus->write(bus, MT753X_CTRL_PHY_ADDR(priv->mdiodev->addr),
91 			 MII_MMD_DATA, val);
92 err:
93 	if (ret < 0)
94 		dev_err(&bus->dev, "failed to write mmd register\n");
95 
96 	mt7530_mutex_unlock(priv);
97 }
98 
99 static void
core_rmw(struct mt7530_priv * priv,u32 reg,u32 mask,u32 set)100 core_rmw(struct mt7530_priv *priv, u32 reg, u32 mask, u32 set)
101 {
102 	struct mii_bus *bus = priv->bus;
103 	u32 val;
104 	int ret;
105 
106 	mt7530_mutex_lock(priv);
107 
108 	/* Write the desired MMD Devad */
109 	ret = bus->write(bus, MT753X_CTRL_PHY_ADDR(priv->mdiodev->addr),
110 			 MII_MMD_CTRL, MDIO_MMD_VEND2);
111 	if (ret < 0)
112 		goto err;
113 
114 	/* Write the desired MMD register address */
115 	ret = bus->write(bus, MT753X_CTRL_PHY_ADDR(priv->mdiodev->addr),
116 			 MII_MMD_DATA, reg);
117 	if (ret < 0)
118 		goto err;
119 
120 	/* Select the Function : DATA with no post increment */
121 	ret = bus->write(bus, MT753X_CTRL_PHY_ADDR(priv->mdiodev->addr),
122 			 MII_MMD_CTRL, MDIO_MMD_VEND2 | MII_MMD_CTRL_NOINCR);
123 	if (ret < 0)
124 		goto err;
125 
126 	/* Read the content of the MMD's selected register */
127 	val = bus->read(bus, MT753X_CTRL_PHY_ADDR(priv->mdiodev->addr),
128 			MII_MMD_DATA);
129 	val &= ~mask;
130 	val |= set;
131 	/* Write the data into MMD's selected register */
132 	ret = bus->write(bus, MT753X_CTRL_PHY_ADDR(priv->mdiodev->addr),
133 			 MII_MMD_DATA, val);
134 err:
135 	if (ret < 0)
136 		dev_err(&bus->dev, "failed to write mmd register\n");
137 
138 	mt7530_mutex_unlock(priv);
139 }
140 
141 static void
core_set(struct mt7530_priv * priv,u32 reg,u32 val)142 core_set(struct mt7530_priv *priv, u32 reg, u32 val)
143 {
144 	core_rmw(priv, reg, 0, val);
145 }
146 
147 static void
core_clear(struct mt7530_priv * priv,u32 reg,u32 val)148 core_clear(struct mt7530_priv *priv, u32 reg, u32 val)
149 {
150 	core_rmw(priv, reg, val, 0);
151 }
152 
153 static int
mt7530_mii_write(struct mt7530_priv * priv,u32 reg,u32 val)154 mt7530_mii_write(struct mt7530_priv *priv, u32 reg, u32 val)
155 {
156 	int ret;
157 
158 	ret = regmap_write(priv->regmap, reg, val);
159 
160 	if (ret < 0)
161 		dev_err(priv->dev,
162 			"failed to write mt7530 register\n");
163 
164 	return ret;
165 }
166 
167 static u32
mt7530_mii_read(struct mt7530_priv * priv,u32 reg)168 mt7530_mii_read(struct mt7530_priv *priv, u32 reg)
169 {
170 	int ret;
171 	u32 val;
172 
173 	ret = regmap_read(priv->regmap, reg, &val);
174 	if (ret) {
175 		WARN_ON_ONCE(1);
176 		dev_err(priv->dev,
177 			"failed to read mt7530 register\n");
178 		return 0;
179 	}
180 
181 	return val;
182 }
183 
184 static void
mt7530_write(struct mt7530_priv * priv,u32 reg,u32 val)185 mt7530_write(struct mt7530_priv *priv, u32 reg, u32 val)
186 {
187 	mt7530_mutex_lock(priv);
188 
189 	mt7530_mii_write(priv, reg, val);
190 
191 	mt7530_mutex_unlock(priv);
192 }
193 
194 static u32
_mt7530_unlocked_read(struct mt7530_dummy_poll * p)195 _mt7530_unlocked_read(struct mt7530_dummy_poll *p)
196 {
197 	return mt7530_mii_read(p->priv, p->reg);
198 }
199 
200 static u32
_mt7530_read(struct mt7530_dummy_poll * p)201 _mt7530_read(struct mt7530_dummy_poll *p)
202 {
203 	u32 val;
204 
205 	mt7530_mutex_lock(p->priv);
206 
207 	val = mt7530_mii_read(p->priv, p->reg);
208 
209 	mt7530_mutex_unlock(p->priv);
210 
211 	return val;
212 }
213 
214 static u32
mt7530_read(struct mt7530_priv * priv,u32 reg)215 mt7530_read(struct mt7530_priv *priv, u32 reg)
216 {
217 	struct mt7530_dummy_poll p;
218 
219 	INIT_MT7530_DUMMY_POLL(&p, priv, reg);
220 	return _mt7530_read(&p);
221 }
222 
223 static void
mt7530_rmw(struct mt7530_priv * priv,u32 reg,u32 mask,u32 set)224 mt7530_rmw(struct mt7530_priv *priv, u32 reg,
225 	   u32 mask, u32 set)
226 {
227 	mt7530_mutex_lock(priv);
228 
229 	regmap_update_bits(priv->regmap, reg, mask, set);
230 
231 	mt7530_mutex_unlock(priv);
232 }
233 
234 static void
mt7530_set(struct mt7530_priv * priv,u32 reg,u32 val)235 mt7530_set(struct mt7530_priv *priv, u32 reg, u32 val)
236 {
237 	mt7530_rmw(priv, reg, val, val);
238 }
239 
240 static void
mt7530_clear(struct mt7530_priv * priv,u32 reg,u32 val)241 mt7530_clear(struct mt7530_priv *priv, u32 reg, u32 val)
242 {
243 	mt7530_rmw(priv, reg, val, 0);
244 }
245 
246 static int
mt7530_fdb_cmd(struct mt7530_priv * priv,enum mt7530_fdb_cmd cmd,u32 * rsp)247 mt7530_fdb_cmd(struct mt7530_priv *priv, enum mt7530_fdb_cmd cmd, u32 *rsp)
248 {
249 	u32 val;
250 	int ret;
251 	struct mt7530_dummy_poll p;
252 
253 	/* Set the command operating upon the MAC address entries */
254 	val = ATC_BUSY | ATC_MAT(0) | cmd;
255 	mt7530_write(priv, MT7530_ATC, val);
256 
257 	INIT_MT7530_DUMMY_POLL(&p, priv, MT7530_ATC);
258 	ret = readx_poll_timeout(_mt7530_read, &p, val,
259 				 !(val & ATC_BUSY), 20, 20000);
260 	if (ret < 0) {
261 		dev_err(priv->dev, "reset timeout\n");
262 		return ret;
263 	}
264 
265 	/* Additional sanity for read command if the specified
266 	 * entry is invalid
267 	 */
268 	val = mt7530_read(priv, MT7530_ATC);
269 	if ((cmd == MT7530_FDB_READ) && (val & ATC_INVALID))
270 		return -EINVAL;
271 
272 	if (rsp)
273 		*rsp = val;
274 
275 	return 0;
276 }
277 
278 static void
mt7530_fdb_read(struct mt7530_priv * priv,struct mt7530_fdb * fdb)279 mt7530_fdb_read(struct mt7530_priv *priv, struct mt7530_fdb *fdb)
280 {
281 	u32 reg[3];
282 	int i;
283 
284 	/* Read from ARL table into an array */
285 	for (i = 0; i < 3; i++) {
286 		reg[i] = mt7530_read(priv, MT7530_TSRA1 + (i * 4));
287 
288 		dev_dbg(priv->dev, "%s(%d) reg[%d]=0x%x\n",
289 			__func__, __LINE__, i, reg[i]);
290 	}
291 
292 	fdb->vid = (reg[1] >> CVID) & CVID_MASK;
293 	fdb->aging = (reg[2] >> AGE_TIMER) & AGE_TIMER_MASK;
294 	fdb->port_mask = (reg[2] >> PORT_MAP) & PORT_MAP_MASK;
295 	fdb->mac[0] = (reg[0] >> MAC_BYTE_0) & MAC_BYTE_MASK;
296 	fdb->mac[1] = (reg[0] >> MAC_BYTE_1) & MAC_BYTE_MASK;
297 	fdb->mac[2] = (reg[0] >> MAC_BYTE_2) & MAC_BYTE_MASK;
298 	fdb->mac[3] = (reg[0] >> MAC_BYTE_3) & MAC_BYTE_MASK;
299 	fdb->mac[4] = (reg[1] >> MAC_BYTE_4) & MAC_BYTE_MASK;
300 	fdb->mac[5] = (reg[1] >> MAC_BYTE_5) & MAC_BYTE_MASK;
301 	fdb->noarp = ((reg[2] >> ENT_STATUS) & ENT_STATUS_MASK) == STATIC_ENT;
302 }
303 
304 static void
mt7530_fdb_write(struct mt7530_priv * priv,u16 vid,u8 port_mask,const u8 * mac,u8 aging,u8 type)305 mt7530_fdb_write(struct mt7530_priv *priv, u16 vid,
306 		 u8 port_mask, const u8 *mac,
307 		 u8 aging, u8 type)
308 {
309 	u32 reg[3] = { 0 };
310 	int i;
311 
312 	reg[1] |= vid & CVID_MASK;
313 	reg[1] |= ATA2_IVL;
314 	reg[1] |= ATA2_FID(FID_BRIDGED);
315 	reg[2] |= (aging & AGE_TIMER_MASK) << AGE_TIMER;
316 	reg[2] |= (port_mask & PORT_MAP_MASK) << PORT_MAP;
317 	/* STATIC_ENT indicate that entry is static wouldn't
318 	 * be aged out and STATIC_EMP specified as erasing an
319 	 * entry
320 	 */
321 	reg[2] |= (type & ENT_STATUS_MASK) << ENT_STATUS;
322 	reg[1] |= mac[5] << MAC_BYTE_5;
323 	reg[1] |= mac[4] << MAC_BYTE_4;
324 	reg[0] |= mac[3] << MAC_BYTE_3;
325 	reg[0] |= mac[2] << MAC_BYTE_2;
326 	reg[0] |= mac[1] << MAC_BYTE_1;
327 	reg[0] |= mac[0] << MAC_BYTE_0;
328 
329 	/* Write array into the ARL table */
330 	for (i = 0; i < 3; i++)
331 		mt7530_write(priv, MT7530_ATA1 + (i * 4), reg[i]);
332 }
333 
334 /* Set up switch core clock for MT7530 */
mt7530_pll_setup(struct mt7530_priv * priv)335 static void mt7530_pll_setup(struct mt7530_priv *priv)
336 {
337 	/* Disable core clock */
338 	core_clear(priv, CORE_TRGMII_GSW_CLK_CG, REG_GSWCK_EN);
339 
340 	/* Disable PLL */
341 	core_write(priv, CORE_GSWPLL_GRP1, 0);
342 
343 	/* Set core clock into 500Mhz */
344 	core_write(priv, CORE_GSWPLL_GRP2,
345 		   RG_GSWPLL_POSDIV_500M(1) |
346 		   RG_GSWPLL_FBKDIV_500M(25));
347 
348 	/* Enable PLL */
349 	core_write(priv, CORE_GSWPLL_GRP1,
350 		   RG_GSWPLL_EN_PRE |
351 		   RG_GSWPLL_POSDIV_200M(2) |
352 		   RG_GSWPLL_FBKDIV_200M(32));
353 
354 	udelay(20);
355 
356 	/* Enable core clock */
357 	core_set(priv, CORE_TRGMII_GSW_CLK_CG, REG_GSWCK_EN);
358 }
359 
360 /* If port 6 is available as a CPU port, always prefer that as the default,
361  * otherwise don't care.
362  */
363 static struct dsa_port *
mt753x_preferred_default_local_cpu_port(struct dsa_switch * ds)364 mt753x_preferred_default_local_cpu_port(struct dsa_switch *ds)
365 {
366 	struct dsa_port *cpu_dp = dsa_to_port(ds, 6);
367 
368 	if (dsa_port_is_cpu(cpu_dp))
369 		return cpu_dp;
370 
371 	return NULL;
372 }
373 
374 /* Setup port 6 interface mode and TRGMII TX circuit */
375 static void
mt7530_setup_port6(struct dsa_switch * ds,phy_interface_t interface)376 mt7530_setup_port6(struct dsa_switch *ds, phy_interface_t interface)
377 {
378 	struct mt7530_priv *priv = ds->priv;
379 	u32 ncpo1, ssc_delta, xtal;
380 
381 	/* Disable the MT7530 TRGMII clocks */
382 	core_clear(priv, CORE_TRGMII_GSW_CLK_CG, REG_TRGMIICK_EN);
383 
384 	if (interface == PHY_INTERFACE_MODE_RGMII) {
385 		mt7530_rmw(priv, MT7530_P6ECR, P6_INTF_MODE_MASK,
386 			   P6_INTF_MODE(0));
387 		return;
388 	}
389 
390 	mt7530_rmw(priv, MT7530_P6ECR, P6_INTF_MODE_MASK, P6_INTF_MODE(1));
391 
392 	xtal = mt7530_read(priv, MT753X_MTRAP) & MT7530_XTAL_MASK;
393 
394 	if (xtal == MT7530_XTAL_25MHZ)
395 		ssc_delta = 0x57;
396 	else
397 		ssc_delta = 0x87;
398 
399 	if (priv->id == ID_MT7621) {
400 		/* PLL frequency: 125MHz: 1.0GBit */
401 		if (xtal == MT7530_XTAL_40MHZ)
402 			ncpo1 = 0x0640;
403 		if (xtal == MT7530_XTAL_25MHZ)
404 			ncpo1 = 0x0a00;
405 	} else { /* PLL frequency: 250MHz: 2.0Gbit */
406 		if (xtal == MT7530_XTAL_40MHZ)
407 			ncpo1 = 0x0c80;
408 		if (xtal == MT7530_XTAL_25MHZ)
409 			ncpo1 = 0x1400;
410 	}
411 
412 	/* Setup the MT7530 TRGMII Tx Clock */
413 	core_write(priv, CORE_PLL_GROUP5, RG_LCDDS_PCW_NCPO1(ncpo1));
414 	core_write(priv, CORE_PLL_GROUP6, RG_LCDDS_PCW_NCPO0(0));
415 	core_write(priv, CORE_PLL_GROUP10, RG_LCDDS_SSC_DELTA(ssc_delta));
416 	core_write(priv, CORE_PLL_GROUP11, RG_LCDDS_SSC_DELTA1(ssc_delta));
417 	core_write(priv, CORE_PLL_GROUP4, RG_SYSPLL_DDSFBK_EN |
418 		   RG_SYSPLL_BIAS_EN | RG_SYSPLL_BIAS_LPF_EN);
419 	core_write(priv, CORE_PLL_GROUP2, RG_SYSPLL_EN_NORMAL |
420 		   RG_SYSPLL_VODEN | RG_SYSPLL_POSDIV(1));
421 	core_write(priv, CORE_PLL_GROUP7, RG_LCDDS_PCW_NCPO_CHG |
422 		   RG_LCCDS_C(3) | RG_LCDDS_PWDB | RG_LCDDS_ISO_EN);
423 
424 	/* Enable the MT7530 TRGMII clocks */
425 	core_set(priv, CORE_TRGMII_GSW_CLK_CG, REG_TRGMIICK_EN);
426 }
427 
428 static void
mt7531_pll_setup(struct mt7530_priv * priv)429 mt7531_pll_setup(struct mt7530_priv *priv)
430 {
431 	enum mt7531_xtal_fsel xtal;
432 	u32 top_sig;
433 	u32 hwstrap;
434 	u32 val;
435 
436 	val = mt7530_read(priv, MT7531_CREV);
437 	top_sig = mt7530_read(priv, MT7531_TOP_SIG_SR);
438 	hwstrap = mt7530_read(priv, MT753X_TRAP);
439 	if ((val & CHIP_REV_M) > 0)
440 		xtal = (top_sig & PAD_MCM_SMI_EN) ? MT7531_XTAL_FSEL_40MHZ :
441 						    MT7531_XTAL_FSEL_25MHZ;
442 	else
443 		xtal = (hwstrap & MT7531_XTAL25) ? MT7531_XTAL_FSEL_25MHZ :
444 						   MT7531_XTAL_FSEL_40MHZ;
445 
446 	/* Step 1 : Disable MT7531 COREPLL */
447 	val = mt7530_read(priv, MT7531_PLLGP_EN);
448 	val &= ~EN_COREPLL;
449 	mt7530_write(priv, MT7531_PLLGP_EN, val);
450 
451 	/* Step 2: switch to XTAL output */
452 	val = mt7530_read(priv, MT7531_PLLGP_EN);
453 	val |= SW_CLKSW;
454 	mt7530_write(priv, MT7531_PLLGP_EN, val);
455 
456 	val = mt7530_read(priv, MT7531_PLLGP_CR0);
457 	val &= ~RG_COREPLL_EN;
458 	mt7530_write(priv, MT7531_PLLGP_CR0, val);
459 
460 	/* Step 3: disable PLLGP and enable program PLLGP */
461 	val = mt7530_read(priv, MT7531_PLLGP_EN);
462 	val |= SW_PLLGP;
463 	mt7530_write(priv, MT7531_PLLGP_EN, val);
464 
465 	/* Step 4: program COREPLL output frequency to 500MHz */
466 	val = mt7530_read(priv, MT7531_PLLGP_CR0);
467 	val &= ~RG_COREPLL_POSDIV_M;
468 	val |= 2 << RG_COREPLL_POSDIV_S;
469 	mt7530_write(priv, MT7531_PLLGP_CR0, val);
470 	usleep_range(25, 35);
471 
472 	switch (xtal) {
473 	case MT7531_XTAL_FSEL_25MHZ:
474 		val = mt7530_read(priv, MT7531_PLLGP_CR0);
475 		val &= ~RG_COREPLL_SDM_PCW_M;
476 		val |= 0x140000 << RG_COREPLL_SDM_PCW_S;
477 		mt7530_write(priv, MT7531_PLLGP_CR0, val);
478 		break;
479 	case MT7531_XTAL_FSEL_40MHZ:
480 		val = mt7530_read(priv, MT7531_PLLGP_CR0);
481 		val &= ~RG_COREPLL_SDM_PCW_M;
482 		val |= 0x190000 << RG_COREPLL_SDM_PCW_S;
483 		mt7530_write(priv, MT7531_PLLGP_CR0, val);
484 		break;
485 	}
486 
487 	/* Set feedback divide ratio update signal to high */
488 	val = mt7530_read(priv, MT7531_PLLGP_CR0);
489 	val |= RG_COREPLL_SDM_PCW_CHG;
490 	mt7530_write(priv, MT7531_PLLGP_CR0, val);
491 	/* Wait for at least 16 XTAL clocks */
492 	usleep_range(10, 20);
493 
494 	/* Step 5: set feedback divide ratio update signal to low */
495 	val = mt7530_read(priv, MT7531_PLLGP_CR0);
496 	val &= ~RG_COREPLL_SDM_PCW_CHG;
497 	mt7530_write(priv, MT7531_PLLGP_CR0, val);
498 
499 	/* Enable 325M clock for SGMII */
500 	mt7530_write(priv, MT7531_ANA_PLLGP_CR5, 0xad0000);
501 
502 	/* Enable 250SSC clock for RGMII */
503 	mt7530_write(priv, MT7531_ANA_PLLGP_CR2, 0x4f40000);
504 
505 	/* Step 6: Enable MT7531 PLL */
506 	val = mt7530_read(priv, MT7531_PLLGP_CR0);
507 	val |= RG_COREPLL_EN;
508 	mt7530_write(priv, MT7531_PLLGP_CR0, val);
509 
510 	val = mt7530_read(priv, MT7531_PLLGP_EN);
511 	val |= EN_COREPLL;
512 	mt7530_write(priv, MT7531_PLLGP_EN, val);
513 	usleep_range(25, 35);
514 }
515 
516 static void
mt7530_mib_reset(struct dsa_switch * ds)517 mt7530_mib_reset(struct dsa_switch *ds)
518 {
519 	struct mt7530_priv *priv = ds->priv;
520 
521 	mt7530_write(priv, MT7530_MIB_CCR, CCR_MIB_FLUSH);
522 	mt7530_write(priv, MT7530_MIB_CCR, CCR_MIB_ACTIVATE);
523 }
524 
mt7530_phy_read_c22(struct mt7530_priv * priv,int port,int regnum)525 static int mt7530_phy_read_c22(struct mt7530_priv *priv, int port, int regnum)
526 {
527 	return mdiobus_read_nested(priv->bus, port, regnum);
528 }
529 
mt7530_phy_write_c22(struct mt7530_priv * priv,int port,int regnum,u16 val)530 static int mt7530_phy_write_c22(struct mt7530_priv *priv, int port, int regnum,
531 				u16 val)
532 {
533 	return mdiobus_write_nested(priv->bus, port, regnum, val);
534 }
535 
mt7530_phy_read_c45(struct mt7530_priv * priv,int port,int devad,int regnum)536 static int mt7530_phy_read_c45(struct mt7530_priv *priv, int port,
537 			       int devad, int regnum)
538 {
539 	return mdiobus_c45_read_nested(priv->bus, port, devad, regnum);
540 }
541 
mt7530_phy_write_c45(struct mt7530_priv * priv,int port,int devad,int regnum,u16 val)542 static int mt7530_phy_write_c45(struct mt7530_priv *priv, int port, int devad,
543 				int regnum, u16 val)
544 {
545 	return mdiobus_c45_write_nested(priv->bus, port, devad, regnum, val);
546 }
547 
548 static int
mt7531_ind_c45_phy_read(struct mt7530_priv * priv,int port,int devad,int regnum)549 mt7531_ind_c45_phy_read(struct mt7530_priv *priv, int port, int devad,
550 			int regnum)
551 {
552 	struct mt7530_dummy_poll p;
553 	u32 reg, val;
554 	int ret;
555 
556 	INIT_MT7530_DUMMY_POLL(&p, priv, MT7531_PHY_IAC);
557 
558 	mt7530_mutex_lock(priv);
559 
560 	ret = readx_poll_timeout(_mt7530_unlocked_read, &p, val,
561 				 !(val & MT7531_PHY_ACS_ST), 20, 100000);
562 	if (ret < 0) {
563 		dev_err(priv->dev, "poll timeout\n");
564 		goto out;
565 	}
566 
567 	reg = MT7531_MDIO_CL45_ADDR | MT7531_MDIO_PHY_ADDR(port) |
568 	      MT7531_MDIO_DEV_ADDR(devad) | regnum;
569 	mt7530_mii_write(priv, MT7531_PHY_IAC, reg | MT7531_PHY_ACS_ST);
570 
571 	ret = readx_poll_timeout(_mt7530_unlocked_read, &p, val,
572 				 !(val & MT7531_PHY_ACS_ST), 20, 100000);
573 	if (ret < 0) {
574 		dev_err(priv->dev, "poll timeout\n");
575 		goto out;
576 	}
577 
578 	reg = MT7531_MDIO_CL45_READ | MT7531_MDIO_PHY_ADDR(port) |
579 	      MT7531_MDIO_DEV_ADDR(devad);
580 	mt7530_mii_write(priv, MT7531_PHY_IAC, reg | MT7531_PHY_ACS_ST);
581 
582 	ret = readx_poll_timeout(_mt7530_unlocked_read, &p, val,
583 				 !(val & MT7531_PHY_ACS_ST), 20, 100000);
584 	if (ret < 0) {
585 		dev_err(priv->dev, "poll timeout\n");
586 		goto out;
587 	}
588 
589 	ret = val & MT7531_MDIO_RW_DATA_MASK;
590 out:
591 	mt7530_mutex_unlock(priv);
592 
593 	return ret;
594 }
595 
596 static int
mt7531_ind_c45_phy_write(struct mt7530_priv * priv,int port,int devad,int regnum,u16 data)597 mt7531_ind_c45_phy_write(struct mt7530_priv *priv, int port, int devad,
598 			 int regnum, u16 data)
599 {
600 	struct mt7530_dummy_poll p;
601 	u32 val, reg;
602 	int ret;
603 
604 	INIT_MT7530_DUMMY_POLL(&p, priv, MT7531_PHY_IAC);
605 
606 	mt7530_mutex_lock(priv);
607 
608 	ret = readx_poll_timeout(_mt7530_unlocked_read, &p, val,
609 				 !(val & MT7531_PHY_ACS_ST), 20, 100000);
610 	if (ret < 0) {
611 		dev_err(priv->dev, "poll timeout\n");
612 		goto out;
613 	}
614 
615 	reg = MT7531_MDIO_CL45_ADDR | MT7531_MDIO_PHY_ADDR(port) |
616 	      MT7531_MDIO_DEV_ADDR(devad) | regnum;
617 	mt7530_mii_write(priv, MT7531_PHY_IAC, reg | MT7531_PHY_ACS_ST);
618 
619 	ret = readx_poll_timeout(_mt7530_unlocked_read, &p, val,
620 				 !(val & MT7531_PHY_ACS_ST), 20, 100000);
621 	if (ret < 0) {
622 		dev_err(priv->dev, "poll timeout\n");
623 		goto out;
624 	}
625 
626 	reg = MT7531_MDIO_CL45_WRITE | MT7531_MDIO_PHY_ADDR(port) |
627 	      MT7531_MDIO_DEV_ADDR(devad) | data;
628 	mt7530_mii_write(priv, MT7531_PHY_IAC, reg | MT7531_PHY_ACS_ST);
629 
630 	ret = readx_poll_timeout(_mt7530_unlocked_read, &p, val,
631 				 !(val & MT7531_PHY_ACS_ST), 20, 100000);
632 	if (ret < 0) {
633 		dev_err(priv->dev, "poll timeout\n");
634 		goto out;
635 	}
636 
637 out:
638 	mt7530_mutex_unlock(priv);
639 
640 	return ret;
641 }
642 
643 static int
mt7531_ind_c22_phy_read(struct mt7530_priv * priv,int port,int regnum)644 mt7531_ind_c22_phy_read(struct mt7530_priv *priv, int port, int regnum)
645 {
646 	struct mt7530_dummy_poll p;
647 	int ret;
648 	u32 val;
649 
650 	INIT_MT7530_DUMMY_POLL(&p, priv, MT7531_PHY_IAC);
651 
652 	mt7530_mutex_lock(priv);
653 
654 	ret = readx_poll_timeout(_mt7530_unlocked_read, &p, val,
655 				 !(val & MT7531_PHY_ACS_ST), 20, 100000);
656 	if (ret < 0) {
657 		dev_err(priv->dev, "poll timeout\n");
658 		goto out;
659 	}
660 
661 	val = MT7531_MDIO_CL22_READ | MT7531_MDIO_PHY_ADDR(port) |
662 	      MT7531_MDIO_REG_ADDR(regnum);
663 
664 	mt7530_mii_write(priv, MT7531_PHY_IAC, val | MT7531_PHY_ACS_ST);
665 
666 	ret = readx_poll_timeout(_mt7530_unlocked_read, &p, val,
667 				 !(val & MT7531_PHY_ACS_ST), 20, 100000);
668 	if (ret < 0) {
669 		dev_err(priv->dev, "poll timeout\n");
670 		goto out;
671 	}
672 
673 	ret = val & MT7531_MDIO_RW_DATA_MASK;
674 out:
675 	mt7530_mutex_unlock(priv);
676 
677 	return ret;
678 }
679 
680 static int
mt7531_ind_c22_phy_write(struct mt7530_priv * priv,int port,int regnum,u16 data)681 mt7531_ind_c22_phy_write(struct mt7530_priv *priv, int port, int regnum,
682 			 u16 data)
683 {
684 	struct mt7530_dummy_poll p;
685 	int ret;
686 	u32 reg;
687 
688 	INIT_MT7530_DUMMY_POLL(&p, priv, MT7531_PHY_IAC);
689 
690 	mt7530_mutex_lock(priv);
691 
692 	ret = readx_poll_timeout(_mt7530_unlocked_read, &p, reg,
693 				 !(reg & MT7531_PHY_ACS_ST), 20, 100000);
694 	if (ret < 0) {
695 		dev_err(priv->dev, "poll timeout\n");
696 		goto out;
697 	}
698 
699 	reg = MT7531_MDIO_CL22_WRITE | MT7531_MDIO_PHY_ADDR(port) |
700 	      MT7531_MDIO_REG_ADDR(regnum) | data;
701 
702 	mt7530_mii_write(priv, MT7531_PHY_IAC, reg | MT7531_PHY_ACS_ST);
703 
704 	ret = readx_poll_timeout(_mt7530_unlocked_read, &p, reg,
705 				 !(reg & MT7531_PHY_ACS_ST), 20, 100000);
706 	if (ret < 0) {
707 		dev_err(priv->dev, "poll timeout\n");
708 		goto out;
709 	}
710 
711 out:
712 	mt7530_mutex_unlock(priv);
713 
714 	return ret;
715 }
716 
717 static int
mt753x_phy_read_c22(struct mii_bus * bus,int port,int regnum)718 mt753x_phy_read_c22(struct mii_bus *bus, int port, int regnum)
719 {
720 	struct mt7530_priv *priv = bus->priv;
721 
722 	return priv->info->phy_read_c22(priv, port, regnum);
723 }
724 
725 static int
mt753x_phy_read_c45(struct mii_bus * bus,int port,int devad,int regnum)726 mt753x_phy_read_c45(struct mii_bus *bus, int port, int devad, int regnum)
727 {
728 	struct mt7530_priv *priv = bus->priv;
729 
730 	return priv->info->phy_read_c45(priv, port, devad, regnum);
731 }
732 
733 static int
mt753x_phy_write_c22(struct mii_bus * bus,int port,int regnum,u16 val)734 mt753x_phy_write_c22(struct mii_bus *bus, int port, int regnum, u16 val)
735 {
736 	struct mt7530_priv *priv = bus->priv;
737 
738 	return priv->info->phy_write_c22(priv, port, regnum, val);
739 }
740 
741 static int
mt753x_phy_write_c45(struct mii_bus * bus,int port,int devad,int regnum,u16 val)742 mt753x_phy_write_c45(struct mii_bus *bus, int port, int devad, int regnum,
743 		     u16 val)
744 {
745 	struct mt7530_priv *priv = bus->priv;
746 
747 	return priv->info->phy_write_c45(priv, port, devad, regnum, val);
748 }
749 
750 static void
mt7530_get_strings(struct dsa_switch * ds,int port,u32 stringset,uint8_t * data)751 mt7530_get_strings(struct dsa_switch *ds, int port, u32 stringset,
752 		   uint8_t *data)
753 {
754 	int i;
755 
756 	if (stringset != ETH_SS_STATS)
757 		return;
758 
759 	for (i = 0; i < ARRAY_SIZE(mt7530_mib); i++)
760 		ethtool_puts(&data, mt7530_mib[i].name);
761 }
762 
763 static void
mt7530_read_port_stats(struct mt7530_priv * priv,int port,u32 offset,u8 size,uint64_t * data)764 mt7530_read_port_stats(struct mt7530_priv *priv, int port,
765 		       u32 offset, u8 size, uint64_t *data)
766 {
767 	u32 val, reg = MT7530_PORT_MIB_COUNTER(port) + offset;
768 
769 	val = mt7530_read(priv, reg);
770 	*data = val;
771 
772 	if (size == 2) {
773 		val = mt7530_read(priv, reg + 4);
774 		*data |= (u64)val << 32;
775 	}
776 }
777 
778 static void
mt7530_get_ethtool_stats(struct dsa_switch * ds,int port,uint64_t * data)779 mt7530_get_ethtool_stats(struct dsa_switch *ds, int port,
780 			 uint64_t *data)
781 {
782 	struct mt7530_priv *priv = ds->priv;
783 	const struct mt7530_mib_desc *mib;
784 	int i;
785 
786 	for (i = 0; i < ARRAY_SIZE(mt7530_mib); i++) {
787 		mib = &mt7530_mib[i];
788 
789 		mt7530_read_port_stats(priv, port, mib->offset, mib->size,
790 				       data + i);
791 	}
792 }
793 
794 static int
mt7530_get_sset_count(struct dsa_switch * ds,int port,int sset)795 mt7530_get_sset_count(struct dsa_switch *ds, int port, int sset)
796 {
797 	if (sset != ETH_SS_STATS)
798 		return 0;
799 
800 	return ARRAY_SIZE(mt7530_mib);
801 }
802 
mt7530_get_eth_mac_stats(struct dsa_switch * ds,int port,struct ethtool_eth_mac_stats * mac_stats)803 static void mt7530_get_eth_mac_stats(struct dsa_switch *ds, int port,
804 				     struct ethtool_eth_mac_stats *mac_stats)
805 {
806 	struct mt7530_priv *priv = ds->priv;
807 
808 	/* MIB counter doesn't provide a FramesTransmittedOK but instead
809 	 * provide stats for Unicast, Broadcast and Multicast frames separately.
810 	 * To simulate a global frame counter, read Unicast and addition Multicast
811 	 * and Broadcast later
812 	 */
813 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_TX_UNICAST, 1,
814 			       &mac_stats->FramesTransmittedOK);
815 
816 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_TX_SINGLE_COLLISION, 1,
817 			       &mac_stats->SingleCollisionFrames);
818 
819 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_TX_MULTIPLE_COLLISION, 1,
820 			       &mac_stats->MultipleCollisionFrames);
821 
822 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_RX_UNICAST, 1,
823 			       &mac_stats->FramesReceivedOK);
824 
825 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_TX_BYTES, 2,
826 			       &mac_stats->OctetsTransmittedOK);
827 
828 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_RX_ALIGN_ERR, 1,
829 			       &mac_stats->AlignmentErrors);
830 
831 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_TX_DEFERRED, 1,
832 			       &mac_stats->FramesWithDeferredXmissions);
833 
834 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_TX_LATE_COLLISION, 1,
835 			       &mac_stats->LateCollisions);
836 
837 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_TX_EXCESSIVE_COLLISION, 1,
838 			       &mac_stats->FramesAbortedDueToXSColls);
839 
840 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_RX_BYTES, 2,
841 			       &mac_stats->OctetsReceivedOK);
842 
843 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_TX_MULTICAST, 1,
844 			       &mac_stats->MulticastFramesXmittedOK);
845 	mac_stats->FramesTransmittedOK += mac_stats->MulticastFramesXmittedOK;
846 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_TX_BROADCAST, 1,
847 			       &mac_stats->BroadcastFramesXmittedOK);
848 	mac_stats->FramesTransmittedOK += mac_stats->BroadcastFramesXmittedOK;
849 
850 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_RX_MULTICAST, 1,
851 			       &mac_stats->MulticastFramesReceivedOK);
852 	mac_stats->FramesReceivedOK += mac_stats->MulticastFramesReceivedOK;
853 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_RX_BROADCAST, 1,
854 			       &mac_stats->BroadcastFramesReceivedOK);
855 	mac_stats->FramesReceivedOK += mac_stats->BroadcastFramesReceivedOK;
856 }
857 
858 static const struct ethtool_rmon_hist_range mt7530_rmon_ranges[] = {
859 	{ 0, 64 },
860 	{ 65, 127 },
861 	{ 128, 255 },
862 	{ 256, 511 },
863 	{ 512, 1023 },
864 	{ 1024, MT7530_MAX_MTU },
865 	{}
866 };
867 
mt7530_get_rmon_stats(struct dsa_switch * ds,int port,struct ethtool_rmon_stats * rmon_stats,const struct ethtool_rmon_hist_range ** ranges)868 static void mt7530_get_rmon_stats(struct dsa_switch *ds, int port,
869 				  struct ethtool_rmon_stats *rmon_stats,
870 				  const struct ethtool_rmon_hist_range **ranges)
871 {
872 	struct mt7530_priv *priv = ds->priv;
873 
874 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_RX_UNDER_SIZE_ERR, 1,
875 			       &rmon_stats->undersize_pkts);
876 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_RX_OVER_SZ_ERR, 1,
877 			       &rmon_stats->oversize_pkts);
878 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_RX_FRAG_ERR, 1,
879 			       &rmon_stats->fragments);
880 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_RX_JABBER_ERR, 1,
881 			       &rmon_stats->jabbers);
882 
883 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_RX_PKT_SZ_64, 1,
884 			       &rmon_stats->hist[0]);
885 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_RX_PKT_SZ_65_TO_127, 1,
886 			       &rmon_stats->hist[1]);
887 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_RX_PKT_SZ_128_TO_255, 1,
888 			       &rmon_stats->hist[2]);
889 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_RX_PKT_SZ_256_TO_511, 1,
890 			       &rmon_stats->hist[3]);
891 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_RX_PKT_SZ_512_TO_1023, 1,
892 			       &rmon_stats->hist[4]);
893 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_RX_PKT_SZ_1024_TO_MAX, 1,
894 			       &rmon_stats->hist[5]);
895 
896 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_TX_PKT_SZ_64, 1,
897 			       &rmon_stats->hist_tx[0]);
898 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_TX_PKT_SZ_65_TO_127, 1,
899 			       &rmon_stats->hist_tx[1]);
900 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_TX_PKT_SZ_128_TO_255, 1,
901 			       &rmon_stats->hist_tx[2]);
902 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_TX_PKT_SZ_256_TO_511, 1,
903 			       &rmon_stats->hist_tx[3]);
904 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_TX_PKT_SZ_512_TO_1023, 1,
905 			       &rmon_stats->hist_tx[4]);
906 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_TX_PKT_SZ_1024_TO_MAX, 1,
907 			       &rmon_stats->hist_tx[5]);
908 
909 	*ranges = mt7530_rmon_ranges;
910 }
911 
mt7530_read_port_stats64(struct mt7530_priv * priv,int port,struct rtnl_link_stats64 * storage)912 static void mt7530_read_port_stats64(struct mt7530_priv *priv, int port,
913 				     struct rtnl_link_stats64 *storage)
914 {
915 	uint64_t data;
916 
917 	/* MIB counter doesn't provide a FramesTransmittedOK but instead
918 	 * provide stats for Unicast, Broadcast and Multicast frames separately.
919 	 * To simulate a global frame counter, read Unicast and addition Multicast
920 	 * and Broadcast later
921 	 */
922 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_RX_UNICAST, 1,
923 			       &storage->rx_packets);
924 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_RX_MULTICAST, 1,
925 			       &storage->multicast);
926 	storage->rx_packets += storage->multicast;
927 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_RX_BROADCAST, 1,
928 			       &data);
929 	storage->rx_packets += data;
930 
931 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_TX_UNICAST, 1,
932 			       &storage->tx_packets);
933 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_TX_MULTICAST, 1,
934 			       &data);
935 	storage->tx_packets += data;
936 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_TX_BROADCAST, 1,
937 			       &data);
938 	storage->tx_packets += data;
939 
940 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_RX_BYTES, 2,
941 			       &storage->rx_bytes);
942 
943 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_TX_BYTES, 2,
944 			       &storage->tx_bytes);
945 
946 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_RX_DROP, 1,
947 			       &storage->rx_dropped);
948 
949 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_TX_DROP, 1,
950 			       &storage->tx_dropped);
951 
952 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_RX_CRC_ERR, 1,
953 			       &storage->rx_crc_errors);
954 }
955 
mt7530_stats_refresh(struct mt7530_priv * priv)956 static void mt7530_stats_refresh(struct mt7530_priv *priv)
957 {
958 	struct rtnl_link_stats64 stats = {};
959 	struct dsa_port *dp;
960 	int port;
961 
962 	dsa_switch_for_each_user_port(dp, priv->ds) {
963 		port = dp->index;
964 
965 		mt7530_read_port_stats64(priv, port, &stats);
966 
967 		spin_lock_bh(&priv->stats_lock);
968 		priv->ports[port].stats = stats;
969 		priv->stats_last = jiffies;
970 		spin_unlock_bh(&priv->stats_lock);
971 	}
972 }
973 
mt7530_stats_poll(struct work_struct * work)974 static void mt7530_stats_poll(struct work_struct *work)
975 {
976 	struct mt7530_priv *priv = container_of(work, struct mt7530_priv,
977 						stats_work.work);
978 
979 	mt7530_stats_refresh(priv);
980 	schedule_delayed_work(&priv->stats_work,
981 			      MT7530_STATS_POLL_INTERVAL);
982 }
983 
mt7530_get_stats64(struct dsa_switch * ds,int port,struct rtnl_link_stats64 * storage)984 static void mt7530_get_stats64(struct dsa_switch *ds, int port,
985 			       struct rtnl_link_stats64 *storage)
986 {
987 	struct mt7530_priv *priv = ds->priv;
988 	bool refresh;
989 
990 	if (priv->bus) {
991 		spin_lock_bh(&priv->stats_lock);
992 		*storage = priv->ports[port].stats;
993 		refresh = time_after(jiffies, priv->stats_last +
994 					      MT7530_STATS_RATE_LIMIT);
995 		spin_unlock_bh(&priv->stats_lock);
996 		if (refresh)
997 			mod_delayed_work(system_percpu_wq,
998 					 &priv->stats_work, 0);
999 	} else {
1000 		mt7530_read_port_stats64(priv, port, storage);
1001 	}
1002 }
1003 
mt7530_get_eth_ctrl_stats(struct dsa_switch * ds,int port,struct ethtool_eth_ctrl_stats * ctrl_stats)1004 static void mt7530_get_eth_ctrl_stats(struct dsa_switch *ds, int port,
1005 				      struct ethtool_eth_ctrl_stats *ctrl_stats)
1006 {
1007 	struct mt7530_priv *priv = ds->priv;
1008 
1009 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_TX_PAUSE, 1,
1010 			       &ctrl_stats->MACControlFramesTransmitted);
1011 
1012 	mt7530_read_port_stats(priv, port, MT7530_PORT_MIB_RX_PAUSE, 1,
1013 			       &ctrl_stats->MACControlFramesReceived);
1014 }
1015 
1016 static int
mt7530_set_ageing_time(struct dsa_switch * ds,unsigned int msecs)1017 mt7530_set_ageing_time(struct dsa_switch *ds, unsigned int msecs)
1018 {
1019 	struct mt7530_priv *priv = ds->priv;
1020 	unsigned int secs = msecs / 1000;
1021 	unsigned int tmp_age_count;
1022 	unsigned int error = -1;
1023 	unsigned int age_count;
1024 	unsigned int age_unit;
1025 
1026 	/* Applied timer is (AGE_CNT + 1) * (AGE_UNIT + 1) seconds.
1027 	 * The DSA core has already validated the range using
1028 	 * ds->ageing_time_min and ds->ageing_time_max.
1029 	 *
1030 	 * Iterate through all possible age_count values to find the closest
1031 	 * pair. Start from 1 because the per-entry aging counter is
1032 	 * initialized to AGE_CNT and a value of 0 means the entry will
1033 	 * never be aged out.
1034 	 */
1035 	for (tmp_age_count = 1; tmp_age_count <= AGE_CNT_MAX; ++tmp_age_count) {
1036 		unsigned int tmp_age_unit = secs / (tmp_age_count + 1) - 1;
1037 
1038 		if (tmp_age_unit <= AGE_UNIT_MAX) {
1039 			unsigned int tmp_error = secs -
1040 				(tmp_age_count + 1) * (tmp_age_unit + 1);
1041 
1042 			/* found a closer pair */
1043 			if (error > tmp_error) {
1044 				error = tmp_error;
1045 				age_count = tmp_age_count;
1046 				age_unit = tmp_age_unit;
1047 			}
1048 
1049 			/* found the exact match, so break the loop */
1050 			if (!error)
1051 				break;
1052 		}
1053 	}
1054 
1055 	mt7530_write(priv, MT7530_AAC, AGE_CNT(age_count) | AGE_UNIT(age_unit));
1056 
1057 	return 0;
1058 }
1059 
mt7530_p5_mode_str(unsigned int mode)1060 static const char *mt7530_p5_mode_str(unsigned int mode)
1061 {
1062 	switch (mode) {
1063 	case MUX_PHY_P0:
1064 		return "MUX PHY P0";
1065 	case MUX_PHY_P4:
1066 		return "MUX PHY P4";
1067 	default:
1068 		return "GMAC5";
1069 	}
1070 }
1071 
mt7530_setup_port5(struct dsa_switch * ds,phy_interface_t interface)1072 static void mt7530_setup_port5(struct dsa_switch *ds, phy_interface_t interface)
1073 {
1074 	struct mt7530_priv *priv = ds->priv;
1075 	u8 tx_delay = 0;
1076 	int val;
1077 
1078 	mutex_lock(&priv->reg_mutex);
1079 
1080 	val = mt7530_read(priv, MT753X_MTRAP);
1081 
1082 	val &= ~MT7530_P5_PHY0_SEL & ~MT7530_P5_MAC_SEL & ~MT7530_P5_RGMII_MODE;
1083 
1084 	switch (priv->p5_mode) {
1085 	/* MUX_PHY_P0: P0 -> P5 -> SoC MAC */
1086 	case MUX_PHY_P0:
1087 		val |= MT7530_P5_PHY0_SEL;
1088 		fallthrough;
1089 
1090 	/* MUX_PHY_P4: P4 -> P5 -> SoC MAC */
1091 	case MUX_PHY_P4:
1092 		/* Setup the MAC by default for the cpu port */
1093 		mt7530_write(priv, MT753X_PMCR_P(5), 0x56300);
1094 		break;
1095 
1096 	/* GMAC5: P5 -> SoC MAC or external PHY */
1097 	default:
1098 		val |= MT7530_P5_MAC_SEL;
1099 		break;
1100 	}
1101 
1102 	/* Setup RGMII settings */
1103 	if (phy_interface_mode_is_rgmii(interface)) {
1104 		val |= MT7530_P5_RGMII_MODE;
1105 
1106 		/* P5 RGMII RX Clock Control: delay setting for 1000M */
1107 		mt7530_write(priv, MT7530_P5RGMIIRXCR, CSR_RGMII_EDGE_ALIGN);
1108 
1109 		/* Don't set delay in DSA mode */
1110 		if (!dsa_is_dsa_port(priv->ds, 5) &&
1111 		    (interface == PHY_INTERFACE_MODE_RGMII_TXID ||
1112 		     interface == PHY_INTERFACE_MODE_RGMII_ID))
1113 			tx_delay = 4; /* n * 0.5 ns */
1114 
1115 		/* P5 RGMII TX Clock Control: delay x */
1116 		mt7530_write(priv, MT7530_P5RGMIITXCR,
1117 			     CSR_RGMII_TXC_CFG(0x10 + tx_delay));
1118 
1119 		/* reduce P5 RGMII Tx driving, 8mA */
1120 		mt7530_write(priv, MT7530_IO_DRV_CR,
1121 			     P5_IO_CLK_DRV(1) | P5_IO_DATA_DRV(1));
1122 	}
1123 
1124 	mt7530_write(priv, MT753X_MTRAP, val);
1125 
1126 	dev_dbg(ds->dev, "Setup P5, HWTRAP=0x%x, mode=%s, phy-mode=%s\n", val,
1127 		mt7530_p5_mode_str(priv->p5_mode), phy_modes(interface));
1128 
1129 	mutex_unlock(&priv->reg_mutex);
1130 }
1131 
1132 /* In Clause 5 of IEEE Std 802-2014, two sublayers of the data link layer (DLL)
1133  * of the Open Systems Interconnection basic reference model (OSI/RM) are
1134  * described; the medium access control (MAC) and logical link control (LLC)
1135  * sublayers. The MAC sublayer is the one facing the physical layer.
1136  *
1137  * In 8.2 of IEEE Std 802.1Q-2022, the Bridge architecture is described. A
1138  * Bridge component comprises a MAC Relay Entity for interconnecting the Ports
1139  * of the Bridge, at least two Ports, and higher layer entities with at least a
1140  * Spanning Tree Protocol Entity included.
1141  *
1142  * Each Bridge Port also functions as an end station and shall provide the MAC
1143  * Service to an LLC Entity. Each instance of the MAC Service is provided to a
1144  * distinct LLC Entity that supports protocol identification, multiplexing, and
1145  * demultiplexing, for protocol data unit (PDU) transmission and reception by
1146  * one or more higher layer entities.
1147  *
1148  * It is described in 8.13.9 of IEEE Std 802.1Q-2022 that in a Bridge, the LLC
1149  * Entity associated with each Bridge Port is modeled as being directly
1150  * connected to the attached Local Area Network (LAN).
1151  *
1152  * On the switch with CPU port architecture, CPU port functions as Management
1153  * Port, and the Management Port functionality is provided by software which
1154  * functions as an end station. Software is connected to an IEEE 802 LAN that is
1155  * wholly contained within the system that incorporates the Bridge. Software
1156  * provides access to the LLC Entity associated with each Bridge Port by the
1157  * value of the source port field on the special tag on the frame received by
1158  * software.
1159  *
1160  * We call frames that carry control information to determine the active
1161  * topology and current extent of each Virtual Local Area Network (VLAN), i.e.,
1162  * spanning tree or Shortest Path Bridging (SPB) and Multiple VLAN Registration
1163  * Protocol Data Units (MVRPDUs), and frames from other link constrained
1164  * protocols, such as Extensible Authentication Protocol over LAN (EAPOL) and
1165  * Link Layer Discovery Protocol (LLDP), link-local frames. They are not
1166  * forwarded by a Bridge. Permanently configured entries in the filtering
1167  * database (FDB) ensure that such frames are discarded by the Forwarding
1168  * Process. In 8.6.3 of IEEE Std 802.1Q-2022, this is described in detail:
1169  *
1170  * Each of the reserved MAC addresses specified in Table 8-1
1171  * (01-80-C2-00-00-[00,01,02,03,04,05,06,07,08,09,0A,0B,0C,0D,0E,0F]) shall be
1172  * permanently configured in the FDB in C-VLAN components and ERs.
1173  *
1174  * Each of the reserved MAC addresses specified in Table 8-2
1175  * (01-80-C2-00-00-[01,02,03,04,05,06,07,08,09,0A,0E]) shall be permanently
1176  * configured in the FDB in S-VLAN components.
1177  *
1178  * Each of the reserved MAC addresses specified in Table 8-3
1179  * (01-80-C2-00-00-[01,02,04,0E]) shall be permanently configured in the FDB in
1180  * TPMR components.
1181  *
1182  * The FDB entries for reserved MAC addresses shall specify filtering for all
1183  * Bridge Ports and all VIDs. Management shall not provide the capability to
1184  * modify or remove entries for reserved MAC addresses.
1185  *
1186  * The addresses in Table 8-1, Table 8-2, and Table 8-3 determine the scope of
1187  * propagation of PDUs within a Bridged Network, as follows:
1188  *
1189  *   The Nearest Bridge group address (01-80-C2-00-00-0E) is an address that no
1190  *   conformant Two-Port MAC Relay (TPMR) component, Service VLAN (S-VLAN)
1191  *   component, Customer VLAN (C-VLAN) component, or MAC Bridge can forward.
1192  *   PDUs transmitted using this destination address, or any other addresses
1193  *   that appear in Table 8-1, Table 8-2, and Table 8-3
1194  *   (01-80-C2-00-00-[00,01,02,03,04,05,06,07,08,09,0A,0B,0C,0D,0E,0F]), can
1195  *   therefore travel no further than those stations that can be reached via a
1196  *   single individual LAN from the originating station.
1197  *
1198  *   The Nearest non-TPMR Bridge group address (01-80-C2-00-00-03), is an
1199  *   address that no conformant S-VLAN component, C-VLAN component, or MAC
1200  *   Bridge can forward; however, this address is relayed by a TPMR component.
1201  *   PDUs using this destination address, or any of the other addresses that
1202  *   appear in both Table 8-1 and Table 8-2 but not in Table 8-3
1203  *   (01-80-C2-00-00-[00,03,05,06,07,08,09,0A,0B,0C,0D,0F]), will be relayed by
1204  *   any TPMRs but will propagate no further than the nearest S-VLAN component,
1205  *   C-VLAN component, or MAC Bridge.
1206  *
1207  *   The Nearest Customer Bridge group address (01-80-C2-00-00-00) is an address
1208  *   that no conformant C-VLAN component, MAC Bridge can forward; however, it is
1209  *   relayed by TPMR components and S-VLAN components. PDUs using this
1210  *   destination address, or any of the other addresses that appear in Table 8-1
1211  *   but not in either Table 8-2 or Table 8-3 (01-80-C2-00-00-[00,0B,0C,0D,0F]),
1212  *   will be relayed by TPMR components and S-VLAN components but will propagate
1213  *   no further than the nearest C-VLAN component or MAC Bridge.
1214  *
1215  * Because the LLC Entity associated with each Bridge Port is provided via CPU
1216  * port, we must not filter these frames but forward them to CPU port.
1217  *
1218  * In a Bridge, the transmission Port is majorly decided by ingress and egress
1219  * rules, FDB, and spanning tree Port State functions of the Forwarding Process.
1220  * For link-local frames, only CPU port should be designated as destination port
1221  * in the FDB, and the other functions of the Forwarding Process must not
1222  * interfere with the decision of the transmission Port. We call this process
1223  * trapping frames to CPU port.
1224  *
1225  * Therefore, on the switch with CPU port architecture, link-local frames must
1226  * be trapped to CPU port, and certain link-local frames received by a Port of a
1227  * Bridge comprising a TPMR component or an S-VLAN component must be excluded
1228  * from it.
1229  *
1230  * A Bridge of the switch with CPU port architecture cannot comprise a Two-Port
1231  * MAC Relay (TPMR) component as a TPMR component supports only a subset of the
1232  * functionality of a MAC Bridge. A Bridge comprising two Ports (Management Port
1233  * doesn't count) of this architecture will either function as a standard MAC
1234  * Bridge or a standard VLAN Bridge.
1235  *
1236  * Therefore, a Bridge of this architecture can only comprise S-VLAN components,
1237  * C-VLAN components, or MAC Bridge components. Since there's no TPMR component,
1238  * we don't need to relay PDUs using the destination addresses specified on the
1239  * Nearest non-TPMR section, and the proportion of the Nearest Customer Bridge
1240  * section where they must be relayed by TPMR components.
1241  *
1242  * One option to trap link-local frames to CPU port is to add static FDB entries
1243  * with CPU port designated as destination port. However, because that
1244  * Independent VLAN Learning (IVL) is being used on every VID, each entry only
1245  * applies to a single VLAN Identifier (VID). For a Bridge comprising a MAC
1246  * Bridge component or a C-VLAN component, there would have to be 16 times 4096
1247  * entries. This switch intellectual property can only hold a maximum of 2048
1248  * entries. Using this option, there also isn't a mechanism to prevent
1249  * link-local frames from being discarded when the spanning tree Port State of
1250  * the reception Port is discarding.
1251  *
1252  * The remaining option is to utilise the BPC, RGAC1, RGAC2, RGAC3, and RGAC4
1253  * registers. Whilst this applies to every VID, it doesn't contain all of the
1254  * reserved MAC addresses without affecting the remaining Standard Group MAC
1255  * Addresses. The REV_UN frame tag utilised using the RGAC4 register covers the
1256  * remaining 01-80-C2-00-00-[04,05,06,07,08,09,0A,0B,0C,0D,0F] destination
1257  * addresses. It also includes the 01-80-C2-00-00-22 to 01-80-C2-00-00-FF
1258  * destination addresses which may be relayed by MAC Bridges or VLAN Bridges.
1259  * The latter option provides better but not complete conformance.
1260  *
1261  * This switch intellectual property also does not provide a mechanism to trap
1262  * link-local frames with specific destination addresses to CPU port by Bridge,
1263  * to conform to the filtering rules for the distinct Bridge components.
1264  *
1265  * Therefore, regardless of the type of the Bridge component, link-local frames
1266  * with these destination addresses will be trapped to CPU port:
1267  *
1268  * 01-80-C2-00-00-[00,01,02,03,0E]
1269  *
1270  * In a Bridge comprising a MAC Bridge component or a C-VLAN component:
1271  *
1272  *   Link-local frames with these destination addresses won't be trapped to CPU
1273  *   port which won't conform to IEEE Std 802.1Q-2022:
1274  *
1275  *   01-80-C2-00-00-[04,05,06,07,08,09,0A,0B,0C,0D,0F]
1276  *
1277  * In a Bridge comprising an S-VLAN component:
1278  *
1279  *   Link-local frames with these destination addresses will be trapped to CPU
1280  *   port which won't conform to IEEE Std 802.1Q-2022:
1281  *
1282  *   01-80-C2-00-00-00
1283  *
1284  *   Link-local frames with these destination addresses won't be trapped to CPU
1285  *   port which won't conform to IEEE Std 802.1Q-2022:
1286  *
1287  *   01-80-C2-00-00-[04,05,06,07,08,09,0A]
1288  *
1289  * To trap link-local frames to CPU port as conformant as this switch
1290  * intellectual property can allow, link-local frames are made to be regarded as
1291  * Bridge Protocol Data Units (BPDUs). This is because this switch intellectual
1292  * property only lets the frames regarded as BPDUs bypass the spanning tree Port
1293  * State function of the Forwarding Process.
1294  *
1295  * The only remaining interference is the ingress rules. When the reception Port
1296  * has no PVID assigned on software, VLAN-untagged frames won't be allowed in.
1297  * There doesn't seem to be a mechanism on the switch intellectual property to
1298  * have link-local frames bypass this function of the Forwarding Process.
1299  */
1300 static void
mt753x_trap_frames(struct mt7530_priv * priv)1301 mt753x_trap_frames(struct mt7530_priv *priv)
1302 {
1303 	/* Trap 802.1X PAE frames and BPDUs to the CPU port(s) and egress
1304 	 * them with the EG_TAG attribute set to disabled (system default)
1305 	 * so that any VLAN tags in the frame are not modified by the
1306 	 * switch egress VLAN tag processing. This preserves VLAN tags
1307 	 * for reception on VLAN sub-interfaces.
1308 	 */
1309 	mt7530_rmw(priv, MT753X_BPC,
1310 		   PAE_BPDU_FR | PAE_EG_TAG_MASK | PAE_PORT_FW_MASK |
1311 			   BPDU_EG_TAG_MASK | BPDU_PORT_FW_MASK,
1312 		   PAE_BPDU_FR | PAE_EG_TAG(MT7530_VLAN_EG_DISABLED) |
1313 			   PAE_PORT_FW(TO_CPU_FW_CPU_ONLY) |
1314 			   BPDU_EG_TAG(MT7530_VLAN_EG_DISABLED) |
1315 			   TO_CPU_FW_CPU_ONLY);
1316 
1317 	/* Trap frames with :01 and :02 MAC DAs to the CPU port(s) and
1318 	 * egress them with EG_TAG disabled.
1319 	 */
1320 	mt7530_rmw(priv, MT753X_RGAC1,
1321 		   R02_BPDU_FR | R02_EG_TAG_MASK | R02_PORT_FW_MASK |
1322 			   R01_BPDU_FR | R01_EG_TAG_MASK | R01_PORT_FW_MASK,
1323 		   R02_BPDU_FR | R02_EG_TAG(MT7530_VLAN_EG_DISABLED) |
1324 			   R02_PORT_FW(TO_CPU_FW_CPU_ONLY) | R01_BPDU_FR |
1325 			   R01_EG_TAG(MT7530_VLAN_EG_DISABLED) |
1326 			   TO_CPU_FW_CPU_ONLY);
1327 
1328 	/* Trap frames with :03 and :0E MAC DAs to the CPU port(s) and
1329 	 * egress them with EG_TAG disabled.
1330 	 */
1331 	mt7530_rmw(priv, MT753X_RGAC2,
1332 		   R0E_BPDU_FR | R0E_EG_TAG_MASK | R0E_PORT_FW_MASK |
1333 			   R03_BPDU_FR | R03_EG_TAG_MASK | R03_PORT_FW_MASK,
1334 		   R0E_BPDU_FR | R0E_EG_TAG(MT7530_VLAN_EG_DISABLED) |
1335 			   R0E_PORT_FW(TO_CPU_FW_CPU_ONLY) | R03_BPDU_FR |
1336 			   R03_EG_TAG(MT7530_VLAN_EG_DISABLED) |
1337 			   TO_CPU_FW_CPU_ONLY);
1338 }
1339 
1340 static void
mt753x_cpu_port_enable(struct dsa_switch * ds,int port)1341 mt753x_cpu_port_enable(struct dsa_switch *ds, int port)
1342 {
1343 	struct mt7530_priv *priv = ds->priv;
1344 
1345 	/* Enable Mediatek header mode on the cpu port */
1346 	mt7530_write(priv, MT7530_PVC_P(port),
1347 		     PORT_SPEC_TAG);
1348 
1349 	/* Enable flooding on the CPU port */
1350 	mt7530_set(priv, MT753X_MFC, BC_FFP(BIT(port)) | UNM_FFP(BIT(port)) |
1351 		   UNU_FFP(BIT(port)));
1352 
1353 	/* Add the CPU port to the CPU port bitmap for MT7531 and the switch on
1354 	 * the MT7988 SoC. Trapped frames will be forwarded to the CPU port that
1355 	 * is affine to the inbound user port.
1356 	 */
1357 	if (priv->id == ID_MT7531 || priv->id == ID_MT7988 ||
1358 	    priv->id == ID_EN7581 || priv->id == ID_AN7583)
1359 		mt7530_set(priv, MT7531_CFC, MT7531_CPU_PMAP(BIT(port)));
1360 
1361 	/* CPU port gets connected to all user ports of
1362 	 * the switch.
1363 	 */
1364 	mt7530_write(priv, MT7530_PCR_P(port),
1365 		     PCR_MATRIX(dsa_user_ports(priv->ds)));
1366 
1367 	/* Set to fallback mode for independent VLAN learning */
1368 	mt7530_rmw(priv, MT7530_PCR_P(port), PCR_PORT_VLAN_MASK,
1369 		   MT7530_PORT_FALLBACK_MODE);
1370 }
1371 
1372 static int
mt7530_port_enable(struct dsa_switch * ds,int port,struct phy_device * phy)1373 mt7530_port_enable(struct dsa_switch *ds, int port,
1374 		   struct phy_device *phy)
1375 {
1376 	struct dsa_port *dp = dsa_to_port(ds, port);
1377 	struct mt7530_priv *priv = ds->priv;
1378 
1379 	mutex_lock(&priv->reg_mutex);
1380 
1381 	/* Allow the user port gets connected to the cpu port and also
1382 	 * restore the port matrix if the port is the member of a certain
1383 	 * bridge.
1384 	 */
1385 	if (dsa_port_is_user(dp)) {
1386 		struct dsa_port *cpu_dp = dp->cpu_dp;
1387 
1388 		priv->ports[port].pm |= PCR_MATRIX(BIT(cpu_dp->index));
1389 	}
1390 	priv->ports[port].enable = true;
1391 	mt7530_rmw(priv, MT7530_PCR_P(port), PCR_MATRIX_MASK,
1392 		   priv->ports[port].pm);
1393 
1394 	mutex_unlock(&priv->reg_mutex);
1395 
1396 	if (priv->id != ID_MT7530 && priv->id != ID_MT7621)
1397 		return 0;
1398 
1399 	if (port == 5)
1400 		mt7530_clear(priv, MT753X_MTRAP, MT7530_P5_DIS);
1401 	else if (port == 6)
1402 		mt7530_clear(priv, MT753X_MTRAP, MT7530_P6_DIS);
1403 
1404 	return 0;
1405 }
1406 
1407 static void
mt7530_port_disable(struct dsa_switch * ds,int port)1408 mt7530_port_disable(struct dsa_switch *ds, int port)
1409 {
1410 	struct mt7530_priv *priv = ds->priv;
1411 
1412 	mutex_lock(&priv->reg_mutex);
1413 
1414 	/* Clear up all port matrix which could be restored in the next
1415 	 * enablement for the port.
1416 	 */
1417 	priv->ports[port].enable = false;
1418 	mt7530_rmw(priv, MT7530_PCR_P(port), PCR_MATRIX_MASK,
1419 		   PCR_MATRIX_CLR);
1420 
1421 	mutex_unlock(&priv->reg_mutex);
1422 
1423 	if (priv->id != ID_MT7530 && priv->id != ID_MT7621)
1424 		return;
1425 
1426 	/* Do not set MT7530_P5_DIS when port 5 is being used for PHY muxing. */
1427 	if (port == 5 && priv->p5_mode == GMAC5)
1428 		mt7530_set(priv, MT753X_MTRAP, MT7530_P5_DIS);
1429 	else if (port == 6)
1430 		mt7530_set(priv, MT753X_MTRAP, MT7530_P6_DIS);
1431 }
1432 
1433 static int
mt7530_port_change_mtu(struct dsa_switch * ds,int port,int new_mtu)1434 mt7530_port_change_mtu(struct dsa_switch *ds, int port, int new_mtu)
1435 {
1436 	struct mt7530_priv *priv = ds->priv;
1437 	int length;
1438 	u32 val;
1439 
1440 	/* When a new MTU is set, DSA always set the CPU port's MTU to the
1441 	 * largest MTU of the user ports. Because the switch only has a global
1442 	 * RX length register, only allowing CPU port here is enough.
1443 	 */
1444 	if (!dsa_is_cpu_port(ds, port))
1445 		return 0;
1446 
1447 	mt7530_mutex_lock(priv);
1448 
1449 	val = mt7530_mii_read(priv, MT7530_GMACCR);
1450 	val &= ~MAX_RX_PKT_LEN_MASK;
1451 
1452 	/* RX length also includes Ethernet header, MTK tag, and FCS length */
1453 	length = new_mtu + ETH_HLEN + MTK_HDR_LEN + ETH_FCS_LEN;
1454 	if (length <= 1522) {
1455 		val |= MAX_RX_PKT_LEN_1522;
1456 	} else if (length <= 1536) {
1457 		val |= MAX_RX_PKT_LEN_1536;
1458 	} else if (length <= 1552) {
1459 		val |= MAX_RX_PKT_LEN_1552;
1460 	} else {
1461 		val &= ~MAX_RX_JUMBO_MASK;
1462 		val |= MAX_RX_JUMBO(DIV_ROUND_UP(length, 1024));
1463 		val |= MAX_RX_PKT_LEN_JUMBO;
1464 	}
1465 
1466 	mt7530_mii_write(priv, MT7530_GMACCR, val);
1467 
1468 	mt7530_mutex_unlock(priv);
1469 
1470 	return 0;
1471 }
1472 
1473 static int
mt7530_port_max_mtu(struct dsa_switch * ds,int port)1474 mt7530_port_max_mtu(struct dsa_switch *ds, int port)
1475 {
1476 	return MT7530_MAX_MTU;
1477 }
1478 
1479 static void
mt7530_stp_state_set(struct dsa_switch * ds,int port,u8 state)1480 mt7530_stp_state_set(struct dsa_switch *ds, int port, u8 state)
1481 {
1482 	struct mt7530_priv *priv = ds->priv;
1483 	u32 stp_state;
1484 
1485 	switch (state) {
1486 	case BR_STATE_DISABLED:
1487 		stp_state = MT7530_STP_DISABLED;
1488 		break;
1489 	case BR_STATE_BLOCKING:
1490 		stp_state = MT7530_STP_BLOCKING;
1491 		break;
1492 	case BR_STATE_LISTENING:
1493 		stp_state = MT7530_STP_LISTENING;
1494 		break;
1495 	case BR_STATE_LEARNING:
1496 		stp_state = MT7530_STP_LEARNING;
1497 		break;
1498 	case BR_STATE_FORWARDING:
1499 	default:
1500 		stp_state = MT7530_STP_FORWARDING;
1501 		break;
1502 	}
1503 
1504 	mt7530_rmw(priv, MT7530_SSP_P(port), FID_PST_MASK(FID_BRIDGED),
1505 		   FID_PST(FID_BRIDGED, stp_state));
1506 }
1507 
mt7530_update_port_member(struct mt7530_priv * priv,int port,const struct net_device * bridge_dev,bool join)1508 static void mt7530_update_port_member(struct mt7530_priv *priv, int port,
1509 				      const struct net_device *bridge_dev,
1510 				      bool join) __must_hold(&priv->reg_mutex)
1511 {
1512 	struct dsa_port *dp = dsa_to_port(priv->ds, port), *other_dp;
1513 	struct mt7530_port *p = &priv->ports[port], *other_p;
1514 	struct dsa_port *cpu_dp = dp->cpu_dp;
1515 	u32 port_bitmap = BIT(cpu_dp->index);
1516 	int other_port;
1517 	bool isolated;
1518 
1519 	dsa_switch_for_each_user_port(other_dp, priv->ds) {
1520 		other_port = other_dp->index;
1521 		other_p = &priv->ports[other_port];
1522 
1523 		if (dp == other_dp)
1524 			continue;
1525 
1526 		/* Add/remove this port to/from the port matrix of the other
1527 		 * ports in the same bridge. If the port is disabled, port
1528 		 * matrix is kept and not being setup until the port becomes
1529 		 * enabled.
1530 		 */
1531 		if (!dsa_port_offloads_bridge_dev(other_dp, bridge_dev))
1532 			continue;
1533 
1534 		isolated = p->isolated && other_p->isolated;
1535 
1536 		if (join && !isolated) {
1537 			other_p->pm |= PCR_MATRIX(BIT(port));
1538 			port_bitmap |= BIT(other_port);
1539 		} else {
1540 			other_p->pm &= ~PCR_MATRIX(BIT(port));
1541 		}
1542 
1543 		if (other_p->enable)
1544 			mt7530_rmw(priv, MT7530_PCR_P(other_port),
1545 				   PCR_MATRIX_MASK, other_p->pm);
1546 	}
1547 
1548 	/* Add/remove the all other ports to this port matrix. For !join
1549 	 * (leaving the bridge), only the CPU port will remain in the port matrix
1550 	 * of this port.
1551 	 */
1552 	p->pm = PCR_MATRIX(port_bitmap);
1553 	if (priv->ports[port].enable)
1554 		mt7530_rmw(priv, MT7530_PCR_P(port), PCR_MATRIX_MASK, p->pm);
1555 }
1556 
1557 static int
mt7530_port_pre_bridge_flags(struct dsa_switch * ds,int port,struct switchdev_brport_flags flags,struct netlink_ext_ack * extack)1558 mt7530_port_pre_bridge_flags(struct dsa_switch *ds, int port,
1559 			     struct switchdev_brport_flags flags,
1560 			     struct netlink_ext_ack *extack)
1561 {
1562 	if (flags.mask & ~(BR_LEARNING | BR_FLOOD | BR_MCAST_FLOOD |
1563 			   BR_BCAST_FLOOD | BR_ISOLATED))
1564 		return -EINVAL;
1565 
1566 	return 0;
1567 }
1568 
1569 static int
mt7530_port_bridge_flags(struct dsa_switch * ds,int port,struct switchdev_brport_flags flags,struct netlink_ext_ack * extack)1570 mt7530_port_bridge_flags(struct dsa_switch *ds, int port,
1571 			 struct switchdev_brport_flags flags,
1572 			 struct netlink_ext_ack *extack)
1573 {
1574 	struct mt7530_priv *priv = ds->priv;
1575 
1576 	if (flags.mask & BR_LEARNING)
1577 		mt7530_rmw(priv, MT7530_PSC_P(port), SA_DIS,
1578 			   flags.val & BR_LEARNING ? 0 : SA_DIS);
1579 
1580 	if (flags.mask & BR_FLOOD)
1581 		mt7530_rmw(priv, MT753X_MFC, UNU_FFP(BIT(port)),
1582 			   flags.val & BR_FLOOD ? UNU_FFP(BIT(port)) : 0);
1583 
1584 	if (flags.mask & BR_MCAST_FLOOD)
1585 		mt7530_rmw(priv, MT753X_MFC, UNM_FFP(BIT(port)),
1586 			   flags.val & BR_MCAST_FLOOD ? UNM_FFP(BIT(port)) : 0);
1587 
1588 	if (flags.mask & BR_BCAST_FLOOD)
1589 		mt7530_rmw(priv, MT753X_MFC, BC_FFP(BIT(port)),
1590 			   flags.val & BR_BCAST_FLOOD ? BC_FFP(BIT(port)) : 0);
1591 
1592 	if (flags.mask & BR_ISOLATED) {
1593 		struct dsa_port *dp = dsa_to_port(ds, port);
1594 		struct net_device *bridge_dev = dsa_port_bridge_dev_get(dp);
1595 
1596 		priv->ports[port].isolated = !!(flags.val & BR_ISOLATED);
1597 
1598 		mutex_lock(&priv->reg_mutex);
1599 		mt7530_update_port_member(priv, port, bridge_dev, true);
1600 		mutex_unlock(&priv->reg_mutex);
1601 	}
1602 
1603 	return 0;
1604 }
1605 
1606 static int
mt7530_port_bridge_join(struct dsa_switch * ds,int port,struct dsa_bridge bridge,bool * tx_fwd_offload,struct netlink_ext_ack * extack)1607 mt7530_port_bridge_join(struct dsa_switch *ds, int port,
1608 			struct dsa_bridge bridge, bool *tx_fwd_offload,
1609 			struct netlink_ext_ack *extack)
1610 {
1611 	struct mt7530_priv *priv = ds->priv;
1612 
1613 	mutex_lock(&priv->reg_mutex);
1614 
1615 	mt7530_update_port_member(priv, port, bridge.dev, true);
1616 
1617 	/* Set to fallback mode for independent VLAN learning */
1618 	mt7530_rmw(priv, MT7530_PCR_P(port), PCR_PORT_VLAN_MASK,
1619 		   MT7530_PORT_FALLBACK_MODE);
1620 
1621 	mutex_unlock(&priv->reg_mutex);
1622 
1623 	return 0;
1624 }
1625 
1626 static int
mt7530_vlan_cmd(struct mt7530_priv * priv,enum mt7530_vlan_cmd cmd,u16 vid)1627 mt7530_vlan_cmd(struct mt7530_priv *priv, enum mt7530_vlan_cmd cmd, u16 vid)
1628 {
1629 	struct mt7530_dummy_poll p;
1630 	u32 val;
1631 	int ret;
1632 
1633 	val = VTCR_BUSY | VTCR_FUNC(cmd) | vid;
1634 	mt7530_write(priv, MT7530_VTCR, val);
1635 
1636 	INIT_MT7530_DUMMY_POLL(&p, priv, MT7530_VTCR);
1637 	ret = readx_poll_timeout(_mt7530_read, &p, val,
1638 				 !(val & VTCR_BUSY), 20, 20000);
1639 	if (ret < 0) {
1640 		dev_err(priv->dev, "poll timeout\n");
1641 		return ret;
1642 	}
1643 
1644 	val = mt7530_read(priv, MT7530_VTCR);
1645 	if (val & VTCR_INVALID) {
1646 		dev_err(priv->dev, "read VTCR invalid\n");
1647 		return -EINVAL;
1648 	}
1649 
1650 	return 0;
1651 }
1652 
1653 static int
mt7530_setup_vlan0(struct mt7530_priv * priv)1654 mt7530_setup_vlan0(struct mt7530_priv *priv)
1655 {
1656 	u32 val;
1657 
1658 	/* Validate the entry with independent learning, keep the original
1659 	 * ingress tag attribute.
1660 	 */
1661 	val = IVL_MAC | EG_CON | PORT_MEM(MT7530_ALL_MEMBERS) | FID(FID_BRIDGED) |
1662 	      VLAN_VALID;
1663 	mt7530_write(priv, MT7530_VAWD1, val);
1664 	mt7530_write(priv, MT7530_VAWD2, 0);
1665 
1666 	return mt7530_vlan_cmd(priv, MT7530_VTCR_WR_VID, 0);
1667 }
1668 
1669 static void
mt7530_port_set_vlan_unaware(struct dsa_switch * ds,int port)1670 mt7530_port_set_vlan_unaware(struct dsa_switch *ds, int port)
1671 {
1672 	struct mt7530_priv *priv = ds->priv;
1673 	bool all_user_ports_removed = true;
1674 	int i;
1675 
1676 	/* This is called after .port_bridge_leave when leaving a VLAN-aware
1677 	 * bridge. Don't set standalone ports to fallback mode.
1678 	 */
1679 	if (dsa_port_bridge_dev_get(dsa_to_port(ds, port)))
1680 		mt7530_rmw(priv, MT7530_PCR_P(port), PCR_PORT_VLAN_MASK,
1681 			   MT7530_PORT_FALLBACK_MODE);
1682 
1683 	mt7530_rmw(priv, MT7530_PVC_P(port),
1684 		   VLAN_ATTR_MASK | PVC_EG_TAG_MASK | ACC_FRM_MASK,
1685 		   VLAN_ATTR(MT7530_VLAN_TRANSPARENT) |
1686 		   PVC_EG_TAG(MT7530_VLAN_EG_CONSISTENT) |
1687 		   MT7530_VLAN_ACC_ALL);
1688 
1689 	/* Set PVID to 0 */
1690 	mt7530_rmw(priv, MT7530_PPBV1_P(port), G0_PORT_VID_MASK,
1691 		   G0_PORT_VID_DEF);
1692 
1693 	for (i = 0; i < priv->ds->num_ports; i++) {
1694 		if (i == port)
1695 			continue;
1696 		if (dsa_is_user_port(ds, i) &&
1697 		    dsa_port_is_vlan_filtering(dsa_to_port(ds, i))) {
1698 			all_user_ports_removed = false;
1699 			break;
1700 		}
1701 	}
1702 
1703 	/* CPU port also does the same thing until all user ports belonging to
1704 	 * the CPU port get out of VLAN filtering mode.
1705 	 */
1706 	if (all_user_ports_removed) {
1707 		mutex_lock(&priv->reg_mutex);
1708 		mt7530_setup_vlan0(priv);
1709 		mutex_unlock(&priv->reg_mutex);
1710 	}
1711 }
1712 
1713 static void
mt7530_port_set_vlan_aware(struct dsa_switch * ds,int port)1714 mt7530_port_set_vlan_aware(struct dsa_switch *ds, int port)
1715 {
1716 	struct mt7530_priv *priv = ds->priv;
1717 
1718 	/* Trapped into security mode allows packet forwarding through VLAN
1719 	 * table lookup.
1720 	 */
1721 	if (dsa_is_user_port(ds, port)) {
1722 		mt7530_rmw(priv, MT7530_PCR_P(port), PCR_PORT_VLAN_MASK,
1723 			   MT7530_PORT_SECURITY_MODE);
1724 		mt7530_rmw(priv, MT7530_PPBV1_P(port), G0_PORT_VID_MASK,
1725 			   G0_PORT_VID(priv->ports[port].pvid));
1726 
1727 		/* Only accept tagged frames if PVID is not set */
1728 		if (!priv->ports[port].pvid)
1729 			mt7530_rmw(priv, MT7530_PVC_P(port), ACC_FRM_MASK,
1730 				   MT7530_VLAN_ACC_TAGGED);
1731 
1732 		/* Set the port as a user port which is to be able to recognize
1733 		 * VID from incoming packets before fetching entry within the
1734 		 * VLAN table.
1735 		 */
1736 		mt7530_rmw(priv, MT7530_PVC_P(port),
1737 			   VLAN_ATTR_MASK | PVC_EG_TAG_MASK,
1738 			   VLAN_ATTR(MT7530_VLAN_USER) |
1739 			   PVC_EG_TAG(MT7530_VLAN_EG_DISABLED));
1740 	} else {
1741 		/* Also set CPU ports to the "user" VLAN port attribute, to
1742 		 * allow VLAN classification, but keep the EG_TAG attribute as
1743 		 * "consistent" (i.o.w. don't change its value) for packets
1744 		 * received by the switch from the CPU, so that tagged packets
1745 		 * are forwarded to user ports as tagged, and untagged as
1746 		 * untagged.
1747 		 */
1748 		mt7530_rmw(priv, MT7530_PVC_P(port), VLAN_ATTR_MASK,
1749 			   VLAN_ATTR(MT7530_VLAN_USER));
1750 	}
1751 }
1752 
1753 static void
mt7530_port_bridge_leave(struct dsa_switch * ds,int port,struct dsa_bridge bridge)1754 mt7530_port_bridge_leave(struct dsa_switch *ds, int port,
1755 			 struct dsa_bridge bridge)
1756 {
1757 	struct mt7530_priv *priv = ds->priv;
1758 
1759 	mutex_lock(&priv->reg_mutex);
1760 
1761 	mt7530_update_port_member(priv, port, bridge.dev, false);
1762 
1763 	/* When a port is removed from the bridge, the port would be set up
1764 	 * back to the default as is at initial boot which is a VLAN-unaware
1765 	 * port.
1766 	 */
1767 	mt7530_rmw(priv, MT7530_PCR_P(port), PCR_PORT_VLAN_MASK,
1768 		   MT7530_PORT_MATRIX_MODE);
1769 
1770 	mutex_unlock(&priv->reg_mutex);
1771 }
1772 
1773 static int
mt7530_port_fdb_add(struct dsa_switch * ds,int port,const unsigned char * addr,u16 vid,struct dsa_db db)1774 mt7530_port_fdb_add(struct dsa_switch *ds, int port,
1775 		    const unsigned char *addr, u16 vid,
1776 		    struct dsa_db db)
1777 {
1778 	struct mt7530_priv *priv = ds->priv;
1779 	int ret;
1780 	u8 port_mask = BIT(port);
1781 
1782 	mutex_lock(&priv->reg_mutex);
1783 	mt7530_fdb_write(priv, vid, port_mask, addr, -1, STATIC_ENT);
1784 	ret = mt7530_fdb_cmd(priv, MT7530_FDB_WRITE, NULL);
1785 	mutex_unlock(&priv->reg_mutex);
1786 
1787 	return ret;
1788 }
1789 
1790 static int
mt7530_port_fdb_del(struct dsa_switch * ds,int port,const unsigned char * addr,u16 vid,struct dsa_db db)1791 mt7530_port_fdb_del(struct dsa_switch *ds, int port,
1792 		    const unsigned char *addr, u16 vid,
1793 		    struct dsa_db db)
1794 {
1795 	struct mt7530_priv *priv = ds->priv;
1796 	int ret;
1797 	u8 port_mask = BIT(port);
1798 
1799 	mutex_lock(&priv->reg_mutex);
1800 	mt7530_fdb_write(priv, vid, port_mask, addr, -1, STATIC_EMP);
1801 	ret = mt7530_fdb_cmd(priv, MT7530_FDB_WRITE, NULL);
1802 	mutex_unlock(&priv->reg_mutex);
1803 
1804 	return ret;
1805 }
1806 
1807 static int
mt7530_port_fdb_dump(struct dsa_switch * ds,int port,dsa_fdb_dump_cb_t * cb,void * data)1808 mt7530_port_fdb_dump(struct dsa_switch *ds, int port,
1809 		     dsa_fdb_dump_cb_t *cb, void *data)
1810 {
1811 	struct mt7530_priv *priv = ds->priv;
1812 	struct mt7530_fdb _fdb = { 0 };
1813 	int cnt = MT7530_NUM_FDB_RECORDS;
1814 	int ret = 0;
1815 	u32 rsp = 0;
1816 
1817 	mutex_lock(&priv->reg_mutex);
1818 
1819 	ret = mt7530_fdb_cmd(priv, MT7530_FDB_START, &rsp);
1820 	if (ret < 0)
1821 		goto err;
1822 
1823 	do {
1824 		if (rsp & ATC_SRCH_HIT) {
1825 			mt7530_fdb_read(priv, &_fdb);
1826 			if (_fdb.port_mask & BIT(port)) {
1827 				ret = cb(_fdb.mac, _fdb.vid, _fdb.noarp,
1828 					 data);
1829 				if (ret < 0)
1830 					break;
1831 			}
1832 		}
1833 	} while (--cnt &&
1834 		 !(rsp & ATC_SRCH_END) &&
1835 		 !mt7530_fdb_cmd(priv, MT7530_FDB_NEXT, &rsp));
1836 err:
1837 	mutex_unlock(&priv->reg_mutex);
1838 
1839 	return 0;
1840 }
1841 
1842 static int
mt7530_port_mdb_add(struct dsa_switch * ds,int port,const struct switchdev_obj_port_mdb * mdb,struct dsa_db db)1843 mt7530_port_mdb_add(struct dsa_switch *ds, int port,
1844 		    const struct switchdev_obj_port_mdb *mdb,
1845 		    struct dsa_db db)
1846 {
1847 	struct mt7530_priv *priv = ds->priv;
1848 	const u8 *addr = mdb->addr;
1849 	u16 vid = mdb->vid;
1850 	u8 port_mask = 0;
1851 	int ret;
1852 
1853 	mutex_lock(&priv->reg_mutex);
1854 
1855 	mt7530_fdb_write(priv, vid, 0, addr, 0, STATIC_EMP);
1856 	if (!mt7530_fdb_cmd(priv, MT7530_FDB_READ, NULL))
1857 		port_mask = (mt7530_read(priv, MT7530_ATRD) >> PORT_MAP)
1858 			    & PORT_MAP_MASK;
1859 
1860 	port_mask |= BIT(port);
1861 	mt7530_fdb_write(priv, vid, port_mask, addr, -1, STATIC_ENT);
1862 	ret = mt7530_fdb_cmd(priv, MT7530_FDB_WRITE, NULL);
1863 
1864 	mutex_unlock(&priv->reg_mutex);
1865 
1866 	return ret;
1867 }
1868 
1869 static int
mt7530_port_mdb_del(struct dsa_switch * ds,int port,const struct switchdev_obj_port_mdb * mdb,struct dsa_db db)1870 mt7530_port_mdb_del(struct dsa_switch *ds, int port,
1871 		    const struct switchdev_obj_port_mdb *mdb,
1872 		    struct dsa_db db)
1873 {
1874 	struct mt7530_priv *priv = ds->priv;
1875 	const u8 *addr = mdb->addr;
1876 	u16 vid = mdb->vid;
1877 	u8 port_mask = 0;
1878 	int ret;
1879 
1880 	mutex_lock(&priv->reg_mutex);
1881 
1882 	mt7530_fdb_write(priv, vid, 0, addr, 0, STATIC_EMP);
1883 	if (!mt7530_fdb_cmd(priv, MT7530_FDB_READ, NULL))
1884 		port_mask = (mt7530_read(priv, MT7530_ATRD) >> PORT_MAP)
1885 			    & PORT_MAP_MASK;
1886 
1887 	port_mask &= ~BIT(port);
1888 	mt7530_fdb_write(priv, vid, port_mask, addr, -1,
1889 			 port_mask ? STATIC_ENT : STATIC_EMP);
1890 	ret = mt7530_fdb_cmd(priv, MT7530_FDB_WRITE, NULL);
1891 
1892 	mutex_unlock(&priv->reg_mutex);
1893 
1894 	return ret;
1895 }
1896 
1897 static int
mt7530_port_vlan_filtering(struct dsa_switch * ds,int port,bool vlan_filtering,struct netlink_ext_ack * extack)1898 mt7530_port_vlan_filtering(struct dsa_switch *ds, int port, bool vlan_filtering,
1899 			   struct netlink_ext_ack *extack)
1900 {
1901 	struct dsa_port *dp = dsa_to_port(ds, port);
1902 	struct dsa_port *cpu_dp = dp->cpu_dp;
1903 
1904 	if (vlan_filtering) {
1905 		/* The port is being kept as VLAN-unaware port when bridge is
1906 		 * set up with vlan_filtering not being set, Otherwise, the
1907 		 * port and the corresponding CPU port is required the setup
1908 		 * for becoming a VLAN-aware port.
1909 		 */
1910 		mt7530_port_set_vlan_aware(ds, port);
1911 		mt7530_port_set_vlan_aware(ds, cpu_dp->index);
1912 	} else {
1913 		mt7530_port_set_vlan_unaware(ds, port);
1914 	}
1915 
1916 	return 0;
1917 }
1918 
1919 static void
mt7530_hw_vlan_add(struct mt7530_priv * priv,struct mt7530_hw_vlan_entry * entry)1920 mt7530_hw_vlan_add(struct mt7530_priv *priv,
1921 		   struct mt7530_hw_vlan_entry *entry)
1922 {
1923 	struct dsa_port *dp = dsa_to_port(priv->ds, entry->port);
1924 	u8 new_members;
1925 	u32 val;
1926 
1927 	new_members = entry->old_members | BIT(entry->port);
1928 
1929 	/* Validate the entry with independent learning, create egress tag per
1930 	 * VLAN and joining the port as one of the port members.
1931 	 */
1932 	val = IVL_MAC | VTAG_EN | PORT_MEM(new_members) | FID(FID_BRIDGED) |
1933 	      VLAN_VALID;
1934 	mt7530_write(priv, MT7530_VAWD1, val);
1935 
1936 	/* Decide whether adding tag or not for those outgoing packets from the
1937 	 * port inside the VLAN.
1938 	 * CPU port is always taken as a tagged port for serving more than one
1939 	 * VLANs across and also being applied with egress type stack mode for
1940 	 * that VLAN tags would be appended after hardware special tag used as
1941 	 * DSA tag.
1942 	 */
1943 	if (dsa_port_is_cpu(dp))
1944 		val = MT7530_VLAN_EGRESS_STACK;
1945 	else if (entry->untagged)
1946 		val = MT7530_VLAN_EGRESS_UNTAG;
1947 	else
1948 		val = MT7530_VLAN_EGRESS_TAG;
1949 	mt7530_rmw(priv, MT7530_VAWD2,
1950 		   ETAG_CTRL_P_MASK(entry->port),
1951 		   ETAG_CTRL_P(entry->port, val));
1952 }
1953 
1954 static void
mt7530_hw_vlan_del(struct mt7530_priv * priv,struct mt7530_hw_vlan_entry * entry)1955 mt7530_hw_vlan_del(struct mt7530_priv *priv,
1956 		   struct mt7530_hw_vlan_entry *entry)
1957 {
1958 	u8 new_members;
1959 	u32 val;
1960 
1961 	new_members = entry->old_members & ~BIT(entry->port);
1962 
1963 	val = mt7530_read(priv, MT7530_VAWD1);
1964 	if (!(val & VLAN_VALID)) {
1965 		dev_err(priv->dev,
1966 			"Cannot be deleted due to invalid entry\n");
1967 		return;
1968 	}
1969 
1970 	if (new_members) {
1971 		val = IVL_MAC | VTAG_EN | PORT_MEM(new_members) |
1972 		      VLAN_VALID;
1973 		mt7530_write(priv, MT7530_VAWD1, val);
1974 	} else {
1975 		mt7530_write(priv, MT7530_VAWD1, 0);
1976 		mt7530_write(priv, MT7530_VAWD2, 0);
1977 	}
1978 }
1979 
1980 static void
mt7530_hw_vlan_update(struct mt7530_priv * priv,u16 vid,struct mt7530_hw_vlan_entry * entry,mt7530_vlan_op vlan_op)1981 mt7530_hw_vlan_update(struct mt7530_priv *priv, u16 vid,
1982 		      struct mt7530_hw_vlan_entry *entry,
1983 		      mt7530_vlan_op vlan_op)
1984 {
1985 	u32 val;
1986 
1987 	/* Fetch entry */
1988 	mt7530_vlan_cmd(priv, MT7530_VTCR_RD_VID, vid);
1989 
1990 	val = mt7530_read(priv, MT7530_VAWD1);
1991 
1992 	entry->old_members = (val >> PORT_MEM_SHFT) & PORT_MEM_MASK;
1993 
1994 	/* Manipulate entry */
1995 	vlan_op(priv, entry);
1996 
1997 	/* Flush result to hardware */
1998 	mt7530_vlan_cmd(priv, MT7530_VTCR_WR_VID, vid);
1999 }
2000 
2001 static int
mt7530_port_vlan_add(struct dsa_switch * ds,int port,const struct switchdev_obj_port_vlan * vlan,struct netlink_ext_ack * extack)2002 mt7530_port_vlan_add(struct dsa_switch *ds, int port,
2003 		     const struct switchdev_obj_port_vlan *vlan,
2004 		     struct netlink_ext_ack *extack)
2005 {
2006 	bool untagged = vlan->flags & BRIDGE_VLAN_INFO_UNTAGGED;
2007 	bool pvid = vlan->flags & BRIDGE_VLAN_INFO_PVID;
2008 	struct mt7530_hw_vlan_entry new_entry;
2009 	struct mt7530_priv *priv = ds->priv;
2010 
2011 	mutex_lock(&priv->reg_mutex);
2012 
2013 	/* VID 0 is managed exclusively by mt7530_setup_vlan0() for
2014 	 * VLAN-unaware bridge operation. Don't let the bridge overwrite
2015 	 * its EG_CON flag with VTAG_EN and corrupt PORT_MEM.
2016 	 */
2017 	if (vlan->vid == 0)
2018 		goto skip_vlan_table;
2019 
2020 	mt7530_hw_vlan_entry_init(&new_entry, port, untagged);
2021 	mt7530_hw_vlan_update(priv, vlan->vid, &new_entry, mt7530_hw_vlan_add);
2022 
2023 skip_vlan_table:
2024 
2025 	if (pvid) {
2026 		priv->ports[port].pvid = vlan->vid;
2027 
2028 		/* Accept all frames if PVID is set */
2029 		mt7530_rmw(priv, MT7530_PVC_P(port), ACC_FRM_MASK,
2030 			   MT7530_VLAN_ACC_ALL);
2031 
2032 		/* Only configure PVID if VLAN filtering is enabled */
2033 		if (dsa_port_is_vlan_filtering(dsa_to_port(ds, port)))
2034 			mt7530_rmw(priv, MT7530_PPBV1_P(port),
2035 				   G0_PORT_VID_MASK,
2036 				   G0_PORT_VID(vlan->vid));
2037 	} else if (vlan->vid && priv->ports[port].pvid == vlan->vid) {
2038 		/* This VLAN is overwritten without PVID, so unset it */
2039 		priv->ports[port].pvid = G0_PORT_VID_DEF;
2040 
2041 		/* Only accept tagged frames if the port is VLAN-aware */
2042 		if (dsa_port_is_vlan_filtering(dsa_to_port(ds, port)))
2043 			mt7530_rmw(priv, MT7530_PVC_P(port), ACC_FRM_MASK,
2044 				   MT7530_VLAN_ACC_TAGGED);
2045 
2046 		mt7530_rmw(priv, MT7530_PPBV1_P(port), G0_PORT_VID_MASK,
2047 			   G0_PORT_VID_DEF);
2048 	}
2049 
2050 	mutex_unlock(&priv->reg_mutex);
2051 
2052 	return 0;
2053 }
2054 
2055 static int
mt7530_port_vlan_del(struct dsa_switch * ds,int port,const struct switchdev_obj_port_vlan * vlan)2056 mt7530_port_vlan_del(struct dsa_switch *ds, int port,
2057 		     const struct switchdev_obj_port_vlan *vlan)
2058 {
2059 	struct mt7530_hw_vlan_entry target_entry;
2060 	struct mt7530_priv *priv = ds->priv;
2061 
2062 	mutex_lock(&priv->reg_mutex);
2063 
2064 	/* VID 0 is managed exclusively by mt7530_setup_vlan0(). */
2065 	if (vlan->vid == 0)
2066 		goto skip_vlan_table;
2067 
2068 	mt7530_hw_vlan_entry_init(&target_entry, port, 0);
2069 	mt7530_hw_vlan_update(priv, vlan->vid, &target_entry,
2070 			      mt7530_hw_vlan_del);
2071 
2072 skip_vlan_table:
2073 	/* PVID is being restored to the default whenever the PVID port
2074 	 * is being removed from the VLAN.
2075 	 */
2076 	if (priv->ports[port].pvid == vlan->vid) {
2077 		priv->ports[port].pvid = G0_PORT_VID_DEF;
2078 
2079 		/* Only accept tagged frames if the port is VLAN-aware */
2080 		if (dsa_port_is_vlan_filtering(dsa_to_port(ds, port)))
2081 			mt7530_rmw(priv, MT7530_PVC_P(port), ACC_FRM_MASK,
2082 				   MT7530_VLAN_ACC_TAGGED);
2083 
2084 		mt7530_rmw(priv, MT7530_PPBV1_P(port), G0_PORT_VID_MASK,
2085 			   G0_PORT_VID_DEF);
2086 	}
2087 
2088 
2089 	mutex_unlock(&priv->reg_mutex);
2090 
2091 	return 0;
2092 }
2093 
mt753x_port_mirror_add(struct dsa_switch * ds,int port,struct dsa_mall_mirror_tc_entry * mirror,bool ingress,struct netlink_ext_ack * extack)2094 static int mt753x_port_mirror_add(struct dsa_switch *ds, int port,
2095 				  struct dsa_mall_mirror_tc_entry *mirror,
2096 				  bool ingress, struct netlink_ext_ack *extack)
2097 {
2098 	struct mt7530_priv *priv = ds->priv;
2099 	int monitor_port;
2100 	u32 val;
2101 
2102 	/* Check for existent entry */
2103 	if ((ingress ? priv->mirror_rx : priv->mirror_tx) & BIT(port))
2104 		return -EEXIST;
2105 
2106 	val = mt7530_read(priv, MT753X_MIRROR_REG(priv->id));
2107 
2108 	/* MT7530 only supports one monitor port */
2109 	monitor_port = MT753X_MIRROR_PORT_GET(priv->id, val);
2110 	if (val & MT753X_MIRROR_EN(priv->id) &&
2111 	    monitor_port != mirror->to_local_port)
2112 		return -EEXIST;
2113 
2114 	val |= MT753X_MIRROR_EN(priv->id);
2115 	val &= ~MT753X_MIRROR_PORT_MASK(priv->id);
2116 	val |= MT753X_MIRROR_PORT_SET(priv->id, mirror->to_local_port);
2117 	mt7530_write(priv, MT753X_MIRROR_REG(priv->id), val);
2118 
2119 	val = mt7530_read(priv, MT7530_PCR_P(port));
2120 	if (ingress) {
2121 		val |= PORT_RX_MIR;
2122 		priv->mirror_rx |= BIT(port);
2123 	} else {
2124 		val |= PORT_TX_MIR;
2125 		priv->mirror_tx |= BIT(port);
2126 	}
2127 	mt7530_write(priv, MT7530_PCR_P(port), val);
2128 
2129 	return 0;
2130 }
2131 
mt753x_port_mirror_del(struct dsa_switch * ds,int port,struct dsa_mall_mirror_tc_entry * mirror)2132 static void mt753x_port_mirror_del(struct dsa_switch *ds, int port,
2133 				   struct dsa_mall_mirror_tc_entry *mirror)
2134 {
2135 	struct mt7530_priv *priv = ds->priv;
2136 	u32 val;
2137 
2138 	val = mt7530_read(priv, MT7530_PCR_P(port));
2139 	if (mirror->ingress) {
2140 		val &= ~PORT_RX_MIR;
2141 		priv->mirror_rx &= ~BIT(port);
2142 	} else {
2143 		val &= ~PORT_TX_MIR;
2144 		priv->mirror_tx &= ~BIT(port);
2145 	}
2146 	mt7530_write(priv, MT7530_PCR_P(port), val);
2147 
2148 	if (!priv->mirror_rx && !priv->mirror_tx) {
2149 		val = mt7530_read(priv, MT753X_MIRROR_REG(priv->id));
2150 		val &= ~MT753X_MIRROR_EN(priv->id);
2151 		mt7530_write(priv, MT753X_MIRROR_REG(priv->id), val);
2152 	}
2153 }
2154 
2155 static enum dsa_tag_protocol
mtk_get_tag_protocol(struct dsa_switch * ds,int port,enum dsa_tag_protocol mp)2156 mtk_get_tag_protocol(struct dsa_switch *ds, int port,
2157 		     enum dsa_tag_protocol mp)
2158 {
2159 	return DSA_TAG_PROTO_MTK;
2160 }
2161 
2162 #ifdef CONFIG_GPIOLIB
2163 static inline u32
mt7530_gpio_to_bit(unsigned int offset)2164 mt7530_gpio_to_bit(unsigned int offset)
2165 {
2166 	/* Map GPIO offset to register bit
2167 	 * [ 2: 0]  port 0 LED 0..2 as GPIO 0..2
2168 	 * [ 6: 4]  port 1 LED 0..2 as GPIO 3..5
2169 	 * [10: 8]  port 2 LED 0..2 as GPIO 6..8
2170 	 * [14:12]  port 3 LED 0..2 as GPIO 9..11
2171 	 * [18:16]  port 4 LED 0..2 as GPIO 12..14
2172 	 */
2173 	return BIT(offset + offset / 3);
2174 }
2175 
2176 static int
mt7530_gpio_get(struct gpio_chip * gc,unsigned int offset)2177 mt7530_gpio_get(struct gpio_chip *gc, unsigned int offset)
2178 {
2179 	struct mt7530_priv *priv = gpiochip_get_data(gc);
2180 	u32 bit = mt7530_gpio_to_bit(offset);
2181 
2182 	return !!(mt7530_read(priv, MT7530_LED_GPIO_DATA) & bit);
2183 }
2184 
2185 static int
mt7530_gpio_set(struct gpio_chip * gc,unsigned int offset,int value)2186 mt7530_gpio_set(struct gpio_chip *gc, unsigned int offset, int value)
2187 {
2188 	struct mt7530_priv *priv = gpiochip_get_data(gc);
2189 	u32 bit = mt7530_gpio_to_bit(offset);
2190 
2191 	if (value)
2192 		mt7530_set(priv, MT7530_LED_GPIO_DATA, bit);
2193 	else
2194 		mt7530_clear(priv, MT7530_LED_GPIO_DATA, bit);
2195 
2196 	return 0;
2197 }
2198 
2199 static int
mt7530_gpio_get_direction(struct gpio_chip * gc,unsigned int offset)2200 mt7530_gpio_get_direction(struct gpio_chip *gc, unsigned int offset)
2201 {
2202 	struct mt7530_priv *priv = gpiochip_get_data(gc);
2203 	u32 bit = mt7530_gpio_to_bit(offset);
2204 
2205 	return (mt7530_read(priv, MT7530_LED_GPIO_DIR) & bit) ?
2206 		GPIO_LINE_DIRECTION_OUT : GPIO_LINE_DIRECTION_IN;
2207 }
2208 
2209 static int
mt7530_gpio_direction_input(struct gpio_chip * gc,unsigned int offset)2210 mt7530_gpio_direction_input(struct gpio_chip *gc, unsigned int offset)
2211 {
2212 	struct mt7530_priv *priv = gpiochip_get_data(gc);
2213 	u32 bit = mt7530_gpio_to_bit(offset);
2214 
2215 	mt7530_clear(priv, MT7530_LED_GPIO_OE, bit);
2216 	mt7530_clear(priv, MT7530_LED_GPIO_DIR, bit);
2217 
2218 	return 0;
2219 }
2220 
2221 static int
mt7530_gpio_direction_output(struct gpio_chip * gc,unsigned int offset,int value)2222 mt7530_gpio_direction_output(struct gpio_chip *gc, unsigned int offset, int value)
2223 {
2224 	struct mt7530_priv *priv = gpiochip_get_data(gc);
2225 	u32 bit = mt7530_gpio_to_bit(offset);
2226 
2227 	mt7530_set(priv, MT7530_LED_GPIO_DIR, bit);
2228 
2229 	if (value)
2230 		mt7530_set(priv, MT7530_LED_GPIO_DATA, bit);
2231 	else
2232 		mt7530_clear(priv, MT7530_LED_GPIO_DATA, bit);
2233 
2234 	mt7530_set(priv, MT7530_LED_GPIO_OE, bit);
2235 
2236 	return 0;
2237 }
2238 
2239 static int
mt7530_setup_gpio(struct mt7530_priv * priv)2240 mt7530_setup_gpio(struct mt7530_priv *priv)
2241 {
2242 	struct device *dev = priv->dev;
2243 	struct gpio_chip *gc;
2244 
2245 	gc = devm_kzalloc(dev, sizeof(*gc), GFP_KERNEL);
2246 	if (!gc)
2247 		return -ENOMEM;
2248 
2249 	mt7530_write(priv, MT7530_LED_GPIO_OE, 0);
2250 	mt7530_write(priv, MT7530_LED_GPIO_DIR, 0);
2251 	mt7530_write(priv, MT7530_LED_IO_MODE, 0);
2252 
2253 	gc->label = "mt7530";
2254 	gc->parent = dev;
2255 	gc->owner = THIS_MODULE;
2256 	gc->get_direction = mt7530_gpio_get_direction;
2257 	gc->direction_input = mt7530_gpio_direction_input;
2258 	gc->direction_output = mt7530_gpio_direction_output;
2259 	gc->get = mt7530_gpio_get;
2260 	gc->set = mt7530_gpio_set;
2261 	gc->base = -1;
2262 	gc->ngpio = 15;
2263 	gc->can_sleep = true;
2264 
2265 	return devm_gpiochip_add_data(dev, gc, priv);
2266 }
2267 #endif /* CONFIG_GPIOLIB */
2268 
2269 static void
mt7530_setup_mdio_irq(struct mt7530_priv * priv)2270 mt7530_setup_mdio_irq(struct mt7530_priv *priv)
2271 {
2272 	struct dsa_switch *ds = priv->ds;
2273 	int p;
2274 
2275 	for (p = 0; p < MT7530_NUM_PHYS; p++) {
2276 		if (BIT(p) & ds->phys_mii_mask) {
2277 			unsigned int irq;
2278 
2279 			irq = irq_create_mapping(priv->irq_domain, p);
2280 			ds->user_mii_bus->irq[p] = irq;
2281 		}
2282 	}
2283 }
2284 
2285 static const struct regmap_irq mt7530_irqs[] = {
2286 	REGMAP_IRQ_REG_LINE(0, 32),  /* PHY0_LC */
2287 	REGMAP_IRQ_REG_LINE(1, 32),  /* PHY1_LC */
2288 	REGMAP_IRQ_REG_LINE(2, 32),  /* PHY2_LC */
2289 	REGMAP_IRQ_REG_LINE(3, 32),  /* PHY3_LC */
2290 	REGMAP_IRQ_REG_LINE(4, 32),  /* PHY4_LC */
2291 	REGMAP_IRQ_REG_LINE(5, 32),  /* PHY5_LC */
2292 	REGMAP_IRQ_REG_LINE(6, 32),  /* PHY6_LC */
2293 	REGMAP_IRQ_REG_LINE(16, 32), /* MAC_PC */
2294 	REGMAP_IRQ_REG_LINE(17, 32), /* BMU */
2295 	REGMAP_IRQ_REG_LINE(18, 32), /* MIB */
2296 	REGMAP_IRQ_REG_LINE(22, 32), /* ARL_COL_FULL_COL */
2297 	REGMAP_IRQ_REG_LINE(23, 32), /* ARL_COL_FULL */
2298 	REGMAP_IRQ_REG_LINE(24, 32), /* ARL_TBL_ERR */
2299 	REGMAP_IRQ_REG_LINE(25, 32), /* ARL_PKT_QERR */
2300 	REGMAP_IRQ_REG_LINE(26, 32), /* ARL_EQ_ERR */
2301 	REGMAP_IRQ_REG_LINE(27, 32), /* ARL_PKT_BC */
2302 	REGMAP_IRQ_REG_LINE(28, 32), /* ARL_SEC_IG1X */
2303 	REGMAP_IRQ_REG_LINE(29, 32), /* ARL_SEC_VLAN */
2304 	REGMAP_IRQ_REG_LINE(30, 32), /* ARL_SEC_TAG */
2305 	REGMAP_IRQ_REG_LINE(31, 32), /* ACL */
2306 };
2307 
2308 static const struct regmap_irq_chip mt7530_regmap_irq_chip = {
2309 	.name = KBUILD_MODNAME,
2310 	.status_base = MT7530_SYS_INT_STS,
2311 	.unmask_base = MT7530_SYS_INT_EN,
2312 	.ack_base = MT7530_SYS_INT_STS,
2313 	.init_ack_masked = true,
2314 	.irqs = mt7530_irqs,
2315 	.num_irqs = ARRAY_SIZE(mt7530_irqs),
2316 	.num_regs = 1,
2317 };
2318 
2319 static int
mt7530_setup_irq(struct mt7530_priv * priv)2320 mt7530_setup_irq(struct mt7530_priv *priv)
2321 {
2322 	struct regmap_irq_chip_data *irq_data;
2323 	struct device *dev = priv->dev;
2324 	struct device_node *np = dev->of_node;
2325 	int irq, ret;
2326 
2327 	if (!of_property_read_bool(np, "interrupt-controller")) {
2328 		dev_info(dev, "no interrupt support\n");
2329 		return 0;
2330 	}
2331 
2332 	irq = of_irq_get(np, 0);
2333 	if (irq <= 0) {
2334 		dev_err(dev, "failed to get parent IRQ: %d\n", irq);
2335 		return irq ? : -EINVAL;
2336 	}
2337 
2338 	/* This register must be set for MT7530 to properly fire interrupts */
2339 	if (priv->id == ID_MT7530 || priv->id == ID_MT7621)
2340 		mt7530_set(priv, MT7530_TOP_SIG_CTRL, TOP_SIG_CTRL_NORMAL);
2341 
2342 	ret = devm_regmap_add_irq_chip_fwnode(dev, dev_fwnode(dev),
2343 					      priv->regmap, irq,
2344 					      IRQF_ONESHOT,
2345 					      0, &mt7530_regmap_irq_chip,
2346 					      &irq_data);
2347 	if (ret)
2348 		return ret;
2349 
2350 	priv->irq_domain = regmap_irq_get_domain(irq_data);
2351 
2352 	return 0;
2353 }
2354 
2355 static void
mt7530_free_mdio_irq(struct mt7530_priv * priv)2356 mt7530_free_mdio_irq(struct mt7530_priv *priv)
2357 {
2358 	int p;
2359 
2360 	for (p = 0; p < MT7530_NUM_PHYS; p++) {
2361 		if (BIT(p) & priv->ds->phys_mii_mask) {
2362 			unsigned int irq;
2363 
2364 			irq = irq_find_mapping(priv->irq_domain, p);
2365 			irq_dispose_mapping(irq);
2366 		}
2367 	}
2368 }
2369 
2370 static int
mt7530_setup_mdio(struct mt7530_priv * priv)2371 mt7530_setup_mdio(struct mt7530_priv *priv)
2372 {
2373 	struct device_node *mnp, *np = priv->dev->of_node;
2374 	struct dsa_switch *ds = priv->ds;
2375 	struct device *dev = priv->dev;
2376 	struct mii_bus *bus;
2377 	static int idx;
2378 	int ret = 0;
2379 
2380 	mnp = of_get_child_by_name(np, "mdio");
2381 
2382 	if (mnp && !of_device_is_available(mnp))
2383 		goto out;
2384 
2385 	bus = devm_mdiobus_alloc(dev);
2386 	if (!bus) {
2387 		ret = -ENOMEM;
2388 		goto out;
2389 	}
2390 
2391 	if (!mnp)
2392 		ds->user_mii_bus = bus;
2393 
2394 	bus->priv = priv;
2395 	bus->name = KBUILD_MODNAME "-mii";
2396 	snprintf(bus->id, MII_BUS_ID_SIZE, KBUILD_MODNAME "-%d", idx++);
2397 	bus->read = mt753x_phy_read_c22;
2398 	bus->write = mt753x_phy_write_c22;
2399 	bus->read_c45 = mt753x_phy_read_c45;
2400 	bus->write_c45 = mt753x_phy_write_c45;
2401 	bus->parent = dev;
2402 	bus->phy_mask = ~ds->phys_mii_mask;
2403 
2404 	if (priv->irq_domain && !mnp)
2405 		mt7530_setup_mdio_irq(priv);
2406 
2407 	ret = devm_of_mdiobus_register(dev, bus, mnp);
2408 	if (ret) {
2409 		dev_err(dev, "failed to register MDIO bus: %d\n", ret);
2410 		if (priv->irq_domain && !mnp)
2411 			mt7530_free_mdio_irq(priv);
2412 	}
2413 
2414 out:
2415 	of_node_put(mnp);
2416 	return ret;
2417 }
2418 
2419 static int
mt7530_setup(struct dsa_switch * ds)2420 mt7530_setup(struct dsa_switch *ds)
2421 {
2422 	struct mt7530_priv *priv = ds->priv;
2423 	struct device_node *dn = NULL;
2424 	struct device_node *phy_node;
2425 	struct device_node *mac_np;
2426 	struct mt7530_dummy_poll p;
2427 	phy_interface_t interface;
2428 	struct dsa_port *cpu_dp;
2429 	u32 id, val;
2430 	int ret, i;
2431 
2432 	/* The parent node of conduit netdev which holds the common system
2433 	 * controller also is the container for two GMACs nodes representing
2434 	 * as two netdev instances.
2435 	 */
2436 	dsa_switch_for_each_cpu_port(cpu_dp, ds) {
2437 		dn = cpu_dp->conduit->dev.of_node->parent;
2438 		/* It doesn't matter which CPU port is found first,
2439 		 * their conduits should share the same parent OF node
2440 		 */
2441 		break;
2442 	}
2443 
2444 	if (!dn) {
2445 		dev_err(ds->dev, "parent OF node of DSA conduit not found");
2446 		return -EINVAL;
2447 	}
2448 
2449 	ds->assisted_learning_on_cpu_port = true;
2450 	ds->untag_vlan_aware_bridge_pvid = true;
2451 	ds->mtu_enforcement_ingress = true;
2452 	ds->ageing_time_min = 2 * 1000;
2453 	ds->ageing_time_max = (AGE_CNT_MAX + 1) * (AGE_UNIT_MAX + 1) * 1000;
2454 
2455 	if (priv->id == ID_MT7530) {
2456 		regulator_set_voltage(priv->core_pwr, 1000000, 1000000);
2457 		ret = regulator_enable(priv->core_pwr);
2458 		if (ret < 0) {
2459 			dev_err(priv->dev,
2460 				"Failed to enable core power: %d\n", ret);
2461 			return ret;
2462 		}
2463 
2464 		regulator_set_voltage(priv->io_pwr, 3300000, 3300000);
2465 		ret = regulator_enable(priv->io_pwr);
2466 		if (ret < 0) {
2467 			dev_err(priv->dev, "Failed to enable io pwr: %d\n",
2468 				ret);
2469 			return ret;
2470 		}
2471 	}
2472 
2473 	/* Reset whole chip through gpio pin or memory-mapped registers for
2474 	 * different type of hardware
2475 	 */
2476 	if (priv->mcm) {
2477 		reset_control_assert(priv->rstc);
2478 		usleep_range(5000, 5100);
2479 		reset_control_deassert(priv->rstc);
2480 	} else {
2481 		gpiod_set_value_cansleep(priv->reset, 0);
2482 		usleep_range(5000, 5100);
2483 		gpiod_set_value_cansleep(priv->reset, 1);
2484 	}
2485 
2486 	/* Waiting for MT7530 got to stable */
2487 	INIT_MT7530_DUMMY_POLL(&p, priv, MT753X_TRAP);
2488 	ret = readx_poll_timeout(_mt7530_read, &p, val, val != 0,
2489 				 20, 1000000);
2490 	if (ret < 0) {
2491 		dev_err(priv->dev, "reset timeout\n");
2492 		return ret;
2493 	}
2494 
2495 	id = mt7530_read(priv, MT7530_CREV);
2496 	id >>= CHIP_NAME_SHIFT;
2497 	if (id != MT7530_ID) {
2498 		dev_err(priv->dev, "chip %x can't be supported\n", id);
2499 		return -ENODEV;
2500 	}
2501 
2502 	if ((val & MT7530_XTAL_MASK) == MT7530_XTAL_20MHZ) {
2503 		dev_err(priv->dev,
2504 			"MT7530 with a 20MHz XTAL is not supported!\n");
2505 		return -EINVAL;
2506 	}
2507 
2508 	/* Reset the switch through internal reset */
2509 	mt7530_write(priv, MT7530_SYS_CTRL,
2510 		     SYS_CTRL_PHY_RST | SYS_CTRL_SW_RST |
2511 		     SYS_CTRL_REG_RST);
2512 
2513 	/* Lower Tx driving for TRGMII path */
2514 	for (i = 0; i < NUM_TRGMII_CTRL; i++)
2515 		mt7530_write(priv, MT7530_TRGMII_TD_ODT(i),
2516 			     TD_DM_DRVP(8) | TD_DM_DRVN(8));
2517 
2518 	for (i = 0; i < NUM_TRGMII_CTRL; i++)
2519 		mt7530_rmw(priv, MT7530_TRGMII_RD(i),
2520 			   RD_TAP_MASK, RD_TAP(16));
2521 
2522 	/* Allow modifying the trap and directly access PHY registers via the
2523 	 * MDIO bus the switch is on.
2524 	 */
2525 	mt7530_rmw(priv, MT753X_MTRAP, MT7530_CHG_TRAP |
2526 		   MT7530_PHY_INDIRECT_ACCESS, MT7530_CHG_TRAP);
2527 
2528 	if ((val & MT7530_XTAL_MASK) == MT7530_XTAL_40MHZ)
2529 		mt7530_pll_setup(priv);
2530 
2531 	mt753x_trap_frames(priv);
2532 
2533 	/* Enable and reset MIB counters */
2534 	mt7530_mib_reset(ds);
2535 
2536 	for (i = 0; i < priv->ds->num_ports; i++) {
2537 		/* Clear link settings and enable force mode to force link down
2538 		 * on all ports until they're enabled later.
2539 		 */
2540 		mt7530_rmw(priv, MT753X_PMCR_P(i),
2541 			   PMCR_LINK_SETTINGS_MASK |
2542 			   MT753X_FORCE_MODE(priv->id),
2543 			   MT753X_FORCE_MODE(priv->id));
2544 
2545 		/* Disable forwarding by default on all ports */
2546 		mt7530_rmw(priv, MT7530_PCR_P(i), PCR_MATRIX_MASK,
2547 			   PCR_MATRIX_CLR);
2548 
2549 		/* Disable learning by default on all ports */
2550 		mt7530_set(priv, MT7530_PSC_P(i), SA_DIS);
2551 
2552 		if (dsa_is_cpu_port(ds, i)) {
2553 			mt753x_cpu_port_enable(ds, i);
2554 		} else {
2555 			mt7530_port_disable(ds, i);
2556 
2557 			/* Set default PVID to 0 on all user ports */
2558 			mt7530_rmw(priv, MT7530_PPBV1_P(i), G0_PORT_VID_MASK,
2559 				   G0_PORT_VID_DEF);
2560 		}
2561 		/* Enable consistent egress tag */
2562 		mt7530_rmw(priv, MT7530_PVC_P(i), PVC_EG_TAG_MASK,
2563 			   PVC_EG_TAG(MT7530_VLAN_EG_CONSISTENT));
2564 	}
2565 
2566 	/* Allow mirroring frames received on the local port (monitor port). */
2567 	mt7530_set(priv, MT753X_AGC, LOCAL_EN);
2568 
2569 	/* Setup VLAN ID 0 for VLAN-unaware bridges */
2570 	ret = mt7530_setup_vlan0(priv);
2571 	if (ret)
2572 		return ret;
2573 
2574 	/* Check for PHY muxing on port 5 */
2575 	if (dsa_is_unused_port(ds, 5)) {
2576 		/* Scan the ethernet nodes. Look for GMAC1, lookup the used PHY.
2577 		 * Set priv->p5_mode to the appropriate value if PHY muxing is
2578 		 * detected.
2579 		 */
2580 		for_each_child_of_node(dn, mac_np) {
2581 			if (!of_device_is_compatible(mac_np,
2582 						     "mediatek,eth-mac"))
2583 				continue;
2584 
2585 			ret = of_property_read_u32(mac_np, "reg", &id);
2586 			if (ret < 0 || id != 1)
2587 				continue;
2588 
2589 			phy_node = of_parse_phandle(mac_np, "phy-handle", 0);
2590 			if (!phy_node)
2591 				continue;
2592 
2593 			if (phy_node->parent == priv->dev->of_node->parent ||
2594 			    phy_node->parent->parent == priv->dev->of_node) {
2595 				ret = of_get_phy_mode(mac_np, &interface);
2596 				if (ret && ret != -ENODEV) {
2597 					of_node_put(mac_np);
2598 					of_node_put(phy_node);
2599 					return ret;
2600 				}
2601 				id = of_mdio_parse_addr(ds->dev, phy_node);
2602 				if (id == 0)
2603 					priv->p5_mode = MUX_PHY_P0;
2604 				if (id == 4)
2605 					priv->p5_mode = MUX_PHY_P4;
2606 			}
2607 			of_node_put(mac_np);
2608 			of_node_put(phy_node);
2609 			break;
2610 		}
2611 
2612 		if (priv->p5_mode == MUX_PHY_P0 ||
2613 		    priv->p5_mode == MUX_PHY_P4) {
2614 			mt7530_clear(priv, MT753X_MTRAP, MT7530_P5_DIS);
2615 			mt7530_setup_port5(ds, interface);
2616 		}
2617 	}
2618 
2619 #ifdef CONFIG_GPIOLIB
2620 	if (of_property_read_bool(priv->dev->of_node, "gpio-controller")) {
2621 		ret = mt7530_setup_gpio(priv);
2622 		if (ret)
2623 			return ret;
2624 	}
2625 #endif /* CONFIG_GPIOLIB */
2626 
2627 	/* Flush the FDB table */
2628 	ret = mt7530_fdb_cmd(priv, MT7530_FDB_FLUSH, NULL);
2629 	if (ret < 0)
2630 		return ret;
2631 
2632 	return 0;
2633 }
2634 
2635 static int
mt7531_setup_common(struct dsa_switch * ds)2636 mt7531_setup_common(struct dsa_switch *ds)
2637 {
2638 	struct mt7530_priv *priv = ds->priv;
2639 	int ret, i;
2640 
2641 	ds->assisted_learning_on_cpu_port = true;
2642 	ds->untag_vlan_aware_bridge_pvid = true;
2643 	ds->mtu_enforcement_ingress = true;
2644 	ds->ageing_time_min = 2 * 1000;
2645 	ds->ageing_time_max = (AGE_CNT_MAX + 1) * (AGE_UNIT_MAX + 1) * 1000;
2646 
2647 	mt753x_trap_frames(priv);
2648 
2649 	/* Enable and reset MIB counters */
2650 	mt7530_mib_reset(ds);
2651 
2652 	/* Disable flooding on all ports */
2653 	mt7530_clear(priv, MT753X_MFC, BC_FFP_MASK | UNM_FFP_MASK |
2654 		     UNU_FFP_MASK);
2655 
2656 	for (i = 0; i < priv->ds->num_ports; i++) {
2657 		/* Clear link settings and enable force mode to force link down
2658 		 * on all ports until they're enabled later.
2659 		 */
2660 		mt7530_rmw(priv, MT753X_PMCR_P(i),
2661 			   PMCR_LINK_SETTINGS_MASK |
2662 			   MT753X_FORCE_MODE(priv->id),
2663 			   MT753X_FORCE_MODE(priv->id));
2664 
2665 		/* Disable forwarding by default on all ports */
2666 		mt7530_rmw(priv, MT7530_PCR_P(i), PCR_MATRIX_MASK,
2667 			   PCR_MATRIX_CLR);
2668 
2669 		/* Disable learning by default on all ports */
2670 		mt7530_set(priv, MT7530_PSC_P(i), SA_DIS);
2671 
2672 		mt7530_set(priv, MT7531_DBG_CNT(i), MT7531_DIS_CLR);
2673 
2674 		if (dsa_is_cpu_port(ds, i)) {
2675 			mt753x_cpu_port_enable(ds, i);
2676 		} else {
2677 			mt7530_port_disable(ds, i);
2678 
2679 			/* Set default PVID to 0 on all user ports */
2680 			mt7530_rmw(priv, MT7530_PPBV1_P(i), G0_PORT_VID_MASK,
2681 				   G0_PORT_VID_DEF);
2682 		}
2683 
2684 		/* Enable consistent egress tag */
2685 		mt7530_rmw(priv, MT7530_PVC_P(i), PVC_EG_TAG_MASK,
2686 			   PVC_EG_TAG(MT7530_VLAN_EG_CONSISTENT));
2687 	}
2688 
2689 	/* Allow mirroring frames received on the local port (monitor port). */
2690 	mt7530_set(priv, MT753X_AGC, LOCAL_EN);
2691 
2692 	/* Enable Special Tag for rx frames */
2693 	if (priv->id == ID_EN7581 || priv->id == ID_AN7583)
2694 		mt7530_write(priv, MT753X_CPORT_SPTAG_CFG,
2695 			     CPORT_SW2FE_STAG_EN | CPORT_FE2SW_STAG_EN);
2696 
2697 	/* Flush the FDB table */
2698 	ret = mt7530_fdb_cmd(priv, MT7530_FDB_FLUSH, NULL);
2699 	if (ret < 0)
2700 		return ret;
2701 
2702 	/* Setup VLAN ID 0 for VLAN-unaware bridges */
2703 	return mt7530_setup_vlan0(priv);
2704 }
2705 
2706 static int
mt7531_setup(struct dsa_switch * ds)2707 mt7531_setup(struct dsa_switch *ds)
2708 {
2709 	struct mt7530_priv *priv = ds->priv;
2710 	struct mt7530_dummy_poll p;
2711 	u32 val, id;
2712 	int ret, i;
2713 
2714 	/* Reset whole chip through gpio pin or memory-mapped registers for
2715 	 * different type of hardware
2716 	 */
2717 	if (priv->mcm) {
2718 		reset_control_assert(priv->rstc);
2719 		usleep_range(5000, 5100);
2720 		reset_control_deassert(priv->rstc);
2721 	} else {
2722 		gpiod_set_value_cansleep(priv->reset, 0);
2723 		usleep_range(5000, 5100);
2724 		gpiod_set_value_cansleep(priv->reset, 1);
2725 	}
2726 
2727 	/* Waiting for MT7530 got to stable */
2728 	INIT_MT7530_DUMMY_POLL(&p, priv, MT753X_TRAP);
2729 	ret = readx_poll_timeout(_mt7530_read, &p, val, val != 0,
2730 				 20, 1000000);
2731 	if (ret < 0) {
2732 		dev_err(priv->dev, "reset timeout\n");
2733 		return ret;
2734 	}
2735 
2736 	id = mt7530_read(priv, MT7531_CREV);
2737 	id >>= CHIP_NAME_SHIFT;
2738 
2739 	if (id != MT7531_ID) {
2740 		dev_err(priv->dev, "chip %x can't be supported\n", id);
2741 		return -ENODEV;
2742 	}
2743 
2744 	/* MT7531AE has got two SGMII units. One for port 5, one for port 6.
2745 	 * MT7531BE has got only one SGMII unit which is for port 6.
2746 	 */
2747 	val = mt7530_read(priv, MT7531_TOP_SIG_SR);
2748 	priv->p5_sgmii = !!(val & PAD_DUAL_SGMII_EN);
2749 
2750 	/* Force link down on all ports before internal reset */
2751 	for (i = 0; i < priv->ds->num_ports; i++)
2752 		mt7530_write(priv, MT753X_PMCR_P(i), MT7531_FORCE_MODE_LNK);
2753 
2754 	/* Reset the switch through internal reset */
2755 	mt7530_write(priv, MT7530_SYS_CTRL, SYS_CTRL_SW_RST | SYS_CTRL_REG_RST);
2756 
2757 	if (!priv->p5_sgmii) {
2758 		mt7531_pll_setup(priv);
2759 	} else {
2760 		/* Unlike MT7531BE, the GPIO 6-12 pins are not used for RGMII on
2761 		 * MT7531AE. Set the GPIO 11-12 pins to function as MDC and MDIO
2762 		 * to expose the MDIO bus of the switch.
2763 		 */
2764 		mt7530_rmw(priv, MT7531_GPIO_MODE1, MT7531_GPIO11_RG_RXD2_MASK,
2765 			   MT7531_EXT_P_MDC_11);
2766 		mt7530_rmw(priv, MT7531_GPIO_MODE1, MT7531_GPIO12_RG_RXD3_MASK,
2767 			   MT7531_EXT_P_MDIO_12);
2768 	}
2769 
2770 	mt7530_rmw(priv, MT7531_GPIO_MODE0, MT7531_GPIO0_MASK,
2771 		   MT7531_GPIO0_INTERRUPT);
2772 
2773 	/* Enable Energy-Efficient Ethernet (EEE) and PHY core PLL, since
2774 	 * phy_device has not yet been created provided for
2775 	 * phy_[read,write]_mmd_indirect is called, we provide our own
2776 	 * mt7531_ind_mmd_phy_[read,write] to complete this function.
2777 	 */
2778 	val = mt7531_ind_c45_phy_read(priv,
2779 				      MT753X_CTRL_PHY_ADDR(priv->mdiodev->addr),
2780 				      MDIO_MMD_VEND2, CORE_PLL_GROUP4);
2781 	val |= MT7531_RG_SYSPLL_DMY2 | MT7531_PHY_PLL_BYPASS_MODE;
2782 	val &= ~MT7531_PHY_PLL_OFF;
2783 	mt7531_ind_c45_phy_write(priv,
2784 				 MT753X_CTRL_PHY_ADDR(priv->mdiodev->addr),
2785 				 MDIO_MMD_VEND2, CORE_PLL_GROUP4, val);
2786 
2787 	/* Disable EEE advertisement on the switch PHYs. */
2788 	for (i = MT753X_CTRL_PHY_ADDR(priv->mdiodev->addr);
2789 	     i < MT753X_CTRL_PHY_ADDR(priv->mdiodev->addr) + MT7530_NUM_PHYS;
2790 	     i++) {
2791 		mt7531_ind_c45_phy_write(priv, i, MDIO_MMD_AN, MDIO_AN_EEE_ADV,
2792 					 0);
2793 	}
2794 
2795 	ret = mt7531_setup_common(ds);
2796 	if (ret)
2797 		return ret;
2798 
2799 	return 0;
2800 }
2801 
mt7530_mac_port_get_caps(struct dsa_switch * ds,int port,struct phylink_config * config)2802 static void mt7530_mac_port_get_caps(struct dsa_switch *ds, int port,
2803 				     struct phylink_config *config)
2804 {
2805 	config->mac_capabilities |= MAC_10 | MAC_100 | MAC_1000FD;
2806 
2807 	switch (port) {
2808 	/* Ports which are connected to switch PHYs. There is no MII pinout. */
2809 	case 0 ... 4:
2810 		__set_bit(PHY_INTERFACE_MODE_GMII,
2811 			  config->supported_interfaces);
2812 		break;
2813 
2814 	/* Port 5 supports rgmii with delays, mii, and gmii. */
2815 	case 5:
2816 		phy_interface_set_rgmii(config->supported_interfaces);
2817 		__set_bit(PHY_INTERFACE_MODE_MII,
2818 			  config->supported_interfaces);
2819 		__set_bit(PHY_INTERFACE_MODE_GMII,
2820 			  config->supported_interfaces);
2821 		break;
2822 
2823 	/* Port 6 supports rgmii and trgmii. */
2824 	case 6:
2825 		__set_bit(PHY_INTERFACE_MODE_RGMII,
2826 			  config->supported_interfaces);
2827 		__set_bit(PHY_INTERFACE_MODE_TRGMII,
2828 			  config->supported_interfaces);
2829 		break;
2830 	}
2831 }
2832 
mt7531_mac_port_get_caps(struct dsa_switch * ds,int port,struct phylink_config * config)2833 static void mt7531_mac_port_get_caps(struct dsa_switch *ds, int port,
2834 				     struct phylink_config *config)
2835 {
2836 	struct mt7530_priv *priv = ds->priv;
2837 
2838 	config->mac_capabilities |= MAC_10 | MAC_100 | MAC_1000FD;
2839 
2840 	switch (port) {
2841 	/* Ports which are connected to switch PHYs. There is no MII pinout. */
2842 	case 0 ... 4:
2843 		__set_bit(PHY_INTERFACE_MODE_GMII,
2844 			  config->supported_interfaces);
2845 		break;
2846 
2847 	/* Port 5 supports rgmii with delays on MT7531BE, sgmii/802.3z on
2848 	 * MT7531AE.
2849 	 */
2850 	case 5:
2851 		if (!priv->p5_sgmii) {
2852 			phy_interface_set_rgmii(config->supported_interfaces);
2853 			break;
2854 		}
2855 		fallthrough;
2856 
2857 	/* Port 6 supports sgmii/802.3z. */
2858 	case 6:
2859 		__set_bit(PHY_INTERFACE_MODE_SGMII,
2860 			  config->supported_interfaces);
2861 		__set_bit(PHY_INTERFACE_MODE_1000BASEX,
2862 			  config->supported_interfaces);
2863 		__set_bit(PHY_INTERFACE_MODE_2500BASEX,
2864 			  config->supported_interfaces);
2865 
2866 		config->mac_capabilities |= MAC_2500FD;
2867 		break;
2868 	}
2869 }
2870 
mt7988_mac_port_get_caps(struct dsa_switch * ds,int port,struct phylink_config * config)2871 static void mt7988_mac_port_get_caps(struct dsa_switch *ds, int port,
2872 				     struct phylink_config *config)
2873 {
2874 	switch (port) {
2875 	/* Ports which are connected to switch PHYs. There is no MII pinout. */
2876 	case 0 ... 3:
2877 		__set_bit(PHY_INTERFACE_MODE_INTERNAL,
2878 			  config->supported_interfaces);
2879 
2880 		config->mac_capabilities |= MAC_10 | MAC_100 | MAC_1000FD;
2881 		break;
2882 
2883 	/* Port 6 is connected to SoC's XGMII MAC. There is no MII pinout. */
2884 	case 6:
2885 		__set_bit(PHY_INTERFACE_MODE_INTERNAL,
2886 			  config->supported_interfaces);
2887 
2888 		config->mac_capabilities |= MAC_10000FD;
2889 		break;
2890 	}
2891 }
2892 
en7581_mac_port_get_caps(struct dsa_switch * ds,int port,struct phylink_config * config)2893 static void en7581_mac_port_get_caps(struct dsa_switch *ds, int port,
2894 				     struct phylink_config *config)
2895 {
2896 	switch (port) {
2897 	/* Ports which are connected to switch PHYs. There is no MII pinout. */
2898 	case 0 ... 4:
2899 		__set_bit(PHY_INTERFACE_MODE_INTERNAL,
2900 			  config->supported_interfaces);
2901 
2902 		config->mac_capabilities |= MAC_10 | MAC_100 | MAC_1000FD;
2903 		break;
2904 
2905 	/* Port 6 is connected to SoC's XGMII MAC. There is no MII pinout. */
2906 	case 6:
2907 		__set_bit(PHY_INTERFACE_MODE_INTERNAL,
2908 			  config->supported_interfaces);
2909 
2910 		config->mac_capabilities |= MAC_10000FD;
2911 		break;
2912 	}
2913 }
2914 
2915 static void
mt7530_mac_config(struct dsa_switch * ds,int port,unsigned int mode,phy_interface_t interface)2916 mt7530_mac_config(struct dsa_switch *ds, int port, unsigned int mode,
2917 		  phy_interface_t interface)
2918 {
2919 	struct mt7530_priv *priv = ds->priv;
2920 
2921 	if (port == 5)
2922 		mt7530_setup_port5(priv->ds, interface);
2923 	else if (port == 6)
2924 		mt7530_setup_port6(priv->ds, interface);
2925 }
2926 
mt7531_rgmii_setup(struct mt7530_priv * priv,phy_interface_t interface,struct phy_device * phydev)2927 static void mt7531_rgmii_setup(struct mt7530_priv *priv,
2928 			       phy_interface_t interface,
2929 			       struct phy_device *phydev)
2930 {
2931 	u32 val;
2932 
2933 	val = mt7530_read(priv, MT7531_CLKGEN_CTRL);
2934 	val |= GP_CLK_EN;
2935 	val &= ~GP_MODE_MASK;
2936 	val |= GP_MODE(MT7531_GP_MODE_RGMII);
2937 	val &= ~CLK_SKEW_IN_MASK;
2938 	val |= CLK_SKEW_IN(MT7531_CLK_SKEW_NO_CHG);
2939 	val &= ~CLK_SKEW_OUT_MASK;
2940 	val |= CLK_SKEW_OUT(MT7531_CLK_SKEW_NO_CHG);
2941 	val |= TXCLK_NO_REVERSE | RXCLK_NO_DELAY;
2942 
2943 	/* Do not adjust rgmii delay when vendor phy driver presents. */
2944 	if (!phydev || phy_driver_is_genphy(phydev)) {
2945 		val &= ~(TXCLK_NO_REVERSE | RXCLK_NO_DELAY);
2946 		switch (interface) {
2947 		case PHY_INTERFACE_MODE_RGMII:
2948 			val |= TXCLK_NO_REVERSE;
2949 			val |= RXCLK_NO_DELAY;
2950 			break;
2951 		case PHY_INTERFACE_MODE_RGMII_RXID:
2952 			val |= TXCLK_NO_REVERSE;
2953 			break;
2954 		case PHY_INTERFACE_MODE_RGMII_TXID:
2955 			val |= RXCLK_NO_DELAY;
2956 			break;
2957 		case PHY_INTERFACE_MODE_RGMII_ID:
2958 			break;
2959 		default:
2960 			break;
2961 		}
2962 	}
2963 
2964 	mt7530_write(priv, MT7531_CLKGEN_CTRL, val);
2965 }
2966 
2967 static void
mt7531_mac_config(struct dsa_switch * ds,int port,unsigned int mode,phy_interface_t interface)2968 mt7531_mac_config(struct dsa_switch *ds, int port, unsigned int mode,
2969 		  phy_interface_t interface)
2970 {
2971 	struct mt7530_priv *priv = ds->priv;
2972 	struct phy_device *phydev;
2973 	struct dsa_port *dp;
2974 
2975 	if (phy_interface_mode_is_rgmii(interface)) {
2976 		dp = dsa_to_port(ds, port);
2977 		phydev = dp->user->phydev;
2978 		mt7531_rgmii_setup(priv, interface, phydev);
2979 	}
2980 }
2981 
2982 static struct phylink_pcs *
mt753x_phylink_mac_select_pcs(struct phylink_config * config,phy_interface_t interface)2983 mt753x_phylink_mac_select_pcs(struct phylink_config *config,
2984 			      phy_interface_t interface)
2985 {
2986 	struct dsa_port *dp = dsa_phylink_to_port(config);
2987 	struct mt7530_priv *priv = dp->ds->priv;
2988 
2989 	switch (interface) {
2990 	case PHY_INTERFACE_MODE_TRGMII:
2991 		return &priv->pcs[dp->index].pcs;
2992 	case PHY_INTERFACE_MODE_SGMII:
2993 	case PHY_INTERFACE_MODE_1000BASEX:
2994 	case PHY_INTERFACE_MODE_2500BASEX:
2995 		return priv->ports[dp->index].sgmii_pcs;
2996 	default:
2997 		return NULL;
2998 	}
2999 }
3000 
3001 static void
mt753x_phylink_mac_config(struct phylink_config * config,unsigned int mode,const struct phylink_link_state * state)3002 mt753x_phylink_mac_config(struct phylink_config *config, unsigned int mode,
3003 			  const struct phylink_link_state *state)
3004 {
3005 	struct dsa_port *dp = dsa_phylink_to_port(config);
3006 	struct dsa_switch *ds = dp->ds;
3007 	struct mt7530_priv *priv;
3008 	int port = dp->index;
3009 
3010 	priv = ds->priv;
3011 
3012 	if ((port == 5 || port == 6) && priv->info->mac_port_config)
3013 		priv->info->mac_port_config(ds, port, mode, state->interface);
3014 
3015 	/* Are we connected to external phy */
3016 	if (port == 5 && dsa_is_user_port(ds, 5))
3017 		mt7530_set(priv, MT753X_PMCR_P(port), PMCR_EXT_PHY);
3018 }
3019 
mt753x_phylink_mac_link_down(struct phylink_config * config,unsigned int mode,phy_interface_t interface)3020 static void mt753x_phylink_mac_link_down(struct phylink_config *config,
3021 					 unsigned int mode,
3022 					 phy_interface_t interface)
3023 {
3024 	struct dsa_port *dp = dsa_phylink_to_port(config);
3025 	struct mt7530_priv *priv = dp->ds->priv;
3026 
3027 	mt7530_clear(priv, MT753X_PMCR_P(dp->index), PMCR_LINK_SETTINGS_MASK);
3028 }
3029 
mt753x_phylink_mac_link_up(struct phylink_config * config,struct phy_device * phydev,unsigned int mode,phy_interface_t interface,int speed,int duplex,bool tx_pause,bool rx_pause)3030 static void mt753x_phylink_mac_link_up(struct phylink_config *config,
3031 				       struct phy_device *phydev,
3032 				       unsigned int mode,
3033 				       phy_interface_t interface,
3034 				       int speed, int duplex,
3035 				       bool tx_pause, bool rx_pause)
3036 {
3037 	struct dsa_port *dp = dsa_phylink_to_port(config);
3038 	struct mt7530_priv *priv = dp->ds->priv;
3039 	u32 mcr;
3040 
3041 	mcr = PMCR_MAC_RX_EN | PMCR_MAC_TX_EN | PMCR_FORCE_LNK;
3042 
3043 	switch (speed) {
3044 	case SPEED_1000:
3045 	case SPEED_2500:
3046 	case SPEED_10000:
3047 		mcr |= PMCR_FORCE_SPEED_1000;
3048 		break;
3049 	case SPEED_100:
3050 		mcr |= PMCR_FORCE_SPEED_100;
3051 		break;
3052 	}
3053 	if (duplex == DUPLEX_FULL) {
3054 		mcr |= PMCR_FORCE_FDX;
3055 		if (tx_pause)
3056 			mcr |= PMCR_FORCE_TX_FC_EN;
3057 		if (rx_pause)
3058 			mcr |= PMCR_FORCE_RX_FC_EN;
3059 	}
3060 
3061 	mt7530_set(priv, MT753X_PMCR_P(dp->index), mcr);
3062 }
3063 
mt753x_phylink_mac_disable_tx_lpi(struct phylink_config * config)3064 static void mt753x_phylink_mac_disable_tx_lpi(struct phylink_config *config)
3065 {
3066 	struct dsa_port *dp = dsa_phylink_to_port(config);
3067 	struct mt7530_priv *priv = dp->ds->priv;
3068 
3069 	mt7530_clear(priv, MT753X_PMCR_P(dp->index),
3070 		     PMCR_FORCE_EEE1G | PMCR_FORCE_EEE100);
3071 }
3072 
mt753x_phylink_mac_enable_tx_lpi(struct phylink_config * config,u32 timer,bool tx_clock_stop)3073 static int mt753x_phylink_mac_enable_tx_lpi(struct phylink_config *config,
3074 					    u32 timer, bool tx_clock_stop)
3075 {
3076 	struct dsa_port *dp = dsa_phylink_to_port(config);
3077 	struct mt7530_priv *priv = dp->ds->priv;
3078 	u32 val;
3079 
3080 	/* If the timer is zero, then set LPI_MODE_EN, which allows the
3081 	 * system to enter LPI mode immediately rather than waiting for
3082 	 * the LPI threshold.
3083 	 */
3084 	if (!timer)
3085 		val = LPI_MODE_EN;
3086 	else if (FIELD_FIT(LPI_THRESH_MASK, timer))
3087 		val = FIELD_PREP(LPI_THRESH_MASK, timer);
3088 	else
3089 		val = LPI_THRESH_MASK;
3090 
3091 	mt7530_rmw(priv, MT753X_PMEEECR_P(dp->index),
3092 		   LPI_THRESH_MASK | LPI_MODE_EN, val);
3093 
3094 	mt7530_set(priv, MT753X_PMCR_P(dp->index),
3095 		   PMCR_FORCE_EEE1G | PMCR_FORCE_EEE100);
3096 
3097 	return 0;
3098 }
3099 
mt753x_phylink_get_caps(struct dsa_switch * ds,int port,struct phylink_config * config)3100 static void mt753x_phylink_get_caps(struct dsa_switch *ds, int port,
3101 				    struct phylink_config *config)
3102 {
3103 	struct mt7530_priv *priv = ds->priv;
3104 	u32 eeecr;
3105 
3106 	config->mac_capabilities = MAC_ASYM_PAUSE | MAC_SYM_PAUSE;
3107 
3108 	config->lpi_capabilities = MAC_100FD | MAC_1000FD | MAC_2500FD;
3109 
3110 	eeecr = mt7530_read(priv, MT753X_PMEEECR_P(port));
3111 	/* tx_lpi_timer should be in microseconds. The time units for
3112 	 * LPI threshold are unspecified.
3113 	 */
3114 	config->lpi_timer_default = FIELD_GET(LPI_THRESH_MASK, eeecr);
3115 
3116 	priv->info->mac_port_get_caps(ds, port, config);
3117 }
3118 
mt753x_pcs_validate(struct phylink_pcs * pcs,unsigned long * supported,const struct phylink_link_state * state)3119 static int mt753x_pcs_validate(struct phylink_pcs *pcs,
3120 			       unsigned long *supported,
3121 			       const struct phylink_link_state *state)
3122 {
3123 	/* Autonegotiation is not supported in TRGMII nor 802.3z modes */
3124 	if (state->interface == PHY_INTERFACE_MODE_TRGMII ||
3125 	    phy_interface_mode_is_8023z(state->interface))
3126 		phylink_clear(supported, Autoneg);
3127 
3128 	return 0;
3129 }
3130 
mt7530_pcs_get_state(struct phylink_pcs * pcs,unsigned int neg_mode,struct phylink_link_state * state)3131 static void mt7530_pcs_get_state(struct phylink_pcs *pcs, unsigned int neg_mode,
3132 				 struct phylink_link_state *state)
3133 {
3134 	struct mt7530_priv *priv = pcs_to_mt753x_pcs(pcs)->priv;
3135 	int port = pcs_to_mt753x_pcs(pcs)->port;
3136 	u32 pmsr;
3137 
3138 	pmsr = mt7530_read(priv, MT7530_PMSR_P(port));
3139 
3140 	state->link = (pmsr & PMSR_LINK);
3141 	state->an_complete = state->link;
3142 	state->duplex = !!(pmsr & PMSR_DPX);
3143 
3144 	switch (pmsr & PMSR_SPEED_MASK) {
3145 	case PMSR_SPEED_10:
3146 		state->speed = SPEED_10;
3147 		break;
3148 	case PMSR_SPEED_100:
3149 		state->speed = SPEED_100;
3150 		break;
3151 	case PMSR_SPEED_1000:
3152 		state->speed = SPEED_1000;
3153 		break;
3154 	default:
3155 		state->speed = SPEED_UNKNOWN;
3156 		break;
3157 	}
3158 
3159 	state->pause &= ~(MLO_PAUSE_RX | MLO_PAUSE_TX);
3160 	if (pmsr & PMSR_RX_FC)
3161 		state->pause |= MLO_PAUSE_RX;
3162 	if (pmsr & PMSR_TX_FC)
3163 		state->pause |= MLO_PAUSE_TX;
3164 }
3165 
mt753x_pcs_config(struct phylink_pcs * pcs,unsigned int neg_mode,phy_interface_t interface,const unsigned long * advertising,bool permit_pause_to_mac)3166 static int mt753x_pcs_config(struct phylink_pcs *pcs, unsigned int neg_mode,
3167 			     phy_interface_t interface,
3168 			     const unsigned long *advertising,
3169 			     bool permit_pause_to_mac)
3170 {
3171 	return 0;
3172 }
3173 
mt7530_pcs_an_restart(struct phylink_pcs * pcs)3174 static void mt7530_pcs_an_restart(struct phylink_pcs *pcs)
3175 {
3176 }
3177 
3178 static const struct phylink_pcs_ops mt7530_pcs_ops = {
3179 	.pcs_validate = mt753x_pcs_validate,
3180 	.pcs_get_state = mt7530_pcs_get_state,
3181 	.pcs_config = mt753x_pcs_config,
3182 	.pcs_an_restart = mt7530_pcs_an_restart,
3183 };
3184 
3185 static int
mt753x_setup(struct dsa_switch * ds)3186 mt753x_setup(struct dsa_switch *ds)
3187 {
3188 	struct mt7530_priv *priv = ds->priv;
3189 	int ret = priv->info->sw_setup(ds);
3190 	int i;
3191 
3192 	if (ret)
3193 		return ret;
3194 
3195 	ret = mt7530_setup_irq(priv);
3196 	if (ret)
3197 		return ret;
3198 
3199 	ret = mt7530_setup_mdio(priv);
3200 	if (ret)
3201 		return ret;
3202 
3203 	/* Initialise the PCS devices */
3204 	for (i = 0; i < priv->ds->num_ports; i++) {
3205 		priv->pcs[i].pcs.ops = priv->info->pcs_ops;
3206 		priv->pcs[i].priv = priv;
3207 		priv->pcs[i].port = i;
3208 	}
3209 
3210 	if (priv->create_sgmii)
3211 		ret = priv->create_sgmii(priv);
3212 
3213 	if (ret && priv->irq_domain)
3214 		mt7530_free_mdio_irq(priv);
3215 
3216 	if (!ret && priv->bus) {
3217 		mt7530_stats_refresh(priv);
3218 		schedule_delayed_work(&priv->stats_work,
3219 				      MT7530_STATS_POLL_INTERVAL);
3220 	}
3221 
3222 	return ret;
3223 }
3224 
3225 static void
mt753x_teardown(struct dsa_switch * ds)3226 mt753x_teardown(struct dsa_switch *ds)
3227 {
3228 	struct mt7530_priv *priv = ds->priv;
3229 
3230 	if (priv->bus)
3231 		cancel_delayed_work_sync(&priv->stats_work);
3232 }
3233 
mt753x_set_mac_eee(struct dsa_switch * ds,int port,struct ethtool_keee * e)3234 static int mt753x_set_mac_eee(struct dsa_switch *ds, int port,
3235 			      struct ethtool_keee *e)
3236 {
3237 	if (e->tx_lpi_timer > 0xFFF)
3238 		return -EINVAL;
3239 
3240 	return 0;
3241 }
3242 
3243 static void
mt753x_conduit_state_change(struct dsa_switch * ds,const struct net_device * conduit,bool operational)3244 mt753x_conduit_state_change(struct dsa_switch *ds,
3245 			    const struct net_device *conduit,
3246 			    bool operational)
3247 {
3248 	struct dsa_port *cpu_dp = conduit->dsa_ptr;
3249 	struct mt7530_priv *priv = ds->priv;
3250 	int val = 0;
3251 	u8 mask;
3252 
3253 	/* Set the CPU port to trap frames to for MT7530. Trapped frames will be
3254 	 * forwarded to the numerically smallest CPU port whose conduit
3255 	 * interface is up.
3256 	 */
3257 	if (priv->id != ID_MT7530 && priv->id != ID_MT7621)
3258 		return;
3259 
3260 	mask = BIT(cpu_dp->index);
3261 
3262 	if (operational)
3263 		priv->active_cpu_ports |= mask;
3264 	else
3265 		priv->active_cpu_ports &= ~mask;
3266 
3267 	if (priv->active_cpu_ports) {
3268 		val = MT7530_CPU_EN |
3269 		      MT7530_CPU_PORT(__ffs(priv->active_cpu_ports));
3270 	}
3271 
3272 	mt7530_rmw(priv, MT753X_MFC, MT7530_CPU_EN | MT7530_CPU_PORT_MASK, val);
3273 }
3274 
mt753x_tc_setup_qdisc_tbf(struct dsa_switch * ds,int port,struct tc_tbf_qopt_offload * qopt)3275 static int mt753x_tc_setup_qdisc_tbf(struct dsa_switch *ds, int port,
3276 				     struct tc_tbf_qopt_offload *qopt)
3277 {
3278 	struct tc_tbf_qopt_offload_replace_params *p = &qopt->replace_params;
3279 	struct mt7530_priv *priv = ds->priv;
3280 	u32 rate = 0;
3281 
3282 	switch (qopt->command) {
3283 	case TC_TBF_REPLACE:
3284 		rate = div_u64(p->rate.rate_bytes_ps, 1000) << 3; /* kbps */
3285 		fallthrough;
3286 	case TC_TBF_DESTROY: {
3287 		u32 val, tick;
3288 
3289 		mt7530_rmw(priv, MT753X_GERLCR, EGR_BC_MASK,
3290 			   EGR_BC_CRC_IPG_PREAMBLE);
3291 
3292 		/* if rate is greater than 10Mbps tick is 1/32 ms,
3293 		 * 1ms otherwise
3294 		 */
3295 		tick = rate > 10000 ? 2 : 7;
3296 		val = FIELD_PREP(ERLCR_CIR_MASK, (rate >> 5)) |
3297 		      FIELD_PREP(ERLCR_EN_MASK, !!rate) |
3298 		      FIELD_PREP(ERLCR_EXP_MASK, tick) |
3299 		      ERLCR_TBF_MODE_MASK |
3300 		      FIELD_PREP(ERLCR_MANT_MASK, 0xf);
3301 		mt7530_write(priv, MT753X_ERLCR_P(port), val);
3302 		break;
3303 	}
3304 	default:
3305 		return -EOPNOTSUPP;
3306 	}
3307 
3308 	return 0;
3309 }
3310 
mt753x_setup_tc(struct dsa_switch * ds,int port,enum tc_setup_type type,void * type_data)3311 static int mt753x_setup_tc(struct dsa_switch *ds, int port,
3312 			   enum tc_setup_type type, void *type_data)
3313 {
3314 	switch (type) {
3315 	case TC_SETUP_QDISC_TBF:
3316 		return mt753x_tc_setup_qdisc_tbf(ds, port, type_data);
3317 	default:
3318 		return -EOPNOTSUPP;
3319 	}
3320 }
3321 
mt7988_setup(struct dsa_switch * ds)3322 static int mt7988_setup(struct dsa_switch *ds)
3323 {
3324 	struct mt7530_priv *priv = ds->priv;
3325 
3326 	/* Reset the switch */
3327 	reset_control_assert(priv->rstc);
3328 	usleep_range(20, 50);
3329 	reset_control_deassert(priv->rstc);
3330 	usleep_range(20, 50);
3331 
3332 	/* AN7583 require additional tweak to CONN_CFG */
3333 	if (priv->id == ID_AN7583)
3334 		mt7530_rmw(priv, AN7583_GEPHY_CONN_CFG,
3335 			   AN7583_CSR_DPHY_CKIN_SEL |
3336 			   AN7583_CSR_PHY_CORE_REG_CLK_SEL |
3337 			   AN7583_CSR_ETHER_AFE_PWD,
3338 			   AN7583_CSR_DPHY_CKIN_SEL |
3339 			   AN7583_CSR_PHY_CORE_REG_CLK_SEL |
3340 			   FIELD_PREP(AN7583_CSR_ETHER_AFE_PWD, 0));
3341 
3342 	/* Reset the switch PHYs */
3343 	mt7530_write(priv, MT7530_SYS_CTRL, SYS_CTRL_PHY_RST);
3344 
3345 	return mt7531_setup_common(ds);
3346 }
3347 
3348 static const struct dsa_switch_ops mt7530_switch_ops = {
3349 	.get_tag_protocol	= mtk_get_tag_protocol,
3350 	.setup			= mt753x_setup,
3351 	.teardown		= mt753x_teardown,
3352 	.preferred_default_local_cpu_port = mt753x_preferred_default_local_cpu_port,
3353 	.get_strings		= mt7530_get_strings,
3354 	.get_ethtool_stats	= mt7530_get_ethtool_stats,
3355 	.get_sset_count		= mt7530_get_sset_count,
3356 	.get_eth_mac_stats	= mt7530_get_eth_mac_stats,
3357 	.get_rmon_stats		= mt7530_get_rmon_stats,
3358 	.get_eth_ctrl_stats	= mt7530_get_eth_ctrl_stats,
3359 	.get_stats64		= mt7530_get_stats64,
3360 	.set_ageing_time	= mt7530_set_ageing_time,
3361 	.port_enable		= mt7530_port_enable,
3362 	.port_disable		= mt7530_port_disable,
3363 	.port_change_mtu	= mt7530_port_change_mtu,
3364 	.port_max_mtu		= mt7530_port_max_mtu,
3365 	.port_stp_state_set	= mt7530_stp_state_set,
3366 	.port_pre_bridge_flags	= mt7530_port_pre_bridge_flags,
3367 	.port_bridge_flags	= mt7530_port_bridge_flags,
3368 	.port_bridge_join	= mt7530_port_bridge_join,
3369 	.port_bridge_leave	= mt7530_port_bridge_leave,
3370 	.port_fdb_add		= mt7530_port_fdb_add,
3371 	.port_fdb_del		= mt7530_port_fdb_del,
3372 	.port_fdb_dump		= mt7530_port_fdb_dump,
3373 	.port_mdb_add		= mt7530_port_mdb_add,
3374 	.port_mdb_del		= mt7530_port_mdb_del,
3375 	.port_vlan_filtering	= mt7530_port_vlan_filtering,
3376 	.port_vlan_add		= mt7530_port_vlan_add,
3377 	.port_vlan_del		= mt7530_port_vlan_del,
3378 	.port_mirror_add	= mt753x_port_mirror_add,
3379 	.port_mirror_del	= mt753x_port_mirror_del,
3380 	.phylink_get_caps	= mt753x_phylink_get_caps,
3381 	.support_eee		= dsa_supports_eee,
3382 	.set_mac_eee		= mt753x_set_mac_eee,
3383 	.conduit_state_change	= mt753x_conduit_state_change,
3384 	.port_setup_tc		= mt753x_setup_tc,
3385 	.port_hsr_join		= dsa_port_simple_hsr_join,
3386 	.port_hsr_leave		= dsa_port_simple_hsr_leave,
3387 };
3388 
3389 static const struct phylink_mac_ops mt753x_phylink_mac_ops = {
3390 	.mac_select_pcs	= mt753x_phylink_mac_select_pcs,
3391 	.mac_config	= mt753x_phylink_mac_config,
3392 	.mac_link_down	= mt753x_phylink_mac_link_down,
3393 	.mac_link_up	= mt753x_phylink_mac_link_up,
3394 	.mac_disable_tx_lpi = mt753x_phylink_mac_disable_tx_lpi,
3395 	.mac_enable_tx_lpi = mt753x_phylink_mac_enable_tx_lpi,
3396 };
3397 
3398 const struct mt753x_info mt753x_table[] = {
3399 	[ID_MT7621] = {
3400 		.id = ID_MT7621,
3401 		.pcs_ops = &mt7530_pcs_ops,
3402 		.sw_setup = mt7530_setup,
3403 		.phy_read_c22 = mt7530_phy_read_c22,
3404 		.phy_write_c22 = mt7530_phy_write_c22,
3405 		.phy_read_c45 = mt7530_phy_read_c45,
3406 		.phy_write_c45 = mt7530_phy_write_c45,
3407 		.mac_port_get_caps = mt7530_mac_port_get_caps,
3408 		.mac_port_config = mt7530_mac_config,
3409 	},
3410 	[ID_MT7530] = {
3411 		.id = ID_MT7530,
3412 		.pcs_ops = &mt7530_pcs_ops,
3413 		.sw_setup = mt7530_setup,
3414 		.phy_read_c22 = mt7530_phy_read_c22,
3415 		.phy_write_c22 = mt7530_phy_write_c22,
3416 		.phy_read_c45 = mt7530_phy_read_c45,
3417 		.phy_write_c45 = mt7530_phy_write_c45,
3418 		.mac_port_get_caps = mt7530_mac_port_get_caps,
3419 		.mac_port_config = mt7530_mac_config,
3420 	},
3421 	[ID_MT7531] = {
3422 		.id = ID_MT7531,
3423 		.pcs_ops = &mt7530_pcs_ops,
3424 		.sw_setup = mt7531_setup,
3425 		.phy_read_c22 = mt7531_ind_c22_phy_read,
3426 		.phy_write_c22 = mt7531_ind_c22_phy_write,
3427 		.phy_read_c45 = mt7531_ind_c45_phy_read,
3428 		.phy_write_c45 = mt7531_ind_c45_phy_write,
3429 		.mac_port_get_caps = mt7531_mac_port_get_caps,
3430 		.mac_port_config = mt7531_mac_config,
3431 	},
3432 	[ID_MT7988] = {
3433 		.id = ID_MT7988,
3434 		.pcs_ops = &mt7530_pcs_ops,
3435 		.sw_setup = mt7988_setup,
3436 		.phy_read_c22 = mt7531_ind_c22_phy_read,
3437 		.phy_write_c22 = mt7531_ind_c22_phy_write,
3438 		.phy_read_c45 = mt7531_ind_c45_phy_read,
3439 		.phy_write_c45 = mt7531_ind_c45_phy_write,
3440 		.mac_port_get_caps = mt7988_mac_port_get_caps,
3441 	},
3442 	[ID_EN7581] = {
3443 		.id = ID_EN7581,
3444 		.pcs_ops = &mt7530_pcs_ops,
3445 		.sw_setup = mt7988_setup,
3446 		.phy_read_c22 = mt7531_ind_c22_phy_read,
3447 		.phy_write_c22 = mt7531_ind_c22_phy_write,
3448 		.phy_read_c45 = mt7531_ind_c45_phy_read,
3449 		.phy_write_c45 = mt7531_ind_c45_phy_write,
3450 		.mac_port_get_caps = en7581_mac_port_get_caps,
3451 	},
3452 	[ID_AN7583] = {
3453 		.id = ID_AN7583,
3454 		.pcs_ops = &mt7530_pcs_ops,
3455 		.sw_setup = mt7988_setup,
3456 		.phy_read_c22 = mt7531_ind_c22_phy_read,
3457 		.phy_write_c22 = mt7531_ind_c22_phy_write,
3458 		.phy_read_c45 = mt7531_ind_c45_phy_read,
3459 		.phy_write_c45 = mt7531_ind_c45_phy_write,
3460 		.mac_port_get_caps = en7581_mac_port_get_caps,
3461 	},
3462 };
3463 EXPORT_SYMBOL_GPL(mt753x_table);
3464 
3465 int
mt7530_probe_common(struct mt7530_priv * priv)3466 mt7530_probe_common(struct mt7530_priv *priv)
3467 {
3468 	struct device *dev = priv->dev;
3469 
3470 	priv->ds = devm_kzalloc(dev, sizeof(*priv->ds), GFP_KERNEL);
3471 	if (!priv->ds)
3472 		return -ENOMEM;
3473 
3474 	priv->ds->dev = dev;
3475 	priv->ds->num_ports = MT7530_NUM_PORTS;
3476 
3477 	/* Get the hardware identifier from the devicetree node.
3478 	 * We will need it for some of the clock and regulator setup.
3479 	 */
3480 	priv->info = of_device_get_match_data(dev);
3481 	if (!priv->info)
3482 		return -EINVAL;
3483 
3484 	priv->id = priv->info->id;
3485 	priv->dev = dev;
3486 	priv->ds->priv = priv;
3487 	priv->ds->ops = &mt7530_switch_ops;
3488 	priv->ds->phylink_mac_ops = &mt753x_phylink_mac_ops;
3489 	mutex_init(&priv->reg_mutex);
3490 	spin_lock_init(&priv->stats_lock);
3491 	INIT_DELAYED_WORK(&priv->stats_work, mt7530_stats_poll);
3492 
3493 	dev_set_drvdata(dev, priv);
3494 
3495 	return 0;
3496 }
3497 EXPORT_SYMBOL_GPL(mt7530_probe_common);
3498 
3499 void
mt7530_remove_common(struct mt7530_priv * priv)3500 mt7530_remove_common(struct mt7530_priv *priv)
3501 {
3502 	if (priv->irq_domain)
3503 		mt7530_free_mdio_irq(priv);
3504 
3505 	dsa_unregister_switch(priv->ds);
3506 
3507 	mutex_destroy(&priv->reg_mutex);
3508 }
3509 EXPORT_SYMBOL_GPL(mt7530_remove_common);
3510 
3511 MODULE_AUTHOR("Sean Wang <sean.wang@mediatek.com>");
3512 MODULE_DESCRIPTION("Driver for Mediatek MT7530 Switch");
3513 MODULE_LICENSE("GPL");
3514