141504c39SPaul Mundt /*
241504c39SPaul Mundt  * SH7770 Setup
341504c39SPaul Mundt  *
42163b4cbSPaul Mundt  *  Copyright (C) 2006 - 2008  Paul Mundt
541504c39SPaul Mundt  *
641504c39SPaul Mundt  * This file is subject to the terms and conditions of the GNU General Public
741504c39SPaul Mundt  * License.  See the file "COPYING" in the main directory of this archive
841504c39SPaul Mundt  * for more details.
941504c39SPaul Mundt  */
1041504c39SPaul Mundt #include <linux/platform_device.h>
1141504c39SPaul Mundt #include <linux/init.h>
1241504c39SPaul Mundt #include <linux/serial.h>
1396de1a8fSPaul Mundt #include <linux/serial_sci.h>
14f251935eSMagnus Damm #include <linux/sh_timer.h>
1541504c39SPaul Mundt 
1641504c39SPaul Mundt static struct plat_sci_port sci_platform_data[] = {
1741504c39SPaul Mundt 	{
1841504c39SPaul Mundt 		.mapbase	= 0xff923000,
1941504c39SPaul Mundt 		.flags		= UPF_BOOT_AUTOCONF,
2041504c39SPaul Mundt 		.type		= PORT_SCIF,
2141504c39SPaul Mundt 		.irqs		= { 61, 61, 61, 61 },
2241504c39SPaul Mundt 	}, {
2341504c39SPaul Mundt 		.mapbase	= 0xff924000,
2441504c39SPaul Mundt 		.flags		= UPF_BOOT_AUTOCONF,
2541504c39SPaul Mundt 		.type		= PORT_SCIF,
2641504c39SPaul Mundt 		.irqs		= { 62, 62, 62, 62 },
2741504c39SPaul Mundt 	}, {
2841504c39SPaul Mundt 		.mapbase	= 0xff925000,
2941504c39SPaul Mundt 		.flags		= UPF_BOOT_AUTOCONF,
3041504c39SPaul Mundt 		.type		= PORT_SCIF,
3141504c39SPaul Mundt 		.irqs		= { 63, 63, 63, 63 },
3241504c39SPaul Mundt 	}, {
332163b4cbSPaul Mundt 		.mapbase	= 0xff926000,
342163b4cbSPaul Mundt 		.flags		= UPF_BOOT_AUTOCONF,
352163b4cbSPaul Mundt 		.type		= PORT_SCIF,
362163b4cbSPaul Mundt 		.irqs		= { 64, 64, 64, 64 },
372163b4cbSPaul Mundt 	}, {
382163b4cbSPaul Mundt 		.mapbase	= 0xff927000,
392163b4cbSPaul Mundt 		.flags		= UPF_BOOT_AUTOCONF,
402163b4cbSPaul Mundt 		.type		= PORT_SCIF,
412163b4cbSPaul Mundt 		.irqs		= { 65, 65, 65, 65 },
422163b4cbSPaul Mundt 	}, {
432163b4cbSPaul Mundt 		.mapbase	= 0xff928000,
442163b4cbSPaul Mundt 		.flags		= UPF_BOOT_AUTOCONF,
452163b4cbSPaul Mundt 		.type		= PORT_SCIF,
462163b4cbSPaul Mundt 		.irqs		= { 66, 66, 66, 66 },
472163b4cbSPaul Mundt 	}, {
482163b4cbSPaul Mundt 		.mapbase	= 0xff929000,
492163b4cbSPaul Mundt 		.flags		= UPF_BOOT_AUTOCONF,
502163b4cbSPaul Mundt 		.type		= PORT_SCIF,
512163b4cbSPaul Mundt 		.irqs		= { 67, 67, 67, 67 },
522163b4cbSPaul Mundt 	}, {
532163b4cbSPaul Mundt 		.mapbase	= 0xff92a000,
542163b4cbSPaul Mundt 		.flags		= UPF_BOOT_AUTOCONF,
552163b4cbSPaul Mundt 		.type		= PORT_SCIF,
562163b4cbSPaul Mundt 		.irqs		= { 68, 68, 68, 68 },
572163b4cbSPaul Mundt 	}, {
582163b4cbSPaul Mundt 		.mapbase	= 0xff92b000,
592163b4cbSPaul Mundt 		.flags		= UPF_BOOT_AUTOCONF,
602163b4cbSPaul Mundt 		.type		= PORT_SCIF,
612163b4cbSPaul Mundt 		.irqs		= { 69, 69, 69, 69 },
622163b4cbSPaul Mundt 	}, {
632163b4cbSPaul Mundt 		.mapbase	= 0xff92c000,
642163b4cbSPaul Mundt 		.flags		= UPF_BOOT_AUTOCONF,
652163b4cbSPaul Mundt 		.type		= PORT_SCIF,
662163b4cbSPaul Mundt 		.irqs		= { 70, 70, 70, 70 },
672163b4cbSPaul Mundt 	}, {
6841504c39SPaul Mundt 		.flags = 0,
6941504c39SPaul Mundt 	}
7041504c39SPaul Mundt };
7141504c39SPaul Mundt 
7241504c39SPaul Mundt static struct platform_device sci_device = {
7341504c39SPaul Mundt 	.name		= "sh-sci",
7441504c39SPaul Mundt 	.id		= -1,
7541504c39SPaul Mundt 	.dev		= {
7641504c39SPaul Mundt 		.platform_data	= sci_platform_data,
7741504c39SPaul Mundt 	},
7841504c39SPaul Mundt };
7941504c39SPaul Mundt 
80f251935eSMagnus Damm static struct sh_timer_config tmu0_platform_data = {
81f251935eSMagnus Damm 	.name = "TMU0",
82f251935eSMagnus Damm 	.channel_offset = 0x04,
83f251935eSMagnus Damm 	.timer_bit = 0,
84f251935eSMagnus Damm 	.clk = "module_clk",
85f251935eSMagnus Damm 	.clockevent_rating = 200,
86f251935eSMagnus Damm };
87f251935eSMagnus Damm 
88f251935eSMagnus Damm static struct resource tmu0_resources[] = {
89f251935eSMagnus Damm 	[0] = {
90f251935eSMagnus Damm 		.name	= "TMU0",
91f251935eSMagnus Damm 		.start	= 0xffd80008,
92f251935eSMagnus Damm 		.end	= 0xffd80013,
93f251935eSMagnus Damm 		.flags	= IORESOURCE_MEM,
94f251935eSMagnus Damm 	},
95f251935eSMagnus Damm 	[1] = {
96f251935eSMagnus Damm 		.start	= 16,
97f251935eSMagnus Damm 		.flags	= IORESOURCE_IRQ,
98f251935eSMagnus Damm 	},
99f251935eSMagnus Damm };
100f251935eSMagnus Damm 
101f251935eSMagnus Damm static struct platform_device tmu0_device = {
102f251935eSMagnus Damm 	.name		= "sh_tmu",
103f251935eSMagnus Damm 	.id		= 0,
104f251935eSMagnus Damm 	.dev = {
105f251935eSMagnus Damm 		.platform_data	= &tmu0_platform_data,
106f251935eSMagnus Damm 	},
107f251935eSMagnus Damm 	.resource	= tmu0_resources,
108f251935eSMagnus Damm 	.num_resources	= ARRAY_SIZE(tmu0_resources),
109f251935eSMagnus Damm };
110f251935eSMagnus Damm 
111f251935eSMagnus Damm static struct sh_timer_config tmu1_platform_data = {
112f251935eSMagnus Damm 	.name = "TMU1",
113f251935eSMagnus Damm 	.channel_offset = 0x10,
114f251935eSMagnus Damm 	.timer_bit = 1,
115f251935eSMagnus Damm 	.clk = "module_clk",
116f251935eSMagnus Damm 	.clocksource_rating = 200,
117f251935eSMagnus Damm };
118f251935eSMagnus Damm 
119f251935eSMagnus Damm static struct resource tmu1_resources[] = {
120f251935eSMagnus Damm 	[0] = {
121f251935eSMagnus Damm 		.name	= "TMU1",
122f251935eSMagnus Damm 		.start	= 0xffd80014,
123f251935eSMagnus Damm 		.end	= 0xffd8001f,
124f251935eSMagnus Damm 		.flags	= IORESOURCE_MEM,
125f251935eSMagnus Damm 	},
126f251935eSMagnus Damm 	[1] = {
127f251935eSMagnus Damm 		.start	= 17,
128f251935eSMagnus Damm 		.flags	= IORESOURCE_IRQ,
129f251935eSMagnus Damm 	},
130f251935eSMagnus Damm };
131f251935eSMagnus Damm 
132f251935eSMagnus Damm static struct platform_device tmu1_device = {
133f251935eSMagnus Damm 	.name		= "sh_tmu",
134f251935eSMagnus Damm 	.id		= 1,
135f251935eSMagnus Damm 	.dev = {
136f251935eSMagnus Damm 		.platform_data	= &tmu1_platform_data,
137f251935eSMagnus Damm 	},
138f251935eSMagnus Damm 	.resource	= tmu1_resources,
139f251935eSMagnus Damm 	.num_resources	= ARRAY_SIZE(tmu1_resources),
140f251935eSMagnus Damm };
141f251935eSMagnus Damm 
142f251935eSMagnus Damm static struct sh_timer_config tmu2_platform_data = {
143f251935eSMagnus Damm 	.name = "TMU2",
144f251935eSMagnus Damm 	.channel_offset = 0x1c,
145f251935eSMagnus Damm 	.timer_bit = 2,
146f251935eSMagnus Damm 	.clk = "module_clk",
147f251935eSMagnus Damm };
148f251935eSMagnus Damm 
149f251935eSMagnus Damm static struct resource tmu2_resources[] = {
150f251935eSMagnus Damm 	[0] = {
151f251935eSMagnus Damm 		.name	= "TMU2",
152f251935eSMagnus Damm 		.start	= 0xffd80020,
153f251935eSMagnus Damm 		.end	= 0xffd8002f,
154f251935eSMagnus Damm 		.flags	= IORESOURCE_MEM,
155f251935eSMagnus Damm 	},
156f251935eSMagnus Damm 	[1] = {
157f251935eSMagnus Damm 		.start	= 18,
158f251935eSMagnus Damm 		.flags	= IORESOURCE_IRQ,
159f251935eSMagnus Damm 	},
160f251935eSMagnus Damm };
161f251935eSMagnus Damm 
162f251935eSMagnus Damm static struct platform_device tmu2_device = {
163f251935eSMagnus Damm 	.name		= "sh_tmu",
164f251935eSMagnus Damm 	.id		= 2,
165f251935eSMagnus Damm 	.dev = {
166f251935eSMagnus Damm 		.platform_data	= &tmu2_platform_data,
167f251935eSMagnus Damm 	},
168f251935eSMagnus Damm 	.resource	= tmu2_resources,
169f251935eSMagnus Damm 	.num_resources	= ARRAY_SIZE(tmu2_resources),
170f251935eSMagnus Damm };
171f251935eSMagnus Damm 
172f251935eSMagnus Damm static struct sh_timer_config tmu3_platform_data = {
173f251935eSMagnus Damm 	.name = "TMU3",
174f251935eSMagnus Damm 	.channel_offset = 0x04,
175f251935eSMagnus Damm 	.timer_bit = 0,
176f251935eSMagnus Damm 	.clk = "module_clk",
177f251935eSMagnus Damm };
178f251935eSMagnus Damm 
179f251935eSMagnus Damm static struct resource tmu3_resources[] = {
180f251935eSMagnus Damm 	[0] = {
181f251935eSMagnus Damm 		.name	= "TMU3",
182f251935eSMagnus Damm 		.start	= 0xffd81008,
183f251935eSMagnus Damm 		.end	= 0xffd81013,
184f251935eSMagnus Damm 		.flags	= IORESOURCE_MEM,
185f251935eSMagnus Damm 	},
186f251935eSMagnus Damm 	[1] = {
187f251935eSMagnus Damm 		.start	= 19,
188f251935eSMagnus Damm 		.flags	= IORESOURCE_IRQ,
189f251935eSMagnus Damm 	},
190f251935eSMagnus Damm };
191f251935eSMagnus Damm 
192f251935eSMagnus Damm static struct platform_device tmu3_device = {
193f251935eSMagnus Damm 	.name		= "sh_tmu",
194f251935eSMagnus Damm 	.id		= 3,
195f251935eSMagnus Damm 	.dev = {
196f251935eSMagnus Damm 		.platform_data	= &tmu3_platform_data,
197f251935eSMagnus Damm 	},
198f251935eSMagnus Damm 	.resource	= tmu3_resources,
199f251935eSMagnus Damm 	.num_resources	= ARRAY_SIZE(tmu3_resources),
200f251935eSMagnus Damm };
201f251935eSMagnus Damm 
202f251935eSMagnus Damm static struct sh_timer_config tmu4_platform_data = {
203f251935eSMagnus Damm 	.name = "TMU4",
204f251935eSMagnus Damm 	.channel_offset = 0x10,
205f251935eSMagnus Damm 	.timer_bit = 1,
206f251935eSMagnus Damm 	.clk = "module_clk",
207f251935eSMagnus Damm };
208f251935eSMagnus Damm 
209f251935eSMagnus Damm static struct resource tmu4_resources[] = {
210f251935eSMagnus Damm 	[0] = {
211f251935eSMagnus Damm 		.name	= "TMU4",
212f251935eSMagnus Damm 		.start	= 0xffd81014,
213f251935eSMagnus Damm 		.end	= 0xffd8101f,
214f251935eSMagnus Damm 		.flags	= IORESOURCE_MEM,
215f251935eSMagnus Damm 	},
216f251935eSMagnus Damm 	[1] = {
217f251935eSMagnus Damm 		.start	= 20,
218f251935eSMagnus Damm 		.flags	= IORESOURCE_IRQ,
219f251935eSMagnus Damm 	},
220f251935eSMagnus Damm };
221f251935eSMagnus Damm 
222f251935eSMagnus Damm static struct platform_device tmu4_device = {
223f251935eSMagnus Damm 	.name		= "sh_tmu",
224f251935eSMagnus Damm 	.id		= 4,
225f251935eSMagnus Damm 	.dev = {
226f251935eSMagnus Damm 		.platform_data	= &tmu4_platform_data,
227f251935eSMagnus Damm 	},
228f251935eSMagnus Damm 	.resource	= tmu4_resources,
229f251935eSMagnus Damm 	.num_resources	= ARRAY_SIZE(tmu4_resources),
230f251935eSMagnus Damm };
231f251935eSMagnus Damm 
232f251935eSMagnus Damm static struct sh_timer_config tmu5_platform_data = {
233f251935eSMagnus Damm 	.name = "TMU5",
234f251935eSMagnus Damm 	.channel_offset = 0x1c,
235f251935eSMagnus Damm 	.timer_bit = 2,
236f251935eSMagnus Damm 	.clk = "module_clk",
237f251935eSMagnus Damm };
238f251935eSMagnus Damm 
239f251935eSMagnus Damm static struct resource tmu5_resources[] = {
240f251935eSMagnus Damm 	[0] = {
241f251935eSMagnus Damm 		.name	= "TMU5",
242f251935eSMagnus Damm 		.start	= 0xffd81020,
243f251935eSMagnus Damm 		.end	= 0xffd8102f,
244f251935eSMagnus Damm 		.flags	= IORESOURCE_MEM,
245f251935eSMagnus Damm 	},
246f251935eSMagnus Damm 	[1] = {
247f251935eSMagnus Damm 		.start	= 21,
248f251935eSMagnus Damm 		.flags	= IORESOURCE_IRQ,
249f251935eSMagnus Damm 	},
250f251935eSMagnus Damm };
251f251935eSMagnus Damm 
252f251935eSMagnus Damm static struct platform_device tmu5_device = {
253f251935eSMagnus Damm 	.name		= "sh_tmu",
254f251935eSMagnus Damm 	.id		= 5,
255f251935eSMagnus Damm 	.dev = {
256f251935eSMagnus Damm 		.platform_data	= &tmu5_platform_data,
257f251935eSMagnus Damm 	},
258f251935eSMagnus Damm 	.resource	= tmu5_resources,
259f251935eSMagnus Damm 	.num_resources	= ARRAY_SIZE(tmu5_resources),
260f251935eSMagnus Damm };
261f251935eSMagnus Damm 
262f251935eSMagnus Damm static struct sh_timer_config tmu6_platform_data = {
263f251935eSMagnus Damm 	.name = "TMU6",
264f251935eSMagnus Damm 	.channel_offset = 0x04,
265f251935eSMagnus Damm 	.timer_bit = 0,
266f251935eSMagnus Damm 	.clk = "module_clk",
267f251935eSMagnus Damm };
268f251935eSMagnus Damm 
269f251935eSMagnus Damm static struct resource tmu6_resources[] = {
270f251935eSMagnus Damm 	[0] = {
271f251935eSMagnus Damm 		.name	= "TMU6",
272f251935eSMagnus Damm 		.start	= 0xffd82008,
273f251935eSMagnus Damm 		.end	= 0xffd82013,
274f251935eSMagnus Damm 		.flags	= IORESOURCE_MEM,
275f251935eSMagnus Damm 	},
276f251935eSMagnus Damm 	[1] = {
277f251935eSMagnus Damm 		.start	= 22,
278f251935eSMagnus Damm 		.flags	= IORESOURCE_IRQ,
279f251935eSMagnus Damm 	},
280f251935eSMagnus Damm };
281f251935eSMagnus Damm 
282f251935eSMagnus Damm static struct platform_device tmu6_device = {
283f251935eSMagnus Damm 	.name		= "sh_tmu",
284f251935eSMagnus Damm 	.id		= 6,
285f251935eSMagnus Damm 	.dev = {
286f251935eSMagnus Damm 		.platform_data	= &tmu6_platform_data,
287f251935eSMagnus Damm 	},
288f251935eSMagnus Damm 	.resource	= tmu6_resources,
289f251935eSMagnus Damm 	.num_resources	= ARRAY_SIZE(tmu6_resources),
290f251935eSMagnus Damm };
291f251935eSMagnus Damm 
292f251935eSMagnus Damm static struct sh_timer_config tmu7_platform_data = {
293f251935eSMagnus Damm 	.name = "TMU7",
294f251935eSMagnus Damm 	.channel_offset = 0x10,
295f251935eSMagnus Damm 	.timer_bit = 1,
296f251935eSMagnus Damm 	.clk = "module_clk",
297f251935eSMagnus Damm };
298f251935eSMagnus Damm 
299f251935eSMagnus Damm static struct resource tmu7_resources[] = {
300f251935eSMagnus Damm 	[0] = {
301f251935eSMagnus Damm 		.name	= "TMU7",
302f251935eSMagnus Damm 		.start	= 0xffd82014,
303f251935eSMagnus Damm 		.end	= 0xffd8201f,
304f251935eSMagnus Damm 		.flags	= IORESOURCE_MEM,
305f251935eSMagnus Damm 	},
306f251935eSMagnus Damm 	[1] = {
307f251935eSMagnus Damm 		.start	= 23,
308f251935eSMagnus Damm 		.flags	= IORESOURCE_IRQ,
309f251935eSMagnus Damm 	},
310f251935eSMagnus Damm };
311f251935eSMagnus Damm 
312f251935eSMagnus Damm static struct platform_device tmu7_device = {
313f251935eSMagnus Damm 	.name		= "sh_tmu",
314f251935eSMagnus Damm 	.id		= 7,
315f251935eSMagnus Damm 	.dev = {
316f251935eSMagnus Damm 		.platform_data	= &tmu7_platform_data,
317f251935eSMagnus Damm 	},
318f251935eSMagnus Damm 	.resource	= tmu7_resources,
319f251935eSMagnus Damm 	.num_resources	= ARRAY_SIZE(tmu7_resources),
320f251935eSMagnus Damm };
321f251935eSMagnus Damm 
322f251935eSMagnus Damm static struct sh_timer_config tmu8_platform_data = {
323f251935eSMagnus Damm 	.name = "TMU8",
324f251935eSMagnus Damm 	.channel_offset = 0x1c,
325f251935eSMagnus Damm 	.timer_bit = 2,
326f251935eSMagnus Damm 	.clk = "module_clk",
327f251935eSMagnus Damm };
328f251935eSMagnus Damm 
329f251935eSMagnus Damm static struct resource tmu8_resources[] = {
330f251935eSMagnus Damm 	[0] = {
331f251935eSMagnus Damm 		.name	= "TMU8",
332f251935eSMagnus Damm 		.start	= 0xffd82020,
333f251935eSMagnus Damm 		.end	= 0xffd8202b,
334f251935eSMagnus Damm 		.flags	= IORESOURCE_MEM,
335f251935eSMagnus Damm 	},
336f251935eSMagnus Damm 	[1] = {
337f251935eSMagnus Damm 		.start	= 24,
338f251935eSMagnus Damm 		.flags	= IORESOURCE_IRQ,
339f251935eSMagnus Damm 	},
340f251935eSMagnus Damm };
341f251935eSMagnus Damm 
342f251935eSMagnus Damm static struct platform_device tmu8_device = {
343f251935eSMagnus Damm 	.name		= "sh_tmu",
344f251935eSMagnus Damm 	.id		= 8,
345f251935eSMagnus Damm 	.dev = {
346f251935eSMagnus Damm 		.platform_data	= &tmu8_platform_data,
347f251935eSMagnus Damm 	},
348f251935eSMagnus Damm 	.resource	= tmu8_resources,
349f251935eSMagnus Damm 	.num_resources	= ARRAY_SIZE(tmu8_resources),
350f251935eSMagnus Damm };
351f251935eSMagnus Damm 
35241504c39SPaul Mundt static struct platform_device *sh7770_devices[] __initdata = {
353f251935eSMagnus Damm 	&tmu0_device,
354f251935eSMagnus Damm 	&tmu1_device,
355f251935eSMagnus Damm 	&tmu2_device,
356f251935eSMagnus Damm 	&tmu3_device,
357f251935eSMagnus Damm 	&tmu4_device,
358f251935eSMagnus Damm 	&tmu5_device,
359f251935eSMagnus Damm 	&tmu6_device,
360f251935eSMagnus Damm 	&tmu7_device,
361f251935eSMagnus Damm 	&tmu8_device,
36241504c39SPaul Mundt 	&sci_device,
36341504c39SPaul Mundt };
36441504c39SPaul Mundt 
36541504c39SPaul Mundt static int __init sh7770_devices_setup(void)
36641504c39SPaul Mundt {
36741504c39SPaul Mundt 	return platform_add_devices(sh7770_devices,
36841504c39SPaul Mundt 				    ARRAY_SIZE(sh7770_devices));
36941504c39SPaul Mundt }
37041504c39SPaul Mundt __initcall(sh7770_devices_setup);
37135f3abe9SPaul Mundt 
372f251935eSMagnus Damm static struct platform_device *sh7770_early_devices[] __initdata = {
373f251935eSMagnus Damm 	&tmu0_device,
374f251935eSMagnus Damm 	&tmu1_device,
375f251935eSMagnus Damm 	&tmu2_device,
376f251935eSMagnus Damm 	&tmu3_device,
377f251935eSMagnus Damm 	&tmu4_device,
378f251935eSMagnus Damm 	&tmu5_device,
379f251935eSMagnus Damm 	&tmu6_device,
380f251935eSMagnus Damm 	&tmu7_device,
381f251935eSMagnus Damm 	&tmu8_device,
382f251935eSMagnus Damm };
383f251935eSMagnus Damm 
384f251935eSMagnus Damm void __init plat_early_device_setup(void)
385f251935eSMagnus Damm {
386f251935eSMagnus Damm 	early_platform_add_devices(sh7770_early_devices,
387f251935eSMagnus Damm 				   ARRAY_SIZE(sh7770_early_devices));
388f251935eSMagnus Damm }
389f251935eSMagnus Damm 
39035f3abe9SPaul Mundt void __init plat_irq_setup(void)
39135f3abe9SPaul Mundt {
39235f3abe9SPaul Mundt }
393