if (!is_lmac_valid(cgx, lmac_id))
                return;
-       if (enable) {
-               /* Enable receive pause frames */
-               cfg = cgx_read(cgx, lmac_id, CGXX_SMUX_RX_FRM_CTL);
-               cfg |= CGX_SMUX_RX_FRM_CTL_CTL_BCK;
-               cgx_write(cgx, lmac_id, CGXX_SMUX_RX_FRM_CTL, cfg);
-
-               cfg = cgx_read(cgx, lmac_id, CGXX_GMP_GMI_RXX_FRM_CTL);
-               cfg |= CGX_GMP_GMI_RXX_FRM_CTL_CTL_BCK;
-               cgx_write(cgx, lmac_id, CGXX_GMP_GMI_RXX_FRM_CTL, cfg);
-
-               /* Enable pause frames transmission */
-               cfg = cgx_read(cgx, lmac_id, CGXX_SMUX_TX_CTL);
-               cfg |= CGX_SMUX_TX_CTL_L2P_BP_CONV;
-               cgx_write(cgx, lmac_id, CGXX_SMUX_TX_CTL, cfg);
 
+       if (enable) {
                /* Set pause time and interval */
                cgx_write(cgx, lmac_id, CGXX_SMUX_TX_PAUSE_PKT_TIME,
                          DEFAULT_PAUSE_TIME);
                cfg &= ~0xFFFFULL;
                cgx_write(cgx, lmac_id, CGXX_GMP_GMI_TX_PAUSE_PKT_INTERVAL,
                          cfg | (DEFAULT_PAUSE_TIME / 2));
-       } else {
-               /* ALL pause frames received are completely ignored */
-               cfg = cgx_read(cgx, lmac_id, CGXX_SMUX_RX_FRM_CTL);
-               cfg &= ~CGX_SMUX_RX_FRM_CTL_CTL_BCK;
-               cgx_write(cgx, lmac_id, CGXX_SMUX_RX_FRM_CTL, cfg);
+       }
 
-               cfg = cgx_read(cgx, lmac_id, CGXX_GMP_GMI_RXX_FRM_CTL);
-               cfg &= ~CGX_GMP_GMI_RXX_FRM_CTL_CTL_BCK;
-               cgx_write(cgx, lmac_id, CGXX_GMP_GMI_RXX_FRM_CTL, cfg);
+       /* ALL pause frames received are completely ignored */
+       cfg = cgx_read(cgx, lmac_id, CGXX_SMUX_RX_FRM_CTL);
+       cfg &= ~CGX_SMUX_RX_FRM_CTL_CTL_BCK;
+       cgx_write(cgx, lmac_id, CGXX_SMUX_RX_FRM_CTL, cfg);
 
-               /* Disable pause frames transmission */
-               cfg = cgx_read(cgx, lmac_id, CGXX_SMUX_TX_CTL);
-               cfg &= ~CGX_SMUX_TX_CTL_L2P_BP_CONV;
-               cgx_write(cgx, lmac_id, CGXX_SMUX_TX_CTL, cfg);
-       }
+       cfg = cgx_read(cgx, lmac_id, CGXX_GMP_GMI_RXX_FRM_CTL);
+       cfg &= ~CGX_GMP_GMI_RXX_FRM_CTL_CTL_BCK;
+       cgx_write(cgx, lmac_id, CGXX_GMP_GMI_RXX_FRM_CTL, cfg);
+
+       /* Disable pause frames transmission */
+       cfg = cgx_read(cgx, lmac_id, CGXX_SMUX_TX_CTL);
+       cfg &= ~CGX_SMUX_TX_CTL_L2P_BP_CONV;
+       cgx_write(cgx, lmac_id, CGXX_SMUX_TX_CTL, cfg);
 }
 
 void cgx_lmac_ptp_config(void *cgxd, int lmac_id, bool enable)
 
        u64 cfg;
 
        if (enable) {
-               /* Enable 802.3 pause frame mode */
-               cfg = rpm_read(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG);
-               cfg &= ~RPMX_MTI_MAC100X_COMMAND_CONFIG_PFC_MODE;
-               rpm_write(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG, cfg);
-
-               /* Enable receive pause frames */
-               cfg = rpm_read(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG);
-               cfg &= ~RPMX_MTI_MAC100X_COMMAND_CONFIG_RX_P_DISABLE;
-               rpm_write(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG, cfg);
-
-               /* Enable forward pause to TX block */
-               cfg = rpm_read(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG);
-               cfg &= ~RPMX_MTI_MAC100X_COMMAND_CONFIG_PAUSE_IGNORE;
-               rpm_write(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG, cfg);
-
-               /* Enable pause frames transmission */
-               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);
-
                /* Set pause time and interval */
                cfg = rpm_read(rpm, lmac_id,
                               RPMX_MTI_MAC100X_CL01_PAUSE_QUANTA);
                cfg &= ~0xFFFFULL;
                rpm_write(rpm, lmac_id, RPMX_MTI_MAC100X_CL01_QUANTA_THRESH,
                          cfg | (RPM_DEFAULT_PAUSE_TIME / 2));
+       }
 
-       } else {
-               /* ALL pause frames received are completely ignored */
-               cfg = rpm_read(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG);
-               cfg |= RPMX_MTI_MAC100X_COMMAND_CONFIG_RX_P_DISABLE;
-               rpm_write(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG, cfg);
+       /* ALL pause frames received are completely ignored */
+       cfg = rpm_read(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG);
+       cfg |= RPMX_MTI_MAC100X_COMMAND_CONFIG_RX_P_DISABLE;
+       rpm_write(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG, cfg);
 
-               /* Disable forward pause to TX block */
-               cfg = rpm_read(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG);
-               cfg |= RPMX_MTI_MAC100X_COMMAND_CONFIG_PAUSE_IGNORE;
-               rpm_write(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG, cfg);
+       /* Disable forward pause to TX block */
+       cfg = rpm_read(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG);
+       cfg |= RPMX_MTI_MAC100X_COMMAND_CONFIG_PAUSE_IGNORE;
+       rpm_write(rpm, lmac_id, RPMX_MTI_MAC100X_COMMAND_CONFIG, cfg);
 
-               /* Disable pause frames transmission */
-               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 pause frames transmission */
+       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);
 }
 
 int rpm_get_rx_stats(void *rpmd, int lmac_id, int idx, u64 *rx_stat)
 
        struct rvu_hwinfo *hw = rvu->hw;
        struct sdp_node_info *sdp_info;
        int pkind, pf, vf, lbkid, vfid;
-       struct mac_ops *mac_ops;
        u8 cgx_id, lmac_id;
        bool from_vf;
        int err;
                cgx_set_pkind(rvu_cgx_pdata(cgx_id, rvu), lmac_id, pkind);
                rvu_npc_set_pkind(rvu, pkind, pfvf);
 
-               mac_ops = get_mac_ops(rvu_cgx_pdata(cgx_id, rvu));
-
-               /* By default we enable pause frames */
-               if ((pcifunc & RVU_PFVF_FUNC_MASK) == 0)
-                       mac_ops->mac_enadis_pause_frm(rvu_cgx_pdata(cgx_id,
-                                                                   rvu),
-                                                     lmac_id, true, true);
                break;
        case NIX_INTF_TYPE_LBK:
                vf = (pcifunc & RVU_PFVF_FUNC_MASK) - 1;
 
        mutex_unlock(&pfvf->mbox.lock);
        return err;
 }
+EXPORT_SYMBOL(otx2_config_pause_frm);
 
 int otx2_set_flowkey_cfg(struct otx2_nic *pfvf)
 {
 
        if (pf->linfo.link_up && !(pf->pcifunc & RVU_PFVF_FUNC_MASK))
                otx2_handle_link_event(pf);
 
-       /* Restore pause frame settings */
-       otx2_config_pause_frm(pf);
-
        /* Install DMAC Filters */
        if (pf->flags & OTX2_FLAG_DMACFLTR_SUPPORT)
                otx2_dmacflt_reinstall_flows(pf);
        /* Enable link notifications */
        otx2_cgx_config_linkevents(pf, true);
 
-       /* Enable pause frames by default */
-       pf->flags |= OTX2_FLAG_RX_PAUSE_ENABLED;
-       pf->flags |= OTX2_FLAG_TX_PAUSE_ENABLED;
-
        return 0;
 
 err_pf_sriov_init:
        if (pf->flags & OTX2_FLAG_RX_TSTAMP_ENABLED)
                otx2_config_hw_rx_tstamp(pf, false);
 
+       /* Disable 802.3x pause frames */
+       if (pf->flags & OTX2_FLAG_RX_PAUSE_ENABLED ||
+           (pf->flags & OTX2_FLAG_TX_PAUSE_ENABLED)) {
+               pf->flags &= ~OTX2_FLAG_RX_PAUSE_ENABLED;
+               pf->flags &= ~OTX2_FLAG_TX_PAUSE_ENABLED;
+               otx2_config_pause_frm(pf);
+       }
+
        cancel_work_sync(&pf->reset_task);
        /* Disable link notifications */
        otx2_cgx_config_linkevents(pf, false);
 
        if (err)
                goto err_unreg_netdev;
 
-       /* Enable pause frames by default */
-       vf->flags |= OTX2_FLAG_RX_PAUSE_ENABLED;
-       vf->flags |= OTX2_FLAG_TX_PAUSE_ENABLED;
-
        return 0;
 
 err_unreg_netdev:
 
        vf = netdev_priv(netdev);
 
+       /* Disable 802.3x pause frames */
+       if (vf->flags & OTX2_FLAG_RX_PAUSE_ENABLED ||
+           (vf->flags & OTX2_FLAG_TX_PAUSE_ENABLED)) {
+               vf->flags &= ~OTX2_FLAG_RX_PAUSE_ENABLED;
+               vf->flags &= ~OTX2_FLAG_TX_PAUSE_ENABLED;
+               otx2_config_pause_frm(vf);
+       }
+
        cancel_work_sync(&vf->reset_task);
        otx2_unregister_dl(vf);
        unregister_netdev(netdev);