am335x.c revision 1.8
1/* $OpenBSD: am335x.c,v 1.8 2016/07/10 02:55:15 jsg Exp $ */
2
3/*
4 * Copyright (c) 2011 Uwe Stuehler <uwe@openbsd.org>
5 * Copyright (c) 2013 Raphael Graf <r@undefined.ch>
6 *
7 * Permission to use, copy, modify, and distribute this software for any
8 * purpose with or without fee is hereby granted, provided that the above
9 * copyright notice and this permission notice appear in all copies.
10 *
11 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18 */
19
20#include <sys/types.h>
21#include <sys/param.h>
22#include <machine/bus.h>
23
24#include <armv7/armv7/armv7var.h>
25
26#define PRCM_SIZE	0x2000
27#define PRCM_ADDR	0x44E00000
28
29#define SCM_SIZE	0x2000
30#define SCM_ADDR	0x44E10000
31
32#define INTC_SIZE	0x300
33#define INTC_ADDR	0x48200000
34
35#define DMTIMERx_SIZE	0x80
36#define DMTIMER0_ADDR	0x44E05000
37#define DMTIMER1_ADDR	0x44E31000	/* 1MS */
38#define DMTIMER2_ADDR	0x48040000
39#define DMTIMER3_ADDR	0x48042000
40#define DMTIMER4_ADDR	0x48044000
41#define DMTIMER5_ADDR	0x48046000
42#define DMTIMER6_ADDR	0x48048000
43#define DMTIMER7_ADDR	0x4804A000
44#define DMTIMER0_IRQ	66
45#define DMTIMER1_IRQ	67
46#define DMTIMER2_IRQ	68
47#define DMTIMER3_IRQ	69
48#define DMTIMER4_IRQ	92
49#define DMTIMER5_IRQ	93
50#define DMTIMER6_IRQ	94
51#define DMTIMER7_IRQ	95
52
53#define GPIOx_SIZE	0x200
54#define GPIO0_ADDR	0x44E07000
55#define GPIO1_ADDR	0x4804C000
56#define GPIO2_ADDR	0x481AC000
57#define GPIO3_ADDR	0x481AE000
58#define GPIO0_IRQ	96
59#define GPIO1_IRQ	98
60#define GPIO2_IRQ	32
61#define GPIO3_IRQ	62
62
63#define TPCC_SIZE	0x100000
64#define TPCC_ADDR	0x49000000
65#define TPTC0_ADDR	0x49800000
66#define TPTC1_ADDR	0x49900000
67#define TPTC2_ADDR	0x49a00000
68#define EDMACOMP_IRQ	12
69#define EDMAMPERR_IRQ	13
70#define EDMAERR_IRQ	14
71
72struct armv7_dev am335x_devs[] = {
73
74	/*
75	 * Power, Reset and Clock Manager
76	 */
77
78	{ .name = "prcm",
79	  .unit = 0,
80	  .mem = { { PRCM_ADDR, PRCM_SIZE } },
81	},
82
83	/*
84	 * System Control Module
85	 */
86
87	{ .name = "sitaracm",
88	  .unit = 0,
89	  .mem = { { SCM_ADDR, SCM_SIZE } },
90	},
91
92	/*
93	 * Interrupt Controller
94	 */
95
96	{ .name = "intc",
97	  .unit = 0,
98	  .mem = { { INTC_ADDR, INTC_SIZE } },
99	},
100
101	/*
102	 * EDMA Controller
103	 */
104	{ .name = "edma",
105	  .unit = 0,
106	  .mem = { { TPCC_ADDR, TPCC_SIZE } },
107	  .irq = { EDMACOMP_IRQ }
108	},
109
110	/*
111	 * General Purpose Timers
112	 */
113
114	{ .name = "dmtimer",
115	  .unit = 0,
116	  .mem = { { DMTIMER2_ADDR, DMTIMERx_SIZE } },
117	  .irq = { DMTIMER2_IRQ }
118	},
119
120	{ .name = "dmtimer",
121	  .unit = 1,
122	  .mem = { { DMTIMER3_ADDR, DMTIMERx_SIZE } },
123	  .irq = { DMTIMER3_IRQ }
124	},
125
126	/*
127	 * GPIO
128	 */
129
130	{ .name = "omgpio",
131	  .unit = 0,
132	  .mem = { { GPIO0_ADDR, GPIOx_SIZE } },
133	  .irq = { GPIO0_IRQ }
134	},
135
136	{ .name = "omgpio",
137	  .unit = 1,
138	  .mem = { { GPIO1_ADDR, GPIOx_SIZE } },
139	  .irq = { GPIO1_IRQ }
140	},
141
142	{ .name = "omgpio",
143	  .unit = 2,
144	  .mem = { { GPIO2_ADDR, GPIOx_SIZE } },
145	  .irq = { GPIO2_IRQ }
146	},
147
148	{ .name = "omgpio",
149	  .unit = 3,
150	  .mem = { { GPIO3_ADDR, GPIOx_SIZE } },
151	  .irq = { GPIO3_IRQ }
152	},
153
154	/* Terminator */
155	{ .name = NULL,
156	  .unit = 0
157	}
158};
159
160void
161am335x_init(void)
162{
163	armv7_set_devs(am335x_devs);
164}
165