summaryrefslogtreecommitdiff
path: root/sys/arch/arm/footbridge/dc21285reg.h
blob: e1a690ccc1ead3f6ad9d332672d1c94ccfb4d06e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
/*	$OpenBSD: dc21285reg.h,v 1.1 2004/02/01 05:09:49 drahn Exp $	*/
/*	$NetBSD: dc21285reg.h,v 1.3 2002/11/03 21:43:30 chris Exp $	*/

/*
 * Copyright (c) 1997,1998 Mark Brinicombe.
 * Copyright (c) 1997,1998 Causality Limited
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *	This product includes software developed by Mark Brinicombe
 *	for the NetBSD Project.
 * 4. The name of the company nor the name of the author may be used to
 *    endorse or promote products derived from this software without specific
 *    prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 */

/*
 * DC21285 register definitions
 */

/* PCI registers in CSR space */

#define VENDOR_ID		0x00
#define DC21285_VENDOR_ID	0x1011
#define DEVICE_ID		0x02
#define DC21285_DEVICE_ID	0x1065
#define REVISION		0x08
#define CLASS			0x0A

/* Other PCI control / status registers */

#define	OUTBOUND_INT_STATUS	0x030
#define	OUTBOUND_INT_MASK	0x034
#define	I2O_INBOUND_FIFO	0x040
#define I2O_OUTBOUND_FIFO	0x044

/* Mailbox registers */

#define	MAILBOX_0		0x050
#define	MAILBOX_1		0x054
#define	MAILBOX_2		0x058
#define	MAILBOX_3		0x05C

#define	DOORBELL		0x060
#define	DOORBELL_SETUP		0x064
#define	ROM_WRITE_BYTE_ADDRESS	0x068

/* DMA Channel registers */

#define	DMA_CHAN_1_BYTE_COUNT	0x80
#define	DMA_CHAN_1_PCI_ADDR	0x84
#define	DMA_CHAN_1_SDRAM_ADDR	0x88
#define	DMA_CHAN_1_DESCRIPT	0x8C
#define	DMA_CHAN_1_CONTROL	0x90
#define	DMA_CHAN_2_BYTE_COUNT	0xA0
#define	DMA_CHAN_2_PCI_ADDR	0xA4
#define	DMA_CHAN_2_SDRAM_ADDR	0xA8
#define	DMA_CHAN_2_DESCRIPTOR	0xAC
#define	DMA_CHAN_2_CONTROL	0xB0

/* Offsets into DMA descriptor */

#define	DMA_BYTE_COUNT		0
#define	DMA_PCI_ADDRESS		4
#define	DMA_SDRAM_ADDRESS	8
#define	DMA_NEXT_DESCRIPTOR	12

/* DMA byte count register bits */

#define	DMA_INTERBURST_SHIFT	24
#define	DMA_PCI_TO_SDRAM	0
#define	DMA_SDRAM_TO_PCI	(1 << 30)
#define	DMA_END_CHAIN		(1 << 31)

/* DMA control bits */

#define	DMA_ENABLE		(1 << 0)
#define	DMA_TRANSFER_DONE	(1 << 2)
#define	DMA_ERROR		(1 << 3)
#define	DMA_REGISTOR_DESCRIPTOR	(1 << 4)
#define	DMA_PCI_MEM_READ	(0 << 5)
#define	DMA_PCI_MEM_READ_LINE	(1 << 5)
#define	DMA_PCI_MEM_READ_MULTI1	(2 << 5)
#define	DMA_PCI_MEM_READ_MULTI2	(3 << 5)
#define	DMA_CHAIN_DONE		(1 << 7)
#define	DMA_INTERBURST_4	(0 << 8)
#define	DMA_INTERBURST_8	(1 << 8)
#define	DMA_INTERBURST_16	(2 << 8)
#define	DMA_INTERBURST_32	(3 << 8)
#define	DMA_PCI_LENGTH_8	0
#define	DMA_PCI_LENGTH_16	(1 << 15)
#define	DMA_SDRAM_LENGTH_1	(0 << 16)
#define	DMA_SDRAM_LENGTH_2	(1 << 16)
#define	DMA_SDRAM_LENGTH_4	(2 << 16)
#define	DMA_SDRAM_LENGTH_8	(3 << 16)
#define	DMA_SDRAM_LENGTH_16	(4 << 16)

/* CSR Base Address Mask */

#define	CSR_BA_MASK		0x0F8
#define	CSR_MASK_128B		0x00000000
#define	CSR_MASK_512KB		0x00040000
#define	CSR_MASK_1MB		0x000C0000
#define	CSR_MASK_2MB		0x001C0000
#define	CSR_MASK_4MB		0x003C0000
#define	CSR_MASK_8MB		0x007C0000
#define	CSR_MASK_16MB		0x00FC0000
#define	CSR_MASK_32MB		0x01FC0000
#define	CSR_MASK_64MB		0x03FC0000
#define	CSR_MASK_128MB		0x07FC0000
#define	CSR_MASK_256MB		0x0FFC0000
#define	CSR_BA_OFFSET		0x0FC

/* SDRAM Base Address Mask */

#define	SDRAM_BA_MASK		0x100
#define	SDRAM_MASK_256KB	0x00000000
#define	SDRAM_MASK_512KB	0x00040000
#define	SDRAM_MASK_1MB		0x000C0000
#define	SDRAM_MASK_2MB		0x001C0000
#define	SDRAM_MASK_4MB		0x003C0000
#define	SDRAM_MASK_8MB		0x007C0000
#define	SDRAM_MASK_16MB		0x00FC0000
#define	SDRAM_MASK_32MB		0x01FC0000
#define	SDRAM_MASK_64MB		0x03FC0000
#define	SDRAM_MASK_128MB	0x07FC0000
#define	SDRAM_MASK_256MB	0x0FFC0000
#define	SDRAM_WINDOW_DISABLE	(1 << 31)
#define	SDRAM_BA_OFFSET		0x104

/* Expansion ROM Base Address Mask */

#define EXPANSION_ROM_BA_MASK	0x108
#define	ROM_MASK_1MB		0x00000000
#define	ROM_MASK_2MB		0x00100000
#define	ROM_MASK_4MB		0x00300000
#define	ROM_MASK_8MB		0x00700000
#define	ROM_MASK_16MB		0x00F00000
#define	ROM_WINDOW_DISABLE	(1 << 31)

/* SDRAM configuration */

#define	SDRAM_TIMING		0x10C
#define SDRAM_ARRAY_SIZE_0	0x0
#define	SDRAM_ARRAY_SIZE_1MB	0x1
#define	SDRAM_ARRAY_SIZE_2MB	0x2
#define	SDRAM_ARRAY_SIZE_4MB	0x3
#define	SDRAM_ARRAY_SIZE_8MB	0x4
#define	SDRAM_ARRAY_SIZE_16MB	0x5
#define	SDRAM_ARRAY_SIZE_32MB	0x6
#define	SDRAM_ARRAY_SIZE_64MB	0x7
#define	SDRAM_2_BANKS		0
#define	SDRAM_4_BANKS		(1 << 3)
#define	SDRAM_ADDRESS_MUX_SHIFT	4
#define	SDRAM_ARRAY_BASE_SHIFT	20
#define	SDRAM_ADDRESS_SIZE_0	0x110
#define	SDRAM_ADDRESS_SIZE_1	0x114
#define	SDRAM_ADDRESS_SIZE_2	0x118
#define	SDRAM_ADDRESS_SIZE_3	0x11C

/* I2O registers */

#define	I2O_INBOUND_FREE_HEAD	0x120
#define	I2O_INBOUND_POST_TAIL	0x124
#define	I2O_OUTBOUND_POST_HEAD	0x128
#define I2O_OUTBOUND_FREE_TAIL	0x12c
#define	I2O_INBOUND_FREE_COUNT	0x130
#define	I2O_OUTBOUND_POST_COUNT	0x134
#define	I2O_INBOUND_POST_COUNT	0x138

/* Control register */

#define	SA_CONTROL		0x13C
#define	INITIALIZE_COMPLETE	(1 << 0)
#define	ASSERT_SERR		(1 << 1)
#define	RECEIVED_SERR		(1 << 3)
#define	SA_SDRAM_PARITY_ERROR	(1 << 4)
#define	PCI_SDRAM_PARITY_ERROR	(1 << 5)
#define	DMA_SDRAM_PARITY_ERROR	(1 << 6)
#define	DISCARD_TIMER_EXPIRED	(1 << 8)
#define	PCI_NOT_RESET		(1 << 9)
#define	WATCHDOG_ENABLE		(1 << 13)
#define	I2O_SIZE_256		(0 << 10)
#define	I2O_SIZE_512		(1 << 10)
#define	I2O_SIZE_1024		(2 << 10)
#define	I2O_SIZE_2048		(3 << 10)
#define	I2O_SIZE_4096		(4 << 10)
#define	I2O_SIZE_8192		(5 << 10)
#define	I2O_SIZE_16384		(6 << 10)
#define	I2O_SIZE_32768		(7 << 10)
#define	ROM_WIDTH_8		(3 << 14)
#define	ROM_WIDTH_16		(1 << 14)
#define	ROM_WIDTH_32		(2 << 14)
#define	ROM_ACCESS_TIME_SHIFT	16
#define	ROM_BURST_TIME_SHIFT	20
#define	ROM_TRISTATE_TIME_SHIFT	24
#define	XCS_DIRECTION_SHIFT	28
#define	PCI_CENTRAL_FUNCTION	(1 << 31)

#define	PCI_ADDRESS_EXTENSION	0x140
#define	PREFETCHABLE_MEM_RANGE	0x144

/* XBUS / PCI Arbiter registers */

#define	XBUS_CYCLE_ARBITER	0x148
#define	XBUS_CYCLE_0_SHIFT	0
#define	XBUS_CYCLE_1_SHIFT	3
#define	XBUS_CYCLE_2_SHIFT	6
#define	XBUS_CYCLE_3_SHIFT	9
#define	XBUS_CYCLE_STROBE_SHIFT	12
#define	XBUS_PCI_ARBITER	(1 << 23)
#define	XBUS_INT_IN_L0_LOW	0
#define	XBUS_INT_IN_L0_HIGH	(1 << 24)
#define	XBUS_INT_IN_L1_LOW	0
#define	XBUS_INT_IN_L1_HIGH	(1 << 25)
#define	XBUS_INT_IN_L2_LOW	0
#define	XBUS_INT_IN_L2_HIGH	(1 << 26)
#define	XBUS_INT_IN_L3_LOW	0
#define	XBUS_INT_IN_L3_HIGH	(1 << 27)
#define	XBUS_INT_XCS0_LOW	0
#define	XBUS_INT_XCS0_HIGH	(1 << 28)
#define	XBUS_INT_XCS1_LOW	0
#define	XBUS_INT_XCS1_HIGH	(1 << 29)
#define	XBUS_INT_XCS2_LOW	0
#define	XBUS_INT_XCS2_HIGH	(1 << 30)
#define	XBUS_PCI_INT_REQUEST	(1 << 31)

#define	XBUS_IO_STROBE_MASK	0x14C
#define	XBUS_IO_STROBE_0_SHIFT	0
#define	XBUS_IO_STROBE_2_SHIFT	8
#define	XBUS_IO_STROBE_3_SHIFT	16
#define	XBUS_IO_STROBE_4_SHIFT	24

#define	DOORBELL_PCI_MASK	0x150
#define	DOORBELL_SA_MASK	0x154

/* UART registers */

#define	UART_DATA		0x160
#define	UART_RX_STAT		0x164
#define	UART_PARITY_ERROR	0x01
#define	UART_FRAME_ERROR	0x02
#define	UART_OVERRUN_ERROR	0x04
#define	UART_RX_ERROR		(UART_PARITY_ERROR | UART_FRAME_ERROR \
				| UART_OVERRUN_ERROR)
#define	UART_H_UBRLCR		0x168
#define	UART_BREAK		0x01
#define	UART_PARITY_ENABLE	0x02
#define	UART_ODD_PARITY		0x00
#define	UART_EVEN_PARITY	0x04
#define	UART_STOP_BITS_1	0x00
#define	UART_STOP_BITS_2	0x08
#define	UART_ENABLE_FIFO	0x10
#define	UART_DATA_BITS_5	0x00
#define	UART_DATA_BITS_6	0x20
#define	UART_DATA_BITS_7	0x40
#define	UART_DATA_BITS_8	0x60
#define	UART_M_UBRLCR		0x16C
#define	UART_L_UBRLCR		0x170
#define UART_BRD(fclk, x)	(((fclk) / 4 / 16 / x) - 1)

#define	UART_CONTROL		0x174
#define	UART_ENABLE		0x01
#define	UART_SIR_ENABLE		0x02
#define	UART_IRDA_ENABLE	0x04
#define	UART_FLAGS		0x178
#define	UART_TX_BUSY		0x08
#define	UART_RX_FULL		0x10
#define	UART_TX_EMPTY		0x20

/* Interrupt numbers for IRQ and FIQ registers */

#define	IRQ_RESERVED0		0x00
#define	IRQ_SOFTINT		0x01
#define	IRQ_SERIAL_RX		0x02
#define	IRQ_SERIAL_TX		0x03
#define	IRQ_TIMER_1		0x04
#define	IRQ_TIMER_2		0x05
#define	IRQ_TIMER_3		0x06
#define	IRQ_TIMER_4		0x07
#define	IRQ_IN_L0		0x08
#define	IRQ_IN_L1		0x09
#define	IRQ_IN_L2		0x0A
#define	IRQ_IN_L3		0x0B
#define	IRQ_XCS_L0		0x0C
#define	IRQ_XCS_L1		0x0D
#define	IRQ_XCS_L2		0x0E
#define	IRQ_DOORBELL		0x0F
#define	IRQ_DMA_1		0x10
#define	IRQ_DMA_2		0x11
#define	IRQ_PCI			0x12
#define	IRQ_PMCSR		0x13
#define	IRQ_RESERVED1		0x14
#define	IRQ_RESERVED2		0x15
#define	IRQ_BIST		0x16
#define	IRQ_SERR		0x17
#define	IRQ_SDRAM_PARITY	0x18
#define	IRQ_I2O			0x19
#define	IRQ_RESERVED3		0x1A
#define	IRQ_DISCARD_TIMER	0x1B
#define	IRQ_DATA_PARITY		0x1C
#define	IRQ_MASTER_ABORT	0x1D
#define	IRQ_TARGET_ABORT	0x1E
#define	IRQ_PARITY		0x1F

/* IRQ and FIQ status / enable registers */

#define	IRQ_STATUS		0x180
#define	IRQ_RAW_STATUS		0x184
#define IRQ_ENABLE		0x188
#define	IRQ_ENABLE_SET		0x188
#define	IRQ_ENABLE_CLEAR	0x18c
#define	IRQ_SOFT		0x190

#define	FIQ_STATUS		0x280
#define	FIQ_RAW_STATUS		0x284
#define FIQ_ENABLE		0x288
#define	FIQ_ENABLE_SET		0x288
#define	FIQ_ENABLE_CLEAR	0x28c
#define	FIQ_SOFT		0x290

/* Timer registers */

/* Relative offsets and bases */

#define	TIMER_LOAD		0x00
#define	TIMER_VALUE		0x04
#define	TIMER_CONTROL		0x08
#define	TIMER_CLEAR		0x0C
#define	TIMER_1_BASE		0x300
#define	TIMER_2_BASE		0x320
#define	TIMER_3_BASE		0x340
#define	TIMER_4_BASE		0x360

/* Control register bits */

#define	TIMER_FCLK		0x00
#define	TIMER_FCLK_16		0x04
#define	TIMER_FCLK_256		0x08
#define	TIMER_EXTERNAL		0x0C
#define	TIMER_MODE_FREERUN	0x00
#define	TIMER_MODE_PERIODIC	0x40
#define	TIMER_ENABLE		0x80

/* Maximum timer value */

#define TIMER_MAX_VAL		0x00FFFFFF

/* Specific registers */

#define	TIMER_1_LOAD		0x300
#define	TIMER_1_VALUE		0x304
#define	TIMER_1_CONTROL		0x308
#define	TIMER_1_CLEAR		0x30C
#define	TIMER_2_LOAD		0x320
#define	TIMER_2_VALUE		0x324
#define	TIMER_2_CONTROL		0x328
#define	TIMER_2_CLEAR		0x32C
#define	TIMER_3_LOAD		0x340
#define	TIMER_3_VALUE		0x344
#define	TIMER_3_CONTROL		0x348
#define	TIMER_3_CLEAR		0x34C
#define	TIMER_4_LOAD		0x360
#define	TIMER_4_VALUE		0x364
#define	TIMER_4_CONTROL		0x368
#define	TIMER_4_CLEAR		0x36C

/* Miscellaneous definitions */

#ifndef FCLK
#define FCLK 50000000
#endif