Skip to content

Commit a38b2fa

Browse files
committed
Merge branch 'mlxsw-Prepare-for-multicast-router-offload'
Jiri Pirko says: ==================== mlxsw: Prepare for multicast router offload Yotam says: This patch-set makes various preparations needed for the multicast router offloading, which include: - Add the needed registers. - Add needed ACL actions. - Add new traps and trap groups. - Exporting needed private structs and enums. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
2 parents 7670712 + b48cfc8 commit a38b2fa

13 files changed

+655
-110
lines changed

drivers/net/ethernet/mellanox/mlxsw/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ mlxsw_spectrum-objs := spectrum.o spectrum_buffers.o \
1717
spectrum_kvdl.o spectrum_acl_tcam.o \
1818
spectrum_acl.o spectrum_flower.o \
1919
spectrum_cnt.o spectrum_fid.o \
20-
spectrum_ipip.o
20+
spectrum_ipip.o spectrum_acl_flex_actions.o
2121
mlxsw_spectrum-$(CONFIG_MLXSW_SPECTRUM_DCB) += spectrum_dcb.o
2222
mlxsw_spectrum-$(CONFIG_NET_DEVLINK) += spectrum_dpipe.o
2323
obj-$(CONFIG_MLXSW_MINIMAL) += mlxsw_minimal.o

drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_actions.c

Lines changed: 73 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -712,7 +712,7 @@ int mlxsw_afa_block_append_drop(struct mlxsw_afa_block *block)
712712
}
713713
EXPORT_SYMBOL(mlxsw_afa_block_append_drop);
714714

715-
int mlxsw_afa_block_append_trap(struct mlxsw_afa_block *block)
715+
int mlxsw_afa_block_append_trap(struct mlxsw_afa_block *block, u16 trap_id)
716716
{
717717
char *act = mlxsw_afa_block_append_action(block,
718718
MLXSW_AFA_TRAPDISC_CODE,
@@ -722,7 +722,7 @@ int mlxsw_afa_block_append_trap(struct mlxsw_afa_block *block)
722722
return -ENOBUFS;
723723
mlxsw_afa_trapdisc_pack(act, MLXSW_AFA_TRAPDISC_TRAP_ACTION_TRAP,
724724
MLXSW_AFA_TRAPDISC_FORWARD_ACTION_DISCARD,
725-
MLXSW_TRAP_ID_ACL0);
725+
trap_id);
726726
return 0;
727727
}
728728
EXPORT_SYMBOL(mlxsw_afa_block_append_trap);
@@ -891,3 +891,74 @@ int mlxsw_afa_block_append_fid_set(struct mlxsw_afa_block *block, u16 fid)
891891
return 0;
892892
}
893893
EXPORT_SYMBOL(mlxsw_afa_block_append_fid_set);
894+
895+
/* MC Routing Action
896+
* -----------------
897+
* The Multicast router action. Can be used by RMFT_V2 - Router Multicast
898+
* Forwarding Table Version 2 Register.
899+
*/
900+
901+
#define MLXSW_AFA_MCROUTER_CODE 0x10
902+
#define MLXSW_AFA_MCROUTER_SIZE 2
903+
904+
enum mlxsw_afa_mcrouter_rpf_action {
905+
MLXSW_AFA_MCROUTER_RPF_ACTION_NOP,
906+
MLXSW_AFA_MCROUTER_RPF_ACTION_TRAP,
907+
MLXSW_AFA_MCROUTER_RPF_ACTION_DISCARD_ERROR,
908+
};
909+
910+
/* afa_mcrouter_rpf_action */
911+
MLXSW_ITEM32(afa, mcrouter, rpf_action, 0x00, 28, 3);
912+
913+
/* afa_mcrouter_expected_irif */
914+
MLXSW_ITEM32(afa, mcrouter, expected_irif, 0x00, 0, 16);
915+
916+
/* afa_mcrouter_min_mtu */
917+
MLXSW_ITEM32(afa, mcrouter, min_mtu, 0x08, 0, 16);
918+
919+
enum mlxsw_afa_mrouter_vrmid {
920+
MLXSW_AFA_MCROUTER_VRMID_INVALID,
921+
MLXSW_AFA_MCROUTER_VRMID_VALID
922+
};
923+
924+
/* afa_mcrouter_vrmid
925+
* Valid RMID: rigr_rmid_index is used as RMID
926+
*/
927+
MLXSW_ITEM32(afa, mcrouter, vrmid, 0x0C, 31, 1);
928+
929+
/* afa_mcrouter_rigr_rmid_index
930+
* When the vrmid field is set to invalid, the field is used as pointer to
931+
* Router Interface Group (RIGR) Table in the KVD linear.
932+
* When the vrmid is set to valid, the field is used as RMID index, ranged
933+
* from 0 to max_mid - 1. The index is to the Port Group Table.
934+
*/
935+
MLXSW_ITEM32(afa, mcrouter, rigr_rmid_index, 0x0C, 0, 24);
936+
937+
static inline void
938+
mlxsw_afa_mcrouter_pack(char *payload,
939+
enum mlxsw_afa_mcrouter_rpf_action rpf_action,
940+
u16 expected_irif, u16 min_mtu,
941+
enum mlxsw_afa_mrouter_vrmid vrmid, u32 rigr_rmid_index)
942+
943+
{
944+
mlxsw_afa_mcrouter_rpf_action_set(payload, rpf_action);
945+
mlxsw_afa_mcrouter_expected_irif_set(payload, expected_irif);
946+
mlxsw_afa_mcrouter_min_mtu_set(payload, min_mtu);
947+
mlxsw_afa_mcrouter_vrmid_set(payload, vrmid);
948+
mlxsw_afa_mcrouter_rigr_rmid_index_set(payload, rigr_rmid_index);
949+
}
950+
951+
int mlxsw_afa_block_append_mcrouter(struct mlxsw_afa_block *block,
952+
u16 expected_irif, u16 min_mtu,
953+
bool rmid_valid, u32 kvdl_index)
954+
{
955+
char *act = mlxsw_afa_block_append_action(block,
956+
MLXSW_AFA_MCROUTER_CODE,
957+
MLXSW_AFA_MCROUTER_SIZE);
958+
if (!act)
959+
return -ENOBUFS;
960+
mlxsw_afa_mcrouter_pack(act, MLXSW_AFA_MCROUTER_RPF_ACTION_TRAP,
961+
expected_irif, min_mtu, rmid_valid, kvdl_index);
962+
return 0;
963+
}
964+
EXPORT_SYMBOL(mlxsw_afa_block_append_mcrouter);

drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_actions.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,16 @@ u32 mlxsw_afa_block_first_set_kvdl_index(struct mlxsw_afa_block *block);
6060
void mlxsw_afa_block_continue(struct mlxsw_afa_block *block);
6161
void mlxsw_afa_block_jump(struct mlxsw_afa_block *block, u16 group_id);
6262
int mlxsw_afa_block_append_drop(struct mlxsw_afa_block *block);
63-
int mlxsw_afa_block_append_trap(struct mlxsw_afa_block *block);
63+
int mlxsw_afa_block_append_trap(struct mlxsw_afa_block *block, u16 trap_id);
6464
int mlxsw_afa_block_append_fwd(struct mlxsw_afa_block *block,
6565
u8 local_port, bool in_port);
6666
int mlxsw_afa_block_append_vlan_modify(struct mlxsw_afa_block *block,
6767
u16 vid, u8 pcp, u8 et);
6868
int mlxsw_afa_block_append_counter(struct mlxsw_afa_block *block,
6969
u32 counter_index);
7070
int mlxsw_afa_block_append_fid_set(struct mlxsw_afa_block *block, u16 fid);
71+
int mlxsw_afa_block_append_mcrouter(struct mlxsw_afa_block *block,
72+
u16 expected_irif, u16 min_mtu,
73+
bool rmid_valid, u32 kvdl_index);
7174

7275
#endif

0 commit comments

Comments
 (0)