dceb5938f8
Changelog: https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.6.29 Removed upstreamed: generic/backport-6.6/740-v6.9-01-netfilter-flowtable-validate-pppoe-header.patch[1] generic/backport-6.6/740-v6.9-02-netfilter-flowtable-incorrect-pppoe-tuple.patch[2] generic/backport-6.6/790-29-v6.9-net-dsa-mt7530-fix-improper-frames-on-all-25MHz-and-.patch[3] generic/backport-6.6/790-31-v6.10-net-dsa-mt7530-fix-enabling-EEE-on-MT7531-switch-on-.patch[4] generic/backport-6.6/790-34-v6.10-net-dsa-mt7530-fix-mirroring-frames-received-on-loca.patch[5] generic/backport-6.6/790-35-v6.10-net-dsa-mt7530-fix-port-mirroring-for-MT7988-SoC-swi.patch[6] mediatek/patches-6.6/963-net-ethernet-mtk_eth_soc-fix-WED-wifi-reset.patch[7] Manually rebased: generic/backport-6.6/790-23-v6.9-net-dsa-mt7530-get-rid-of-priv-info-cpu_port_config.patch All other patches automatically rebased. 1. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.6.29&id=a2471d271042ea18e8a6babc132a8716bb2f08b9 2. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.6.29&id=4ed82dd368ad883dc4284292937b882f044e625d 3. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.6.29&id=21b9d89d93422221cdda1b82fd075fa3c94a11d9 4. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.6.29&id=bd41ee1efd478852a0882ce5f136bc2b5e83eff2 5. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.6.29&id=d1be3960539249a8690ed09a29d0e3bf34189dd2 6. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.6.29&id=f8de1b6208bf71bd3102548d33dd8475573ad2ea 7. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.6.29&id=6855f724f19620c3ddff57c349e0abba797475b1 Build system: x86/64 Build-tested: x86/64/AMD Cezanne, flogic/xiaomi_redmi-router-ax6000-ubootmod, ramips/tplink_archer-a6-v3 Run-tested: x86/64/AMD Cezanne, flogic/xiaomi_redmi-router-ax6000-ubootmod, ramips/tplink_archer-a6-v3 Signed-off-by: John Audia <therealgraysky@proton.me>
155 lines
5.7 KiB
Diff
155 lines
5.7 KiB
Diff
From b9547109205c5e0a27e5bed568b0fc183fff906b Mon Sep 17 00:00:00 2001
|
||
From: =?UTF-8?q?Ar=C4=B1n=C3=A7=20=C3=9CNAL?= <arinc.unal@arinc9.com>
|
||
Date: Thu, 14 Mar 2024 12:28:35 +0300
|
||
Subject: [PATCH 30/30] net: dsa: mt7530: prevent possible incorrect XTAL
|
||
frequency selection
|
||
MIME-Version: 1.0
|
||
Content-Type: text/plain; charset=UTF-8
|
||
Content-Transfer-Encoding: 8bit
|
||
|
||
On MT7530, the HT_XTAL_FSEL field of the HWTRAP register stores a 2-bit
|
||
value that represents the frequency of the crystal oscillator connected to
|
||
the switch IC. The field is populated by the state of the ESW_P4_LED_0 and
|
||
ESW_P4_LED_0 pins, which is done right after reset is deasserted.
|
||
|
||
ESW_P4_LED_0 ESW_P3_LED_0 Frequency
|
||
-----------------------------------------
|
||
0 0 Reserved
|
||
0 1 20MHz
|
||
1 0 40MHz
|
||
1 1 25MHz
|
||
|
||
On MT7531, the XTAL25 bit of the STRAP register stores this. The LAN0LED0
|
||
pin is used to populate the bit. 25MHz when the pin is high, 40MHz when
|
||
it's low.
|
||
|
||
These pins are also used with LEDs, therefore, their state can be set to
|
||
something other than the bootstrapping configuration. For example, a link
|
||
may be established on port 3 before the DSA subdriver takes control of the
|
||
switch which would set ESW_P3_LED_0 to high.
|
||
|
||
Currently on mt7530_setup() and mt7531_setup(), 1000 - 1100 usec delay is
|
||
described between reset assertion and deassertion. Some switch ICs in real
|
||
life conditions cannot always have these pins set back to the bootstrapping
|
||
configuration before reset deassertion in this amount of delay. This causes
|
||
wrong crystal frequency to be selected which puts the switch in a
|
||
nonfunctional state after reset deassertion.
|
||
|
||
The tests below are conducted on an MT7530 with a 40MHz crystal oscillator
|
||
by Justin Swartz.
|
||
|
||
With a cable from an active peer connected to port 3 before reset, an
|
||
incorrect crystal frequency (0b11 = 25MHz) is selected:
|
||
|
||
[1] [3] [5]
|
||
: : :
|
||
_____________________________ __________________
|
||
ESW_P4_LED_0 |_______|
|
||
_____________________________
|
||
ESW_P3_LED_0 |__________________________
|
||
|
||
: : : :
|
||
: : [4]...:
|
||
: :
|
||
[2]................:
|
||
|
||
[1] Reset is asserted.
|
||
[2] Period of 1000 - 1100 usec.
|
||
[3] Reset is deasserted.
|
||
[4] Period of 315 usec. HWTRAP register is populated with incorrect
|
||
XTAL frequency.
|
||
[5] Signals reflect the bootstrapped configuration.
|
||
|
||
Increase the delay between reset_control_assert() and
|
||
reset_control_deassert(), and gpiod_set_value_cansleep(priv->reset, 0) and
|
||
gpiod_set_value_cansleep(priv->reset, 1) to 5000 - 5100 usec. This amount
|
||
ensures a higher possibility that the switch IC will have these pins back
|
||
to the bootstrapping configuration before reset deassertion.
|
||
|
||
With a cable from an active peer connected to port 3 before reset, the
|
||
correct crystal frequency (0b10 = 40MHz) is selected:
|
||
|
||
[1] [2-1] [3] [5]
|
||
: : : :
|
||
_____________________________ __________________
|
||
ESW_P4_LED_0 |_______|
|
||
___________________ _______
|
||
ESW_P3_LED_0 |_________| |__________________
|
||
|
||
: : : : :
|
||
: [2-2]...: [4]...:
|
||
[2]................:
|
||
|
||
[1] Reset is asserted.
|
||
[2] Period of 5000 - 5100 usec.
|
||
[2-1] ESW_P3_LED_0 goes low.
|
||
[2-2] Remaining period of 5000 - 5100 usec.
|
||
[3] Reset is deasserted.
|
||
[4] Period of 310 usec. HWTRAP register is populated with bootstrapped
|
||
XTAL frequency.
|
||
[5] Signals reflect the bootstrapped configuration.
|
||
|
||
ESW_P3_LED_0 low period before reset deassertion:
|
||
|
||
5000 usec
|
||
- 5100 usec
|
||
TEST RESET HOLD
|
||
# (usec)
|
||
---------------------
|
||
1 5410
|
||
2 5440
|
||
3 4375
|
||
4 5490
|
||
5 5475
|
||
6 4335
|
||
7 4370
|
||
8 5435
|
||
9 4205
|
||
10 4335
|
||
11 3750
|
||
12 3170
|
||
13 4395
|
||
14 4375
|
||
15 3515
|
||
16 4335
|
||
17 4220
|
||
18 4175
|
||
19 4175
|
||
20 4350
|
||
|
||
Min 3170
|
||
Max 5490
|
||
|
||
Median 4342.500
|
||
Avg 4466.500
|
||
|
||
Revert commit 2920dd92b980 ("net: dsa: mt7530: disable LEDs before reset").
|
||
Changing the state of pins via reset assertion is simpler and more
|
||
efficient than doing so by setting the LED controller off.
|
||
|
||
Fixes: b8f126a8d543 ("net-next: dsa: add dsa support for Mediatek MT7530 switch")
|
||
Fixes: c288575f7810 ("net: dsa: mt7530: Add the support of MT7531 switch")
|
||
Co-developed-by: Justin Swartz <justin.swartz@risingedge.co.za>
|
||
Signed-off-by: Justin Swartz <justin.swartz@risingedge.co.za>
|
||
Signed-off-by: Arınç ÜNAL <arinc.unal@arinc9.com>
|
||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||
---
|
||
drivers/net/dsa/mt7530.c | 6 ------
|
||
1 file changed, 6 deletions(-)
|
||
|
||
--- a/drivers/net/dsa/mt7530.c
|
||
+++ b/drivers/net/dsa/mt7530.c
|
||
@@ -2391,12 +2391,6 @@ mt7530_setup(struct dsa_switch *ds)
|
||
}
|
||
}
|
||
|
||
- /* Disable LEDs before reset to prevent the MT7530 sampling a
|
||
- * potentially incorrect HT_XTAL_FSEL value.
|
||
- */
|
||
- mt7530_write(priv, MT7530_LED_EN, 0);
|
||
- usleep_range(1000, 1100);
|
||
-
|
||
/* Reset whole chip through gpio pin or memory-mapped registers for
|
||
* different type of hardware
|
||
*/
|