xref: /OK3568_Linux_fs/kernel/arch/sh/kernel/cpu/sh4a/setup-sh7757.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * SH7757 Setup
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Copyright (C) 2009, 2011  Renesas Solutions Corp.
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  *  based on setup-sh7785.c : Copyright (C) 2007  Paul Mundt
8*4882a593Smuzhiyun  */
9*4882a593Smuzhiyun #include <linux/platform_device.h>
10*4882a593Smuzhiyun #include <linux/init.h>
11*4882a593Smuzhiyun #include <linux/serial.h>
12*4882a593Smuzhiyun #include <linux/serial_sci.h>
13*4882a593Smuzhiyun #include <linux/io.h>
14*4882a593Smuzhiyun #include <linux/mm.h>
15*4882a593Smuzhiyun #include <linux/dma-mapping.h>
16*4882a593Smuzhiyun #include <linux/sh_timer.h>
17*4882a593Smuzhiyun #include <linux/sh_dma.h>
18*4882a593Smuzhiyun #include <linux/sh_intc.h>
19*4882a593Smuzhiyun #include <linux/usb/ohci_pdriver.h>
20*4882a593Smuzhiyun #include <cpu/dma-register.h>
21*4882a593Smuzhiyun #include <cpu/sh7757.h>
22*4882a593Smuzhiyun #include <asm/platform_early.h>
23*4882a593Smuzhiyun 
24*4882a593Smuzhiyun static struct plat_sci_port scif2_platform_data = {
25*4882a593Smuzhiyun 	.scscr		= SCSCR_REIE,
26*4882a593Smuzhiyun 	.type		= PORT_SCIF,
27*4882a593Smuzhiyun };
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun static struct resource scif2_resources[] = {
30*4882a593Smuzhiyun 	DEFINE_RES_MEM(0xfe4b0000, 0x100),		/* SCIF2 */
31*4882a593Smuzhiyun 	DEFINE_RES_IRQ(evt2irq(0x700)),
32*4882a593Smuzhiyun };
33*4882a593Smuzhiyun 
34*4882a593Smuzhiyun static struct platform_device scif2_device = {
35*4882a593Smuzhiyun 	.name		= "sh-sci",
36*4882a593Smuzhiyun 	.id		= 0,
37*4882a593Smuzhiyun 	.resource	= scif2_resources,
38*4882a593Smuzhiyun 	.num_resources	= ARRAY_SIZE(scif2_resources),
39*4882a593Smuzhiyun 	.dev		= {
40*4882a593Smuzhiyun 		.platform_data	= &scif2_platform_data,
41*4882a593Smuzhiyun 	},
42*4882a593Smuzhiyun };
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun static struct plat_sci_port scif3_platform_data = {
45*4882a593Smuzhiyun 	.scscr		= SCSCR_REIE,
46*4882a593Smuzhiyun 	.type		= PORT_SCIF,
47*4882a593Smuzhiyun };
48*4882a593Smuzhiyun 
49*4882a593Smuzhiyun static struct resource scif3_resources[] = {
50*4882a593Smuzhiyun 	DEFINE_RES_MEM(0xfe4c0000, 0x100),		/* SCIF3 */
51*4882a593Smuzhiyun 	DEFINE_RES_IRQ(evt2irq(0xb80)),
52*4882a593Smuzhiyun };
53*4882a593Smuzhiyun 
54*4882a593Smuzhiyun static struct platform_device scif3_device = {
55*4882a593Smuzhiyun 	.name		= "sh-sci",
56*4882a593Smuzhiyun 	.id		= 1,
57*4882a593Smuzhiyun 	.resource	= scif3_resources,
58*4882a593Smuzhiyun 	.num_resources	= ARRAY_SIZE(scif3_resources),
59*4882a593Smuzhiyun 	.dev		= {
60*4882a593Smuzhiyun 		.platform_data	= &scif3_platform_data,
61*4882a593Smuzhiyun 	},
62*4882a593Smuzhiyun };
63*4882a593Smuzhiyun 
64*4882a593Smuzhiyun static struct plat_sci_port scif4_platform_data = {
65*4882a593Smuzhiyun 	.scscr		= SCSCR_REIE,
66*4882a593Smuzhiyun 	.type		= PORT_SCIF,
67*4882a593Smuzhiyun };
68*4882a593Smuzhiyun 
69*4882a593Smuzhiyun static struct resource scif4_resources[] = {
70*4882a593Smuzhiyun 	DEFINE_RES_MEM(0xfe4d0000, 0x100),		/* SCIF4 */
71*4882a593Smuzhiyun 	DEFINE_RES_IRQ(evt2irq(0xf00)),
72*4882a593Smuzhiyun };
73*4882a593Smuzhiyun 
74*4882a593Smuzhiyun static struct platform_device scif4_device = {
75*4882a593Smuzhiyun 	.name		= "sh-sci",
76*4882a593Smuzhiyun 	.id		= 2,
77*4882a593Smuzhiyun 	.resource	= scif4_resources,
78*4882a593Smuzhiyun 	.num_resources	= ARRAY_SIZE(scif4_resources),
79*4882a593Smuzhiyun 	.dev		= {
80*4882a593Smuzhiyun 		.platform_data	= &scif4_platform_data,
81*4882a593Smuzhiyun 	},
82*4882a593Smuzhiyun };
83*4882a593Smuzhiyun 
84*4882a593Smuzhiyun static struct sh_timer_config tmu0_platform_data = {
85*4882a593Smuzhiyun 	.channels_mask = 3,
86*4882a593Smuzhiyun };
87*4882a593Smuzhiyun 
88*4882a593Smuzhiyun static struct resource tmu0_resources[] = {
89*4882a593Smuzhiyun 	DEFINE_RES_MEM(0xfe430000, 0x20),
90*4882a593Smuzhiyun 	DEFINE_RES_IRQ(evt2irq(0x580)),
91*4882a593Smuzhiyun 	DEFINE_RES_IRQ(evt2irq(0x5a0)),
92*4882a593Smuzhiyun };
93*4882a593Smuzhiyun 
94*4882a593Smuzhiyun static struct platform_device tmu0_device = {
95*4882a593Smuzhiyun 	.name		= "sh-tmu",
96*4882a593Smuzhiyun 	.id		= 0,
97*4882a593Smuzhiyun 	.dev = {
98*4882a593Smuzhiyun 		.platform_data	= &tmu0_platform_data,
99*4882a593Smuzhiyun 	},
100*4882a593Smuzhiyun 	.resource	= tmu0_resources,
101*4882a593Smuzhiyun 	.num_resources	= ARRAY_SIZE(tmu0_resources),
102*4882a593Smuzhiyun };
103*4882a593Smuzhiyun 
104*4882a593Smuzhiyun static struct resource spi0_resources[] = {
105*4882a593Smuzhiyun 	[0] = {
106*4882a593Smuzhiyun 		.start	= 0xfe002000,
107*4882a593Smuzhiyun 		.end	= 0xfe0020ff,
108*4882a593Smuzhiyun 		.flags	= IORESOURCE_MEM | IORESOURCE_MEM_32BIT,
109*4882a593Smuzhiyun 	},
110*4882a593Smuzhiyun 	[1] = {
111*4882a593Smuzhiyun 		.start	= evt2irq(0xcc0),
112*4882a593Smuzhiyun 		.flags	= IORESOURCE_IRQ,
113*4882a593Smuzhiyun 	},
114*4882a593Smuzhiyun };
115*4882a593Smuzhiyun 
116*4882a593Smuzhiyun /* DMA */
117*4882a593Smuzhiyun static const struct sh_dmae_slave_config sh7757_dmae0_slaves[] = {
118*4882a593Smuzhiyun 	{
119*4882a593Smuzhiyun 		.slave_id	= SHDMA_SLAVE_SDHI_TX,
120*4882a593Smuzhiyun 		.addr		= 0x1fe50030,
121*4882a593Smuzhiyun 		.chcr		= SM_INC | RS_ERS | 0x40000000 |
122*4882a593Smuzhiyun 				  TS_INDEX2VAL(XMIT_SZ_16BIT),
123*4882a593Smuzhiyun 		.mid_rid	= 0xc5,
124*4882a593Smuzhiyun 	},
125*4882a593Smuzhiyun 	{
126*4882a593Smuzhiyun 		.slave_id	= SHDMA_SLAVE_SDHI_RX,
127*4882a593Smuzhiyun 		.addr		= 0x1fe50030,
128*4882a593Smuzhiyun 		.chcr		= DM_INC | RS_ERS | 0x40000000 |
129*4882a593Smuzhiyun 				  TS_INDEX2VAL(XMIT_SZ_16BIT),
130*4882a593Smuzhiyun 		.mid_rid	= 0xc6,
131*4882a593Smuzhiyun 	},
132*4882a593Smuzhiyun 	{
133*4882a593Smuzhiyun 		.slave_id	= SHDMA_SLAVE_MMCIF_TX,
134*4882a593Smuzhiyun 		.addr		= 0x1fcb0034,
135*4882a593Smuzhiyun 		.chcr		= SM_INC | RS_ERS | 0x40000000 |
136*4882a593Smuzhiyun 				  TS_INDEX2VAL(XMIT_SZ_32BIT),
137*4882a593Smuzhiyun 		.mid_rid	= 0xd3,
138*4882a593Smuzhiyun 	},
139*4882a593Smuzhiyun 	{
140*4882a593Smuzhiyun 		.slave_id	= SHDMA_SLAVE_MMCIF_RX,
141*4882a593Smuzhiyun 		.addr		= 0x1fcb0034,
142*4882a593Smuzhiyun 		.chcr		= DM_INC | RS_ERS | 0x40000000 |
143*4882a593Smuzhiyun 				  TS_INDEX2VAL(XMIT_SZ_32BIT),
144*4882a593Smuzhiyun 		.mid_rid	= 0xd7,
145*4882a593Smuzhiyun 	},
146*4882a593Smuzhiyun };
147*4882a593Smuzhiyun 
148*4882a593Smuzhiyun static const struct sh_dmae_slave_config sh7757_dmae1_slaves[] = {
149*4882a593Smuzhiyun 	{
150*4882a593Smuzhiyun 		.slave_id	= SHDMA_SLAVE_SCIF2_TX,
151*4882a593Smuzhiyun 		.addr		= 0x1f4b000c,
152*4882a593Smuzhiyun 		.chcr		= SM_INC | RS_ERS | 0x40000000 |
153*4882a593Smuzhiyun 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
154*4882a593Smuzhiyun 		.mid_rid	= 0x21,
155*4882a593Smuzhiyun 	},
156*4882a593Smuzhiyun 	{
157*4882a593Smuzhiyun 		.slave_id	= SHDMA_SLAVE_SCIF2_RX,
158*4882a593Smuzhiyun 		.addr		= 0x1f4b0014,
159*4882a593Smuzhiyun 		.chcr		= DM_INC | RS_ERS | 0x40000000 |
160*4882a593Smuzhiyun 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
161*4882a593Smuzhiyun 		.mid_rid	= 0x22,
162*4882a593Smuzhiyun 	},
163*4882a593Smuzhiyun 	{
164*4882a593Smuzhiyun 		.slave_id	= SHDMA_SLAVE_SCIF3_TX,
165*4882a593Smuzhiyun 		.addr		= 0x1f4c000c,
166*4882a593Smuzhiyun 		.chcr		= SM_INC | RS_ERS | 0x40000000 |
167*4882a593Smuzhiyun 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
168*4882a593Smuzhiyun 		.mid_rid	= 0x29,
169*4882a593Smuzhiyun 	},
170*4882a593Smuzhiyun 	{
171*4882a593Smuzhiyun 		.slave_id	= SHDMA_SLAVE_SCIF3_RX,
172*4882a593Smuzhiyun 		.addr		= 0x1f4c0014,
173*4882a593Smuzhiyun 		.chcr		= DM_INC | RS_ERS | 0x40000000 |
174*4882a593Smuzhiyun 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
175*4882a593Smuzhiyun 		.mid_rid	= 0x2a,
176*4882a593Smuzhiyun 	},
177*4882a593Smuzhiyun 	{
178*4882a593Smuzhiyun 		.slave_id	= SHDMA_SLAVE_SCIF4_TX,
179*4882a593Smuzhiyun 		.addr		= 0x1f4d000c,
180*4882a593Smuzhiyun 		.chcr		= SM_INC | RS_ERS | 0x40000000 |
181*4882a593Smuzhiyun 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
182*4882a593Smuzhiyun 		.mid_rid	= 0x41,
183*4882a593Smuzhiyun 	},
184*4882a593Smuzhiyun 	{
185*4882a593Smuzhiyun 		.slave_id	= SHDMA_SLAVE_SCIF4_RX,
186*4882a593Smuzhiyun 		.addr		= 0x1f4d0014,
187*4882a593Smuzhiyun 		.chcr		= DM_INC | RS_ERS | 0x40000000 |
188*4882a593Smuzhiyun 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
189*4882a593Smuzhiyun 		.mid_rid	= 0x42,
190*4882a593Smuzhiyun 	},
191*4882a593Smuzhiyun 	{
192*4882a593Smuzhiyun 		.slave_id	= SHDMA_SLAVE_RSPI_TX,
193*4882a593Smuzhiyun 		.addr		= 0xfe480004,
194*4882a593Smuzhiyun 		.chcr		= SM_INC | RS_ERS | 0x40000000 |
195*4882a593Smuzhiyun 				  TS_INDEX2VAL(XMIT_SZ_16BIT),
196*4882a593Smuzhiyun 		.mid_rid	= 0xc1,
197*4882a593Smuzhiyun 	},
198*4882a593Smuzhiyun 	{
199*4882a593Smuzhiyun 		.slave_id	= SHDMA_SLAVE_RSPI_RX,
200*4882a593Smuzhiyun 		.addr		= 0xfe480004,
201*4882a593Smuzhiyun 		.chcr		= DM_INC | RS_ERS | 0x40000000 |
202*4882a593Smuzhiyun 				  TS_INDEX2VAL(XMIT_SZ_16BIT),
203*4882a593Smuzhiyun 		.mid_rid	= 0xc2,
204*4882a593Smuzhiyun 	},
205*4882a593Smuzhiyun };
206*4882a593Smuzhiyun 
207*4882a593Smuzhiyun static const struct sh_dmae_slave_config sh7757_dmae2_slaves[] = {
208*4882a593Smuzhiyun 	{
209*4882a593Smuzhiyun 		.slave_id	= SHDMA_SLAVE_RIIC0_TX,
210*4882a593Smuzhiyun 		.addr		= 0x1e500012,
211*4882a593Smuzhiyun 		.chcr		= SM_INC | RS_ERS | 0x40000000 |
212*4882a593Smuzhiyun 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
213*4882a593Smuzhiyun 		.mid_rid	= 0x21,
214*4882a593Smuzhiyun 	},
215*4882a593Smuzhiyun 	{
216*4882a593Smuzhiyun 		.slave_id	= SHDMA_SLAVE_RIIC0_RX,
217*4882a593Smuzhiyun 		.addr		= 0x1e500013,
218*4882a593Smuzhiyun 		.chcr		= DM_INC | RS_ERS | 0x40000000 |
219*4882a593Smuzhiyun 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
220*4882a593Smuzhiyun 		.mid_rid	= 0x22,
221*4882a593Smuzhiyun 	},
222*4882a593Smuzhiyun 	{
223*4882a593Smuzhiyun 		.slave_id	= SHDMA_SLAVE_RIIC1_TX,
224*4882a593Smuzhiyun 		.addr		= 0x1e510012,
225*4882a593Smuzhiyun 		.chcr		= SM_INC | RS_ERS | 0x40000000 |
226*4882a593Smuzhiyun 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
227*4882a593Smuzhiyun 		.mid_rid	= 0x29,
228*4882a593Smuzhiyun 	},
229*4882a593Smuzhiyun 	{
230*4882a593Smuzhiyun 		.slave_id	= SHDMA_SLAVE_RIIC1_RX,
231*4882a593Smuzhiyun 		.addr		= 0x1e510013,
232*4882a593Smuzhiyun 		.chcr		= DM_INC | RS_ERS | 0x40000000 |
233*4882a593Smuzhiyun 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
234*4882a593Smuzhiyun 		.mid_rid	= 0x2a,
235*4882a593Smuzhiyun 	},
236*4882a593Smuzhiyun 	{
237*4882a593Smuzhiyun 		.slave_id	= SHDMA_SLAVE_RIIC2_TX,
238*4882a593Smuzhiyun 		.addr		= 0x1e520012,
239*4882a593Smuzhiyun 		.chcr		= SM_INC | RS_ERS | 0x40000000 |
240*4882a593Smuzhiyun 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
241*4882a593Smuzhiyun 		.mid_rid	= 0xa1,
242*4882a593Smuzhiyun 	},
243*4882a593Smuzhiyun 	{
244*4882a593Smuzhiyun 		.slave_id	= SHDMA_SLAVE_RIIC2_RX,
245*4882a593Smuzhiyun 		.addr		= 0x1e520013,
246*4882a593Smuzhiyun 		.chcr		= DM_INC | RS_ERS | 0x40000000 |
247*4882a593Smuzhiyun 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
248*4882a593Smuzhiyun 		.mid_rid	= 0xa2,
249*4882a593Smuzhiyun 	},
250*4882a593Smuzhiyun 	{
251*4882a593Smuzhiyun 		.slave_id	= SHDMA_SLAVE_RIIC3_TX,
252*4882a593Smuzhiyun 		.addr		= 0x1e530012,
253*4882a593Smuzhiyun 		.chcr		= SM_INC | RS_ERS | 0x40000000 |
254*4882a593Smuzhiyun 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
255*4882a593Smuzhiyun 		.mid_rid	= 0xa9,
256*4882a593Smuzhiyun 	},
257*4882a593Smuzhiyun 	{
258*4882a593Smuzhiyun 		.slave_id	= SHDMA_SLAVE_RIIC3_RX,
259*4882a593Smuzhiyun 		.addr		= 0x1e530013,
260*4882a593Smuzhiyun 		.chcr		= DM_INC | RS_ERS | 0x40000000 |
261*4882a593Smuzhiyun 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
262*4882a593Smuzhiyun 		.mid_rid	= 0xaf,
263*4882a593Smuzhiyun 	},
264*4882a593Smuzhiyun 	{
265*4882a593Smuzhiyun 		.slave_id	= SHDMA_SLAVE_RIIC4_TX,
266*4882a593Smuzhiyun 		.addr		= 0x1e540012,
267*4882a593Smuzhiyun 		.chcr		= SM_INC | RS_ERS | 0x40000000 |
268*4882a593Smuzhiyun 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
269*4882a593Smuzhiyun 		.mid_rid	= 0xc5,
270*4882a593Smuzhiyun 	},
271*4882a593Smuzhiyun 	{
272*4882a593Smuzhiyun 		.slave_id	= SHDMA_SLAVE_RIIC4_RX,
273*4882a593Smuzhiyun 		.addr		= 0x1e540013,
274*4882a593Smuzhiyun 		.chcr		= DM_INC | RS_ERS | 0x40000000 |
275*4882a593Smuzhiyun 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
276*4882a593Smuzhiyun 		.mid_rid	= 0xc6,
277*4882a593Smuzhiyun 	},
278*4882a593Smuzhiyun };
279*4882a593Smuzhiyun 
280*4882a593Smuzhiyun static const struct sh_dmae_slave_config sh7757_dmae3_slaves[] = {
281*4882a593Smuzhiyun 	{
282*4882a593Smuzhiyun 		.slave_id	= SHDMA_SLAVE_RIIC5_TX,
283*4882a593Smuzhiyun 		.addr		= 0x1e550012,
284*4882a593Smuzhiyun 		.chcr		= SM_INC | RS_ERS | 0x40000000 |
285*4882a593Smuzhiyun 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
286*4882a593Smuzhiyun 		.mid_rid	= 0x21,
287*4882a593Smuzhiyun 	},
288*4882a593Smuzhiyun 	{
289*4882a593Smuzhiyun 		.slave_id	= SHDMA_SLAVE_RIIC5_RX,
290*4882a593Smuzhiyun 		.addr		= 0x1e550013,
291*4882a593Smuzhiyun 		.chcr		= DM_INC | RS_ERS | 0x40000000 |
292*4882a593Smuzhiyun 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
293*4882a593Smuzhiyun 		.mid_rid	= 0x22,
294*4882a593Smuzhiyun 	},
295*4882a593Smuzhiyun 	{
296*4882a593Smuzhiyun 		.slave_id	= SHDMA_SLAVE_RIIC6_TX,
297*4882a593Smuzhiyun 		.addr		= 0x1e560012,
298*4882a593Smuzhiyun 		.chcr		= SM_INC | RS_ERS | 0x40000000 |
299*4882a593Smuzhiyun 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
300*4882a593Smuzhiyun 		.mid_rid	= 0x29,
301*4882a593Smuzhiyun 	},
302*4882a593Smuzhiyun 	{
303*4882a593Smuzhiyun 		.slave_id	= SHDMA_SLAVE_RIIC6_RX,
304*4882a593Smuzhiyun 		.addr		= 0x1e560013,
305*4882a593Smuzhiyun 		.chcr		= DM_INC | RS_ERS | 0x40000000 |
306*4882a593Smuzhiyun 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
307*4882a593Smuzhiyun 		.mid_rid	= 0x2a,
308*4882a593Smuzhiyun 	},
309*4882a593Smuzhiyun 	{
310*4882a593Smuzhiyun 		.slave_id	= SHDMA_SLAVE_RIIC7_TX,
311*4882a593Smuzhiyun 		.addr		= 0x1e570012,
312*4882a593Smuzhiyun 		.chcr		= SM_INC | RS_ERS | 0x40000000 |
313*4882a593Smuzhiyun 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
314*4882a593Smuzhiyun 		.mid_rid	= 0x41,
315*4882a593Smuzhiyun 	},
316*4882a593Smuzhiyun 	{
317*4882a593Smuzhiyun 		.slave_id	= SHDMA_SLAVE_RIIC7_RX,
318*4882a593Smuzhiyun 		.addr		= 0x1e570013,
319*4882a593Smuzhiyun 		.chcr		= DM_INC | RS_ERS | 0x40000000 |
320*4882a593Smuzhiyun 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
321*4882a593Smuzhiyun 		.mid_rid	= 0x42,
322*4882a593Smuzhiyun 	},
323*4882a593Smuzhiyun 	{
324*4882a593Smuzhiyun 		.slave_id	= SHDMA_SLAVE_RIIC8_TX,
325*4882a593Smuzhiyun 		.addr		= 0x1e580012,
326*4882a593Smuzhiyun 		.chcr		= SM_INC | RS_ERS | 0x40000000 |
327*4882a593Smuzhiyun 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
328*4882a593Smuzhiyun 		.mid_rid	= 0x45,
329*4882a593Smuzhiyun 	},
330*4882a593Smuzhiyun 	{
331*4882a593Smuzhiyun 		.slave_id	= SHDMA_SLAVE_RIIC8_RX,
332*4882a593Smuzhiyun 		.addr		= 0x1e580013,
333*4882a593Smuzhiyun 		.chcr		= DM_INC | RS_ERS | 0x40000000 |
334*4882a593Smuzhiyun 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
335*4882a593Smuzhiyun 		.mid_rid	= 0x46,
336*4882a593Smuzhiyun 	},
337*4882a593Smuzhiyun 	{
338*4882a593Smuzhiyun 		.slave_id	= SHDMA_SLAVE_RIIC9_TX,
339*4882a593Smuzhiyun 		.addr		= 0x1e590012,
340*4882a593Smuzhiyun 		.chcr		= SM_INC | RS_ERS | 0x40000000 |
341*4882a593Smuzhiyun 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
342*4882a593Smuzhiyun 		.mid_rid	= 0x51,
343*4882a593Smuzhiyun 	},
344*4882a593Smuzhiyun 	{
345*4882a593Smuzhiyun 		.slave_id	= SHDMA_SLAVE_RIIC9_RX,
346*4882a593Smuzhiyun 		.addr		= 0x1e590013,
347*4882a593Smuzhiyun 		.chcr		= DM_INC | RS_ERS | 0x40000000 |
348*4882a593Smuzhiyun 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
349*4882a593Smuzhiyun 		.mid_rid	= 0x52,
350*4882a593Smuzhiyun 	},
351*4882a593Smuzhiyun };
352*4882a593Smuzhiyun 
353*4882a593Smuzhiyun static const struct sh_dmae_channel sh7757_dmae_channels[] = {
354*4882a593Smuzhiyun 	{
355*4882a593Smuzhiyun 		.offset = 0,
356*4882a593Smuzhiyun 		.dmars = 0,
357*4882a593Smuzhiyun 		.dmars_bit = 0,
358*4882a593Smuzhiyun 	}, {
359*4882a593Smuzhiyun 		.offset = 0x10,
360*4882a593Smuzhiyun 		.dmars = 0,
361*4882a593Smuzhiyun 		.dmars_bit = 8,
362*4882a593Smuzhiyun 	}, {
363*4882a593Smuzhiyun 		.offset = 0x20,
364*4882a593Smuzhiyun 		.dmars = 4,
365*4882a593Smuzhiyun 		.dmars_bit = 0,
366*4882a593Smuzhiyun 	}, {
367*4882a593Smuzhiyun 		.offset = 0x30,
368*4882a593Smuzhiyun 		.dmars = 4,
369*4882a593Smuzhiyun 		.dmars_bit = 8,
370*4882a593Smuzhiyun 	}, {
371*4882a593Smuzhiyun 		.offset = 0x50,
372*4882a593Smuzhiyun 		.dmars = 8,
373*4882a593Smuzhiyun 		.dmars_bit = 0,
374*4882a593Smuzhiyun 	}, {
375*4882a593Smuzhiyun 		.offset = 0x60,
376*4882a593Smuzhiyun 		.dmars = 8,
377*4882a593Smuzhiyun 		.dmars_bit = 8,
378*4882a593Smuzhiyun 	}
379*4882a593Smuzhiyun };
380*4882a593Smuzhiyun 
381*4882a593Smuzhiyun static const unsigned int ts_shift[] = TS_SHIFT;
382*4882a593Smuzhiyun 
383*4882a593Smuzhiyun static struct sh_dmae_pdata dma0_platform_data = {
384*4882a593Smuzhiyun 	.slave		= sh7757_dmae0_slaves,
385*4882a593Smuzhiyun 	.slave_num	= ARRAY_SIZE(sh7757_dmae0_slaves),
386*4882a593Smuzhiyun 	.channel	= sh7757_dmae_channels,
387*4882a593Smuzhiyun 	.channel_num	= ARRAY_SIZE(sh7757_dmae_channels),
388*4882a593Smuzhiyun 	.ts_low_shift	= CHCR_TS_LOW_SHIFT,
389*4882a593Smuzhiyun 	.ts_low_mask	= CHCR_TS_LOW_MASK,
390*4882a593Smuzhiyun 	.ts_high_shift	= CHCR_TS_HIGH_SHIFT,
391*4882a593Smuzhiyun 	.ts_high_mask	= CHCR_TS_HIGH_MASK,
392*4882a593Smuzhiyun 	.ts_shift	= ts_shift,
393*4882a593Smuzhiyun 	.ts_shift_num	= ARRAY_SIZE(ts_shift),
394*4882a593Smuzhiyun 	.dmaor_init	= DMAOR_INIT,
395*4882a593Smuzhiyun };
396*4882a593Smuzhiyun 
397*4882a593Smuzhiyun static struct sh_dmae_pdata dma1_platform_data = {
398*4882a593Smuzhiyun 	.slave		= sh7757_dmae1_slaves,
399*4882a593Smuzhiyun 	.slave_num	= ARRAY_SIZE(sh7757_dmae1_slaves),
400*4882a593Smuzhiyun 	.channel	= sh7757_dmae_channels,
401*4882a593Smuzhiyun 	.channel_num	= ARRAY_SIZE(sh7757_dmae_channels),
402*4882a593Smuzhiyun 	.ts_low_shift	= CHCR_TS_LOW_SHIFT,
403*4882a593Smuzhiyun 	.ts_low_mask	= CHCR_TS_LOW_MASK,
404*4882a593Smuzhiyun 	.ts_high_shift	= CHCR_TS_HIGH_SHIFT,
405*4882a593Smuzhiyun 	.ts_high_mask	= CHCR_TS_HIGH_MASK,
406*4882a593Smuzhiyun 	.ts_shift	= ts_shift,
407*4882a593Smuzhiyun 	.ts_shift_num	= ARRAY_SIZE(ts_shift),
408*4882a593Smuzhiyun 	.dmaor_init	= DMAOR_INIT,
409*4882a593Smuzhiyun };
410*4882a593Smuzhiyun 
411*4882a593Smuzhiyun static struct sh_dmae_pdata dma2_platform_data = {
412*4882a593Smuzhiyun 	.slave		= sh7757_dmae2_slaves,
413*4882a593Smuzhiyun 	.slave_num	= ARRAY_SIZE(sh7757_dmae2_slaves),
414*4882a593Smuzhiyun 	.channel	= sh7757_dmae_channels,
415*4882a593Smuzhiyun 	.channel_num	= ARRAY_SIZE(sh7757_dmae_channels),
416*4882a593Smuzhiyun 	.ts_low_shift	= CHCR_TS_LOW_SHIFT,
417*4882a593Smuzhiyun 	.ts_low_mask	= CHCR_TS_LOW_MASK,
418*4882a593Smuzhiyun 	.ts_high_shift	= CHCR_TS_HIGH_SHIFT,
419*4882a593Smuzhiyun 	.ts_high_mask	= CHCR_TS_HIGH_MASK,
420*4882a593Smuzhiyun 	.ts_shift	= ts_shift,
421*4882a593Smuzhiyun 	.ts_shift_num	= ARRAY_SIZE(ts_shift),
422*4882a593Smuzhiyun 	.dmaor_init	= DMAOR_INIT,
423*4882a593Smuzhiyun };
424*4882a593Smuzhiyun 
425*4882a593Smuzhiyun static struct sh_dmae_pdata dma3_platform_data = {
426*4882a593Smuzhiyun 	.slave		= sh7757_dmae3_slaves,
427*4882a593Smuzhiyun 	.slave_num	= ARRAY_SIZE(sh7757_dmae3_slaves),
428*4882a593Smuzhiyun 	.channel	= sh7757_dmae_channels,
429*4882a593Smuzhiyun 	.channel_num	= ARRAY_SIZE(sh7757_dmae_channels),
430*4882a593Smuzhiyun 	.ts_low_shift	= CHCR_TS_LOW_SHIFT,
431*4882a593Smuzhiyun 	.ts_low_mask	= CHCR_TS_LOW_MASK,
432*4882a593Smuzhiyun 	.ts_high_shift	= CHCR_TS_HIGH_SHIFT,
433*4882a593Smuzhiyun 	.ts_high_mask	= CHCR_TS_HIGH_MASK,
434*4882a593Smuzhiyun 	.ts_shift	= ts_shift,
435*4882a593Smuzhiyun 	.ts_shift_num	= ARRAY_SIZE(ts_shift),
436*4882a593Smuzhiyun 	.dmaor_init	= DMAOR_INIT,
437*4882a593Smuzhiyun };
438*4882a593Smuzhiyun 
439*4882a593Smuzhiyun /* channel 0 to 5 */
440*4882a593Smuzhiyun static struct resource sh7757_dmae0_resources[] = {
441*4882a593Smuzhiyun 	[0] = {
442*4882a593Smuzhiyun 		/* Channel registers and DMAOR */
443*4882a593Smuzhiyun 		.start	= 0xff608020,
444*4882a593Smuzhiyun 		.end	= 0xff60808f,
445*4882a593Smuzhiyun 		.flags	= IORESOURCE_MEM,
446*4882a593Smuzhiyun 	},
447*4882a593Smuzhiyun 	[1] = {
448*4882a593Smuzhiyun 		/* DMARSx */
449*4882a593Smuzhiyun 		.start	= 0xff609000,
450*4882a593Smuzhiyun 		.end	= 0xff60900b,
451*4882a593Smuzhiyun 		.flags	= IORESOURCE_MEM,
452*4882a593Smuzhiyun 	},
453*4882a593Smuzhiyun 	{
454*4882a593Smuzhiyun 		.name	= "error_irq",
455*4882a593Smuzhiyun 		.start	= evt2irq(0x640),
456*4882a593Smuzhiyun 		.end	= evt2irq(0x640),
457*4882a593Smuzhiyun 		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE,
458*4882a593Smuzhiyun 	},
459*4882a593Smuzhiyun };
460*4882a593Smuzhiyun 
461*4882a593Smuzhiyun /* channel 6 to 11 */
462*4882a593Smuzhiyun static struct resource sh7757_dmae1_resources[] = {
463*4882a593Smuzhiyun 	[0] = {
464*4882a593Smuzhiyun 		/* Channel registers and DMAOR */
465*4882a593Smuzhiyun 		.start	= 0xff618020,
466*4882a593Smuzhiyun 		.end	= 0xff61808f,
467*4882a593Smuzhiyun 		.flags	= IORESOURCE_MEM,
468*4882a593Smuzhiyun 	},
469*4882a593Smuzhiyun 	[1] = {
470*4882a593Smuzhiyun 		/* DMARSx */
471*4882a593Smuzhiyun 		.start	= 0xff619000,
472*4882a593Smuzhiyun 		.end	= 0xff61900b,
473*4882a593Smuzhiyun 		.flags	= IORESOURCE_MEM,
474*4882a593Smuzhiyun 	},
475*4882a593Smuzhiyun 	{
476*4882a593Smuzhiyun 		.name	= "error_irq",
477*4882a593Smuzhiyun 		.start	= evt2irq(0x640),
478*4882a593Smuzhiyun 		.end	= evt2irq(0x640),
479*4882a593Smuzhiyun 		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE,
480*4882a593Smuzhiyun 	},
481*4882a593Smuzhiyun 	{
482*4882a593Smuzhiyun 		/* IRQ for channels 4 */
483*4882a593Smuzhiyun 		.start	= evt2irq(0x7c0),
484*4882a593Smuzhiyun 		.end	= evt2irq(0x7c0),
485*4882a593Smuzhiyun 		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE,
486*4882a593Smuzhiyun 	},
487*4882a593Smuzhiyun 	{
488*4882a593Smuzhiyun 		/* IRQ for channels 5 */
489*4882a593Smuzhiyun 		.start	= evt2irq(0x7c0),
490*4882a593Smuzhiyun 		.end	= evt2irq(0x7c0),
491*4882a593Smuzhiyun 		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE,
492*4882a593Smuzhiyun 	},
493*4882a593Smuzhiyun 	{
494*4882a593Smuzhiyun 		/* IRQ for channels 6 */
495*4882a593Smuzhiyun 		.start	= evt2irq(0xd00),
496*4882a593Smuzhiyun 		.end	= evt2irq(0xd00),
497*4882a593Smuzhiyun 		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE,
498*4882a593Smuzhiyun 	},
499*4882a593Smuzhiyun 	{
500*4882a593Smuzhiyun 		/* IRQ for channels 7 */
501*4882a593Smuzhiyun 		.start	= evt2irq(0xd00),
502*4882a593Smuzhiyun 		.end	= evt2irq(0xd00),
503*4882a593Smuzhiyun 		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE,
504*4882a593Smuzhiyun 	},
505*4882a593Smuzhiyun 	{
506*4882a593Smuzhiyun 		/* IRQ for channels 8 */
507*4882a593Smuzhiyun 		.start	= evt2irq(0xd00),
508*4882a593Smuzhiyun 		.end	= evt2irq(0xd00),
509*4882a593Smuzhiyun 		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE,
510*4882a593Smuzhiyun 	},
511*4882a593Smuzhiyun 	{
512*4882a593Smuzhiyun 		/* IRQ for channels 9 */
513*4882a593Smuzhiyun 		.start	= evt2irq(0xd00),
514*4882a593Smuzhiyun 		.end	= evt2irq(0xd00),
515*4882a593Smuzhiyun 		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE,
516*4882a593Smuzhiyun 	},
517*4882a593Smuzhiyun 	{
518*4882a593Smuzhiyun 		/* IRQ for channels 10 */
519*4882a593Smuzhiyun 		.start	= evt2irq(0xd00),
520*4882a593Smuzhiyun 		.end	= evt2irq(0xd00),
521*4882a593Smuzhiyun 		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE,
522*4882a593Smuzhiyun 	},
523*4882a593Smuzhiyun 	{
524*4882a593Smuzhiyun 		/* IRQ for channels 11 */
525*4882a593Smuzhiyun 		.start	= evt2irq(0xd00),
526*4882a593Smuzhiyun 		.end	= evt2irq(0xd00),
527*4882a593Smuzhiyun 		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE,
528*4882a593Smuzhiyun 	},
529*4882a593Smuzhiyun };
530*4882a593Smuzhiyun 
531*4882a593Smuzhiyun /* channel 12 to 17 */
532*4882a593Smuzhiyun static struct resource sh7757_dmae2_resources[] = {
533*4882a593Smuzhiyun 	[0] = {
534*4882a593Smuzhiyun 		/* Channel registers and DMAOR */
535*4882a593Smuzhiyun 		.start	= 0xff708020,
536*4882a593Smuzhiyun 		.end	= 0xff70808f,
537*4882a593Smuzhiyun 		.flags	= IORESOURCE_MEM,
538*4882a593Smuzhiyun 	},
539*4882a593Smuzhiyun 	[1] = {
540*4882a593Smuzhiyun 		/* DMARSx */
541*4882a593Smuzhiyun 		.start	= 0xff709000,
542*4882a593Smuzhiyun 		.end	= 0xff70900b,
543*4882a593Smuzhiyun 		.flags	= IORESOURCE_MEM,
544*4882a593Smuzhiyun 	},
545*4882a593Smuzhiyun 	{
546*4882a593Smuzhiyun 		.name	= "error_irq",
547*4882a593Smuzhiyun 		.start	= evt2irq(0x2a60),
548*4882a593Smuzhiyun 		.end	= evt2irq(0x2a60),
549*4882a593Smuzhiyun 		.flags	= IORESOURCE_IRQ,
550*4882a593Smuzhiyun 	},
551*4882a593Smuzhiyun 	{
552*4882a593Smuzhiyun 		/* IRQ for channels 12 to 16 */
553*4882a593Smuzhiyun 		.start	= evt2irq(0x2400),
554*4882a593Smuzhiyun 		.end	= evt2irq(0x2480),
555*4882a593Smuzhiyun 		.flags	= IORESOURCE_IRQ,
556*4882a593Smuzhiyun 	},
557*4882a593Smuzhiyun 	{
558*4882a593Smuzhiyun 		/* IRQ for channel 17 */
559*4882a593Smuzhiyun 		.start	= evt2irq(0x24e0),
560*4882a593Smuzhiyun 		.end	= evt2irq(0x24e0),
561*4882a593Smuzhiyun 		.flags	= IORESOURCE_IRQ,
562*4882a593Smuzhiyun 	},
563*4882a593Smuzhiyun };
564*4882a593Smuzhiyun 
565*4882a593Smuzhiyun /* channel 18 to 23 */
566*4882a593Smuzhiyun static struct resource sh7757_dmae3_resources[] = {
567*4882a593Smuzhiyun 	[0] = {
568*4882a593Smuzhiyun 		/* Channel registers and DMAOR */
569*4882a593Smuzhiyun 		.start	= 0xff718020,
570*4882a593Smuzhiyun 		.end	= 0xff71808f,
571*4882a593Smuzhiyun 		.flags	= IORESOURCE_MEM,
572*4882a593Smuzhiyun 	},
573*4882a593Smuzhiyun 	[1] = {
574*4882a593Smuzhiyun 		/* DMARSx */
575*4882a593Smuzhiyun 		.start	= 0xff719000,
576*4882a593Smuzhiyun 		.end	= 0xff71900b,
577*4882a593Smuzhiyun 		.flags	= IORESOURCE_MEM,
578*4882a593Smuzhiyun 	},
579*4882a593Smuzhiyun 	{
580*4882a593Smuzhiyun 		.name	= "error_irq",
581*4882a593Smuzhiyun 		.start	= evt2irq(0x2a80),
582*4882a593Smuzhiyun 		.end	= evt2irq(0x2a80),
583*4882a593Smuzhiyun 		.flags	= IORESOURCE_IRQ,
584*4882a593Smuzhiyun 	},
585*4882a593Smuzhiyun 	{
586*4882a593Smuzhiyun 		/* IRQ for channels 18 to 22 */
587*4882a593Smuzhiyun 		.start	= evt2irq(0x2500),
588*4882a593Smuzhiyun 		.end	= evt2irq(0x2580),
589*4882a593Smuzhiyun 		.flags	= IORESOURCE_IRQ,
590*4882a593Smuzhiyun 	},
591*4882a593Smuzhiyun 	{
592*4882a593Smuzhiyun 		/* IRQ for channel 23 */
593*4882a593Smuzhiyun 		.start	= evt2irq(0x2600),
594*4882a593Smuzhiyun 		.end	= evt2irq(0x2600),
595*4882a593Smuzhiyun 		.flags	= IORESOURCE_IRQ,
596*4882a593Smuzhiyun 	},
597*4882a593Smuzhiyun };
598*4882a593Smuzhiyun 
599*4882a593Smuzhiyun static struct platform_device dma0_device = {
600*4882a593Smuzhiyun 	.name           = "sh-dma-engine",
601*4882a593Smuzhiyun 	.id             = 0,
602*4882a593Smuzhiyun 	.resource	= sh7757_dmae0_resources,
603*4882a593Smuzhiyun 	.num_resources	= ARRAY_SIZE(sh7757_dmae0_resources),
604*4882a593Smuzhiyun 	.dev            = {
605*4882a593Smuzhiyun 		.platform_data	= &dma0_platform_data,
606*4882a593Smuzhiyun 	},
607*4882a593Smuzhiyun };
608*4882a593Smuzhiyun 
609*4882a593Smuzhiyun static struct platform_device dma1_device = {
610*4882a593Smuzhiyun 	.name		= "sh-dma-engine",
611*4882a593Smuzhiyun 	.id		= 1,
612*4882a593Smuzhiyun 	.resource	= sh7757_dmae1_resources,
613*4882a593Smuzhiyun 	.num_resources	= ARRAY_SIZE(sh7757_dmae1_resources),
614*4882a593Smuzhiyun 	.dev		= {
615*4882a593Smuzhiyun 		.platform_data	= &dma1_platform_data,
616*4882a593Smuzhiyun 	},
617*4882a593Smuzhiyun };
618*4882a593Smuzhiyun 
619*4882a593Smuzhiyun static struct platform_device dma2_device = {
620*4882a593Smuzhiyun 	.name		= "sh-dma-engine",
621*4882a593Smuzhiyun 	.id		= 2,
622*4882a593Smuzhiyun 	.resource	= sh7757_dmae2_resources,
623*4882a593Smuzhiyun 	.num_resources	= ARRAY_SIZE(sh7757_dmae2_resources),
624*4882a593Smuzhiyun 	.dev		= {
625*4882a593Smuzhiyun 		.platform_data	= &dma2_platform_data,
626*4882a593Smuzhiyun 	},
627*4882a593Smuzhiyun };
628*4882a593Smuzhiyun 
629*4882a593Smuzhiyun static struct platform_device dma3_device = {
630*4882a593Smuzhiyun 	.name		= "sh-dma-engine",
631*4882a593Smuzhiyun 	.id		= 3,
632*4882a593Smuzhiyun 	.resource	= sh7757_dmae3_resources,
633*4882a593Smuzhiyun 	.num_resources	= ARRAY_SIZE(sh7757_dmae3_resources),
634*4882a593Smuzhiyun 	.dev		= {
635*4882a593Smuzhiyun 		.platform_data	= &dma3_platform_data,
636*4882a593Smuzhiyun 	},
637*4882a593Smuzhiyun };
638*4882a593Smuzhiyun 
639*4882a593Smuzhiyun static struct platform_device spi0_device = {
640*4882a593Smuzhiyun 	.name	= "sh_spi",
641*4882a593Smuzhiyun 	.id	= 0,
642*4882a593Smuzhiyun 	.dev	= {
643*4882a593Smuzhiyun 		.dma_mask		= NULL,
644*4882a593Smuzhiyun 		.coherent_dma_mask	= 0xffffffff,
645*4882a593Smuzhiyun 	},
646*4882a593Smuzhiyun 	.num_resources	= ARRAY_SIZE(spi0_resources),
647*4882a593Smuzhiyun 	.resource	= spi0_resources,
648*4882a593Smuzhiyun };
649*4882a593Smuzhiyun 
650*4882a593Smuzhiyun static struct resource spi1_resources[] = {
651*4882a593Smuzhiyun 	{
652*4882a593Smuzhiyun 		.start	= 0xffd8ee70,
653*4882a593Smuzhiyun 		.end	= 0xffd8eeff,
654*4882a593Smuzhiyun 		.flags	= IORESOURCE_MEM | IORESOURCE_MEM_8BIT,
655*4882a593Smuzhiyun 	},
656*4882a593Smuzhiyun 	{
657*4882a593Smuzhiyun 		.start	= evt2irq(0x8c0),
658*4882a593Smuzhiyun 		.flags	= IORESOURCE_IRQ,
659*4882a593Smuzhiyun 	},
660*4882a593Smuzhiyun };
661*4882a593Smuzhiyun 
662*4882a593Smuzhiyun static struct platform_device spi1_device = {
663*4882a593Smuzhiyun 	.name	= "sh_spi",
664*4882a593Smuzhiyun 	.id	= 1,
665*4882a593Smuzhiyun 	.num_resources	= ARRAY_SIZE(spi1_resources),
666*4882a593Smuzhiyun 	.resource	= spi1_resources,
667*4882a593Smuzhiyun };
668*4882a593Smuzhiyun 
669*4882a593Smuzhiyun static struct resource rspi_resources[] = {
670*4882a593Smuzhiyun 	{
671*4882a593Smuzhiyun 		.start	= 0xfe480000,
672*4882a593Smuzhiyun 		.end	= 0xfe4800ff,
673*4882a593Smuzhiyun 		.flags	= IORESOURCE_MEM,
674*4882a593Smuzhiyun 	},
675*4882a593Smuzhiyun 	{
676*4882a593Smuzhiyun 		.start	= evt2irq(0x1d80),
677*4882a593Smuzhiyun 		.flags	= IORESOURCE_IRQ,
678*4882a593Smuzhiyun 	},
679*4882a593Smuzhiyun };
680*4882a593Smuzhiyun 
681*4882a593Smuzhiyun static struct platform_device rspi_device = {
682*4882a593Smuzhiyun 	.name	= "rspi",
683*4882a593Smuzhiyun 	.id	= 2,
684*4882a593Smuzhiyun 	.num_resources	= ARRAY_SIZE(rspi_resources),
685*4882a593Smuzhiyun 	.resource	= rspi_resources,
686*4882a593Smuzhiyun };
687*4882a593Smuzhiyun 
688*4882a593Smuzhiyun static struct resource usb_ehci_resources[] = {
689*4882a593Smuzhiyun 	[0] = {
690*4882a593Smuzhiyun 		.start	= 0xfe4f1000,
691*4882a593Smuzhiyun 		.end	= 0xfe4f10ff,
692*4882a593Smuzhiyun 		.flags	= IORESOURCE_MEM,
693*4882a593Smuzhiyun 	},
694*4882a593Smuzhiyun 	[1] = {
695*4882a593Smuzhiyun 		.start	= evt2irq(0x920),
696*4882a593Smuzhiyun 		.end	= evt2irq(0x920),
697*4882a593Smuzhiyun 		.flags	= IORESOURCE_IRQ,
698*4882a593Smuzhiyun 	},
699*4882a593Smuzhiyun };
700*4882a593Smuzhiyun 
701*4882a593Smuzhiyun static struct platform_device usb_ehci_device = {
702*4882a593Smuzhiyun 	.name		= "sh_ehci",
703*4882a593Smuzhiyun 	.id		= -1,
704*4882a593Smuzhiyun 	.dev = {
705*4882a593Smuzhiyun 		.dma_mask = &usb_ehci_device.dev.coherent_dma_mask,
706*4882a593Smuzhiyun 		.coherent_dma_mask = DMA_BIT_MASK(32),
707*4882a593Smuzhiyun 	},
708*4882a593Smuzhiyun 	.num_resources	= ARRAY_SIZE(usb_ehci_resources),
709*4882a593Smuzhiyun 	.resource	= usb_ehci_resources,
710*4882a593Smuzhiyun };
711*4882a593Smuzhiyun 
712*4882a593Smuzhiyun static struct resource usb_ohci_resources[] = {
713*4882a593Smuzhiyun 	[0] = {
714*4882a593Smuzhiyun 		.start	= 0xfe4f1800,
715*4882a593Smuzhiyun 		.end	= 0xfe4f18ff,
716*4882a593Smuzhiyun 		.flags	= IORESOURCE_MEM,
717*4882a593Smuzhiyun 	},
718*4882a593Smuzhiyun 	[1] = {
719*4882a593Smuzhiyun 		.start	= evt2irq(0x920),
720*4882a593Smuzhiyun 		.end	= evt2irq(0x920),
721*4882a593Smuzhiyun 		.flags	= IORESOURCE_IRQ,
722*4882a593Smuzhiyun 	},
723*4882a593Smuzhiyun };
724*4882a593Smuzhiyun 
725*4882a593Smuzhiyun static struct usb_ohci_pdata usb_ohci_pdata;
726*4882a593Smuzhiyun 
727*4882a593Smuzhiyun static struct platform_device usb_ohci_device = {
728*4882a593Smuzhiyun 	.name		= "ohci-platform",
729*4882a593Smuzhiyun 	.id		= -1,
730*4882a593Smuzhiyun 	.dev = {
731*4882a593Smuzhiyun 		.dma_mask = &usb_ohci_device.dev.coherent_dma_mask,
732*4882a593Smuzhiyun 		.coherent_dma_mask = DMA_BIT_MASK(32),
733*4882a593Smuzhiyun 		.platform_data	= &usb_ohci_pdata,
734*4882a593Smuzhiyun 	},
735*4882a593Smuzhiyun 	.num_resources	= ARRAY_SIZE(usb_ohci_resources),
736*4882a593Smuzhiyun 	.resource	= usb_ohci_resources,
737*4882a593Smuzhiyun };
738*4882a593Smuzhiyun 
739*4882a593Smuzhiyun static struct platform_device *sh7757_devices[] __initdata = {
740*4882a593Smuzhiyun 	&scif2_device,
741*4882a593Smuzhiyun 	&scif3_device,
742*4882a593Smuzhiyun 	&scif4_device,
743*4882a593Smuzhiyun 	&tmu0_device,
744*4882a593Smuzhiyun 	&dma0_device,
745*4882a593Smuzhiyun 	&dma1_device,
746*4882a593Smuzhiyun 	&dma2_device,
747*4882a593Smuzhiyun 	&dma3_device,
748*4882a593Smuzhiyun 	&spi0_device,
749*4882a593Smuzhiyun 	&spi1_device,
750*4882a593Smuzhiyun 	&rspi_device,
751*4882a593Smuzhiyun 	&usb_ehci_device,
752*4882a593Smuzhiyun 	&usb_ohci_device,
753*4882a593Smuzhiyun };
754*4882a593Smuzhiyun 
sh7757_devices_setup(void)755*4882a593Smuzhiyun static int __init sh7757_devices_setup(void)
756*4882a593Smuzhiyun {
757*4882a593Smuzhiyun 	return platform_add_devices(sh7757_devices,
758*4882a593Smuzhiyun 				    ARRAY_SIZE(sh7757_devices));
759*4882a593Smuzhiyun }
760*4882a593Smuzhiyun arch_initcall(sh7757_devices_setup);
761*4882a593Smuzhiyun 
762*4882a593Smuzhiyun static struct platform_device *sh7757_early_devices[] __initdata = {
763*4882a593Smuzhiyun 	&scif2_device,
764*4882a593Smuzhiyun 	&scif3_device,
765*4882a593Smuzhiyun 	&scif4_device,
766*4882a593Smuzhiyun 	&tmu0_device,
767*4882a593Smuzhiyun };
768*4882a593Smuzhiyun 
plat_early_device_setup(void)769*4882a593Smuzhiyun void __init plat_early_device_setup(void)
770*4882a593Smuzhiyun {
771*4882a593Smuzhiyun 	sh_early_platform_add_devices(sh7757_early_devices,
772*4882a593Smuzhiyun 				   ARRAY_SIZE(sh7757_early_devices));
773*4882a593Smuzhiyun }
774*4882a593Smuzhiyun 
775*4882a593Smuzhiyun enum {
776*4882a593Smuzhiyun 	UNUSED = 0,
777*4882a593Smuzhiyun 
778*4882a593Smuzhiyun 	/* interrupt sources */
779*4882a593Smuzhiyun 
780*4882a593Smuzhiyun 	IRL0_LLLL, IRL0_LLLH, IRL0_LLHL, IRL0_LLHH,
781*4882a593Smuzhiyun 	IRL0_LHLL, IRL0_LHLH, IRL0_LHHL, IRL0_LHHH,
782*4882a593Smuzhiyun 	IRL0_HLLL, IRL0_HLLH, IRL0_HLHL, IRL0_HLHH,
783*4882a593Smuzhiyun 	IRL0_HHLL, IRL0_HHLH, IRL0_HHHL,
784*4882a593Smuzhiyun 
785*4882a593Smuzhiyun 	IRL4_LLLL, IRL4_LLLH, IRL4_LLHL, IRL4_LLHH,
786*4882a593Smuzhiyun 	IRL4_LHLL, IRL4_LHLH, IRL4_LHHL, IRL4_LHHH,
787*4882a593Smuzhiyun 	IRL4_HLLL, IRL4_HLLH, IRL4_HLHL, IRL4_HLHH,
788*4882a593Smuzhiyun 	IRL4_HHLL, IRL4_HHLH, IRL4_HHHL,
789*4882a593Smuzhiyun 	IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7,
790*4882a593Smuzhiyun 
791*4882a593Smuzhiyun 	SDHI, DVC,
792*4882a593Smuzhiyun 	IRQ8, IRQ9, IRQ11, IRQ10, IRQ12, IRQ13, IRQ14, IRQ15,
793*4882a593Smuzhiyun 	TMU0, TMU1, TMU2, TMU2_TICPI, TMU3, TMU4, TMU5,
794*4882a593Smuzhiyun 	HUDI,
795*4882a593Smuzhiyun 	ARC4,
796*4882a593Smuzhiyun 	DMAC0_5, DMAC6_7, DMAC8_11,
797*4882a593Smuzhiyun 	SCIF0, SCIF1, SCIF2, SCIF3, SCIF4,
798*4882a593Smuzhiyun 	USB0, USB1,
799*4882a593Smuzhiyun 	JMC,
800*4882a593Smuzhiyun 	SPI0, SPI1,
801*4882a593Smuzhiyun 	TMR01, TMR23, TMR45,
802*4882a593Smuzhiyun 	FRT,
803*4882a593Smuzhiyun 	LPC, LPC5, LPC6, LPC7, LPC8,
804*4882a593Smuzhiyun 	PECI0, PECI1, PECI2, PECI3, PECI4, PECI5,
805*4882a593Smuzhiyun 	ETHERC,
806*4882a593Smuzhiyun 	ADC0, ADC1,
807*4882a593Smuzhiyun 	SIM,
808*4882a593Smuzhiyun 	IIC0_0, IIC0_1, IIC0_2, IIC0_3,
809*4882a593Smuzhiyun 	IIC1_0, IIC1_1, IIC1_2, IIC1_3,
810*4882a593Smuzhiyun 	IIC2_0, IIC2_1, IIC2_2, IIC2_3,
811*4882a593Smuzhiyun 	IIC3_0, IIC3_1, IIC3_2, IIC3_3,
812*4882a593Smuzhiyun 	IIC4_0, IIC4_1, IIC4_2, IIC4_3,
813*4882a593Smuzhiyun 	IIC5_0, IIC5_1, IIC5_2, IIC5_3,
814*4882a593Smuzhiyun 	IIC6_0, IIC6_1, IIC6_2, IIC6_3,
815*4882a593Smuzhiyun 	IIC7_0, IIC7_1, IIC7_2, IIC7_3,
816*4882a593Smuzhiyun 	IIC8_0, IIC8_1, IIC8_2, IIC8_3,
817*4882a593Smuzhiyun 	IIC9_0, IIC9_1, IIC9_2, IIC9_3,
818*4882a593Smuzhiyun 	ONFICTL,
819*4882a593Smuzhiyun 	MMC1, MMC2,
820*4882a593Smuzhiyun 	ECCU,
821*4882a593Smuzhiyun 	PCIC,
822*4882a593Smuzhiyun 	G200,
823*4882a593Smuzhiyun 	RSPI,
824*4882a593Smuzhiyun 	SGPIO,
825*4882a593Smuzhiyun 	DMINT12, DMINT13, DMINT14, DMINT15, DMINT16, DMINT17, DMINT18, DMINT19,
826*4882a593Smuzhiyun 	DMINT20, DMINT21, DMINT22, DMINT23,
827*4882a593Smuzhiyun 	DDRECC,
828*4882a593Smuzhiyun 	TSIP,
829*4882a593Smuzhiyun 	PCIE_BRIDGE,
830*4882a593Smuzhiyun 	WDT0B, WDT1B, WDT2B, WDT3B, WDT4B, WDT5B, WDT6B, WDT7B, WDT8B,
831*4882a593Smuzhiyun 	GETHER0, GETHER1, GETHER2,
832*4882a593Smuzhiyun 	PBIA, PBIB, PBIC,
833*4882a593Smuzhiyun 	DMAE2, DMAE3,
834*4882a593Smuzhiyun 	SERMUX2, SERMUX3,
835*4882a593Smuzhiyun 
836*4882a593Smuzhiyun 	/* interrupt groups */
837*4882a593Smuzhiyun 
838*4882a593Smuzhiyun 	TMU012, TMU345,
839*4882a593Smuzhiyun };
840*4882a593Smuzhiyun 
841*4882a593Smuzhiyun static struct intc_vect vectors[] __initdata = {
842*4882a593Smuzhiyun 	INTC_VECT(SDHI, 0x480), INTC_VECT(SDHI, 0x04a0),
843*4882a593Smuzhiyun 	INTC_VECT(SDHI, 0x4c0),
844*4882a593Smuzhiyun 	INTC_VECT(DVC, 0x4e0),
845*4882a593Smuzhiyun 	INTC_VECT(IRQ8, 0x500), INTC_VECT(IRQ9, 0x520),
846*4882a593Smuzhiyun 	INTC_VECT(IRQ10, 0x540),
847*4882a593Smuzhiyun 	INTC_VECT(TMU0, 0x580), INTC_VECT(TMU1, 0x5a0),
848*4882a593Smuzhiyun 	INTC_VECT(TMU2, 0x5c0), INTC_VECT(TMU2_TICPI, 0x5e0),
849*4882a593Smuzhiyun 	INTC_VECT(HUDI, 0x600),
850*4882a593Smuzhiyun 	INTC_VECT(ARC4, 0x620),
851*4882a593Smuzhiyun 	INTC_VECT(DMAC0_5, 0x640), INTC_VECT(DMAC0_5, 0x660),
852*4882a593Smuzhiyun 	INTC_VECT(DMAC0_5, 0x680), INTC_VECT(DMAC0_5, 0x6a0),
853*4882a593Smuzhiyun 	INTC_VECT(DMAC0_5, 0x6c0),
854*4882a593Smuzhiyun 	INTC_VECT(IRQ11, 0x6e0),
855*4882a593Smuzhiyun 	INTC_VECT(SCIF2, 0x700), INTC_VECT(SCIF2, 0x720),
856*4882a593Smuzhiyun 	INTC_VECT(SCIF2, 0x740), INTC_VECT(SCIF2, 0x760),
857*4882a593Smuzhiyun 	INTC_VECT(DMAC0_5, 0x780), INTC_VECT(DMAC0_5, 0x7a0),
858*4882a593Smuzhiyun 	INTC_VECT(DMAC6_7, 0x7c0), INTC_VECT(DMAC6_7, 0x7e0),
859*4882a593Smuzhiyun 	INTC_VECT(USB0, 0x840),
860*4882a593Smuzhiyun 	INTC_VECT(IRQ12, 0x880),
861*4882a593Smuzhiyun 	INTC_VECT(JMC, 0x8a0),
862*4882a593Smuzhiyun 	INTC_VECT(SPI1, 0x8c0),
863*4882a593Smuzhiyun 	INTC_VECT(IRQ13, 0x8e0), INTC_VECT(IRQ14, 0x900),
864*4882a593Smuzhiyun 	INTC_VECT(USB1, 0x920),
865*4882a593Smuzhiyun 	INTC_VECT(TMR01, 0xa00), INTC_VECT(TMR23, 0xa20),
866*4882a593Smuzhiyun 	INTC_VECT(TMR45, 0xa40),
867*4882a593Smuzhiyun 	INTC_VECT(FRT, 0xa80),
868*4882a593Smuzhiyun 	INTC_VECT(LPC, 0xaa0), INTC_VECT(LPC, 0xac0),
869*4882a593Smuzhiyun 	INTC_VECT(LPC, 0xae0), INTC_VECT(LPC, 0xb00),
870*4882a593Smuzhiyun 	INTC_VECT(LPC, 0xb20),
871*4882a593Smuzhiyun 	INTC_VECT(SCIF0, 0xb40), INTC_VECT(SCIF1, 0xb60),
872*4882a593Smuzhiyun 	INTC_VECT(SCIF3, 0xb80), INTC_VECT(SCIF3, 0xba0),
873*4882a593Smuzhiyun 	INTC_VECT(SCIF3, 0xbc0), INTC_VECT(SCIF3, 0xbe0),
874*4882a593Smuzhiyun 	INTC_VECT(PECI0, 0xc00), INTC_VECT(PECI1, 0xc20),
875*4882a593Smuzhiyun 	INTC_VECT(PECI2, 0xc40),
876*4882a593Smuzhiyun 	INTC_VECT(IRQ15, 0xc60),
877*4882a593Smuzhiyun 	INTC_VECT(ETHERC, 0xc80), INTC_VECT(ETHERC, 0xca0),
878*4882a593Smuzhiyun 	INTC_VECT(SPI0, 0xcc0),
879*4882a593Smuzhiyun 	INTC_VECT(ADC1, 0xce0),
880*4882a593Smuzhiyun 	INTC_VECT(DMAC8_11, 0xd00), INTC_VECT(DMAC8_11, 0xd20),
881*4882a593Smuzhiyun 	INTC_VECT(DMAC8_11, 0xd40), INTC_VECT(DMAC8_11, 0xd60),
882*4882a593Smuzhiyun 	INTC_VECT(SIM, 0xd80), INTC_VECT(SIM, 0xda0),
883*4882a593Smuzhiyun 	INTC_VECT(SIM, 0xdc0), INTC_VECT(SIM, 0xde0),
884*4882a593Smuzhiyun 	INTC_VECT(TMU3, 0xe00), INTC_VECT(TMU4, 0xe20),
885*4882a593Smuzhiyun 	INTC_VECT(TMU5, 0xe40),
886*4882a593Smuzhiyun 	INTC_VECT(ADC0, 0xe60),
887*4882a593Smuzhiyun 	INTC_VECT(SCIF4, 0xf00), INTC_VECT(SCIF4, 0xf20),
888*4882a593Smuzhiyun 	INTC_VECT(SCIF4, 0xf40), INTC_VECT(SCIF4, 0xf60),
889*4882a593Smuzhiyun 	INTC_VECT(IIC0_0, 0x1400), INTC_VECT(IIC0_1, 0x1420),
890*4882a593Smuzhiyun 	INTC_VECT(IIC0_2, 0x1440), INTC_VECT(IIC0_3, 0x1460),
891*4882a593Smuzhiyun 	INTC_VECT(IIC1_0, 0x1480), INTC_VECT(IIC1_1, 0x14e0),
892*4882a593Smuzhiyun 	INTC_VECT(IIC1_2, 0x1500), INTC_VECT(IIC1_3, 0x1520),
893*4882a593Smuzhiyun 	INTC_VECT(IIC2_0, 0x1540), INTC_VECT(IIC2_1, 0x1560),
894*4882a593Smuzhiyun 	INTC_VECT(IIC2_2, 0x1580), INTC_VECT(IIC2_3, 0x1600),
895*4882a593Smuzhiyun 	INTC_VECT(IIC3_0, 0x1620), INTC_VECT(IIC3_1, 0x1640),
896*4882a593Smuzhiyun 	INTC_VECT(IIC3_2, 0x16e0), INTC_VECT(IIC3_3, 0x1700),
897*4882a593Smuzhiyun 	INTC_VECT(IIC4_0, 0x17c0), INTC_VECT(IIC4_1, 0x1800),
898*4882a593Smuzhiyun 	INTC_VECT(IIC4_2, 0x1820), INTC_VECT(IIC4_3, 0x1840),
899*4882a593Smuzhiyun 	INTC_VECT(IIC5_0, 0x1860), INTC_VECT(IIC5_1, 0x1880),
900*4882a593Smuzhiyun 	INTC_VECT(IIC5_2, 0x18a0), INTC_VECT(IIC5_3, 0x18c0),
901*4882a593Smuzhiyun 	INTC_VECT(IIC6_0, 0x18e0), INTC_VECT(IIC6_1, 0x1900),
902*4882a593Smuzhiyun 	INTC_VECT(IIC6_2, 0x1920),
903*4882a593Smuzhiyun 	INTC_VECT(ONFICTL, 0x1960),
904*4882a593Smuzhiyun 	INTC_VECT(IIC6_3, 0x1980),
905*4882a593Smuzhiyun 	INTC_VECT(IIC7_0, 0x19a0), INTC_VECT(IIC7_1, 0x1a00),
906*4882a593Smuzhiyun 	INTC_VECT(IIC7_2, 0x1a20), INTC_VECT(IIC7_3, 0x1a40),
907*4882a593Smuzhiyun 	INTC_VECT(IIC8_0, 0x1a60), INTC_VECT(IIC8_1, 0x1a80),
908*4882a593Smuzhiyun 	INTC_VECT(IIC8_2, 0x1aa0), INTC_VECT(IIC8_3, 0x1b40),
909*4882a593Smuzhiyun 	INTC_VECT(IIC9_0, 0x1b60), INTC_VECT(IIC9_1, 0x1b80),
910*4882a593Smuzhiyun 	INTC_VECT(IIC9_2, 0x1c00), INTC_VECT(IIC9_3, 0x1c20),
911*4882a593Smuzhiyun 	INTC_VECT(MMC1, 0x1c60), INTC_VECT(MMC2, 0x1c80),
912*4882a593Smuzhiyun 	INTC_VECT(ECCU, 0x1cc0),
913*4882a593Smuzhiyun 	INTC_VECT(PCIC, 0x1ce0),
914*4882a593Smuzhiyun 	INTC_VECT(G200, 0x1d00),
915*4882a593Smuzhiyun 	INTC_VECT(RSPI, 0x1d80), INTC_VECT(RSPI, 0x1da0),
916*4882a593Smuzhiyun 	INTC_VECT(RSPI, 0x1dc0), INTC_VECT(RSPI, 0x1de0),
917*4882a593Smuzhiyun 	INTC_VECT(PECI3, 0x1ec0), INTC_VECT(PECI4, 0x1ee0),
918*4882a593Smuzhiyun 	INTC_VECT(PECI5, 0x1f00),
919*4882a593Smuzhiyun 	INTC_VECT(SGPIO, 0x1f80), INTC_VECT(SGPIO, 0x1fa0),
920*4882a593Smuzhiyun 	INTC_VECT(SGPIO, 0x1fc0),
921*4882a593Smuzhiyun 	INTC_VECT(DMINT12, 0x2400), INTC_VECT(DMINT13, 0x2420),
922*4882a593Smuzhiyun 	INTC_VECT(DMINT14, 0x2440), INTC_VECT(DMINT15, 0x2460),
923*4882a593Smuzhiyun 	INTC_VECT(DMINT16, 0x2480), INTC_VECT(DMINT17, 0x24e0),
924*4882a593Smuzhiyun 	INTC_VECT(DMINT18, 0x2500), INTC_VECT(DMINT19, 0x2520),
925*4882a593Smuzhiyun 	INTC_VECT(DMINT20, 0x2540), INTC_VECT(DMINT21, 0x2560),
926*4882a593Smuzhiyun 	INTC_VECT(DMINT22, 0x2580), INTC_VECT(DMINT23, 0x2600),
927*4882a593Smuzhiyun 	INTC_VECT(DDRECC, 0x2620),
928*4882a593Smuzhiyun 	INTC_VECT(TSIP, 0x2640),
929*4882a593Smuzhiyun 	INTC_VECT(PCIE_BRIDGE, 0x27c0),
930*4882a593Smuzhiyun 	INTC_VECT(WDT0B, 0x2800), INTC_VECT(WDT1B, 0x2820),
931*4882a593Smuzhiyun 	INTC_VECT(WDT2B, 0x2840), INTC_VECT(WDT3B, 0x2860),
932*4882a593Smuzhiyun 	INTC_VECT(WDT4B, 0x2880), INTC_VECT(WDT5B, 0x28a0),
933*4882a593Smuzhiyun 	INTC_VECT(WDT6B, 0x28c0), INTC_VECT(WDT7B, 0x28e0),
934*4882a593Smuzhiyun 	INTC_VECT(WDT8B, 0x2900),
935*4882a593Smuzhiyun 	INTC_VECT(GETHER0, 0x2960), INTC_VECT(GETHER1, 0x2980),
936*4882a593Smuzhiyun 	INTC_VECT(GETHER2, 0x29a0),
937*4882a593Smuzhiyun 	INTC_VECT(PBIA, 0x2a00), INTC_VECT(PBIB, 0x2a20),
938*4882a593Smuzhiyun 	INTC_VECT(PBIC, 0x2a40),
939*4882a593Smuzhiyun 	INTC_VECT(DMAE2, 0x2a60), INTC_VECT(DMAE3, 0x2a80),
940*4882a593Smuzhiyun 	INTC_VECT(SERMUX2, 0x2aa0), INTC_VECT(SERMUX3, 0x2b40),
941*4882a593Smuzhiyun 	INTC_VECT(LPC5, 0x2b60), INTC_VECT(LPC6, 0x2b80),
942*4882a593Smuzhiyun 	INTC_VECT(LPC7, 0x2c00), INTC_VECT(LPC8, 0x2c20),
943*4882a593Smuzhiyun };
944*4882a593Smuzhiyun 
945*4882a593Smuzhiyun static struct intc_group groups[] __initdata = {
946*4882a593Smuzhiyun 	INTC_GROUP(TMU012, TMU0, TMU1, TMU2, TMU2_TICPI),
947*4882a593Smuzhiyun 	INTC_GROUP(TMU345, TMU3, TMU4, TMU5),
948*4882a593Smuzhiyun };
949*4882a593Smuzhiyun 
950*4882a593Smuzhiyun static struct intc_mask_reg mask_registers[] __initdata = {
951*4882a593Smuzhiyun 	{ 0xffd00044, 0xffd00064, 32, /* INTMSK0 / INTMSKCLR0 */
952*4882a593Smuzhiyun 	  { IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7 } },
953*4882a593Smuzhiyun 
954*4882a593Smuzhiyun 	{ 0xffd40080, 0xffd40084, 32, /* INTMSK2 / INTMSKCLR2 */
955*4882a593Smuzhiyun 	  { IRL0_LLLL, IRL0_LLLH, IRL0_LLHL, IRL0_LLHH,
956*4882a593Smuzhiyun 	    IRL0_LHLL, IRL0_LHLH, IRL0_LHHL, IRL0_LHHH,
957*4882a593Smuzhiyun 	    IRL0_HLLL, IRL0_HLLH, IRL0_HLHL, IRL0_HLHH,
958*4882a593Smuzhiyun 	    IRL0_HHLL, IRL0_HHLH, IRL0_HHHL, 0,
959*4882a593Smuzhiyun 	    IRL4_LLLL, IRL4_LLLH, IRL4_LLHL, IRL4_LLHH,
960*4882a593Smuzhiyun 	    IRL4_LHLL, IRL4_LHLH, IRL4_LHHL, IRL4_LHHH,
961*4882a593Smuzhiyun 	    IRL4_HLLL, IRL4_HLLH, IRL4_HLHL, IRL4_HLHH,
962*4882a593Smuzhiyun 	    IRL4_HHLL, IRL4_HHLH, IRL4_HHHL, 0, } },
963*4882a593Smuzhiyun 
964*4882a593Smuzhiyun 	{ 0xffd40038, 0xffd4003c, 32, /* INT2MSKR / INT2MSKCR */
965*4882a593Smuzhiyun 	  { 0, 0, 0, 0, 0, 0, 0, 0,
966*4882a593Smuzhiyun 	    0, DMAC8_11, 0, PECI0, LPC, FRT, 0, TMR45,
967*4882a593Smuzhiyun 	    TMR23, TMR01, 0, 0, 0, 0, 0, DMAC0_5,
968*4882a593Smuzhiyun 	    HUDI, 0, 0, SCIF3, SCIF2, SDHI, TMU345, TMU012
969*4882a593Smuzhiyun 	     } },
970*4882a593Smuzhiyun 
971*4882a593Smuzhiyun 	{ 0xffd400d0, 0xffd400d4, 32, /* INT2MSKR1 / INT2MSKCR1 */
972*4882a593Smuzhiyun 	  { IRQ15, IRQ14, IRQ13, IRQ12, IRQ11, IRQ10, SCIF4, ETHERC,
973*4882a593Smuzhiyun 	    IRQ9, IRQ8, SCIF1, SCIF0, USB0, 0, 0, USB1,
974*4882a593Smuzhiyun 	    ADC1, 0, DMAC6_7, ADC0, SPI0, SIM, PECI2, PECI1,
975*4882a593Smuzhiyun 	    ARC4, 0, SPI1, JMC, 0, 0, 0, DVC
976*4882a593Smuzhiyun 	     } },
977*4882a593Smuzhiyun 
978*4882a593Smuzhiyun 	{ 0xffd10038, 0xffd1003c, 32, /* INT2MSKR2 / INT2MSKCR2 */
979*4882a593Smuzhiyun 	  { IIC4_1, IIC4_2, IIC5_0, ONFICTL, 0, 0, SGPIO, 0,
980*4882a593Smuzhiyun 	    0, G200, 0, IIC9_2, IIC8_2, IIC8_1, IIC8_0, IIC7_3,
981*4882a593Smuzhiyun 	    IIC7_2, IIC7_1, IIC6_3, IIC0_0, IIC0_1, IIC0_2, IIC0_3, IIC3_1,
982*4882a593Smuzhiyun 	    IIC2_3, 0, IIC2_1, IIC9_1, IIC3_3, IIC1_0, 0, IIC2_2
983*4882a593Smuzhiyun 	     } },
984*4882a593Smuzhiyun 
985*4882a593Smuzhiyun 	{ 0xffd100d0, 0xffd100d4, 32, /* INT2MSKR3 / INT2MSKCR3 */
986*4882a593Smuzhiyun 	  { MMC1, IIC6_1, IIC6_0, IIC5_1, IIC3_2, IIC2_0, PECI5, MMC2,
987*4882a593Smuzhiyun 	    IIC1_3, IIC1_2, IIC9_0, IIC8_3, IIC4_3, IIC7_0, 0, IIC6_2,
988*4882a593Smuzhiyun 	    PCIC, 0, IIC4_0, 0, ECCU, RSPI, 0, IIC9_3,
989*4882a593Smuzhiyun 	    IIC3_0, 0, IIC5_3, IIC5_2, 0, 0, 0, IIC1_1
990*4882a593Smuzhiyun 	     } },
991*4882a593Smuzhiyun 
992*4882a593Smuzhiyun 	{ 0xffd20038, 0xffd2003c, 32, /* INT2MSKR4 / INT2MSKCR4 */
993*4882a593Smuzhiyun 	  { WDT0B, WDT1B, WDT3B, GETHER0, 0, 0, 0, 0,
994*4882a593Smuzhiyun 	    0, 0, 0, LPC7, SERMUX2, DMAE3, DMAE2, PBIC,
995*4882a593Smuzhiyun 	    PBIB, PBIA, GETHER1, DMINT12, DMINT13, DMINT14, DMINT15, TSIP,
996*4882a593Smuzhiyun 	    DMINT23, 0, DMINT21, LPC6, 0, DMINT16, 0, DMINT22
997*4882a593Smuzhiyun 	     } },
998*4882a593Smuzhiyun 
999*4882a593Smuzhiyun 	{ 0xffd200d0, 0xffd200d4, 32, /* INT2MSKR5 / INT2MSKCR5 */
1000*4882a593Smuzhiyun 	  { 0, WDT8B, WDT7B, WDT4B, 0, DMINT20, 0, 0,
1001*4882a593Smuzhiyun 	    DMINT19, DMINT18, LPC5, SERMUX3, WDT2B, GETHER2, 0, 0,
1002*4882a593Smuzhiyun 	    0, 0, PCIE_BRIDGE, 0, 0, 0, 0, LPC8,
1003*4882a593Smuzhiyun 	    DDRECC, 0, WDT6B, WDT5B, 0, 0, 0, DMINT17
1004*4882a593Smuzhiyun 	     } },
1005*4882a593Smuzhiyun };
1006*4882a593Smuzhiyun 
1007*4882a593Smuzhiyun #define INTPRI		0xffd00010
1008*4882a593Smuzhiyun #define INT2PRI0	0xffd40000
1009*4882a593Smuzhiyun #define INT2PRI1	0xffd40004
1010*4882a593Smuzhiyun #define INT2PRI2	0xffd40008
1011*4882a593Smuzhiyun #define INT2PRI3	0xffd4000c
1012*4882a593Smuzhiyun #define INT2PRI4	0xffd40010
1013*4882a593Smuzhiyun #define INT2PRI5	0xffd40014
1014*4882a593Smuzhiyun #define INT2PRI6	0xffd40018
1015*4882a593Smuzhiyun #define INT2PRI7	0xffd4001c
1016*4882a593Smuzhiyun #define INT2PRI8	0xffd400a0
1017*4882a593Smuzhiyun #define INT2PRI9	0xffd400a4
1018*4882a593Smuzhiyun #define INT2PRI10	0xffd400a8
1019*4882a593Smuzhiyun #define INT2PRI11	0xffd400ac
1020*4882a593Smuzhiyun #define INT2PRI12	0xffd400b0
1021*4882a593Smuzhiyun #define INT2PRI13	0xffd400b4
1022*4882a593Smuzhiyun #define INT2PRI14	0xffd400b8
1023*4882a593Smuzhiyun #define INT2PRI15	0xffd400bc
1024*4882a593Smuzhiyun #define INT2PRI16	0xffd10000
1025*4882a593Smuzhiyun #define INT2PRI17	0xffd10004
1026*4882a593Smuzhiyun #define INT2PRI18	0xffd10008
1027*4882a593Smuzhiyun #define INT2PRI19	0xffd1000c
1028*4882a593Smuzhiyun #define INT2PRI20	0xffd10010
1029*4882a593Smuzhiyun #define INT2PRI21	0xffd10014
1030*4882a593Smuzhiyun #define INT2PRI22	0xffd10018
1031*4882a593Smuzhiyun #define INT2PRI23	0xffd1001c
1032*4882a593Smuzhiyun #define INT2PRI24	0xffd100a0
1033*4882a593Smuzhiyun #define INT2PRI25	0xffd100a4
1034*4882a593Smuzhiyun #define INT2PRI26	0xffd100a8
1035*4882a593Smuzhiyun #define INT2PRI27	0xffd100ac
1036*4882a593Smuzhiyun #define INT2PRI28	0xffd100b0
1037*4882a593Smuzhiyun #define INT2PRI29	0xffd100b4
1038*4882a593Smuzhiyun #define INT2PRI30	0xffd100b8
1039*4882a593Smuzhiyun #define INT2PRI31	0xffd100bc
1040*4882a593Smuzhiyun #define INT2PRI32	0xffd20000
1041*4882a593Smuzhiyun #define INT2PRI33	0xffd20004
1042*4882a593Smuzhiyun #define INT2PRI34	0xffd20008
1043*4882a593Smuzhiyun #define INT2PRI35	0xffd2000c
1044*4882a593Smuzhiyun #define INT2PRI36	0xffd20010
1045*4882a593Smuzhiyun #define INT2PRI37	0xffd20014
1046*4882a593Smuzhiyun #define INT2PRI38	0xffd20018
1047*4882a593Smuzhiyun #define INT2PRI39	0xffd2001c
1048*4882a593Smuzhiyun #define INT2PRI40	0xffd200a0
1049*4882a593Smuzhiyun #define INT2PRI41	0xffd200a4
1050*4882a593Smuzhiyun #define INT2PRI42	0xffd200a8
1051*4882a593Smuzhiyun #define INT2PRI43	0xffd200ac
1052*4882a593Smuzhiyun #define INT2PRI44	0xffd200b0
1053*4882a593Smuzhiyun #define INT2PRI45	0xffd200b4
1054*4882a593Smuzhiyun #define INT2PRI46	0xffd200b8
1055*4882a593Smuzhiyun #define INT2PRI47	0xffd200bc
1056*4882a593Smuzhiyun 
1057*4882a593Smuzhiyun static struct intc_prio_reg prio_registers[] __initdata = {
1058*4882a593Smuzhiyun 	{ INTPRI, 0, 32, 4, { IRQ0, IRQ1, IRQ2, IRQ3,
1059*4882a593Smuzhiyun 			      IRQ4, IRQ5, IRQ6, IRQ7 } },
1060*4882a593Smuzhiyun 
1061*4882a593Smuzhiyun 	{ INT2PRI0, 0, 32, 8, { TMU0, TMU1, TMU2, TMU2_TICPI } },
1062*4882a593Smuzhiyun 	{ INT2PRI1, 0, 32, 8, { TMU3, TMU4, TMU5, SDHI } },
1063*4882a593Smuzhiyun 	{ INT2PRI2, 0, 32, 8, { SCIF2, SCIF3, 0, IRQ8 } },
1064*4882a593Smuzhiyun 	{ INT2PRI3, 0, 32, 8, { HUDI, DMAC0_5, ADC0, IRQ9 } },
1065*4882a593Smuzhiyun 	{ INT2PRI4, 0, 32, 8, { IRQ10, 0, TMR01, TMR23 } },
1066*4882a593Smuzhiyun 	{ INT2PRI5, 0, 32, 8, { TMR45, 0, FRT, LPC } },
1067*4882a593Smuzhiyun 	{ INT2PRI6, 0, 32, 8, { PECI0, ETHERC, DMAC8_11, 0 } },
1068*4882a593Smuzhiyun 	{ INT2PRI7, 0, 32, 8, { SCIF4, 0, IRQ11, IRQ12 } },
1069*4882a593Smuzhiyun 	{ INT2PRI8, 0, 32, 8, { 0, 0, 0, DVC } },
1070*4882a593Smuzhiyun 	{ INT2PRI9, 0, 32, 8, { ARC4, 0, SPI1, JMC } },
1071*4882a593Smuzhiyun 	{ INT2PRI10, 0, 32, 8, { SPI0, SIM, PECI2, PECI1 } },
1072*4882a593Smuzhiyun 	{ INT2PRI11, 0, 32, 8, { ADC1, IRQ13, DMAC6_7, IRQ14 } },
1073*4882a593Smuzhiyun 	{ INT2PRI12, 0, 32, 8, { USB0, 0, IRQ15, USB1 } },
1074*4882a593Smuzhiyun 	{ INT2PRI13, 0, 32, 8, { 0, 0, SCIF1, SCIF0 } },
1075*4882a593Smuzhiyun 
1076*4882a593Smuzhiyun 	{ INT2PRI16, 0, 32, 8, { IIC2_2, 0, 0, 0 } },
1077*4882a593Smuzhiyun 	{ INT2PRI17, 0, 32, 8, { 0, 0, 0, IIC1_0 } },
1078*4882a593Smuzhiyun 	{ INT2PRI18, 0, 32, 8, { IIC3_3, IIC9_1, IIC2_1, IIC1_2 } },
1079*4882a593Smuzhiyun 	{ INT2PRI19, 0, 32, 8, { IIC2_3, IIC3_1, 0, IIC1_3 } },
1080*4882a593Smuzhiyun 	{ INT2PRI20, 0, 32, 8, { IIC2_0, IIC6_3, IIC7_1, IIC7_2 } },
1081*4882a593Smuzhiyun 	{ INT2PRI21, 0, 32, 8, { IIC7_3, IIC8_0, IIC8_1, IIC8_2 } },
1082*4882a593Smuzhiyun 	{ INT2PRI22, 0, 32, 8, { IIC9_2, MMC2, G200, 0 } },
1083*4882a593Smuzhiyun 	{ INT2PRI23, 0, 32, 8, { PECI5, SGPIO, IIC3_2, IIC5_1 } },
1084*4882a593Smuzhiyun 	{ INT2PRI24, 0, 32, 8, { PECI4, PECI3, 0, IIC1_1 } },
1085*4882a593Smuzhiyun 	{ INT2PRI25, 0, 32, 8, { IIC3_0, 0, IIC5_3, IIC5_2 } },
1086*4882a593Smuzhiyun 	{ INT2PRI26, 0, 32, 8, { ECCU, RSPI, 0, IIC9_3 } },
1087*4882a593Smuzhiyun 	{ INT2PRI27, 0, 32, 8, { PCIC, IIC6_0, IIC4_0, IIC6_1 } },
1088*4882a593Smuzhiyun 	{ INT2PRI28, 0, 32, 8, { IIC4_3, IIC7_0, MMC1, IIC6_2 } },
1089*4882a593Smuzhiyun 	{ INT2PRI29, 0, 32, 8, { 0, 0, IIC9_0, IIC8_3 } },
1090*4882a593Smuzhiyun 	{ INT2PRI30, 0, 32, 8, { IIC4_1, IIC4_2, IIC5_0, ONFICTL } },
1091*4882a593Smuzhiyun 	{ INT2PRI31, 0, 32, 8, { IIC0_0, IIC0_1, IIC0_2, IIC0_3 } },
1092*4882a593Smuzhiyun 	{ INT2PRI32, 0, 32, 8, { DMINT22, 0, 0, 0 } },
1093*4882a593Smuzhiyun 	{ INT2PRI33, 0, 32, 8, { 0, 0, 0, DMINT16 } },
1094*4882a593Smuzhiyun 	{ INT2PRI34, 0, 32, 8, { 0, LPC6, DMINT21, DMINT18 } },
1095*4882a593Smuzhiyun 	{ INT2PRI35, 0, 32, 8, { DMINT23, TSIP, 0, DMINT19 } },
1096*4882a593Smuzhiyun 	{ INT2PRI36, 0, 32, 8, { DMINT20, GETHER1, PBIA, PBIB } },
1097*4882a593Smuzhiyun 	{ INT2PRI37, 0, 32, 8, { PBIC, DMAE2, DMAE3, SERMUX2 } },
1098*4882a593Smuzhiyun 	{ INT2PRI38, 0, 32, 8, { LPC7, 0, 0, 0 } },
1099*4882a593Smuzhiyun 	{ INT2PRI39, 0, 32, 8, { 0, 0, 0, WDT4B } },
1100*4882a593Smuzhiyun 	{ INT2PRI40, 0, 32, 8, { 0, 0, 0, DMINT17 } },
1101*4882a593Smuzhiyun 	{ INT2PRI41, 0, 32, 8, { DDRECC, 0, WDT6B, WDT5B } },
1102*4882a593Smuzhiyun 	{ INT2PRI42, 0, 32, 8, { 0, 0, 0, LPC8 } },
1103*4882a593Smuzhiyun 	{ INT2PRI43, 0, 32, 8, { 0, WDT7B, PCIE_BRIDGE, WDT8B } },
1104*4882a593Smuzhiyun 	{ INT2PRI44, 0, 32, 8, { WDT2B, GETHER2, 0, 0 } },
1105*4882a593Smuzhiyun 	{ INT2PRI45, 0, 32, 8, { 0, 0, LPC5, SERMUX3 } },
1106*4882a593Smuzhiyun 	{ INT2PRI46, 0, 32, 8, { WDT0B, WDT1B, WDT3B, GETHER0 } },
1107*4882a593Smuzhiyun 	{ INT2PRI47, 0, 32, 8, { DMINT12, DMINT13, DMINT14, DMINT15 } },
1108*4882a593Smuzhiyun };
1109*4882a593Smuzhiyun 
1110*4882a593Smuzhiyun static struct intc_sense_reg sense_registers_irq8to15[] __initdata = {
1111*4882a593Smuzhiyun 	{ 0xffd100f8, 32, 2, /* ICR2 */   { IRQ15, IRQ14, IRQ13, IRQ12,
1112*4882a593Smuzhiyun 					    IRQ11, IRQ10, IRQ9, IRQ8 } },
1113*4882a593Smuzhiyun };
1114*4882a593Smuzhiyun 
1115*4882a593Smuzhiyun static DECLARE_INTC_DESC(intc_desc, "sh7757", vectors, groups,
1116*4882a593Smuzhiyun 			 mask_registers, prio_registers,
1117*4882a593Smuzhiyun 			 sense_registers_irq8to15);
1118*4882a593Smuzhiyun 
1119*4882a593Smuzhiyun /* Support for external interrupt pins in IRQ mode */
1120*4882a593Smuzhiyun static struct intc_vect vectors_irq0123[] __initdata = {
1121*4882a593Smuzhiyun 	INTC_VECT(IRQ0, 0x200), INTC_VECT(IRQ1, 0x240),
1122*4882a593Smuzhiyun 	INTC_VECT(IRQ2, 0x280), INTC_VECT(IRQ3, 0x2c0),
1123*4882a593Smuzhiyun };
1124*4882a593Smuzhiyun 
1125*4882a593Smuzhiyun static struct intc_vect vectors_irq4567[] __initdata = {
1126*4882a593Smuzhiyun 	INTC_VECT(IRQ4, 0x300), INTC_VECT(IRQ5, 0x340),
1127*4882a593Smuzhiyun 	INTC_VECT(IRQ6, 0x380), INTC_VECT(IRQ7, 0x3c0),
1128*4882a593Smuzhiyun };
1129*4882a593Smuzhiyun 
1130*4882a593Smuzhiyun static struct intc_sense_reg sense_registers[] __initdata = {
1131*4882a593Smuzhiyun 	{ 0xffd0001c, 32, 2, /* ICR1 */   { IRQ0, IRQ1, IRQ2, IRQ3,
1132*4882a593Smuzhiyun 					    IRQ4, IRQ5, IRQ6, IRQ7 } },
1133*4882a593Smuzhiyun };
1134*4882a593Smuzhiyun 
1135*4882a593Smuzhiyun static struct intc_mask_reg ack_registers[] __initdata = {
1136*4882a593Smuzhiyun 	{ 0xffd00024, 0, 32, /* INTREQ */
1137*4882a593Smuzhiyun 	  { IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7 } },
1138*4882a593Smuzhiyun };
1139*4882a593Smuzhiyun 
1140*4882a593Smuzhiyun static DECLARE_INTC_DESC_ACK(intc_desc_irq0123, "sh7757-irq0123",
1141*4882a593Smuzhiyun 			     vectors_irq0123, NULL, mask_registers,
1142*4882a593Smuzhiyun 			     prio_registers, sense_registers, ack_registers);
1143*4882a593Smuzhiyun 
1144*4882a593Smuzhiyun static DECLARE_INTC_DESC_ACK(intc_desc_irq4567, "sh7757-irq4567",
1145*4882a593Smuzhiyun 			     vectors_irq4567, NULL, mask_registers,
1146*4882a593Smuzhiyun 			     prio_registers, sense_registers, ack_registers);
1147*4882a593Smuzhiyun 
1148*4882a593Smuzhiyun /* External interrupt pins in IRL mode */
1149*4882a593Smuzhiyun static struct intc_vect vectors_irl0123[] __initdata = {
1150*4882a593Smuzhiyun 	INTC_VECT(IRL0_LLLL, 0x200), INTC_VECT(IRL0_LLLH, 0x220),
1151*4882a593Smuzhiyun 	INTC_VECT(IRL0_LLHL, 0x240), INTC_VECT(IRL0_LLHH, 0x260),
1152*4882a593Smuzhiyun 	INTC_VECT(IRL0_LHLL, 0x280), INTC_VECT(IRL0_LHLH, 0x2a0),
1153*4882a593Smuzhiyun 	INTC_VECT(IRL0_LHHL, 0x2c0), INTC_VECT(IRL0_LHHH, 0x2e0),
1154*4882a593Smuzhiyun 	INTC_VECT(IRL0_HLLL, 0x300), INTC_VECT(IRL0_HLLH, 0x320),
1155*4882a593Smuzhiyun 	INTC_VECT(IRL0_HLHL, 0x340), INTC_VECT(IRL0_HLHH, 0x360),
1156*4882a593Smuzhiyun 	INTC_VECT(IRL0_HHLL, 0x380), INTC_VECT(IRL0_HHLH, 0x3a0),
1157*4882a593Smuzhiyun 	INTC_VECT(IRL0_HHHL, 0x3c0),
1158*4882a593Smuzhiyun };
1159*4882a593Smuzhiyun 
1160*4882a593Smuzhiyun static struct intc_vect vectors_irl4567[] __initdata = {
1161*4882a593Smuzhiyun 	INTC_VECT(IRL4_LLLL, 0x200), INTC_VECT(IRL4_LLLH, 0x220),
1162*4882a593Smuzhiyun 	INTC_VECT(IRL4_LLHL, 0x240), INTC_VECT(IRL4_LLHH, 0x260),
1163*4882a593Smuzhiyun 	INTC_VECT(IRL4_LHLL, 0x280), INTC_VECT(IRL4_LHLH, 0x2a0),
1164*4882a593Smuzhiyun 	INTC_VECT(IRL4_LHHL, 0x2c0), INTC_VECT(IRL4_LHHH, 0x2e0),
1165*4882a593Smuzhiyun 	INTC_VECT(IRL4_HLLL, 0x300), INTC_VECT(IRL4_HLLH, 0x320),
1166*4882a593Smuzhiyun 	INTC_VECT(IRL4_HLHL, 0x340), INTC_VECT(IRL4_HLHH, 0x360),
1167*4882a593Smuzhiyun 	INTC_VECT(IRL4_HHLL, 0x380), INTC_VECT(IRL4_HHLH, 0x3a0),
1168*4882a593Smuzhiyun 	INTC_VECT(IRL4_HHHL, 0x3c0),
1169*4882a593Smuzhiyun };
1170*4882a593Smuzhiyun 
1171*4882a593Smuzhiyun static DECLARE_INTC_DESC(intc_desc_irl0123, "sh7757-irl0123", vectors_irl0123,
1172*4882a593Smuzhiyun 			 NULL, mask_registers, NULL, NULL);
1173*4882a593Smuzhiyun 
1174*4882a593Smuzhiyun static DECLARE_INTC_DESC(intc_desc_irl4567, "sh7757-irl4567", vectors_irl4567,
1175*4882a593Smuzhiyun 			 NULL, mask_registers, NULL, NULL);
1176*4882a593Smuzhiyun 
1177*4882a593Smuzhiyun #define INTC_ICR0	0xffd00000
1178*4882a593Smuzhiyun #define INTC_INTMSK0	0xffd00044
1179*4882a593Smuzhiyun #define INTC_INTMSK1	0xffd00048
1180*4882a593Smuzhiyun #define INTC_INTMSK2	0xffd40080
1181*4882a593Smuzhiyun #define INTC_INTMSKCLR1	0xffd00068
1182*4882a593Smuzhiyun #define INTC_INTMSKCLR2	0xffd40084
1183*4882a593Smuzhiyun 
plat_irq_setup(void)1184*4882a593Smuzhiyun void __init plat_irq_setup(void)
1185*4882a593Smuzhiyun {
1186*4882a593Smuzhiyun 	/* disable IRQ3-0 + IRQ7-4 */
1187*4882a593Smuzhiyun 	__raw_writel(0xff000000, INTC_INTMSK0);
1188*4882a593Smuzhiyun 
1189*4882a593Smuzhiyun 	/* disable IRL3-0 + IRL7-4 */
1190*4882a593Smuzhiyun 	__raw_writel(0xc0000000, INTC_INTMSK1);
1191*4882a593Smuzhiyun 	__raw_writel(0xfffefffe, INTC_INTMSK2);
1192*4882a593Smuzhiyun 
1193*4882a593Smuzhiyun 	/* select IRL mode for IRL3-0 + IRL7-4 */
1194*4882a593Smuzhiyun 	__raw_writel(__raw_readl(INTC_ICR0) & ~0x00c00000, INTC_ICR0);
1195*4882a593Smuzhiyun 
1196*4882a593Smuzhiyun 	/* disable holding function, ie enable "SH-4 Mode" */
1197*4882a593Smuzhiyun 	__raw_writel(__raw_readl(INTC_ICR0) | 0x00200000, INTC_ICR0);
1198*4882a593Smuzhiyun 
1199*4882a593Smuzhiyun 	register_intc_controller(&intc_desc);
1200*4882a593Smuzhiyun }
1201*4882a593Smuzhiyun 
plat_irq_setup_pins(int mode)1202*4882a593Smuzhiyun void __init plat_irq_setup_pins(int mode)
1203*4882a593Smuzhiyun {
1204*4882a593Smuzhiyun 	switch (mode) {
1205*4882a593Smuzhiyun 	case IRQ_MODE_IRQ7654:
1206*4882a593Smuzhiyun 		/* select IRQ mode for IRL7-4 */
1207*4882a593Smuzhiyun 		__raw_writel(__raw_readl(INTC_ICR0) | 0x00400000, INTC_ICR0);
1208*4882a593Smuzhiyun 		register_intc_controller(&intc_desc_irq4567);
1209*4882a593Smuzhiyun 		break;
1210*4882a593Smuzhiyun 	case IRQ_MODE_IRQ3210:
1211*4882a593Smuzhiyun 		/* select IRQ mode for IRL3-0 */
1212*4882a593Smuzhiyun 		__raw_writel(__raw_readl(INTC_ICR0) | 0x00800000, INTC_ICR0);
1213*4882a593Smuzhiyun 		register_intc_controller(&intc_desc_irq0123);
1214*4882a593Smuzhiyun 		break;
1215*4882a593Smuzhiyun 	case IRQ_MODE_IRL7654:
1216*4882a593Smuzhiyun 		/* enable IRL7-4 but don't provide any masking */
1217*4882a593Smuzhiyun 		__raw_writel(0x40000000, INTC_INTMSKCLR1);
1218*4882a593Smuzhiyun 		__raw_writel(0x0000fffe, INTC_INTMSKCLR2);
1219*4882a593Smuzhiyun 		break;
1220*4882a593Smuzhiyun 	case IRQ_MODE_IRL3210:
1221*4882a593Smuzhiyun 		/* enable IRL0-3 but don't provide any masking */
1222*4882a593Smuzhiyun 		__raw_writel(0x80000000, INTC_INTMSKCLR1);
1223*4882a593Smuzhiyun 		__raw_writel(0xfffe0000, INTC_INTMSKCLR2);
1224*4882a593Smuzhiyun 		break;
1225*4882a593Smuzhiyun 	case IRQ_MODE_IRL7654_MASK:
1226*4882a593Smuzhiyun 		/* enable IRL7-4 and mask using cpu intc controller */
1227*4882a593Smuzhiyun 		__raw_writel(0x40000000, INTC_INTMSKCLR1);
1228*4882a593Smuzhiyun 		register_intc_controller(&intc_desc_irl4567);
1229*4882a593Smuzhiyun 		break;
1230*4882a593Smuzhiyun 	case IRQ_MODE_IRL3210_MASK:
1231*4882a593Smuzhiyun 		/* enable IRL0-3 and mask using cpu intc controller */
1232*4882a593Smuzhiyun 		__raw_writel(0x80000000, INTC_INTMSKCLR1);
1233*4882a593Smuzhiyun 		register_intc_controller(&intc_desc_irl0123);
1234*4882a593Smuzhiyun 		break;
1235*4882a593Smuzhiyun 	default:
1236*4882a593Smuzhiyun 		BUG();
1237*4882a593Smuzhiyun 	}
1238*4882a593Smuzhiyun }
1239*4882a593Smuzhiyun 
plat_mem_setup(void)1240*4882a593Smuzhiyun void __init plat_mem_setup(void)
1241*4882a593Smuzhiyun {
1242*4882a593Smuzhiyun }
1243