mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-06 02:50:43 +00:00
net/mlx4_en: Don't reassign port mac address on firmware that supports it
Mac reassignments should only be done when not supported by the firmware. To accomplish that, checking firmware capability bit to know whether we should reassign macs in the driver. Signed-off-by: Matan Barak <matanb@mellanox.com> Signed-off-by: Amir Vadai <amirv@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
23537b732f
commit
955154fa33
3 changed files with 10 additions and 3 deletions
|
@ -1285,7 +1285,8 @@ void mlx4_en_stop_port(struct net_device *dev)
|
||||||
|
|
||||||
/* Unregister Mac address for the port */
|
/* Unregister Mac address for the port */
|
||||||
mlx4_put_eth_qp(mdev->dev, priv->port, priv->mac, priv->base_qpn);
|
mlx4_put_eth_qp(mdev->dev, priv->port, priv->mac, priv->base_qpn);
|
||||||
mdev->mac_removed[priv->port] = 1;
|
if (!(mdev->dev->caps.flags2 & MLX4_DEV_CAP_FLAGS2_REASSIGN_MAC_EN))
|
||||||
|
mdev->mac_removed[priv->port] = 1;
|
||||||
|
|
||||||
/* Remove flow steering rules for the port*/
|
/* Remove flow steering rules for the port*/
|
||||||
if (mdev->dev->caps.steering_mode ==
|
if (mdev->dev->caps.steering_mode ==
|
||||||
|
|
|
@ -127,7 +127,8 @@ static void dump_dev_cap_flags2(struct mlx4_dev *dev, u64 flags)
|
||||||
[0] = "RSS support",
|
[0] = "RSS support",
|
||||||
[1] = "RSS Toeplitz Hash Function support",
|
[1] = "RSS Toeplitz Hash Function support",
|
||||||
[2] = "RSS XOR Hash Function support",
|
[2] = "RSS XOR Hash Function support",
|
||||||
[3] = "Device manage flow steering support"
|
[3] = "Device manage flow steering support",
|
||||||
|
[4] = "Automatic mac reassignment support"
|
||||||
};
|
};
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -478,6 +479,7 @@ int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap)
|
||||||
#define QUERY_DEV_CAP_BMME_FLAGS_OFFSET 0x94
|
#define QUERY_DEV_CAP_BMME_FLAGS_OFFSET 0x94
|
||||||
#define QUERY_DEV_CAP_RSVD_LKEY_OFFSET 0x98
|
#define QUERY_DEV_CAP_RSVD_LKEY_OFFSET 0x98
|
||||||
#define QUERY_DEV_CAP_MAX_ICM_SZ_OFFSET 0xa0
|
#define QUERY_DEV_CAP_MAX_ICM_SZ_OFFSET 0xa0
|
||||||
|
#define QUERY_DEV_CAP_FW_REASSIGN_MAC 0x9d
|
||||||
|
|
||||||
dev_cap->flags2 = 0;
|
dev_cap->flags2 = 0;
|
||||||
mailbox = mlx4_alloc_cmd_mailbox(dev);
|
mailbox = mlx4_alloc_cmd_mailbox(dev);
|
||||||
|
@ -637,6 +639,9 @@ int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap)
|
||||||
QUERY_DEV_CAP_BMME_FLAGS_OFFSET);
|
QUERY_DEV_CAP_BMME_FLAGS_OFFSET);
|
||||||
MLX4_GET(dev_cap->reserved_lkey, outbox,
|
MLX4_GET(dev_cap->reserved_lkey, outbox,
|
||||||
QUERY_DEV_CAP_RSVD_LKEY_OFFSET);
|
QUERY_DEV_CAP_RSVD_LKEY_OFFSET);
|
||||||
|
MLX4_GET(field, outbox, QUERY_DEV_CAP_FW_REASSIGN_MAC);
|
||||||
|
if (field & 1<<6)
|
||||||
|
dev_cap->flags2 |= MLX4_DEV_CAP_FLAGS2_REASSIGN_MAC_EN;
|
||||||
MLX4_GET(dev_cap->max_icm_sz, outbox,
|
MLX4_GET(dev_cap->max_icm_sz, outbox,
|
||||||
QUERY_DEV_CAP_MAX_ICM_SZ_OFFSET);
|
QUERY_DEV_CAP_MAX_ICM_SZ_OFFSET);
|
||||||
if (dev_cap->flags & MLX4_DEV_CAP_FLAG_COUNTERS)
|
if (dev_cap->flags & MLX4_DEV_CAP_FLAG_COUNTERS)
|
||||||
|
|
|
@ -150,7 +150,8 @@ enum {
|
||||||
MLX4_DEV_CAP_FLAG2_RSS = 1LL << 0,
|
MLX4_DEV_CAP_FLAG2_RSS = 1LL << 0,
|
||||||
MLX4_DEV_CAP_FLAG2_RSS_TOP = 1LL << 1,
|
MLX4_DEV_CAP_FLAG2_RSS_TOP = 1LL << 1,
|
||||||
MLX4_DEV_CAP_FLAG2_RSS_XOR = 1LL << 2,
|
MLX4_DEV_CAP_FLAG2_RSS_XOR = 1LL << 2,
|
||||||
MLX4_DEV_CAP_FLAG2_FS_EN = 1LL << 3
|
MLX4_DEV_CAP_FLAG2_FS_EN = 1LL << 3,
|
||||||
|
MLX4_DEV_CAP_FLAGS2_REASSIGN_MAC_EN = 1LL << 4
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
|
Loading…
Reference in a new issue