return true;
 }
 
-static int nix_interface_init(struct rvu *rvu, u16 pcifunc, int type, int nixlf)
+static int nix_interface_init(struct rvu *rvu, u16 pcifunc, int type, int nixlf,
+                             struct nix_lf_alloc_rsp *rsp)
 {
        struct rvu_pfvf *pfvf = rvu_get_pfvf(rvu, pcifunc);
+       struct rvu_hwinfo *hw = rvu->hw;
        struct mac_ops *mac_ops;
        int pkind, pf, vf, lbkid;
        u8 cgx_id, lmac_id;
                pfvf->tx_chan_base = pfvf->rx_chan_base;
                pfvf->rx_chan_cnt = 1;
                pfvf->tx_chan_cnt = 1;
+               rsp->tx_link = cgx_id * hw->lmac_per_cgx + lmac_id;
+
                cgx_set_pkind(rvu_cgx_pdata(cgx_id, rvu), lmac_id, pkind);
                rvu_npc_set_pkind(rvu, pkind, pfvf);
 
                                        rvu_nix_chan_lbk(rvu, lbkid, vf + 1);
                pfvf->rx_chan_cnt = 1;
                pfvf->tx_chan_cnt = 1;
+               rsp->tx_link = hw->cgx_links + lbkid;
                rvu_npc_set_pkind(rvu, NPC_RX_LBK_PKIND, pfvf);
                rvu_npc_install_promisc_entry(rvu, pcifunc, nixlf,
                                              pfvf->rx_chan_base,
        rvu_write64(rvu, blkaddr, NIX_AF_LFX_TX_PARSE_CFG(nixlf), cfg);
 
        intf = is_afvf(pcifunc) ? NIX_INTF_TYPE_LBK : NIX_INTF_TYPE_CGX;
-       err = nix_interface_init(rvu, pcifunc, intf, nixlf);
+       err = nix_interface_init(rvu, pcifunc, intf, nixlf, rsp);
        if (err)
                goto free_mem;
 
 
 }
 EXPORT_SYMBOL(otx2_get_mac_from_af);
 
-static int otx2_get_link(struct otx2_nic *pfvf)
-{
-       int link = 0;
-       u16 map;
-
-       /* cgx lmac link */
-       if (pfvf->hw.tx_chan_base >= CGX_CHAN_BASE) {
-               map = pfvf->hw.tx_chan_base & 0x7FF;
-               link = 4 * ((map >> 8) & 0xF) + ((map >> 4) & 0xF);
-       }
-       /* LBK channel */
-       if (pfvf->hw.tx_chan_base < SDP_CHAN_BASE) {
-               map = pfvf->hw.tx_chan_base & 0x7FF;
-               link = pfvf->hw.cgx_links | ((map >> 8) & 0xF);
-       }
-
-       return link;
-}
-
 int otx2_txschq_config(struct otx2_nic *pfvf, int lvl)
 {
        struct otx2_hw *hw = &pfvf->hw;
                req->regval[1] = TXSCH_TL1_DFLT_RR_PRIO << 24 | dwrr_val;
 
                req->num_regs++;
-               req->reg[2] = NIX_AF_TL3_TL2X_LINKX_CFG(schq,
-                                                       otx2_get_link(pfvf));
+               req->reg[2] = NIX_AF_TL3_TL2X_LINKX_CFG(schq, hw->tx_link);
                /* Enable this queue and backpressure */
                req->regval[2] = BIT_ULL(13) | BIT_ULL(12);
 
        pfvf->hw.lso_tsov6_idx = rsp->lso_tsov6_idx;
        pfvf->hw.cgx_links = rsp->cgx_links;
        pfvf->hw.lbk_links = rsp->lbk_links;
+       pfvf->hw.tx_link = rsp->tx_link;
 }
 EXPORT_SYMBOL(mbox_handler_nix_lf_alloc);