xref: /rk3399_ARM-atf/include/services/drtm_svc.h (revision e62748e3f1f16934f0ef2d5742f3ca0b125eaea2)
1*e62748e3SManish V Badarkhe /*
2*e62748e3SManish V Badarkhe  * Copyright (c) 2022 Arm Limited. All rights reserved.
3*e62748e3SManish V Badarkhe  *
4*e62748e3SManish V Badarkhe  * SPDX-License-Identifier:    BSD-3-Clause
5*e62748e3SManish V Badarkhe  *
6*e62748e3SManish V Badarkhe  * DRTM service
7*e62748e3SManish V Badarkhe  *
8*e62748e3SManish V Badarkhe  * Authors:
9*e62748e3SManish V Badarkhe  *	Lucian Paul-Trifu <lucian.paultrifu@gmail.com>
10*e62748e3SManish V Badarkhe  *	Brian Nezvadovitz <brinez@microsoft.com> 2021-02-01
11*e62748e3SManish V Badarkhe  *
12*e62748e3SManish V Badarkhe  */
13*e62748e3SManish V Badarkhe 
14*e62748e3SManish V Badarkhe #ifndef ARM_DRTM_SVC_H
15*e62748e3SManish V Badarkhe #define ARM_DRTM_SVC_H
16*e62748e3SManish V Badarkhe 
17*e62748e3SManish V Badarkhe /*
18*e62748e3SManish V Badarkhe  * SMC function IDs for DRTM Service
19*e62748e3SManish V Badarkhe  * Upper word bits set: Fast call, SMC64, Standard Secure Svc. Call (OEN = 4)
20*e62748e3SManish V Badarkhe  */
21*e62748e3SManish V Badarkhe #define DRTM_FID(func_num)				\
22*e62748e3SManish V Badarkhe 	((SMC_TYPE_FAST << FUNCID_TYPE_SHIFT) |		\
23*e62748e3SManish V Badarkhe 	(SMC_64 << FUNCID_CC_SHIFT) |			\
24*e62748e3SManish V Badarkhe 	(OEN_STD_START << FUNCID_OEN_SHIFT) |		\
25*e62748e3SManish V Badarkhe 	((func_num) << FUNCID_NUM_SHIFT))
26*e62748e3SManish V Badarkhe 
27*e62748e3SManish V Badarkhe #define DRTM_FNUM_SVC_VERSION		U(0x110)
28*e62748e3SManish V Badarkhe #define DRTM_FNUM_SVC_FEATURES		U(0x111)
29*e62748e3SManish V Badarkhe #define DRTM_FNUM_SVC_UNPROTECT_MEM	U(0x113)
30*e62748e3SManish V Badarkhe #define DRTM_FNUM_SVC_DYNAMIC_LAUNCH	U(0x114)
31*e62748e3SManish V Badarkhe #define DRTM_FNUM_SVC_CLOSE_LOCALITY	U(0x115)
32*e62748e3SManish V Badarkhe #define DRTM_FNUM_SVC_GET_ERROR		U(0x116)
33*e62748e3SManish V Badarkhe #define DRTM_FNUM_SVC_SET_ERROR		U(0x117)
34*e62748e3SManish V Badarkhe #define DRTM_FNUM_SVC_SET_TCB_HASH	U(0x118)
35*e62748e3SManish V Badarkhe #define DRTM_FNUM_SVC_LOCK_TCB_HASH	U(0x119)
36*e62748e3SManish V Badarkhe 
37*e62748e3SManish V Badarkhe #define ARM_DRTM_SVC_VERSION		DRTM_FID(DRTM_FNUM_SVC_VERSION)
38*e62748e3SManish V Badarkhe #define ARM_DRTM_SVC_FEATURES		DRTM_FID(DRTM_FNUM_SVC_FEATURES)
39*e62748e3SManish V Badarkhe #define ARM_DRTM_SVC_UNPROTECT_MEM	DRTM_FID(DRTM_FNUM_SVC_UNPROTECT_MEM)
40*e62748e3SManish V Badarkhe #define ARM_DRTM_SVC_DYNAMIC_LAUNCH	DRTM_FID(DRTM_FNUM_SVC_DYNAMIC_LAUNCH)
41*e62748e3SManish V Badarkhe #define ARM_DRTM_SVC_CLOSE_LOCALITY	DRTM_FID(DRTM_FNUM_SVC_CLOSE_LOCALITY)
42*e62748e3SManish V Badarkhe #define ARM_DRTM_SVC_GET_ERROR		DRTM_FID(DRTM_FNUM_SVC_GET_ERROR)
43*e62748e3SManish V Badarkhe #define ARM_DRTM_SVC_SET_ERROR		DRTM_FID(DRTM_FNUM_SVC_SET_ERROR)
44*e62748e3SManish V Badarkhe #define ARM_DRTM_SVC_SET_TCB_HASH	DRTM_FID(DRTM_FNUM_SVC_SET_TCB_HASH)
45*e62748e3SManish V Badarkhe #define ARM_DRTM_SVC_LOCK_TCB_HASH	DRTM_FID(DRTM_FNUM_SVC_LOCK_TCB_HASH)
46*e62748e3SManish V Badarkhe 
47*e62748e3SManish V Badarkhe #define is_drtm_fid(_fid) \
48*e62748e3SManish V Badarkhe 	(((_fid) >= ARM_DRTM_SVC_VERSION) && ((_fid) <= ARM_DRTM_SVC_LOCK_TCB_HASH))
49*e62748e3SManish V Badarkhe 
50*e62748e3SManish V Badarkhe /* ARM DRTM Service Calls version numbers */
51*e62748e3SManish V Badarkhe #define ARM_DRTM_VERSION_MAJOR		U(0)
52*e62748e3SManish V Badarkhe #define ARM_DRTM_VERSION_MAJOR_SHIFT	16
53*e62748e3SManish V Badarkhe #define ARM_DRTM_VERSION_MAJOR_MASK	U(0x7FFF)
54*e62748e3SManish V Badarkhe #define ARM_DRTM_VERSION_MINOR		U(1)
55*e62748e3SManish V Badarkhe #define ARM_DRTM_VERSION_MINOR_SHIFT	0
56*e62748e3SManish V Badarkhe #define ARM_DRTM_VERSION_MINOR_MASK	U(0xFFFF)
57*e62748e3SManish V Badarkhe 
58*e62748e3SManish V Badarkhe #define ARM_DRTM_VERSION						\
59*e62748e3SManish V Badarkhe 	((((ARM_DRTM_VERSION_MAJOR) & ARM_DRTM_VERSION_MAJOR_MASK) <<	\
60*e62748e3SManish V Badarkhe 	ARM_DRTM_VERSION_MAJOR_SHIFT)					\
61*e62748e3SManish V Badarkhe 	| (((ARM_DRTM_VERSION_MINOR) & ARM_DRTM_VERSION_MINOR_MASK) <<	\
62*e62748e3SManish V Badarkhe 	ARM_DRTM_VERSION_MINOR_SHIFT))
63*e62748e3SManish V Badarkhe 
64*e62748e3SManish V Badarkhe #define ARM_DRTM_FUNC_SHIFT	U(63)
65*e62748e3SManish V Badarkhe #define ARM_DRTM_FUNC_MASK	U(0x1)
66*e62748e3SManish V Badarkhe #define ARM_DRTM_FUNC_ID	U(0x0)
67*e62748e3SManish V Badarkhe #define ARM_DRTM_FEAT_ID	U(0x1)
68*e62748e3SManish V Badarkhe 
69*e62748e3SManish V Badarkhe /* Initialization routine for the DRTM service */
70*e62748e3SManish V Badarkhe int drtm_setup(void);
71*e62748e3SManish V Badarkhe 
72*e62748e3SManish V Badarkhe /* Handler to be called to handle DRTM SMC calls */
73*e62748e3SManish V Badarkhe uint64_t drtm_smc_handler(uint32_t smc_fid,
74*e62748e3SManish V Badarkhe 			  uint64_t x1,
75*e62748e3SManish V Badarkhe 			  uint64_t x2,
76*e62748e3SManish V Badarkhe 			  uint64_t x3,
77*e62748e3SManish V Badarkhe 			  uint64_t x4,
78*e62748e3SManish V Badarkhe 			  void *cookie,
79*e62748e3SManish V Badarkhe 			  void *handle,
80*e62748e3SManish V Badarkhe 			  uint64_t flags);
81*e62748e3SManish V Badarkhe 
82*e62748e3SManish V Badarkhe #endif /* ARM_DRTM_SVC_H */
83