Lines Matching refs:mcode
123 static int cpt_load_microcode(struct cpt_device *cpt, struct microcode *mcode)
129 if (!mcode || !mcode->code) {
130 dev_err(dev, "Either the mcode is null or data is NULL\n");
134 if (mcode->code_size == 0) {
142 if (mcode->is_ae) {
152 if (mcode->core_mask & (1 << shift)) {
155 (u64)mcode->phys_base);
161 static int do_cpt_init(struct cpt_device *cpt, struct microcode *mcode)
170 /* Calculate mcode group and coremasks */
171 if (mcode->is_ae) {
172 if (mcode->num_cores > cpt->max_ae_cores) {
183 mcode->group = cpt->next_group;
185 mcode->core_mask = GENMASK(mcode->num_cores, 0);
186 cpt_disable_cores(cpt, mcode->core_mask, AE_TYPES,
187 mcode->group);
189 ret = cpt_load_microcode(cpt, mcode);
192 mcode->version);
196 /* Configure group mask for the mcode */
197 cpt_configure_group(cpt, mcode->group, mcode->core_mask,
200 cpt_enable_cores(cpt, mcode->core_mask, AE_TYPES);
202 if (mcode->num_cores > cpt->max_se_cores) {
212 mcode->group = cpt->next_group;
214 mcode->core_mask = GENMASK(mcode->num_cores, 0);
215 cpt_disable_cores(cpt, mcode->core_mask, SE_TYPES,
216 mcode->group);
218 ret = cpt_load_microcode(cpt, mcode);
221 mcode->version);
225 /* Configure group mask for the mcode */
226 cpt_configure_group(cpt, mcode->group, mcode->core_mask,
229 cpt_enable_cores(cpt, mcode->core_mask, SE_TYPES);
258 struct microcode *mcode;
266 mcode = &cpt->mcode[cpt->next_mc_idx];
267 memcpy(mcode->version, (u8 *)fw_entry->data, CPT_UCODE_VERSION_SZ);
273 mcode->code_size = code_length * 2;
275 mcode->is_ae = is_ae;
276 mcode->core_mask = 0ULL;
277 mcode->num_cores = is_ae ? 6 : 10;
280 mcode->code = dma_alloc_coherent(&cpt->pdev->dev, mcode->code_size,
281 &mcode->phys_base, GFP_KERNEL);
282 if (!mcode->code) {
288 memcpy((void *)mcode->code, (void *)(fw_entry->data + sizeof(*ucode)),
289 mcode->code_size);
292 for (j = 0; j < (mcode->code_size / 8); j++)
293 ((u64 *)mcode->code)[j] = cpu_to_be64(((u64 *)mcode->code)[j]);
295 for (j = 0; j < (mcode->code_size / 2); j++)
296 ((u16 *)mcode->code)[j] = cpu_to_be16(((u16 *)mcode->code)[j]);
298 dev_dbg(dev, "mcode->code_size = %u\n", mcode->code_size);
299 dev_dbg(dev, "mcode->is_ae = %u\n", mcode->is_ae);
300 dev_dbg(dev, "mcode->num_cores = %u\n", mcode->num_cores);
301 dev_dbg(dev, "mcode->code = %llx\n", (u64)mcode->code);
302 dev_dbg(dev, "mcode->phys_base = %llx\n", mcode->phys_base);
304 ret = do_cpt_init(cpt, mcode);
310 dev_info(dev, "Microcode Loaded %s\n", mcode->version);
311 mcode->is_mc_valid = 1;
418 struct microcode *mcode = &cpt->mcode[grp];
420 if (cpt->mcode[grp].code)
421 dma_free_coherent(&cpt->pdev->dev, mcode->code_size,
422 mcode->code, mcode->phys_base);
423 mcode->code = NULL;