> Subject: [PATCH net-next v3 3/4] net: mana: Add speed support in > mana_get_link_ksettings > > Allow mana ethtool get_link_ksettings operation to report the maximum speed > supported by the SKU in mbps. > > The driver retrieves this information by issuing a HWC command to the hardware > via mana_query_link_cfg(), which retrieves the SKU's maximum supported speed. > > These APIs when invoked on hardware that are older/do not support these APIs, > the speed would be reported as UNKNOWN. > > Before: > $ethtool enP30832s1 > > Settings for enP30832s1: > Supported ports: [ ] > Supported link modes: Not reported > Supported pause frame use: No > Supports auto-negotiation: No > Supported FEC modes: Not reported > Advertised link modes: Not reported > Advertised pause frame use: No > Advertised auto-negotiation: No > Advertised FEC modes: Not reported > Speed: Unknown! > Duplex: Full > Auto-negotiation: off > Port: Other > PHYAD: 0 > Transceiver: internal > Link detected: yes > > After: > $ethtool enP30832s1 > > Settings for enP30832s1: > Supported ports: [ ] > Supported link modes: Not reported > Supported pause frame use: No > Supports auto-negotiation: No > Supported FEC modes: Not reported > Advertised link modes: Not reported > Advertised pause frame use: No > Advertised auto-negotiation: No > Advertised FEC modes: Not reported > Speed: 16000Mb/s > Duplex: Full > Auto-negotiation: off > Port: Other > PHYAD: 0 > Transceiver: internal > Link detected: yes > > Signed-off-by: Erni Sri Satya Vennela <er...@linux.microsoft.com> > Reviewed-by: Haiyang Zhang <haiya...@microsoft.com> > Reviewed-by: Shradha Gupta <shradhagu...@linux.microsoft.com> > Reviewed-by: Saurabh Singh Sengar <ssen...@linux.microsoft.com>
Reviewed-by: Long Li <lon...@microsoft.com> > --- > Changes in v3: > * Rebase to latest net-next branch. > Changes in v2: > * No change. > --- > drivers/net/ethernet/microsoft/mana/mana_en.c | 1 + > drivers/net/ethernet/microsoft/mana/mana_ethtool.c | 6 ++++++ > include/net/mana/mana.h | 2 ++ > 3 files changed, 9 insertions(+) > > diff --git a/drivers/net/ethernet/microsoft/mana/mana_en.c > b/drivers/net/ethernet/microsoft/mana/mana_en.c > index 547dff450b6d..d7079e05dfb8 100644 > --- a/drivers/net/ethernet/microsoft/mana/mana_en.c > +++ b/drivers/net/ethernet/microsoft/mana/mana_en.c > @@ -1272,6 +1272,7 @@ int mana_query_link_cfg(struct mana_port_context > *apc) > return err; > } > apc->speed = resp.link_speed_mbps; > + apc->max_speed = resp.qos_speed_mbps; > return 0; > } > > diff --git a/drivers/net/ethernet/microsoft/mana/mana_ethtool.c > b/drivers/net/ethernet/microsoft/mana/mana_ethtool.c > index 4fb3a04994a2..a1afa75a9463 100644 > --- a/drivers/net/ethernet/microsoft/mana/mana_ethtool.c > +++ b/drivers/net/ethernet/microsoft/mana/mana_ethtool.c > @@ -495,6 +495,12 @@ static int mana_set_ringparam(struct net_device *ndev, > static int mana_get_link_ksettings(struct net_device *ndev, > struct ethtool_link_ksettings *cmd) { > + struct mana_port_context *apc = netdev_priv(ndev); > + int err; > + > + err = mana_query_link_cfg(apc); > + cmd->base.speed = (err) ? SPEED_UNKNOWN : apc->max_speed; > + > cmd->base.duplex = DUPLEX_FULL; > cmd->base.port = PORT_OTHER; > > diff --git a/include/net/mana/mana.h b/include/net/mana/mana.h index > 038b18340e51..e1030a7d2daa 100644 > --- a/include/net/mana/mana.h > +++ b/include/net/mana/mana.h > @@ -533,6 +533,8 @@ struct mana_port_context { > u16 port_idx; > /* Currently configured speed (mbps) */ > u32 speed; > + /* Maximum speed supported by the SKU (mbps) */ > + u32 max_speed; > > bool port_is_up; > bool port_st_save; /* Saved port state */ > -- > 2.34.1