}
 EXPORT_SYMBOL(mlxsw_core_lag_mode);
 
+enum mlxsw_cmd_mbox_config_profile_flood_mode
+mlxsw_core_flood_mode(struct mlxsw_core *mlxsw_core)
+{
+       return mlxsw_core->bus->flood_mode(mlxsw_core->bus_priv);
+}
+EXPORT_SYMBOL(mlxsw_core_flood_mode);
+
 void *mlxsw_core_driver_priv(struct mlxsw_core *mlxsw_core)
 {
        return mlxsw_core->driver_priv;
 
 int mlxsw_core_max_lag(struct mlxsw_core *mlxsw_core, u16 *p_max_lag);
 enum mlxsw_cmd_mbox_config_profile_lag_mode
 mlxsw_core_lag_mode(struct mlxsw_core *mlxsw_core);
+enum mlxsw_cmd_mbox_config_profile_flood_mode
+mlxsw_core_flood_mode(struct mlxsw_core *mlxsw_core);
 
 void *mlxsw_core_driver_priv(struct mlxsw_core *mlxsw_core);
 
        u32 (*read_utc_sec)(void *bus_priv);
        u32 (*read_utc_nsec)(void *bus_priv);
        enum mlxsw_cmd_mbox_config_profile_lag_mode (*lag_mode)(void *bus_priv);
+       enum mlxsw_cmd_mbox_config_profile_flood_mode (*flood_mode)(void *priv);
        u8 features;
 };
 
 
        u64 utc_sec_offset;
        u64 utc_nsec_offset;
        bool lag_mode_support;
+       bool cff_support;
        enum mlxsw_cmd_mbox_config_profile_lag_mode lag_mode;
+       enum mlxsw_cmd_mbox_config_profile_flood_mode flood_mode;
        struct mlxsw_pci_queue_type_group queues[MLXSW_PCI_QUEUE_TYPE_COUNT];
        u32 doorbell_offset;
        struct mlxsw_core *core;
                        mbox, 1);
                mlxsw_cmd_mbox_config_profile_flood_mode_set(
                        mbox, profile->flood_mode);
+               mlxsw_pci->flood_mode = profile->flood_mode;
+       } else {
+               WARN_ON(1);
+               return -EINVAL;
        }
        if (profile->used_max_ib_mc) {
                mlxsw_cmd_mbox_config_profile_set_max_ib_mc_set(
 
        mlxsw_pci->lag_mode_support =
                mlxsw_cmd_mbox_query_fw_lag_mode_support_get(mbox);
+       mlxsw_pci->cff_support =
+               mlxsw_cmd_mbox_query_fw_cff_support_get(mbox);
+
        num_pages = mlxsw_cmd_mbox_query_fw_fw_pages_get(mbox);
        err = mlxsw_pci_fw_area_init(mlxsw_pci, mbox, num_pages);
        if (err)
        return mlxsw_pci->lag_mode;
 }
 
+static enum mlxsw_cmd_mbox_config_profile_flood_mode
+mlxsw_pci_flood_mode(void *bus_priv)
+{
+       struct mlxsw_pci *mlxsw_pci = bus_priv;
+
+       return mlxsw_pci->flood_mode;
+}
+
 static const struct mlxsw_bus mlxsw_pci_bus = {
        .kind                   = "pci",
        .init                   = mlxsw_pci_init,
        .read_utc_sec           = mlxsw_pci_read_utc_sec,
        .read_utc_nsec          = mlxsw_pci_read_utc_nsec,
        .lag_mode               = mlxsw_pci_lag_mode,
+       .flood_mode             = mlxsw_pci_flood_mode,
        .features               = MLXSW_BUS_F_TXRX | MLXSW_BUS_F_RESET,
 };