1 // SPDX-License-Identifier: GPL-2.0
3 * Copyright (c) 2012, The Linux Foundation. All rights reserved.
6 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
8 #include <linux/kernel.h>
9 #include <linux/types.h>
10 #include <linux/bug.h>
11 #include <asm/hardware/cp14.h>
13 #include "coresight-etm.h"
15 int etm_readl_cp14(u32 reg
, unsigned int *val
)
19 *val
= etm_read(ETMCR
);
22 *val
= etm_read(ETMCCR
);
25 *val
= etm_read(ETMTRIGGER
);
28 *val
= etm_read(ETMSR
);
31 *val
= etm_read(ETMSCR
);
34 *val
= etm_read(ETMTSSCR
);
37 *val
= etm_read(ETMTEEVR
);
40 *val
= etm_read(ETMTECR1
);
43 *val
= etm_read(ETMFFLR
);
46 *val
= etm_read(ETMACVR0
);
49 *val
= etm_read(ETMACVR1
);
52 *val
= etm_read(ETMACVR2
);
55 *val
= etm_read(ETMACVR3
);
58 *val
= etm_read(ETMACVR4
);
61 *val
= etm_read(ETMACVR5
);
64 *val
= etm_read(ETMACVR6
);
67 *val
= etm_read(ETMACVR7
);
70 *val
= etm_read(ETMACVR8
);
73 *val
= etm_read(ETMACVR9
);
76 *val
= etm_read(ETMACVR10
);
79 *val
= etm_read(ETMACVR11
);
82 *val
= etm_read(ETMACVR12
);
85 *val
= etm_read(ETMACVR13
);
88 *val
= etm_read(ETMACVR14
);
91 *val
= etm_read(ETMACVR15
);
94 *val
= etm_read(ETMACTR0
);
97 *val
= etm_read(ETMACTR1
);
100 *val
= etm_read(ETMACTR2
);
103 *val
= etm_read(ETMACTR3
);
106 *val
= etm_read(ETMACTR4
);
109 *val
= etm_read(ETMACTR5
);
112 *val
= etm_read(ETMACTR6
);
115 *val
= etm_read(ETMACTR7
);
118 *val
= etm_read(ETMACTR8
);
121 *val
= etm_read(ETMACTR9
);
124 *val
= etm_read(ETMACTR10
);
127 *val
= etm_read(ETMACTR11
);
130 *val
= etm_read(ETMACTR12
);
133 *val
= etm_read(ETMACTR13
);
136 *val
= etm_read(ETMACTR14
);
139 *val
= etm_read(ETMACTR15
);
141 case ETMCNTRLDVRn(0):
142 *val
= etm_read(ETMCNTRLDVR0
);
144 case ETMCNTRLDVRn(1):
145 *val
= etm_read(ETMCNTRLDVR1
);
147 case ETMCNTRLDVRn(2):
148 *val
= etm_read(ETMCNTRLDVR2
);
150 case ETMCNTRLDVRn(3):
151 *val
= etm_read(ETMCNTRLDVR3
);
154 *val
= etm_read(ETMCNTENR0
);
157 *val
= etm_read(ETMCNTENR1
);
160 *val
= etm_read(ETMCNTENR2
);
163 *val
= etm_read(ETMCNTENR3
);
165 case ETMCNTRLDEVRn(0):
166 *val
= etm_read(ETMCNTRLDEVR0
);
168 case ETMCNTRLDEVRn(1):
169 *val
= etm_read(ETMCNTRLDEVR1
);
171 case ETMCNTRLDEVRn(2):
172 *val
= etm_read(ETMCNTRLDEVR2
);
174 case ETMCNTRLDEVRn(3):
175 *val
= etm_read(ETMCNTRLDEVR3
);
178 *val
= etm_read(ETMCNTVR0
);
181 *val
= etm_read(ETMCNTVR1
);
184 *val
= etm_read(ETMCNTVR2
);
187 *val
= etm_read(ETMCNTVR3
);
190 *val
= etm_read(ETMSQ12EVR
);
193 *val
= etm_read(ETMSQ21EVR
);
196 *val
= etm_read(ETMSQ23EVR
);
199 *val
= etm_read(ETMSQ31EVR
);
202 *val
= etm_read(ETMSQ32EVR
);
205 *val
= etm_read(ETMSQ13EVR
);
208 *val
= etm_read(ETMSQR
);
210 case ETMEXTOUTEVRn(0):
211 *val
= etm_read(ETMEXTOUTEVR0
);
213 case ETMEXTOUTEVRn(1):
214 *val
= etm_read(ETMEXTOUTEVR1
);
216 case ETMEXTOUTEVRn(2):
217 *val
= etm_read(ETMEXTOUTEVR2
);
219 case ETMEXTOUTEVRn(3):
220 *val
= etm_read(ETMEXTOUTEVR3
);
223 *val
= etm_read(ETMCIDCVR0
);
226 *val
= etm_read(ETMCIDCVR1
);
229 *val
= etm_read(ETMCIDCVR2
);
232 *val
= etm_read(ETMCIDCMR
);
235 *val
= etm_read(ETMIMPSPEC0
);
238 *val
= etm_read(ETMIMPSPEC1
);
241 *val
= etm_read(ETMIMPSPEC2
);
244 *val
= etm_read(ETMIMPSPEC3
);
247 *val
= etm_read(ETMIMPSPEC4
);
250 *val
= etm_read(ETMIMPSPEC5
);
253 *val
= etm_read(ETMIMPSPEC6
);
256 *val
= etm_read(ETMIMPSPEC7
);
259 *val
= etm_read(ETMSYNCFR
);
262 *val
= etm_read(ETMIDR
);
265 *val
= etm_read(ETMCCER
);
268 *val
= etm_read(ETMEXTINSELR
);
271 *val
= etm_read(ETMTESSEICR
);
274 *val
= etm_read(ETMEIBCR
);
277 *val
= etm_read(ETMTSEVR
);
280 *val
= etm_read(ETMAUXCR
);
283 *val
= etm_read(ETMTRACEIDR
);
286 *val
= etm_read(ETMVMIDCVR
);
289 *val
= etm_read(ETMOSLSR
);
292 *val
= etm_read(ETMOSSRR
);
295 *val
= etm_read(ETMPDCR
);
298 *val
= etm_read(ETMPDSR
);
306 int etm_writel_cp14(u32 reg
, u32 val
)
310 etm_write(val
, ETMCR
);
313 etm_write(val
, ETMTRIGGER
);
316 etm_write(val
, ETMSR
);
319 etm_write(val
, ETMTSSCR
);
322 etm_write(val
, ETMTEEVR
);
325 etm_write(val
, ETMTECR1
);
328 etm_write(val
, ETMFFLR
);
331 etm_write(val
, ETMACVR0
);
334 etm_write(val
, ETMACVR1
);
337 etm_write(val
, ETMACVR2
);
340 etm_write(val
, ETMACVR3
);
343 etm_write(val
, ETMACVR4
);
346 etm_write(val
, ETMACVR5
);
349 etm_write(val
, ETMACVR6
);
352 etm_write(val
, ETMACVR7
);
355 etm_write(val
, ETMACVR8
);
358 etm_write(val
, ETMACVR9
);
361 etm_write(val
, ETMACVR10
);
364 etm_write(val
, ETMACVR11
);
367 etm_write(val
, ETMACVR12
);
370 etm_write(val
, ETMACVR13
);
373 etm_write(val
, ETMACVR14
);
376 etm_write(val
, ETMACVR15
);
379 etm_write(val
, ETMACTR0
);
382 etm_write(val
, ETMACTR1
);
385 etm_write(val
, ETMACTR2
);
388 etm_write(val
, ETMACTR3
);
391 etm_write(val
, ETMACTR4
);
394 etm_write(val
, ETMACTR5
);
397 etm_write(val
, ETMACTR6
);
400 etm_write(val
, ETMACTR7
);
403 etm_write(val
, ETMACTR8
);
406 etm_write(val
, ETMACTR9
);
409 etm_write(val
, ETMACTR10
);
412 etm_write(val
, ETMACTR11
);
415 etm_write(val
, ETMACTR12
);
418 etm_write(val
, ETMACTR13
);
421 etm_write(val
, ETMACTR14
);
424 etm_write(val
, ETMACTR15
);
426 case ETMCNTRLDVRn(0):
427 etm_write(val
, ETMCNTRLDVR0
);
429 case ETMCNTRLDVRn(1):
430 etm_write(val
, ETMCNTRLDVR1
);
432 case ETMCNTRLDVRn(2):
433 etm_write(val
, ETMCNTRLDVR2
);
435 case ETMCNTRLDVRn(3):
436 etm_write(val
, ETMCNTRLDVR3
);
439 etm_write(val
, ETMCNTENR0
);
442 etm_write(val
, ETMCNTENR1
);
445 etm_write(val
, ETMCNTENR2
);
448 etm_write(val
, ETMCNTENR3
);
450 case ETMCNTRLDEVRn(0):
451 etm_write(val
, ETMCNTRLDEVR0
);
453 case ETMCNTRLDEVRn(1):
454 etm_write(val
, ETMCNTRLDEVR1
);
456 case ETMCNTRLDEVRn(2):
457 etm_write(val
, ETMCNTRLDEVR2
);
459 case ETMCNTRLDEVRn(3):
460 etm_write(val
, ETMCNTRLDEVR3
);
463 etm_write(val
, ETMCNTVR0
);
466 etm_write(val
, ETMCNTVR1
);
469 etm_write(val
, ETMCNTVR2
);
472 etm_write(val
, ETMCNTVR3
);
475 etm_write(val
, ETMSQ12EVR
);
478 etm_write(val
, ETMSQ21EVR
);
481 etm_write(val
, ETMSQ23EVR
);
484 etm_write(val
, ETMSQ31EVR
);
487 etm_write(val
, ETMSQ32EVR
);
490 etm_write(val
, ETMSQ13EVR
);
493 etm_write(val
, ETMSQR
);
495 case ETMEXTOUTEVRn(0):
496 etm_write(val
, ETMEXTOUTEVR0
);
498 case ETMEXTOUTEVRn(1):
499 etm_write(val
, ETMEXTOUTEVR1
);
501 case ETMEXTOUTEVRn(2):
502 etm_write(val
, ETMEXTOUTEVR2
);
504 case ETMEXTOUTEVRn(3):
505 etm_write(val
, ETMEXTOUTEVR3
);
508 etm_write(val
, ETMCIDCVR0
);
511 etm_write(val
, ETMCIDCVR1
);
514 etm_write(val
, ETMCIDCVR2
);
517 etm_write(val
, ETMCIDCMR
);
520 etm_write(val
, ETMIMPSPEC0
);
523 etm_write(val
, ETMIMPSPEC1
);
526 etm_write(val
, ETMIMPSPEC2
);
529 etm_write(val
, ETMIMPSPEC3
);
532 etm_write(val
, ETMIMPSPEC4
);
535 etm_write(val
, ETMIMPSPEC5
);
538 etm_write(val
, ETMIMPSPEC6
);
541 etm_write(val
, ETMIMPSPEC7
);
544 etm_write(val
, ETMSYNCFR
);
547 etm_write(val
, ETMEXTINSELR
);
550 etm_write(val
, ETMTESSEICR
);
553 etm_write(val
, ETMEIBCR
);
556 etm_write(val
, ETMTSEVR
);
559 etm_write(val
, ETMAUXCR
);
562 etm_write(val
, ETMTRACEIDR
);
565 etm_write(val
, ETMVMIDCVR
);
568 etm_write(val
, ETMOSLAR
);
571 etm_write(val
, ETMOSSRR
);
574 etm_write(val
, ETMPDCR
);
577 etm_write(val
, ETMPDSR
);