diff options
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/en_netdev.c | 3 | ||||
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/fw.c | 7 | ||||
-rw-r--r-- | include/linux/mlx4/device.h | 3 |
3 files changed, 10 insertions, 3 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c index 333a7a0b833c..7b513e9aea85 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c | |||
@@ -1285,7 +1285,8 @@ void mlx4_en_stop_port(struct net_device *dev) | |||
1285 | 1285 | ||
1286 | /* Unregister Mac address for the port */ | 1286 | /* Unregister Mac address for the port */ |
1287 | mlx4_put_eth_qp(mdev->dev, priv->port, priv->mac, priv->base_qpn); | 1287 | mlx4_put_eth_qp(mdev->dev, priv->port, priv->mac, priv->base_qpn); |
1288 | mdev->mac_removed[priv->port] = 1; | 1288 | if (!(mdev->dev->caps.flags2 & MLX4_DEV_CAP_FLAGS2_REASSIGN_MAC_EN)) |
1289 | mdev->mac_removed[priv->port] = 1; | ||
1289 | 1290 | ||
1290 | /* Remove flow steering rules for the port*/ | 1291 | /* Remove flow steering rules for the port*/ |
1291 | if (mdev->dev->caps.steering_mode == | 1292 | if (mdev->dev->caps.steering_mode == |
diff --git a/drivers/net/ethernet/mellanox/mlx4/fw.c b/drivers/net/ethernet/mellanox/mlx4/fw.c index 91acf71aca97..38b62c78d5da 100644 --- a/drivers/net/ethernet/mellanox/mlx4/fw.c +++ b/drivers/net/ethernet/mellanox/mlx4/fw.c | |||
@@ -127,7 +127,8 @@ static void dump_dev_cap_flags2(struct mlx4_dev *dev, u64 flags) | |||
127 | [0] = "RSS support", | 127 | [0] = "RSS support", |
128 | [1] = "RSS Toeplitz Hash Function support", | 128 | [1] = "RSS Toeplitz Hash Function support", |
129 | [2] = "RSS XOR Hash Function support", | 129 | [2] = "RSS XOR Hash Function support", |
130 | [3] = "Device manage flow steering support" | 130 | [3] = "Device manage flow steering support", |
131 | [4] = "Automatic mac reassignment support" | ||
131 | }; | 132 | }; |
132 | int i; | 133 | int i; |
133 | 134 | ||
@@ -478,6 +479,7 @@ int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap) | |||
478 | #define QUERY_DEV_CAP_BMME_FLAGS_OFFSET 0x94 | 479 | #define QUERY_DEV_CAP_BMME_FLAGS_OFFSET 0x94 |
479 | #define QUERY_DEV_CAP_RSVD_LKEY_OFFSET 0x98 | 480 | #define QUERY_DEV_CAP_RSVD_LKEY_OFFSET 0x98 |
480 | #define QUERY_DEV_CAP_MAX_ICM_SZ_OFFSET 0xa0 | 481 | #define QUERY_DEV_CAP_MAX_ICM_SZ_OFFSET 0xa0 |
482 | #define QUERY_DEV_CAP_FW_REASSIGN_MAC 0x9d | ||
481 | 483 | ||
482 | dev_cap->flags2 = 0; | 484 | dev_cap->flags2 = 0; |
483 | mailbox = mlx4_alloc_cmd_mailbox(dev); | 485 | 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) | |||
637 | QUERY_DEV_CAP_BMME_FLAGS_OFFSET); | 639 | QUERY_DEV_CAP_BMME_FLAGS_OFFSET); |
638 | MLX4_GET(dev_cap->reserved_lkey, outbox, | 640 | MLX4_GET(dev_cap->reserved_lkey, outbox, |
639 | QUERY_DEV_CAP_RSVD_LKEY_OFFSET); | 641 | QUERY_DEV_CAP_RSVD_LKEY_OFFSET); |
642 | MLX4_GET(field, outbox, QUERY_DEV_CAP_FW_REASSIGN_MAC); | ||
643 | if (field & 1<<6) | ||
644 | dev_cap->flags2 |= MLX4_DEV_CAP_FLAGS2_REASSIGN_MAC_EN; | ||
640 | MLX4_GET(dev_cap->max_icm_sz, outbox, | 645 | MLX4_GET(dev_cap->max_icm_sz, outbox, |
641 | QUERY_DEV_CAP_MAX_ICM_SZ_OFFSET); | 646 | QUERY_DEV_CAP_MAX_ICM_SZ_OFFSET); |
642 | if (dev_cap->flags & MLX4_DEV_CAP_FLAG_COUNTERS) | 647 | if (dev_cap->flags & MLX4_DEV_CAP_FLAG_COUNTERS) |
diff --git a/include/linux/mlx4/device.h b/include/linux/mlx4/device.h index 20ea939c22a6..1883e8e84718 100644 --- a/include/linux/mlx4/device.h +++ b/include/linux/mlx4/device.h | |||
@@ -150,7 +150,8 @@ enum { | |||
150 | MLX4_DEV_CAP_FLAG2_RSS = 1LL << 0, | 150 | MLX4_DEV_CAP_FLAG2_RSS = 1LL << 0, |
151 | MLX4_DEV_CAP_FLAG2_RSS_TOP = 1LL << 1, | 151 | MLX4_DEV_CAP_FLAG2_RSS_TOP = 1LL << 1, |
152 | MLX4_DEV_CAP_FLAG2_RSS_XOR = 1LL << 2, | 152 | MLX4_DEV_CAP_FLAG2_RSS_XOR = 1LL << 2, |
153 | MLX4_DEV_CAP_FLAG2_FS_EN = 1LL << 3 | 153 | MLX4_DEV_CAP_FLAG2_FS_EN = 1LL << 3, |
154 | MLX4_DEV_CAP_FLAGS2_REASSIGN_MAC_EN = 1LL << 4 | ||
154 | }; | 155 | }; |
155 | 156 | ||
156 | enum { | 157 | enum { |