| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827 |
- ===============================================
- ETMv4 sysfs linux driver programming reference.
- ===============================================
- :Author: Mike Leach <mike.leach@linaro.org>
- :Date: October 11th, 2019
- Supplement to existing ETMv4 driver documentation.
- Sysfs files and directories
- ---------------------------
- Root: ``/sys/bus/coresight/devices/etm<N>``
- The following paragraphs explain the association between sysfs files and the
- ETMv4 registers that they effect. Note the register names are given without
- the ‘TRC’ prefix.
- ----
- :File: ``mode`` (rw)
- :Trace Registers: {CONFIGR + others}
- :Notes:
- Bit select trace features. See ‘mode’ section below. Bits
- in this will cause equivalent programming of trace config and
- other registers to enable the features requested.
- :Syntax & eg:
- ``echo bitfield > mode``
- bitfield up to 32 bits setting trace features.
- :Example:
- ``$> echo 0x012 > mode``
- ----
- :File: ``reset`` (wo)
- :Trace Registers: All
- :Notes:
- Reset all programming to trace nothing / no logic programmed.
- :Syntax:
- ``echo 1 > reset``
- ----
- :File: ``enable_source`` (wo)
- :Trace Registers: PRGCTLR, All hardware regs.
- :Notes:
- - > 0 : Programs up the hardware with the current values held in the driver
- and enables trace.
- - = 0 : disable trace hardware.
- :Syntax:
- ``echo 1 > enable_source``
- ----
- :File: ``cpu`` (ro)
- :Trace Registers: None.
- :Notes:
- CPU ID that this ETM is attached to.
- :Example:
- ``$> cat cpu``
- ``$> 0``
- ----
- :File: ``ts_source`` (ro)
- :Trace Registers: None.
- :Notes:
- When FEAT_TRF is implemented, value of TRFCR_ELx.TS used for trace session. Otherwise -1
- indicates an unknown time source. Check trcidr0.tssize to see if a global timestamp is
- available.
- :Example:
- ``$> cat ts_source``
- ``$> 1``
- ----
- :File: ``addr_idx`` (rw)
- :Trace Registers: None.
- :Notes:
- Virtual register to index address comparator and range
- features. Set index for first of the pair in a range.
- :Syntax:
- ``echo idx > addr_idx``
- Where idx < nr_addr_cmp x 2
- ----
- :File: ``addr_range`` (rw)
- :Trace Registers: ACVR[idx, idx+1], VIIECTLR
- :Notes:
- Pair of addresses for a range selected by addr_idx. Include
- / exclude according to the optional parameter, or if omitted
- uses the current ‘mode’ setting. Select comparator range in
- control register. Error if index is odd value.
- :Depends: ``mode, addr_idx``
- :Syntax:
- ``echo addr1 addr2 [exclude] > addr_range``
- Where addr1 and addr2 define the range and addr1 < addr2.
- Optional exclude value:-
- - 0 for include
- - 1 for exclude.
- :Example:
- ``$> echo 0x0000 0x2000 0 > addr_range``
- ----
- :File: ``addr_single`` (rw)
- :Trace Registers: ACVR[idx]
- :Notes:
- Set a single address comparator according to addr_idx. This
- is used if the address comparator is used as part of event
- generation logic etc.
- :Depends: ``addr_idx``
- :Syntax:
- ``echo addr1 > addr_single``
- ----
- :File: ``addr_start`` (rw)
- :Trace Registers: ACVR[idx], VISSCTLR
- :Notes:
- Set a trace start address comparator according to addr_idx.
- Select comparator in control register.
- :Depends: ``addr_idx``
- :Syntax:
- ``echo addr1 > addr_start``
- ----
- :File: ``addr_stop`` (rw)
- :Trace Registers: ACVR[idx], VISSCTLR
- :Notes:
- Set a trace stop address comparator according to addr_idx.
- Select comparator in control register.
- :Depends: ``addr_idx``
- :Syntax:
- ``echo addr1 > addr_stop``
- ----
- :File: ``addr_context`` (rw)
- :Trace Registers: ACATR[idx,{6:4}]
- :Notes:
- Link context ID comparator to address comparator addr_idx
- :Depends: ``addr_idx``
- :Syntax:
- ``echo ctxt_idx > addr_context``
- Where ctxt_idx is the index of the linked context id / vmid
- comparator.
- ----
- :File: ``addr_ctxtype`` (rw)
- :Trace Registers: ACATR[idx,{3:2}]
- :Notes:
- Input value string. Set type for linked context ID comparator
- :Depends: ``addr_idx``
- :Syntax:
- ``echo type > addr_ctxtype``
- Type one of {all, vmid, ctxid, none}
- :Example:
- ``$> echo ctxid > addr_ctxtype``
- ----
- :File: ``addr_exlevel_s_ns`` (rw)
- :Trace Registers: ACATR[idx,{14:8}]
- :Notes:
- Set the ELx secure and non-secure matching bits for the
- selected address comparator
- :Depends: ``addr_idx``
- :Syntax:
- ``echo val > addr_exlevel_s_ns``
- val is a 7 bit value for exception levels to exclude. Input
- value shifted to correct bits in register.
- :Example:
- ``$> echo 0x4F > addr_exlevel_s_ns``
- ----
- :File: ``addr_instdatatype`` (rw)
- :Trace Registers: ACATR[idx,{1:0}]
- :Notes:
- Set the comparator address type for matching. Driver only
- supports setting instruction address type.
- :Depends: ``addr_idx``
- ----
- :File: ``addr_cmp_view`` (ro)
- :Trace Registers: ACVR[idx, idx+1], ACATR[idx], VIIECTLR
- :Notes:
- Read the currently selected address comparator. If part of
- address range then display both addresses.
- :Depends: ``addr_idx``
- :Syntax:
- ``cat addr_cmp_view``
- :Example:
- ``$> cat addr_cmp_view``
- ``addr_cmp[0] range 0x0 0xffffffffffffffff include ctrl(0x4b00)``
- ----
- :File: ``nr_addr_cmp`` (ro)
- :Trace Registers: From IDR4
- :Notes:
- Number of address comparator pairs
- ----
- :File: ``sshot_idx`` (rw)
- :Trace Registers: None
- :Notes:
- Select single shot register set.
- ----
- :File: ``sshot_ctrl`` (rw)
- :Trace Registers: SSCCR[idx]
- :Notes:
- Access a single shot comparator control register.
- :Depends: ``sshot_idx``
- :Syntax:
- ``echo val > sshot_ctrl``
- Writes val into the selected control register.
- ----
- :File: ``sshot_status`` (ro)
- :Trace Registers: SSCSR[idx]
- :Notes:
- Read a single shot comparator status register
- :Depends: ``sshot_idx``
- :Syntax:
- ``cat sshot_status``
- Read status.
- :Example:
- ``$> cat sshot_status``
- ``0x1``
- ----
- :File: ``sshot_pe_ctrl`` (rw)
- :Trace Registers: SSPCICR[idx]
- :Notes:
- Access a single shot PE comparator input control register.
- :Depends: ``sshot_idx``
- :Syntax:
- ``echo val > sshot_pe_ctrl``
- Writes val into the selected control register.
- ----
- :File: ``ns_exlevel_vinst`` (rw)
- :Trace Registers: VICTLR{23:20}
- :Notes:
- Program non-secure exception level filters. Set / clear NS
- exception filter bits. Setting ‘1’ excludes trace from the
- exception level.
- :Syntax:
- ``echo bitfield > ns_exlevel_viinst``
- Where bitfield contains bits to set clear for EL0 to EL2
- :Example:
- ``%> echo 0x4 > ns_exlevel_viinst``
- Excludes EL2 NS trace.
- ----
- :File: ``vinst_pe_cmp_start_stop`` (rw)
- :Trace Registers: VIPCSSCTLR
- :Notes:
- Access PE start stop comparator input control registers
- ----
- :File: ``bb_ctrl`` (rw)
- :Trace Registers: BBCTLR
- :Notes:
- Define ranges that Branch Broadcast will operate in.
- Default (0x0) is all addresses.
- :Depends: BB enabled.
- ----
- :File: ``cyc_threshold`` (rw)
- :Trace Registers: CCCTLR
- :Notes:
- Set the threshold for which cycle counts will be emitted.
- Error if attempt to set below minimum defined in IDR3, masked
- to width of valid bits.
- :Depends: CC enabled.
- ----
- :File: ``syncfreq`` (rw)
- :Trace Registers: SYNCPR
- :Notes:
- Set trace synchronisation period. Power of 2 value, 0 (off)
- or 8-20. Driver defaults to 12 (every 4096 bytes).
- ----
- :File: ``cntr_idx`` (rw)
- :Trace Registers: none
- :Notes:
- Select the counter to access
- :Syntax:
- ``echo idx > cntr_idx``
- Where idx < nr_cntr
- ----
- :File: ``cntr_ctrl`` (rw)
- :Trace Registers: CNTCTLR[idx]
- :Notes:
- Set counter control value.
- :Depends: ``cntr_idx``
- :Syntax:
- ``echo val > cntr_ctrl``
- Where val is per ETMv4 spec.
- ----
- :File: ``cntrldvr`` (rw)
- :Trace Registers: CNTRLDVR[idx]
- :Notes:
- Set counter reload value.
- :Depends: ``cntr_idx``
- :Syntax:
- ``echo val > cntrldvr``
- Where val is per ETMv4 spec.
- ----
- :File: ``nr_cntr`` (ro)
- :Trace Registers: From IDR5
- :Notes:
- Number of counters implemented.
- ----
- :File: ``ctxid_idx`` (rw)
- :Trace Registers: None
- :Notes:
- Select the context ID comparator to access
- :Syntax:
- ``echo idx > ctxid_idx``
- Where idx < numcidc
- ----
- :File: ``ctxid_pid`` (rw)
- :Trace Registers: CIDCVR[idx]
- :Notes:
- Set the context ID comparator value
- :Depends: ``ctxid_idx``
- ----
- :File: ``ctxid_masks`` (rw)
- :Trace Registers: CIDCCTLR0, CIDCCTLR1, CIDCVR<0-7>
- :Notes:
- Pair of values to set the byte masks for 1-8 context ID
- comparators. Automatically clears masked bytes to 0 in CID
- value registers.
- :Syntax:
- ``echo m3m2m1m0 [m7m6m5m4] > ctxid_masks``
- 32 bit values made up of mask bytes, where mN represents a
- byte mask value for Context ID comparator N.
- Second value not required on systems that have fewer than 4
- context ID comparators
- ----
- :File: ``numcidc`` (ro)
- :Trace Registers: From IDR4
- :Notes:
- Number of Context ID comparators
- ----
- :File: ``vmid_idx`` (rw)
- :Trace Registers: None
- :Notes:
- Select the VM ID comparator to access.
- :Syntax:
- ``echo idx > vmid_idx``
- Where idx < numvmidc
- ----
- :File: ``vmid_val`` (rw)
- :Trace Registers: VMIDCVR[idx]
- :Notes:
- Set the VM ID comparator value
- :Depends: ``vmid_idx``
- ----
- :File: ``vmid_masks`` (rw)
- :Trace Registers: VMIDCCTLR0, VMIDCCTLR1, VMIDCVR<0-7>
- :Notes:
- Pair of values to set the byte masks for 1-8 VM ID comparators.
- Automatically clears masked bytes to 0 in VMID value registers.
- :Syntax:
- ``echo m3m2m1m0 [m7m6m5m4] > vmid_masks``
- Where mN represents a byte mask value for VMID comparator N.
- Second value not required on systems that have fewer than 4
- VMID comparators.
- ----
- :File: ``numvmidc`` (ro)
- :Trace Registers: From IDR4
- :Notes:
- Number of VMID comparators
- ----
- :File: ``res_idx`` (rw)
- :Trace Registers: None.
- :Notes:
- Select the resource selector control to access. Must be 2 or
- higher as selectors 0 and 1 are hardwired.
- :Syntax:
- ``echo idx > res_idx``
- Where 2 <= idx < nr_resource x 2
- ----
- :File: ``res_ctrl`` (rw)
- :Trace Registers: RSCTLR[idx]
- :Notes:
- Set resource selector control value. Value per ETMv4 spec.
- :Depends: ``res_idx``
- :Syntax:
- ``echo val > res_cntr``
- Where val is per ETMv4 spec.
- ----
- :File: ``nr_resource`` (ro)
- :Trace Registers: From IDR4
- :Notes:
- Number of resource selector pairs
- ----
- :File: ``event`` (rw)
- :Trace Registers: EVENTCTRL0R
- :Notes:
- Set up to 4 implemented event fields.
- :Syntax:
- ``echo ev3ev2ev1ev0 > event``
- Where evN is an 8 bit event field. Up to 4 event fields make up the
- 32-bit input value. Number of valid fields is implementation dependent,
- defined in IDR0.
- ----
- :File: ``event_instren`` (rw)
- :Trace Registers: EVENTCTRL1R
- :Notes:
- Choose events which insert event packets into trace stream.
- :Depends: EVENTCTRL0R
- :Syntax:
- ``echo bitfield > event_instren``
- Where bitfield is up to 4 bits according to number of event fields.
- ----
- :File: ``event_ts`` (rw)
- :Trace Registers: TSCTLR
- :Notes:
- Set the event that will generate timestamp requests.
- :Depends: ``TS activated``
- :Syntax:
- ``echo evfield > event_ts``
- Where evfield is an 8 bit event selector.
- ----
- :File: ``seq_idx`` (rw)
- :Trace Registers: None
- :Notes:
- Sequencer event register select - 0 to 2
- ----
- :File: ``seq_state`` (rw)
- :Trace Registers: SEQSTR
- :Notes:
- Sequencer current state - 0 to 3.
- ----
- :File: ``seq_event`` (rw)
- :Trace Registers: SEQEVR[idx]
- :Notes:
- State transition event registers
- :Depends: ``seq_idx``
- :Syntax:
- ``echo evBevF > seq_event``
- Where evBevF is a 16 bit value made up of two event selectors,
- - evB : back
- - evF : forwards.
- ----
- :File: ``seq_reset_event`` (rw)
- :Trace Registers: SEQRSTEVR
- :Notes:
- Sequencer reset event
- :Syntax:
- ``echo evfield > seq_reset_event``
- Where evfield is an 8 bit event selector.
- ----
- :File: ``nrseqstate`` (ro)
- :Trace Registers: From IDR5
- :Notes:
- Number of sequencer states (0 or 4)
- ----
- :File: ``nr_pe_cmp`` (ro)
- :Trace Registers: From IDR4
- :Notes:
- Number of PE comparator inputs
- ----
- :File: ``nr_ext_inp`` (ro)
- :Trace Registers: From IDR5
- :Notes:
- Number of external inputs
- ----
- :File: ``nr_ss_cmp`` (ro)
- :Trace Registers: From IDR4
- :Notes:
- Number of Single Shot control registers
- ----
- *Note:* When programming any address comparator the driver will tag the
- comparator with a type used - i.e. RANGE, SINGLE, START, STOP. Once this tag
- is set, then only the values can be changed using the same sysfs file / type
- used to program it.
- Thus::
- % echo 0 > addr_idx ; select address comparator 0
- % echo 0x1000 0x5000 0 > addr_range ; set address range on comparators 0, 1.
- % echo 0x2000 > addr_start ; error as comparator 0 is a range comparator
- % echo 2 > addr_idx ; select address comparator 2
- % echo 0x2000 > addr_start ; this is OK as comparator 2 is unused.
- % echo 0x3000 > addr_stop ; error as comparator 2 set as start address.
- % echo 2 > addr_idx ; select address comparator 3
- % echo 0x3000 > addr_stop ; this is OK
- To remove programming on all the comparators (and all the other hardware) use
- the reset parameter::
- % echo 1 > reset
- The ‘mode’ sysfs parameter.
- ---------------------------
- This is a bitfield selection parameter that sets the overall trace mode for the
- ETM. The table below describes the bits, using the defines from the driver
- source file, along with a description of the feature these represent. Many
- features are optional and therefore dependent on implementation in the
- hardware.
- Bit assignments shown below:-
- ----
- **bit (0):**
- ETM_MODE_EXCLUDE
- **description:**
- This is the default value for the include / exclude function when
- setting address ranges. Set 1 for exclude range. When the mode
- parameter is set this value is applied to the currently indexed
- address range.
- .. _coresight-branch-broadcast:
- **bit (4):**
- ETM_MODE_BB
- **description:**
- Set to enable branch broadcast if supported in hardware [IDR0]. The primary use for this feature
- is when code is patched dynamically at run time and the full program flow may not be able to be
- reconstructed using only conditional branches.
- There is currently no support in Perf for supplying modified binaries to the decoder, so this
- feature is only intended to be used for debugging purposes or with a 3rd party tool.
- Choosing this option will result in a significant increase in the amount of trace generated -
- possible danger of overflows, or fewer instructions covered. Note, that this option also
- overrides any setting of :ref:`ETM_MODE_RETURNSTACK <coresight-return-stack>`, so where a branch
- broadcast range overlaps a return stack range, return stacks will not be available for that
- range.
- .. _coresight-cycle-accurate:
- **bit (5):**
- ETMv4_MODE_CYCACC
- **description:**
- Set to enable cycle accurate trace if supported [IDR0].
- **bit (6):**
- ETMv4_MODE_CTXID
- **description:**
- Set to enable context ID tracing if supported in hardware [IDR2].
- **bit (7):**
- ETM_MODE_VMID
- **description:**
- Set to enable virtual machine ID tracing if supported [IDR2].
- .. _coresight-timestamp:
- **bit (11):**
- ETMv4_MODE_TIMESTAMP
- **description:**
- Set to enable timestamp generation if supported [IDR0].
- .. _coresight-return-stack:
- **bit (12):**
- ETM_MODE_RETURNSTACK
- **description:**
- Set to enable trace return stack use if supported [IDR0].
- **bit (13-14):**
- ETM_MODE_QELEM(val)
- **description:**
- ‘val’ determines level of Q element support enabled if
- implemented by the ETM [IDR0]
- **bit (19):**
- ETM_MODE_ATB_TRIGGER
- **description:**
- Set to enable the ATBTRIGGER bit in the event control register
- [EVENTCTLR1] if supported [IDR5].
- **bit (20):**
- ETM_MODE_LPOVERRIDE
- **description:**
- Set to enable the LPOVERRIDE bit in the event control register
- [EVENTCTLR1], if supported [IDR5].
- **bit (21):**
- ETM_MODE_ISTALL_EN
- **description:**
- Set to enable the ISTALL bit in the stall control register
- [STALLCTLR]
- **bit (23):**
- ETM_MODE_INSTPRIO
- **description:**
- Set to enable the INSTPRIORITY bit in the stall control register
- [STALLCTLR] , if supported [IDR0].
- **bit (24):**
- ETM_MODE_NOOVERFLOW
- **description:**
- Set to enable the NOOVERFLOW bit in the stall control register
- [STALLCTLR], if supported [IDR3].
- **bit (25):**
- ETM_MODE_TRACE_RESET
- **description:**
- Set to enable the TRCRESET bit in the viewinst control register
- [VICTLR] , if supported [IDR3].
- **bit (26):**
- ETM_MODE_TRACE_ERR
- **description:**
- Set to enable the TRCCTRL bit in the viewinst control register
- [VICTLR].
- **bit (27):**
- ETM_MODE_VIEWINST_STARTSTOP
- **description:**
- Set the initial state value of the ViewInst start / stop logic
- in the viewinst control register [VICTLR]
- **bit (30):**
- ETM_MODE_EXCL_KERN
- **description:**
- Set default trace setup to exclude kernel mode trace (see note a)
- **bit (31):**
- ETM_MODE_EXCL_USER
- **description:**
- Set default trace setup to exclude user space trace (see note a)
- ----
- *Note a)* On startup the ETM is programmed to trace the complete address space
- using address range comparator 0. ‘mode’ bits 30 / 31 modify this setting to
- set EL exclude bits for NS state in either user space (EL0) or kernel space
- (EL1) in the address range comparator. (the default setting excludes all
- secure EL, and NS EL2)
- Once the reset parameter has been used, and/or custom programming has been
- implemented - using these bits will result in the EL bits for address
- comparator 0 being set in the same way.
- *Note b)* Bits 2-3, 8-10, 15-16, 18, 22, control features that only work with
- data trace. As A-profile data trace is architecturally prohibited in ETMv4,
- these have been omitted here. Possible uses could be where a kernel has
- support for control of R or M profile infrastructure as part of a heterogeneous
- system.
- Bits 17, 28-29 are unused.
|