1 /* Copyright (c) 2012, The Linux Foundation. All rights reserved.
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.
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.
13 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
15 #include <linux/kernel.h>
16 #include <linux/types.h>
17 #include <linux/bug.h>
18 #include <asm/hardware/cp14.h>
20 #include "coresight-etm.h"
22 int etm_readl_cp14(u32 reg
, unsigned int *val
)
26 *val
= etm_read(ETMCR
);
29 *val
= etm_read(ETMCCR
);
32 *val
= etm_read(ETMTRIGGER
);
35 *val
= etm_read(ETMSR
);
38 *val
= etm_read(ETMSCR
);
41 *val
= etm_read(ETMTSSCR
);
44 *val
= etm_read(ETMTEEVR
);
47 *val
= etm_read(ETMTECR1
);
50 *val
= etm_read(ETMFFLR
);
53 *val
= etm_read(ETMACVR0
);
56 *val
= etm_read(ETMACVR1
);
59 *val
= etm_read(ETMACVR2
);
62 *val
= etm_read(ETMACVR3
);
65 *val
= etm_read(ETMACVR4
);
68 *val
= etm_read(ETMACVR5
);
71 *val
= etm_read(ETMACVR6
);
74 *val
= etm_read(ETMACVR7
);
77 *val
= etm_read(ETMACVR8
);
80 *val
= etm_read(ETMACVR9
);
83 *val
= etm_read(ETMACVR10
);
86 *val
= etm_read(ETMACVR11
);
89 *val
= etm_read(ETMACVR12
);
92 *val
= etm_read(ETMACVR13
);
95 *val
= etm_read(ETMACVR14
);
98 *val
= etm_read(ETMACVR15
);
101 *val
= etm_read(ETMACTR0
);
104 *val
= etm_read(ETMACTR1
);
107 *val
= etm_read(ETMACTR2
);
110 *val
= etm_read(ETMACTR3
);
113 *val
= etm_read(ETMACTR4
);
116 *val
= etm_read(ETMACTR5
);
119 *val
= etm_read(ETMACTR6
);
122 *val
= etm_read(ETMACTR7
);
125 *val
= etm_read(ETMACTR8
);
128 *val
= etm_read(ETMACTR9
);
131 *val
= etm_read(ETMACTR10
);
134 *val
= etm_read(ETMACTR11
);
137 *val
= etm_read(ETMACTR12
);
140 *val
= etm_read(ETMACTR13
);
143 *val
= etm_read(ETMACTR14
);
146 *val
= etm_read(ETMACTR15
);
148 case ETMCNTRLDVRn(0):
149 *val
= etm_read(ETMCNTRLDVR0
);
151 case ETMCNTRLDVRn(1):
152 *val
= etm_read(ETMCNTRLDVR1
);
154 case ETMCNTRLDVRn(2):
155 *val
= etm_read(ETMCNTRLDVR2
);
157 case ETMCNTRLDVRn(3):
158 *val
= etm_read(ETMCNTRLDVR3
);
161 *val
= etm_read(ETMCNTENR0
);
164 *val
= etm_read(ETMCNTENR1
);
167 *val
= etm_read(ETMCNTENR2
);
170 *val
= etm_read(ETMCNTENR3
);
172 case ETMCNTRLDEVRn(0):
173 *val
= etm_read(ETMCNTRLDEVR0
);
175 case ETMCNTRLDEVRn(1):
176 *val
= etm_read(ETMCNTRLDEVR1
);
178 case ETMCNTRLDEVRn(2):
179 *val
= etm_read(ETMCNTRLDEVR2
);
181 case ETMCNTRLDEVRn(3):
182 *val
= etm_read(ETMCNTRLDEVR3
);
185 *val
= etm_read(ETMCNTVR0
);
188 *val
= etm_read(ETMCNTVR1
);
191 *val
= etm_read(ETMCNTVR2
);
194 *val
= etm_read(ETMCNTVR3
);
197 *val
= etm_read(ETMSQ12EVR
);
200 *val
= etm_read(ETMSQ21EVR
);
203 *val
= etm_read(ETMSQ23EVR
);
206 *val
= etm_read(ETMSQ31EVR
);
209 *val
= etm_read(ETMSQ32EVR
);
212 *val
= etm_read(ETMSQ13EVR
);
215 *val
= etm_read(ETMSQR
);
217 case ETMEXTOUTEVRn(0):
218 *val
= etm_read(ETMEXTOUTEVR0
);
220 case ETMEXTOUTEVRn(1):
221 *val
= etm_read(ETMEXTOUTEVR1
);
223 case ETMEXTOUTEVRn(2):
224 *val
= etm_read(ETMEXTOUTEVR2
);
226 case ETMEXTOUTEVRn(3):
227 *val
= etm_read(ETMEXTOUTEVR3
);
230 *val
= etm_read(ETMCIDCVR0
);
233 *val
= etm_read(ETMCIDCVR1
);
236 *val
= etm_read(ETMCIDCVR2
);
239 *val
= etm_read(ETMCIDCMR
);
242 *val
= etm_read(ETMIMPSPEC0
);
245 *val
= etm_read(ETMIMPSPEC1
);
248 *val
= etm_read(ETMIMPSPEC2
);
251 *val
= etm_read(ETMIMPSPEC3
);
254 *val
= etm_read(ETMIMPSPEC4
);
257 *val
= etm_read(ETMIMPSPEC5
);
260 *val
= etm_read(ETMIMPSPEC6
);
263 *val
= etm_read(ETMIMPSPEC7
);
266 *val
= etm_read(ETMSYNCFR
);
269 *val
= etm_read(ETMIDR
);
272 *val
= etm_read(ETMCCER
);
275 *val
= etm_read(ETMEXTINSELR
);
278 *val
= etm_read(ETMTESSEICR
);
281 *val
= etm_read(ETMEIBCR
);
284 *val
= etm_read(ETMTSEVR
);
287 *val
= etm_read(ETMAUXCR
);
290 *val
= etm_read(ETMTRACEIDR
);
293 *val
= etm_read(ETMVMIDCVR
);
296 *val
= etm_read(ETMOSLSR
);
299 *val
= etm_read(ETMOSSRR
);
302 *val
= etm_read(ETMPDCR
);
305 *val
= etm_read(ETMPDSR
);
313 int etm_writel_cp14(u32 reg
, u32 val
)
317 etm_write(val
, ETMCR
);
320 etm_write(val
, ETMTRIGGER
);
323 etm_write(val
, ETMSR
);
326 etm_write(val
, ETMTSSCR
);
329 etm_write(val
, ETMTEEVR
);
332 etm_write(val
, ETMTECR1
);
335 etm_write(val
, ETMFFLR
);
338 etm_write(val
, ETMACVR0
);
341 etm_write(val
, ETMACVR1
);
344 etm_write(val
, ETMACVR2
);
347 etm_write(val
, ETMACVR3
);
350 etm_write(val
, ETMACVR4
);
353 etm_write(val
, ETMACVR5
);
356 etm_write(val
, ETMACVR6
);
359 etm_write(val
, ETMACVR7
);
362 etm_write(val
, ETMACVR8
);
365 etm_write(val
, ETMACVR9
);
368 etm_write(val
, ETMACVR10
);
371 etm_write(val
, ETMACVR11
);
374 etm_write(val
, ETMACVR12
);
377 etm_write(val
, ETMACVR13
);
380 etm_write(val
, ETMACVR14
);
383 etm_write(val
, ETMACVR15
);
386 etm_write(val
, ETMACTR0
);
389 etm_write(val
, ETMACTR1
);
392 etm_write(val
, ETMACTR2
);
395 etm_write(val
, ETMACTR3
);
398 etm_write(val
, ETMACTR4
);
401 etm_write(val
, ETMACTR5
);
404 etm_write(val
, ETMACTR6
);
407 etm_write(val
, ETMACTR7
);
410 etm_write(val
, ETMACTR8
);
413 etm_write(val
, ETMACTR9
);
416 etm_write(val
, ETMACTR10
);
419 etm_write(val
, ETMACTR11
);
422 etm_write(val
, ETMACTR12
);
425 etm_write(val
, ETMACTR13
);
428 etm_write(val
, ETMACTR14
);
431 etm_write(val
, ETMACTR15
);
433 case ETMCNTRLDVRn(0):
434 etm_write(val
, ETMCNTRLDVR0
);
436 case ETMCNTRLDVRn(1):
437 etm_write(val
, ETMCNTRLDVR1
);
439 case ETMCNTRLDVRn(2):
440 etm_write(val
, ETMCNTRLDVR2
);
442 case ETMCNTRLDVRn(3):
443 etm_write(val
, ETMCNTRLDVR3
);
446 etm_write(val
, ETMCNTENR0
);
449 etm_write(val
, ETMCNTENR1
);
452 etm_write(val
, ETMCNTENR2
);
455 etm_write(val
, ETMCNTENR3
);
457 case ETMCNTRLDEVRn(0):
458 etm_write(val
, ETMCNTRLDEVR0
);
460 case ETMCNTRLDEVRn(1):
461 etm_write(val
, ETMCNTRLDEVR1
);
463 case ETMCNTRLDEVRn(2):
464 etm_write(val
, ETMCNTRLDEVR2
);
466 case ETMCNTRLDEVRn(3):
467 etm_write(val
, ETMCNTRLDEVR3
);
470 etm_write(val
, ETMCNTVR0
);
473 etm_write(val
, ETMCNTVR1
);
476 etm_write(val
, ETMCNTVR2
);
479 etm_write(val
, ETMCNTVR3
);
482 etm_write(val
, ETMSQ12EVR
);
485 etm_write(val
, ETMSQ21EVR
);
488 etm_write(val
, ETMSQ23EVR
);
491 etm_write(val
, ETMSQ31EVR
);
494 etm_write(val
, ETMSQ32EVR
);
497 etm_write(val
, ETMSQ13EVR
);
500 etm_write(val
, ETMSQR
);
502 case ETMEXTOUTEVRn(0):
503 etm_write(val
, ETMEXTOUTEVR0
);
505 case ETMEXTOUTEVRn(1):
506 etm_write(val
, ETMEXTOUTEVR1
);
508 case ETMEXTOUTEVRn(2):
509 etm_write(val
, ETMEXTOUTEVR2
);
511 case ETMEXTOUTEVRn(3):
512 etm_write(val
, ETMEXTOUTEVR3
);
515 etm_write(val
, ETMCIDCVR0
);
518 etm_write(val
, ETMCIDCVR1
);
521 etm_write(val
, ETMCIDCVR2
);
524 etm_write(val
, ETMCIDCMR
);
527 etm_write(val
, ETMIMPSPEC0
);
530 etm_write(val
, ETMIMPSPEC1
);
533 etm_write(val
, ETMIMPSPEC2
);
536 etm_write(val
, ETMIMPSPEC3
);
539 etm_write(val
, ETMIMPSPEC4
);
542 etm_write(val
, ETMIMPSPEC5
);
545 etm_write(val
, ETMIMPSPEC6
);
548 etm_write(val
, ETMIMPSPEC7
);
551 etm_write(val
, ETMSYNCFR
);
554 etm_write(val
, ETMEXTINSELR
);
557 etm_write(val
, ETMTESSEICR
);
560 etm_write(val
, ETMEIBCR
);
563 etm_write(val
, ETMTSEVR
);
566 etm_write(val
, ETMAUXCR
);
569 etm_write(val
, ETMTRACEIDR
);
572 etm_write(val
, ETMVMIDCVR
);
575 etm_write(val
, ETMOSLAR
);
578 etm_write(val
, ETMOSSRR
);
581 etm_write(val
, ETMPDCR
);
584 etm_write(val
, ETMPDSR
);