Skip to content

Commit aa845e3

Browse files
Amit CohenPaolo Abeni
authored andcommitted
mlxsw: Set flood bridge type for FIDs
In the unified bridge model, the bridge type FID attribute is no longer configured by the firmware, but instead by software when creating and editing a FID via SFMR register. Set this field as part of FID creation and edition flow. Default to 0 (reserved) as long as the driver operates in the legacy bridge model. Signed-off-by: Amit Cohen <[email protected]> Reviewed-by: Petr Machata <[email protected]> Signed-off-by: Ido Schimmel <[email protected]> Signed-off-by: Paolo Abeni <[email protected]>
1 parent dd8c77d commit aa845e3

File tree

2 files changed

+14
-5
lines changed

2 files changed

+14
-5
lines changed

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1961,7 +1961,8 @@ MLXSW_ITEM32(reg, sfmr, smpe, 0x28, 0, 16);
19611961

19621962
static inline void mlxsw_reg_sfmr_pack(char *payload,
19631963
enum mlxsw_reg_sfmr_op op, u16 fid,
1964-
u16 fid_offset, bool flood_rsp)
1964+
u16 fid_offset, bool flood_rsp,
1965+
enum mlxsw_reg_bridge_type bridge_type)
19651966
{
19661967
MLXSW_REG_ZERO(sfmr, payload);
19671968
mlxsw_reg_sfmr_op_set(payload, op);
@@ -1970,6 +1971,7 @@ static inline void mlxsw_reg_sfmr_pack(char *payload,
19701971
mlxsw_reg_sfmr_vtfp_set(payload, false);
19711972
mlxsw_reg_sfmr_vv_set(payload, false);
19721973
mlxsw_reg_sfmr_flood_rsp_set(payload, flood_rsp);
1974+
mlxsw_reg_sfmr_flood_bridge_type_set(payload, bridge_type);
19731975
}
19741976

19751977
/* SPVMLR - Switch Port VLAN MAC Learning Register

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

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -422,28 +422,35 @@ static enum mlxsw_reg_sfmr_op mlxsw_sp_sfmr_op(bool valid)
422422
static int mlxsw_sp_fid_op(const struct mlxsw_sp_fid *fid, bool valid)
423423
{
424424
struct mlxsw_sp *mlxsw_sp = fid->fid_family->mlxsw_sp;
425+
enum mlxsw_reg_bridge_type bridge_type = 0;
425426
char sfmr_pl[MLXSW_REG_SFMR_LEN];
426427
bool flood_rsp = false;
427428

428-
if (mlxsw_sp->ubridge)
429+
if (mlxsw_sp->ubridge) {
429430
flood_rsp = fid->fid_family->flood_rsp;
431+
bridge_type = fid->fid_family->bridge_type;
432+
}
430433

431434
mlxsw_reg_sfmr_pack(sfmr_pl, mlxsw_sp_sfmr_op(valid), fid->fid_index,
432-
fid->fid_offset, flood_rsp);
435+
fid->fid_offset, flood_rsp, bridge_type);
433436
return mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(sfmr), sfmr_pl);
434437
}
435438

436439
static int mlxsw_sp_fid_edit_op(const struct mlxsw_sp_fid *fid)
437440
{
438441
struct mlxsw_sp *mlxsw_sp = fid->fid_family->mlxsw_sp;
442+
enum mlxsw_reg_bridge_type bridge_type = 0;
439443
char sfmr_pl[MLXSW_REG_SFMR_LEN];
440444
bool flood_rsp = false;
441445

442-
if (mlxsw_sp->ubridge)
446+
if (mlxsw_sp->ubridge) {
443447
flood_rsp = fid->fid_family->flood_rsp;
448+
bridge_type = fid->fid_family->bridge_type;
449+
}
444450

445451
mlxsw_reg_sfmr_pack(sfmr_pl, MLXSW_REG_SFMR_OP_CREATE_FID,
446-
fid->fid_index, fid->fid_offset, flood_rsp);
452+
fid->fid_index, fid->fid_offset, flood_rsp,
453+
bridge_type);
447454
mlxsw_reg_sfmr_vv_set(sfmr_pl, fid->vni_valid);
448455
mlxsw_reg_sfmr_vni_set(sfmr_pl, be32_to_cpu(fid->vni));
449456
mlxsw_reg_sfmr_vtfp_set(sfmr_pl, fid->nve_flood_index_valid);

0 commit comments

Comments
 (0)