Commit daee7aab authored by Petr Machata's avatar Petr Machata Committed by David S. Miller

mlxsw: pci: Permit toggling LAG mode

Add to struct mlxsw_config_profile a field lag_mode_prefer_sw for the
driver to indicate that SW LAG mode should be configured if possible. Add
to the PCI module code to set lag_mode as appropriate.
Signed-off-by: default avatarPetr Machata <petrm@nvidia.com>
Reviewed-by: default avatarIdo Schimmel <idosch@nvidia.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent b2e9b1fe
...@@ -337,6 +337,7 @@ struct mlxsw_config_profile { ...@@ -337,6 +337,7 @@ struct mlxsw_config_profile {
u8 kvd_hash_single_parts; u8 kvd_hash_single_parts;
u8 kvd_hash_double_parts; u8 kvd_hash_double_parts;
u8 cqe_time_stamp_type; u8 cqe_time_stamp_type;
bool lag_mode_prefer_sw;
struct mlxsw_swid_config swid_config[MLXSW_CONFIG_PROFILE_SWID_COUNT]; struct mlxsw_swid_config swid_config[MLXSW_CONFIG_PROFILE_SWID_COUNT];
}; };
......
...@@ -1314,7 +1314,16 @@ static int mlxsw_pci_config_profile(struct mlxsw_pci *mlxsw_pci, char *mbox, ...@@ -1314,7 +1314,16 @@ static int mlxsw_pci_config_profile(struct mlxsw_pci *mlxsw_pci, char *mbox,
profile->cqe_time_stamp_type); profile->cqe_time_stamp_type);
} }
mlxsw_pci->lag_mode = MLXSW_CMD_MBOX_CONFIG_PROFILE_LAG_MODE_FW; if (profile->lag_mode_prefer_sw && mlxsw_pci->lag_mode_support) {
enum mlxsw_cmd_mbox_config_profile_lag_mode lag_mode =
MLXSW_CMD_MBOX_CONFIG_PROFILE_LAG_MODE_SW;
mlxsw_cmd_mbox_config_profile_set_lag_mode_set(mbox, 1);
mlxsw_cmd_mbox_config_profile_lag_mode_set(mbox, lag_mode);
mlxsw_pci->lag_mode = lag_mode;
} else {
mlxsw_pci->lag_mode = MLXSW_CMD_MBOX_CONFIG_PROFILE_LAG_MODE_FW;
}
return mlxsw_cmd_config_profile_set(mlxsw_pci->core, mbox); return mlxsw_cmd_config_profile_set(mlxsw_pci->core, mbox);
} }
...@@ -1624,9 +1633,8 @@ static int mlxsw_pci_init(void *bus_priv, struct mlxsw_core *mlxsw_core, ...@@ -1624,9 +1633,8 @@ static int mlxsw_pci_init(void *bus_priv, struct mlxsw_core *mlxsw_core,
if (err) if (err)
goto err_config_profile; goto err_config_profile;
/* Some resources depend on unified bridge model, which is configured /* Some resources depend on details of config_profile, such as unified
* as part of config_profile. Query the resources again to get correct * bridge model. Query the resources again to get correct values.
* values.
*/ */
err = mlxsw_core_resources_query(mlxsw_core, mbox, res); err = mlxsw_core_resources_query(mlxsw_core, mbox, res);
if (err) if (err)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment