mv78xx0reg.h revision 1.2 1 /* $NetBSD: mv78xx0reg.h,v 1.2 2013/09/30 13:21:10 kiyohara Exp $ */
2 /*
3 * Copyright (c) 2010 KIYOHARA Takashi
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18 * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
19 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
21 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
23 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
24 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25 * POSSIBILITY OF SUCH DAMAGE.
26 */
27
28 #ifndef _MV78XX0REG_H_
29 #define _MV78XX0REG_H_
30
31 #include <arm/marvell/mvsocreg.h>
32
33 /*
34 * MHz PCIe GbE SATA TDMI COM
35 * MV76100: 800, 2 x2, x1, -, x3
36 * MV78100: 1.2, 2 x4, x2, x2, x2, x4
37 * MV78200: 1.0 x2, 2 x4, x4, x2, x2, x4
38 */
39
40 #define MV78XX0_UNITID_DDR MVSOC_UNITID_DDR
41 #define MV78XX0_UNITID_DEVBUS MVSOC_UNITID_DEVBUS
42 #define MV78XX0_UNITID_LMB MVSOC_UNITID_MLMB
43 #define MV78XX0_UNITID_GBE23 0x3 /* Gigabit Ethernet registers */
44 #define MV78XX0_UNITID_PEX MVSOC_UNITID_PEX
45 #define MV78XX0_UNITID_USB 0x5 /* USB registers */
46 #define MV78XX0_UNITID_IDMA 0x6 /* IDMA registers */
47 #define MV78XX0_UNITID_XOR 0x6 /* XOR registers */
48 #define MV78XX0_UNITID_GBE01 0x7 /* Gigabit Ethernet registers */
49 #define MV78XX0_UNITID_PEX1 0x8
50 #define MV78XX0_UNITID_CRYPT 0x9 /* Cryptographic Engine reg */
51 #define MV78XX0_UNITID_SA 0x9 /* Security Accelelerator reg */
52 #define MV78XX0_UNITID_SATA 0xa /* SATA registers */
53 #define MV78XX0_UNITID_TDM 0xb /* TDM registers */
54
55 #define MV78XX0_ATTR_DEVICE_CS0 0x3e
56 #define MV78XX0_ATTR_DEVICE_CS1 0x3d
57 #define MV78XX0_ATTR_DEVICE_CS2 0x3b
58 #define MV78XX0_ATTR_DEVICE_CS3 0x37
59 #define MV78XX0_ATTR_BOOT_CS 0x2f
60 #define MV78XX0_ATTR_SPI 0x1f
61 #define MV78XX0_ATTR_PEX_0_IO 0xe0 /* PCIe x1 Port 0.0 */
62 #define MV78XX0_ATTR_PEX_0_MEM 0xe8
63 #define MV78XX0_ATTR_PEX_1_IO 0xd0 /* PCIe x1 Port 0.1 */
64 #define MV78XX0_ATTR_PEX_1_MEM 0xd8
65 #define MV78XX0_ATTR_PEX_2_IO 0xb0 /* PCIe x1 Port 0.2 */
66 #define MV78XX0_ATTR_PEX_2_MEM 0xb8
67 #define MV78XX0_ATTR_PEX_3_IO 0x70 /* PCIe x1 Port 0.3 */
68 #define MV78XX0_ATTR_PEX_3_MEM 0x78
69 #define MV78XX0_ATTR_CRYPT 0x00/* 0:Bswap,1:No,2:B&Wswap,3:Wswap */
70
71 #define MV78XX0_IRQ_ERRSUM 0 /* Sum of Main Intr Err Cause */
72 #define MV78XX0_IRQ_SPI 1 /* SPI */
73 #define MV78XX0_IRQ_TWSI0 2 /* TWSI0 */
74 #define MV78XX0_IRQ_TWSI1 3 /* TWSI1 */
75 #define MV78XX0_IRQ_IDMA0 4 /* IDMA Channel0 completion */
76 #define MV78XX0_IRQ_IDMA1 5 /* IDMA Channel1 completion */
77 #define MV78XX0_IRQ_IDMA2 6 /* IDMA Channel2 completion */
78 #define MV78XX0_IRQ_IDMA3 7 /* IDMA Channel3 completion */
79 #define MV78XX0_IRQ_TIMER0 8 /* Timer0 */
80 #define MV78XX0_IRQ_TIMER1 9 /* Timer1 */
81 #define MV78XX0_IRQ_TIMER2 10 /* Timer2 */
82 #define MV78XX0_IRQ_TIMER3 11 /* Timer3 */
83 #define MV78XX0_IRQ_UART0 12 /* UART0 */
84 #define MV78XX0_IRQ_UART1 13 /* UART1 */
85 #define MV78XX0_IRQ_UART2 14 /* UART2 */
86 #define MV78XX0_IRQ_UART3 15 /* UART3 */
87 #define MV78XX0_IRQ_USB0 16 /* USB0 */
88 #define MV78XX0_IRQ_USB1 17 /* USB1 */
89 #define MV78XX0_IRQ_USB2 18 /* USB2 */
90 #define MV78XX0_IRQ_CRYPTO 19 /* Crypto engine completion */
91 #define MV78XX0_IRQ_XOR0 22 /* XOR engine 0 completion */
92 #define MV78XX0_IRQ_XOR1 23 /* XOR engine 1 completion */
93 #define MV78XX0_IRQ_SATA 26 /* SATA ports */
94 #define MV78XX0_IRQ_TDMI_INT 27 /* TDM */
95 #define MV78XX0_IRQ_PEX00INTA 32 /* PCIe Port0.0 INTA/B/C/D */
96 #define MV78XX0_IRQ_PEX01INTA 33 /* PCIe Port0.1 INTA/B/C/D */
97 #define MV78XX0_IRQ_PEX02INTA 34 /* PCIe Port0.2 INTA/B/C/D */
98 #define MV78XX0_IRQ_PEX03INTA 35 /* PCIe Port0.3 INTA/B/C/D */
99 #define MV78XX0_IRQ_PEX10INTA 36 /* PCIe Port1.0 INTA/B/C/D */
100 #define MV78XX0_IRQ_PEX11INTA 37 /* PCIe Port1.1 INTA/B/C/D */
101 #define MV78XX0_IRQ_PEX12INTA 38 /* PCIe Port1.2 INTA/B/C/D */
102 #define MV78XX0_IRQ_PEX13INTA 39 /* PCIe Port1.3 INTA/B/C/D */
103 #define MV78XX0_IRQ_GE00SUM 40 /* Gigabit Ethernet Port0 sum */
104 #define MV78XX0_IRQ_GE00RX 41 /* Gigabit Ethernet Port0 Rx */
105 #define MV78XX0_IRQ_GE00TX 42 /* Gigabit Ethernet Port0 Tx */
106 #define MV78XX0_IRQ_GE00MISC 43 /* Gigabit Ethernet Port0 misc*/
107 #define MV78XX0_IRQ_GE01SUM 44 /* Gigabit Ethernet Port1 sum */
108 #define MV78XX0_IRQ_GE01RX 45 /* Gigabit Ethernet Port1 Rx */
109 #define MV78XX0_IRQ_GE01TX 46 /* Gigabit Ethernet Port1 Tx */
110 #define MV78XX0_IRQ_GE01MISC 47 /* Gigabit Ethernet Port1 misc*/
111 #define MV78XX0_IRQ_GE10SUM 48 /* Gigabit Ethernet Port2 sum */
112 #define MV78XX0_IRQ_GE10RX 49 /* Gigabit Ethernet Port2 Rx */
113 #define MV78XX0_IRQ_GE10TX 50 /* Gigabit Ethernet Port2 Tx */
114 #define MV78XX0_IRQ_GE10MISC 51 /* Gigabit Ethernet Port2 misc*/
115 #define MV78XX0_IRQ_GE11SUM 52 /* Gigabit Ethernet Port3 sum */
116 #define MV78XX0_IRQ_GE11RX 53 /* Gigabit Ethernet Port3 Rx */
117 #define MV78XX0_IRQ_GE11TX 54 /* Gigabit Ethernet Port3 Tx */
118 #define MV78XX0_IRQ_GE11MISC 55 /* Gigabit Ethernet Port3 misc*/
119 #define MV78XX0_IRQ_GPIO0_7 56 /* GPIO[7:0] */
120 #define MV78XX0_IRQ_GPIO8_15 57 /* GPIO[15:8] */
121 #define MV78XX0_IRQ_GPIO16_23 58 /* GPIO[23:16] */
122 #define MV78XX0_IRQ_GPIO24_31 59 /* GPIO[31:24] */
123 #define MV78XX0_IRQ_DB_IN 60 /*Summary of Inbound Doorbell Cause*/
124 #define MV78XX0_IRQ_DB_OUT 61/*Summary of Outbound Doorbell Cause*/
125
126
127 /*
128 * Physical address of integrated peripherals
129 */
130
131 #define MV78XX0_UNITID2PHYS(uid) ((MV78XX0_UNITID_ ## uid) << 16)
132
133 /*
134 * General Purpose Port Registers
135 */
136 #define MV78XX0_GPP_BASE (MVSOC_DEVBUS_BASE + 0x0100)
137 #define MV78XX0_GPP_SIZE 0x100
138
139 /*
140 * Two-Wire Serial Interface Registers
141 */
142 #define MV78XX0_TWSI1_BASE (MVSOC_DEVBUS_BASE + 0x1100)
143
144 /*
145 * UART Interface Registers
146 */
147 /* NS16550 compatible */
148 #define MV78XX0_COM2_BASE (MVSOC_DEVBUS_BASE + 0x2200)
149 #define MV78XX0_COM3_BASE (MVSOC_DEVBUS_BASE + 0x2300)
150
151 /*
152 * Reset Registers
153 */
154 #define MV78XX0_SAMPLE_AT_RESET_LOW (MVSOC_DEVBUS_BASE + 0x0030)
155 #define MV78XX0_SAMPLE_AT_RESET_HIGH (MVSOC_DEVBUS_BASE + 0x0034)
156
157
158 /*
159 * Mbus-L to Mbus Bridge Registers
160 */
161 /* CPU Address Map Registers */
162 #define MV78XX0_MLMB_NWINDOW 14
163 #define MV78XX0_MLMB_NREMAP 8
164
165 #define MV78XX0_ICI_BASE(cpu) ((cpu)->ci_cpuid << 14)
166
167 /* Interrupt Controller Interface Registers */
168 #define MV78XX0_ICI_MIECR 0x200 /* Main Interrupt Error Cause */
169 #define MV78XX0_ICI_MICLR 0x204 /* Main Interrupt Cause Low */
170 #define MV78XX0_ICI_MICHR 0x208 /* Main Interrupt Cause High */
171 #define MV78XX0_ICI_IRQIMER 0x20c /* IRQ Interrupt Mask Error */
172 #define MV78XX0_ICI_IRQIMLR 0x210 /* IRQ Interrupt Mask Low */
173 #define MV78XX0_ICI_IRQIMHR 0x214 /* IRQ Interrupt Mask High */
174 #define MV78XX0_ICI_IRQSCR 0x218 /* IRQ Select Cause */
175 #define MV78XX0_ICI_FIQIMER 0x21c /* FIQ Interrupt Mask Error */
176 #define MV78XX0_ICI_FIQIMLR 0x220 /* FIQ Interrupt Mask Low */
177 #define MV78XX0_ICI_FIQIMHR 0x224 /* FIQ Interrupt Mask High */
178 #define MV78XX0_ICI_FIQSCR 0x228 /* FIQ Select Cause */
179 #define MV78XX0_ICI_EIMER 0x22c /* Endpoint Intr Mask Error */
180 #define MV78XX0_ICI_EIMLR 0x230 /* Endpoint Intr Mask Low */
181 #define MV78XX0_ICI_EIMHR 0x234 /* Endpoint Intr Mask High */
182 #define MV78XX0_ICI_ESCR 0x238 /* Endpoint Select Cause */
183
184 /* CPU Timers Registers */
185
186 #define IRQ_IS_TIMER(n, irq) ((irq) == MV78XX0_IRQ_TIMER ## n)
187 #define MLMBI_TIMER(n) MVSOC_MLMB_MLMBI_CPUTIMER ## n ## INTREQ
188 #define TIMER_IRQ2MLMBIMR(irq) \
189 IRQ_IS_TIMER(0, irq) ? MLMBI_TIMER(0) : \
190 (IRQ_IS_TIMER(1, irq) ? MLMBI_TIMER(1) : \
191 (IRQ_IS_TIMER(2, irq) ? MLMBI_TIMER(2) : MLMBI_TIMER(3)))
192
193
194 /*
195 * PCI Express Interface Registers
196 */
197 #define MV78XX0_PEX1_BASE (MV78XX0_UNITID2PHYS(PEX1)) /* 0x80000 */
198
199 /*
200 * USB 2.0 Interface Registers
201 */
202 #define MV78XX0_USB_BASE (MV78XX0_UNITID2PHYS(USB)) /* 0x50000 */
203
204 /*
205 * IDMA Controller and XOR Engine Registers
206 */
207 #define MV78XX0_IDMAC_BASE (MV78XX0_UNITID2PHYS(IDMA)) /* 0x60000 */
208
209 /*
210 * Gigabit Ethernet Registers
211 */
212 #define MV78XX0_GBE0_BASE (MV78XX0_UNITID2PHYS(GBE01)) /* 0x70000 */
213 #define MV78XX0_GBE1_BASE (MV78XX0_UNITID2PHYS(GBE01) + MVGBE_SIZE)
214 #define MV78XX0_GBE2_BASE (MV78XX0_UNITID2PHYS(GBE23)) /* 0x30000 */
215 #define MV78XX0_GBE3_BASE (MV78XX0_UNITID2PHYS(GBE23) + MVGBE_SIZE)
216
217 /*
218 * Cryptographic Engine and Security Accelerator Registers
219 */
220 #define MV78XX0_CESA_BASE (MV78XX0_UNITID2PHYS(CRYPT) + 0xd000)/*0x9d000*/
221
222 /*
223 * Serial-ATA Host Controller (SATAHC) Registers
224 */
225 #define MV78XX0_SATAHC_BASE (MV78XX0_UNITID2PHYS(SATA)) /* 0xa0000 */
226
227 /*
228 * Time Division Multiplexing (TDM) Unit Registers
229 */
230 #define MV78XX0_TDM_BASE (MV78XX0_UNITID2PHYS(TDM)) /* 0xb0000 */
231
232 #endif /* _MV78XX0REG_H_ */
233