Skip to content

Commit 66e037c

Browse files
committed
Merge tag 'mlx5-updates-2017-06-11' of git://git.kernel.org/pub/scm/linux/kernel/git/saeed/linux
Saeed Mahameed says: ==================== mlx5-updates-2017-06-11 This series provides updates to mlx5 header rewrite feature, from Or Gerlitz. and three more small updates From maor and eran. ------- Or says: Packets belonging to flows which are different by matching may still need to go through the same header re-writes (e.g set the current routing hop MACs and issue TTL decrement). To minimize the number of modify header IDs, we add a cache for header re-write IDs which is keyed by the binary chain of modify header actions. The caching is supported for both eswitch and NIC use-cases, where the actual conversion of the code to use caching comes in separate patches, one per use-case. Using a per field mask field, the TC pedit action supports modifying partial fields. The last patch enables offloading that. ------- From Maor, update flow table commands layout to the latest HW spec. From Eran, ethtool connector type reporting updates. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
2 parents 6d307f6 + 46e9d0b commit 66e037c

File tree

8 files changed

+322
-95
lines changed

8 files changed

+322
-95
lines changed

drivers/net/ethernet/mellanox/mlx5/core/en.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -623,6 +623,8 @@ struct mlx5e_tc_table {
623623

624624
struct rhashtable_params ht_params;
625625
struct rhashtable ht;
626+
627+
DECLARE_HASHTABLE(mod_hdr_tbl, 8);
626628
};
627629

628630
struct mlx5e_vlan_table {

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

Lines changed: 94 additions & 18 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
}
@@ -809,8 +865,23 @@ static void get_advertising(u32 eth_proto_cap, u8 tx_pause,
809865
ethtool_link_ksettings_add_link_mode(link_ksettings, advertising, Asym_Pause);
810866
}
811867

812-
static u8 get_connector_port(u32 eth_proto)
868+
static int ptys2connector_type[MLX5E_CONNECTOR_TYPE_NUMBER] = {
869+
[MLX5E_PORT_UNKNOWN] = PORT_OTHER,
870+
[MLX5E_PORT_NONE] = PORT_NONE,
871+
[MLX5E_PORT_TP] = PORT_TP,
872+
[MLX5E_PORT_AUI] = PORT_AUI,
873+
[MLX5E_PORT_BNC] = PORT_BNC,
874+
[MLX5E_PORT_MII] = PORT_MII,
875+
[MLX5E_PORT_FIBRE] = PORT_FIBRE,
876+
[MLX5E_PORT_DA] = PORT_DA,
877+
[MLX5E_PORT_OTHER] = PORT_OTHER,
878+
};
879+
880+
static u8 get_connector_port(u32 eth_proto, u8 connector_type)
813881
{
882+
if (connector_type && connector_type < MLX5E_CONNECTOR_TYPE_NUMBER)
883+
return ptys2connector_type[connector_type];
884+
814885
if (eth_proto & (MLX5E_PROT_MASK(MLX5E_10GBASE_SR)
815886
| MLX5E_PROT_MASK(MLX5E_40GBASE_SR4)
816887
| MLX5E_PROT_MASK(MLX5E_100GBASE_SR4)
@@ -856,6 +927,7 @@ static int mlx5e_get_link_ksettings(struct net_device *netdev,
856927
u32 eth_proto_oper;
857928
u8 an_disable_admin;
858929
u8 an_status;
930+
u8 connector_type;
859931
int err;
860932

861933
err = mlx5_query_port_ptys(mdev, out, sizeof(out), MLX5_PTYS_EN, 1);
@@ -871,6 +943,7 @@ static int mlx5e_get_link_ksettings(struct net_device *netdev,
871943
eth_proto_lp = MLX5_GET(ptys_reg, out, eth_proto_lp_advertise);
872944
an_disable_admin = MLX5_GET(ptys_reg, out, an_disable_admin);
873945
an_status = MLX5_GET(ptys_reg, out, an_status);
946+
connector_type = MLX5_GET(ptys_reg, out, connector_type);
874947

875948
mlx5_query_port_pause(mdev, &rx_pause, &tx_pause);
876949

@@ -883,7 +956,10 @@ static int mlx5e_get_link_ksettings(struct net_device *netdev,
883956

884957
eth_proto_oper = eth_proto_oper ? eth_proto_oper : eth_proto_cap;
885958

886-
link_ksettings->base.port = get_connector_port(eth_proto_oper);
959+
link_ksettings->base.port = get_connector_port(eth_proto_oper,
960+
connector_type);
961+
ptys2ethtool_supported_advertised_port(link_ksettings, eth_proto_admin,
962+
connector_type);
887963
get_lp_advertising(eth_proto_lp, link_ksettings);
888964

889965
if (an_status == MLX5_AN_COMPLETE)

0 commit comments

Comments
 (0)