Esempio n. 1
0
/* Check protocol version returned by the PA */
static u32 tf_rpc_init(struct tf_comm *comm)
{
	u32 protocol_version;
	u32 rpc_error = RPC_SUCCESS;

	dprintk(KERN_INFO "tf_rpc_init(%p)\n", comm);

	spin_lock(&(comm->lock));

	dmac_flush_range((void *)comm->init_shared_buffer,
		(void *)(((u32)(comm->init_shared_buffer)) + PAGE_SIZE));
	outer_inv_range(__pa(comm->init_shared_buffer),
		__pa(comm->init_shared_buffer) +  PAGE_SIZE);

	protocol_version = ((struct tf_init_buffer *)
				(comm->init_shared_buffer))->protocol_version;

	if ((GET_PROTOCOL_MAJOR_VERSION(protocol_version))
			!= TF_S_PROTOCOL_MAJOR_VERSION) {
		dprintk(KERN_ERR "SMC: Unsupported SMC Protocol PA Major "
			"Version (0x%02x, expected 0x%02x)!\n",
			GET_PROTOCOL_MAJOR_VERSION(protocol_version),
			TF_S_PROTOCOL_MAJOR_VERSION);
		rpc_error = RPC_ERROR_CONNECTION_PROTOCOL;
	} else {
		rpc_error = RPC_SUCCESS;
	}

	spin_unlock(&(comm->lock));

	register_smc_public_crypto_digest();
	register_smc_public_crypto_aes();

	return rpc_error;
}
Esempio n. 2
0
static int __init register_dmcrypt_engines(void)
{
        int ret;

        printk(KERN_INFO "Entered register_dmcrypt_engines");

        ret = SCXPublicCryptoInit();
        if (ret) {
                printk(KERN_ERR "register_dmcrypt_engines():"
                        " SCXPublicCryptoInit failed, (error %d)!\n", ret);
                goto out;
        }

        ret = register_smc_public_crypto_aes();
        if (ret) {
                printk(KERN_ERR "register_dmcrypt_engines():"
                        " regiser_smc_public_crypto_aes failed, (error %d)!\n", ret);
                goto out;
        }

        ret = register_smc_public_crypto_digest();
        if (ret) {
                printk(KERN_ERR "register_dmcrypt_engines():"
                        " regiser_smc_public_crypto_digest failed, (error %d)!\n", ret);
                goto out;
        }

out:
        return ret;
}
Esempio n. 3
0
int tf_init(struct tf_comm *comm)
{
	spin_lock_init(&(comm->lock));
	comm->flags = 0;
	comm->l1_buffer = NULL;

	comm->se_initialized = false;

	init_waitqueue_head(&(comm->wait_queue));
	mutex_init(&(comm->rpc_mutex));

	if (tf_crypto_init() != PUBLIC_CRYPTO_OPERATION_SUCCESS)
		return -EFAULT;

	pr_info("%s\n", S_VERSION_STRING);

	register_smc_public_crypto_digest();
	register_smc_public_crypto_aes();

	return 0;
}
Esempio n. 4
0
int tf_init(struct tf_comm *comm)
{
	spin_lock_init(&(comm->lock));
	comm->flags = 0;
	comm->pBuffer = NULL;
	comm->init_shared_buffer = NULL;

	comm->se_initialized = false;

	init_waitqueue_head(&(comm->wait_queue));
	mutex_init(&(comm->rpc_mutex));

	if (tf_crypto_init() != PUBLIC_CRYPTO_OPERATION_SUCCESS)
		return -EFAULT;

	if (omap_type() == OMAP2_DEVICE_TYPE_GP) {
		register_smc_public_crypto_digest();
		register_smc_public_crypto_aes();
	}

	return 0;
}