Backport pending PCS standalone feature for kernel 6.12 and all the required dependency patch. All affected patch automatically refreshed. Link: https://github.com/openwrt/openwrt/pull/23271 Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
89 lines
3.3 KiB
Diff
89 lines
3.3 KiB
Diff
From c6f6cb55c3c316f6169e07eacc5ccb214116719a Mon Sep 17 00:00:00 2001
|
|
From: Christian Marangi <ansuelsmth@gmail.com>
|
|
Date: Mon, 31 Mar 2025 15:40:12 +0200
|
|
Subject: [PATCH 1/7] net: phylink: keep and use MAC supported_interfaces in
|
|
phylink struct
|
|
|
|
Add in phylink struct a copy of supported_interfaces from phylink_config
|
|
and make use of that instead of relying on phylink_config value.
|
|
|
|
This in preparation for support of PCS handling internally to phylink
|
|
where a PCS can be removed or added after the phylink is created and we
|
|
need both a reference of the supported_interfaces value from
|
|
phylink_config and an internal value that can be updated with the new
|
|
PCS info.
|
|
|
|
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
|
---
|
|
drivers/net/phy/phylink.c | 22 +++++++++++++++-------
|
|
1 file changed, 15 insertions(+), 7 deletions(-)
|
|
|
|
--- a/drivers/net/phy/phylink.c
|
|
+++ b/drivers/net/phy/phylink.c
|
|
@@ -65,6 +65,11 @@ struct phylink {
|
|
/* The link configuration settings */
|
|
struct phylink_link_state link_config;
|
|
|
|
+ /* What interface are supported by the current link.
|
|
+ * Can change on removal or addition of new PCS.
|
|
+ */
|
|
+ DECLARE_PHY_INTERFACE_MASK(supported_interfaces);
|
|
+
|
|
/* The current settings */
|
|
phy_interface_t cur_interface;
|
|
|
|
@@ -793,7 +798,7 @@ static int phylink_validate_mask(struct
|
|
static int phylink_validate(struct phylink *pl, unsigned long *supported,
|
|
struct phylink_link_state *state)
|
|
{
|
|
- const unsigned long *interfaces = pl->config->supported_interfaces;
|
|
+ const unsigned long *interfaces = pl->supported_interfaces;
|
|
|
|
if (state->interface == PHY_INTERFACE_MODE_NA)
|
|
return phylink_validate_mask(pl, NULL, supported, state,
|
|
@@ -1948,6 +1953,9 @@ struct phylink *phylink_create(struct ph
|
|
mutex_init(&pl->state_mutex);
|
|
INIT_WORK(&pl->resolve, phylink_resolve);
|
|
|
|
+ phy_interface_copy(pl->supported_interfaces,
|
|
+ config->supported_interfaces);
|
|
+
|
|
pl->config = config;
|
|
if (config->type == PHYLINK_NETDEV) {
|
|
pl->netdev = to_net_dev(config->dev);
|
|
@@ -2091,7 +2099,7 @@ static int phylink_validate_phy(struct p
|
|
* those which the host supports.
|
|
*/
|
|
phy_interface_and(interfaces, phy->possible_interfaces,
|
|
- pl->config->supported_interfaces);
|
|
+ pl->supported_interfaces);
|
|
|
|
if (phy_interface_empty(interfaces)) {
|
|
phylink_err(pl, "PHY has no common interfaces\n");
|
|
@@ -3565,14 +3573,14 @@ static int phylink_sfp_config_optical(st
|
|
|
|
phylink_dbg(pl, "optical SFP: interfaces=[mac=%*pbl, sfp=%*pbl]\n",
|
|
(int)PHY_INTERFACE_MODE_MAX,
|
|
- pl->config->supported_interfaces,
|
|
+ pl->supported_interfaces,
|
|
(int)PHY_INTERFACE_MODE_MAX,
|
|
pl->sfp_interfaces);
|
|
|
|
/* Find the union of the supported interfaces by the PCS/MAC and
|
|
* the SFP module.
|
|
*/
|
|
- phy_interface_and(interfaces, pl->config->supported_interfaces,
|
|
+ phy_interface_and(interfaces, pl->supported_interfaces,
|
|
pl->sfp_interfaces);
|
|
if (phy_interface_empty(interfaces)) {
|
|
phylink_err(pl, "unsupported SFP module: no common interface modes\n");
|
|
@@ -3730,7 +3738,7 @@ static int phylink_sfp_connect_phy(void
|
|
|
|
/* Set the PHY's host supported interfaces */
|
|
phy_interface_and(phy->host_interfaces, phylink_sfp_interfaces,
|
|
- pl->config->supported_interfaces);
|
|
+ pl->supported_interfaces);
|
|
|
|
/* Do the initial configuration */
|
|
ret = phylink_sfp_config_phy(pl, phy);
|