Skip to content

Commit 46e9d0b

Browse files
Eran Ben ElishaSaeed Mahameed
authored andcommitted
net/mlx5e: Fill advertised and supported port data from Hardware info
Translate hardware port connector type data into link mode supported and advertised info instead of caching it in driver. Signed-off-by: Eran Ben Elisha <eranbe@mellanox.com> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
1 parent 5b4793f commit 46e9d0b

File tree

1 file changed

+74
-16
lines changed

1 file changed

+74
-16
lines changed

drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c

Lines changed: 74 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -723,24 +723,81 @@ static void ptys2ethtool_adver_link(unsigned long *advertising_modes,
723723
__ETHTOOL_LINK_MODE_MASK_NBITS);
724724
}
725725

726-
static void ptys2ethtool_supported_port(struct ethtool_link_ksettings *link_ksettings,
727-
u32 eth_proto_cap)
726+
static void ptys2ethtool_supported_advertised_port(struct ethtool_link_ksettings *link_ksettings,
727+
u32 eth_proto_cap,
728+
u8 connector_type)
728729
{
729-
if (eth_proto_cap & (MLX5E_PROT_MASK(MLX5E_10GBASE_CR)
730-
| MLX5E_PROT_MASK(MLX5E_10GBASE_SR)
731-
| MLX5E_PROT_MASK(MLX5E_40GBASE_CR4)
732-
| MLX5E_PROT_MASK(MLX5E_40GBASE_SR4)
733-
| MLX5E_PROT_MASK(MLX5E_100GBASE_SR4)
734-
| MLX5E_PROT_MASK(MLX5E_1000BASE_CX_SGMII))) {
735-
ethtool_link_ksettings_add_link_mode(link_ksettings, supported, FIBRE);
730+
if (!connector_type || connector_type >= MLX5E_CONNECTOR_TYPE_NUMBER) {
731+
if (eth_proto_cap & (MLX5E_PROT_MASK(MLX5E_10GBASE_CR)
732+
| MLX5E_PROT_MASK(MLX5E_10GBASE_SR)
733+
| MLX5E_PROT_MASK(MLX5E_40GBASE_CR4)
734+
| MLX5E_PROT_MASK(MLX5E_40GBASE_SR4)
735+
| MLX5E_PROT_MASK(MLX5E_100GBASE_SR4)
736+
| MLX5E_PROT_MASK(MLX5E_1000BASE_CX_SGMII))) {
737+
ethtool_link_ksettings_add_link_mode(link_ksettings,
738+
supported,
739+
FIBRE);
740+
ethtool_link_ksettings_add_link_mode(link_ksettings,
741+
advertising,
742+
FIBRE);
743+
}
744+
745+
if (eth_proto_cap & (MLX5E_PROT_MASK(MLX5E_100GBASE_KR4)
746+
| MLX5E_PROT_MASK(MLX5E_40GBASE_KR4)
747+
| MLX5E_PROT_MASK(MLX5E_10GBASE_KR)
748+
| MLX5E_PROT_MASK(MLX5E_10GBASE_KX4)
749+
| MLX5E_PROT_MASK(MLX5E_1000BASE_KX))) {
750+
ethtool_link_ksettings_add_link_mode(link_ksettings,
751+
supported,
752+
Backplane);
753+
ethtool_link_ksettings_add_link_mode(link_ksettings,
754+
advertising,
755+
Backplane);
756+
}
757+
return;
736758
}
737759

738-
if (eth_proto_cap & (MLX5E_PROT_MASK(MLX5E_100GBASE_KR4)
739-
| MLX5E_PROT_MASK(MLX5E_40GBASE_KR4)
740-
| MLX5E_PROT_MASK(MLX5E_10GBASE_KR)
741-
| MLX5E_PROT_MASK(MLX5E_10GBASE_KX4)
742-
| MLX5E_PROT_MASK(MLX5E_1000BASE_KX))) {
743-
ethtool_link_ksettings_add_link_mode(link_ksettings, supported, Backplane);
760+
switch (connector_type) {
761+
case MLX5E_PORT_TP:
762+
ethtool_link_ksettings_add_link_mode(link_ksettings,
763+
supported, TP);
764+
ethtool_link_ksettings_add_link_mode(link_ksettings,
765+
advertising, TP);
766+
break;
767+
case MLX5E_PORT_AUI:
768+
ethtool_link_ksettings_add_link_mode(link_ksettings,
769+
supported, AUI);
770+
ethtool_link_ksettings_add_link_mode(link_ksettings,
771+
advertising, AUI);
772+
break;
773+
case MLX5E_PORT_BNC:
774+
ethtool_link_ksettings_add_link_mode(link_ksettings,
775+
supported, BNC);
776+
ethtool_link_ksettings_add_link_mode(link_ksettings,
777+
advertising, BNC);
778+
break;
779+
case MLX5E_PORT_MII:
780+
ethtool_link_ksettings_add_link_mode(link_ksettings,
781+
supported, MII);
782+
ethtool_link_ksettings_add_link_mode(link_ksettings,
783+
advertising, MII);
784+
break;
785+
case MLX5E_PORT_FIBRE:
786+
ethtool_link_ksettings_add_link_mode(link_ksettings,
787+
supported, FIBRE);
788+
ethtool_link_ksettings_add_link_mode(link_ksettings,
789+
advertising, FIBRE);
790+
break;
791+
case MLX5E_PORT_DA:
792+
ethtool_link_ksettings_add_link_mode(link_ksettings,
793+
supported, Backplane);
794+
ethtool_link_ksettings_add_link_mode(link_ksettings,
795+
advertising, Backplane);
796+
break;
797+
case MLX5E_PORT_NONE:
798+
case MLX5E_PORT_OTHER:
799+
default:
800+
break;
744801
}
745802
}
746803

@@ -791,7 +848,6 @@ static void get_supported(u32 eth_proto_cap,
791848
{
792849
unsigned long *supported = link_ksettings->link_modes.supported;
793850

794-
ptys2ethtool_supported_port(link_ksettings, eth_proto_cap);
795851
ptys2ethtool_supported_link(supported, eth_proto_cap);
796852
ethtool_link_ksettings_add_link_mode(link_ksettings, supported, Pause);
797853
}
@@ -902,6 +958,8 @@ static int mlx5e_get_link_ksettings(struct net_device *netdev,
902958

903959
link_ksettings->base.port = get_connector_port(eth_proto_oper,
904960
connector_type);
961+
ptys2ethtool_supported_advertised_port(link_ksettings, eth_proto_admin,
962+
connector_type);
905963
get_lp_advertising(eth_proto_lp, link_ksettings);
906964

907965
if (an_status == MLX5_AN_COMPLETE)

0 commit comments

Comments
 (0)