|
@@ -3268,6 +3268,18 @@ static int mlxsw_sp_basic_trap_groups_set(struct mlxsw_core *mlxsw_core)
|
|
|
return mlxsw_reg_write(mlxsw_core, MLXSW_REG(htgt), htgt_pl);
|
|
|
}
|
|
|
|
|
|
+static int mlxsw_sp_vfid_op(struct mlxsw_sp *mlxsw_sp, u16 fid, bool create);
|
|
|
+
|
|
|
+static int mlxsw_sp_dummy_fid_init(struct mlxsw_sp *mlxsw_sp)
|
|
|
+{
|
|
|
+ return mlxsw_sp_vfid_op(mlxsw_sp, MLXSW_SP_DUMMY_FID, true);
|
|
|
+}
|
|
|
+
|
|
|
+static void mlxsw_sp_dummy_fid_fini(struct mlxsw_sp *mlxsw_sp)
|
|
|
+{
|
|
|
+ mlxsw_sp_vfid_op(mlxsw_sp, MLXSW_SP_DUMMY_FID, false);
|
|
|
+}
|
|
|
+
|
|
|
static int mlxsw_sp_init(struct mlxsw_core *mlxsw_core,
|
|
|
const struct mlxsw_bus_info *mlxsw_bus_info)
|
|
|
{
|
|
@@ -3346,6 +3358,12 @@ static int mlxsw_sp_init(struct mlxsw_core *mlxsw_core,
|
|
|
goto err_dpipe_init;
|
|
|
}
|
|
|
|
|
|
+ err = mlxsw_sp_dummy_fid_init(mlxsw_sp);
|
|
|
+ if (err) {
|
|
|
+ dev_err(mlxsw_sp->bus_info->dev, "Failed to init dummy FID\n");
|
|
|
+ goto err_dummy_fid_init;
|
|
|
+ }
|
|
|
+
|
|
|
err = mlxsw_sp_ports_create(mlxsw_sp);
|
|
|
if (err) {
|
|
|
dev_err(mlxsw_sp->bus_info->dev, "Failed to create ports\n");
|
|
@@ -3355,6 +3373,8 @@ static int mlxsw_sp_init(struct mlxsw_core *mlxsw_core,
|
|
|
return 0;
|
|
|
|
|
|
err_ports_create:
|
|
|
+ mlxsw_sp_dummy_fid_fini(mlxsw_sp);
|
|
|
+err_dummy_fid_init:
|
|
|
mlxsw_sp_dpipe_fini(mlxsw_sp);
|
|
|
err_dpipe_init:
|
|
|
mlxsw_sp_counter_pool_fini(mlxsw_sp);
|
|
@@ -3381,6 +3401,7 @@ static void mlxsw_sp_fini(struct mlxsw_core *mlxsw_core)
|
|
|
struct mlxsw_sp *mlxsw_sp = mlxsw_core_driver_priv(mlxsw_core);
|
|
|
|
|
|
mlxsw_sp_ports_remove(mlxsw_sp);
|
|
|
+ mlxsw_sp_dummy_fid_fini(mlxsw_sp);
|
|
|
mlxsw_sp_dpipe_fini(mlxsw_sp);
|
|
|
mlxsw_sp_counter_pool_fini(mlxsw_sp);
|
|
|
mlxsw_sp_acl_fini(mlxsw_sp);
|