static struct notifier_block lan966x_switchdev_nb __read_mostly;
 static struct notifier_block lan966x_switchdev_blocking_nb __read_mostly;
 
+static void lan966x_port_set_mcast_flood(struct lan966x_port *port,
+                                        bool enabled)
+{
+       u32 val = lan_rd(port->lan966x, ANA_PGID(PGID_MC));
+
+       val = ANA_PGID_PGID_GET(val);
+       if (enabled)
+               val |= BIT(port->chip_port);
+       else
+               val &= ~BIT(port->chip_port);
+
+       lan_rmw(ANA_PGID_PGID_SET(val),
+               ANA_PGID_PGID,
+               port->lan966x, ANA_PGID(PGID_MC));
+}
+
+static void lan966x_port_bridge_flags(struct lan966x_port *port,
+                                     struct switchdev_brport_flags flags)
+{
+       if (flags.mask & BR_MCAST_FLOOD)
+               lan966x_port_set_mcast_flood(port,
+                                            !!(flags.val & BR_MCAST_FLOOD));
+}
+
+static int lan966x_port_pre_bridge_flags(struct lan966x_port *port,
+                                        struct switchdev_brport_flags flags)
+{
+       if (flags.mask & ~BR_MCAST_FLOOD)
+               return -EINVAL;
+
+       return 0;
+}
+
 static void lan966x_update_fwd_mask(struct lan966x *lan966x)
 {
        int i;
                return 0;
 
        switch (attr->id) {
+       case SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS:
+               lan966x_port_bridge_flags(port, attr->u.brport_flags);
+               break;
+       case SWITCHDEV_ATTR_ID_PORT_PRE_BRIDGE_FLAGS:
+               err = lan966x_port_pre_bridge_flags(port, attr->u.brport_flags);
+               break;
        case SWITCHDEV_ATTR_ID_PORT_STP_STATE:
                lan966x_port_stp_state_set(port, attr->u.stp_state);
                break;