diff options
Diffstat (limited to 'drivers/net/ethernet/mellanox/mlxsw/spectrum.c')
| -rw-r--r-- | drivers/net/ethernet/mellanox/mlxsw/spectrum.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c index eed1045e4d96..b65e274b02e9 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c | |||
| @@ -862,8 +862,9 @@ int __mlxsw_sp_port_headroom_set(struct mlxsw_sp_port *mlxsw_sp_port, int mtu, | |||
| 862 | for (i = 0; i < IEEE_8021QAZ_MAX_TCS; i++) { | 862 | for (i = 0; i < IEEE_8021QAZ_MAX_TCS; i++) { |
| 863 | bool configure = false; | 863 | bool configure = false; |
| 864 | bool pfc = false; | 864 | bool pfc = false; |
| 865 | u16 thres_cells; | ||
| 866 | u16 delay_cells; | ||
| 865 | bool lossy; | 867 | bool lossy; |
| 866 | u16 thres; | ||
| 867 | 868 | ||
| 868 | for (j = 0; j < IEEE_8021QAZ_MAX_TCS; j++) { | 869 | for (j = 0; j < IEEE_8021QAZ_MAX_TCS; j++) { |
| 869 | if (prio_tc[j] == i) { | 870 | if (prio_tc[j] == i) { |
| @@ -877,10 +878,11 @@ int __mlxsw_sp_port_headroom_set(struct mlxsw_sp_port *mlxsw_sp_port, int mtu, | |||
| 877 | continue; | 878 | continue; |
| 878 | 879 | ||
| 879 | lossy = !(pfc || pause_en); | 880 | lossy = !(pfc || pause_en); |
| 880 | thres = mlxsw_sp_pg_buf_threshold_get(mlxsw_sp, mtu); | 881 | thres_cells = mlxsw_sp_pg_buf_threshold_get(mlxsw_sp, mtu); |
| 881 | delay = mlxsw_sp_pg_buf_delay_get(mlxsw_sp, mtu, delay, pfc, | 882 | delay_cells = mlxsw_sp_pg_buf_delay_get(mlxsw_sp, mtu, delay, |
| 882 | pause_en); | 883 | pfc, pause_en); |
| 883 | mlxsw_sp_pg_buf_pack(pbmc_pl, i, thres + delay, thres, lossy); | 884 | mlxsw_sp_pg_buf_pack(pbmc_pl, i, thres_cells + delay_cells, |
| 885 | thres_cells, lossy); | ||
| 884 | } | 886 | } |
| 885 | 887 | ||
| 886 | return mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(pbmc), pbmc_pl); | 888 | return mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(pbmc), pbmc_pl); |
| @@ -5005,12 +5007,15 @@ static int mlxsw_sp_netdevice_port_upper_event(struct net_device *lower_dev, | |||
| 5005 | lower_dev, | 5007 | lower_dev, |
| 5006 | upper_dev); | 5008 | upper_dev); |
| 5007 | } else if (netif_is_lag_master(upper_dev)) { | 5009 | } else if (netif_is_lag_master(upper_dev)) { |
| 5008 | if (info->linking) | 5010 | if (info->linking) { |
| 5009 | err = mlxsw_sp_port_lag_join(mlxsw_sp_port, | 5011 | err = mlxsw_sp_port_lag_join(mlxsw_sp_port, |
| 5010 | upper_dev); | 5012 | upper_dev); |
| 5011 | else | 5013 | } else { |
| 5014 | mlxsw_sp_port_lag_tx_en_set(mlxsw_sp_port, | ||
| 5015 | false); | ||
| 5012 | mlxsw_sp_port_lag_leave(mlxsw_sp_port, | 5016 | mlxsw_sp_port_lag_leave(mlxsw_sp_port, |
| 5013 | upper_dev); | 5017 | upper_dev); |
| 5018 | } | ||
| 5014 | } else if (netif_is_ovs_master(upper_dev)) { | 5019 | } else if (netif_is_ovs_master(upper_dev)) { |
| 5015 | if (info->linking) | 5020 | if (info->linking) |
| 5016 | err = mlxsw_sp_port_ovs_join(mlxsw_sp_port); | 5021 | err = mlxsw_sp_port_ovs_join(mlxsw_sp_port); |
