mlxsw: spectrum_acl: Add A-TCAM initialization
Initialize the A-TCAM as part of the driver's initialization routine. Specifically, initialize the eRP tables so that A-TCAM regions will be able to perform allocations of eRP tables upon rule insertion in subsequent patches. Signed-off-by: Ido Schimmel <idosch@mellanox.com> Reviewed-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ca49544ed6
commit
174c0adb69
|
@ -39,6 +39,7 @@
|
|||
#include "core_acl_flex_actions.h"
|
||||
|
||||
struct mlxsw_sp2_acl_tcam {
|
||||
struct mlxsw_sp_acl_atcam atcam;
|
||||
u32 kvdl_index;
|
||||
unsigned int kvdl_count;
|
||||
};
|
||||
|
@ -100,9 +101,14 @@ static int mlxsw_sp2_acl_tcam_init(struct mlxsw_sp *mlxsw_sp, void *priv,
|
|||
if (err)
|
||||
goto err_pgcr_write;
|
||||
|
||||
err = mlxsw_sp_acl_atcam_init(mlxsw_sp, &tcam->atcam);
|
||||
if (err)
|
||||
goto err_atcam_init;
|
||||
|
||||
mlxsw_afa_block_destroy(afa_block);
|
||||
return 0;
|
||||
|
||||
err_atcam_init:
|
||||
err_pgcr_write:
|
||||
err_pefa_write:
|
||||
err_afa_block_continue:
|
||||
|
@ -117,6 +123,7 @@ static void mlxsw_sp2_acl_tcam_fini(struct mlxsw_sp *mlxsw_sp, void *priv)
|
|||
{
|
||||
struct mlxsw_sp2_acl_tcam *tcam = priv;
|
||||
|
||||
mlxsw_sp_acl_atcam_fini(mlxsw_sp, &tcam->atcam);
|
||||
mlxsw_sp_kvdl_free(mlxsw_sp, MLXSW_SP_KVDL_ENTRY_TYPE_ACTSET,
|
||||
tcam->kvdl_count, tcam->kvdl_index);
|
||||
}
|
||||
|
|
|
@ -93,3 +93,15 @@ int mlxsw_sp_acl_atcam_region_init(struct mlxsw_sp *mlxsw_sp,
|
|||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int mlxsw_sp_acl_atcam_init(struct mlxsw_sp *mlxsw_sp,
|
||||
struct mlxsw_sp_acl_atcam *atcam)
|
||||
{
|
||||
return mlxsw_sp_acl_erps_init(mlxsw_sp, atcam);
|
||||
}
|
||||
|
||||
void mlxsw_sp_acl_atcam_fini(struct mlxsw_sp *mlxsw_sp,
|
||||
struct mlxsw_sp_acl_atcam *atcam)
|
||||
{
|
||||
mlxsw_sp_acl_erps_fini(mlxsw_sp, atcam);
|
||||
}
|
||||
|
|
|
@ -173,6 +173,10 @@ int mlxsw_sp_acl_atcam_region_associate(struct mlxsw_sp *mlxsw_sp,
|
|||
u16 region_id);
|
||||
int mlxsw_sp_acl_atcam_region_init(struct mlxsw_sp *mlxsw_sp,
|
||||
struct mlxsw_sp_acl_tcam_region *region);
|
||||
int mlxsw_sp_acl_atcam_init(struct mlxsw_sp *mlxsw_sp,
|
||||
struct mlxsw_sp_acl_atcam *atcam);
|
||||
void mlxsw_sp_acl_atcam_fini(struct mlxsw_sp *mlxsw_sp,
|
||||
struct mlxsw_sp_acl_atcam *atcam);
|
||||
|
||||
struct mlxsw_sp_acl_erp;
|
||||
|
||||
|
|
Loading…
Reference in a new issue