mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-06-21 04:45:29 +08: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;
|
|||
|
}
|
|||
|
|