aboutsummaryrefslogtreecommitdiff
path: root/pkgs/patches-linux-5.15/781-v5.17-6-net-dsa-lantiq-convert-to-phylink_generic_validate.patch
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/patches-linux-5.15/781-v5.17-6-net-dsa-lantiq-convert-to-phylink_generic_validate.patch')
-rw-r--r--pkgs/patches-linux-5.15/781-v5.17-6-net-dsa-lantiq-convert-to-phylink_generic_validate.patch196
1 files changed, 196 insertions, 0 deletions
diff --git a/pkgs/patches-linux-5.15/781-v5.17-6-net-dsa-lantiq-convert-to-phylink_generic_validate.patch b/pkgs/patches-linux-5.15/781-v5.17-6-net-dsa-lantiq-convert-to-phylink_generic_validate.patch
new file mode 100644
index 0000000..9473bdf
--- /dev/null
+++ b/pkgs/patches-linux-5.15/781-v5.17-6-net-dsa-lantiq-convert-to-phylink_generic_validate.patch
@@ -0,0 +1,196 @@
+From 7a9dfdfe2fdd746541377f395bf0c0d54ea56ad5 Mon Sep 17 00:00:00 2001
+From: "Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>
+Date: Tue, 30 Nov 2021 13:10:16 +0000
+Subject: [PATCH 6/6] net: dsa: lantiq: convert to phylink_generic_validate()
+
+Populate the supported interfaces and MAC capabilities for the Lantiq
+DSA switches and remove the old validate implementation to allow DSA to
+use phylink_generic_validate() for this switch driver.
+
+The exclusion of Gigabit linkmodes for MII, Reverse MII and Reduced MII
+links is handled within phylink_generic_validate() in phylink, so there
+is no need to make them conditional on the interface mode in the driver.
+
+Reviewed-by: Hauke Mehrtens <hauke@hauke-m.de>
+Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+---
+ drivers/net/dsa/lantiq_gswip.c | 120 +++++++++++----------------------
+ 1 file changed, 38 insertions(+), 82 deletions(-)
+
+diff --git a/drivers/net/dsa/lantiq_gswip.c b/drivers/net/dsa/lantiq_gswip.c
+index 4599e958fa05..de9489063824 100644
+--- a/drivers/net/dsa/lantiq_gswip.c
++++ b/drivers/net/dsa/lantiq_gswip.c
+@@ -1426,114 +1426,70 @@ static int gswip_port_fdb_dump(struct dsa_switch *ds, int port,
+ return 0;
+ }
+
+-static void gswip_phylink_set_capab(unsigned long *supported,
+- struct phylink_link_state *state)
+-{
+- __ETHTOOL_DECLARE_LINK_MODE_MASK(mask) = { 0, };
+-
+- /* Allow all the expected bits */
+- phylink_set(mask, Autoneg);
+- phylink_set_port_modes(mask);
+- phylink_set(mask, Pause);
+- phylink_set(mask, Asym_Pause);
+-
+- /* With the exclusion of MII, Reverse MII and Reduced MII, we
+- * support Gigabit, including Half duplex
+- */
+- if (state->interface != PHY_INTERFACE_MODE_MII &&
+- state->interface != PHY_INTERFACE_MODE_REVMII &&
+- state->interface != PHY_INTERFACE_MODE_RMII) {
+- phylink_set(mask, 1000baseT_Full);
+- phylink_set(mask, 1000baseT_Half);
+- }
+-
+- phylink_set(mask, 10baseT_Half);
+- phylink_set(mask, 10baseT_Full);
+- phylink_set(mask, 100baseT_Half);
+- phylink_set(mask, 100baseT_Full);
+-
+- linkmode_and(supported, supported, mask);
+- linkmode_and(state->advertising, state->advertising, mask);
+-}
+-
+-static void gswip_xrx200_phylink_validate(struct dsa_switch *ds, int port,
+- unsigned long *supported,
+- struct phylink_link_state *state)
++static void gswip_xrx200_phylink_get_caps(struct dsa_switch *ds, int port,
++ struct phylink_config *config)
+ {
+ switch (port) {
+ case 0:
+ case 1:
+- if (!phy_interface_mode_is_rgmii(state->interface) &&
+- state->interface != PHY_INTERFACE_MODE_MII &&
+- state->interface != PHY_INTERFACE_MODE_REVMII &&
+- state->interface != PHY_INTERFACE_MODE_RMII)
+- goto unsupported;
++ phy_interface_set_rgmii(config->supported_interfaces);
++ __set_bit(PHY_INTERFACE_MODE_MII,
++ config->supported_interfaces);
++ __set_bit(PHY_INTERFACE_MODE_REVMII,
++ config->supported_interfaces);
++ __set_bit(PHY_INTERFACE_MODE_RMII,
++ config->supported_interfaces);
+ break;
++
+ case 2:
+ case 3:
+ case 4:
+- if (state->interface != PHY_INTERFACE_MODE_INTERNAL)
+- goto unsupported;
++ __set_bit(PHY_INTERFACE_MODE_INTERNAL,
++ config->supported_interfaces);
+ break;
++
+ case 5:
+- if (!phy_interface_mode_is_rgmii(state->interface) &&
+- state->interface != PHY_INTERFACE_MODE_INTERNAL)
+- goto unsupported;
++ phy_interface_set_rgmii(config->supported_interfaces);
++ __set_bit(PHY_INTERFACE_MODE_INTERNAL,
++ config->supported_interfaces);
+ break;
+- default:
+- linkmode_zero(supported);
+- dev_err(ds->dev, "Unsupported port: %i\n", port);
+- return;
+ }
+
+- gswip_phylink_set_capab(supported, state);
+-
+- return;
+-
+-unsupported:
+- linkmode_zero(supported);
+- dev_err(ds->dev, "Unsupported interface '%s' for port %d\n",
+- phy_modes(state->interface), port);
++ config->mac_capabilities = MAC_ASYM_PAUSE | MAC_SYM_PAUSE |
++ MAC_10 | MAC_100 | MAC_1000;
+ }
+
+-static void gswip_xrx300_phylink_validate(struct dsa_switch *ds, int port,
+- unsigned long *supported,
+- struct phylink_link_state *state)
++static void gswip_xrx300_phylink_get_caps(struct dsa_switch *ds, int port,
++ struct phylink_config *config)
+ {
+ switch (port) {
+ case 0:
+- if (!phy_interface_mode_is_rgmii(state->interface) &&
+- state->interface != PHY_INTERFACE_MODE_GMII &&
+- state->interface != PHY_INTERFACE_MODE_RMII)
+- goto unsupported;
++ phy_interface_set_rgmii(config->supported_interfaces);
++ __set_bit(PHY_INTERFACE_MODE_GMII,
++ config->supported_interfaces);
++ __set_bit(PHY_INTERFACE_MODE_RMII,
++ config->supported_interfaces);
+ break;
++
+ case 1:
+ case 2:
+ case 3:
+ case 4:
+- if (state->interface != PHY_INTERFACE_MODE_INTERNAL)
+- goto unsupported;
++ __set_bit(PHY_INTERFACE_MODE_INTERNAL,
++ config->supported_interfaces);
+ break;
++
+ case 5:
+- if (!phy_interface_mode_is_rgmii(state->interface) &&
+- state->interface != PHY_INTERFACE_MODE_INTERNAL &&
+- state->interface != PHY_INTERFACE_MODE_RMII)
+- goto unsupported;
++ phy_interface_set_rgmii(config->supported_interfaces);
++ __set_bit(PHY_INTERFACE_MODE_INTERNAL,
++ config->supported_interfaces);
++ __set_bit(PHY_INTERFACE_MODE_RMII,
++ config->supported_interfaces);
+ break;
+- default:
+- linkmode_zero(supported);
+- dev_err(ds->dev, "Unsupported port: %i\n", port);
+- return;
+ }
+
+- gswip_phylink_set_capab(supported, state);
+-
+- return;
+-
+-unsupported:
+- linkmode_zero(supported);
+- dev_err(ds->dev, "Unsupported interface '%s' for port %d\n",
+- phy_modes(state->interface), port);
++ config->mac_capabilities = MAC_ASYM_PAUSE | MAC_SYM_PAUSE |
++ MAC_10 | MAC_100 | MAC_1000;
+ }
+
+ static void gswip_port_set_link(struct gswip_priv *priv, int port, bool link)
+@@ -1812,7 +1768,7 @@ static const struct dsa_switch_ops gswip_xrx200_switch_ops = {
+ .port_fdb_add = gswip_port_fdb_add,
+ .port_fdb_del = gswip_port_fdb_del,
+ .port_fdb_dump = gswip_port_fdb_dump,
+- .phylink_validate = gswip_xrx200_phylink_validate,
++ .phylink_get_caps = gswip_xrx200_phylink_get_caps,
+ .phylink_mac_config = gswip_phylink_mac_config,
+ .phylink_mac_link_down = gswip_phylink_mac_link_down,
+ .phylink_mac_link_up = gswip_phylink_mac_link_up,
+@@ -1836,7 +1792,7 @@ static const struct dsa_switch_ops gswip_xrx300_switch_ops = {
+ .port_fdb_add = gswip_port_fdb_add,
+ .port_fdb_del = gswip_port_fdb_del,
+ .port_fdb_dump = gswip_port_fdb_dump,
+- .phylink_validate = gswip_xrx300_phylink_validate,
++ .phylink_get_caps = gswip_xrx300_phylink_get_caps,
+ .phylink_mac_config = gswip_phylink_mac_config,
+ .phylink_mac_link_down = gswip_phylink_mac_link_down,
+ .phylink_mac_link_up = gswip_phylink_mac_link_up,
+--
+2.35.1
+