xref: /linux/arch/sh/kernel/cpu/sh4a/setup-sh7785.c (revision c95baf12f5077419db01313ab61c2aac007d40cd)
1add5ca2cSKuninori Morimoto // SPDX-License-Identifier: GPL-2.0
232351a28SPaul Mundt /*
332351a28SPaul Mundt  * SH7785 Setup
432351a28SPaul Mundt  *
532351a28SPaul Mundt  *  Copyright (C) 2007  Paul Mundt
632351a28SPaul Mundt  */
732351a28SPaul Mundt #include <linux/platform_device.h>
832351a28SPaul Mundt #include <linux/init.h>
932351a28SPaul Mundt #include <linux/serial.h>
1096de1a8fSPaul Mundt #include <linux/serial_sci.h>
11953c8ef2SMagnus Damm #include <linux/io.h>
12db250496SPaul Mundt #include <linux/mm.h>
1310440af1SGuennadi Liakhovetski #include <linux/sh_dma.h>
14e367592cSMagnus Damm #include <linux/sh_timer.h>
15ddb32084SPaul Mundt #include <linux/sh_intc.h>
16db250496SPaul Mundt #include <asm/mmzone.h>
17507fd01dSBartosz Golaszewski #include <asm/platform_early.h>
188b1935e6SGuennadi Liakhovetski #include <cpu/dma-register.h>
198b1935e6SGuennadi Liakhovetski 
20a9571d7bSMagnus Damm static struct plat_sci_port scif0_platform_data = {
21c3fa400bSLaurent Pinchart 	.scscr		= SCSCR_REIE | SCSCR_CKE1,
22a9571d7bSMagnus Damm 	.type		= PORT_SCIF,
2361a6976bSPaul Mundt 	.regtype	= SCIx_SH4_SCIF_FIFODATA_REGTYPE,
24a9571d7bSMagnus Damm };
25a9571d7bSMagnus Damm 
26d850acf9SLaurent Pinchart static struct resource scif0_resources[] = {
27d850acf9SLaurent Pinchart 	DEFINE_RES_MEM(0xffea0000, 0x100),
28d850acf9SLaurent Pinchart 	DEFINE_RES_IRQ(evt2irq(0x700)),
29d850acf9SLaurent Pinchart };
30d850acf9SLaurent Pinchart 
31a9571d7bSMagnus Damm static struct platform_device scif0_device = {
32a9571d7bSMagnus Damm 	.name		= "sh-sci",
33a9571d7bSMagnus Damm 	.id		= 0,
34d850acf9SLaurent Pinchart 	.resource	= scif0_resources,
35d850acf9SLaurent Pinchart 	.num_resources	= ARRAY_SIZE(scif0_resources),
36a9571d7bSMagnus Damm 	.dev		= {
37a9571d7bSMagnus Damm 		.platform_data	= &scif0_platform_data,
38a9571d7bSMagnus Damm 	},
39a9571d7bSMagnus Damm };
40a9571d7bSMagnus Damm 
41a9571d7bSMagnus Damm static struct plat_sci_port scif1_platform_data = {
42c3fa400bSLaurent Pinchart 	.scscr		= SCSCR_REIE | SCSCR_CKE1,
43a9571d7bSMagnus Damm 	.type		= PORT_SCIF,
4461a6976bSPaul Mundt 	.regtype	= SCIx_SH4_SCIF_FIFODATA_REGTYPE,
45a9571d7bSMagnus Damm };
46a9571d7bSMagnus Damm 
47d850acf9SLaurent Pinchart static struct resource scif1_resources[] = {
48d850acf9SLaurent Pinchart 	DEFINE_RES_MEM(0xffeb0000, 0x100),
49d850acf9SLaurent Pinchart 	DEFINE_RES_IRQ(evt2irq(0x780)),
50d850acf9SLaurent Pinchart };
51d850acf9SLaurent Pinchart 
52a9571d7bSMagnus Damm static struct platform_device scif1_device = {
53a9571d7bSMagnus Damm 	.name		= "sh-sci",
54a9571d7bSMagnus Damm 	.id		= 1,
55d850acf9SLaurent Pinchart 	.resource	= scif1_resources,
56d850acf9SLaurent Pinchart 	.num_resources	= ARRAY_SIZE(scif1_resources),
57a9571d7bSMagnus Damm 	.dev		= {
58a9571d7bSMagnus Damm 		.platform_data	= &scif1_platform_data,
59a9571d7bSMagnus Damm 	},
60a9571d7bSMagnus Damm };
61a9571d7bSMagnus Damm 
62a9571d7bSMagnus Damm static struct plat_sci_port scif2_platform_data = {
63c3fa400bSLaurent Pinchart 	.scscr		= SCSCR_REIE | SCSCR_CKE1,
64a9571d7bSMagnus Damm 	.type		= PORT_SCIF,
6561a6976bSPaul Mundt 	.regtype	= SCIx_SH4_SCIF_FIFODATA_REGTYPE,
66a9571d7bSMagnus Damm };
67a9571d7bSMagnus Damm 
68d850acf9SLaurent Pinchart static struct resource scif2_resources[] = {
69d850acf9SLaurent Pinchart 	DEFINE_RES_MEM(0xffec0000, 0x100),
70d850acf9SLaurent Pinchart 	DEFINE_RES_IRQ(evt2irq(0x980)),
71d850acf9SLaurent Pinchart };
72d850acf9SLaurent Pinchart 
73a9571d7bSMagnus Damm static struct platform_device scif2_device = {
74a9571d7bSMagnus Damm 	.name		= "sh-sci",
75a9571d7bSMagnus Damm 	.id		= 2,
76d850acf9SLaurent Pinchart 	.resource	= scif2_resources,
77d850acf9SLaurent Pinchart 	.num_resources	= ARRAY_SIZE(scif2_resources),
78a9571d7bSMagnus Damm 	.dev		= {
79a9571d7bSMagnus Damm 		.platform_data	= &scif2_platform_data,
80a9571d7bSMagnus Damm 	},
81a9571d7bSMagnus Damm };
82a9571d7bSMagnus Damm 
83a9571d7bSMagnus Damm static struct plat_sci_port scif3_platform_data = {
84c3fa400bSLaurent Pinchart 	.scscr		= SCSCR_REIE | SCSCR_CKE1,
85a9571d7bSMagnus Damm 	.type		= PORT_SCIF,
8661a6976bSPaul Mundt 	.regtype	= SCIx_SH4_SCIF_FIFODATA_REGTYPE,
87a9571d7bSMagnus Damm };
88a9571d7bSMagnus Damm 
89d850acf9SLaurent Pinchart static struct resource scif3_resources[] = {
90d850acf9SLaurent Pinchart 	DEFINE_RES_MEM(0xffed0000, 0x100),
91d850acf9SLaurent Pinchart 	DEFINE_RES_IRQ(evt2irq(0x9a0)),
92d850acf9SLaurent Pinchart };
93d850acf9SLaurent Pinchart 
94a9571d7bSMagnus Damm static struct platform_device scif3_device = {
95a9571d7bSMagnus Damm 	.name		= "sh-sci",
96a9571d7bSMagnus Damm 	.id		= 3,
97d850acf9SLaurent Pinchart 	.resource	= scif3_resources,
98d850acf9SLaurent Pinchart 	.num_resources	= ARRAY_SIZE(scif3_resources),
99a9571d7bSMagnus Damm 	.dev		= {
100a9571d7bSMagnus Damm 		.platform_data	= &scif3_platform_data,
101a9571d7bSMagnus Damm 	},
102a9571d7bSMagnus Damm };
103a9571d7bSMagnus Damm 
104a9571d7bSMagnus Damm static struct plat_sci_port scif4_platform_data = {
105c3fa400bSLaurent Pinchart 	.scscr		= SCSCR_REIE | SCSCR_CKE1,
106a9571d7bSMagnus Damm 	.type		= PORT_SCIF,
10761a6976bSPaul Mundt 	.regtype	= SCIx_SH4_SCIF_FIFODATA_REGTYPE,
108a9571d7bSMagnus Damm };
109a9571d7bSMagnus Damm 
110d850acf9SLaurent Pinchart static struct resource scif4_resources[] = {
111d850acf9SLaurent Pinchart 	DEFINE_RES_MEM(0xffee0000, 0x100),
112d850acf9SLaurent Pinchart 	DEFINE_RES_IRQ(evt2irq(0x9c0)),
113d850acf9SLaurent Pinchart };
114d850acf9SLaurent Pinchart 
115a9571d7bSMagnus Damm static struct platform_device scif4_device = {
116a9571d7bSMagnus Damm 	.name		= "sh-sci",
117a9571d7bSMagnus Damm 	.id		= 4,
118d850acf9SLaurent Pinchart 	.resource	= scif4_resources,
119d850acf9SLaurent Pinchart 	.num_resources	= ARRAY_SIZE(scif4_resources),
120a9571d7bSMagnus Damm 	.dev		= {
121a9571d7bSMagnus Damm 		.platform_data	= &scif4_platform_data,
122a9571d7bSMagnus Damm 	},
123a9571d7bSMagnus Damm };
124a9571d7bSMagnus Damm 
125a9571d7bSMagnus Damm static struct plat_sci_port scif5_platform_data = {
126c3fa400bSLaurent Pinchart 	.scscr		= SCSCR_REIE | SCSCR_CKE1,
127a9571d7bSMagnus Damm 	.type		= PORT_SCIF,
12861a6976bSPaul Mundt 	.regtype	= SCIx_SH4_SCIF_FIFODATA_REGTYPE,
129a9571d7bSMagnus Damm };
130a9571d7bSMagnus Damm 
131d850acf9SLaurent Pinchart static struct resource scif5_resources[] = {
132d850acf9SLaurent Pinchart 	DEFINE_RES_MEM(0xffef0000, 0x100),
133d850acf9SLaurent Pinchart 	DEFINE_RES_IRQ(evt2irq(0x9e0)),
134d850acf9SLaurent Pinchart };
135d850acf9SLaurent Pinchart 
136a9571d7bSMagnus Damm static struct platform_device scif5_device = {
137a9571d7bSMagnus Damm 	.name		= "sh-sci",
138a9571d7bSMagnus Damm 	.id		= 5,
139d850acf9SLaurent Pinchart 	.resource	= scif5_resources,
140d850acf9SLaurent Pinchart 	.num_resources	= ARRAY_SIZE(scif5_resources),
141a9571d7bSMagnus Damm 	.dev		= {
142a9571d7bSMagnus Damm 		.platform_data	= &scif5_platform_data,
143a9571d7bSMagnus Damm 	},
144a9571d7bSMagnus Damm };
145a9571d7bSMagnus Damm 
146e367592cSMagnus Damm static struct sh_timer_config tmu0_platform_data = {
1471399c195SLaurent Pinchart 	.channels_mask = 7,
148e367592cSMagnus Damm };
149e367592cSMagnus Damm 
150e367592cSMagnus Damm static struct resource tmu0_resources[] = {
1511399c195SLaurent Pinchart 	DEFINE_RES_MEM(0xffd80000, 0x30),
1521399c195SLaurent Pinchart 	DEFINE_RES_IRQ(evt2irq(0x580)),
1531399c195SLaurent Pinchart 	DEFINE_RES_IRQ(evt2irq(0x5a0)),
1541399c195SLaurent Pinchart 	DEFINE_RES_IRQ(evt2irq(0x5c0)),
155e367592cSMagnus Damm };
156e367592cSMagnus Damm 
157e367592cSMagnus Damm static struct platform_device tmu0_device = {
1581399c195SLaurent Pinchart 	.name		= "sh-tmu",
159e367592cSMagnus Damm 	.id		= 0,
160e367592cSMagnus Damm 	.dev = {
161e367592cSMagnus Damm 		.platform_data	= &tmu0_platform_data,
162e367592cSMagnus Damm 	},
163e367592cSMagnus Damm 	.resource	= tmu0_resources,
164e367592cSMagnus Damm 	.num_resources	= ARRAY_SIZE(tmu0_resources),
165e367592cSMagnus Damm };
166e367592cSMagnus Damm 
167e367592cSMagnus Damm static struct sh_timer_config tmu1_platform_data = {
1681399c195SLaurent Pinchart 	.channels_mask = 7,
169e367592cSMagnus Damm };
170e367592cSMagnus Damm 
171e367592cSMagnus Damm static struct resource tmu1_resources[] = {
1721399c195SLaurent Pinchart 	DEFINE_RES_MEM(0xffdc0000, 0x2c),
1731399c195SLaurent Pinchart 	DEFINE_RES_IRQ(evt2irq(0xe00)),
1741399c195SLaurent Pinchart 	DEFINE_RES_IRQ(evt2irq(0xe20)),
1751399c195SLaurent Pinchart 	DEFINE_RES_IRQ(evt2irq(0xe40)),
176e367592cSMagnus Damm };
177e367592cSMagnus Damm 
178e367592cSMagnus Damm static struct platform_device tmu1_device = {
1791399c195SLaurent Pinchart 	.name		= "sh-tmu",
180e367592cSMagnus Damm 	.id		= 1,
181e367592cSMagnus Damm 	.dev = {
182e367592cSMagnus Damm 		.platform_data	= &tmu1_platform_data,
183e367592cSMagnus Damm 	},
184e367592cSMagnus Damm 	.resource	= tmu1_resources,
185e367592cSMagnus Damm 	.num_resources	= ARRAY_SIZE(tmu1_resources),
186e367592cSMagnus Damm };
187e367592cSMagnus Damm 
188027811b9SGuennadi Liakhovetski /* DMA */
1895bac942dSGuennadi Liakhovetski static const struct sh_dmae_channel sh7785_dmae0_channels[] = {
19032351a28SPaul Mundt 	{
191027811b9SGuennadi Liakhovetski 		.offset = 0,
192027811b9SGuennadi Liakhovetski 		.dmars = 0,
193027811b9SGuennadi Liakhovetski 		.dmars_bit = 0,
19432351a28SPaul Mundt 	}, {
195027811b9SGuennadi Liakhovetski 		.offset = 0x10,
196027811b9SGuennadi Liakhovetski 		.dmars = 0,
197027811b9SGuennadi Liakhovetski 		.dmars_bit = 8,
19857e41c86SMagnus Damm 	}, {
199027811b9SGuennadi Liakhovetski 		.offset = 0x20,
200027811b9SGuennadi Liakhovetski 		.dmars = 4,
201027811b9SGuennadi Liakhovetski 		.dmars_bit = 0,
20232351a28SPaul Mundt 	}, {
203027811b9SGuennadi Liakhovetski 		.offset = 0x30,
204027811b9SGuennadi Liakhovetski 		.dmars = 4,
205027811b9SGuennadi Liakhovetski 		.dmars_bit = 8,
20632351a28SPaul Mundt 	}, {
207027811b9SGuennadi Liakhovetski 		.offset = 0x50,
208027811b9SGuennadi Liakhovetski 		.dmars = 8,
209027811b9SGuennadi Liakhovetski 		.dmars_bit = 0,
21032351a28SPaul Mundt 	}, {
211027811b9SGuennadi Liakhovetski 		.offset = 0x60,
212027811b9SGuennadi Liakhovetski 		.dmars = 8,
213027811b9SGuennadi Liakhovetski 		.dmars_bit = 8,
21432351a28SPaul Mundt 	}
21532351a28SPaul Mundt };
21632351a28SPaul Mundt 
2175bac942dSGuennadi Liakhovetski static const struct sh_dmae_channel sh7785_dmae1_channels[] = {
218027811b9SGuennadi Liakhovetski 	{
219027811b9SGuennadi Liakhovetski 		.offset = 0,
220027811b9SGuennadi Liakhovetski 	}, {
221027811b9SGuennadi Liakhovetski 		.offset = 0x10,
222027811b9SGuennadi Liakhovetski 	}, {
223027811b9SGuennadi Liakhovetski 		.offset = 0x20,
224027811b9SGuennadi Liakhovetski 	}, {
225027811b9SGuennadi Liakhovetski 		.offset = 0x30,
226027811b9SGuennadi Liakhovetski 	}, {
227027811b9SGuennadi Liakhovetski 		.offset = 0x50,
228027811b9SGuennadi Liakhovetski 	}, {
229027811b9SGuennadi Liakhovetski 		.offset = 0x60,
230027811b9SGuennadi Liakhovetski 	}
231027811b9SGuennadi Liakhovetski };
232027811b9SGuennadi Liakhovetski 
2335bac942dSGuennadi Liakhovetski static const unsigned int ts_shift[] = TS_SHIFT;
2348b1935e6SGuennadi Liakhovetski 
235027811b9SGuennadi Liakhovetski static struct sh_dmae_pdata dma0_platform_data = {
236027811b9SGuennadi Liakhovetski 	.channel	= sh7785_dmae0_channels,
237027811b9SGuennadi Liakhovetski 	.channel_num	= ARRAY_SIZE(sh7785_dmae0_channels),
2388b1935e6SGuennadi Liakhovetski 	.ts_low_shift	= CHCR_TS_LOW_SHIFT,
2398b1935e6SGuennadi Liakhovetski 	.ts_low_mask	= CHCR_TS_LOW_MASK,
2408b1935e6SGuennadi Liakhovetski 	.ts_high_shift	= CHCR_TS_HIGH_SHIFT,
2418b1935e6SGuennadi Liakhovetski 	.ts_high_mask	= CHCR_TS_HIGH_MASK,
2428b1935e6SGuennadi Liakhovetski 	.ts_shift	= ts_shift,
2438b1935e6SGuennadi Liakhovetski 	.ts_shift_num	= ARRAY_SIZE(ts_shift),
2448b1935e6SGuennadi Liakhovetski 	.dmaor_init	= DMAOR_INIT,
245027811b9SGuennadi Liakhovetski };
246027811b9SGuennadi Liakhovetski 
247027811b9SGuennadi Liakhovetski static struct sh_dmae_pdata dma1_platform_data = {
248027811b9SGuennadi Liakhovetski 	.channel	= sh7785_dmae1_channels,
249027811b9SGuennadi Liakhovetski 	.channel_num	= ARRAY_SIZE(sh7785_dmae1_channels),
2508b1935e6SGuennadi Liakhovetski 	.ts_low_shift	= CHCR_TS_LOW_SHIFT,
2518b1935e6SGuennadi Liakhovetski 	.ts_low_mask	= CHCR_TS_LOW_MASK,
2528b1935e6SGuennadi Liakhovetski 	.ts_high_shift	= CHCR_TS_HIGH_SHIFT,
2538b1935e6SGuennadi Liakhovetski 	.ts_high_mask	= CHCR_TS_HIGH_MASK,
2548b1935e6SGuennadi Liakhovetski 	.ts_shift	= ts_shift,
2558b1935e6SGuennadi Liakhovetski 	.ts_shift_num	= ARRAY_SIZE(ts_shift),
2568b1935e6SGuennadi Liakhovetski 	.dmaor_init	= DMAOR_INIT,
257027811b9SGuennadi Liakhovetski };
258027811b9SGuennadi Liakhovetski 
259027811b9SGuennadi Liakhovetski static struct resource sh7785_dmae0_resources[] = {
260027811b9SGuennadi Liakhovetski 	[0] = {
261027811b9SGuennadi Liakhovetski 		/* Channel registers and DMAOR */
262027811b9SGuennadi Liakhovetski 		.start	= 0xfc808020,
263027811b9SGuennadi Liakhovetski 		.end	= 0xfc80808f,
264027811b9SGuennadi Liakhovetski 		.flags	= IORESOURCE_MEM,
265027811b9SGuennadi Liakhovetski 	},
266027811b9SGuennadi Liakhovetski 	[1] = {
267027811b9SGuennadi Liakhovetski 		/* DMARSx */
268027811b9SGuennadi Liakhovetski 		.start	= 0xfc809000,
269027811b9SGuennadi Liakhovetski 		.end	= 0xfc80900b,
270027811b9SGuennadi Liakhovetski 		.flags	= IORESOURCE_MEM,
271027811b9SGuennadi Liakhovetski 	},
272027811b9SGuennadi Liakhovetski 	{
273ddb32084SPaul Mundt 		/*
274ddb32084SPaul Mundt 		 * Real DMA error vector is 0x6e0, and channel
275ddb32084SPaul Mundt 		 * vectors are 0x620-0x6c0
276ddb32084SPaul Mundt 		 */
277a4d52473SShimoda, Yoshihiro 		.name	= "error_irq",
278ddb32084SPaul Mundt 		.start	= evt2irq(0x620),
279ddb32084SPaul Mundt 		.end	= evt2irq(0x620),
280027811b9SGuennadi Liakhovetski 		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE,
281027811b9SGuennadi Liakhovetski 	},
282027811b9SGuennadi Liakhovetski };
283027811b9SGuennadi Liakhovetski 
284027811b9SGuennadi Liakhovetski static struct resource sh7785_dmae1_resources[] = {
285027811b9SGuennadi Liakhovetski 	[0] = {
286027811b9SGuennadi Liakhovetski 		/* Channel registers and DMAOR */
287027811b9SGuennadi Liakhovetski 		.start	= 0xfcc08020,
288027811b9SGuennadi Liakhovetski 		.end	= 0xfcc0808f,
289027811b9SGuennadi Liakhovetski 		.flags	= IORESOURCE_MEM,
290027811b9SGuennadi Liakhovetski 	},
291027811b9SGuennadi Liakhovetski 	/* DMAC1 has no DMARS */
292027811b9SGuennadi Liakhovetski 	{
293ddb32084SPaul Mundt 		/*
294ddb32084SPaul Mundt 		 * Real DMA error vector is 0x940, and channel
295ddb32084SPaul Mundt 		 * vectors are 0x880-0x920
296ddb32084SPaul Mundt 		 */
297a4d52473SShimoda, Yoshihiro 		.name	= "error_irq",
298ddb32084SPaul Mundt 		.start	= evt2irq(0x880),
299ddb32084SPaul Mundt 		.end	= evt2irq(0x880),
300027811b9SGuennadi Liakhovetski 		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE,
301027811b9SGuennadi Liakhovetski 	},
302027811b9SGuennadi Liakhovetski };
303027811b9SGuennadi Liakhovetski 
304027811b9SGuennadi Liakhovetski static struct platform_device dma0_device = {
3054385af80SNobuhiro Iwamatsu 	.name           = "sh-dma-engine",
306027811b9SGuennadi Liakhovetski 	.id             = 0,
307027811b9SGuennadi Liakhovetski 	.resource	= sh7785_dmae0_resources,
308027811b9SGuennadi Liakhovetski 	.num_resources	= ARRAY_SIZE(sh7785_dmae0_resources),
30932351a28SPaul Mundt 	.dev            = {
310027811b9SGuennadi Liakhovetski 		.platform_data	= &dma0_platform_data,
311027811b9SGuennadi Liakhovetski 	},
312027811b9SGuennadi Liakhovetski };
313027811b9SGuennadi Liakhovetski 
314027811b9SGuennadi Liakhovetski static struct platform_device dma1_device = {
315027811b9SGuennadi Liakhovetski 	.name		= "sh-dma-engine",
316027811b9SGuennadi Liakhovetski 	.id		= 1,
317027811b9SGuennadi Liakhovetski 	.resource	= sh7785_dmae1_resources,
318027811b9SGuennadi Liakhovetski 	.num_resources	= ARRAY_SIZE(sh7785_dmae1_resources),
319027811b9SGuennadi Liakhovetski 	.dev		= {
320027811b9SGuennadi Liakhovetski 		.platform_data	= &dma1_platform_data,
32132351a28SPaul Mundt 	},
32232351a28SPaul Mundt };
32332351a28SPaul Mundt 
32432351a28SPaul Mundt static struct platform_device *sh7785_devices[] __initdata = {
325a9571d7bSMagnus Damm 	&scif0_device,
326a9571d7bSMagnus Damm 	&scif1_device,
327a9571d7bSMagnus Damm 	&scif2_device,
328a9571d7bSMagnus Damm 	&scif3_device,
329a9571d7bSMagnus Damm 	&scif4_device,
330a9571d7bSMagnus Damm 	&scif5_device,
331e367592cSMagnus Damm 	&tmu0_device,
332e367592cSMagnus Damm 	&tmu1_device,
333027811b9SGuennadi Liakhovetski 	&dma0_device,
334027811b9SGuennadi Liakhovetski 	&dma1_device,
33532351a28SPaul Mundt };
33632351a28SPaul Mundt 
sh7785_devices_setup(void)33732351a28SPaul Mundt static int __init sh7785_devices_setup(void)
33832351a28SPaul Mundt {
33932351a28SPaul Mundt 	return platform_add_devices(sh7785_devices,
34032351a28SPaul Mundt 				    ARRAY_SIZE(sh7785_devices));
34132351a28SPaul Mundt }
342ba9a6337SMagnus Damm arch_initcall(sh7785_devices_setup);
34332351a28SPaul Mundt 
344e367592cSMagnus Damm static struct platform_device *sh7785_early_devices[] __initdata = {
345a9571d7bSMagnus Damm 	&scif0_device,
346a9571d7bSMagnus Damm 	&scif1_device,
347a9571d7bSMagnus Damm 	&scif2_device,
348a9571d7bSMagnus Damm 	&scif3_device,
349a9571d7bSMagnus Damm 	&scif4_device,
350a9571d7bSMagnus Damm 	&scif5_device,
351e367592cSMagnus Damm 	&tmu0_device,
352e367592cSMagnus Damm 	&tmu1_device,
353e367592cSMagnus Damm };
354e367592cSMagnus Damm 
plat_early_device_setup(void)355e367592cSMagnus Damm void __init plat_early_device_setup(void)
356e367592cSMagnus Damm {
357*201e9109SBartosz Golaszewski 	sh_early_platform_add_devices(sh7785_early_devices,
358e367592cSMagnus Damm 				   ARRAY_SIZE(sh7785_early_devices));
359e367592cSMagnus Damm }
360e367592cSMagnus Damm 
361a0e23267SMagnus Damm enum {
362a0e23267SMagnus Damm 	UNUSED = 0,
36332351a28SPaul Mundt 
364a0e23267SMagnus Damm 	/* interrupt sources */
36532351a28SPaul Mundt 
366a0e23267SMagnus Damm 	IRL0_LLLL, IRL0_LLLH, IRL0_LLHL, IRL0_LLHH,
367a0e23267SMagnus Damm 	IRL0_LHLL, IRL0_LHLH, IRL0_LHHL, IRL0_LHHH,
368a0e23267SMagnus Damm 	IRL0_HLLL, IRL0_HLLH, IRL0_HLHL, IRL0_HLHH,
369a0e23267SMagnus Damm 	IRL0_HHLL, IRL0_HHLH, IRL0_HHHL,
37032351a28SPaul Mundt 
371a0e23267SMagnus Damm 	IRL4_LLLL, IRL4_LLLH, IRL4_LLHL, IRL4_LLHH,
372a0e23267SMagnus Damm 	IRL4_LHLL, IRL4_LHLH, IRL4_LHHL, IRL4_LHHH,
373a0e23267SMagnus Damm 	IRL4_HLLL, IRL4_HLLH, IRL4_HLHL, IRL4_HLHH,
374a0e23267SMagnus Damm 	IRL4_HHLL, IRL4_HHLH, IRL4_HHHL,
37539374aadSRyusuke Sakato 
376a0e23267SMagnus Damm 	IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7,
37757e41c86SMagnus Damm 	WDT, TMU0, TMU1, TMU2, TMU2_TICPI,
37857e41c86SMagnus Damm 	HUDI, DMAC0, SCIF0, SCIF1, DMAC1, HSPI,
379a0e23267SMagnus Damm 	SCIF2, SCIF3, SCIF4, SCIF5,
38057e41c86SMagnus Damm 	PCISERR, PCIINTA, PCIINTB, PCIINTC, PCIINTD, PCIC5,
38157e41c86SMagnus Damm 	SIOF, MMCIF, DU, GDTA,
382a0e23267SMagnus Damm 	TMU3, TMU4, TMU5,
383a0e23267SMagnus Damm 	SSI0, SSI1,
384a0e23267SMagnus Damm 	HAC0, HAC1,
38557e41c86SMagnus Damm 	FLCTL, GPIO,
386a0e23267SMagnus Damm 
387a0e23267SMagnus Damm 	/* interrupt groups */
388a0e23267SMagnus Damm 
38957e41c86SMagnus Damm 	TMU012,	TMU345
39032351a28SPaul Mundt };
39132351a28SPaul Mundt 
3925c37e025SMagnus Damm static struct intc_vect vectors[] __initdata = {
393a0e23267SMagnus Damm 	INTC_VECT(WDT, 0x560),
394a0e23267SMagnus Damm 	INTC_VECT(TMU0, 0x580), INTC_VECT(TMU1, 0x5a0),
395a0e23267SMagnus Damm 	INTC_VECT(TMU2, 0x5c0), INTC_VECT(TMU2_TICPI, 0x5e0),
396a0e23267SMagnus Damm 	INTC_VECT(HUDI, 0x600),
39757e41c86SMagnus Damm 	INTC_VECT(DMAC0, 0x620), INTC_VECT(DMAC0, 0x640),
39857e41c86SMagnus Damm 	INTC_VECT(DMAC0, 0x660), INTC_VECT(DMAC0, 0x680),
39957e41c86SMagnus Damm 	INTC_VECT(DMAC0, 0x6a0), INTC_VECT(DMAC0, 0x6c0),
40057e41c86SMagnus Damm 	INTC_VECT(DMAC0, 0x6e0),
40157e41c86SMagnus Damm 	INTC_VECT(SCIF0, 0x700), INTC_VECT(SCIF0, 0x720),
40257e41c86SMagnus Damm 	INTC_VECT(SCIF0, 0x740), INTC_VECT(SCIF0, 0x760),
40357e41c86SMagnus Damm 	INTC_VECT(SCIF1, 0x780), INTC_VECT(SCIF1, 0x7a0),
40457e41c86SMagnus Damm 	INTC_VECT(SCIF1, 0x7c0), INTC_VECT(SCIF1, 0x7e0),
40557e41c86SMagnus Damm 	INTC_VECT(DMAC1, 0x880), INTC_VECT(DMAC1, 0x8a0),
40657e41c86SMagnus Damm 	INTC_VECT(DMAC1, 0x8c0), INTC_VECT(DMAC1, 0x8e0),
40757e41c86SMagnus Damm 	INTC_VECT(DMAC1, 0x900), INTC_VECT(DMAC1, 0x920),
40857e41c86SMagnus Damm 	INTC_VECT(DMAC1, 0x940),
409a0e23267SMagnus Damm 	INTC_VECT(HSPI, 0x960),
410a0e23267SMagnus Damm 	INTC_VECT(SCIF2, 0x980), INTC_VECT(SCIF3, 0x9a0),
411a0e23267SMagnus Damm 	INTC_VECT(SCIF4, 0x9c0), INTC_VECT(SCIF5, 0x9e0),
412a0e23267SMagnus Damm 	INTC_VECT(PCISERR, 0xa00), INTC_VECT(PCIINTA, 0xa20),
413a0e23267SMagnus Damm 	INTC_VECT(PCIINTB, 0xa40), INTC_VECT(PCIINTC, 0xa60),
41457e41c86SMagnus Damm 	INTC_VECT(PCIINTD, 0xa80), INTC_VECT(PCIC5, 0xaa0),
41557e41c86SMagnus Damm 	INTC_VECT(PCIC5, 0xac0), INTC_VECT(PCIC5, 0xae0),
41657e41c86SMagnus Damm 	INTC_VECT(PCIC5, 0xb00), INTC_VECT(PCIC5, 0xb20),
417a0e23267SMagnus Damm 	INTC_VECT(SIOF, 0xc00),
41857e41c86SMagnus Damm 	INTC_VECT(MMCIF, 0xd00), INTC_VECT(MMCIF, 0xd20),
41957e41c86SMagnus Damm 	INTC_VECT(MMCIF, 0xd40), INTC_VECT(MMCIF, 0xd60),
420a0e23267SMagnus Damm 	INTC_VECT(DU, 0xd80),
42157e41c86SMagnus Damm 	INTC_VECT(GDTA, 0xda0), INTC_VECT(GDTA, 0xdc0),
42257e41c86SMagnus Damm 	INTC_VECT(GDTA, 0xde0),
423a0e23267SMagnus Damm 	INTC_VECT(TMU3, 0xe00), INTC_VECT(TMU4, 0xe20),
424a0e23267SMagnus Damm 	INTC_VECT(TMU5, 0xe40),
425a0e23267SMagnus Damm 	INTC_VECT(SSI0, 0xe80), INTC_VECT(SSI1, 0xea0),
426a0e23267SMagnus Damm 	INTC_VECT(HAC0, 0xec0), INTC_VECT(HAC1, 0xee0),
42757e41c86SMagnus Damm 	INTC_VECT(FLCTL, 0xf00), INTC_VECT(FLCTL, 0xf20),
42857e41c86SMagnus Damm 	INTC_VECT(FLCTL, 0xf40), INTC_VECT(FLCTL, 0xf60),
42957e41c86SMagnus Damm 	INTC_VECT(GPIO, 0xf80), INTC_VECT(GPIO, 0xfa0),
43057e41c86SMagnus Damm 	INTC_VECT(GPIO, 0xfc0), INTC_VECT(GPIO, 0xfe0),
431d619500aSMagnus Damm };
432d619500aSMagnus Damm 
4335c37e025SMagnus Damm static struct intc_group groups[] __initdata = {
434a0e23267SMagnus Damm 	INTC_GROUP(TMU012, TMU0, TMU1, TMU2, TMU2_TICPI),
435a0e23267SMagnus Damm 	INTC_GROUP(TMU345, TMU3, TMU4, TMU5),
436a0e23267SMagnus Damm };
437a0e23267SMagnus Damm 
4385c37e025SMagnus Damm static struct intc_mask_reg mask_registers[] __initdata = {
439a0e23267SMagnus Damm 	{ 0xffd00044, 0xffd00064, 32, /* INTMSK0 / INTMSKCLR0 */
440a0e23267SMagnus Damm 	  { IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7 } },
441a0e23267SMagnus Damm 
442a0e23267SMagnus Damm 	{ 0xffd40080, 0xffd40084, 32, /* INTMSK2 / INTMSKCLR2 */
443a0e23267SMagnus Damm 	  { IRL0_LLLL, IRL0_LLLH, IRL0_LLHL, IRL0_LLHH,
444a0e23267SMagnus Damm 	    IRL0_LHLL, IRL0_LHLH, IRL0_LHHL, IRL0_LHHH,
445a0e23267SMagnus Damm 	    IRL0_HLLL, IRL0_HLLH, IRL0_HLHL, IRL0_HLHH,
446a0e23267SMagnus Damm 	    IRL0_HHLL, IRL0_HHLH, IRL0_HHHL, 0,
447a0e23267SMagnus Damm 	    IRL4_LLLL, IRL4_LLLH, IRL4_LLHL, IRL4_LLHH,
448a0e23267SMagnus Damm 	    IRL4_LHLL, IRL4_LHLH, IRL4_LHHL, IRL4_LHHH,
449a0e23267SMagnus Damm 	    IRL4_HLLL, IRL4_HLLH, IRL4_HLHL, IRL4_HLHH,
450a0e23267SMagnus Damm 	    IRL4_HHLL, IRL4_HHLH, IRL4_HHHL, 0, } },
451a0e23267SMagnus Damm 
452a0e23267SMagnus Damm 	{ 0xffd40038, 0xffd4003c, 32, /* INT2MSKR / INT2MSKCR */
453a0e23267SMagnus Damm 	  { 0, 0, 0, GDTA, DU, SSI0, SSI1, GPIO,
454a0e23267SMagnus Damm 	    FLCTL, MMCIF, HSPI, SIOF, PCIC5, PCIINTD, PCIINTC, PCIINTB,
455a0e23267SMagnus Damm 	    PCIINTA, PCISERR, HAC1, HAC0, DMAC1, DMAC0, HUDI, WDT,
456a0e23267SMagnus Damm 	    SCIF5, SCIF4, SCIF3, SCIF2, SCIF1, SCIF0, TMU345, TMU012 } },
457a0e23267SMagnus Damm };
458a0e23267SMagnus Damm 
4595c37e025SMagnus Damm static struct intc_prio_reg prio_registers[] __initdata = {
4606ef5fb2cSMagnus Damm 	{ 0xffd00010, 0, 32, 4, /* INTPRI */   { IRQ0, IRQ1, IRQ2, IRQ3,
461a0e23267SMagnus Damm 						 IRQ4, IRQ5, IRQ6, IRQ7 } },
4626ef5fb2cSMagnus Damm 	{ 0xffd40000, 0, 32, 8, /* INT2PRI0 */ { TMU0, TMU1,
4636ef5fb2cSMagnus Damm 						 TMU2, TMU2_TICPI } },
4646ef5fb2cSMagnus Damm 	{ 0xffd40004, 0, 32, 8, /* INT2PRI1 */ { TMU3, TMU4, TMU5, } },
4656ef5fb2cSMagnus Damm 	{ 0xffd40008, 0, 32, 8, /* INT2PRI2 */ { SCIF0, SCIF1,
4666ef5fb2cSMagnus Damm 						 SCIF2, SCIF3 } },
4676ef5fb2cSMagnus Damm 	{ 0xffd4000c, 0, 32, 8, /* INT2PRI3 */ { SCIF4, SCIF5, WDT, } },
4686ef5fb2cSMagnus Damm 	{ 0xffd40010, 0, 32, 8, /* INT2PRI4 */ { HUDI, DMAC0, DMAC1, } },
4696ef5fb2cSMagnus Damm 	{ 0xffd40014, 0, 32, 8, /* INT2PRI5 */ { HAC0, HAC1,
4706ef5fb2cSMagnus Damm 						 PCISERR, PCIINTA } },
4716ef5fb2cSMagnus Damm 	{ 0xffd40018, 0, 32, 8, /* INT2PRI6 */ { PCIINTB, PCIINTC,
472a0e23267SMagnus Damm 						 PCIINTD, PCIC5 } },
4736ef5fb2cSMagnus Damm 	{ 0xffd4001c, 0, 32, 8, /* INT2PRI7 */ { SIOF, HSPI, MMCIF, } },
4746ef5fb2cSMagnus Damm 	{ 0xffd40020, 0, 32, 8, /* INT2PRI8 */ { FLCTL, GPIO, SSI0, SSI1, } },
4756ef5fb2cSMagnus Damm 	{ 0xffd40024, 0, 32, 8, /* INT2PRI9 */ { DU, GDTA, } },
476a0e23267SMagnus Damm };
477a0e23267SMagnus Damm 
4787f3edee8SMagnus Damm static DECLARE_INTC_DESC(intc_desc, "sh7785", vectors, groups,
479a0e23267SMagnus Damm 			 mask_registers, prio_registers, NULL);
480a0e23267SMagnus Damm 
481a0e23267SMagnus Damm /* Support for external interrupt pins in IRQ mode */
482a0e23267SMagnus Damm 
4835c37e025SMagnus Damm static struct intc_vect vectors_irq0123[] __initdata = {
484a0e23267SMagnus Damm 	INTC_VECT(IRQ0, 0x240), INTC_VECT(IRQ1, 0x280),
485a0e23267SMagnus Damm 	INTC_VECT(IRQ2, 0x2c0), INTC_VECT(IRQ3, 0x300),
486a0e23267SMagnus Damm };
487a0e23267SMagnus Damm 
4885c37e025SMagnus Damm static struct intc_vect vectors_irq4567[] __initdata = {
489a0e23267SMagnus Damm 	INTC_VECT(IRQ4, 0x340), INTC_VECT(IRQ5, 0x380),
490a0e23267SMagnus Damm 	INTC_VECT(IRQ6, 0x3c0), INTC_VECT(IRQ7, 0x200),
491a0e23267SMagnus Damm };
492a0e23267SMagnus Damm 
4935c37e025SMagnus Damm static struct intc_sense_reg sense_registers[] __initdata = {
494a0e23267SMagnus Damm 	{ 0xffd0001c, 32, 2, /* ICR1 */   { IRQ0, IRQ1, IRQ2, IRQ3,
495a0e23267SMagnus Damm 					    IRQ4, IRQ5, IRQ6, IRQ7 } },
496a0e23267SMagnus Damm };
497a0e23267SMagnus Damm 
4986bdfb22aSYoshihiro Shimoda static struct intc_mask_reg ack_registers[] __initdata = {
4996bdfb22aSYoshihiro Shimoda 	{ 0xffd00024, 0, 32, /* INTREQ */
5006bdfb22aSYoshihiro Shimoda 	  { IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7 } },
5016bdfb22aSYoshihiro Shimoda };
502a0e23267SMagnus Damm 
5036bdfb22aSYoshihiro Shimoda static DECLARE_INTC_DESC_ACK(intc_desc_irq0123, "sh7785-irq0123",
5046bdfb22aSYoshihiro Shimoda 			     vectors_irq0123, NULL, mask_registers,
5056bdfb22aSYoshihiro Shimoda 			     prio_registers, sense_registers, ack_registers);
5066bdfb22aSYoshihiro Shimoda 
5076bdfb22aSYoshihiro Shimoda static DECLARE_INTC_DESC_ACK(intc_desc_irq4567, "sh7785-irq4567",
5086bdfb22aSYoshihiro Shimoda 			     vectors_irq4567, NULL, mask_registers,
5096bdfb22aSYoshihiro Shimoda 			     prio_registers, sense_registers, ack_registers);
510a0e23267SMagnus Damm 
511a0e23267SMagnus Damm /* External interrupt pins in IRL mode */
512a0e23267SMagnus Damm 
5135c37e025SMagnus Damm static struct intc_vect vectors_irl0123[] __initdata = {
514a0e23267SMagnus Damm 	INTC_VECT(IRL0_LLLL, 0x200), INTC_VECT(IRL0_LLLH, 0x220),
515a0e23267SMagnus Damm 	INTC_VECT(IRL0_LLHL, 0x240), INTC_VECT(IRL0_LLHH, 0x260),
516a0e23267SMagnus Damm 	INTC_VECT(IRL0_LHLL, 0x280), INTC_VECT(IRL0_LHLH, 0x2a0),
517a0e23267SMagnus Damm 	INTC_VECT(IRL0_LHHL, 0x2c0), INTC_VECT(IRL0_LHHH, 0x2e0),
518a0e23267SMagnus Damm 	INTC_VECT(IRL0_HLLL, 0x300), INTC_VECT(IRL0_HLLH, 0x320),
519a0e23267SMagnus Damm 	INTC_VECT(IRL0_HLHL, 0x340), INTC_VECT(IRL0_HLHH, 0x360),
520a0e23267SMagnus Damm 	INTC_VECT(IRL0_HHLL, 0x380), INTC_VECT(IRL0_HHLH, 0x3a0),
521a0e23267SMagnus Damm 	INTC_VECT(IRL0_HHHL, 0x3c0),
522a0e23267SMagnus Damm };
523a0e23267SMagnus Damm 
5245c37e025SMagnus Damm static struct intc_vect vectors_irl4567[] __initdata = {
525a0e23267SMagnus Damm 	INTC_VECT(IRL4_LLLL, 0xb00), INTC_VECT(IRL4_LLLH, 0xb20),
526a0e23267SMagnus Damm 	INTC_VECT(IRL4_LLHL, 0xb40), INTC_VECT(IRL4_LLHH, 0xb60),
527a0e23267SMagnus Damm 	INTC_VECT(IRL4_LHLL, 0xb80), INTC_VECT(IRL4_LHLH, 0xba0),
528a0e23267SMagnus Damm 	INTC_VECT(IRL4_LHHL, 0xbc0), INTC_VECT(IRL4_LHHH, 0xbe0),
529a0e23267SMagnus Damm 	INTC_VECT(IRL4_HLLL, 0xc00), INTC_VECT(IRL4_HLLH, 0xc20),
530a0e23267SMagnus Damm 	INTC_VECT(IRL4_HLHL, 0xc40), INTC_VECT(IRL4_HLHH, 0xc60),
531a0e23267SMagnus Damm 	INTC_VECT(IRL4_HHLL, 0xc80), INTC_VECT(IRL4_HHLH, 0xca0),
532a0e23267SMagnus Damm 	INTC_VECT(IRL4_HHHL, 0xcc0),
533a0e23267SMagnus Damm };
534a0e23267SMagnus Damm 
535a0e23267SMagnus Damm static DECLARE_INTC_DESC(intc_desc_irl0123, "sh7785-irl0123", vectors_irl0123,
5367f3edee8SMagnus Damm 			 NULL, mask_registers, NULL, NULL);
537a0e23267SMagnus Damm 
538a0e23267SMagnus Damm static DECLARE_INTC_DESC(intc_desc_irl4567, "sh7785-irl4567", vectors_irl4567,
5397f3edee8SMagnus Damm 			 NULL, mask_registers, NULL, NULL);
540a0e23267SMagnus Damm 
541953c8ef2SMagnus Damm #define INTC_ICR0	0xffd00000
542953c8ef2SMagnus Damm #define INTC_INTMSK0	0xffd00044
543953c8ef2SMagnus Damm #define INTC_INTMSK1	0xffd00048
544953c8ef2SMagnus Damm #define INTC_INTMSK2	0xffd40080
545953c8ef2SMagnus Damm #define INTC_INTMSKCLR1	0xffd00068
546953c8ef2SMagnus Damm #define INTC_INTMSKCLR2	0xffd40084
547953c8ef2SMagnus Damm 
plat_irq_setup(void)54890015c89SMagnus Damm void __init plat_irq_setup(void)
54932351a28SPaul Mundt {
550953c8ef2SMagnus Damm 	/* disable IRQ3-0 + IRQ7-4 */
5519d56dd3bSPaul Mundt 	__raw_writel(0xff000000, INTC_INTMSK0);
552953c8ef2SMagnus Damm 
553953c8ef2SMagnus Damm 	/* disable IRL3-0 + IRL7-4 */
5549d56dd3bSPaul Mundt 	__raw_writel(0xc0000000, INTC_INTMSK1);
5559d56dd3bSPaul Mundt 	__raw_writel(0xfffefffe, INTC_INTMSK2);
556953c8ef2SMagnus Damm 
557953c8ef2SMagnus Damm 	/* select IRL mode for IRL3-0 + IRL7-4 */
5589d56dd3bSPaul Mundt 	__raw_writel(__raw_readl(INTC_ICR0) & ~0x00c00000, INTC_ICR0);
559953c8ef2SMagnus Damm 
560953c8ef2SMagnus Damm 	/* disable holding function, ie enable "SH-4 Mode" */
5619d56dd3bSPaul Mundt 	__raw_writel(__raw_readl(INTC_ICR0) | 0x00200000, INTC_ICR0);
562953c8ef2SMagnus Damm 
563a0e23267SMagnus Damm 	register_intc_controller(&intc_desc);
56432351a28SPaul Mundt }
565d619500aSMagnus Damm 
plat_irq_setup_pins(int mode)566a0e23267SMagnus Damm void __init plat_irq_setup_pins(int mode)
567a0e23267SMagnus Damm {
568a0e23267SMagnus Damm 	switch (mode) {
569a0e23267SMagnus Damm 	case IRQ_MODE_IRQ7654:
570953c8ef2SMagnus Damm 		/* select IRQ mode for IRL7-4 */
5719d56dd3bSPaul Mundt 		__raw_writel(__raw_readl(INTC_ICR0) | 0x00400000, INTC_ICR0);
572a0e23267SMagnus Damm 		register_intc_controller(&intc_desc_irq4567);
573a0e23267SMagnus Damm 		break;
574a0e23267SMagnus Damm 	case IRQ_MODE_IRQ3210:
575953c8ef2SMagnus Damm 		/* select IRQ mode for IRL3-0 */
5769d56dd3bSPaul Mundt 		__raw_writel(__raw_readl(INTC_ICR0) | 0x00800000, INTC_ICR0);
577a0e23267SMagnus Damm 		register_intc_controller(&intc_desc_irq0123);
578a0e23267SMagnus Damm 		break;
579a0e23267SMagnus Damm 	case IRQ_MODE_IRL7654:
580953c8ef2SMagnus Damm 		/* enable IRL7-4 but don't provide any masking */
5819d56dd3bSPaul Mundt 		__raw_writel(0x40000000, INTC_INTMSKCLR1);
5829d56dd3bSPaul Mundt 		__raw_writel(0x0000fffe, INTC_INTMSKCLR2);
583a0e23267SMagnus Damm 		break;
584a0e23267SMagnus Damm 	case IRQ_MODE_IRL3210:
585953c8ef2SMagnus Damm 		/* enable IRL0-3 but don't provide any masking */
5869d56dd3bSPaul Mundt 		__raw_writel(0x80000000, INTC_INTMSKCLR1);
5879d56dd3bSPaul Mundt 		__raw_writel(0xfffe0000, INTC_INTMSKCLR2);
588953c8ef2SMagnus Damm 		break;
589953c8ef2SMagnus Damm 	case IRQ_MODE_IRL7654_MASK:
590953c8ef2SMagnus Damm 		/* enable IRL7-4 and mask using cpu intc controller */
5919d56dd3bSPaul Mundt 		__raw_writel(0x40000000, INTC_INTMSKCLR1);
592953c8ef2SMagnus Damm 		register_intc_controller(&intc_desc_irl4567);
593953c8ef2SMagnus Damm 		break;
594953c8ef2SMagnus Damm 	case IRQ_MODE_IRL3210_MASK:
595953c8ef2SMagnus Damm 		/* enable IRL0-3 and mask using cpu intc controller */
5969d56dd3bSPaul Mundt 		__raw_writel(0x80000000, INTC_INTMSKCLR1);
597a0e23267SMagnus Damm 		register_intc_controller(&intc_desc_irl0123);
598a0e23267SMagnus Damm 		break;
599a0e23267SMagnus Damm 	default:
600a0e23267SMagnus Damm 		BUG();
601a0e23267SMagnus Damm 	}
602a0e23267SMagnus Damm }
603db250496SPaul Mundt 
plat_mem_setup(void)604db250496SPaul Mundt void __init plat_mem_setup(void)
605db250496SPaul Mundt {
606db250496SPaul Mundt 	/* Register the URAM space as Node 1 */
607675bd780SPaul Mundt 	setup_bootmem_node(1, 0xe55f0000, 0xe5610000);
608db250496SPaul Mundt }
609