1b1670691SRuslan Bukin /*- 2*c9ea007cSRuslan Bukin * Copyright (c) 2018-2020 Ruslan Bukin <br@bsdpad.com> 3b1670691SRuslan Bukin * All rights reserved. 4b1670691SRuslan Bukin * 5b1670691SRuslan Bukin * This software was developed by BAE Systems, the University of Cambridge 6b1670691SRuslan Bukin * Computer Laboratory, and Memorial University under DARPA/AFRL contract 7b1670691SRuslan Bukin * FA8650-15-C-7558 ("CADETS"), as part of the DARPA Transparent Computing 8b1670691SRuslan Bukin * (TC) research program. 9b1670691SRuslan Bukin * 10b1670691SRuslan Bukin * Redistribution and use in source and binary forms, with or without 11b1670691SRuslan Bukin * modification, are permitted provided that the following conditions 12b1670691SRuslan Bukin * are met: 13b1670691SRuslan Bukin * 1. Redistributions of source code must retain the above copyright 14b1670691SRuslan Bukin * notice, this list of conditions and the following disclaimer. 15b1670691SRuslan Bukin * 2. Redistributions in binary form must reproduce the above copyright 16b1670691SRuslan Bukin * notice, this list of conditions and the following disclaimer in the 17b1670691SRuslan Bukin * documentation and/or other materials provided with the distribution. 18b1670691SRuslan Bukin * 19b1670691SRuslan Bukin * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 20b1670691SRuslan Bukin * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21b1670691SRuslan Bukin * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22b1670691SRuslan Bukin * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 23b1670691SRuslan Bukin * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24b1670691SRuslan Bukin * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 25b1670691SRuslan Bukin * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26b1670691SRuslan Bukin * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27b1670691SRuslan Bukin * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28b1670691SRuslan Bukin * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29b1670691SRuslan Bukin * SUCH DAMAGE. 30b1670691SRuslan Bukin */ 31b1670691SRuslan Bukin 32b1670691SRuslan Bukin #ifndef _ARM64_CORESIGHT_ETM4X_H_ 33b1670691SRuslan Bukin #define _ARM64_CORESIGHT_ETM4X_H_ 34b1670691SRuslan Bukin 35b1670691SRuslan Bukin #define TRCPRGCTLR 0x004 /* Trace Programming Control Register */ 36b1670691SRuslan Bukin #define TRCPRGCTLR_EN (1 << 0) /* Trace unit enable bit */ 37b1670691SRuslan Bukin #define TRCPROCSELR 0x008 /* Trace PE Select Control Register */ 38b1670691SRuslan Bukin #define TRCSTATR 0x00C /* Trace Trace Status Register */ 39b1670691SRuslan Bukin #define TRCSTATR_PMSTABLE (1 << 1) /* The programmers' model is stable. */ 40b1670691SRuslan Bukin #define TRCSTATR_IDLE (1 << 0) /* The trace unit is idle. */ 41b1670691SRuslan Bukin #define TRCCONFIGR 0x010 /* Trace Trace Configuration Register */ 42b1670691SRuslan Bukin #define TRCCONFIGR_DV (1 << 17) /* Data value tracing is enabled when INSTP0 is not 0b00 */ 43b1670691SRuslan Bukin #define TRCCONFIGR_DA (1 << 16) /* Data address tracing is enabled when INSTP0 is not 0b00. */ 44b1670691SRuslan Bukin #define TRCCONFIGR_VMIDOPT (1 << 15) /* Control bit to configure the Virtual context identifier value */ 45b1670691SRuslan Bukin #define TRCCONFIGR_QE_S 13 /* Q element enable field */ 46b1670691SRuslan Bukin #define TRCCONFIGR_QE_M (0x3 << TRCCONFIGR_QE_S) 47b1670691SRuslan Bukin #define TRCCONFIGR_RS (1 << 12) /* Return stack enable bit */ 48b1670691SRuslan Bukin #define TRCCONFIGR_TS (1 << 11) /* Global timestamp tracing is enabled. */ 49b1670691SRuslan Bukin #define TRCCONFIGR_COND_S 8 /* Conditional instruction tracing bit. */ 50b1670691SRuslan Bukin #define TRCCONFIGR_COND_M (0x7 << TRCCONFIGR_COND_S) 51b1670691SRuslan Bukin #define TRCCONFIGR_COND_DIS 0 52b1670691SRuslan Bukin #define TRCCONFIGR_COND_LDR (1 << TRCCONFIGR_COND_S) /* Conditional load instructions are traced. */ 53b1670691SRuslan Bukin #define TRCCONFIGR_COND_STR (2 << TRCCONFIGR_COND_S) /* Conditional store instructions are traced. */ 54b1670691SRuslan Bukin #define TRCCONFIGR_COND_LDRSTR (3 << TRCCONFIGR_COND_S) /* Conditional load and store instructions are traced. */ 55b1670691SRuslan Bukin #define TRCCONFIGR_COND_ALL (7 << TRCCONFIGR_COND_S) /* All conditional instructions are traced. */ 56b1670691SRuslan Bukin #define TRCCONFIGR_VMID (1 << 7) /* Virtual context identifier tracing is enabled. */ 57b1670691SRuslan Bukin #define TRCCONFIGR_CID (1 << 6) /* Context ID tracing is enabled. */ 58b1670691SRuslan Bukin #define TRCCONFIGR_CCI (1 << 4) /* Cycle counting in the instruction trace is enabled. */ 59b1670691SRuslan Bukin #define TRCCONFIGR_BB (1 << 3) /* Branch broadcast mode is enabled. */ 60b1670691SRuslan Bukin #define TRCCONFIGR_INSTP0_S 1 /* Instruction P0 field. */ 61b1670691SRuslan Bukin #define TRCCONFIGR_INSTP0_M (0x3 << TRCCONFIGR_INSTP0_S) 62b1670691SRuslan Bukin #define TRCCONFIGR_INSTP0_NONE 0 /* Do not trace load and store instructions as P0 instructions. */ 63b1670691SRuslan Bukin #define TRCCONFIGR_INSTP0_LDR (1 << TRCCONFIGR_INSTP0_S) /* Trace load instructions as P0 instructions. */ 64b1670691SRuslan Bukin #define TRCCONFIGR_INSTP0_STR (2 << TRCCONFIGR_INSTP0_S) /* Trace store instructions as P0 instructions. */ 65b1670691SRuslan Bukin #define TRCCONFIGR_INSTP0_LDRSTR (3 << TRCCONFIGR_INSTP0_S) /* Trace load and store instructions as P0 instr. */ 66b1670691SRuslan Bukin #define TRCAUXCTLR 0x018 /* Trace Auxiliary Control Register */ 67b1670691SRuslan Bukin #define TRCEVENTCTL0R 0x020 /* Trace Event Control 0 Register */ 68b1670691SRuslan Bukin #define TRCEVENTCTL1R 0x024 /* Trace Event Control 1 Register */ 69b1670691SRuslan Bukin #define TRCSTALLCTLR 0x02C /* Trace Stall Control Register */ 70b1670691SRuslan Bukin #define TRCTSCTLR 0x030 /* Trace Global Timestamp Control Register */ 71b1670691SRuslan Bukin #define TRCSYNCPR 0x034 /* Trace Synchronization Period Register */ 72b1670691SRuslan Bukin #define TRCSYNCPR_PERIOD_S 0 73b1670691SRuslan Bukin #define TRCSYNCPR_PERIOD_M 0x1f 74b1670691SRuslan Bukin #define TRCSYNCPR_1K (10 << TRCSYNCPR_PERIOD_S) 75b1670691SRuslan Bukin #define TRCSYNCPR_2K (11 << TRCSYNCPR_PERIOD_S) 76b1670691SRuslan Bukin #define TRCSYNCPR_4K (12 << TRCSYNCPR_PERIOD_S) 77b1670691SRuslan Bukin #define TRCCCCTLR 0x038 /* Trace Cycle Count Control Register */ 78b1670691SRuslan Bukin #define TRCBBCTLR 0x03C /* Trace Branch Broadcast Control Register */ 79b1670691SRuslan Bukin #define TRCTRACEIDR 0x040 /* Trace Trace ID Register */ 80b1670691SRuslan Bukin #define TRCQCTLR 0x044 /* Trace Q Element Control Register */ 81b1670691SRuslan Bukin #define TRCQCTLR_MODE_INC (1 << 8) /* Include mode. */ 82b1670691SRuslan Bukin #define TRCVICTLR 0x080 /* Trace ViewInst Main Control Register */ 83b1670691SRuslan Bukin #define TRCVICTLR_SSSTATUS (1 << 9) /* The start/stop logic is in the started state. */ 84b1670691SRuslan Bukin #define TRCVICTLR_EXLEVEL_NS_S 20 85b1670691SRuslan Bukin #define TRCVICTLR_EXLEVEL_NS_M (0xf << TRCVICTLR_EXLEVEL_NS_S) 86b1670691SRuslan Bukin #define TRCVICTLR_EXLEVEL_NS(n) (0x1 << ((n) + TRCVICTLR_EXLEVEL_NS_S)) 87b1670691SRuslan Bukin #define TRCVICTLR_EXLEVEL_S_S 16 88b1670691SRuslan Bukin #define TRCVICTLR_EXLEVEL_S_M (0xf << TRCVICTLR_EXLEVEL_S_S) 89b1670691SRuslan Bukin #define TRCVICTLR_EXLEVEL_S(n) (0x1 << ((n) + TRCVICTLR_EXLEVEL_S_S)) 90b1670691SRuslan Bukin #define EVENT_SEL_S 0 91b1670691SRuslan Bukin #define EVENT_SEL_M (0x1f << EVENT_SEL_S) 92b1670691SRuslan Bukin #define TRCVIIECTLR 0x084 /* Trace ViewInst Include/Exclude Control Register */ 93b1670691SRuslan Bukin #define TRCVIIECTLR_INCLUDE_S 0 94b1670691SRuslan Bukin #define TRCVISSCTLR 0x088 /* Trace ViewInst Start/Stop Control Register */ 95b1670691SRuslan Bukin #define TRCVIPCSSCTLR 0x08C /* Trace ViewInst Start/Stop PE Comparator Control Register */ 96b1670691SRuslan Bukin #define TRCVDCTLR 0x0A0 /* Trace ViewData Main Control Register */ 97b1670691SRuslan Bukin #define TRCVDCTLR_TRCEXDATA (1 << 12) /* Exception and exception return data transfers are traced */ 98b1670691SRuslan Bukin #define TRCVDCTLR_TBI (1 << 11) /* The trace unit assigns bits[63:56] to have the same value as bits[63:56] of the data address. */ 99b1670691SRuslan Bukin #define TRCVDCTLR_PCREL (1 << 10) /* The trace unit does not trace the address or value portions of PC-relative transfers. */ 100b1670691SRuslan Bukin #define TRCVDCTLR_SPREL_S 8 101b1670691SRuslan Bukin #define TRCVDCTLR_SPREL_M (0x3 << TRCVDCTLR_SPREL_S) 102b1670691SRuslan Bukin #define TRCVDCTLR_EVENT_S 0 103b1670691SRuslan Bukin #define TRCVDCTLR_EVENT_M (0xff << TRCVDCTLR_EVENT_S) 104b1670691SRuslan Bukin #define TRCVDSACCTLR 0x0A4 /* Trace ViewData Include/Exclude Single Address Comparator Control Register */ 105b1670691SRuslan Bukin #define TRCVDARCCTLR 0x0A8 /* Trace ViewData Include/Exclude Address Range Comparator Control Register */ 106b1670691SRuslan Bukin #define TRCSEQEVR(n) (0x100 + (n) * 0x4) /* Trace Sequencer State Transition Control Register [n=0-2] */ 107b1670691SRuslan Bukin #define TRCSEQRSTEVR 0x118 /* Trace Sequencer Reset Control Register */ 108b1670691SRuslan Bukin #define TRCSEQSTR 0x11C /* Trace Sequencer State Register */ 109b1670691SRuslan Bukin #define TRCEXTINSELR 0x120 /* Trace External Input Select Register */ 110b1670691SRuslan Bukin #define TRCCNTRLDVR(n) (0x140 + (n) * 0x4) /* 32 Trace Counter Reload Value Register [n=0-3] */ 111b1670691SRuslan Bukin #define TRCCNTCTLR(n) (0x150 + (n) * 0x4) /* 32 Trace Counter Control Register [n=0-3] */ 112b1670691SRuslan Bukin #define TRCCNTVR(n) (0x160 + (n) * 0x4) /* 32 Trace Counter Value Register [n=0-3] */ 113b1670691SRuslan Bukin #define TRCIMSPEC(n) (0x1C0 + (n) * 0x4) /* Trace IMPLEMENTATION DEFINED register [n=0-7] */ 114b1670691SRuslan Bukin 115b1670691SRuslan Bukin #define TRCIDR0(n) (0x1E0 + 0x4 * (n)) 116b1670691SRuslan Bukin #define TRCIDR8(n) (0x180 + 0x4 * (n)) 117b1670691SRuslan Bukin #define TRCIDR(n) ((n > 7) ? TRCIDR8(n) : TRCIDR0(n)) 118b1670691SRuslan Bukin #define TRCIDR1_TRCARCHMAJ_S 8 119b1670691SRuslan Bukin #define TRCIDR1_TRCARCHMAJ_M (0xf << TRCIDR1_TRCARCHMAJ_S) 120b1670691SRuslan Bukin #define TRCIDR1_TRCARCHMIN_S 4 121b1670691SRuslan Bukin #define TRCIDR1_TRCARCHMIN_M (0xf << TRCIDR1_TRCARCHMIN_S) 122b1670691SRuslan Bukin 123b1670691SRuslan Bukin #define TRCRSCTLR(n) (0x200 + (n) * 0x4) /* Trace Resource Selection Control Register [n=2-31] */ 124b1670691SRuslan Bukin #define TRCSSCCR(n) (0x280 + (n) * 0x4) /* Trace Single-shot Comparator Control Register [n=0-7] */ 125b1670691SRuslan Bukin #define TRCSSCSR(n) (0x2A0 + (n) * 0x4) /* Trace Single-shot Comparator Status Register [n=0-7] */ 126b1670691SRuslan Bukin #define TRCSSPCICR(n) (0x2C0 + (n) * 0x4) /* Trace Single-shot PE Comparator Input Control [n=0-7] */ 127b1670691SRuslan Bukin #define TRCOSLAR 0x300 /* Management OS Lock Access Register */ 128b1670691SRuslan Bukin #define TRCOSLSR 0x304 /* Management OS Lock Status Register */ 129b1670691SRuslan Bukin #define TRCPDCR 0x310 /* Management PowerDown Control Register */ 130b1670691SRuslan Bukin #define TRCPDSR 0x314 /* Management PowerDown Status Register */ 131b1670691SRuslan Bukin #define TRCACVR(n) (0x400 + (n) * 0x8) /* Trace Address Comparator Value Register [n=0-15] */ 132b1670691SRuslan Bukin #define TRCACATR(n) (0x480 + (n) * 0x8) /* Trace Address Comparator Access Type Register [n=0-15] */ 133b1670691SRuslan Bukin #define TRCACATR_DTBM (1 << 21) 134b1670691SRuslan Bukin #define TRCACATR_DATARANGE (1 << 20) 135b1670691SRuslan Bukin #define TRCACATR_DATASIZE_S 18 136b1670691SRuslan Bukin #define TRCACATR_DATASIZE_M (0x3 << TRCACATR_DATASIZE_S) 137b1670691SRuslan Bukin #define TRCACATR_DATASIZE_B (0x0 << TRCACATR_DATASIZE_S) 138b1670691SRuslan Bukin #define TRCACATR_DATASIZE_HW (0x1 << TRCACATR_DATASIZE_S) 139b1670691SRuslan Bukin #define TRCACATR_DATASIZE_W (0x2 << TRCACATR_DATASIZE_S) 140b1670691SRuslan Bukin #define TRCACATR_DATASIZE_DW (0x3 << TRCACATR_DATASIZE_S) 141b1670691SRuslan Bukin #define TRCACATR_DATAMATCH_S 16 142b1670691SRuslan Bukin #define TRCACATR_DATAMATCH_M (0x3 << TRCACATR_DATAMATCH_S) 143b1670691SRuslan Bukin #define TRCACATR_EXLEVEL_S_S 8 144b1670691SRuslan Bukin #define TRCACATR_EXLEVEL_S_M (0xf << TRCACATR_EXLEVEL_S_S) 145b1670691SRuslan Bukin #define TRCACATR_EXLEVEL_S(n) (0x1 << ((n) + TRCACATR_EXLEVEL_S_S)) 146b1670691SRuslan Bukin #define TRCACATR_EXLEVEL_NS_S 12 147b1670691SRuslan Bukin #define TRCACATR_EXLEVEL_NS_M (0xf << TRCACATR_EXLEVEL_NS_S) 148b1670691SRuslan Bukin #define TRCACATR_EXLEVEL_NS(n) (0x1 << ((n) + TRCACATR_EXLEVEL_NS_S)) 149b1670691SRuslan Bukin #define TRCDVCVR(n) (0x500 + (n) * 0x8) /* Trace Data Value Comparator Value Register [n=0-7] */ 150b1670691SRuslan Bukin #define TRCDVCMR(n) (0x580 + (n) * 0x8) /* Trace Data Value Comparator Mask Register [n=0-7] */ 151b1670691SRuslan Bukin #define TRCCIDCVR(n) (0x600 + (n) * 0x8) /* Trace Context ID Comparator Value Register [n=0-7] */ 152b1670691SRuslan Bukin #define TRCVMIDCVR(n) (0x640 + (n) * 0x8) /* Trace Virtual context identifier Comparator Value [n=0-7] */ 153b1670691SRuslan Bukin #define TRCCIDCCTLR0 0x680 /* Trace Context ID Comparator Control Register 0 */ 154b1670691SRuslan Bukin #define TRCCIDCCTLR1 0x684 /* Trace Context ID Comparator Control Register 1 */ 155b1670691SRuslan Bukin #define TRCVMIDCCTLR0 0x688 /* Trace Virtual context identifier Comparator Control Register 0 */ 156b1670691SRuslan Bukin #define TRCVMIDCCTLR1 0x68C /* Trace Virtual context identifier Comparator Control Register 1 */ 157b1670691SRuslan Bukin #define TRCITCTRL 0xF00 /* Management Integration Mode Control register */ 158b1670691SRuslan Bukin #define TRCCLAIMSET 0xFA0 /* Trace Claim Tag Set register */ 159b1670691SRuslan Bukin #define TRCCLAIMCLR 0xFA4 /* Trace Claim Tag Clear register */ 160b1670691SRuslan Bukin #define TRCDEVAFF0 0xFA8 /* Management Device Affinity register 0 */ 161b1670691SRuslan Bukin #define TRCDEVAFF1 0xFAC /* Management Device Affinity register 1 */ 162b1670691SRuslan Bukin #define TRCLAR 0xFB0 /* Management Software Lock Access Register */ 163b1670691SRuslan Bukin #define TRCLSR 0xFB4 /* Management Software Lock Status Register */ 164b1670691SRuslan Bukin #define TRCAUTHSTATUS 0xFB8 /* Management Authentication Status register */ 165b1670691SRuslan Bukin #define TRCDEVARCH 0xFBC /* Management Device Architecture register */ 166b1670691SRuslan Bukin #define TRCDEVID 0xFC8 /* Management Device ID register */ 167b1670691SRuslan Bukin #define TRCDEVTYPE 0xFCC /* Management Device Type register */ 168b1670691SRuslan Bukin #define TRCPIDR4 0xFD0 /* Management Peripheral ID4 Register */ 169b1670691SRuslan Bukin #define TRCPIDR(n) (0xFE0 + (n) * 0x4) /* Management Peripheral IDn Register [n=0-3] */ 170b1670691SRuslan Bukin #define TRCPIDR567(n) (0xFD4 + ((n) - 5) * 0x4) /* Management Peripheral ID5 to Peripheral ID7 Registers */ 171b1670691SRuslan Bukin #define TRCCIDR(n) (0xFF0 + (n) * 0x4) /* Management Component IDn Register [n=0-4] */ 172b1670691SRuslan Bukin 173*c9ea007cSRuslan Bukin DECLARE_CLASS(etm_driver); 174*c9ea007cSRuslan Bukin 175*c9ea007cSRuslan Bukin struct etm_softc { 176*c9ea007cSRuslan Bukin struct resource *res; 177*c9ea007cSRuslan Bukin struct coresight_platform_data *pdata; 178*c9ea007cSRuslan Bukin }; 179*c9ea007cSRuslan Bukin 180*c9ea007cSRuslan Bukin int etm_attach(device_t dev); 181*c9ea007cSRuslan Bukin 182b1670691SRuslan Bukin #endif /* !_ARM64_CORESIGHT_ETM4X_H_ */ 183