xref: /netbsd-src/sys/arch/arm/ixp12x0/ixp12x0reg.h (revision c46bd13f4407f0d4766ba7a791a8cbf22ba5d45f)
1 /*	$NetBSD: ixp12x0reg.h,v 1.9 2021/09/17 08:13:06 andvar Exp $ */
2 
3 /*
4  * Copyright (c) 2002, 2003
5  *	Ichiro FUKUHARA <ichiro@ichiro.org>.
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  *
17  * THIS SOFTWARE IS PROVIDED BY ICHIRO FUKUHARA ``AS IS'' AND ANY EXPRESS OR
18  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20  * IN NO EVENT SHALL ICHIRO FUKUHARA OR THE VOICES IN HIS HEAD BE LIABLE FOR
21  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27  * SUCH DAMAGE.
28  */
29 
30 #ifndef _IXP12X0REG_H_
31 #define _IXP12X0REG_H_
32 
33 /*
34  * Physical memory map for the Intel IXP12X0
35  */
36 
37 /*
38  * FFFF FFFF ---------------------------
39  *            Device 6
40  *            SDRAM
41  *              FF00 0000 - FF00 0014
42  *                  SDRAM Control Register
43  *              D000 0000 - DFFF FFFF
44  *                  Prefetch 256MB
45  *              C000 0000 - CFFF FFFF
46  *                  non-Prefetch 256MB
47  * C000 0000 ---------------------------
48  *            Device 5
49  *            AMBA Translation (ATU)
50  * B000 0000 ---------------------------
51  *            Device 4
52  *            Reserved
53  * A000 0000 ---------------------------
54  *            Device 3
55  *            StrongARM Core System
56  * 9000 0000 ---------------------------
57  *            Device 2
58  *            Reserved
59  * 8000 0000 ---------------------------
60  *            Device 1
61  *            PCI UNIT
62  *              6000 0000 - 7FFF FFFF
63  *                  PCI Memory Cycle Access
64  *              5400 0000 - 5400 FFFF
65  *                  PCI I/O Cycle Access
66  *              5300 0000 - 53BF FFFF
67  *                  PCI Type0 Configuration Cycle Access
68  *              5200 0000 - 52FF FFFF
69  *                  PCI Type1 Configuration Cycle Access
70  *              4200 0000 - 4200 03FF
71  *                  Local PCI Configuration Space
72  * 4000 0000 ---------------------------
73  *            Device 0
74  *            SRAM UNIT
75  * 0000 0000 ---------------------------
76  */
77 
78 
79 /*
80  * Virtual memory map for the Intel IXP12X0 integrated devices
81  *
82  * IXP12x0 processors have many device registers at very lower addresses.
83  * To make user process space wider, we map the registers at lower address
84  * to upper address using address translation of virtual memory system.
85  *
86  * Some device registers are statically mapped on upper address region.
87  * because we have to access them before bus_space is initialized.
88  * Most device is dynamically mapped by bus_space_map().  In this case,
89  * the actual mapped (virtual) address are not cared by device drivers.
90  */
91 
92 /*
93  * FFFF FFFF ---------------------------
94  *
95  * F400 0000 ---------------------------
96  *            PCI Type 0 Configuration Cycle Access
97  *            VA F300 0000 == PA 5300 0000 (16Mbyte)
98  * F300 0000 ---------------------------
99  *            PCI Type 1 Configuration Cycle Access
100  *            VA F200 0000 == PA 5200 0000 (16Mbyte)
101  * F200 0000 ---------------------------
102  *            not used
103  * F020 0000 ---------------------------
104  *            PCI Registers Accessible Through I/O
105  *            VA F010 0000 == PA 5400 0000 (1Mbyte)
106  * F010 0000 ---------------------------
107  *            not used
108  * F001 1000 ---------------------------
109  *            PCI Registers Accessible Through StrongARM Core
110  *            VA F001 0000 == PA 4200 0000 (4kbyte)
111  *              F001 0300 - F001 036F  TIMER
112  *              F001 0200 - F001 0293  PCI_FIQ
113  *              F001 0180 - F001 0193  PCI_IRQ
114  * F001 0000 ---------------------------
115  *            StrongARM System and Peripheral Registers
116  *            VA F000 0000 == PA 9000 0000 (64kbyte)
117  *              F000 3400 - F000 3C03  UART
118  *              F000 3400 - F000 3C03  UART
119  *              F000 2000 - F000 3003  RTC
120  *              F000 1C00 - F000 1C03  GPIO_DATA
121  *              F000 1800 - F000 1C03  GPIO
122  *              F000 1400 - F000 1403  IRQ
123  *              F000 1000 - F000 1003  FIQ
124  *              F000 0C00 - F000 0C03  PLL_CFG (not used at this address)
125  * F000 0000 ---------------------------
126  *            Kernel text and data
127  * C000 0000 ---------------------------
128  *            L2 tables for user process (XXX should be fixed)
129  * 8000 0000 ---------------------------
130  *            PCI Registers Accessible Through Memory
131  *            VA 6000 0000 == PA 6000 0000 (512Mbyte)
132  * 6000 0000 ---------------------------
133  * 5400 0000 ---------------------------
134  * 0000 0000 ---------------------------
135  *
136  */
137 
138 /* Virtual address for I/O space */
139 #define	IXP12X0_IO_VBASE	0xf0000000UL
140 
141 /* StrongARM System and Peripheral Registers */
142 #define	IXP12X0_SYS_VBASE	0xf0000000UL
143 #define	IXP12X0_SYS_HWBASE	0x90000000UL
144 #define	IXP12X0_SYS_SIZE	0x00010000UL	/* 64Kbyte */
145 
146 #define	IXP12X0_PLL_CFG		(IXP12X0_IO_VBASE + 0x0c00)
147 #define	 IXP12X0_PLL_CFG_CCF	0x1f
148 
149 /* PCI Registers Accessible Through StrongARM Core */
150 #define	IXP12X0_PCI_VBASE	0xf0010000UL
151 #define	IXP12X0_PCI_HWBASE	0x42000000UL
152 #define	IXP12X0_PCI_SIZE	0x00001000UL	/* 4Kbyte */
153 
154 /* PCI I/O Space */
155 #define	IXP12X0_PCI_IO_VBASE	0xf0100000UL
156 #define	IXP12X0_PCI_IO_HWBASE	0x54000000UL
157 #define	IXP12X0_PCI_IO_SIZE	0x00100000UL	/* 1Mbyte */
158 
159 /* PCI Memory Space */
160 #define IXP12X0_PCI_MEM_HWBASE	0x60000000UL	/* VA == PA */
161 #define IXP12X0_PCI_MEM_VBASE	IXP12X0_PCI_MEM_HWBASE
162 #define	IXP12X0_PCI_MEM_SIZE	0x20000000UL
163 
164 /* PCI Type0/1 Configuration address */
165 #define	IXP12X0_PCI_TYPE0_HWBASE	0x53000000UL
166 #define	IXP12X0_PCI_TYPE0_VBASE		0xf3000000UL
167 #define	IXP12X0_PCI_TYPE0_SIZE		0x01000000UL	/* 16MB */
168 
169 #define	IXP12X0_PCI_TYPE1_HWBASE	0x52000000UL
170 #define	IXP12X0_PCI_TYPE1_VBASE		0xf2000000UL
171 #define	IXP12X0_PCI_TYPE1_SIZE		0x01000000UL	/* 16MB */
172 
173 /*
174  * SlowPort I/O Register
175  */
176 /* see. arch/evbarm/ixm1200/ixm1200reg.h */
177 
178 /* Physical register base addresses */
179 /* #define	IXP12X0_GPIO_VBASE */
180 #define	IXP12X0_GPIO_HWBASE	0x90001800UL
181 #define	IXP12X0_GPIO_SIZE	0x00000800UL
182 
183 /* Interrupts */
184 #define	IXP12X0_FIQ_VBASE	(IXP12X0_IO_VBASE + 0x1000)
185 #define	IXP12X0_FIQ_HWBASE	0x90001000UL
186 #define	IXP12X0_FIQ_SIZE	0x00000004UL
187 #define	IXP12X0_IRQ_VBASE	(IXP12X0_IO_VBASE + 0x1400)
188 #define	IXP12X0_IRQ_HWBASE	0x90001400UL
189 #define	IXP12X0_IRQ_SIZE	0x00000004UL
190 
191 /*
192  * Interrupt index assignment
193  *
194  *
195  *     FIQ/IRQ bitmap in "StrongARM System and Peripheral Registers"
196  *
197  *        3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
198  * bit    1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
199  *       +-+-------------------------------------------+-+-+-+-+-+-+-+---+
200  *       |M|                                           |U|S|R|S|U|C|P|   |
201  *       |B|                                           |A|D|T|R|E|I|C|   |
202  *       |Z|                    RES                    |R|R|C|A|N|N|I|RES|
203  *       | |                                           |T|A| |M|G|T| |   |
204  *       | |                                           | |M| | | | | |   |
205  *       +-+-------------------------------------------+-+-+-+-+-+-+-+---+
206  *        3
207  * index  1                                             8 7 6 5 4 3 2
208  *
209  *
210  * We Map a software interrupt queue index to the unused bits in the
211  * IRQ/FIQ registers. (in "StrongARM System and Peripheral Registers")
212  *
213  * XXX will need to revisit this if those bits are ever used in future
214  * steppings).
215  *
216  *        3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
217  * bit    1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
218  *       +-+-+-+-+-+-----------------------------------+-+-+-+-+-+-+-+---+
219  *       |M|S|C|N|S|                                   |U|S|R|S|U|C|P|   |
220  *       |B|O|L|E|E|                                   |A|D|T|R|E|I|C|   |
221  *       |Z|F|O|T|R|                RES                |R|R|C|A|N|N|I|RES|
222  *       | |T|C| |I|                                   |T|A| |M|G|T| |   |
223  *       | | |K| |A|                                   | |M| | | | | |   |
224  *       | | | | |L|                                   | | | | | | | |   |
225  *       +-+-+-+-+-+-----------------------------------+-+-+-+-+-+-+-+---+
226  *        3 3 2 2 2
227  * index  1 0 9 8 7                                     8 7 6 5 4 3 2
228  *
229  */
230 
231 #define NIRQ			64
232 #define SYS_NIRQ		32
233 
234 #define	IXP12X0_INTR_MBZ	31
235 #define	IXP12X0_INTR_bit30	30
236 #define	IXP12X0_INTR_bit29	29
237 #define	IXP12X0_INTR_bit28	28
238 #define	IXP12X0_INTR_bit27	27
239 #define	IXP12X0_INTR_bit26	26
240 #define	IXP12X0_INTR_bit25	25
241 #define	IXP12X0_INTR_bit24	24
242 #define	IXP12X0_INTR_bit23	23
243 #define	IXP12X0_INTR_bit22	22
244 #define	IXP12X0_INTR_bit21	21
245 #define	IXP12X0_INTR_bit20	20
246 #define	IXP12X0_INTR_bit19	19
247 #define	IXP12X0_INTR_bit18	18
248 #define	IXP12X0_INTR_bit17	17
249 #define	IXP12X0_INTR_bit16	16
250 #define	IXP12X0_INTR_bit15	15
251 #define	IXP12X0_INTR_bit14	14
252 #define	IXP12X0_INTR_bit13	13
253 #define	IXP12X0_INTR_bit12	12
254 #define	IXP12X0_INTR_bit11	11
255 #define	IXP12X0_INTR_bit10	10
256 #define	IXP12X0_INTR_bit9	9
257 #define	IXP12X0_INTR_UART	8
258 #define	IXP12X0_INTR_SDRAM	7
259 #define	IXP12X0_INTR_RTC	6
260 #define	IXP12X0_INTR_SRAM	5
261 #define	IXP12X0_INTR_UENG	4
262 #define	IXP12X0_INTR_CINT	3
263 #define	IXP12X0_INTR_PCI	2
264 #define	IXP12X0_INTR_bit1	1
265 #define	IXP12X0_INTR_bit0	0
266 
267 #define	IXP12X0_INTR_MASK					\
268 				((1U << IXP12X0_INTR_MBZ)	\
269 				 | (1U << IXP12X0_INTR_UART)	\
270 				 | (1U << IXP12X0_INTR_SDRAM)	\
271 				 | (1U << IXP12X0_INTR_RTC)	\
272 				 | (1U << IXP12X0_INTR_SRAM)	\
273 				 | (1U << IXP12X0_INTR_UENG)	\
274 				 | (1U << IXP12X0_INTR_CINT))
275 
276 #endif /* _IXP12X0REG_H_ */
277