forked from Openwrt/openwrt
9e86e0b33b
Changelogs: https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.1.67 https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.1.68 https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.1.69 Upstreamed patches: target/linux/generic/backport-6.1/740-v6.9-01-netfilter-flowtable-validate-pppoe-header.patch [1] target/linux/generic/backport-6.1/740-v6.9-02-netfilter-flowtable-incorrect-pppoe-tuple.patch [2] target/linux/generic/backport-6.1/790-48-STABLE-net-dsa-mt7530-trap-link-local-frames-regardless-of-.patch [3] target/linux/generic/backport-6.1/790-50-v6.10-net-dsa-mt7530-fix-mirroring-frames-received-on-loca.patch [4] target/linux/generic/backport-6.1/790-16-v6.4-net-dsa-mt7530-set-all-CPU-ports-in-MT7531_CPU_PMAP.patch [5] target/linux/generic/backport-6.1/790-46-v6.9-net-dsa-mt7530-fix-improper-frames-on-all-25MHz-and-.patch [6] target/linux/generic/backport-6.1/790-47-v6.10-net-dsa-mt7530-fix-enabling-EEE-on-MT7531-switch-on-.patch [7] target/linux/mediatek/patches-6.1/220-v6.3-clk-mediatek-clk-gate-Propagate-struct-device-with-m.patch [8] target/linux/mediatek/patches-6.1/222-v6.3-clk-mediatek-clk-mtk-Propagate-struct-device-for-com.patch [9] target/linux/mediatek/patches-6.1/223-v6.3-clk-mediatek-clk-mux-Propagate-struct-device-for-mtk.patch [10] target/linux/mediatek/patches-6.1/226-v6.3-clk-mediatek-clk-mtk-Extend-mtk_clk_simple_probe.patch [11] Symbol changes: MITIGATION_SPECTRE_BHI (new) [12] SPECTRE_BHI_{ON,OFF} (deprecated) [12] References: [1] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.1.89&id=8bf7c76a2a207ca2b4cfda0a279192adf27678d7 [2] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.1.89&id=f1c3c61701a0b12f4906152c1626a5de580ea3d2 [3] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.1.89&id=19643bf8c9b5bb5eea5163bf2f6a3eee6fb5b99b [4] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.1.89&id=e86c9db58eba290e858e2bb80efcde9e3973a5ef [5] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.1.89&id=013c787d231188a6408e2991150d3c9bf9a2aa0b [6] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.1.89&id=41a004ffba9b1fd8a5a7128ebd0dfa3ed39c3316 [7] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.1.89&id=7d51db455ca03e5270cc585a75a674abd063fa6c [8] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.1.89&id=082b831488a41257b7ac7ffa1d80a0b60d98394d [9] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.1.89&id=6f5f72a684a2823f21efbfd20c7e4b528c44a781 [10] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.1.89&id=a4fe8813a7868ba5867e42e60de7a2b8baac30ff [11] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.1.89&id=c1d87d56af063c87961511ee25f6b07a5676d27d [12] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.1.89&id=d844df110084ef8bd950a52194865f3f63b561ca Signed-off-by: Shiji Yang <yangshiji66@qq.com>
306 lines
9.6 KiB
Diff
306 lines
9.6 KiB
Diff
From 8554f6a7914d28b179671540f527897d85c88809 Mon Sep 17 00:00:00 2001
|
||
From: =?UTF-8?q?Ar=C4=B1n=C3=A7=20=C3=9CNAL?= <arinc.unal@arinc9.com>
|
||
Date: Fri, 1 Mar 2024 12:43:01 +0200
|
||
Subject: [PATCH 41/48] net: dsa: mt7530: get rid of
|
||
priv->info->cpu_port_config()
|
||
MIME-Version: 1.0
|
||
Content-Type: text/plain; charset=UTF-8
|
||
Content-Transfer-Encoding: 8bit
|
||
|
||
priv->info->cpu_port_config() is used for MT7531 and the switch on the
|
||
MT7988 SoC. It sets up the ports described as a CPU port earlier than the
|
||
phylink code path would do.
|
||
|
||
This function is useless as:
|
||
- Configuring the MACs can be done from the phylink_mac_config code path
|
||
instead.
|
||
- All the link configuration it does on the CPU ports are later undone with
|
||
the port_enable, phylink_mac_config, and then phylink_mac_link_up code
|
||
path [1].
|
||
|
||
priv->p5_interface and priv->p6_interface were being used to prevent
|
||
configuring the MACs from the phylink_mac_config code path. Remove them now
|
||
that they hold no purpose.
|
||
|
||
Remove priv->info->cpu_port_config(). On mt753x_phylink_mac_config, switch
|
||
to if statements to simplify the code.
|
||
|
||
Remove the overwriting of the speed and duplex interfaces for certain
|
||
interface modes. Phylink already provides the speed and duplex variables
|
||
with proper values. Phylink already sets the max speed of TRGMII to
|
||
SPEED_1000. Add SPEED_2500 for PHY_INTERFACE_MODE_2500BASEX to where the
|
||
speed and EEE bits are set instead.
|
||
|
||
On the switch on the MT7988 SoC, PHY_INTERFACE_MODE_INTERNAL is being used
|
||
to describe the interface mode of the 10G MAC, which is of port 6. On
|
||
mt7988_cpu_port_config() PMCR_FORCE_SPEED_1000 was set via the
|
||
PMCR_CPU_PORT_SETTING() mask. Add SPEED_10000 case to where the speed bits
|
||
are set to cover this. No need to add it to where the EEE bits are set as
|
||
the "MT7988A Wi-Fi 7 Generation Router Platform: Datasheet (Open Version)
|
||
v0.1" document shows that these bits don't exist on the MT7530_PMCR_P(6)
|
||
register.
|
||
|
||
Remove the definition of PMCR_CPU_PORT_SETTING() now that it holds no
|
||
purpose.
|
||
|
||
Change mt753x_cpu_port_enable() to void now that there're no error cases
|
||
left.
|
||
|
||
Link: https://lore.kernel.org/netdev/ZHy2jQLesdYFMQtO@shell.armlinux.org.uk/ [1]
|
||
Suggested-by: Russell King (Oracle) <linux@armlinux.org.uk>
|
||
Signed-off-by: Arınç ÜNAL <arinc.unal@arinc9.com>
|
||
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||
---
|
||
drivers/net/dsa/mt7530.c | 114 +++------------------------------------
|
||
drivers/net/dsa/mt7530.h | 11 ----
|
||
2 files changed, 7 insertions(+), 118 deletions(-)
|
||
|
||
--- a/drivers/net/dsa/mt7530.c
|
||
+++ b/drivers/net/dsa/mt7530.c
|
||
@@ -1170,18 +1170,10 @@ mt753x_trap_frames(struct mt7530_priv *p
|
||
MT753X_BPDU_CPU_ONLY);
|
||
}
|
||
|
||
-static int
|
||
+static void
|
||
mt753x_cpu_port_enable(struct dsa_switch *ds, int port)
|
||
{
|
||
struct mt7530_priv *priv = ds->priv;
|
||
- int ret;
|
||
-
|
||
- /* Setup max capability of CPU port at first */
|
||
- if (priv->info->cpu_port_config) {
|
||
- ret = priv->info->cpu_port_config(ds, port);
|
||
- if (ret)
|
||
- return ret;
|
||
- }
|
||
|
||
/* Enable Mediatek header mode on the cpu port */
|
||
mt7530_write(priv, MT7530_PVC_P(port),
|
||
@@ -1207,8 +1199,6 @@ mt753x_cpu_port_enable(struct dsa_switch
|
||
/* Set to fallback mode for independent VLAN learning */
|
||
mt7530_rmw(priv, MT7530_PCR_P(port), PCR_PORT_VLAN_MASK,
|
||
MT7530_PORT_FALLBACK_MODE);
|
||
-
|
||
- return 0;
|
||
}
|
||
|
||
static int
|
||
@@ -2461,8 +2451,6 @@ mt7530_setup(struct dsa_switch *ds)
|
||
val |= MHWTRAP_MANUAL;
|
||
mt7530_write(priv, MT7530_MHWTRAP, val);
|
||
|
||
- priv->p6_interface = PHY_INTERFACE_MODE_NA;
|
||
-
|
||
if ((val & HWTRAP_XTAL_MASK) == HWTRAP_XTAL_40MHZ)
|
||
mt7530_pll_setup(priv);
|
||
|
||
@@ -2480,9 +2468,7 @@ mt7530_setup(struct dsa_switch *ds)
|
||
mt7530_set(priv, MT7530_PSC_P(i), SA_DIS);
|
||
|
||
if (dsa_is_cpu_port(ds, i)) {
|
||
- ret = mt753x_cpu_port_enable(ds, i);
|
||
- if (ret)
|
||
- return ret;
|
||
+ mt753x_cpu_port_enable(ds, i);
|
||
} else {
|
||
mt7530_port_disable(ds, i);
|
||
|
||
@@ -2589,9 +2575,7 @@ mt7531_setup_common(struct dsa_switch *d
|
||
mt7530_set(priv, MT7531_DBG_CNT(i), MT7531_DIS_CLR);
|
||
|
||
if (dsa_is_cpu_port(ds, i)) {
|
||
- ret = mt753x_cpu_port_enable(ds, i);
|
||
- if (ret)
|
||
- return ret;
|
||
+ mt753x_cpu_port_enable(ds, i);
|
||
} else {
|
||
mt7530_port_disable(ds, i);
|
||
|
||
@@ -2683,10 +2667,6 @@ mt7531_setup(struct dsa_switch *ds)
|
||
mt7530_rmw(priv, MT7531_GPIO_MODE0, MT7531_GPIO0_MASK,
|
||
MT7531_GPIO0_INTERRUPT);
|
||
|
||
- /* Let phylink decide the interface later. */
|
||
- priv->p5_interface = PHY_INTERFACE_MODE_NA;
|
||
- priv->p6_interface = PHY_INTERFACE_MODE_NA;
|
||
-
|
||
/* Enable Energy-Efficient Ethernet (EEE) and PHY core PLL, since
|
||
* phy_device has not yet been created provided for
|
||
* phy_[read,write]_mmd_indirect is called, we provide our own
|
||
@@ -2905,26 +2885,9 @@ mt753x_phylink_mac_config(struct dsa_swi
|
||
struct mt7530_priv *priv = ds->priv;
|
||
u32 mcr_cur, mcr_new;
|
||
|
||
- switch (port) {
|
||
- case 5:
|
||
- if (priv->p5_interface == state->interface)
|
||
- break;
|
||
-
|
||
+ if (port == 5 || port == 6)
|
||
mt753x_mac_config(ds, port, mode, state);
|
||
|
||
- if (priv->p5_intf_sel != P5_DISABLED)
|
||
- priv->p5_interface = state->interface;
|
||
- break;
|
||
- case 6:
|
||
- if (priv->p6_interface == state->interface)
|
||
- break;
|
||
-
|
||
- mt753x_mac_config(ds, port, mode, state);
|
||
-
|
||
- priv->p6_interface = state->interface;
|
||
- break;
|
||
- }
|
||
-
|
||
mcr_cur = mt7530_read(priv, MT7530_PMCR_P(port));
|
||
mcr_new = mcr_cur;
|
||
mcr_new &= ~PMCR_LINK_SETTINGS_MASK;
|
||
@@ -2960,17 +2923,10 @@ static void mt753x_phylink_mac_link_up(s
|
||
|
||
mcr = PMCR_RX_EN | PMCR_TX_EN | PMCR_FORCE_LNK;
|
||
|
||
- /* MT753x MAC works in 1G full duplex mode for all up-clocked
|
||
- * variants.
|
||
- */
|
||
- if (interface == PHY_INTERFACE_MODE_TRGMII ||
|
||
- (phy_interface_mode_is_8023z(interface))) {
|
||
- speed = SPEED_1000;
|
||
- duplex = DUPLEX_FULL;
|
||
- }
|
||
-
|
||
switch (speed) {
|
||
case SPEED_1000:
|
||
+ case SPEED_2500:
|
||
+ case SPEED_10000:
|
||
mcr |= PMCR_FORCE_SPEED_1000;
|
||
break;
|
||
case SPEED_100:
|
||
@@ -2988,6 +2944,7 @@ static void mt753x_phylink_mac_link_up(s
|
||
if (mode == MLO_AN_PHY && phydev && phy_init_eee(phydev, false) >= 0) {
|
||
switch (speed) {
|
||
case SPEED_1000:
|
||
+ case SPEED_2500:
|
||
mcr |= PMCR_FORCE_EEE1G;
|
||
break;
|
||
case SPEED_100:
|
||
@@ -2999,61 +2956,6 @@ static void mt753x_phylink_mac_link_up(s
|
||
mt7530_set(priv, MT7530_PMCR_P(port), mcr);
|
||
}
|
||
|
||
-static int
|
||
-mt7531_cpu_port_config(struct dsa_switch *ds, int port)
|
||
-{
|
||
- struct mt7530_priv *priv = ds->priv;
|
||
- phy_interface_t interface;
|
||
- int speed;
|
||
-
|
||
- switch (port) {
|
||
- case 5:
|
||
- if (!priv->p5_sgmii)
|
||
- interface = PHY_INTERFACE_MODE_RGMII;
|
||
- else
|
||
- interface = PHY_INTERFACE_MODE_2500BASEX;
|
||
-
|
||
- priv->p5_interface = interface;
|
||
- break;
|
||
- case 6:
|
||
- interface = PHY_INTERFACE_MODE_2500BASEX;
|
||
-
|
||
- priv->p6_interface = interface;
|
||
- break;
|
||
- default:
|
||
- return -EINVAL;
|
||
- }
|
||
-
|
||
- if (interface == PHY_INTERFACE_MODE_2500BASEX)
|
||
- speed = SPEED_2500;
|
||
- else
|
||
- speed = SPEED_1000;
|
||
-
|
||
- mt7531_mac_config(ds, port, MLO_AN_FIXED, interface);
|
||
-
|
||
- mt7530_write(priv, MT7530_PMCR_P(port),
|
||
- PMCR_CPU_PORT_SETTING(priv->id));
|
||
- mt753x_phylink_mac_link_up(ds, port, MLO_AN_FIXED, interface, NULL,
|
||
- speed, DUPLEX_FULL, true, true);
|
||
-
|
||
- return 0;
|
||
-}
|
||
-
|
||
-static int
|
||
-mt7988_cpu_port_config(struct dsa_switch *ds, int port)
|
||
-{
|
||
- struct mt7530_priv *priv = ds->priv;
|
||
-
|
||
- mt7530_write(priv, MT7530_PMCR_P(port),
|
||
- PMCR_CPU_PORT_SETTING(priv->id));
|
||
-
|
||
- mt753x_phylink_mac_link_up(ds, port, MLO_AN_FIXED,
|
||
- PHY_INTERFACE_MODE_INTERNAL, NULL,
|
||
- SPEED_10000, DUPLEX_FULL, true, true);
|
||
-
|
||
- return 0;
|
||
-}
|
||
-
|
||
static void mt753x_phylink_get_caps(struct dsa_switch *ds, int port,
|
||
struct phylink_config *config)
|
||
{
|
||
@@ -3312,7 +3214,6 @@ const struct mt753x_info mt753x_table[]
|
||
.sw_setup = mt7531_setup,
|
||
.phy_read = mt7531_ind_phy_read,
|
||
.phy_write = mt7531_ind_phy_write,
|
||
- .cpu_port_config = mt7531_cpu_port_config,
|
||
.mac_port_get_caps = mt7531_mac_port_get_caps,
|
||
.mac_port_config = mt7531_mac_config,
|
||
},
|
||
@@ -3322,7 +3223,6 @@ const struct mt753x_info mt753x_table[]
|
||
.sw_setup = mt7988_setup,
|
||
.phy_read = mt7531_ind_phy_read,
|
||
.phy_write = mt7531_ind_phy_write,
|
||
- .cpu_port_config = mt7988_cpu_port_config,
|
||
.mac_port_get_caps = mt7988_mac_port_get_caps,
|
||
},
|
||
};
|
||
--- a/drivers/net/dsa/mt7530.h
|
||
+++ b/drivers/net/dsa/mt7530.h
|
||
@@ -340,13 +340,6 @@ enum mt7530_vlan_port_acc_frm {
|
||
PMCR_TX_FC_EN | PMCR_RX_FC_EN | \
|
||
PMCR_FORCE_FDX | PMCR_FORCE_LNK | \
|
||
PMCR_FORCE_EEE1G | PMCR_FORCE_EEE100)
|
||
-#define PMCR_CPU_PORT_SETTING(id) (PMCR_FORCE_MODE_ID((id)) | \
|
||
- PMCR_IFG_XMIT(1) | PMCR_MAC_MODE | \
|
||
- PMCR_BACKOFF_EN | PMCR_BACKPR_EN | \
|
||
- PMCR_TX_EN | PMCR_RX_EN | \
|
||
- PMCR_TX_FC_EN | PMCR_RX_FC_EN | \
|
||
- PMCR_FORCE_SPEED_1000 | \
|
||
- PMCR_FORCE_FDX | PMCR_FORCE_LNK)
|
||
|
||
#define MT7530_PMEEECR_P(x) (0x3004 + (x) * 0x100)
|
||
#define WAKEUP_TIME_1000(x) (((x) & 0xFF) << 24)
|
||
@@ -747,7 +740,6 @@ struct mt753x_info {
|
||
int (*sw_setup)(struct dsa_switch *ds);
|
||
int (*phy_read)(struct mt7530_priv *priv, int port, int regnum);
|
||
int (*phy_write)(struct mt7530_priv *priv, int port, int regnum, u16 val);
|
||
- int (*cpu_port_config)(struct dsa_switch *ds, int port);
|
||
void (*mac_port_get_caps)(struct dsa_switch *ds, int port,
|
||
struct phylink_config *config);
|
||
void (*mac_port_validate)(struct dsa_switch *ds, int port,
|
||
@@ -773,7 +765,6 @@ struct mt753x_info {
|
||
* @ports: Holding the state among ports
|
||
* @reg_mutex: The lock for protecting among process accessing
|
||
* registers
|
||
- * @p6_interface Holding the current port 6 interface
|
||
* @p5_intf_sel: Holding the current port 5 interface select
|
||
* @p5_sgmii: Flag for distinguishing if port 5 of the MT7531 switch
|
||
* has got SGMII
|
||
@@ -795,8 +786,6 @@ struct mt7530_priv {
|
||
const struct mt753x_info *info;
|
||
unsigned int id;
|
||
bool mcm;
|
||
- phy_interface_t p6_interface;
|
||
- phy_interface_t p5_interface;
|
||
enum p5_interface_select p5_intf_sel;
|
||
bool p5_sgmii;
|
||
u8 mirror_rx;
|