xref: /openbsd/sys/arch/armv7/omap/omap4.c (revision a6445c1d)
1 /* $OpenBSD: omap4.c,v 1.3 2013/11/06 19:03:07 syl Exp $ */
2 
3 /*
4  * Copyright (c) 2011 Uwe Stuehler <uwe@openbsd.org>
5  *
6  * Permission to use, copy, modify, and distribute this software for any
7  * purpose with or without fee is hereby granted, provided that the above
8  * copyright notice and this permission notice appear in all copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17  */
18 
19 #include <sys/param.h>
20 #include <sys/systm.h>
21 #include <sys/device.h>
22 
23 #include <machine/bus.h>
24 
25 #include <armv7/armv7/armv7var.h>
26 
27 #define OMAPID_ADDR	0x4a002000
28 #define OMAPID_SIZE	0x1000
29 
30 #define WD_ADDR		0x4a314000
31 #define WD_SIZE		0x80
32 
33 #define GPIOx_SIZE	0x1000
34 #define GPIO1_ADDR	0x4a310000
35 #define GPIO2_ADDR	0x48055000
36 #define GPIO3_ADDR	0x48057000
37 #define GPIO4_ADDR	0x48059000
38 #define GPIO5_ADDR	0x4805b000
39 #define GPIO6_ADDR	0x4805d000
40 
41 #define GPIO1_IRQ	29
42 #define GPIO2_IRQ	30
43 #define GPIO3_IRQ	31
44 #define GPIO4_IRQ	32
45 #define GPIO5_IRQ	33
46 #define GPIO6_IRQ	34
47 
48 #define UARTx_SIZE	0x400
49 #define UART1_ADDR	0x4806A000
50 #define UART2_ADDR	0x4806C000
51 #define UART3_ADDR	0x48020000
52 #define UART4_ADDR	0x4806E000
53 
54 #define UART1_IRQ	72
55 #define UART2_IRQ	73
56 #define UART3_IRQ	74
57 #define UART4_IRQ	70
58 
59 #define HSMMCx_SIZE	0x200
60 #define HSMMC1_ADDR	0x4809c100
61 #define HSMMC1_IRQ	83
62 
63 #define PRM_ADDR	0x4a306000
64 #define PRM_SIZE	0x2000
65 #define CM1_ADDR	0x4a004000
66 #define CM1_SIZE	0x1000
67 #define CM2_ADDR	0x4a008000
68 #define CM2_SIZE	0x2000
69 #define SCRM_ADDR	0x4a30a000
70 #define SCRM_SIZE	0x1000
71 #define PCNF1_ADDR	0x4a100000
72 #define PCNF1_SIZE	0x1000
73 #define PCNF2_ADDR	0x4a31e000
74 #define PCNF2_SIZE	0x1000
75 
76 #define HSUSBHOST_ADDR	0x4a064000
77 #define HSUSBHOST_SIZE	0x800
78 #define USBEHCI_ADDR	0x4a064c00
79 #define USBEHCI_SIZE	0x400
80 #define USBOHCI_ADDR	0x4a064800
81 #define USBOHCI_SIZE	0x400
82 #define USBEHCI_IRQ	77
83 
84 struct armv7_dev omap4_devs[] = {
85 
86 	/*
87 	 * Power, Reset and Clock Manager
88 	 */
89 
90 	{ .name = "prcm",
91 	  .unit = 0,
92 	  .mem = {
93 	    { PRM_ADDR, PRM_SIZE },
94 	    { CM1_ADDR, CM1_SIZE },
95 	    { CM2_ADDR, CM2_SIZE },
96 	  },
97 	},
98 
99 	/*
100 	 * OMAP identification registers/fuses
101 	 */
102 
103 	{ .name = "omapid",
104 	  .unit = 0,
105 	  .mem = { { OMAPID_ADDR, OMAPID_SIZE } },
106 	},
107 
108 	/*
109 	 * GPIO
110 	 */
111 
112 	{ .name = "omgpio",
113 	  .unit = 0,
114 	  .mem = { { GPIO1_ADDR, GPIOx_SIZE } },
115 	  .irq = { GPIO1_IRQ }
116 	},
117 
118 	{ .name = "omgpio",
119 	  .unit = 1,
120 	  .mem = { { GPIO2_ADDR, GPIOx_SIZE } },
121 	  .irq = { GPIO2_IRQ }
122 	},
123 
124 	{ .name = "omgpio",
125 	  .unit = 2,
126 	  .mem = { { GPIO3_ADDR, GPIOx_SIZE } },
127 	  .irq = { GPIO3_IRQ }
128 	},
129 
130 	{ .name = "omgpio",
131 	  .unit = 3,
132 	  .mem = { { GPIO4_ADDR, GPIOx_SIZE } },
133 	  .irq = { GPIO4_IRQ }
134 	},
135 
136 	{ .name = "omgpio",
137 	  .unit = 4,
138 	  .mem = { { GPIO5_ADDR, GPIOx_SIZE } },
139 	  .irq = { GPIO5_IRQ }
140 	},
141 
142 	{ .name = "omgpio",
143 	  .unit = 5,
144 	  .mem = { { GPIO6_ADDR, GPIOx_SIZE } },
145 	  .irq = { GPIO6_IRQ }
146 	},
147 
148 	/*
149 	 * Watchdog Timer
150 	 */
151 
152 	{ .name = "omdog",
153 	  .unit = 0,
154 	  .mem = { { WD_ADDR, WD_SIZE } }
155 	},
156 
157 	/*
158 	 * UART
159 	 */
160 
161 	{ .name = "com",
162 	  .unit = 2,
163 	  .mem = { { UART3_ADDR, UARTx_SIZE } },
164 	  .irq = { UART3_IRQ }
165 	},
166 
167 	/*
168 	 * MMC
169 	 */
170 
171 	{ .name = "ommmc",
172 	  .unit = 0,
173 	  .mem = { { HSMMC1_ADDR, HSMMCx_SIZE } },
174 	  .irq = { HSMMC1_IRQ }
175 	},
176 
177 	/*
178 	 * USB
179 	 */
180 
181 	{ .name = "ehci",
182 	  .unit = 0,
183 	  .mem = {
184 		  { USBEHCI_ADDR, USBEHCI_SIZE },
185 		  { HSUSBHOST_ADDR, HSUSBHOST_SIZE },
186 	  },
187 	  .irq = { USBEHCI_IRQ }
188 	},
189 
190 	/* Terminator */
191 	{ .name = NULL,
192 	  .unit = 0,
193 	}
194 };
195 
196 void
197 omap4_init(void)
198 {
199 	armv7_set_devs(omap4_devs);
200 }
201