xref: /haiku/headers/private/kernel/arch/arm/omap3.h (revision 13581b3d2a71545960b98fefebc5225b5bf29072)
1 /*
2  * Copyright (c) 2008 Travis Geiselbrecht
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining
5  * a copy of this software and associated documentation files
6  * (the "Software"), to deal in the Software without restriction,
7  * including without limitation the rights to use, copy, modify, merge,
8  * publish, distribute, sublicense, and/or sell copies of the Software,
9  * and to permit persons to whom the Software is furnished to do so,
10  * subject to the following conditions:
11  *
12  * The above copyright notice and this permission notice shall be
13  * included in all copies or substantial portions of the Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
19  * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
20  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
21  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22  */
23 #ifndef __PLATFORM_OMAP3_H
24 #define __PLATFORM_OMAP3_H
25 
26 #define SDRAM_BASE 0x80000000
27 // Offset of stack top defined with respect to SDRAM_BASE
28 #define KSTACK_TOP 0x2800000
29 
30 #define VECT_BASE 0x00000000
31 #define VECT_SIZE 0x1000
32 
33 #define DEVICE_BASE 0x48000000
34 #define DEVICE_SIZE 0x2000000
35 
36 /* framebuffer */
37 #define FB_BASE 0x88000000
38 #define FB_SIZE 0x200000
39 
40 #define L4_BASE     0x48000000
41 #define L4_WKUP_BASE    0x48300000
42 #define L4_PER_BASE 0x49000000
43 #define L4_EMU_BASE 0x54000000
44 #define GFX_BASE    0x50000000
45 #define L3_BASE     0x68000000
46 #define SMS_BASE    0x6C000000
47 #define SDRC_BASE   0x6D000000
48 #define GPMC_BASE   0x6E000000
49 #define SCM_BASE    0x48002000
50 
51 /* clocks */
52 #define CM_CLKSEL_PER		(L4_BASE + 0x5040)
53 
54 /* PRCM */
55 #define CM_FCLKEN_IVA2      (L4_BASE + 0x4000)
56 #define CM_CLKEN_PLL_IVA2   (L4_BASE + 0x4004)
57 #define CM_IDLEST_PLL_IVA2  (L4_BASE + 0x4024)
58 #define CM_CLKSEL1_PLL_IVA2 (L4_BASE + 0x4040)
59 #define CM_CLKSEL2_PLL_IVA2 (L4_BASE + 0x4044)
60 #define CM_CLKEN_PLL_MPU    (L4_BASE + 0x4904)
61 #define CM_IDLEST_PLL_MPU   (L4_BASE + 0x4924)
62 #define CM_CLKSEL1_PLL_MPU  (L4_BASE + 0x4940)
63 #define CM_CLKSEL2_PLL_MPU  (L4_BASE + 0x4944)
64 #define CM_FCLKEN1_CORE     (L4_BASE + 0x4a00)
65 #define CM_ICLKEN1_CORE     (L4_BASE + 0x4a10)
66 #define CM_ICLKEN2_CORE     (L4_BASE + 0x4a14)
67 #define CM_CLKSEL_CORE      (L4_BASE + 0x4a40)
68 #define CM_FCLKEN_GFX       (L4_BASE + 0x4b00)
69 #define CM_ICLKEN_GFX       (L4_BASE + 0x4b10)
70 #define CM_CLKSEL_GFX       (L4_BASE + 0x4b40)
71 #define CM_FCLKEN_WKUP      (L4_BASE + 0x4c00)
72 #define CM_ICLKEN_WKUP      (L4_BASE + 0x4c10)
73 #define CM_CLKSEL_WKUP      (L4_BASE + 0x4c40)
74 #define CM_IDLEST_WKUP      (L4_BASE + 0x4c20)
75 #define CM_CLKEN_PLL        (L4_BASE + 0x4d00)
76 #define CM_IDLEST_CKGEN     (L4_BASE + 0x4d20)
77 #define CM_CLKSEL1_PLL      (L4_BASE + 0x4d40)
78 #define CM_CLKSEL2_PLL      (L4_BASE + 0x4d44)
79 #define CM_CLKSEL3_PLL      (L4_BASE + 0x4d48)
80 #define CM_FCLKEN_DSS       (L4_BASE + 0x4e00)
81 #define CM_ICLKEN_DSS       (L4_BASE + 0x4e10)
82 #define CM_CLKSEL_DSS       (L4_BASE + 0x4e40)
83 #define CM_FCLKEN_CAM       (L4_BASE + 0x4f00)
84 #define CM_ICLKEN_CAM       (L4_BASE + 0x4f10)
85 #define CM_CLKSEL_CAM       (L4_BASE + 0x4F40)
86 #define CM_FCLKEN_PER       (L4_BASE + 0x5000)
87 #define CM_ICLKEN_PER       (L4_BASE + 0x5010)
88 #define CM_CLKSEL_PER       (L4_BASE + 0x5040)
89 #define CM_CLKSEL1_EMU      (L4_BASE + 0x5140)
90 
91 #define PRM_CLKSEL			(L4_BASE + 0x306d40)
92 #define PRM_RSTCTRL			(L4_BASE + 0x307250)
93 #define PRM_CLKSRC_CTRL		(L4_BASE + 0x307270)
94 
95 /* General Purpose Timers */
96 #define OMAP34XX_GPT1           (L4_BASE + 0x318000)
97 #define OMAP34XX_GPT2           (L4_BASE + 0x1032000)
98 #define OMAP34XX_GPT3           (L4_BASE + 0x1034000)
99 #define OMAP34XX_GPT4           (L4_BASE + 0x1036000)
100 #define OMAP34XX_GPT5           (L4_BASE + 0x1038000)
101 #define OMAP34XX_GPT6           (L4_BASE + 0x103A000)
102 #define OMAP34XX_GPT7           (L4_BASE + 0x103C000)
103 #define OMAP34XX_GPT8           (L4_BASE + 0x103E000)
104 #define OMAP34XX_GPT9           (L4_BASE + 0x1040000)
105 #define OMAP34XX_GPT10          (L4_BASE + 0x86000)
106 #define OMAP34XX_GPT11          (L4_BASE + 0x88000)
107 #define OMAP34XX_GPT12          (L4_BASE + 0x304000)
108 
109 #define TIDR				0x00
110 #define TIOCP_CFG			0x10
111 #define TISTAT				0x14
112 #define TISR				0x18
113 #define TIER				0x1C
114 #define TWER				0x20
115 #define TCLR				0x24
116 #define TCRR				0x28
117 #define TLDR				0x2C
118 #define TTGR				0x30
119 #define TWPS				0x34
120 #define TMAR				0x38
121 #define TCAR1				0x3C
122 #define TSICR				0x40
123 #define TCAR2				0x44
124 #define TPIR				0x48
125 #define TNIR				0x4C
126 #define TCVR				0x50
127 #define TOCR				0x54
128 #define TOWR				0x58
129 
130 /* WatchDog Timers (1 secure, 3 GP) */
131 #define WD1_BASE            (0x4830C000)
132 #define WD2_BASE            (0x48314000)
133 #define WD3_BASE            (0x49030000)
134 
135 #define WIDR		0x00
136 #define WD_SYSCONFIG	0x10
137 #define WD_SYSSTATUS	0x14
138 #define WISR		0x18
139 #define WIER		0x1C
140 #define WCLR		0x24
141 #define WCRR		0x28
142 #define WLDR		0x2C
143 #define WTGR		0x30
144 #define WWPS		0x34
145 #define WSPR		0x48
146 
147 #define W_PEND_WCLR	(1<<0)
148 #define W_PEND_WCRR	(1<<1)
149 #define W_PEND_WLDR	(1<<2)
150 #define W_PEND_WTGR	(1<<3)
151 #define W_PEND_WSPR	(1<<4)
152 
153 #define WD_UNLOCK1      0xAAAA
154 #define WD_UNLOCK2      0x5555
155 
156 /* 32KTIMER */
157 #define TIMER32K_BASE		(L4_BASE + 0x320000)
158 #define TIMER32K_REV		(TIMER32K_BASE + 0x00)
159 #define TIMER32K_CR			(TIMER32K_BASE + 0x10)
160 
161 /* UART */
162 #define OMAP_UART1_BASE     (L4_BASE + 0x6a000)
163 #define OMAP_UART2_BASE     (L4_BASE + 0x6c000)
164 #define OMAP_UART3_BASE     (L4_BASE + 0x01020000)
165 
166 #define UART_RHR    0
167 #define UART_THR    0
168 #define UART_DLL    0
169 #define UART_IER    1
170 #define UART_DLH    1
171 #define UART_IIR    2
172 #define UART_FCR    2
173 #define UART_EFR    2
174 #define UART_LCR    3
175 #define UART_MCR    4
176 #define UART_LSR    5
177 #define UART_MSR    6
178 #define UART_TCR    6
179 #define UART_SPR    7
180 #define UART_TLR    7
181 #define UART_MDR1   8
182 #define UART_MDR2   9
183 #define UART_SFLSR  10
184 #define UART_RESUME 11
185 #define UART_TXFLL  10
186 #define UART_TXFLH  11
187 #define UART_SFREGL 12
188 #define UART_SFREGH 13
189 #define UART_RXFLL  12
190 #define UART_RXFLH  13
191 #define UART_BLR    14
192 #define UART_UASR   14
193 #define UART_ACREG  15
194 #define UART_SCR    16
195 #define UART_SSR    17
196 #define UART_EBLR   18
197 #define UART_MVR    19
198 #define UART_SYSC   20
199 
200 /* MPU INTC */
201 #define INTC_BASE			(L4_BASE + 0x200000)
202 #define INTC_REVISION		(INTC_BASE + 0x000)
203 #define INTC_SYSCONFIG		(INTC_BASE + 0x010)
204 #define INTC_SYSSTATUS		(INTC_BASE + 0x014)
205 #define INTC_SIR_IRQ		(INTC_BASE + 0x040)
206 #define INTC_SIR_FIQ		(INTC_BASE + 0x044)
207 #define INTC_CONTROL		(INTC_BASE + 0x048)
208 #define INTC_PROTECTION		(INTC_BASE + 0x04C)
209 #define INTC_IDLE			(INTC_BASE + 0x050)
210 #define INTC_IRQ_PRIORITY	(INTC_BASE + 0x060)
211 #define INTC_FIQ_PRIORITY	(INTC_BASE + 0x064)
212 #define INTC_THRESHOLD		(INTC_BASE + 0x068)
213 #define INTC_ITR(n)			(INTC_BASE + 0x080 + (n) * 0x20)
214 #define INTC_MIR(n)			(INTC_BASE + 0x084 + (n) * 0x20)
215 #define INTC_MIR_CLEAR(n)	(INTC_BASE + 0x088 + (n) * 0x20)
216 #define INTC_MIR_SET(n)		(INTC_BASE + 0x08C + (n) * 0x20)
217 #define INTC_ISR_SET(n)		(INTC_BASE + 0x090 + (n) * 0x20)
218 #define INTC_ISR_CLEAR(n)	(INTC_BASE + 0x094 + (n) * 0x20)
219 #define INTC_PENDING_IRQ(n)	(INTC_BASE + 0x098 + (n) * 0x20)
220 #define INTC_PENDING_FIQ(n)	(INTC_BASE + 0x09C + (n) * 0x20)
221 #define INTC_ILR(n)			(INTC_BASE + 0x100 + (n) * 4)
222 
223 /* interrupts */
224 #define INT_VECTORS 		96
225 #define GPT2_IRQ			38
226 
227 /* HS USB */
228 #define USB_HS_BASE			(L4_BASE + 0xab000)
229 
230 /* USB OTG */
231 #define OTG_BASE			(L4_BASE + 0xab400)
232 
233 #define OTG_REVISION		(OTG_BASE + 0x00)
234 #define OTG_SYSCONFIG		(OTG_BASE + 0x04)
235 #define OTG_SYSSTATUS		(OTG_BASE + 0x08)
236 #define OTG_INTERFSEL		(OTG_BASE + 0x0C)
237 #define OTG_SIMENABLE		(OTG_BASE + 0x10)
238 #define OTG_FORCESTDBY		(OTG_BASE + 0x14)
239 
240 /* I2C */
241 #define I2C1_BASE		(L4_BASE + 0x70000)
242 #define I2C2_BASE		(L4_BASE + 0x72000)
243 #define I2C3_BASE		(L4_BASE + 0x60000)
244 
245 #define I2C_REV				(0x00)
246 #define I2C_IE				(0x04)
247 #define I2C_STAT			(0x08)
248 #define I2C_WE				(0x0C)
249 #define I2C_SYSS			(0x10)
250 #define I2C_BUF				(0x14)
251 #define I2C_CNT				(0x18)
252 #define I2C_DATA			(0x1C)
253 #define I2C_SYSC			(0x20)
254 #define I2C_CON				(0x24)
255 #define I2C_OA0				(0x28)
256 #define I2C_SA				(0x2C)
257 #define I2C_PSC				(0x30)
258 #define I2C_SCLL			(0x34)
259 #define I2C_SCLH			(0x38)
260 #define I2C_SYSTEST			(0x3C)
261 #define I2C_BUFSTAT			(0x40)
262 #define I2C_OA1				(0x44)
263 #define I2C_OA2				(0x48)
264 #define I2C_OA3				(0x4C)
265 #define I2C_ACTOA			(0x50)
266 #define I2C_SBLOCK			(0x54)
267 
268 /* GPIO */
269 #define GPIO1_BASE 0x48310000
270 #define GPIO2_BASE 0x49050000
271 #define GPIO3_BASE 0x49052000
272 #define GPIO4_BASE 0x49054000
273 #define GPIO5_BASE 0x49056000
274 #define GPIO6_BASE 0x49058000
275 
276 /* (incomplete) */
277 #define GPIO_OE 0x034
278 #define GPIO_DATAIN 0x038
279 #define GPIO_DATAOUT 0x03C
280 #define GPIO_SETDATAOUT 0x094
281 
282 #endif
283 
284