net: stmmac/xpcs: modernise PCS support
Subsystems (6)
Russell King (Oracle)
reviewercover net: stmmac/xpcs: modernise PCS support
Hi,
This series updates xpcs and stmmac for the recent changes to phylink to better support split PCS and to get rid of private MAC validation functions.
This series is slightly more involved than other conversions as stmmac has already had optional proper split PCS support.
The first six patches of this series were originally posted on 16th December for CFT, and Wong Vee Khee reported his Intel Elkhart Lake setup was fine the first six these. However, no tested-by was given.
The patches:
1) Provide a function to query the xpcs for the interface modes that are supported.
2) Populates the MAC capabilities and switches stmmac_validate() to use phylink_get_linkmodes(). We do not use phylink_generic_validate() yet as (a) we do not always have the supported interfaces populated, and
(b) the existing code does not restrict based on interface. There should be no functional effect from this patch.
3) Populates phylink's supported interfaces from the xpcs when the xpcs is configured by firmware and also the firmware configured interface mode. Note: this will restrict stmmac to only supporting these interfaces modes - stmmac maintainers need to verify that this behaviour is acceptable.
4) stmmac_validate() tail-calls xpcs_validate(), but we don't need it to now that PCS have their own validation method. Convert stmmac and xpcs to use this method instead.
5) xpcs sets the poll field of phylink_pcs to true, meaning xpcs requires its status to be polled. There is no need to also set the phylink_config.pcs_poll. Remove this.
6) Switch to phylink_generic_validate(). This is probably the most contravertial change in this patch set as this will cause the MAC to restrict link modes based on the interface mode. From an inspection of the xpcs driver, this should be safe, as XPCS only further restricts the link modes to a subset of these (whether that is correct or not is not an issue I am addressing here.) For implementations that do not use xpcs, this is a more open question and needs feedback from stmmac maintainers.
7) Convert to use mac_select_pcs() rather than phylink_set_pcs() to set the PCS - the intention is to eventually remove phylink_set_pcs() once there are no more users of this.
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 147 +++++++--------------- drivers/net/pcs/pcs-xpcs.c | 41 +++--- include/linux/pcs/pcs-xpcs.h | 3 +- 3 files changed, 73 insertions(+), 118 deletions(-)
Signature · 7 lines
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/ FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last! _______________________________________________ linux-arm-kernel mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
PATCH 1/7 net: xpcs: add support for retrieving supported interface modes
Add a function to the xpcs driver to retrieve the supported PHY interface modes, which can be used by drivers to fill in phylink's supported_interfaces mask.
We validate the interface bit index to ensure that it fits within the bitmap as xpcs lists PHY_INTERFACE_MODE_MAX in an entry.
--- drivers/net/pcs/pcs-xpcs.c | 14 ++++++++++++++ include/linux/pcs/pcs-xpcs.h | 1 + 2 files changed, 15 insertions(+)
drivers/net/pcs/pcs-xpcs.c +14 -0
@@ -662,6 +662,20 @@ void xpcs_validate(struct dw_xpcs *xpcs, unsigned long *supported, }EXPORT_SYMBOL_GPL (xpcs_validate); +void xpcs_get_interfaces (struct dw_xpcs *xpcs,unsigned long *interfaces) +{ +int i, j; + +for (i =0 ; i <DW_XPCS_INTERFACE_MAX ; i++) { +const struct xpcs_compat *compat = &xpcs->id->compat[i]; + +for (j =0 ; j < compat->num_interfaces; j++) +if (compat->interface[j] <PHY_INTERFACE_MODE_MAX ) +__set_bit (compat->interface[j], interfaces); + } +} +EXPORT_SYMBOL_GPL (xpcs_get_interfaces); +int xpcs_config_eee (struct dw_xpcs *xpcs,int mult_fact_100ns,int enable) {int ret;
include/linux/pcs/pcs-xpcs.h +1 -0
@@ -33,6 +33,7 @@ int xpcs_do_config(struct dw_xpcs *xpcs, phy_interface_t interface, unsigned int mode);void xpcs_validate (struct dw_xpcs *xpcs,unsigned long *supported,struct phylink_link_state *state); +void xpcs_get_interfaces (struct dw_xpcs *xpcs,unsigned long *interfaces);int xpcs_config_eee (struct dw_xpcs *xpcs,int mult_fact_100ns,int enable); struct dw_xpcs *xpcs_create(struct mdio_device *mdiodev,
Signature · 7 lines
2.30.2 _______________________________________________ linux-arm-kernel mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
PATCH 2/7 net: stmmac: convert to phylink_get_linkmodes()
In reply to Russell King (Oracle)Add the MAC speed, duplex and pause capabilities to the phylink_config structure, and switch stmmac_validate() to use phylink_get_linkmodes() to generate the mask of supported ethtool link modes.
--- .../net/ethernet/stmicro/stmmac/stmmac_main.c | 125 ++++++------------ 1 file changed, 42 insertions(+), 83 deletions(-)
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +42 -83
@@ -942,95 +942,22 @@ static void stmmac_validate(struct phylink_config *config, {struct stmmac_priv *priv =netdev_priv (to_net_dev (config->dev));__ETHTOOL_DECLARE_LINK_MODE_MASK (mac_supported) = {0 , }; -__ETHTOOL_DECLARE_LINK_MODE_MASK (mask) = {0 , }; -int tx_cnt = priv->plat->tx_queues_to_use; -int max_speed = priv->plat->max_speed; - - phylink_set(mac_supported, 10baseT_Half); - phylink_set(mac_supported, 10baseT_Full); - phylink_set(mac_supported, 100baseT_Half); - phylink_set(mac_supported, 100baseT_Full); - phylink_set(mac_supported, 1000baseT_Half); - phylink_set(mac_supported, 1000baseT_Full); - phylink_set(mac_supported, 1000baseKX_Full); +/* This is very similar to phylink_generic_validate() except that +* we always use PHY_INTERFACE_MODE_INTERNAL to get all capabilities. +* This is because we don't always have config->supported_interfaces +* populated (only when we have the XPCS.) +* +* When we do have an XPCS, we could pass state->interface, as XPCS +* limits to a subset of the ethtool link modes allowed here. +*/ phylink_set (mac_supported, Autoneg); -phylink_set (mac_supported, Pause); -phylink_set (mac_supported, Asym_Pause);phylink_set_port_modes (mac_supported); - -/* Cut down 1G if asked to */ -if ((max_speed >0 ) && (max_speed <1000 )) { - phylink_set(mask, 1000baseT_Full); - phylink_set(mask, 1000baseX_Full); - }else if (priv->plat->has_gmac4) { -if (!max_speed || max_speed >=2500 ) { - phylink_set(mac_supported, 2500baseT_Full); - phylink_set(mac_supported, 2500baseX_Full); - } - }else if (priv->plat->has_xgmac) { -if (!max_speed || (max_speed >=2500 )) { - phylink_set(mac_supported, 2500baseT_Full); - phylink_set(mac_supported, 2500baseX_Full); - } -if (!max_speed || (max_speed >=5000 )) { - phylink_set(mac_supported, 5000baseT_Full); - } -if (!max_speed || (max_speed >=10000 )) { - phylink_set(mac_supported, 10000baseSR_Full); - phylink_set(mac_supported, 10000baseLR_Full); - phylink_set(mac_supported, 10000baseER_Full); - phylink_set(mac_supported, 10000baseLRM_Full); - phylink_set(mac_supported, 10000baseT_Full); - phylink_set(mac_supported, 10000baseKX4_Full); - phylink_set(mac_supported, 10000baseKR_Full); - } -if (!max_speed || (max_speed >=25000 )) { - phylink_set(mac_supported, 25000baseCR_Full); - phylink_set(mac_supported, 25000baseKR_Full); - phylink_set(mac_supported, 25000baseSR_Full); - } -if (!max_speed || (max_speed >=40000 )) { - phylink_set(mac_supported, 40000baseKR4_Full); - phylink_set(mac_supported, 40000baseCR4_Full); - phylink_set(mac_supported, 40000baseSR4_Full); - phylink_set(mac_supported, 40000baseLR4_Full); - } -if (!max_speed || (max_speed >=50000 )) { - phylink_set(mac_supported, 50000baseCR2_Full); - phylink_set(mac_supported, 50000baseKR2_Full); - phylink_set(mac_supported, 50000baseSR2_Full); - phylink_set(mac_supported, 50000baseKR_Full); - phylink_set(mac_supported, 50000baseSR_Full); - phylink_set(mac_supported, 50000baseCR_Full); - phylink_set(mac_supported, 50000baseLR_ER_FR_Full); - phylink_set(mac_supported, 50000baseDR_Full); - } -if (!max_speed || (max_speed >=100000 )) { - phylink_set(mac_supported, 100000baseKR4_Full); - phylink_set(mac_supported, 100000baseSR4_Full); - phylink_set(mac_supported, 100000baseCR4_Full); - phylink_set(mac_supported, 100000baseLR4_ER4_Full); - phylink_set(mac_supported, 100000baseKR2_Full); - phylink_set(mac_supported, 100000baseSR2_Full); - phylink_set(mac_supported, 100000baseCR2_Full); - phylink_set(mac_supported, 100000baseLR2_ER2_FR2_Full); - phylink_set(mac_supported, 100000baseDR2_Full); - } - } - -/* Half-Duplex can only work with single queue */ -if (tx_cnt >1 ) { - phylink_set(mask, 10baseT_Half); - phylink_set(mask, 100baseT_Half); - phylink_set(mask, 1000baseT_Half); - } +phylink_get_linkmodes (mac_supported,PHY_INTERFACE_MODE_INTERNAL , + config->mac_capabilities);linkmode_and (supported, supported, mac_supported); -linkmode_andnot (supported, supported, mask); -linkmode_and (state->advertising, state->advertising, mac_supported); -linkmode_andnot (state->advertising, state->advertising, mask);/* If PCS is supported, check which modes it supports. */ if (priv->hw->xpcs)
@@ -1253,6 +1180,7 @@ static int stmmac_phy_setup(struct stmmac_priv *priv) {struct stmmac_mdio_bus_data *mdio_bus_data = priv->plat->mdio_bus_data;struct fwnode_handle *fwnode =of_fwnode_handle (priv->plat->phylink_node); +int max_speed = priv->plat->max_speed;int mode = priv->plat->phy_interface;struct phylink *phylink;
@@ -1266,6 +1194,37 @@ static int stmmac_phy_setup(struct stmmac_priv *priv)if (!fwnode) fwnode =dev_fwnode (priv->device); + priv->phylink_config.mac_capabilities =MAC_ASYM_PAUSE |MAC_SYM_PAUSE | +MAC_10 |MAC_100 ; + +if (!max_speed || max_speed >=1000 ) + priv->phylink_config.mac_capabilities |=MAC_1000 ; + +if (priv->plat->has_gmac4) { +if (!max_speed || max_speed >=2500 ) + priv->phylink_config.mac_capabilities |=MAC_2500FD ; + }else if (priv->plat->has_xgmac) { +if (!max_speed || max_speed >=2500 ) + priv->phylink_config.mac_capabilities |=MAC_2500FD ; +if (!max_speed || max_speed >=5000 ) + priv->phylink_config.mac_capabilities |=MAC_5000FD ; +if (!max_speed || max_speed >=10000 ) + priv->phylink_config.mac_capabilities |=MAC_10000FD ; +if (!max_speed || max_speed >=25000 ) + priv->phylink_config.mac_capabilities |=MAC_25000FD ; +if (!max_speed || max_speed >=40000 ) + priv->phylink_config.mac_capabilities |=MAC_40000FD ; +if (!max_speed || max_speed >=50000 ) + priv->phylink_config.mac_capabilities |=MAC_50000FD ; +if (!max_speed || max_speed >=100000 ) + priv->phylink_config.mac_capabilities |=MAC_100000FD ; + } + +/* Half-Duplex can only work with single queue */ +if (priv->plat->tx_queues_to_use >1 ) + priv->phylink_config.mac_capabilities &= + ~(MAC_10HD |MAC_100HD |MAC_1000HD ); + phylink =phylink_create (&priv->phylink_config, fwnode, mode, &stmmac_phylink_mac_ops);if (IS_ERR (phylink))
Signature · 7 lines
2.30.2 _______________________________________________ linux-arm-kernel mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
PATCH 3/7 net: stmmac: fill in supported_interfaces
In reply to Russell King (Oracle)Fill in phylink's supported_interfaces bitmap with the PHY interface modes which can be used to talk to the PHY.
We indicate that the PHY interface mode passed in platform data is always supported, as this is the initial mode passed into phylink. When there is no PCS specified, we assume that this is the only mode that is supported - indeed, the driver appears not to support dynamic switching of interface types at present.
When a xpcs is present, it defines the PHY interface modes that the stmmac driver can support. Request the supported interfaces from the xpcs driver, and pass them to phylink.
--- drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 8 ++++++++ 1 file changed, 8 insertions(+)
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +8 -0
@@ -1194,6 +1194,14 @@ static int stmmac_phy_setup(struct stmmac_priv *priv)if (!fwnode) fwnode =dev_fwnode (priv->device); +/* Set the platform/firmware specified interface mode */ +__set_bit (mode, priv->phylink_config.supported_interfaces); + +/* If we have an xpcs, it defines which PHY interfaces are supported. */ +if (priv->hw->xpcs) +xpcs_get_interfaces (priv->hw->xpcs, + priv->phylink_config.supported_interfaces); + priv->phylink_config.mac_capabilities =MAC_ASYM_PAUSE |MAC_SYM_PAUSE |MAC_10 |MAC_100 ;
Signature · 7 lines
2.30.2 _______________________________________________ linux-arm-kernel mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
PATCH 4/7 net: stmmac/xpcs: convert to pcs_validate()
In reply to Russell King (Oracle)stmmac explicitly calls the xpcs driver to validate the ethtool linkmodes. This is no longer necessary as phylink now supports validation through a PCS method. Convert both drivers to use this new mechanism.
--- .../net/ethernet/stmicro/stmmac/stmmac_main.c | 4 --- drivers/net/pcs/pcs-xpcs.c | 27 ++++++++----------- include/linux/pcs/pcs-xpcs.h | 2 -- 3 files changed, 11 insertions(+), 22 deletions(-)
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +0 -4
@@ -958,10 +958,6 @@ static void stmmac_validate(struct phylink_config *config,linkmode_and (supported, supported, mac_supported);linkmode_and (state->advertising, state->advertising, mac_supported); - -/* If PCS is supported, check which modes it supports. */ -if (priv->hw->xpcs) -xpcs_validate (priv->hw->xpcs, supported, state); } static void stmmac_mac_config(struct phylink_config *config, unsigned int mode,
drivers/net/pcs/pcs-xpcs.c +11 -16
@@ -632,35 +632,29 @@ static void xpcs_resolve_pma(struct dw_xpcs *xpcs, } } -void xpcs_validate (struct dw_xpcs *xpcs,unsigned long *supported, -struct phylink_link_state *state) +static int xpcs_validate (struct phylink_pcs *pcs,unsigned long *supported, +const struct phylink_link_state *state) { -__ETHTOOL_DECLARE_LINK_MODE_MASK (xpcs_supported); +__ETHTOOL_DECLARE_LINK_MODE_MASK (xpcs_supported) = {0 , };const struct xpcs_compat *compat; +struct dw_xpcs *xpcs;int i; -/* phylink expects us to report all supported modes with -* PHY_INTERFACE_MODE_NA, just don't limit the supported and -* advertising masks and exit. -*/ -if (state->interface ==PHY_INTERFACE_MODE_NA ) -return ; - -linkmode_zero (xpcs_supported); - + xpcs =phylink_pcs_to_xpcs (pcs); compat =xpcs_find_compat (xpcs->id, state->interface); -/* Populate the supported link modes for this -* PHY interface type +/* Populate the supported link modes for this PHY interface type. +* FIXME: what about the port modes and autoneg bit? This masks +* all those away. */ if (compat)for (i =0 ; compat->supported[i] != __ETHTOOL_LINK_MODE_MASK_NBITS; i++)set_bit (compat->supported[i], xpcs_supported);linkmode_and (supported, supported, xpcs_supported); -linkmode_and (state->advertising, state->advertising, xpcs_supported); + +return 0 ; } -EXPORT_SYMBOL_GPL (xpcs_validate);void xpcs_get_interfaces (struct dw_xpcs *xpcs,unsigned long *interfaces) {
@@ -1120,6 +1114,7 @@ static const struct xpcs_id xpcs_id_list[] = { };static const struct phylink_pcs_ops xpcs_phylink_ops = { + .pcs_validate = xpcs_validate, .pcs_config = xpcs_config, .pcs_get_state = xpcs_get_state, .pcs_link_up = xpcs_link_up,
include/linux/pcs/pcs-xpcs.h +0 -2
@@ -31,8 +31,6 @@ void xpcs_link_up(struct phylink_pcs *pcs, unsigned int mode, phy_interface_t interface, int speed, int duplex);int xpcs_do_config (struct dw_xpcs *xpcs,phy_interface_t interface,unsigned int mode); -void xpcs_validate (struct dw_xpcs *xpcs,unsigned long *supported, -struct phylink_link_state *state);void xpcs_get_interfaces (struct dw_xpcs *xpcs,unsigned long *interfaces);int xpcs_config_eee (struct dw_xpcs *xpcs,int mult_fact_100ns,int enable);
Signature · 7 lines
2.30.2 _______________________________________________ linux-arm-kernel mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Jakub Kicinski
maintainerRe: [PATCH net-next 4/7] net: stmmac/xpcs: convert to pcs_validate()
Quoted 6 lines · On Tue, 25 Jan 2022 16:40:40 +0000 Russell King (Oracle) wrote:
stmmac explicitly calls the xpcs driver to validate the ethtool linkmodes. This is no longer necessary as phylink now supports validation through a PCS method. Convert both drivers to use this new mechanism.
Sign-offs got scrambled.
Transient warning from here to patch 6:
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:943:22: warning: unused variable 'priv' [-Wunused-variable]
struct stmmac_priv *priv = netdev_priv(to_net_dev(config->dev));
^Russell King (Oracle)
reviewerRe: [PATCH net-next 4/7] net: stmmac/xpcs: convert to pcs_validate()
Quoted 9 lines · Jakub Kicinski
Quoted 6 lines · On Tue, 25 Jan 2022 16:40:40 +0000 Russell King (Oracle) wrote:
stmmac explicitly calls the xpcs driver to validate the ethtool linkmodes. This is no longer necessary as phylink now supports validation through a PCS method. Convert both drivers to use this new mechanism.
Sign-offs got scrambled.
Grumble. Never used to happen when I used MicroEMACS, but seems to be a regular occurence when using vim - because it's pretty much impossible to see wrapped lines in vim, especially when they have the perfect amount of white space at the end of the previous line.
Quoted 5 lines
Transient warning from here to patch 6:
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:943:22: warning: unused variable 'priv' [-Wunused-variable]struct stmmac_priv *priv = netdev_priv(to_net_dev(config->dev)); ^
Thanks, v2 will be on its way with both of the above fixed.
Signature · 2 lines
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/ FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last!
PATCH 5/7 net: stmmac: remove phylink_config.pcs_poll usage
In reply to Russell King (Oracle)Phylink will use PCS polling whenever the PCS's poll member is set, so setting phylink_config.pcs_poll as well is redundant.
--- drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 1 - 1 file changed, 1 deletion(-)
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +0 -1
@@ -1182,7 +1182,6 @@ static int stmmac_phy_setup(struct stmmac_priv *priv) priv->phylink_config.dev = &priv->dev->dev; priv->phylink_config.type =PHYLINK_NETDEV ; - priv->phylink_config.pcs_poll = true;if (priv->plat->mdio_bus_data) priv->phylink_config.ovr_an_inband = mdio_bus_data->xpcs_an_inband;
Signature · 7 lines
2.30.2 _______________________________________________ linux-arm-kernel mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
PATCH 6/7 net: stmmac: convert to phylink_generic_validate()
In reply to Russell King (Oracle)Convert stmmac to use phylink_generic_validate() now that we have the MAC capabilities and supported interfaces filled in, and we have the PCS validation handled via the PCS operations.
--- .../net/ethernet/stmicro/stmmac/stmmac_main.c | 26 +------------------ 1 file changed, 1 insertion(+), 25 deletions(-)
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +1 -25
@@ -936,30 +936,6 @@ static void stmmac_mac_flow_ctrl(struct stmmac_priv *priv, u32 duplex) priv->pause, tx_cnt); } -static void stmmac_validate (struct phylink_config *config, -unsigned long *supported, -struct phylink_link_state *state) -{ -struct stmmac_priv *priv =netdev_priv (to_net_dev (config->dev)); -__ETHTOOL_DECLARE_LINK_MODE_MASK (mac_supported) = {0 , }; - -/* This is very similar to phylink_generic_validate() except that -* we always use PHY_INTERFACE_MODE_INTERNAL to get all capabilities. -* This is because we don't always have config->supported_interfaces -* populated (only when we have the XPCS.) -* -* When we do have an XPCS, we could pass state->interface, as XPCS -* limits to a subset of the ethtool link modes allowed here. -*/ -phylink_set (mac_supported, Autoneg); -phylink_set_port_modes (mac_supported); -phylink_get_linkmodes (mac_supported,PHY_INTERFACE_MODE_INTERNAL , - config->mac_capabilities); - -linkmode_and (supported, supported, mac_supported); -linkmode_and (state->advertising, state->advertising, mac_supported); -} -static void stmmac_mac_config (struct phylink_config *config,unsigned int mode,const struct phylink_link_state *state) {
@@ -1096,7 +1072,7 @@ static void stmmac_mac_link_up(struct phylink_config *config, }static const struct phylink_mac_ops stmmac_phylink_mac_ops = { - .validate = stmmac_validate, + .validate = phylink_generic_validate, .mac_config = stmmac_mac_config, .mac_link_down = stmmac_mac_link_down, .mac_link_up = stmmac_mac_link_up,
Signature · 7 lines
2.30.2 _______________________________________________ linux-arm-kernel mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
PATCH 7/7 net: stmmac: use .mac_select_pcs() interface
In reply to Russell King (Oracle)Convert stmmac to use the mac_select_pcs() interface rather than using phylink_set_pcs(). The intention here is to unify the approach for PCS and eventually to remove phylink_set_pcs().
--- drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-)
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +12 -3
@@ -936,6 +936,17 @@ static void stmmac_mac_flow_ctrl(struct stmmac_priv *priv, u32 duplex) priv->pause, tx_cnt); } +static struct phylink_pcs *stmmac_mac_select_pcs (struct phylink_config *config, +phy_interface_t interface) +{ +struct stmmac_priv *priv =netdev_priv (to_net_dev (config->dev)); + +if (!priv->hw->xpcs) +return NULL ; + +return &priv->hw->xpcs->pcs; +} +static void stmmac_mac_config (struct phylink_config *config,unsigned int mode,const struct phylink_link_state *state) {
@@ -1073,6 +1084,7 @@ static void stmmac_mac_link_up(struct phylink_config *config,static const struct phylink_mac_ops stmmac_phylink_mac_ops = { .validate = phylink_generic_validate, + .mac_select_pcs = stmmac_mac_select_pcs, .mac_config = stmmac_mac_config, .mac_link_down = stmmac_mac_link_down, .mac_link_up = stmmac_mac_link_up,
@@ -1209,9 +1221,6 @@ static int stmmac_phy_setup(struct stmmac_priv *priv)if (IS_ERR (phylink))return PTR_ERR (phylink); -if (priv->hw->xpcs) -phylink_set_pcs (phylink, &priv->hw->xpcs->pcs); - priv->phylink = phylink;return 0 ; }
Signature · 7 lines
2.30.2 _______________________________________________ linux-arm-kernel mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-arm-kernel