mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-04-16 04:13:31 +00:00
147 lines
5.1 KiB
Diff
147 lines
5.1 KiB
Diff
From c33899a6a8c1a5723afbfc075600aba2e2bdbea7 Mon Sep 17 00:00:00 2001
|
||
From: =?UTF-8?q?Ar=C4=B1n=C3=A7=20=C3=9CNAL?= <arinc.unal@arinc9.com>
|
||
Date: Tue, 6 Feb 2024 01:08:04 +0300
|
||
Subject: [PATCH 14/30] net: dsa: mt7530: simplify mt7530_pad_clk_setup()
|
||
MIME-Version: 1.0
|
||
Content-Type: text/plain; charset=UTF-8
|
||
Content-Transfer-Encoding: 8bit
|
||
|
||
This code is from before this driver was converted to phylink API. Phylink
|
||
deals with the unsupported interface cases before mt7530_pad_clk_setup() is
|
||
run. Therefore, the default case would never run. However, it must be
|
||
defined nonetheless to handle all the remaining enumeration values, the
|
||
phy-modes.
|
||
|
||
Switch to if statement for RGMII and return which simplifies the code and
|
||
saves an indent.
|
||
|
||
Set P6_INTF_MODE, which is the three least significant bits of the
|
||
MT7530_P6ECR register, to 0 for RGMII even though it will already be 0
|
||
after reset. This is to keep supporting dynamic reconfiguration of the port
|
||
in the case the interface changes from TRGMII to RGMII.
|
||
|
||
Disable the TRGMII clocks for all cases. They will be enabled if TRGMII is
|
||
being used.
|
||
|
||
Read XTAL after checking for RGMII as it's only needed for the TRGMII
|
||
interface mode.
|
||
|
||
Reviewed-by: Daniel Golle <daniel@makrotopia.org>
|
||
Reviewed-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
|
||
Signed-off-by: Arınç ÜNAL <arinc.unal@arinc9.com>
|
||
Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
|
||
Link: https://lore.kernel.org/r/20240206-for-netnext-mt7530-improvements-2-v5-3-d7d92a185cb1@arinc9.com
|
||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||
---
|
||
drivers/net/dsa/mt7530.c | 91 ++++++++++++++++++----------------------
|
||
1 file changed, 40 insertions(+), 51 deletions(-)
|
||
|
||
--- a/drivers/net/dsa/mt7530.c
|
||
+++ b/drivers/net/dsa/mt7530.c
|
||
@@ -418,65 +418,54 @@ static int
|
||
mt7530_pad_clk_setup(struct dsa_switch *ds, phy_interface_t interface)
|
||
{
|
||
struct mt7530_priv *priv = ds->priv;
|
||
- u32 ncpo1, ssc_delta, trgint, xtal;
|
||
+ u32 ncpo1, ssc_delta, xtal;
|
||
|
||
- xtal = mt7530_read(priv, MT7530_MHWTRAP) & HWTRAP_XTAL_MASK;
|
||
+ /* Disable the MT7530 TRGMII clocks */
|
||
+ core_clear(priv, CORE_TRGMII_GSW_CLK_CG, REG_TRGMIICK_EN);
|
||
|
||
- switch (interface) {
|
||
- case PHY_INTERFACE_MODE_RGMII:
|
||
- trgint = 0;
|
||
- break;
|
||
- case PHY_INTERFACE_MODE_TRGMII:
|
||
- trgint = 1;
|
||
- if (xtal == HWTRAP_XTAL_25MHZ)
|
||
- ssc_delta = 0x57;
|
||
- else
|
||
- ssc_delta = 0x87;
|
||
- if (priv->id == ID_MT7621) {
|
||
- /* PLL frequency: 125MHz: 1.0GBit */
|
||
- if (xtal == HWTRAP_XTAL_40MHZ)
|
||
- ncpo1 = 0x0640;
|
||
- if (xtal == HWTRAP_XTAL_25MHZ)
|
||
- ncpo1 = 0x0a00;
|
||
- } else { /* PLL frequency: 250MHz: 2.0Gbit */
|
||
- if (xtal == HWTRAP_XTAL_40MHZ)
|
||
- ncpo1 = 0x0c80;
|
||
- if (xtal == HWTRAP_XTAL_25MHZ)
|
||
- ncpo1 = 0x1400;
|
||
- }
|
||
- break;
|
||
- default:
|
||
- dev_err(priv->dev, "xMII interface %d not supported\n",
|
||
- interface);
|
||
- return -EINVAL;
|
||
+ if (interface == PHY_INTERFACE_MODE_RGMII) {
|
||
+ mt7530_rmw(priv, MT7530_P6ECR, P6_INTF_MODE_MASK,
|
||
+ P6_INTF_MODE(0));
|
||
+ return 0;
|
||
}
|
||
|
||
- mt7530_rmw(priv, MT7530_P6ECR, P6_INTF_MODE_MASK,
|
||
- P6_INTF_MODE(trgint));
|
||
+ mt7530_rmw(priv, MT7530_P6ECR, P6_INTF_MODE_MASK, P6_INTF_MODE(1));
|
||
|
||
- if (trgint) {
|
||
- /* Disable the MT7530 TRGMII clocks */
|
||
- core_clear(priv, CORE_TRGMII_GSW_CLK_CG, REG_TRGMIICK_EN);
|
||
-
|
||
- /* Setup the MT7530 TRGMII Tx Clock */
|
||
- core_write(priv, CORE_PLL_GROUP5, RG_LCDDS_PCW_NCPO1(ncpo1));
|
||
- core_write(priv, CORE_PLL_GROUP6, RG_LCDDS_PCW_NCPO0(0));
|
||
- core_write(priv, CORE_PLL_GROUP10, RG_LCDDS_SSC_DELTA(ssc_delta));
|
||
- core_write(priv, CORE_PLL_GROUP11, RG_LCDDS_SSC_DELTA1(ssc_delta));
|
||
- core_write(priv, CORE_PLL_GROUP4,
|
||
- RG_SYSPLL_DDSFBK_EN | RG_SYSPLL_BIAS_EN |
|
||
- RG_SYSPLL_BIAS_LPF_EN);
|
||
- core_write(priv, CORE_PLL_GROUP2,
|
||
- RG_SYSPLL_EN_NORMAL | RG_SYSPLL_VODEN |
|
||
- RG_SYSPLL_POSDIV(1));
|
||
- core_write(priv, CORE_PLL_GROUP7,
|
||
- RG_LCDDS_PCW_NCPO_CHG | RG_LCCDS_C(3) |
|
||
- RG_LCDDS_PWDB | RG_LCDDS_ISO_EN);
|
||
+ xtal = mt7530_read(priv, MT7530_MHWTRAP) & HWTRAP_XTAL_MASK;
|
||
|
||
- /* Enable the MT7530 TRGMII clocks */
|
||
- core_set(priv, CORE_TRGMII_GSW_CLK_CG, REG_TRGMIICK_EN);
|
||
+ if (xtal == HWTRAP_XTAL_25MHZ)
|
||
+ ssc_delta = 0x57;
|
||
+ else
|
||
+ ssc_delta = 0x87;
|
||
+
|
||
+ if (priv->id == ID_MT7621) {
|
||
+ /* PLL frequency: 125MHz: 1.0GBit */
|
||
+ if (xtal == HWTRAP_XTAL_40MHZ)
|
||
+ ncpo1 = 0x0640;
|
||
+ if (xtal == HWTRAP_XTAL_25MHZ)
|
||
+ ncpo1 = 0x0a00;
|
||
+ } else { /* PLL frequency: 250MHz: 2.0Gbit */
|
||
+ if (xtal == HWTRAP_XTAL_40MHZ)
|
||
+ ncpo1 = 0x0c80;
|
||
+ if (xtal == HWTRAP_XTAL_25MHZ)
|
||
+ ncpo1 = 0x1400;
|
||
}
|
||
|
||
+ /* Setup the MT7530 TRGMII Tx Clock */
|
||
+ core_write(priv, CORE_PLL_GROUP5, RG_LCDDS_PCW_NCPO1(ncpo1));
|
||
+ core_write(priv, CORE_PLL_GROUP6, RG_LCDDS_PCW_NCPO0(0));
|
||
+ core_write(priv, CORE_PLL_GROUP10, RG_LCDDS_SSC_DELTA(ssc_delta));
|
||
+ core_write(priv, CORE_PLL_GROUP11, RG_LCDDS_SSC_DELTA1(ssc_delta));
|
||
+ core_write(priv, CORE_PLL_GROUP4, RG_SYSPLL_DDSFBK_EN |
|
||
+ RG_SYSPLL_BIAS_EN | RG_SYSPLL_BIAS_LPF_EN);
|
||
+ core_write(priv, CORE_PLL_GROUP2, RG_SYSPLL_EN_NORMAL |
|
||
+ RG_SYSPLL_VODEN | RG_SYSPLL_POSDIV(1));
|
||
+ core_write(priv, CORE_PLL_GROUP7, RG_LCDDS_PCW_NCPO_CHG |
|
||
+ RG_LCCDS_C(3) | RG_LCDDS_PWDB | RG_LCDDS_ISO_EN);
|
||
+
|
||
+ /* Enable the MT7530 TRGMII clocks */
|
||
+ core_set(priv, CORE_TRGMII_GSW_CLK_CG, REG_TRGMIICK_EN);
|
||
+
|
||
return 0;
|
||
}
|
||
|