xref: /arm-trusted-firmware/plat/nxp/common/sip_svc/include/sipsvc.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright 2018-2020 NXP
3*91f16700Schasinglulu  *
4*91f16700Schasinglulu  * SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu  *
6*91f16700Schasinglulu  */
7*91f16700Schasinglulu 
8*91f16700Schasinglulu #ifndef SIPSVC_H
9*91f16700Schasinglulu #define SIPSVC_H
10*91f16700Schasinglulu 
11*91f16700Schasinglulu #include <stdint.h>
12*91f16700Schasinglulu 
13*91f16700Schasinglulu #define SMC_FUNC_MASK			0x0000ffff
14*91f16700Schasinglulu #define SMC32_PARAM_MASK		0xffffffff
15*91f16700Schasinglulu 
16*91f16700Schasinglulu /* SMC function IDs for SiP Service queries */
17*91f16700Schasinglulu #define SIP_SVC_CALL_COUNT		0xff00
18*91f16700Schasinglulu #define SIP_SVC_UID			0xff01
19*91f16700Schasinglulu #define SIP_SVC_VERSION			0xff03
20*91f16700Schasinglulu #define SIP_SVC_PRNG			0xff10
21*91f16700Schasinglulu #define SIP_SVC_RNG			0xff11
22*91f16700Schasinglulu #define SIP_SVC_MEM_BANK		0xff12
23*91f16700Schasinglulu #define SIP_SVC_PREFETCH_DIS		0xff13
24*91f16700Schasinglulu #define SIP_SVC_HUK			0xff14
25*91f16700Schasinglulu #define SIP_SVC_ALLOW_L1L2_ERR		0xff15
26*91f16700Schasinglulu #define SIP_SVC_ALLOW_L2_CLR		0xff16
27*91f16700Schasinglulu #define SIP_SVC_2_AARCH32		0xff17
28*91f16700Schasinglulu #define SIP_SVC_PORSR1			0xff18
29*91f16700Schasinglulu 
30*91f16700Schasinglulu /* Layerscape SiP Service Calls version numbers */
31*91f16700Schasinglulu #define LS_SIP_SVC_VERSION_MAJOR	0x0
32*91f16700Schasinglulu #define LS_SIP_SVC_VERSION_MINOR	0x1
33*91f16700Schasinglulu 
34*91f16700Schasinglulu /* Number of Layerscape SiP Calls implemented */
35*91f16700Schasinglulu #define LS_COMMON_SIP_NUM_CALLS		10
36*91f16700Schasinglulu 
37*91f16700Schasinglulu /* Parameter Type Constants */
38*91f16700Schasinglulu #define SIP_PARAM_TYPE_NONE		0x0
39*91f16700Schasinglulu #define SIP_PARAM_TYPE_VALUE_INPUT	0x1
40*91f16700Schasinglulu #define SIP_PARAM_TYPE_VALUE_OUTPUT	0x2
41*91f16700Schasinglulu #define SIP_PARAM_TYPE_VALUE_INOUT	0x3
42*91f16700Schasinglulu #define SIP_PARAM_TYPE_MEMREF_INPUT	0x5
43*91f16700Schasinglulu #define SIP_PARAM_TYPE_MEMREF_OUTPUT	0x6
44*91f16700Schasinglulu #define SIP_PARAM_TYPE_MEMREF_INOUT	0x7
45*91f16700Schasinglulu 
46*91f16700Schasinglulu #define SIP_PARAM_TYPE_MASK		0xF
47*91f16700Schasinglulu 
48*91f16700Schasinglulu /*
49*91f16700Schasinglulu  * The macro SIP_PARAM_TYPES can be used to construct a value that you can
50*91f16700Schasinglulu  * compare against an incoming paramTypes to check the type of all the
51*91f16700Schasinglulu  * parameters in one comparison.
52*91f16700Schasinglulu  */
53*91f16700Schasinglulu #define SIP_PARAM_TYPES(t0, t1, t2, t3) \
54*91f16700Schasinglulu 		((t0) | ((t1) << 4) | ((t2) << 8) | ((t3) << 12))
55*91f16700Schasinglulu 
56*91f16700Schasinglulu /*
57*91f16700Schasinglulu  * The macro SIP_PARAM_TYPE_GET can be used to extract the type of a given
58*91f16700Schasinglulu  * parameter from paramTypes if you need more fine-grained type checking.
59*91f16700Schasinglulu  */
60*91f16700Schasinglulu #define SIP_PARAM_TYPE_GET(t, i)	((((uint32_t)(t)) >> ((i) * 4)) & 0xF)
61*91f16700Schasinglulu 
62*91f16700Schasinglulu /*
63*91f16700Schasinglulu  * The macro SIP_PARAM_TYPE_SET can be used to load the type of a given
64*91f16700Schasinglulu  * parameter from paramTypes without specifying all types (SIP_PARAM_TYPES)
65*91f16700Schasinglulu  */
66*91f16700Schasinglulu #define SIP_PARAM_TYPE_SET(t, i)	(((uint32_t)(t) & 0xF) << ((i) * 4))
67*91f16700Schasinglulu 
68*91f16700Schasinglulu #define SIP_SVC_RNG_PARAMS		(SIP_PARAM_TYPE_VALUE_INPUT, \
69*91f16700Schasinglulu 					 SIP_PARAM_TYPE_MEMREF_OUTPUT, \
70*91f16700Schasinglulu 					 SIP_PARAM_TYPE_NONE, \
71*91f16700Schasinglulu 					 SIP_PARAM_TYPE_NONE)
72*91f16700Schasinglulu 
73*91f16700Schasinglulu /* Layerscape SiP Calls error code */
74*91f16700Schasinglulu enum {
75*91f16700Schasinglulu 	LS_SIP_SUCCESS = 0,
76*91f16700Schasinglulu 	LS_SIP_INVALID_PARAM = -1,
77*91f16700Schasinglulu 	LS_SIP_NOT_SUPPORTED = -2,
78*91f16700Schasinglulu };
79*91f16700Schasinglulu 
80*91f16700Schasinglulu #endif /* SIPSVC_H */
81