xref: /optee_os/core/arch/arm/tests/ffa_lsp.c (revision 4592d1a4c73acde3144dce28c7870e4148c381ca)
1*4592d1a4SJens Wiklander // SPDX-License-Identifier: BSD-2-Clause
2*4592d1a4SJens Wiklander /*
3*4592d1a4SJens Wiklander  * Copyright (c) 2025, Linaro Limited.
4*4592d1a4SJens Wiklander  */
5*4592d1a4SJens Wiklander 
6*4592d1a4SJens Wiklander #include <ffa.h>
7*4592d1a4SJens Wiklander #include <initcall.h>
8*4592d1a4SJens Wiklander #include <kernel/thread_spmc.h>
9*4592d1a4SJens Wiklander #include <sm/optee_smc.h>
10*4592d1a4SJens Wiklander 
test_direct_req(struct thread_smc_1_2_regs * args)11*4592d1a4SJens Wiklander static void test_direct_req(struct thread_smc_1_2_regs *args)
12*4592d1a4SJens Wiklander {
13*4592d1a4SJens Wiklander 	uint16_t src = args->a1 >> 16;
14*4592d1a4SJens Wiklander 	uint16_t dst = args->a1;
15*4592d1a4SJens Wiklander 
16*4592d1a4SJens Wiklander 	if (OPTEE_SMC_IS_64(args->a0))
17*4592d1a4SJens Wiklander 		args->a0 = FFA_MSG_SEND_DIRECT_RESP_64;
18*4592d1a4SJens Wiklander 	else
19*4592d1a4SJens Wiklander 		args->a0 = FFA_MSG_SEND_DIRECT_RESP_32;
20*4592d1a4SJens Wiklander 	args->a1 = SHIFT_U32(dst, 16) | src;
21*4592d1a4SJens Wiklander 	args->a2 = 0;
22*4592d1a4SJens Wiklander 	args->a3 = args->a3 + args->a4 + args->a5 + args->a6 + args->a7;
23*4592d1a4SJens Wiklander }
24*4592d1a4SJens Wiklander 
25*4592d1a4SJens Wiklander static struct spmc_lsp_desc desc __nex_data = {
26*4592d1a4SJens Wiklander 	.name = "Test LSP",
27*4592d1a4SJens Wiklander 	.direct_req = test_direct_req,
28*4592d1a4SJens Wiklander 	.properties = FFA_PART_PROP_DIRECT_REQ_RECV,
29*4592d1a4SJens Wiklander 	/* UUID 54b5440e-a3d2-48d1-872a-7b6cbfc34855 */
30*4592d1a4SJens Wiklander 	.uuid_words = { 0x0e44b554, 0xd148d2a3, 0x6c7b2a87, 0x5548c3bf, },
31*4592d1a4SJens Wiklander };
32*4592d1a4SJens Wiklander 
lsp_init(void)33*4592d1a4SJens Wiklander static TEE_Result lsp_init(void)
34*4592d1a4SJens Wiklander {
35*4592d1a4SJens Wiklander 	return spmc_register_lsp(&desc);
36*4592d1a4SJens Wiklander }
37*4592d1a4SJens Wiklander 
38*4592d1a4SJens Wiklander nex_service_init_late(lsp_init);
39