Commit 7ff40a46 authored by Paul Blakey's avatar Paul Blakey Committed by Saeed Mahameed
Browse files

net/mlx5e: Expose same physical switch_id for all representors



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: default avatarPaul Blakey <paulb@mellanox.com>
Reviewed-by: default avatarParav Pandit <parav@mellanox.com>
Reviewed-by: default avatarRoi Dayan <roid@mellanox.com>
Signed-off-by: default avatarSaeed Mahameed <saeedm@mellanox.com>
parent a90f88fe
Loading
Loading
Loading
Loading
+9 −20
Original line number Diff line number Diff line
@@ -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;
}