xref: /openbsd-src/sys/arch/armv7/omap/omap3.c (revision f2da64fbbbf1b03f09f390ab01267c93dfd77c4c)
1 /* $OpenBSD: omap3.c,v 1.3 2016/07/10 02:55:15 jsg 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/types.h>
20 #include <sys/param.h>
21 
22 #include <machine/bus.h>
23 
24 #include <armv7/armv7/armv7var.h>
25 
26 #define PRCM_ADDR	0x48004000
27 #define PRCM_SIZE	0x2000
28 
29 #define INTC_ADDR	0x48200000
30 #define INTC_SIZE	0x200
31 
32 #define GPTIMERx_SIZE	0x100
33 #define GPTIMER1_ADDR	0x48318000
34 #define GPTIMER1_IRQ	37
35 #define GPTIMER2_ADDR	0x49032000
36 #define GPTIMER2_IRQ	38
37 
38 #define GPIOx_SIZE	0x1000
39 #define GPIO1_ADDR	0x48310000
40 #define GPIO2_ADDR	0x49050000
41 #define GPIO3_ADDR	0x49052000
42 #define GPIO4_ADDR	0x49054000
43 #define GPIO5_ADDR	0x49056000
44 #define GPIO6_ADDR	0x49058000
45 
46 #define GPIO1_IRQ	29
47 #define GPIO2_IRQ	30
48 #define GPIO3_IRQ	31
49 #define GPIO4_IRQ	32
50 #define GPIO5_IRQ	33
51 #define GPIO6_IRQ	34
52 
53 #define USBTLL_ADDR	0x48062000
54 #define USBTLL_SIZE	0x1000
55 
56 struct armv7_dev omap3_devs[] = {
57 
58 	/*
59 	 * Power, Reset and Clock Manager
60 	 */
61 
62 	{ .name = "prcm",
63 	  .unit = 0,
64 	  .mem = { { PRCM_ADDR, PRCM_SIZE } },
65 	},
66 
67 	/*
68 	 * Interrupt Controller
69 	 */
70 
71 	{ .name = "intc",
72 	  .unit = 0,
73 	  .mem = { { INTC_ADDR, INTC_SIZE } },
74 	},
75 
76 	/*
77 	 * General Purpose Timers
78 	 */
79 
80 	{ .name = "gptimer",
81 	  .unit = 1,			/* XXX see gptimer.c */
82 	  .mem = { { GPTIMER1_ADDR, GPTIMERx_SIZE } },
83 	  .irq = { GPTIMER1_IRQ }
84 	},
85 
86 	{ .name = "gptimer",
87 	  .unit = 0,			/* XXX see gptimer.c */
88 	  .mem = { { GPTIMER2_ADDR, GPTIMERx_SIZE } },
89 	  .irq = { GPTIMER2_IRQ }
90 	},
91 
92 	/*
93 	 * GPIO
94 	 */
95 
96 	{ .name = "omgpio",
97 	  .unit = 0,
98 	  .mem = { { GPIO1_ADDR, GPIOx_SIZE } },
99 	  .irq = { GPIO1_IRQ }
100 	},
101 
102 	{ .name = "omgpio",
103 	  .unit = 1,
104 	  .mem = { { GPIO2_ADDR, GPIOx_SIZE } },
105 	  .irq = { GPIO2_IRQ }
106 	},
107 
108 	{ .name = "omgpio",
109 	  .unit = 2,
110 	  .mem = { { GPIO3_ADDR, GPIOx_SIZE } },
111 	  .irq = { GPIO3_IRQ }
112 	},
113 
114 	{ .name = "omgpio",
115 	  .unit = 3,
116 	  .mem = { { GPIO4_ADDR, GPIOx_SIZE } },
117 	  .irq = { GPIO4_IRQ }
118 	},
119 
120 	{ .name = "omgpio",
121 	  .unit = 4,
122 	  .mem = { { GPIO5_ADDR, GPIOx_SIZE } },
123 	  .irq = { GPIO5_IRQ }
124 	},
125 
126 	{ .name = "omgpio",
127 	  .unit = 5,
128 	  .mem = { { GPIO6_ADDR, GPIOx_SIZE } },
129 	  .irq = { GPIO6_IRQ }
130 	},
131 
132 	/*
133 	 * USB
134 	 */
135 
136 	{ .name = "omusbtll",
137 	  .unit = 0,
138 	  .mem = { { USBTLL_ADDR, USBTLL_SIZE } },
139 	},
140 
141 	/* Terminator */
142 	{ .name = NULL,
143 	  .unit = 0,
144 	}
145 };
146 
147 void
148 omap3_init(void)
149 {
150 	armv7_set_devs(omap3_devs);
151 }
152