Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

net: dsa: mt7530: fix improper frames on all 25MHz and 40MHz XTAL MT7530

The MT7530 switch after reset initialises with a core clock frequency that
works with a 25MHz XTAL connected to it. For 40MHz XTAL, the core clock
frequency must be set to 500MHz.

The mt7530_pll_setup() function is responsible of setting the core clock
frequency. Currently, it runs on MT7530 with 25MHz and 40MHz XTAL. This
causes MT7530 switch with 25MHz XTAL to egress and ingress frames
improperly.

Introduce a check to run it only on MT7530 with 40MHz XTAL.

The core clock frequency is set by writing to a switch PHY's register.
Access to the PHY's register is done via the MDIO bus the switch is also
on. Therefore, it works only when the switch makes switch PHYs listen on
the MDIO bus the switch is on. This is controlled either by the state of
the ESW_P1_LED_1 pin after reset deassertion or modifying bit 5 of the
modifiable trap register.

When ESW_P1_LED_1 is pulled high, PHY indirect access is used. That means
accessing PHY registers via the PHY indirect access control register of the
switch.

When ESW_P1_LED_1 is pulled low, PHY direct access is used. That means
accessing PHY registers via the MDIO bus the switch is on.

For MT7530 switch with 40MHz XTAL on a board with ESW_P1_LED_1 pulled high,
the core clock frequency won't be set to 500MHz, causing the switch to
egress and ingress frames improperly.

Run mt7530_pll_setup() after PHY direct access is set on the modifiable
trap register.

With these two changes, all MT7530 switches with 25MHz and 40MHz, and
P1_LED_1 pulled high or low, will egress and ingress frames properly.

Link: https://github.com/BPI-SINOVOIP/BPI-R2-bsp/blob/4a5dd143f2172ec97a2872fa29c7c4cd520f45b5/linux-mt/drivers/net/ethernet/mediatek/gsw_mt7623.c#L1039
Fixes: b8f126a8d543 ("net-next: dsa: add dsa support for Mediatek MT7530 switch")
Signed-off-by: Arınç ÜNAL <arinc.unal@arinc9.com>
Link: https://lore.kernel.org/r/20240320-for-net-mt7530-fix-25mhz-xtal-with-direct-phy-access-v1-1-d92f605f1160@arinc9.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>

authored by

Arınç ÜNAL and committed by
Paolo Abeni
5f563c31 7d5a7dd5

+3 -2
+3 -2
drivers/net/dsa/mt7530.c
··· 2268 2268 SYS_CTRL_PHY_RST | SYS_CTRL_SW_RST | 2269 2269 SYS_CTRL_REG_RST); 2270 2270 2271 - mt7530_pll_setup(priv); 2272 - 2273 2271 /* Lower Tx driving for TRGMII path */ 2274 2272 for (i = 0; i < NUM_TRGMII_CTRL; i++) 2275 2273 mt7530_write(priv, MT7530_TRGMII_TD_ODT(i), ··· 2282 2284 val &= ~MHWTRAP_P6_DIS & ~MHWTRAP_PHY_ACCESS; 2283 2285 val |= MHWTRAP_MANUAL; 2284 2286 mt7530_write(priv, MT7530_MHWTRAP, val); 2287 + 2288 + if ((val & HWTRAP_XTAL_MASK) == HWTRAP_XTAL_40MHZ) 2289 + mt7530_pll_setup(priv); 2285 2290 2286 2291 mt753x_trap_frames(priv); 2287 2292