*/
 MLXSW_ITEM32(reg, smid2, mid, 0x00, 0, 16);
 
+/* reg_smid2_smpe_valid
+ * SMPE is valid.
+ * When not valid, the egress VID will not be modified by the SMPE table.
+ * Access: RW
+ *
+ * Note: Reserved when legacy bridge model is used and on Spectrum-2.
+ */
+MLXSW_ITEM32(reg, smid2, smpe_valid, 0x08, 20, 1);
+
+/* reg_smid2_smpe
+ * Switch multicast port to egress VID.
+ * Access: RW
+ *
+ * Note: Reserved when legacy bridge model is used and on Spectrum-2.
+ */
+MLXSW_ITEM32(reg, smid2, smpe, 0x08, 0, 16);
+
 /* reg_smid2_port
  * Local port memebership (1 bit per port).
  * Access: RW
 MLXSW_ITEM_BIT_ARRAY(reg, smid2, port_mask, 0xA0, 0x80, 1);
 
 static inline void mlxsw_reg_smid2_pack(char *payload, u16 mid, u16 port,
-                                       bool set)
+                                       bool set, bool smpe_valid, u16 smpe)
 {
        MLXSW_REG_ZERO(smid2, payload);
        mlxsw_reg_smid2_swid_set(payload, 0);
        mlxsw_reg_smid2_mid_set(payload, mid);
        mlxsw_reg_smid2_port_set(payload, port, set);
        mlxsw_reg_smid2_port_mask_set(payload, port, 1);
+       mlxsw_reg_smid2_smpe_valid_set(payload, smpe_valid);
+       mlxsw_reg_smid2_smpe_set(payload, smpe_valid ? smpe : 0);
 }
 
 /* CWTP - Congetion WRED ECN TClass Profile
 
                return -ENOMEM;
 
        mlxsw_reg_smid2_pack(smid2_pl, mid_idx,
-                            mlxsw_sp_router_port(mlxsw_sp), add);
+                            mlxsw_sp_router_port(mlxsw_sp), add, false, 0);
        err = mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(smid2), smid2_pl);
        kfree(smid2_pl);
        return err;
        if (!smid2_pl)
                return -ENOMEM;
 
-       mlxsw_reg_smid2_pack(smid2_pl, mid_idx, 0, false);
+       mlxsw_reg_smid2_pack(smid2_pl, mid_idx, 0, false, false, 0);
        for (i = 1; i < mlxsw_core_max_ports(mlxsw_sp->core); i++) {
                if (mlxsw_sp->ports[i])
                        mlxsw_reg_smid2_port_mask_set(smid2_pl, i, 1);
        if (!smid2_pl)
                return -ENOMEM;
 
-       mlxsw_reg_smid2_pack(smid2_pl, mid_idx, mlxsw_sp_port->local_port, add);
+       mlxsw_reg_smid2_pack(smid2_pl, mid_idx, mlxsw_sp_port->local_port, add,
+                            false, 0);
        err = mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(smid2), smid2_pl);
        kfree(smid2_pl);
        return err;