From: Paul Blakey <pa...@mellanox.com>

Report system_image_guid as the E-Switch switch_id, this ensures
that when a NIC contains multiple PCI functions and which
has merged eswitch capability, all representors from
multiple PFs publish same switch_id.

Signed-off-by: Paul Blakey <pa...@mellanox.com>
Reviewed-by: Parav Pandit <pa...@mellanox.com>
Reviewed-by: Roi Dayan <r...@mellanox.com>
Signed-off-by: Saeed Mahameed <sae...@mellanox.com>
---
 .../net/ethernet/mellanox/mlx5/core/en_rep.c  | 29 ++++++-------------
 1 file changed, 9 insertions(+), 20 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c 
b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
index fce3814bdb2f..330034fcdfc5 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
@@ -391,30 +391,19 @@ static const struct ethtool_ops 
mlx5e_uplink_rep_ethtool_ops = {
 static int mlx5e_rep_get_port_parent_id(struct net_device *dev,
                                        struct netdev_phys_item_id *ppid)
 {
-       struct mlx5e_priv *priv = netdev_priv(dev);
-       struct mlx5_eswitch *esw = priv->mdev->priv.eswitch;
-       struct net_device *uplink_upper = NULL;
-       struct mlx5e_priv *uplink_priv = NULL;
-       struct net_device *uplink_dev;
+       struct mlx5_eswitch *esw;
+       struct mlx5e_priv *priv;
+       u64 parent_id;
+
+       priv = netdev_priv(dev);
+       esw = priv->mdev->priv.eswitch;
 
        if (esw->mode == SRIOV_NONE)
                return -EOPNOTSUPP;
 
-       uplink_dev = mlx5_eswitch_uplink_get_proto_dev(esw, REP_ETH);
-       if (uplink_dev) {
-               uplink_upper = netdev_master_upper_dev_get(uplink_dev);
-               uplink_priv = netdev_priv(uplink_dev);
-       }
-
-       ppid->id_len = ETH_ALEN;
-       if (uplink_upper && mlx5_lag_is_sriov(uplink_priv->mdev)) {
-               ether_addr_copy(ppid->id, uplink_upper->dev_addr);
-       } else {
-               struct mlx5e_rep_priv *rpriv = priv->ppriv;
-               struct mlx5_eswitch_rep *rep = rpriv->rep;
-
-               ether_addr_copy(ppid->id, rep->hw_id);
-       }
+       parent_id = mlx5_query_nic_system_image_guid(priv->mdev);
+       ppid->id_len = sizeof(parent_id);
+       memcpy(ppid->id, &parent_id, sizeof(parent_id));
 
        return 0;
 }
-- 
2.21.0

Reply via email to