25#if defined ( __ICCARM__ )
26 #pragma system_include
27#elif defined (__clang__)
28 #pragma clang system_header
31#ifndef ARM_PMU_ARMV8_H
32#define ARM_PMU_ARMV8_H
39#define ARM_PMU_SW_INCR 0x0000
40#define ARM_PMU_L1I_CACHE_REFILL 0x0001
41#define ARM_PMU_L1D_CACHE_REFILL 0x0003
42#define ARM_PMU_L1D_CACHE 0x0004
43#define ARM_PMU_LD_RETIRED 0x0006
44#define ARM_PMU_ST_RETIRED 0x0007
45#define ARM_PMU_INST_RETIRED 0x0008
46#define ARM_PMU_EXC_TAKEN 0x0009
47#define ARM_PMU_EXC_RETURN 0x000A
48#define ARM_PMU_PC_WRITE_RETIRED 0x000C
49#define ARM_PMU_BR_IMMED_RETIRED 0x000D
50#define ARM_PMU_BR_RETURN_RETIRED 0x000E
51#define ARM_PMU_UNALIGNED_LDST_RETIRED 0x000F
52#define ARM_PMU_BR_MIS_PRED 0x0010
53#define ARM_PMU_CPU_CYCLES 0x0011
54#define ARM_PMU_BR_PRED 0x0012
55#define ARM_PMU_MEM_ACCESS 0x0013
56#define ARM_PMU_L1I_CACHE 0x0014
57#define ARM_PMU_L1D_CACHE_WB 0x0015
58#define ARM_PMU_L2D_CACHE 0x0016
59#define ARM_PMU_L2D_CACHE_REFILL 0x0017
60#define ARM_PMU_L2D_CACHE_WB 0x0018
61#define ARM_PMU_BUS_ACCESS 0x0019
62#define ARM_PMU_MEMORY_ERROR 0x001A
63#define ARM_PMU_INST_SPEC 0x001B
64#define ARM_PMU_BUS_CYCLES 0x001D
65#define ARM_PMU_CHAIN 0x001E
66#define ARM_PMU_L1D_CACHE_ALLOCATE 0x001F
67#define ARM_PMU_L2D_CACHE_ALLOCATE 0x0020
68#define ARM_PMU_BR_RETIRED 0x0021
69#define ARM_PMU_BR_MIS_PRED_RETIRED 0x0022
70#define ARM_PMU_STALL_FRONTEND 0x0023
71#define ARM_PMU_STALL_BACKEND 0x0024
72#define ARM_PMU_L2I_CACHE 0x0027
73#define ARM_PMU_L2I_CACHE_REFILL 0x0028
74#define ARM_PMU_L3D_CACHE_ALLOCATE 0x0029
75#define ARM_PMU_L3D_CACHE_REFILL 0x002A
76#define ARM_PMU_L3D_CACHE 0x002B
77#define ARM_PMU_L3D_CACHE_WB 0x002C
78#define ARM_PMU_LL_CACHE_RD 0x0036
79#define ARM_PMU_LL_CACHE_MISS_RD 0x0037
80#define ARM_PMU_L1D_CACHE_MISS_RD 0x0039
81#define ARM_PMU_OP_COMPLETE 0x003A
82#define ARM_PMU_OP_SPEC 0x003B
83#define ARM_PMU_STALL 0x003C
84#define ARM_PMU_STALL_OP_BACKEND 0x003D
85#define ARM_PMU_STALL_OP_FRONTEND 0x003E
86#define ARM_PMU_STALL_OP 0x003F
87#define ARM_PMU_L1D_CACHE_RD 0x0040
88#define ARM_PMU_LE_RETIRED 0x0100
89#define ARM_PMU_LE_SPEC 0x0101
90#define ARM_PMU_BF_RETIRED 0x0104
91#define ARM_PMU_BF_SPEC 0x0105
92#define ARM_PMU_LE_CANCEL 0x0108
93#define ARM_PMU_BF_CANCEL 0x0109
94#define ARM_PMU_SE_CALL_S 0x0114
95#define ARM_PMU_SE_CALL_NS 0x0115
96#define ARM_PMU_DWT_CMPMATCH0 0x0118
97#define ARM_PMU_DWT_CMPMATCH1 0x0119
98#define ARM_PMU_DWT_CMPMATCH2 0x011A
99#define ARM_PMU_DWT_CMPMATCH3 0x011B
100#define ARM_PMU_MVE_INST_RETIRED 0x0200
101#define ARM_PMU_MVE_INST_SPEC 0x0201
102#define ARM_PMU_MVE_FP_RETIRED 0x0204
103#define ARM_PMU_MVE_FP_SPEC 0x0205
104#define ARM_PMU_MVE_FP_HP_RETIRED 0x0208
105#define ARM_PMU_MVE_FP_HP_SPEC 0x0209
106#define ARM_PMU_MVE_FP_SP_RETIRED 0x020C
107#define ARM_PMU_MVE_FP_SP_SPEC 0x020D
108#define ARM_PMU_MVE_FP_MAC_RETIRED 0x0214
109#define ARM_PMU_MVE_FP_MAC_SPEC 0x0215
110#define ARM_PMU_MVE_INT_RETIRED 0x0224
111#define ARM_PMU_MVE_INT_SPEC 0x0225
112#define ARM_PMU_MVE_INT_MAC_RETIRED 0x0228
113#define ARM_PMU_MVE_INT_MAC_SPEC 0x0229
114#define ARM_PMU_MVE_LDST_RETIRED 0x0238
115#define ARM_PMU_MVE_LDST_SPEC 0x0239
116#define ARM_PMU_MVE_LD_RETIRED 0x023C
117#define ARM_PMU_MVE_LD_SPEC 0x023D
118#define ARM_PMU_MVE_ST_RETIRED 0x0240
119#define ARM_PMU_MVE_ST_SPEC 0x0241
120#define ARM_PMU_MVE_LDST_CONTIG_RETIRED 0x0244
121#define ARM_PMU_MVE_LDST_CONTIG_SPEC 0x0245
122#define ARM_PMU_MVE_LD_CONTIG_RETIRED 0x0248
123#define ARM_PMU_MVE_LD_CONTIG_SPEC 0x0249
124#define ARM_PMU_MVE_ST_CONTIG_RETIRED 0x024C
125#define ARM_PMU_MVE_ST_CONTIG_SPEC 0x024D
126#define ARM_PMU_MVE_LDST_NONCONTIG_RETIRED 0x0250
127#define ARM_PMU_MVE_LDST_NONCONTIG_SPEC 0x0251
128#define ARM_PMU_MVE_LD_NONCONTIG_RETIRED 0x0254
129#define ARM_PMU_MVE_LD_NONCONTIG_SPEC 0x0255
130#define ARM_PMU_MVE_ST_NONCONTIG_RETIRED 0x0258
131#define ARM_PMU_MVE_ST_NONCONTIG_SPEC 0x0259
132#define ARM_PMU_MVE_LDST_MULTI_RETIRED 0x025C
133#define ARM_PMU_MVE_LDST_MULTI_SPEC 0x025D
134#define ARM_PMU_MVE_LD_MULTI_RETIRED 0x0260
135#define ARM_PMU_MVE_LD_MULTI_SPEC 0x0261
136#define ARM_PMU_MVE_ST_MULTI_RETIRED 0x0261
137#define ARM_PMU_MVE_ST_MULTI_SPEC 0x0265
138#define ARM_PMU_MVE_LDST_UNALIGNED_RETIRED 0x028C
139#define ARM_PMU_MVE_LDST_UNALIGNED_SPEC 0x028D
140#define ARM_PMU_MVE_LD_UNALIGNED_RETIRED 0x0290
141#define ARM_PMU_MVE_LD_UNALIGNED_SPEC 0x0291
142#define ARM_PMU_MVE_ST_UNALIGNED_RETIRED 0x0294
143#define ARM_PMU_MVE_ST_UNALIGNED_SPEC 0x0295
144#define ARM_PMU_MVE_LDST_UNALIGNED_NONCONTIG_RETIRED 0x0298
145#define ARM_PMU_MVE_LDST_UNALIGNED_NONCONTIG_SPEC 0x0299
146#define ARM_PMU_MVE_VREDUCE_RETIRED 0x02A0
147#define ARM_PMU_MVE_VREDUCE_SPEC 0x02A1
148#define ARM_PMU_MVE_VREDUCE_FP_RETIRED 0x02A4
149#define ARM_PMU_MVE_VREDUCE_FP_SPEC 0x02A5
150#define ARM_PMU_MVE_VREDUCE_INT_RETIRED 0x02A8
151#define ARM_PMU_MVE_VREDUCE_INT_SPEC 0x02A9
152#define ARM_PMU_MVE_PRED 0x02B8
153#define ARM_PMU_MVE_STALL 0x02CC
154#define ARM_PMU_MVE_STALL_RESOURCE 0x02CD
155#define ARM_PMU_MVE_STALL_RESOURCE_MEM 0x02CE
156#define ARM_PMU_MVE_STALL_RESOURCE_FP 0x02CF
157#define ARM_PMU_MVE_STALL_RESOURCE_INT 0x02D0
158#define ARM_PMU_MVE_STALL_BREAK 0x02D3
159#define ARM_PMU_MVE_STALL_DEPENDENCY 0x02D4
160#define ARM_PMU_ITCM_ACCESS 0x4007
161#define ARM_PMU_DTCM_ACCESS 0x4008
162#define ARM_PMU_TRCEXTOUT0 0x4010
163#define ARM_PMU_TRCEXTOUT1 0x4011
164#define ARM_PMU_TRCEXTOUT2 0x4012
165#define ARM_PMU_TRCEXTOUT3 0x4013
166#define ARM_PMU_CTI_TRIGOUT4 0x4018
167#define ARM_PMU_CTI_TRIGOUT5 0x4019
168#define ARM_PMU_CTI_TRIGOUT6 0x401A
169#define ARM_PMU_CTI_TRIGOUT7 0x401B
173__STATIC_INLINE
void ARM_PMU_Enable(
void);
174__STATIC_INLINE
void ARM_PMU_Disable(
void);
176__STATIC_INLINE
void ARM_PMU_Set_EVTYPER(uint32_t num, uint32_t type);
178__STATIC_INLINE
void ARM_PMU_CYCCNT_Reset(
void);
179__STATIC_INLINE
void ARM_PMU_EVCNTR_ALL_Reset(
void);
181__STATIC_INLINE
void ARM_PMU_CNTR_Enable(uint32_t mask);
182__STATIC_INLINE
void ARM_PMU_CNTR_Disable(uint32_t mask);
184__STATIC_INLINE uint32_t ARM_PMU_Get_CCNTR(
void);
185__STATIC_INLINE uint32_t ARM_PMU_Get_EVCNTR(uint32_t num);
187__STATIC_INLINE uint32_t ARM_PMU_Get_CNTR_OVS(
void);
188__STATIC_INLINE
void ARM_PMU_Set_CNTR_OVS(uint32_t mask);
190__STATIC_INLINE
void ARM_PMU_Set_CNTR_IRQ_Enable(uint32_t mask);
191__STATIC_INLINE
void ARM_PMU_Set_CNTR_IRQ_Disable(uint32_t mask);
193__STATIC_INLINE
void ARM_PMU_CNTR_Increment(uint32_t mask);
198__STATIC_INLINE
void ARM_PMU_Enable(
void)
200 PMU->CTRL |= PMU_CTRL_ENABLE_Msk;
206__STATIC_INLINE
void ARM_PMU_Disable(
void)
208 PMU->CTRL &= ~PMU_CTRL_ENABLE_Msk;
216__STATIC_INLINE
void ARM_PMU_Set_EVTYPER(uint32_t num, uint32_t type)
218 PMU->EVTYPER[num] = type;
224__STATIC_INLINE
void ARM_PMU_CYCCNT_Reset(
void)
226 PMU->CTRL |= PMU_CTRL_CYCCNT_RESET_Msk;
232__STATIC_INLINE
void ARM_PMU_EVCNTR_ALL_Reset(
void)
234 PMU->CTRL |= PMU_CTRL_EVENTCNT_RESET_Msk;
244__STATIC_INLINE
void ARM_PMU_CNTR_Enable(uint32_t mask)
246 PMU->CNTENSET = mask;
256__STATIC_INLINE
void ARM_PMU_CNTR_Disable(uint32_t mask)
258 PMU->CNTENCLR = mask;
265__STATIC_INLINE uint32_t ARM_PMU_Get_CCNTR(
void)
275__STATIC_INLINE uint32_t ARM_PMU_Get_EVCNTR(uint32_t num)
277 return PMU_EVCNTR_CNT_Msk & PMU->EVCNTR[num];
286__STATIC_INLINE uint32_t ARM_PMU_Get_CNTR_OVS(
void)
298__STATIC_INLINE
void ARM_PMU_Set_CNTR_OVS(uint32_t mask)
310__STATIC_INLINE
void ARM_PMU_Set_CNTR_IRQ_Enable(uint32_t mask)
312 PMU->INTENSET = mask;
322__STATIC_INLINE
void ARM_PMU_Set_CNTR_IRQ_Disable(uint32_t mask)
324 PMU->INTENCLR = mask;
332__STATIC_INLINE
void ARM_PMU_CNTR_Increment(uint32_t mask)