2 * omap_hwmod_3xxx_data.c - hardware modules present on the OMAP3xxx chips
4 * Copyright (C) 2009-2010 Nokia Corporation
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.
11 * The data in this file should be completely autogeneratable from
12 * the TI hardware database or other technical documentation.
14 * XXX these should be marked initdata for multi-OMAP kernels
16 #include <plat/omap_hwmod.h>
17 #include <mach/irqs.h>
20 #include <plat/serial.h>
21 #include <plat/l3_3xxx.h>
22 #include <plat/l4_3xxx.h>
24 #include <plat/gpio.h>
25 #include <plat/smartreflex.h>
26 #include <plat/mcspi.h>
27 #include <plat/dmtimer.h>
29 #include "omap_hwmod_common_data.h"
31 #include "prm-regbits-34xx.h"
32 #include "cm-regbits-34xx.h"
34 #include <mach/am35xx.h>
37 * OMAP3xxx hardware module integration data
39 * ALl of the data in this section should be autogeneratable from the
40 * TI hardware database or other technical documentation. Data that
41 * is driver-specific or driver-kernel integration-specific belongs
45 static struct omap_hwmod omap3xxx_mpu_hwmod;
46 static struct omap_hwmod omap3xxx_iva_hwmod;
47 static struct omap_hwmod omap3xxx_l3_main_hwmod;
48 static struct omap_hwmod omap3xxx_l4_core_hwmod;
49 static struct omap_hwmod omap3xxx_l4_per_hwmod;
50 static struct omap_hwmod omap3xxx_wd_timer2_hwmod;
51 static struct omap_hwmod omap3430es1_dss_core_hwmod;
52 static struct omap_hwmod omap3xxx_dss_core_hwmod;
53 static struct omap_hwmod omap3xxx_dss_dispc_hwmod;
54 static struct omap_hwmod omap3xxx_dss_dsi1_hwmod;
55 static struct omap_hwmod omap3xxx_dss_rfbi_hwmod;
56 static struct omap_hwmod omap3xxx_dss_venc_hwmod;
57 static struct omap_hwmod omap3xxx_i2c1_hwmod;
58 static struct omap_hwmod omap3xxx_i2c2_hwmod;
59 static struct omap_hwmod omap3xxx_i2c3_hwmod;
60 static struct omap_hwmod omap3xxx_gpio1_hwmod;
61 static struct omap_hwmod omap3xxx_gpio2_hwmod;
62 static struct omap_hwmod omap3xxx_gpio3_hwmod;
63 static struct omap_hwmod omap3xxx_gpio4_hwmod;
64 static struct omap_hwmod omap3xxx_gpio5_hwmod;
65 static struct omap_hwmod omap3xxx_gpio6_hwmod;
66 static struct omap_hwmod omap34xx_sr1_hwmod;
67 static struct omap_hwmod omap34xx_sr2_hwmod;
68 static struct omap_hwmod omap34xx_mcspi1;
69 static struct omap_hwmod omap34xx_mcspi2;
70 static struct omap_hwmod omap34xx_mcspi3;
71 static struct omap_hwmod omap34xx_mcspi4;
72 static struct omap_hwmod am35xx_usbhsotg_hwmod;
74 static struct omap_hwmod omap3xxx_dma_system_hwmod;
76 /* L3 -> L4_CORE interface */
77 static struct omap_hwmod_ocp_if omap3xxx_l3_main__l4_core = {
78 .master = &omap3xxx_l3_main_hwmod,
79 .slave = &omap3xxx_l4_core_hwmod,
80 .user = OCP_USER_MPU | OCP_USER_SDMA,
83 /* L3 -> L4_PER interface */
84 static struct omap_hwmod_ocp_if omap3xxx_l3_main__l4_per = {
85 .master = &omap3xxx_l3_main_hwmod,
86 .slave = &omap3xxx_l4_per_hwmod,
87 .user = OCP_USER_MPU | OCP_USER_SDMA,
90 /* MPU -> L3 interface */
91 static struct omap_hwmod_ocp_if omap3xxx_mpu__l3_main = {
92 .master = &omap3xxx_mpu_hwmod,
93 .slave = &omap3xxx_l3_main_hwmod,
97 /* Slave interfaces on the L3 interconnect */
98 static struct omap_hwmod_ocp_if *omap3xxx_l3_main_slaves[] = {
99 &omap3xxx_mpu__l3_main,
103 static struct omap_hwmod_ocp_if omap3xxx_dss__l3 = {
104 .master = &omap3xxx_dss_core_hwmod,
105 .slave = &omap3xxx_l3_main_hwmod,
108 .l3_perm_bit = OMAP3_L3_CORE_FW_INIT_ID_DSS,
109 .flags = OMAP_FIREWALL_L3,
112 .user = OCP_USER_MPU | OCP_USER_SDMA,
115 /* Master interfaces on the L3 interconnect */
116 static struct omap_hwmod_ocp_if *omap3xxx_l3_main_masters[] = {
117 &omap3xxx_l3_main__l4_core,
118 &omap3xxx_l3_main__l4_per,
122 static struct omap_hwmod omap3xxx_l3_main_hwmod = {
124 .class = &l3_hwmod_class,
125 .masters = omap3xxx_l3_main_masters,
126 .masters_cnt = ARRAY_SIZE(omap3xxx_l3_main_masters),
127 .slaves = omap3xxx_l3_main_slaves,
128 .slaves_cnt = ARRAY_SIZE(omap3xxx_l3_main_slaves),
129 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
130 .flags = HWMOD_NO_IDLEST,
133 static struct omap_hwmod omap3xxx_l4_wkup_hwmod;
134 static struct omap_hwmod omap3xxx_uart1_hwmod;
135 static struct omap_hwmod omap3xxx_uart2_hwmod;
136 static struct omap_hwmod omap3xxx_uart3_hwmod;
137 static struct omap_hwmod omap3xxx_uart4_hwmod;
138 static struct omap_hwmod omap3xxx_usbhsotg_hwmod;
140 /* l3_core -> usbhsotg interface */
141 static struct omap_hwmod_ocp_if omap3xxx_usbhsotg__l3 = {
142 .master = &omap3xxx_usbhsotg_hwmod,
143 .slave = &omap3xxx_l3_main_hwmod,
144 .clk = "core_l3_ick",
145 .user = OCP_USER_MPU,
148 /* l3_core -> am35xx_usbhsotg interface */
149 static struct omap_hwmod_ocp_if am35xx_usbhsotg__l3 = {
150 .master = &am35xx_usbhsotg_hwmod,
151 .slave = &omap3xxx_l3_main_hwmod,
152 .clk = "core_l3_ick",
153 .user = OCP_USER_MPU,
155 /* L4_CORE -> L4_WKUP interface */
156 static struct omap_hwmod_ocp_if omap3xxx_l4_core__l4_wkup = {
157 .master = &omap3xxx_l4_core_hwmod,
158 .slave = &omap3xxx_l4_wkup_hwmod,
159 .user = OCP_USER_MPU | OCP_USER_SDMA,
162 /* L4 CORE -> UART1 interface */
163 static struct omap_hwmod_addr_space omap3xxx_uart1_addr_space[] = {
165 .pa_start = OMAP3_UART1_BASE,
166 .pa_end = OMAP3_UART1_BASE + SZ_8K - 1,
167 .flags = ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
171 static struct omap_hwmod_ocp_if omap3_l4_core__uart1 = {
172 .master = &omap3xxx_l4_core_hwmod,
173 .slave = &omap3xxx_uart1_hwmod,
175 .addr = omap3xxx_uart1_addr_space,
176 .addr_cnt = ARRAY_SIZE(omap3xxx_uart1_addr_space),
177 .user = OCP_USER_MPU | OCP_USER_SDMA,
180 /* L4 CORE -> UART2 interface */
181 static struct omap_hwmod_addr_space omap3xxx_uart2_addr_space[] = {
183 .pa_start = OMAP3_UART2_BASE,
184 .pa_end = OMAP3_UART2_BASE + SZ_1K - 1,
185 .flags = ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
189 static struct omap_hwmod_ocp_if omap3_l4_core__uart2 = {
190 .master = &omap3xxx_l4_core_hwmod,
191 .slave = &omap3xxx_uart2_hwmod,
193 .addr = omap3xxx_uart2_addr_space,
194 .addr_cnt = ARRAY_SIZE(omap3xxx_uart2_addr_space),
195 .user = OCP_USER_MPU | OCP_USER_SDMA,
198 /* L4 PER -> UART3 interface */
199 static struct omap_hwmod_addr_space omap3xxx_uart3_addr_space[] = {
201 .pa_start = OMAP3_UART3_BASE,
202 .pa_end = OMAP3_UART3_BASE + SZ_1K - 1,
203 .flags = ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
207 static struct omap_hwmod_ocp_if omap3_l4_per__uart3 = {
208 .master = &omap3xxx_l4_per_hwmod,
209 .slave = &omap3xxx_uart3_hwmod,
211 .addr = omap3xxx_uart3_addr_space,
212 .addr_cnt = ARRAY_SIZE(omap3xxx_uart3_addr_space),
213 .user = OCP_USER_MPU | OCP_USER_SDMA,
216 /* L4 PER -> UART4 interface */
217 static struct omap_hwmod_addr_space omap3xxx_uart4_addr_space[] = {
219 .pa_start = OMAP3_UART4_BASE,
220 .pa_end = OMAP3_UART4_BASE + SZ_1K - 1,
221 .flags = ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
225 static struct omap_hwmod_ocp_if omap3_l4_per__uart4 = {
226 .master = &omap3xxx_l4_per_hwmod,
227 .slave = &omap3xxx_uart4_hwmod,
229 .addr = omap3xxx_uart4_addr_space,
230 .addr_cnt = ARRAY_SIZE(omap3xxx_uart4_addr_space),
231 .user = OCP_USER_MPU | OCP_USER_SDMA,
234 /* I2C IP block address space length (in bytes) */
235 #define OMAP2_I2C_AS_LEN 128
237 /* L4 CORE -> I2C1 interface */
238 static struct omap_hwmod_addr_space omap3xxx_i2c1_addr_space[] = {
240 .pa_start = 0x48070000,
241 .pa_end = 0x48070000 + OMAP2_I2C_AS_LEN - 1,
242 .flags = ADDR_TYPE_RT,
246 static struct omap_hwmod_ocp_if omap3_l4_core__i2c1 = {
247 .master = &omap3xxx_l4_core_hwmod,
248 .slave = &omap3xxx_i2c1_hwmod,
250 .addr = omap3xxx_i2c1_addr_space,
251 .addr_cnt = ARRAY_SIZE(omap3xxx_i2c1_addr_space),
254 .l4_fw_region = OMAP3_L4_CORE_FW_I2C1_REGION,
256 .flags = OMAP_FIREWALL_L4,
259 .user = OCP_USER_MPU | OCP_USER_SDMA,
262 /* L4 CORE -> I2C2 interface */
263 static struct omap_hwmod_addr_space omap3xxx_i2c2_addr_space[] = {
265 .pa_start = 0x48072000,
266 .pa_end = 0x48072000 + OMAP2_I2C_AS_LEN - 1,
267 .flags = ADDR_TYPE_RT,
271 static struct omap_hwmod_ocp_if omap3_l4_core__i2c2 = {
272 .master = &omap3xxx_l4_core_hwmod,
273 .slave = &omap3xxx_i2c2_hwmod,
275 .addr = omap3xxx_i2c2_addr_space,
276 .addr_cnt = ARRAY_SIZE(omap3xxx_i2c2_addr_space),
279 .l4_fw_region = OMAP3_L4_CORE_FW_I2C2_REGION,
281 .flags = OMAP_FIREWALL_L4,
284 .user = OCP_USER_MPU | OCP_USER_SDMA,
287 /* L4 CORE -> I2C3 interface */
288 static struct omap_hwmod_addr_space omap3xxx_i2c3_addr_space[] = {
290 .pa_start = 0x48060000,
291 .pa_end = 0x48060000 + OMAP2_I2C_AS_LEN - 1,
292 .flags = ADDR_TYPE_RT,
296 static struct omap_hwmod_ocp_if omap3_l4_core__i2c3 = {
297 .master = &omap3xxx_l4_core_hwmod,
298 .slave = &omap3xxx_i2c3_hwmod,
300 .addr = omap3xxx_i2c3_addr_space,
301 .addr_cnt = ARRAY_SIZE(omap3xxx_i2c3_addr_space),
304 .l4_fw_region = OMAP3_L4_CORE_FW_I2C3_REGION,
306 .flags = OMAP_FIREWALL_L4,
309 .user = OCP_USER_MPU | OCP_USER_SDMA,
312 /* L4 CORE -> SR1 interface */
313 static struct omap_hwmod_addr_space omap3_sr1_addr_space[] = {
315 .pa_start = OMAP34XX_SR1_BASE,
316 .pa_end = OMAP34XX_SR1_BASE + SZ_1K - 1,
317 .flags = ADDR_TYPE_RT,
321 static struct omap_hwmod_ocp_if omap3_l4_core__sr1 = {
322 .master = &omap3xxx_l4_core_hwmod,
323 .slave = &omap34xx_sr1_hwmod,
325 .addr = omap3_sr1_addr_space,
326 .addr_cnt = ARRAY_SIZE(omap3_sr1_addr_space),
327 .user = OCP_USER_MPU,
330 /* L4 CORE -> SR1 interface */
331 static struct omap_hwmod_addr_space omap3_sr2_addr_space[] = {
333 .pa_start = OMAP34XX_SR2_BASE,
334 .pa_end = OMAP34XX_SR2_BASE + SZ_1K - 1,
335 .flags = ADDR_TYPE_RT,
339 static struct omap_hwmod_ocp_if omap3_l4_core__sr2 = {
340 .master = &omap3xxx_l4_core_hwmod,
341 .slave = &omap34xx_sr2_hwmod,
343 .addr = omap3_sr2_addr_space,
344 .addr_cnt = ARRAY_SIZE(omap3_sr2_addr_space),
345 .user = OCP_USER_MPU,
349 * usbhsotg interface data
352 static struct omap_hwmod_addr_space omap3xxx_usbhsotg_addrs[] = {
354 .pa_start = OMAP34XX_HSUSB_OTG_BASE,
355 .pa_end = OMAP34XX_HSUSB_OTG_BASE + SZ_4K - 1,
356 .flags = ADDR_TYPE_RT
360 /* l4_core -> usbhsotg */
361 static struct omap_hwmod_ocp_if omap3xxx_l4_core__usbhsotg = {
362 .master = &omap3xxx_l4_core_hwmod,
363 .slave = &omap3xxx_usbhsotg_hwmod,
365 .addr = omap3xxx_usbhsotg_addrs,
366 .addr_cnt = ARRAY_SIZE(omap3xxx_usbhsotg_addrs),
367 .user = OCP_USER_MPU,
370 static struct omap_hwmod_ocp_if *omap3xxx_usbhsotg_masters[] = {
371 &omap3xxx_usbhsotg__l3,
374 static struct omap_hwmod_ocp_if *omap3xxx_usbhsotg_slaves[] = {
375 &omap3xxx_l4_core__usbhsotg,
378 static struct omap_hwmod_addr_space am35xx_usbhsotg_addrs[] = {
380 .pa_start = AM35XX_IPSS_USBOTGSS_BASE,
381 .pa_end = AM35XX_IPSS_USBOTGSS_BASE + SZ_4K - 1,
382 .flags = ADDR_TYPE_RT
386 /* l4_core -> usbhsotg */
387 static struct omap_hwmod_ocp_if am35xx_l4_core__usbhsotg = {
388 .master = &omap3xxx_l4_core_hwmod,
389 .slave = &am35xx_usbhsotg_hwmod,
391 .addr = am35xx_usbhsotg_addrs,
392 .addr_cnt = ARRAY_SIZE(am35xx_usbhsotg_addrs),
393 .user = OCP_USER_MPU,
396 static struct omap_hwmod_ocp_if *am35xx_usbhsotg_masters[] = {
397 &am35xx_usbhsotg__l3,
400 static struct omap_hwmod_ocp_if *am35xx_usbhsotg_slaves[] = {
401 &am35xx_l4_core__usbhsotg,
403 /* Slave interfaces on the L4_CORE interconnect */
404 static struct omap_hwmod_ocp_if *omap3xxx_l4_core_slaves[] = {
405 &omap3xxx_l3_main__l4_core,
410 /* Master interfaces on the L4_CORE interconnect */
411 static struct omap_hwmod_ocp_if *omap3xxx_l4_core_masters[] = {
412 &omap3xxx_l4_core__l4_wkup,
413 &omap3_l4_core__uart1,
414 &omap3_l4_core__uart2,
415 &omap3_l4_core__i2c1,
416 &omap3_l4_core__i2c2,
417 &omap3_l4_core__i2c3,
421 static struct omap_hwmod omap3xxx_l4_core_hwmod = {
423 .class = &l4_hwmod_class,
424 .masters = omap3xxx_l4_core_masters,
425 .masters_cnt = ARRAY_SIZE(omap3xxx_l4_core_masters),
426 .slaves = omap3xxx_l4_core_slaves,
427 .slaves_cnt = ARRAY_SIZE(omap3xxx_l4_core_slaves),
428 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
429 .flags = HWMOD_NO_IDLEST,
432 /* Slave interfaces on the L4_PER interconnect */
433 static struct omap_hwmod_ocp_if *omap3xxx_l4_per_slaves[] = {
434 &omap3xxx_l3_main__l4_per,
437 /* Master interfaces on the L4_PER interconnect */
438 static struct omap_hwmod_ocp_if *omap3xxx_l4_per_masters[] = {
439 &omap3_l4_per__uart3,
440 &omap3_l4_per__uart4,
444 static struct omap_hwmod omap3xxx_l4_per_hwmod = {
446 .class = &l4_hwmod_class,
447 .masters = omap3xxx_l4_per_masters,
448 .masters_cnt = ARRAY_SIZE(omap3xxx_l4_per_masters),
449 .slaves = omap3xxx_l4_per_slaves,
450 .slaves_cnt = ARRAY_SIZE(omap3xxx_l4_per_slaves),
451 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
452 .flags = HWMOD_NO_IDLEST,
455 /* Slave interfaces on the L4_WKUP interconnect */
456 static struct omap_hwmod_ocp_if *omap3xxx_l4_wkup_slaves[] = {
457 &omap3xxx_l4_core__l4_wkup,
460 /* Master interfaces on the L4_WKUP interconnect */
461 static struct omap_hwmod_ocp_if *omap3xxx_l4_wkup_masters[] = {
465 static struct omap_hwmod omap3xxx_l4_wkup_hwmod = {
467 .class = &l4_hwmod_class,
468 .masters = omap3xxx_l4_wkup_masters,
469 .masters_cnt = ARRAY_SIZE(omap3xxx_l4_wkup_masters),
470 .slaves = omap3xxx_l4_wkup_slaves,
471 .slaves_cnt = ARRAY_SIZE(omap3xxx_l4_wkup_slaves),
472 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
473 .flags = HWMOD_NO_IDLEST,
476 /* Master interfaces on the MPU device */
477 static struct omap_hwmod_ocp_if *omap3xxx_mpu_masters[] = {
478 &omap3xxx_mpu__l3_main,
482 static struct omap_hwmod omap3xxx_mpu_hwmod = {
484 .class = &mpu_hwmod_class,
485 .main_clk = "arm_fck",
486 .masters = omap3xxx_mpu_masters,
487 .masters_cnt = ARRAY_SIZE(omap3xxx_mpu_masters),
488 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
492 * IVA2_2 interface data
495 /* IVA2 <- L3 interface */
496 static struct omap_hwmod_ocp_if omap3xxx_l3__iva = {
497 .master = &omap3xxx_l3_main_hwmod,
498 .slave = &omap3xxx_iva_hwmod,
500 .user = OCP_USER_MPU | OCP_USER_SDMA,
503 static struct omap_hwmod_ocp_if *omap3xxx_iva_masters[] = {
511 static struct omap_hwmod omap3xxx_iva_hwmod = {
513 .class = &iva_hwmod_class,
514 .masters = omap3xxx_iva_masters,
515 .masters_cnt = ARRAY_SIZE(omap3xxx_iva_masters),
516 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
520 static struct omap_hwmod_class_sysconfig omap3xxx_timer_1ms_sysc = {
524 .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_CLOCKACTIVITY |
525 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
526 SYSC_HAS_EMUFREE | SYSC_HAS_AUTOIDLE),
527 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
528 .sysc_fields = &omap_hwmod_sysc_type1,
531 static struct omap_hwmod_class omap3xxx_timer_1ms_hwmod_class = {
533 .sysc = &omap3xxx_timer_1ms_sysc,
534 .rev = OMAP_TIMER_IP_VERSION_1,
537 static struct omap_hwmod_class_sysconfig omap3xxx_timer_sysc = {
541 .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_ENAWAKEUP |
542 SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
543 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
544 .sysc_fields = &omap_hwmod_sysc_type1,
547 static struct omap_hwmod_class omap3xxx_timer_hwmod_class = {
549 .sysc = &omap3xxx_timer_sysc,
550 .rev = OMAP_TIMER_IP_VERSION_1,
554 static struct omap_hwmod omap3xxx_timer1_hwmod;
555 static struct omap_hwmod_irq_info omap3xxx_timer1_mpu_irqs[] = {
559 static struct omap_hwmod_addr_space omap3xxx_timer1_addrs[] = {
561 .pa_start = 0x48318000,
562 .pa_end = 0x48318000 + SZ_1K - 1,
563 .flags = ADDR_TYPE_RT
567 /* l4_wkup -> timer1 */
568 static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__timer1 = {
569 .master = &omap3xxx_l4_wkup_hwmod,
570 .slave = &omap3xxx_timer1_hwmod,
572 .addr = omap3xxx_timer1_addrs,
573 .addr_cnt = ARRAY_SIZE(omap3xxx_timer1_addrs),
574 .user = OCP_USER_MPU | OCP_USER_SDMA,
577 /* timer1 slave port */
578 static struct omap_hwmod_ocp_if *omap3xxx_timer1_slaves[] = {
579 &omap3xxx_l4_wkup__timer1,
583 static struct omap_hwmod omap3xxx_timer1_hwmod = {
585 .mpu_irqs = omap3xxx_timer1_mpu_irqs,
586 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_timer1_mpu_irqs),
587 .main_clk = "gpt1_fck",
591 .module_bit = OMAP3430_EN_GPT1_SHIFT,
592 .module_offs = WKUP_MOD,
594 .idlest_idle_bit = OMAP3430_ST_GPT1_SHIFT,
597 .slaves = omap3xxx_timer1_slaves,
598 .slaves_cnt = ARRAY_SIZE(omap3xxx_timer1_slaves),
599 .class = &omap3xxx_timer_1ms_hwmod_class,
600 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
604 static struct omap_hwmod omap3xxx_timer2_hwmod;
605 static struct omap_hwmod_irq_info omap3xxx_timer2_mpu_irqs[] = {
609 static struct omap_hwmod_addr_space omap3xxx_timer2_addrs[] = {
611 .pa_start = 0x49032000,
612 .pa_end = 0x49032000 + SZ_1K - 1,
613 .flags = ADDR_TYPE_RT
617 /* l4_per -> timer2 */
618 static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer2 = {
619 .master = &omap3xxx_l4_per_hwmod,
620 .slave = &omap3xxx_timer2_hwmod,
622 .addr = omap3xxx_timer2_addrs,
623 .addr_cnt = ARRAY_SIZE(omap3xxx_timer2_addrs),
624 .user = OCP_USER_MPU | OCP_USER_SDMA,
627 /* timer2 slave port */
628 static struct omap_hwmod_ocp_if *omap3xxx_timer2_slaves[] = {
629 &omap3xxx_l4_per__timer2,
633 static struct omap_hwmod omap3xxx_timer2_hwmod = {
635 .mpu_irqs = omap3xxx_timer2_mpu_irqs,
636 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_timer2_mpu_irqs),
637 .main_clk = "gpt2_fck",
641 .module_bit = OMAP3430_EN_GPT2_SHIFT,
642 .module_offs = OMAP3430_PER_MOD,
644 .idlest_idle_bit = OMAP3430_ST_GPT2_SHIFT,
647 .slaves = omap3xxx_timer2_slaves,
648 .slaves_cnt = ARRAY_SIZE(omap3xxx_timer2_slaves),
649 .class = &omap3xxx_timer_1ms_hwmod_class,
650 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
654 static struct omap_hwmod omap3xxx_timer3_hwmod;
655 static struct omap_hwmod_irq_info omap3xxx_timer3_mpu_irqs[] = {
659 static struct omap_hwmod_addr_space omap3xxx_timer3_addrs[] = {
661 .pa_start = 0x49034000,
662 .pa_end = 0x49034000 + SZ_1K - 1,
663 .flags = ADDR_TYPE_RT
667 /* l4_per -> timer3 */
668 static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer3 = {
669 .master = &omap3xxx_l4_per_hwmod,
670 .slave = &omap3xxx_timer3_hwmod,
672 .addr = omap3xxx_timer3_addrs,
673 .addr_cnt = ARRAY_SIZE(omap3xxx_timer3_addrs),
674 .user = OCP_USER_MPU | OCP_USER_SDMA,
677 /* timer3 slave port */
678 static struct omap_hwmod_ocp_if *omap3xxx_timer3_slaves[] = {
679 &omap3xxx_l4_per__timer3,
683 static struct omap_hwmod omap3xxx_timer3_hwmod = {
685 .mpu_irqs = omap3xxx_timer3_mpu_irqs,
686 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_timer3_mpu_irqs),
687 .main_clk = "gpt3_fck",
691 .module_bit = OMAP3430_EN_GPT3_SHIFT,
692 .module_offs = OMAP3430_PER_MOD,
694 .idlest_idle_bit = OMAP3430_ST_GPT3_SHIFT,
697 .slaves = omap3xxx_timer3_slaves,
698 .slaves_cnt = ARRAY_SIZE(omap3xxx_timer3_slaves),
699 .class = &omap3xxx_timer_hwmod_class,
700 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
704 static struct omap_hwmod omap3xxx_timer4_hwmod;
705 static struct omap_hwmod_irq_info omap3xxx_timer4_mpu_irqs[] = {
709 static struct omap_hwmod_addr_space omap3xxx_timer4_addrs[] = {
711 .pa_start = 0x49036000,
712 .pa_end = 0x49036000 + SZ_1K - 1,
713 .flags = ADDR_TYPE_RT
717 /* l4_per -> timer4 */
718 static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer4 = {
719 .master = &omap3xxx_l4_per_hwmod,
720 .slave = &omap3xxx_timer4_hwmod,
722 .addr = omap3xxx_timer4_addrs,
723 .addr_cnt = ARRAY_SIZE(omap3xxx_timer4_addrs),
724 .user = OCP_USER_MPU | OCP_USER_SDMA,
727 /* timer4 slave port */
728 static struct omap_hwmod_ocp_if *omap3xxx_timer4_slaves[] = {
729 &omap3xxx_l4_per__timer4,
733 static struct omap_hwmod omap3xxx_timer4_hwmod = {
735 .mpu_irqs = omap3xxx_timer4_mpu_irqs,
736 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_timer4_mpu_irqs),
737 .main_clk = "gpt4_fck",
741 .module_bit = OMAP3430_EN_GPT4_SHIFT,
742 .module_offs = OMAP3430_PER_MOD,
744 .idlest_idle_bit = OMAP3430_ST_GPT4_SHIFT,
747 .slaves = omap3xxx_timer4_slaves,
748 .slaves_cnt = ARRAY_SIZE(omap3xxx_timer4_slaves),
749 .class = &omap3xxx_timer_hwmod_class,
750 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
754 static struct omap_hwmod omap3xxx_timer5_hwmod;
755 static struct omap_hwmod_irq_info omap3xxx_timer5_mpu_irqs[] = {
759 static struct omap_hwmod_addr_space omap3xxx_timer5_addrs[] = {
761 .pa_start = 0x49038000,
762 .pa_end = 0x49038000 + SZ_1K - 1,
763 .flags = ADDR_TYPE_RT
767 /* l4_per -> timer5 */
768 static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer5 = {
769 .master = &omap3xxx_l4_per_hwmod,
770 .slave = &omap3xxx_timer5_hwmod,
772 .addr = omap3xxx_timer5_addrs,
773 .addr_cnt = ARRAY_SIZE(omap3xxx_timer5_addrs),
774 .user = OCP_USER_MPU | OCP_USER_SDMA,
777 /* timer5 slave port */
778 static struct omap_hwmod_ocp_if *omap3xxx_timer5_slaves[] = {
779 &omap3xxx_l4_per__timer5,
783 static struct omap_hwmod omap3xxx_timer5_hwmod = {
785 .mpu_irqs = omap3xxx_timer5_mpu_irqs,
786 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_timer5_mpu_irqs),
787 .main_clk = "gpt5_fck",
791 .module_bit = OMAP3430_EN_GPT5_SHIFT,
792 .module_offs = OMAP3430_PER_MOD,
794 .idlest_idle_bit = OMAP3430_ST_GPT5_SHIFT,
797 .slaves = omap3xxx_timer5_slaves,
798 .slaves_cnt = ARRAY_SIZE(omap3xxx_timer5_slaves),
799 .class = &omap3xxx_timer_hwmod_class,
800 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
804 static struct omap_hwmod omap3xxx_timer6_hwmod;
805 static struct omap_hwmod_irq_info omap3xxx_timer6_mpu_irqs[] = {
809 static struct omap_hwmod_addr_space omap3xxx_timer6_addrs[] = {
811 .pa_start = 0x4903A000,
812 .pa_end = 0x4903A000 + SZ_1K - 1,
813 .flags = ADDR_TYPE_RT
817 /* l4_per -> timer6 */
818 static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer6 = {
819 .master = &omap3xxx_l4_per_hwmod,
820 .slave = &omap3xxx_timer6_hwmod,
822 .addr = omap3xxx_timer6_addrs,
823 .addr_cnt = ARRAY_SIZE(omap3xxx_timer6_addrs),
824 .user = OCP_USER_MPU | OCP_USER_SDMA,
827 /* timer6 slave port */
828 static struct omap_hwmod_ocp_if *omap3xxx_timer6_slaves[] = {
829 &omap3xxx_l4_per__timer6,
833 static struct omap_hwmod omap3xxx_timer6_hwmod = {
835 .mpu_irqs = omap3xxx_timer6_mpu_irqs,
836 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_timer6_mpu_irqs),
837 .main_clk = "gpt6_fck",
841 .module_bit = OMAP3430_EN_GPT6_SHIFT,
842 .module_offs = OMAP3430_PER_MOD,
844 .idlest_idle_bit = OMAP3430_ST_GPT6_SHIFT,
847 .slaves = omap3xxx_timer6_slaves,
848 .slaves_cnt = ARRAY_SIZE(omap3xxx_timer6_slaves),
849 .class = &omap3xxx_timer_hwmod_class,
850 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
854 static struct omap_hwmod omap3xxx_timer7_hwmod;
855 static struct omap_hwmod_irq_info omap3xxx_timer7_mpu_irqs[] = {
859 static struct omap_hwmod_addr_space omap3xxx_timer7_addrs[] = {
861 .pa_start = 0x4903C000,
862 .pa_end = 0x4903C000 + SZ_1K - 1,
863 .flags = ADDR_TYPE_RT
867 /* l4_per -> timer7 */
868 static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer7 = {
869 .master = &omap3xxx_l4_per_hwmod,
870 .slave = &omap3xxx_timer7_hwmod,
872 .addr = omap3xxx_timer7_addrs,
873 .addr_cnt = ARRAY_SIZE(omap3xxx_timer7_addrs),
874 .user = OCP_USER_MPU | OCP_USER_SDMA,
877 /* timer7 slave port */
878 static struct omap_hwmod_ocp_if *omap3xxx_timer7_slaves[] = {
879 &omap3xxx_l4_per__timer7,
883 static struct omap_hwmod omap3xxx_timer7_hwmod = {
885 .mpu_irqs = omap3xxx_timer7_mpu_irqs,
886 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_timer7_mpu_irqs),
887 .main_clk = "gpt7_fck",
891 .module_bit = OMAP3430_EN_GPT7_SHIFT,
892 .module_offs = OMAP3430_PER_MOD,
894 .idlest_idle_bit = OMAP3430_ST_GPT7_SHIFT,
897 .slaves = omap3xxx_timer7_slaves,
898 .slaves_cnt = ARRAY_SIZE(omap3xxx_timer7_slaves),
899 .class = &omap3xxx_timer_hwmod_class,
900 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
904 static struct omap_hwmod omap3xxx_timer8_hwmod;
905 static struct omap_hwmod_irq_info omap3xxx_timer8_mpu_irqs[] = {
909 static struct omap_hwmod_addr_space omap3xxx_timer8_addrs[] = {
911 .pa_start = 0x4903E000,
912 .pa_end = 0x4903E000 + SZ_1K - 1,
913 .flags = ADDR_TYPE_RT
917 /* l4_per -> timer8 */
918 static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer8 = {
919 .master = &omap3xxx_l4_per_hwmod,
920 .slave = &omap3xxx_timer8_hwmod,
922 .addr = omap3xxx_timer8_addrs,
923 .addr_cnt = ARRAY_SIZE(omap3xxx_timer8_addrs),
924 .user = OCP_USER_MPU | OCP_USER_SDMA,
927 /* timer8 slave port */
928 static struct omap_hwmod_ocp_if *omap3xxx_timer8_slaves[] = {
929 &omap3xxx_l4_per__timer8,
933 static struct omap_hwmod omap3xxx_timer8_hwmod = {
935 .mpu_irqs = omap3xxx_timer8_mpu_irqs,
936 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_timer8_mpu_irqs),
937 .main_clk = "gpt8_fck",
941 .module_bit = OMAP3430_EN_GPT8_SHIFT,
942 .module_offs = OMAP3430_PER_MOD,
944 .idlest_idle_bit = OMAP3430_ST_GPT8_SHIFT,
947 .slaves = omap3xxx_timer8_slaves,
948 .slaves_cnt = ARRAY_SIZE(omap3xxx_timer8_slaves),
949 .class = &omap3xxx_timer_hwmod_class,
950 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
954 static struct omap_hwmod omap3xxx_timer9_hwmod;
955 static struct omap_hwmod_irq_info omap3xxx_timer9_mpu_irqs[] = {
959 static struct omap_hwmod_addr_space omap3xxx_timer9_addrs[] = {
961 .pa_start = 0x49040000,
962 .pa_end = 0x49040000 + SZ_1K - 1,
963 .flags = ADDR_TYPE_RT
967 /* l4_per -> timer9 */
968 static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer9 = {
969 .master = &omap3xxx_l4_per_hwmod,
970 .slave = &omap3xxx_timer9_hwmod,
972 .addr = omap3xxx_timer9_addrs,
973 .addr_cnt = ARRAY_SIZE(omap3xxx_timer9_addrs),
974 .user = OCP_USER_MPU | OCP_USER_SDMA,
977 /* timer9 slave port */
978 static struct omap_hwmod_ocp_if *omap3xxx_timer9_slaves[] = {
979 &omap3xxx_l4_per__timer9,
983 static struct omap_hwmod omap3xxx_timer9_hwmod = {
985 .mpu_irqs = omap3xxx_timer9_mpu_irqs,
986 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_timer9_mpu_irqs),
987 .main_clk = "gpt9_fck",
991 .module_bit = OMAP3430_EN_GPT9_SHIFT,
992 .module_offs = OMAP3430_PER_MOD,
994 .idlest_idle_bit = OMAP3430_ST_GPT9_SHIFT,
997 .slaves = omap3xxx_timer9_slaves,
998 .slaves_cnt = ARRAY_SIZE(omap3xxx_timer9_slaves),
999 .class = &omap3xxx_timer_hwmod_class,
1000 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
1004 static struct omap_hwmod omap3xxx_timer10_hwmod;
1005 static struct omap_hwmod_irq_info omap3xxx_timer10_mpu_irqs[] = {
1009 static struct omap_hwmod_addr_space omap3xxx_timer10_addrs[] = {
1011 .pa_start = 0x48086000,
1012 .pa_end = 0x48086000 + SZ_1K - 1,
1013 .flags = ADDR_TYPE_RT
1017 /* l4_core -> timer10 */
1018 static struct omap_hwmod_ocp_if omap3xxx_l4_core__timer10 = {
1019 .master = &omap3xxx_l4_core_hwmod,
1020 .slave = &omap3xxx_timer10_hwmod,
1022 .addr = omap3xxx_timer10_addrs,
1023 .addr_cnt = ARRAY_SIZE(omap3xxx_timer10_addrs),
1024 .user = OCP_USER_MPU | OCP_USER_SDMA,
1027 /* timer10 slave port */
1028 static struct omap_hwmod_ocp_if *omap3xxx_timer10_slaves[] = {
1029 &omap3xxx_l4_core__timer10,
1033 static struct omap_hwmod omap3xxx_timer10_hwmod = {
1035 .mpu_irqs = omap3xxx_timer10_mpu_irqs,
1036 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_timer10_mpu_irqs),
1037 .main_clk = "gpt10_fck",
1041 .module_bit = OMAP3430_EN_GPT10_SHIFT,
1042 .module_offs = CORE_MOD,
1044 .idlest_idle_bit = OMAP3430_ST_GPT10_SHIFT,
1047 .slaves = omap3xxx_timer10_slaves,
1048 .slaves_cnt = ARRAY_SIZE(omap3xxx_timer10_slaves),
1049 .class = &omap3xxx_timer_1ms_hwmod_class,
1050 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
1054 static struct omap_hwmod omap3xxx_timer11_hwmod;
1055 static struct omap_hwmod_irq_info omap3xxx_timer11_mpu_irqs[] = {
1059 static struct omap_hwmod_addr_space omap3xxx_timer11_addrs[] = {
1061 .pa_start = 0x48088000,
1062 .pa_end = 0x48088000 + SZ_1K - 1,
1063 .flags = ADDR_TYPE_RT
1067 /* l4_core -> timer11 */
1068 static struct omap_hwmod_ocp_if omap3xxx_l4_core__timer11 = {
1069 .master = &omap3xxx_l4_core_hwmod,
1070 .slave = &omap3xxx_timer11_hwmod,
1072 .addr = omap3xxx_timer11_addrs,
1073 .addr_cnt = ARRAY_SIZE(omap3xxx_timer11_addrs),
1074 .user = OCP_USER_MPU | OCP_USER_SDMA,
1077 /* timer11 slave port */
1078 static struct omap_hwmod_ocp_if *omap3xxx_timer11_slaves[] = {
1079 &omap3xxx_l4_core__timer11,
1083 static struct omap_hwmod omap3xxx_timer11_hwmod = {
1085 .mpu_irqs = omap3xxx_timer11_mpu_irqs,
1086 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_timer11_mpu_irqs),
1087 .main_clk = "gpt11_fck",
1091 .module_bit = OMAP3430_EN_GPT11_SHIFT,
1092 .module_offs = CORE_MOD,
1094 .idlest_idle_bit = OMAP3430_ST_GPT11_SHIFT,
1097 .slaves = omap3xxx_timer11_slaves,
1098 .slaves_cnt = ARRAY_SIZE(omap3xxx_timer11_slaves),
1099 .class = &omap3xxx_timer_hwmod_class,
1100 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
1104 static struct omap_hwmod omap3xxx_timer12_hwmod;
1105 static struct omap_hwmod_irq_info omap3xxx_timer12_mpu_irqs[] = {
1109 static struct omap_hwmod_addr_space omap3xxx_timer12_addrs[] = {
1111 .pa_start = 0x48304000,
1112 .pa_end = 0x48304000 + SZ_1K - 1,
1113 .flags = ADDR_TYPE_RT
1117 /* l4_core -> timer12 */
1118 static struct omap_hwmod_ocp_if omap3xxx_l4_core__timer12 = {
1119 .master = &omap3xxx_l4_core_hwmod,
1120 .slave = &omap3xxx_timer12_hwmod,
1122 .addr = omap3xxx_timer12_addrs,
1123 .addr_cnt = ARRAY_SIZE(omap3xxx_timer12_addrs),
1124 .user = OCP_USER_MPU | OCP_USER_SDMA,
1127 /* timer12 slave port */
1128 static struct omap_hwmod_ocp_if *omap3xxx_timer12_slaves[] = {
1129 &omap3xxx_l4_core__timer12,
1133 static struct omap_hwmod omap3xxx_timer12_hwmod = {
1135 .mpu_irqs = omap3xxx_timer12_mpu_irqs,
1136 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_timer12_mpu_irqs),
1137 .main_clk = "gpt12_fck",
1141 .module_bit = OMAP3430_EN_GPT12_SHIFT,
1142 .module_offs = WKUP_MOD,
1144 .idlest_idle_bit = OMAP3430_ST_GPT12_SHIFT,
1147 .slaves = omap3xxx_timer12_slaves,
1148 .slaves_cnt = ARRAY_SIZE(omap3xxx_timer12_slaves),
1149 .class = &omap3xxx_timer_hwmod_class,
1150 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
1153 /* l4_wkup -> wd_timer2 */
1154 static struct omap_hwmod_addr_space omap3xxx_wd_timer2_addrs[] = {
1156 .pa_start = 0x48314000,
1157 .pa_end = 0x4831407f,
1158 .flags = ADDR_TYPE_RT
1162 static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__wd_timer2 = {
1163 .master = &omap3xxx_l4_wkup_hwmod,
1164 .slave = &omap3xxx_wd_timer2_hwmod,
1166 .addr = omap3xxx_wd_timer2_addrs,
1167 .addr_cnt = ARRAY_SIZE(omap3xxx_wd_timer2_addrs),
1168 .user = OCP_USER_MPU | OCP_USER_SDMA,
1173 * 32-bit watchdog upward counter that generates a pulse on the reset pin on
1174 * overflow condition
1177 static struct omap_hwmod_class_sysconfig omap3xxx_wd_timer_sysc = {
1179 .sysc_offs = 0x0010,
1180 .syss_offs = 0x0014,
1181 .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_EMUFREE |
1182 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
1183 SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY),
1184 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1185 .sysc_fields = &omap_hwmod_sysc_type1,
1189 static struct omap_hwmod_class_sysconfig i2c_sysc = {
1193 .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
1194 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
1196 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1197 .sysc_fields = &omap_hwmod_sysc_type1,
1200 static struct omap_hwmod_class omap3xxx_wd_timer_hwmod_class = {
1202 .sysc = &omap3xxx_wd_timer_sysc,
1203 .pre_shutdown = &omap2_wd_timer_disable
1207 static struct omap_hwmod_ocp_if *omap3xxx_wd_timer2_slaves[] = {
1208 &omap3xxx_l4_wkup__wd_timer2,
1211 static struct omap_hwmod omap3xxx_wd_timer2_hwmod = {
1212 .name = "wd_timer2",
1213 .class = &omap3xxx_wd_timer_hwmod_class,
1214 .main_clk = "wdt2_fck",
1218 .module_bit = OMAP3430_EN_WDT2_SHIFT,
1219 .module_offs = WKUP_MOD,
1221 .idlest_idle_bit = OMAP3430_ST_WDT2_SHIFT,
1224 .slaves = omap3xxx_wd_timer2_slaves,
1225 .slaves_cnt = ARRAY_SIZE(omap3xxx_wd_timer2_slaves),
1226 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
1231 static struct omap_hwmod_class_sysconfig uart_sysc = {
1235 .sysc_flags = (SYSC_HAS_SIDLEMODE |
1236 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
1238 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1239 .sysc_fields = &omap_hwmod_sysc_type1,
1242 static struct omap_hwmod_class uart_class = {
1249 static struct omap_hwmod_irq_info uart1_mpu_irqs[] = {
1250 { .irq = INT_24XX_UART1_IRQ, },
1253 static struct omap_hwmod_dma_info uart1_sdma_reqs[] = {
1254 { .name = "tx", .dma_req = OMAP24XX_DMA_UART1_TX, },
1255 { .name = "rx", .dma_req = OMAP24XX_DMA_UART1_RX, },
1258 static struct omap_hwmod_ocp_if *omap3xxx_uart1_slaves[] = {
1259 &omap3_l4_core__uart1,
1262 static struct omap_hwmod omap3xxx_uart1_hwmod = {
1264 .mpu_irqs = uart1_mpu_irqs,
1265 .mpu_irqs_cnt = ARRAY_SIZE(uart1_mpu_irqs),
1266 .sdma_reqs = uart1_sdma_reqs,
1267 .sdma_reqs_cnt = ARRAY_SIZE(uart1_sdma_reqs),
1268 .main_clk = "uart1_fck",
1271 .module_offs = CORE_MOD,
1273 .module_bit = OMAP3430_EN_UART1_SHIFT,
1275 .idlest_idle_bit = OMAP3430_EN_UART1_SHIFT,
1278 .slaves = omap3xxx_uart1_slaves,
1279 .slaves_cnt = ARRAY_SIZE(omap3xxx_uart1_slaves),
1280 .class = &uart_class,
1281 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
1286 static struct omap_hwmod_irq_info uart2_mpu_irqs[] = {
1287 { .irq = INT_24XX_UART2_IRQ, },
1290 static struct omap_hwmod_dma_info uart2_sdma_reqs[] = {
1291 { .name = "tx", .dma_req = OMAP24XX_DMA_UART2_TX, },
1292 { .name = "rx", .dma_req = OMAP24XX_DMA_UART2_RX, },
1295 static struct omap_hwmod_ocp_if *omap3xxx_uart2_slaves[] = {
1296 &omap3_l4_core__uart2,
1299 static struct omap_hwmod omap3xxx_uart2_hwmod = {
1301 .mpu_irqs = uart2_mpu_irqs,
1302 .mpu_irqs_cnt = ARRAY_SIZE(uart2_mpu_irqs),
1303 .sdma_reqs = uart2_sdma_reqs,
1304 .sdma_reqs_cnt = ARRAY_SIZE(uart2_sdma_reqs),
1305 .main_clk = "uart2_fck",
1308 .module_offs = CORE_MOD,
1310 .module_bit = OMAP3430_EN_UART2_SHIFT,
1312 .idlest_idle_bit = OMAP3430_EN_UART2_SHIFT,
1315 .slaves = omap3xxx_uart2_slaves,
1316 .slaves_cnt = ARRAY_SIZE(omap3xxx_uart2_slaves),
1317 .class = &uart_class,
1318 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
1323 static struct omap_hwmod_irq_info uart3_mpu_irqs[] = {
1324 { .irq = INT_24XX_UART3_IRQ, },
1327 static struct omap_hwmod_dma_info uart3_sdma_reqs[] = {
1328 { .name = "tx", .dma_req = OMAP24XX_DMA_UART3_TX, },
1329 { .name = "rx", .dma_req = OMAP24XX_DMA_UART3_RX, },
1332 static struct omap_hwmod_ocp_if *omap3xxx_uart3_slaves[] = {
1333 &omap3_l4_per__uart3,
1336 static struct omap_hwmod omap3xxx_uart3_hwmod = {
1338 .mpu_irqs = uart3_mpu_irqs,
1339 .mpu_irqs_cnt = ARRAY_SIZE(uart3_mpu_irqs),
1340 .sdma_reqs = uart3_sdma_reqs,
1341 .sdma_reqs_cnt = ARRAY_SIZE(uart3_sdma_reqs),
1342 .main_clk = "uart3_fck",
1345 .module_offs = OMAP3430_PER_MOD,
1347 .module_bit = OMAP3430_EN_UART3_SHIFT,
1349 .idlest_idle_bit = OMAP3430_EN_UART3_SHIFT,
1352 .slaves = omap3xxx_uart3_slaves,
1353 .slaves_cnt = ARRAY_SIZE(omap3xxx_uart3_slaves),
1354 .class = &uart_class,
1355 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
1360 static struct omap_hwmod_irq_info uart4_mpu_irqs[] = {
1361 { .irq = INT_36XX_UART4_IRQ, },
1364 static struct omap_hwmod_dma_info uart4_sdma_reqs[] = {
1365 { .name = "rx", .dma_req = OMAP36XX_DMA_UART4_RX, },
1366 { .name = "tx", .dma_req = OMAP36XX_DMA_UART4_TX, },
1369 static struct omap_hwmod_ocp_if *omap3xxx_uart4_slaves[] = {
1370 &omap3_l4_per__uart4,
1373 static struct omap_hwmod omap3xxx_uart4_hwmod = {
1375 .mpu_irqs = uart4_mpu_irqs,
1376 .mpu_irqs_cnt = ARRAY_SIZE(uart4_mpu_irqs),
1377 .sdma_reqs = uart4_sdma_reqs,
1378 .sdma_reqs_cnt = ARRAY_SIZE(uart4_sdma_reqs),
1379 .main_clk = "uart4_fck",
1382 .module_offs = OMAP3430_PER_MOD,
1384 .module_bit = OMAP3630_EN_UART4_SHIFT,
1386 .idlest_idle_bit = OMAP3630_EN_UART4_SHIFT,
1389 .slaves = omap3xxx_uart4_slaves,
1390 .slaves_cnt = ARRAY_SIZE(omap3xxx_uart4_slaves),
1391 .class = &uart_class,
1392 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3630ES1),
1395 static struct omap_hwmod_class i2c_class = {
1402 * display sub-system
1405 static struct omap_hwmod_class_sysconfig omap3xxx_dss_sysc = {
1407 .sysc_offs = 0x0010,
1408 .syss_offs = 0x0014,
1409 .sysc_flags = (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
1410 .sysc_fields = &omap_hwmod_sysc_type1,
1413 static struct omap_hwmod_class omap3xxx_dss_hwmod_class = {
1415 .sysc = &omap3xxx_dss_sysc,
1419 static struct omap_hwmod_irq_info omap3xxx_dss_irqs[] = {
1423 static struct omap_hwmod_dma_info omap3xxx_dss_sdma_chs[] = {
1424 { .name = "dispc", .dma_req = 5 },
1425 { .name = "dsi1", .dma_req = 74 },
1429 /* dss master ports */
1430 static struct omap_hwmod_ocp_if *omap3xxx_dss_masters[] = {
1434 static struct omap_hwmod_addr_space omap3xxx_dss_addrs[] = {
1436 .pa_start = 0x48050000,
1437 .pa_end = 0x480503FF,
1438 .flags = ADDR_TYPE_RT
1442 /* l4_core -> dss */
1443 static struct omap_hwmod_ocp_if omap3430es1_l4_core__dss = {
1444 .master = &omap3xxx_l4_core_hwmod,
1445 .slave = &omap3430es1_dss_core_hwmod,
1447 .addr = omap3xxx_dss_addrs,
1448 .addr_cnt = ARRAY_SIZE(omap3xxx_dss_addrs),
1451 .l4_fw_region = OMAP3ES1_L4_CORE_FW_DSS_CORE_REGION,
1452 .l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
1453 .flags = OMAP_FIREWALL_L4,
1456 .user = OCP_USER_MPU | OCP_USER_SDMA,
1459 static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss = {
1460 .master = &omap3xxx_l4_core_hwmod,
1461 .slave = &omap3xxx_dss_core_hwmod,
1463 .addr = omap3xxx_dss_addrs,
1464 .addr_cnt = ARRAY_SIZE(omap3xxx_dss_addrs),
1467 .l4_fw_region = OMAP3_L4_CORE_FW_DSS_CORE_REGION,
1468 .l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
1469 .flags = OMAP_FIREWALL_L4,
1472 .user = OCP_USER_MPU | OCP_USER_SDMA,
1475 /* dss slave ports */
1476 static struct omap_hwmod_ocp_if *omap3430es1_dss_slaves[] = {
1477 &omap3430es1_l4_core__dss,
1480 static struct omap_hwmod_ocp_if *omap3xxx_dss_slaves[] = {
1481 &omap3xxx_l4_core__dss,
1484 static struct omap_hwmod_opt_clk dss_opt_clks[] = {
1485 { .role = "tv_clk", .clk = "dss_tv_fck" },
1486 { .role = "dssclk", .clk = "dss_96m_fck" },
1487 { .role = "sys_clk", .clk = "dss2_alwon_fck" },
1490 static struct omap_hwmod omap3430es1_dss_core_hwmod = {
1492 .class = &omap3xxx_dss_hwmod_class,
1493 .main_clk = "dss1_alwon_fck", /* instead of dss_fck */
1494 .mpu_irqs = omap3xxx_dss_irqs,
1495 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_dss_irqs),
1496 .sdma_reqs = omap3xxx_dss_sdma_chs,
1497 .sdma_reqs_cnt = ARRAY_SIZE(omap3xxx_dss_sdma_chs),
1502 .module_bit = OMAP3430_EN_DSS1_SHIFT,
1503 .module_offs = OMAP3430_DSS_MOD,
1505 .idlest_stdby_bit = OMAP3430ES1_ST_DSS_SHIFT,
1508 .opt_clks = dss_opt_clks,
1509 .opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
1510 .slaves = omap3430es1_dss_slaves,
1511 .slaves_cnt = ARRAY_SIZE(omap3430es1_dss_slaves),
1512 .masters = omap3xxx_dss_masters,
1513 .masters_cnt = ARRAY_SIZE(omap3xxx_dss_masters),
1514 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES1),
1515 .flags = HWMOD_NO_IDLEST,
1518 static struct omap_hwmod omap3xxx_dss_core_hwmod = {
1520 .class = &omap3xxx_dss_hwmod_class,
1521 .main_clk = "dss1_alwon_fck", /* instead of dss_fck */
1522 .mpu_irqs = omap3xxx_dss_irqs,
1523 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_dss_irqs),
1524 .sdma_reqs = omap3xxx_dss_sdma_chs,
1525 .sdma_reqs_cnt = ARRAY_SIZE(omap3xxx_dss_sdma_chs),
1530 .module_bit = OMAP3430_EN_DSS1_SHIFT,
1531 .module_offs = OMAP3430_DSS_MOD,
1533 .idlest_idle_bit = OMAP3430ES2_ST_DSS_IDLE_SHIFT,
1534 .idlest_stdby_bit = OMAP3430ES2_ST_DSS_STDBY_SHIFT,
1537 .opt_clks = dss_opt_clks,
1538 .opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
1539 .slaves = omap3xxx_dss_slaves,
1540 .slaves_cnt = ARRAY_SIZE(omap3xxx_dss_slaves),
1541 .masters = omap3xxx_dss_masters,
1542 .masters_cnt = ARRAY_SIZE(omap3xxx_dss_masters),
1543 .omap_chip = OMAP_CHIP_INIT(CHIP_GE_OMAP3430ES2 |
1544 CHIP_IS_OMAP3630ES1 | CHIP_GE_OMAP3630ES1_1),
1549 * display controller
1552 static struct omap_hwmod_class_sysconfig omap3xxx_dispc_sysc = {
1554 .sysc_offs = 0x0010,
1555 .syss_offs = 0x0014,
1556 .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_CLOCKACTIVITY |
1557 SYSC_HAS_MIDLEMODE | SYSC_HAS_ENAWAKEUP |
1558 SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
1559 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1560 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
1561 .sysc_fields = &omap_hwmod_sysc_type1,
1564 static struct omap_hwmod_class omap3xxx_dispc_hwmod_class = {
1566 .sysc = &omap3xxx_dispc_sysc,
1569 static struct omap_hwmod_addr_space omap3xxx_dss_dispc_addrs[] = {
1571 .pa_start = 0x48050400,
1572 .pa_end = 0x480507FF,
1573 .flags = ADDR_TYPE_RT
1577 /* l4_core -> dss_dispc */
1578 static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_dispc = {
1579 .master = &omap3xxx_l4_core_hwmod,
1580 .slave = &omap3xxx_dss_dispc_hwmod,
1582 .addr = omap3xxx_dss_dispc_addrs,
1583 .addr_cnt = ARRAY_SIZE(omap3xxx_dss_dispc_addrs),
1586 .l4_fw_region = OMAP3_L4_CORE_FW_DSS_DISPC_REGION,
1587 .l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
1588 .flags = OMAP_FIREWALL_L4,
1591 .user = OCP_USER_MPU | OCP_USER_SDMA,
1594 /* dss_dispc slave ports */
1595 static struct omap_hwmod_ocp_if *omap3xxx_dss_dispc_slaves[] = {
1596 &omap3xxx_l4_core__dss_dispc,
1599 static struct omap_hwmod omap3xxx_dss_dispc_hwmod = {
1600 .name = "dss_dispc",
1601 .class = &omap3xxx_dispc_hwmod_class,
1602 .main_clk = "dss1_alwon_fck",
1606 .module_bit = OMAP3430_EN_DSS1_SHIFT,
1607 .module_offs = OMAP3430_DSS_MOD,
1610 .slaves = omap3xxx_dss_dispc_slaves,
1611 .slaves_cnt = ARRAY_SIZE(omap3xxx_dss_dispc_slaves),
1612 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES1 |
1613 CHIP_GE_OMAP3430ES2 | CHIP_IS_OMAP3630ES1 |
1614 CHIP_GE_OMAP3630ES1_1),
1615 .flags = HWMOD_NO_IDLEST,
1620 * display serial interface controller
1623 static struct omap_hwmod_class omap3xxx_dsi_hwmod_class = {
1628 static struct omap_hwmod_addr_space omap3xxx_dss_dsi1_addrs[] = {
1630 .pa_start = 0x4804FC00,
1631 .pa_end = 0x4804FFFF,
1632 .flags = ADDR_TYPE_RT
1636 /* l4_core -> dss_dsi1 */
1637 static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_dsi1 = {
1638 .master = &omap3xxx_l4_core_hwmod,
1639 .slave = &omap3xxx_dss_dsi1_hwmod,
1640 .addr = omap3xxx_dss_dsi1_addrs,
1641 .addr_cnt = ARRAY_SIZE(omap3xxx_dss_dsi1_addrs),
1644 .l4_fw_region = OMAP3_L4_CORE_FW_DSS_DSI_REGION,
1645 .l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
1646 .flags = OMAP_FIREWALL_L4,
1649 .user = OCP_USER_MPU | OCP_USER_SDMA,
1652 /* dss_dsi1 slave ports */
1653 static struct omap_hwmod_ocp_if *omap3xxx_dss_dsi1_slaves[] = {
1654 &omap3xxx_l4_core__dss_dsi1,
1657 static struct omap_hwmod omap3xxx_dss_dsi1_hwmod = {
1659 .class = &omap3xxx_dsi_hwmod_class,
1660 .main_clk = "dss1_alwon_fck",
1664 .module_bit = OMAP3430_EN_DSS1_SHIFT,
1665 .module_offs = OMAP3430_DSS_MOD,
1668 .slaves = omap3xxx_dss_dsi1_slaves,
1669 .slaves_cnt = ARRAY_SIZE(omap3xxx_dss_dsi1_slaves),
1670 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES1 |
1671 CHIP_GE_OMAP3430ES2 | CHIP_IS_OMAP3630ES1 |
1672 CHIP_GE_OMAP3630ES1_1),
1673 .flags = HWMOD_NO_IDLEST,
1678 * remote frame buffer interface
1681 static struct omap_hwmod_class_sysconfig omap3xxx_rfbi_sysc = {
1683 .sysc_offs = 0x0010,
1684 .syss_offs = 0x0014,
1685 .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
1687 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1688 .sysc_fields = &omap_hwmod_sysc_type1,
1691 static struct omap_hwmod_class omap3xxx_rfbi_hwmod_class = {
1693 .sysc = &omap3xxx_rfbi_sysc,
1696 static struct omap_hwmod_addr_space omap3xxx_dss_rfbi_addrs[] = {
1698 .pa_start = 0x48050800,
1699 .pa_end = 0x48050BFF,
1700 .flags = ADDR_TYPE_RT
1704 /* l4_core -> dss_rfbi */
1705 static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_rfbi = {
1706 .master = &omap3xxx_l4_core_hwmod,
1707 .slave = &omap3xxx_dss_rfbi_hwmod,
1709 .addr = omap3xxx_dss_rfbi_addrs,
1710 .addr_cnt = ARRAY_SIZE(omap3xxx_dss_rfbi_addrs),
1713 .l4_fw_region = OMAP3_L4_CORE_FW_DSS_RFBI_REGION,
1714 .l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP ,
1715 .flags = OMAP_FIREWALL_L4,
1718 .user = OCP_USER_MPU | OCP_USER_SDMA,
1721 /* dss_rfbi slave ports */
1722 static struct omap_hwmod_ocp_if *omap3xxx_dss_rfbi_slaves[] = {
1723 &omap3xxx_l4_core__dss_rfbi,
1726 static struct omap_hwmod omap3xxx_dss_rfbi_hwmod = {
1728 .class = &omap3xxx_rfbi_hwmod_class,
1729 .main_clk = "dss1_alwon_fck",
1733 .module_bit = OMAP3430_EN_DSS1_SHIFT,
1734 .module_offs = OMAP3430_DSS_MOD,
1737 .slaves = omap3xxx_dss_rfbi_slaves,
1738 .slaves_cnt = ARRAY_SIZE(omap3xxx_dss_rfbi_slaves),
1739 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES1 |
1740 CHIP_GE_OMAP3430ES2 | CHIP_IS_OMAP3630ES1 |
1741 CHIP_GE_OMAP3630ES1_1),
1742 .flags = HWMOD_NO_IDLEST,
1750 static struct omap_hwmod_class omap3xxx_venc_hwmod_class = {
1755 static struct omap_hwmod_addr_space omap3xxx_dss_venc_addrs[] = {
1757 .pa_start = 0x48050C00,
1758 .pa_end = 0x48050FFF,
1759 .flags = ADDR_TYPE_RT
1763 /* l4_core -> dss_venc */
1764 static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_venc = {
1765 .master = &omap3xxx_l4_core_hwmod,
1766 .slave = &omap3xxx_dss_venc_hwmod,
1767 .clk = "dss_tv_fck",
1768 .addr = omap3xxx_dss_venc_addrs,
1769 .addr_cnt = ARRAY_SIZE(omap3xxx_dss_venc_addrs),
1772 .l4_fw_region = OMAP3_L4_CORE_FW_DSS_VENC_REGION,
1773 .l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
1774 .flags = OMAP_FIREWALL_L4,
1777 .user = OCP_USER_MPU | OCP_USER_SDMA,
1780 /* dss_venc slave ports */
1781 static struct omap_hwmod_ocp_if *omap3xxx_dss_venc_slaves[] = {
1782 &omap3xxx_l4_core__dss_venc,
1785 static struct omap_hwmod omap3xxx_dss_venc_hwmod = {
1787 .class = &omap3xxx_venc_hwmod_class,
1788 .main_clk = "dss1_alwon_fck",
1792 .module_bit = OMAP3430_EN_DSS1_SHIFT,
1793 .module_offs = OMAP3430_DSS_MOD,
1796 .slaves = omap3xxx_dss_venc_slaves,
1797 .slaves_cnt = ARRAY_SIZE(omap3xxx_dss_venc_slaves),
1798 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES1 |
1799 CHIP_GE_OMAP3430ES2 | CHIP_IS_OMAP3630ES1 |
1800 CHIP_GE_OMAP3630ES1_1),
1801 .flags = HWMOD_NO_IDLEST,
1806 static struct omap_i2c_dev_attr i2c1_dev_attr = {
1807 .fifo_depth = 8, /* bytes */
1810 static struct omap_hwmod_irq_info i2c1_mpu_irqs[] = {
1811 { .irq = INT_24XX_I2C1_IRQ, },
1814 static struct omap_hwmod_dma_info i2c1_sdma_reqs[] = {
1815 { .name = "tx", .dma_req = OMAP24XX_DMA_I2C1_TX },
1816 { .name = "rx", .dma_req = OMAP24XX_DMA_I2C1_RX },
1819 static struct omap_hwmod_ocp_if *omap3xxx_i2c1_slaves[] = {
1820 &omap3_l4_core__i2c1,
1823 static struct omap_hwmod omap3xxx_i2c1_hwmod = {
1825 .mpu_irqs = i2c1_mpu_irqs,
1826 .mpu_irqs_cnt = ARRAY_SIZE(i2c1_mpu_irqs),
1827 .sdma_reqs = i2c1_sdma_reqs,
1828 .sdma_reqs_cnt = ARRAY_SIZE(i2c1_sdma_reqs),
1829 .main_clk = "i2c1_fck",
1832 .module_offs = CORE_MOD,
1834 .module_bit = OMAP3430_EN_I2C1_SHIFT,
1836 .idlest_idle_bit = OMAP3430_ST_I2C1_SHIFT,
1839 .slaves = omap3xxx_i2c1_slaves,
1840 .slaves_cnt = ARRAY_SIZE(omap3xxx_i2c1_slaves),
1841 .class = &i2c_class,
1842 .dev_attr = &i2c1_dev_attr,
1843 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
1848 static struct omap_i2c_dev_attr i2c2_dev_attr = {
1849 .fifo_depth = 8, /* bytes */
1852 static struct omap_hwmod_irq_info i2c2_mpu_irqs[] = {
1853 { .irq = INT_24XX_I2C2_IRQ, },
1856 static struct omap_hwmod_dma_info i2c2_sdma_reqs[] = {
1857 { .name = "tx", .dma_req = OMAP24XX_DMA_I2C2_TX },
1858 { .name = "rx", .dma_req = OMAP24XX_DMA_I2C2_RX },
1861 static struct omap_hwmod_ocp_if *omap3xxx_i2c2_slaves[] = {
1862 &omap3_l4_core__i2c2,
1865 static struct omap_hwmod omap3xxx_i2c2_hwmod = {
1867 .mpu_irqs = i2c2_mpu_irqs,
1868 .mpu_irqs_cnt = ARRAY_SIZE(i2c2_mpu_irqs),
1869 .sdma_reqs = i2c2_sdma_reqs,
1870 .sdma_reqs_cnt = ARRAY_SIZE(i2c2_sdma_reqs),
1871 .main_clk = "i2c2_fck",
1874 .module_offs = CORE_MOD,
1876 .module_bit = OMAP3430_EN_I2C2_SHIFT,
1878 .idlest_idle_bit = OMAP3430_ST_I2C2_SHIFT,
1881 .slaves = omap3xxx_i2c2_slaves,
1882 .slaves_cnt = ARRAY_SIZE(omap3xxx_i2c2_slaves),
1883 .class = &i2c_class,
1884 .dev_attr = &i2c2_dev_attr,
1885 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
1890 static struct omap_i2c_dev_attr i2c3_dev_attr = {
1891 .fifo_depth = 64, /* bytes */
1894 static struct omap_hwmod_irq_info i2c3_mpu_irqs[] = {
1895 { .irq = INT_34XX_I2C3_IRQ, },
1898 static struct omap_hwmod_dma_info i2c3_sdma_reqs[] = {
1899 { .name = "tx", .dma_req = OMAP34XX_DMA_I2C3_TX },
1900 { .name = "rx", .dma_req = OMAP34XX_DMA_I2C3_RX },
1903 static struct omap_hwmod_ocp_if *omap3xxx_i2c3_slaves[] = {
1904 &omap3_l4_core__i2c3,
1907 static struct omap_hwmod omap3xxx_i2c3_hwmod = {
1909 .mpu_irqs = i2c3_mpu_irqs,
1910 .mpu_irqs_cnt = ARRAY_SIZE(i2c3_mpu_irqs),
1911 .sdma_reqs = i2c3_sdma_reqs,
1912 .sdma_reqs_cnt = ARRAY_SIZE(i2c3_sdma_reqs),
1913 .main_clk = "i2c3_fck",
1916 .module_offs = CORE_MOD,
1918 .module_bit = OMAP3430_EN_I2C3_SHIFT,
1920 .idlest_idle_bit = OMAP3430_ST_I2C3_SHIFT,
1923 .slaves = omap3xxx_i2c3_slaves,
1924 .slaves_cnt = ARRAY_SIZE(omap3xxx_i2c3_slaves),
1925 .class = &i2c_class,
1926 .dev_attr = &i2c3_dev_attr,
1927 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
1930 /* l4_wkup -> gpio1 */
1931 static struct omap_hwmod_addr_space omap3xxx_gpio1_addrs[] = {
1933 .pa_start = 0x48310000,
1934 .pa_end = 0x483101ff,
1935 .flags = ADDR_TYPE_RT
1939 static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__gpio1 = {
1940 .master = &omap3xxx_l4_wkup_hwmod,
1941 .slave = &omap3xxx_gpio1_hwmod,
1942 .addr = omap3xxx_gpio1_addrs,
1943 .addr_cnt = ARRAY_SIZE(omap3xxx_gpio1_addrs),
1944 .user = OCP_USER_MPU | OCP_USER_SDMA,
1947 /* l4_per -> gpio2 */
1948 static struct omap_hwmod_addr_space omap3xxx_gpio2_addrs[] = {
1950 .pa_start = 0x49050000,
1951 .pa_end = 0x490501ff,
1952 .flags = ADDR_TYPE_RT
1956 static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio2 = {
1957 .master = &omap3xxx_l4_per_hwmod,
1958 .slave = &omap3xxx_gpio2_hwmod,
1959 .addr = omap3xxx_gpio2_addrs,
1960 .addr_cnt = ARRAY_SIZE(omap3xxx_gpio2_addrs),
1961 .user = OCP_USER_MPU | OCP_USER_SDMA,
1964 /* l4_per -> gpio3 */
1965 static struct omap_hwmod_addr_space omap3xxx_gpio3_addrs[] = {
1967 .pa_start = 0x49052000,
1968 .pa_end = 0x490521ff,
1969 .flags = ADDR_TYPE_RT
1973 static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio3 = {
1974 .master = &omap3xxx_l4_per_hwmod,
1975 .slave = &omap3xxx_gpio3_hwmod,
1976 .addr = omap3xxx_gpio3_addrs,
1977 .addr_cnt = ARRAY_SIZE(omap3xxx_gpio3_addrs),
1978 .user = OCP_USER_MPU | OCP_USER_SDMA,
1981 /* l4_per -> gpio4 */
1982 static struct omap_hwmod_addr_space omap3xxx_gpio4_addrs[] = {
1984 .pa_start = 0x49054000,
1985 .pa_end = 0x490541ff,
1986 .flags = ADDR_TYPE_RT
1990 static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio4 = {
1991 .master = &omap3xxx_l4_per_hwmod,
1992 .slave = &omap3xxx_gpio4_hwmod,
1993 .addr = omap3xxx_gpio4_addrs,
1994 .addr_cnt = ARRAY_SIZE(omap3xxx_gpio4_addrs),
1995 .user = OCP_USER_MPU | OCP_USER_SDMA,
1998 /* l4_per -> gpio5 */
1999 static struct omap_hwmod_addr_space omap3xxx_gpio5_addrs[] = {
2001 .pa_start = 0x49056000,
2002 .pa_end = 0x490561ff,
2003 .flags = ADDR_TYPE_RT
2007 static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio5 = {
2008 .master = &omap3xxx_l4_per_hwmod,
2009 .slave = &omap3xxx_gpio5_hwmod,
2010 .addr = omap3xxx_gpio5_addrs,
2011 .addr_cnt = ARRAY_SIZE(omap3xxx_gpio5_addrs),
2012 .user = OCP_USER_MPU | OCP_USER_SDMA,
2015 /* l4_per -> gpio6 */
2016 static struct omap_hwmod_addr_space omap3xxx_gpio6_addrs[] = {
2018 .pa_start = 0x49058000,
2019 .pa_end = 0x490581ff,
2020 .flags = ADDR_TYPE_RT
2024 static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio6 = {
2025 .master = &omap3xxx_l4_per_hwmod,
2026 .slave = &omap3xxx_gpio6_hwmod,
2027 .addr = omap3xxx_gpio6_addrs,
2028 .addr_cnt = ARRAY_SIZE(omap3xxx_gpio6_addrs),
2029 .user = OCP_USER_MPU | OCP_USER_SDMA,
2034 * general purpose io module
2037 static struct omap_hwmod_class_sysconfig omap3xxx_gpio_sysc = {
2039 .sysc_offs = 0x0010,
2040 .syss_offs = 0x0014,
2041 .sysc_flags = (SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
2042 SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
2043 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2044 .sysc_fields = &omap_hwmod_sysc_type1,
2047 static struct omap_hwmod_class omap3xxx_gpio_hwmod_class = {
2049 .sysc = &omap3xxx_gpio_sysc,
2054 static struct omap_gpio_dev_attr gpio_dev_attr = {
2060 static struct omap_hwmod_irq_info omap3xxx_gpio1_irqs[] = {
2061 { .irq = 29 }, /* INT_34XX_GPIO_BANK1 */
2064 static struct omap_hwmod_opt_clk gpio1_opt_clks[] = {
2065 { .role = "dbclk", .clk = "gpio1_dbck", },
2068 static struct omap_hwmod_ocp_if *omap3xxx_gpio1_slaves[] = {
2069 &omap3xxx_l4_wkup__gpio1,
2072 static struct omap_hwmod omap3xxx_gpio1_hwmod = {
2074 .mpu_irqs = omap3xxx_gpio1_irqs,
2075 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_gpio1_irqs),
2076 .main_clk = "gpio1_ick",
2077 .opt_clks = gpio1_opt_clks,
2078 .opt_clks_cnt = ARRAY_SIZE(gpio1_opt_clks),
2082 .module_bit = OMAP3430_EN_GPIO1_SHIFT,
2083 .module_offs = WKUP_MOD,
2085 .idlest_idle_bit = OMAP3430_ST_GPIO1_SHIFT,
2088 .slaves = omap3xxx_gpio1_slaves,
2089 .slaves_cnt = ARRAY_SIZE(omap3xxx_gpio1_slaves),
2090 .class = &omap3xxx_gpio_hwmod_class,
2091 .dev_attr = &gpio_dev_attr,
2092 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
2096 static struct omap_hwmod_irq_info omap3xxx_gpio2_irqs[] = {
2097 { .irq = 30 }, /* INT_34XX_GPIO_BANK2 */
2100 static struct omap_hwmod_opt_clk gpio2_opt_clks[] = {
2101 { .role = "dbclk", .clk = "gpio2_dbck", },
2104 static struct omap_hwmod_ocp_if *omap3xxx_gpio2_slaves[] = {
2105 &omap3xxx_l4_per__gpio2,
2108 static struct omap_hwmod omap3xxx_gpio2_hwmod = {
2110 .mpu_irqs = omap3xxx_gpio2_irqs,
2111 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_gpio2_irqs),
2112 .main_clk = "gpio2_ick",
2113 .opt_clks = gpio2_opt_clks,
2114 .opt_clks_cnt = ARRAY_SIZE(gpio2_opt_clks),
2118 .module_bit = OMAP3430_EN_GPIO2_SHIFT,
2119 .module_offs = OMAP3430_PER_MOD,
2121 .idlest_idle_bit = OMAP3430_ST_GPIO2_SHIFT,
2124 .slaves = omap3xxx_gpio2_slaves,
2125 .slaves_cnt = ARRAY_SIZE(omap3xxx_gpio2_slaves),
2126 .class = &omap3xxx_gpio_hwmod_class,
2127 .dev_attr = &gpio_dev_attr,
2128 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
2132 static struct omap_hwmod_irq_info omap3xxx_gpio3_irqs[] = {
2133 { .irq = 31 }, /* INT_34XX_GPIO_BANK3 */
2136 static struct omap_hwmod_opt_clk gpio3_opt_clks[] = {
2137 { .role = "dbclk", .clk = "gpio3_dbck", },
2140 static struct omap_hwmod_ocp_if *omap3xxx_gpio3_slaves[] = {
2141 &omap3xxx_l4_per__gpio3,
2144 static struct omap_hwmod omap3xxx_gpio3_hwmod = {
2146 .mpu_irqs = omap3xxx_gpio3_irqs,
2147 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_gpio3_irqs),
2148 .main_clk = "gpio3_ick",
2149 .opt_clks = gpio3_opt_clks,
2150 .opt_clks_cnt = ARRAY_SIZE(gpio3_opt_clks),
2154 .module_bit = OMAP3430_EN_GPIO3_SHIFT,
2155 .module_offs = OMAP3430_PER_MOD,
2157 .idlest_idle_bit = OMAP3430_ST_GPIO3_SHIFT,
2160 .slaves = omap3xxx_gpio3_slaves,
2161 .slaves_cnt = ARRAY_SIZE(omap3xxx_gpio3_slaves),
2162 .class = &omap3xxx_gpio_hwmod_class,
2163 .dev_attr = &gpio_dev_attr,
2164 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
2168 static struct omap_hwmod_irq_info omap3xxx_gpio4_irqs[] = {
2169 { .irq = 32 }, /* INT_34XX_GPIO_BANK4 */
2172 static struct omap_hwmod_opt_clk gpio4_opt_clks[] = {
2173 { .role = "dbclk", .clk = "gpio4_dbck", },
2176 static struct omap_hwmod_ocp_if *omap3xxx_gpio4_slaves[] = {
2177 &omap3xxx_l4_per__gpio4,
2180 static struct omap_hwmod omap3xxx_gpio4_hwmod = {
2182 .mpu_irqs = omap3xxx_gpio4_irqs,
2183 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_gpio4_irqs),
2184 .main_clk = "gpio4_ick",
2185 .opt_clks = gpio4_opt_clks,
2186 .opt_clks_cnt = ARRAY_SIZE(gpio4_opt_clks),
2190 .module_bit = OMAP3430_EN_GPIO4_SHIFT,
2191 .module_offs = OMAP3430_PER_MOD,
2193 .idlest_idle_bit = OMAP3430_ST_GPIO4_SHIFT,
2196 .slaves = omap3xxx_gpio4_slaves,
2197 .slaves_cnt = ARRAY_SIZE(omap3xxx_gpio4_slaves),
2198 .class = &omap3xxx_gpio_hwmod_class,
2199 .dev_attr = &gpio_dev_attr,
2200 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
2204 static struct omap_hwmod_irq_info omap3xxx_gpio5_irqs[] = {
2205 { .irq = 33 }, /* INT_34XX_GPIO_BANK5 */
2208 static struct omap_hwmod_opt_clk gpio5_opt_clks[] = {
2209 { .role = "dbclk", .clk = "gpio5_dbck", },
2212 static struct omap_hwmod_ocp_if *omap3xxx_gpio5_slaves[] = {
2213 &omap3xxx_l4_per__gpio5,
2216 static struct omap_hwmod omap3xxx_gpio5_hwmod = {
2218 .mpu_irqs = omap3xxx_gpio5_irqs,
2219 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_gpio5_irqs),
2220 .main_clk = "gpio5_ick",
2221 .opt_clks = gpio5_opt_clks,
2222 .opt_clks_cnt = ARRAY_SIZE(gpio5_opt_clks),
2226 .module_bit = OMAP3430_EN_GPIO5_SHIFT,
2227 .module_offs = OMAP3430_PER_MOD,
2229 .idlest_idle_bit = OMAP3430_ST_GPIO5_SHIFT,
2232 .slaves = omap3xxx_gpio5_slaves,
2233 .slaves_cnt = ARRAY_SIZE(omap3xxx_gpio5_slaves),
2234 .class = &omap3xxx_gpio_hwmod_class,
2235 .dev_attr = &gpio_dev_attr,
2236 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
2240 static struct omap_hwmod_irq_info omap3xxx_gpio6_irqs[] = {
2241 { .irq = 34 }, /* INT_34XX_GPIO_BANK6 */
2244 static struct omap_hwmod_opt_clk gpio6_opt_clks[] = {
2245 { .role = "dbclk", .clk = "gpio6_dbck", },
2248 static struct omap_hwmod_ocp_if *omap3xxx_gpio6_slaves[] = {
2249 &omap3xxx_l4_per__gpio6,
2252 static struct omap_hwmod omap3xxx_gpio6_hwmod = {
2254 .mpu_irqs = omap3xxx_gpio6_irqs,
2255 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_gpio6_irqs),
2256 .main_clk = "gpio6_ick",
2257 .opt_clks = gpio6_opt_clks,
2258 .opt_clks_cnt = ARRAY_SIZE(gpio6_opt_clks),
2262 .module_bit = OMAP3430_EN_GPIO6_SHIFT,
2263 .module_offs = OMAP3430_PER_MOD,
2265 .idlest_idle_bit = OMAP3430_ST_GPIO6_SHIFT,
2268 .slaves = omap3xxx_gpio6_slaves,
2269 .slaves_cnt = ARRAY_SIZE(omap3xxx_gpio6_slaves),
2270 .class = &omap3xxx_gpio_hwmod_class,
2271 .dev_attr = &gpio_dev_attr,
2272 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
2275 /* dma_system -> L3 */
2276 static struct omap_hwmod_ocp_if omap3xxx_dma_system__l3 = {
2277 .master = &omap3xxx_dma_system_hwmod,
2278 .slave = &omap3xxx_l3_main_hwmod,
2279 .clk = "core_l3_ick",
2280 .user = OCP_USER_MPU | OCP_USER_SDMA,
2283 /* dma attributes */
2284 static struct omap_dma_dev_attr dma_dev_attr = {
2285 .dev_caps = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY |
2286 IS_CSSA_32 | IS_CDSA_32 | IS_RW_PRIORITY,
2290 static struct omap_hwmod_class_sysconfig omap3xxx_dma_sysc = {
2292 .sysc_offs = 0x002c,
2293 .syss_offs = 0x0028,
2294 .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
2295 SYSC_HAS_MIDLEMODE | SYSC_HAS_CLOCKACTIVITY |
2296 SYSC_HAS_EMUFREE | SYSC_HAS_AUTOIDLE),
2297 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2298 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
2299 .sysc_fields = &omap_hwmod_sysc_type1,
2302 static struct omap_hwmod_class omap3xxx_dma_hwmod_class = {
2304 .sysc = &omap3xxx_dma_sysc,
2308 static struct omap_hwmod_irq_info omap3xxx_dma_system_irqs[] = {
2309 { .name = "0", .irq = 12 }, /* INT_24XX_SDMA_IRQ0 */
2310 { .name = "1", .irq = 13 }, /* INT_24XX_SDMA_IRQ1 */
2311 { .name = "2", .irq = 14 }, /* INT_24XX_SDMA_IRQ2 */
2312 { .name = "3", .irq = 15 }, /* INT_24XX_SDMA_IRQ3 */
2315 static struct omap_hwmod_addr_space omap3xxx_dma_system_addrs[] = {
2317 .pa_start = 0x48056000,
2318 .pa_end = 0x4a0560ff,
2319 .flags = ADDR_TYPE_RT
2323 /* dma_system master ports */
2324 static struct omap_hwmod_ocp_if *omap3xxx_dma_system_masters[] = {
2325 &omap3xxx_dma_system__l3,
2328 /* l4_cfg -> dma_system */
2329 static struct omap_hwmod_ocp_if omap3xxx_l4_core__dma_system = {
2330 .master = &omap3xxx_l4_core_hwmod,
2331 .slave = &omap3xxx_dma_system_hwmod,
2332 .clk = "core_l4_ick",
2333 .addr = omap3xxx_dma_system_addrs,
2334 .addr_cnt = ARRAY_SIZE(omap3xxx_dma_system_addrs),
2335 .user = OCP_USER_MPU | OCP_USER_SDMA,
2338 /* dma_system slave ports */
2339 static struct omap_hwmod_ocp_if *omap3xxx_dma_system_slaves[] = {
2340 &omap3xxx_l4_core__dma_system,
2343 static struct omap_hwmod omap3xxx_dma_system_hwmod = {
2345 .class = &omap3xxx_dma_hwmod_class,
2346 .mpu_irqs = omap3xxx_dma_system_irqs,
2347 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_dma_system_irqs),
2348 .main_clk = "core_l3_ick",
2351 .module_offs = CORE_MOD,
2353 .module_bit = OMAP3430_ST_SDMA_SHIFT,
2355 .idlest_idle_bit = OMAP3430_ST_SDMA_SHIFT,
2358 .slaves = omap3xxx_dma_system_slaves,
2359 .slaves_cnt = ARRAY_SIZE(omap3xxx_dma_system_slaves),
2360 .masters = omap3xxx_dma_system_masters,
2361 .masters_cnt = ARRAY_SIZE(omap3xxx_dma_system_masters),
2362 .dev_attr = &dma_dev_attr,
2363 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
2364 .flags = HWMOD_NO_IDLEST,
2368 static struct omap_hwmod_sysc_fields omap34xx_sr_sysc_fields = {
2372 static struct omap_hwmod_class_sysconfig omap34xx_sr_sysc = {
2374 .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_NO_CACHE),
2375 .clockact = CLOCKACT_TEST_ICLK,
2376 .sysc_fields = &omap34xx_sr_sysc_fields,
2379 static struct omap_hwmod_class omap34xx_smartreflex_hwmod_class = {
2380 .name = "smartreflex",
2381 .sysc = &omap34xx_sr_sysc,
2385 static struct omap_hwmod_sysc_fields omap36xx_sr_sysc_fields = {
2390 static struct omap_hwmod_class_sysconfig omap36xx_sr_sysc = {
2392 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2393 .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_ENAWAKEUP |
2395 .sysc_fields = &omap36xx_sr_sysc_fields,
2398 static struct omap_hwmod_class omap36xx_smartreflex_hwmod_class = {
2399 .name = "smartreflex",
2400 .sysc = &omap36xx_sr_sysc,
2405 static struct omap_hwmod_ocp_if *omap3_sr1_slaves[] = {
2406 &omap3_l4_core__sr1,
2409 static struct omap_hwmod omap34xx_sr1_hwmod = {
2410 .name = "sr1_hwmod",
2411 .class = &omap34xx_smartreflex_hwmod_class,
2412 .main_clk = "sr1_fck",
2417 .module_bit = OMAP3430_EN_SR1_SHIFT,
2418 .module_offs = WKUP_MOD,
2420 .idlest_idle_bit = OMAP3430_EN_SR1_SHIFT,
2423 .slaves = omap3_sr1_slaves,
2424 .slaves_cnt = ARRAY_SIZE(omap3_sr1_slaves),
2425 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES2 |
2426 CHIP_IS_OMAP3430ES3_0 |
2427 CHIP_IS_OMAP3430ES3_1),
2428 .flags = HWMOD_SET_DEFAULT_CLOCKACT,
2431 static struct omap_hwmod omap36xx_sr1_hwmod = {
2432 .name = "sr1_hwmod",
2433 .class = &omap36xx_smartreflex_hwmod_class,
2434 .main_clk = "sr1_fck",
2439 .module_bit = OMAP3430_EN_SR1_SHIFT,
2440 .module_offs = WKUP_MOD,
2442 .idlest_idle_bit = OMAP3430_EN_SR1_SHIFT,
2445 .slaves = omap3_sr1_slaves,
2446 .slaves_cnt = ARRAY_SIZE(omap3_sr1_slaves),
2447 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3630ES1),
2451 static struct omap_hwmod_ocp_if *omap3_sr2_slaves[] = {
2452 &omap3_l4_core__sr2,
2455 static struct omap_hwmod omap34xx_sr2_hwmod = {
2456 .name = "sr2_hwmod",
2457 .class = &omap34xx_smartreflex_hwmod_class,
2458 .main_clk = "sr2_fck",
2463 .module_bit = OMAP3430_EN_SR2_SHIFT,
2464 .module_offs = WKUP_MOD,
2466 .idlest_idle_bit = OMAP3430_EN_SR2_SHIFT,
2469 .slaves = omap3_sr2_slaves,
2470 .slaves_cnt = ARRAY_SIZE(omap3_sr2_slaves),
2471 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES2 |
2472 CHIP_IS_OMAP3430ES3_0 |
2473 CHIP_IS_OMAP3430ES3_1),
2474 .flags = HWMOD_SET_DEFAULT_CLOCKACT,
2477 static struct omap_hwmod omap36xx_sr2_hwmod = {
2478 .name = "sr2_hwmod",
2479 .class = &omap36xx_smartreflex_hwmod_class,
2480 .main_clk = "sr2_fck",
2485 .module_bit = OMAP3430_EN_SR2_SHIFT,
2486 .module_offs = WKUP_MOD,
2488 .idlest_idle_bit = OMAP3430_EN_SR2_SHIFT,
2491 .slaves = omap3_sr2_slaves,
2492 .slaves_cnt = ARRAY_SIZE(omap3_sr2_slaves),
2493 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3630ES1),
2496 /* l4 core -> mcspi1 interface */
2497 static struct omap_hwmod_addr_space omap34xx_mcspi1_addr_space[] = {
2499 .pa_start = 0x48098000,
2500 .pa_end = 0x480980ff,
2501 .flags = ADDR_TYPE_RT,
2505 static struct omap_hwmod_ocp_if omap34xx_l4_core__mcspi1 = {
2506 .master = &omap3xxx_l4_core_hwmod,
2507 .slave = &omap34xx_mcspi1,
2508 .clk = "mcspi1_ick",
2509 .addr = omap34xx_mcspi1_addr_space,
2510 .addr_cnt = ARRAY_SIZE(omap34xx_mcspi1_addr_space),
2511 .user = OCP_USER_MPU | OCP_USER_SDMA,
2514 /* l4 core -> mcspi2 interface */
2515 static struct omap_hwmod_addr_space omap34xx_mcspi2_addr_space[] = {
2517 .pa_start = 0x4809a000,
2518 .pa_end = 0x4809a0ff,
2519 .flags = ADDR_TYPE_RT,
2523 static struct omap_hwmod_ocp_if omap34xx_l4_core__mcspi2 = {
2524 .master = &omap3xxx_l4_core_hwmod,
2525 .slave = &omap34xx_mcspi2,
2526 .clk = "mcspi2_ick",
2527 .addr = omap34xx_mcspi2_addr_space,
2528 .addr_cnt = ARRAY_SIZE(omap34xx_mcspi2_addr_space),
2529 .user = OCP_USER_MPU | OCP_USER_SDMA,
2532 /* l4 core -> mcspi3 interface */
2533 static struct omap_hwmod_addr_space omap34xx_mcspi3_addr_space[] = {
2535 .pa_start = 0x480b8000,
2536 .pa_end = 0x480b80ff,
2537 .flags = ADDR_TYPE_RT,
2541 static struct omap_hwmod_ocp_if omap34xx_l4_core__mcspi3 = {
2542 .master = &omap3xxx_l4_core_hwmod,
2543 .slave = &omap34xx_mcspi3,
2544 .clk = "mcspi3_ick",
2545 .addr = omap34xx_mcspi3_addr_space,
2546 .addr_cnt = ARRAY_SIZE(omap34xx_mcspi3_addr_space),
2547 .user = OCP_USER_MPU | OCP_USER_SDMA,
2550 /* l4 core -> mcspi4 interface */
2551 static struct omap_hwmod_addr_space omap34xx_mcspi4_addr_space[] = {
2553 .pa_start = 0x480ba000,
2554 .pa_end = 0x480ba0ff,
2555 .flags = ADDR_TYPE_RT,
2559 static struct omap_hwmod_ocp_if omap34xx_l4_core__mcspi4 = {
2560 .master = &omap3xxx_l4_core_hwmod,
2561 .slave = &omap34xx_mcspi4,
2562 .clk = "mcspi4_ick",
2563 .addr = omap34xx_mcspi4_addr_space,
2564 .addr_cnt = ARRAY_SIZE(omap34xx_mcspi4_addr_space),
2565 .user = OCP_USER_MPU | OCP_USER_SDMA,
2570 * multichannel serial port interface (mcspi) / master/slave synchronous serial
2574 static struct omap_hwmod_class_sysconfig omap34xx_mcspi_sysc = {
2576 .sysc_offs = 0x0010,
2577 .syss_offs = 0x0014,
2578 .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
2579 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
2580 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
2581 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2582 .sysc_fields = &omap_hwmod_sysc_type1,
2585 static struct omap_hwmod_class omap34xx_mcspi_class = {
2587 .sysc = &omap34xx_mcspi_sysc,
2588 .rev = OMAP3_MCSPI_REV,
2592 static struct omap_hwmod_irq_info omap34xx_mcspi1_mpu_irqs[] = {
2593 { .name = "irq", .irq = 65 },
2596 static struct omap_hwmod_dma_info omap34xx_mcspi1_sdma_reqs[] = {
2597 { .name = "tx0", .dma_req = 35 },
2598 { .name = "rx0", .dma_req = 36 },
2599 { .name = "tx1", .dma_req = 37 },
2600 { .name = "rx1", .dma_req = 38 },
2601 { .name = "tx2", .dma_req = 39 },
2602 { .name = "rx2", .dma_req = 40 },
2603 { .name = "tx3", .dma_req = 41 },
2604 { .name = "rx3", .dma_req = 42 },
2607 static struct omap_hwmod_ocp_if *omap34xx_mcspi1_slaves[] = {
2608 &omap34xx_l4_core__mcspi1,
2611 static struct omap2_mcspi_dev_attr omap_mcspi1_dev_attr = {
2612 .num_chipselect = 4,
2615 static struct omap_hwmod omap34xx_mcspi1 = {
2617 .mpu_irqs = omap34xx_mcspi1_mpu_irqs,
2618 .mpu_irqs_cnt = ARRAY_SIZE(omap34xx_mcspi1_mpu_irqs),
2619 .sdma_reqs = omap34xx_mcspi1_sdma_reqs,
2620 .sdma_reqs_cnt = ARRAY_SIZE(omap34xx_mcspi1_sdma_reqs),
2621 .main_clk = "mcspi1_fck",
2624 .module_offs = CORE_MOD,
2626 .module_bit = OMAP3430_EN_MCSPI1_SHIFT,
2628 .idlest_idle_bit = OMAP3430_ST_MCSPI1_SHIFT,
2631 .slaves = omap34xx_mcspi1_slaves,
2632 .slaves_cnt = ARRAY_SIZE(omap34xx_mcspi1_slaves),
2633 .class = &omap34xx_mcspi_class,
2634 .dev_attr = &omap_mcspi1_dev_attr,
2635 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
2639 static struct omap_hwmod_irq_info omap34xx_mcspi2_mpu_irqs[] = {
2640 { .name = "irq", .irq = 66 },
2643 static struct omap_hwmod_dma_info omap34xx_mcspi2_sdma_reqs[] = {
2644 { .name = "tx0", .dma_req = 43 },
2645 { .name = "rx0", .dma_req = 44 },
2646 { .name = "tx1", .dma_req = 45 },
2647 { .name = "rx1", .dma_req = 46 },
2650 static struct omap_hwmod_ocp_if *omap34xx_mcspi2_slaves[] = {
2651 &omap34xx_l4_core__mcspi2,
2654 static struct omap2_mcspi_dev_attr omap_mcspi2_dev_attr = {
2655 .num_chipselect = 2,
2658 static struct omap_hwmod omap34xx_mcspi2 = {
2660 .mpu_irqs = omap34xx_mcspi2_mpu_irqs,
2661 .mpu_irqs_cnt = ARRAY_SIZE(omap34xx_mcspi2_mpu_irqs),
2662 .sdma_reqs = omap34xx_mcspi2_sdma_reqs,
2663 .sdma_reqs_cnt = ARRAY_SIZE(omap34xx_mcspi2_sdma_reqs),
2664 .main_clk = "mcspi2_fck",
2667 .module_offs = CORE_MOD,
2669 .module_bit = OMAP3430_EN_MCSPI2_SHIFT,
2671 .idlest_idle_bit = OMAP3430_ST_MCSPI2_SHIFT,
2674 .slaves = omap34xx_mcspi2_slaves,
2675 .slaves_cnt = ARRAY_SIZE(omap34xx_mcspi2_slaves),
2676 .class = &omap34xx_mcspi_class,
2677 .dev_attr = &omap_mcspi2_dev_attr,
2678 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
2682 static struct omap_hwmod_irq_info omap34xx_mcspi3_mpu_irqs[] = {
2683 { .name = "irq", .irq = 91 }, /* 91 */
2686 static struct omap_hwmod_dma_info omap34xx_mcspi3_sdma_reqs[] = {
2687 { .name = "tx0", .dma_req = 15 },
2688 { .name = "rx0", .dma_req = 16 },
2689 { .name = "tx1", .dma_req = 23 },
2690 { .name = "rx1", .dma_req = 24 },
2693 static struct omap_hwmod_ocp_if *omap34xx_mcspi3_slaves[] = {
2694 &omap34xx_l4_core__mcspi3,
2697 static struct omap2_mcspi_dev_attr omap_mcspi3_dev_attr = {
2698 .num_chipselect = 2,
2701 static struct omap_hwmod omap34xx_mcspi3 = {
2703 .mpu_irqs = omap34xx_mcspi3_mpu_irqs,
2704 .mpu_irqs_cnt = ARRAY_SIZE(omap34xx_mcspi3_mpu_irqs),
2705 .sdma_reqs = omap34xx_mcspi3_sdma_reqs,
2706 .sdma_reqs_cnt = ARRAY_SIZE(omap34xx_mcspi3_sdma_reqs),
2707 .main_clk = "mcspi3_fck",
2710 .module_offs = CORE_MOD,
2712 .module_bit = OMAP3430_EN_MCSPI3_SHIFT,
2714 .idlest_idle_bit = OMAP3430_ST_MCSPI3_SHIFT,
2717 .slaves = omap34xx_mcspi3_slaves,
2718 .slaves_cnt = ARRAY_SIZE(omap34xx_mcspi3_slaves),
2719 .class = &omap34xx_mcspi_class,
2720 .dev_attr = &omap_mcspi3_dev_attr,
2721 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
2725 static struct omap_hwmod_irq_info omap34xx_mcspi4_mpu_irqs[] = {
2726 { .name = "irq", .irq = INT_34XX_SPI4_IRQ }, /* 48 */
2729 static struct omap_hwmod_dma_info omap34xx_mcspi4_sdma_reqs[] = {
2730 { .name = "tx0", .dma_req = 70 }, /* DMA_SPI4_TX0 */
2731 { .name = "rx0", .dma_req = 71 }, /* DMA_SPI4_RX0 */
2734 static struct omap_hwmod_ocp_if *omap34xx_mcspi4_slaves[] = {
2735 &omap34xx_l4_core__mcspi4,
2738 static struct omap2_mcspi_dev_attr omap_mcspi4_dev_attr = {
2739 .num_chipselect = 1,
2742 static struct omap_hwmod omap34xx_mcspi4 = {
2744 .mpu_irqs = omap34xx_mcspi4_mpu_irqs,
2745 .mpu_irqs_cnt = ARRAY_SIZE(omap34xx_mcspi4_mpu_irqs),
2746 .sdma_reqs = omap34xx_mcspi4_sdma_reqs,
2747 .sdma_reqs_cnt = ARRAY_SIZE(omap34xx_mcspi4_sdma_reqs),
2748 .main_clk = "mcspi4_fck",
2751 .module_offs = CORE_MOD,
2753 .module_bit = OMAP3430_EN_MCSPI4_SHIFT,
2755 .idlest_idle_bit = OMAP3430_ST_MCSPI4_SHIFT,
2758 .slaves = omap34xx_mcspi4_slaves,
2759 .slaves_cnt = ARRAY_SIZE(omap34xx_mcspi4_slaves),
2760 .class = &omap34xx_mcspi_class,
2761 .dev_attr = &omap_mcspi4_dev_attr,
2762 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
2768 static struct omap_hwmod_class_sysconfig omap3xxx_usbhsotg_sysc = {
2770 .sysc_offs = 0x0404,
2771 .syss_offs = 0x0408,
2772 .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE|
2773 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
2775 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2776 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
2777 .sysc_fields = &omap_hwmod_sysc_type1,
2780 static struct omap_hwmod_class usbotg_class = {
2782 .sysc = &omap3xxx_usbhsotg_sysc,
2785 static struct omap_hwmod_irq_info omap3xxx_usbhsotg_mpu_irqs[] = {
2787 { .name = "mc", .irq = 92 },
2788 { .name = "dma", .irq = 93 },
2791 static struct omap_hwmod omap3xxx_usbhsotg_hwmod = {
2792 .name = "usb_otg_hs",
2793 .mpu_irqs = omap3xxx_usbhsotg_mpu_irqs,
2794 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_usbhsotg_mpu_irqs),
2795 .main_clk = "hsotgusb_ick",
2799 .module_bit = OMAP3430_EN_HSOTGUSB_SHIFT,
2800 .module_offs = CORE_MOD,
2802 .idlest_idle_bit = OMAP3430ES2_ST_HSOTGUSB_IDLE_SHIFT,
2803 .idlest_stdby_bit = OMAP3430ES2_ST_HSOTGUSB_STDBY_SHIFT
2806 .masters = omap3xxx_usbhsotg_masters,
2807 .masters_cnt = ARRAY_SIZE(omap3xxx_usbhsotg_masters),
2808 .slaves = omap3xxx_usbhsotg_slaves,
2809 .slaves_cnt = ARRAY_SIZE(omap3xxx_usbhsotg_slaves),
2810 .class = &usbotg_class,
2813 * Erratum ID: i479 idle_req / idle_ack mechanism potentially
2814 * broken when autoidle is enabled
2815 * workaround is to disable the autoidle bit at module level.
2817 .flags = HWMOD_NO_OCP_AUTOIDLE | HWMOD_SWSUP_SIDLE
2818 | HWMOD_SWSUP_MSTANDBY,
2819 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
2823 static struct omap_hwmod_irq_info am35xx_usbhsotg_mpu_irqs[] = {
2825 { .name = "mc", .irq = 71 },
2828 static struct omap_hwmod_class am35xx_usbotg_class = {
2829 .name = "am35xx_usbotg",
2833 static struct omap_hwmod am35xx_usbhsotg_hwmod = {
2834 .name = "am35x_otg_hs",
2835 .mpu_irqs = am35xx_usbhsotg_mpu_irqs,
2836 .mpu_irqs_cnt = ARRAY_SIZE(am35xx_usbhsotg_mpu_irqs),
2842 .masters = am35xx_usbhsotg_masters,
2843 .masters_cnt = ARRAY_SIZE(am35xx_usbhsotg_masters),
2844 .slaves = am35xx_usbhsotg_slaves,
2845 .slaves_cnt = ARRAY_SIZE(am35xx_usbhsotg_slaves),
2846 .class = &am35xx_usbotg_class,
2847 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES3_1)
2850 static __initdata struct omap_hwmod *omap3xxx_hwmods[] = {
2851 &omap3xxx_l3_main_hwmod,
2852 &omap3xxx_l4_core_hwmod,
2853 &omap3xxx_l4_per_hwmod,
2854 &omap3xxx_l4_wkup_hwmod,
2855 &omap3xxx_mpu_hwmod,
2856 &omap3xxx_iva_hwmod,
2858 &omap3xxx_timer1_hwmod,
2859 &omap3xxx_timer2_hwmod,
2860 &omap3xxx_timer3_hwmod,
2861 &omap3xxx_timer4_hwmod,
2862 &omap3xxx_timer5_hwmod,
2863 &omap3xxx_timer6_hwmod,
2864 &omap3xxx_timer7_hwmod,
2865 &omap3xxx_timer8_hwmod,
2866 &omap3xxx_timer9_hwmod,
2867 &omap3xxx_timer10_hwmod,
2868 &omap3xxx_timer11_hwmod,
2869 &omap3xxx_timer12_hwmod,
2871 &omap3xxx_wd_timer2_hwmod,
2872 &omap3xxx_uart1_hwmod,
2873 &omap3xxx_uart2_hwmod,
2874 &omap3xxx_uart3_hwmod,
2875 &omap3xxx_uart4_hwmod,
2877 &omap3430es1_dss_core_hwmod,
2878 &omap3xxx_dss_core_hwmod,
2879 &omap3xxx_dss_dispc_hwmod,
2880 &omap3xxx_dss_dsi1_hwmod,
2881 &omap3xxx_dss_rfbi_hwmod,
2882 &omap3xxx_dss_venc_hwmod,
2885 &omap3xxx_i2c1_hwmod,
2886 &omap3xxx_i2c2_hwmod,
2887 &omap3xxx_i2c3_hwmod,
2888 &omap34xx_sr1_hwmod,
2889 &omap34xx_sr2_hwmod,
2890 &omap36xx_sr1_hwmod,
2891 &omap36xx_sr2_hwmod,
2895 &omap3xxx_gpio1_hwmod,
2896 &omap3xxx_gpio2_hwmod,
2897 &omap3xxx_gpio3_hwmod,
2898 &omap3xxx_gpio4_hwmod,
2899 &omap3xxx_gpio5_hwmod,
2900 &omap3xxx_gpio6_hwmod,
2902 /* dma_system class*/
2903 &omap3xxx_dma_system_hwmod,
2912 &omap3xxx_usbhsotg_hwmod,
2914 /* usbotg for am35x */
2915 &am35xx_usbhsotg_hwmod,
2920 int __init omap3xxx_hwmod_init(void)
2922 return omap_hwmod_register(omap3xxx_hwmods);