Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b88b93d8 authored by Vikram Mulukutla's avatar Vikram Mulukutla
Browse files

ion: msm : secure_buffer: Add support for the new scm_call2 API



The scm library has added support for a new secure world
interface that is more aligned to the ARMv8 SMC calling
convention. Use the new API while maintaining backward
compatibility for the mem-protect call.

Change-Id: I3a4432f2eab4c52d0fb2e8aa5d5e9dd650fd05ef
Signed-off-by: default avatarVikram Mulukutla <markivx@codeaurora.org>
parent cf3b1298
Loading
Loading
Loading
Loading
+22 −9
Original line number Original line Diff line number Diff line
@@ -46,6 +46,7 @@ struct cp2_lock_req {
} __attribute__ ((__packed__));
} __attribute__ ((__packed__));


#define MEM_PROTECT_LOCK_ID2		0x0A
#define MEM_PROTECT_LOCK_ID2		0x0A
#define MEM_PROTECT_LOCK_ID2_FLAT	0x11
#define V2_CHUNK_SIZE		SZ_1M
#define V2_CHUNK_SIZE		SZ_1M
#define FEATURE_ID_CP 12
#define FEATURE_ID_CP 12


@@ -107,19 +108,31 @@ static int secure_buffer_change_chunk(u32 chunks,
{
{
	struct cp2_lock_req request;
	struct cp2_lock_req request;
	u32 resp;
	u32 resp;
	int ret;
	struct scm_desc desc = {0};


	request.mem_usage = usage;
	desc.args[0] = request.chunks.chunk_list = chunks;
	request.lock = lock;
	desc.args[1] = request.chunks.chunk_list_size = nchunks;

	desc.args[2] = request.chunks.chunk_size = chunk_size;
	request.chunks.chunk_list = chunks;
	desc.args[3] = request.mem_usage = usage;
	request.chunks.chunk_list_size = nchunks;
	desc.args[4] = request.lock = lock;
	request.chunks.chunk_size = chunk_size;
	desc.args[5] = 0;
	desc.arginfo = SCM_ARGS(6, SCM_RW, SCM_VAL, SCM_VAL, SCM_VAL, SCM_VAL,
				SCM_VAL);


	kmap_flush_unused();
	kmap_flush_unused();
	kmap_atomic_flush_unused();
	kmap_atomic_flush_unused();
	return scm_call(SCM_SVC_MP, MEM_PROTECT_LOCK_ID2,

	if (!is_scm_armv8()) {
		ret = scm_call(SCM_SVC_MP, MEM_PROTECT_LOCK_ID2,
				&request, sizeof(request), &resp, sizeof(resp));
				&request, sizeof(request), &resp, sizeof(resp));
	} else {
		ret = scm_call2(SCM_SIP_FNID(SCM_SVC_MP,
				MEM_PROTECT_LOCK_ID2_FLAT), &desc);
		resp = desc.ret[0];
	}


	return ret;
}
}