]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
mlxsw: pci: Permit toggling LAG mode
authorPetr Machata <petrm@nvidia.com>
Thu, 19 Oct 2023 10:27:16 +0000 (12:27 +0200)
committerDavid S. Miller <davem@davemloft.net>
Fri, 20 Oct 2023 10:47:49 +0000 (11:47 +0100)
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: Petr Machata <petrm@nvidia.com>
Reviewed-by: Ido Schimmel <idosch@nvidia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlxsw/core.h
drivers/net/ethernet/mellanox/mlxsw/pci.c

index 5692f34b2a63aa1a6f7d4628ba441353b985e625..764d14bd5bc0c9f5ba81d6c960d8fd003c831da1 100644 (file)
@@ -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];
 };
 
index e37a430a3f7851dfb39c5bfbaafb3c14bb8609a6..e4b25e187467acb68fd5b46205ff0a3e95ce2678 100644 (file)
@@ -1314,7 +1314,16 @@ static int mlxsw_pci_config_profile(struct mlxsw_pci *mlxsw_pci, char *mbox,
                                        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);
 }
 
@@ -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)