===============================================
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 inteded 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.
