Lines Matching refs:eng_grp

58 					   struct otx_cpt_eng_grp_info *eng_grp)
64 if (eng_grp->g->engs_num > OTX_CPT_MAX_ENGINES) {
66 eng_grp->g->engs_num);
71 if (eng_grp->engs[i].type) {
73 eng_grp->engs[i].bmap,
74 eng_grp->g->engs_num);
75 bmap.size = eng_grp->g->engs_num;
82 eng_grp->idx);
175 static int cpt_set_ucode_base(struct otx_cpt_eng_grp_info *eng_grp, void *obj)
182 bmap = get_cores_bmap(&cpt->pdev->dev, eng_grp);
186 if (eng_grp->mirror.is_ena)
188 eng_grp->g->grp[eng_grp->mirror.idx].ucode[0].align_dma;
190 dma_addr = eng_grp->ucode[0].align_dma;
197 if (!eng_grp->g->eng_ref_cnt[i])
203 static int cpt_detach_and_disable_cores(struct otx_cpt_eng_grp_info *eng_grp,
212 bmap = get_cores_bmap(&cpt->pdev->dev, eng_grp);
217 reg = readq(cpt->reg_base + OTX_CPT_PF_GX_EN(eng_grp->idx));
220 eng_grp->g->eng_ref_cnt[i]--;
224 writeq(reg, cpt->reg_base + OTX_CPT_PF_GX_EN(eng_grp->idx));
244 if (!eng_grp->g->eng_ref_cnt[i])
251 static int cpt_attach_and_enable_cores(struct otx_cpt_eng_grp_info *eng_grp,
259 bmap = get_cores_bmap(&cpt->pdev->dev, eng_grp);
264 reg = readq(cpt->reg_base + OTX_CPT_PF_GX_EN(eng_grp->idx));
267 eng_grp->g->eng_ref_cnt[i]++;
271 writeq(reg, cpt->reg_base + OTX_CPT_PF_GX_EN(eng_grp->idx));
487 struct otx_cpt_eng_grp_info *eng_grp,
493 if (!eng_grp->engs[i].type)
496 if (eng_grp->engs[i].type == eng_type)
497 return &eng_grp->engs[i];
508 int otx_cpt_eng_grp_has_eng_type(struct otx_cpt_eng_grp_info *eng_grp,
513 engs = find_engines_by_type(eng_grp, eng_type);
519 static void print_ucode_info(struct otx_cpt_eng_grp_info *eng_grp,
522 if (eng_grp->mirror.is_ena) {
524 eng_grp->g->grp[eng_grp->mirror.idx].ucode[0].ver_str,
525 eng_grp->mirror.idx);
527 scnprintf(buf, size, "%s", eng_grp->ucode[0].ver_str);
531 static void print_engs_info(struct otx_cpt_eng_grp_info *eng_grp,
540 engs = &eng_grp->engs[i];
546 if (eng_grp->mirror.is_ena)
548 &eng_grp->g->grp[eng_grp->mirror.idx],
565 eng_grp->mirror.idx);
582 static void cpt_print_engines_mask(struct otx_cpt_eng_grp_info *eng_grp,
588 bmap = get_cores_bmap(dev, eng_grp);
812 struct otx_cpt_eng_grp_info *eng_grp;
815 eng_grp = container_of(attr, struct otx_cpt_eng_grp_info, info_attr);
816 mutex_lock(&eng_grp->g->lock);
818 print_engs_info(eng_grp, engs_info, 2*OTX_CPT_UCODE_NAME_LENGTH, -1);
819 print_ucode_info(eng_grp, ucode_info, 2*OTX_CPT_UCODE_NAME_LENGTH);
820 cpt_print_engines_mask(eng_grp, dev, engs_mask,
826 mutex_unlock(&eng_grp->g->lock);
831 struct otx_cpt_eng_grp_info *eng_grp)
833 eng_grp->info_attr.show = eng_grp_info_show;
834 eng_grp->info_attr.store = NULL;
835 eng_grp->info_attr.attr.name = eng_grp->sysfs_info_name;
836 eng_grp->info_attr.attr.mode = 0440;
837 sysfs_attr_init(&eng_grp->info_attr.attr);
838 return device_create_file(dev, &eng_grp->info_attr);
937 static int enable_eng_grp(struct otx_cpt_eng_grp_info *eng_grp,
942 ret = cpt_set_ucode_base(eng_grp, obj);
946 ret = cpt_attach_and_enable_cores(eng_grp, obj);
951 struct otx_cpt_eng_grp_info *eng_grp,
956 ret = cpt_detach_and_disable_cores(eng_grp, obj);
961 ucode_unload(dev, &eng_grp->ucode[0]);
964 if (!eng_grp->engs[i].type)
967 eng_grp->engs[i].ucode = &eng_grp->ucode[0];
970 ret = cpt_set_ucode_base(eng_grp, obj);
1069 struct otx_cpt_eng_grp_info *eng_grp)
1077 engs = &eng_grp->engs[i];
1085 max_cnt = eng_grp->g->avail.max_se_cnt;
1089 max_cnt = eng_grp->g->avail.max_ae_cnt;
1099 bitmap_zero(tmp_bmap.bits, eng_grp->g->engs_num);
1101 if (!eng_grp->g->eng_ref_cnt[j]) {
1112 bitmap_copy(engs->bmap, tmp_bmap.bits, eng_grp->g->engs_num);
1115 if (!eng_grp->mirror.is_ena)
1119 engs = &eng_grp->engs[i];
1124 &eng_grp->g->grp[eng_grp->mirror.idx],
1131 eng_grp->g->engs_num);
1134 eng_grp->g->engs_num);
1138 eng_grp->g->engs_num);
1144 struct otx_cpt_eng_grp_info *eng_grp)
1148 if (!eng_grp->is_enabled)
1151 if (eng_grp->mirror.ref_count) {
1153 eng_grp->idx);
1155 if (eng_grp->g->grp[i].mirror.is_ena &&
1156 eng_grp->g->grp[i].mirror.idx == eng_grp->idx)
1164 remove_eng_grp_mirroring(eng_grp);
1167 ret = disable_eng_grp(dev, eng_grp, eng_grp->g->obj);
1172 ret = release_engines(dev, eng_grp);
1176 device_remove_file(dev, &eng_grp->info_attr);
1177 eng_grp->is_enabled = false;
1183 struct otx_cpt_eng_grp_info *eng_grp,
1190 if (!otx_cpt_uc_supports_eng_type(&eng_grp->ucode[0],
1194 eng_grp->ucode[0].filename,
1202 static void update_ucode_ptrs(struct otx_cpt_eng_grp_info *eng_grp)
1206 if (eng_grp->mirror.is_ena)
1207 ucode = &eng_grp->g->grp[eng_grp->mirror.idx].ucode[0];
1209 ucode = &eng_grp->ucode[0];
1210 WARN_ON(!eng_grp->engs[0].type);
1211 eng_grp->engs[0].ucode = ucode;
1222 struct otx_cpt_eng_grp_info *eng_grp;
1237 eng_grp = find_unused_eng_grp(eng_grps);
1238 if (!eng_grp) {
1247 eng_grp->ucode[i] = tar_info->ucode;
1248 ret = copy_ucode_to_dma_mem(dev, &eng_grp->ucode[i],
1251 ret = ucode_load(dev, &eng_grp->ucode[i],
1258 ret = validate_1_ucode_scenario(dev, eng_grp, engs, engs_cnt);
1263 mirrored_eng_grp = find_mirrored_eng_grp(eng_grp);
1266 setup_eng_grp_mirroring(eng_grp, mirrored_eng_grp);
1276 ret = reserve_engines(dev, eng_grp, engs, engs_cnt);
1281 update_ucode_ptrs(eng_grp);
1284 ret = eng_grp_update_masks(dev, eng_grp);
1289 ret = create_sysfs_eng_grps_info(dev, eng_grp);
1294 ret = enable_eng_grp(eng_grp, eng_grps->obj);
1303 if (eng_grp->mirror.is_ena)
1304 ucode_unload(dev, &eng_grp->ucode[0]);
1306 eng_grp->is_enabled = true;
1307 if (eng_grp->mirror.is_ena)
1310 eng_grp->idx, mirrored_eng_grp->ucode[0].ver_str,
1314 eng_grp->idx, eng_grp->ucode[0].ver_str);
1319 release_engines(dev, eng_grp);
1321 ucode_unload(dev, &eng_grp->ucode[0]);