xref: /rk3399_ARM-atf/include/lib/pmf/pmf.h (revision f7679d437d5f27a3168f017db8d42bc561ac0c59)
1 /*
2  * Copyright (c) 2016-2024, Arm Limited and Contributors. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #ifndef PMF_H
8 #define PMF_H
9 
10 #include <lib/cassert.h>
11 #include <lib/pmf/pmf_helpers.h>
12 #include <lib/utils_def.h>
13 
14 /*
15  * Constants used for/by PMF services.
16  */
17 #define PMF_ARM_TIF_IMPL_ID	UL(0x41)
18 #define PMF_TID_SHIFT		0
19 #define PMF_TID_MASK		(UL(0xFF) << PMF_TID_SHIFT)
20 #define PMF_SVC_ID_SHIFT	10
21 #define PMF_SVC_ID_MASK		(UL(0x3F) << PMF_SVC_ID_SHIFT)
22 #define PMF_IMPL_ID_SHIFT	24
23 #define PMF_IMPL_ID_MASK	(UL(0xFF) << PMF_IMPL_ID_SHIFT)
24 
25 /*
26  * Flags passed to PMF_REGISTER_SERVICE
27  */
28 #define PMF_STORE_ENABLE	(1 << 0)
29 #define PMF_DUMP_ENABLE		(1 << 1)
30 
31 /*
32  * Flags passed to PMF_GET_TIMESTAMP_XXX
33  * and PMF_CAPTURE_TIMESTAMP
34  */
35 #define PMF_CACHE_MAINT		(U(1) << 0)
36 #define PMF_NO_CACHE_MAINT	U(0)
37 
38 /*
39  * Defines for PMF SMC function ids used with arm-sip
40  * range, this is now deprecated and will be removed.
41  */
42 #define PMF_SMC_GET_TIMESTAMP_32_DEP	U(0x82000010)
43 #define PMF_SMC_GET_TIMESTAMP_64_DEP	U(0xC2000010)
44 
45 #define PMF_FID_VALUE_DEPRECATED	U(0x10)
46 #define is_pmf_fid_deprecated(_fid) \
47 	(((_fid) & FUNCID_NUM_MASK) == PMF_FID_VALUE_DEPRECATED)
48 
49 /*
50  * Defines for PMF SMC function ids used with Vendor-Specific
51  * EL3 range.
52  */
53 #define PMF_SMC_GET_TIMESTAMP_32	U(0x87000020)
54 #define PMF_SMC_GET_TIMESTAMP_64	U(0xC7000020)
55 #define PMF_NUM_SMC_CALLS		2
56 
57 /*
58  * The macros below are used to identify
59  * PMF calls from the SMC function ID.
60  */
61 #define PMF_FID_VALUE		U(0x20)
62 #define is_pmf_fid(_fid)	(((_fid) & FUNCID_NUM_MASK) == PMF_FID_VALUE)
63 
64 /* Following are the supported PMF service IDs */
65 #define PMF_PSCI_STAT_SVC_ID	0
66 #define PMF_RT_INSTR_SVC_ID	1
67 
68 /*******************************************************************************
69  * Function & variable prototypes
70  ******************************************************************************/
71 /* PMF common functions */
72 int pmf_get_timestamp_smc(unsigned int tid,
73 		u_register_t mpidr,
74 		unsigned int flags,
75 		unsigned long long *ts_value);
76 int pmf_setup(void);
77 uintptr_t pmf_smc_handler(unsigned int smc_fid,
78 		u_register_t x1,
79 		u_register_t x2,
80 		u_register_t x3,
81 		u_register_t x4,
82 		void *cookie,
83 		void *handle,
84 		u_register_t flags);
85 
86 #endif /* PMF_H */
87