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