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

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
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -337,6 +337,7 @@ struct mlxsw_config_profile {
	u8	kvd_hash_single_parts;
	u8	kvd_hash_double_parts;
	u8	cqe_time_stamp_type;
	bool	lag_mode_prefer_sw;
	struct mlxsw_swid_config swid_config[MLXSW_CONFIG_PROFILE_SWID_COUNT];
};

+12 −4
Original line number Diff line number Diff line
@@ -1314,7 +1314,16 @@ static int mlxsw_pci_config_profile(struct mlxsw_pci *mlxsw_pci, char *mbox,
					profile->cqe_time_stamp_type);
	}

	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);
}

@@ -1624,9 +1633,8 @@ static int mlxsw_pci_init(void *bus_priv, struct mlxsw_core *mlxsw_core,
	if (err)
		goto err_config_profile;

	/* Some resources depend on unified bridge model, which is configured
	 * as part of config_profile. Query the resources again to get correct
	 * values.
	/* Some resources depend on details of config_profile, such as unified
	 * bridge model. Query the resources again to get correct values.
	 */
	err = mlxsw_core_resources_query(mlxsw_core, mbox, res);
	if (err)