Lines Matching +full:data +full:- +full:mirror

1 // SPDX-License-Identifier: GPL-2.0-only
32 if (eng_grp->g->engs_num > OTX2_CPT_MAX_ENGINES) { in get_cores_bmap()
34 eng_grp->g->engs_num); in get_cores_bmap()
39 if (eng_grp->engs[i].type) { in get_cores_bmap()
41 eng_grp->engs[i].bmap, in get_cores_bmap()
42 eng_grp->g->engs_num); in get_cores_bmap()
43 bmap.size = eng_grp->g->engs_num; in get_cores_bmap()
50 eng_grp->idx); in get_cores_bmap()
61 if (eng_grp->ucode[1].type) in is_2nd_ucode_used()
70 strlcpy(ucode->filename, filename, OTX2_CPT_NAME_LENGTH); in set_ucode_filename()
124 struct pci_dev *pdev = cptpf->pdev; in get_ucode_type()
128 strlcpy(tmp_ver_str, ucode_hdr->ver_str, OTX2_CPT_UCODE_VER_STR_SZ); in get_ucode_type()
132 sprintf(ver_str_prefix, "ocpt-%02d", pdev->revision); in get_ucode_type()
134 return -EINVAL; in get_ucode_type()
136 nn = ucode_hdr->ver_num.nn; in get_ucode_type()
137 if (strnstr(tmp_ver_str, "se-", OTX2_CPT_UCODE_VER_STR_SZ) && in get_ucode_type()
141 if (strnstr(tmp_ver_str, "ie-", OTX2_CPT_UCODE_VER_STR_SZ) && in get_ucode_type()
152 return -EINVAL; in get_ucode_type()
160 return otx2_cpt_write_af_reg(&cptpf->afpf_mbox, cptpf->pdev, in __write_ucode_base()
173 ret = otx2_cpt_write_af_reg(&cptpf->afpf_mbox, cptpf->pdev, in cptx_set_ucode_base()
175 cptpf->pf_id << RVU_PFVF_PF_SHIFT, blkaddr); in cptx_set_ucode_base()
180 engs = &eng_grp->engs[i]; in cptx_set_ucode_base()
181 if (!engs->type) in cptx_set_ucode_base()
184 dma_addr = engs->ucode->dma; in cptx_set_ucode_base()
190 for_each_set_bit(bit, engs->bmap, eng_grp->g->engs_num) in cptx_set_ucode_base()
191 if (!eng_grp->g->eng_ref_cnt[bit]) { in cptx_set_ucode_base()
206 if (cptpf->has_cpt1) { in cpt_set_ucode_base()
225 ret = otx2_cpt_read_af_reg(&cptpf->afpf_mbox, cptpf->pdev, in cptx_detach_and_disable_cores()
230 if (reg & (1ull << eng_grp->idx)) { in cptx_detach_and_disable_cores()
231 eng_grp->g->eng_ref_cnt[i]--; in cptx_detach_and_disable_cores()
232 reg &= ~(1ull << eng_grp->idx); in cptx_detach_and_disable_cores()
234 ret = otx2_cpt_write_af_reg(&cptpf->afpf_mbox, in cptx_detach_and_disable_cores()
235 cptpf->pdev, in cptx_detach_and_disable_cores()
247 if (timeout-- < 0) in cptx_detach_and_disable_cores()
248 return -EBUSY; in cptx_detach_and_disable_cores()
251 ret = otx2_cpt_read_af_reg(&cptpf->afpf_mbox, in cptx_detach_and_disable_cores()
252 cptpf->pdev, in cptx_detach_and_disable_cores()
267 if (!eng_grp->g->eng_ref_cnt[i]) { in cptx_detach_and_disable_cores()
268 ret = otx2_cpt_write_af_reg(&cptpf->afpf_mbox, in cptx_detach_and_disable_cores()
269 cptpf->pdev, in cptx_detach_and_disable_cores()
287 bmap = get_cores_bmap(&cptpf->pdev->dev, eng_grp); in cpt_detach_and_disable_cores()
289 return -EINVAL; in cpt_detach_and_disable_cores()
291 if (cptpf->has_cpt1) { in cpt_detach_and_disable_cores()
311 ret = otx2_cpt_read_af_reg(&cptpf->afpf_mbox, cptpf->pdev, in cptx_attach_and_enable_cores()
316 if (!(reg & (1ull << eng_grp->idx))) { in cptx_attach_and_enable_cores()
317 eng_grp->g->eng_ref_cnt[i]++; in cptx_attach_and_enable_cores()
318 reg |= 1ull << eng_grp->idx; in cptx_attach_and_enable_cores()
320 ret = otx2_cpt_write_af_reg(&cptpf->afpf_mbox, in cptx_attach_and_enable_cores()
321 cptpf->pdev, in cptx_attach_and_enable_cores()
331 ret = otx2_cpt_add_write_af_reg(&cptpf->afpf_mbox, cptpf->pdev, in cptx_attach_and_enable_cores()
337 return otx2_cpt_send_af_reg_requests(&cptpf->afpf_mbox, cptpf->pdev); in cptx_attach_and_enable_cores()
347 bmap = get_cores_bmap(&cptpf->pdev->dev, eng_grp); in cpt_attach_and_enable_cores()
349 return -EINVAL; in cpt_attach_and_enable_cores()
351 if (cptpf->has_cpt1) { in cpt_attach_and_enable_cores()
370 return -ENOMEM; in load_fw()
372 ret = request_firmware(&uc_info->fw, filename, dev); in load_fw()
376 ucode_hdr = (struct otx2_cpt_ucode_hdr *)uc_info->fw->data; in load_fw()
381 ucode_size = ntohl(ucode_hdr->code_length) * 2; in load_fw()
384 ret = -EINVAL; in load_fw()
388 set_ucode_filename(&uc_info->ucode, filename); in load_fw()
389 memcpy(uc_info->ucode.ver_str, ucode_hdr->ver_str, in load_fw()
391 uc_info->ucode.ver_num = ucode_hdr->ver_num; in load_fw()
392 uc_info->ucode.type = ucode_type; in load_fw()
393 uc_info->ucode.size = ucode_size; in load_fw()
394 list_add_tail(&uc_info->list, &fw_info->ucodes); in load_fw()
399 release_firmware(uc_info->fw); in load_fw()
412 list_for_each_entry_safe(curr, temp, &fw_info->ucodes, list) { in cpt_ucode_release_fw()
413 list_del(&curr->list); in cpt_ucode_release_fw()
414 release_firmware(curr->fw); in cpt_ucode_release_fw()
424 list_for_each_entry(curr, &fw_info->ucodes, list) { in get_ucode()
425 if (!is_eng_type(curr->ucode.type, ucode_type)) in get_ucode()
437 list_for_each_entry(curr, &fw_info->ucodes, list) { in print_uc_info()
438 pr_debug("Ucode filename %s\n", curr->ucode.filename); in print_uc_info()
439 pr_debug("Ucode version string %s\n", curr->ucode.ver_str); in print_uc_info()
441 curr->ucode.ver_num.nn, curr->ucode.ver_num.xx, in print_uc_info()
442 curr->ucode.ver_num.yy, curr->ucode.ver_num.zz); in print_uc_info()
443 pr_debug("Ucode type (%d) %s\n", curr->ucode.type, in print_uc_info()
444 get_ucode_type_str(curr->ucode.type)); in print_uc_info()
445 pr_debug("Ucode size %d\n", curr->ucode.size); in print_uc_info()
446 pr_debug("Ucode ptr %p\n", curr->fw->data); in print_uc_info()
456 INIT_LIST_HEAD(&fw_info->ucodes); in cpt_ucode_load_fw()
464 pdev->revision, eng_type); in cpt_ucode_load_fw()
466 ret = load_fw(&pdev->dev, fw_info, filename); in cpt_ucode_load_fw()
485 if (!eng_grp->engs[i].type) in find_engines_by_type()
488 if (eng_grp->engs[i].type == eng_type) in find_engines_by_type()
489 return &eng_grp->engs[i]; in find_engines_by_type()
508 switch (engs->type) { in update_engines_avail_count()
510 avail->se_cnt += val; in update_engines_avail_count()
514 avail->ie_cnt += val; in update_engines_avail_count()
518 avail->ae_cnt += val; in update_engines_avail_count()
522 dev_err(dev, "Invalid engine type %d\n", engs->type); in update_engines_avail_count()
523 return -EINVAL; in update_engines_avail_count()
532 switch (engs->type) { in update_engines_offset()
534 engs->offset = 0; in update_engines_offset()
538 engs->offset = avail->max_se_cnt; in update_engines_offset()
542 engs->offset = avail->max_se_cnt + avail->max_ie_cnt; in update_engines_offset()
546 dev_err(dev, "Invalid engine type %d\n", engs->type); in update_engines_offset()
547 return -EINVAL; in update_engines_offset()
558 if (!grp->engs[i].type) in release_engines()
561 if (grp->engs[i].count > 0) { in release_engines()
562 ret = update_engines_avail_count(dev, &grp->g->avail, in release_engines()
563 &grp->engs[i], in release_engines()
564 grp->engs[i].count); in release_engines()
569 grp->engs[i].type = 0; in release_engines()
570 grp->engs[i].count = 0; in release_engines()
571 grp->engs[i].offset = 0; in release_engines()
572 grp->engs[i].ucode = NULL; in release_engines()
573 bitmap_zero(grp->engs[i].bmap, grp->g->engs_num); in release_engines()
586 if (!grp->engs[i].type) { in do_reserve_engines()
587 engs = &grp->engs[i]; in do_reserve_engines()
593 return -ENOMEM; in do_reserve_engines()
595 engs->type = req_engs->type; in do_reserve_engines()
596 engs->count = req_engs->count; in do_reserve_engines()
598 ret = update_engines_offset(dev, &grp->g->avail, engs); in do_reserve_engines()
602 if (engs->count > 0) { in do_reserve_engines()
603 ret = update_engines_avail_count(dev, &grp->g->avail, engs, in do_reserve_engines()
604 -engs->count); in do_reserve_engines()
618 switch (req_eng->type) { in check_engines_availability()
620 avail_cnt = grp->g->avail.se_cnt; in check_engines_availability()
624 avail_cnt = grp->g->avail.ie_cnt; in check_engines_availability()
628 avail_cnt = grp->g->avail.ae_cnt; in check_engines_availability()
632 dev_err(dev, "Invalid engine type %d\n", req_eng->type); in check_engines_availability()
633 return -EINVAL; in check_engines_availability()
636 if (avail_cnt < req_eng->count) { in check_engines_availability()
639 get_eng_type_str(req_eng->type), in check_engines_availability()
640 avail_cnt, req_eng->count); in check_engines_availability()
641 return -EBUSY; in check_engines_availability()
670 if (ucode->va) { in ucode_unload()
671 dma_free_coherent(dev, OTX2_CPT_UCODE_SZ, ucode->va, in ucode_unload()
672 ucode->dma); in ucode_unload()
673 ucode->va = NULL; in ucode_unload()
674 ucode->dma = 0; in ucode_unload()
675 ucode->size = 0; in ucode_unload()
678 memset(&ucode->ver_str, 0, OTX2_CPT_UCODE_VER_STR_SZ); in ucode_unload()
679 memset(&ucode->ver_num, 0, sizeof(struct otx2_cpt_ucode_ver_num)); in ucode_unload()
681 ucode->type = 0; in ucode_unload()
691 ucode->va = dma_alloc_coherent(dev, OTX2_CPT_UCODE_SZ, &ucode->dma, in copy_ucode_to_dma_mem()
693 if (!ucode->va) in copy_ucode_to_dma_mem()
694 return -ENOMEM; in copy_ucode_to_dma_mem()
696 memcpy(ucode->va, ucode_data + sizeof(struct otx2_cpt_ucode_hdr), in copy_ucode_to_dma_mem()
697 ucode->size); in copy_ucode_to_dma_mem()
699 /* Byte swap 64-bit */ in copy_ucode_to_dma_mem()
700 for (i = 0; i < (ucode->size / 8); i++) in copy_ucode_to_dma_mem()
701 cpu_to_be64s(&((u64 *)ucode->va)[i]); in copy_ucode_to_dma_mem()
702 /* Ucode needs 16-bit swap */ in copy_ucode_to_dma_mem()
703 for (i = 0; i < (ucode->size / 2); i++) in copy_ucode_to_dma_mem()
704 cpu_to_be16s(&((u16 *)ucode->va)[i]); in copy_ucode_to_dma_mem()
736 ucode_unload(dev, &eng_grp->ucode[0]); in disable_eng_grp()
737 ucode_unload(dev, &eng_grp->ucode[1]); in disable_eng_grp()
740 if (!eng_grp->engs[i].type) in disable_eng_grp()
743 eng_grp->engs[i].ucode = &eng_grp->ucode[0]; in disable_eng_grp()
756 src_grp->mirror.is_ena = false; in setup_eng_grp_mirroring()
757 src_grp->mirror.idx = 0; in setup_eng_grp_mirroring()
758 src_grp->mirror.ref_count++; in setup_eng_grp_mirroring()
761 dst_grp->mirror.is_ena = true; in setup_eng_grp_mirroring()
762 dst_grp->mirror.idx = src_grp->idx; in setup_eng_grp_mirroring()
763 dst_grp->mirror.ref_count = 0; in setup_eng_grp_mirroring()
770 if (!dst_grp->mirror.is_ena) in remove_eng_grp_mirroring()
773 src_grp = &dst_grp->g->grp[dst_grp->mirror.idx]; in remove_eng_grp_mirroring()
775 src_grp->mirror.ref_count--; in remove_eng_grp_mirroring()
776 dst_grp->mirror.is_ena = false; in remove_eng_grp_mirroring()
777 dst_grp->mirror.idx = 0; in remove_eng_grp_mirroring()
778 dst_grp->mirror.ref_count = 0; in remove_eng_grp_mirroring()
807 engs[i].count -= mirrored_engs->count; in update_requested_engs()
814 struct otx2_cpt_eng_grps *eng_grps = grp->g; in find_mirrored_eng_grp()
818 if (!eng_grps->grp[i].is_enabled) in find_mirrored_eng_grp()
820 if (eng_grps->grp[i].ucode[0].type && in find_mirrored_eng_grp()
821 eng_grps->grp[i].ucode[1].type) in find_mirrored_eng_grp()
823 if (grp->idx == i) in find_mirrored_eng_grp()
825 if (!strncasecmp(eng_grps->grp[i].ucode[0].ver_str, in find_mirrored_eng_grp()
826 grp->ucode[0].ver_str, in find_mirrored_eng_grp()
828 return &eng_grps->grp[i]; in find_mirrored_eng_grp()
840 if (!eng_grps->grp[i].is_enabled) in find_unused_eng_grp()
841 return &eng_grps->grp[i]; in find_unused_eng_grp()
855 engs = &eng_grp->engs[i]; in eng_grp_update_masks()
856 if (!engs->type) in eng_grp_update_masks()
858 if (engs->count <= 0) in eng_grp_update_masks()
861 switch (engs->type) { in eng_grp_update_masks()
863 max_cnt = eng_grp->g->avail.max_se_cnt; in eng_grp_update_masks()
867 max_cnt = eng_grp->g->avail.max_ie_cnt; in eng_grp_update_masks()
871 max_cnt = eng_grp->g->avail.max_ae_cnt; in eng_grp_update_masks()
875 dev_err(dev, "Invalid engine type %d\n", engs->type); in eng_grp_update_masks()
876 return -EINVAL; in eng_grp_update_masks()
879 cnt = engs->count; in eng_grp_update_masks()
880 WARN_ON(engs->offset + max_cnt > OTX2_CPT_MAX_ENGINES); in eng_grp_update_masks()
881 bitmap_zero(tmp_bmap.bits, eng_grp->g->engs_num); in eng_grp_update_masks()
882 for (j = engs->offset; j < engs->offset + max_cnt; j++) { in eng_grp_update_masks()
883 if (!eng_grp->g->eng_ref_cnt[j]) { in eng_grp_update_masks()
885 cnt--; in eng_grp_update_masks()
892 return -ENOSPC; in eng_grp_update_masks()
894 bitmap_copy(engs->bmap, tmp_bmap.bits, eng_grp->g->engs_num); in eng_grp_update_masks()
897 if (!eng_grp->mirror.is_ena) in eng_grp_update_masks()
901 engs = &eng_grp->engs[i]; in eng_grp_update_masks()
902 if (!engs->type) in eng_grp_update_masks()
906 &eng_grp->g->grp[eng_grp->mirror.idx], in eng_grp_update_masks()
907 engs->type); in eng_grp_update_masks()
908 WARN_ON(!mirrored_engs && engs->count <= 0); in eng_grp_update_masks()
912 bitmap_copy(tmp_bmap.bits, mirrored_engs->bmap, in eng_grp_update_masks()
913 eng_grp->g->engs_num); in eng_grp_update_masks()
914 if (engs->count < 0) { in eng_grp_update_masks()
915 bit = find_first_bit(mirrored_engs->bmap, in eng_grp_update_masks()
916 eng_grp->g->engs_num); in eng_grp_update_masks()
917 bitmap_clear(tmp_bmap.bits, bit, -engs->count); in eng_grp_update_masks()
919 bitmap_or(engs->bmap, engs->bmap, tmp_bmap.bits, in eng_grp_update_masks()
920 eng_grp->g->engs_num); in eng_grp_update_masks()
930 if (!eng_grp->is_enabled) in delete_engine_group()
933 if (eng_grp->mirror.ref_count) in delete_engine_group()
934 return -EINVAL; in delete_engine_group()
940 ret = disable_eng_grp(dev, eng_grp, eng_grp->g->obj); in delete_engine_group()
949 eng_grp->is_enabled = false; in delete_engine_group()
958 if (eng_grp->mirror.is_ena) in update_ucode_ptrs()
959 ucode = &eng_grp->g->grp[eng_grp->mirror.idx].ucode[0]; in update_ucode_ptrs()
961 ucode = &eng_grp->ucode[0]; in update_ucode_ptrs()
962 WARN_ON(!eng_grp->engs[0].type); in update_ucode_ptrs()
963 eng_grp->engs[0].ucode = ucode; in update_ucode_ptrs()
965 if (eng_grp->engs[1].type) { in update_ucode_ptrs()
967 eng_grp->engs[1].ucode = &eng_grp->ucode[1]; in update_ucode_ptrs()
969 eng_grp->engs[1].ucode = ucode; in update_ucode_ptrs()
987 return -ENOSPC; in create_engine_group()
992 eng_grp->ucode[i] = uc_info->ucode; in create_engine_group()
993 ret = copy_ucode_to_dma_mem(dev, &eng_grp->ucode[i], in create_engine_group()
994 uc_info->fw->data); in create_engine_group()
1024 ret = enable_eng_grp(eng_grp, eng_grps->obj); in create_engine_group()
1033 if (eng_grp->mirror.is_ena) in create_engine_group()
1034 ucode_unload(dev, &eng_grp->ucode[0]); in create_engine_group()
1036 eng_grp->is_enabled = true; in create_engine_group()
1044 eng_grp->idx, mirrored_eng_grp->ucode[0].ver_str, in create_engine_group()
1045 mirrored_eng_grp->idx); in create_engine_group()
1048 eng_grp->idx, eng_grp->ucode[0].ver_str); in create_engine_group()
1051 eng_grp->idx, eng_grp->ucode[1].ver_str); in create_engine_group()
1058 ucode_unload(dev, &eng_grp->ucode[0]); in create_engine_group()
1059 ucode_unload(dev, &eng_grp->ucode[1]); in create_engine_group()
1070 if (eng_grps->grp[i].mirror.is_ena) in delete_engine_grps()
1071 delete_engine_group(&pdev->dev, &eng_grps->grp[i]); in delete_engine_grps()
1075 delete_engine_group(&pdev->dev, &eng_grps->grp[i]); in delete_engine_grps()
1086 grp = &eng_grps->grp[i]; in otx2_cpt_get_eng_grp()
1087 if (!grp->is_enabled) in otx2_cpt_get_eng_grp()
1111 struct pci_dev *pdev = cptpf->pdev; in otx2_cpt_create_eng_grps()
1119 if (eng_grps->is_grps_created) in otx2_cpt_create_eng_grps()
1132 dev_err(&pdev->dev, "Unable to find firmware for SE\n"); in otx2_cpt_create_eng_grps()
1133 ret = -EINVAL; in otx2_cpt_create_eng_grps()
1137 engs[0].count = eng_grps->avail.max_se_cnt; in otx2_cpt_create_eng_grps()
1139 ret = create_engine_group(&pdev->dev, eng_grps, engs, 1, in otx2_cpt_create_eng_grps()
1152 dev_err(&pdev->dev, "Unable to find firmware for IE"); in otx2_cpt_create_eng_grps()
1153 ret = -EINVAL; in otx2_cpt_create_eng_grps()
1157 engs[0].count = eng_grps->avail.max_se_cnt; in otx2_cpt_create_eng_grps()
1159 engs[1].count = eng_grps->avail.max_ie_cnt; in otx2_cpt_create_eng_grps()
1161 ret = create_engine_group(&pdev->dev, eng_grps, engs, 2, in otx2_cpt_create_eng_grps()
1172 dev_err(&pdev->dev, "Unable to find firmware for AE"); in otx2_cpt_create_eng_grps()
1173 ret = -EINVAL; in otx2_cpt_create_eng_grps()
1177 engs[0].count = eng_grps->avail.max_ae_cnt; in otx2_cpt_create_eng_grps()
1179 ret = create_engine_group(&pdev->dev, eng_grps, engs, 1, in otx2_cpt_create_eng_grps()
1184 eng_grps->is_grps_created = true; in otx2_cpt_create_eng_grps()
1194 otx2_cpt_write_af_reg(&cptpf->afpf_mbox, pdev, CPT_AF_CTL, in otx2_cpt_create_eng_grps()
1198 * Set interval to periodically flush dirty data for the next in otx2_cpt_create_eng_grps()
1202 otx2_cpt_write_af_reg(&cptpf->afpf_mbox, pdev, CPT_AF_CTX_FLUSH_TIMER, in otx2_cpt_create_eng_grps()
1222 ret = otx2_cpt_add_write_af_reg(&cptpf->afpf_mbox, cptpf->pdev, in cptx_disable_all_cores()
1228 cptpf->eng_grps.eng_ref_cnt[i] = 0; in cptx_disable_all_cores()
1230 ret = otx2_cpt_send_af_reg_requests(&cptpf->afpf_mbox, cptpf->pdev); in cptx_disable_all_cores()
1238 if (timeout-- < 0) in cptx_disable_all_cores()
1239 return -EBUSY; in cptx_disable_all_cores()
1242 ret = otx2_cpt_read_af_reg(&cptpf->afpf_mbox, in cptx_disable_all_cores()
1243 cptpf->pdev, in cptx_disable_all_cores()
1258 ret = otx2_cpt_add_write_af_reg(&cptpf->afpf_mbox, cptpf->pdev, in cptx_disable_all_cores()
1264 return otx2_cpt_send_af_reg_requests(&cptpf->afpf_mbox, cptpf->pdev); in cptx_disable_all_cores()
1271 total_cores = cptpf->eng_grps.avail.max_se_cnt + in otx2_cpt_disable_all_cores()
1272 cptpf->eng_grps.avail.max_ie_cnt + in otx2_cpt_disable_all_cores()
1273 cptpf->eng_grps.avail.max_ae_cnt; in otx2_cpt_disable_all_cores()
1275 if (cptpf->has_cpt1) { in otx2_cpt_disable_all_cores()
1292 grp = &eng_grps->grp[i]; in otx2_cpt_cleanup_eng_grps()
1294 kfree(grp->engs[j].bmap); in otx2_cpt_cleanup_eng_grps()
1295 grp->engs[j].bmap = NULL; in otx2_cpt_cleanup_eng_grps()
1306 eng_grps->obj = pci_get_drvdata(pdev); in otx2_cpt_init_eng_grps()
1307 eng_grps->avail.se_cnt = eng_grps->avail.max_se_cnt; in otx2_cpt_init_eng_grps()
1308 eng_grps->avail.ie_cnt = eng_grps->avail.max_ie_cnt; in otx2_cpt_init_eng_grps()
1309 eng_grps->avail.ae_cnt = eng_grps->avail.max_ae_cnt; in otx2_cpt_init_eng_grps()
1311 eng_grps->engs_num = eng_grps->avail.max_se_cnt + in otx2_cpt_init_eng_grps()
1312 eng_grps->avail.max_ie_cnt + in otx2_cpt_init_eng_grps()
1313 eng_grps->avail.max_ae_cnt; in otx2_cpt_init_eng_grps()
1314 if (eng_grps->engs_num > OTX2_CPT_MAX_ENGINES) { in otx2_cpt_init_eng_grps()
1315 dev_err(&pdev->dev, in otx2_cpt_init_eng_grps()
1317 eng_grps->engs_num, OTX2_CPT_MAX_ENGINES); in otx2_cpt_init_eng_grps()
1318 ret = -EINVAL; in otx2_cpt_init_eng_grps()
1323 grp = &eng_grps->grp[i]; in otx2_cpt_init_eng_grps()
1324 grp->g = eng_grps; in otx2_cpt_init_eng_grps()
1325 grp->idx = i; in otx2_cpt_init_eng_grps()
1328 grp->engs[j].bmap = in otx2_cpt_init_eng_grps()
1329 kcalloc(BITS_TO_LONGS(eng_grps->engs_num), in otx2_cpt_init_eng_grps()
1331 if (!grp->engs[j].bmap) { in otx2_cpt_init_eng_grps()
1332 ret = -ENOMEM; in otx2_cpt_init_eng_grps()
1358 dev_err(&pdev->dev, "Unable to find firmware for AE\n"); in create_eng_caps_discovery_grps()
1359 ret = -EINVAL; in create_eng_caps_discovery_grps()
1365 ret = create_engine_group(&pdev->dev, eng_grps, engs, 1, in create_eng_caps_discovery_grps()
1372 dev_err(&pdev->dev, "Unable to find firmware for SE\n"); in create_eng_caps_discovery_grps()
1373 ret = -EINVAL; in create_eng_caps_discovery_grps()
1379 ret = create_engine_group(&pdev->dev, eng_grps, engs, 1, in create_eng_caps_discovery_grps()
1386 dev_err(&pdev->dev, "Unable to find firmware for IE\n"); in create_eng_caps_discovery_grps()
1387 ret = -EINVAL; in create_eng_caps_discovery_grps()
1393 ret = create_engine_group(&pdev->dev, eng_grps, engs, 1, in create_eng_caps_discovery_grps()
1413 struct otx2_cptlfs_info *lfs = &cptpf->lfs; in otx2_cpt_discover_eng_capabilities()
1428 if (cptpf->is_eng_caps_discovered) in otx2_cpt_discover_eng_capabilities()
1431 pdev = cptpf->pdev; in otx2_cpt_discover_eng_capabilities()
1436 ret = create_eng_caps_discovery_grps(pdev, &cptpf->eng_grps); in otx2_cpt_discover_eng_capabilities()
1440 lfs->pdev = pdev; in otx2_cpt_discover_eng_capabilities()
1441 lfs->reg_base = cptpf->reg_base; in otx2_cpt_discover_eng_capabilities()
1442 lfs->mbox = &cptpf->afpf_mbox; in otx2_cpt_discover_eng_capabilities()
1443 lfs->blkaddr = BLKADDR_CPT0; in otx2_cpt_discover_eng_capabilities()
1444 ret = otx2_cptlf_init(&cptpf->lfs, OTX2_CPT_ALL_ENG_GRPS_MASK, in otx2_cpt_discover_eng_capabilities()
1454 ret = -ENOMEM; in otx2_cpt_discover_eng_capabilities()
1457 rptr_baddr = dma_map_single(&pdev->dev, (void *)result, len, in otx2_cpt_discover_eng_capabilities()
1459 if (dma_mapping_error(&pdev->dev, rptr_baddr)) { in otx2_cpt_discover_eng_capabilities()
1460 dev_err(&pdev->dev, "DMA mapping failed\n"); in otx2_cpt_discover_eng_capabilities()
1461 ret = -EFAULT; in otx2_cpt_discover_eng_capabilities()
1473 /* 64-bit swap for microcode data reads, not needed for addresses */ in otx2_cpt_discover_eng_capabilities()
1480 result->s.compcode = OTX2_CPT_COMPLETION_CODE_INIT; in otx2_cpt_discover_eng_capabilities()
1481 iq_cmd.cptr.s.grp = otx2_cpt_get_eng_grp(&cptpf->eng_grps, in otx2_cpt_discover_eng_capabilities()
1484 lfs->ops->send_cmd(&inst, 1, &cptpf->lfs.lf[0]); in otx2_cpt_discover_eng_capabilities()
1486 while (lfs->ops->cpt_get_compcode(result) == in otx2_cpt_discover_eng_capabilities()
1490 cptpf->eng_caps[etype].u = be64_to_cpup(rptr); in otx2_cpt_discover_eng_capabilities()
1492 dma_unmap_single(&pdev->dev, rptr_baddr, len, DMA_BIDIRECTIONAL); in otx2_cpt_discover_eng_capabilities()
1493 cptpf->is_eng_caps_discovered = true; in otx2_cpt_discover_eng_capabilities()
1498 otx2_cptlf_shutdown(&cptpf->lfs); in otx2_cpt_discover_eng_capabilities()
1500 delete_engine_grps(pdev, &cptpf->eng_grps); in otx2_cpt_discover_eng_capabilities()