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