Commit 5c661f14 authored by Jiri Pirko's avatar Jiri Pirko Committed by David S. Miller

mlxsw: reg: Add multi field to PAGT register

For Spectrum-2 this allows parallel lookups in multiple regions.
Signed-off-by: default avatarJiri Pirko <jiri@mellanox.com>
Signed-off-by: default avatarIdo Schimmel <idosch@mellanox.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent a339bf8a
...@@ -2199,6 +2199,14 @@ MLXSW_ITEM32(reg, pagt, size, 0x00, 0, 8); ...@@ -2199,6 +2199,14 @@ MLXSW_ITEM32(reg, pagt, size, 0x00, 0, 8);
*/ */
MLXSW_ITEM32(reg, pagt, acl_group_id, 0x08, 0, 16); MLXSW_ITEM32(reg, pagt, acl_group_id, 0x08, 0, 16);
/* reg_pagt_multi
* Multi-ACL
* 0 - This ACL is the last ACL in the multi-ACL
* 1 - This ACL is part of a multi-ACL
* Access: RW
*/
MLXSW_ITEM32_INDEXED(reg, pagt, multi, 0x30, 31, 1, 0x04, 0x00, false);
/* reg_pagt_acl_id /* reg_pagt_acl_id
* ACL identifier * ACL identifier
* Access: RW * Access: RW
...@@ -2212,12 +2220,13 @@ static inline void mlxsw_reg_pagt_pack(char *payload, u16 acl_group_id) ...@@ -2212,12 +2220,13 @@ static inline void mlxsw_reg_pagt_pack(char *payload, u16 acl_group_id)
} }
static inline void mlxsw_reg_pagt_acl_id_pack(char *payload, int index, static inline void mlxsw_reg_pagt_acl_id_pack(char *payload, int index,
u16 acl_id) u16 acl_id, bool multi)
{ {
u8 size = mlxsw_reg_pagt_size_get(payload); u8 size = mlxsw_reg_pagt_size_get(payload);
if (index >= size) if (index >= size)
mlxsw_reg_pagt_size_set(payload, index + 1); mlxsw_reg_pagt_size_set(payload, index + 1);
mlxsw_reg_pagt_multi_set(payload, index, multi);
mlxsw_reg_pagt_acl_id_set(payload, index, acl_id); mlxsw_reg_pagt_acl_id_set(payload, index, acl_id);
} }
......
...@@ -217,7 +217,7 @@ static int mlxsw_sp_acl_tcam_group_update(struct mlxsw_sp *mlxsw_sp, ...@@ -217,7 +217,7 @@ static int mlxsw_sp_acl_tcam_group_update(struct mlxsw_sp *mlxsw_sp,
mlxsw_reg_pagt_pack(pagt_pl, group->id); mlxsw_reg_pagt_pack(pagt_pl, group->id);
list_for_each_entry(vregion, &group->vregion_list, list) list_for_each_entry(vregion, &group->vregion_list, list)
mlxsw_reg_pagt_acl_id_pack(pagt_pl, acl_index++, mlxsw_reg_pagt_acl_id_pack(pagt_pl, acl_index++,
vregion->region->id); vregion->region->id, false);
mlxsw_reg_pagt_size_set(pagt_pl, acl_index); mlxsw_reg_pagt_size_set(pagt_pl, acl_index);
return mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(pagt), pagt_pl); return mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(pagt), pagt_pl);
} }
......
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