1 // THIS HEADER FILE IS AUTOMATICALLY GENERATED -- DO NOT EDIT
2 
3 /**
4  * Copyright (c) 2024 Raspberry Pi Ltd.
5  *
6  * SPDX-License-Identifier: BSD-3-Clause
7  */
8 #ifndef _HARDWARE_STRUCTS_M33_H
9 #define _HARDWARE_STRUCTS_M33_H
10 
11 /**
12  * \file rp2350/m33.h
13  */
14 
15 #include "hardware/address_mapped.h"
16 #include "hardware/regs/m33.h"
17 
18 // Reference to datasheet: https://datasheets.raspberrypi.com/rp2350/rp2350-datasheet.pdf#tab-registerlist_m33
19 //
20 // The _REG_ macro is intended to help make the register navigable in your IDE (for example, using the "Go to Definition" feature)
21 // _REG_(x) will link to the corresponding register in hardware/regs/m33.h.
22 //
23 // Bit-field descriptions are of the form:
24 // BITMASK [BITRANGE] FIELDNAME (RESETVALUE) DESCRIPTION
25 
26 #if defined(__riscv) && PICO_FORBID_ARM_HEADERS_ON_RISCV
27 #error "Arm header included in a RISC-V build with PICO_FORBID_ARM_HEADERS_ON_RISCV=1"
28 #endif
29 
30 typedef struct {
31     // (Description copied from array index 0 register M33_ITM_STIM0 applies similarly to other array indexes)
32     _REG_(M33_ITM_STIM0_OFFSET) // M33_ITM_STIM0
33     // ITM Stimulus Port Register 0
34     // 0xffffffff [31:0]  STIMULUS     (0x00000000) Data to write to the Stimulus Port FIFO, for forwarding...
35     io_rw_32 itm_stim[32];
36 
37     uint32_t _pad0[864];
38 
39     _REG_(M33_ITM_TER0_OFFSET) // M33_ITM_TER0
40     // Provide an individual enable bit for each ITM_STIM register
41     // 0xffffffff [31:0]  STIMENA      (0x00000000) For STIMENA[m] in ITM_TER*n, controls whether...
42     io_rw_32 itm_ter0;
43 
44     uint32_t _pad1[15];
45 
46     _REG_(M33_ITM_TPR_OFFSET) // M33_ITM_TPR
47     // Controls which stimulus ports can be accessed by unprivileged code
48     // 0x0000000f [3:0]   PRIVMASK     (0x0) Bit mask to enable tracing on ITM stimulus ports
49     io_rw_32 itm_tpr;
50 
51     uint32_t _pad2[15];
52 
53     _REG_(M33_ITM_TCR_OFFSET) // M33_ITM_TCR
54     // Configures and controls transfers through the ITM interface
55     // 0x00800000 [23]    BUSY         (0) Indicates whether the ITM is currently processing events
56     // 0x007f0000 [22:16] TRACEBUSID   (0x00) Identifier for multi-source trace stream formatting
57     // 0x00000c00 [11:10] GTSFREQ      (0x0) Defines how often the ITM generates a global timestamp,...
58     // 0x00000300 [9:8]   TSPRESCALE   (0x0) Local timestamp prescaler, used with the trace packet...
59     // 0x00000020 [5]     STALLENA     (0) Stall the PE to guarantee delivery of Data Trace packets
60     // 0x00000010 [4]     SWOENA       (0) Enables asynchronous clocking of the timestamp counter
61     // 0x00000008 [3]     TXENA        (0) Enables forwarding of hardware event packet from the DWT...
62     // 0x00000004 [2]     SYNCENA      (0) Enables Synchronization packet transmission for a...
63     // 0x00000002 [1]     TSENA        (0) Enables Local timestamp generation
64     // 0x00000001 [0]     ITMENA       (0) Enables the ITM
65     io_rw_32 itm_tcr;
66 
67     uint32_t _pad3[27];
68 
69     _REG_(M33_INT_ATREADY_OFFSET) // M33_INT_ATREADY
70     // Integration Mode: Read ATB Ready
71     // 0x00000002 [1]     AFVALID      (0) A read of this bit returns the value of AFVALID
72     // 0x00000001 [0]     ATREADY      (0) A read of this bit returns the value of ATREADY
73     io_ro_32 int_atready;
74 
75     uint32_t _pad4;
76 
77     _REG_(M33_INT_ATVALID_OFFSET) // M33_INT_ATVALID
78     // Integration Mode: Write ATB Valid
79     // 0x00000002 [1]     AFREADY      (0) A write to this bit gives the value of AFREADY
80     // 0x00000001 [0]     ATREADY      (0) A write to this bit gives the value of ATVALID
81     io_rw_32 int_atvalid;
82 
83     uint32_t _pad5;
84 
85     _REG_(M33_ITM_ITCTRL_OFFSET) // M33_ITM_ITCTRL
86     // Integration Mode Control Register
87     // 0x00000001 [0]     IME          (0) Integration mode enable bit - The possible values are: ...
88     io_rw_32 itm_itctrl;
89 
90     uint32_t _pad6[46];
91 
92     _REG_(M33_ITM_DEVARCH_OFFSET) // M33_ITM_DEVARCH
93     // Provides CoreSight discovery information for the ITM
94     // 0xffe00000 [31:21] ARCHITECT    (0x23b) Defines the architect of the component
95     // 0x00100000 [20]    PRESENT      (1) Defines that the DEVARCH register is present
96     // 0x000f0000 [19:16] REVISION     (0x0) Defines the architecture revision of the component
97     // 0x0000f000 [15:12] ARCHVER      (0x1) Defines the architecture version of the component
98     // 0x00000fff [11:0]  ARCHPART     (0xa01) Defines the architecture of the component
99     io_ro_32 itm_devarch;
100 
101     uint32_t _pad7[3];
102 
103     _REG_(M33_ITM_DEVTYPE_OFFSET) // M33_ITM_DEVTYPE
104     // Provides CoreSight discovery information for the ITM
105     // 0x000000f0 [7:4]   SUB          (0x4) Component sub-type
106     // 0x0000000f [3:0]   MAJOR        (0x3) Component major type
107     io_ro_32 itm_devtype;
108 
109     _REG_(M33_ITM_PIDR4_OFFSET) // M33_ITM_PIDR4
110     // Provides CoreSight discovery information for the ITM
111     // 0x000000f0 [7:4]   SIZE         (0x0) See CoreSight Architecture Specification
112     // 0x0000000f [3:0]   DES_2        (0x4) See CoreSight Architecture Specification
113     io_ro_32 itm_pidr4;
114 
115     _REG_(M33_ITM_PIDR5_OFFSET) // M33_ITM_PIDR5
116     // Provides CoreSight discovery information for the ITM
117     // 0x00000000 [31:0]  ITM_PIDR5    (0x00000000)
118     io_rw_32 itm_pidr5;
119 
120     _REG_(M33_ITM_PIDR6_OFFSET) // M33_ITM_PIDR6
121     // Provides CoreSight discovery information for the ITM
122     // 0x00000000 [31:0]  ITM_PIDR6    (0x00000000)
123     io_rw_32 itm_pidr6;
124 
125     _REG_(M33_ITM_PIDR7_OFFSET) // M33_ITM_PIDR7
126     // Provides CoreSight discovery information for the ITM
127     // 0x00000000 [31:0]  ITM_PIDR7    (0x00000000)
128     io_rw_32 itm_pidr7;
129 
130     _REG_(M33_ITM_PIDR0_OFFSET) // M33_ITM_PIDR0
131     // Provides CoreSight discovery information for the ITM
132     // 0x000000ff [7:0]   PART_0       (0x21) See CoreSight Architecture Specification
133     io_ro_32 itm_pidr0;
134 
135     _REG_(M33_ITM_PIDR1_OFFSET) // M33_ITM_PIDR1
136     // Provides CoreSight discovery information for the ITM
137     // 0x000000f0 [7:4]   DES_0        (0xb) See CoreSight Architecture Specification
138     // 0x0000000f [3:0]   PART_1       (0xd) See CoreSight Architecture Specification
139     io_ro_32 itm_pidr1;
140 
141     _REG_(M33_ITM_PIDR2_OFFSET) // M33_ITM_PIDR2
142     // Provides CoreSight discovery information for the ITM
143     // 0x000000f0 [7:4]   REVISION     (0x0) See CoreSight Architecture Specification
144     // 0x00000008 [3]     JEDEC        (1) See CoreSight Architecture Specification
145     // 0x00000007 [2:0]   DES_1        (0x3) See CoreSight Architecture Specification
146     io_ro_32 itm_pidr2;
147 
148     _REG_(M33_ITM_PIDR3_OFFSET) // M33_ITM_PIDR3
149     // Provides CoreSight discovery information for the ITM
150     // 0x000000f0 [7:4]   REVAND       (0x0) See CoreSight Architecture Specification
151     // 0x0000000f [3:0]   CMOD         (0x0) See CoreSight Architecture Specification
152     io_ro_32 itm_pidr3;
153 
154     // (Description copied from array index 0 register M33_ITM_CIDR0 applies similarly to other array indexes)
155     _REG_(M33_ITM_CIDR0_OFFSET) // M33_ITM_CIDR0
156     // Provides CoreSight discovery information for the ITM
157     // 0x000000ff [7:0]   PRMBL_0      (0x0d) See CoreSight Architecture Specification
158     io_ro_32 itm_cidr[4];
159 
160     _REG_(M33_DWT_CTRL_OFFSET) // M33_DWT_CTRL
161     // Provides configuration and status information for the DWT unit, and used to control features of the unit
162     // 0xf0000000 [31:28] NUMCOMP      (0x7) Number of DWT comparators implemented
163     // 0x08000000 [27]    NOTRCPKT     (0) Indicates whether the implementation does not support trace
164     // 0x04000000 [26]    NOEXTTRIG    (0) Reserved, RAZ
165     // 0x02000000 [25]    NOCYCCNT     (1) Indicates whether the implementation does not include a...
166     // 0x01000000 [24]    NOPRFCNT     (1) Indicates whether the implementation does not include...
167     // 0x00800000 [23]    CYCDISS      (0) Controls whether the cycle counter is disabled in Secure state
168     // 0x00400000 [22]    CYCEVTENA    (1) Enables Event Counter packet generation on POSTCNT underflow
169     // 0x00200000 [21]    FOLDEVTENA   (1) Enables DWT_FOLDCNT counter
170     // 0x00100000 [20]    LSUEVTENA    (1) Enables DWT_LSUCNT counter
171     // 0x00080000 [19]    SLEEPEVTENA  (0) Enable DWT_SLEEPCNT counter
172     // 0x00040000 [18]    EXCEVTENA    (1) Enables DWT_EXCCNT counter
173     // 0x00020000 [17]    CPIEVTENA    (0) Enables DWT_CPICNT counter
174     // 0x00010000 [16]    EXTTRCENA    (0) Enables generation of Exception Trace packets
175     // 0x00001000 [12]    PCSAMPLENA   (1) Enables use of POSTCNT counter as a timer for Periodic...
176     // 0x00000c00 [11:10] SYNCTAP      (0x2) Selects the position of the synchronization packet...
177     // 0x00000200 [9]     CYCTAP       (0) Selects the position of the POSTCNT tap on the CYCCNT counter
178     // 0x000001e0 [8:5]   POSTINIT     (0x1) Initial value for the POSTCNT counter
179     // 0x0000001e [4:1]   POSTPRESET   (0x2) Reload value for the POSTCNT counter
180     // 0x00000001 [0]     CYCCNTENA    (0) Enables CYCCNT
181     io_rw_32 dwt_ctrl;
182 
183     _REG_(M33_DWT_CYCCNT_OFFSET) // M33_DWT_CYCCNT
184     // Shows or sets the value of the processor cycle counter, CYCCNT
185     // 0xffffffff [31:0]  CYCCNT       (0x00000000) Increments one on each processor clock cycle when DWT_CTRL
186     io_rw_32 dwt_cyccnt;
187 
188     uint32_t _pad8;
189 
190     _REG_(M33_DWT_EXCCNT_OFFSET) // M33_DWT_EXCCNT
191     // Counts the total cycles spent in exception processing
192     // 0x000000ff [7:0]   EXCCNT       (0x00) Counts one on each cycle when all of the following are...
193     io_rw_32 dwt_exccnt;
194 
195     uint32_t _pad9;
196 
197     _REG_(M33_DWT_LSUCNT_OFFSET) // M33_DWT_LSUCNT
198     // Increments on the additional cycles required to execute all load or store instructions
199     // 0x000000ff [7:0]   LSUCNT       (0x00) Counts one on each cycle when all of the following are...
200     io_rw_32 dwt_lsucnt;
201 
202     _REG_(M33_DWT_FOLDCNT_OFFSET) // M33_DWT_FOLDCNT
203     // Increments on the additional cycles required to execute all load or store instructions
204     // 0x000000ff [7:0]   FOLDCNT      (0x00) Counts on each cycle when all of the following are true:...
205     io_rw_32 dwt_foldcnt;
206 
207     uint32_t _pad10;
208 
209     _REG_(M33_DWT_COMP0_OFFSET) // M33_DWT_COMP0
210     // Provides a reference value for use by watchpoint comparator 0
211     // 0xffffffff [31:0]  DWT_COMP0    (0x00000000)
212     io_rw_32 dwt_comp0;
213 
214     uint32_t _pad11;
215 
216     _REG_(M33_DWT_FUNCTION0_OFFSET) // M33_DWT_FUNCTION0
217     // Controls the operation of watchpoint comparator 0
218     // 0xf8000000 [31:27] ID           (0x0b) Identifies the capabilities for MATCH for comparator *n
219     // 0x01000000 [24]    MATCHED      (0) Set to 1 when the comparator matches
220     // 0x00000c00 [11:10] DATAVSIZE    (0x0) Defines the size of the object being watched for by Data...
221     // 0x00000030 [5:4]   ACTION       (0x0) Defines the action on a match
222     // 0x0000000f [3:0]   MATCH        (0x0) Controls the type of match generated by this comparator
223     io_rw_32 dwt_function0;
224 
225     uint32_t _pad12;
226 
227     _REG_(M33_DWT_COMP1_OFFSET) // M33_DWT_COMP1
228     // Provides a reference value for use by watchpoint comparator 1
229     // 0xffffffff [31:0]  DWT_COMP1    (0x00000000)
230     io_rw_32 dwt_comp1;
231 
232     uint32_t _pad13;
233 
234     _REG_(M33_DWT_FUNCTION1_OFFSET) // M33_DWT_FUNCTION1
235     // Controls the operation of watchpoint comparator 1
236     // 0xf8000000 [31:27] ID           (0x11) Identifies the capabilities for MATCH for comparator *n
237     // 0x01000000 [24]    MATCHED      (1) Set to 1 when the comparator matches
238     // 0x00000c00 [11:10] DATAVSIZE    (0x2) Defines the size of the object being watched for by Data...
239     // 0x00000030 [5:4]   ACTION       (0x2) Defines the action on a match
240     // 0x0000000f [3:0]   MATCH        (0x8) Controls the type of match generated by this comparator
241     io_rw_32 dwt_function1;
242 
243     uint32_t _pad14;
244 
245     _REG_(M33_DWT_COMP2_OFFSET) // M33_DWT_COMP2
246     // Provides a reference value for use by watchpoint comparator 2
247     // 0xffffffff [31:0]  DWT_COMP2    (0x00000000)
248     io_rw_32 dwt_comp2;
249 
250     uint32_t _pad15;
251 
252     _REG_(M33_DWT_FUNCTION2_OFFSET) // M33_DWT_FUNCTION2
253     // Controls the operation of watchpoint comparator 2
254     // 0xf8000000 [31:27] ID           (0x0a) Identifies the capabilities for MATCH for comparator *n
255     // 0x01000000 [24]    MATCHED      (0) Set to 1 when the comparator matches
256     // 0x00000c00 [11:10] DATAVSIZE    (0x0) Defines the size of the object being watched for by Data...
257     // 0x00000030 [5:4]   ACTION       (0x0) Defines the action on a match
258     // 0x0000000f [3:0]   MATCH        (0x0) Controls the type of match generated by this comparator
259     io_rw_32 dwt_function2;
260 
261     uint32_t _pad16;
262 
263     _REG_(M33_DWT_COMP3_OFFSET) // M33_DWT_COMP3
264     // Provides a reference value for use by watchpoint comparator 3
265     // 0xffffffff [31:0]  DWT_COMP3    (0x00000000)
266     io_rw_32 dwt_comp3;
267 
268     uint32_t _pad17;
269 
270     _REG_(M33_DWT_FUNCTION3_OFFSET) // M33_DWT_FUNCTION3
271     // Controls the operation of watchpoint comparator 3
272     // 0xf8000000 [31:27] ID           (0x04) Identifies the capabilities for MATCH for comparator *n
273     // 0x01000000 [24]    MATCHED      (0) Set to 1 when the comparator matches
274     // 0x00000c00 [11:10] DATAVSIZE    (0x2) Defines the size of the object being watched for by Data...
275     // 0x00000030 [5:4]   ACTION       (0x0) Defines the action on a match
276     // 0x0000000f [3:0]   MATCH        (0x0) Controls the type of match generated by this comparator
277     io_rw_32 dwt_function3;
278 
279     uint32_t _pad18[984];
280 
281     _REG_(M33_DWT_DEVARCH_OFFSET) // M33_DWT_DEVARCH
282     // Provides CoreSight discovery information for the DWT
283     // 0xffe00000 [31:21] ARCHITECT    (0x23b) Defines the architect of the component
284     // 0x00100000 [20]    PRESENT      (1) Defines that the DEVARCH register is present
285     // 0x000f0000 [19:16] REVISION     (0x0) Defines the architecture revision of the component
286     // 0x0000f000 [15:12] ARCHVER      (0x1) Defines the architecture version of the component
287     // 0x00000fff [11:0]  ARCHPART     (0xa02) Defines the architecture of the component
288     io_ro_32 dwt_devarch;
289 
290     uint32_t _pad19[3];
291 
292     _REG_(M33_DWT_DEVTYPE_OFFSET) // M33_DWT_DEVTYPE
293     // Provides CoreSight discovery information for the DWT
294     // 0x000000f0 [7:4]   SUB          (0x0) Component sub-type
295     // 0x0000000f [3:0]   MAJOR        (0x0) Component major type
296     io_ro_32 dwt_devtype;
297 
298     _REG_(M33_DWT_PIDR4_OFFSET) // M33_DWT_PIDR4
299     // Provides CoreSight discovery information for the DWT
300     // 0x000000f0 [7:4]   SIZE         (0x0) See CoreSight Architecture Specification
301     // 0x0000000f [3:0]   DES_2        (0x4) See CoreSight Architecture Specification
302     io_ro_32 dwt_pidr4;
303 
304     _REG_(M33_DWT_PIDR5_OFFSET) // M33_DWT_PIDR5
305     // Provides CoreSight discovery information for the DWT
306     // 0x00000000 [31:0]  DWT_PIDR5    (0x00000000)
307     io_rw_32 dwt_pidr5;
308 
309     _REG_(M33_DWT_PIDR6_OFFSET) // M33_DWT_PIDR6
310     // Provides CoreSight discovery information for the DWT
311     // 0x00000000 [31:0]  DWT_PIDR6    (0x00000000)
312     io_rw_32 dwt_pidr6;
313 
314     _REG_(M33_DWT_PIDR7_OFFSET) // M33_DWT_PIDR7
315     // Provides CoreSight discovery information for the DWT
316     // 0x00000000 [31:0]  DWT_PIDR7    (0x00000000)
317     io_rw_32 dwt_pidr7;
318 
319     _REG_(M33_DWT_PIDR0_OFFSET) // M33_DWT_PIDR0
320     // Provides CoreSight discovery information for the DWT
321     // 0x000000ff [7:0]   PART_0       (0x21) See CoreSight Architecture Specification
322     io_ro_32 dwt_pidr0;
323 
324     _REG_(M33_DWT_PIDR1_OFFSET) // M33_DWT_PIDR1
325     // Provides CoreSight discovery information for the DWT
326     // 0x000000f0 [7:4]   DES_0        (0xb) See CoreSight Architecture Specification
327     // 0x0000000f [3:0]   PART_1       (0xd) See CoreSight Architecture Specification
328     io_ro_32 dwt_pidr1;
329 
330     _REG_(M33_DWT_PIDR2_OFFSET) // M33_DWT_PIDR2
331     // Provides CoreSight discovery information for the DWT
332     // 0x000000f0 [7:4]   REVISION     (0x0) See CoreSight Architecture Specification
333     // 0x00000008 [3]     JEDEC        (1) See CoreSight Architecture Specification
334     // 0x00000007 [2:0]   DES_1        (0x3) See CoreSight Architecture Specification
335     io_ro_32 dwt_pidr2;
336 
337     _REG_(M33_DWT_PIDR3_OFFSET) // M33_DWT_PIDR3
338     // Provides CoreSight discovery information for the DWT
339     // 0x000000f0 [7:4]   REVAND       (0x0) See CoreSight Architecture Specification
340     // 0x0000000f [3:0]   CMOD         (0x0) See CoreSight Architecture Specification
341     io_ro_32 dwt_pidr3;
342 
343     // (Description copied from array index 0 register M33_DWT_CIDR0 applies similarly to other array indexes)
344     _REG_(M33_DWT_CIDR0_OFFSET) // M33_DWT_CIDR0
345     // Provides CoreSight discovery information for the DWT
346     // 0x000000ff [7:0]   PRMBL_0      (0x0d) See CoreSight Architecture Specification
347     io_ro_32 dwt_cidr[4];
348 
349     _REG_(M33_FP_CTRL_OFFSET) // M33_FP_CTRL
350     // Provides FPB implementation information, and the global enable for the FPB unit
351     // 0xf0000000 [31:28] REV          (0x6) Flash Patch and Breakpoint Unit architecture revision
352     // 0x00007000 [14:12] NUM_CODE_14_12_ (0x5) Indicates the number of implemented instruction address...
353     // 0x00000f00 [11:8]  NUM_LIT      (0x5) Indicates the number of implemented literal address comparators
354     // 0x000000f0 [7:4]   NUM_CODE_7_4_ (0x8) Indicates the number of implemented instruction address...
355     // 0x00000002 [1]     KEY          (0) Writes to the FP_CTRL are ignored unless KEY is...
356     // 0x00000001 [0]     ENABLE       (0) Enables the FPB
357     io_rw_32 fp_ctrl;
358 
359     _REG_(M33_FP_REMAP_OFFSET) // M33_FP_REMAP
360     // Indicates whether the implementation supports Flash Patch remap and, if it does, holds the...
361     // 0x20000000 [29]    RMPSPT       (0) Indicates whether the FPB unit supports the Flash Patch...
362     // 0x1fffffe0 [28:5]  REMAP        (0x000000) Holds the bits[28:5] of the Flash Patch remap address
363     io_ro_32 fp_remap;
364 
365     // (Description copied from array index 0 register M33_FP_COMP0 applies similarly to other array indexes)
366     _REG_(M33_FP_COMP0_OFFSET) // M33_FP_COMP0
367     // Holds an address for comparison
368     // 0x00000001 [0]     BE           (0) Selects between flashpatch and breakpoint functionality
369     io_rw_32 fp_comp[8];
370 
371     uint32_t _pad20[997];
372 
373     _REG_(M33_FP_DEVARCH_OFFSET) // M33_FP_DEVARCH
374     // Provides CoreSight discovery information for the FPB
375     // 0xffe00000 [31:21] ARCHITECT    (0x23b) Defines the architect of the component
376     // 0x00100000 [20]    PRESENT      (1) Defines that the DEVARCH register is present
377     // 0x000f0000 [19:16] REVISION     (0x0) Defines the architecture revision of the component
378     // 0x0000f000 [15:12] ARCHVER      (0x1) Defines the architecture version of the component
379     // 0x00000fff [11:0]  ARCHPART     (0xa03) Defines the architecture of the component
380     io_ro_32 fp_devarch;
381 
382     uint32_t _pad21[3];
383 
384     _REG_(M33_FP_DEVTYPE_OFFSET) // M33_FP_DEVTYPE
385     // Provides CoreSight discovery information for the FPB
386     // 0x000000f0 [7:4]   SUB          (0x0) Component sub-type
387     // 0x0000000f [3:0]   MAJOR        (0x0) Component major type
388     io_ro_32 fp_devtype;
389 
390     _REG_(M33_FP_PIDR4_OFFSET) // M33_FP_PIDR4
391     // Provides CoreSight discovery information for the FP
392     // 0x000000f0 [7:4]   SIZE         (0x0) See CoreSight Architecture Specification
393     // 0x0000000f [3:0]   DES_2        (0x4) See CoreSight Architecture Specification
394     io_ro_32 fp_pidr4;
395 
396     _REG_(M33_FP_PIDR5_OFFSET) // M33_FP_PIDR5
397     // Provides CoreSight discovery information for the FP
398     // 0x00000000 [31:0]  FP_PIDR5     (0x00000000)
399     io_rw_32 fp_pidr5;
400 
401     _REG_(M33_FP_PIDR6_OFFSET) // M33_FP_PIDR6
402     // Provides CoreSight discovery information for the FP
403     // 0x00000000 [31:0]  FP_PIDR6     (0x00000000)
404     io_rw_32 fp_pidr6;
405 
406     _REG_(M33_FP_PIDR7_OFFSET) // M33_FP_PIDR7
407     // Provides CoreSight discovery information for the FP
408     // 0x00000000 [31:0]  FP_PIDR7     (0x00000000)
409     io_rw_32 fp_pidr7;
410 
411     _REG_(M33_FP_PIDR0_OFFSET) // M33_FP_PIDR0
412     // Provides CoreSight discovery information for the FP
413     // 0x000000ff [7:0]   PART_0       (0x21) See CoreSight Architecture Specification
414     io_ro_32 fp_pidr0;
415 
416     _REG_(M33_FP_PIDR1_OFFSET) // M33_FP_PIDR1
417     // Provides CoreSight discovery information for the FP
418     // 0x000000f0 [7:4]   DES_0        (0xb) See CoreSight Architecture Specification
419     // 0x0000000f [3:0]   PART_1       (0xd) See CoreSight Architecture Specification
420     io_ro_32 fp_pidr1;
421 
422     _REG_(M33_FP_PIDR2_OFFSET) // M33_FP_PIDR2
423     // Provides CoreSight discovery information for the FP
424     // 0x000000f0 [7:4]   REVISION     (0x0) See CoreSight Architecture Specification
425     // 0x00000008 [3]     JEDEC        (1) See CoreSight Architecture Specification
426     // 0x00000007 [2:0]   DES_1        (0x3) See CoreSight Architecture Specification
427     io_ro_32 fp_pidr2;
428 
429     _REG_(M33_FP_PIDR3_OFFSET) // M33_FP_PIDR3
430     // Provides CoreSight discovery information for the FP
431     // 0x000000f0 [7:4]   REVAND       (0x0) See CoreSight Architecture Specification
432     // 0x0000000f [3:0]   CMOD         (0x0) See CoreSight Architecture Specification
433     io_ro_32 fp_pidr3;
434 
435     // (Description copied from array index 0 register M33_FP_CIDR0 applies similarly to other array indexes)
436     _REG_(M33_FP_CIDR0_OFFSET) // M33_FP_CIDR0
437     // Provides CoreSight discovery information for the FP
438     // 0x000000ff [7:0]   PRMBL_0      (0x0d) See CoreSight Architecture Specification
439     io_ro_32 fp_cidr[4];
440 
441     uint32_t _pad22[11265];
442 
443     _REG_(M33_ICTR_OFFSET) // M33_ICTR
444     // Provides information about the interrupt controller
445     // 0x0000000f [3:0]   INTLINESNUM  (0x1) Indicates the number of the highest implemented register...
446     io_ro_32 ictr;
447 
448     _REG_(M33_ACTLR_OFFSET) // M33_ACTLR
449     // Provides IMPLEMENTATION DEFINED configuration and control options
450     // 0x20000000 [29]    EXTEXCLALL   (0) External Exclusives Allowed with no MPU
451     // 0x00001000 [12]    DISITMATBFLUSH (0) Disable ATB Flush
452     // 0x00000400 [10]    FPEXCODIS    (0) Disable FPU exception outputs
453     // 0x00000200 [9]     DISOOFP      (0) Disable out-of-order FP instruction completion
454     // 0x00000004 [2]     DISFOLD      (0) Disable dual-issue
455     // 0x00000001 [0]     DISMCYCINT   (0) Disable dual-issue
456     io_rw_32 actlr;
457 
458     uint32_t _pad23;
459 
460     _REG_(M33_SYST_CSR_OFFSET) // M33_SYST_CSR
461     // SysTick Control and Status Register
462     // 0x00010000 [16]    COUNTFLAG    (0) Returns 1 if timer counted to 0 since last time this was read
463     // 0x00000004 [2]     CLKSOURCE    (0) SysTick clock source
464     // 0x00000002 [1]     TICKINT      (0) Enables SysTick exception request: +
465     // 0x00000001 [0]     ENABLE       (0) Enable SysTick counter: +
466     io_rw_32 syst_csr;
467 
468     _REG_(M33_SYST_RVR_OFFSET) // M33_SYST_RVR
469     // SysTick Reload Value Register
470     // 0x00ffffff [23:0]  RELOAD       (0x000000) Value to load into the SysTick Current Value Register...
471     io_rw_32 syst_rvr;
472 
473     _REG_(M33_SYST_CVR_OFFSET) // M33_SYST_CVR
474     // SysTick Current Value Register
475     // 0x00ffffff [23:0]  CURRENT      (0x000000) Reads return the current value of the SysTick counter
476     io_rw_32 syst_cvr;
477 
478     _REG_(M33_SYST_CALIB_OFFSET) // M33_SYST_CALIB
479     // SysTick Calibration Value Register
480     // 0x80000000 [31]    NOREF        (0) If reads as 1, the Reference clock is not provided - the...
481     // 0x40000000 [30]    SKEW         (0) If reads as 1, the calibration value for 10ms is inexact...
482     // 0x00ffffff [23:0]  TENMS        (0x000000) An optional Reload value to be used for 10ms (100Hz)...
483     io_ro_32 syst_calib;
484 
485     uint32_t _pad24[56];
486 
487     // (Description copied from array index 0 register M33_NVIC_ISER0 applies similarly to other array indexes)
488     _REG_(M33_NVIC_ISER0_OFFSET) // M33_NVIC_ISER0
489     // Enables or reads the enabled state of each group of 32 interrupts
490     // 0xffffffff [31:0]  SETENA       (0x00000000) For SETENA[m] in NVIC_ISER*n, indicates whether...
491     io_rw_32 nvic_iser[2];
492 
493     uint32_t _pad25[30];
494 
495     // (Description copied from array index 0 register M33_NVIC_ICER0 applies similarly to other array indexes)
496     _REG_(M33_NVIC_ICER0_OFFSET) // M33_NVIC_ICER0
497     // Clears or reads the enabled state of each group of 32 interrupts
498     // 0xffffffff [31:0]  CLRENA       (0x00000000) For CLRENA[m] in NVIC_ICER*n, indicates whether...
499     io_rw_32 nvic_icer[2];
500 
501     uint32_t _pad26[30];
502 
503     // (Description copied from array index 0 register M33_NVIC_ISPR0 applies similarly to other array indexes)
504     _REG_(M33_NVIC_ISPR0_OFFSET) // M33_NVIC_ISPR0
505     // Enables or reads the pending state of each group of 32 interrupts
506     // 0xffffffff [31:0]  SETPEND      (0x00000000) For SETPEND[m] in NVIC_ISPR*n, indicates whether...
507     io_rw_32 nvic_ispr[2];
508 
509     uint32_t _pad27[30];
510 
511     // (Description copied from array index 0 register M33_NVIC_ICPR0 applies similarly to other array indexes)
512     _REG_(M33_NVIC_ICPR0_OFFSET) // M33_NVIC_ICPR0
513     // Clears or reads the pending state of each group of 32 interrupts
514     // 0xffffffff [31:0]  CLRPEND      (0x00000000) For CLRPEND[m] in NVIC_ICPR*n, indicates whether...
515     io_rw_32 nvic_icpr[2];
516 
517     uint32_t _pad28[30];
518 
519     // (Description copied from array index 0 register M33_NVIC_IABR0 applies similarly to other array indexes)
520     _REG_(M33_NVIC_IABR0_OFFSET) // M33_NVIC_IABR0
521     // For each group of 32 interrupts, shows the active state of each interrupt
522     // 0xffffffff [31:0]  ACTIVE       (0x00000000) For ACTIVE[m] in NVIC_IABR*n, indicates the active state...
523     io_rw_32 nvic_iabr[2];
524 
525     uint32_t _pad29[30];
526 
527     // (Description copied from array index 0 register M33_NVIC_ITNS0 applies similarly to other array indexes)
528     _REG_(M33_NVIC_ITNS0_OFFSET) // M33_NVIC_ITNS0
529     // For each group of 32 interrupts, determines whether each interrupt targets Non-secure or Secure state
530     // 0xffffffff [31:0]  ITNS         (0x00000000) For ITNS[m] in NVIC_ITNS*n, `IAAMO the target Security...
531     io_rw_32 nvic_itns[2];
532 
533     uint32_t _pad30[30];
534 
535     // (Description copied from array index 0 register M33_NVIC_IPR0 applies similarly to other array indexes)
536     _REG_(M33_NVIC_IPR0_OFFSET) // M33_NVIC_IPR0
537     // Sets or reads interrupt priorities
538     // 0xf0000000 [31:28] PRI_N3       (0x0) For register NVIC_IPRn, the priority of interrupt number...
539     // 0x00f00000 [23:20] PRI_N2       (0x0) For register NVIC_IPRn, the priority of interrupt number...
540     // 0x0000f000 [15:12] PRI_N1       (0x0) For register NVIC_IPRn, the priority of interrupt number...
541     // 0x000000f0 [7:4]   PRI_N0       (0x0) For register NVIC_IPRn, the priority of interrupt number...
542     io_rw_32 nvic_ipr[16];
543 
544     uint32_t _pad31[560];
545 
546     _REG_(M33_CPUID_OFFSET) // M33_CPUID
547     // Provides identification information for the PE, including an implementer code for the device and...
548     // 0xff000000 [31:24] IMPLEMENTER  (0x41) This field must hold an implementer code that has been...
549     // 0x00f00000 [23:20] VARIANT      (0x1) IMPLEMENTATION DEFINED variant number
550     // 0x000f0000 [19:16] ARCHITECTURE (0xf) Defines the Architecture implemented by the PE
551     // 0x0000fff0 [15:4]  PARTNO       (0xd21) IMPLEMENTATION DEFINED primary part number for the device
552     // 0x0000000f [3:0]   REVISION     (0x0) IMPLEMENTATION DEFINED revision number for the device
553     io_ro_32 cpuid;
554 
555     _REG_(M33_ICSR_OFFSET) // M33_ICSR
556     // Controls and provides status information for NMI, PendSV, SysTick and interrupts
557     // 0x80000000 [31]    PENDNMISET   (0) Indicates whether the NMI exception is pending
558     // 0x40000000 [30]    PENDNMICLR   (0) Allows the NMI exception pend state to be cleared
559     // 0x10000000 [28]    PENDSVSET    (0) Indicates whether the PendSV `FTSSS exception is pending
560     // 0x08000000 [27]    PENDSVCLR    (0) Allows the PendSV exception pend state to be cleared `FTSSS
561     // 0x04000000 [26]    PENDSTSET    (0) Indicates whether the SysTick `FTSSS exception is pending
562     // 0x02000000 [25]    PENDSTCLR    (0) Allows the SysTick exception pend state to be cleared `FTSSS
563     // 0x01000000 [24]    STTNS        (0) Controls whether in a single SysTick implementation, the...
564     // 0x00800000 [23]    ISRPREEMPT   (0) Indicates whether a pending exception will be serviced...
565     // 0x00400000 [22]    ISRPENDING   (0) Indicates whether an external interrupt, generated by...
566     // 0x001ff000 [20:12] VECTPENDING  (0x000) The exception number of the highest priority pending and...
567     // 0x00000800 [11]    RETTOBASE    (0) In Handler mode, indicates whether there is more than...
568     // 0x000001ff [8:0]   VECTACTIVE   (0x000) The exception number of the current executing exception
569     io_rw_32 icsr;
570 
571     _REG_(M33_VTOR_OFFSET) // M33_VTOR
572     // Vector Table Offset Register
573     // 0xffffff80 [31:7]  TBLOFF       (0x0000000) Vector table base offset field
574     io_rw_32 vtor;
575 
576     _REG_(M33_AIRCR_OFFSET) // M33_AIRCR
577     // Application Interrupt and Reset Control Register
578     // 0xffff0000 [31:16] VECTKEY      (0x0000) Register key: +
579     // 0x00008000 [15]    ENDIANESS    (0) Data endianness implemented: +
580     // 0x00004000 [14]    PRIS         (0) Prioritize Secure exceptions
581     // 0x00002000 [13]    BFHFNMINS    (0) BusFault, HardFault, and NMI Non-secure enable
582     // 0x00000700 [10:8]  PRIGROUP     (0x0) Interrupt priority grouping field
583     // 0x00000008 [3]     SYSRESETREQS (0) System reset request, Secure state only
584     // 0x00000004 [2]     SYSRESETREQ  (0) Writing 1 to this bit causes the SYSRESETREQ signal to...
585     // 0x00000002 [1]     VECTCLRACTIVE (0) Clears all active state information for fixed and...
586     io_rw_32 aircr;
587 
588     _REG_(M33_SCR_OFFSET) // M33_SCR
589     // System Control Register
590     // 0x00000010 [4]     SEVONPEND    (0) Send Event on Pending bit: +
591     // 0x00000008 [3]     SLEEPDEEPS   (0) 0 SLEEPDEEP is available to both security states +
592     // 0x00000004 [2]     SLEEPDEEP    (0) Controls whether the processor uses sleep or deep sleep...
593     // 0x00000002 [1]     SLEEPONEXIT  (0) Indicates sleep-on-exit when returning from Handler mode...
594     io_rw_32 scr;
595 
596     _REG_(M33_CCR_OFFSET) // M33_CCR
597     // Sets or returns configuration and control data
598     // 0x00040000 [18]    BP           (0) Enables program flow prediction `FTSSS
599     // 0x00020000 [17]    IC           (0) This is a global enable bit for instruction caches in...
600     // 0x00010000 [16]    DC           (0) Enables data caching of all data accesses to Normal memory `FTSSS
601     // 0x00000400 [10]    STKOFHFNMIGN (0) Controls the effect of a stack limit violation while...
602     // 0x00000200 [9]     RES1         (1) Reserved, RES1
603     // 0x00000100 [8]     BFHFNMIGN    (0) Determines the effect of precise BusFaults on handlers...
604     // 0x00000010 [4]     DIV_0_TRP    (0) Controls the generation of a DIVBYZERO UsageFault when...
605     // 0x00000008 [3]     UNALIGN_TRP  (0) Controls the trapping of unaligned word or halfword accesses
606     // 0x00000002 [1]     USERSETMPEND (0) Determines whether unprivileged accesses are permitted...
607     // 0x00000001 [0]     RES1_1       (1) Reserved, RES1
608     io_rw_32 ccr;
609 
610     // (Description copied from array index 0 register M33_SHPR1 applies similarly to other array indexes)
611     _REG_(M33_SHPR1_OFFSET) // M33_SHPR1
612     // Sets or returns priority for system handlers 4 - 7
613     // 0xe0000000 [31:29] PRI_7_3      (0x0) Priority of system handler 7, SecureFault
614     // 0x00e00000 [23:21] PRI_6_3      (0x0) Priority of system handler 6, SecureFault
615     // 0x0000e000 [15:13] PRI_5_3      (0x0) Priority of system handler 5, SecureFault
616     // 0x000000e0 [7:5]   PRI_4_3      (0x0) Priority of system handler 4, SecureFault
617     io_rw_32 shpr[3];
618 
619     _REG_(M33_SHCSR_OFFSET) // M33_SHCSR
620     // Provides access to the active and pending status of system exceptions
621     // 0x00200000 [21]    HARDFAULTPENDED (0) `IAAMO the pending state of the HardFault exception `CTTSSS
622     // 0x00100000 [20]    SECUREFAULTPENDED (0) `IAAMO the pending state of the SecureFault exception
623     // 0x00080000 [19]    SECUREFAULTENA (0) `DW the SecureFault exception is enabled
624     // 0x00040000 [18]    USGFAULTENA  (0) `DW the UsageFault exception is enabled `FTSSS
625     // 0x00020000 [17]    BUSFAULTENA  (0) `DW the BusFault exception is enabled
626     // 0x00010000 [16]    MEMFAULTENA  (0) `DW the MemManage exception is enabled `FTSSS
627     // 0x00008000 [15]    SVCALLPENDED (0) `IAAMO the pending state of the SVCall exception `FTSSS
628     // 0x00004000 [14]    BUSFAULTPENDED (0) `IAAMO the pending state of the BusFault exception
629     // 0x00002000 [13]    MEMFAULTPENDED (0) `IAAMO the pending state of the MemManage exception `FTSSS
630     // 0x00001000 [12]    USGFAULTPENDED (0) The UsageFault exception is banked between Security...
631     // 0x00000800 [11]    SYSTICKACT   (0) `IAAMO the active state of the SysTick exception `FTSSS
632     // 0x00000400 [10]    PENDSVACT    (0) `IAAMO the active state of the PendSV exception `FTSSS
633     // 0x00000100 [8]     MONITORACT   (0) `IAAMO the active state of the DebugMonitor exception
634     // 0x00000080 [7]     SVCALLACT    (0) `IAAMO the active state of the SVCall exception `FTSSS
635     // 0x00000020 [5]     NMIACT       (0) `IAAMO the active state of the NMI exception
636     // 0x00000010 [4]     SECUREFAULTACT (0) `IAAMO the active state of the SecureFault exception
637     // 0x00000008 [3]     USGFAULTACT  (0) `IAAMO the active state of the UsageFault exception `FTSSS
638     // 0x00000004 [2]     HARDFAULTACT (0) Indicates and allows limited modification of the active...
639     // 0x00000002 [1]     BUSFAULTACT  (0) `IAAMO the active state of the BusFault exception
640     // 0x00000001 [0]     MEMFAULTACT  (0) `IAAMO the active state of the MemManage exception `FTSSS
641     io_rw_32 shcsr;
642 
643     _REG_(M33_CFSR_OFFSET) // M33_CFSR
644     // Contains the three Configurable Fault Status Registers
645     // 0x02000000 [25]    UFSR_DIVBYZERO (0) Sticky flag indicating whether an integer division by...
646     // 0x01000000 [24]    UFSR_UNALIGNED (0) Sticky flag indicating whether an unaligned access error...
647     // 0x00100000 [20]    UFSR_STKOF   (0) Sticky flag indicating whether a stack overflow error...
648     // 0x00080000 [19]    UFSR_NOCP    (0) Sticky flag indicating whether a coprocessor disabled or...
649     // 0x00040000 [18]    UFSR_INVPC   (0) Sticky flag indicating whether an integrity check error...
650     // 0x00020000 [17]    UFSR_INVSTATE (0) Sticky flag indicating whether an EPSR
651     // 0x00010000 [16]    UFSR_UNDEFINSTR (0) Sticky flag indicating whether an undefined instruction...
652     // 0x00008000 [15]    BFSR_BFARVALID (0) Indicates validity of the contents of the BFAR register
653     // 0x00002000 [13]    BFSR_LSPERR  (0) Records whether a BusFault occurred during FP lazy state...
654     // 0x00001000 [12]    BFSR_STKERR  (0) Records whether a derived BusFault occurred during...
655     // 0x00000800 [11]    BFSR_UNSTKERR (0) Records whether a derived BusFault occurred during...
656     // 0x00000400 [10]    BFSR_IMPRECISERR (0) Records whether an imprecise data access error has occurred
657     // 0x00000200 [9]     BFSR_PRECISERR (0) Records whether a precise data access error has occurred
658     // 0x00000100 [8]     BFSR_IBUSERR (0) Records whether a BusFault on an instruction prefetch...
659     // 0x000000ff [7:0]   MMFSR        (0x00) Provides information on MemManage exceptions
660     io_rw_32 cfsr;
661 
662     _REG_(M33_HFSR_OFFSET) // M33_HFSR
663     // Shows the cause of any HardFaults
664     // 0x80000000 [31]    DEBUGEVT     (0) Indicates when a Debug event has occurred
665     // 0x40000000 [30]    FORCED       (0) Indicates that a fault with configurable priority has...
666     // 0x00000002 [1]     VECTTBL      (0) Indicates when a fault has occurred because of a vector...
667     io_rw_32 hfsr;
668 
669     _REG_(M33_DFSR_OFFSET) // M33_DFSR
670     // Shows which debug event occurred
671     // 0x00000010 [4]     EXTERNAL     (0) Sticky flag indicating whether an External debug request...
672     // 0x00000008 [3]     VCATCH       (0) Sticky flag indicating whether a Vector catch debug...
673     // 0x00000004 [2]     DWTTRAP      (0) Sticky flag indicating whether a Watchpoint debug event...
674     // 0x00000002 [1]     BKPT         (0) Sticky flag indicating whether a Breakpoint debug event...
675     // 0x00000001 [0]     HALTED       (0) Sticky flag indicating that a Halt request debug event...
676     io_rw_32 dfsr;
677 
678     _REG_(M33_MMFAR_OFFSET) // M33_MMFAR
679     // Shows the address of the memory location that caused an MPU fault
680     // 0xffffffff [31:0]  ADDRESS      (0x00000000) This register is updated with the address of a location...
681     io_rw_32 mmfar;
682 
683     _REG_(M33_BFAR_OFFSET) // M33_BFAR
684     // Shows the address associated with a precise data access BusFault
685     // 0xffffffff [31:0]  ADDRESS      (0x00000000) This register is updated with the address of a location...
686     io_rw_32 bfar;
687 
688     uint32_t _pad32;
689 
690     // (Description copied from array index 0 register M33_ID_PFR0 applies similarly to other array indexes)
691     _REG_(M33_ID_PFR0_OFFSET) // M33_ID_PFR0
692     // Gives top-level information about the instruction set supported by the PE
693     // 0x000000f0 [7:4]   STATE1       (0x3) T32 instruction set support
694     // 0x0000000f [3:0]   STATE0       (0x0) A32 instruction set support
695     io_ro_32 id_pfr[2];
696 
697     _REG_(M33_ID_DFR0_OFFSET) // M33_ID_DFR0
698     // Provides top level information about the debug system
699     // 0x00f00000 [23:20] MPROFDBG     (0x2) Indicates the supported M-profile debug architecture
700     io_ro_32 id_dfr0;
701 
702     _REG_(M33_ID_AFR0_OFFSET) // M33_ID_AFR0
703     // Provides information about the IMPLEMENTATION DEFINED features of the PE
704     // 0x0000f000 [15:12] IMPDEF3      (0x0) IMPLEMENTATION DEFINED meaning
705     // 0x00000f00 [11:8]  IMPDEF2      (0x0) IMPLEMENTATION DEFINED meaning
706     // 0x000000f0 [7:4]   IMPDEF1      (0x0) IMPLEMENTATION DEFINED meaning
707     // 0x0000000f [3:0]   IMPDEF0      (0x0) IMPLEMENTATION DEFINED meaning
708     io_ro_32 id_afr0;
709 
710     // (Description copied from array index 0 register M33_ID_MMFR0 applies similarly to other array indexes)
711     _REG_(M33_ID_MMFR0_OFFSET) // M33_ID_MMFR0
712     // Provides information about the implemented memory model and memory management support
713     // 0x00f00000 [23:20] AUXREG       (0x1) Indicates support for Auxiliary Control Registers
714     // 0x000f0000 [19:16] TCM          (0x0) Indicates support for tightly coupled memories (TCMs)
715     // 0x0000f000 [15:12] SHARELVL     (0x1) Indicates the number of shareability levels implemented
716     // 0x00000f00 [11:8]  OUTERSHR     (0xf) Indicates the outermost shareability domain implemented
717     // 0x000000f0 [7:4]   PMSA         (0x4) Indicates support for the protected memory system...
718     io_ro_32 id_mmfr[4];
719 
720     // (Description copied from array index 0 register M33_ID_ISAR0 applies similarly to other array indexes)
721     _REG_(M33_ID_ISAR0_OFFSET) // M33_ID_ISAR0
722     // Provides information about the instruction set implemented by the PE
723     // 0x0f000000 [27:24] DIVIDE       (0x8) Indicates the supported Divide instructions
724     // 0x00f00000 [23:20] DEBUG        (0x0) Indicates the implemented Debug instructions
725     // 0x000f0000 [19:16] COPROC       (0x9) Indicates the supported Coprocessor instructions
726     // 0x0000f000 [15:12] CMPBRANCH    (0x2) Indicates the supported combined Compare and Branch instructions
727     // 0x00000f00 [11:8]  BITFIELD     (0x3) Indicates the supported bit field instructions
728     // 0x000000f0 [7:4]   BITCOUNT     (0x0) Indicates the supported bit count instructions
729     io_ro_32 id_isar[6];
730 
731     uint32_t _pad33;
732 
733     _REG_(M33_CTR_OFFSET) // M33_CTR
734     // Provides information about the architecture of the caches
735     // 0x80000000 [31]    RES1         (1) Reserved, RES1
736     // 0x0f000000 [27:24] CWG          (0x0) Log2 of the number of words of the maximum size of...
737     // 0x00f00000 [23:20] ERG          (0x0) Log2 of the number of words of the maximum size of the...
738     // 0x000f0000 [19:16] DMINLINE     (0x0) Log2 of the number of words in the smallest cache line...
739     // 0x0000c000 [15:14] RES1_1       (0x3) Reserved, RES1
740     // 0x0000000f [3:0]   IMINLINE     (0x0) Log2 of the number of words in the smallest cache line...
741     io_ro_32 ctr;
742 
743     uint32_t _pad34[2];
744 
745     _REG_(M33_CPACR_OFFSET) // M33_CPACR
746     // Specifies the access privileges for coprocessors and the FP Extension
747     // 0x00c00000 [23:22] CP11         (0x0) The value in this field is ignored
748     // 0x00300000 [21:20] CP10         (0x0) Defines the access rights for the floating-point functionality
749     // 0x0000c000 [15:14] CP7          (0x0) Controls access privileges for coprocessor 7
750     // 0x00003000 [13:12] CP6          (0x0) Controls access privileges for coprocessor 6
751     // 0x00000c00 [11:10] CP5          (0x0) Controls access privileges for coprocessor 5
752     // 0x00000300 [9:8]   CP4          (0x0) Controls access privileges for coprocessor 4
753     // 0x000000c0 [7:6]   CP3          (0x0) Controls access privileges for coprocessor 3
754     // 0x00000030 [5:4]   CP2          (0x0) Controls access privileges for coprocessor 2
755     // 0x0000000c [3:2]   CP1          (0x0) Controls access privileges for coprocessor 1
756     // 0x00000003 [1:0]   CP0          (0x0) Controls access privileges for coprocessor 0
757     io_rw_32 cpacr;
758 
759     _REG_(M33_NSACR_OFFSET) // M33_NSACR
760     // Defines the Non-secure access permissions for both the FP Extension and coprocessors CP0 to CP7
761     // 0x00000800 [11]    CP11         (0) Enables Non-secure access to the Floating-point Extension
762     // 0x00000400 [10]    CP10         (0) Enables Non-secure access to the Floating-point Extension
763     // 0x00000080 [7]     CP7          (0) Enables Non-secure access to coprocessor CP7
764     // 0x00000040 [6]     CP6          (0) Enables Non-secure access to coprocessor CP6
765     // 0x00000020 [5]     CP5          (0) Enables Non-secure access to coprocessor CP5
766     // 0x00000010 [4]     CP4          (0) Enables Non-secure access to coprocessor CP4
767     // 0x00000008 [3]     CP3          (0) Enables Non-secure access to coprocessor CP3
768     // 0x00000004 [2]     CP2          (0) Enables Non-secure access to coprocessor CP2
769     // 0x00000002 [1]     CP1          (0) Enables Non-secure access to coprocessor CP1
770     // 0x00000001 [0]     CP0          (0) Enables Non-secure access to coprocessor CP0
771     io_rw_32 nsacr;
772 
773     _REG_(M33_MPU_TYPE_OFFSET) // M33_MPU_TYPE
774     // The MPU Type Register indicates how many regions the MPU `FTSSS supports
775     // 0x0000ff00 [15:8]  DREGION      (0x08) Number of regions supported by the MPU
776     // 0x00000001 [0]     SEPARATE     (0) Indicates support for separate instructions and data...
777     io_ro_32 mpu_type;
778 
779     _REG_(M33_MPU_CTRL_OFFSET) // M33_MPU_CTRL
780     // Enables the MPU and, when the MPU is enabled, controls whether the default memory map is enabled...
781     // 0x00000004 [2]     PRIVDEFENA   (0) Controls whether the default memory map is enabled for...
782     // 0x00000002 [1]     HFNMIENA     (0) Controls whether handlers executing with priority less...
783     // 0x00000001 [0]     ENABLE       (0) Enables the MPU
784     io_rw_32 mpu_ctrl;
785 
786     _REG_(M33_MPU_RNR_OFFSET) // M33_MPU_RNR
787     // Selects the region currently accessed by MPU_RBAR and MPU_RLAR
788     // 0x00000007 [2:0]   REGION       (0x0) Indicates the memory region accessed by MPU_RBAR and MPU_RLAR
789     io_rw_32 mpu_rnr;
790 
791     _REG_(M33_MPU_RBAR_OFFSET) // M33_MPU_RBAR
792     // Provides indirect read and write access to the base address of the currently selected MPU region `FTSSS
793     // 0xffffffe0 [31:5]  BASE         (0x0000000) Contains bits [31:5] of the lower inclusive limit of the...
794     // 0x00000018 [4:3]   SH           (0x0) Defines the Shareability domain of this region for Normal memory
795     // 0x00000006 [2:1]   AP           (0x0) Defines the access permissions for this region
796     // 0x00000001 [0]     XN           (0) Defines whether code can be executed from this region
797     io_rw_32 mpu_rbar;
798 
799     _REG_(M33_MPU_RLAR_OFFSET) // M33_MPU_RLAR
800     // Provides indirect read and write access to the limit address of the currently selected MPU region `FTSSS
801     // 0xffffffe0 [31:5]  LIMIT        (0x0000000) Contains bits [31:5] of the upper inclusive limit of the...
802     // 0x0000000e [3:1]   ATTRINDX     (0x0) Associates a set of attributes in the MPU_MAIR0 and...
803     // 0x00000001 [0]     EN           (0) Region enable
804     io_rw_32 mpu_rlar;
805 
806     _REG_(M33_MPU_RBAR_A1_OFFSET) // M33_MPU_RBAR_A1
807     // Provides indirect read and write access to the base address of the MPU region selected by...
808     // 0xffffffe0 [31:5]  BASE         (0x0000000) Contains bits [31:5] of the lower inclusive limit of the...
809     // 0x00000018 [4:3]   SH           (0x0) Defines the Shareability domain of this region for Normal memory
810     // 0x00000006 [2:1]   AP           (0x0) Defines the access permissions for this region
811     // 0x00000001 [0]     XN           (0) Defines whether code can be executed from this region
812     io_rw_32 mpu_rbar_a1;
813 
814     _REG_(M33_MPU_RLAR_A1_OFFSET) // M33_MPU_RLAR_A1
815     // Provides indirect read and write access to the limit address of the currently selected MPU...
816     // 0xffffffe0 [31:5]  LIMIT        (0x0000000) Contains bits [31:5] of the upper inclusive limit of the...
817     // 0x0000000e [3:1]   ATTRINDX     (0x0) Associates a set of attributes in the MPU_MAIR0 and...
818     // 0x00000001 [0]     EN           (0) Region enable
819     io_rw_32 mpu_rlar_a1;
820 
821     _REG_(M33_MPU_RBAR_A2_OFFSET) // M33_MPU_RBAR_A2
822     // Provides indirect read and write access to the base address of the MPU region selected by...
823     // 0xffffffe0 [31:5]  BASE         (0x0000000) Contains bits [31:5] of the lower inclusive limit of the...
824     // 0x00000018 [4:3]   SH           (0x0) Defines the Shareability domain of this region for Normal memory
825     // 0x00000006 [2:1]   AP           (0x0) Defines the access permissions for this region
826     // 0x00000001 [0]     XN           (0) Defines whether code can be executed from this region
827     io_rw_32 mpu_rbar_a2;
828 
829     _REG_(M33_MPU_RLAR_A2_OFFSET) // M33_MPU_RLAR_A2
830     // Provides indirect read and write access to the limit address of the currently selected MPU...
831     // 0xffffffe0 [31:5]  LIMIT        (0x0000000) Contains bits [31:5] of the upper inclusive limit of the...
832     // 0x0000000e [3:1]   ATTRINDX     (0x0) Associates a set of attributes in the MPU_MAIR0 and...
833     // 0x00000001 [0]     EN           (0) Region enable
834     io_rw_32 mpu_rlar_a2;
835 
836     _REG_(M33_MPU_RBAR_A3_OFFSET) // M33_MPU_RBAR_A3
837     // Provides indirect read and write access to the base address of the MPU region selected by...
838     // 0xffffffe0 [31:5]  BASE         (0x0000000) Contains bits [31:5] of the lower inclusive limit of the...
839     // 0x00000018 [4:3]   SH           (0x0) Defines the Shareability domain of this region for Normal memory
840     // 0x00000006 [2:1]   AP           (0x0) Defines the access permissions for this region
841     // 0x00000001 [0]     XN           (0) Defines whether code can be executed from this region
842     io_rw_32 mpu_rbar_a3;
843 
844     _REG_(M33_MPU_RLAR_A3_OFFSET) // M33_MPU_RLAR_A3
845     // Provides indirect read and write access to the limit address of the currently selected MPU...
846     // 0xffffffe0 [31:5]  LIMIT        (0x0000000) Contains bits [31:5] of the upper inclusive limit of the...
847     // 0x0000000e [3:1]   ATTRINDX     (0x0) Associates a set of attributes in the MPU_MAIR0 and...
848     // 0x00000001 [0]     EN           (0) Region enable
849     io_rw_32 mpu_rlar_a3;
850 
851     uint32_t _pad35;
852 
853     // (Description copied from array index 0 register M33_MPU_MAIR0 applies similarly to other array indexes)
854     _REG_(M33_MPU_MAIR0_OFFSET) // M33_MPU_MAIR0
855     // Along with MPU_MAIR1, provides the memory attribute encodings corresponding to the AttrIndex values
856     // 0xff000000 [31:24] ATTR3        (0x00) Memory attribute encoding for MPU regions with an AttrIndex of 3
857     // 0x00ff0000 [23:16] ATTR2        (0x00) Memory attribute encoding for MPU regions with an AttrIndex of 2
858     // 0x0000ff00 [15:8]  ATTR1        (0x00) Memory attribute encoding for MPU regions with an AttrIndex of 1
859     // 0x000000ff [7:0]   ATTR0        (0x00) Memory attribute encoding for MPU regions with an AttrIndex of 0
860     io_rw_32 mpu_mair[2];
861 
862     uint32_t _pad36[2];
863 
864     _REG_(M33_SAU_CTRL_OFFSET) // M33_SAU_CTRL
865     // Allows enabling of the Security Attribution Unit
866     // 0x00000002 [1]     ALLNS        (0) When SAU_CTRL
867     // 0x00000001 [0]     ENABLE       (0) Enables the SAU
868     io_rw_32 sau_ctrl;
869 
870     _REG_(M33_SAU_TYPE_OFFSET) // M33_SAU_TYPE
871     // Indicates the number of regions implemented by the Security Attribution Unit
872     // 0x000000ff [7:0]   SREGION      (0x08) The number of implemented SAU regions
873     io_ro_32 sau_type;
874 
875     _REG_(M33_SAU_RNR_OFFSET) // M33_SAU_RNR
876     // Selects the region currently accessed by SAU_RBAR and SAU_RLAR
877     // 0x000000ff [7:0]   REGION       (0x00) Indicates the SAU region accessed by SAU_RBAR and SAU_RLAR
878     io_rw_32 sau_rnr;
879 
880     _REG_(M33_SAU_RBAR_OFFSET) // M33_SAU_RBAR
881     // Provides indirect read and write access to the base address of the currently selected SAU region
882     // 0xffffffe0 [31:5]  BADDR        (0x0000000) Holds bits [31:5] of the base address for the selected SAU region
883     io_rw_32 sau_rbar;
884 
885     _REG_(M33_SAU_RLAR_OFFSET) // M33_SAU_RLAR
886     // Provides indirect read and write access to the limit address of the currently selected SAU region
887     // 0xffffffe0 [31:5]  LADDR        (0x0000000) Holds bits [31:5] of the limit address for the selected...
888     // 0x00000002 [1]     NSC          (0) Controls whether Non-secure state is permitted to...
889     // 0x00000001 [0]     ENABLE       (0) SAU region enable
890     io_rw_32 sau_rlar;
891 
892     _REG_(M33_SFSR_OFFSET) // M33_SFSR
893     // Provides information about any security related faults
894     // 0x00000080 [7]     LSERR        (0) Sticky flag indicating that an error occurred during...
895     // 0x00000040 [6]     SFARVALID    (0) This bit is set when the SFAR register contains a valid value
896     // 0x00000020 [5]     LSPERR       (0) Stick flag indicating that an SAU or IDAU violation...
897     // 0x00000010 [4]     INVTRAN      (0) Sticky flag indicating that an exception was raised due...
898     // 0x00000008 [3]     AUVIOL       (0) Sticky flag indicating that an attempt was made to...
899     // 0x00000004 [2]     INVER        (0) This can be caused by EXC_RETURN
900     // 0x00000002 [1]     INVIS        (0) This bit is set if the integrity signature in an...
901     // 0x00000001 [0]     INVEP        (0) This bit is set if a function call from the Non-secure...
902     io_rw_32 sfsr;
903 
904     _REG_(M33_SFAR_OFFSET) // M33_SFAR
905     // Shows the address of the memory location that caused a Security violation
906     // 0xffffffff [31:0]  ADDRESS      (0x00000000) The address of an access that caused a attribution unit violation
907     io_rw_32 sfar;
908 
909     uint32_t _pad37;
910 
911     _REG_(M33_DHCSR_OFFSET) // M33_DHCSR
912     // Controls halting debug
913     // 0x04000000 [26]    S_RESTART_ST (0) Indicates the PE has processed a request to clear DHCSR
914     // 0x02000000 [25]    S_RESET_ST   (0) Indicates whether the PE has been reset since the last...
915     // 0x01000000 [24]    S_RETIRE_ST  (0) Set to 1 every time the PE retires one of more instructions
916     // 0x00100000 [20]    S_SDE        (0) Indicates whether Secure invasive debug is allowed
917     // 0x00080000 [19]    S_LOCKUP     (0) Indicates whether the PE is in Lockup state
918     // 0x00040000 [18]    S_SLEEP      (0) Indicates whether the PE is sleeping
919     // 0x00020000 [17]    S_HALT       (0) Indicates whether the PE is in Debug state
920     // 0x00010000 [16]    S_REGRDY     (0) Handshake flag to transfers through the DCRDR
921     // 0x00000020 [5]     C_SNAPSTALL  (0) Allow imprecise entry to Debug state
922     // 0x00000008 [3]     C_MASKINTS   (0) When debug is enabled, the debugger can write to this...
923     // 0x00000004 [2]     C_STEP       (0) Enable single instruction step
924     // 0x00000002 [1]     C_HALT       (0) PE enter Debug state halt request
925     // 0x00000001 [0]     C_DEBUGEN    (0) Enable Halting debug
926     io_rw_32 dhcsr;
927 
928     _REG_(M33_DCRSR_OFFSET) // M33_DCRSR
929     // With the DCRDR, provides debug access to the general-purpose registers, special-purpose...
930     // 0x00010000 [16]    REGWNR       (0) Specifies the access type for the transfer
931     // 0x0000007f [6:0]   REGSEL       (0x00) Specifies the general-purpose register, special-purpose...
932     io_rw_32 dcrsr;
933 
934     _REG_(M33_DCRDR_OFFSET) // M33_DCRDR
935     // With the DCRSR, provides debug access to the general-purpose registers, special-purpose...
936     // 0xffffffff [31:0]  DBGTMP       (0x00000000) Provides debug access for reading and writing the...
937     io_rw_32 dcrdr;
938 
939     _REG_(M33_DEMCR_OFFSET) // M33_DEMCR
940     // Manages vector catch behavior and DebugMonitor handling when debugging
941     // 0x01000000 [24]    TRCENA       (0) Global enable for all DWT and ITM features
942     // 0x00100000 [20]    SDME         (0) Indicates whether the DebugMonitor targets the Secure or...
943     // 0x00080000 [19]    MON_REQ      (0) DebugMonitor semaphore bit
944     // 0x00040000 [18]    MON_STEP     (0) Enable DebugMonitor stepping
945     // 0x00020000 [17]    MON_PEND     (0) Sets or clears the pending state of the DebugMonitor exception
946     // 0x00010000 [16]    MON_EN       (0) Enable the DebugMonitor exception
947     // 0x00000800 [11]    VC_SFERR     (0) SecureFault exception halting debug vector catch enable
948     // 0x00000400 [10]    VC_HARDERR   (0) HardFault exception halting debug vector catch enable
949     // 0x00000200 [9]     VC_INTERR    (0) Enable halting debug vector catch for faults during...
950     // 0x00000100 [8]     VC_BUSERR    (0) BusFault exception halting debug vector catch enable
951     // 0x00000080 [7]     VC_STATERR   (0) Enable halting debug trap on a UsageFault exception...
952     // 0x00000040 [6]     VC_CHKERR    (0) Enable halting debug trap on a UsageFault exception...
953     // 0x00000020 [5]     VC_NOCPERR   (0) Enable halting debug trap on a UsageFault caused by an...
954     // 0x00000010 [4]     VC_MMERR     (0) Enable halting debug trap on a MemManage exception
955     // 0x00000001 [0]     VC_CORERESET (0) Enable Reset Vector Catch
956     io_rw_32 demcr;
957 
958     uint32_t _pad38[2];
959 
960     _REG_(M33_DSCSR_OFFSET) // M33_DSCSR
961     // Provides control and status information for Secure debug
962     // 0x00020000 [17]    CDSKEY       (0) Writes to the CDS bit are ignored unless CDSKEY is...
963     // 0x00010000 [16]    CDS          (0) This field indicates the current Security state of the processor
964     // 0x00000002 [1]     SBRSEL       (0) If SBRSELEN is 1 this bit selects whether the Non-secure...
965     // 0x00000001 [0]     SBRSELEN     (0) Controls whether the SBRSEL field or the current...
966     io_rw_32 dscsr;
967 
968     uint32_t _pad39[61];
969 
970     _REG_(M33_STIR_OFFSET) // M33_STIR
971     // Provides a mechanism for software to generate an interrupt
972     // 0x000001ff [8:0]   INTID        (0x000) Indicates the interrupt to be pended
973     io_rw_32 stir;
974 
975     uint32_t _pad40[12];
976 
977     _REG_(M33_FPCCR_OFFSET) // M33_FPCCR
978     // Holds control data for the Floating-point extension
979     // 0x80000000 [31]    ASPEN        (0) When this bit is set to 1, execution of a floating-point...
980     // 0x40000000 [30]    LSPEN        (0) Enables lazy context save of floating-point state
981     // 0x20000000 [29]    LSPENS       (1) This bit controls whether the LSPEN bit is writeable...
982     // 0x10000000 [28]    CLRONRET     (0) Clear floating-point caller saved registers on exception return
983     // 0x08000000 [27]    CLRONRETS    (0) This bit controls whether the CLRONRET bit is writeable...
984     // 0x04000000 [26]    TS           (0) Treat floating-point registers as Secure enable
985     // 0x00000400 [10]    UFRDY        (1) Indicates whether the software executing when the PE...
986     // 0x00000200 [9]     SPLIMVIOL    (0) This bit is banked between the Security states and...
987     // 0x00000100 [8]     MONRDY       (0) Indicates whether the software executing when the PE...
988     // 0x00000080 [7]     SFRDY        (0) Indicates whether the software executing when the PE...
989     // 0x00000040 [6]     BFRDY        (1) Indicates whether the software executing when the PE...
990     // 0x00000020 [5]     MMRDY        (1) Indicates whether the software executing when the PE...
991     // 0x00000010 [4]     HFRDY        (1) Indicates whether the software executing when the PE...
992     // 0x00000008 [3]     THREAD       (0) Indicates the PE mode when it allocated the...
993     // 0x00000004 [2]     S            (0) Security status of the floating-point context
994     // 0x00000002 [1]     USER         (1) Indicates the privilege level of the software executing...
995     // 0x00000001 [0]     LSPACT       (0) Indicates whether lazy preservation of the...
996     io_rw_32 fpccr;
997 
998     _REG_(M33_FPCAR_OFFSET) // M33_FPCAR
999     // Holds the location of the unpopulated floating-point register space allocated on an exception stack frame
1000     // 0xfffffff8 [31:3]  ADDRESS      (0x00000000) The location of the unpopulated floating-point register...
1001     io_rw_32 fpcar;
1002 
1003     _REG_(M33_FPDSCR_OFFSET) // M33_FPDSCR
1004     // Holds the default values for the floating-point status control data that the PE assigns to the...
1005     // 0x04000000 [26]    AHP          (0) Default value for FPSCR
1006     // 0x02000000 [25]    DN           (0) Default value for FPSCR
1007     // 0x01000000 [24]    FZ           (0) Default value for FPSCR
1008     // 0x00c00000 [23:22] RMODE        (0x0) Default value for FPSCR
1009     io_rw_32 fpdscr;
1010 
1011     // (Description copied from array index 0 register M33_MVFR0 applies similarly to other array indexes)
1012     _REG_(M33_MVFR0_OFFSET) // M33_MVFR0
1013     // Describes the features provided by the Floating-point Extension
1014     // 0xf0000000 [31:28] FPROUND      (0x6) Indicates the rounding modes supported by the FP Extension
1015     // 0x00f00000 [23:20] FPSQRT       (0x5) Indicates the support for FP square root operations
1016     // 0x000f0000 [19:16] FPDIVIDE     (0x4) Indicates the support for FP divide operations
1017     // 0x00000f00 [11:8]  FPDP         (0x6) Indicates support for FP double-precision operations
1018     // 0x000000f0 [7:4]   FPSP         (0x0) Indicates support for FP single-precision operations
1019     // 0x0000000f [3:0]   SIMDREG      (0x1) Indicates size of FP register file
1020     io_ro_32 mvfr[3];
1021 
1022     uint32_t _pad41[28];
1023 
1024     _REG_(M33_DDEVARCH_OFFSET) // M33_DDEVARCH
1025     // Provides CoreSight discovery information for the SCS
1026     // 0xffe00000 [31:21] ARCHITECT    (0x23b) Defines the architect of the component
1027     // 0x00100000 [20]    PRESENT      (1) Defines that the DEVARCH register is present
1028     // 0x000f0000 [19:16] REVISION     (0x0) Defines the architecture revision of the component
1029     // 0x0000f000 [15:12] ARCHVER      (0x2) Defines the architecture version of the component
1030     // 0x00000fff [11:0]  ARCHPART     (0xa04) Defines the architecture of the component
1031     io_ro_32 ddevarch;
1032 
1033     uint32_t _pad42[3];
1034 
1035     _REG_(M33_DDEVTYPE_OFFSET) // M33_DDEVTYPE
1036     // Provides CoreSight discovery information for the SCS
1037     // 0x000000f0 [7:4]   SUB          (0x0) Component sub-type
1038     // 0x0000000f [3:0]   MAJOR        (0x0) CoreSight major type
1039     io_ro_32 ddevtype;
1040 
1041     _REG_(M33_DPIDR4_OFFSET) // M33_DPIDR4
1042     // Provides CoreSight discovery information for the SCS
1043     // 0x000000f0 [7:4]   SIZE         (0x0) See CoreSight Architecture Specification
1044     // 0x0000000f [3:0]   DES_2        (0x4) See CoreSight Architecture Specification
1045     io_ro_32 dpidr4;
1046 
1047     _REG_(M33_DPIDR5_OFFSET) // M33_DPIDR5
1048     // Provides CoreSight discovery information for the SCS
1049     // 0x00000000 [31:0]  DPIDR5       (0x00000000)
1050     io_rw_32 dpidr5;
1051 
1052     _REG_(M33_DPIDR6_OFFSET) // M33_DPIDR6
1053     // Provides CoreSight discovery information for the SCS
1054     // 0x00000000 [31:0]  DPIDR6       (0x00000000)
1055     io_rw_32 dpidr6;
1056 
1057     _REG_(M33_DPIDR7_OFFSET) // M33_DPIDR7
1058     // Provides CoreSight discovery information for the SCS
1059     // 0x00000000 [31:0]  DPIDR7       (0x00000000)
1060     io_rw_32 dpidr7;
1061 
1062     _REG_(M33_DPIDR0_OFFSET) // M33_DPIDR0
1063     // Provides CoreSight discovery information for the SCS
1064     // 0x000000ff [7:0]   PART_0       (0x21) See CoreSight Architecture Specification
1065     io_ro_32 dpidr0;
1066 
1067     _REG_(M33_DPIDR1_OFFSET) // M33_DPIDR1
1068     // Provides CoreSight discovery information for the SCS
1069     // 0x000000f0 [7:4]   DES_0        (0xb) See CoreSight Architecture Specification
1070     // 0x0000000f [3:0]   PART_1       (0xd) See CoreSight Architecture Specification
1071     io_ro_32 dpidr1;
1072 
1073     _REG_(M33_DPIDR2_OFFSET) // M33_DPIDR2
1074     // Provides CoreSight discovery information for the SCS
1075     // 0x000000f0 [7:4]   REVISION     (0x0) See CoreSight Architecture Specification
1076     // 0x00000008 [3]     JEDEC        (1) See CoreSight Architecture Specification
1077     // 0x00000007 [2:0]   DES_1        (0x3) See CoreSight Architecture Specification
1078     io_ro_32 dpidr2;
1079 
1080     _REG_(M33_DPIDR3_OFFSET) // M33_DPIDR3
1081     // Provides CoreSight discovery information for the SCS
1082     // 0x000000f0 [7:4]   REVAND       (0x0) See CoreSight Architecture Specification
1083     // 0x0000000f [3:0]   CMOD         (0x0) See CoreSight Architecture Specification
1084     io_ro_32 dpidr3;
1085 
1086     // (Description copied from array index 0 register M33_DCIDR0 applies similarly to other array indexes)
1087     _REG_(M33_DCIDR0_OFFSET) // M33_DCIDR0
1088     // Provides CoreSight discovery information for the SCS
1089     // 0x000000ff [7:0]   PRMBL_0      (0x0d) See CoreSight Architecture Specification
1090     io_ro_32 dcidr[4];
1091 
1092     uint32_t _pad43[51201];
1093 
1094     _REG_(M33_TRCPRGCTLR_OFFSET) // M33_TRCPRGCTLR
1095     // Programming Control Register
1096     // 0x00000001 [0]     EN           (0) Trace Unit Enable
1097     io_rw_32 trcprgctlr;
1098 
1099     uint32_t _pad44;
1100 
1101     _REG_(M33_TRCSTATR_OFFSET) // M33_TRCSTATR
1102     // The TRCSTATR indicates the ETM-Teal status
1103     // 0x00000002 [1]     PMSTABLE     (0) Indicates whether the ETM-Teal registers are stable and...
1104     // 0x00000001 [0]     IDLE         (0) Indicates that the trace unit is inactive
1105     io_ro_32 trcstatr;
1106 
1107     _REG_(M33_TRCCONFIGR_OFFSET) // M33_TRCCONFIGR
1108     // The TRCCONFIGR sets the basic tracing options for the trace unit
1109     // 0x00001000 [12]    RS           (0) Return stack enable
1110     // 0x00000800 [11]    TS           (0) Global timestamp tracing
1111     // 0x000007e0 [10:5]  COND         (0x00) Conditional instruction tracing
1112     // 0x00000010 [4]     CCI          (0) Cycle counting in instruction trace
1113     // 0x00000008 [3]     BB           (0) Branch broadcast mode
1114     io_rw_32 trcconfigr;
1115 
1116     uint32_t _pad45[3];
1117 
1118     _REG_(M33_TRCEVENTCTL0R_OFFSET) // M33_TRCEVENTCTL0R
1119     // The TRCEVENTCTL0R controls the tracing of events in the trace stream
1120     // 0x00008000 [15]    TYPE1        (0) Selects the resource type for event 1
1121     // 0x00000700 [10:8]  SEL1         (0x0) Selects the resource number, based on the value of...
1122     // 0x00000080 [7]     TYPE0        (0) Selects the resource type for event 0
1123     // 0x00000007 [2:0]   SEL0         (0x0) Selects the resource number, based on the value of...
1124     io_rw_32 trceventctl0r;
1125 
1126     _REG_(M33_TRCEVENTCTL1R_OFFSET) // M33_TRCEVENTCTL1R
1127     // The TRCEVENTCTL1R controls how the events selected by TRCEVENTCTL0R behave
1128     // 0x00001000 [12]    LPOVERRIDE   (0) Low power state behavior override
1129     // 0x00000800 [11]    ATB          (0) ATB enabled
1130     // 0x00000002 [1]     INSTEN1      (0) One bit per event, to enable generation of an event...
1131     // 0x00000001 [0]     INSTEN0      (0) One bit per event, to enable generation of an event...
1132     io_rw_32 trceventctl1r;
1133 
1134     uint32_t _pad46;
1135 
1136     _REG_(M33_TRCSTALLCTLR_OFFSET) // M33_TRCSTALLCTLR
1137     // The TRCSTALLCTLR enables ETM-Teal to stall the processor if the ETM-Teal FIFO goes over the...
1138     // 0x00000400 [10]    INSTPRIORITY (0) Reserved, RES0
1139     // 0x00000100 [8]     ISTALL       (0) Stall processor based on instruction trace buffer space
1140     // 0x0000000c [3:2]   LEVEL        (0x0) Threshold at which stalling becomes active
1141     io_rw_32 trcstallctlr;
1142 
1143     _REG_(M33_TRCTSCTLR_OFFSET) // M33_TRCTSCTLR
1144     // The TRCTSCTLR controls the insertion of global timestamps into the trace stream
1145     // 0x00000080 [7]     TYPE0        (0) Selects the resource type for event 0
1146     // 0x00000003 [1:0]   SEL0         (0x0) Selects the resource number, based on the value of...
1147     io_rw_32 trctsctlr;
1148 
1149     _REG_(M33_TRCSYNCPR_OFFSET) // M33_TRCSYNCPR
1150     // The TRCSYNCPR specifies the period of trace synchronization of the trace streams
1151     // 0x0000001f [4:0]   PERIOD       (0x0a) Defines the number of bytes of trace between trace...
1152     io_ro_32 trcsyncpr;
1153 
1154     _REG_(M33_TRCCCCTLR_OFFSET) // M33_TRCCCCTLR
1155     // The TRCCCCTLR sets the threshold value for instruction trace cycle counting
1156     // 0x00000fff [11:0]  THRESHOLD    (0x000) Instruction trace cycle count threshold
1157     io_rw_32 trcccctlr;
1158 
1159     uint32_t _pad47[17];
1160 
1161     _REG_(M33_TRCVICTLR_OFFSET) // M33_TRCVICTLR
1162     // The TRCVICTLR controls instruction trace filtering
1163     // 0x00080000 [19]    EXLEVEL_S3   (0) In Secure state, each bit controls whether instruction...
1164     // 0x00010000 [16]    EXLEVEL_S0   (0) In Secure state, each bit controls whether instruction...
1165     // 0x00000800 [11]    TRCERR       (0) Selects whether a system error exception must always be traced
1166     // 0x00000400 [10]    TRCRESET     (0) Selects whether a reset exception must always be traced
1167     // 0x00000200 [9]     SSSTATUS     (0) Indicates the current status of the start/stop logic
1168     // 0x00000080 [7]     TYPE0        (0) Selects the resource type for event 0
1169     // 0x00000003 [1:0]   SEL0         (0x0) Selects the resource number, based on the value of...
1170     io_rw_32 trcvictlr;
1171 
1172     uint32_t _pad48[47];
1173 
1174     _REG_(M33_TRCCNTRLDVR0_OFFSET) // M33_TRCCNTRLDVR0
1175     // The TRCCNTRLDVR defines the reload value for the reduced function counter
1176     // 0x0000ffff [15:0]  VALUE        (0x0000) Defines the reload value for the counter
1177     io_rw_32 trccntrldvr0;
1178 
1179     uint32_t _pad49[15];
1180 
1181     _REG_(M33_TRCIDR8_OFFSET) // M33_TRCIDR8
1182     // TRCIDR8
1183     // 0xffffffff [31:0]  MAXSPEC      (0x00000000) reads as `ImpDef
1184     io_ro_32 trcidr8;
1185 
1186     _REG_(M33_TRCIDR9_OFFSET) // M33_TRCIDR9
1187     // TRCIDR9
1188     // 0xffffffff [31:0]  NUMP0KEY     (0x00000000) reads as `ImpDef
1189     io_ro_32 trcidr9;
1190 
1191     _REG_(M33_TRCIDR10_OFFSET) // M33_TRCIDR10
1192     // TRCIDR10
1193     // 0xffffffff [31:0]  NUMP1KEY     (0x00000000) reads as `ImpDef
1194     io_ro_32 trcidr10;
1195 
1196     _REG_(M33_TRCIDR11_OFFSET) // M33_TRCIDR11
1197     // TRCIDR11
1198     // 0xffffffff [31:0]  NUMP1SPC     (0x00000000) reads as `ImpDef
1199     io_ro_32 trcidr11;
1200 
1201     _REG_(M33_TRCIDR12_OFFSET) // M33_TRCIDR12
1202     // TRCIDR12
1203     // 0xffffffff [31:0]  NUMCONDKEY   (0x00000001) reads as `ImpDef
1204     io_ro_32 trcidr12;
1205 
1206     _REG_(M33_TRCIDR13_OFFSET) // M33_TRCIDR13
1207     // TRCIDR13
1208     // 0xffffffff [31:0]  NUMCONDSPC   (0x00000000) reads as `ImpDef
1209     io_ro_32 trcidr13;
1210 
1211     uint32_t _pad50[10];
1212 
1213     _REG_(M33_TRCIMSPEC_OFFSET) // M33_TRCIMSPEC
1214     // The TRCIMSPEC shows the presence of any IMPLEMENTATION SPECIFIC features, and enables any...
1215     // 0x0000000f [3:0]   SUPPORT      (0x0) Reserved, RES0
1216     io_ro_32 trcimspec;
1217 
1218     uint32_t _pad51[7];
1219 
1220     _REG_(M33_TRCIDR0_OFFSET) // M33_TRCIDR0
1221     // TRCIDR0
1222     // 0x20000000 [29]    COMMOPT      (1) reads as `ImpDef
1223     // 0x1f000000 [28:24] TSSIZE       (0x08) reads as `ImpDef
1224     // 0x00020000 [17]    TRCEXDATA    (0) reads as `ImpDef
1225     // 0x00018000 [16:15] QSUPP        (0x0) reads as `ImpDef
1226     // 0x00004000 [14]    QFILT        (0) reads as `ImpDef
1227     // 0x00003000 [13:12] CONDTYPE     (0x0) reads as `ImpDef
1228     // 0x00000c00 [11:10] NUMEVENT     (0x1) reads as `ImpDef
1229     // 0x00000200 [9]     RETSTACK     (1) reads as `ImpDef
1230     // 0x00000080 [7]     TRCCCI       (1) reads as `ImpDef
1231     // 0x00000040 [6]     TRCCOND      (1) reads as `ImpDef
1232     // 0x00000020 [5]     TRCBB        (1) reads as `ImpDef
1233     // 0x00000018 [4:3]   TRCDATA      (0x0) reads as `ImpDef
1234     // 0x00000006 [2:1]   INSTP0       (0x0) reads as `ImpDef
1235     // 0x00000001 [0]     RES1         (1) Reserved, RES1
1236     io_ro_32 trcidr0;
1237 
1238     _REG_(M33_TRCIDR1_OFFSET) // M33_TRCIDR1
1239     // TRCIDR1
1240     // 0xff000000 [31:24] DESIGNER     (0x41) reads as `ImpDef
1241     // 0x0000f000 [15:12] RES1         (0xf) Reserved, RES1
1242     // 0x00000f00 [11:8]  TRCARCHMAJ   (0x4) reads as 0b0100
1243     // 0x000000f0 [7:4]   TRCARCHMIN   (0x2) reads as 0b0000
1244     // 0x0000000f [3:0]   REVISION     (0x1) reads as `ImpDef
1245     io_ro_32 trcidr1;
1246 
1247     _REG_(M33_TRCIDR2_OFFSET) // M33_TRCIDR2
1248     // TRCIDR2
1249     // 0x1e000000 [28:25] CCSIZE       (0x0) reads as `ImpDef
1250     // 0x01f00000 [24:20] DVSIZE       (0x00) reads as `ImpDef
1251     // 0x000f8000 [19:15] DASIZE       (0x00) reads as `ImpDef
1252     // 0x00007c00 [14:10] VMIDSIZE     (0x00) reads as `ImpDef
1253     // 0x000003e0 [9:5]   CIDSIZE      (0x00) reads as `ImpDef
1254     // 0x0000001f [4:0]   IASIZE       (0x04) reads as `ImpDef
1255     io_ro_32 trcidr2;
1256 
1257     _REG_(M33_TRCIDR3_OFFSET) // M33_TRCIDR3
1258     // TRCIDR3
1259     // 0x80000000 [31]    NOOVERFLOW   (0) reads as `ImpDef
1260     // 0x70000000 [30:28] NUMPROC      (0x0) reads as `ImpDef
1261     // 0x08000000 [27]    SYSSTALL     (1) reads as `ImpDef
1262     // 0x04000000 [26]    STALLCTL     (1) reads as `ImpDef
1263     // 0x02000000 [25]    SYNCPR       (1) reads as `ImpDef
1264     // 0x01000000 [24]    TRCERR       (1) reads as `ImpDef
1265     // 0x00f00000 [23:20] EXLEVEL_NS   (0x0) reads as `ImpDef
1266     // 0x000f0000 [19:16] EXLEVEL_S    (0x9) reads as `ImpDef
1267     // 0x00000fff [11:0]  CCITMIN      (0x004) reads as `ImpDef
1268     io_ro_32 trcidr3;
1269 
1270     _REG_(M33_TRCIDR4_OFFSET) // M33_TRCIDR4
1271     // TRCIDR4
1272     // 0xf0000000 [31:28] NUMVMIDC     (0x0) reads as `ImpDef
1273     // 0x0f000000 [27:24] NUMCIDC      (0x0) reads as `ImpDef
1274     // 0x00f00000 [23:20] NUMSSCC      (0x1) reads as `ImpDef
1275     // 0x000f0000 [19:16] NUMRSPAIR    (0x1) reads as `ImpDef
1276     // 0x0000f000 [15:12] NUMPC        (0x4) reads as `ImpDef
1277     // 0x00000100 [8]     SUPPDAC      (0) reads as `ImpDef
1278     // 0x000000f0 [7:4]   NUMDVC       (0x0) reads as `ImpDef
1279     // 0x0000000f [3:0]   NUMACPAIRS   (0x0) reads as `ImpDef
1280     io_ro_32 trcidr4;
1281 
1282     _REG_(M33_TRCIDR5_OFFSET) // M33_TRCIDR5
1283     // TRCIDR5
1284     // 0x80000000 [31]    REDFUNCNTR   (1) reads as `ImpDef
1285     // 0x70000000 [30:28] NUMCNTR      (0x1) reads as `ImpDef
1286     // 0x0e000000 [27:25] NUMSEQSTATE  (0x0) reads as `ImpDef
1287     // 0x00800000 [23]    LPOVERRIDE   (1) reads as `ImpDef
1288     // 0x00400000 [22]    ATBTRIG      (1) reads as `ImpDef
1289     // 0x003f0000 [21:16] TRACEIDSIZE  (0x07) reads as 0x07
1290     // 0x00000e00 [11:9]  NUMEXTINSEL  (0x0) reads as `ImpDef
1291     // 0x000001ff [8:0]   NUMEXTIN     (0x004) reads as `ImpDef
1292     io_ro_32 trcidr5;
1293 
1294     _REG_(M33_TRCIDR6_OFFSET) // M33_TRCIDR6
1295     // TRCIDR6
1296     // 0x00000000 [31:0]  TRCIDR6      (0x00000000)
1297     io_rw_32 trcidr6;
1298 
1299     _REG_(M33_TRCIDR7_OFFSET) // M33_TRCIDR7
1300     // TRCIDR7
1301     // 0x00000000 [31:0]  TRCIDR7      (0x00000000)
1302     io_rw_32 trcidr7;
1303 
1304     uint32_t _pad52[2];
1305 
1306     // (Description copied from array index 0 register M33_TRCRSCTLR2 applies similarly to other array indexes)
1307     _REG_(M33_TRCRSCTLR2_OFFSET) // M33_TRCRSCTLR2
1308     // The TRCRSCTLR controls the trace resources
1309     // 0x00200000 [21]    PAIRINV      (0) Inverts the result of a combined pair of resources
1310     // 0x00100000 [20]    INV          (0) Inverts the selected resources
1311     // 0x00070000 [18:16] GROUP        (0x0) Selects a group of resource
1312     // 0x000000ff [7:0]   SELECT       (0x00) Selects one or more resources from the wanted group
1313     io_rw_32 trcrsctlr[2];
1314 
1315     uint32_t _pad53[36];
1316 
1317     _REG_(M33_TRCSSCSR_OFFSET) // M33_TRCSSCSR
1318     // Controls the corresponding single-shot comparator resource
1319     // 0x80000000 [31]    STATUS       (0) Single-shot status bit
1320     // 0x00000008 [3]     PC           (0) Reserved, RES1
1321     // 0x00000004 [2]     DV           (0) Reserved, RES0
1322     // 0x00000002 [1]     DA           (0) Reserved, RES0
1323     // 0x00000001 [0]     INST         (0) Reserved, RES0
1324     io_rw_32 trcsscsr;
1325 
1326     uint32_t _pad54[7];
1327 
1328     _REG_(M33_TRCSSPCICR_OFFSET) // M33_TRCSSPCICR
1329     // Selects the PE comparator inputs for Single-shot control
1330     // 0x0000000f [3:0]   PC           (0x0) Selects one or more PE comparator inputs for Single-shot control
1331     io_rw_32 trcsspcicr;
1332 
1333     uint32_t _pad55[19];
1334 
1335     _REG_(M33_TRCPDCR_OFFSET) // M33_TRCPDCR
1336     // Requests the system to provide power to the trace unit
1337     // 0x00000008 [3]     PU           (0) Powerup request bit:
1338     io_rw_32 trcpdcr;
1339 
1340     _REG_(M33_TRCPDSR_OFFSET) // M33_TRCPDSR
1341     // Returns the following information about the trace unit: - OS Lock status
1342     // 0x00000020 [5]     OSLK         (0) OS Lock status bit:
1343     // 0x00000002 [1]     STICKYPD     (1) Sticky powerdown status bit
1344     // 0x00000001 [0]     POWER        (1) Power status bit:
1345     io_ro_32 trcpdsr;
1346 
1347     uint32_t _pad56[755];
1348 
1349     _REG_(M33_TRCITATBIDR_OFFSET) // M33_TRCITATBIDR
1350     // Trace Integration ATB Identification Register
1351     // 0x0000007f [6:0]   ID           (0x00) Trace ID
1352     io_rw_32 trcitatbidr;
1353 
1354     uint32_t _pad57[3];
1355 
1356     _REG_(M33_TRCITIATBINR_OFFSET) // M33_TRCITIATBINR
1357     // Trace Integration Instruction ATB In Register
1358     // 0x00000002 [1]     AFVALIDM     (0) Integration Mode instruction AFVALIDM in
1359     // 0x00000001 [0]     ATREADYM     (0) Integration Mode instruction ATREADYM in
1360     io_rw_32 trcitiatbinr;
1361 
1362     uint32_t _pad58;
1363 
1364     _REG_(M33_TRCITIATBOUTR_OFFSET) // M33_TRCITIATBOUTR
1365     // Trace Integration Instruction ATB Out Register
1366     // 0x00000002 [1]     AFREADY      (0) Integration Mode instruction AFREADY out
1367     // 0x00000001 [0]     ATVALID      (0) Integration Mode instruction ATVALID out
1368     io_rw_32 trcitiatboutr;
1369 
1370     uint32_t _pad59[40];
1371 
1372     _REG_(M33_TRCCLAIMSET_OFFSET) // M33_TRCCLAIMSET
1373     // Claim Tag Set Register
1374     // 0x00000008 [3]     SET3         (1) When a write to one of these bits occurs, with the value:
1375     // 0x00000004 [2]     SET2         (1) When a write to one of these bits occurs, with the value:
1376     // 0x00000002 [1]     SET1         (1) When a write to one of these bits occurs, with the value:
1377     // 0x00000001 [0]     SET0         (1) When a write to one of these bits occurs, with the value:
1378     io_rw_32 trcclaimset;
1379 
1380     _REG_(M33_TRCCLAIMCLR_OFFSET) // M33_TRCCLAIMCLR
1381     // Claim Tag Clear Register
1382     // 0x00000008 [3]     CLR3         (0) When a write to one of these bits occurs, with the value:
1383     // 0x00000004 [2]     CLR2         (0) When a write to one of these bits occurs, with the value:
1384     // 0x00000002 [1]     CLR1         (0) When a write to one of these bits occurs, with the value:
1385     // 0x00000001 [0]     CLR0         (0) When a write to one of these bits occurs, with the value:
1386     io_rw_32 trcclaimclr;
1387 
1388     uint32_t _pad60[4];
1389 
1390     _REG_(M33_TRCAUTHSTATUS_OFFSET) // M33_TRCAUTHSTATUS
1391     // Returns the level of tracing that the trace unit can support
1392     // 0x000000c0 [7:6]   SNID         (0x0) Indicates whether the system enables the trace unit to...
1393     // 0x00000030 [5:4]   SID          (0x0) Indicates whether the trace unit supports Secure invasive debug:
1394     // 0x0000000c [3:2]   NSNID        (0x0) Indicates whether the system enables the trace unit to...
1395     // 0x00000003 [1:0]   NSID         (0x0) Indicates whether the trace unit supports Non-secure...
1396     io_ro_32 trcauthstatus;
1397 
1398     _REG_(M33_TRCDEVARCH_OFFSET) // M33_TRCDEVARCH
1399     // TRCDEVARCH
1400     // 0xffe00000 [31:21] ARCHITECT    (0x23b) reads as 0b01000111011
1401     // 0x00100000 [20]    PRESENT      (1) reads as 0b1
1402     // 0x000f0000 [19:16] REVISION     (0x2) reads as 0b0000
1403     // 0x0000ffff [15:0]  ARCHID       (0x4a13) reads as 0b0100101000010011
1404     io_ro_32 trcdevarch;
1405 
1406     uint32_t _pad61[2];
1407 
1408     _REG_(M33_TRCDEVID_OFFSET) // M33_TRCDEVID
1409     // TRCDEVID
1410     // 0x00000000 [31:0]  TRCDEVID     (0x00000000)
1411     io_rw_32 trcdevid;
1412 
1413     _REG_(M33_TRCDEVTYPE_OFFSET) // M33_TRCDEVTYPE
1414     // TRCDEVTYPE
1415     // 0x000000f0 [7:4]   SUB          (0x1) reads as 0b0001
1416     // 0x0000000f [3:0]   MAJOR        (0x3) reads as 0b0011
1417     io_ro_32 trcdevtype;
1418 
1419     _REG_(M33_TRCPIDR4_OFFSET) // M33_TRCPIDR4
1420     // TRCPIDR4
1421     // 0x000000f0 [7:4]   SIZE         (0x0) reads as `ImpDef
1422     // 0x0000000f [3:0]   DES_2        (0x4) reads as `ImpDef
1423     io_ro_32 trcpidr4;
1424 
1425     _REG_(M33_TRCPIDR5_OFFSET) // M33_TRCPIDR5
1426     // TRCPIDR5
1427     // 0x00000000 [31:0]  TRCPIDR5     (0x00000000)
1428     io_rw_32 trcpidr5;
1429 
1430     _REG_(M33_TRCPIDR6_OFFSET) // M33_TRCPIDR6
1431     // TRCPIDR6
1432     // 0x00000000 [31:0]  TRCPIDR6     (0x00000000)
1433     io_rw_32 trcpidr6;
1434 
1435     _REG_(M33_TRCPIDR7_OFFSET) // M33_TRCPIDR7
1436     // TRCPIDR7
1437     // 0x00000000 [31:0]  TRCPIDR7     (0x00000000)
1438     io_rw_32 trcpidr7;
1439 
1440     _REG_(M33_TRCPIDR0_OFFSET) // M33_TRCPIDR0
1441     // TRCPIDR0
1442     // 0x000000ff [7:0]   PART_0       (0x21) reads as `ImpDef
1443     io_ro_32 trcpidr0;
1444 
1445     _REG_(M33_TRCPIDR1_OFFSET) // M33_TRCPIDR1
1446     // TRCPIDR1
1447     // 0x000000f0 [7:4]   DES_0        (0xb) reads as `ImpDef
1448     // 0x0000000f [3:0]   PART_0       (0xd) reads as `ImpDef
1449     io_ro_32 trcpidr1;
1450 
1451     _REG_(M33_TRCPIDR2_OFFSET) // M33_TRCPIDR2
1452     // TRCPIDR2
1453     // 0x000000f0 [7:4]   REVISION     (0x2) reads as `ImpDef
1454     // 0x00000008 [3]     JEDEC        (1) reads as 0b1
1455     // 0x00000007 [2:0]   DES_0        (0x3) reads as `ImpDef
1456     io_ro_32 trcpidr2;
1457 
1458     _REG_(M33_TRCPIDR3_OFFSET) // M33_TRCPIDR3
1459     // TRCPIDR3
1460     // 0x000000f0 [7:4]   REVAND       (0x0) reads as `ImpDef
1461     // 0x0000000f [3:0]   CMOD         (0x0) reads as `ImpDef
1462     io_ro_32 trcpidr3;
1463 
1464     // (Description copied from array index 0 register M33_TRCCIDR0 applies similarly to other array indexes)
1465     _REG_(M33_TRCCIDR0_OFFSET) // M33_TRCCIDR0
1466     // TRCCIDR0
1467     // 0x000000ff [7:0]   PRMBL_0      (0x0d) reads as 0b00001101
1468     io_ro_32 trccidr[4];
1469 
1470     _REG_(M33_CTICONTROL_OFFSET) // M33_CTICONTROL
1471     // CTI Control Register
1472     // 0x00000001 [0]     GLBEN        (0) Enables or disables the CTI
1473     io_rw_32 cticontrol;
1474 
1475     uint32_t _pad62[3];
1476 
1477     _REG_(M33_CTIINTACK_OFFSET) // M33_CTIINTACK
1478     // CTI Interrupt Acknowledge Register
1479     // 0x000000ff [7:0]   INTACK       (0x00) Acknowledges the corresponding ctitrigout output
1480     io_rw_32 ctiintack;
1481 
1482     _REG_(M33_CTIAPPSET_OFFSET) // M33_CTIAPPSET
1483     // CTI Application Trigger Set Register
1484     // 0x0000000f [3:0]   APPSET       (0x0) Setting a bit HIGH generates a channel event for the...
1485     io_rw_32 ctiappset;
1486 
1487     _REG_(M33_CTIAPPCLEAR_OFFSET) // M33_CTIAPPCLEAR
1488     // CTI Application Trigger Clear Register
1489     // 0x0000000f [3:0]   APPCLEAR     (0x0) Sets the corresponding bits in the CTIAPPSET to 0
1490     io_rw_32 ctiappclear;
1491 
1492     _REG_(M33_CTIAPPPULSE_OFFSET) // M33_CTIAPPPULSE
1493     // CTI Application Pulse Register
1494     // 0x0000000f [3:0]   APPULSE      (0x0) Setting a bit HIGH generates a channel event pulse for...
1495     io_rw_32 ctiapppulse;
1496 
1497     // (Description copied from array index 0 register M33_CTIINEN0 applies similarly to other array indexes)
1498     _REG_(M33_CTIINEN0_OFFSET) // M33_CTIINEN0
1499     // CTI Trigger to Channel Enable Registers
1500     // 0x0000000f [3:0]   TRIGINEN     (0x0) Enables a cross trigger event to the corresponding...
1501     io_rw_32 ctiinen[8];
1502 
1503     uint32_t _pad63[24];
1504 
1505     // (Description copied from array index 0 register M33_CTIOUTEN0 applies similarly to other array indexes)
1506     _REG_(M33_CTIOUTEN0_OFFSET) // M33_CTIOUTEN0
1507     // CTI Trigger to Channel Enable Registers
1508     // 0x0000000f [3:0]   TRIGOUTEN    (0x0) Enables a cross trigger event to ctitrigout when the...
1509     io_rw_32 ctiouten[8];
1510 
1511     uint32_t _pad64[28];
1512 
1513     _REG_(M33_CTITRIGINSTATUS_OFFSET) // M33_CTITRIGINSTATUS
1514     // CTI Trigger to Channel Enable Registers
1515     // 0x000000ff [7:0]   TRIGINSTATUS (0x00) Shows the status of the ctitrigin inputs
1516     io_ro_32 ctitriginstatus;
1517 
1518     _REG_(M33_CTITRIGOUTSTATUS_OFFSET) // M33_CTITRIGOUTSTATUS
1519     // CTI Trigger In Status Register
1520     // 0x000000ff [7:0]   TRIGOUTSTATUS (0x00) Shows the status of the ctitrigout outputs
1521     io_ro_32 ctitrigoutstatus;
1522 
1523     _REG_(M33_CTICHINSTATUS_OFFSET) // M33_CTICHINSTATUS
1524     // CTI Channel In Status Register
1525     // 0x0000000f [3:0]   CTICHOUTSTATUS (0x0) Shows the status of the ctichout outputs
1526     io_ro_32 ctichinstatus;
1527 
1528     uint32_t _pad65;
1529 
1530     _REG_(M33_CTIGATE_OFFSET) // M33_CTIGATE
1531     // Enable CTI Channel Gate register
1532     // 0x00000008 [3]     CTIGATEEN3   (1) Enable ctichout3
1533     // 0x00000004 [2]     CTIGATEEN2   (1) Enable ctichout2
1534     // 0x00000002 [1]     CTIGATEEN1   (1) Enable ctichout1
1535     // 0x00000001 [0]     CTIGATEEN0   (1) Enable ctichout0
1536     io_rw_32 ctigate;
1537 
1538     _REG_(M33_ASICCTL_OFFSET) // M33_ASICCTL
1539     // External Multiplexer Control register
1540     // 0x00000000 [31:0]  ASICCTL      (0x00000000)
1541     io_rw_32 asicctl;
1542 
1543     uint32_t _pad66[871];
1544 
1545     _REG_(M33_ITCHOUT_OFFSET) // M33_ITCHOUT
1546     // Integration Test Channel Output register
1547     // 0x0000000f [3:0]   CTCHOUT      (0x0) Sets the value of the ctichout outputs
1548     io_rw_32 itchout;
1549 
1550     _REG_(M33_ITTRIGOUT_OFFSET) // M33_ITTRIGOUT
1551     // Integration Test Trigger Output register
1552     // 0x000000ff [7:0]   CTTRIGOUT    (0x00) Sets the value of the ctitrigout outputs
1553     io_rw_32 ittrigout;
1554 
1555     uint32_t _pad67[2];
1556 
1557     _REG_(M33_ITCHIN_OFFSET) // M33_ITCHIN
1558     // Integration Test Channel Input register
1559     // 0x0000000f [3:0]   CTCHIN       (0x0) Reads the value of the ctichin inputs
1560     io_ro_32 itchin;
1561 
1562     uint32_t _pad68[2];
1563 
1564     _REG_(M33_ITCTRL_OFFSET) // M33_ITCTRL
1565     // Integration Mode Control register
1566     // 0x00000001 [0]     IME          (0) Integration Mode Enable
1567     io_rw_32 itctrl;
1568 
1569     uint32_t _pad69[46];
1570 
1571     _REG_(M33_DEVARCH_OFFSET) // M33_DEVARCH
1572     // Device Architecture register
1573     // 0xffe00000 [31:21] ARCHITECT    (0x23b) Indicates the component architect
1574     // 0x00100000 [20]    PRESENT      (1) Indicates whether the DEVARCH register is present
1575     // 0x000f0000 [19:16] REVISION     (0x0) Indicates the architecture revision
1576     // 0x0000ffff [15:0]  ARCHID       (0x1a14) Indicates the component
1577     io_ro_32 devarch;
1578 
1579     uint32_t _pad70[2];
1580 
1581     _REG_(M33_DEVID_OFFSET) // M33_DEVID
1582     // Device Configuration register
1583     // 0x000f0000 [19:16] NUMCH        (0x4) Number of ECT channels available
1584     // 0x0000ff00 [15:8]  NUMTRIG      (0x08) Number of ECT triggers available
1585     // 0x0000001f [4:0]   EXTMUXNUM    (0x00) Indicates the number of multiplexers available on...
1586     io_ro_32 devid;
1587 
1588     _REG_(M33_DEVTYPE_OFFSET) // M33_DEVTYPE
1589     // Device Type Identifier register
1590     // 0x000000f0 [7:4]   SUB          (0x1) Sub-classification of the type of the debug component as...
1591     // 0x0000000f [3:0]   MAJOR        (0x4) Major classification of the type of the debug component...
1592     io_ro_32 devtype;
1593 
1594     _REG_(M33_PIDR4_OFFSET) // M33_PIDR4
1595     // CoreSight Peripheral ID4
1596     // 0x000000f0 [7:4]   SIZE         (0x0) Always 0b0000
1597     // 0x0000000f [3:0]   DES_2        (0x4) Together, PIDR1
1598     io_ro_32 pidr4;
1599 
1600     _REG_(M33_PIDR5_OFFSET) // M33_PIDR5
1601     // CoreSight Peripheral ID5
1602     // 0x00000000 [31:0]  PIDR5        (0x00000000)
1603     io_rw_32 pidr5;
1604 
1605     _REG_(M33_PIDR6_OFFSET) // M33_PIDR6
1606     // CoreSight Peripheral ID6
1607     // 0x00000000 [31:0]  PIDR6        (0x00000000)
1608     io_rw_32 pidr6;
1609 
1610     _REG_(M33_PIDR7_OFFSET) // M33_PIDR7
1611     // CoreSight Peripheral ID7
1612     // 0x00000000 [31:0]  PIDR7        (0x00000000)
1613     io_rw_32 pidr7;
1614 
1615     _REG_(M33_PIDR0_OFFSET) // M33_PIDR0
1616     // CoreSight Peripheral ID0
1617     // 0x000000ff [7:0]   PART_0       (0x21) Bits[7:0] of the 12-bit part number of the component
1618     io_ro_32 pidr0;
1619 
1620     _REG_(M33_PIDR1_OFFSET) // M33_PIDR1
1621     // CoreSight Peripheral ID1
1622     // 0x000000f0 [7:4]   DES_0        (0xb) Together, PIDR1
1623     // 0x0000000f [3:0]   PART_1       (0xd) Bits[11:8] of the 12-bit part number of the component
1624     io_ro_32 pidr1;
1625 
1626     _REG_(M33_PIDR2_OFFSET) // M33_PIDR2
1627     // CoreSight Peripheral ID2
1628     // 0x000000f0 [7:4]   REVISION     (0x0) This device is at r1p0
1629     // 0x00000008 [3]     JEDEC        (1) Always 1
1630     // 0x00000007 [2:0]   DES_1        (0x3) Together, PIDR1
1631     io_ro_32 pidr2;
1632 
1633     _REG_(M33_PIDR3_OFFSET) // M33_PIDR3
1634     // CoreSight Peripheral ID3
1635     // 0x000000f0 [7:4]   REVAND       (0x0) Indicates minor errata fixes specific to the revision of...
1636     // 0x0000000f [3:0]   CMOD         (0x0) Customer Modified
1637     io_ro_32 pidr3;
1638 
1639     // (Description copied from array index 0 register M33_CIDR0 applies similarly to other array indexes)
1640     _REG_(M33_CIDR0_OFFSET) // M33_CIDR0
1641     // CoreSight Component ID0
1642     // 0x000000ff [7:0]   PRMBL_0      (0x0d) Preamble[0]
1643     io_ro_32 cidr[4];
1644 } m33_hw_t;
1645 
1646 #define m33_hw ((m33_hw_t *)PPB_BASE)
1647 #define m33_ns_hw ((m33_hw_t *)PPB_NONSEC_BASE)
1648 static_assert(sizeof (m33_hw_t) == 0x43000, "");
1649 
1650 #endif // _HARDWARE_STRUCTS_M33_H
1651 
1652