in amdtee/core.c [452:515]
static int __init amdtee_driver_init(void)
{
struct tee_device *teedev;
struct tee_shm_pool *pool;
struct amdtee *amdtee;
int rc;
rc = psp_check_tee_status();
if (rc) {
pr_err("amd-tee driver: tee not present\n");
return rc;
}
drv_data = kzalloc(sizeof(*drv_data), GFP_KERNEL);
if (!drv_data)
return -ENOMEM;
amdtee = kzalloc(sizeof(*amdtee), GFP_KERNEL);
if (!amdtee) {
rc = -ENOMEM;
goto err_kfree_drv_data;
}
pool = amdtee_config_shm();
if (IS_ERR(pool)) {
pr_err("shared pool configuration error\n");
rc = PTR_ERR(pool);
goto err_kfree_amdtee;
}
teedev = tee_device_alloc(&amdtee_desc, NULL, pool, amdtee);
if (IS_ERR(teedev)) {
rc = PTR_ERR(teedev);
goto err_free_pool;
}
amdtee->teedev = teedev;
rc = tee_device_register(amdtee->teedev);
if (rc)
goto err_device_unregister;
amdtee->pool = pool;
drv_data->amdtee = amdtee;
pr_info("amd-tee driver initialization successful\n");
return 0;
err_device_unregister:
tee_device_unregister(amdtee->teedev);
err_free_pool:
tee_shm_pool_free(pool);
err_kfree_amdtee:
kfree(amdtee);
err_kfree_drv_data:
kfree(drv_data);
drv_data = NULL;
pr_err("amd-tee driver initialization failed\n");
return rc;
}