xref: /rk3399_ARM-atf/include/services/lfa_svc.h (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 #ifndef LFA_SVC_H
8*cf48f49fSManish V Badarkhe #define LFA_SVC_H
9*cf48f49fSManish V Badarkhe 
10*cf48f49fSManish V Badarkhe #include <lib/smccc.h>
11*cf48f49fSManish V Badarkhe 
12*cf48f49fSManish V Badarkhe /*
13*cf48f49fSManish V Badarkhe  * SMC function IDs for LFA Service
14*cf48f49fSManish V Badarkhe  * Upper word bits set: Fast call, SMC64, Standard Secure Svc. Call (OEN = 4)
15*cf48f49fSManish V Badarkhe  */
16*cf48f49fSManish V Badarkhe #define LFA_FID(func_num)				\
17*cf48f49fSManish V Badarkhe 	((SMC_TYPE_FAST << FUNCID_TYPE_SHIFT) |		\
18*cf48f49fSManish V Badarkhe 	(SMC_64 << FUNCID_CC_SHIFT) |			\
19*cf48f49fSManish V Badarkhe 	(OEN_STD_START << FUNCID_OEN_SHIFT) |		\
20*cf48f49fSManish V Badarkhe 	((func_num) << FUNCID_NUM_SHIFT))
21*cf48f49fSManish V Badarkhe 
22*cf48f49fSManish V Badarkhe #define LFA_VERSION			LFA_FID(0x2E0)
23*cf48f49fSManish V Badarkhe #define LFA_FEATURES			LFA_FID(0x2E1)
24*cf48f49fSManish V Badarkhe #define LFA_GET_INFO			LFA_FID(0x2E2)
25*cf48f49fSManish V Badarkhe #define LFA_GET_INVENTORY		LFA_FID(0x2E3)
26*cf48f49fSManish V Badarkhe #define LFA_PRIME			LFA_FID(0x2E4)
27*cf48f49fSManish V Badarkhe #define LFA_ACTIVATE			LFA_FID(0x2E5)
28*cf48f49fSManish V Badarkhe #define LFA_CANCEL			LFA_FID(0x2E6)
29*cf48f49fSManish V Badarkhe 
30*cf48f49fSManish V Badarkhe /* Check whether FID is in the range */
31*cf48f49fSManish V Badarkhe #define is_lfa_fid(_fid)	\
32*cf48f49fSManish V Badarkhe 	((_fid >= LFA_VERSION) && (_fid <= LFA_CANCEL))
33*cf48f49fSManish V Badarkhe 
34*cf48f49fSManish V Badarkhe /* LFA Service Calls version numbers */
35*cf48f49fSManish V Badarkhe #define LFA_VERSION_MAJOR		U(1)
36*cf48f49fSManish V Badarkhe #define LFA_VERSION_MAJOR_SHIFT		16
37*cf48f49fSManish V Badarkhe #define LFA_VERSION_MAJOR_MASK		U(0x7FFF)
38*cf48f49fSManish V Badarkhe #define LFA_VERSION_MINOR		U(0)
39*cf48f49fSManish V Badarkhe #define LFA_VERSION_MINOR_SHIFT		0
40*cf48f49fSManish V Badarkhe #define LFA_VERSION_MINOR_MASK		U(0xFFFF)
41*cf48f49fSManish V Badarkhe 
42*cf48f49fSManish V Badarkhe #define LFA_VERSION_VAL						\
43*cf48f49fSManish V Badarkhe 	((((LFA_VERSION_MAJOR) & LFA_VERSION_MAJOR_MASK) <<	\
44*cf48f49fSManish V Badarkhe 	LFA_VERSION_MAJOR_SHIFT)				\
45*cf48f49fSManish V Badarkhe 	| (((LFA_VERSION_MINOR) & LFA_VERSION_MINOR_MASK) <<	\
46*cf48f49fSManish V Badarkhe 	LFA_VERSION_MINOR_SHIFT))
47*cf48f49fSManish V Badarkhe 
48*cf48f49fSManish V Badarkhe /* List of errors as per the specification */
49*cf48f49fSManish V Badarkhe enum lfa_retc {
50*cf48f49fSManish V Badarkhe 	LFA_SUCCESS			=  0,
51*cf48f49fSManish V Badarkhe 	LFA_NOT_SUPPORTED		= -1,
52*cf48f49fSManish V Badarkhe 	LFA_BUSY			= -2,
53*cf48f49fSManish V Badarkhe 	LFA_AUTH_ERROR			= -3,
54*cf48f49fSManish V Badarkhe 	LFA_NO_MEMORY			= -4,
55*cf48f49fSManish V Badarkhe 	LFA_CRITICAL_ERROR		= -5,
56*cf48f49fSManish V Badarkhe 	LFA_DEVICE_ERROR		= -6,
57*cf48f49fSManish V Badarkhe 	LFA_WRONG_STATE			= -7,
58*cf48f49fSManish V Badarkhe 	LFA_INVALID_PARAMETERS		= -8,
59*cf48f49fSManish V Badarkhe 	LFA_COMPONENT_WRONG_STATE	= -9,
60*cf48f49fSManish V Badarkhe 	LFA_INVALID_ADDRESS		= -10,
61*cf48f49fSManish V Badarkhe 	LFA_ACTIVATION_FAILED		= -11,
62*cf48f49fSManish V Badarkhe };
63*cf48f49fSManish V Badarkhe 
64*cf48f49fSManish V Badarkhe /* Initialization routine for the LFA service */
65*cf48f49fSManish V Badarkhe int lfa_setup(void);
66*cf48f49fSManish V Badarkhe 
67*cf48f49fSManish V Badarkhe uint64_t lfa_smc_handler(uint32_t smc_fid, u_register_t x1, u_register_t x2,
68*cf48f49fSManish V Badarkhe 			 u_register_t x3, u_register_t x4, void *cookie,
69*cf48f49fSManish V Badarkhe 			 void *handle, u_register_t flags);
70*cf48f49fSManish V Badarkhe 
71*cf48f49fSManish V Badarkhe #endif /* LFA_SVC_H */
72