initial commit, pull in sys/arch/armv7/omap
[bbb-pru.git] / omap.c
CommitLineData
cf3c20ae 1/* $OpenBSD: omap.c,v 1.9 2016/05/02 15:27:24 patrick Exp $ */
2/*
3 * Copyright (c) 2005,2008 Dale Rahn <drahn@openbsd.com>
4 *
5 * Permission to use, copy, modify, and distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 */
17
18#include <sys/param.h>
19#include <sys/systm.h>
20
21#include <machine/bus.h>
22
23#include <arm/mainbus/mainbus.h>
24#include <armv7/armv7/armv7var.h>
25
26int omap_match(struct device *, void *, void *);
27void omap3_init();
28void omap4_init();
29void am335x_init();
30
31struct cfattach omap_ca = {
32 sizeof(struct armv7_softc), omap_match, armv7_attach
33};
34
35struct cfdriver omap_cd = {
36 NULL, "omap", DV_DULL
37};
38
39struct board_dev beagleboard_devs[] = {
40 { "prcm", 0 },
41 { "intc", 0 },
42 { "gptimer", 0 },
43 { "gptimer", 1 },
44 { "omdog", 0 },
45 { "omgpio", 0 },
46 { "omgpio", 1 },
47 { "omgpio", 2 },
48 { "omgpio", 3 },
49 { "omgpio", 4 },
50 { "omgpio", 5 },
51 { "ommmc", 0 }, /* HSMMC1 */
52 { "com", 2 }, /* UART3 */
53 { NULL, 0 }
54};
55
56struct board_dev beaglebone_devs[] = {
57 { "prcm", 0 },
58 { "sitaracm", 0 },
59 { "intc", 0 },
60 { "edma", 0 },
61 { "dmtimer", 0 },
62 { "dmtimer", 1 },
63 { "omdog", 0 },
64 { "omgpio", 0 },
65 { "omgpio", 1 },
66 { "omgpio", 2 },
67 { "omgpio", 3 },
68 { "tiiic", 0 },
69 { "tiiic", 1 },
70 { "tiiic", 2 },
71 { "ommmc", 0 }, /* HSMMC0 */
72 { "ommmc", 1 }, /* HSMMC1 */
73 { "com", 0 }, /* UART0 */
74 { "cpsw", 0 },
75 { NULL, 0 }
76};
77
78struct board_dev overo_devs[] = {
79 { "prcm", 0 },
80 { "intc", 0 },
81 { "gptimer", 0 },
82 { "gptimer", 1 },
83 { "omdog", 0 },
84 { "omgpio", 0 },
85 { "omgpio", 1 },
86 { "omgpio", 2 },
87 { "omgpio", 3 },
88 { "omgpio", 4 },
89 { "omgpio", 5 },
90 { "ommmc", 0 }, /* HSMMC1 */
91 { "com", 2 }, /* UART3 */
92 { NULL, 0 }
93};
94
95struct board_dev pandaboard_devs[] = {
96 { "omapid", 0 },
97 { "prcm", 0 },
98 { "omdog", 0 },
99 { "omgpio", 0 },
100 { "omgpio", 1 },
101 { "omgpio", 2 },
102 { "omgpio", 3 },
103 { "omgpio", 4 },
104 { "omgpio", 5 },
105 { "ommmc", 0 }, /* HSMMC1 */
106 { "com", 2 }, /* UART3 */
107 { "ehci", 0 },
108 { NULL, 0 }
109};
110
111struct armv7_board omap_boards[] = {
112 {
113 BOARD_ID_OMAP3_BEAGLE,
114 "TI OMAP3 BeagleBoard",
115 beagleboard_devs,
116 omap3_init,
117 },
118 {
119 BOARD_ID_AM335X_BEAGLEBONE,
120 "TI AM335x BeagleBone",
121 beaglebone_devs,
122 am335x_init,
123 },
124 {
125 BOARD_ID_OMAP3_OVERO,
126 "Gumstix OMAP3 Overo",
127 overo_devs,
128 omap3_init,
129 },
130 {
131 BOARD_ID_OMAP4_PANDA,
132 "TI OMAP4 PandaBoard",
133 pandaboard_devs,
134 omap4_init,
135 },
136 { 0, NULL, NULL, NULL },
137};
138
139struct board_dev *
140omap_board_devs(void)
141{
142 int i;
143
144 for (i = 0; omap_boards[i].name != NULL; i++) {
145 if (omap_boards[i].board_id == board_id)
146 return (omap_boards[i].devs);
147 }
148 return (NULL);
149}
150
151void
152omap_board_init(void)
153{
154 int i;
155
156 for (i = 0; omap_boards[i].name != NULL; i++) {
157 if (omap_boards[i].board_id == board_id) {
158 omap_boards[i].init();
159 break;
160 }
161 }
162}
163
164const char *
165omap_board_name(void)
166{
167 int i;
168
169 for (i = 0; omap_boards[i].name != NULL; i++) {
170 if (omap_boards[i].board_id == board_id)
171 return (omap_boards[i].name);
172 }
173 return (NULL);
174}
175
176int
177omap_match(struct device *parent, void *cfdata, void *aux)
178{
179 union mainbus_attach_args *ma = (union mainbus_attach_args *)aux;
180 struct cfdata *cf = (struct cfdata *)cfdata;
181
182 if (ma->ma_name == NULL)
183 return (0);
184
185 if (strcmp(cf->cf_driver->cd_name, ma->ma_name) != 0)
186 return (0);
187
188 return (omap_board_devs() != NULL);
189}