1 /*
2  * omap_hwmod_3xxx_data.c - hardware modules present on the OMAP3xxx chips
3  *
4  * Copyright (C) 2009-2010 Nokia Corporation
5  * Paul Walmsley
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License version 2 as
9  * published by the Free Software Foundation.
10  *
11  * The data in this file should be completely autogeneratable from
12  * the TI hardware database or other technical documentation.
13  *
14  * XXX these should be marked initdata for multi-OMAP kernels
15  */
16 #include <plat/omap_hwmod.h>
17 #include <mach/irqs.h>
18 #include <plat/cpu.h>
19 #include <plat/dma.h>
20 #include <plat/serial.h>
21 #include <plat/l4_3xxx.h>
22 #include <plat/i2c.h>
23 #include <plat/gpio.h>
24 #include <plat/smartreflex.h>
25 
26 #include "omap_hwmod_common_data.h"
27 
28 #include "prm-regbits-34xx.h"
29 #include "cm-regbits-34xx.h"
30 #include "wd_timer.h"
31 
32 /*
33  * OMAP3xxx hardware module integration data
34  *
35  * ALl of the data in this section should be autogeneratable from the
36  * TI hardware database or other technical documentation.  Data that
37  * is driver-specific or driver-kernel integration-specific belongs
38  * elsewhere.
39  */
40 
41 static struct omap_hwmod omap3xxx_mpu_hwmod;
42 static struct omap_hwmod omap3xxx_iva_hwmod;
43 static struct omap_hwmod omap3xxx_l3_main_hwmod;
44 static struct omap_hwmod omap3xxx_l4_core_hwmod;
45 static struct omap_hwmod omap3xxx_l4_per_hwmod;
46 static struct omap_hwmod omap3xxx_wd_timer2_hwmod;
47 static struct omap_hwmod omap3xxx_i2c1_hwmod;
48 static struct omap_hwmod omap3xxx_i2c2_hwmod;
49 static struct omap_hwmod omap3xxx_i2c3_hwmod;
50 static struct omap_hwmod omap3xxx_gpio1_hwmod;
51 static struct omap_hwmod omap3xxx_gpio2_hwmod;
52 static struct omap_hwmod omap3xxx_gpio3_hwmod;
53 static struct omap_hwmod omap3xxx_gpio4_hwmod;
54 static struct omap_hwmod omap3xxx_gpio5_hwmod;
55 static struct omap_hwmod omap3xxx_gpio6_hwmod;
56 static struct omap_hwmod omap34xx_sr1_hwmod;
57 static struct omap_hwmod omap34xx_sr2_hwmod;
58 
59 static struct omap_hwmod omap3xxx_dma_system_hwmod;
60 
61 /* L3 -> L4_CORE interface */
62 static struct omap_hwmod_ocp_if omap3xxx_l3_main__l4_core = {
63 	.master	= &omap3xxx_l3_main_hwmod,
64 	.slave	= &omap3xxx_l4_core_hwmod,
65 	.user	= OCP_USER_MPU | OCP_USER_SDMA,
66 };
67 
68 /* L3 -> L4_PER interface */
69 static struct omap_hwmod_ocp_if omap3xxx_l3_main__l4_per = {
70 	.master = &omap3xxx_l3_main_hwmod,
71 	.slave	= &omap3xxx_l4_per_hwmod,
72 	.user	= OCP_USER_MPU | OCP_USER_SDMA,
73 };
74 
75 /* MPU -> L3 interface */
76 static struct omap_hwmod_ocp_if omap3xxx_mpu__l3_main = {
77 	.master = &omap3xxx_mpu_hwmod,
78 	.slave	= &omap3xxx_l3_main_hwmod,
79 	.user	= OCP_USER_MPU,
80 };
81 
82 /* Slave interfaces on the L3 interconnect */
83 static struct omap_hwmod_ocp_if *omap3xxx_l3_main_slaves[] = {
84 	&omap3xxx_mpu__l3_main,
85 };
86 
87 /* Master interfaces on the L3 interconnect */
88 static struct omap_hwmod_ocp_if *omap3xxx_l3_main_masters[] = {
89 	&omap3xxx_l3_main__l4_core,
90 	&omap3xxx_l3_main__l4_per,
91 };
92 
93 /* L3 */
94 static struct omap_hwmod omap3xxx_l3_main_hwmod = {
95 	.name		= "l3_main",
96 	.class		= &l3_hwmod_class,
97 	.masters	= omap3xxx_l3_main_masters,
98 	.masters_cnt	= ARRAY_SIZE(omap3xxx_l3_main_masters),
99 	.slaves		= omap3xxx_l3_main_slaves,
100 	.slaves_cnt	= ARRAY_SIZE(omap3xxx_l3_main_slaves),
101 	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
102 	.flags		= HWMOD_NO_IDLEST,
103 };
104 
105 static struct omap_hwmod omap3xxx_l4_wkup_hwmod;
106 static struct omap_hwmod omap3xxx_uart1_hwmod;
107 static struct omap_hwmod omap3xxx_uart2_hwmod;
108 static struct omap_hwmod omap3xxx_uart3_hwmod;
109 static struct omap_hwmod omap3xxx_uart4_hwmod;
110 
111 /* L4_CORE -> L4_WKUP interface */
112 static struct omap_hwmod_ocp_if omap3xxx_l4_core__l4_wkup = {
113 	.master	= &omap3xxx_l4_core_hwmod,
114 	.slave	= &omap3xxx_l4_wkup_hwmod,
115 	.user	= OCP_USER_MPU | OCP_USER_SDMA,
116 };
117 
118 /* L4 CORE -> UART1 interface */
119 static struct omap_hwmod_addr_space omap3xxx_uart1_addr_space[] = {
120 	{
121 		.pa_start	= OMAP3_UART1_BASE,
122 		.pa_end		= OMAP3_UART1_BASE + SZ_8K - 1,
123 		.flags		= ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
124 	},
125 };
126 
127 static struct omap_hwmod_ocp_if omap3_l4_core__uart1 = {
128 	.master		= &omap3xxx_l4_core_hwmod,
129 	.slave		= &omap3xxx_uart1_hwmod,
130 	.clk		= "uart1_ick",
131 	.addr		= omap3xxx_uart1_addr_space,
132 	.addr_cnt	= ARRAY_SIZE(omap3xxx_uart1_addr_space),
133 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
134 };
135 
136 /* L4 CORE -> UART2 interface */
137 static struct omap_hwmod_addr_space omap3xxx_uart2_addr_space[] = {
138 	{
139 		.pa_start	= OMAP3_UART2_BASE,
140 		.pa_end		= OMAP3_UART2_BASE + SZ_1K - 1,
141 		.flags		= ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
142 	},
143 };
144 
145 static struct omap_hwmod_ocp_if omap3_l4_core__uart2 = {
146 	.master		= &omap3xxx_l4_core_hwmod,
147 	.slave		= &omap3xxx_uart2_hwmod,
148 	.clk		= "uart2_ick",
149 	.addr		= omap3xxx_uart2_addr_space,
150 	.addr_cnt	= ARRAY_SIZE(omap3xxx_uart2_addr_space),
151 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
152 };
153 
154 /* L4 PER -> UART3 interface */
155 static struct omap_hwmod_addr_space omap3xxx_uart3_addr_space[] = {
156 	{
157 		.pa_start	= OMAP3_UART3_BASE,
158 		.pa_end		= OMAP3_UART3_BASE + SZ_1K - 1,
159 		.flags		= ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
160 	},
161 };
162 
163 static struct omap_hwmod_ocp_if omap3_l4_per__uart3 = {
164 	.master		= &omap3xxx_l4_per_hwmod,
165 	.slave		= &omap3xxx_uart3_hwmod,
166 	.clk		= "uart3_ick",
167 	.addr		= omap3xxx_uart3_addr_space,
168 	.addr_cnt	= ARRAY_SIZE(omap3xxx_uart3_addr_space),
169 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
170 };
171 
172 /* L4 PER -> UART4 interface */
173 static struct omap_hwmod_addr_space omap3xxx_uart4_addr_space[] = {
174 	{
175 		.pa_start	= OMAP3_UART4_BASE,
176 		.pa_end		= OMAP3_UART4_BASE + SZ_1K - 1,
177 		.flags		= ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
178 	},
179 };
180 
181 static struct omap_hwmod_ocp_if omap3_l4_per__uart4 = {
182 	.master		= &omap3xxx_l4_per_hwmod,
183 	.slave		= &omap3xxx_uart4_hwmod,
184 	.clk		= "uart4_ick",
185 	.addr		= omap3xxx_uart4_addr_space,
186 	.addr_cnt	= ARRAY_SIZE(omap3xxx_uart4_addr_space),
187 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
188 };
189 
190 /* I2C IP block address space length (in bytes) */
191 #define OMAP2_I2C_AS_LEN		128
192 
193 /* L4 CORE -> I2C1 interface */
194 static struct omap_hwmod_addr_space omap3xxx_i2c1_addr_space[] = {
195 	{
196 		.pa_start	= 0x48070000,
197 		.pa_end		= 0x48070000 + OMAP2_I2C_AS_LEN - 1,
198 		.flags		= ADDR_TYPE_RT,
199 	},
200 };
201 
202 static struct omap_hwmod_ocp_if omap3_l4_core__i2c1 = {
203 	.master		= &omap3xxx_l4_core_hwmod,
204 	.slave		= &omap3xxx_i2c1_hwmod,
205 	.clk		= "i2c1_ick",
206 	.addr		= omap3xxx_i2c1_addr_space,
207 	.addr_cnt	= ARRAY_SIZE(omap3xxx_i2c1_addr_space),
208 	.fw = {
209 		.omap2 = {
210 			.l4_fw_region  = OMAP3_L4_CORE_FW_I2C1_REGION,
211 			.l4_prot_group = 7,
212 			.flags	= OMAP_FIREWALL_L4,
213 		}
214 	},
215 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
216 };
217 
218 /* L4 CORE -> I2C2 interface */
219 static struct omap_hwmod_addr_space omap3xxx_i2c2_addr_space[] = {
220 	{
221 		.pa_start	= 0x48072000,
222 		.pa_end		= 0x48072000 + OMAP2_I2C_AS_LEN - 1,
223 		.flags		= ADDR_TYPE_RT,
224 	},
225 };
226 
227 static struct omap_hwmod_ocp_if omap3_l4_core__i2c2 = {
228 	.master		= &omap3xxx_l4_core_hwmod,
229 	.slave		= &omap3xxx_i2c2_hwmod,
230 	.clk		= "i2c2_ick",
231 	.addr		= omap3xxx_i2c2_addr_space,
232 	.addr_cnt	= ARRAY_SIZE(omap3xxx_i2c2_addr_space),
233 	.fw = {
234 		.omap2 = {
235 			.l4_fw_region  = OMAP3_L4_CORE_FW_I2C2_REGION,
236 			.l4_prot_group = 7,
237 			.flags = OMAP_FIREWALL_L4,
238 		}
239 	},
240 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
241 };
242 
243 /* L4 CORE -> I2C3 interface */
244 static struct omap_hwmod_addr_space omap3xxx_i2c3_addr_space[] = {
245 	{
246 		.pa_start	= 0x48060000,
247 		.pa_end		= 0x48060000 + OMAP2_I2C_AS_LEN - 1,
248 		.flags		= ADDR_TYPE_RT,
249 	},
250 };
251 
252 static struct omap_hwmod_ocp_if omap3_l4_core__i2c3 = {
253 	.master		= &omap3xxx_l4_core_hwmod,
254 	.slave		= &omap3xxx_i2c3_hwmod,
255 	.clk		= "i2c3_ick",
256 	.addr		= omap3xxx_i2c3_addr_space,
257 	.addr_cnt	= ARRAY_SIZE(omap3xxx_i2c3_addr_space),
258 	.fw = {
259 		.omap2 = {
260 			.l4_fw_region  = OMAP3_L4_CORE_FW_I2C3_REGION,
261 			.l4_prot_group = 7,
262 			.flags = OMAP_FIREWALL_L4,
263 		}
264 	},
265 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
266 };
267 
268 /* L4 CORE -> SR1 interface */
269 static struct omap_hwmod_addr_space omap3_sr1_addr_space[] = {
270 	{
271 		.pa_start	= OMAP34XX_SR1_BASE,
272 		.pa_end		= OMAP34XX_SR1_BASE + SZ_1K - 1,
273 		.flags		= ADDR_TYPE_RT,
274 	},
275 };
276 
277 static struct omap_hwmod_ocp_if omap3_l4_core__sr1 = {
278 	.master		= &omap3xxx_l4_core_hwmod,
279 	.slave		= &omap34xx_sr1_hwmod,
280 	.clk		= "sr_l4_ick",
281 	.addr		= omap3_sr1_addr_space,
282 	.addr_cnt	= ARRAY_SIZE(omap3_sr1_addr_space),
283 	.user		= OCP_USER_MPU,
284 };
285 
286 /* L4 CORE -> SR1 interface */
287 static struct omap_hwmod_addr_space omap3_sr2_addr_space[] = {
288 	{
289 		.pa_start	= OMAP34XX_SR2_BASE,
290 		.pa_end		= OMAP34XX_SR2_BASE + SZ_1K - 1,
291 		.flags		= ADDR_TYPE_RT,
292 	},
293 };
294 
295 static struct omap_hwmod_ocp_if omap3_l4_core__sr2 = {
296 	.master		= &omap3xxx_l4_core_hwmod,
297 	.slave		= &omap34xx_sr2_hwmod,
298 	.clk		= "sr_l4_ick",
299 	.addr		= omap3_sr2_addr_space,
300 	.addr_cnt	= ARRAY_SIZE(omap3_sr2_addr_space),
301 	.user		= OCP_USER_MPU,
302 };
303 
304 /* Slave interfaces on the L4_CORE interconnect */
305 static struct omap_hwmod_ocp_if *omap3xxx_l4_core_slaves[] = {
306 	&omap3xxx_l3_main__l4_core,
307 	&omap3_l4_core__sr1,
308 	&omap3_l4_core__sr2,
309 };
310 
311 /* Master interfaces on the L4_CORE interconnect */
312 static struct omap_hwmod_ocp_if *omap3xxx_l4_core_masters[] = {
313 	&omap3xxx_l4_core__l4_wkup,
314 	&omap3_l4_core__uart1,
315 	&omap3_l4_core__uart2,
316 	&omap3_l4_core__i2c1,
317 	&omap3_l4_core__i2c2,
318 	&omap3_l4_core__i2c3,
319 };
320 
321 /* L4 CORE */
322 static struct omap_hwmod omap3xxx_l4_core_hwmod = {
323 	.name		= "l4_core",
324 	.class		= &l4_hwmod_class,
325 	.masters	= omap3xxx_l4_core_masters,
326 	.masters_cnt	= ARRAY_SIZE(omap3xxx_l4_core_masters),
327 	.slaves		= omap3xxx_l4_core_slaves,
328 	.slaves_cnt	= ARRAY_SIZE(omap3xxx_l4_core_slaves),
329 	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
330 	.flags		= HWMOD_NO_IDLEST,
331 };
332 
333 /* Slave interfaces on the L4_PER interconnect */
334 static struct omap_hwmod_ocp_if *omap3xxx_l4_per_slaves[] = {
335 	&omap3xxx_l3_main__l4_per,
336 };
337 
338 /* Master interfaces on the L4_PER interconnect */
339 static struct omap_hwmod_ocp_if *omap3xxx_l4_per_masters[] = {
340 	&omap3_l4_per__uart3,
341 	&omap3_l4_per__uart4,
342 };
343 
344 /* L4 PER */
345 static struct omap_hwmod omap3xxx_l4_per_hwmod = {
346 	.name		= "l4_per",
347 	.class		= &l4_hwmod_class,
348 	.masters	= omap3xxx_l4_per_masters,
349 	.masters_cnt	= ARRAY_SIZE(omap3xxx_l4_per_masters),
350 	.slaves		= omap3xxx_l4_per_slaves,
351 	.slaves_cnt	= ARRAY_SIZE(omap3xxx_l4_per_slaves),
352 	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
353 	.flags		= HWMOD_NO_IDLEST,
354 };
355 
356 /* Slave interfaces on the L4_WKUP interconnect */
357 static struct omap_hwmod_ocp_if *omap3xxx_l4_wkup_slaves[] = {
358 	&omap3xxx_l4_core__l4_wkup,
359 };
360 
361 /* Master interfaces on the L4_WKUP interconnect */
362 static struct omap_hwmod_ocp_if *omap3xxx_l4_wkup_masters[] = {
363 };
364 
365 /* L4 WKUP */
366 static struct omap_hwmod omap3xxx_l4_wkup_hwmod = {
367 	.name		= "l4_wkup",
368 	.class		= &l4_hwmod_class,
369 	.masters	= omap3xxx_l4_wkup_masters,
370 	.masters_cnt	= ARRAY_SIZE(omap3xxx_l4_wkup_masters),
371 	.slaves		= omap3xxx_l4_wkup_slaves,
372 	.slaves_cnt	= ARRAY_SIZE(omap3xxx_l4_wkup_slaves),
373 	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
374 	.flags		= HWMOD_NO_IDLEST,
375 };
376 
377 /* Master interfaces on the MPU device */
378 static struct omap_hwmod_ocp_if *omap3xxx_mpu_masters[] = {
379 	&omap3xxx_mpu__l3_main,
380 };
381 
382 /* MPU */
383 static struct omap_hwmod omap3xxx_mpu_hwmod = {
384 	.name		= "mpu",
385 	.class		= &mpu_hwmod_class,
386 	.main_clk	= "arm_fck",
387 	.masters	= omap3xxx_mpu_masters,
388 	.masters_cnt	= ARRAY_SIZE(omap3xxx_mpu_masters),
389 	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
390 };
391 
392 /*
393  * IVA2_2 interface data
394  */
395 
396 /* IVA2 <- L3 interface */
397 static struct omap_hwmod_ocp_if omap3xxx_l3__iva = {
398 	.master		= &omap3xxx_l3_main_hwmod,
399 	.slave		= &omap3xxx_iva_hwmod,
400 	.clk		= "iva2_ck",
401 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
402 };
403 
404 static struct omap_hwmod_ocp_if *omap3xxx_iva_masters[] = {
405 	&omap3xxx_l3__iva,
406 };
407 
408 /*
409  * IVA2 (IVA2)
410  */
411 
412 static struct omap_hwmod omap3xxx_iva_hwmod = {
413 	.name		= "iva",
414 	.class		= &iva_hwmod_class,
415 	.masters	= omap3xxx_iva_masters,
416 	.masters_cnt	= ARRAY_SIZE(omap3xxx_iva_masters),
417 	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
418 };
419 
420 /* l4_wkup -> wd_timer2 */
421 static struct omap_hwmod_addr_space omap3xxx_wd_timer2_addrs[] = {
422 	{
423 		.pa_start	= 0x48314000,
424 		.pa_end		= 0x4831407f,
425 		.flags		= ADDR_TYPE_RT
426 	},
427 };
428 
429 static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__wd_timer2 = {
430 	.master		= &omap3xxx_l4_wkup_hwmod,
431 	.slave		= &omap3xxx_wd_timer2_hwmod,
432 	.clk		= "wdt2_ick",
433 	.addr		= omap3xxx_wd_timer2_addrs,
434 	.addr_cnt	= ARRAY_SIZE(omap3xxx_wd_timer2_addrs),
435 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
436 };
437 
438 /*
439  * 'wd_timer' class
440  * 32-bit watchdog upward counter that generates a pulse on the reset pin on
441  * overflow condition
442  */
443 
444 static struct omap_hwmod_class_sysconfig omap3xxx_wd_timer_sysc = {
445 	.rev_offs	= 0x0000,
446 	.sysc_offs	= 0x0010,
447 	.syss_offs	= 0x0014,
448 	.sysc_flags	= (SYSC_HAS_SIDLEMODE | SYSC_HAS_EMUFREE |
449 			   SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
450 			   SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY),
451 	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
452 	.sysc_fields    = &omap_hwmod_sysc_type1,
453 };
454 
455 /* I2C common */
456 static struct omap_hwmod_class_sysconfig i2c_sysc = {
457 	.rev_offs	= 0x00,
458 	.sysc_offs	= 0x20,
459 	.syss_offs	= 0x10,
460 	.sysc_flags	= (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
461 			   SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
462 			   SYSC_HAS_AUTOIDLE),
463 	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
464 	.sysc_fields    = &omap_hwmod_sysc_type1,
465 };
466 
467 static struct omap_hwmod_class omap3xxx_wd_timer_hwmod_class = {
468 	.name		= "wd_timer",
469 	.sysc		= &omap3xxx_wd_timer_sysc,
470 	.pre_shutdown	= &omap2_wd_timer_disable
471 };
472 
473 /* wd_timer2 */
474 static struct omap_hwmod_ocp_if *omap3xxx_wd_timer2_slaves[] = {
475 	&omap3xxx_l4_wkup__wd_timer2,
476 };
477 
478 static struct omap_hwmod omap3xxx_wd_timer2_hwmod = {
479 	.name		= "wd_timer2",
480 	.class		= &omap3xxx_wd_timer_hwmod_class,
481 	.main_clk	= "wdt2_fck",
482 	.prcm		= {
483 		.omap2 = {
484 			.prcm_reg_id = 1,
485 			.module_bit = OMAP3430_EN_WDT2_SHIFT,
486 			.module_offs = WKUP_MOD,
487 			.idlest_reg_id = 1,
488 			.idlest_idle_bit = OMAP3430_ST_WDT2_SHIFT,
489 		},
490 	},
491 	.slaves		= omap3xxx_wd_timer2_slaves,
492 	.slaves_cnt	= ARRAY_SIZE(omap3xxx_wd_timer2_slaves),
493 	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
494 };
495 
496 /* UART common */
497 
498 static struct omap_hwmod_class_sysconfig uart_sysc = {
499 	.rev_offs	= 0x50,
500 	.sysc_offs	= 0x54,
501 	.syss_offs	= 0x58,
502 	.sysc_flags	= (SYSC_HAS_SIDLEMODE |
503 			   SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
504 			   SYSC_HAS_AUTOIDLE),
505 	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
506 	.sysc_fields    = &omap_hwmod_sysc_type1,
507 };
508 
509 static struct omap_hwmod_class uart_class = {
510 	.name = "uart",
511 	.sysc = &uart_sysc,
512 };
513 
514 /* UART1 */
515 
516 static struct omap_hwmod_irq_info uart1_mpu_irqs[] = {
517 	{ .irq = INT_24XX_UART1_IRQ, },
518 };
519 
520 static struct omap_hwmod_dma_info uart1_sdma_reqs[] = {
521 	{ .name = "tx",	.dma_req = OMAP24XX_DMA_UART1_TX, },
522 	{ .name = "rx",	.dma_req = OMAP24XX_DMA_UART1_RX, },
523 };
524 
525 static struct omap_hwmod_ocp_if *omap3xxx_uart1_slaves[] = {
526 	&omap3_l4_core__uart1,
527 };
528 
529 static struct omap_hwmod omap3xxx_uart1_hwmod = {
530 	.name		= "uart1",
531 	.mpu_irqs	= uart1_mpu_irqs,
532 	.mpu_irqs_cnt	= ARRAY_SIZE(uart1_mpu_irqs),
533 	.sdma_reqs	= uart1_sdma_reqs,
534 	.sdma_reqs_cnt	= ARRAY_SIZE(uart1_sdma_reqs),
535 	.main_clk	= "uart1_fck",
536 	.prcm		= {
537 		.omap2 = {
538 			.module_offs = CORE_MOD,
539 			.prcm_reg_id = 1,
540 			.module_bit = OMAP3430_EN_UART1_SHIFT,
541 			.idlest_reg_id = 1,
542 			.idlest_idle_bit = OMAP3430_EN_UART1_SHIFT,
543 		},
544 	},
545 	.slaves		= omap3xxx_uart1_slaves,
546 	.slaves_cnt	= ARRAY_SIZE(omap3xxx_uart1_slaves),
547 	.class		= &uart_class,
548 	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
549 };
550 
551 /* UART2 */
552 
553 static struct omap_hwmod_irq_info uart2_mpu_irqs[] = {
554 	{ .irq = INT_24XX_UART2_IRQ, },
555 };
556 
557 static struct omap_hwmod_dma_info uart2_sdma_reqs[] = {
558 	{ .name = "tx",	.dma_req = OMAP24XX_DMA_UART2_TX, },
559 	{ .name = "rx",	.dma_req = OMAP24XX_DMA_UART2_RX, },
560 };
561 
562 static struct omap_hwmod_ocp_if *omap3xxx_uart2_slaves[] = {
563 	&omap3_l4_core__uart2,
564 };
565 
566 static struct omap_hwmod omap3xxx_uart2_hwmod = {
567 	.name		= "uart2",
568 	.mpu_irqs	= uart2_mpu_irqs,
569 	.mpu_irqs_cnt	= ARRAY_SIZE(uart2_mpu_irqs),
570 	.sdma_reqs	= uart2_sdma_reqs,
571 	.sdma_reqs_cnt	= ARRAY_SIZE(uart2_sdma_reqs),
572 	.main_clk	= "uart2_fck",
573 	.prcm		= {
574 		.omap2 = {
575 			.module_offs = CORE_MOD,
576 			.prcm_reg_id = 1,
577 			.module_bit = OMAP3430_EN_UART2_SHIFT,
578 			.idlest_reg_id = 1,
579 			.idlest_idle_bit = OMAP3430_EN_UART2_SHIFT,
580 		},
581 	},
582 	.slaves		= omap3xxx_uart2_slaves,
583 	.slaves_cnt	= ARRAY_SIZE(omap3xxx_uart2_slaves),
584 	.class		= &uart_class,
585 	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
586 };
587 
588 /* UART3 */
589 
590 static struct omap_hwmod_irq_info uart3_mpu_irqs[] = {
591 	{ .irq = INT_24XX_UART3_IRQ, },
592 };
593 
594 static struct omap_hwmod_dma_info uart3_sdma_reqs[] = {
595 	{ .name = "tx",	.dma_req = OMAP24XX_DMA_UART3_TX, },
596 	{ .name = "rx",	.dma_req = OMAP24XX_DMA_UART3_RX, },
597 };
598 
599 static struct omap_hwmod_ocp_if *omap3xxx_uart3_slaves[] = {
600 	&omap3_l4_per__uart3,
601 };
602 
603 static struct omap_hwmod omap3xxx_uart3_hwmod = {
604 	.name		= "uart3",
605 	.mpu_irqs	= uart3_mpu_irqs,
606 	.mpu_irqs_cnt	= ARRAY_SIZE(uart3_mpu_irqs),
607 	.sdma_reqs	= uart3_sdma_reqs,
608 	.sdma_reqs_cnt	= ARRAY_SIZE(uart3_sdma_reqs),
609 	.main_clk	= "uart3_fck",
610 	.prcm		= {
611 		.omap2 = {
612 			.module_offs = OMAP3430_PER_MOD,
613 			.prcm_reg_id = 1,
614 			.module_bit = OMAP3430_EN_UART3_SHIFT,
615 			.idlest_reg_id = 1,
616 			.idlest_idle_bit = OMAP3430_EN_UART3_SHIFT,
617 		},
618 	},
619 	.slaves		= omap3xxx_uart3_slaves,
620 	.slaves_cnt	= ARRAY_SIZE(omap3xxx_uart3_slaves),
621 	.class		= &uart_class,
622 	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
623 };
624 
625 /* UART4 */
626 
627 static struct omap_hwmod_irq_info uart4_mpu_irqs[] = {
628 	{ .irq = INT_36XX_UART4_IRQ, },
629 };
630 
631 static struct omap_hwmod_dma_info uart4_sdma_reqs[] = {
632 	{ .name = "rx",	.dma_req = OMAP36XX_DMA_UART4_RX, },
633 	{ .name = "tx",	.dma_req = OMAP36XX_DMA_UART4_TX, },
634 };
635 
636 static struct omap_hwmod_ocp_if *omap3xxx_uart4_slaves[] = {
637 	&omap3_l4_per__uart4,
638 };
639 
640 static struct omap_hwmod omap3xxx_uart4_hwmod = {
641 	.name		= "uart4",
642 	.mpu_irqs	= uart4_mpu_irqs,
643 	.mpu_irqs_cnt	= ARRAY_SIZE(uart4_mpu_irqs),
644 	.sdma_reqs	= uart4_sdma_reqs,
645 	.sdma_reqs_cnt	= ARRAY_SIZE(uart4_sdma_reqs),
646 	.main_clk	= "uart4_fck",
647 	.prcm		= {
648 		.omap2 = {
649 			.module_offs = OMAP3430_PER_MOD,
650 			.prcm_reg_id = 1,
651 			.module_bit = OMAP3630_EN_UART4_SHIFT,
652 			.idlest_reg_id = 1,
653 			.idlest_idle_bit = OMAP3630_EN_UART4_SHIFT,
654 		},
655 	},
656 	.slaves		= omap3xxx_uart4_slaves,
657 	.slaves_cnt	= ARRAY_SIZE(omap3xxx_uart4_slaves),
658 	.class		= &uart_class,
659 	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3630ES1),
660 };
661 
662 static struct omap_hwmod_class i2c_class = {
663 	.name = "i2c",
664 	.sysc = &i2c_sysc,
665 };
666 
667 /* I2C1 */
668 
669 static struct omap_i2c_dev_attr i2c1_dev_attr = {
670 	.fifo_depth	= 8, /* bytes */
671 };
672 
673 static struct omap_hwmod_irq_info i2c1_mpu_irqs[] = {
674 	{ .irq = INT_24XX_I2C1_IRQ, },
675 };
676 
677 static struct omap_hwmod_dma_info i2c1_sdma_reqs[] = {
678 	{ .name = "tx", .dma_req = OMAP24XX_DMA_I2C1_TX },
679 	{ .name = "rx", .dma_req = OMAP24XX_DMA_I2C1_RX },
680 };
681 
682 static struct omap_hwmod_ocp_if *omap3xxx_i2c1_slaves[] = {
683 	&omap3_l4_core__i2c1,
684 };
685 
686 static struct omap_hwmod omap3xxx_i2c1_hwmod = {
687 	.name		= "i2c1",
688 	.mpu_irqs	= i2c1_mpu_irqs,
689 	.mpu_irqs_cnt	= ARRAY_SIZE(i2c1_mpu_irqs),
690 	.sdma_reqs	= i2c1_sdma_reqs,
691 	.sdma_reqs_cnt	= ARRAY_SIZE(i2c1_sdma_reqs),
692 	.main_clk	= "i2c1_fck",
693 	.prcm		= {
694 		.omap2 = {
695 			.module_offs = CORE_MOD,
696 			.prcm_reg_id = 1,
697 			.module_bit = OMAP3430_EN_I2C1_SHIFT,
698 			.idlest_reg_id = 1,
699 			.idlest_idle_bit = OMAP3430_ST_I2C1_SHIFT,
700 		},
701 	},
702 	.slaves		= omap3xxx_i2c1_slaves,
703 	.slaves_cnt	= ARRAY_SIZE(omap3xxx_i2c1_slaves),
704 	.class		= &i2c_class,
705 	.dev_attr	= &i2c1_dev_attr,
706 	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
707 };
708 
709 /* I2C2 */
710 
711 static struct omap_i2c_dev_attr i2c2_dev_attr = {
712 	.fifo_depth	= 8, /* bytes */
713 };
714 
715 static struct omap_hwmod_irq_info i2c2_mpu_irqs[] = {
716 	{ .irq = INT_24XX_I2C2_IRQ, },
717 };
718 
719 static struct omap_hwmod_dma_info i2c2_sdma_reqs[] = {
720 	{ .name = "tx", .dma_req = OMAP24XX_DMA_I2C2_TX },
721 	{ .name = "rx", .dma_req = OMAP24XX_DMA_I2C2_RX },
722 };
723 
724 static struct omap_hwmod_ocp_if *omap3xxx_i2c2_slaves[] = {
725 	&omap3_l4_core__i2c2,
726 };
727 
728 static struct omap_hwmod omap3xxx_i2c2_hwmod = {
729 	.name		= "i2c2",
730 	.mpu_irqs	= i2c2_mpu_irqs,
731 	.mpu_irqs_cnt	= ARRAY_SIZE(i2c2_mpu_irqs),
732 	.sdma_reqs	= i2c2_sdma_reqs,
733 	.sdma_reqs_cnt	= ARRAY_SIZE(i2c2_sdma_reqs),
734 	.main_clk	= "i2c2_fck",
735 	.prcm		= {
736 		.omap2 = {
737 			.module_offs = CORE_MOD,
738 			.prcm_reg_id = 1,
739 			.module_bit = OMAP3430_EN_I2C2_SHIFT,
740 			.idlest_reg_id = 1,
741 			.idlest_idle_bit = OMAP3430_ST_I2C2_SHIFT,
742 		},
743 	},
744 	.slaves		= omap3xxx_i2c2_slaves,
745 	.slaves_cnt	= ARRAY_SIZE(omap3xxx_i2c2_slaves),
746 	.class		= &i2c_class,
747 	.dev_attr	= &i2c2_dev_attr,
748 	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
749 };
750 
751 /* I2C3 */
752 
753 static struct omap_i2c_dev_attr i2c3_dev_attr = {
754 	.fifo_depth	= 64, /* bytes */
755 };
756 
757 static struct omap_hwmod_irq_info i2c3_mpu_irqs[] = {
758 	{ .irq = INT_34XX_I2C3_IRQ, },
759 };
760 
761 static struct omap_hwmod_dma_info i2c3_sdma_reqs[] = {
762 	{ .name = "tx", .dma_req = OMAP34XX_DMA_I2C3_TX },
763 	{ .name = "rx", .dma_req = OMAP34XX_DMA_I2C3_RX },
764 };
765 
766 static struct omap_hwmod_ocp_if *omap3xxx_i2c3_slaves[] = {
767 	&omap3_l4_core__i2c3,
768 };
769 
770 static struct omap_hwmod omap3xxx_i2c3_hwmod = {
771 	.name		= "i2c3",
772 	.mpu_irqs	= i2c3_mpu_irqs,
773 	.mpu_irqs_cnt	= ARRAY_SIZE(i2c3_mpu_irqs),
774 	.sdma_reqs	= i2c3_sdma_reqs,
775 	.sdma_reqs_cnt	= ARRAY_SIZE(i2c3_sdma_reqs),
776 	.main_clk	= "i2c3_fck",
777 	.prcm		= {
778 		.omap2 = {
779 			.module_offs = CORE_MOD,
780 			.prcm_reg_id = 1,
781 			.module_bit = OMAP3430_EN_I2C3_SHIFT,
782 			.idlest_reg_id = 1,
783 			.idlest_idle_bit = OMAP3430_ST_I2C3_SHIFT,
784 		},
785 	},
786 	.slaves		= omap3xxx_i2c3_slaves,
787 	.slaves_cnt	= ARRAY_SIZE(omap3xxx_i2c3_slaves),
788 	.class		= &i2c_class,
789 	.dev_attr	= &i2c3_dev_attr,
790 	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
791 };
792 
793 /* l4_wkup -> gpio1 */
794 static struct omap_hwmod_addr_space omap3xxx_gpio1_addrs[] = {
795 	{
796 		.pa_start	= 0x48310000,
797 		.pa_end		= 0x483101ff,
798 		.flags		= ADDR_TYPE_RT
799 	},
800 };
801 
802 static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__gpio1 = {
803 	.master		= &omap3xxx_l4_wkup_hwmod,
804 	.slave		= &omap3xxx_gpio1_hwmod,
805 	.addr		= omap3xxx_gpio1_addrs,
806 	.addr_cnt	= ARRAY_SIZE(omap3xxx_gpio1_addrs),
807 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
808 };
809 
810 /* l4_per -> gpio2 */
811 static struct omap_hwmod_addr_space omap3xxx_gpio2_addrs[] = {
812 	{
813 		.pa_start	= 0x49050000,
814 		.pa_end		= 0x490501ff,
815 		.flags		= ADDR_TYPE_RT
816 	},
817 };
818 
819 static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio2 = {
820 	.master		= &omap3xxx_l4_per_hwmod,
821 	.slave		= &omap3xxx_gpio2_hwmod,
822 	.addr		= omap3xxx_gpio2_addrs,
823 	.addr_cnt	= ARRAY_SIZE(omap3xxx_gpio2_addrs),
824 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
825 };
826 
827 /* l4_per -> gpio3 */
828 static struct omap_hwmod_addr_space omap3xxx_gpio3_addrs[] = {
829 	{
830 		.pa_start	= 0x49052000,
831 		.pa_end		= 0x490521ff,
832 		.flags		= ADDR_TYPE_RT
833 	},
834 };
835 
836 static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio3 = {
837 	.master		= &omap3xxx_l4_per_hwmod,
838 	.slave		= &omap3xxx_gpio3_hwmod,
839 	.addr		= omap3xxx_gpio3_addrs,
840 	.addr_cnt	= ARRAY_SIZE(omap3xxx_gpio3_addrs),
841 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
842 };
843 
844 /* l4_per -> gpio4 */
845 static struct omap_hwmod_addr_space omap3xxx_gpio4_addrs[] = {
846 	{
847 		.pa_start	= 0x49054000,
848 		.pa_end		= 0x490541ff,
849 		.flags		= ADDR_TYPE_RT
850 	},
851 };
852 
853 static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio4 = {
854 	.master		= &omap3xxx_l4_per_hwmod,
855 	.slave		= &omap3xxx_gpio4_hwmod,
856 	.addr		= omap3xxx_gpio4_addrs,
857 	.addr_cnt	= ARRAY_SIZE(omap3xxx_gpio4_addrs),
858 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
859 };
860 
861 /* l4_per -> gpio5 */
862 static struct omap_hwmod_addr_space omap3xxx_gpio5_addrs[] = {
863 	{
864 		.pa_start	= 0x49056000,
865 		.pa_end		= 0x490561ff,
866 		.flags		= ADDR_TYPE_RT
867 	},
868 };
869 
870 static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio5 = {
871 	.master		= &omap3xxx_l4_per_hwmod,
872 	.slave		= &omap3xxx_gpio5_hwmod,
873 	.addr		= omap3xxx_gpio5_addrs,
874 	.addr_cnt	= ARRAY_SIZE(omap3xxx_gpio5_addrs),
875 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
876 };
877 
878 /* l4_per -> gpio6 */
879 static struct omap_hwmod_addr_space omap3xxx_gpio6_addrs[] = {
880 	{
881 		.pa_start	= 0x49058000,
882 		.pa_end		= 0x490581ff,
883 		.flags		= ADDR_TYPE_RT
884 	},
885 };
886 
887 static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio6 = {
888 	.master		= &omap3xxx_l4_per_hwmod,
889 	.slave		= &omap3xxx_gpio6_hwmod,
890 	.addr		= omap3xxx_gpio6_addrs,
891 	.addr_cnt	= ARRAY_SIZE(omap3xxx_gpio6_addrs),
892 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
893 };
894 
895 /*
896  * 'gpio' class
897  * general purpose io module
898  */
899 
900 static struct omap_hwmod_class_sysconfig omap3xxx_gpio_sysc = {
901 	.rev_offs	= 0x0000,
902 	.sysc_offs	= 0x0010,
903 	.syss_offs	= 0x0014,
904 	.sysc_flags	= (SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
905 			   SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
906 	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
907 	.sysc_fields    = &omap_hwmod_sysc_type1,
908 };
909 
910 static struct omap_hwmod_class omap3xxx_gpio_hwmod_class = {
911 	.name = "gpio",
912 	.sysc = &omap3xxx_gpio_sysc,
913 	.rev = 1,
914 };
915 
916 /* gpio_dev_attr*/
917 static struct omap_gpio_dev_attr gpio_dev_attr = {
918 	.bank_width = 32,
919 	.dbck_flag = true,
920 };
921 
922 /* gpio1 */
923 static struct omap_hwmod_irq_info omap3xxx_gpio1_irqs[] = {
924 	{ .irq = 29 }, /* INT_34XX_GPIO_BANK1 */
925 };
926 
927 static struct omap_hwmod_opt_clk gpio1_opt_clks[] = {
928 	{ .role = "dbclk", .clk = "gpio1_dbck", },
929 };
930 
931 static struct omap_hwmod_ocp_if *omap3xxx_gpio1_slaves[] = {
932 	&omap3xxx_l4_wkup__gpio1,
933 };
934 
935 static struct omap_hwmod omap3xxx_gpio1_hwmod = {
936 	.name		= "gpio1",
937 	.mpu_irqs	= omap3xxx_gpio1_irqs,
938 	.mpu_irqs_cnt	= ARRAY_SIZE(omap3xxx_gpio1_irqs),
939 	.main_clk	= "gpio1_ick",
940 	.opt_clks	= gpio1_opt_clks,
941 	.opt_clks_cnt	= ARRAY_SIZE(gpio1_opt_clks),
942 	.prcm		= {
943 		.omap2 = {
944 			.prcm_reg_id = 1,
945 			.module_bit = OMAP3430_EN_GPIO1_SHIFT,
946 			.module_offs = WKUP_MOD,
947 			.idlest_reg_id = 1,
948 			.idlest_idle_bit = OMAP3430_ST_GPIO1_SHIFT,
949 		},
950 	},
951 	.slaves		= omap3xxx_gpio1_slaves,
952 	.slaves_cnt	= ARRAY_SIZE(omap3xxx_gpio1_slaves),
953 	.class		= &omap3xxx_gpio_hwmod_class,
954 	.dev_attr	= &gpio_dev_attr,
955 	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
956 };
957 
958 /* gpio2 */
959 static struct omap_hwmod_irq_info omap3xxx_gpio2_irqs[] = {
960 	{ .irq = 30 }, /* INT_34XX_GPIO_BANK2 */
961 };
962 
963 static struct omap_hwmod_opt_clk gpio2_opt_clks[] = {
964 	{ .role = "dbclk", .clk = "gpio2_dbck", },
965 };
966 
967 static struct omap_hwmod_ocp_if *omap3xxx_gpio2_slaves[] = {
968 	&omap3xxx_l4_per__gpio2,
969 };
970 
971 static struct omap_hwmod omap3xxx_gpio2_hwmod = {
972 	.name		= "gpio2",
973 	.mpu_irqs	= omap3xxx_gpio2_irqs,
974 	.mpu_irqs_cnt	= ARRAY_SIZE(omap3xxx_gpio2_irqs),
975 	.main_clk	= "gpio2_ick",
976 	.opt_clks	= gpio2_opt_clks,
977 	.opt_clks_cnt	= ARRAY_SIZE(gpio2_opt_clks),
978 	.prcm		= {
979 		.omap2 = {
980 			.prcm_reg_id = 1,
981 			.module_bit = OMAP3430_EN_GPIO2_SHIFT,
982 			.module_offs = OMAP3430_PER_MOD,
983 			.idlest_reg_id = 1,
984 			.idlest_idle_bit = OMAP3430_ST_GPIO2_SHIFT,
985 		},
986 	},
987 	.slaves		= omap3xxx_gpio2_slaves,
988 	.slaves_cnt	= ARRAY_SIZE(omap3xxx_gpio2_slaves),
989 	.class		= &omap3xxx_gpio_hwmod_class,
990 	.dev_attr	= &gpio_dev_attr,
991 	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
992 };
993 
994 /* gpio3 */
995 static struct omap_hwmod_irq_info omap3xxx_gpio3_irqs[] = {
996 	{ .irq = 31 }, /* INT_34XX_GPIO_BANK3 */
997 };
998 
999 static struct omap_hwmod_opt_clk gpio3_opt_clks[] = {
1000 	{ .role = "dbclk", .clk = "gpio3_dbck", },
1001 };
1002 
1003 static struct omap_hwmod_ocp_if *omap3xxx_gpio3_slaves[] = {
1004 	&omap3xxx_l4_per__gpio3,
1005 };
1006 
1007 static struct omap_hwmod omap3xxx_gpio3_hwmod = {
1008 	.name		= "gpio3",
1009 	.mpu_irqs	= omap3xxx_gpio3_irqs,
1010 	.mpu_irqs_cnt	= ARRAY_SIZE(omap3xxx_gpio3_irqs),
1011 	.main_clk	= "gpio3_ick",
1012 	.opt_clks	= gpio3_opt_clks,
1013 	.opt_clks_cnt	= ARRAY_SIZE(gpio3_opt_clks),
1014 	.prcm		= {
1015 		.omap2 = {
1016 			.prcm_reg_id = 1,
1017 			.module_bit = OMAP3430_EN_GPIO3_SHIFT,
1018 			.module_offs = OMAP3430_PER_MOD,
1019 			.idlest_reg_id = 1,
1020 			.idlest_idle_bit = OMAP3430_ST_GPIO3_SHIFT,
1021 		},
1022 	},
1023 	.slaves		= omap3xxx_gpio3_slaves,
1024 	.slaves_cnt	= ARRAY_SIZE(omap3xxx_gpio3_slaves),
1025 	.class		= &omap3xxx_gpio_hwmod_class,
1026 	.dev_attr	= &gpio_dev_attr,
1027 	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
1028 };
1029 
1030 /* gpio4 */
1031 static struct omap_hwmod_irq_info omap3xxx_gpio4_irqs[] = {
1032 	{ .irq = 32 }, /* INT_34XX_GPIO_BANK4 */
1033 };
1034 
1035 static struct omap_hwmod_opt_clk gpio4_opt_clks[] = {
1036 	{ .role = "dbclk", .clk = "gpio4_dbck", },
1037 };
1038 
1039 static struct omap_hwmod_ocp_if *omap3xxx_gpio4_slaves[] = {
1040 	&omap3xxx_l4_per__gpio4,
1041 };
1042 
1043 static struct omap_hwmod omap3xxx_gpio4_hwmod = {
1044 	.name		= "gpio4",
1045 	.mpu_irqs	= omap3xxx_gpio4_irqs,
1046 	.mpu_irqs_cnt	= ARRAY_SIZE(omap3xxx_gpio4_irqs),
1047 	.main_clk	= "gpio4_ick",
1048 	.opt_clks	= gpio4_opt_clks,
1049 	.opt_clks_cnt	= ARRAY_SIZE(gpio4_opt_clks),
1050 	.prcm		= {
1051 		.omap2 = {
1052 			.prcm_reg_id = 1,
1053 			.module_bit = OMAP3430_EN_GPIO4_SHIFT,
1054 			.module_offs = OMAP3430_PER_MOD,
1055 			.idlest_reg_id = 1,
1056 			.idlest_idle_bit = OMAP3430_ST_GPIO4_SHIFT,
1057 		},
1058 	},
1059 	.slaves		= omap3xxx_gpio4_slaves,
1060 	.slaves_cnt	= ARRAY_SIZE(omap3xxx_gpio4_slaves),
1061 	.class		= &omap3xxx_gpio_hwmod_class,
1062 	.dev_attr	= &gpio_dev_attr,
1063 	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
1064 };
1065 
1066 /* gpio5 */
1067 static struct omap_hwmod_irq_info omap3xxx_gpio5_irqs[] = {
1068 	{ .irq = 33 }, /* INT_34XX_GPIO_BANK5 */
1069 };
1070 
1071 static struct omap_hwmod_opt_clk gpio5_opt_clks[] = {
1072 	{ .role = "dbclk", .clk = "gpio5_dbck", },
1073 };
1074 
1075 static struct omap_hwmod_ocp_if *omap3xxx_gpio5_slaves[] = {
1076 	&omap3xxx_l4_per__gpio5,
1077 };
1078 
1079 static struct omap_hwmod omap3xxx_gpio5_hwmod = {
1080 	.name		= "gpio5",
1081 	.mpu_irqs	= omap3xxx_gpio5_irqs,
1082 	.mpu_irqs_cnt	= ARRAY_SIZE(omap3xxx_gpio5_irqs),
1083 	.main_clk	= "gpio5_ick",
1084 	.opt_clks	= gpio5_opt_clks,
1085 	.opt_clks_cnt	= ARRAY_SIZE(gpio5_opt_clks),
1086 	.prcm		= {
1087 		.omap2 = {
1088 			.prcm_reg_id = 1,
1089 			.module_bit = OMAP3430_EN_GPIO5_SHIFT,
1090 			.module_offs = OMAP3430_PER_MOD,
1091 			.idlest_reg_id = 1,
1092 			.idlest_idle_bit = OMAP3430_ST_GPIO5_SHIFT,
1093 		},
1094 	},
1095 	.slaves		= omap3xxx_gpio5_slaves,
1096 	.slaves_cnt	= ARRAY_SIZE(omap3xxx_gpio5_slaves),
1097 	.class		= &omap3xxx_gpio_hwmod_class,
1098 	.dev_attr	= &gpio_dev_attr,
1099 	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
1100 };
1101 
1102 /* gpio6 */
1103 static struct omap_hwmod_irq_info omap3xxx_gpio6_irqs[] = {
1104 	{ .irq = 34 }, /* INT_34XX_GPIO_BANK6 */
1105 };
1106 
1107 static struct omap_hwmod_opt_clk gpio6_opt_clks[] = {
1108 	{ .role = "dbclk", .clk = "gpio6_dbck", },
1109 };
1110 
1111 static struct omap_hwmod_ocp_if *omap3xxx_gpio6_slaves[] = {
1112 	&omap3xxx_l4_per__gpio6,
1113 };
1114 
1115 static struct omap_hwmod omap3xxx_gpio6_hwmod = {
1116 	.name		= "gpio6",
1117 	.mpu_irqs	= omap3xxx_gpio6_irqs,
1118 	.mpu_irqs_cnt	= ARRAY_SIZE(omap3xxx_gpio6_irqs),
1119 	.main_clk	= "gpio6_ick",
1120 	.opt_clks	= gpio6_opt_clks,
1121 	.opt_clks_cnt	= ARRAY_SIZE(gpio6_opt_clks),
1122 	.prcm		= {
1123 		.omap2 = {
1124 			.prcm_reg_id = 1,
1125 			.module_bit = OMAP3430_EN_GPIO6_SHIFT,
1126 			.module_offs = OMAP3430_PER_MOD,
1127 			.idlest_reg_id = 1,
1128 			.idlest_idle_bit = OMAP3430_ST_GPIO6_SHIFT,
1129 		},
1130 	},
1131 	.slaves		= omap3xxx_gpio6_slaves,
1132 	.slaves_cnt	= ARRAY_SIZE(omap3xxx_gpio6_slaves),
1133 	.class		= &omap3xxx_gpio_hwmod_class,
1134 	.dev_attr	= &gpio_dev_attr,
1135 	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
1136 };
1137 
1138 /* dma_system -> L3 */
1139 static struct omap_hwmod_ocp_if omap3xxx_dma_system__l3 = {
1140 	.master		= &omap3xxx_dma_system_hwmod,
1141 	.slave		= &omap3xxx_l3_main_hwmod,
1142 	.clk		= "core_l3_ick",
1143 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1144 };
1145 
1146 /* dma attributes */
1147 static struct omap_dma_dev_attr dma_dev_attr = {
1148 	.dev_caps  = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY |
1149 				IS_CSSA_32 | IS_CDSA_32 | IS_RW_PRIORITY,
1150 	.lch_count = 32,
1151 };
1152 
1153 static struct omap_hwmod_class_sysconfig omap3xxx_dma_sysc = {
1154 	.rev_offs	= 0x0000,
1155 	.sysc_offs	= 0x002c,
1156 	.syss_offs	= 0x0028,
1157 	.sysc_flags	= (SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
1158 			   SYSC_HAS_MIDLEMODE | SYSC_HAS_CLOCKACTIVITY |
1159 			   SYSC_HAS_EMUFREE | SYSC_HAS_AUTOIDLE),
1160 	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1161 			   MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
1162 	.sysc_fields	= &omap_hwmod_sysc_type1,
1163 };
1164 
1165 static struct omap_hwmod_class omap3xxx_dma_hwmod_class = {
1166 	.name = "dma",
1167 	.sysc = &omap3xxx_dma_sysc,
1168 };
1169 
1170 /* dma_system */
1171 static struct omap_hwmod_irq_info omap3xxx_dma_system_irqs[] = {
1172 	{ .name = "0", .irq = 12 }, /* INT_24XX_SDMA_IRQ0 */
1173 	{ .name = "1", .irq = 13 }, /* INT_24XX_SDMA_IRQ1 */
1174 	{ .name = "2", .irq = 14 }, /* INT_24XX_SDMA_IRQ2 */
1175 	{ .name = "3", .irq = 15 }, /* INT_24XX_SDMA_IRQ3 */
1176 };
1177 
1178 static struct omap_hwmod_addr_space omap3xxx_dma_system_addrs[] = {
1179 	{
1180 		.pa_start	= 0x48056000,
1181 		.pa_end		= 0x4a0560ff,
1182 		.flags		= ADDR_TYPE_RT
1183 	},
1184 };
1185 
1186 /* dma_system master ports */
1187 static struct omap_hwmod_ocp_if *omap3xxx_dma_system_masters[] = {
1188 	&omap3xxx_dma_system__l3,
1189 };
1190 
1191 /* l4_cfg -> dma_system */
1192 static struct omap_hwmod_ocp_if omap3xxx_l4_core__dma_system = {
1193 	.master		= &omap3xxx_l4_core_hwmod,
1194 	.slave		= &omap3xxx_dma_system_hwmod,
1195 	.clk		= "core_l4_ick",
1196 	.addr		= omap3xxx_dma_system_addrs,
1197 	.addr_cnt	= ARRAY_SIZE(omap3xxx_dma_system_addrs),
1198 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1199 };
1200 
1201 /* dma_system slave ports */
1202 static struct omap_hwmod_ocp_if *omap3xxx_dma_system_slaves[] = {
1203 	&omap3xxx_l4_core__dma_system,
1204 };
1205 
1206 static struct omap_hwmod omap3xxx_dma_system_hwmod = {
1207 	.name		= "dma",
1208 	.class		= &omap3xxx_dma_hwmod_class,
1209 	.mpu_irqs	= omap3xxx_dma_system_irqs,
1210 	.mpu_irqs_cnt	= ARRAY_SIZE(omap3xxx_dma_system_irqs),
1211 	.main_clk	= "core_l3_ick",
1212 	.prcm = {
1213 		.omap2 = {
1214 			.module_offs		= CORE_MOD,
1215 			.prcm_reg_id		= 1,
1216 			.module_bit		= OMAP3430_ST_SDMA_SHIFT,
1217 			.idlest_reg_id		= 1,
1218 			.idlest_idle_bit	= OMAP3430_ST_SDMA_SHIFT,
1219 		},
1220 	},
1221 	.slaves		= omap3xxx_dma_system_slaves,
1222 	.slaves_cnt	= ARRAY_SIZE(omap3xxx_dma_system_slaves),
1223 	.masters	= omap3xxx_dma_system_masters,
1224 	.masters_cnt	= ARRAY_SIZE(omap3xxx_dma_system_masters),
1225 	.dev_attr	= &dma_dev_attr,
1226 	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
1227 	.flags		= HWMOD_NO_IDLEST,
1228 };
1229 
1230 /* SR common */
1231 static struct omap_hwmod_sysc_fields omap34xx_sr_sysc_fields = {
1232 	.clkact_shift	= 20,
1233 };
1234 
1235 static struct omap_hwmod_class_sysconfig omap34xx_sr_sysc = {
1236 	.sysc_offs	= 0x24,
1237 	.sysc_flags	= (SYSC_HAS_CLOCKACTIVITY | SYSC_NO_CACHE),
1238 	.clockact	= CLOCKACT_TEST_ICLK,
1239 	.sysc_fields	= &omap34xx_sr_sysc_fields,
1240 };
1241 
1242 static struct omap_hwmod_class omap34xx_smartreflex_hwmod_class = {
1243 	.name = "smartreflex",
1244 	.sysc = &omap34xx_sr_sysc,
1245 	.rev  = 1,
1246 };
1247 
1248 static struct omap_hwmod_sysc_fields omap36xx_sr_sysc_fields = {
1249 	.sidle_shift	= 24,
1250 	.enwkup_shift	= 26
1251 };
1252 
1253 static struct omap_hwmod_class_sysconfig omap36xx_sr_sysc = {
1254 	.sysc_offs	= 0x38,
1255 	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1256 	.sysc_flags	= (SYSC_HAS_SIDLEMODE | SYSC_HAS_ENAWAKEUP |
1257 			SYSC_NO_CACHE),
1258 	.sysc_fields	= &omap36xx_sr_sysc_fields,
1259 };
1260 
1261 static struct omap_hwmod_class omap36xx_smartreflex_hwmod_class = {
1262 	.name = "smartreflex",
1263 	.sysc = &omap36xx_sr_sysc,
1264 	.rev  = 2,
1265 };
1266 
1267 /* SR1 */
1268 static struct omap_hwmod_ocp_if *omap3_sr1_slaves[] = {
1269 	&omap3_l4_core__sr1,
1270 };
1271 
1272 static struct omap_hwmod omap34xx_sr1_hwmod = {
1273 	.name		= "sr1_hwmod",
1274 	.class		= &omap34xx_smartreflex_hwmod_class,
1275 	.main_clk	= "sr1_fck",
1276 	.vdd_name	= "mpu",
1277 	.prcm		= {
1278 		.omap2 = {
1279 			.prcm_reg_id = 1,
1280 			.module_bit = OMAP3430_EN_SR1_SHIFT,
1281 			.module_offs = WKUP_MOD,
1282 			.idlest_reg_id = 1,
1283 			.idlest_idle_bit = OMAP3430_EN_SR1_SHIFT,
1284 		},
1285 	},
1286 	.slaves		= omap3_sr1_slaves,
1287 	.slaves_cnt	= ARRAY_SIZE(omap3_sr1_slaves),
1288 	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES2 |
1289 					CHIP_IS_OMAP3430ES3_0 |
1290 					CHIP_IS_OMAP3430ES3_1),
1291 	.flags		= HWMOD_SET_DEFAULT_CLOCKACT,
1292 };
1293 
1294 static struct omap_hwmod omap36xx_sr1_hwmod = {
1295 	.name		= "sr1_hwmod",
1296 	.class		= &omap36xx_smartreflex_hwmod_class,
1297 	.main_clk	= "sr1_fck",
1298 	.vdd_name	= "mpu",
1299 	.prcm		= {
1300 		.omap2 = {
1301 			.prcm_reg_id = 1,
1302 			.module_bit = OMAP3430_EN_SR1_SHIFT,
1303 			.module_offs = WKUP_MOD,
1304 			.idlest_reg_id = 1,
1305 			.idlest_idle_bit = OMAP3430_EN_SR1_SHIFT,
1306 		},
1307 	},
1308 	.slaves		= omap3_sr1_slaves,
1309 	.slaves_cnt	= ARRAY_SIZE(omap3_sr1_slaves),
1310 	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3630ES1),
1311 };
1312 
1313 /* SR2 */
1314 static struct omap_hwmod_ocp_if *omap3_sr2_slaves[] = {
1315 	&omap3_l4_core__sr2,
1316 };
1317 
1318 static struct omap_hwmod omap34xx_sr2_hwmod = {
1319 	.name		= "sr2_hwmod",
1320 	.class		= &omap34xx_smartreflex_hwmod_class,
1321 	.main_clk	= "sr2_fck",
1322 	.vdd_name	= "core",
1323 	.prcm		= {
1324 		.omap2 = {
1325 			.prcm_reg_id = 1,
1326 			.module_bit = OMAP3430_EN_SR2_SHIFT,
1327 			.module_offs = WKUP_MOD,
1328 			.idlest_reg_id = 1,
1329 			.idlest_idle_bit = OMAP3430_EN_SR2_SHIFT,
1330 		},
1331 	},
1332 	.slaves		= omap3_sr2_slaves,
1333 	.slaves_cnt	= ARRAY_SIZE(omap3_sr2_slaves),
1334 	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES2 |
1335 					CHIP_IS_OMAP3430ES3_0 |
1336 					CHIP_IS_OMAP3430ES3_1),
1337 	.flags		= HWMOD_SET_DEFAULT_CLOCKACT,
1338 };
1339 
1340 static struct omap_hwmod omap36xx_sr2_hwmod = {
1341 	.name		= "sr2_hwmod",
1342 	.class		= &omap36xx_smartreflex_hwmod_class,
1343 	.main_clk	= "sr2_fck",
1344 	.vdd_name	= "core",
1345 	.prcm		= {
1346 		.omap2 = {
1347 			.prcm_reg_id = 1,
1348 			.module_bit = OMAP3430_EN_SR2_SHIFT,
1349 			.module_offs = WKUP_MOD,
1350 			.idlest_reg_id = 1,
1351 			.idlest_idle_bit = OMAP3430_EN_SR2_SHIFT,
1352 		},
1353 	},
1354 	.slaves		= omap3_sr2_slaves,
1355 	.slaves_cnt	= ARRAY_SIZE(omap3_sr2_slaves),
1356 	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3630ES1),
1357 };
1358 
1359 static __initdata struct omap_hwmod *omap3xxx_hwmods[] = {
1360 	&omap3xxx_l3_main_hwmod,
1361 	&omap3xxx_l4_core_hwmod,
1362 	&omap3xxx_l4_per_hwmod,
1363 	&omap3xxx_l4_wkup_hwmod,
1364 	&omap3xxx_mpu_hwmod,
1365 	&omap3xxx_iva_hwmod,
1366 	&omap3xxx_wd_timer2_hwmod,
1367 	&omap3xxx_uart1_hwmod,
1368 	&omap3xxx_uart2_hwmod,
1369 	&omap3xxx_uart3_hwmod,
1370 	&omap3xxx_uart4_hwmod,
1371 	&omap3xxx_i2c1_hwmod,
1372 	&omap3xxx_i2c2_hwmod,
1373 	&omap3xxx_i2c3_hwmod,
1374 	&omap34xx_sr1_hwmod,
1375 	&omap34xx_sr2_hwmod,
1376 	&omap36xx_sr1_hwmod,
1377 	&omap36xx_sr2_hwmod,
1378 
1379 
1380 	/* gpio class */
1381 	&omap3xxx_gpio1_hwmod,
1382 	&omap3xxx_gpio2_hwmod,
1383 	&omap3xxx_gpio3_hwmod,
1384 	&omap3xxx_gpio4_hwmod,
1385 	&omap3xxx_gpio5_hwmod,
1386 	&omap3xxx_gpio6_hwmod,
1387 
1388 	/* dma_system class*/
1389 	&omap3xxx_dma_system_hwmod,
1390 	NULL,
1391 };
1392 
1393 int __init omap3xxx_hwmod_init(void)
1394 {
1395 	return omap_hwmod_init(omap3xxx_hwmods);
1396 }
1397