aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-shmobile/setup-sh73a0.c
diff options
context:
space:
mode:
authorMagnus Damm <damm@opensource.se>2010-11-17 05:59:31 -0500
committerPaul Mundt <lethal@linux-sh.org>2010-11-18 01:45:21 -0500
commit6d9598e24d50a8c72f48a3864327484a30aaee44 (patch)
tree4ff6d28a73306df0fe4853833010ca58a8ab8450 /arch/arm/mach-shmobile/setup-sh73a0.c
parent6d72ad35f1bfaf6e52ca7133cb51ce0e36f17528 (diff)
ARM: mach-shmobile: Initial AG5 and AG5EVM support
This patch adds initial support for Renesas SH-Mobile AG5. At this point the AG5 CPU support is limited to the ARM core, SCIF serial and a CMT timer together with L2 cache and the GIC. The AG5EVM board also supports Ethernet. Future patches will add support for GPIO, INTCS, CPGA and platform data / driver updates for devices such as IIC, LCDC, FSI, KEYSC, CEU and SDHI among others. The code in entry-macro.S will be cleaned up when the ARM IRQ demux code improvements have been merged. Depends on the AG5EVM mach-type recently registered but not yet present in arch/arm/tools/mach-types. As the AG5EVM board comes with 512MiB memory it is recommended to turn on HIGHMEM. Many thanks to Yoshii-san for initial bring up. Signed-off-by: Magnus Damm <damm@opensource.se> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/arm/mach-shmobile/setup-sh73a0.c')
-rw-r--r--arch/arm/mach-shmobile/setup-sh73a0.c234
1 files changed, 234 insertions, 0 deletions
diff --git a/arch/arm/mach-shmobile/setup-sh73a0.c b/arch/arm/mach-shmobile/setup-sh73a0.c
new file mode 100644
index 000000000000..0bc110615aa9
--- /dev/null
+++ b/arch/arm/mach-shmobile/setup-sh73a0.c
@@ -0,0 +1,234 @@
1/*
2 * sh73a0 processor support
3 *
4 * Copyright (C) 2010 Takashi Yoshii
5 * Copyright (C) 2010 Magnus Damm
6 * Copyright (C) 2008 Yoshihiro Shimoda
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; version 2 of the License.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20 */
21#include <linux/kernel.h>
22#include <linux/init.h>
23#include <linux/interrupt.h>
24#include <linux/irq.h>
25#include <linux/platform_device.h>
26#include <linux/delay.h>
27#include <linux/input.h>
28#include <linux/io.h>
29#include <linux/serial_sci.h>
30#include <linux/sh_intc.h>
31#include <linux/sh_timer.h>
32#include <mach/hardware.h>
33#include <asm/mach-types.h>
34#include <asm/mach/arch.h>
35
36static struct plat_sci_port scif0_platform_data = {
37 .mapbase = 0xe6c40000,
38 .flags = UPF_BOOT_AUTOCONF,
39 .type = PORT_SCIFA,
40 .irqs = { gic_spi(72), gic_spi(72),
41 gic_spi(72), gic_spi(72) },
42};
43
44static struct platform_device scif0_device = {
45 .name = "sh-sci",
46 .id = 0,
47 .dev = {
48 .platform_data = &scif0_platform_data,
49 },
50};
51
52static struct plat_sci_port scif1_platform_data = {
53 .mapbase = 0xe6c50000,
54 .flags = UPF_BOOT_AUTOCONF,
55 .type = PORT_SCIFA,
56 .irqs = { gic_spi(73), gic_spi(73),
57 gic_spi(73), gic_spi(73) },
58};
59
60static struct platform_device scif1_device = {
61 .name = "sh-sci",
62 .id = 1,
63 .dev = {
64 .platform_data = &scif1_platform_data,
65 },
66};
67
68static struct plat_sci_port scif2_platform_data = {
69 .mapbase = 0xe6c60000,
70 .flags = UPF_BOOT_AUTOCONF,
71 .type = PORT_SCIFA,
72 .irqs = { gic_spi(74), gic_spi(74),
73 gic_spi(74), gic_spi(74) },
74};
75
76static struct platform_device scif2_device = {
77 .name = "sh-sci",
78 .id = 2,
79 .dev = {
80 .platform_data = &scif2_platform_data,
81 },
82};
83
84static struct plat_sci_port scif3_platform_data = {
85 .mapbase = 0xe6c70000,
86 .flags = UPF_BOOT_AUTOCONF,
87 .type = PORT_SCIFA,
88 .irqs = { gic_spi(75), gic_spi(75),
89 gic_spi(75), gic_spi(75) },
90};
91
92static struct platform_device scif3_device = {
93 .name = "sh-sci",
94 .id = 3,
95 .dev = {
96 .platform_data = &scif3_platform_data,
97 },
98};
99
100static struct plat_sci_port scif4_platform_data = {
101 .mapbase = 0xe6c80000,
102 .flags = UPF_BOOT_AUTOCONF,
103 .type = PORT_SCIFA,
104 .irqs = { gic_spi(78), gic_spi(78),
105 gic_spi(78), gic_spi(78) },
106};
107
108static struct platform_device scif4_device = {
109 .name = "sh-sci",
110 .id = 4,
111 .dev = {
112 .platform_data = &scif4_platform_data,
113 },
114};
115
116static struct plat_sci_port scif5_platform_data = {
117 .mapbase = 0xe6cb0000,
118 .flags = UPF_BOOT_AUTOCONF,
119 .type = PORT_SCIFA,
120 .irqs = { gic_spi(79), gic_spi(79),
121 gic_spi(79), gic_spi(79) },
122};
123
124static struct platform_device scif5_device = {
125 .name = "sh-sci",
126 .id = 5,
127 .dev = {
128 .platform_data = &scif5_platform_data,
129 },
130};
131
132static struct plat_sci_port scif6_platform_data = {
133 .mapbase = 0xe6cc0000,
134 .flags = UPF_BOOT_AUTOCONF,
135 .type = PORT_SCIFA,
136 .irqs = { gic_spi(156), gic_spi(156),
137 gic_spi(156), gic_spi(156) },
138};
139
140static struct platform_device scif6_device = {
141 .name = "sh-sci",
142 .id = 6,
143 .dev = {
144 .platform_data = &scif6_platform_data,
145 },
146};
147
148static struct plat_sci_port scif7_platform_data = {
149 .mapbase = 0xe6cd0000,
150 .flags = UPF_BOOT_AUTOCONF,
151 .type = PORT_SCIFA,
152 .irqs = { gic_spi(143), gic_spi(143),
153 gic_spi(143), gic_spi(143) },
154};
155
156static struct platform_device scif7_device = {
157 .name = "sh-sci",
158 .id = 7,
159 .dev = {
160 .platform_data = &scif7_platform_data,
161 },
162};
163
164static struct plat_sci_port scif8_platform_data = {
165 .mapbase = 0xe6c30000,
166 .flags = UPF_BOOT_AUTOCONF,
167 .type = PORT_SCIFB,
168 .irqs = { gic_spi(80), gic_spi(80),
169 gic_spi(80), gic_spi(80) },
170};
171
172static struct platform_device scif8_device = {
173 .name = "sh-sci",
174 .id = 8,
175 .dev = {
176 .platform_data = &scif8_platform_data,
177 },
178};
179
180static struct sh_timer_config cmt10_platform_data = {
181 .name = "CMT10",
182 .channel_offset = 0x10,
183 .timer_bit = 0,
184 .clockevent_rating = 125,
185 .clocksource_rating = 125,
186};
187
188static struct resource cmt10_resources[] = {
189 [0] = {
190 .name = "CMT10",
191 .start = 0xe6138010,
192 .end = 0xe613801b,
193 .flags = IORESOURCE_MEM,
194 },
195 [1] = {
196 .start = gic_spi(65),
197 .flags = IORESOURCE_IRQ,
198 },
199};
200
201static struct platform_device cmt10_device = {
202 .name = "sh_cmt",
203 .id = 10,
204 .dev = {
205 .platform_data = &cmt10_platform_data,
206 },
207 .resource = cmt10_resources,
208 .num_resources = ARRAY_SIZE(cmt10_resources),
209};
210
211static struct platform_device *sh73a0_early_devices[] __initdata = {
212 &scif0_device,
213 &scif1_device,
214 &scif2_device,
215 &scif3_device,
216 &scif4_device,
217 &scif5_device,
218 &scif6_device,
219 &scif7_device,
220 &scif8_device,
221 &cmt10_device,
222};
223
224void __init sh73a0_add_standard_devices(void)
225{
226 platform_add_devices(sh73a0_early_devices,
227 ARRAY_SIZE(sh73a0_early_devices));
228}
229
230void __init sh73a0_add_early_devices(void)
231{
232 early_platform_add_devices(sh73a0_early_devices,
233 ARRAY_SIZE(sh73a0_early_devices));
234}