Skip to content

Commit f1fb693

Browse files
idoschdavem330
authored andcommitted
mlxsw: reg: Add Switch FID Management register definition
Filtering identifiers (FIDs) are unique identifers of bridge instances in the hardware. Add the SFMR register, which is responsible for the creation and configuration of these FIDs. 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>
1 parent e059436 commit f1fb693

File tree

1 file changed

+87
-0
lines changed
  • drivers/net/ethernet/mellanox/mlxsw

1 file changed

+87
-0
lines changed

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

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -883,6 +883,91 @@ static inline void mlxsw_reg_spmlr_pack(char *payload, u8 local_port,
883883
mlxsw_reg_spmlr_learn_mode_set(payload, mode);
884884
}
885885

886+
/* SFMR - Switch FID Management Register
887+
* -------------------------------------
888+
* Creates and configures FIDs.
889+
*/
890+
#define MLXSW_REG_SFMR_ID 0x201F
891+
#define MLXSW_REG_SFMR_LEN 0x18
892+
893+
static const struct mlxsw_reg_info mlxsw_reg_sfmr = {
894+
.id = MLXSW_REG_SFMR_ID,
895+
.len = MLXSW_REG_SFMR_LEN,
896+
};
897+
898+
enum mlxsw_reg_sfmr_op {
899+
MLXSW_REG_SFMR_OP_CREATE_FID,
900+
MLXSW_REG_SFMR_OP_DESTROY_FID,
901+
};
902+
903+
/* reg_sfmr_op
904+
* Operation.
905+
* 0 - Create or edit FID.
906+
* 1 - Destroy FID.
907+
* Access: WO
908+
*/
909+
MLXSW_ITEM32(reg, sfmr, op, 0x00, 24, 4);
910+
911+
/* reg_sfmr_fid
912+
* Filtering ID.
913+
* Access: Index
914+
*/
915+
MLXSW_ITEM32(reg, sfmr, fid, 0x00, 0, 16);
916+
917+
/* reg_sfmr_fid_offset
918+
* FID offset.
919+
* Used to point into the flooding table selected by SFGC register if
920+
* the table is of type FID-Offset. Otherwise, this field is reserved.
921+
* Access: RW
922+
*/
923+
MLXSW_ITEM32(reg, sfmr, fid_offset, 0x08, 0, 16);
924+
925+
/* reg_sfmr_vtfp
926+
* Valid Tunnel Flood Pointer.
927+
* If not set, then nve_tunnel_flood_ptr is reserved and considered NULL.
928+
* Access: RW
929+
*
930+
* Note: Reserved for 802.1Q FIDs.
931+
*/
932+
MLXSW_ITEM32(reg, sfmr, vtfp, 0x0C, 31, 1);
933+
934+
/* reg_sfmr_nve_tunnel_flood_ptr
935+
* Underlay Flooding and BC Pointer.
936+
* Used as a pointer to the first entry of the group based link lists of
937+
* flooding or BC entries (for NVE tunnels).
938+
* Access: RW
939+
*/
940+
MLXSW_ITEM32(reg, sfmr, nve_tunnel_flood_ptr, 0x0C, 0, 24);
941+
942+
/* reg_sfmr_vv
943+
* VNI Valid.
944+
* If not set, then vni is reserved.
945+
* Access: RW
946+
*
947+
* Note: Reserved for 802.1Q FIDs.
948+
*/
949+
MLXSW_ITEM32(reg, sfmr, vv, 0x10, 31, 1);
950+
951+
/* reg_sfmr_vni
952+
* Virtual Network Identifier.
953+
* Access: RW
954+
*
955+
* Note: A given VNI can only be assigned to one FID.
956+
*/
957+
MLXSW_ITEM32(reg, sfmr, vni, 0x10, 0, 24);
958+
959+
static inline void mlxsw_reg_sfmr_pack(char *payload,
960+
enum mlxsw_reg_sfmr_op op, u16 fid,
961+
u16 fid_offset)
962+
{
963+
MLXSW_REG_ZERO(sfmr, payload);
964+
mlxsw_reg_sfmr_op_set(payload, op);
965+
mlxsw_reg_sfmr_fid_set(payload, fid);
966+
mlxsw_reg_sfmr_fid_offset_set(payload, fid_offset);
967+
mlxsw_reg_sfmr_vtfp_set(payload, false);
968+
mlxsw_reg_sfmr_vv_set(payload, false);
969+
}
970+
886971
/* PMLP - Ports Module to Local Port Register
887972
* ------------------------------------------
888973
* Configures the assignment of modules to local ports.
@@ -2061,6 +2146,8 @@ static inline const char *mlxsw_reg_id_str(u16 reg_id)
20612146
return "SFTR";
20622147
case MLXSW_REG_SPMLR_ID:
20632148
return "SPMLR";
2149+
case MLXSW_REG_SFMR_ID:
2150+
return "SFMR";
20642151
case MLXSW_REG_PMLP_ID:
20652152
return "PMLP";
20662153
case MLXSW_REG_PMTU_ID:

0 commit comments

Comments
 (0)