1===============================================
2ETMv4 sysfs linux driver programming reference.
3===============================================
4
5    :Author:   Mike Leach <mike.leach@linaro.org>
6    :Date:     October 11th, 2019
7
8Supplement to existing ETMv4 driver documentation.
9
10Sysfs files and directories
11---------------------------
12
13Root: ``/sys/bus/coresight/devices/etm<N>``
14
15
16The following paragraphs explain the association between sysfs files and the
17ETMv4 registers that they effect. Note the register names are given without
18the ‘TRC’ prefix.
19
20----
21
22:File:            ``mode`` (rw)
23:Trace Registers: {CONFIGR + others}
24:Notes:
25    Bit select trace features. See ‘mode’ section below. Bits
26    in this will cause equivalent programming of trace config and
27    other registers to enable the features requested.
28
29:Syntax & eg:
30    ``echo bitfield > mode``
31
32    bitfield up to 32 bits setting trace features.
33
34:Example:
35    ``$> echo 0x012 > mode``
36
37----
38
39:File:            ``reset`` (wo)
40:Trace Registers: All
41:Notes:
42    Reset all programming to trace nothing / no logic programmed.
43
44:Syntax:
45    ``echo 1 > reset``
46
47----
48
49:File:            ``enable_source`` (wo)
50:Trace Registers: PRGCTLR, All hardware regs.
51:Notes:
52    - > 0 : Programs up the hardware with the current values held in the driver
53      and enables trace.
54
55    - = 0 : disable trace hardware.
56
57:Syntax:
58    ``echo 1 > enable_source``
59
60----
61
62:File:            ``cpu`` (ro)
63:Trace Registers: None.
64:Notes:
65    CPU ID that this ETM is attached to.
66
67:Example:
68    ``$> cat cpu``
69
70    ``$> 0``
71
72----
73
74:File:            ``ts_source`` (ro)
75:Trace Registers: None.
76:Notes:
77    When FEAT_TRF is implemented, value of TRFCR_ELx.TS used for trace session. Otherwise -1
78    indicates an unknown time source. Check trcidr0.tssize to see if a global timestamp is
79    available.
80
81:Example:
82    ``$> cat ts_source``
83
84    ``$> 1``
85
86----
87
88:File:            ``addr_idx`` (rw)
89:Trace Registers: None.
90:Notes:
91    Virtual register to index address comparator and range
92    features. Set index for first of the pair in a range.
93
94:Syntax:
95    ``echo idx > addr_idx``
96
97    Where idx < nr_addr_cmp x 2
98
99----
100
101:File:            ``addr_range`` (rw)
102:Trace Registers: ACVR[idx, idx+1], VIIECTLR
103:Notes:
104    Pair of addresses for a range selected by addr_idx. Include
105    / exclude according to the optional parameter, or if omitted
106    uses the current ‘mode’ setting. Select comparator range in
107    control register. Error if index is odd value.
108
109:Depends: ``mode, addr_idx``
110:Syntax:
111   ``echo addr1 addr2 [exclude] > addr_range``
112
113   Where addr1 and addr2 define the range and addr1 < addr2.
114
115   Optional exclude value:-
116
117   - 0 for include
118   - 1 for exclude.
119:Example:
120   ``$> echo 0x0000 0x2000 0 > addr_range``
121
122----
123
124:File:            ``addr_single`` (rw)
125:Trace Registers: ACVR[idx]
126:Notes:
127    Set a single address comparator according to addr_idx. This
128    is used if the address comparator is used as part of event
129    generation logic etc.
130
131:Depends: ``addr_idx``
132:Syntax:
133   ``echo addr1 > addr_single``
134
135----
136
137:File:           ``addr_start`` (rw)
138:Trace Registers: ACVR[idx], VISSCTLR
139:Notes:
140    Set a trace start address comparator according to addr_idx.
141    Select comparator in control register.
142
143:Depends: ``addr_idx``
144:Syntax:
145    ``echo addr1 > addr_start``
146
147----
148
149:File:            ``addr_stop`` (rw)
150:Trace Registers: ACVR[idx], VISSCTLR
151:Notes:
152    Set a trace stop address comparator according to addr_idx.
153    Select comparator in control register.
154
155:Depends: ``addr_idx``
156:Syntax:
157    ``echo addr1 > addr_stop``
158
159----
160
161:File:            ``addr_context`` (rw)
162:Trace Registers: ACATR[idx,{6:4}]
163:Notes:
164    Link context ID comparator to address comparator addr_idx
165
166:Depends: ``addr_idx``
167:Syntax:
168    ``echo ctxt_idx > addr_context``
169
170    Where ctxt_idx is the index of the linked context id / vmid
171    comparator.
172
173----
174
175:File:            ``addr_ctxtype`` (rw)
176:Trace Registers: ACATR[idx,{3:2}]
177:Notes:
178    Input value string. Set type for linked context ID comparator
179
180:Depends: ``addr_idx``
181:Syntax:
182    ``echo type > addr_ctxtype``
183
184    Type one of {all, vmid, ctxid, none}
185:Example:
186    ``$> echo ctxid > addr_ctxtype``
187
188----
189
190:File:            ``addr_exlevel_s_ns`` (rw)
191:Trace Registers: ACATR[idx,{14:8}]
192:Notes:
193    Set the ELx secure and non-secure matching bits for the
194    selected address comparator
195
196:Depends: ``addr_idx``
197:Syntax:
198    ``echo val > addr_exlevel_s_ns``
199
200    val is a 7 bit value for exception levels to exclude. Input
201    value shifted to correct bits in register.
202:Example:
203    ``$> echo 0x4F > addr_exlevel_s_ns``
204
205----
206
207:File:            ``addr_instdatatype`` (rw)
208:Trace Registers: ACATR[idx,{1:0}]
209:Notes:
210    Set the comparator address type for matching. Driver only
211    supports setting instruction address type.
212
213:Depends: ``addr_idx``
214
215----
216
217:File:            ``addr_cmp_view`` (ro)
218:Trace Registers: ACVR[idx, idx+1], ACATR[idx], VIIECTLR
219:Notes:
220    Read the currently selected address comparator. If part of
221    address range then display both addresses.
222
223:Depends: ``addr_idx``
224:Syntax:
225    ``cat addr_cmp_view``
226:Example:
227    ``$> cat addr_cmp_view``
228
229   ``addr_cmp[0] range 0x0 0xffffffffffffffff include ctrl(0x4b00)``
230
231----
232
233:File:            ``nr_addr_cmp`` (ro)
234:Trace Registers: From IDR4
235:Notes:
236    Number of address comparator pairs
237
238----
239
240:File:            ``sshot_idx`` (rw)
241:Trace Registers: None
242:Notes:
243    Select single shot register set.
244
245----
246
247:File:            ``sshot_ctrl`` (rw)
248:Trace Registers: SSCCR[idx]
249:Notes:
250    Access a single shot comparator control register.
251
252:Depends: ``sshot_idx``
253:Syntax:
254    ``echo val > sshot_ctrl``
255
256    Writes val into the selected control register.
257
258----
259
260:File:            ``sshot_status`` (ro)
261:Trace Registers: SSCSR[idx]
262:Notes:
263    Read a single shot comparator status register
264
265:Depends: ``sshot_idx``
266:Syntax:
267    ``cat sshot_status``
268
269    Read status.
270:Example:
271    ``$> cat sshot_status``
272
273    ``0x1``
274
275----
276
277:File:            ``sshot_pe_ctrl`` (rw)
278:Trace Registers: SSPCICR[idx]
279:Notes:
280    Access a single shot PE comparator input control register.
281
282:Depends: ``sshot_idx``
283:Syntax:
284    ``echo val > sshot_pe_ctrl``
285
286    Writes val into the selected control register.
287
288----
289
290:File:            ``ns_exlevel_vinst`` (rw)
291:Trace Registers: VICTLR{23:20}
292:Notes:
293    Program non-secure exception level filters. Set / clear NS
294    exception filter bits. Setting ‘1’ excludes trace from the
295    exception level.
296
297:Syntax:
298    ``echo bitfield > ns_exlevel_viinst``
299
300    Where bitfield contains bits to set clear for EL0 to EL2
301:Example:
302    ``%> echo 0x4 > ns_exlevel_viinst``
303
304    Excludes EL2 NS trace.
305
306----
307
308:File:            ``vinst_pe_cmp_start_stop`` (rw)
309:Trace Registers: VIPCSSCTLR
310:Notes:
311    Access PE start stop comparator input control registers
312
313----
314
315:File:            ``bb_ctrl`` (rw)
316:Trace Registers: BBCTLR
317:Notes:
318    Define ranges that Branch Broadcast will operate in.
319    Default (0x0) is all addresses.
320
321:Depends: BB enabled.
322
323----
324
325:File:            ``cyc_threshold`` (rw)
326:Trace Registers: CCCTLR
327:Notes:
328    Set the threshold for which cycle counts will be emitted.
329    Error if attempt to set below minimum defined in IDR3, masked
330    to width of valid bits.
331
332:Depends: CC enabled.
333
334----
335
336:File:            ``syncfreq`` (rw)
337:Trace Registers: SYNCPR
338:Notes:
339    Set trace synchronisation period. Power of 2 value, 0 (off)
340    or 8-20. Driver defaults to 12 (every 4096 bytes).
341
342----
343
344:File:            ``cntr_idx`` (rw)
345:Trace Registers: none
346:Notes:
347    Select the counter to access
348
349:Syntax:
350    ``echo idx > cntr_idx``
351
352    Where idx < nr_cntr
353
354----
355
356:File:            ``cntr_ctrl`` (rw)
357:Trace Registers: CNTCTLR[idx]
358:Notes:
359    Set counter control value.
360
361:Depends: ``cntr_idx``
362:Syntax:
363    ``echo val > cntr_ctrl``
364
365    Where val is per ETMv4 spec.
366
367----
368
369:File:            ``cntrldvr`` (rw)
370:Trace Registers: CNTRLDVR[idx]
371:Notes:
372    Set counter reload value.
373
374:Depends: ``cntr_idx``
375:Syntax:
376    ``echo val > cntrldvr``
377
378    Where val is per ETMv4 spec.
379
380----
381
382:File:            ``nr_cntr`` (ro)
383:Trace Registers: From IDR5
384
385:Notes:
386    Number of counters implemented.
387
388----
389
390:File:            ``ctxid_idx`` (rw)
391:Trace Registers: None
392:Notes:
393    Select the context ID comparator to access
394
395:Syntax:
396    ``echo idx > ctxid_idx``
397
398    Where idx < numcidc
399
400----
401
402:File:            ``ctxid_pid`` (rw)
403:Trace Registers: CIDCVR[idx]
404:Notes:
405   Set the context ID comparator value
406
407:Depends: ``ctxid_idx``
408
409----
410
411:File: ``ctxid_masks`` (rw)
412:Trace Registers: CIDCCTLR0, CIDCCTLR1, CIDCVR<0-7>
413:Notes:
414    Pair of values to set the byte masks for 1-8 context ID
415    comparators. Automatically clears masked bytes to 0 in CID
416    value registers.
417
418:Syntax:
419    ``echo m3m2m1m0 [m7m6m5m4] > ctxid_masks``
420
421    32 bit values made up of mask bytes, where mN represents a
422    byte mask value for Context ID comparator N.
423
424    Second value not required on systems that have fewer than 4
425    context ID comparators
426
427----
428
429:File:            ``numcidc`` (ro)
430:Trace Registers: From IDR4
431:Notes:
432    Number of Context ID comparators
433
434----
435
436:File:            ``vmid_idx`` (rw)
437:Trace Registers: None
438:Notes:
439    Select the VM ID comparator to access.
440
441:Syntax:
442    ``echo idx > vmid_idx``
443
444    Where idx <  numvmidc
445
446----
447
448:File:            ``vmid_val`` (rw)
449:Trace Registers: VMIDCVR[idx]
450:Notes:
451    Set the VM ID comparator value
452
453:Depends: ``vmid_idx``
454
455----
456
457:File:            ``vmid_masks`` (rw)
458:Trace Registers: VMIDCCTLR0, VMIDCCTLR1, VMIDCVR<0-7>
459:Notes:
460    Pair of values to set the byte masks for 1-8 VM ID comparators.
461    Automatically clears masked bytes to 0 in VMID value registers.
462
463:Syntax:
464    ``echo m3m2m1m0 [m7m6m5m4] > vmid_masks``
465
466    Where mN represents a byte mask value for VMID comparator N.
467    Second value not required on systems that have fewer than 4
468    VMID comparators.
469
470----
471
472:File:            ``numvmidc`` (ro)
473:Trace Registers: From IDR4
474:Notes:
475    Number of VMID comparators
476
477----
478
479:File:            ``res_idx`` (rw)
480:Trace Registers: None.
481:Notes:
482    Select the resource selector control to access. Must be 2 or
483    higher as selectors 0 and 1 are hardwired.
484
485:Syntax:
486    ``echo idx > res_idx``
487
488    Where 2 <= idx < nr_resource x 2
489
490----
491
492:File:            ``res_ctrl`` (rw)
493:Trace Registers: RSCTLR[idx]
494:Notes:
495    Set resource selector control value. Value per ETMv4 spec.
496
497:Depends: ``res_idx``
498:Syntax:
499    ``echo val > res_cntr``
500
501    Where val is per ETMv4 spec.
502
503----
504
505:File:            ``nr_resource`` (ro)
506:Trace Registers: From IDR4
507:Notes:
508    Number of resource selector pairs
509
510----
511
512:File:            ``event`` (rw)
513:Trace Registers: EVENTCTRL0R
514:Notes:
515    Set up to 4 implemented event fields.
516
517:Syntax:
518    ``echo ev3ev2ev1ev0 > event``
519
520    Where evN is an 8 bit event field. Up to 4 event fields make up the
521    32-bit input value. Number of valid fields is implementation dependent,
522    defined in IDR0.
523
524----
525
526:File: ``event_instren`` (rw)
527:Trace Registers: EVENTCTRL1R
528:Notes:
529    Choose events which insert event packets into trace stream.
530
531:Depends: EVENTCTRL0R
532:Syntax:
533    ``echo bitfield > event_instren``
534
535    Where bitfield is up to 4 bits according to number of event fields.
536
537----
538
539:File:            ``event_ts`` (rw)
540:Trace Registers: TSCTLR
541:Notes:
542    Set the event that will generate timestamp requests.
543
544:Depends: ``TS activated``
545:Syntax:
546    ``echo evfield > event_ts``
547
548    Where evfield is an 8 bit event selector.
549
550----
551
552:File:            ``seq_idx`` (rw)
553:Trace Registers: None
554:Notes:
555    Sequencer event register select - 0 to 2
556
557----
558
559:File:            ``seq_state`` (rw)
560:Trace Registers: SEQSTR
561:Notes:
562    Sequencer current state - 0 to 3.
563
564----
565
566:File:            ``seq_event`` (rw)
567:Trace Registers: SEQEVR[idx]
568:Notes:
569    State transition event registers
570
571:Depends: ``seq_idx``
572:Syntax:
573    ``echo evBevF > seq_event``
574
575    Where evBevF is a 16 bit value made up of two event selectors,
576
577    - evB : back
578    - evF : forwards.
579
580----
581
582:File:            ``seq_reset_event`` (rw)
583:Trace Registers: SEQRSTEVR
584:Notes:
585    Sequencer reset event
586
587:Syntax:
588    ``echo evfield > seq_reset_event``
589
590    Where evfield is an 8 bit event selector.
591
592----
593
594:File:            ``nrseqstate`` (ro)
595:Trace Registers: From IDR5
596:Notes:
597    Number of sequencer states (0 or 4)
598
599----
600
601:File:            ``nr_pe_cmp`` (ro)
602:Trace Registers: From IDR4
603:Notes:
604    Number of PE comparator inputs
605
606----
607
608:File:            ``nr_ext_inp`` (ro)
609:Trace Registers: From IDR5
610:Notes:
611    Number of external inputs
612
613----
614
615:File:            ``nr_ss_cmp`` (ro)
616:Trace Registers: From IDR4
617:Notes:
618    Number of Single Shot control registers
619
620----
621
622*Note:* When programming any address comparator the driver will tag the
623comparator with a type used - i.e. RANGE, SINGLE, START, STOP. Once this tag
624is set, then only the values can be changed using the same sysfs file / type
625used to program it.
626
627Thus::
628
629  % echo 0 > addr_idx		; select address comparator 0
630  % echo 0x1000 0x5000 0 > addr_range ; set address range on comparators 0, 1.
631  % echo 0x2000 > addr_start    ; error as comparator 0 is a range comparator
632  % echo 2 > addr_idx		; select address comparator 2
633  % echo 0x2000 > addr_start	; this is OK as comparator 2 is unused.
634  % echo 0x3000 > addr_stop	; error as comparator 2 set as start address.
635  % echo 2 > addr_idx		; select address comparator 3
636  % echo 0x3000 > addr_stop	; this is OK
637
638To remove programming on all the comparators (and all the other hardware) use
639the reset parameter::
640
641  % echo 1 > reset
642
643
644
645The ‘mode’ sysfs parameter.
646---------------------------
647
648This is a bitfield selection parameter that sets the overall trace mode for the
649ETM. The table below describes the bits, using the defines from the driver
650source file, along with a description of the feature these represent. Many
651features are optional and therefore dependent on implementation in the
652hardware.
653
654Bit assignments shown below:-
655
656----
657
658**bit (0):**
659    ETM_MODE_EXCLUDE
660
661**description:**
662    This is the default value for the include / exclude function when
663    setting address ranges. Set 1 for exclude range. When the mode
664    parameter is set this value is applied to the currently indexed
665    address range.
666
667.. _coresight-branch-broadcast:
668
669**bit (4):**
670    ETM_MODE_BB
671
672**description:**
673    Set to enable branch broadcast if supported in hardware [IDR0]. The primary use for this feature
674    is when code is patched dynamically at run time and the full program flow may not be able to be
675    reconstructed using only conditional branches.
676
677    There is currently no support in Perf for supplying modified binaries to the decoder, so this
678    feature is only intended to be used for debugging purposes or with a 3rd party tool.
679
680    Choosing this option will result in a significant increase in the amount of trace generated -
681    possible danger of overflows, or fewer instructions covered. Note, that this option also
682    overrides any setting of :ref:`ETM_MODE_RETURNSTACK <coresight-return-stack>`, so where a branch
683    broadcast range overlaps a return stack range, return stacks will not be available for that
684    range.
685
686.. _coresight-cycle-accurate:
687
688**bit (5):**
689    ETMv4_MODE_CYCACC
690
691**description:**
692    Set to enable cycle accurate trace if supported [IDR0].
693
694
695**bit (6):**
696    ETMv4_MODE_CTXID
697
698**description:**
699    Set to enable context ID tracing if supported in hardware [IDR2].
700
701
702**bit (7):**
703    ETM_MODE_VMID
704
705**description:**
706    Set to enable virtual machine ID tracing if supported [IDR2].
707
708.. _coresight-timestamp:
709
710**bit (11):**
711    ETMv4_MODE_TIMESTAMP
712
713**description:**
714    Set to enable timestamp generation if supported [IDR0].
715
716.. _coresight-return-stack:
717
718**bit (12):**
719    ETM_MODE_RETURNSTACK
720**description:**
721    Set to enable trace return stack use if supported [IDR0].
722
723
724**bit (13-14):**
725    ETM_MODE_QELEM(val)
726
727**description:**
728    ‘val’ determines level of Q element support enabled if
729    implemented by the ETM [IDR0]
730
731
732**bit (19):**
733    ETM_MODE_ATB_TRIGGER
734
735**description:**
736    Set to enable the ATBTRIGGER bit in the event control register
737    [EVENTCTLR1] if supported [IDR5].
738
739
740**bit (20):**
741    ETM_MODE_LPOVERRIDE
742
743**description:**
744    Set to enable the LPOVERRIDE bit in the event control register
745    [EVENTCTLR1], if supported [IDR5].
746
747
748**bit (21):**
749    ETM_MODE_ISTALL_EN
750
751**description:**
752    Set to enable the ISTALL bit in the stall control register
753    [STALLCTLR]
754
755
756**bit (23):**
757    ETM_MODE_INSTPRIO
758
759**description:**
760	      Set to enable the INSTPRIORITY bit in the stall control register
761	      [STALLCTLR] , if supported [IDR0].
762
763
764**bit (24):**
765    ETM_MODE_NOOVERFLOW
766
767**description:**
768    Set to enable the NOOVERFLOW bit in the stall control register
769    [STALLCTLR], if supported [IDR3].
770
771
772**bit (25):**
773    ETM_MODE_TRACE_RESET
774
775**description:**
776    Set to enable the TRCRESET bit in the viewinst control register
777    [VICTLR] , if supported [IDR3].
778
779
780**bit (26):**
781    ETM_MODE_TRACE_ERR
782
783**description:**
784    Set to enable the TRCCTRL bit in the viewinst control register
785    [VICTLR].
786
787
788**bit (27):**
789    ETM_MODE_VIEWINST_STARTSTOP
790
791**description:**
792    Set the initial state value of the ViewInst start / stop logic
793    in the viewinst control register [VICTLR]
794
795
796**bit (30):**
797    ETM_MODE_EXCL_KERN
798
799**description:**
800    Set default trace setup to exclude kernel mode trace (see note a)
801
802
803**bit (31):**
804    ETM_MODE_EXCL_USER
805
806**description:**
807    Set default trace setup to exclude user space trace (see note a)
808
809----
810
811*Note a)* On startup the ETM is programmed to trace the complete address space
812using address range comparator 0. ‘mode’ bits 30 / 31 modify this setting to
813set EL exclude bits for NS state in either user space (EL0) or kernel space
814(EL1) in the address range comparator. (the default setting excludes all
815secure EL, and NS EL2)
816
817Once the reset parameter has been used, and/or custom programming has been
818implemented - using these bits will result in the EL bits for address
819comparator 0 being set in the same way.
820
821*Note b)* Bits 2-3, 8-10, 15-16, 18, 22, control features that only work with
822data trace. As A-profile data trace is architecturally prohibited in ETMv4,
823these have been omitted here. Possible uses could be where a kernel has
824support for control of R or M profile infrastructure as part of a heterogeneous
825system.
826
827Bits 17, 28-29 are unused.
828