threshold = (rx_buff_size * (1024U / 32U) * 50U) / 100U;
                hw_atl_rpb_rx_buff_lo_threshold_per_tc_set(self, threshold, tc);
+
+               hw_atl_b0_set_fc(self, self->aq_nic_cfg->fc.req, tc);
        }
 
        /* QoS 802.1p priority -> TC mapping */
        .hw_get_hw_stats             = hw_atl2_utils_get_hw_stats,
        .hw_get_fw_version           = hw_atl2_utils_get_fw_version,
        .hw_set_offload              = hw_atl_b0_hw_offload_set,
+       .hw_set_fc                   = hw_atl_b0_set_fc,
 };
 
        return hw_atl2_shared_buffer_finish_ack(self);
 }
 
+static void aq_a2_fw_set_mpi_flow_control(struct aq_hw_s *self,
+                                         struct link_options_s *link_options)
+{
+       u32 flow_control = self->aq_nic_cfg->fc.req;
+
+       link_options->pause_rx = !!(flow_control & AQ_NIC_FC_RX);
+       link_options->pause_tx = !!(flow_control & AQ_NIC_FC_TX);
+}
+
 static void aq_a2_fw_upd_eee_rate_bits(struct aq_hw_s *self,
                                       struct link_options_s *link_options,
                                       u32 eee_speeds)
                link_options.link_up = 1U;
                aq_a2_fw_upd_eee_rate_bits(self, &link_options,
                                           self->aq_nic_cfg->eee_speeds);
+               aq_a2_fw_set_mpi_flow_control(self, &link_options);
                break;
        case MPI_DEINIT:
                link_options.link_up = 0U;
        return err;
 }
 
+static int aq_a2_fw_set_flow_control(struct aq_hw_s *self)
+{
+       struct link_options_s link_options;
+
+       hw_atl2_shared_buffer_get(self, link_options, link_options);
+
+       aq_a2_fw_set_mpi_flow_control(self, &link_options);
+
+       hw_atl2_shared_buffer_write(self, link_options, link_options);
+
+       return hw_atl2_shared_buffer_finish_ack(self);
+}
+
+static u32 aq_a2_fw_get_flow_control(struct aq_hw_s *self, u32 *fcmode)
+{
+       struct link_status_s link_status;
+
+       hw_atl2_shared_buffer_read(self, link_status, link_status);
+
+       *fcmode = ((link_status.pause_rx) ? AQ_NIC_FC_RX : 0) |
+                 ((link_status.pause_tx) ? AQ_NIC_FC_TX : 0);
+       return 0;
+}
+
 u32 hw_atl2_utils_get_fw_version(struct aq_hw_s *self)
 {
        struct version_s version;
        .update_stats       = aq_a2_fw_update_stats,
        .set_eee_rate       = aq_a2_fw_set_eee_rate,
        .get_eee_rate       = aq_a2_fw_get_eee_rate,
+       .set_flow_control   = aq_a2_fw_set_flow_control,
+       .get_flow_control   = aq_a2_fw_get_flow_control,
 };