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 { |
