diff options
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.patch | 196 |
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 + |