p_buf = (u8 *)p_ucode_info->surface_desc.cpuva;
if (!p_buf) {
- release_firmware(fecs_fw);
- release_firmware(gpccs_fw);
nvhost_err(d, "failed to map surface desc buffer");
- return -ENOMEM;
+ err = -ENOMEM;
+ goto clean_up;
}
gr_gk20a_copy_ctxsw_ucode_inst(p_buf, &p_ucode_info->fecs,
g->gr.ctx_vars.ucode.fecs.inst.l,
g->gr.ctx_vars.ucode.fecs.data.l);
+ release_firmware(fecs_fw);
+ fecs_fw = NULL;
+
gr_gk20a_copy_ctxsw_ucode_inst(p_buf, &p_ucode_info->gpcs,
p_gpcs_boot_desc, p_gpcs_boot_image,
g->gr.ctx_vars.ucode.gpccs.inst.l,
g->gr.ctx_vars.ucode.gpccs.data.l);
+ release_firmware(gpccs_fw);
+ gpccs_fw = NULL;
+
err = gr_gk20a_init_ctxsw_ucode_vaspace(g);
if (err)
goto clean_up;
p_ucode_info->surface_desc.cpuva = NULL;
p_ucode_info->surface_desc.iova = 0;
+ release_firmware(gpccs_fw);
+ gpccs_fw = NULL;
+ release_firmware(fecs_fw);
+ fecs_fw = NULL;
+
return err;
}