diff options
| author | Serge Semin <fancer.lancer@gmail.com> | 2024-04-12 21:03:15 +0300 | 
|---|---|---|
| committer | Paolo Abeni <pabeni@redhat.com> | 2024-04-16 15:24:53 +0200 | 
| commit | 59c3d6ca6cbded6c6599e975b42a9d6a27fcbaf2 (patch) | |
| tree | 27b1ce410d587c0db82c0b0791630fe155cda77c | |
| parent | 0ebd96f5da4410c0cb8fc75e44f1009530b2f90b (diff) | |
net: stmmac: Fix max-speed being ignored on queue re-init
It's possible to have the maximum link speed being artificially limited on
the platform-specific basis. It's done either by setting up the
plat_stmmacenet_data::max_speed field or by specifying the "max-speed"
DT-property. In such cases it's required that any specific
MAC-capabilities re-initializations would take the limit into account. In
particular the link speed capabilities may change during the number of
active Tx/Rx queues re-initialization. But the currently implemented
procedure doesn't take the speed limit into account.
Fix that by calling phylink_limit_mac_speed() in the
stmmac_reinit_queues() method if the speed limitation was required in the
same way as it's done in the stmmac_phy_setup() function.
Fixes: 95201f36f395 ("net: stmmac: update MAC capabilities when tx queues are updated")
Signed-off-by: Serge Semin <fancer.lancer@gmail.com>
Reviewed-by: Romain Gantois <romain.gantois@bootlin.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
| -rw-r--r-- | drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 5 | 
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c index dd58c21b53ee..b8a1f02398ee 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c @@ -7328,6 +7328,7 @@ int stmmac_reinit_queues(struct net_device *dev, u32 rx_cnt, u32 tx_cnt)  {  	struct stmmac_priv *priv = netdev_priv(dev);  	int ret = 0, i; +	int max_speed;  	if (netif_running(dev))  		stmmac_release(dev); @@ -7343,6 +7344,10 @@ int stmmac_reinit_queues(struct net_device *dev, u32 rx_cnt, u32 tx_cnt)  	stmmac_mac_phylink_get_caps(priv); +	max_speed = priv->plat->max_speed; +	if (max_speed) +		phylink_limit_mac_speed(&priv->phylink_config, max_speed); +  	stmmac_napi_add(dev);  	if (netif_running(dev))  | 
