}
 
 static int __write_ucode_base(struct otx2_cptpf_dev *cptpf, int eng,
-                             dma_addr_t dma_addr)
+                             dma_addr_t dma_addr, int blkaddr)
 {
        return otx2_cpt_write_af_reg(&cptpf->afpf_mbox, cptpf->pdev,
                                     CPT_AF_EXEX_UCODE_BASE(eng),
-                                    (u64)dma_addr);
+                                    (u64)dma_addr, blkaddr);
 }
 
-static int cpt_set_ucode_base(struct otx2_cpt_eng_grp_info *eng_grp, void *obj)
+static int cptx_set_ucode_base(struct otx2_cpt_eng_grp_info *eng_grp,
+                              struct otx2_cptpf_dev *cptpf, int blkaddr)
 {
-       struct otx2_cptpf_dev *cptpf = obj;
        struct otx2_cpt_engs_rsvd *engs;
        dma_addr_t dma_addr;
        int i, bit, ret;
        /* Set PF number for microcode fetches */
        ret = otx2_cpt_write_af_reg(&cptpf->afpf_mbox, cptpf->pdev,
                                    CPT_AF_PF_FUNC,
-                                   cptpf->pf_id << RVU_PFVF_PF_SHIFT);
+                                   cptpf->pf_id << RVU_PFVF_PF_SHIFT, blkaddr);
        if (ret)
                return ret;
 
                 */
                for_each_set_bit(bit, engs->bmap, eng_grp->g->engs_num)
                        if (!eng_grp->g->eng_ref_cnt[bit]) {
-                               ret = __write_ucode_base(cptpf, bit, dma_addr);
+                               ret = __write_ucode_base(cptpf, bit, dma_addr,
+                                                        blkaddr);
                                if (ret)
                                        return ret;
                        }
        return 0;
 }
 
-static int cpt_detach_and_disable_cores(struct otx2_cpt_eng_grp_info *eng_grp,
-                                       void *obj)
+static int cpt_set_ucode_base(struct otx2_cpt_eng_grp_info *eng_grp, void *obj)
 {
        struct otx2_cptpf_dev *cptpf = obj;
-       struct otx2_cpt_bitmap bmap;
+       int ret;
+
+       if (cptpf->has_cpt1) {
+               ret = cptx_set_ucode_base(eng_grp, cptpf, BLKADDR_CPT1);
+               if (ret)
+                       return ret;
+       }
+       return cptx_set_ucode_base(eng_grp, cptpf, BLKADDR_CPT0);
+}
+
+static int cptx_detach_and_disable_cores(struct otx2_cpt_eng_grp_info *eng_grp,
+                                        struct otx2_cptpf_dev *cptpf,
+                                        struct otx2_cpt_bitmap bmap,
+                                        int blkaddr)
+{
        int i, timeout = 10;
        int busy, ret;
        u64 reg = 0;
 
-       bmap = get_cores_bmap(&cptpf->pdev->dev, eng_grp);
-       if (!bmap.size)
-               return -EINVAL;
-
        /* Detach the cores from group */
        for_each_set_bit(i, bmap.bits, bmap.size) {
                ret = otx2_cpt_read_af_reg(&cptpf->afpf_mbox, cptpf->pdev,
-                                          CPT_AF_EXEX_CTL2(i), ®);
+                                          CPT_AF_EXEX_CTL2(i), ®, blkaddr);
                if (ret)
                        return ret;
 
 
                        ret = otx2_cpt_write_af_reg(&cptpf->afpf_mbox,
                                                    cptpf->pdev,
-                                                   CPT_AF_EXEX_CTL2(i), reg);
+                                                   CPT_AF_EXEX_CTL2(i), reg,
+                                                   blkaddr);
                        if (ret)
                                return ret;
                }
                for_each_set_bit(i, bmap.bits, bmap.size) {
                        ret = otx2_cpt_read_af_reg(&cptpf->afpf_mbox,
                                                   cptpf->pdev,
-                                                  CPT_AF_EXEX_STS(i), ®);
+                                                  CPT_AF_EXEX_STS(i), ®,
+                                                  blkaddr);
                        if (ret)
                                return ret;
 
                if (!eng_grp->g->eng_ref_cnt[i]) {
                        ret = otx2_cpt_write_af_reg(&cptpf->afpf_mbox,
                                                    cptpf->pdev,
-                                                   CPT_AF_EXEX_CTL(i), 0x0);
+                                                   CPT_AF_EXEX_CTL(i), 0x0,
+                                                   blkaddr);
                        if (ret)
                                return ret;
                }
        return 0;
 }
 
-static int cpt_attach_and_enable_cores(struct otx2_cpt_eng_grp_info *eng_grp,
-                                      void *obj)
+static int cpt_detach_and_disable_cores(struct otx2_cpt_eng_grp_info *eng_grp,
+                                       void *obj)
 {
        struct otx2_cptpf_dev *cptpf = obj;
        struct otx2_cpt_bitmap bmap;
-       u64 reg = 0;
-       int i, ret;
+       int ret;
 
        bmap = get_cores_bmap(&cptpf->pdev->dev, eng_grp);
        if (!bmap.size)
                return -EINVAL;
 
+       if (cptpf->has_cpt1) {
+               ret = cptx_detach_and_disable_cores(eng_grp, cptpf, bmap,
+                                                   BLKADDR_CPT1);
+               if (ret)
+                       return ret;
+       }
+       return cptx_detach_and_disable_cores(eng_grp, cptpf, bmap,
+                                            BLKADDR_CPT0);
+}
+
+static int cptx_attach_and_enable_cores(struct otx2_cpt_eng_grp_info *eng_grp,
+                                       struct otx2_cptpf_dev *cptpf,
+                                       struct otx2_cpt_bitmap bmap,
+                                       int blkaddr)
+{
+       u64 reg = 0;
+       int i, ret;
+
        /* Attach the cores to the group */
        for_each_set_bit(i, bmap.bits, bmap.size) {
                ret = otx2_cpt_read_af_reg(&cptpf->afpf_mbox, cptpf->pdev,
-                                          CPT_AF_EXEX_CTL2(i), ®);
+                                          CPT_AF_EXEX_CTL2(i), ®, blkaddr);
                if (ret)
                        return ret;
 
 
                        ret = otx2_cpt_write_af_reg(&cptpf->afpf_mbox,
                                                    cptpf->pdev,
-                                                   CPT_AF_EXEX_CTL2(i), reg);
+                                                   CPT_AF_EXEX_CTL2(i), reg,
+                                                   blkaddr);
                        if (ret)
                                return ret;
                }
 
        /* Enable the cores */
        for_each_set_bit(i, bmap.bits, bmap.size) {
-               ret = otx2_cpt_add_write_af_reg(&cptpf->afpf_mbox,
-                                               cptpf->pdev,
-                                               CPT_AF_EXEX_CTL(i), 0x1);
+               ret = otx2_cpt_add_write_af_reg(&cptpf->afpf_mbox, cptpf->pdev,
+                                               CPT_AF_EXEX_CTL(i), 0x1,
+                                               blkaddr);
                if (ret)
                        return ret;
        }
-       ret = otx2_cpt_send_af_reg_requests(&cptpf->afpf_mbox, cptpf->pdev);
+       return otx2_cpt_send_af_reg_requests(&cptpf->afpf_mbox, cptpf->pdev);
+}
 
-       return ret;
+static int cpt_attach_and_enable_cores(struct otx2_cpt_eng_grp_info *eng_grp,
+                                      void *obj)
+{
+       struct otx2_cptpf_dev *cptpf = obj;
+       struct otx2_cpt_bitmap bmap;
+       int ret;
+
+       bmap = get_cores_bmap(&cptpf->pdev->dev, eng_grp);
+       if (!bmap.size)
+               return -EINVAL;
+
+       if (cptpf->has_cpt1) {
+               ret = cptx_attach_and_enable_cores(eng_grp, cptpf, bmap,
+                                                  BLKADDR_CPT1);
+               if (ret)
+                       return ret;
+       }
+       return cptx_attach_and_enable_cores(eng_grp, cptpf, bmap, BLKADDR_CPT0);
 }
 
 static int load_fw(struct device *dev, struct fw_info_t *fw_info,
        return ret;
 }
 
-int otx2_cpt_disable_all_cores(struct otx2_cptpf_dev *cptpf)
+static int cptx_disable_all_cores(struct otx2_cptpf_dev *cptpf, int total_cores,
+                                 int blkaddr)
 {
-       int i, ret, busy, total_cores;
-       int timeout = 10;
-       u64 reg = 0;
-
-       total_cores = cptpf->eng_grps.avail.max_se_cnt +
-                     cptpf->eng_grps.avail.max_ie_cnt +
-                     cptpf->eng_grps.avail.max_ae_cnt;
+       int timeout = 10, ret;
+       int i, busy;
+       u64 reg;
 
        /* Disengage the cores from groups */
        for (i = 0; i < total_cores; i++) {
                ret = otx2_cpt_add_write_af_reg(&cptpf->afpf_mbox, cptpf->pdev,
-                                               CPT_AF_EXEX_CTL2(i), 0x0);
+                                               CPT_AF_EXEX_CTL2(i), 0x0,
+                                               blkaddr);
                if (ret)
                        return ret;
 
                for (i = 0; i < total_cores; i++) {
                        ret = otx2_cpt_read_af_reg(&cptpf->afpf_mbox,
                                                   cptpf->pdev,
-                                                  CPT_AF_EXEX_STS(i), ®);
+                                                  CPT_AF_EXEX_STS(i), ®,
+                                                  blkaddr);
                        if (ret)
                                return ret;
 
        /* Disable the cores */
        for (i = 0; i < total_cores; i++) {
                ret = otx2_cpt_add_write_af_reg(&cptpf->afpf_mbox, cptpf->pdev,
-                                               CPT_AF_EXEX_CTL(i), 0x0);
+                                               CPT_AF_EXEX_CTL(i), 0x0,
+                                               blkaddr);
                if (ret)
                        return ret;
        }
        return otx2_cpt_send_af_reg_requests(&cptpf->afpf_mbox, cptpf->pdev);
 }
 
+int otx2_cpt_disable_all_cores(struct otx2_cptpf_dev *cptpf)
+{
+       int total_cores, ret;
+
+       total_cores = cptpf->eng_grps.avail.max_se_cnt +
+                     cptpf->eng_grps.avail.max_ie_cnt +
+                     cptpf->eng_grps.avail.max_ae_cnt;
+
+       if (cptpf->has_cpt1) {
+               ret = cptx_disable_all_cores(cptpf, total_cores, BLKADDR_CPT1);
+               if (ret)
+                       return ret;
+       }
+       return cptx_disable_all_cores(cptpf, total_cores, BLKADDR_CPT0);
+}
+
 void otx2_cpt_cleanup_eng_grps(struct pci_dev *pdev,
                               struct otx2_cpt_eng_grps *eng_grps)
 {
        lfs->pdev = pdev;
        lfs->reg_base = cptpf->reg_base;
        lfs->mbox = &cptpf->afpf_mbox;
+       lfs->blkaddr = BLKADDR_CPT0;
        ret = otx2_cptlf_init(&cptpf->lfs, OTX2_CPT_ALL_ENG_GRPS_MASK,
                              OTX2_CPT_QUEUE_HI_PRIO, 1);
        if (ret)