cfg |= CGX_CMR_RX_OVR_BP_EN(lmac_id);
        cfg &= ~CGX_CMR_RX_OVR_BP_BP(lmac_id);
        cgx_write(cgx, 0, CGXX_CMR_RX_OVR_BP, cfg);
+
+       /* Disable all PFC classes by default */
+       cfg = cgx_read(cgx, lmac_id, CGXX_SMUX_CBFC_CTL);
+       cfg = FIELD_SET(CGX_PFC_CLASS_MASK, 0, cfg);
+       cgx_write(cgx, lmac_id, CGXX_SMUX_CBFC_CTL, cfg);
 }
 
 int verify_lmac_fc_cfg(void *cgxd, int lmac_id, u8 tx_pause, u8 rx_pause,
                return 0;
 
        cfg = cgx_read(cgx, lmac_id, CGXX_SMUX_CBFC_CTL);
+       pfc_en |= FIELD_GET(CGX_PFC_CLASS_MASK, cfg);
 
        if (rx_pause) {
                cfg |= (CGXX_SMUX_CBFC_CTL_RX_EN |
                        CGXX_SMUX_CBFC_CTL_DRP_EN);
        }
 
-       if (tx_pause)
+       if (tx_pause) {
                cfg |= CGXX_SMUX_CBFC_CTL_TX_EN;
-       else
+               cfg = FIELD_SET(CGX_PFC_CLASS_MASK, pfc_en, cfg);
+       } else {
                cfg &= ~CGXX_SMUX_CBFC_CTL_TX_EN;
-
-       cfg = FIELD_SET(CGX_PFC_CLASS_MASK, pfc_en, cfg);
+               cfg = FIELD_SET(CGX_PFC_CLASS_MASK, 0, cfg);
+       }
 
        cgx_write(cgx, lmac_id, CGXX_SMUX_CBFC_CTL, cfg);
 
 
        cfg = rpm_read(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG);
        cfg |= RPMX_MTI_MAC100X_COMMAND_CONFIG_TX_P_DISABLE;
        rpm_write(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG, cfg);
+
+       /* Disable all PFC classes */
+       cfg = rpm_read(rpm, lmac_id, RPMX_CMRX_PRT_CBFC_CTL);
+       cfg = FIELD_SET(RPM_PFC_CLASS_MASK, 0, cfg);
+       rpm_write(rpm, lmac_id, RPMX_CMRX_PRT_CBFC_CTL, cfg);
 }
 
 int rpm_get_rx_stats(void *rpmd, int lmac_id, int idx, u64 *rx_stat)
 int rpm_lmac_pfc_config(void *rpmd, int lmac_id, u8 tx_pause, u8 rx_pause, u16 pfc_en)
 {
        rpm_t *rpm = rpmd;
-       u64 cfg;
+       u64 cfg, class_en;
 
        if (!is_lmac_valid(rpm, lmac_id))
                return -ENODEV;
 
-       /* reset PFC class quanta and threshold */
-       rpm_cfg_pfc_quanta_thresh(rpm, lmac_id, 0xffff, false);
-
        cfg = rpm_read(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG);
+       class_en = rpm_read(rpm, lmac_id, RPMX_CMRX_PRT_CBFC_CTL);
+       pfc_en |= FIELD_GET(RPM_PFC_CLASS_MASK, class_en);
 
        if (rx_pause) {
                cfg &= ~(RPMX_MTI_MAC100X_COMMAND_CONFIG_RX_P_DISABLE |
        if (tx_pause) {
                rpm_cfg_pfc_quanta_thresh(rpm, lmac_id, pfc_en, true);
                cfg &= ~RPMX_MTI_MAC100X_COMMAND_CONFIG_TX_P_DISABLE;
+               class_en = FIELD_SET(RPM_PFC_CLASS_MASK, pfc_en, class_en);
        } else {
                rpm_cfg_pfc_quanta_thresh(rpm, lmac_id, 0xfff, false);
                cfg |= RPMX_MTI_MAC100X_COMMAND_CONFIG_TX_P_DISABLE;
+               class_en = FIELD_SET(RPM_PFC_CLASS_MASK, 0, class_en);
        }
 
        if (!rx_pause && !tx_pause)
 
        rpm_write(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG, cfg);
 
-       cfg = rpm_read(rpm, lmac_id, RPMX_CMRX_PRT_CBFC_CTL);
-       cfg = FIELD_SET(RPM_PFC_CLASS_MASK, pfc_en, cfg);
-       rpm_write(rpm, lmac_id, RPMX_CMRX_PRT_CBFC_CTL, cfg);
+       rpm_write(rpm, lmac_id, RPMX_CMRX_PRT_CBFC_CTL, class_en);
 
        return 0;
 }
 
 #define RPMX_MTI_MAC100X_CL1011_QUANTA_THRESH          0x8130
 #define RPMX_MTI_MAC100X_CL1213_QUANTA_THRESH          0x8138
 #define RPMX_MTI_MAC100X_CL1415_QUANTA_THRESH          0x8140
-#define RPM_DEFAULT_PAUSE_TIME                 0xFFFF
 #define RPMX_CMR_RX_OVR_BP             0x4120
 #define RPMX_CMR_RX_OVR_BP_EN(x)       BIT_ULL((x) + 8)
 #define RPMX_CMR_RX_OVR_BP_BP(x)       BIT_ULL((x) + 4)
 #define RPMX_MTI_MAC100X_COMMAND_CONFIG_PAUSE_FWD              BIT_ULL(7)
 #define RPMX_MTI_MAC100X_CL01_PAUSE_QUANTA              0x80A8
 #define RPMX_MTI_MAC100X_CL89_PAUSE_QUANTA             0x8108
-#define RPM_DEFAULT_PAUSE_TIME                          0xFFFF
+#define RPM_DEFAULT_PAUSE_TIME                          0x7FF
 
 /* Function Declarations */
 int rpm_get_nr_lmacs(void *rpmd);