1 /**
2  * Copyright (c) 2022 Raspberry Pi (Trading) Ltd.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 // =============================================================================
7 // Register block : SIO
8 // Version        : 1
9 // Bus type       : apb
10 // Description    : Single-cycle IO block
11 //                  Provides core-local and inter-core hardware for the two
12 //                  processors, with single-cycle access.
13 // =============================================================================
14 #ifndef HARDWARE_REGS_SIO_DEFINED
15 #define HARDWARE_REGS_SIO_DEFINED
16 // =============================================================================
17 // Register    : SIO_CPUID
18 // Description : Processor core identifier
19 //               Value is 0 when read from processor core 0, and 1 when read
20 //               from processor core 1.
21 #define SIO_CPUID_OFFSET _u(0x00000000)
22 #define SIO_CPUID_BITS   _u(0xffffffff)
23 #define SIO_CPUID_RESET  "-"
24 #define SIO_CPUID_MSB    _u(31)
25 #define SIO_CPUID_LSB    _u(0)
26 #define SIO_CPUID_ACCESS "RO"
27 // =============================================================================
28 // Register    : SIO_GPIO_IN
29 // Description : Input value for GPIO pins
30 //               Input value for GPIO0...29
31 #define SIO_GPIO_IN_OFFSET _u(0x00000004)
32 #define SIO_GPIO_IN_BITS   _u(0x3fffffff)
33 #define SIO_GPIO_IN_RESET  _u(0x00000000)
34 #define SIO_GPIO_IN_MSB    _u(29)
35 #define SIO_GPIO_IN_LSB    _u(0)
36 #define SIO_GPIO_IN_ACCESS "RO"
37 // =============================================================================
38 // Register    : SIO_GPIO_HI_IN
39 // Description : Input value for QSPI pins
40 //               Input value on QSPI IO in order 0..5: SCLK, SSn, SD0, SD1, SD2,
41 //               SD3
42 #define SIO_GPIO_HI_IN_OFFSET _u(0x00000008)
43 #define SIO_GPIO_HI_IN_BITS   _u(0x0000003f)
44 #define SIO_GPIO_HI_IN_RESET  _u(0x00000000)
45 #define SIO_GPIO_HI_IN_MSB    _u(5)
46 #define SIO_GPIO_HI_IN_LSB    _u(0)
47 #define SIO_GPIO_HI_IN_ACCESS "RO"
48 // =============================================================================
49 // Register    : SIO_GPIO_OUT
50 // Description : GPIO output value
51 //               Set output level (1/0 -> high/low) for GPIO0...29.
52 //               Reading back gives the last value written, NOT the input value
53 //               from the pins.
54 //               If core 0 and core 1 both write to GPIO_OUT simultaneously (or
55 //               to a SET/CLR/XOR alias),
56 //               the result is as though the write from core 0 took place first,
57 //               and the write from core 1 was then applied to that intermediate
58 //               result.
59 #define SIO_GPIO_OUT_OFFSET _u(0x00000010)
60 #define SIO_GPIO_OUT_BITS   _u(0x3fffffff)
61 #define SIO_GPIO_OUT_RESET  _u(0x00000000)
62 #define SIO_GPIO_OUT_MSB    _u(29)
63 #define SIO_GPIO_OUT_LSB    _u(0)
64 #define SIO_GPIO_OUT_ACCESS "RW"
65 // =============================================================================
66 // Register    : SIO_GPIO_OUT_SET
67 // Description : GPIO output value set
68 //               Perform an atomic bit-set on GPIO_OUT, i.e. `GPIO_OUT |= wdata`
69 #define SIO_GPIO_OUT_SET_OFFSET _u(0x00000014)
70 #define SIO_GPIO_OUT_SET_BITS   _u(0x3fffffff)
71 #define SIO_GPIO_OUT_SET_RESET  _u(0x00000000)
72 #define SIO_GPIO_OUT_SET_MSB    _u(29)
73 #define SIO_GPIO_OUT_SET_LSB    _u(0)
74 #define SIO_GPIO_OUT_SET_ACCESS "WO"
75 // =============================================================================
76 // Register    : SIO_GPIO_OUT_CLR
77 // Description : GPIO output value clear
78 //               Perform an atomic bit-clear on GPIO_OUT, i.e. `GPIO_OUT &=
79 //               ~wdata`
80 #define SIO_GPIO_OUT_CLR_OFFSET _u(0x00000018)
81 #define SIO_GPIO_OUT_CLR_BITS   _u(0x3fffffff)
82 #define SIO_GPIO_OUT_CLR_RESET  _u(0x00000000)
83 #define SIO_GPIO_OUT_CLR_MSB    _u(29)
84 #define SIO_GPIO_OUT_CLR_LSB    _u(0)
85 #define SIO_GPIO_OUT_CLR_ACCESS "WO"
86 // =============================================================================
87 // Register    : SIO_GPIO_OUT_XOR
88 // Description : GPIO output value XOR
89 //               Perform an atomic bitwise XOR on GPIO_OUT, i.e. `GPIO_OUT ^=
90 //               wdata`
91 #define SIO_GPIO_OUT_XOR_OFFSET _u(0x0000001c)
92 #define SIO_GPIO_OUT_XOR_BITS   _u(0x3fffffff)
93 #define SIO_GPIO_OUT_XOR_RESET  _u(0x00000000)
94 #define SIO_GPIO_OUT_XOR_MSB    _u(29)
95 #define SIO_GPIO_OUT_XOR_LSB    _u(0)
96 #define SIO_GPIO_OUT_XOR_ACCESS "WO"
97 // =============================================================================
98 // Register    : SIO_GPIO_OE
99 // Description : GPIO output enable
100 //               Set output enable (1/0 -> output/input) for GPIO0...29.
101 //               Reading back gives the last value written.
102 //               If core 0 and core 1 both write to GPIO_OE simultaneously (or
103 //               to a SET/CLR/XOR alias),
104 //               the result is as though the write from core 0 took place first,
105 //               and the write from core 1 was then applied to that intermediate
106 //               result.
107 #define SIO_GPIO_OE_OFFSET _u(0x00000020)
108 #define SIO_GPIO_OE_BITS   _u(0x3fffffff)
109 #define SIO_GPIO_OE_RESET  _u(0x00000000)
110 #define SIO_GPIO_OE_MSB    _u(29)
111 #define SIO_GPIO_OE_LSB    _u(0)
112 #define SIO_GPIO_OE_ACCESS "RW"
113 // =============================================================================
114 // Register    : SIO_GPIO_OE_SET
115 // Description : GPIO output enable set
116 //               Perform an atomic bit-set on GPIO_OE, i.e. `GPIO_OE |= wdata`
117 #define SIO_GPIO_OE_SET_OFFSET _u(0x00000024)
118 #define SIO_GPIO_OE_SET_BITS   _u(0x3fffffff)
119 #define SIO_GPIO_OE_SET_RESET  _u(0x00000000)
120 #define SIO_GPIO_OE_SET_MSB    _u(29)
121 #define SIO_GPIO_OE_SET_LSB    _u(0)
122 #define SIO_GPIO_OE_SET_ACCESS "WO"
123 // =============================================================================
124 // Register    : SIO_GPIO_OE_CLR
125 // Description : GPIO output enable clear
126 //               Perform an atomic bit-clear on GPIO_OE, i.e. `GPIO_OE &=
127 //               ~wdata`
128 #define SIO_GPIO_OE_CLR_OFFSET _u(0x00000028)
129 #define SIO_GPIO_OE_CLR_BITS   _u(0x3fffffff)
130 #define SIO_GPIO_OE_CLR_RESET  _u(0x00000000)
131 #define SIO_GPIO_OE_CLR_MSB    _u(29)
132 #define SIO_GPIO_OE_CLR_LSB    _u(0)
133 #define SIO_GPIO_OE_CLR_ACCESS "WO"
134 // =============================================================================
135 // Register    : SIO_GPIO_OE_XOR
136 // Description : GPIO output enable XOR
137 //               Perform an atomic bitwise XOR on GPIO_OE, i.e. `GPIO_OE ^=
138 //               wdata`
139 #define SIO_GPIO_OE_XOR_OFFSET _u(0x0000002c)
140 #define SIO_GPIO_OE_XOR_BITS   _u(0x3fffffff)
141 #define SIO_GPIO_OE_XOR_RESET  _u(0x00000000)
142 #define SIO_GPIO_OE_XOR_MSB    _u(29)
143 #define SIO_GPIO_OE_XOR_LSB    _u(0)
144 #define SIO_GPIO_OE_XOR_ACCESS "WO"
145 // =============================================================================
146 // Register    : SIO_GPIO_HI_OUT
147 // Description : QSPI output value
148 //               Set output level (1/0 -> high/low) for QSPI IO0...5.
149 //               Reading back gives the last value written, NOT the input value
150 //               from the pins.
151 //               If core 0 and core 1 both write to GPIO_HI_OUT simultaneously
152 //               (or to a SET/CLR/XOR alias),
153 //               the result is as though the write from core 0 took place first,
154 //               and the write from core 1 was then applied to that intermediate
155 //               result.
156 #define SIO_GPIO_HI_OUT_OFFSET _u(0x00000030)
157 #define SIO_GPIO_HI_OUT_BITS   _u(0x0000003f)
158 #define SIO_GPIO_HI_OUT_RESET  _u(0x00000000)
159 #define SIO_GPIO_HI_OUT_MSB    _u(5)
160 #define SIO_GPIO_HI_OUT_LSB    _u(0)
161 #define SIO_GPIO_HI_OUT_ACCESS "RW"
162 // =============================================================================
163 // Register    : SIO_GPIO_HI_OUT_SET
164 // Description : QSPI output value set
165 //               Perform an atomic bit-set on GPIO_HI_OUT, i.e. `GPIO_HI_OUT |=
166 //               wdata`
167 #define SIO_GPIO_HI_OUT_SET_OFFSET _u(0x00000034)
168 #define SIO_GPIO_HI_OUT_SET_BITS   _u(0x0000003f)
169 #define SIO_GPIO_HI_OUT_SET_RESET  _u(0x00000000)
170 #define SIO_GPIO_HI_OUT_SET_MSB    _u(5)
171 #define SIO_GPIO_HI_OUT_SET_LSB    _u(0)
172 #define SIO_GPIO_HI_OUT_SET_ACCESS "WO"
173 // =============================================================================
174 // Register    : SIO_GPIO_HI_OUT_CLR
175 // Description : QSPI output value clear
176 //               Perform an atomic bit-clear on GPIO_HI_OUT, i.e. `GPIO_HI_OUT
177 //               &= ~wdata`
178 #define SIO_GPIO_HI_OUT_CLR_OFFSET _u(0x00000038)
179 #define SIO_GPIO_HI_OUT_CLR_BITS   _u(0x0000003f)
180 #define SIO_GPIO_HI_OUT_CLR_RESET  _u(0x00000000)
181 #define SIO_GPIO_HI_OUT_CLR_MSB    _u(5)
182 #define SIO_GPIO_HI_OUT_CLR_LSB    _u(0)
183 #define SIO_GPIO_HI_OUT_CLR_ACCESS "WO"
184 // =============================================================================
185 // Register    : SIO_GPIO_HI_OUT_XOR
186 // Description : QSPI output value XOR
187 //               Perform an atomic bitwise XOR on GPIO_HI_OUT, i.e. `GPIO_HI_OUT
188 //               ^= wdata`
189 #define SIO_GPIO_HI_OUT_XOR_OFFSET _u(0x0000003c)
190 #define SIO_GPIO_HI_OUT_XOR_BITS   _u(0x0000003f)
191 #define SIO_GPIO_HI_OUT_XOR_RESET  _u(0x00000000)
192 #define SIO_GPIO_HI_OUT_XOR_MSB    _u(5)
193 #define SIO_GPIO_HI_OUT_XOR_LSB    _u(0)
194 #define SIO_GPIO_HI_OUT_XOR_ACCESS "WO"
195 // =============================================================================
196 // Register    : SIO_GPIO_HI_OE
197 // Description : QSPI output enable
198 //               Set output enable (1/0 -> output/input) for QSPI IO0...5.
199 //               Reading back gives the last value written.
200 //               If core 0 and core 1 both write to GPIO_HI_OE simultaneously
201 //               (or to a SET/CLR/XOR alias),
202 //               the result is as though the write from core 0 took place first,
203 //               and the write from core 1 was then applied to that intermediate
204 //               result.
205 #define SIO_GPIO_HI_OE_OFFSET _u(0x00000040)
206 #define SIO_GPIO_HI_OE_BITS   _u(0x0000003f)
207 #define SIO_GPIO_HI_OE_RESET  _u(0x00000000)
208 #define SIO_GPIO_HI_OE_MSB    _u(5)
209 #define SIO_GPIO_HI_OE_LSB    _u(0)
210 #define SIO_GPIO_HI_OE_ACCESS "RW"
211 // =============================================================================
212 // Register    : SIO_GPIO_HI_OE_SET
213 // Description : QSPI output enable set
214 //               Perform an atomic bit-set on GPIO_HI_OE, i.e. `GPIO_HI_OE |=
215 //               wdata`
216 #define SIO_GPIO_HI_OE_SET_OFFSET _u(0x00000044)
217 #define SIO_GPIO_HI_OE_SET_BITS   _u(0x0000003f)
218 #define SIO_GPIO_HI_OE_SET_RESET  _u(0x00000000)
219 #define SIO_GPIO_HI_OE_SET_MSB    _u(5)
220 #define SIO_GPIO_HI_OE_SET_LSB    _u(0)
221 #define SIO_GPIO_HI_OE_SET_ACCESS "WO"
222 // =============================================================================
223 // Register    : SIO_GPIO_HI_OE_CLR
224 // Description : QSPI output enable clear
225 //               Perform an atomic bit-clear on GPIO_HI_OE, i.e. `GPIO_HI_OE &=
226 //               ~wdata`
227 #define SIO_GPIO_HI_OE_CLR_OFFSET _u(0x00000048)
228 #define SIO_GPIO_HI_OE_CLR_BITS   _u(0x0000003f)
229 #define SIO_GPIO_HI_OE_CLR_RESET  _u(0x00000000)
230 #define SIO_GPIO_HI_OE_CLR_MSB    _u(5)
231 #define SIO_GPIO_HI_OE_CLR_LSB    _u(0)
232 #define SIO_GPIO_HI_OE_CLR_ACCESS "WO"
233 // =============================================================================
234 // Register    : SIO_GPIO_HI_OE_XOR
235 // Description : QSPI output enable XOR
236 //               Perform an atomic bitwise XOR on GPIO_HI_OE, i.e. `GPIO_HI_OE
237 //               ^= wdata`
238 #define SIO_GPIO_HI_OE_XOR_OFFSET _u(0x0000004c)
239 #define SIO_GPIO_HI_OE_XOR_BITS   _u(0x0000003f)
240 #define SIO_GPIO_HI_OE_XOR_RESET  _u(0x00000000)
241 #define SIO_GPIO_HI_OE_XOR_MSB    _u(5)
242 #define SIO_GPIO_HI_OE_XOR_LSB    _u(0)
243 #define SIO_GPIO_HI_OE_XOR_ACCESS "WO"
244 // =============================================================================
245 // Register    : SIO_FIFO_ST
246 // Description : Status register for inter-core FIFOs (mailboxes).
247 //               There is one FIFO in the core 0 -> core 1 direction, and one
248 //               core 1 -> core 0. Both are 32 bits wide and 8 words deep.
249 //               Core 0 can see the read side of the 1->0 FIFO (RX), and the
250 //               write side of 0->1 FIFO (TX).
251 //               Core 1 can see the read side of the 0->1 FIFO (RX), and the
252 //               write side of 1->0 FIFO (TX).
253 //               The SIO IRQ for each core is the logical OR of the VLD, WOF and
254 //               ROE fields of its FIFO_ST register.
255 #define SIO_FIFO_ST_OFFSET _u(0x00000050)
256 #define SIO_FIFO_ST_BITS   _u(0x0000000f)
257 #define SIO_FIFO_ST_RESET  _u(0x00000002)
258 // -----------------------------------------------------------------------------
259 // Field       : SIO_FIFO_ST_ROE
260 // Description : Sticky flag indicating the RX FIFO was read when empty. This
261 //               read was ignored by the FIFO.
262 #define SIO_FIFO_ST_ROE_RESET  _u(0x0)
263 #define SIO_FIFO_ST_ROE_BITS   _u(0x00000008)
264 #define SIO_FIFO_ST_ROE_MSB    _u(3)
265 #define SIO_FIFO_ST_ROE_LSB    _u(3)
266 #define SIO_FIFO_ST_ROE_ACCESS "WC"
267 // -----------------------------------------------------------------------------
268 // Field       : SIO_FIFO_ST_WOF
269 // Description : Sticky flag indicating the TX FIFO was written when full. This
270 //               write was ignored by the FIFO.
271 #define SIO_FIFO_ST_WOF_RESET  _u(0x0)
272 #define SIO_FIFO_ST_WOF_BITS   _u(0x00000004)
273 #define SIO_FIFO_ST_WOF_MSB    _u(2)
274 #define SIO_FIFO_ST_WOF_LSB    _u(2)
275 #define SIO_FIFO_ST_WOF_ACCESS "WC"
276 // -----------------------------------------------------------------------------
277 // Field       : SIO_FIFO_ST_RDY
278 // Description : Value is 1 if this core's TX FIFO is not full (i.e. if FIFO_WR
279 //               is ready for more data)
280 #define SIO_FIFO_ST_RDY_RESET  _u(0x1)
281 #define SIO_FIFO_ST_RDY_BITS   _u(0x00000002)
282 #define SIO_FIFO_ST_RDY_MSB    _u(1)
283 #define SIO_FIFO_ST_RDY_LSB    _u(1)
284 #define SIO_FIFO_ST_RDY_ACCESS "RO"
285 // -----------------------------------------------------------------------------
286 // Field       : SIO_FIFO_ST_VLD
287 // Description : Value is 1 if this core's RX FIFO is not empty (i.e. if FIFO_RD
288 //               is valid)
289 #define SIO_FIFO_ST_VLD_RESET  _u(0x0)
290 #define SIO_FIFO_ST_VLD_BITS   _u(0x00000001)
291 #define SIO_FIFO_ST_VLD_MSB    _u(0)
292 #define SIO_FIFO_ST_VLD_LSB    _u(0)
293 #define SIO_FIFO_ST_VLD_ACCESS "RO"
294 // =============================================================================
295 // Register    : SIO_FIFO_WR
296 // Description : Write access to this core's TX FIFO
297 #define SIO_FIFO_WR_OFFSET _u(0x00000054)
298 #define SIO_FIFO_WR_BITS   _u(0xffffffff)
299 #define SIO_FIFO_WR_RESET  _u(0x00000000)
300 #define SIO_FIFO_WR_MSB    _u(31)
301 #define SIO_FIFO_WR_LSB    _u(0)
302 #define SIO_FIFO_WR_ACCESS "WF"
303 // =============================================================================
304 // Register    : SIO_FIFO_RD
305 // Description : Read access to this core's RX FIFO
306 #define SIO_FIFO_RD_OFFSET _u(0x00000058)
307 #define SIO_FIFO_RD_BITS   _u(0xffffffff)
308 #define SIO_FIFO_RD_RESET  "-"
309 #define SIO_FIFO_RD_MSB    _u(31)
310 #define SIO_FIFO_RD_LSB    _u(0)
311 #define SIO_FIFO_RD_ACCESS "RF"
312 // =============================================================================
313 // Register    : SIO_SPINLOCK_ST
314 // Description : Spinlock state
315 //               A bitmap containing the state of all 32 spinlocks (1=locked).
316 //               Mainly intended for debugging.
317 #define SIO_SPINLOCK_ST_OFFSET _u(0x0000005c)
318 #define SIO_SPINLOCK_ST_BITS   _u(0xffffffff)
319 #define SIO_SPINLOCK_ST_RESET  _u(0x00000000)
320 #define SIO_SPINLOCK_ST_MSB    _u(31)
321 #define SIO_SPINLOCK_ST_LSB    _u(0)
322 #define SIO_SPINLOCK_ST_ACCESS "RO"
323 // =============================================================================
324 // Register    : SIO_DIV_UDIVIDEND
325 // Description : Divider unsigned dividend
326 //               Write to the DIVIDEND operand of the divider, i.e. the p in `p
327 //               / q`.
328 //               Any operand write starts a new calculation. The results appear
329 //               in QUOTIENT, REMAINDER.
330 //               UDIVIDEND/SDIVIDEND are aliases of the same internal register.
331 //               The U alias starts an
332 //               unsigned calculation, and the S alias starts a signed
333 //               calculation.
334 #define SIO_DIV_UDIVIDEND_OFFSET _u(0x00000060)
335 #define SIO_DIV_UDIVIDEND_BITS   _u(0xffffffff)
336 #define SIO_DIV_UDIVIDEND_RESET  _u(0x00000000)
337 #define SIO_DIV_UDIVIDEND_MSB    _u(31)
338 #define SIO_DIV_UDIVIDEND_LSB    _u(0)
339 #define SIO_DIV_UDIVIDEND_ACCESS "RW"
340 // =============================================================================
341 // Register    : SIO_DIV_UDIVISOR
342 // Description : Divider unsigned divisor
343 //               Write to the DIVISOR operand of the divider, i.e. the q in `p /
344 //               q`.
345 //               Any operand write starts a new calculation. The results appear
346 //               in QUOTIENT, REMAINDER.
347 //               UDIVISOR/SDIVISOR are aliases of the same internal register.
348 //               The U alias starts an
349 //               unsigned calculation, and the S alias starts a signed
350 //               calculation.
351 #define SIO_DIV_UDIVISOR_OFFSET _u(0x00000064)
352 #define SIO_DIV_UDIVISOR_BITS   _u(0xffffffff)
353 #define SIO_DIV_UDIVISOR_RESET  _u(0x00000000)
354 #define SIO_DIV_UDIVISOR_MSB    _u(31)
355 #define SIO_DIV_UDIVISOR_LSB    _u(0)
356 #define SIO_DIV_UDIVISOR_ACCESS "RW"
357 // =============================================================================
358 // Register    : SIO_DIV_SDIVIDEND
359 // Description : Divider signed dividend
360 //               The same as UDIVIDEND, but starts a signed calculation, rather
361 //               than unsigned.
362 #define SIO_DIV_SDIVIDEND_OFFSET _u(0x00000068)
363 #define SIO_DIV_SDIVIDEND_BITS   _u(0xffffffff)
364 #define SIO_DIV_SDIVIDEND_RESET  _u(0x00000000)
365 #define SIO_DIV_SDIVIDEND_MSB    _u(31)
366 #define SIO_DIV_SDIVIDEND_LSB    _u(0)
367 #define SIO_DIV_SDIVIDEND_ACCESS "RW"
368 // =============================================================================
369 // Register    : SIO_DIV_SDIVISOR
370 // Description : Divider signed divisor
371 //               The same as UDIVISOR, but starts a signed calculation, rather
372 //               than unsigned.
373 #define SIO_DIV_SDIVISOR_OFFSET _u(0x0000006c)
374 #define SIO_DIV_SDIVISOR_BITS   _u(0xffffffff)
375 #define SIO_DIV_SDIVISOR_RESET  _u(0x00000000)
376 #define SIO_DIV_SDIVISOR_MSB    _u(31)
377 #define SIO_DIV_SDIVISOR_LSB    _u(0)
378 #define SIO_DIV_SDIVISOR_ACCESS "RW"
379 // =============================================================================
380 // Register    : SIO_DIV_QUOTIENT
381 // Description : Divider result quotient
382 //               The result of `DIVIDEND / DIVISOR` (division). Contents
383 //               undefined while CSR_READY is low.
384 //               For signed calculations, QUOTIENT is negative when the signs of
385 //               DIVIDEND and DIVISOR differ.
386 //               This register can be written to directly, for context
387 //               save/restore purposes. This halts any
388 //               in-progress calculation and sets the CSR_READY and CSR_DIRTY
389 //               flags.
390 //               Reading from QUOTIENT clears the CSR_DIRTY flag, so should read
391 //               results in the order
392 //               REMAINDER, QUOTIENT if CSR_DIRTY is used.
393 #define SIO_DIV_QUOTIENT_OFFSET _u(0x00000070)
394 #define SIO_DIV_QUOTIENT_BITS   _u(0xffffffff)
395 #define SIO_DIV_QUOTIENT_RESET  _u(0x00000000)
396 #define SIO_DIV_QUOTIENT_MSB    _u(31)
397 #define SIO_DIV_QUOTIENT_LSB    _u(0)
398 #define SIO_DIV_QUOTIENT_ACCESS "RW"
399 // =============================================================================
400 // Register    : SIO_DIV_REMAINDER
401 // Description : Divider result remainder
402 //               The result of `DIVIDEND % DIVISOR` (modulo). Contents undefined
403 //               while CSR_READY is low.
404 //               For signed calculations, REMAINDER is negative only when
405 //               DIVIDEND is negative.
406 //               This register can be written to directly, for context
407 //               save/restore purposes. This halts any
408 //               in-progress calculation and sets the CSR_READY and CSR_DIRTY
409 //               flags.
410 #define SIO_DIV_REMAINDER_OFFSET _u(0x00000074)
411 #define SIO_DIV_REMAINDER_BITS   _u(0xffffffff)
412 #define SIO_DIV_REMAINDER_RESET  _u(0x00000000)
413 #define SIO_DIV_REMAINDER_MSB    _u(31)
414 #define SIO_DIV_REMAINDER_LSB    _u(0)
415 #define SIO_DIV_REMAINDER_ACCESS "RW"
416 // =============================================================================
417 // Register    : SIO_DIV_CSR
418 // Description : Control and status register for divider.
419 #define SIO_DIV_CSR_OFFSET _u(0x00000078)
420 #define SIO_DIV_CSR_BITS   _u(0x00000003)
421 #define SIO_DIV_CSR_RESET  _u(0x00000001)
422 // -----------------------------------------------------------------------------
423 // Field       : SIO_DIV_CSR_DIRTY
424 // Description : Changes to 1 when any register is written, and back to 0 when
425 //               QUOTIENT is read.
426 //               Software can use this flag to make save/restore more efficient
427 //               (skip if not DIRTY).
428 //               If the flag is used in this way, it's recommended to either
429 //               read QUOTIENT only,
430 //               or REMAINDER and then QUOTIENT, to prevent data loss on context
431 //               switch.
432 #define SIO_DIV_CSR_DIRTY_RESET  _u(0x0)
433 #define SIO_DIV_CSR_DIRTY_BITS   _u(0x00000002)
434 #define SIO_DIV_CSR_DIRTY_MSB    _u(1)
435 #define SIO_DIV_CSR_DIRTY_LSB    _u(1)
436 #define SIO_DIV_CSR_DIRTY_ACCESS "RO"
437 // -----------------------------------------------------------------------------
438 // Field       : SIO_DIV_CSR_READY
439 // Description : Reads as 0 when a calculation is in progress, 1 otherwise.
440 //               Writing an operand (xDIVIDEND, xDIVISOR) will immediately start
441 //               a new calculation, no
442 //               matter if one is already in progress.
443 //               Writing to a result register will immediately terminate any
444 //               in-progress calculation
445 //               and set the READY and DIRTY flags.
446 #define SIO_DIV_CSR_READY_RESET  _u(0x1)
447 #define SIO_DIV_CSR_READY_BITS   _u(0x00000001)
448 #define SIO_DIV_CSR_READY_MSB    _u(0)
449 #define SIO_DIV_CSR_READY_LSB    _u(0)
450 #define SIO_DIV_CSR_READY_ACCESS "RO"
451 // =============================================================================
452 // Register    : SIO_INTERP0_ACCUM0
453 // Description : Read/write access to accumulator 0
454 #define SIO_INTERP0_ACCUM0_OFFSET _u(0x00000080)
455 #define SIO_INTERP0_ACCUM0_BITS   _u(0xffffffff)
456 #define SIO_INTERP0_ACCUM0_RESET  _u(0x00000000)
457 #define SIO_INTERP0_ACCUM0_MSB    _u(31)
458 #define SIO_INTERP0_ACCUM0_LSB    _u(0)
459 #define SIO_INTERP0_ACCUM0_ACCESS "RW"
460 // =============================================================================
461 // Register    : SIO_INTERP0_ACCUM1
462 // Description : Read/write access to accumulator 1
463 #define SIO_INTERP0_ACCUM1_OFFSET _u(0x00000084)
464 #define SIO_INTERP0_ACCUM1_BITS   _u(0xffffffff)
465 #define SIO_INTERP0_ACCUM1_RESET  _u(0x00000000)
466 #define SIO_INTERP0_ACCUM1_MSB    _u(31)
467 #define SIO_INTERP0_ACCUM1_LSB    _u(0)
468 #define SIO_INTERP0_ACCUM1_ACCESS "RW"
469 // =============================================================================
470 // Register    : SIO_INTERP0_BASE0
471 // Description : Read/write access to BASE0 register.
472 #define SIO_INTERP0_BASE0_OFFSET _u(0x00000088)
473 #define SIO_INTERP0_BASE0_BITS   _u(0xffffffff)
474 #define SIO_INTERP0_BASE0_RESET  _u(0x00000000)
475 #define SIO_INTERP0_BASE0_MSB    _u(31)
476 #define SIO_INTERP0_BASE0_LSB    _u(0)
477 #define SIO_INTERP0_BASE0_ACCESS "RW"
478 // =============================================================================
479 // Register    : SIO_INTERP0_BASE1
480 // Description : Read/write access to BASE1 register.
481 #define SIO_INTERP0_BASE1_OFFSET _u(0x0000008c)
482 #define SIO_INTERP0_BASE1_BITS   _u(0xffffffff)
483 #define SIO_INTERP0_BASE1_RESET  _u(0x00000000)
484 #define SIO_INTERP0_BASE1_MSB    _u(31)
485 #define SIO_INTERP0_BASE1_LSB    _u(0)
486 #define SIO_INTERP0_BASE1_ACCESS "RW"
487 // =============================================================================
488 // Register    : SIO_INTERP0_BASE2
489 // Description : Read/write access to BASE2 register.
490 #define SIO_INTERP0_BASE2_OFFSET _u(0x00000090)
491 #define SIO_INTERP0_BASE2_BITS   _u(0xffffffff)
492 #define SIO_INTERP0_BASE2_RESET  _u(0x00000000)
493 #define SIO_INTERP0_BASE2_MSB    _u(31)
494 #define SIO_INTERP0_BASE2_LSB    _u(0)
495 #define SIO_INTERP0_BASE2_ACCESS "RW"
496 // =============================================================================
497 // Register    : SIO_INTERP0_POP_LANE0
498 // Description : Read LANE0 result, and simultaneously write lane results to
499 //               both accumulators (POP).
500 #define SIO_INTERP0_POP_LANE0_OFFSET _u(0x00000094)
501 #define SIO_INTERP0_POP_LANE0_BITS   _u(0xffffffff)
502 #define SIO_INTERP0_POP_LANE0_RESET  _u(0x00000000)
503 #define SIO_INTERP0_POP_LANE0_MSB    _u(31)
504 #define SIO_INTERP0_POP_LANE0_LSB    _u(0)
505 #define SIO_INTERP0_POP_LANE0_ACCESS "RO"
506 // =============================================================================
507 // Register    : SIO_INTERP0_POP_LANE1
508 // Description : Read LANE1 result, and simultaneously write lane results to
509 //               both accumulators (POP).
510 #define SIO_INTERP0_POP_LANE1_OFFSET _u(0x00000098)
511 #define SIO_INTERP0_POP_LANE1_BITS   _u(0xffffffff)
512 #define SIO_INTERP0_POP_LANE1_RESET  _u(0x00000000)
513 #define SIO_INTERP0_POP_LANE1_MSB    _u(31)
514 #define SIO_INTERP0_POP_LANE1_LSB    _u(0)
515 #define SIO_INTERP0_POP_LANE1_ACCESS "RO"
516 // =============================================================================
517 // Register    : SIO_INTERP0_POP_FULL
518 // Description : Read FULL result, and simultaneously write lane results to both
519 //               accumulators (POP).
520 #define SIO_INTERP0_POP_FULL_OFFSET _u(0x0000009c)
521 #define SIO_INTERP0_POP_FULL_BITS   _u(0xffffffff)
522 #define SIO_INTERP0_POP_FULL_RESET  _u(0x00000000)
523 #define SIO_INTERP0_POP_FULL_MSB    _u(31)
524 #define SIO_INTERP0_POP_FULL_LSB    _u(0)
525 #define SIO_INTERP0_POP_FULL_ACCESS "RO"
526 // =============================================================================
527 // Register    : SIO_INTERP0_PEEK_LANE0
528 // Description : Read LANE0 result, without altering any internal state (PEEK).
529 #define SIO_INTERP0_PEEK_LANE0_OFFSET _u(0x000000a0)
530 #define SIO_INTERP0_PEEK_LANE0_BITS   _u(0xffffffff)
531 #define SIO_INTERP0_PEEK_LANE0_RESET  _u(0x00000000)
532 #define SIO_INTERP0_PEEK_LANE0_MSB    _u(31)
533 #define SIO_INTERP0_PEEK_LANE0_LSB    _u(0)
534 #define SIO_INTERP0_PEEK_LANE0_ACCESS "RO"
535 // =============================================================================
536 // Register    : SIO_INTERP0_PEEK_LANE1
537 // Description : Read LANE1 result, without altering any internal state (PEEK).
538 #define SIO_INTERP0_PEEK_LANE1_OFFSET _u(0x000000a4)
539 #define SIO_INTERP0_PEEK_LANE1_BITS   _u(0xffffffff)
540 #define SIO_INTERP0_PEEK_LANE1_RESET  _u(0x00000000)
541 #define SIO_INTERP0_PEEK_LANE1_MSB    _u(31)
542 #define SIO_INTERP0_PEEK_LANE1_LSB    _u(0)
543 #define SIO_INTERP0_PEEK_LANE1_ACCESS "RO"
544 // =============================================================================
545 // Register    : SIO_INTERP0_PEEK_FULL
546 // Description : Read FULL result, without altering any internal state (PEEK).
547 #define SIO_INTERP0_PEEK_FULL_OFFSET _u(0x000000a8)
548 #define SIO_INTERP0_PEEK_FULL_BITS   _u(0xffffffff)
549 #define SIO_INTERP0_PEEK_FULL_RESET  _u(0x00000000)
550 #define SIO_INTERP0_PEEK_FULL_MSB    _u(31)
551 #define SIO_INTERP0_PEEK_FULL_LSB    _u(0)
552 #define SIO_INTERP0_PEEK_FULL_ACCESS "RO"
553 // =============================================================================
554 // Register    : SIO_INTERP0_CTRL_LANE0
555 // Description : Control register for lane 0
556 #define SIO_INTERP0_CTRL_LANE0_OFFSET _u(0x000000ac)
557 #define SIO_INTERP0_CTRL_LANE0_BITS   _u(0x03bfffff)
558 #define SIO_INTERP0_CTRL_LANE0_RESET  _u(0x00000000)
559 // -----------------------------------------------------------------------------
560 // Field       : SIO_INTERP0_CTRL_LANE0_OVERF
561 // Description : Set if either OVERF0 or OVERF1 is set.
562 #define SIO_INTERP0_CTRL_LANE0_OVERF_RESET  _u(0x0)
563 #define SIO_INTERP0_CTRL_LANE0_OVERF_BITS   _u(0x02000000)
564 #define SIO_INTERP0_CTRL_LANE0_OVERF_MSB    _u(25)
565 #define SIO_INTERP0_CTRL_LANE0_OVERF_LSB    _u(25)
566 #define SIO_INTERP0_CTRL_LANE0_OVERF_ACCESS "RO"
567 // -----------------------------------------------------------------------------
568 // Field       : SIO_INTERP0_CTRL_LANE0_OVERF1
569 // Description : Indicates if any masked-off MSBs in ACCUM1 are set.
570 #define SIO_INTERP0_CTRL_LANE0_OVERF1_RESET  _u(0x0)
571 #define SIO_INTERP0_CTRL_LANE0_OVERF1_BITS   _u(0x01000000)
572 #define SIO_INTERP0_CTRL_LANE0_OVERF1_MSB    _u(24)
573 #define SIO_INTERP0_CTRL_LANE0_OVERF1_LSB    _u(24)
574 #define SIO_INTERP0_CTRL_LANE0_OVERF1_ACCESS "RO"
575 // -----------------------------------------------------------------------------
576 // Field       : SIO_INTERP0_CTRL_LANE0_OVERF0
577 // Description : Indicates if any masked-off MSBs in ACCUM0 are set.
578 #define SIO_INTERP0_CTRL_LANE0_OVERF0_RESET  _u(0x0)
579 #define SIO_INTERP0_CTRL_LANE0_OVERF0_BITS   _u(0x00800000)
580 #define SIO_INTERP0_CTRL_LANE0_OVERF0_MSB    _u(23)
581 #define SIO_INTERP0_CTRL_LANE0_OVERF0_LSB    _u(23)
582 #define SIO_INTERP0_CTRL_LANE0_OVERF0_ACCESS "RO"
583 // -----------------------------------------------------------------------------
584 // Field       : SIO_INTERP0_CTRL_LANE0_BLEND
585 // Description : Only present on INTERP0 on each core. If BLEND mode is enabled:
586 //               - LANE1 result is a linear interpolation between BASE0 and
587 //               BASE1, controlled
588 //               by the 8 LSBs of lane 1 shift and mask value (a fractional
589 //               number between
590 //               0 and 255/256ths)
591 //               - LANE0 result does not have BASE0 added (yields only the 8
592 //               LSBs of lane 1 shift+mask value)
593 //               - FULL result does not have lane 1 shift+mask value added
594 //               (BASE2 + lane 0 shift+mask)
595 //               LANE1 SIGNED flag controls whether the interpolation is signed
596 //               or unsigned.
597 #define SIO_INTERP0_CTRL_LANE0_BLEND_RESET  _u(0x0)
598 #define SIO_INTERP0_CTRL_LANE0_BLEND_BITS   _u(0x00200000)
599 #define SIO_INTERP0_CTRL_LANE0_BLEND_MSB    _u(21)
600 #define SIO_INTERP0_CTRL_LANE0_BLEND_LSB    _u(21)
601 #define SIO_INTERP0_CTRL_LANE0_BLEND_ACCESS "RW"
602 // -----------------------------------------------------------------------------
603 // Field       : SIO_INTERP0_CTRL_LANE0_FORCE_MSB
604 // Description : ORed into bits 29:28 of the lane result presented to the
605 //               processor on the bus.
606 //               No effect on the internal 32-bit datapath. Handy for using a
607 //               lane to generate sequence
608 //               of pointers into flash or SRAM.
609 #define SIO_INTERP0_CTRL_LANE0_FORCE_MSB_RESET  _u(0x0)
610 #define SIO_INTERP0_CTRL_LANE0_FORCE_MSB_BITS   _u(0x00180000)
611 #define SIO_INTERP0_CTRL_LANE0_FORCE_MSB_MSB    _u(20)
612 #define SIO_INTERP0_CTRL_LANE0_FORCE_MSB_LSB    _u(19)
613 #define SIO_INTERP0_CTRL_LANE0_FORCE_MSB_ACCESS "RW"
614 // -----------------------------------------------------------------------------
615 // Field       : SIO_INTERP0_CTRL_LANE0_ADD_RAW
616 // Description : If 1, mask + shift is bypassed for LANE0 result. This does not
617 //               affect FULL result.
618 #define SIO_INTERP0_CTRL_LANE0_ADD_RAW_RESET  _u(0x0)
619 #define SIO_INTERP0_CTRL_LANE0_ADD_RAW_BITS   _u(0x00040000)
620 #define SIO_INTERP0_CTRL_LANE0_ADD_RAW_MSB    _u(18)
621 #define SIO_INTERP0_CTRL_LANE0_ADD_RAW_LSB    _u(18)
622 #define SIO_INTERP0_CTRL_LANE0_ADD_RAW_ACCESS "RW"
623 // -----------------------------------------------------------------------------
624 // Field       : SIO_INTERP0_CTRL_LANE0_CROSS_RESULT
625 // Description : If 1, feed the opposite lane's result into this lane's
626 //               accumulator on POP.
627 #define SIO_INTERP0_CTRL_LANE0_CROSS_RESULT_RESET  _u(0x0)
628 #define SIO_INTERP0_CTRL_LANE0_CROSS_RESULT_BITS   _u(0x00020000)
629 #define SIO_INTERP0_CTRL_LANE0_CROSS_RESULT_MSB    _u(17)
630 #define SIO_INTERP0_CTRL_LANE0_CROSS_RESULT_LSB    _u(17)
631 #define SIO_INTERP0_CTRL_LANE0_CROSS_RESULT_ACCESS "RW"
632 // -----------------------------------------------------------------------------
633 // Field       : SIO_INTERP0_CTRL_LANE0_CROSS_INPUT
634 // Description : If 1, feed the opposite lane's accumulator into this lane's
635 //               shift + mask hardware.
636 //               Takes effect even if ADD_RAW is set (the CROSS_INPUT mux is
637 //               before the shift+mask bypass)
638 #define SIO_INTERP0_CTRL_LANE0_CROSS_INPUT_RESET  _u(0x0)
639 #define SIO_INTERP0_CTRL_LANE0_CROSS_INPUT_BITS   _u(0x00010000)
640 #define SIO_INTERP0_CTRL_LANE0_CROSS_INPUT_MSB    _u(16)
641 #define SIO_INTERP0_CTRL_LANE0_CROSS_INPUT_LSB    _u(16)
642 #define SIO_INTERP0_CTRL_LANE0_CROSS_INPUT_ACCESS "RW"
643 // -----------------------------------------------------------------------------
644 // Field       : SIO_INTERP0_CTRL_LANE0_SIGNED
645 // Description : If SIGNED is set, the shifted and masked accumulator value is
646 //               sign-extended to 32 bits
647 //               before adding to BASE0, and LANE0 PEEK/POP appear extended to
648 //               32 bits when read by processor.
649 #define SIO_INTERP0_CTRL_LANE0_SIGNED_RESET  _u(0x0)
650 #define SIO_INTERP0_CTRL_LANE0_SIGNED_BITS   _u(0x00008000)
651 #define SIO_INTERP0_CTRL_LANE0_SIGNED_MSB    _u(15)
652 #define SIO_INTERP0_CTRL_LANE0_SIGNED_LSB    _u(15)
653 #define SIO_INTERP0_CTRL_LANE0_SIGNED_ACCESS "RW"
654 // -----------------------------------------------------------------------------
655 // Field       : SIO_INTERP0_CTRL_LANE0_MASK_MSB
656 // Description : The most-significant bit allowed to pass by the mask
657 //               (inclusive)
658 //               Setting MSB < LSB may cause chip to turn inside-out
659 #define SIO_INTERP0_CTRL_LANE0_MASK_MSB_RESET  _u(0x00)
660 #define SIO_INTERP0_CTRL_LANE0_MASK_MSB_BITS   _u(0x00007c00)
661 #define SIO_INTERP0_CTRL_LANE0_MASK_MSB_MSB    _u(14)
662 #define SIO_INTERP0_CTRL_LANE0_MASK_MSB_LSB    _u(10)
663 #define SIO_INTERP0_CTRL_LANE0_MASK_MSB_ACCESS "RW"
664 // -----------------------------------------------------------------------------
665 // Field       : SIO_INTERP0_CTRL_LANE0_MASK_LSB
666 // Description : The least-significant bit allowed to pass by the mask
667 //               (inclusive)
668 #define SIO_INTERP0_CTRL_LANE0_MASK_LSB_RESET  _u(0x00)
669 #define SIO_INTERP0_CTRL_LANE0_MASK_LSB_BITS   _u(0x000003e0)
670 #define SIO_INTERP0_CTRL_LANE0_MASK_LSB_MSB    _u(9)
671 #define SIO_INTERP0_CTRL_LANE0_MASK_LSB_LSB    _u(5)
672 #define SIO_INTERP0_CTRL_LANE0_MASK_LSB_ACCESS "RW"
673 // -----------------------------------------------------------------------------
674 // Field       : SIO_INTERP0_CTRL_LANE0_SHIFT
675 // Description : Logical right-shift applied to accumulator before masking
676 #define SIO_INTERP0_CTRL_LANE0_SHIFT_RESET  _u(0x00)
677 #define SIO_INTERP0_CTRL_LANE0_SHIFT_BITS   _u(0x0000001f)
678 #define SIO_INTERP0_CTRL_LANE0_SHIFT_MSB    _u(4)
679 #define SIO_INTERP0_CTRL_LANE0_SHIFT_LSB    _u(0)
680 #define SIO_INTERP0_CTRL_LANE0_SHIFT_ACCESS "RW"
681 // =============================================================================
682 // Register    : SIO_INTERP0_CTRL_LANE1
683 // Description : Control register for lane 1
684 #define SIO_INTERP0_CTRL_LANE1_OFFSET _u(0x000000b0)
685 #define SIO_INTERP0_CTRL_LANE1_BITS   _u(0x001fffff)
686 #define SIO_INTERP0_CTRL_LANE1_RESET  _u(0x00000000)
687 // -----------------------------------------------------------------------------
688 // Field       : SIO_INTERP0_CTRL_LANE1_FORCE_MSB
689 // Description : ORed into bits 29:28 of the lane result presented to the
690 //               processor on the bus.
691 //               No effect on the internal 32-bit datapath. Handy for using a
692 //               lane to generate sequence
693 //               of pointers into flash or SRAM.
694 #define SIO_INTERP0_CTRL_LANE1_FORCE_MSB_RESET  _u(0x0)
695 #define SIO_INTERP0_CTRL_LANE1_FORCE_MSB_BITS   _u(0x00180000)
696 #define SIO_INTERP0_CTRL_LANE1_FORCE_MSB_MSB    _u(20)
697 #define SIO_INTERP0_CTRL_LANE1_FORCE_MSB_LSB    _u(19)
698 #define SIO_INTERP0_CTRL_LANE1_FORCE_MSB_ACCESS "RW"
699 // -----------------------------------------------------------------------------
700 // Field       : SIO_INTERP0_CTRL_LANE1_ADD_RAW
701 // Description : If 1, mask + shift is bypassed for LANE1 result. This does not
702 //               affect FULL result.
703 #define SIO_INTERP0_CTRL_LANE1_ADD_RAW_RESET  _u(0x0)
704 #define SIO_INTERP0_CTRL_LANE1_ADD_RAW_BITS   _u(0x00040000)
705 #define SIO_INTERP0_CTRL_LANE1_ADD_RAW_MSB    _u(18)
706 #define SIO_INTERP0_CTRL_LANE1_ADD_RAW_LSB    _u(18)
707 #define SIO_INTERP0_CTRL_LANE1_ADD_RAW_ACCESS "RW"
708 // -----------------------------------------------------------------------------
709 // Field       : SIO_INTERP0_CTRL_LANE1_CROSS_RESULT
710 // Description : If 1, feed the opposite lane's result into this lane's
711 //               accumulator on POP.
712 #define SIO_INTERP0_CTRL_LANE1_CROSS_RESULT_RESET  _u(0x0)
713 #define SIO_INTERP0_CTRL_LANE1_CROSS_RESULT_BITS   _u(0x00020000)
714 #define SIO_INTERP0_CTRL_LANE1_CROSS_RESULT_MSB    _u(17)
715 #define SIO_INTERP0_CTRL_LANE1_CROSS_RESULT_LSB    _u(17)
716 #define SIO_INTERP0_CTRL_LANE1_CROSS_RESULT_ACCESS "RW"
717 // -----------------------------------------------------------------------------
718 // Field       : SIO_INTERP0_CTRL_LANE1_CROSS_INPUT
719 // Description : If 1, feed the opposite lane's accumulator into this lane's
720 //               shift + mask hardware.
721 //               Takes effect even if ADD_RAW is set (the CROSS_INPUT mux is
722 //               before the shift+mask bypass)
723 #define SIO_INTERP0_CTRL_LANE1_CROSS_INPUT_RESET  _u(0x0)
724 #define SIO_INTERP0_CTRL_LANE1_CROSS_INPUT_BITS   _u(0x00010000)
725 #define SIO_INTERP0_CTRL_LANE1_CROSS_INPUT_MSB    _u(16)
726 #define SIO_INTERP0_CTRL_LANE1_CROSS_INPUT_LSB    _u(16)
727 #define SIO_INTERP0_CTRL_LANE1_CROSS_INPUT_ACCESS "RW"
728 // -----------------------------------------------------------------------------
729 // Field       : SIO_INTERP0_CTRL_LANE1_SIGNED
730 // Description : If SIGNED is set, the shifted and masked accumulator value is
731 //               sign-extended to 32 bits
732 //               before adding to BASE1, and LANE1 PEEK/POP appear extended to
733 //               32 bits when read by processor.
734 #define SIO_INTERP0_CTRL_LANE1_SIGNED_RESET  _u(0x0)
735 #define SIO_INTERP0_CTRL_LANE1_SIGNED_BITS   _u(0x00008000)
736 #define SIO_INTERP0_CTRL_LANE1_SIGNED_MSB    _u(15)
737 #define SIO_INTERP0_CTRL_LANE1_SIGNED_LSB    _u(15)
738 #define SIO_INTERP0_CTRL_LANE1_SIGNED_ACCESS "RW"
739 // -----------------------------------------------------------------------------
740 // Field       : SIO_INTERP0_CTRL_LANE1_MASK_MSB
741 // Description : The most-significant bit allowed to pass by the mask
742 //               (inclusive)
743 //               Setting MSB < LSB may cause chip to turn inside-out
744 #define SIO_INTERP0_CTRL_LANE1_MASK_MSB_RESET  _u(0x00)
745 #define SIO_INTERP0_CTRL_LANE1_MASK_MSB_BITS   _u(0x00007c00)
746 #define SIO_INTERP0_CTRL_LANE1_MASK_MSB_MSB    _u(14)
747 #define SIO_INTERP0_CTRL_LANE1_MASK_MSB_LSB    _u(10)
748 #define SIO_INTERP0_CTRL_LANE1_MASK_MSB_ACCESS "RW"
749 // -----------------------------------------------------------------------------
750 // Field       : SIO_INTERP0_CTRL_LANE1_MASK_LSB
751 // Description : The least-significant bit allowed to pass by the mask
752 //               (inclusive)
753 #define SIO_INTERP0_CTRL_LANE1_MASK_LSB_RESET  _u(0x00)
754 #define SIO_INTERP0_CTRL_LANE1_MASK_LSB_BITS   _u(0x000003e0)
755 #define SIO_INTERP0_CTRL_LANE1_MASK_LSB_MSB    _u(9)
756 #define SIO_INTERP0_CTRL_LANE1_MASK_LSB_LSB    _u(5)
757 #define SIO_INTERP0_CTRL_LANE1_MASK_LSB_ACCESS "RW"
758 // -----------------------------------------------------------------------------
759 // Field       : SIO_INTERP0_CTRL_LANE1_SHIFT
760 // Description : Logical right-shift applied to accumulator before masking
761 #define SIO_INTERP0_CTRL_LANE1_SHIFT_RESET  _u(0x00)
762 #define SIO_INTERP0_CTRL_LANE1_SHIFT_BITS   _u(0x0000001f)
763 #define SIO_INTERP0_CTRL_LANE1_SHIFT_MSB    _u(4)
764 #define SIO_INTERP0_CTRL_LANE1_SHIFT_LSB    _u(0)
765 #define SIO_INTERP0_CTRL_LANE1_SHIFT_ACCESS "RW"
766 // =============================================================================
767 // Register    : SIO_INTERP0_ACCUM0_ADD
768 // Description : Values written here are atomically added to ACCUM0
769 //               Reading yields lane 0's raw shift and mask value (BASE0 not
770 //               added).
771 #define SIO_INTERP0_ACCUM0_ADD_OFFSET _u(0x000000b4)
772 #define SIO_INTERP0_ACCUM0_ADD_BITS   _u(0x00ffffff)
773 #define SIO_INTERP0_ACCUM0_ADD_RESET  _u(0x00000000)
774 #define SIO_INTERP0_ACCUM0_ADD_MSB    _u(23)
775 #define SIO_INTERP0_ACCUM0_ADD_LSB    _u(0)
776 #define SIO_INTERP0_ACCUM0_ADD_ACCESS "RW"
777 // =============================================================================
778 // Register    : SIO_INTERP0_ACCUM1_ADD
779 // Description : Values written here are atomically added to ACCUM1
780 //               Reading yields lane 1's raw shift and mask value (BASE1 not
781 //               added).
782 #define SIO_INTERP0_ACCUM1_ADD_OFFSET _u(0x000000b8)
783 #define SIO_INTERP0_ACCUM1_ADD_BITS   _u(0x00ffffff)
784 #define SIO_INTERP0_ACCUM1_ADD_RESET  _u(0x00000000)
785 #define SIO_INTERP0_ACCUM1_ADD_MSB    _u(23)
786 #define SIO_INTERP0_ACCUM1_ADD_LSB    _u(0)
787 #define SIO_INTERP0_ACCUM1_ADD_ACCESS "RW"
788 // =============================================================================
789 // Register    : SIO_INTERP0_BASE_1AND0
790 // Description : On write, the lower 16 bits go to BASE0, upper bits to BASE1
791 //               simultaneously.
792 //               Each half is sign-extended to 32 bits if that lane's SIGNED
793 //               flag is set.
794 #define SIO_INTERP0_BASE_1AND0_OFFSET _u(0x000000bc)
795 #define SIO_INTERP0_BASE_1AND0_BITS   _u(0xffffffff)
796 #define SIO_INTERP0_BASE_1AND0_RESET  _u(0x00000000)
797 #define SIO_INTERP0_BASE_1AND0_MSB    _u(31)
798 #define SIO_INTERP0_BASE_1AND0_LSB    _u(0)
799 #define SIO_INTERP0_BASE_1AND0_ACCESS "WO"
800 // =============================================================================
801 // Register    : SIO_INTERP1_ACCUM0
802 // Description : Read/write access to accumulator 0
803 #define SIO_INTERP1_ACCUM0_OFFSET _u(0x000000c0)
804 #define SIO_INTERP1_ACCUM0_BITS   _u(0xffffffff)
805 #define SIO_INTERP1_ACCUM0_RESET  _u(0x00000000)
806 #define SIO_INTERP1_ACCUM0_MSB    _u(31)
807 #define SIO_INTERP1_ACCUM0_LSB    _u(0)
808 #define SIO_INTERP1_ACCUM0_ACCESS "RW"
809 // =============================================================================
810 // Register    : SIO_INTERP1_ACCUM1
811 // Description : Read/write access to accumulator 1
812 #define SIO_INTERP1_ACCUM1_OFFSET _u(0x000000c4)
813 #define SIO_INTERP1_ACCUM1_BITS   _u(0xffffffff)
814 #define SIO_INTERP1_ACCUM1_RESET  _u(0x00000000)
815 #define SIO_INTERP1_ACCUM1_MSB    _u(31)
816 #define SIO_INTERP1_ACCUM1_LSB    _u(0)
817 #define SIO_INTERP1_ACCUM1_ACCESS "RW"
818 // =============================================================================
819 // Register    : SIO_INTERP1_BASE0
820 // Description : Read/write access to BASE0 register.
821 #define SIO_INTERP1_BASE0_OFFSET _u(0x000000c8)
822 #define SIO_INTERP1_BASE0_BITS   _u(0xffffffff)
823 #define SIO_INTERP1_BASE0_RESET  _u(0x00000000)
824 #define SIO_INTERP1_BASE0_MSB    _u(31)
825 #define SIO_INTERP1_BASE0_LSB    _u(0)
826 #define SIO_INTERP1_BASE0_ACCESS "RW"
827 // =============================================================================
828 // Register    : SIO_INTERP1_BASE1
829 // Description : Read/write access to BASE1 register.
830 #define SIO_INTERP1_BASE1_OFFSET _u(0x000000cc)
831 #define SIO_INTERP1_BASE1_BITS   _u(0xffffffff)
832 #define SIO_INTERP1_BASE1_RESET  _u(0x00000000)
833 #define SIO_INTERP1_BASE1_MSB    _u(31)
834 #define SIO_INTERP1_BASE1_LSB    _u(0)
835 #define SIO_INTERP1_BASE1_ACCESS "RW"
836 // =============================================================================
837 // Register    : SIO_INTERP1_BASE2
838 // Description : Read/write access to BASE2 register.
839 #define SIO_INTERP1_BASE2_OFFSET _u(0x000000d0)
840 #define SIO_INTERP1_BASE2_BITS   _u(0xffffffff)
841 #define SIO_INTERP1_BASE2_RESET  _u(0x00000000)
842 #define SIO_INTERP1_BASE2_MSB    _u(31)
843 #define SIO_INTERP1_BASE2_LSB    _u(0)
844 #define SIO_INTERP1_BASE2_ACCESS "RW"
845 // =============================================================================
846 // Register    : SIO_INTERP1_POP_LANE0
847 // Description : Read LANE0 result, and simultaneously write lane results to
848 //               both accumulators (POP).
849 #define SIO_INTERP1_POP_LANE0_OFFSET _u(0x000000d4)
850 #define SIO_INTERP1_POP_LANE0_BITS   _u(0xffffffff)
851 #define SIO_INTERP1_POP_LANE0_RESET  _u(0x00000000)
852 #define SIO_INTERP1_POP_LANE0_MSB    _u(31)
853 #define SIO_INTERP1_POP_LANE0_LSB    _u(0)
854 #define SIO_INTERP1_POP_LANE0_ACCESS "RO"
855 // =============================================================================
856 // Register    : SIO_INTERP1_POP_LANE1
857 // Description : Read LANE1 result, and simultaneously write lane results to
858 //               both accumulators (POP).
859 #define SIO_INTERP1_POP_LANE1_OFFSET _u(0x000000d8)
860 #define SIO_INTERP1_POP_LANE1_BITS   _u(0xffffffff)
861 #define SIO_INTERP1_POP_LANE1_RESET  _u(0x00000000)
862 #define SIO_INTERP1_POP_LANE1_MSB    _u(31)
863 #define SIO_INTERP1_POP_LANE1_LSB    _u(0)
864 #define SIO_INTERP1_POP_LANE1_ACCESS "RO"
865 // =============================================================================
866 // Register    : SIO_INTERP1_POP_FULL
867 // Description : Read FULL result, and simultaneously write lane results to both
868 //               accumulators (POP).
869 #define SIO_INTERP1_POP_FULL_OFFSET _u(0x000000dc)
870 #define SIO_INTERP1_POP_FULL_BITS   _u(0xffffffff)
871 #define SIO_INTERP1_POP_FULL_RESET  _u(0x00000000)
872 #define SIO_INTERP1_POP_FULL_MSB    _u(31)
873 #define SIO_INTERP1_POP_FULL_LSB    _u(0)
874 #define SIO_INTERP1_POP_FULL_ACCESS "RO"
875 // =============================================================================
876 // Register    : SIO_INTERP1_PEEK_LANE0
877 // Description : Read LANE0 result, without altering any internal state (PEEK).
878 #define SIO_INTERP1_PEEK_LANE0_OFFSET _u(0x000000e0)
879 #define SIO_INTERP1_PEEK_LANE0_BITS   _u(0xffffffff)
880 #define SIO_INTERP1_PEEK_LANE0_RESET  _u(0x00000000)
881 #define SIO_INTERP1_PEEK_LANE0_MSB    _u(31)
882 #define SIO_INTERP1_PEEK_LANE0_LSB    _u(0)
883 #define SIO_INTERP1_PEEK_LANE0_ACCESS "RO"
884 // =============================================================================
885 // Register    : SIO_INTERP1_PEEK_LANE1
886 // Description : Read LANE1 result, without altering any internal state (PEEK).
887 #define SIO_INTERP1_PEEK_LANE1_OFFSET _u(0x000000e4)
888 #define SIO_INTERP1_PEEK_LANE1_BITS   _u(0xffffffff)
889 #define SIO_INTERP1_PEEK_LANE1_RESET  _u(0x00000000)
890 #define SIO_INTERP1_PEEK_LANE1_MSB    _u(31)
891 #define SIO_INTERP1_PEEK_LANE1_LSB    _u(0)
892 #define SIO_INTERP1_PEEK_LANE1_ACCESS "RO"
893 // =============================================================================
894 // Register    : SIO_INTERP1_PEEK_FULL
895 // Description : Read FULL result, without altering any internal state (PEEK).
896 #define SIO_INTERP1_PEEK_FULL_OFFSET _u(0x000000e8)
897 #define SIO_INTERP1_PEEK_FULL_BITS   _u(0xffffffff)
898 #define SIO_INTERP1_PEEK_FULL_RESET  _u(0x00000000)
899 #define SIO_INTERP1_PEEK_FULL_MSB    _u(31)
900 #define SIO_INTERP1_PEEK_FULL_LSB    _u(0)
901 #define SIO_INTERP1_PEEK_FULL_ACCESS "RO"
902 // =============================================================================
903 // Register    : SIO_INTERP1_CTRL_LANE0
904 // Description : Control register for lane 0
905 #define SIO_INTERP1_CTRL_LANE0_OFFSET _u(0x000000ec)
906 #define SIO_INTERP1_CTRL_LANE0_BITS   _u(0x03dfffff)
907 #define SIO_INTERP1_CTRL_LANE0_RESET  _u(0x00000000)
908 // -----------------------------------------------------------------------------
909 // Field       : SIO_INTERP1_CTRL_LANE0_OVERF
910 // Description : Set if either OVERF0 or OVERF1 is set.
911 #define SIO_INTERP1_CTRL_LANE0_OVERF_RESET  _u(0x0)
912 #define SIO_INTERP1_CTRL_LANE0_OVERF_BITS   _u(0x02000000)
913 #define SIO_INTERP1_CTRL_LANE0_OVERF_MSB    _u(25)
914 #define SIO_INTERP1_CTRL_LANE0_OVERF_LSB    _u(25)
915 #define SIO_INTERP1_CTRL_LANE0_OVERF_ACCESS "RO"
916 // -----------------------------------------------------------------------------
917 // Field       : SIO_INTERP1_CTRL_LANE0_OVERF1
918 // Description : Indicates if any masked-off MSBs in ACCUM1 are set.
919 #define SIO_INTERP1_CTRL_LANE0_OVERF1_RESET  _u(0x0)
920 #define SIO_INTERP1_CTRL_LANE0_OVERF1_BITS   _u(0x01000000)
921 #define SIO_INTERP1_CTRL_LANE0_OVERF1_MSB    _u(24)
922 #define SIO_INTERP1_CTRL_LANE0_OVERF1_LSB    _u(24)
923 #define SIO_INTERP1_CTRL_LANE0_OVERF1_ACCESS "RO"
924 // -----------------------------------------------------------------------------
925 // Field       : SIO_INTERP1_CTRL_LANE0_OVERF0
926 // Description : Indicates if any masked-off MSBs in ACCUM0 are set.
927 #define SIO_INTERP1_CTRL_LANE0_OVERF0_RESET  _u(0x0)
928 #define SIO_INTERP1_CTRL_LANE0_OVERF0_BITS   _u(0x00800000)
929 #define SIO_INTERP1_CTRL_LANE0_OVERF0_MSB    _u(23)
930 #define SIO_INTERP1_CTRL_LANE0_OVERF0_LSB    _u(23)
931 #define SIO_INTERP1_CTRL_LANE0_OVERF0_ACCESS "RO"
932 // -----------------------------------------------------------------------------
933 // Field       : SIO_INTERP1_CTRL_LANE0_CLAMP
934 // Description : Only present on INTERP1 on each core. If CLAMP mode is enabled:
935 //               - LANE0 result is shifted and masked ACCUM0, clamped by a lower
936 //               bound of
937 //               BASE0 and an upper bound of BASE1.
938 //               - Signedness of these comparisons is determined by
939 //               LANE0_CTRL_SIGNED
940 #define SIO_INTERP1_CTRL_LANE0_CLAMP_RESET  _u(0x0)
941 #define SIO_INTERP1_CTRL_LANE0_CLAMP_BITS   _u(0x00400000)
942 #define SIO_INTERP1_CTRL_LANE0_CLAMP_MSB    _u(22)
943 #define SIO_INTERP1_CTRL_LANE0_CLAMP_LSB    _u(22)
944 #define SIO_INTERP1_CTRL_LANE0_CLAMP_ACCESS "RW"
945 // -----------------------------------------------------------------------------
946 // Field       : SIO_INTERP1_CTRL_LANE0_FORCE_MSB
947 // Description : ORed into bits 29:28 of the lane result presented to the
948 //               processor on the bus.
949 //               No effect on the internal 32-bit datapath. Handy for using a
950 //               lane to generate sequence
951 //               of pointers into flash or SRAM.
952 #define SIO_INTERP1_CTRL_LANE0_FORCE_MSB_RESET  _u(0x0)
953 #define SIO_INTERP1_CTRL_LANE0_FORCE_MSB_BITS   _u(0x00180000)
954 #define SIO_INTERP1_CTRL_LANE0_FORCE_MSB_MSB    _u(20)
955 #define SIO_INTERP1_CTRL_LANE0_FORCE_MSB_LSB    _u(19)
956 #define SIO_INTERP1_CTRL_LANE0_FORCE_MSB_ACCESS "RW"
957 // -----------------------------------------------------------------------------
958 // Field       : SIO_INTERP1_CTRL_LANE0_ADD_RAW
959 // Description : If 1, mask + shift is bypassed for LANE0 result. This does not
960 //               affect FULL result.
961 #define SIO_INTERP1_CTRL_LANE0_ADD_RAW_RESET  _u(0x0)
962 #define SIO_INTERP1_CTRL_LANE0_ADD_RAW_BITS   _u(0x00040000)
963 #define SIO_INTERP1_CTRL_LANE0_ADD_RAW_MSB    _u(18)
964 #define SIO_INTERP1_CTRL_LANE0_ADD_RAW_LSB    _u(18)
965 #define SIO_INTERP1_CTRL_LANE0_ADD_RAW_ACCESS "RW"
966 // -----------------------------------------------------------------------------
967 // Field       : SIO_INTERP1_CTRL_LANE0_CROSS_RESULT
968 // Description : If 1, feed the opposite lane's result into this lane's
969 //               accumulator on POP.
970 #define SIO_INTERP1_CTRL_LANE0_CROSS_RESULT_RESET  _u(0x0)
971 #define SIO_INTERP1_CTRL_LANE0_CROSS_RESULT_BITS   _u(0x00020000)
972 #define SIO_INTERP1_CTRL_LANE0_CROSS_RESULT_MSB    _u(17)
973 #define SIO_INTERP1_CTRL_LANE0_CROSS_RESULT_LSB    _u(17)
974 #define SIO_INTERP1_CTRL_LANE0_CROSS_RESULT_ACCESS "RW"
975 // -----------------------------------------------------------------------------
976 // Field       : SIO_INTERP1_CTRL_LANE0_CROSS_INPUT
977 // Description : If 1, feed the opposite lane's accumulator into this lane's
978 //               shift + mask hardware.
979 //               Takes effect even if ADD_RAW is set (the CROSS_INPUT mux is
980 //               before the shift+mask bypass)
981 #define SIO_INTERP1_CTRL_LANE0_CROSS_INPUT_RESET  _u(0x0)
982 #define SIO_INTERP1_CTRL_LANE0_CROSS_INPUT_BITS   _u(0x00010000)
983 #define SIO_INTERP1_CTRL_LANE0_CROSS_INPUT_MSB    _u(16)
984 #define SIO_INTERP1_CTRL_LANE0_CROSS_INPUT_LSB    _u(16)
985 #define SIO_INTERP1_CTRL_LANE0_CROSS_INPUT_ACCESS "RW"
986 // -----------------------------------------------------------------------------
987 // Field       : SIO_INTERP1_CTRL_LANE0_SIGNED
988 // Description : If SIGNED is set, the shifted and masked accumulator value is
989 //               sign-extended to 32 bits
990 //               before adding to BASE0, and LANE0 PEEK/POP appear extended to
991 //               32 bits when read by processor.
992 #define SIO_INTERP1_CTRL_LANE0_SIGNED_RESET  _u(0x0)
993 #define SIO_INTERP1_CTRL_LANE0_SIGNED_BITS   _u(0x00008000)
994 #define SIO_INTERP1_CTRL_LANE0_SIGNED_MSB    _u(15)
995 #define SIO_INTERP1_CTRL_LANE0_SIGNED_LSB    _u(15)
996 #define SIO_INTERP1_CTRL_LANE0_SIGNED_ACCESS "RW"
997 // -----------------------------------------------------------------------------
998 // Field       : SIO_INTERP1_CTRL_LANE0_MASK_MSB
999 // Description : The most-significant bit allowed to pass by the mask
1000 //               (inclusive)
1001 //               Setting MSB < LSB may cause chip to turn inside-out
1002 #define SIO_INTERP1_CTRL_LANE0_MASK_MSB_RESET  _u(0x00)
1003 #define SIO_INTERP1_CTRL_LANE0_MASK_MSB_BITS   _u(0x00007c00)
1004 #define SIO_INTERP1_CTRL_LANE0_MASK_MSB_MSB    _u(14)
1005 #define SIO_INTERP1_CTRL_LANE0_MASK_MSB_LSB    _u(10)
1006 #define SIO_INTERP1_CTRL_LANE0_MASK_MSB_ACCESS "RW"
1007 // -----------------------------------------------------------------------------
1008 // Field       : SIO_INTERP1_CTRL_LANE0_MASK_LSB
1009 // Description : The least-significant bit allowed to pass by the mask
1010 //               (inclusive)
1011 #define SIO_INTERP1_CTRL_LANE0_MASK_LSB_RESET  _u(0x00)
1012 #define SIO_INTERP1_CTRL_LANE0_MASK_LSB_BITS   _u(0x000003e0)
1013 #define SIO_INTERP1_CTRL_LANE0_MASK_LSB_MSB    _u(9)
1014 #define SIO_INTERP1_CTRL_LANE0_MASK_LSB_LSB    _u(5)
1015 #define SIO_INTERP1_CTRL_LANE0_MASK_LSB_ACCESS "RW"
1016 // -----------------------------------------------------------------------------
1017 // Field       : SIO_INTERP1_CTRL_LANE0_SHIFT
1018 // Description : Logical right-shift applied to accumulator before masking
1019 #define SIO_INTERP1_CTRL_LANE0_SHIFT_RESET  _u(0x00)
1020 #define SIO_INTERP1_CTRL_LANE0_SHIFT_BITS   _u(0x0000001f)
1021 #define SIO_INTERP1_CTRL_LANE0_SHIFT_MSB    _u(4)
1022 #define SIO_INTERP1_CTRL_LANE0_SHIFT_LSB    _u(0)
1023 #define SIO_INTERP1_CTRL_LANE0_SHIFT_ACCESS "RW"
1024 // =============================================================================
1025 // Register    : SIO_INTERP1_CTRL_LANE1
1026 // Description : Control register for lane 1
1027 #define SIO_INTERP1_CTRL_LANE1_OFFSET _u(0x000000f0)
1028 #define SIO_INTERP1_CTRL_LANE1_BITS   _u(0x001fffff)
1029 #define SIO_INTERP1_CTRL_LANE1_RESET  _u(0x00000000)
1030 // -----------------------------------------------------------------------------
1031 // Field       : SIO_INTERP1_CTRL_LANE1_FORCE_MSB
1032 // Description : ORed into bits 29:28 of the lane result presented to the
1033 //               processor on the bus.
1034 //               No effect on the internal 32-bit datapath. Handy for using a
1035 //               lane to generate sequence
1036 //               of pointers into flash or SRAM.
1037 #define SIO_INTERP1_CTRL_LANE1_FORCE_MSB_RESET  _u(0x0)
1038 #define SIO_INTERP1_CTRL_LANE1_FORCE_MSB_BITS   _u(0x00180000)
1039 #define SIO_INTERP1_CTRL_LANE1_FORCE_MSB_MSB    _u(20)
1040 #define SIO_INTERP1_CTRL_LANE1_FORCE_MSB_LSB    _u(19)
1041 #define SIO_INTERP1_CTRL_LANE1_FORCE_MSB_ACCESS "RW"
1042 // -----------------------------------------------------------------------------
1043 // Field       : SIO_INTERP1_CTRL_LANE1_ADD_RAW
1044 // Description : If 1, mask + shift is bypassed for LANE1 result. This does not
1045 //               affect FULL result.
1046 #define SIO_INTERP1_CTRL_LANE1_ADD_RAW_RESET  _u(0x0)
1047 #define SIO_INTERP1_CTRL_LANE1_ADD_RAW_BITS   _u(0x00040000)
1048 #define SIO_INTERP1_CTRL_LANE1_ADD_RAW_MSB    _u(18)
1049 #define SIO_INTERP1_CTRL_LANE1_ADD_RAW_LSB    _u(18)
1050 #define SIO_INTERP1_CTRL_LANE1_ADD_RAW_ACCESS "RW"
1051 // -----------------------------------------------------------------------------
1052 // Field       : SIO_INTERP1_CTRL_LANE1_CROSS_RESULT
1053 // Description : If 1, feed the opposite lane's result into this lane's
1054 //               accumulator on POP.
1055 #define SIO_INTERP1_CTRL_LANE1_CROSS_RESULT_RESET  _u(0x0)
1056 #define SIO_INTERP1_CTRL_LANE1_CROSS_RESULT_BITS   _u(0x00020000)
1057 #define SIO_INTERP1_CTRL_LANE1_CROSS_RESULT_MSB    _u(17)
1058 #define SIO_INTERP1_CTRL_LANE1_CROSS_RESULT_LSB    _u(17)
1059 #define SIO_INTERP1_CTRL_LANE1_CROSS_RESULT_ACCESS "RW"
1060 // -----------------------------------------------------------------------------
1061 // Field       : SIO_INTERP1_CTRL_LANE1_CROSS_INPUT
1062 // Description : If 1, feed the opposite lane's accumulator into this lane's
1063 //               shift + mask hardware.
1064 //               Takes effect even if ADD_RAW is set (the CROSS_INPUT mux is
1065 //               before the shift+mask bypass)
1066 #define SIO_INTERP1_CTRL_LANE1_CROSS_INPUT_RESET  _u(0x0)
1067 #define SIO_INTERP1_CTRL_LANE1_CROSS_INPUT_BITS   _u(0x00010000)
1068 #define SIO_INTERP1_CTRL_LANE1_CROSS_INPUT_MSB    _u(16)
1069 #define SIO_INTERP1_CTRL_LANE1_CROSS_INPUT_LSB    _u(16)
1070 #define SIO_INTERP1_CTRL_LANE1_CROSS_INPUT_ACCESS "RW"
1071 // -----------------------------------------------------------------------------
1072 // Field       : SIO_INTERP1_CTRL_LANE1_SIGNED
1073 // Description : If SIGNED is set, the shifted and masked accumulator value is
1074 //               sign-extended to 32 bits
1075 //               before adding to BASE1, and LANE1 PEEK/POP appear extended to
1076 //               32 bits when read by processor.
1077 #define SIO_INTERP1_CTRL_LANE1_SIGNED_RESET  _u(0x0)
1078 #define SIO_INTERP1_CTRL_LANE1_SIGNED_BITS   _u(0x00008000)
1079 #define SIO_INTERP1_CTRL_LANE1_SIGNED_MSB    _u(15)
1080 #define SIO_INTERP1_CTRL_LANE1_SIGNED_LSB    _u(15)
1081 #define SIO_INTERP1_CTRL_LANE1_SIGNED_ACCESS "RW"
1082 // -----------------------------------------------------------------------------
1083 // Field       : SIO_INTERP1_CTRL_LANE1_MASK_MSB
1084 // Description : The most-significant bit allowed to pass by the mask
1085 //               (inclusive)
1086 //               Setting MSB < LSB may cause chip to turn inside-out
1087 #define SIO_INTERP1_CTRL_LANE1_MASK_MSB_RESET  _u(0x00)
1088 #define SIO_INTERP1_CTRL_LANE1_MASK_MSB_BITS   _u(0x00007c00)
1089 #define SIO_INTERP1_CTRL_LANE1_MASK_MSB_MSB    _u(14)
1090 #define SIO_INTERP1_CTRL_LANE1_MASK_MSB_LSB    _u(10)
1091 #define SIO_INTERP1_CTRL_LANE1_MASK_MSB_ACCESS "RW"
1092 // -----------------------------------------------------------------------------
1093 // Field       : SIO_INTERP1_CTRL_LANE1_MASK_LSB
1094 // Description : The least-significant bit allowed to pass by the mask
1095 //               (inclusive)
1096 #define SIO_INTERP1_CTRL_LANE1_MASK_LSB_RESET  _u(0x00)
1097 #define SIO_INTERP1_CTRL_LANE1_MASK_LSB_BITS   _u(0x000003e0)
1098 #define SIO_INTERP1_CTRL_LANE1_MASK_LSB_MSB    _u(9)
1099 #define SIO_INTERP1_CTRL_LANE1_MASK_LSB_LSB    _u(5)
1100 #define SIO_INTERP1_CTRL_LANE1_MASK_LSB_ACCESS "RW"
1101 // -----------------------------------------------------------------------------
1102 // Field       : SIO_INTERP1_CTRL_LANE1_SHIFT
1103 // Description : Logical right-shift applied to accumulator before masking
1104 #define SIO_INTERP1_CTRL_LANE1_SHIFT_RESET  _u(0x00)
1105 #define SIO_INTERP1_CTRL_LANE1_SHIFT_BITS   _u(0x0000001f)
1106 #define SIO_INTERP1_CTRL_LANE1_SHIFT_MSB    _u(4)
1107 #define SIO_INTERP1_CTRL_LANE1_SHIFT_LSB    _u(0)
1108 #define SIO_INTERP1_CTRL_LANE1_SHIFT_ACCESS "RW"
1109 // =============================================================================
1110 // Register    : SIO_INTERP1_ACCUM0_ADD
1111 // Description : Values written here are atomically added to ACCUM0
1112 //               Reading yields lane 0's raw shift and mask value (BASE0 not
1113 //               added).
1114 #define SIO_INTERP1_ACCUM0_ADD_OFFSET _u(0x000000f4)
1115 #define SIO_INTERP1_ACCUM0_ADD_BITS   _u(0x00ffffff)
1116 #define SIO_INTERP1_ACCUM0_ADD_RESET  _u(0x00000000)
1117 #define SIO_INTERP1_ACCUM0_ADD_MSB    _u(23)
1118 #define SIO_INTERP1_ACCUM0_ADD_LSB    _u(0)
1119 #define SIO_INTERP1_ACCUM0_ADD_ACCESS "RW"
1120 // =============================================================================
1121 // Register    : SIO_INTERP1_ACCUM1_ADD
1122 // Description : Values written here are atomically added to ACCUM1
1123 //               Reading yields lane 1's raw shift and mask value (BASE1 not
1124 //               added).
1125 #define SIO_INTERP1_ACCUM1_ADD_OFFSET _u(0x000000f8)
1126 #define SIO_INTERP1_ACCUM1_ADD_BITS   _u(0x00ffffff)
1127 #define SIO_INTERP1_ACCUM1_ADD_RESET  _u(0x00000000)
1128 #define SIO_INTERP1_ACCUM1_ADD_MSB    _u(23)
1129 #define SIO_INTERP1_ACCUM1_ADD_LSB    _u(0)
1130 #define SIO_INTERP1_ACCUM1_ADD_ACCESS "RW"
1131 // =============================================================================
1132 // Register    : SIO_INTERP1_BASE_1AND0
1133 // Description : On write, the lower 16 bits go to BASE0, upper bits to BASE1
1134 //               simultaneously.
1135 //               Each half is sign-extended to 32 bits if that lane's SIGNED
1136 //               flag is set.
1137 #define SIO_INTERP1_BASE_1AND0_OFFSET _u(0x000000fc)
1138 #define SIO_INTERP1_BASE_1AND0_BITS   _u(0xffffffff)
1139 #define SIO_INTERP1_BASE_1AND0_RESET  _u(0x00000000)
1140 #define SIO_INTERP1_BASE_1AND0_MSB    _u(31)
1141 #define SIO_INTERP1_BASE_1AND0_LSB    _u(0)
1142 #define SIO_INTERP1_BASE_1AND0_ACCESS "WO"
1143 // =============================================================================
1144 // Register    : SIO_SPINLOCK0
1145 // Description : Reading from a spinlock address will:
1146 //               - Return 0 if lock is already locked
1147 //               - Otherwise return nonzero, and simultaneously claim the lock
1148 //
1149 //               Writing (any value) releases the lock.
1150 //               If core 0 and core 1 attempt to claim the same lock
1151 //               simultaneously, core 0 wins.
1152 //               The value returned on success is 0x1 << lock number.
1153 #define SIO_SPINLOCK0_OFFSET _u(0x00000100)
1154 #define SIO_SPINLOCK0_BITS   _u(0xffffffff)
1155 #define SIO_SPINLOCK0_RESET  _u(0x00000000)
1156 #define SIO_SPINLOCK0_MSB    _u(31)
1157 #define SIO_SPINLOCK0_LSB    _u(0)
1158 #define SIO_SPINLOCK0_ACCESS "RW"
1159 // =============================================================================
1160 // Register    : SIO_SPINLOCK1
1161 // Description : Reading from a spinlock address will:
1162 //               - Return 0 if lock is already locked
1163 //               - Otherwise return nonzero, and simultaneously claim the lock
1164 //
1165 //               Writing (any value) releases the lock.
1166 //               If core 0 and core 1 attempt to claim the same lock
1167 //               simultaneously, core 0 wins.
1168 //               The value returned on success is 0x1 << lock number.
1169 #define SIO_SPINLOCK1_OFFSET _u(0x00000104)
1170 #define SIO_SPINLOCK1_BITS   _u(0xffffffff)
1171 #define SIO_SPINLOCK1_RESET  _u(0x00000000)
1172 #define SIO_SPINLOCK1_MSB    _u(31)
1173 #define SIO_SPINLOCK1_LSB    _u(0)
1174 #define SIO_SPINLOCK1_ACCESS "RW"
1175 // =============================================================================
1176 // Register    : SIO_SPINLOCK2
1177 // Description : Reading from a spinlock address will:
1178 //               - Return 0 if lock is already locked
1179 //               - Otherwise return nonzero, and simultaneously claim the lock
1180 //
1181 //               Writing (any value) releases the lock.
1182 //               If core 0 and core 1 attempt to claim the same lock
1183 //               simultaneously, core 0 wins.
1184 //               The value returned on success is 0x1 << lock number.
1185 #define SIO_SPINLOCK2_OFFSET _u(0x00000108)
1186 #define SIO_SPINLOCK2_BITS   _u(0xffffffff)
1187 #define SIO_SPINLOCK2_RESET  _u(0x00000000)
1188 #define SIO_SPINLOCK2_MSB    _u(31)
1189 #define SIO_SPINLOCK2_LSB    _u(0)
1190 #define SIO_SPINLOCK2_ACCESS "RW"
1191 // =============================================================================
1192 // Register    : SIO_SPINLOCK3
1193 // Description : Reading from a spinlock address will:
1194 //               - Return 0 if lock is already locked
1195 //               - Otherwise return nonzero, and simultaneously claim the lock
1196 //
1197 //               Writing (any value) releases the lock.
1198 //               If core 0 and core 1 attempt to claim the same lock
1199 //               simultaneously, core 0 wins.
1200 //               The value returned on success is 0x1 << lock number.
1201 #define SIO_SPINLOCK3_OFFSET _u(0x0000010c)
1202 #define SIO_SPINLOCK3_BITS   _u(0xffffffff)
1203 #define SIO_SPINLOCK3_RESET  _u(0x00000000)
1204 #define SIO_SPINLOCK3_MSB    _u(31)
1205 #define SIO_SPINLOCK3_LSB    _u(0)
1206 #define SIO_SPINLOCK3_ACCESS "RW"
1207 // =============================================================================
1208 // Register    : SIO_SPINLOCK4
1209 // Description : Reading from a spinlock address will:
1210 //               - Return 0 if lock is already locked
1211 //               - Otherwise return nonzero, and simultaneously claim the lock
1212 //
1213 //               Writing (any value) releases the lock.
1214 //               If core 0 and core 1 attempt to claim the same lock
1215 //               simultaneously, core 0 wins.
1216 //               The value returned on success is 0x1 << lock number.
1217 #define SIO_SPINLOCK4_OFFSET _u(0x00000110)
1218 #define SIO_SPINLOCK4_BITS   _u(0xffffffff)
1219 #define SIO_SPINLOCK4_RESET  _u(0x00000000)
1220 #define SIO_SPINLOCK4_MSB    _u(31)
1221 #define SIO_SPINLOCK4_LSB    _u(0)
1222 #define SIO_SPINLOCK4_ACCESS "RW"
1223 // =============================================================================
1224 // Register    : SIO_SPINLOCK5
1225 // Description : Reading from a spinlock address will:
1226 //               - Return 0 if lock is already locked
1227 //               - Otherwise return nonzero, and simultaneously claim the lock
1228 //
1229 //               Writing (any value) releases the lock.
1230 //               If core 0 and core 1 attempt to claim the same lock
1231 //               simultaneously, core 0 wins.
1232 //               The value returned on success is 0x1 << lock number.
1233 #define SIO_SPINLOCK5_OFFSET _u(0x00000114)
1234 #define SIO_SPINLOCK5_BITS   _u(0xffffffff)
1235 #define SIO_SPINLOCK5_RESET  _u(0x00000000)
1236 #define SIO_SPINLOCK5_MSB    _u(31)
1237 #define SIO_SPINLOCK5_LSB    _u(0)
1238 #define SIO_SPINLOCK5_ACCESS "RW"
1239 // =============================================================================
1240 // Register    : SIO_SPINLOCK6
1241 // Description : Reading from a spinlock address will:
1242 //               - Return 0 if lock is already locked
1243 //               - Otherwise return nonzero, and simultaneously claim the lock
1244 //
1245 //               Writing (any value) releases the lock.
1246 //               If core 0 and core 1 attempt to claim the same lock
1247 //               simultaneously, core 0 wins.
1248 //               The value returned on success is 0x1 << lock number.
1249 #define SIO_SPINLOCK6_OFFSET _u(0x00000118)
1250 #define SIO_SPINLOCK6_BITS   _u(0xffffffff)
1251 #define SIO_SPINLOCK6_RESET  _u(0x00000000)
1252 #define SIO_SPINLOCK6_MSB    _u(31)
1253 #define SIO_SPINLOCK6_LSB    _u(0)
1254 #define SIO_SPINLOCK6_ACCESS "RW"
1255 // =============================================================================
1256 // Register    : SIO_SPINLOCK7
1257 // Description : Reading from a spinlock address will:
1258 //               - Return 0 if lock is already locked
1259 //               - Otherwise return nonzero, and simultaneously claim the lock
1260 //
1261 //               Writing (any value) releases the lock.
1262 //               If core 0 and core 1 attempt to claim the same lock
1263 //               simultaneously, core 0 wins.
1264 //               The value returned on success is 0x1 << lock number.
1265 #define SIO_SPINLOCK7_OFFSET _u(0x0000011c)
1266 #define SIO_SPINLOCK7_BITS   _u(0xffffffff)
1267 #define SIO_SPINLOCK7_RESET  _u(0x00000000)
1268 #define SIO_SPINLOCK7_MSB    _u(31)
1269 #define SIO_SPINLOCK7_LSB    _u(0)
1270 #define SIO_SPINLOCK7_ACCESS "RW"
1271 // =============================================================================
1272 // Register    : SIO_SPINLOCK8
1273 // Description : Reading from a spinlock address will:
1274 //               - Return 0 if lock is already locked
1275 //               - Otherwise return nonzero, and simultaneously claim the lock
1276 //
1277 //               Writing (any value) releases the lock.
1278 //               If core 0 and core 1 attempt to claim the same lock
1279 //               simultaneously, core 0 wins.
1280 //               The value returned on success is 0x1 << lock number.
1281 #define SIO_SPINLOCK8_OFFSET _u(0x00000120)
1282 #define SIO_SPINLOCK8_BITS   _u(0xffffffff)
1283 #define SIO_SPINLOCK8_RESET  _u(0x00000000)
1284 #define SIO_SPINLOCK8_MSB    _u(31)
1285 #define SIO_SPINLOCK8_LSB    _u(0)
1286 #define SIO_SPINLOCK8_ACCESS "RW"
1287 // =============================================================================
1288 // Register    : SIO_SPINLOCK9
1289 // Description : Reading from a spinlock address will:
1290 //               - Return 0 if lock is already locked
1291 //               - Otherwise return nonzero, and simultaneously claim the lock
1292 //
1293 //               Writing (any value) releases the lock.
1294 //               If core 0 and core 1 attempt to claim the same lock
1295 //               simultaneously, core 0 wins.
1296 //               The value returned on success is 0x1 << lock number.
1297 #define SIO_SPINLOCK9_OFFSET _u(0x00000124)
1298 #define SIO_SPINLOCK9_BITS   _u(0xffffffff)
1299 #define SIO_SPINLOCK9_RESET  _u(0x00000000)
1300 #define SIO_SPINLOCK9_MSB    _u(31)
1301 #define SIO_SPINLOCK9_LSB    _u(0)
1302 #define SIO_SPINLOCK9_ACCESS "RW"
1303 // =============================================================================
1304 // Register    : SIO_SPINLOCK10
1305 // Description : Reading from a spinlock address will:
1306 //               - Return 0 if lock is already locked
1307 //               - Otherwise return nonzero, and simultaneously claim the lock
1308 //
1309 //               Writing (any value) releases the lock.
1310 //               If core 0 and core 1 attempt to claim the same lock
1311 //               simultaneously, core 0 wins.
1312 //               The value returned on success is 0x1 << lock number.
1313 #define SIO_SPINLOCK10_OFFSET _u(0x00000128)
1314 #define SIO_SPINLOCK10_BITS   _u(0xffffffff)
1315 #define SIO_SPINLOCK10_RESET  _u(0x00000000)
1316 #define SIO_SPINLOCK10_MSB    _u(31)
1317 #define SIO_SPINLOCK10_LSB    _u(0)
1318 #define SIO_SPINLOCK10_ACCESS "RW"
1319 // =============================================================================
1320 // Register    : SIO_SPINLOCK11
1321 // Description : Reading from a spinlock address will:
1322 //               - Return 0 if lock is already locked
1323 //               - Otherwise return nonzero, and simultaneously claim the lock
1324 //
1325 //               Writing (any value) releases the lock.
1326 //               If core 0 and core 1 attempt to claim the same lock
1327 //               simultaneously, core 0 wins.
1328 //               The value returned on success is 0x1 << lock number.
1329 #define SIO_SPINLOCK11_OFFSET _u(0x0000012c)
1330 #define SIO_SPINLOCK11_BITS   _u(0xffffffff)
1331 #define SIO_SPINLOCK11_RESET  _u(0x00000000)
1332 #define SIO_SPINLOCK11_MSB    _u(31)
1333 #define SIO_SPINLOCK11_LSB    _u(0)
1334 #define SIO_SPINLOCK11_ACCESS "RW"
1335 // =============================================================================
1336 // Register    : SIO_SPINLOCK12
1337 // Description : Reading from a spinlock address will:
1338 //               - Return 0 if lock is already locked
1339 //               - Otherwise return nonzero, and simultaneously claim the lock
1340 //
1341 //               Writing (any value) releases the lock.
1342 //               If core 0 and core 1 attempt to claim the same lock
1343 //               simultaneously, core 0 wins.
1344 //               The value returned on success is 0x1 << lock number.
1345 #define SIO_SPINLOCK12_OFFSET _u(0x00000130)
1346 #define SIO_SPINLOCK12_BITS   _u(0xffffffff)
1347 #define SIO_SPINLOCK12_RESET  _u(0x00000000)
1348 #define SIO_SPINLOCK12_MSB    _u(31)
1349 #define SIO_SPINLOCK12_LSB    _u(0)
1350 #define SIO_SPINLOCK12_ACCESS "RW"
1351 // =============================================================================
1352 // Register    : SIO_SPINLOCK13
1353 // Description : Reading from a spinlock address will:
1354 //               - Return 0 if lock is already locked
1355 //               - Otherwise return nonzero, and simultaneously claim the lock
1356 //
1357 //               Writing (any value) releases the lock.
1358 //               If core 0 and core 1 attempt to claim the same lock
1359 //               simultaneously, core 0 wins.
1360 //               The value returned on success is 0x1 << lock number.
1361 #define SIO_SPINLOCK13_OFFSET _u(0x00000134)
1362 #define SIO_SPINLOCK13_BITS   _u(0xffffffff)
1363 #define SIO_SPINLOCK13_RESET  _u(0x00000000)
1364 #define SIO_SPINLOCK13_MSB    _u(31)
1365 #define SIO_SPINLOCK13_LSB    _u(0)
1366 #define SIO_SPINLOCK13_ACCESS "RW"
1367 // =============================================================================
1368 // Register    : SIO_SPINLOCK14
1369 // Description : Reading from a spinlock address will:
1370 //               - Return 0 if lock is already locked
1371 //               - Otherwise return nonzero, and simultaneously claim the lock
1372 //
1373 //               Writing (any value) releases the lock.
1374 //               If core 0 and core 1 attempt to claim the same lock
1375 //               simultaneously, core 0 wins.
1376 //               The value returned on success is 0x1 << lock number.
1377 #define SIO_SPINLOCK14_OFFSET _u(0x00000138)
1378 #define SIO_SPINLOCK14_BITS   _u(0xffffffff)
1379 #define SIO_SPINLOCK14_RESET  _u(0x00000000)
1380 #define SIO_SPINLOCK14_MSB    _u(31)
1381 #define SIO_SPINLOCK14_LSB    _u(0)
1382 #define SIO_SPINLOCK14_ACCESS "RW"
1383 // =============================================================================
1384 // Register    : SIO_SPINLOCK15
1385 // Description : Reading from a spinlock address will:
1386 //               - Return 0 if lock is already locked
1387 //               - Otherwise return nonzero, and simultaneously claim the lock
1388 //
1389 //               Writing (any value) releases the lock.
1390 //               If core 0 and core 1 attempt to claim the same lock
1391 //               simultaneously, core 0 wins.
1392 //               The value returned on success is 0x1 << lock number.
1393 #define SIO_SPINLOCK15_OFFSET _u(0x0000013c)
1394 #define SIO_SPINLOCK15_BITS   _u(0xffffffff)
1395 #define SIO_SPINLOCK15_RESET  _u(0x00000000)
1396 #define SIO_SPINLOCK15_MSB    _u(31)
1397 #define SIO_SPINLOCK15_LSB    _u(0)
1398 #define SIO_SPINLOCK15_ACCESS "RW"
1399 // =============================================================================
1400 // Register    : SIO_SPINLOCK16
1401 // Description : Reading from a spinlock address will:
1402 //               - Return 0 if lock is already locked
1403 //               - Otherwise return nonzero, and simultaneously claim the lock
1404 //
1405 //               Writing (any value) releases the lock.
1406 //               If core 0 and core 1 attempt to claim the same lock
1407 //               simultaneously, core 0 wins.
1408 //               The value returned on success is 0x1 << lock number.
1409 #define SIO_SPINLOCK16_OFFSET _u(0x00000140)
1410 #define SIO_SPINLOCK16_BITS   _u(0xffffffff)
1411 #define SIO_SPINLOCK16_RESET  _u(0x00000000)
1412 #define SIO_SPINLOCK16_MSB    _u(31)
1413 #define SIO_SPINLOCK16_LSB    _u(0)
1414 #define SIO_SPINLOCK16_ACCESS "RW"
1415 // =============================================================================
1416 // Register    : SIO_SPINLOCK17
1417 // Description : Reading from a spinlock address will:
1418 //               - Return 0 if lock is already locked
1419 //               - Otherwise return nonzero, and simultaneously claim the lock
1420 //
1421 //               Writing (any value) releases the lock.
1422 //               If core 0 and core 1 attempt to claim the same lock
1423 //               simultaneously, core 0 wins.
1424 //               The value returned on success is 0x1 << lock number.
1425 #define SIO_SPINLOCK17_OFFSET _u(0x00000144)
1426 #define SIO_SPINLOCK17_BITS   _u(0xffffffff)
1427 #define SIO_SPINLOCK17_RESET  _u(0x00000000)
1428 #define SIO_SPINLOCK17_MSB    _u(31)
1429 #define SIO_SPINLOCK17_LSB    _u(0)
1430 #define SIO_SPINLOCK17_ACCESS "RW"
1431 // =============================================================================
1432 // Register    : SIO_SPINLOCK18
1433 // Description : Reading from a spinlock address will:
1434 //               - Return 0 if lock is already locked
1435 //               - Otherwise return nonzero, and simultaneously claim the lock
1436 //
1437 //               Writing (any value) releases the lock.
1438 //               If core 0 and core 1 attempt to claim the same lock
1439 //               simultaneously, core 0 wins.
1440 //               The value returned on success is 0x1 << lock number.
1441 #define SIO_SPINLOCK18_OFFSET _u(0x00000148)
1442 #define SIO_SPINLOCK18_BITS   _u(0xffffffff)
1443 #define SIO_SPINLOCK18_RESET  _u(0x00000000)
1444 #define SIO_SPINLOCK18_MSB    _u(31)
1445 #define SIO_SPINLOCK18_LSB    _u(0)
1446 #define SIO_SPINLOCK18_ACCESS "RW"
1447 // =============================================================================
1448 // Register    : SIO_SPINLOCK19
1449 // Description : Reading from a spinlock address will:
1450 //               - Return 0 if lock is already locked
1451 //               - Otherwise return nonzero, and simultaneously claim the lock
1452 //
1453 //               Writing (any value) releases the lock.
1454 //               If core 0 and core 1 attempt to claim the same lock
1455 //               simultaneously, core 0 wins.
1456 //               The value returned on success is 0x1 << lock number.
1457 #define SIO_SPINLOCK19_OFFSET _u(0x0000014c)
1458 #define SIO_SPINLOCK19_BITS   _u(0xffffffff)
1459 #define SIO_SPINLOCK19_RESET  _u(0x00000000)
1460 #define SIO_SPINLOCK19_MSB    _u(31)
1461 #define SIO_SPINLOCK19_LSB    _u(0)
1462 #define SIO_SPINLOCK19_ACCESS "RW"
1463 // =============================================================================
1464 // Register    : SIO_SPINLOCK20
1465 // Description : Reading from a spinlock address will:
1466 //               - Return 0 if lock is already locked
1467 //               - Otherwise return nonzero, and simultaneously claim the lock
1468 //
1469 //               Writing (any value) releases the lock.
1470 //               If core 0 and core 1 attempt to claim the same lock
1471 //               simultaneously, core 0 wins.
1472 //               The value returned on success is 0x1 << lock number.
1473 #define SIO_SPINLOCK20_OFFSET _u(0x00000150)
1474 #define SIO_SPINLOCK20_BITS   _u(0xffffffff)
1475 #define SIO_SPINLOCK20_RESET  _u(0x00000000)
1476 #define SIO_SPINLOCK20_MSB    _u(31)
1477 #define SIO_SPINLOCK20_LSB    _u(0)
1478 #define SIO_SPINLOCK20_ACCESS "RW"
1479 // =============================================================================
1480 // Register    : SIO_SPINLOCK21
1481 // Description : Reading from a spinlock address will:
1482 //               - Return 0 if lock is already locked
1483 //               - Otherwise return nonzero, and simultaneously claim the lock
1484 //
1485 //               Writing (any value) releases the lock.
1486 //               If core 0 and core 1 attempt to claim the same lock
1487 //               simultaneously, core 0 wins.
1488 //               The value returned on success is 0x1 << lock number.
1489 #define SIO_SPINLOCK21_OFFSET _u(0x00000154)
1490 #define SIO_SPINLOCK21_BITS   _u(0xffffffff)
1491 #define SIO_SPINLOCK21_RESET  _u(0x00000000)
1492 #define SIO_SPINLOCK21_MSB    _u(31)
1493 #define SIO_SPINLOCK21_LSB    _u(0)
1494 #define SIO_SPINLOCK21_ACCESS "RW"
1495 // =============================================================================
1496 // Register    : SIO_SPINLOCK22
1497 // Description : Reading from a spinlock address will:
1498 //               - Return 0 if lock is already locked
1499 //               - Otherwise return nonzero, and simultaneously claim the lock
1500 //
1501 //               Writing (any value) releases the lock.
1502 //               If core 0 and core 1 attempt to claim the same lock
1503 //               simultaneously, core 0 wins.
1504 //               The value returned on success is 0x1 << lock number.
1505 #define SIO_SPINLOCK22_OFFSET _u(0x00000158)
1506 #define SIO_SPINLOCK22_BITS   _u(0xffffffff)
1507 #define SIO_SPINLOCK22_RESET  _u(0x00000000)
1508 #define SIO_SPINLOCK22_MSB    _u(31)
1509 #define SIO_SPINLOCK22_LSB    _u(0)
1510 #define SIO_SPINLOCK22_ACCESS "RW"
1511 // =============================================================================
1512 // Register    : SIO_SPINLOCK23
1513 // Description : Reading from a spinlock address will:
1514 //               - Return 0 if lock is already locked
1515 //               - Otherwise return nonzero, and simultaneously claim the lock
1516 //
1517 //               Writing (any value) releases the lock.
1518 //               If core 0 and core 1 attempt to claim the same lock
1519 //               simultaneously, core 0 wins.
1520 //               The value returned on success is 0x1 << lock number.
1521 #define SIO_SPINLOCK23_OFFSET _u(0x0000015c)
1522 #define SIO_SPINLOCK23_BITS   _u(0xffffffff)
1523 #define SIO_SPINLOCK23_RESET  _u(0x00000000)
1524 #define SIO_SPINLOCK23_MSB    _u(31)
1525 #define SIO_SPINLOCK23_LSB    _u(0)
1526 #define SIO_SPINLOCK23_ACCESS "RW"
1527 // =============================================================================
1528 // Register    : SIO_SPINLOCK24
1529 // Description : Reading from a spinlock address will:
1530 //               - Return 0 if lock is already locked
1531 //               - Otherwise return nonzero, and simultaneously claim the lock
1532 //
1533 //               Writing (any value) releases the lock.
1534 //               If core 0 and core 1 attempt to claim the same lock
1535 //               simultaneously, core 0 wins.
1536 //               The value returned on success is 0x1 << lock number.
1537 #define SIO_SPINLOCK24_OFFSET _u(0x00000160)
1538 #define SIO_SPINLOCK24_BITS   _u(0xffffffff)
1539 #define SIO_SPINLOCK24_RESET  _u(0x00000000)
1540 #define SIO_SPINLOCK24_MSB    _u(31)
1541 #define SIO_SPINLOCK24_LSB    _u(0)
1542 #define SIO_SPINLOCK24_ACCESS "RW"
1543 // =============================================================================
1544 // Register    : SIO_SPINLOCK25
1545 // Description : Reading from a spinlock address will:
1546 //               - Return 0 if lock is already locked
1547 //               - Otherwise return nonzero, and simultaneously claim the lock
1548 //
1549 //               Writing (any value) releases the lock.
1550 //               If core 0 and core 1 attempt to claim the same lock
1551 //               simultaneously, core 0 wins.
1552 //               The value returned on success is 0x1 << lock number.
1553 #define SIO_SPINLOCK25_OFFSET _u(0x00000164)
1554 #define SIO_SPINLOCK25_BITS   _u(0xffffffff)
1555 #define SIO_SPINLOCK25_RESET  _u(0x00000000)
1556 #define SIO_SPINLOCK25_MSB    _u(31)
1557 #define SIO_SPINLOCK25_LSB    _u(0)
1558 #define SIO_SPINLOCK25_ACCESS "RW"
1559 // =============================================================================
1560 // Register    : SIO_SPINLOCK26
1561 // Description : Reading from a spinlock address will:
1562 //               - Return 0 if lock is already locked
1563 //               - Otherwise return nonzero, and simultaneously claim the lock
1564 //
1565 //               Writing (any value) releases the lock.
1566 //               If core 0 and core 1 attempt to claim the same lock
1567 //               simultaneously, core 0 wins.
1568 //               The value returned on success is 0x1 << lock number.
1569 #define SIO_SPINLOCK26_OFFSET _u(0x00000168)
1570 #define SIO_SPINLOCK26_BITS   _u(0xffffffff)
1571 #define SIO_SPINLOCK26_RESET  _u(0x00000000)
1572 #define SIO_SPINLOCK26_MSB    _u(31)
1573 #define SIO_SPINLOCK26_LSB    _u(0)
1574 #define SIO_SPINLOCK26_ACCESS "RW"
1575 // =============================================================================
1576 // Register    : SIO_SPINLOCK27
1577 // Description : Reading from a spinlock address will:
1578 //               - Return 0 if lock is already locked
1579 //               - Otherwise return nonzero, and simultaneously claim the lock
1580 //
1581 //               Writing (any value) releases the lock.
1582 //               If core 0 and core 1 attempt to claim the same lock
1583 //               simultaneously, core 0 wins.
1584 //               The value returned on success is 0x1 << lock number.
1585 #define SIO_SPINLOCK27_OFFSET _u(0x0000016c)
1586 #define SIO_SPINLOCK27_BITS   _u(0xffffffff)
1587 #define SIO_SPINLOCK27_RESET  _u(0x00000000)
1588 #define SIO_SPINLOCK27_MSB    _u(31)
1589 #define SIO_SPINLOCK27_LSB    _u(0)
1590 #define SIO_SPINLOCK27_ACCESS "RW"
1591 // =============================================================================
1592 // Register    : SIO_SPINLOCK28
1593 // Description : Reading from a spinlock address will:
1594 //               - Return 0 if lock is already locked
1595 //               - Otherwise return nonzero, and simultaneously claim the lock
1596 //
1597 //               Writing (any value) releases the lock.
1598 //               If core 0 and core 1 attempt to claim the same lock
1599 //               simultaneously, core 0 wins.
1600 //               The value returned on success is 0x1 << lock number.
1601 #define SIO_SPINLOCK28_OFFSET _u(0x00000170)
1602 #define SIO_SPINLOCK28_BITS   _u(0xffffffff)
1603 #define SIO_SPINLOCK28_RESET  _u(0x00000000)
1604 #define SIO_SPINLOCK28_MSB    _u(31)
1605 #define SIO_SPINLOCK28_LSB    _u(0)
1606 #define SIO_SPINLOCK28_ACCESS "RW"
1607 // =============================================================================
1608 // Register    : SIO_SPINLOCK29
1609 // Description : Reading from a spinlock address will:
1610 //               - Return 0 if lock is already locked
1611 //               - Otherwise return nonzero, and simultaneously claim the lock
1612 //
1613 //               Writing (any value) releases the lock.
1614 //               If core 0 and core 1 attempt to claim the same lock
1615 //               simultaneously, core 0 wins.
1616 //               The value returned on success is 0x1 << lock number.
1617 #define SIO_SPINLOCK29_OFFSET _u(0x00000174)
1618 #define SIO_SPINLOCK29_BITS   _u(0xffffffff)
1619 #define SIO_SPINLOCK29_RESET  _u(0x00000000)
1620 #define SIO_SPINLOCK29_MSB    _u(31)
1621 #define SIO_SPINLOCK29_LSB    _u(0)
1622 #define SIO_SPINLOCK29_ACCESS "RW"
1623 // =============================================================================
1624 // Register    : SIO_SPINLOCK30
1625 // Description : Reading from a spinlock address will:
1626 //               - Return 0 if lock is already locked
1627 //               - Otherwise return nonzero, and simultaneously claim the lock
1628 //
1629 //               Writing (any value) releases the lock.
1630 //               If core 0 and core 1 attempt to claim the same lock
1631 //               simultaneously, core 0 wins.
1632 //               The value returned on success is 0x1 << lock number.
1633 #define SIO_SPINLOCK30_OFFSET _u(0x00000178)
1634 #define SIO_SPINLOCK30_BITS   _u(0xffffffff)
1635 #define SIO_SPINLOCK30_RESET  _u(0x00000000)
1636 #define SIO_SPINLOCK30_MSB    _u(31)
1637 #define SIO_SPINLOCK30_LSB    _u(0)
1638 #define SIO_SPINLOCK30_ACCESS "RW"
1639 // =============================================================================
1640 // Register    : SIO_SPINLOCK31
1641 // Description : Reading from a spinlock address will:
1642 //               - Return 0 if lock is already locked
1643 //               - Otherwise return nonzero, and simultaneously claim the lock
1644 //
1645 //               Writing (any value) releases the lock.
1646 //               If core 0 and core 1 attempt to claim the same lock
1647 //               simultaneously, core 0 wins.
1648 //               The value returned on success is 0x1 << lock number.
1649 #define SIO_SPINLOCK31_OFFSET _u(0x0000017c)
1650 #define SIO_SPINLOCK31_BITS   _u(0xffffffff)
1651 #define SIO_SPINLOCK31_RESET  _u(0x00000000)
1652 #define SIO_SPINLOCK31_MSB    _u(31)
1653 #define SIO_SPINLOCK31_LSB    _u(0)
1654 #define SIO_SPINLOCK31_ACCESS "RW"
1655 // =============================================================================
1656 #endif // HARDWARE_REGS_SIO_DEFINED
1657