xref: /rk3399_ARM-atf/services/std_svc/lfa/lfa_main.c (revision cf48f49fd352b3c68635677c1564a449d3745930)
1*cf48f49fSManish V Badarkhe /*
2*cf48f49fSManish V Badarkhe  * Copyright (c) 2025, Arm Limited. All rights reserved.
3*cf48f49fSManish V Badarkhe  *
4*cf48f49fSManish V Badarkhe  * SPDX-License-Identifier: BSD-3-Clause
5*cf48f49fSManish V Badarkhe  */
6*cf48f49fSManish V Badarkhe 
7*cf48f49fSManish V Badarkhe #include <services/lfa_svc.h>
8*cf48f49fSManish V Badarkhe #include <smccc_helpers.h>
9*cf48f49fSManish V Badarkhe 
10*cf48f49fSManish V Badarkhe int lfa_setup(void)
11*cf48f49fSManish V Badarkhe {
12*cf48f49fSManish V Badarkhe 	return LFA_SUCCESS;
13*cf48f49fSManish V Badarkhe }
14*cf48f49fSManish V Badarkhe 
15*cf48f49fSManish V Badarkhe uint64_t lfa_smc_handler(uint32_t smc_fid, u_register_t x1, u_register_t x2,
16*cf48f49fSManish V Badarkhe 			 u_register_t x3, u_register_t x4, void *cookie,
17*cf48f49fSManish V Badarkhe 			 void *handle, u_register_t flags)
18*cf48f49fSManish V Badarkhe {
19*cf48f49fSManish V Badarkhe 	/**
20*cf48f49fSManish V Badarkhe 	 * TODO: Acquire serialization lock.
21*cf48f49fSManish V Badarkhe 	 */
22*cf48f49fSManish V Badarkhe 	switch (smc_fid) {
23*cf48f49fSManish V Badarkhe 	case LFA_VERSION:
24*cf48f49fSManish V Badarkhe 		SMC_RET1(handle, LFA_VERSION_VAL);
25*cf48f49fSManish V Badarkhe 		break;
26*cf48f49fSManish V Badarkhe 
27*cf48f49fSManish V Badarkhe 	case LFA_FEATURES:
28*cf48f49fSManish V Badarkhe 		SMC_RET1(handle, is_lfa_fid(x1) ? LFA_SUCCESS : LFA_NOT_SUPPORTED);
29*cf48f49fSManish V Badarkhe 		break;
30*cf48f49fSManish V Badarkhe 
31*cf48f49fSManish V Badarkhe 	case LFA_GET_INFO:
32*cf48f49fSManish V Badarkhe 		break;
33*cf48f49fSManish V Badarkhe 
34*cf48f49fSManish V Badarkhe 	case LFA_GET_INVENTORY:
35*cf48f49fSManish V Badarkhe 		break;
36*cf48f49fSManish V Badarkhe 
37*cf48f49fSManish V Badarkhe 	case LFA_PRIME:
38*cf48f49fSManish V Badarkhe 		break;
39*cf48f49fSManish V Badarkhe 
40*cf48f49fSManish V Badarkhe 	case LFA_ACTIVATE:
41*cf48f49fSManish V Badarkhe 		break;
42*cf48f49fSManish V Badarkhe 
43*cf48f49fSManish V Badarkhe 	case LFA_CANCEL:
44*cf48f49fSManish V Badarkhe 		break;
45*cf48f49fSManish V Badarkhe 
46*cf48f49fSManish V Badarkhe 	default:
47*cf48f49fSManish V Badarkhe 		WARN("Unimplemented LFA Service Call: 0x%x\n", smc_fid);
48*cf48f49fSManish V Badarkhe 		SMC_RET1(handle, SMC_UNK);
49*cf48f49fSManish V Badarkhe 		break; /* unreachable */
50*cf48f49fSManish V Badarkhe 
51*cf48f49fSManish V Badarkhe 	}
52*cf48f49fSManish V Badarkhe 
53*cf48f49fSManish V Badarkhe 	SMC_RET1(handle, SMC_UNK);
54*cf48f49fSManish V Badarkhe 
55*cf48f49fSManish V Badarkhe 	return 0;
56*cf48f49fSManish V Badarkhe }
57