1 /* Copyright (c) 2011-2012, The Linux Foundation. All rights reserved.
2  *
3  * This program is free software; you can redistribute it and/or modify
4  * it under the terms of the GNU General Public License version 2 and
5  * only version 2 as published by the Free Software Foundation.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  */
12 
13 #ifndef __ASM_HARDWARE_CP14_H
14 #define __ASM_HARDWARE_CP14_H
15 
16 #include <linux/types.h>
17 
18 /* Accessors for CP14 registers */
19 #define dbg_read(reg)			RCP14_##reg()
20 #define dbg_write(val, reg)		WCP14_##reg(val)
21 #define etm_read(reg)			RCP14_##reg()
22 #define etm_write(val, reg)		WCP14_##reg(val)
23 
24 /* MRC14 and MCR14 */
25 #define MRC14(op1, crn, crm, op2)					\
26 ({									\
27 u32 val;								\
28 asm volatile("mrc p14, "#op1", %0, "#crn", "#crm", "#op2 : "=r" (val));	\
29 val;									\
30 })
31 
32 #define MCR14(val, op1, crn, crm, op2)					\
33 ({									\
34 asm volatile("mcr p14, "#op1", %0, "#crn", "#crm", "#op2 : : "r" (val));\
35 })
36 
37 /*
38  * Debug Registers
39  *
40  * Available only in DBGv7
41  * DBGECR, DBGDSCCR, DBGDSMCR, DBGDRCR
42  *
43  * Available only in DBGv7.1
44  * DBGBXVRm, DBGOSDLR, DBGDEVID2, DBGDEVID1
45  *
46  * Read only
47  * DBGDIDR, DBGDSCRint, DBGDTRRXint, DBGDRAR, DBGOSLSR, DBGOSSRR, DBGPRSR,
48  * DBGPRSR, DBGDSAR, DBGAUTHSTATUS, DBGDEVID2, DBGDEVID1, DBGDEVID
49  *
50  * Write only
51  * DBGDTRTXint, DBGOSLAR
52  */
53 #define RCP14_DBGDIDR()			MRC14(0, c0, c0, 0)
54 #define RCP14_DBGDSCRint()		MRC14(0, c0, c1, 0)
55 #define RCP14_DBGDTRRXint()		MRC14(0, c0, c5, 0)
56 #define RCP14_DBGWFAR()			MRC14(0, c0, c6, 0)
57 #define RCP14_DBGVCR()			MRC14(0, c0, c7, 0)
58 #define RCP14_DBGECR()			MRC14(0, c0, c9, 0)
59 #define RCP14_DBGDSCCR()		MRC14(0, c0, c10, 0)
60 #define RCP14_DBGDSMCR()		MRC14(0, c0, c11, 0)
61 #define RCP14_DBGDTRRXext()		MRC14(0, c0, c0, 2)
62 #define RCP14_DBGDSCRext()		MRC14(0, c0, c2, 2)
63 #define RCP14_DBGDTRTXext()		MRC14(0, c0, c3, 2)
64 #define RCP14_DBGDRCR()			MRC14(0, c0, c4, 2)
65 #define RCP14_DBGBVR0()			MRC14(0, c0, c0, 4)
66 #define RCP14_DBGBVR1()			MRC14(0, c0, c1, 4)
67 #define RCP14_DBGBVR2()			MRC14(0, c0, c2, 4)
68 #define RCP14_DBGBVR3()			MRC14(0, c0, c3, 4)
69 #define RCP14_DBGBVR4()			MRC14(0, c0, c4, 4)
70 #define RCP14_DBGBVR5()			MRC14(0, c0, c5, 4)
71 #define RCP14_DBGBVR6()			MRC14(0, c0, c6, 4)
72 #define RCP14_DBGBVR7()			MRC14(0, c0, c7, 4)
73 #define RCP14_DBGBVR8()			MRC14(0, c0, c8, 4)
74 #define RCP14_DBGBVR9()			MRC14(0, c0, c9, 4)
75 #define RCP14_DBGBVR10()		MRC14(0, c0, c10, 4)
76 #define RCP14_DBGBVR11()		MRC14(0, c0, c11, 4)
77 #define RCP14_DBGBVR12()		MRC14(0, c0, c12, 4)
78 #define RCP14_DBGBVR13()		MRC14(0, c0, c13, 4)
79 #define RCP14_DBGBVR14()		MRC14(0, c0, c14, 4)
80 #define RCP14_DBGBVR15()		MRC14(0, c0, c15, 4)
81 #define RCP14_DBGBCR0()			MRC14(0, c0, c0, 5)
82 #define RCP14_DBGBCR1()			MRC14(0, c0, c1, 5)
83 #define RCP14_DBGBCR2()			MRC14(0, c0, c2, 5)
84 #define RCP14_DBGBCR3()			MRC14(0, c0, c3, 5)
85 #define RCP14_DBGBCR4()			MRC14(0, c0, c4, 5)
86 #define RCP14_DBGBCR5()			MRC14(0, c0, c5, 5)
87 #define RCP14_DBGBCR6()			MRC14(0, c0, c6, 5)
88 #define RCP14_DBGBCR7()			MRC14(0, c0, c7, 5)
89 #define RCP14_DBGBCR8()			MRC14(0, c0, c8, 5)
90 #define RCP14_DBGBCR9()			MRC14(0, c0, c9, 5)
91 #define RCP14_DBGBCR10()		MRC14(0, c0, c10, 5)
92 #define RCP14_DBGBCR11()		MRC14(0, c0, c11, 5)
93 #define RCP14_DBGBCR12()		MRC14(0, c0, c12, 5)
94 #define RCP14_DBGBCR13()		MRC14(0, c0, c13, 5)
95 #define RCP14_DBGBCR14()		MRC14(0, c0, c14, 5)
96 #define RCP14_DBGBCR15()		MRC14(0, c0, c15, 5)
97 #define RCP14_DBGWVR0()			MRC14(0, c0, c0, 6)
98 #define RCP14_DBGWVR1()			MRC14(0, c0, c1, 6)
99 #define RCP14_DBGWVR2()			MRC14(0, c0, c2, 6)
100 #define RCP14_DBGWVR3()			MRC14(0, c0, c3, 6)
101 #define RCP14_DBGWVR4()			MRC14(0, c0, c4, 6)
102 #define RCP14_DBGWVR5()			MRC14(0, c0, c5, 6)
103 #define RCP14_DBGWVR6()			MRC14(0, c0, c6, 6)
104 #define RCP14_DBGWVR7()			MRC14(0, c0, c7, 6)
105 #define RCP14_DBGWVR8()			MRC14(0, c0, c8, 6)
106 #define RCP14_DBGWVR9()			MRC14(0, c0, c9, 6)
107 #define RCP14_DBGWVR10()		MRC14(0, c0, c10, 6)
108 #define RCP14_DBGWVR11()		MRC14(0, c0, c11, 6)
109 #define RCP14_DBGWVR12()		MRC14(0, c0, c12, 6)
110 #define RCP14_DBGWVR13()		MRC14(0, c0, c13, 6)
111 #define RCP14_DBGWVR14()		MRC14(0, c0, c14, 6)
112 #define RCP14_DBGWVR15()		MRC14(0, c0, c15, 6)
113 #define RCP14_DBGWCR0()			MRC14(0, c0, c0, 7)
114 #define RCP14_DBGWCR1()			MRC14(0, c0, c1, 7)
115 #define RCP14_DBGWCR2()			MRC14(0, c0, c2, 7)
116 #define RCP14_DBGWCR3()			MRC14(0, c0, c3, 7)
117 #define RCP14_DBGWCR4()			MRC14(0, c0, c4, 7)
118 #define RCP14_DBGWCR5()			MRC14(0, c0, c5, 7)
119 #define RCP14_DBGWCR6()			MRC14(0, c0, c6, 7)
120 #define RCP14_DBGWCR7()			MRC14(0, c0, c7, 7)
121 #define RCP14_DBGWCR8()			MRC14(0, c0, c8, 7)
122 #define RCP14_DBGWCR9()			MRC14(0, c0, c9, 7)
123 #define RCP14_DBGWCR10()		MRC14(0, c0, c10, 7)
124 #define RCP14_DBGWCR11()		MRC14(0, c0, c11, 7)
125 #define RCP14_DBGWCR12()		MRC14(0, c0, c12, 7)
126 #define RCP14_DBGWCR13()		MRC14(0, c0, c13, 7)
127 #define RCP14_DBGWCR14()		MRC14(0, c0, c14, 7)
128 #define RCP14_DBGWCR15()		MRC14(0, c0, c15, 7)
129 #define RCP14_DBGDRAR()			MRC14(0, c1, c0, 0)
130 #define RCP14_DBGBXVR0()		MRC14(0, c1, c0, 1)
131 #define RCP14_DBGBXVR1()		MRC14(0, c1, c1, 1)
132 #define RCP14_DBGBXVR2()		MRC14(0, c1, c2, 1)
133 #define RCP14_DBGBXVR3()		MRC14(0, c1, c3, 1)
134 #define RCP14_DBGBXVR4()		MRC14(0, c1, c4, 1)
135 #define RCP14_DBGBXVR5()		MRC14(0, c1, c5, 1)
136 #define RCP14_DBGBXVR6()		MRC14(0, c1, c6, 1)
137 #define RCP14_DBGBXVR7()		MRC14(0, c1, c7, 1)
138 #define RCP14_DBGBXVR8()		MRC14(0, c1, c8, 1)
139 #define RCP14_DBGBXVR9()		MRC14(0, c1, c9, 1)
140 #define RCP14_DBGBXVR10()		MRC14(0, c1, c10, 1)
141 #define RCP14_DBGBXVR11()		MRC14(0, c1, c11, 1)
142 #define RCP14_DBGBXVR12()		MRC14(0, c1, c12, 1)
143 #define RCP14_DBGBXVR13()		MRC14(0, c1, c13, 1)
144 #define RCP14_DBGBXVR14()		MRC14(0, c1, c14, 1)
145 #define RCP14_DBGBXVR15()		MRC14(0, c1, c15, 1)
146 #define RCP14_DBGOSLSR()		MRC14(0, c1, c1, 4)
147 #define RCP14_DBGOSSRR()		MRC14(0, c1, c2, 4)
148 #define RCP14_DBGOSDLR()		MRC14(0, c1, c3, 4)
149 #define RCP14_DBGPRCR()			MRC14(0, c1, c4, 4)
150 #define RCP14_DBGPRSR()			MRC14(0, c1, c5, 4)
151 #define RCP14_DBGDSAR()			MRC14(0, c2, c0, 0)
152 #define RCP14_DBGITCTRL()		MRC14(0, c7, c0, 4)
153 #define RCP14_DBGCLAIMSET()		MRC14(0, c7, c8, 6)
154 #define RCP14_DBGCLAIMCLR()		MRC14(0, c7, c9, 6)
155 #define RCP14_DBGAUTHSTATUS()		MRC14(0, c7, c14, 6)
156 #define RCP14_DBGDEVID2()		MRC14(0, c7, c0, 7)
157 #define RCP14_DBGDEVID1()		MRC14(0, c7, c1, 7)
158 #define RCP14_DBGDEVID()		MRC14(0, c7, c2, 7)
159 
160 #define WCP14_DBGDTRTXint(val)		MCR14(val, 0, c0, c5, 0)
161 #define WCP14_DBGWFAR(val)		MCR14(val, 0, c0, c6, 0)
162 #define WCP14_DBGVCR(val)		MCR14(val, 0, c0, c7, 0)
163 #define WCP14_DBGECR(val)		MCR14(val, 0, c0, c9, 0)
164 #define WCP14_DBGDSCCR(val)		MCR14(val, 0, c0, c10, 0)
165 #define WCP14_DBGDSMCR(val)		MCR14(val, 0, c0, c11, 0)
166 #define WCP14_DBGDTRRXext(val)		MCR14(val, 0, c0, c0, 2)
167 #define WCP14_DBGDSCRext(val)		MCR14(val, 0, c0, c2, 2)
168 #define WCP14_DBGDTRTXext(val)		MCR14(val, 0, c0, c3, 2)
169 #define WCP14_DBGDRCR(val)		MCR14(val, 0, c0, c4, 2)
170 #define WCP14_DBGBVR0(val)		MCR14(val, 0, c0, c0, 4)
171 #define WCP14_DBGBVR1(val)		MCR14(val, 0, c0, c1, 4)
172 #define WCP14_DBGBVR2(val)		MCR14(val, 0, c0, c2, 4)
173 #define WCP14_DBGBVR3(val)		MCR14(val, 0, c0, c3, 4)
174 #define WCP14_DBGBVR4(val)		MCR14(val, 0, c0, c4, 4)
175 #define WCP14_DBGBVR5(val)		MCR14(val, 0, c0, c5, 4)
176 #define WCP14_DBGBVR6(val)		MCR14(val, 0, c0, c6, 4)
177 #define WCP14_DBGBVR7(val)		MCR14(val, 0, c0, c7, 4)
178 #define WCP14_DBGBVR8(val)		MCR14(val, 0, c0, c8, 4)
179 #define WCP14_DBGBVR9(val)		MCR14(val, 0, c0, c9, 4)
180 #define WCP14_DBGBVR10(val)		MCR14(val, 0, c0, c10, 4)
181 #define WCP14_DBGBVR11(val)		MCR14(val, 0, c0, c11, 4)
182 #define WCP14_DBGBVR12(val)		MCR14(val, 0, c0, c12, 4)
183 #define WCP14_DBGBVR13(val)		MCR14(val, 0, c0, c13, 4)
184 #define WCP14_DBGBVR14(val)		MCR14(val, 0, c0, c14, 4)
185 #define WCP14_DBGBVR15(val)		MCR14(val, 0, c0, c15, 4)
186 #define WCP14_DBGBCR0(val)		MCR14(val, 0, c0, c0, 5)
187 #define WCP14_DBGBCR1(val)		MCR14(val, 0, c0, c1, 5)
188 #define WCP14_DBGBCR2(val)		MCR14(val, 0, c0, c2, 5)
189 #define WCP14_DBGBCR3(val)		MCR14(val, 0, c0, c3, 5)
190 #define WCP14_DBGBCR4(val)		MCR14(val, 0, c0, c4, 5)
191 #define WCP14_DBGBCR5(val)		MCR14(val, 0, c0, c5, 5)
192 #define WCP14_DBGBCR6(val)		MCR14(val, 0, c0, c6, 5)
193 #define WCP14_DBGBCR7(val)		MCR14(val, 0, c0, c7, 5)
194 #define WCP14_DBGBCR8(val)		MCR14(val, 0, c0, c8, 5)
195 #define WCP14_DBGBCR9(val)		MCR14(val, 0, c0, c9, 5)
196 #define WCP14_DBGBCR10(val)		MCR14(val, 0, c0, c10, 5)
197 #define WCP14_DBGBCR11(val)		MCR14(val, 0, c0, c11, 5)
198 #define WCP14_DBGBCR12(val)		MCR14(val, 0, c0, c12, 5)
199 #define WCP14_DBGBCR13(val)		MCR14(val, 0, c0, c13, 5)
200 #define WCP14_DBGBCR14(val)		MCR14(val, 0, c0, c14, 5)
201 #define WCP14_DBGBCR15(val)		MCR14(val, 0, c0, c15, 5)
202 #define WCP14_DBGWVR0(val)		MCR14(val, 0, c0, c0, 6)
203 #define WCP14_DBGWVR1(val)		MCR14(val, 0, c0, c1, 6)
204 #define WCP14_DBGWVR2(val)		MCR14(val, 0, c0, c2, 6)
205 #define WCP14_DBGWVR3(val)		MCR14(val, 0, c0, c3, 6)
206 #define WCP14_DBGWVR4(val)		MCR14(val, 0, c0, c4, 6)
207 #define WCP14_DBGWVR5(val)		MCR14(val, 0, c0, c5, 6)
208 #define WCP14_DBGWVR6(val)		MCR14(val, 0, c0, c6, 6)
209 #define WCP14_DBGWVR7(val)		MCR14(val, 0, c0, c7, 6)
210 #define WCP14_DBGWVR8(val)		MCR14(val, 0, c0, c8, 6)
211 #define WCP14_DBGWVR9(val)		MCR14(val, 0, c0, c9, 6)
212 #define WCP14_DBGWVR10(val)		MCR14(val, 0, c0, c10, 6)
213 #define WCP14_DBGWVR11(val)		MCR14(val, 0, c0, c11, 6)
214 #define WCP14_DBGWVR12(val)		MCR14(val, 0, c0, c12, 6)
215 #define WCP14_DBGWVR13(val)		MCR14(val, 0, c0, c13, 6)
216 #define WCP14_DBGWVR14(val)		MCR14(val, 0, c0, c14, 6)
217 #define WCP14_DBGWVR15(val)		MCR14(val, 0, c0, c15, 6)
218 #define WCP14_DBGWCR0(val)		MCR14(val, 0, c0, c0, 7)
219 #define WCP14_DBGWCR1(val)		MCR14(val, 0, c0, c1, 7)
220 #define WCP14_DBGWCR2(val)		MCR14(val, 0, c0, c2, 7)
221 #define WCP14_DBGWCR3(val)		MCR14(val, 0, c0, c3, 7)
222 #define WCP14_DBGWCR4(val)		MCR14(val, 0, c0, c4, 7)
223 #define WCP14_DBGWCR5(val)		MCR14(val, 0, c0, c5, 7)
224 #define WCP14_DBGWCR6(val)		MCR14(val, 0, c0, c6, 7)
225 #define WCP14_DBGWCR7(val)		MCR14(val, 0, c0, c7, 7)
226 #define WCP14_DBGWCR8(val)		MCR14(val, 0, c0, c8, 7)
227 #define WCP14_DBGWCR9(val)		MCR14(val, 0, c0, c9, 7)
228 #define WCP14_DBGWCR10(val)		MCR14(val, 0, c0, c10, 7)
229 #define WCP14_DBGWCR11(val)		MCR14(val, 0, c0, c11, 7)
230 #define WCP14_DBGWCR12(val)		MCR14(val, 0, c0, c12, 7)
231 #define WCP14_DBGWCR13(val)		MCR14(val, 0, c0, c13, 7)
232 #define WCP14_DBGWCR14(val)		MCR14(val, 0, c0, c14, 7)
233 #define WCP14_DBGWCR15(val)		MCR14(val, 0, c0, c15, 7)
234 #define WCP14_DBGBXVR0(val)		MCR14(val, 0, c1, c0, 1)
235 #define WCP14_DBGBXVR1(val)		MCR14(val, 0, c1, c1, 1)
236 #define WCP14_DBGBXVR2(val)		MCR14(val, 0, c1, c2, 1)
237 #define WCP14_DBGBXVR3(val)		MCR14(val, 0, c1, c3, 1)
238 #define WCP14_DBGBXVR4(val)		MCR14(val, 0, c1, c4, 1)
239 #define WCP14_DBGBXVR5(val)		MCR14(val, 0, c1, c5, 1)
240 #define WCP14_DBGBXVR6(val)		MCR14(val, 0, c1, c6, 1)
241 #define WCP14_DBGBXVR7(val)		MCR14(val, 0, c1, c7, 1)
242 #define WCP14_DBGBXVR8(val)		MCR14(val, 0, c1, c8, 1)
243 #define WCP14_DBGBXVR9(val)		MCR14(val, 0, c1, c9, 1)
244 #define WCP14_DBGBXVR10(val)		MCR14(val, 0, c1, c10, 1)
245 #define WCP14_DBGBXVR11(val)		MCR14(val, 0, c1, c11, 1)
246 #define WCP14_DBGBXVR12(val)		MCR14(val, 0, c1, c12, 1)
247 #define WCP14_DBGBXVR13(val)		MCR14(val, 0, c1, c13, 1)
248 #define WCP14_DBGBXVR14(val)		MCR14(val, 0, c1, c14, 1)
249 #define WCP14_DBGBXVR15(val)		MCR14(val, 0, c1, c15, 1)
250 #define WCP14_DBGOSLAR(val)		MCR14(val, 0, c1, c0, 4)
251 #define WCP14_DBGOSSRR(val)		MCR14(val, 0, c1, c2, 4)
252 #define WCP14_DBGOSDLR(val)		MCR14(val, 0, c1, c3, 4)
253 #define WCP14_DBGPRCR(val)		MCR14(val, 0, c1, c4, 4)
254 #define WCP14_DBGITCTRL(val)		MCR14(val, 0, c7, c0, 4)
255 #define WCP14_DBGCLAIMSET(val)		MCR14(val, 0, c7, c8, 6)
256 #define WCP14_DBGCLAIMCLR(val)		MCR14(val, 0, c7, c9, 6)
257 
258 /*
259  * ETM Registers
260  *
261  * Available only in ETMv3.3, 3.4, 3.5
262  * ETMASICCR, ETMTECR2, ETMFFRR, ETMVDEVR, ETMVDCR1, ETMVDCR2, ETMVDCR3,
263  * ETMDCVRn, ETMDCMRn
264  *
265  * Available only in ETMv3.5 as read only
266  * ETMIDR2
267  *
268  * Available only in ETMv3.5, PFTv1.0, 1.1
269  * ETMTSEVR, ETMVMIDCVR, ETMPDCR
270  *
271  * Read only
272  * ETMCCR, ETMSCR, ETMIDR, ETMCCER, ETMOSLSR
273  * ETMLSR, ETMAUTHSTATUS, ETMDEVID, ETMDEVTYPE, ETMPIDR4, ETMPIDR5, ETMPIDR6,
274  * ETMPIDR7, ETMPIDR0, ETMPIDR1, ETMPIDR2, ETMPIDR2, ETMPIDR3, ETMCIDR0,
275  * ETMCIDR1, ETMCIDR2, ETMCIDR3
276  *
277  * Write only
278  * ETMOSLAR, ETMLAR
279  * Note: ETMCCER[11] controls WO nature of certain regs. Refer ETM arch spec.
280  */
281 #define RCP14_ETMCR()			MRC14(1, c0, c0, 0)
282 #define RCP14_ETMCCR()			MRC14(1, c0, c1, 0)
283 #define RCP14_ETMTRIGGER()		MRC14(1, c0, c2, 0)
284 #define RCP14_ETMASICCR()		MRC14(1, c0, c3, 0)
285 #define RCP14_ETMSR()			MRC14(1, c0, c4, 0)
286 #define RCP14_ETMSCR()			MRC14(1, c0, c5, 0)
287 #define RCP14_ETMTSSCR()		MRC14(1, c0, c6, 0)
288 #define RCP14_ETMTECR2()		MRC14(1, c0, c7, 0)
289 #define RCP14_ETMTEEVR()		MRC14(1, c0, c8, 0)
290 #define RCP14_ETMTECR1()		MRC14(1, c0, c9, 0)
291 #define RCP14_ETMFFRR()			MRC14(1, c0, c10, 0)
292 #define RCP14_ETMFFLR()			MRC14(1, c0, c11, 0)
293 #define RCP14_ETMVDEVR()		MRC14(1, c0, c12, 0)
294 #define RCP14_ETMVDCR1()		MRC14(1, c0, c13, 0)
295 #define RCP14_ETMVDCR2()		MRC14(1, c0, c14, 0)
296 #define RCP14_ETMVDCR3()		MRC14(1, c0, c15, 0)
297 #define RCP14_ETMACVR0()		MRC14(1, c0, c0, 1)
298 #define RCP14_ETMACVR1()		MRC14(1, c0, c1, 1)
299 #define RCP14_ETMACVR2()		MRC14(1, c0, c2, 1)
300 #define RCP14_ETMACVR3()		MRC14(1, c0, c3, 1)
301 #define RCP14_ETMACVR4()		MRC14(1, c0, c4, 1)
302 #define RCP14_ETMACVR5()		MRC14(1, c0, c5, 1)
303 #define RCP14_ETMACVR6()		MRC14(1, c0, c6, 1)
304 #define RCP14_ETMACVR7()		MRC14(1, c0, c7, 1)
305 #define RCP14_ETMACVR8()		MRC14(1, c0, c8, 1)
306 #define RCP14_ETMACVR9()		MRC14(1, c0, c9, 1)
307 #define RCP14_ETMACVR10()		MRC14(1, c0, c10, 1)
308 #define RCP14_ETMACVR11()		MRC14(1, c0, c11, 1)
309 #define RCP14_ETMACVR12()		MRC14(1, c0, c12, 1)
310 #define RCP14_ETMACVR13()		MRC14(1, c0, c13, 1)
311 #define RCP14_ETMACVR14()		MRC14(1, c0, c14, 1)
312 #define RCP14_ETMACVR15()		MRC14(1, c0, c15, 1)
313 #define RCP14_ETMACTR0()		MRC14(1, c0, c0, 2)
314 #define RCP14_ETMACTR1()		MRC14(1, c0, c1, 2)
315 #define RCP14_ETMACTR2()		MRC14(1, c0, c2, 2)
316 #define RCP14_ETMACTR3()		MRC14(1, c0, c3, 2)
317 #define RCP14_ETMACTR4()		MRC14(1, c0, c4, 2)
318 #define RCP14_ETMACTR5()		MRC14(1, c0, c5, 2)
319 #define RCP14_ETMACTR6()		MRC14(1, c0, c6, 2)
320 #define RCP14_ETMACTR7()		MRC14(1, c0, c7, 2)
321 #define RCP14_ETMACTR8()		MRC14(1, c0, c8, 2)
322 #define RCP14_ETMACTR9()		MRC14(1, c0, c9, 2)
323 #define RCP14_ETMACTR10()		MRC14(1, c0, c10, 2)
324 #define RCP14_ETMACTR11()		MRC14(1, c0, c11, 2)
325 #define RCP14_ETMACTR12()		MRC14(1, c0, c12, 2)
326 #define RCP14_ETMACTR13()		MRC14(1, c0, c13, 2)
327 #define RCP14_ETMACTR14()		MRC14(1, c0, c14, 2)
328 #define RCP14_ETMACTR15()		MRC14(1, c0, c15, 2)
329 #define RCP14_ETMDCVR0()		MRC14(1, c0, c0, 3)
330 #define RCP14_ETMDCVR2()		MRC14(1, c0, c2, 3)
331 #define RCP14_ETMDCVR4()		MRC14(1, c0, c4, 3)
332 #define RCP14_ETMDCVR6()		MRC14(1, c0, c6, 3)
333 #define RCP14_ETMDCVR8()		MRC14(1, c0, c8, 3)
334 #define RCP14_ETMDCVR10()		MRC14(1, c0, c10, 3)
335 #define RCP14_ETMDCVR12()		MRC14(1, c0, c12, 3)
336 #define RCP14_ETMDCVR14()		MRC14(1, c0, c14, 3)
337 #define RCP14_ETMDCMR0()		MRC14(1, c0, c0, 4)
338 #define RCP14_ETMDCMR2()		MRC14(1, c0, c2, 4)
339 #define RCP14_ETMDCMR4()		MRC14(1, c0, c4, 4)
340 #define RCP14_ETMDCMR6()		MRC14(1, c0, c6, 4)
341 #define RCP14_ETMDCMR8()		MRC14(1, c0, c8, 4)
342 #define RCP14_ETMDCMR10()		MRC14(1, c0, c10, 4)
343 #define RCP14_ETMDCMR12()		MRC14(1, c0, c12, 4)
344 #define RCP14_ETMDCMR14()		MRC14(1, c0, c14, 4)
345 #define RCP14_ETMCNTRLDVR0()		MRC14(1, c0, c0, 5)
346 #define RCP14_ETMCNTRLDVR1()		MRC14(1, c0, c1, 5)
347 #define RCP14_ETMCNTRLDVR2()		MRC14(1, c0, c2, 5)
348 #define RCP14_ETMCNTRLDVR3()		MRC14(1, c0, c3, 5)
349 #define RCP14_ETMCNTENR0()		MRC14(1, c0, c4, 5)
350 #define RCP14_ETMCNTENR1()		MRC14(1, c0, c5, 5)
351 #define RCP14_ETMCNTENR2()		MRC14(1, c0, c6, 5)
352 #define RCP14_ETMCNTENR3()		MRC14(1, c0, c7, 5)
353 #define RCP14_ETMCNTRLDEVR0()		MRC14(1, c0, c8, 5)
354 #define RCP14_ETMCNTRLDEVR1()		MRC14(1, c0, c9, 5)
355 #define RCP14_ETMCNTRLDEVR2()		MRC14(1, c0, c10, 5)
356 #define RCP14_ETMCNTRLDEVR3()		MRC14(1, c0, c11, 5)
357 #define RCP14_ETMCNTVR0()		MRC14(1, c0, c12, 5)
358 #define RCP14_ETMCNTVR1()		MRC14(1, c0, c13, 5)
359 #define RCP14_ETMCNTVR2()		MRC14(1, c0, c14, 5)
360 #define RCP14_ETMCNTVR3()		MRC14(1, c0, c15, 5)
361 #define RCP14_ETMSQ12EVR()		MRC14(1, c0, c0, 6)
362 #define RCP14_ETMSQ21EVR()		MRC14(1, c0, c1, 6)
363 #define RCP14_ETMSQ23EVR()		MRC14(1, c0, c2, 6)
364 #define RCP14_ETMSQ31EVR()		MRC14(1, c0, c3, 6)
365 #define RCP14_ETMSQ32EVR()		MRC14(1, c0, c4, 6)
366 #define RCP14_ETMSQ13EVR()		MRC14(1, c0, c5, 6)
367 #define RCP14_ETMSQR()			MRC14(1, c0, c7, 6)
368 #define RCP14_ETMEXTOUTEVR0()		MRC14(1, c0, c8, 6)
369 #define RCP14_ETMEXTOUTEVR1()		MRC14(1, c0, c9, 6)
370 #define RCP14_ETMEXTOUTEVR2()		MRC14(1, c0, c10, 6)
371 #define RCP14_ETMEXTOUTEVR3()		MRC14(1, c0, c11, 6)
372 #define RCP14_ETMCIDCVR0()		MRC14(1, c0, c12, 6)
373 #define RCP14_ETMCIDCVR1()		MRC14(1, c0, c13, 6)
374 #define RCP14_ETMCIDCVR2()		MRC14(1, c0, c14, 6)
375 #define RCP14_ETMCIDCMR()		MRC14(1, c0, c15, 6)
376 #define RCP14_ETMIMPSPEC0()		MRC14(1, c0, c0, 7)
377 #define RCP14_ETMIMPSPEC1()		MRC14(1, c0, c1, 7)
378 #define RCP14_ETMIMPSPEC2()		MRC14(1, c0, c2, 7)
379 #define RCP14_ETMIMPSPEC3()		MRC14(1, c0, c3, 7)
380 #define RCP14_ETMIMPSPEC4()		MRC14(1, c0, c4, 7)
381 #define RCP14_ETMIMPSPEC5()		MRC14(1, c0, c5, 7)
382 #define RCP14_ETMIMPSPEC6()		MRC14(1, c0, c6, 7)
383 #define RCP14_ETMIMPSPEC7()		MRC14(1, c0, c7, 7)
384 #define RCP14_ETMSYNCFR()		MRC14(1, c0, c8, 7)
385 #define RCP14_ETMIDR()			MRC14(1, c0, c9, 7)
386 #define RCP14_ETMCCER()			MRC14(1, c0, c10, 7)
387 #define RCP14_ETMEXTINSELR()		MRC14(1, c0, c11, 7)
388 #define RCP14_ETMTESSEICR()		MRC14(1, c0, c12, 7)
389 #define RCP14_ETMEIBCR()		MRC14(1, c0, c13, 7)
390 #define RCP14_ETMTSEVR()		MRC14(1, c0, c14, 7)
391 #define RCP14_ETMAUXCR()		MRC14(1, c0, c15, 7)
392 #define RCP14_ETMTRACEIDR()		MRC14(1, c1, c0, 0)
393 #define RCP14_ETMIDR2()			MRC14(1, c1, c2, 0)
394 #define RCP14_ETMVMIDCVR()		MRC14(1, c1, c0, 1)
395 #define RCP14_ETMOSLSR()		MRC14(1, c1, c1, 4)
396 /* Not available in PFTv1.1 */
397 #define RCP14_ETMOSSRR()		MRC14(1, c1, c2, 4)
398 #define RCP14_ETMPDCR()			MRC14(1, c1, c4, 4)
399 #define RCP14_ETMPDSR()			MRC14(1, c1, c5, 4)
400 #define RCP14_ETMITCTRL()		MRC14(1, c7, c0, 4)
401 #define RCP14_ETMCLAIMSET()		MRC14(1, c7, c8, 6)
402 #define RCP14_ETMCLAIMCLR()		MRC14(1, c7, c9, 6)
403 #define RCP14_ETMLSR()			MRC14(1, c7, c13, 6)
404 #define RCP14_ETMAUTHSTATUS()		MRC14(1, c7, c14, 6)
405 #define RCP14_ETMDEVID()		MRC14(1, c7, c2, 7)
406 #define RCP14_ETMDEVTYPE()		MRC14(1, c7, c3, 7)
407 #define RCP14_ETMPIDR4()		MRC14(1, c7, c4, 7)
408 #define RCP14_ETMPIDR5()		MRC14(1, c7, c5, 7)
409 #define RCP14_ETMPIDR6()		MRC14(1, c7, c6, 7)
410 #define RCP14_ETMPIDR7()		MRC14(1, c7, c7, 7)
411 #define RCP14_ETMPIDR0()		MRC14(1, c7, c8, 7)
412 #define RCP14_ETMPIDR1()		MRC14(1, c7, c9, 7)
413 #define RCP14_ETMPIDR2()		MRC14(1, c7, c10, 7)
414 #define RCP14_ETMPIDR3()		MRC14(1, c7, c11, 7)
415 #define RCP14_ETMCIDR0()		MRC14(1, c7, c12, 7)
416 #define RCP14_ETMCIDR1()		MRC14(1, c7, c13, 7)
417 #define RCP14_ETMCIDR2()		MRC14(1, c7, c14, 7)
418 #define RCP14_ETMCIDR3()		MRC14(1, c7, c15, 7)
419 
420 #define WCP14_ETMCR(val)		MCR14(val, 1, c0, c0, 0)
421 #define WCP14_ETMTRIGGER(val)		MCR14(val, 1, c0, c2, 0)
422 #define WCP14_ETMASICCR(val)		MCR14(val, 1, c0, c3, 0)
423 #define WCP14_ETMSR(val)		MCR14(val, 1, c0, c4, 0)
424 #define WCP14_ETMTSSCR(val)		MCR14(val, 1, c0, c6, 0)
425 #define WCP14_ETMTECR2(val)		MCR14(val, 1, c0, c7, 0)
426 #define WCP14_ETMTEEVR(val)		MCR14(val, 1, c0, c8, 0)
427 #define WCP14_ETMTECR1(val)		MCR14(val, 1, c0, c9, 0)
428 #define WCP14_ETMFFRR(val)		MCR14(val, 1, c0, c10, 0)
429 #define WCP14_ETMFFLR(val)		MCR14(val, 1, c0, c11, 0)
430 #define WCP14_ETMVDEVR(val)		MCR14(val, 1, c0, c12, 0)
431 #define WCP14_ETMVDCR1(val)		MCR14(val, 1, c0, c13, 0)
432 #define WCP14_ETMVDCR2(val)		MCR14(val, 1, c0, c14, 0)
433 #define WCP14_ETMVDCR3(val)		MCR14(val, 1, c0, c15, 0)
434 #define WCP14_ETMACVR0(val)		MCR14(val, 1, c0, c0, 1)
435 #define WCP14_ETMACVR1(val)		MCR14(val, 1, c0, c1, 1)
436 #define WCP14_ETMACVR2(val)		MCR14(val, 1, c0, c2, 1)
437 #define WCP14_ETMACVR3(val)		MCR14(val, 1, c0, c3, 1)
438 #define WCP14_ETMACVR4(val)		MCR14(val, 1, c0, c4, 1)
439 #define WCP14_ETMACVR5(val)		MCR14(val, 1, c0, c5, 1)
440 #define WCP14_ETMACVR6(val)		MCR14(val, 1, c0, c6, 1)
441 #define WCP14_ETMACVR7(val)		MCR14(val, 1, c0, c7, 1)
442 #define WCP14_ETMACVR8(val)		MCR14(val, 1, c0, c8, 1)
443 #define WCP14_ETMACVR9(val)		MCR14(val, 1, c0, c9, 1)
444 #define WCP14_ETMACVR10(val)		MCR14(val, 1, c0, c10, 1)
445 #define WCP14_ETMACVR11(val)		MCR14(val, 1, c0, c11, 1)
446 #define WCP14_ETMACVR12(val)		MCR14(val, 1, c0, c12, 1)
447 #define WCP14_ETMACVR13(val)		MCR14(val, 1, c0, c13, 1)
448 #define WCP14_ETMACVR14(val)		MCR14(val, 1, c0, c14, 1)
449 #define WCP14_ETMACVR15(val)		MCR14(val, 1, c0, c15, 1)
450 #define WCP14_ETMACTR0(val)		MCR14(val, 1, c0, c0, 2)
451 #define WCP14_ETMACTR1(val)		MCR14(val, 1, c0, c1, 2)
452 #define WCP14_ETMACTR2(val)		MCR14(val, 1, c0, c2, 2)
453 #define WCP14_ETMACTR3(val)		MCR14(val, 1, c0, c3, 2)
454 #define WCP14_ETMACTR4(val)		MCR14(val, 1, c0, c4, 2)
455 #define WCP14_ETMACTR5(val)		MCR14(val, 1, c0, c5, 2)
456 #define WCP14_ETMACTR6(val)		MCR14(val, 1, c0, c6, 2)
457 #define WCP14_ETMACTR7(val)		MCR14(val, 1, c0, c7, 2)
458 #define WCP14_ETMACTR8(val)		MCR14(val, 1, c0, c8, 2)
459 #define WCP14_ETMACTR9(val)		MCR14(val, 1, c0, c9, 2)
460 #define WCP14_ETMACTR10(val)		MCR14(val, 1, c0, c10, 2)
461 #define WCP14_ETMACTR11(val)		MCR14(val, 1, c0, c11, 2)
462 #define WCP14_ETMACTR12(val)		MCR14(val, 1, c0, c12, 2)
463 #define WCP14_ETMACTR13(val)		MCR14(val, 1, c0, c13, 2)
464 #define WCP14_ETMACTR14(val)		MCR14(val, 1, c0, c14, 2)
465 #define WCP14_ETMACTR15(val)		MCR14(val, 1, c0, c15, 2)
466 #define WCP14_ETMDCVR0(val)		MCR14(val, 1, c0, c0, 3)
467 #define WCP14_ETMDCVR2(val)		MCR14(val, 1, c0, c2, 3)
468 #define WCP14_ETMDCVR4(val)		MCR14(val, 1, c0, c4, 3)
469 #define WCP14_ETMDCVR6(val)		MCR14(val, 1, c0, c6, 3)
470 #define WCP14_ETMDCVR8(val)		MCR14(val, 1, c0, c8, 3)
471 #define WCP14_ETMDCVR10(val)		MCR14(val, 1, c0, c10, 3)
472 #define WCP14_ETMDCVR12(val)		MCR14(val, 1, c0, c12, 3)
473 #define WCP14_ETMDCVR14(val)		MCR14(val, 1, c0, c14, 3)
474 #define WCP14_ETMDCMR0(val)		MCR14(val, 1, c0, c0, 4)
475 #define WCP14_ETMDCMR2(val)		MCR14(val, 1, c0, c2, 4)
476 #define WCP14_ETMDCMR4(val)		MCR14(val, 1, c0, c4, 4)
477 #define WCP14_ETMDCMR6(val)		MCR14(val, 1, c0, c6, 4)
478 #define WCP14_ETMDCMR8(val)		MCR14(val, 1, c0, c8, 4)
479 #define WCP14_ETMDCMR10(val)		MCR14(val, 1, c0, c10, 4)
480 #define WCP14_ETMDCMR12(val)		MCR14(val, 1, c0, c12, 4)
481 #define WCP14_ETMDCMR14(val)		MCR14(val, 1, c0, c14, 4)
482 #define WCP14_ETMCNTRLDVR0(val)		MCR14(val, 1, c0, c0, 5)
483 #define WCP14_ETMCNTRLDVR1(val)		MCR14(val, 1, c0, c1, 5)
484 #define WCP14_ETMCNTRLDVR2(val)		MCR14(val, 1, c0, c2, 5)
485 #define WCP14_ETMCNTRLDVR3(val)		MCR14(val, 1, c0, c3, 5)
486 #define WCP14_ETMCNTENR0(val)		MCR14(val, 1, c0, c4, 5)
487 #define WCP14_ETMCNTENR1(val)		MCR14(val, 1, c0, c5, 5)
488 #define WCP14_ETMCNTENR2(val)		MCR14(val, 1, c0, c6, 5)
489 #define WCP14_ETMCNTENR3(val)		MCR14(val, 1, c0, c7, 5)
490 #define WCP14_ETMCNTRLDEVR0(val)	MCR14(val, 1, c0, c8, 5)
491 #define WCP14_ETMCNTRLDEVR1(val)	MCR14(val, 1, c0, c9, 5)
492 #define WCP14_ETMCNTRLDEVR2(val)	MCR14(val, 1, c0, c10, 5)
493 #define WCP14_ETMCNTRLDEVR3(val)	MCR14(val, 1, c0, c11, 5)
494 #define WCP14_ETMCNTVR0(val)		MCR14(val, 1, c0, c12, 5)
495 #define WCP14_ETMCNTVR1(val)		MCR14(val, 1, c0, c13, 5)
496 #define WCP14_ETMCNTVR2(val)		MCR14(val, 1, c0, c14, 5)
497 #define WCP14_ETMCNTVR3(val)		MCR14(val, 1, c0, c15, 5)
498 #define WCP14_ETMSQ12EVR(val)		MCR14(val, 1, c0, c0, 6)
499 #define WCP14_ETMSQ21EVR(val)		MCR14(val, 1, c0, c1, 6)
500 #define WCP14_ETMSQ23EVR(val)		MCR14(val, 1, c0, c2, 6)
501 #define WCP14_ETMSQ31EVR(val)		MCR14(val, 1, c0, c3, 6)
502 #define WCP14_ETMSQ32EVR(val)		MCR14(val, 1, c0, c4, 6)
503 #define WCP14_ETMSQ13EVR(val)		MCR14(val, 1, c0, c5, 6)
504 #define WCP14_ETMSQR(val)		MCR14(val, 1, c0, c7, 6)
505 #define WCP14_ETMEXTOUTEVR0(val)	MCR14(val, 1, c0, c8, 6)
506 #define WCP14_ETMEXTOUTEVR1(val)	MCR14(val, 1, c0, c9, 6)
507 #define WCP14_ETMEXTOUTEVR2(val)	MCR14(val, 1, c0, c10, 6)
508 #define WCP14_ETMEXTOUTEVR3(val)	MCR14(val, 1, c0, c11, 6)
509 #define WCP14_ETMCIDCVR0(val)		MCR14(val, 1, c0, c12, 6)
510 #define WCP14_ETMCIDCVR1(val)		MCR14(val, 1, c0, c13, 6)
511 #define WCP14_ETMCIDCVR2(val)		MCR14(val, 1, c0, c14, 6)
512 #define WCP14_ETMCIDCMR(val)		MCR14(val, 1, c0, c15, 6)
513 #define WCP14_ETMIMPSPEC0(val)		MCR14(val, 1, c0, c0, 7)
514 #define WCP14_ETMIMPSPEC1(val)		MCR14(val, 1, c0, c1, 7)
515 #define WCP14_ETMIMPSPEC2(val)		MCR14(val, 1, c0, c2, 7)
516 #define WCP14_ETMIMPSPEC3(val)		MCR14(val, 1, c0, c3, 7)
517 #define WCP14_ETMIMPSPEC4(val)		MCR14(val, 1, c0, c4, 7)
518 #define WCP14_ETMIMPSPEC5(val)		MCR14(val, 1, c0, c5, 7)
519 #define WCP14_ETMIMPSPEC6(val)		MCR14(val, 1, c0, c6, 7)
520 #define WCP14_ETMIMPSPEC7(val)		MCR14(val, 1, c0, c7, 7)
521 /* Can be read only in ETMv3.4, ETMv3.5 */
522 #define WCP14_ETMSYNCFR(val)		MCR14(val, 1, c0, c8, 7)
523 #define WCP14_ETMEXTINSELR(val)		MCR14(val, 1, c0, c11, 7)
524 #define WCP14_ETMTESSEICR(val)		MCR14(val, 1, c0, c12, 7)
525 #define WCP14_ETMEIBCR(val)		MCR14(val, 1, c0, c13, 7)
526 #define WCP14_ETMTSEVR(val)		MCR14(val, 1, c0, c14, 7)
527 #define WCP14_ETMAUXCR(val)		MCR14(val, 1, c0, c15, 7)
528 #define WCP14_ETMTRACEIDR(val)		MCR14(val, 1, c1, c0, 0)
529 #define WCP14_ETMIDR2(val)		MCR14(val, 1, c1, c2, 0)
530 #define WCP14_ETMVMIDCVR(val)		MCR14(val, 1, c1, c0, 1)
531 #define WCP14_ETMOSLAR(val)		MCR14(val, 1, c1, c0, 4)
532 /* Not available in PFTv1.1 */
533 #define WCP14_ETMOSSRR(val)		MCR14(val, 1, c1, c2, 4)
534 #define WCP14_ETMPDCR(val)		MCR14(val, 1, c1, c4, 4)
535 #define WCP14_ETMPDSR(val)		MCR14(val, 1, c1, c5, 4)
536 #define WCP14_ETMITCTRL(val)		MCR14(val, 1, c7, c0, 4)
537 #define WCP14_ETMCLAIMSET(val)		MCR14(val, 1, c7, c8, 6)
538 #define WCP14_ETMCLAIMCLR(val)		MCR14(val, 1, c7, c9, 6)
539 /* Writes to this from CP14 interface are ignored */
540 #define WCP14_ETMLAR(val)		MCR14(val, 1, c7, c12, 6)
541 
542 #endif
543