1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Copyright (c) 2012, The Linux Foundation. All rights reserved.
4 */
5
6#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
7
8#include <linux/kernel.h>
9#include <linux/types.h>
10#include <linux/bug.h>
11#include <asm/hardware/cp14.h>
12
13#include "coresight-etm.h"
14
15int etm_readl_cp14(u32 reg, unsigned int *val)
16{
17 switch (reg) {
18 case ETMCR:
19 *val = etm_read(ETMCR);
20 return 0;
21 case ETMCCR:
22 *val = etm_read(ETMCCR);
23 return 0;
24 case ETMTRIGGER:
25 *val = etm_read(ETMTRIGGER);
26 return 0;
27 case ETMSR:
28 *val = etm_read(ETMSR);
29 return 0;
30 case ETMSCR:
31 *val = etm_read(ETMSCR);
32 return 0;
33 case ETMTSSCR:
34 *val = etm_read(ETMTSSCR);
35 return 0;
36 case ETMTEEVR:
37 *val = etm_read(ETMTEEVR);
38 return 0;
39 case ETMTECR1:
40 *val = etm_read(ETMTECR1);
41 return 0;
42 case ETMFFLR:
43 *val = etm_read(ETMFFLR);
44 return 0;
45 case ETMACVRn(0):
46 *val = etm_read(ETMACVR0);
47 return 0;
48 case ETMACVRn(1):
49 *val = etm_read(ETMACVR1);
50 return 0;
51 case ETMACVRn(2):
52 *val = etm_read(ETMACVR2);
53 return 0;
54 case ETMACVRn(3):
55 *val = etm_read(ETMACVR3);
56 return 0;
57 case ETMACVRn(4):
58 *val = etm_read(ETMACVR4);
59 return 0;
60 case ETMACVRn(5):
61 *val = etm_read(ETMACVR5);
62 return 0;
63 case ETMACVRn(6):
64 *val = etm_read(ETMACVR6);
65 return 0;
66 case ETMACVRn(7):
67 *val = etm_read(ETMACVR7);
68 return 0;
69 case ETMACVRn(8):
70 *val = etm_read(ETMACVR8);
71 return 0;
72 case ETMACVRn(9):
73 *val = etm_read(ETMACVR9);
74 return 0;
75 case ETMACVRn(10):
76 *val = etm_read(ETMACVR10);
77 return 0;
78 case ETMACVRn(11):
79 *val = etm_read(ETMACVR11);
80 return 0;
81 case ETMACVRn(12):
82 *val = etm_read(ETMACVR12);
83 return 0;
84 case ETMACVRn(13):
85 *val = etm_read(ETMACVR13);
86 return 0;
87 case ETMACVRn(14):
88 *val = etm_read(ETMACVR14);
89 return 0;
90 case ETMACVRn(15):
91 *val = etm_read(ETMACVR15);
92 return 0;
93 case ETMACTRn(0):
94 *val = etm_read(ETMACTR0);
95 return 0;
96 case ETMACTRn(1):
97 *val = etm_read(ETMACTR1);
98 return 0;
99 case ETMACTRn(2):
100 *val = etm_read(ETMACTR2);
101 return 0;
102 case ETMACTRn(3):
103 *val = etm_read(ETMACTR3);
104 return 0;
105 case ETMACTRn(4):
106 *val = etm_read(ETMACTR4);
107 return 0;
108 case ETMACTRn(5):
109 *val = etm_read(ETMACTR5);
110 return 0;
111 case ETMACTRn(6):
112 *val = etm_read(ETMACTR6);
113 return 0;
114 case ETMACTRn(7):
115 *val = etm_read(ETMACTR7);
116 return 0;
117 case ETMACTRn(8):
118 *val = etm_read(ETMACTR8);
119 return 0;
120 case ETMACTRn(9):
121 *val = etm_read(ETMACTR9);
122 return 0;
123 case ETMACTRn(10):
124 *val = etm_read(ETMACTR10);
125 return 0;
126 case ETMACTRn(11):
127 *val = etm_read(ETMACTR11);
128 return 0;
129 case ETMACTRn(12):
130 *val = etm_read(ETMACTR12);
131 return 0;
132 case ETMACTRn(13):
133 *val = etm_read(ETMACTR13);
134 return 0;
135 case ETMACTRn(14):
136 *val = etm_read(ETMACTR14);
137 return 0;
138 case ETMACTRn(15):
139 *val = etm_read(ETMACTR15);
140 return 0;
141 case ETMCNTRLDVRn(0):
142 *val = etm_read(ETMCNTRLDVR0);
143 return 0;
144 case ETMCNTRLDVRn(1):
145 *val = etm_read(ETMCNTRLDVR1);
146 return 0;
147 case ETMCNTRLDVRn(2):
148 *val = etm_read(ETMCNTRLDVR2);
149 return 0;
150 case ETMCNTRLDVRn(3):
151 *val = etm_read(ETMCNTRLDVR3);
152 return 0;
153 case ETMCNTENRn(0):
154 *val = etm_read(ETMCNTENR0);
155 return 0;
156 case ETMCNTENRn(1):
157 *val = etm_read(ETMCNTENR1);
158 return 0;
159 case ETMCNTENRn(2):
160 *val = etm_read(ETMCNTENR2);
161 return 0;
162 case ETMCNTENRn(3):
163 *val = etm_read(ETMCNTENR3);
164 return 0;
165 case ETMCNTRLDEVRn(0):
166 *val = etm_read(ETMCNTRLDEVR0);
167 return 0;
168 case ETMCNTRLDEVRn(1):
169 *val = etm_read(ETMCNTRLDEVR1);
170 return 0;
171 case ETMCNTRLDEVRn(2):
172 *val = etm_read(ETMCNTRLDEVR2);
173 return 0;
174 case ETMCNTRLDEVRn(3):
175 *val = etm_read(ETMCNTRLDEVR3);
176 return 0;
177 case ETMCNTVRn(0):
178 *val = etm_read(ETMCNTVR0);
179 return 0;
180 case ETMCNTVRn(1):
181 *val = etm_read(ETMCNTVR1);
182 return 0;
183 case ETMCNTVRn(2):
184 *val = etm_read(ETMCNTVR2);
185 return 0;
186 case ETMCNTVRn(3):
187 *val = etm_read(ETMCNTVR3);
188 return 0;
189 case ETMSQ12EVR:
190 *val = etm_read(ETMSQ12EVR);
191 return 0;
192 case ETMSQ21EVR:
193 *val = etm_read(ETMSQ21EVR);
194 return 0;
195 case ETMSQ23EVR:
196 *val = etm_read(ETMSQ23EVR);
197 return 0;
198 case ETMSQ31EVR:
199 *val = etm_read(ETMSQ31EVR);
200 return 0;
201 case ETMSQ32EVR:
202 *val = etm_read(ETMSQ32EVR);
203 return 0;
204 case ETMSQ13EVR:
205 *val = etm_read(ETMSQ13EVR);
206 return 0;
207 case ETMSQR:
208 *val = etm_read(ETMSQR);
209 return 0;
210 case ETMEXTOUTEVRn(0):
211 *val = etm_read(ETMEXTOUTEVR0);
212 return 0;
213 case ETMEXTOUTEVRn(1):
214 *val = etm_read(ETMEXTOUTEVR1);
215 return 0;
216 case ETMEXTOUTEVRn(2):
217 *val = etm_read(ETMEXTOUTEVR2);
218 return 0;
219 case ETMEXTOUTEVRn(3):
220 *val = etm_read(ETMEXTOUTEVR3);
221 return 0;
222 case ETMCIDCVRn(0):
223 *val = etm_read(ETMCIDCVR0);
224 return 0;
225 case ETMCIDCVRn(1):
226 *val = etm_read(ETMCIDCVR1);
227 return 0;
228 case ETMCIDCVRn(2):
229 *val = etm_read(ETMCIDCVR2);
230 return 0;
231 case ETMCIDCMR:
232 *val = etm_read(ETMCIDCMR);
233 return 0;
234 case ETMIMPSPEC0:
235 *val = etm_read(ETMIMPSPEC0);
236 return 0;
237 case ETMIMPSPEC1:
238 *val = etm_read(ETMIMPSPEC1);
239 return 0;
240 case ETMIMPSPEC2:
241 *val = etm_read(ETMIMPSPEC2);
242 return 0;
243 case ETMIMPSPEC3:
244 *val = etm_read(ETMIMPSPEC3);
245 return 0;
246 case ETMIMPSPEC4:
247 *val = etm_read(ETMIMPSPEC4);
248 return 0;
249 case ETMIMPSPEC5:
250 *val = etm_read(ETMIMPSPEC5);
251 return 0;
252 case ETMIMPSPEC6:
253 *val = etm_read(ETMIMPSPEC6);
254 return 0;
255 case ETMIMPSPEC7:
256 *val = etm_read(ETMIMPSPEC7);
257 return 0;
258 case ETMSYNCFR:
259 *val = etm_read(ETMSYNCFR);
260 return 0;
261 case ETMIDR:
262 *val = etm_read(ETMIDR);
263 return 0;
264 case ETMCCER:
265 *val = etm_read(ETMCCER);
266 return 0;
267 case ETMEXTINSELR:
268 *val = etm_read(ETMEXTINSELR);
269 return 0;
270 case ETMTESSEICR:
271 *val = etm_read(ETMTESSEICR);
272 return 0;
273 case ETMEIBCR:
274 *val = etm_read(ETMEIBCR);
275 return 0;
276 case ETMTSEVR:
277 *val = etm_read(ETMTSEVR);
278 return 0;
279 case ETMAUXCR:
280 *val = etm_read(ETMAUXCR);
281 return 0;
282 case ETMTRACEIDR:
283 *val = etm_read(ETMTRACEIDR);
284 return 0;
285 case ETMVMIDCVR:
286 *val = etm_read(ETMVMIDCVR);
287 return 0;
288 case ETMOSLSR:
289 *val = etm_read(ETMOSLSR);
290 return 0;
291 case ETMOSSRR:
292 *val = etm_read(ETMOSSRR);
293 return 0;
294 case ETMPDCR:
295 *val = etm_read(ETMPDCR);
296 return 0;
297 case ETMPDSR:
298 *val = etm_read(ETMPDSR);
299 return 0;
300 default:
301 *val = 0;
302 return -EINVAL;
303 }
304}
305
306int etm_writel_cp14(u32 reg, u32 val)
307{
308 switch (reg) {
309 case ETMCR:
310 etm_write(val, ETMCR);
311 break;
312 case ETMTRIGGER:
313 etm_write(val, ETMTRIGGER);
314 break;
315 case ETMSR:
316 etm_write(val, ETMSR);
317 break;
318 case ETMTSSCR:
319 etm_write(val, ETMTSSCR);
320 break;
321 case ETMTEEVR:
322 etm_write(val, ETMTEEVR);
323 break;
324 case ETMTECR1:
325 etm_write(val, ETMTECR1);
326 break;
327 case ETMFFLR:
328 etm_write(val, ETMFFLR);
329 break;
330 case ETMACVRn(0):
331 etm_write(val, ETMACVR0);
332 break;
333 case ETMACVRn(1):
334 etm_write(val, ETMACVR1);
335 break;
336 case ETMACVRn(2):
337 etm_write(val, ETMACVR2);
338 break;
339 case ETMACVRn(3):
340 etm_write(val, ETMACVR3);
341 break;
342 case ETMACVRn(4):
343 etm_write(val, ETMACVR4);
344 break;
345 case ETMACVRn(5):
346 etm_write(val, ETMACVR5);
347 break;
348 case ETMACVRn(6):
349 etm_write(val, ETMACVR6);
350 break;
351 case ETMACVRn(7):
352 etm_write(val, ETMACVR7);
353 break;
354 case ETMACVRn(8):
355 etm_write(val, ETMACVR8);
356 break;
357 case ETMACVRn(9):
358 etm_write(val, ETMACVR9);
359 break;
360 case ETMACVRn(10):
361 etm_write(val, ETMACVR10);
362 break;
363 case ETMACVRn(11):
364 etm_write(val, ETMACVR11);
365 break;
366 case ETMACVRn(12):
367 etm_write(val, ETMACVR12);
368 break;
369 case ETMACVRn(13):
370 etm_write(val, ETMACVR13);
371 break;
372 case ETMACVRn(14):
373 etm_write(val, ETMACVR14);
374 break;
375 case ETMACVRn(15):
376 etm_write(val, ETMACVR15);
377 break;
378 case ETMACTRn(0):
379 etm_write(val, ETMACTR0);
380 break;
381 case ETMACTRn(1):
382 etm_write(val, ETMACTR1);
383 break;
384 case ETMACTRn(2):
385 etm_write(val, ETMACTR2);
386 break;
387 case ETMACTRn(3):
388 etm_write(val, ETMACTR3);
389 break;
390 case ETMACTRn(4):
391 etm_write(val, ETMACTR4);
392 break;
393 case ETMACTRn(5):
394 etm_write(val, ETMACTR5);
395 break;
396 case ETMACTRn(6):
397 etm_write(val, ETMACTR6);
398 break;
399 case ETMACTRn(7):
400 etm_write(val, ETMACTR7);
401 break;
402 case ETMACTRn(8):
403 etm_write(val, ETMACTR8);
404 break;
405 case ETMACTRn(9):
406 etm_write(val, ETMACTR9);
407 break;
408 case ETMACTRn(10):
409 etm_write(val, ETMACTR10);
410 break;
411 case ETMACTRn(11):
412 etm_write(val, ETMACTR11);
413 break;
414 case ETMACTRn(12):
415 etm_write(val, ETMACTR12);
416 break;
417 case ETMACTRn(13):
418 etm_write(val, ETMACTR13);
419 break;
420 case ETMACTRn(14):
421 etm_write(val, ETMACTR14);
422 break;
423 case ETMACTRn(15):
424 etm_write(val, ETMACTR15);
425 break;
426 case ETMCNTRLDVRn(0):
427 etm_write(val, ETMCNTRLDVR0);
428 break;
429 case ETMCNTRLDVRn(1):
430 etm_write(val, ETMCNTRLDVR1);
431 break;
432 case ETMCNTRLDVRn(2):
433 etm_write(val, ETMCNTRLDVR2);
434 break;
435 case ETMCNTRLDVRn(3):
436 etm_write(val, ETMCNTRLDVR3);
437 break;
438 case ETMCNTENRn(0):
439 etm_write(val, ETMCNTENR0);
440 break;
441 case ETMCNTENRn(1):
442 etm_write(val, ETMCNTENR1);
443 break;
444 case ETMCNTENRn(2):
445 etm_write(val, ETMCNTENR2);
446 break;
447 case ETMCNTENRn(3):
448 etm_write(val, ETMCNTENR3);
449 break;
450 case ETMCNTRLDEVRn(0):
451 etm_write(val, ETMCNTRLDEVR0);
452 break;
453 case ETMCNTRLDEVRn(1):
454 etm_write(val, ETMCNTRLDEVR1);
455 break;
456 case ETMCNTRLDEVRn(2):
457 etm_write(val, ETMCNTRLDEVR2);
458 break;
459 case ETMCNTRLDEVRn(3):
460 etm_write(val, ETMCNTRLDEVR3);
461 break;
462 case ETMCNTVRn(0):
463 etm_write(val, ETMCNTVR0);
464 break;
465 case ETMCNTVRn(1):
466 etm_write(val, ETMCNTVR1);
467 break;
468 case ETMCNTVRn(2):
469 etm_write(val, ETMCNTVR2);
470 break;
471 case ETMCNTVRn(3):
472 etm_write(val, ETMCNTVR3);
473 break;
474 case ETMSQ12EVR:
475 etm_write(val, ETMSQ12EVR);
476 break;
477 case ETMSQ21EVR:
478 etm_write(val, ETMSQ21EVR);
479 break;
480 case ETMSQ23EVR:
481 etm_write(val, ETMSQ23EVR);
482 break;
483 case ETMSQ31EVR:
484 etm_write(val, ETMSQ31EVR);
485 break;
486 case ETMSQ32EVR:
487 etm_write(val, ETMSQ32EVR);
488 break;
489 case ETMSQ13EVR:
490 etm_write(val, ETMSQ13EVR);
491 break;
492 case ETMSQR:
493 etm_write(val, ETMSQR);
494 break;
495 case ETMEXTOUTEVRn(0):
496 etm_write(val, ETMEXTOUTEVR0);
497 break;
498 case ETMEXTOUTEVRn(1):
499 etm_write(val, ETMEXTOUTEVR1);
500 break;
501 case ETMEXTOUTEVRn(2):
502 etm_write(val, ETMEXTOUTEVR2);
503 break;
504 case ETMEXTOUTEVRn(3):
505 etm_write(val, ETMEXTOUTEVR3);
506 break;
507 case ETMCIDCVRn(0):
508 etm_write(val, ETMCIDCVR0);
509 break;
510 case ETMCIDCVRn(1):
511 etm_write(val, ETMCIDCVR1);
512 break;
513 case ETMCIDCVRn(2):
514 etm_write(val, ETMCIDCVR2);
515 break;
516 case ETMCIDCMR:
517 etm_write(val, ETMCIDCMR);
518 break;
519 case ETMIMPSPEC0:
520 etm_write(val, ETMIMPSPEC0);
521 break;
522 case ETMIMPSPEC1:
523 etm_write(val, ETMIMPSPEC1);
524 break;
525 case ETMIMPSPEC2:
526 etm_write(val, ETMIMPSPEC2);
527 break;
528 case ETMIMPSPEC3:
529 etm_write(val, ETMIMPSPEC3);
530 break;
531 case ETMIMPSPEC4:
532 etm_write(val, ETMIMPSPEC4);
533 break;
534 case ETMIMPSPEC5:
535 etm_write(val, ETMIMPSPEC5);
536 break;
537 case ETMIMPSPEC6:
538 etm_write(val, ETMIMPSPEC6);
539 break;
540 case ETMIMPSPEC7:
541 etm_write(val, ETMIMPSPEC7);
542 break;
543 case ETMSYNCFR:
544 etm_write(val, ETMSYNCFR);
545 break;
546 case ETMEXTINSELR:
547 etm_write(val, ETMEXTINSELR);
548 break;
549 case ETMTESSEICR:
550 etm_write(val, ETMTESSEICR);
551 break;
552 case ETMEIBCR:
553 etm_write(val, ETMEIBCR);
554 break;
555 case ETMTSEVR:
556 etm_write(val, ETMTSEVR);
557 break;
558 case ETMAUXCR:
559 etm_write(val, ETMAUXCR);
560 break;
561 case ETMTRACEIDR:
562 etm_write(val, ETMTRACEIDR);
563 break;
564 case ETMVMIDCVR:
565 etm_write(val, ETMVMIDCVR);
566 break;
567 case ETMOSLAR:
568 etm_write(val, ETMOSLAR);
569 break;
570 case ETMOSSRR:
571 etm_write(val, ETMOSSRR);
572 break;
573 case ETMPDCR:
574 etm_write(val, ETMPDCR);
575 break;
576 case ETMPDSR:
577 etm_write(val, ETMPDSR);
578 break;
579 default:
580 return -EINVAL;
581 }
582
583 return 0;
584}
585

source code of linux/drivers/hwtracing/coresight/coresight-etm-cp14.c