mlxsw: Simplify traps creation
The Host Trap Group Table (HTGT) register configures trap groups, which are populated with trap IDs using the Host PacKet Trap (HPKT) register. However, a trap ID can only be present inside one trap group (the last configured). Instead of passing both the trap group and ID for the function that packs HPKT, pass only the trap ID and derive from it the trap group. Signed-off-by: Ido Schimmel <idosch@mellanox.com> Signed-off-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ebb7963f9b
commit
f24af33015
3 changed files with 13 additions and 9 deletions
|
@ -506,7 +506,6 @@ static int mlxsw_emad_traps_set(struct mlxsw_core *mlxsw_core)
|
|||
return err;
|
||||
|
||||
mlxsw_reg_hpkt_pack(hpkt_pl, MLXSW_REG_HPKT_ACTION_TRAP_TO_CPU,
|
||||
MLXSW_REG_HTGT_TRAP_GROUP_EMAD,
|
||||
MLXSW_TRAP_ID_ETHEMAD);
|
||||
return mlxsw_reg_write(mlxsw_core, MLXSW_REG(hpkt), hpkt_pl);
|
||||
}
|
||||
|
@ -553,7 +552,6 @@ static void mlxsw_emad_fini(struct mlxsw_core *mlxsw_core)
|
|||
|
||||
mlxsw_core->emad.use_emad = false;
|
||||
mlxsw_reg_hpkt_pack(hpkt_pl, MLXSW_REG_HPKT_ACTION_DISCARD,
|
||||
MLXSW_REG_HTGT_TRAP_GROUP_EMAD,
|
||||
MLXSW_TRAP_ID_ETHEMAD);
|
||||
mlxsw_reg_write(mlxsw_core, MLXSW_REG(hpkt), hpkt_pl);
|
||||
|
||||
|
|
|
@ -1209,12 +1209,22 @@ enum {
|
|||
*/
|
||||
MLXSW_ITEM32(reg, hpkt, ctrl, 0x04, 16, 2);
|
||||
|
||||
static inline void mlxsw_reg_hpkt_pack(char *payload, u8 action,
|
||||
u8 trap_group, u16 trap_id)
|
||||
static inline void mlxsw_reg_hpkt_pack(char *payload, u8 action, u16 trap_id)
|
||||
{
|
||||
u8 trap_group;
|
||||
|
||||
MLXSW_REG_ZERO(hpkt, payload);
|
||||
mlxsw_reg_hpkt_ack_set(payload, MLXSW_REG_HPKT_ACK_NOT_REQUIRED);
|
||||
mlxsw_reg_hpkt_action_set(payload, action);
|
||||
switch (trap_id) {
|
||||
case MLXSW_TRAP_ID_ETHEMAD:
|
||||
case MLXSW_TRAP_ID_PUDE:
|
||||
trap_group = MLXSW_REG_HTGT_TRAP_GROUP_EMAD;
|
||||
break;
|
||||
default:
|
||||
trap_group = MLXSW_REG_HTGT_TRAP_GROUP_RX;
|
||||
break;
|
||||
}
|
||||
mlxsw_reg_hpkt_trap_group_set(payload, trap_group);
|
||||
mlxsw_reg_hpkt_trap_id_set(payload, trap_id);
|
||||
mlxsw_reg_hpkt_ctrl_set(payload, MLXSW_REG_HPKT_CTRL_PACKET_DEFAULT);
|
||||
|
|
|
@ -1177,8 +1177,7 @@ static int mlxsw_sx_event_register(struct mlxsw_sx *mlxsw_sx,
|
|||
if (err)
|
||||
return err;
|
||||
|
||||
mlxsw_reg_hpkt_pack(hpkt_pl, MLXSW_REG_HPKT_ACTION_FORWARD,
|
||||
MLXSW_REG_HTGT_TRAP_GROUP_EMAD, trap_id);
|
||||
mlxsw_reg_hpkt_pack(hpkt_pl, MLXSW_REG_HPKT_ACTION_FORWARD, trap_id);
|
||||
err = mlxsw_reg_write(mlxsw_sx->core, MLXSW_REG(hpkt), hpkt_pl);
|
||||
if (err)
|
||||
goto err_event_trap_set;
|
||||
|
@ -1322,7 +1321,6 @@ static int mlxsw_sx_traps_init(struct mlxsw_sx *mlxsw_sx)
|
|||
goto err_rx_listener_register;
|
||||
|
||||
mlxsw_reg_hpkt_pack(hpkt_pl, MLXSW_REG_HPKT_ACTION_TRAP_TO_CPU,
|
||||
MLXSW_REG_HTGT_TRAP_GROUP_RX,
|
||||
mlxsw_sx_rx_listener[i].trap_id);
|
||||
err = mlxsw_reg_write(mlxsw_sx->core, MLXSW_REG(hpkt), hpkt_pl);
|
||||
if (err)
|
||||
|
@ -1337,7 +1335,6 @@ static int mlxsw_sx_traps_init(struct mlxsw_sx *mlxsw_sx)
|
|||
err_rx_listener_register:
|
||||
for (i--; i >= 0; i--) {
|
||||
mlxsw_reg_hpkt_pack(hpkt_pl, MLXSW_REG_HPKT_ACTION_FORWARD,
|
||||
MLXSW_REG_HTGT_TRAP_GROUP_RX,
|
||||
mlxsw_sx_rx_listener[i].trap_id);
|
||||
mlxsw_reg_write(mlxsw_sx->core, MLXSW_REG(hpkt), hpkt_pl);
|
||||
|
||||
|
@ -1355,7 +1352,6 @@ static void mlxsw_sx_traps_fini(struct mlxsw_sx *mlxsw_sx)
|
|||
|
||||
for (i = 0; i < ARRAY_SIZE(mlxsw_sx_rx_listener); i++) {
|
||||
mlxsw_reg_hpkt_pack(hpkt_pl, MLXSW_REG_HPKT_ACTION_FORWARD,
|
||||
MLXSW_REG_HTGT_TRAP_GROUP_RX,
|
||||
mlxsw_sx_rx_listener[i].trap_id);
|
||||
mlxsw_reg_write(mlxsw_sx->core, MLXSW_REG(hpkt), hpkt_pl);
|
||||
|
||||
|
|
Loading…
Reference in a new issue