mlxsw: reg: Add support for activity information from PEFA register
In Spectrum-2, the PEFA register is extend to report if the action set was hit during processing of packets. Introduce this extension and adjust the code around this accordingly. Signed-off-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: Ido Schimmel <idosch@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
dcdf01028e
commit
2d186ed4dd
|
@ -2332,6 +2332,23 @@ MLXSW_REG_DEFINE(pefa, MLXSW_REG_PEFA_ID, MLXSW_REG_PEFA_LEN);
|
|||
*/
|
||||
MLXSW_ITEM32(reg, pefa, index, 0x00, 0, 24);
|
||||
|
||||
/* reg_pefa_a
|
||||
* Index in the KVD Linear Centralized Database.
|
||||
* Activity
|
||||
* For a new entry: set if ca=0, clear if ca=1
|
||||
* Set if a packet lookup has hit on the specific entry
|
||||
* Access: RO
|
||||
*/
|
||||
MLXSW_ITEM32(reg, pefa, a, 0x04, 29, 1);
|
||||
|
||||
/* reg_pefa_ca
|
||||
* Clear activity
|
||||
* When write: activity is according to this field
|
||||
* When read: after reading the activity is cleared according to ca
|
||||
* Access: OP
|
||||
*/
|
||||
MLXSW_ITEM32(reg, pefa, ca, 0x04, 24, 1);
|
||||
|
||||
#define MLXSW_REG_FLEX_ACTION_SET_LEN 0xA8
|
||||
|
||||
/* reg_pefa_flex_action_set
|
||||
|
@ -2341,12 +2358,20 @@ MLXSW_ITEM32(reg, pefa, index, 0x00, 0, 24);
|
|||
*/
|
||||
MLXSW_ITEM_BUF(reg, pefa, flex_action_set, 0x08, MLXSW_REG_FLEX_ACTION_SET_LEN);
|
||||
|
||||
static inline void mlxsw_reg_pefa_pack(char *payload, u32 index,
|
||||
static inline void mlxsw_reg_pefa_pack(char *payload, u32 index, bool ca,
|
||||
const char *flex_action_set)
|
||||
{
|
||||
MLXSW_REG_ZERO(pefa, payload);
|
||||
mlxsw_reg_pefa_index_set(payload, index);
|
||||
mlxsw_reg_pefa_flex_action_set_memcpy_to(payload, flex_action_set);
|
||||
mlxsw_reg_pefa_ca_set(payload, ca);
|
||||
if (flex_action_set)
|
||||
mlxsw_reg_pefa_flex_action_set_memcpy_to(payload,
|
||||
flex_action_set);
|
||||
}
|
||||
|
||||
static inline void mlxsw_reg_pefa_unpack(char *payload, bool *p_a)
|
||||
{
|
||||
*p_a = mlxsw_reg_pefa_a_get(payload);
|
||||
}
|
||||
|
||||
/* PTCE-V2 - Policy-Engine TCAM Entry Register Version 2
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
#include "spectrum_span.h"
|
||||
|
||||
static int mlxsw_sp_act_kvdl_set_add(void *priv, u32 *p_kvdl_index,
|
||||
char *enc_actions, bool is_first)
|
||||
char *enc_actions, bool is_first, bool ca)
|
||||
{
|
||||
struct mlxsw_sp *mlxsw_sp = priv;
|
||||
char pefa_pl[MLXSW_REG_PEFA_LEN];
|
||||
|
@ -55,7 +55,7 @@ static int mlxsw_sp_act_kvdl_set_add(void *priv, u32 *p_kvdl_index,
|
|||
1, &kvdl_index);
|
||||
if (err)
|
||||
return err;
|
||||
mlxsw_reg_pefa_pack(pefa_pl, kvdl_index, enc_actions);
|
||||
mlxsw_reg_pefa_pack(pefa_pl, kvdl_index, ca, enc_actions);
|
||||
err = mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(pefa), pefa_pl);
|
||||
if (err)
|
||||
goto err_pefa_write;
|
||||
|
@ -68,6 +68,20 @@ err_pefa_write:
|
|||
return err;
|
||||
}
|
||||
|
||||
static int mlxsw_sp1_act_kvdl_set_add(void *priv, u32 *p_kvdl_index,
|
||||
char *enc_actions, bool is_first)
|
||||
{
|
||||
return mlxsw_sp_act_kvdl_set_add(priv, p_kvdl_index, enc_actions,
|
||||
is_first, false);
|
||||
}
|
||||
|
||||
static int mlxsw_sp2_act_kvdl_set_add(void *priv, u32 *p_kvdl_index,
|
||||
char *enc_actions, bool is_first)
|
||||
{
|
||||
return mlxsw_sp_act_kvdl_set_add(priv, p_kvdl_index, enc_actions,
|
||||
is_first, true);
|
||||
}
|
||||
|
||||
static void mlxsw_sp_act_kvdl_set_del(void *priv, u32 kvdl_index,
|
||||
bool is_first)
|
||||
{
|
||||
|
@ -158,7 +172,7 @@ mlxsw_sp_act_mirror_del(void *priv, u8 local_in_port, int span_id, bool ingress)
|
|||
}
|
||||
|
||||
const struct mlxsw_afa_ops mlxsw_sp1_act_afa_ops = {
|
||||
.kvdl_set_add = mlxsw_sp_act_kvdl_set_add,
|
||||
.kvdl_set_add = mlxsw_sp1_act_kvdl_set_add,
|
||||
.kvdl_set_del = mlxsw_sp_act_kvdl_set_del,
|
||||
.kvdl_fwd_entry_add = mlxsw_sp_act_kvdl_fwd_entry_add,
|
||||
.kvdl_fwd_entry_del = mlxsw_sp_act_kvdl_fwd_entry_del,
|
||||
|
@ -169,7 +183,7 @@ const struct mlxsw_afa_ops mlxsw_sp1_act_afa_ops = {
|
|||
};
|
||||
|
||||
const struct mlxsw_afa_ops mlxsw_sp2_act_afa_ops = {
|
||||
.kvdl_set_add = mlxsw_sp_act_kvdl_set_add,
|
||||
.kvdl_set_add = mlxsw_sp2_act_kvdl_set_add,
|
||||
.kvdl_set_del = mlxsw_sp_act_kvdl_set_del,
|
||||
.kvdl_fwd_entry_add = mlxsw_sp_act_kvdl_fwd_entry_add,
|
||||
.kvdl_fwd_entry_del = mlxsw_sp_act_kvdl_fwd_entry_del,
|
||||
|
|
Loading…
Reference in New Issue