Skip to content

Commit 63bfd39

Browse files
Eran Ben ElishaSaeed Mahameed
authored andcommitted
net/mlx5e: Send PAOS command on interface up/down
Upon interface up/down, driver will send PAOS (Ports Administrative and Operational Status Register) in order to inform the Firmware on the desired status of the port by the driver. Since now we might change physical link status on mlx5e_open/close, logical VF representor should not use mlx5e_open/close ndos as is, and should call the logical version mlx5e_open/closed_locked. Signed-off-by: Eran Ben Elisha <[email protected]> Signed-off-by: Saeed Mahameed <[email protected]>
1 parent d6e1e46 commit 63bfd39

File tree

2 files changed

+20
-7
lines changed

2 files changed

+20
-7
lines changed

drivers/net/ethernet/mellanox/mlx5/core/en_main.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2682,6 +2682,8 @@ int mlx5e_open(struct net_device *netdev)
26822682

26832683
mutex_lock(&priv->state_lock);
26842684
err = mlx5e_open_locked(netdev);
2685+
if (!err)
2686+
mlx5_set_port_admin_status(priv->mdev, MLX5_PORT_UP);
26852687
mutex_unlock(&priv->state_lock);
26862688

26872689
return err;
@@ -2716,6 +2718,7 @@ int mlx5e_close(struct net_device *netdev)
27162718
return -ENODEV;
27172719

27182720
mutex_lock(&priv->state_lock);
2721+
mlx5_set_port_admin_status(priv->mdev, MLX5_PORT_DOWN);
27192722
err = mlx5e_close_locked(netdev);
27202723
mutex_unlock(&priv->state_lock);
27212724

@@ -4187,6 +4190,10 @@ static void mlx5e_nic_enable(struct mlx5e_priv *priv)
41874190

41884191
mlx5e_init_l2_addr(priv);
41894192

4193+
/* Marking the link as currently not needed by the Driver */
4194+
if (!netif_running(netdev))
4195+
mlx5_set_port_admin_status(mdev, MLX5_PORT_DOWN);
4196+
41904197
/* MTU range: 68 - hw-specific max */
41914198
netdev->min_mtu = ETH_MIN_MTU;
41924199
mlx5_query_port_max_mtu(priv->mdev, &max_mtu, 1);

drivers/net/ethernet/mellanox/mlx5/core/en_rep.c

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -613,15 +613,18 @@ static int mlx5e_rep_open(struct net_device *dev)
613613
struct mlx5_eswitch *esw = priv->mdev->priv.eswitch;
614614
int err;
615615

616-
err = mlx5e_open(dev);
616+
mutex_lock(&priv->state_lock);
617+
err = mlx5e_open_locked(dev);
617618
if (err)
618-
return err;
619+
goto unlock;
619620

620-
err = mlx5_eswitch_set_vport_state(esw, rep->vport, MLX5_ESW_VPORT_ADMIN_STATE_UP);
621-
if (!err)
621+
if (!mlx5_eswitch_set_vport_state(esw, rep->vport,
622+
MLX5_ESW_VPORT_ADMIN_STATE_UP))
622623
netif_carrier_on(dev);
623624

624-
return 0;
625+
unlock:
626+
mutex_unlock(&priv->state_lock);
627+
return err;
625628
}
626629

627630
static int mlx5e_rep_close(struct net_device *dev)
@@ -630,10 +633,13 @@ static int mlx5e_rep_close(struct net_device *dev)
630633
struct mlx5e_rep_priv *rpriv = priv->ppriv;
631634
struct mlx5_eswitch_rep *rep = rpriv->rep;
632635
struct mlx5_eswitch *esw = priv->mdev->priv.eswitch;
636+
int ret;
633637

638+
mutex_lock(&priv->state_lock);
634639
(void)mlx5_eswitch_set_vport_state(esw, rep->vport, MLX5_ESW_VPORT_ADMIN_STATE_DOWN);
635-
636-
return mlx5e_close(dev);
640+
ret = mlx5e_close_locked(dev);
641+
mutex_unlock(&priv->state_lock);
642+
return ret;
637643
}
638644

639645
static int mlx5e_rep_get_phys_port_name(struct net_device *dev,

0 commit comments

Comments
 (0)