1 /* $NetBSD: dc21285reg.h,v 1.5 2007/12/14 11:08:03 chris Exp $ */ 2 3 /* 4 * Copyright (c) 1997,1998 Mark Brinicombe. 5 * Copyright (c) 1997,1998 Causality Limited 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 3. All advertising materials mentioning features or use of this software 17 * must display the following acknowledgement: 18 * This product includes software developed by Mark Brinicombe 19 * for the NetBSD Project. 20 * 4. The name of the company nor the name of the author may be used to 21 * endorse or promote products derived from this software without specific 22 * prior written permission. 23 * 24 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 25 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 26 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 27 * IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 28 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 29 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 34 * SUCH DAMAGE. 35 */ 36 37 /* 38 * DC21285 register definitions 39 */ 40 41 /* PCI registers in CSR space */ 42 43 #define VENDOR_ID 0x00 44 #define DC21285_VENDOR_ID 0x1011 45 #define DEVICE_ID 0x02 46 #define DC21285_DEVICE_ID 0x1065 47 #define REVISION 0x08 48 #define CLASS 0x0A 49 #define CSR_BASE_MEMORY_ADDR 0x10 50 #define CSR_BASE_IO_ADDR 0x14 51 #define SDRAM_MEMORY_ADDR 0x18 52 53 /* Other PCI control / status registers */ 54 55 #define OUTBOUND_INT_STATUS 0x030 56 #define OUTBOUND_INT_MASK 0x034 57 #define I2O_INBOUND_FIFO 0x040 58 #define I2O_OUTBOUND_FIFO 0x044 59 60 /* Mailbox registers */ 61 62 #define MAILBOX_0 0x050 63 #define MAILBOX_1 0x054 64 #define MAILBOX_2 0x058 65 #define MAILBOX_3 0x05C 66 67 #define DOORBELL 0x060 68 #define DOORBELL_SETUP 0x064 69 #define ROM_WRITE_BYTE_ADDRESS 0x068 70 71 /* DMA Channel registers */ 72 73 #define DMA_CHAN_1_BYTE_COUNT 0x80 74 #define DMA_CHAN_1_PCI_ADDR 0x84 75 #define DMA_CHAN_1_SDRAM_ADDR 0x88 76 #define DMA_CHAN_1_DESCRIPT 0x8C 77 #define DMA_CHAN_1_CONTROL 0x90 78 #define DMA_CHAN_2_BYTE_COUNT 0xA0 79 #define DMA_CHAN_2_PCI_ADDR 0xA4 80 #define DMA_CHAN_2_SDRAM_ADDR 0xA8 81 #define DMA_CHAN_2_DESCRIPTOR 0xAC 82 #define DMA_CHAN_2_CONTROL 0xB0 83 84 /* Offsets into DMA descriptor */ 85 86 #define DMA_BYTE_COUNT 0 87 #define DMA_PCI_ADDRESS 4 88 #define DMA_SDRAM_ADDRESS 8 89 #define DMA_NEXT_DESCRIPTOR 12 90 91 /* DMA byte count register bits */ 92 93 #define DMA_INTERBURST_SHIFT 24 94 #define DMA_PCI_TO_SDRAM 0 95 #define DMA_SDRAM_TO_PCI (1 << 30) 96 #define DMA_END_CHAIN (1 << 31) 97 98 /* DMA control bits */ 99 100 #define DMA_ENABLE (1 << 0) 101 #define DMA_TRANSFER_DONE (1 << 2) 102 #define DMA_ERROR (1 << 3) 103 #define DMA_REGISTOR_DESCRIPTOR (1 << 4) 104 #define DMA_PCI_MEM_READ (0 << 5) 105 #define DMA_PCI_MEM_READ_LINE (1 << 5) 106 #define DMA_PCI_MEM_READ_MULTI1 (2 << 5) 107 #define DMA_PCI_MEM_READ_MULTI2 (3 << 5) 108 #define DMA_CHAIN_DONE (1 << 7) 109 #define DMA_INTERBURST_4 (0 << 8) 110 #define DMA_INTERBURST_8 (1 << 8) 111 #define DMA_INTERBURST_16 (2 << 8) 112 #define DMA_INTERBURST_32 (3 << 8) 113 #define DMA_PCI_LENGTH_8 0 114 #define DMA_PCI_LENGTH_16 (1 << 15) 115 #define DMA_SDRAM_LENGTH_1 (0 << 16) 116 #define DMA_SDRAM_LENGTH_2 (1 << 16) 117 #define DMA_SDRAM_LENGTH_4 (2 << 16) 118 #define DMA_SDRAM_LENGTH_8 (3 << 16) 119 #define DMA_SDRAM_LENGTH_16 (4 << 16) 120 121 /* CSR Base Address Mask */ 122 123 #define CSR_BA_MASK 0x0F8 124 #define CSR_MASK_128B 0x00000000 125 #define CSR_MASK_512KB 0x00040000 126 #define CSR_MASK_1MB 0x000C0000 127 #define CSR_MASK_2MB 0x001C0000 128 #define CSR_MASK_4MB 0x003C0000 129 #define CSR_MASK_8MB 0x007C0000 130 #define CSR_MASK_16MB 0x00FC0000 131 #define CSR_MASK_32MB 0x01FC0000 132 #define CSR_MASK_64MB 0x03FC0000 133 #define CSR_MASK_128MB 0x07FC0000 134 #define CSR_MASK_256MB 0x0FFC0000 135 #define CSR_BA_OFFSET 0x0FC 136 137 /* SDRAM Base Address Mask */ 138 139 #define SDRAM_BA_MASK 0x100 140 #define SDRAM_MASK_256KB 0x00000000 141 #define SDRAM_MASK_512KB 0x00040000 142 #define SDRAM_MASK_1MB 0x000C0000 143 #define SDRAM_MASK_2MB 0x001C0000 144 #define SDRAM_MASK_4MB 0x003C0000 145 #define SDRAM_MASK_8MB 0x007C0000 146 #define SDRAM_MASK_16MB 0x00FC0000 147 #define SDRAM_MASK_32MB 0x01FC0000 148 #define SDRAM_MASK_64MB 0x03FC0000 149 #define SDRAM_MASK_128MB 0x07FC0000 150 #define SDRAM_MASK_256MB 0x0FFC0000 151 #define SDRAM_WINDOW_DISABLE (1 << 31) 152 #define SDRAM_BA_OFFSET 0x104 153 154 /* Expansion ROM Base Address Mask */ 155 156 #define EXPANSION_ROM_BA_MASK 0x108 157 #define ROM_MASK_1MB 0x00000000 158 #define ROM_MASK_2MB 0x00100000 159 #define ROM_MASK_4MB 0x00300000 160 #define ROM_MASK_8MB 0x00700000 161 #define ROM_MASK_16MB 0x00F00000 162 #define ROM_WINDOW_DISABLE (1 << 31) 163 164 /* SDRAM configuration */ 165 166 #define SDRAM_TIMING 0x10C 167 #define SDRAM_ARRAY_SIZE_0 0x0 168 #define SDRAM_ARRAY_SIZE_1MB 0x1 169 #define SDRAM_ARRAY_SIZE_2MB 0x2 170 #define SDRAM_ARRAY_SIZE_4MB 0x3 171 #define SDRAM_ARRAY_SIZE_8MB 0x4 172 #define SDRAM_ARRAY_SIZE_16MB 0x5 173 #define SDRAM_ARRAY_SIZE_32MB 0x6 174 #define SDRAM_ARRAY_SIZE_64MB 0x7 175 #define SDRAM_2_BANKS 0 176 #define SDRAM_4_BANKS (1 << 3) 177 #define SDRAM_ADDRESS_MUX_SHIFT 4 178 #define SDRAM_ARRAY_BASE_SHIFT 20 179 #define SDRAM_ADDRESS_SIZE_0 0x110 180 #define SDRAM_ADDRESS_SIZE_1 0x114 181 #define SDRAM_ADDRESS_SIZE_2 0x118 182 #define SDRAM_ADDRESS_SIZE_3 0x11C 183 184 /* I2O registers */ 185 186 #define I2O_INBOUND_FREE_HEAD 0x120 187 #define I2O_INBOUND_POST_TAIL 0x124 188 #define I2O_OUTBOUND_POST_HEAD 0x128 189 #define I2O_OUTBOUND_FREE_TAIL 0x12c 190 #define I2O_INBOUND_FREE_COUNT 0x130 191 #define I2O_OUTBOUND_POST_COUNT 0x134 192 #define I2O_INBOUND_POST_COUNT 0x138 193 194 /* Control register */ 195 196 #define SA_CONTROL 0x13C 197 #define INITIALIZE_COMPLETE (1 << 0) 198 #define ASSERT_SERR (1 << 1) 199 #define RECEIVED_SERR (1 << 3) 200 #define SA_SDRAM_PARITY_ERROR (1 << 4) 201 #define PCI_SDRAM_PARITY_ERROR (1 << 5) 202 #define DMA_SDRAM_PARITY_ERROR (1 << 6) 203 #define DISCARD_TIMER_EXPIRED (1 << 8) 204 #define PCI_NOT_RESET (1 << 9) 205 #define WATCHDOG_ENABLE (1 << 13) 206 #define I2O_SIZE_256 (0 << 10) 207 #define I2O_SIZE_512 (1 << 10) 208 #define I2O_SIZE_1024 (2 << 10) 209 #define I2O_SIZE_2048 (3 << 10) 210 #define I2O_SIZE_4096 (4 << 10) 211 #define I2O_SIZE_8192 (5 << 10) 212 #define I2O_SIZE_16384 (6 << 10) 213 #define I2O_SIZE_32768 (7 << 10) 214 #define ROM_WIDTH_8 (3 << 14) 215 #define ROM_WIDTH_16 (1 << 14) 216 #define ROM_WIDTH_32 (2 << 14) 217 #define ROM_ACCESS_TIME_SHIFT 16 218 #define ROM_BURST_TIME_SHIFT 20 219 #define ROM_TRISTATE_TIME_SHIFT 24 220 #define XCS_DIRECTION_SHIFT 28 221 #define PCI_CENTRAL_FUNCTION (1 << 31) 222 223 #define PCI_ADDRESS_EXTENSION 0x140 224 #define PREFETCHABLE_MEM_RANGE 0x144 225 226 /* XBUS / PCI Arbiter registers */ 227 228 #define XBUS_CYCLE_ARBITER 0x148 229 #define XBUS_CYCLE_0_SHIFT 0 230 #define XBUS_CYCLE_1_SHIFT 3 231 #define XBUS_CYCLE_2_SHIFT 6 232 #define XBUS_CYCLE_3_SHIFT 9 233 #define XBUS_CYCLE_STROBE_SHIFT 12 234 #define XBUS_PCI_ARBITER (1 << 23) 235 #define XBUS_INT_IN_L0_LOW 0 236 #define XBUS_INT_IN_L0_HIGH (1 << 24) 237 #define XBUS_INT_IN_L1_LOW 0 238 #define XBUS_INT_IN_L1_HIGH (1 << 25) 239 #define XBUS_INT_IN_L2_LOW 0 240 #define XBUS_INT_IN_L2_HIGH (1 << 26) 241 #define XBUS_INT_IN_L3_LOW 0 242 #define XBUS_INT_IN_L3_HIGH (1 << 27) 243 #define XBUS_INT_XCS0_LOW 0 244 #define XBUS_INT_XCS0_HIGH (1 << 28) 245 #define XBUS_INT_XCS1_LOW 0 246 #define XBUS_INT_XCS1_HIGH (1 << 29) 247 #define XBUS_INT_XCS2_LOW 0 248 #define XBUS_INT_XCS2_HIGH (1 << 30) 249 #define XBUS_PCI_INT_REQUEST (1 << 31) 250 251 #define XBUS_IO_STROBE_MASK 0x14C 252 #define XBUS_IO_STROBE_0_SHIFT 0 253 #define XBUS_IO_STROBE_2_SHIFT 8 254 #define XBUS_IO_STROBE_3_SHIFT 16 255 #define XBUS_IO_STROBE_4_SHIFT 24 256 257 #define DOORBELL_PCI_MASK 0x150 258 #define DOORBELL_SA_MASK 0x154 259 260 /* UART registers */ 261 262 #define UART_DATA 0x160 263 #define UART_RX_STAT 0x164 264 #define UART_PARITY_ERROR 0x01 265 #define UART_FRAME_ERROR 0x02 266 #define UART_OVERRUN_ERROR 0x04 267 #define UART_RX_ERROR (UART_PARITY_ERROR | UART_FRAME_ERROR \ 268 | UART_OVERRUN_ERROR) 269 #define UART_H_UBRLCR 0x168 270 #define UART_BREAK 0x01 271 #define UART_PARITY_ENABLE 0x02 272 #define UART_ODD_PARITY 0x00 273 #define UART_EVEN_PARITY 0x04 274 #define UART_STOP_BITS_1 0x00 275 #define UART_STOP_BITS_2 0x08 276 #define UART_ENABLE_FIFO 0x10 277 #define UART_DATA_BITS_5 0x00 278 #define UART_DATA_BITS_6 0x20 279 #define UART_DATA_BITS_7 0x40 280 #define UART_DATA_BITS_8 0x60 281 #define UART_M_UBRLCR 0x16C 282 #define UART_L_UBRLCR 0x170 283 #define UART_BRD(fclk, x) (((fclk) / 4 / 16 / x) - 1) 284 285 #define UART_CONTROL 0x174 286 #define UART_ENABLE 0x01 287 #define UART_SIR_ENABLE 0x02 288 #define UART_IRDA_ENABLE 0x04 289 #define UART_FLAGS 0x178 290 #define UART_TX_BUSY 0x08 291 #define UART_RX_FULL 0x10 292 #define UART_TX_EMPTY 0x20 293 294 /* Interrupt numbers for IRQ and FIQ registers */ 295 296 #define IRQ_RESERVED0 0x00 297 #define IRQ_SOFTINT 0x01 298 #define IRQ_SERIAL_RX 0x02 299 #define IRQ_SERIAL_TX 0x03 300 #define IRQ_TIMER_1 0x04 301 #define IRQ_TIMER_2 0x05 302 #define IRQ_TIMER_3 0x06 303 #define IRQ_TIMER_4 0x07 304 #define IRQ_IN_L0 0x08 305 #define IRQ_IN_L1 0x09 306 #define IRQ_IN_L2 0x0A 307 #define IRQ_IN_L3 0x0B 308 #define IRQ_XCS_L0 0x0C 309 #define IRQ_XCS_L1 0x0D 310 #define IRQ_XCS_L2 0x0E 311 #define IRQ_DOORBELL 0x0F 312 #define IRQ_DMA_1 0x10 313 #define IRQ_DMA_2 0x11 314 #define IRQ_PCI 0x12 315 #define IRQ_PMCSR 0x13 316 #define IRQ_RESERVED1 0x14 317 #define IRQ_RESERVED2 0x15 318 #define IRQ_BIST 0x16 319 #define IRQ_SERR 0x17 320 #define IRQ_SDRAM_PARITY 0x18 321 #define IRQ_I2O 0x19 322 #define IRQ_RESERVED3 0x1A 323 #define IRQ_DISCARD_TIMER 0x1B 324 #define IRQ_DATA_PARITY 0x1C 325 #define IRQ_MASTER_ABORT 0x1D 326 #define IRQ_TARGET_ABORT 0x1E 327 #define IRQ_PARITY 0x1F 328 329 /* IRQ and FIQ status / enable registers */ 330 331 #define IRQ_STATUS 0x180 332 #define IRQ_RAW_STATUS 0x184 333 #define IRQ_ENABLE 0x188 334 #define IRQ_ENABLE_SET 0x188 335 #define IRQ_ENABLE_CLEAR 0x18c 336 #define IRQ_SOFT 0x190 337 338 #define FIQ_STATUS 0x280 339 #define FIQ_RAW_STATUS 0x284 340 #define FIQ_ENABLE 0x288 341 #define FIQ_ENABLE_SET 0x288 342 #define FIQ_ENABLE_CLEAR 0x28c 343 #define FIQ_SOFT 0x290 344 345 /* Timer registers */ 346 347 /* Relative offsets and bases */ 348 349 #define TIMER_LOAD 0x00 350 #define TIMER_VALUE 0x04 351 #define TIMER_CONTROL 0x08 352 #define TIMER_CLEAR 0x0C 353 #define TIMER_1_BASE 0x300 354 #define TIMER_2_BASE 0x320 355 #define TIMER_3_BASE 0x340 356 #define TIMER_4_BASE 0x360 357 358 /* Control register bits */ 359 360 #define TIMER_FCLK 0x00 361 #define TIMER_FCLK_16 0x04 362 #define TIMER_FCLK_256 0x08 363 #define TIMER_EXTERNAL 0x0C 364 #define TIMER_MODE_FREERUN 0x00 365 #define TIMER_MODE_PERIODIC 0x40 366 #define TIMER_ENABLE 0x80 367 368 /* Maximum timer value */ 369 370 #define TIMER_MAX_VAL 0x00FFFFFF 371 372 /* Specific registers */ 373 374 #define TIMER_1_LOAD 0x300 375 #define TIMER_1_VALUE 0x304 376 #define TIMER_1_CONTROL 0x308 377 #define TIMER_1_CLEAR 0x30C 378 #define TIMER_2_LOAD 0x320 379 #define TIMER_2_VALUE 0x324 380 #define TIMER_2_CONTROL 0x328 381 #define TIMER_2_CLEAR 0x32C 382 #define TIMER_3_LOAD 0x340 383 #define TIMER_3_VALUE 0x344 384 #define TIMER_3_CONTROL 0x348 385 #define TIMER_3_CLEAR 0x34C 386 #define TIMER_4_LOAD 0x360 387 #define TIMER_4_VALUE 0x364 388 #define TIMER_4_CONTROL 0x368 389 #define TIMER_4_CLEAR 0x36C 390 391 /* Miscellaneous definitions */ 392 393 #ifndef FCLK 394 #define FCLK 50000000 395 #endif 396