xref: /netbsd-src/sys/arch/mips/adm5120/include/adm5120reg.h (revision ce099b40997c43048fb78bd578195f81d2456523)
1*ce099b40Smartin /*	$NetBSD: adm5120reg.h,v 1.2 2008/04/28 20:23:27 martin Exp $	*/
2320845ddSdyoung 
3320845ddSdyoung /*-
4320845ddSdyoung  * Copyright (c) 2007 Ruslan Ermilov and Vsevolod Lobko.
5320845ddSdyoung  * All rights reserved.
6320845ddSdyoung  *
7320845ddSdyoung  * Redistribution and use in source and binary forms, with or
8320845ddSdyoung  * without modification, are permitted provided that the following
9320845ddSdyoung  * conditions are met:
10320845ddSdyoung  * 1. Redistributions of source code must retain the above copyright
11320845ddSdyoung  *    notice, this list of conditions and the following disclaimer.
12320845ddSdyoung  * 2. Redistributions in binary form must reproduce the above
13320845ddSdyoung  *    copyright notice, this list of conditions and the following
14320845ddSdyoung  *    disclaimer in the documentation and/or other materials provided
15320845ddSdyoung  *    with the distribution.
16320845ddSdyoung  * 3. The names of the authors may not be used to endorse or promote
17320845ddSdyoung  *    products derived from this software without specific prior
18320845ddSdyoung  *    written permission.
19320845ddSdyoung  *
20320845ddSdyoung  * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY
21320845ddSdyoung  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22320845ddSdyoung  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
23320845ddSdyoung  * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS
24320845ddSdyoung  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
25320845ddSdyoung  * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26320845ddSdyoung  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
27320845ddSdyoung  * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28320845ddSdyoung  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
29320845ddSdyoung  * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
30320845ddSdyoung  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
31320845ddSdyoung  * OF SUCH DAMAGE.
32320845ddSdyoung  */
33320845ddSdyoung /*-
34320845ddSdyoung  * Copyright (c) 2001 The NetBSD Foundation, Inc.
35320845ddSdyoung  * All rights reserved.
36320845ddSdyoung  *
37320845ddSdyoung  * This code is derived from software contributed to The NetBSD Foundation
38320845ddSdyoung  * by Jason R. Thorpe.
39320845ddSdyoung  *
40320845ddSdyoung  * Redistribution and use in source and binary forms, with or without
41320845ddSdyoung  * modification, are permitted provided that the following conditions
42320845ddSdyoung  * are met:
43320845ddSdyoung  * 1. Redistributions of source code must retain the above copyright
44320845ddSdyoung  *    notice, this list of conditions and the following disclaimer.
45320845ddSdyoung  * 2. Redistributions in binary form must reproduce the above copyright
46320845ddSdyoung  *    notice, this list of conditions and the following disclaimer in the
47320845ddSdyoung  *    documentation and/or other materials provided with the distribution.
48320845ddSdyoung  *
49320845ddSdyoung  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
50320845ddSdyoung  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
51320845ddSdyoung  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
52320845ddSdyoung  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
53320845ddSdyoung  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
54320845ddSdyoung  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
55320845ddSdyoung  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
56320845ddSdyoung  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
57320845ddSdyoung  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
58320845ddSdyoung  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
59320845ddSdyoung  * POSSIBILITY OF SUCH DAMAGE.
60320845ddSdyoung  */
61320845ddSdyoung 
62320845ddSdyoung #ifndef _ADM5120REG_H_
63320845ddSdyoung #define _ADM5120REG_H_
64320845ddSdyoung 
65320845ddSdyoung /*
66320845ddSdyoung  * Memory map and register definitions for the Alchemy Semiconductor Pb1000.
67320845ddSdyoung  */
68320845ddSdyoung 
69320845ddSdyoung /* Last byte of physical address space. */
70320845ddSdyoung #define	ADM5120_TOP			0x1fffffff
71320845ddSdyoung #define	ADM5120_BOTTOM			0x0
72320845ddSdyoung 
73320845ddSdyoung /* Flash addresses */
74320845ddSdyoung #define	ADM5120_BASE_SRAM0		0x1fc00000
75320845ddSdyoung 
76320845ddSdyoung /* UARTs */
77320845ddSdyoung #define ADM5120_BASE_UART1		0x12800000
78320845ddSdyoung #define ADM5120_BASE_UART0		0x12600000
79320845ddSdyoung 
80320845ddSdyoung /* ICU */
81320845ddSdyoung #define	ADM5120_BASE_ICU		0x12200000
82320845ddSdyoung #define		ICU_STATUS_REG		0x00
83320845ddSdyoung #define		ICU_RAW_STATUS_REG	0x04
84320845ddSdyoung #define		ICU_ENABLE_REG		0x08
85320845ddSdyoung #define		ICU_DISABLE_REG		0x0c
86320845ddSdyoung #define		ICU_SOFT_REG		0x10
87320845ddSdyoung #define		ICU_MODE_REG		0x14
88320845ddSdyoung #define		ICU_FIQ_STATUS_REG	0x18
89320845ddSdyoung #define		ICU_TESTSRC_REG		0x1c
90320845ddSdyoung #define		ICU_SRCSEL_REG		0x20
91320845ddSdyoung #define		ICU_LEVEL_REG		0x24
92320845ddSdyoung #define		ICU_INT_MASK		0x3ff
93320845ddSdyoung 
94320845ddSdyoung /* Switch */
95320845ddSdyoung #define	ADM5120_BASE_SWITCH		0x12000000
96320845ddSdyoung #define		SW_CODE_REG		0x00
97320845ddSdyoung #define			CLKS_MASK		0x00300000
98320845ddSdyoung #define			CLKS_175MHZ		0x00000000
99320845ddSdyoung #define			CLKS_200MHZ		0x00100000
100320845ddSdyoung #define		SW_SFTRES_REG		0x04
101320845ddSdyoung #define		SW_MEMCONT_REG		0x1c
102320845ddSdyoung #define			SDRAM_SIZE_4MBYTES	0x0001
103320845ddSdyoung #define			SDRAM_SIZE_8MBYTES	0x0002
104320845ddSdyoung #define			SDRAM_SIZE_16MBYTES	0x0003
105320845ddSdyoung #define			SDRAM_SIZE_64MBYTES	0x0004
106320845ddSdyoung #define			SDRAM_SIZE_128MBYTES	0x0005
107320845ddSdyoung #define			SDRAM_SIZE_MASK		0x0007
108320845ddSdyoung #define			SRAM0_SIZE_SHIFT	8
109320845ddSdyoung #define			SRAM1_SIZE_SHIFT	16
110320845ddSdyoung #define			SRAM_MASK		0x0007
111320845ddSdyoung #define			SRAM_SSIZE		0x40000
112320845ddSdyoung 
113320845ddSdyoung #define	ADM5120_BASE_PCI_CONFDATA	0x115ffff8
114320845ddSdyoung #define	ADM5120_BASE_PCI_CONFADDR	0x115ffff0
115320845ddSdyoung #define	ADM5120_BASE_PCI_IO		0x11500000
116320845ddSdyoung #define	ADM5120_BASE_PCI_MEM		0x11400000
117320845ddSdyoung #define	ADM5120_BASE_USB		0x11200000
118320845ddSdyoung #define	ADM5120_BASE_MPMC		0x11000000
119320845ddSdyoung #define	ADM5120_BASE_EXTIO1		0x10e00000
120320845ddSdyoung #define	ADM5120_BASE_EXTIO0		0x10c00000
121320845ddSdyoung #define	ADM5120_BASE_RSVD0		0x10800000
122320845ddSdyoung #define	ADM5120_BASE_SRAM1		0x10000000
123320845ddSdyoung 
124320845ddSdyoung #define	_REG_READ(b, o)	*((volatile uint32_t *)MIPS_PHYS_TO_KSEG1((b) + (o)))
125320845ddSdyoung #define	SW_READ(o)	_REG_READ(ADM5120_BASE_SWITCH, o)
126320845ddSdyoung 
127320845ddSdyoung #define	_REG_WRITE(b, o, v)	(_REG_READ(b, o)) = (v)
128320845ddSdyoung #define	SW_WRITE(o, v)	_REG_WRITE(ADM5120_BASE_SWITCH,o, v)
129320845ddSdyoung 
130320845ddSdyoung /* USB */
131320845ddSdyoung 
132320845ddSdyoung /* Watchdog Timers: base address is switch controller */
133320845ddSdyoung 
134320845ddSdyoung #define	ADM5120_WDOG0			0x00c0
135320845ddSdyoung #define	ADM5120_WDOG1			0x00c4
136320845ddSdyoung 
137320845ddSdyoung #define	ADM5120_WDOG0_WTTR	__BIT(31)	/* 0: do not reset,
138320845ddSdyoung 						 * 1: reset on wdog expiration
139320845ddSdyoung 						 */
140320845ddSdyoung #define	ADM5120_WDOG1_WDE	__BIT(31)	/* 0: deactivate,
141320845ddSdyoung 						 * 1: drop all CPU-bound
142320845ddSdyoung 						 * packets, disable flow
143320845ddSdyoung 						 * control on all ports.
144320845ddSdyoung 						 */
145320845ddSdyoung #define	ADM5120_WDOG_WTS_MASK	__BITS(30, 16)	/* Watchdog Timer Set:
146320845ddSdyoung 						 * timer expires when it
147320845ddSdyoung 						 * reaches WTS.  Units of
148320845ddSdyoung 						 * 10ms.
149320845ddSdyoung 						 */
150320845ddSdyoung #define	ADM5120_WDOG_RSVD	__BIT(15)
151320845ddSdyoung #define	ADM5120_WDOG_WT_MASK	__BITS(14, 0)	/* Watchdog Timer:
152320845ddSdyoung 						 * counts up, write to clear.
153320845ddSdyoung 						 */
154320845ddSdyoung 
155320845ddSdyoung /* GPIO: base address is switch controller */
156320845ddSdyoung #define	ADM5120_GPIO0			0x00b8
157320845ddSdyoung 
158320845ddSdyoung #define	ADM5120_GPIO0_OV	__BITS(31, 24)	/* rw: output value */
159320845ddSdyoung #define	ADM5120_GPIO0_OE	__BITS(23, 16)	/* rw: output enable,
160320845ddSdyoung 						 * bit[n] = 0 -> input
161320845ddSdyoung 						 * bit[n] = 1 -> output
162320845ddSdyoung 						 */
163320845ddSdyoung #define	ADM5120_GPIO0_IV	__BITS(15, 8)	/* ro: input value */
164320845ddSdyoung #define	ADM5120_GPIO0_RSVD	__BITS(7, 0)	/* rw: reserved */
165320845ddSdyoung 
166320845ddSdyoung #define	ADM5120_GPIO2			0x00bc
167320845ddSdyoung #define	ADM5120_GPIO2_EW	__BIT(6)	/* 1: enable wait state pin,
168320845ddSdyoung 						 * pin GPIO[0], for GPIO[1]
169320845ddSdyoung 						 * or GPIO[3] Chip Select:
170320845ddSdyoung 						 * memory controller waits for
171320845ddSdyoung 						 * WAIT# inactive (high).
172320845ddSdyoung 						 */
173320845ddSdyoung #define	ADM5120_GPIO2_CSX1	__BIT(5)	/* 1: GPIO[3:4] act as
174320845ddSdyoung 						 * Chip Select for
175320845ddSdyoung 						 * External I/O 1 (CSX1)
176320845ddSdyoung 						 * and External Interrupt 1
177320845ddSdyoung 						 * (INTX1), respectively.
178320845ddSdyoung 						 * 0: CSX1/INTX1 disabled
179320845ddSdyoung 						 */
180320845ddSdyoung #define	ADM5120_GPIO2_CSX0	__BIT(4)	/* 1: GPIO[1:2] act as
181320845ddSdyoung 						 * Chip Select for
182320845ddSdyoung 						 * External I/O 0 (CSX0)
183320845ddSdyoung 						 * and External Interrupt 0
184320845ddSdyoung 						 * (INTX0), respectively.
185320845ddSdyoung 						 * 0: CSX0/INTX0 disabled
186320845ddSdyoung 						 */
187320845ddSdyoung 
188320845ddSdyoung /* MultiPort Memory Controller (MPMC) */
189320845ddSdyoung 
190320845ddSdyoung #define	ADM5120_MPMC_CONTROL	0x000
191320845ddSdyoung #define	ADM5120_MPMC_CONTROL_DWB	__BIT(3)	/* write 1 to
192320845ddSdyoung 							 * drain write
193320845ddSdyoung 							 * buffers.  write 0
194320845ddSdyoung 							 * for normal buffer
195320845ddSdyoung 							 * operation.
196320845ddSdyoung 							 */
197320845ddSdyoung #define	ADM5120_MPMC_CONTROL_LPM	__BIT(2)	/* 1: activate low-power
198320845ddSdyoung 							 * mode.  SDRAM is
199320845ddSdyoung 							 * still refreshed.
200320845ddSdyoung 							 */
201320845ddSdyoung #define	ADM5120_MPMC_CONTROL_AM		__BIT(1)	/* 1: address mirror:
202320845ddSdyoung 							 * static memory
203320845ddSdyoung 							 * chip select 0
204320845ddSdyoung 							 * is mapped to chip
205320845ddSdyoung 							 * select 1.
206320845ddSdyoung 							 */
207320845ddSdyoung #define	ADM5120_MPMC_CONTROL_ME		__BIT(0)	/* 0: disable MPMC.
208320845ddSdyoung 							 * DRAM is not
209320845ddSdyoung 							 * refreshed.
210320845ddSdyoung 							 * 1: enable MPMC.
211320845ddSdyoung 							 */
212320845ddSdyoung 
213320845ddSdyoung #define	ADM5120_MPMC_STATUS	0x004
214320845ddSdyoung #define	ADM5120_MPMC_STATUS_SRA		__BIT(2)	/* read-only
215320845ddSdyoung 							 * MPMC operating mode
216320845ddSdyoung 							 * indication,
217320845ddSdyoung 							 * 1: self-refresh
218320845ddSdyoung 							 * acknowledge
219320845ddSdyoung 							 * 0: normal mode
220320845ddSdyoung 							 */
221320845ddSdyoung #define	ADM5120_MPMC_STATUS_WBS		__BIT(1)	/* read-only
222320845ddSdyoung 							 * write-buffer status,
223320845ddSdyoung 							 * 0: buffers empty
224320845ddSdyoung 							 * 1: contain data
225320845ddSdyoung 							 */
226320845ddSdyoung #define	ADM5120_MPMC_STATUS_BU		__BIT(0)	/* read-only MPMC
227320845ddSdyoung 							 * "busy" indication,
228320845ddSdyoung 							 * 0: MPMC idle
229320845ddSdyoung 							 * 1: MPMC is performing
230320845ddSdyoung 							 * memory transactions
231320845ddSdyoung 							 */
232320845ddSdyoung 
233320845ddSdyoung #define	ADM5120_MPMC_SEW	0x080
234320845ddSdyoung #define	ADM5120_MPMC_SEW_RSVD	__BITS(31, 10)
235320845ddSdyoung #define	ADM5120_MPMC_SEW_EWTO	__BITS(9, 0)	/* timeout access after
236320845ddSdyoung 						 * 16 * (n + 1) clock cycles
237320845ddSdyoung 						 * (XXX which clock?)
238320845ddSdyoung 						 */
239320845ddSdyoung 
240320845ddSdyoung #define	ADM5120_MPMC_SC(__i)	(0x200 + 0x020 * (__i))
241320845ddSdyoung #define	ADM5120_MPMC_SC_RSVD0	__BITS(31, 21)
242320845ddSdyoung #define	ADM5120_MPMC_SC_WP	__BIT(20)	/* 1: write protect */
243320845ddSdyoung #define	ADM5120_MPMC_SC_BE	__BIT(20)	/* 1: enable write buffer */
244320845ddSdyoung #define	ADM5120_MPMC_SC_RSVD1	__BITS(18, 9)
245320845ddSdyoung #define	ADM5120_MPMC_SC_EW	__BIT(8)	/* 1: enable extended wait;
246320845ddSdyoung 						 */
247320845ddSdyoung #define	ADM5120_MPMC_SC_BLS	__BIT(7)	/* 0: byte line state pins
248320845ddSdyoung 						 * are active high on read,
249320845ddSdyoung 						 * active low on write.
250320845ddSdyoung 						 *
251320845ddSdyoung 						 * 1: byte line state pins
252320845ddSdyoung 						 * are active low on read and
253320845ddSdyoung 						 * on write.
254320845ddSdyoung 						 */
255320845ddSdyoung #define	ADM5120_MPMC_SC_CCP	__BIT(6)	/* 0: chip select is active low,
256320845ddSdyoung 						 * 1: active high
257320845ddSdyoung 						 */
258320845ddSdyoung #define	ADM5120_MPMC_SC_RSVD2	__BITS(5, 4)
259320845ddSdyoung #define	ADM5120_MPMC_SC_PM	__BIT(3)	/* 0: page mode disabled,
260320845ddSdyoung 						 * 1: enable asynchronous
261320845ddSdyoung 						 * page mode four
262320845ddSdyoung 						 */
263320845ddSdyoung #define	ADM5120_MPMC_SC_RSVD3	__BIT(2)
264320845ddSdyoung #define	ADM5120_MPMC_SC_MW_MASK	__BITS(1, 0)	/* memory width, bits */
265320845ddSdyoung #define	ADM5120_MPMC_SC_MW_8B	__SHIFTIN(0, ADM5120_MPMC_SC_MW_MASK)
266320845ddSdyoung #define	ADM5120_MPMC_SC_MW_16B	__SHIFTIN(1, ADM5120_MPMC_SC_MW_MASK)
267320845ddSdyoung #define	ADM5120_MPMC_SC_MW_32B	__SHIFTIN(2, ADM5120_MPMC_SC_MW_MASK)
268320845ddSdyoung #define	ADM5120_MPMC_SC_MW_RSVD	__SHIFTIN(3, ADM5120_MPMC_SC_MW_MASK)
269320845ddSdyoung 
270320845ddSdyoung #define	ADM5120_MPMC_SWW(__i)	(0x204 + 0x020 * (__i))
271320845ddSdyoung #define	ADM5120_MPMC_SWW_RSVD	__BITS(31, 4)
272320845ddSdyoung #define	ADM5120_MPMC_SWW_WWE	__BITS(3, 0)	/* delay (n + 1) * HCLK cycles
273320845ddSdyoung 						 * after asserting chip select
274320845ddSdyoung 						 * (CS) before asserting write
275320845ddSdyoung 						 * enable (WE)
276320845ddSdyoung 						 */
277320845ddSdyoung 
278320845ddSdyoung #define	ADM5120_MPMC_SWO(__i)	(0x208 + 0x020 * (__i))
279320845ddSdyoung #define	ADM5120_MPMC_SWO_RSVD	__BITS(31, 4)
280320845ddSdyoung #define	ADM5120_MPMC_SWO_WOE	__BITS(3, 0)	/* delay n * HCLK cycles
281320845ddSdyoung 						 * after asserting chip select
282320845ddSdyoung 						 * before asserting output
283320845ddSdyoung 						 * enable (OE)
284320845ddSdyoung 						 */
285320845ddSdyoung 
286320845ddSdyoung #define	ADM5120_MPMC_SWR(__i)	(0x20c + 0x020 * (__i))
287320845ddSdyoung #define	ADM5120_MPMC_SWR_RSVD	__BITS(31, 5)
288320845ddSdyoung #define	ADM5120_MPMC_SWR_NMRW	__BITS(4, 0)	/* read wait states for
289320845ddSdyoung 						 * either first page-mode
290320845ddSdyoung 						 * access or for non-page mode
291320845ddSdyoung 						 * read, (n + 1) * HCLK cycles
292320845ddSdyoung 						 */
293320845ddSdyoung 
294320845ddSdyoung #define	ADM5120_MPMC_SWP(__i)	(0x210 + 0x020 * (__i))
295320845ddSdyoung #define	ADM5120_MPMC_SWP_RSVD	__BITS(31, 5)
296320845ddSdyoung #define	ADM5120_MPMC_SWP_WPS	__BITS(4, 0)	/* read wait states for
297320845ddSdyoung 						 * second and subsequent
298320845ddSdyoung 						 * page-mode read,
299320845ddSdyoung 						 * (n + 1) * HCLK cycles
300320845ddSdyoung 						 */
301320845ddSdyoung 
302320845ddSdyoung #define	ADM5120_MPMC_SWWR(__i)	(0x214 + 0x020 * (__i))
303320845ddSdyoung #define	ADM5120_MPMC_SWWR_RSVD	__BITS(31, 5)
304320845ddSdyoung #define	ADM5120_MPMC_SWWR_WWS	__BITS(4, 0)	/* write wait states after
305320845ddSdyoung 						 * the first read (??),
306320845ddSdyoung 						 * (n + 2) * HCLK cycles
307320845ddSdyoung 						 */
308320845ddSdyoung 
309320845ddSdyoung #define	ADM5120_MPMC_SWT(__i)	(0x218 + 0x020 * (__i))
310320845ddSdyoung #define	ADM5120_MPMC_SWT_RSVD		__BITS(31, 4)
311320845ddSdyoung #define	ADM5120_MPMC_SWT_WAITTURN	__BITS(3, 0)	/* bus turnaround time,
312320845ddSdyoung 							 * (n + 1) * HCLK cycles
313320845ddSdyoung 							 */
314320845ddSdyoung 
315320845ddSdyoung #endif /* _ADM5120REG_H_ */
316