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