return ret;
 }
 
-static bool is_valid_offset(struct rvu *rvu, struct cpt_rd_wr_reg_msg *req)
+static bool validate_and_update_reg_offset(struct rvu *rvu,
+                                          struct cpt_rd_wr_reg_msg *req,
+                                          u64 *reg_offset)
 {
        u64 offset = req->reg_offset;
        int blkaddr, num_lfs, lf;
                if (lf < 0)
                        return false;
 
+               /* Translate local LF's offset to global CPT LF's offset to
+                * access LFX register.
+                */
+               *reg_offset = (req->reg_offset & 0xFF000) + (lf << 3);
+
                return true;
        } else if (!(req->hdr.pcifunc & RVU_PFVF_FUNC_MASK)) {
                /* Registers that can be accessed from PF */
                                        struct cpt_rd_wr_reg_msg *rsp)
 {
        u64 offset = req->reg_offset;
-       int blkaddr, lf;
+       int blkaddr;
 
        blkaddr = validate_and_get_cpt_blkaddr(req->blkaddr);
        if (blkaddr < 0)
            !is_cpt_vf(rvu, req->hdr.pcifunc))
                return CPT_AF_ERR_ACCESS_DENIED;
 
-       if (!is_valid_offset(rvu, req))
+       if (!validate_and_update_reg_offset(rvu, req, &offset))
                return CPT_AF_ERR_ACCESS_DENIED;
 
-       /* Translate local LF used by VFs to global CPT LF */
-       lf = rvu_get_lf(rvu, &rvu->hw->block[blkaddr], req->hdr.pcifunc,
-                       (offset & 0xFFF) >> 3);
-
-       /* Translate local LF's offset to global CPT LF's offset */
-       offset &= 0xFF000;
-       offset += lf << 3;
-
-       rsp->reg_offset = offset;
+       rsp->reg_offset = req->reg_offset;
        rsp->ret_val = req->ret_val;
        rsp->is_write = req->is_write;