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

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.

bit (4):

ETM_MODE_BB

description:

Set to enable branch broadcast if supported in hardware [IDR0].

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].

bit (11):

ETMv4_MODE_TIMESTAMP

description:

Set to enable timestamp generation if supported [IDR0].

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.