mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-16 23:47:39 +07:00
net/mlx5e: Move port speed code from en_ethtool.c to en/port.c
Move four below functions from en_ethtool.c to en/port.c. These functions are used by both en_ethtool.c and en_main.c. Future code can use these functions without ethtool link mode dependency. u32 mlx5e_port_ptys2speed(u32 eth_proto_oper); int mlx5e_port_linkspeed(struct mlx5_core_dev *mdev, u32 *speed); int mlx5e_port_max_linkspeed(struct mlx5_core_dev *mdev, u32 *speed); u32 mlx5e_port_speed2linkmodes(u32 speed); Delete the speed field from table mlx5e_build_ptys2ethtool_map. This table only keeps the mapping between the mlx5e link mode and ethtool link mode. Add new table mlx5e_link_speed for translation from mlx5e link mode to actual speed. Signed-off-by: Huy Nguyen <huyn@mellanox.com> Reviewed-by: Parav Pandit <parav@mellanox.com> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
This commit is contained in:
parent
e549f6f9c0
commit
2c81bfd5ae
@ -15,7 +15,7 @@ mlx5_core-$(CONFIG_MLX5_FPGA) += fpga/cmd.o fpga/core.o fpga/conn.o fpga/sdk.o \
|
||||
|
||||
mlx5_core-$(CONFIG_MLX5_CORE_EN) += en_main.o en_common.o en_fs.o en_ethtool.o \
|
||||
en_tx.o en_rx.o en_dim.o en_txrx.o en_stats.o vxlan.o \
|
||||
en_arfs.o en_fs_ethtool.o en_selftest.o
|
||||
en_arfs.o en_fs_ethtool.o en_selftest.o en/port.o
|
||||
|
||||
mlx5_core-$(CONFIG_MLX5_MPFS) += lib/mpfs.o
|
||||
|
||||
|
@ -932,8 +932,6 @@ void mlx5e_deactivate_priv_channels(struct mlx5e_priv *priv);
|
||||
|
||||
void mlx5e_build_default_indir_rqt(u32 *indirection_rqt, int len,
|
||||
int num_channels);
|
||||
int mlx5e_get_max_linkspeed(struct mlx5_core_dev *mdev, u32 *speed);
|
||||
|
||||
void mlx5e_set_tx_cq_mode_params(struct mlx5e_params *params,
|
||||
u8 cq_period_mode);
|
||||
void mlx5e_set_rx_cq_mode_params(struct mlx5e_params *params,
|
||||
|
1
drivers/net/ethernet/mellanox/mlx5/core/en/Makefile
Normal file
1
drivers/net/ethernet/mellanox/mlx5/core/en/Makefile
Normal file
@ -0,0 +1 @@
|
||||
subdir-ccflags-y += -I$(src)/..
|
129
drivers/net/ethernet/mellanox/mlx5/core/en/port.c
Normal file
129
drivers/net/ethernet/mellanox/mlx5/core/en/port.c
Normal file
@ -0,0 +1,129 @@
|
||||
/*
|
||||
* Copyright (c) 2018, Mellanox Technologies. All rights reserved.
|
||||
*
|
||||
* This software is available to you under a choice of one of two
|
||||
* licenses. You may choose to be licensed under the terms of the GNU
|
||||
* General Public License (GPL) Version 2, available from the file
|
||||
* COPYING in the main directory of this source tree, or the
|
||||
* OpenIB.org BSD license below:
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or
|
||||
* without modification, are permitted provided that the following
|
||||
* conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "port.h"
|
||||
|
||||
/* speed in units of 1Mb */
|
||||
static const u32 mlx5e_link_speed[MLX5E_LINK_MODES_NUMBER] = {
|
||||
[MLX5E_1000BASE_CX_SGMII] = 1000,
|
||||
[MLX5E_1000BASE_KX] = 1000,
|
||||
[MLX5E_10GBASE_CX4] = 10000,
|
||||
[MLX5E_10GBASE_KX4] = 10000,
|
||||
[MLX5E_10GBASE_KR] = 10000,
|
||||
[MLX5E_20GBASE_KR2] = 20000,
|
||||
[MLX5E_40GBASE_CR4] = 40000,
|
||||
[MLX5E_40GBASE_KR4] = 40000,
|
||||
[MLX5E_56GBASE_R4] = 56000,
|
||||
[MLX5E_10GBASE_CR] = 10000,
|
||||
[MLX5E_10GBASE_SR] = 10000,
|
||||
[MLX5E_10GBASE_ER] = 10000,
|
||||
[MLX5E_40GBASE_SR4] = 40000,
|
||||
[MLX5E_40GBASE_LR4] = 40000,
|
||||
[MLX5E_50GBASE_SR2] = 50000,
|
||||
[MLX5E_100GBASE_CR4] = 100000,
|
||||
[MLX5E_100GBASE_SR4] = 100000,
|
||||
[MLX5E_100GBASE_KR4] = 100000,
|
||||
[MLX5E_100GBASE_LR4] = 100000,
|
||||
[MLX5E_100BASE_TX] = 100,
|
||||
[MLX5E_1000BASE_T] = 1000,
|
||||
[MLX5E_10GBASE_T] = 10000,
|
||||
[MLX5E_25GBASE_CR] = 25000,
|
||||
[MLX5E_25GBASE_KR] = 25000,
|
||||
[MLX5E_25GBASE_SR] = 25000,
|
||||
[MLX5E_50GBASE_CR2] = 50000,
|
||||
[MLX5E_50GBASE_KR2] = 50000,
|
||||
};
|
||||
|
||||
u32 mlx5e_port_ptys2speed(u32 eth_proto_oper)
|
||||
{
|
||||
unsigned long temp = eth_proto_oper;
|
||||
u32 speed = 0;
|
||||
int i;
|
||||
|
||||
i = find_first_bit(&temp, MLX5E_LINK_MODES_NUMBER);
|
||||
if (i < MLX5E_LINK_MODES_NUMBER)
|
||||
speed = mlx5e_link_speed[i];
|
||||
|
||||
return speed;
|
||||
}
|
||||
|
||||
int mlx5e_port_linkspeed(struct mlx5_core_dev *mdev, u32 *speed)
|
||||
{
|
||||
u32 out[MLX5_ST_SZ_DW(ptys_reg)] = {};
|
||||
u32 eth_proto_oper;
|
||||
int err;
|
||||
|
||||
err = mlx5_query_port_ptys(mdev, out, sizeof(out), MLX5_PTYS_EN, 1);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
eth_proto_oper = MLX5_GET(ptys_reg, out, eth_proto_oper);
|
||||
*speed = mlx5e_port_ptys2speed(eth_proto_oper);
|
||||
if (!(*speed)) {
|
||||
mlx5_core_warn(mdev, "cannot get port speed\n");
|
||||
err = -EINVAL;
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
int mlx5e_port_max_linkspeed(struct mlx5_core_dev *mdev, u32 *speed)
|
||||
{
|
||||
u32 max_speed = 0;
|
||||
u32 proto_cap;
|
||||
int err;
|
||||
int i;
|
||||
|
||||
err = mlx5_query_port_proto_cap(mdev, &proto_cap, MLX5_PTYS_EN);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
for (i = 0; i < MLX5E_LINK_MODES_NUMBER; ++i)
|
||||
if (proto_cap & MLX5E_PROT_MASK(i))
|
||||
max_speed = max(max_speed, mlx5e_link_speed[i]);
|
||||
|
||||
*speed = max_speed;
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 mlx5e_port_speed2linkmodes(u32 speed)
|
||||
{
|
||||
u32 link_modes = 0;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < MLX5E_LINK_MODES_NUMBER; ++i) {
|
||||
if (mlx5e_link_speed[i] == speed)
|
||||
link_modes |= MLX5E_PROT_MASK(i);
|
||||
}
|
||||
|
||||
return link_modes;
|
||||
}
|
43
drivers/net/ethernet/mellanox/mlx5/core/en/port.h
Normal file
43
drivers/net/ethernet/mellanox/mlx5/core/en/port.h
Normal file
@ -0,0 +1,43 @@
|
||||
/*
|
||||
* Copyright (c) 2018, Mellanox Technologies. All rights reserved.
|
||||
*
|
||||
* This software is available to you under a choice of one of two
|
||||
* licenses. You may choose to be licensed under the terms of the GNU
|
||||
* General Public License (GPL) Version 2, available from the file
|
||||
* COPYING in the main directory of this source tree, or the
|
||||
* OpenIB.org BSD license below:
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or
|
||||
* without modification, are permitted provided that the following
|
||||
* conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef __MLX5E_EN_PORT_H
|
||||
#define __MLX5E_EN_PORT_H
|
||||
|
||||
#include <linux/mlx5/driver.h>
|
||||
#include "en.h"
|
||||
|
||||
u32 mlx5e_port_ptys2speed(u32 eth_proto_oper);
|
||||
int mlx5e_port_linkspeed(struct mlx5_core_dev *mdev, u32 *speed);
|
||||
int mlx5e_port_max_linkspeed(struct mlx5_core_dev *mdev, u32 *speed);
|
||||
u32 mlx5e_port_speed2linkmodes(u32 speed);
|
||||
#endif
|
@ -31,6 +31,7 @@
|
||||
*/
|
||||
|
||||
#include "en.h"
|
||||
#include "en/port.h"
|
||||
|
||||
void mlx5e_ethtool_get_drvinfo(struct mlx5e_priv *priv,
|
||||
struct ethtool_drvinfo *drvinfo)
|
||||
@ -59,18 +60,16 @@ static void mlx5e_get_drvinfo(struct net_device *dev,
|
||||
struct ptys2ethtool_config {
|
||||
__ETHTOOL_DECLARE_LINK_MODE_MASK(supported);
|
||||
__ETHTOOL_DECLARE_LINK_MODE_MASK(advertised);
|
||||
u32 speed;
|
||||
};
|
||||
|
||||
static struct ptys2ethtool_config ptys2ethtool_table[MLX5E_LINK_MODES_NUMBER];
|
||||
|
||||
#define MLX5_BUILD_PTYS2ETHTOOL_CONFIG(reg_, speed_, ...) \
|
||||
#define MLX5_BUILD_PTYS2ETHTOOL_CONFIG(reg_, ...) \
|
||||
({ \
|
||||
struct ptys2ethtool_config *cfg; \
|
||||
const unsigned int modes[] = { __VA_ARGS__ }; \
|
||||
unsigned int i; \
|
||||
cfg = &ptys2ethtool_table[reg_]; \
|
||||
cfg->speed = speed_; \
|
||||
bitmap_zero(cfg->supported, \
|
||||
__ETHTOOL_LINK_MODE_MASK_NBITS); \
|
||||
bitmap_zero(cfg->advertised, \
|
||||
@ -83,55 +82,55 @@ static struct ptys2ethtool_config ptys2ethtool_table[MLX5E_LINK_MODES_NUMBER];
|
||||
|
||||
void mlx5e_build_ptys2ethtool_map(void)
|
||||
{
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_1000BASE_CX_SGMII, SPEED_1000,
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_1000BASE_CX_SGMII,
|
||||
ETHTOOL_LINK_MODE_1000baseKX_Full_BIT);
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_1000BASE_KX, SPEED_1000,
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_1000BASE_KX,
|
||||
ETHTOOL_LINK_MODE_1000baseKX_Full_BIT);
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_10GBASE_CX4, SPEED_10000,
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_10GBASE_CX4,
|
||||
ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT);
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_10GBASE_KX4, SPEED_10000,
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_10GBASE_KX4,
|
||||
ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT);
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_10GBASE_KR, SPEED_10000,
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_10GBASE_KR,
|
||||
ETHTOOL_LINK_MODE_10000baseKR_Full_BIT);
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_20GBASE_KR2, SPEED_20000,
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_20GBASE_KR2,
|
||||
ETHTOOL_LINK_MODE_20000baseKR2_Full_BIT);
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_40GBASE_CR4, SPEED_40000,
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_40GBASE_CR4,
|
||||
ETHTOOL_LINK_MODE_40000baseCR4_Full_BIT);
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_40GBASE_KR4, SPEED_40000,
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_40GBASE_KR4,
|
||||
ETHTOOL_LINK_MODE_40000baseKR4_Full_BIT);
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_56GBASE_R4, SPEED_56000,
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_56GBASE_R4,
|
||||
ETHTOOL_LINK_MODE_56000baseKR4_Full_BIT);
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_10GBASE_CR, SPEED_10000,
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_10GBASE_CR,
|
||||
ETHTOOL_LINK_MODE_10000baseKR_Full_BIT);
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_10GBASE_SR, SPEED_10000,
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_10GBASE_SR,
|
||||
ETHTOOL_LINK_MODE_10000baseKR_Full_BIT);
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_10GBASE_ER, SPEED_10000,
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_10GBASE_ER,
|
||||
ETHTOOL_LINK_MODE_10000baseKR_Full_BIT);
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_40GBASE_SR4, SPEED_40000,
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_40GBASE_SR4,
|
||||
ETHTOOL_LINK_MODE_40000baseSR4_Full_BIT);
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_40GBASE_LR4, SPEED_40000,
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_40GBASE_LR4,
|
||||
ETHTOOL_LINK_MODE_40000baseLR4_Full_BIT);
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_50GBASE_SR2, SPEED_50000,
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_50GBASE_SR2,
|
||||
ETHTOOL_LINK_MODE_50000baseSR2_Full_BIT);
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_100GBASE_CR4, SPEED_100000,
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_100GBASE_CR4,
|
||||
ETHTOOL_LINK_MODE_100000baseCR4_Full_BIT);
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_100GBASE_SR4, SPEED_100000,
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_100GBASE_SR4,
|
||||
ETHTOOL_LINK_MODE_100000baseSR4_Full_BIT);
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_100GBASE_KR4, SPEED_100000,
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_100GBASE_KR4,
|
||||
ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT);
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_100GBASE_LR4, SPEED_100000,
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_100GBASE_LR4,
|
||||
ETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT);
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_10GBASE_T, SPEED_10000,
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_10GBASE_T,
|
||||
ETHTOOL_LINK_MODE_10000baseT_Full_BIT);
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_25GBASE_CR, SPEED_25000,
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_25GBASE_CR,
|
||||
ETHTOOL_LINK_MODE_25000baseCR_Full_BIT);
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_25GBASE_KR, SPEED_25000,
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_25GBASE_KR,
|
||||
ETHTOOL_LINK_MODE_25000baseKR_Full_BIT);
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_25GBASE_SR, SPEED_25000,
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_25GBASE_SR,
|
||||
ETHTOOL_LINK_MODE_25000baseSR_Full_BIT);
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_50GBASE_CR2, SPEED_50000,
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_50GBASE_CR2,
|
||||
ETHTOOL_LINK_MODE_50000baseCR2_Full_BIT);
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_50GBASE_KR2, SPEED_50000,
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_50GBASE_KR2,
|
||||
ETHTOOL_LINK_MODE_50000baseKR2_Full_BIT);
|
||||
}
|
||||
|
||||
@ -617,43 +616,24 @@ static void ptys2ethtool_supported_advertised_port(struct ethtool_link_ksettings
|
||||
}
|
||||
}
|
||||
|
||||
int mlx5e_get_max_linkspeed(struct mlx5_core_dev *mdev, u32 *speed)
|
||||
{
|
||||
u32 max_speed = 0;
|
||||
u32 proto_cap;
|
||||
int err;
|
||||
int i;
|
||||
|
||||
err = mlx5_query_port_proto_cap(mdev, &proto_cap, MLX5_PTYS_EN);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
for (i = 0; i < MLX5E_LINK_MODES_NUMBER; ++i)
|
||||
if (proto_cap & MLX5E_PROT_MASK(i))
|
||||
max_speed = max(max_speed, ptys2ethtool_table[i].speed);
|
||||
|
||||
*speed = max_speed;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void get_speed_duplex(struct net_device *netdev,
|
||||
u32 eth_proto_oper,
|
||||
struct ethtool_link_ksettings *link_ksettings)
|
||||
{
|
||||
int i;
|
||||
u32 speed = SPEED_UNKNOWN;
|
||||
u8 duplex = DUPLEX_UNKNOWN;
|
||||
|
||||
if (!netif_carrier_ok(netdev))
|
||||
goto out;
|
||||
|
||||
for (i = 0; i < MLX5E_LINK_MODES_NUMBER; ++i) {
|
||||
if (eth_proto_oper & MLX5E_PROT_MASK(i)) {
|
||||
speed = ptys2ethtool_table[i].speed;
|
||||
duplex = DUPLEX_FULL;
|
||||
break;
|
||||
}
|
||||
speed = mlx5e_port_ptys2speed(eth_proto_oper);
|
||||
if (!speed) {
|
||||
speed = SPEED_UNKNOWN;
|
||||
goto out;
|
||||
}
|
||||
|
||||
duplex = DUPLEX_FULL;
|
||||
|
||||
out:
|
||||
link_ksettings->base.speed = speed;
|
||||
link_ksettings->base.duplex = duplex;
|
||||
@ -811,18 +791,6 @@ static u32 mlx5e_ethtool2ptys_adver_link(const unsigned long *link_modes)
|
||||
return ptys_modes;
|
||||
}
|
||||
|
||||
static u32 mlx5e_ethtool2ptys_speed_link(u32 speed)
|
||||
{
|
||||
u32 i, speed_links = 0;
|
||||
|
||||
for (i = 0; i < MLX5E_LINK_MODES_NUMBER; ++i) {
|
||||
if (ptys2ethtool_table[i].speed == speed)
|
||||
speed_links |= MLX5E_PROT_MASK(i);
|
||||
}
|
||||
|
||||
return speed_links;
|
||||
}
|
||||
|
||||
static int mlx5e_set_link_ksettings(struct net_device *netdev,
|
||||
const struct ethtool_link_ksettings *link_ksettings)
|
||||
{
|
||||
@ -842,7 +810,7 @@ static int mlx5e_set_link_ksettings(struct net_device *netdev,
|
||||
|
||||
link_modes = link_ksettings->base.autoneg == AUTONEG_ENABLE ?
|
||||
mlx5e_ethtool2ptys_adver_link(link_ksettings->link_modes.advertising) :
|
||||
mlx5e_ethtool2ptys_speed_link(speed);
|
||||
mlx5e_port_speed2linkmodes(speed);
|
||||
|
||||
err = mlx5_query_port_proto_cap(mdev, ð_proto_cap, MLX5_PTYS_EN);
|
||||
if (err) {
|
||||
|
@ -46,6 +46,7 @@
|
||||
#include "accel/ipsec.h"
|
||||
#include "accel/tls.h"
|
||||
#include "vxlan.h"
|
||||
#include "en/port.h"
|
||||
|
||||
struct mlx5e_rq_param {
|
||||
u32 rqc[MLX5_ST_SZ_DW(rqc)];
|
||||
@ -4082,7 +4083,7 @@ static bool slow_pci_heuristic(struct mlx5_core_dev *mdev)
|
||||
u32 link_speed = 0;
|
||||
u32 pci_bw = 0;
|
||||
|
||||
mlx5e_get_max_linkspeed(mdev, &link_speed);
|
||||
mlx5e_port_max_linkspeed(mdev, &link_speed);
|
||||
pci_bw = pcie_bandwidth_available(mdev->pdev, NULL, NULL, NULL);
|
||||
mlx5_core_dbg_once(mdev, "Max link speed = %d, PCI BW = %d\n",
|
||||
link_speed, pci_bw);
|
||||
|
@ -52,6 +52,7 @@
|
||||
#include "eswitch.h"
|
||||
#include "vxlan.h"
|
||||
#include "fs_core.h"
|
||||
#include "en/port.h"
|
||||
|
||||
struct mlx5_nic_flow_attr {
|
||||
u32 action;
|
||||
@ -613,7 +614,7 @@ static int mlx5e_hairpin_flow_add(struct mlx5e_priv *priv,
|
||||
|
||||
params.q_counter = priv->q_counter;
|
||||
/* set hairpin pair per each 50Gbs share of the link */
|
||||
mlx5e_get_max_linkspeed(priv->mdev, &link_speed);
|
||||
mlx5e_port_max_linkspeed(priv->mdev, &link_speed);
|
||||
link_speed = max_t(u32, link_speed, 50000);
|
||||
link_speed64 = link_speed;
|
||||
do_div(link_speed64, 50000);
|
||||
|
Loading…
Reference in New Issue
Block a user