aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorMatan Barak <matanb@mellanox.com>2013-01-30 18:07:10 -0500
committerDavid S. Miller <davem@davemloft.net>2013-01-31 12:48:47 -0500
commit955154fa33df2b74f0fea8e7c84df6dfd954dab2 (patch)
treec53021a647f2587d29f451b9e8b4b24d645a70d8 /drivers
parent23537b732f5dd9c917767419272aeb65cc4b8cfd (diff)
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>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/en_netdev.c3
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/fw.c7
2 files changed, 8 insertions, 2 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)