]> rtime.felk.cvut.cz Git - linux-imx.git/blob - arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
HID: wiimote: fix weight conversion error for values > 17kg
[linux-imx.git] / arch / arm / mach-omap2 / omap_hwmod_3xxx_data.c
1 /*
2  * omap_hwmod_3xxx_data.c - hardware modules present on the OMAP3xxx chips
3  *
4  * Copyright (C) 2009-2011 Nokia Corporation
5  * Copyright (C) 2012 Texas Instruments, Inc.
6  * Paul Walmsley
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License version 2 as
10  * published by the Free Software Foundation.
11  *
12  * The data in this file should be completely autogeneratable from
13  * the TI hardware database or other technical documentation.
14  *
15  * XXX these should be marked initdata for multi-OMAP kernels
16  */
17 #include <linux/power/smartreflex.h>
18
19 #include <plat/omap_hwmod.h>
20 #include <mach/irqs.h>
21 #include <plat/cpu.h>
22 #include <plat/dma.h>
23 #include <plat/serial.h>
24 #include <plat/l3_3xxx.h>
25 #include <plat/l4_3xxx.h>
26 #include <plat/i2c.h>
27 #include <plat/gpio.h>
28 #include <plat/mmc.h>
29 #include <plat/mcbsp.h>
30 #include <plat/mcspi.h>
31 #include <plat/dmtimer.h>
32
33 #include "omap_hwmod_common_data.h"
34 #include "prm-regbits-34xx.h"
35 #include "cm-regbits-34xx.h"
36 #include "wd_timer.h"
37 #include <mach/am35xx.h>
38
39 /*
40  * OMAP3xxx hardware module integration data
41  *
42  * All of the data in this section should be autogeneratable from the
43  * TI hardware database or other technical documentation.  Data that
44  * is driver-specific or driver-kernel integration-specific belongs
45  * elsewhere.
46  */
47
48 /*
49  * IP blocks
50  */
51
52 /* L3 */
53 static struct omap_hwmod_irq_info omap3xxx_l3_main_irqs[] = {
54         { .irq = INT_34XX_L3_DBG_IRQ },
55         { .irq = INT_34XX_L3_APP_IRQ },
56         { .irq = -1 }
57 };
58
59 static struct omap_hwmod omap3xxx_l3_main_hwmod = {
60         .name           = "l3_main",
61         .class          = &l3_hwmod_class,
62         .mpu_irqs       = omap3xxx_l3_main_irqs,
63         .flags          = HWMOD_NO_IDLEST,
64 };
65
66 /* L4 CORE */
67 static struct omap_hwmod omap3xxx_l4_core_hwmod = {
68         .name           = "l4_core",
69         .class          = &l4_hwmod_class,
70         .flags          = HWMOD_NO_IDLEST,
71 };
72
73 /* L4 PER */
74 static struct omap_hwmod omap3xxx_l4_per_hwmod = {
75         .name           = "l4_per",
76         .class          = &l4_hwmod_class,
77         .flags          = HWMOD_NO_IDLEST,
78 };
79
80 /* L4 WKUP */
81 static struct omap_hwmod omap3xxx_l4_wkup_hwmod = {
82         .name           = "l4_wkup",
83         .class          = &l4_hwmod_class,
84         .flags          = HWMOD_NO_IDLEST,
85 };
86
87 /* L4 SEC */
88 static struct omap_hwmod omap3xxx_l4_sec_hwmod = {
89         .name           = "l4_sec",
90         .class          = &l4_hwmod_class,
91         .flags          = HWMOD_NO_IDLEST,
92 };
93
94 /* MPU */
95 static struct omap_hwmod omap3xxx_mpu_hwmod = {
96         .name           = "mpu",
97         .class          = &mpu_hwmod_class,
98         .main_clk       = "arm_fck",
99 };
100
101 /* IVA2 (IVA2) */
102 static struct omap_hwmod_rst_info omap3xxx_iva_resets[] = {
103         { .name = "logic", .rst_shift = 0 },
104         { .name = "seq0", .rst_shift = 1 },
105         { .name = "seq1", .rst_shift = 2 },
106 };
107
108 static struct omap_hwmod omap3xxx_iva_hwmod = {
109         .name           = "iva",
110         .class          = &iva_hwmod_class,
111         .clkdm_name     = "iva2_clkdm",
112         .rst_lines      = omap3xxx_iva_resets,
113         .rst_lines_cnt  = ARRAY_SIZE(omap3xxx_iva_resets),
114         .main_clk       = "iva2_ck",
115 };
116
117 /* timer class */
118 static struct omap_hwmod_class_sysconfig omap3xxx_timer_1ms_sysc = {
119         .rev_offs       = 0x0000,
120         .sysc_offs      = 0x0010,
121         .syss_offs      = 0x0014,
122         .sysc_flags     = (SYSC_HAS_SIDLEMODE | SYSC_HAS_CLOCKACTIVITY |
123                                 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
124                                 SYSC_HAS_EMUFREE | SYSC_HAS_AUTOIDLE),
125         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
126         .sysc_fields    = &omap_hwmod_sysc_type1,
127 };
128
129 static struct omap_hwmod_class omap3xxx_timer_1ms_hwmod_class = {
130         .name = "timer",
131         .sysc = &omap3xxx_timer_1ms_sysc,
132 };
133
134 static struct omap_hwmod_class_sysconfig omap3xxx_timer_sysc = {
135         .rev_offs       = 0x0000,
136         .sysc_offs      = 0x0010,
137         .syss_offs      = 0x0014,
138         .sysc_flags     = (SYSC_HAS_SIDLEMODE | SYSC_HAS_ENAWAKEUP |
139                            SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
140         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
141         .sysc_fields    = &omap_hwmod_sysc_type1,
142 };
143
144 static struct omap_hwmod_class omap3xxx_timer_hwmod_class = {
145         .name = "timer",
146         .sysc = &omap3xxx_timer_sysc,
147 };
148
149 /* secure timers dev attribute */
150 static struct omap_timer_capability_dev_attr capability_secure_dev_attr = {
151         .timer_capability       = OMAP_TIMER_ALWON | OMAP_TIMER_SECURE,
152 };
153
154 /* always-on timers dev attribute */
155 static struct omap_timer_capability_dev_attr capability_alwon_dev_attr = {
156         .timer_capability       = OMAP_TIMER_ALWON,
157 };
158
159 /* pwm timers dev attribute */
160 static struct omap_timer_capability_dev_attr capability_pwm_dev_attr = {
161         .timer_capability       = OMAP_TIMER_HAS_PWM,
162 };
163
164 /* timer1 */
165 static struct omap_hwmod omap3xxx_timer1_hwmod = {
166         .name           = "timer1",
167         .mpu_irqs       = omap2_timer1_mpu_irqs,
168         .main_clk       = "gpt1_fck",
169         .prcm           = {
170                 .omap2 = {
171                         .prcm_reg_id = 1,
172                         .module_bit = OMAP3430_EN_GPT1_SHIFT,
173                         .module_offs = WKUP_MOD,
174                         .idlest_reg_id = 1,
175                         .idlest_idle_bit = OMAP3430_ST_GPT1_SHIFT,
176                 },
177         },
178         .dev_attr       = &capability_alwon_dev_attr,
179         .class          = &omap3xxx_timer_1ms_hwmod_class,
180 };
181
182 /* timer2 */
183 static struct omap_hwmod omap3xxx_timer2_hwmod = {
184         .name           = "timer2",
185         .mpu_irqs       = omap2_timer2_mpu_irqs,
186         .main_clk       = "gpt2_fck",
187         .prcm           = {
188                 .omap2 = {
189                         .prcm_reg_id = 1,
190                         .module_bit = OMAP3430_EN_GPT2_SHIFT,
191                         .module_offs = OMAP3430_PER_MOD,
192                         .idlest_reg_id = 1,
193                         .idlest_idle_bit = OMAP3430_ST_GPT2_SHIFT,
194                 },
195         },
196         .class          = &omap3xxx_timer_1ms_hwmod_class,
197 };
198
199 /* timer3 */
200 static struct omap_hwmod omap3xxx_timer3_hwmod = {
201         .name           = "timer3",
202         .mpu_irqs       = omap2_timer3_mpu_irqs,
203         .main_clk       = "gpt3_fck",
204         .prcm           = {
205                 .omap2 = {
206                         .prcm_reg_id = 1,
207                         .module_bit = OMAP3430_EN_GPT3_SHIFT,
208                         .module_offs = OMAP3430_PER_MOD,
209                         .idlest_reg_id = 1,
210                         .idlest_idle_bit = OMAP3430_ST_GPT3_SHIFT,
211                 },
212         },
213         .class          = &omap3xxx_timer_hwmod_class,
214 };
215
216 /* timer4 */
217 static struct omap_hwmod omap3xxx_timer4_hwmod = {
218         .name           = "timer4",
219         .mpu_irqs       = omap2_timer4_mpu_irqs,
220         .main_clk       = "gpt4_fck",
221         .prcm           = {
222                 .omap2 = {
223                         .prcm_reg_id = 1,
224                         .module_bit = OMAP3430_EN_GPT4_SHIFT,
225                         .module_offs = OMAP3430_PER_MOD,
226                         .idlest_reg_id = 1,
227                         .idlest_idle_bit = OMAP3430_ST_GPT4_SHIFT,
228                 },
229         },
230         .class          = &omap3xxx_timer_hwmod_class,
231 };
232
233 /* timer5 */
234 static struct omap_hwmod omap3xxx_timer5_hwmod = {
235         .name           = "timer5",
236         .mpu_irqs       = omap2_timer5_mpu_irqs,
237         .main_clk       = "gpt5_fck",
238         .prcm           = {
239                 .omap2 = {
240                         .prcm_reg_id = 1,
241                         .module_bit = OMAP3430_EN_GPT5_SHIFT,
242                         .module_offs = OMAP3430_PER_MOD,
243                         .idlest_reg_id = 1,
244                         .idlest_idle_bit = OMAP3430_ST_GPT5_SHIFT,
245                 },
246         },
247         .class          = &omap3xxx_timer_hwmod_class,
248 };
249
250 /* timer6 */
251 static struct omap_hwmod omap3xxx_timer6_hwmod = {
252         .name           = "timer6",
253         .mpu_irqs       = omap2_timer6_mpu_irqs,
254         .main_clk       = "gpt6_fck",
255         .prcm           = {
256                 .omap2 = {
257                         .prcm_reg_id = 1,
258                         .module_bit = OMAP3430_EN_GPT6_SHIFT,
259                         .module_offs = OMAP3430_PER_MOD,
260                         .idlest_reg_id = 1,
261                         .idlest_idle_bit = OMAP3430_ST_GPT6_SHIFT,
262                 },
263         },
264         .class          = &omap3xxx_timer_hwmod_class,
265 };
266
267 /* timer7 */
268 static struct omap_hwmod omap3xxx_timer7_hwmod = {
269         .name           = "timer7",
270         .mpu_irqs       = omap2_timer7_mpu_irqs,
271         .main_clk       = "gpt7_fck",
272         .prcm           = {
273                 .omap2 = {
274                         .prcm_reg_id = 1,
275                         .module_bit = OMAP3430_EN_GPT7_SHIFT,
276                         .module_offs = OMAP3430_PER_MOD,
277                         .idlest_reg_id = 1,
278                         .idlest_idle_bit = OMAP3430_ST_GPT7_SHIFT,
279                 },
280         },
281         .class          = &omap3xxx_timer_hwmod_class,
282 };
283
284 /* timer8 */
285 static struct omap_hwmod omap3xxx_timer8_hwmod = {
286         .name           = "timer8",
287         .mpu_irqs       = omap2_timer8_mpu_irqs,
288         .main_clk       = "gpt8_fck",
289         .prcm           = {
290                 .omap2 = {
291                         .prcm_reg_id = 1,
292                         .module_bit = OMAP3430_EN_GPT8_SHIFT,
293                         .module_offs = OMAP3430_PER_MOD,
294                         .idlest_reg_id = 1,
295                         .idlest_idle_bit = OMAP3430_ST_GPT8_SHIFT,
296                 },
297         },
298         .dev_attr       = &capability_pwm_dev_attr,
299         .class          = &omap3xxx_timer_hwmod_class,
300 };
301
302 /* timer9 */
303 static struct omap_hwmod omap3xxx_timer9_hwmod = {
304         .name           = "timer9",
305         .mpu_irqs       = omap2_timer9_mpu_irqs,
306         .main_clk       = "gpt9_fck",
307         .prcm           = {
308                 .omap2 = {
309                         .prcm_reg_id = 1,
310                         .module_bit = OMAP3430_EN_GPT9_SHIFT,
311                         .module_offs = OMAP3430_PER_MOD,
312                         .idlest_reg_id = 1,
313                         .idlest_idle_bit = OMAP3430_ST_GPT9_SHIFT,
314                 },
315         },
316         .dev_attr       = &capability_pwm_dev_attr,
317         .class          = &omap3xxx_timer_hwmod_class,
318 };
319
320 /* timer10 */
321 static struct omap_hwmod omap3xxx_timer10_hwmod = {
322         .name           = "timer10",
323         .mpu_irqs       = omap2_timer10_mpu_irqs,
324         .main_clk       = "gpt10_fck",
325         .prcm           = {
326                 .omap2 = {
327                         .prcm_reg_id = 1,
328                         .module_bit = OMAP3430_EN_GPT10_SHIFT,
329                         .module_offs = CORE_MOD,
330                         .idlest_reg_id = 1,
331                         .idlest_idle_bit = OMAP3430_ST_GPT10_SHIFT,
332                 },
333         },
334         .dev_attr       = &capability_pwm_dev_attr,
335         .class          = &omap3xxx_timer_1ms_hwmod_class,
336 };
337
338 /* timer11 */
339 static struct omap_hwmod omap3xxx_timer11_hwmod = {
340         .name           = "timer11",
341         .mpu_irqs       = omap2_timer11_mpu_irqs,
342         .main_clk       = "gpt11_fck",
343         .prcm           = {
344                 .omap2 = {
345                         .prcm_reg_id = 1,
346                         .module_bit = OMAP3430_EN_GPT11_SHIFT,
347                         .module_offs = CORE_MOD,
348                         .idlest_reg_id = 1,
349                         .idlest_idle_bit = OMAP3430_ST_GPT11_SHIFT,
350                 },
351         },
352         .dev_attr       = &capability_pwm_dev_attr,
353         .class          = &omap3xxx_timer_hwmod_class,
354 };
355
356 /* timer12 */
357 static struct omap_hwmod_irq_info omap3xxx_timer12_mpu_irqs[] = {
358         { .irq = 95, },
359         { .irq = -1 }
360 };
361
362 static struct omap_hwmod omap3xxx_timer12_hwmod = {
363         .name           = "timer12",
364         .mpu_irqs       = omap3xxx_timer12_mpu_irqs,
365         .main_clk       = "gpt12_fck",
366         .prcm           = {
367                 .omap2 = {
368                         .prcm_reg_id = 1,
369                         .module_bit = OMAP3430_EN_GPT12_SHIFT,
370                         .module_offs = WKUP_MOD,
371                         .idlest_reg_id = 1,
372                         .idlest_idle_bit = OMAP3430_ST_GPT12_SHIFT,
373                 },
374         },
375         .dev_attr       = &capability_secure_dev_attr,
376         .class          = &omap3xxx_timer_hwmod_class,
377 };
378
379 /*
380  * 'wd_timer' class
381  * 32-bit watchdog upward counter that generates a pulse on the reset pin on
382  * overflow condition
383  */
384
385 static struct omap_hwmod_class_sysconfig omap3xxx_wd_timer_sysc = {
386         .rev_offs       = 0x0000,
387         .sysc_offs      = 0x0010,
388         .syss_offs      = 0x0014,
389         .sysc_flags     = (SYSC_HAS_SIDLEMODE | SYSC_HAS_EMUFREE |
390                            SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
391                            SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
392                            SYSS_HAS_RESET_STATUS),
393         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
394         .sysc_fields    = &omap_hwmod_sysc_type1,
395 };
396
397 /* I2C common */
398 static struct omap_hwmod_class_sysconfig i2c_sysc = {
399         .rev_offs       = 0x00,
400         .sysc_offs      = 0x20,
401         .syss_offs      = 0x10,
402         .sysc_flags     = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
403                            SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
404                            SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
405         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
406         .clockact       = CLOCKACT_TEST_ICLK,
407         .sysc_fields    = &omap_hwmod_sysc_type1,
408 };
409
410 static struct omap_hwmod_class omap3xxx_wd_timer_hwmod_class = {
411         .name           = "wd_timer",
412         .sysc           = &omap3xxx_wd_timer_sysc,
413         .pre_shutdown   = &omap2_wd_timer_disable,
414         .reset          = &omap2_wd_timer_reset,
415 };
416
417 static struct omap_hwmod omap3xxx_wd_timer2_hwmod = {
418         .name           = "wd_timer2",
419         .class          = &omap3xxx_wd_timer_hwmod_class,
420         .main_clk       = "wdt2_fck",
421         .prcm           = {
422                 .omap2 = {
423                         .prcm_reg_id = 1,
424                         .module_bit = OMAP3430_EN_WDT2_SHIFT,
425                         .module_offs = WKUP_MOD,
426                         .idlest_reg_id = 1,
427                         .idlest_idle_bit = OMAP3430_ST_WDT2_SHIFT,
428                 },
429         },
430         /*
431          * XXX: Use software supervised mode, HW supervised smartidle seems to
432          * block CORE power domain idle transitions. Maybe a HW bug in wdt2?
433          */
434         .flags          = HWMOD_SWSUP_SIDLE,
435 };
436
437 /* UART1 */
438 static struct omap_hwmod omap3xxx_uart1_hwmod = {
439         .name           = "uart1",
440         .mpu_irqs       = omap2_uart1_mpu_irqs,
441         .sdma_reqs      = omap2_uart1_sdma_reqs,
442         .main_clk       = "uart1_fck",
443         .prcm           = {
444                 .omap2 = {
445                         .module_offs = CORE_MOD,
446                         .prcm_reg_id = 1,
447                         .module_bit = OMAP3430_EN_UART1_SHIFT,
448                         .idlest_reg_id = 1,
449                         .idlest_idle_bit = OMAP3430_EN_UART1_SHIFT,
450                 },
451         },
452         .class          = &omap2_uart_class,
453 };
454
455 /* UART2 */
456 static struct omap_hwmod omap3xxx_uart2_hwmod = {
457         .name           = "uart2",
458         .mpu_irqs       = omap2_uart2_mpu_irqs,
459         .sdma_reqs      = omap2_uart2_sdma_reqs,
460         .main_clk       = "uart2_fck",
461         .prcm           = {
462                 .omap2 = {
463                         .module_offs = CORE_MOD,
464                         .prcm_reg_id = 1,
465                         .module_bit = OMAP3430_EN_UART2_SHIFT,
466                         .idlest_reg_id = 1,
467                         .idlest_idle_bit = OMAP3430_EN_UART2_SHIFT,
468                 },
469         },
470         .class          = &omap2_uart_class,
471 };
472
473 /* UART3 */
474 static struct omap_hwmod omap3xxx_uart3_hwmod = {
475         .name           = "uart3",
476         .mpu_irqs       = omap2_uart3_mpu_irqs,
477         .sdma_reqs      = omap2_uart3_sdma_reqs,
478         .main_clk       = "uart3_fck",
479         .prcm           = {
480                 .omap2 = {
481                         .module_offs = OMAP3430_PER_MOD,
482                         .prcm_reg_id = 1,
483                         .module_bit = OMAP3430_EN_UART3_SHIFT,
484                         .idlest_reg_id = 1,
485                         .idlest_idle_bit = OMAP3430_EN_UART3_SHIFT,
486                 },
487         },
488         .class          = &omap2_uart_class,
489 };
490
491 /* UART4 */
492 static struct omap_hwmod_irq_info uart4_mpu_irqs[] = {
493         { .irq = INT_36XX_UART4_IRQ, },
494         { .irq = -1 }
495 };
496
497 static struct omap_hwmod_dma_info uart4_sdma_reqs[] = {
498         { .name = "rx", .dma_req = OMAP36XX_DMA_UART4_RX, },
499         { .name = "tx", .dma_req = OMAP36XX_DMA_UART4_TX, },
500         { .dma_req = -1 }
501 };
502
503 static struct omap_hwmod omap36xx_uart4_hwmod = {
504         .name           = "uart4",
505         .mpu_irqs       = uart4_mpu_irqs,
506         .sdma_reqs      = uart4_sdma_reqs,
507         .main_clk       = "uart4_fck",
508         .prcm           = {
509                 .omap2 = {
510                         .module_offs = OMAP3430_PER_MOD,
511                         .prcm_reg_id = 1,
512                         .module_bit = OMAP3630_EN_UART4_SHIFT,
513                         .idlest_reg_id = 1,
514                         .idlest_idle_bit = OMAP3630_EN_UART4_SHIFT,
515                 },
516         },
517         .class          = &omap2_uart_class,
518 };
519
520 static struct omap_hwmod_irq_info am35xx_uart4_mpu_irqs[] = {
521         { .irq = INT_35XX_UART4_IRQ, },
522         { .irq = -1 }
523 };
524
525 static struct omap_hwmod_dma_info am35xx_uart4_sdma_reqs[] = {
526         { .name = "rx", .dma_req = AM35XX_DMA_UART4_RX, },
527         { .name = "tx", .dma_req = AM35XX_DMA_UART4_TX, },
528         { .dma_req = -1 }
529 };
530
531 /*
532  * XXX AM35xx UART4 cannot complete its softreset without uart1_fck or
533  * uart2_fck being enabled.  So we add uart1_fck as an optional clock,
534  * below, and set the HWMOD_CONTROL_OPT_CLKS_IN_RESET.  This really
535  * should not be needed.  The functional clock structure of the AM35xx
536  * UART4 is extremely unclear and opaque; it is unclear what the role
537  * of uart1/2_fck is for the UART4.  Any clarification from either
538  * empirical testing or the AM3505/3517 hardware designers would be
539  * most welcome.
540  */
541 static struct omap_hwmod_opt_clk am35xx_uart4_opt_clks[] = {
542         { .role = "softreset_uart1_fck", .clk = "uart1_fck" },
543 };
544
545 static struct omap_hwmod am35xx_uart4_hwmod = {
546         .name           = "uart4",
547         .mpu_irqs       = am35xx_uart4_mpu_irqs,
548         .sdma_reqs      = am35xx_uart4_sdma_reqs,
549         .main_clk       = "uart4_fck",
550         .prcm           = {
551                 .omap2 = {
552                         .module_offs = CORE_MOD,
553                         .prcm_reg_id = 1,
554                         .module_bit = AM35XX_EN_UART4_SHIFT,
555                         .idlest_reg_id = 1,
556                         .idlest_idle_bit = AM35XX_ST_UART4_SHIFT,
557                 },
558         },
559         .opt_clks       = am35xx_uart4_opt_clks,
560         .opt_clks_cnt   = ARRAY_SIZE(am35xx_uart4_opt_clks),
561         .flags          = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
562         .class          = &omap2_uart_class,
563 };
564
565 static struct omap_hwmod_class i2c_class = {
566         .name   = "i2c",
567         .sysc   = &i2c_sysc,
568         .rev    = OMAP_I2C_IP_VERSION_1,
569         .reset  = &omap_i2c_reset,
570 };
571
572 static struct omap_hwmod_dma_info omap3xxx_dss_sdma_chs[] = {
573         { .name = "dispc", .dma_req = 5 },
574         { .name = "dsi1", .dma_req = 74 },
575         { .dma_req = -1 }
576 };
577
578 /* dss */
579 static struct omap_hwmod_opt_clk dss_opt_clks[] = {
580         /*
581          * The DSS HW needs all DSS clocks enabled during reset. The dss_core
582          * driver does not use these clocks.
583          */
584         { .role = "sys_clk", .clk = "dss2_alwon_fck" },
585         { .role = "tv_clk", .clk = "dss_tv_fck" },
586         /* required only on OMAP3430 */
587         { .role = "tv_dac_clk", .clk = "dss_96m_fck" },
588 };
589
590 static struct omap_hwmod omap3430es1_dss_core_hwmod = {
591         .name           = "dss_core",
592         .class          = &omap2_dss_hwmod_class,
593         .main_clk       = "dss1_alwon_fck", /* instead of dss_fck */
594         .sdma_reqs      = omap3xxx_dss_sdma_chs,
595         .prcm           = {
596                 .omap2 = {
597                         .prcm_reg_id = 1,
598                         .module_bit = OMAP3430_EN_DSS1_SHIFT,
599                         .module_offs = OMAP3430_DSS_MOD,
600                         .idlest_reg_id = 1,
601                         .idlest_stdby_bit = OMAP3430ES1_ST_DSS_SHIFT,
602                 },
603         },
604         .opt_clks       = dss_opt_clks,
605         .opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
606         .flags          = HWMOD_NO_IDLEST | HWMOD_CONTROL_OPT_CLKS_IN_RESET,
607 };
608
609 static struct omap_hwmod omap3xxx_dss_core_hwmod = {
610         .name           = "dss_core",
611         .flags          = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
612         .class          = &omap2_dss_hwmod_class,
613         .main_clk       = "dss1_alwon_fck", /* instead of dss_fck */
614         .sdma_reqs      = omap3xxx_dss_sdma_chs,
615         .prcm           = {
616                 .omap2 = {
617                         .prcm_reg_id = 1,
618                         .module_bit = OMAP3430_EN_DSS1_SHIFT,
619                         .module_offs = OMAP3430_DSS_MOD,
620                         .idlest_reg_id = 1,
621                         .idlest_idle_bit = OMAP3430ES2_ST_DSS_IDLE_SHIFT,
622                         .idlest_stdby_bit = OMAP3430ES2_ST_DSS_STDBY_SHIFT,
623                 },
624         },
625         .opt_clks       = dss_opt_clks,
626         .opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
627 };
628
629 /*
630  * 'dispc' class
631  * display controller
632  */
633
634 static struct omap_hwmod_class_sysconfig omap3_dispc_sysc = {
635         .rev_offs       = 0x0000,
636         .sysc_offs      = 0x0010,
637         .syss_offs      = 0x0014,
638         .sysc_flags     = (SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE |
639                            SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
640                            SYSC_HAS_ENAWAKEUP),
641         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
642                            MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
643         .sysc_fields    = &omap_hwmod_sysc_type1,
644 };
645
646 static struct omap_hwmod_class omap3_dispc_hwmod_class = {
647         .name   = "dispc",
648         .sysc   = &omap3_dispc_sysc,
649 };
650
651 static struct omap_hwmod omap3xxx_dss_dispc_hwmod = {
652         .name           = "dss_dispc",
653         .class          = &omap3_dispc_hwmod_class,
654         .mpu_irqs       = omap2_dispc_irqs,
655         .main_clk       = "dss1_alwon_fck",
656         .prcm           = {
657                 .omap2 = {
658                         .prcm_reg_id = 1,
659                         .module_bit = OMAP3430_EN_DSS1_SHIFT,
660                         .module_offs = OMAP3430_DSS_MOD,
661                 },
662         },
663         .flags          = HWMOD_NO_IDLEST,
664         .dev_attr       = &omap2_3_dss_dispc_dev_attr
665 };
666
667 /*
668  * 'dsi' class
669  * display serial interface controller
670  */
671
672 static struct omap_hwmod_class omap3xxx_dsi_hwmod_class = {
673         .name = "dsi",
674 };
675
676 static struct omap_hwmod_irq_info omap3xxx_dsi1_irqs[] = {
677         { .irq = 25 },
678         { .irq = -1 }
679 };
680
681 /* dss_dsi1 */
682 static struct omap_hwmod_opt_clk dss_dsi1_opt_clks[] = {
683         { .role = "sys_clk", .clk = "dss2_alwon_fck" },
684 };
685
686 static struct omap_hwmod omap3xxx_dss_dsi1_hwmod = {
687         .name           = "dss_dsi1",
688         .class          = &omap3xxx_dsi_hwmod_class,
689         .mpu_irqs       = omap3xxx_dsi1_irqs,
690         .main_clk       = "dss1_alwon_fck",
691         .prcm           = {
692                 .omap2 = {
693                         .prcm_reg_id = 1,
694                         .module_bit = OMAP3430_EN_DSS1_SHIFT,
695                         .module_offs = OMAP3430_DSS_MOD,
696                 },
697         },
698         .opt_clks       = dss_dsi1_opt_clks,
699         .opt_clks_cnt   = ARRAY_SIZE(dss_dsi1_opt_clks),
700         .flags          = HWMOD_NO_IDLEST,
701 };
702
703 static struct omap_hwmod_opt_clk dss_rfbi_opt_clks[] = {
704         { .role = "ick", .clk = "dss_ick" },
705 };
706
707 static struct omap_hwmod omap3xxx_dss_rfbi_hwmod = {
708         .name           = "dss_rfbi",
709         .class          = &omap2_rfbi_hwmod_class,
710         .main_clk       = "dss1_alwon_fck",
711         .prcm           = {
712                 .omap2 = {
713                         .prcm_reg_id = 1,
714                         .module_bit = OMAP3430_EN_DSS1_SHIFT,
715                         .module_offs = OMAP3430_DSS_MOD,
716                 },
717         },
718         .opt_clks       = dss_rfbi_opt_clks,
719         .opt_clks_cnt   = ARRAY_SIZE(dss_rfbi_opt_clks),
720         .flags          = HWMOD_NO_IDLEST,
721 };
722
723 static struct omap_hwmod_opt_clk dss_venc_opt_clks[] = {
724         /* required only on OMAP3430 */
725         { .role = "tv_dac_clk", .clk = "dss_96m_fck" },
726 };
727
728 static struct omap_hwmod omap3xxx_dss_venc_hwmod = {
729         .name           = "dss_venc",
730         .class          = &omap2_venc_hwmod_class,
731         .main_clk       = "dss_tv_fck",
732         .prcm           = {
733                 .omap2 = {
734                         .prcm_reg_id = 1,
735                         .module_bit = OMAP3430_EN_DSS1_SHIFT,
736                         .module_offs = OMAP3430_DSS_MOD,
737                 },
738         },
739         .opt_clks       = dss_venc_opt_clks,
740         .opt_clks_cnt   = ARRAY_SIZE(dss_venc_opt_clks),
741         .flags          = HWMOD_NO_IDLEST,
742 };
743
744 /* I2C1 */
745 static struct omap_i2c_dev_attr i2c1_dev_attr = {
746         .fifo_depth     = 8, /* bytes */
747         .flags          = OMAP_I2C_FLAG_APPLY_ERRATA_I207 |
748                           OMAP_I2C_FLAG_RESET_REGS_POSTIDLE |
749                           OMAP_I2C_FLAG_BUS_SHIFT_2,
750 };
751
752 static struct omap_hwmod omap3xxx_i2c1_hwmod = {
753         .name           = "i2c1",
754         .flags          = HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
755         .mpu_irqs       = omap2_i2c1_mpu_irqs,
756         .sdma_reqs      = omap2_i2c1_sdma_reqs,
757         .main_clk       = "i2c1_fck",
758         .prcm           = {
759                 .omap2 = {
760                         .module_offs = CORE_MOD,
761                         .prcm_reg_id = 1,
762                         .module_bit = OMAP3430_EN_I2C1_SHIFT,
763                         .idlest_reg_id = 1,
764                         .idlest_idle_bit = OMAP3430_ST_I2C1_SHIFT,
765                 },
766         },
767         .class          = &i2c_class,
768         .dev_attr       = &i2c1_dev_attr,
769 };
770
771 /* I2C2 */
772 static struct omap_i2c_dev_attr i2c2_dev_attr = {
773         .fifo_depth     = 8, /* bytes */
774         .flags = OMAP_I2C_FLAG_APPLY_ERRATA_I207 |
775                  OMAP_I2C_FLAG_RESET_REGS_POSTIDLE |
776                  OMAP_I2C_FLAG_BUS_SHIFT_2,
777 };
778
779 static struct omap_hwmod omap3xxx_i2c2_hwmod = {
780         .name           = "i2c2",
781         .flags          = HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
782         .mpu_irqs       = omap2_i2c2_mpu_irqs,
783         .sdma_reqs      = omap2_i2c2_sdma_reqs,
784         .main_clk       = "i2c2_fck",
785         .prcm           = {
786                 .omap2 = {
787                         .module_offs = CORE_MOD,
788                         .prcm_reg_id = 1,
789                         .module_bit = OMAP3430_EN_I2C2_SHIFT,
790                         .idlest_reg_id = 1,
791                         .idlest_idle_bit = OMAP3430_ST_I2C2_SHIFT,
792                 },
793         },
794         .class          = &i2c_class,
795         .dev_attr       = &i2c2_dev_attr,
796 };
797
798 /* I2C3 */
799 static struct omap_i2c_dev_attr i2c3_dev_attr = {
800         .fifo_depth     = 64, /* bytes */
801         .flags = OMAP_I2C_FLAG_APPLY_ERRATA_I207 |
802                  OMAP_I2C_FLAG_RESET_REGS_POSTIDLE |
803                  OMAP_I2C_FLAG_BUS_SHIFT_2,
804 };
805
806 static struct omap_hwmod_irq_info i2c3_mpu_irqs[] = {
807         { .irq = INT_34XX_I2C3_IRQ, },
808         { .irq = -1 }
809 };
810
811 static struct omap_hwmod_dma_info i2c3_sdma_reqs[] = {
812         { .name = "tx", .dma_req = OMAP34XX_DMA_I2C3_TX },
813         { .name = "rx", .dma_req = OMAP34XX_DMA_I2C3_RX },
814         { .dma_req = -1 }
815 };
816
817 static struct omap_hwmod omap3xxx_i2c3_hwmod = {
818         .name           = "i2c3",
819         .flags          = HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
820         .mpu_irqs       = i2c3_mpu_irqs,
821         .sdma_reqs      = i2c3_sdma_reqs,
822         .main_clk       = "i2c3_fck",
823         .prcm           = {
824                 .omap2 = {
825                         .module_offs = CORE_MOD,
826                         .prcm_reg_id = 1,
827                         .module_bit = OMAP3430_EN_I2C3_SHIFT,
828                         .idlest_reg_id = 1,
829                         .idlest_idle_bit = OMAP3430_ST_I2C3_SHIFT,
830                 },
831         },
832         .class          = &i2c_class,
833         .dev_attr       = &i2c3_dev_attr,
834 };
835
836 /*
837  * 'gpio' class
838  * general purpose io module
839  */
840
841 static struct omap_hwmod_class_sysconfig omap3xxx_gpio_sysc = {
842         .rev_offs       = 0x0000,
843         .sysc_offs      = 0x0010,
844         .syss_offs      = 0x0014,
845         .sysc_flags     = (SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
846                            SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
847                            SYSS_HAS_RESET_STATUS),
848         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
849         .sysc_fields    = &omap_hwmod_sysc_type1,
850 };
851
852 static struct omap_hwmod_class omap3xxx_gpio_hwmod_class = {
853         .name = "gpio",
854         .sysc = &omap3xxx_gpio_sysc,
855         .rev = 1,
856 };
857
858 /* gpio_dev_attr */
859 static struct omap_gpio_dev_attr gpio_dev_attr = {
860         .bank_width = 32,
861         .dbck_flag = true,
862 };
863
864 /* gpio1 */
865 static struct omap_hwmod_opt_clk gpio1_opt_clks[] = {
866         { .role = "dbclk", .clk = "gpio1_dbck", },
867 };
868
869 static struct omap_hwmod omap3xxx_gpio1_hwmod = {
870         .name           = "gpio1",
871         .flags          = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
872         .mpu_irqs       = omap2_gpio1_irqs,
873         .main_clk       = "gpio1_ick",
874         .opt_clks       = gpio1_opt_clks,
875         .opt_clks_cnt   = ARRAY_SIZE(gpio1_opt_clks),
876         .prcm           = {
877                 .omap2 = {
878                         .prcm_reg_id = 1,
879                         .module_bit = OMAP3430_EN_GPIO1_SHIFT,
880                         .module_offs = WKUP_MOD,
881                         .idlest_reg_id = 1,
882                         .idlest_idle_bit = OMAP3430_ST_GPIO1_SHIFT,
883                 },
884         },
885         .class          = &omap3xxx_gpio_hwmod_class,
886         .dev_attr       = &gpio_dev_attr,
887 };
888
889 /* gpio2 */
890 static struct omap_hwmod_opt_clk gpio2_opt_clks[] = {
891         { .role = "dbclk", .clk = "gpio2_dbck", },
892 };
893
894 static struct omap_hwmod omap3xxx_gpio2_hwmod = {
895         .name           = "gpio2",
896         .flags          = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
897         .mpu_irqs       = omap2_gpio2_irqs,
898         .main_clk       = "gpio2_ick",
899         .opt_clks       = gpio2_opt_clks,
900         .opt_clks_cnt   = ARRAY_SIZE(gpio2_opt_clks),
901         .prcm           = {
902                 .omap2 = {
903                         .prcm_reg_id = 1,
904                         .module_bit = OMAP3430_EN_GPIO2_SHIFT,
905                         .module_offs = OMAP3430_PER_MOD,
906                         .idlest_reg_id = 1,
907                         .idlest_idle_bit = OMAP3430_ST_GPIO2_SHIFT,
908                 },
909         },
910         .class          = &omap3xxx_gpio_hwmod_class,
911         .dev_attr       = &gpio_dev_attr,
912 };
913
914 /* gpio3 */
915 static struct omap_hwmod_opt_clk gpio3_opt_clks[] = {
916         { .role = "dbclk", .clk = "gpio3_dbck", },
917 };
918
919 static struct omap_hwmod omap3xxx_gpio3_hwmod = {
920         .name           = "gpio3",
921         .flags          = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
922         .mpu_irqs       = omap2_gpio3_irqs,
923         .main_clk       = "gpio3_ick",
924         .opt_clks       = gpio3_opt_clks,
925         .opt_clks_cnt   = ARRAY_SIZE(gpio3_opt_clks),
926         .prcm           = {
927                 .omap2 = {
928                         .prcm_reg_id = 1,
929                         .module_bit = OMAP3430_EN_GPIO3_SHIFT,
930                         .module_offs = OMAP3430_PER_MOD,
931                         .idlest_reg_id = 1,
932                         .idlest_idle_bit = OMAP3430_ST_GPIO3_SHIFT,
933                 },
934         },
935         .class          = &omap3xxx_gpio_hwmod_class,
936         .dev_attr       = &gpio_dev_attr,
937 };
938
939 /* gpio4 */
940 static struct omap_hwmod_opt_clk gpio4_opt_clks[] = {
941         { .role = "dbclk", .clk = "gpio4_dbck", },
942 };
943
944 static struct omap_hwmod omap3xxx_gpio4_hwmod = {
945         .name           = "gpio4",
946         .flags          = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
947         .mpu_irqs       = omap2_gpio4_irqs,
948         .main_clk       = "gpio4_ick",
949         .opt_clks       = gpio4_opt_clks,
950         .opt_clks_cnt   = ARRAY_SIZE(gpio4_opt_clks),
951         .prcm           = {
952                 .omap2 = {
953                         .prcm_reg_id = 1,
954                         .module_bit = OMAP3430_EN_GPIO4_SHIFT,
955                         .module_offs = OMAP3430_PER_MOD,
956                         .idlest_reg_id = 1,
957                         .idlest_idle_bit = OMAP3430_ST_GPIO4_SHIFT,
958                 },
959         },
960         .class          = &omap3xxx_gpio_hwmod_class,
961         .dev_attr       = &gpio_dev_attr,
962 };
963
964 /* gpio5 */
965 static struct omap_hwmod_irq_info omap3xxx_gpio5_irqs[] = {
966         { .irq = 33 }, /* INT_34XX_GPIO_BANK5 */
967         { .irq = -1 }
968 };
969
970 static struct omap_hwmod_opt_clk gpio5_opt_clks[] = {
971         { .role = "dbclk", .clk = "gpio5_dbck", },
972 };
973
974 static struct omap_hwmod omap3xxx_gpio5_hwmod = {
975         .name           = "gpio5",
976         .flags          = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
977         .mpu_irqs       = omap3xxx_gpio5_irqs,
978         .main_clk       = "gpio5_ick",
979         .opt_clks       = gpio5_opt_clks,
980         .opt_clks_cnt   = ARRAY_SIZE(gpio5_opt_clks),
981         .prcm           = {
982                 .omap2 = {
983                         .prcm_reg_id = 1,
984                         .module_bit = OMAP3430_EN_GPIO5_SHIFT,
985                         .module_offs = OMAP3430_PER_MOD,
986                         .idlest_reg_id = 1,
987                         .idlest_idle_bit = OMAP3430_ST_GPIO5_SHIFT,
988                 },
989         },
990         .class          = &omap3xxx_gpio_hwmod_class,
991         .dev_attr       = &gpio_dev_attr,
992 };
993
994 /* gpio6 */
995 static struct omap_hwmod_irq_info omap3xxx_gpio6_irqs[] = {
996         { .irq = 34 }, /* INT_34XX_GPIO_BANK6 */
997         { .irq = -1 }
998 };
999
1000 static struct omap_hwmod_opt_clk gpio6_opt_clks[] = {
1001         { .role = "dbclk", .clk = "gpio6_dbck", },
1002 };
1003
1004 static struct omap_hwmod omap3xxx_gpio6_hwmod = {
1005         .name           = "gpio6",
1006         .flags          = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
1007         .mpu_irqs       = omap3xxx_gpio6_irqs,
1008         .main_clk       = "gpio6_ick",
1009         .opt_clks       = gpio6_opt_clks,
1010         .opt_clks_cnt   = ARRAY_SIZE(gpio6_opt_clks),
1011         .prcm           = {
1012                 .omap2 = {
1013                         .prcm_reg_id = 1,
1014                         .module_bit = OMAP3430_EN_GPIO6_SHIFT,
1015                         .module_offs = OMAP3430_PER_MOD,
1016                         .idlest_reg_id = 1,
1017                         .idlest_idle_bit = OMAP3430_ST_GPIO6_SHIFT,
1018                 },
1019         },
1020         .class          = &omap3xxx_gpio_hwmod_class,
1021         .dev_attr       = &gpio_dev_attr,
1022 };
1023
1024 /* dma attributes */
1025 static struct omap_dma_dev_attr dma_dev_attr = {
1026         .dev_caps  = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY |
1027                                 IS_CSSA_32 | IS_CDSA_32 | IS_RW_PRIORITY,
1028         .lch_count = 32,
1029 };
1030
1031 static struct omap_hwmod_class_sysconfig omap3xxx_dma_sysc = {
1032         .rev_offs       = 0x0000,
1033         .sysc_offs      = 0x002c,
1034         .syss_offs      = 0x0028,
1035         .sysc_flags     = (SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
1036                            SYSC_HAS_MIDLEMODE | SYSC_HAS_CLOCKACTIVITY |
1037                            SYSC_HAS_EMUFREE | SYSC_HAS_AUTOIDLE |
1038                            SYSS_HAS_RESET_STATUS),
1039         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1040                            MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
1041         .sysc_fields    = &omap_hwmod_sysc_type1,
1042 };
1043
1044 static struct omap_hwmod_class omap3xxx_dma_hwmod_class = {
1045         .name = "dma",
1046         .sysc = &omap3xxx_dma_sysc,
1047 };
1048
1049 /* dma_system */
1050 static struct omap_hwmod omap3xxx_dma_system_hwmod = {
1051         .name           = "dma",
1052         .class          = &omap3xxx_dma_hwmod_class,
1053         .mpu_irqs       = omap2_dma_system_irqs,
1054         .main_clk       = "core_l3_ick",
1055         .prcm = {
1056                 .omap2 = {
1057                         .module_offs            = CORE_MOD,
1058                         .prcm_reg_id            = 1,
1059                         .module_bit             = OMAP3430_ST_SDMA_SHIFT,
1060                         .idlest_reg_id          = 1,
1061                         .idlest_idle_bit        = OMAP3430_ST_SDMA_SHIFT,
1062                 },
1063         },
1064         .dev_attr       = &dma_dev_attr,
1065         .flags          = HWMOD_NO_IDLEST,
1066 };
1067
1068 /*
1069  * 'mcbsp' class
1070  * multi channel buffered serial port controller
1071  */
1072
1073 static struct omap_hwmod_class_sysconfig omap3xxx_mcbsp_sysc = {
1074         .sysc_offs      = 0x008c,
1075         .sysc_flags     = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_ENAWAKEUP |
1076                            SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
1077         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1078         .sysc_fields    = &omap_hwmod_sysc_type1,
1079         .clockact       = 0x2,
1080 };
1081
1082 static struct omap_hwmod_class omap3xxx_mcbsp_hwmod_class = {
1083         .name = "mcbsp",
1084         .sysc = &omap3xxx_mcbsp_sysc,
1085         .rev  = MCBSP_CONFIG_TYPE3,
1086 };
1087
1088 /* McBSP functional clock mapping */
1089 static struct omap_hwmod_opt_clk mcbsp15_opt_clks[] = {
1090         { .role = "pad_fck", .clk = "mcbsp_clks" },
1091         { .role = "prcm_fck", .clk = "core_96m_fck" },
1092 };
1093
1094 static struct omap_hwmod_opt_clk mcbsp234_opt_clks[] = {
1095         { .role = "pad_fck", .clk = "mcbsp_clks" },
1096         { .role = "prcm_fck", .clk = "per_96m_fck" },
1097 };
1098
1099 /* mcbsp1 */
1100 static struct omap_hwmod_irq_info omap3xxx_mcbsp1_irqs[] = {
1101         { .name = "common", .irq = 16 },
1102         { .name = "tx", .irq = 59 },
1103         { .name = "rx", .irq = 60 },
1104         { .irq = -1 }
1105 };
1106
1107 static struct omap_hwmod omap3xxx_mcbsp1_hwmod = {
1108         .name           = "mcbsp1",
1109         .class          = &omap3xxx_mcbsp_hwmod_class,
1110         .mpu_irqs       = omap3xxx_mcbsp1_irqs,
1111         .sdma_reqs      = omap2_mcbsp1_sdma_reqs,
1112         .main_clk       = "mcbsp1_fck",
1113         .prcm           = {
1114                 .omap2 = {
1115                         .prcm_reg_id = 1,
1116                         .module_bit = OMAP3430_EN_MCBSP1_SHIFT,
1117                         .module_offs = CORE_MOD,
1118                         .idlest_reg_id = 1,
1119                         .idlest_idle_bit = OMAP3430_ST_MCBSP1_SHIFT,
1120                 },
1121         },
1122         .opt_clks       = mcbsp15_opt_clks,
1123         .opt_clks_cnt   = ARRAY_SIZE(mcbsp15_opt_clks),
1124 };
1125
1126 /* mcbsp2 */
1127 static struct omap_hwmod_irq_info omap3xxx_mcbsp2_irqs[] = {
1128         { .name = "common", .irq = 17 },
1129         { .name = "tx", .irq = 62 },
1130         { .name = "rx", .irq = 63 },
1131         { .irq = -1 }
1132 };
1133
1134 static struct omap_mcbsp_dev_attr omap34xx_mcbsp2_dev_attr = {
1135         .sidetone       = "mcbsp2_sidetone",
1136 };
1137
1138 static struct omap_hwmod omap3xxx_mcbsp2_hwmod = {
1139         .name           = "mcbsp2",
1140         .class          = &omap3xxx_mcbsp_hwmod_class,
1141         .mpu_irqs       = omap3xxx_mcbsp2_irqs,
1142         .sdma_reqs      = omap2_mcbsp2_sdma_reqs,
1143         .main_clk       = "mcbsp2_fck",
1144         .prcm           = {
1145                 .omap2 = {
1146                         .prcm_reg_id = 1,
1147                         .module_bit = OMAP3430_EN_MCBSP2_SHIFT,
1148                         .module_offs = OMAP3430_PER_MOD,
1149                         .idlest_reg_id = 1,
1150                         .idlest_idle_bit = OMAP3430_ST_MCBSP2_SHIFT,
1151                 },
1152         },
1153         .opt_clks       = mcbsp234_opt_clks,
1154         .opt_clks_cnt   = ARRAY_SIZE(mcbsp234_opt_clks),
1155         .dev_attr       = &omap34xx_mcbsp2_dev_attr,
1156 };
1157
1158 /* mcbsp3 */
1159 static struct omap_hwmod_irq_info omap3xxx_mcbsp3_irqs[] = {
1160         { .name = "common", .irq = 22 },
1161         { .name = "tx", .irq = 89 },
1162         { .name = "rx", .irq = 90 },
1163         { .irq = -1 }
1164 };
1165
1166 static struct omap_mcbsp_dev_attr omap34xx_mcbsp3_dev_attr = {
1167         .sidetone       = "mcbsp3_sidetone",
1168 };
1169
1170 static struct omap_hwmod omap3xxx_mcbsp3_hwmod = {
1171         .name           = "mcbsp3",
1172         .class          = &omap3xxx_mcbsp_hwmod_class,
1173         .mpu_irqs       = omap3xxx_mcbsp3_irqs,
1174         .sdma_reqs      = omap2_mcbsp3_sdma_reqs,
1175         .main_clk       = "mcbsp3_fck",
1176         .prcm           = {
1177                 .omap2 = {
1178                         .prcm_reg_id = 1,
1179                         .module_bit = OMAP3430_EN_MCBSP3_SHIFT,
1180                         .module_offs = OMAP3430_PER_MOD,
1181                         .idlest_reg_id = 1,
1182                         .idlest_idle_bit = OMAP3430_ST_MCBSP3_SHIFT,
1183                 },
1184         },
1185         .opt_clks       = mcbsp234_opt_clks,
1186         .opt_clks_cnt   = ARRAY_SIZE(mcbsp234_opt_clks),
1187         .dev_attr       = &omap34xx_mcbsp3_dev_attr,
1188 };
1189
1190 /* mcbsp4 */
1191 static struct omap_hwmod_irq_info omap3xxx_mcbsp4_irqs[] = {
1192         { .name = "common", .irq = 23 },
1193         { .name = "tx", .irq = 54 },
1194         { .name = "rx", .irq = 55 },
1195         { .irq = -1 }
1196 };
1197
1198 static struct omap_hwmod_dma_info omap3xxx_mcbsp4_sdma_chs[] = {
1199         { .name = "rx", .dma_req = 20 },
1200         { .name = "tx", .dma_req = 19 },
1201         { .dma_req = -1 }
1202 };
1203
1204 static struct omap_hwmod omap3xxx_mcbsp4_hwmod = {
1205         .name           = "mcbsp4",
1206         .class          = &omap3xxx_mcbsp_hwmod_class,
1207         .mpu_irqs       = omap3xxx_mcbsp4_irqs,
1208         .sdma_reqs      = omap3xxx_mcbsp4_sdma_chs,
1209         .main_clk       = "mcbsp4_fck",
1210         .prcm           = {
1211                 .omap2 = {
1212                         .prcm_reg_id = 1,
1213                         .module_bit = OMAP3430_EN_MCBSP4_SHIFT,
1214                         .module_offs = OMAP3430_PER_MOD,
1215                         .idlest_reg_id = 1,
1216                         .idlest_idle_bit = OMAP3430_ST_MCBSP4_SHIFT,
1217                 },
1218         },
1219         .opt_clks       = mcbsp234_opt_clks,
1220         .opt_clks_cnt   = ARRAY_SIZE(mcbsp234_opt_clks),
1221 };
1222
1223 /* mcbsp5 */
1224 static struct omap_hwmod_irq_info omap3xxx_mcbsp5_irqs[] = {
1225         { .name = "common", .irq = 27 },
1226         { .name = "tx", .irq = 81 },
1227         { .name = "rx", .irq = 82 },
1228         { .irq = -1 }
1229 };
1230
1231 static struct omap_hwmod_dma_info omap3xxx_mcbsp5_sdma_chs[] = {
1232         { .name = "rx", .dma_req = 22 },
1233         { .name = "tx", .dma_req = 21 },
1234         { .dma_req = -1 }
1235 };
1236
1237 static struct omap_hwmod omap3xxx_mcbsp5_hwmod = {
1238         .name           = "mcbsp5",
1239         .class          = &omap3xxx_mcbsp_hwmod_class,
1240         .mpu_irqs       = omap3xxx_mcbsp5_irqs,
1241         .sdma_reqs      = omap3xxx_mcbsp5_sdma_chs,
1242         .main_clk       = "mcbsp5_fck",
1243         .prcm           = {
1244                 .omap2 = {
1245                         .prcm_reg_id = 1,
1246                         .module_bit = OMAP3430_EN_MCBSP5_SHIFT,
1247                         .module_offs = CORE_MOD,
1248                         .idlest_reg_id = 1,
1249                         .idlest_idle_bit = OMAP3430_ST_MCBSP5_SHIFT,
1250                 },
1251         },
1252         .opt_clks       = mcbsp15_opt_clks,
1253         .opt_clks_cnt   = ARRAY_SIZE(mcbsp15_opt_clks),
1254 };
1255
1256 /* 'mcbsp sidetone' class */
1257 static struct omap_hwmod_class_sysconfig omap3xxx_mcbsp_sidetone_sysc = {
1258         .sysc_offs      = 0x0010,
1259         .sysc_flags     = SYSC_HAS_AUTOIDLE,
1260         .sysc_fields    = &omap_hwmod_sysc_type1,
1261 };
1262
1263 static struct omap_hwmod_class omap3xxx_mcbsp_sidetone_hwmod_class = {
1264         .name = "mcbsp_sidetone",
1265         .sysc = &omap3xxx_mcbsp_sidetone_sysc,
1266 };
1267
1268 /* mcbsp2_sidetone */
1269 static struct omap_hwmod_irq_info omap3xxx_mcbsp2_sidetone_irqs[] = {
1270         { .name = "irq", .irq = 4 },
1271         { .irq = -1 }
1272 };
1273
1274 static struct omap_hwmod omap3xxx_mcbsp2_sidetone_hwmod = {
1275         .name           = "mcbsp2_sidetone",
1276         .class          = &omap3xxx_mcbsp_sidetone_hwmod_class,
1277         .mpu_irqs       = omap3xxx_mcbsp2_sidetone_irqs,
1278         .main_clk       = "mcbsp2_fck",
1279         .prcm           = {
1280                 .omap2 = {
1281                         .prcm_reg_id = 1,
1282                          .module_bit = OMAP3430_EN_MCBSP2_SHIFT,
1283                         .module_offs = OMAP3430_PER_MOD,
1284                         .idlest_reg_id = 1,
1285                         .idlest_idle_bit = OMAP3430_ST_MCBSP2_SHIFT,
1286                 },
1287         },
1288 };
1289
1290 /* mcbsp3_sidetone */
1291 static struct omap_hwmod_irq_info omap3xxx_mcbsp3_sidetone_irqs[] = {
1292         { .name = "irq", .irq = 5 },
1293         { .irq = -1 }
1294 };
1295
1296 static struct omap_hwmod omap3xxx_mcbsp3_sidetone_hwmod = {
1297         .name           = "mcbsp3_sidetone",
1298         .class          = &omap3xxx_mcbsp_sidetone_hwmod_class,
1299         .mpu_irqs       = omap3xxx_mcbsp3_sidetone_irqs,
1300         .main_clk       = "mcbsp3_fck",
1301         .prcm           = {
1302                 .omap2 = {
1303                         .prcm_reg_id = 1,
1304                         .module_bit = OMAP3430_EN_MCBSP3_SHIFT,
1305                         .module_offs = OMAP3430_PER_MOD,
1306                         .idlest_reg_id = 1,
1307                         .idlest_idle_bit = OMAP3430_ST_MCBSP3_SHIFT,
1308                 },
1309         },
1310 };
1311
1312 /* SR common */
1313 static struct omap_hwmod_sysc_fields omap34xx_sr_sysc_fields = {
1314         .clkact_shift   = 20,
1315 };
1316
1317 static struct omap_hwmod_class_sysconfig omap34xx_sr_sysc = {
1318         .sysc_offs      = 0x24,
1319         .sysc_flags     = (SYSC_HAS_CLOCKACTIVITY | SYSC_NO_CACHE),
1320         .clockact       = CLOCKACT_TEST_ICLK,
1321         .sysc_fields    = &omap34xx_sr_sysc_fields,
1322 };
1323
1324 static struct omap_hwmod_class omap34xx_smartreflex_hwmod_class = {
1325         .name = "smartreflex",
1326         .sysc = &omap34xx_sr_sysc,
1327         .rev  = 1,
1328 };
1329
1330 static struct omap_hwmod_sysc_fields omap36xx_sr_sysc_fields = {
1331         .sidle_shift    = 24,
1332         .enwkup_shift   = 26,
1333 };
1334
1335 static struct omap_hwmod_class_sysconfig omap36xx_sr_sysc = {
1336         .sysc_offs      = 0x38,
1337         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1338         .sysc_flags     = (SYSC_HAS_SIDLEMODE | SYSC_HAS_ENAWAKEUP |
1339                         SYSC_NO_CACHE),
1340         .sysc_fields    = &omap36xx_sr_sysc_fields,
1341 };
1342
1343 static struct omap_hwmod_class omap36xx_smartreflex_hwmod_class = {
1344         .name = "smartreflex",
1345         .sysc = &omap36xx_sr_sysc,
1346         .rev  = 2,
1347 };
1348
1349 /* SR1 */
1350 static struct omap_smartreflex_dev_attr sr1_dev_attr = {
1351         .sensor_voltdm_name   = "mpu_iva",
1352 };
1353
1354 static struct omap_hwmod_irq_info omap3_smartreflex_mpu_irqs[] = {
1355         { .irq = 18 },
1356         { .irq = -1 }
1357 };
1358
1359 static struct omap_hwmod omap34xx_sr1_hwmod = {
1360         .name           = "smartreflex_mpu_iva",
1361         .class          = &omap34xx_smartreflex_hwmod_class,
1362         .main_clk       = "sr1_fck",
1363         .prcm           = {
1364                 .omap2 = {
1365                         .prcm_reg_id = 1,
1366                         .module_bit = OMAP3430_EN_SR1_SHIFT,
1367                         .module_offs = WKUP_MOD,
1368                         .idlest_reg_id = 1,
1369                         .idlest_idle_bit = OMAP3430_EN_SR1_SHIFT,
1370                 },
1371         },
1372         .dev_attr       = &sr1_dev_attr,
1373         .mpu_irqs       = omap3_smartreflex_mpu_irqs,
1374         .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
1375 };
1376
1377 static struct omap_hwmod omap36xx_sr1_hwmod = {
1378         .name           = "smartreflex_mpu_iva",
1379         .class          = &omap36xx_smartreflex_hwmod_class,
1380         .main_clk       = "sr1_fck",
1381         .prcm           = {
1382                 .omap2 = {
1383                         .prcm_reg_id = 1,
1384                         .module_bit = OMAP3430_EN_SR1_SHIFT,
1385                         .module_offs = WKUP_MOD,
1386                         .idlest_reg_id = 1,
1387                         .idlest_idle_bit = OMAP3430_EN_SR1_SHIFT,
1388                 },
1389         },
1390         .dev_attr       = &sr1_dev_attr,
1391         .mpu_irqs       = omap3_smartreflex_mpu_irqs,
1392 };
1393
1394 /* SR2 */
1395 static struct omap_smartreflex_dev_attr sr2_dev_attr = {
1396         .sensor_voltdm_name     = "core",
1397 };
1398
1399 static struct omap_hwmod_irq_info omap3_smartreflex_core_irqs[] = {
1400         { .irq = 19 },
1401         { .irq = -1 }
1402 };
1403
1404 static struct omap_hwmod omap34xx_sr2_hwmod = {
1405         .name           = "smartreflex_core",
1406         .class          = &omap34xx_smartreflex_hwmod_class,
1407         .main_clk       = "sr2_fck",
1408         .prcm           = {
1409                 .omap2 = {
1410                         .prcm_reg_id = 1,
1411                         .module_bit = OMAP3430_EN_SR2_SHIFT,
1412                         .module_offs = WKUP_MOD,
1413                         .idlest_reg_id = 1,
1414                         .idlest_idle_bit = OMAP3430_EN_SR2_SHIFT,
1415                 },
1416         },
1417         .dev_attr       = &sr2_dev_attr,
1418         .mpu_irqs       = omap3_smartreflex_core_irqs,
1419         .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
1420 };
1421
1422 static struct omap_hwmod omap36xx_sr2_hwmod = {
1423         .name           = "smartreflex_core",
1424         .class          = &omap36xx_smartreflex_hwmod_class,
1425         .main_clk       = "sr2_fck",
1426         .prcm           = {
1427                 .omap2 = {
1428                         .prcm_reg_id = 1,
1429                         .module_bit = OMAP3430_EN_SR2_SHIFT,
1430                         .module_offs = WKUP_MOD,
1431                         .idlest_reg_id = 1,
1432                         .idlest_idle_bit = OMAP3430_EN_SR2_SHIFT,
1433                 },
1434         },
1435         .dev_attr       = &sr2_dev_attr,
1436         .mpu_irqs       = omap3_smartreflex_core_irqs,
1437 };
1438
1439 /*
1440  * 'mailbox' class
1441  * mailbox module allowing communication between the on-chip processors
1442  * using a queued mailbox-interrupt mechanism.
1443  */
1444
1445 static struct omap_hwmod_class_sysconfig omap3xxx_mailbox_sysc = {
1446         .rev_offs       = 0x000,
1447         .sysc_offs      = 0x010,
1448         .syss_offs      = 0x014,
1449         .sysc_flags     = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
1450                                 SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
1451         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1452         .sysc_fields    = &omap_hwmod_sysc_type1,
1453 };
1454
1455 static struct omap_hwmod_class omap3xxx_mailbox_hwmod_class = {
1456         .name = "mailbox",
1457         .sysc = &omap3xxx_mailbox_sysc,
1458 };
1459
1460 static struct omap_hwmod_irq_info omap3xxx_mailbox_irqs[] = {
1461         { .irq = 26 },
1462         { .irq = -1 }
1463 };
1464
1465 static struct omap_hwmod omap3xxx_mailbox_hwmod = {
1466         .name           = "mailbox",
1467         .class          = &omap3xxx_mailbox_hwmod_class,
1468         .mpu_irqs       = omap3xxx_mailbox_irqs,
1469         .main_clk       = "mailboxes_ick",
1470         .prcm           = {
1471                 .omap2 = {
1472                         .prcm_reg_id = 1,
1473                         .module_bit = OMAP3430_EN_MAILBOXES_SHIFT,
1474                         .module_offs = CORE_MOD,
1475                         .idlest_reg_id = 1,
1476                         .idlest_idle_bit = OMAP3430_ST_MAILBOXES_SHIFT,
1477                 },
1478         },
1479 };
1480
1481 /*
1482  * 'mcspi' class
1483  * multichannel serial port interface (mcspi) / master/slave synchronous serial
1484  * bus
1485  */
1486
1487 static struct omap_hwmod_class_sysconfig omap34xx_mcspi_sysc = {
1488         .rev_offs       = 0x0000,
1489         .sysc_offs      = 0x0010,
1490         .syss_offs      = 0x0014,
1491         .sysc_flags     = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
1492                                 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
1493                                 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
1494         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1495         .sysc_fields    = &omap_hwmod_sysc_type1,
1496 };
1497
1498 static struct omap_hwmod_class omap34xx_mcspi_class = {
1499         .name = "mcspi",
1500         .sysc = &omap34xx_mcspi_sysc,
1501         .rev = OMAP3_MCSPI_REV,
1502 };
1503
1504 /* mcspi1 */
1505 static struct omap2_mcspi_dev_attr omap_mcspi1_dev_attr = {
1506         .num_chipselect = 4,
1507 };
1508
1509 static struct omap_hwmod omap34xx_mcspi1 = {
1510         .name           = "mcspi1",
1511         .mpu_irqs       = omap2_mcspi1_mpu_irqs,
1512         .sdma_reqs      = omap2_mcspi1_sdma_reqs,
1513         .main_clk       = "mcspi1_fck",
1514         .prcm           = {
1515                 .omap2 = {
1516                         .module_offs = CORE_MOD,
1517                         .prcm_reg_id = 1,
1518                         .module_bit = OMAP3430_EN_MCSPI1_SHIFT,
1519                         .idlest_reg_id = 1,
1520                         .idlest_idle_bit = OMAP3430_ST_MCSPI1_SHIFT,
1521                 },
1522         },
1523         .class          = &omap34xx_mcspi_class,
1524         .dev_attr       = &omap_mcspi1_dev_attr,
1525 };
1526
1527 /* mcspi2 */
1528 static struct omap2_mcspi_dev_attr omap_mcspi2_dev_attr = {
1529         .num_chipselect = 2,
1530 };
1531
1532 static struct omap_hwmod omap34xx_mcspi2 = {
1533         .name           = "mcspi2",
1534         .mpu_irqs       = omap2_mcspi2_mpu_irqs,
1535         .sdma_reqs      = omap2_mcspi2_sdma_reqs,
1536         .main_clk       = "mcspi2_fck",
1537         .prcm           = {
1538                 .omap2 = {
1539                         .module_offs = CORE_MOD,
1540                         .prcm_reg_id = 1,
1541                         .module_bit = OMAP3430_EN_MCSPI2_SHIFT,
1542                         .idlest_reg_id = 1,
1543                         .idlest_idle_bit = OMAP3430_ST_MCSPI2_SHIFT,
1544                 },
1545         },
1546         .class          = &omap34xx_mcspi_class,
1547         .dev_attr       = &omap_mcspi2_dev_attr,
1548 };
1549
1550 /* mcspi3 */
1551 static struct omap_hwmod_irq_info omap34xx_mcspi3_mpu_irqs[] = {
1552         { .name = "irq", .irq = 91 }, /* 91 */
1553         { .irq = -1 }
1554 };
1555
1556 static struct omap_hwmod_dma_info omap34xx_mcspi3_sdma_reqs[] = {
1557         { .name = "tx0", .dma_req = 15 },
1558         { .name = "rx0", .dma_req = 16 },
1559         { .name = "tx1", .dma_req = 23 },
1560         { .name = "rx1", .dma_req = 24 },
1561         { .dma_req = -1 }
1562 };
1563
1564 static struct omap2_mcspi_dev_attr omap_mcspi3_dev_attr = {
1565         .num_chipselect = 2,
1566 };
1567
1568 static struct omap_hwmod omap34xx_mcspi3 = {
1569         .name           = "mcspi3",
1570         .mpu_irqs       = omap34xx_mcspi3_mpu_irqs,
1571         .sdma_reqs      = omap34xx_mcspi3_sdma_reqs,
1572         .main_clk       = "mcspi3_fck",
1573         .prcm           = {
1574                 .omap2 = {
1575                         .module_offs = CORE_MOD,
1576                         .prcm_reg_id = 1,
1577                         .module_bit = OMAP3430_EN_MCSPI3_SHIFT,
1578                         .idlest_reg_id = 1,
1579                         .idlest_idle_bit = OMAP3430_ST_MCSPI3_SHIFT,
1580                 },
1581         },
1582         .class          = &omap34xx_mcspi_class,
1583         .dev_attr       = &omap_mcspi3_dev_attr,
1584 };
1585
1586 /* mcspi4 */
1587 static struct omap_hwmod_irq_info omap34xx_mcspi4_mpu_irqs[] = {
1588         { .name = "irq", .irq = INT_34XX_SPI4_IRQ }, /* 48 */
1589         { .irq = -1 }
1590 };
1591
1592 static struct omap_hwmod_dma_info omap34xx_mcspi4_sdma_reqs[] = {
1593         { .name = "tx0", .dma_req = 70 }, /* DMA_SPI4_TX0 */
1594         { .name = "rx0", .dma_req = 71 }, /* DMA_SPI4_RX0 */
1595         { .dma_req = -1 }
1596 };
1597
1598 static struct omap2_mcspi_dev_attr omap_mcspi4_dev_attr = {
1599         .num_chipselect = 1,
1600 };
1601
1602 static struct omap_hwmod omap34xx_mcspi4 = {
1603         .name           = "mcspi4",
1604         .mpu_irqs       = omap34xx_mcspi4_mpu_irqs,
1605         .sdma_reqs      = omap34xx_mcspi4_sdma_reqs,
1606         .main_clk       = "mcspi4_fck",
1607         .prcm           = {
1608                 .omap2 = {
1609                         .module_offs = CORE_MOD,
1610                         .prcm_reg_id = 1,
1611                         .module_bit = OMAP3430_EN_MCSPI4_SHIFT,
1612                         .idlest_reg_id = 1,
1613                         .idlest_idle_bit = OMAP3430_ST_MCSPI4_SHIFT,
1614                 },
1615         },
1616         .class          = &omap34xx_mcspi_class,
1617         .dev_attr       = &omap_mcspi4_dev_attr,
1618 };
1619
1620 /* usbhsotg */
1621 static struct omap_hwmod_class_sysconfig omap3xxx_usbhsotg_sysc = {
1622         .rev_offs       = 0x0400,
1623         .sysc_offs      = 0x0404,
1624         .syss_offs      = 0x0408,
1625         .sysc_flags     = (SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE|
1626                           SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
1627                           SYSC_HAS_AUTOIDLE),
1628         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1629                           MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
1630         .sysc_fields    = &omap_hwmod_sysc_type1,
1631 };
1632
1633 static struct omap_hwmod_class usbotg_class = {
1634         .name = "usbotg",
1635         .sysc = &omap3xxx_usbhsotg_sysc,
1636 };
1637
1638 /* usb_otg_hs */
1639 static struct omap_hwmod_irq_info omap3xxx_usbhsotg_mpu_irqs[] = {
1640
1641         { .name = "mc", .irq = 92 },
1642         { .name = "dma", .irq = 93 },
1643         { .irq = -1 }
1644 };
1645
1646 static struct omap_hwmod omap3xxx_usbhsotg_hwmod = {
1647         .name           = "usb_otg_hs",
1648         .mpu_irqs       = omap3xxx_usbhsotg_mpu_irqs,
1649         .main_clk       = "hsotgusb_ick",
1650         .prcm           = {
1651                 .omap2 = {
1652                         .prcm_reg_id = 1,
1653                         .module_bit = OMAP3430_EN_HSOTGUSB_SHIFT,
1654                         .module_offs = CORE_MOD,
1655                         .idlest_reg_id = 1,
1656                         .idlest_idle_bit = OMAP3430ES2_ST_HSOTGUSB_IDLE_SHIFT,
1657                         .idlest_stdby_bit = OMAP3430ES2_ST_HSOTGUSB_STDBY_SHIFT
1658                 },
1659         },
1660         .class          = &usbotg_class,
1661
1662         /*
1663          * Erratum ID: i479  idle_req / idle_ack mechanism potentially
1664          * broken when autoidle is enabled
1665          * workaround is to disable the autoidle bit at module level.
1666          */
1667         .flags          = HWMOD_NO_OCP_AUTOIDLE | HWMOD_SWSUP_SIDLE
1668                                 | HWMOD_SWSUP_MSTANDBY,
1669 };
1670
1671 /* usb_otg_hs */
1672 static struct omap_hwmod_irq_info am35xx_usbhsotg_mpu_irqs[] = {
1673         { .name = "mc", .irq = 71 },
1674         { .irq = -1 }
1675 };
1676
1677 static struct omap_hwmod_class am35xx_usbotg_class = {
1678         .name = "am35xx_usbotg",
1679 };
1680
1681 static struct omap_hwmod am35xx_usbhsotg_hwmod = {
1682         .name           = "am35x_otg_hs",
1683         .mpu_irqs       = am35xx_usbhsotg_mpu_irqs,
1684         .main_clk       = "hsotgusb_fck",
1685         .class          = &am35xx_usbotg_class,
1686         .flags          = HWMOD_NO_IDLEST,
1687 };
1688
1689 /* MMC/SD/SDIO common */
1690 static struct omap_hwmod_class_sysconfig omap34xx_mmc_sysc = {
1691         .rev_offs       = 0x1fc,
1692         .sysc_offs      = 0x10,
1693         .syss_offs      = 0x14,
1694         .sysc_flags     = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
1695                            SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
1696                            SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
1697         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1698         .sysc_fields    = &omap_hwmod_sysc_type1,
1699 };
1700
1701 static struct omap_hwmod_class omap34xx_mmc_class = {
1702         .name = "mmc",
1703         .sysc = &omap34xx_mmc_sysc,
1704 };
1705
1706 /* MMC/SD/SDIO1 */
1707
1708 static struct omap_hwmod_irq_info omap34xx_mmc1_mpu_irqs[] = {
1709         { .irq = 83, },
1710         { .irq = -1 }
1711 };
1712
1713 static struct omap_hwmod_dma_info omap34xx_mmc1_sdma_reqs[] = {
1714         { .name = "tx", .dma_req = 61, },
1715         { .name = "rx", .dma_req = 62, },
1716         { .dma_req = -1 }
1717 };
1718
1719 static struct omap_hwmod_opt_clk omap34xx_mmc1_opt_clks[] = {
1720         { .role = "dbck", .clk = "omap_32k_fck", },
1721 };
1722
1723 static struct omap_mmc_dev_attr mmc1_dev_attr = {
1724         .flags = OMAP_HSMMC_SUPPORTS_DUAL_VOLT,
1725 };
1726
1727 /* See 35xx errata 2.1.1.128 in SPRZ278F */
1728 static struct omap_mmc_dev_attr mmc1_pre_es3_dev_attr = {
1729         .flags = (OMAP_HSMMC_SUPPORTS_DUAL_VOLT |
1730                   OMAP_HSMMC_BROKEN_MULTIBLOCK_READ),
1731 };
1732
1733 static struct omap_hwmod omap3xxx_pre_es3_mmc1_hwmod = {
1734         .name           = "mmc1",
1735         .mpu_irqs       = omap34xx_mmc1_mpu_irqs,
1736         .sdma_reqs      = omap34xx_mmc1_sdma_reqs,
1737         .opt_clks       = omap34xx_mmc1_opt_clks,
1738         .opt_clks_cnt   = ARRAY_SIZE(omap34xx_mmc1_opt_clks),
1739         .main_clk       = "mmchs1_fck",
1740         .prcm           = {
1741                 .omap2 = {
1742                         .module_offs = CORE_MOD,
1743                         .prcm_reg_id = 1,
1744                         .module_bit = OMAP3430_EN_MMC1_SHIFT,
1745                         .idlest_reg_id = 1,
1746                         .idlest_idle_bit = OMAP3430_ST_MMC1_SHIFT,
1747                 },
1748         },
1749         .dev_attr       = &mmc1_pre_es3_dev_attr,
1750         .class          = &omap34xx_mmc_class,
1751 };
1752
1753 static struct omap_hwmod omap3xxx_es3plus_mmc1_hwmod = {
1754         .name           = "mmc1",
1755         .mpu_irqs       = omap34xx_mmc1_mpu_irqs,
1756         .sdma_reqs      = omap34xx_mmc1_sdma_reqs,
1757         .opt_clks       = omap34xx_mmc1_opt_clks,
1758         .opt_clks_cnt   = ARRAY_SIZE(omap34xx_mmc1_opt_clks),
1759         .main_clk       = "mmchs1_fck",
1760         .prcm           = {
1761                 .omap2 = {
1762                         .module_offs = CORE_MOD,
1763                         .prcm_reg_id = 1,
1764                         .module_bit = OMAP3430_EN_MMC1_SHIFT,
1765                         .idlest_reg_id = 1,
1766                         .idlest_idle_bit = OMAP3430_ST_MMC1_SHIFT,
1767                 },
1768         },
1769         .dev_attr       = &mmc1_dev_attr,
1770         .class          = &omap34xx_mmc_class,
1771 };
1772
1773 /* MMC/SD/SDIO2 */
1774
1775 static struct omap_hwmod_irq_info omap34xx_mmc2_mpu_irqs[] = {
1776         { .irq = INT_24XX_MMC2_IRQ, },
1777         { .irq = -1 }
1778 };
1779
1780 static struct omap_hwmod_dma_info omap34xx_mmc2_sdma_reqs[] = {
1781         { .name = "tx", .dma_req = 47, },
1782         { .name = "rx", .dma_req = 48, },
1783         { .dma_req = -1 }
1784 };
1785
1786 static struct omap_hwmod_opt_clk omap34xx_mmc2_opt_clks[] = {
1787         { .role = "dbck", .clk = "omap_32k_fck", },
1788 };
1789
1790 /* See 35xx errata 2.1.1.128 in SPRZ278F */
1791 static struct omap_mmc_dev_attr mmc2_pre_es3_dev_attr = {
1792         .flags = OMAP_HSMMC_BROKEN_MULTIBLOCK_READ,
1793 };
1794
1795 static struct omap_hwmod omap3xxx_pre_es3_mmc2_hwmod = {
1796         .name           = "mmc2",
1797         .mpu_irqs       = omap34xx_mmc2_mpu_irqs,
1798         .sdma_reqs      = omap34xx_mmc2_sdma_reqs,
1799         .opt_clks       = omap34xx_mmc2_opt_clks,
1800         .opt_clks_cnt   = ARRAY_SIZE(omap34xx_mmc2_opt_clks),
1801         .main_clk       = "mmchs2_fck",
1802         .prcm           = {
1803                 .omap2 = {
1804                         .module_offs = CORE_MOD,
1805                         .prcm_reg_id = 1,
1806                         .module_bit = OMAP3430_EN_MMC2_SHIFT,
1807                         .idlest_reg_id = 1,
1808                         .idlest_idle_bit = OMAP3430_ST_MMC2_SHIFT,
1809                 },
1810         },
1811         .dev_attr       = &mmc2_pre_es3_dev_attr,
1812         .class          = &omap34xx_mmc_class,
1813 };
1814
1815 static struct omap_hwmod omap3xxx_es3plus_mmc2_hwmod = {
1816         .name           = "mmc2",
1817         .mpu_irqs       = omap34xx_mmc2_mpu_irqs,
1818         .sdma_reqs      = omap34xx_mmc2_sdma_reqs,
1819         .opt_clks       = omap34xx_mmc2_opt_clks,
1820         .opt_clks_cnt   = ARRAY_SIZE(omap34xx_mmc2_opt_clks),
1821         .main_clk       = "mmchs2_fck",
1822         .prcm           = {
1823                 .omap2 = {
1824                         .module_offs = CORE_MOD,
1825                         .prcm_reg_id = 1,
1826                         .module_bit = OMAP3430_EN_MMC2_SHIFT,
1827                         .idlest_reg_id = 1,
1828                         .idlest_idle_bit = OMAP3430_ST_MMC2_SHIFT,
1829                 },
1830         },
1831         .class          = &omap34xx_mmc_class,
1832 };
1833
1834 /* MMC/SD/SDIO3 */
1835
1836 static struct omap_hwmod_irq_info omap34xx_mmc3_mpu_irqs[] = {
1837         { .irq = 94, },
1838         { .irq = -1 }
1839 };
1840
1841 static struct omap_hwmod_dma_info omap34xx_mmc3_sdma_reqs[] = {
1842         { .name = "tx", .dma_req = 77, },
1843         { .name = "rx", .dma_req = 78, },
1844         { .dma_req = -1 }
1845 };
1846
1847 static struct omap_hwmod_opt_clk omap34xx_mmc3_opt_clks[] = {
1848         { .role = "dbck", .clk = "omap_32k_fck", },
1849 };
1850
1851 static struct omap_hwmod omap3xxx_mmc3_hwmod = {
1852         .name           = "mmc3",
1853         .mpu_irqs       = omap34xx_mmc3_mpu_irqs,
1854         .sdma_reqs      = omap34xx_mmc3_sdma_reqs,
1855         .opt_clks       = omap34xx_mmc3_opt_clks,
1856         .opt_clks_cnt   = ARRAY_SIZE(omap34xx_mmc3_opt_clks),
1857         .main_clk       = "mmchs3_fck",
1858         .prcm           = {
1859                 .omap2 = {
1860                         .prcm_reg_id = 1,
1861                         .module_bit = OMAP3430_EN_MMC3_SHIFT,
1862                         .idlest_reg_id = 1,
1863                         .idlest_idle_bit = OMAP3430_ST_MMC3_SHIFT,
1864                 },
1865         },
1866         .class          = &omap34xx_mmc_class,
1867 };
1868
1869 /*
1870  * 'usb_host_hs' class
1871  * high-speed multi-port usb host controller
1872  */
1873
1874 static struct omap_hwmod_class_sysconfig omap3xxx_usb_host_hs_sysc = {
1875         .rev_offs       = 0x0000,
1876         .sysc_offs      = 0x0010,
1877         .syss_offs      = 0x0014,
1878         .sysc_flags     = (SYSC_HAS_MIDLEMODE | SYSC_HAS_CLOCKACTIVITY |
1879                            SYSC_HAS_SIDLEMODE | SYSC_HAS_ENAWAKEUP |
1880                            SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
1881         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1882                            MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
1883         .sysc_fields    = &omap_hwmod_sysc_type1,
1884 };
1885
1886 static struct omap_hwmod_class omap3xxx_usb_host_hs_hwmod_class = {
1887         .name = "usb_host_hs",
1888         .sysc = &omap3xxx_usb_host_hs_sysc,
1889 };
1890
1891 static struct omap_hwmod_opt_clk omap3xxx_usb_host_hs_opt_clks[] = {
1892           { .role = "ehci_logic_fck", .clk = "usbhost_120m_fck", },
1893 };
1894
1895 static struct omap_hwmod_irq_info omap3xxx_usb_host_hs_irqs[] = {
1896         { .name = "ohci-irq", .irq = 76 },
1897         { .name = "ehci-irq", .irq = 77 },
1898         { .irq = -1 }
1899 };
1900
1901 static struct omap_hwmod omap3xxx_usb_host_hs_hwmod = {
1902         .name           = "usb_host_hs",
1903         .class          = &omap3xxx_usb_host_hs_hwmod_class,
1904         .clkdm_name     = "l3_init_clkdm",
1905         .mpu_irqs       = omap3xxx_usb_host_hs_irqs,
1906         .main_clk       = "usbhost_48m_fck",
1907         .prcm = {
1908                 .omap2 = {
1909                         .module_offs = OMAP3430ES2_USBHOST_MOD,
1910                         .prcm_reg_id = 1,
1911                         .module_bit = OMAP3430ES2_EN_USBHOST1_SHIFT,
1912                         .idlest_reg_id = 1,
1913                         .idlest_idle_bit = OMAP3430ES2_ST_USBHOST_IDLE_SHIFT,
1914                         .idlest_stdby_bit = OMAP3430ES2_ST_USBHOST_STDBY_SHIFT,
1915                 },
1916         },
1917         .opt_clks       = omap3xxx_usb_host_hs_opt_clks,
1918         .opt_clks_cnt   = ARRAY_SIZE(omap3xxx_usb_host_hs_opt_clks),
1919
1920         /*
1921          * Errata: USBHOST Configured In Smart-Idle Can Lead To a Deadlock
1922          * id: i660
1923          *
1924          * Description:
1925          * In the following configuration :
1926          * - USBHOST module is set to smart-idle mode
1927          * - PRCM asserts idle_req to the USBHOST module ( This typically
1928          *   happens when the system is going to a low power mode : all ports
1929          *   have been suspended, the master part of the USBHOST module has
1930          *   entered the standby state, and SW has cut the functional clocks)
1931          * - an USBHOST interrupt occurs before the module is able to answer
1932          *   idle_ack, typically a remote wakeup IRQ.
1933          * Then the USB HOST module will enter a deadlock situation where it
1934          * is no more accessible nor functional.
1935          *
1936          * Workaround:
1937          * Don't use smart idle; use only force idle, hence HWMOD_SWSUP_SIDLE
1938          */
1939
1940         /*
1941          * Errata: USB host EHCI may stall when entering smart-standby mode
1942          * Id: i571
1943          *
1944          * Description:
1945          * When the USBHOST module is set to smart-standby mode, and when it is
1946          * ready to enter the standby state (i.e. all ports are suspended and
1947          * all attached devices are in suspend mode), then it can wrongly assert
1948          * the Mstandby signal too early while there are still some residual OCP
1949          * transactions ongoing. If this condition occurs, the internal state
1950          * machine may go to an undefined state and the USB link may be stuck
1951          * upon the next resume.
1952          *
1953          * Workaround:
1954          * Don't use smart standby; use only force standby,
1955          * hence HWMOD_SWSUP_MSTANDBY
1956          */
1957
1958         /*
1959          * During system boot; If the hwmod framework resets the module
1960          * the module will have smart idle settings; which can lead to deadlock
1961          * (above Errata Id:i660); so, dont reset the module during boot;
1962          * Use HWMOD_INIT_NO_RESET.
1963          */
1964
1965         .flags          = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY |
1966                           HWMOD_INIT_NO_RESET,
1967 };
1968
1969 /*
1970  * 'usb_tll_hs' class
1971  * usb_tll_hs module is the adapter on the usb_host_hs ports
1972  */
1973 static struct omap_hwmod_class_sysconfig omap3xxx_usb_tll_hs_sysc = {
1974         .rev_offs       = 0x0000,
1975         .sysc_offs      = 0x0010,
1976         .syss_offs      = 0x0014,
1977         .sysc_flags     = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
1978                            SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
1979                            SYSC_HAS_AUTOIDLE),
1980         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1981         .sysc_fields    = &omap_hwmod_sysc_type1,
1982 };
1983
1984 static struct omap_hwmod_class omap3xxx_usb_tll_hs_hwmod_class = {
1985         .name = "usb_tll_hs",
1986         .sysc = &omap3xxx_usb_tll_hs_sysc,
1987 };
1988
1989 static struct omap_hwmod_irq_info omap3xxx_usb_tll_hs_irqs[] = {
1990         { .name = "tll-irq", .irq = 78 },
1991         { .irq = -1 }
1992 };
1993
1994 static struct omap_hwmod omap3xxx_usb_tll_hs_hwmod = {
1995         .name           = "usb_tll_hs",
1996         .class          = &omap3xxx_usb_tll_hs_hwmod_class,
1997         .clkdm_name     = "l3_init_clkdm",
1998         .mpu_irqs       = omap3xxx_usb_tll_hs_irqs,
1999         .main_clk       = "usbtll_fck",
2000         .prcm = {
2001                 .omap2 = {
2002                         .module_offs = CORE_MOD,
2003                         .prcm_reg_id = 3,
2004                         .module_bit = OMAP3430ES2_EN_USBTLL_SHIFT,
2005                         .idlest_reg_id = 3,
2006                         .idlest_idle_bit = OMAP3430ES2_ST_USBTLL_SHIFT,
2007                 },
2008         },
2009 };
2010
2011 static struct omap_hwmod omap3xxx_hdq1w_hwmod = {
2012         .name           = "hdq1w",
2013         .mpu_irqs       = omap2_hdq1w_mpu_irqs,
2014         .main_clk       = "hdq_fck",
2015         .prcm           = {
2016                 .omap2 = {
2017                         .module_offs = CORE_MOD,
2018                         .prcm_reg_id = 1,
2019                         .module_bit = OMAP3430_EN_HDQ_SHIFT,
2020                         .idlest_reg_id = 1,
2021                         .idlest_idle_bit = OMAP3430_ST_HDQ_SHIFT,
2022                 },
2023         },
2024         .class          = &omap2_hdq1w_class,
2025 };
2026
2027 /*
2028  * '32K sync counter' class
2029  * 32-bit ordinary counter, clocked by the falling edge of the 32 khz clock
2030  */
2031 static struct omap_hwmod_class_sysconfig omap3xxx_counter_sysc = {
2032         .rev_offs       = 0x0000,
2033         .sysc_offs      = 0x0004,
2034         .sysc_flags     = SYSC_HAS_SIDLEMODE,
2035         .idlemodes      = (SIDLE_FORCE | SIDLE_NO),
2036         .sysc_fields    = &omap_hwmod_sysc_type1,
2037 };
2038
2039 static struct omap_hwmod_class omap3xxx_counter_hwmod_class = {
2040         .name   = "counter",
2041         .sysc   = &omap3xxx_counter_sysc,
2042 };
2043
2044 static struct omap_hwmod omap3xxx_counter_32k_hwmod = {
2045         .name           = "counter_32k",
2046         .class          = &omap3xxx_counter_hwmod_class,
2047         .clkdm_name     = "wkup_clkdm",
2048         .flags          = HWMOD_SWSUP_SIDLE,
2049         .main_clk       = "wkup_32k_fck",
2050         .prcm           = {
2051                 .omap2  = {
2052                         .module_offs = WKUP_MOD,
2053                         .prcm_reg_id = 1,
2054                         .module_bit = OMAP3430_ST_32KSYNC_SHIFT,
2055                         .idlest_reg_id = 1,
2056                         .idlest_idle_bit = OMAP3430_ST_32KSYNC_SHIFT,
2057                 },
2058         },
2059 };
2060
2061 /*
2062  * interfaces
2063  */
2064
2065 /* L3 -> L4_CORE interface */
2066 static struct omap_hwmod_ocp_if omap3xxx_l3_main__l4_core = {
2067         .master = &omap3xxx_l3_main_hwmod,
2068         .slave  = &omap3xxx_l4_core_hwmod,
2069         .user   = OCP_USER_MPU | OCP_USER_SDMA,
2070 };
2071
2072 /* L3 -> L4_PER interface */
2073 static struct omap_hwmod_ocp_if omap3xxx_l3_main__l4_per = {
2074         .master = &omap3xxx_l3_main_hwmod,
2075         .slave  = &omap3xxx_l4_per_hwmod,
2076         .user   = OCP_USER_MPU | OCP_USER_SDMA,
2077 };
2078
2079 static struct omap_hwmod_addr_space omap3xxx_l3_main_addrs[] = {
2080         {
2081                 .pa_start       = 0x68000000,
2082                 .pa_end         = 0x6800ffff,
2083                 .flags          = ADDR_TYPE_RT,
2084         },
2085         { }
2086 };
2087
2088 /* MPU -> L3 interface */
2089 static struct omap_hwmod_ocp_if omap3xxx_mpu__l3_main = {
2090         .master   = &omap3xxx_mpu_hwmod,
2091         .slave    = &omap3xxx_l3_main_hwmod,
2092         .addr     = omap3xxx_l3_main_addrs,
2093         .user   = OCP_USER_MPU,
2094 };
2095
2096 /* DSS -> l3 */
2097 static struct omap_hwmod_ocp_if omap3430es1_dss__l3 = {
2098         .master         = &omap3430es1_dss_core_hwmod,
2099         .slave          = &omap3xxx_l3_main_hwmod,
2100         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2101 };
2102
2103 static struct omap_hwmod_ocp_if omap3xxx_dss__l3 = {
2104         .master         = &omap3xxx_dss_core_hwmod,
2105         .slave          = &omap3xxx_l3_main_hwmod,
2106         .fw = {
2107                 .omap2 = {
2108                         .l3_perm_bit  = OMAP3_L3_CORE_FW_INIT_ID_DSS,
2109                         .flags  = OMAP_FIREWALL_L3,
2110                 }
2111         },
2112         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2113 };
2114
2115 /* l3_core -> usbhsotg interface */
2116 static struct omap_hwmod_ocp_if omap3xxx_usbhsotg__l3 = {
2117         .master         = &omap3xxx_usbhsotg_hwmod,
2118         .slave          = &omap3xxx_l3_main_hwmod,
2119         .clk            = "core_l3_ick",
2120         .user           = OCP_USER_MPU,
2121 };
2122
2123 /* l3_core -> am35xx_usbhsotg interface */
2124 static struct omap_hwmod_ocp_if am35xx_usbhsotg__l3 = {
2125         .master         = &am35xx_usbhsotg_hwmod,
2126         .slave          = &omap3xxx_l3_main_hwmod,
2127         .clk            = "hsotgusb_ick",
2128         .user           = OCP_USER_MPU,
2129 };
2130
2131 /* L4_CORE -> L4_WKUP interface */
2132 static struct omap_hwmod_ocp_if omap3xxx_l4_core__l4_wkup = {
2133         .master = &omap3xxx_l4_core_hwmod,
2134         .slave  = &omap3xxx_l4_wkup_hwmod,
2135         .user   = OCP_USER_MPU | OCP_USER_SDMA,
2136 };
2137
2138 /* L4 CORE -> MMC1 interface */
2139 static struct omap_hwmod_ocp_if omap3xxx_l4_core__pre_es3_mmc1 = {
2140         .master         = &omap3xxx_l4_core_hwmod,
2141         .slave          = &omap3xxx_pre_es3_mmc1_hwmod,
2142         .clk            = "mmchs1_ick",
2143         .addr           = omap2430_mmc1_addr_space,
2144         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2145         .flags          = OMAP_FIREWALL_L4
2146 };
2147
2148 static struct omap_hwmod_ocp_if omap3xxx_l4_core__es3plus_mmc1 = {
2149         .master         = &omap3xxx_l4_core_hwmod,
2150         .slave          = &omap3xxx_es3plus_mmc1_hwmod,
2151         .clk            = "mmchs1_ick",
2152         .addr           = omap2430_mmc1_addr_space,
2153         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2154         .flags          = OMAP_FIREWALL_L4
2155 };
2156
2157 /* L4 CORE -> MMC2 interface */
2158 static struct omap_hwmod_ocp_if omap3xxx_l4_core__pre_es3_mmc2 = {
2159         .master         = &omap3xxx_l4_core_hwmod,
2160         .slave          = &omap3xxx_pre_es3_mmc2_hwmod,
2161         .clk            = "mmchs2_ick",
2162         .addr           = omap2430_mmc2_addr_space,
2163         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2164         .flags          = OMAP_FIREWALL_L4
2165 };
2166
2167 static struct omap_hwmod_ocp_if omap3xxx_l4_core__es3plus_mmc2 = {
2168         .master         = &omap3xxx_l4_core_hwmod,
2169         .slave          = &omap3xxx_es3plus_mmc2_hwmod,
2170         .clk            = "mmchs2_ick",
2171         .addr           = omap2430_mmc2_addr_space,
2172         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2173         .flags          = OMAP_FIREWALL_L4
2174 };
2175
2176 /* L4 CORE -> MMC3 interface */
2177 static struct omap_hwmod_addr_space omap3xxx_mmc3_addr_space[] = {
2178         {
2179                 .pa_start       = 0x480ad000,
2180                 .pa_end         = 0x480ad1ff,
2181                 .flags          = ADDR_TYPE_RT,
2182         },
2183         { }
2184 };
2185
2186 static struct omap_hwmod_ocp_if omap3xxx_l4_core__mmc3 = {
2187         .master         = &omap3xxx_l4_core_hwmod,
2188         .slave          = &omap3xxx_mmc3_hwmod,
2189         .clk            = "mmchs3_ick",
2190         .addr           = omap3xxx_mmc3_addr_space,
2191         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2192         .flags          = OMAP_FIREWALL_L4
2193 };
2194
2195 /* L4 CORE -> UART1 interface */
2196 static struct omap_hwmod_addr_space omap3xxx_uart1_addr_space[] = {
2197         {
2198                 .pa_start       = OMAP3_UART1_BASE,
2199                 .pa_end         = OMAP3_UART1_BASE + SZ_8K - 1,
2200                 .flags          = ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
2201         },
2202         { }
2203 };
2204
2205 static struct omap_hwmod_ocp_if omap3_l4_core__uart1 = {
2206         .master         = &omap3xxx_l4_core_hwmod,
2207         .slave          = &omap3xxx_uart1_hwmod,
2208         .clk            = "uart1_ick",
2209         .addr           = omap3xxx_uart1_addr_space,
2210         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2211 };
2212
2213 /* L4 CORE -> UART2 interface */
2214 static struct omap_hwmod_addr_space omap3xxx_uart2_addr_space[] = {
2215         {
2216                 .pa_start       = OMAP3_UART2_BASE,
2217                 .pa_end         = OMAP3_UART2_BASE + SZ_1K - 1,
2218                 .flags          = ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
2219         },
2220         { }
2221 };
2222
2223 static struct omap_hwmod_ocp_if omap3_l4_core__uart2 = {
2224         .master         = &omap3xxx_l4_core_hwmod,
2225         .slave          = &omap3xxx_uart2_hwmod,
2226         .clk            = "uart2_ick",
2227         .addr           = omap3xxx_uart2_addr_space,
2228         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2229 };
2230
2231 /* L4 PER -> UART3 interface */
2232 static struct omap_hwmod_addr_space omap3xxx_uart3_addr_space[] = {
2233         {
2234                 .pa_start       = OMAP3_UART3_BASE,
2235                 .pa_end         = OMAP3_UART3_BASE + SZ_1K - 1,
2236                 .flags          = ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
2237         },
2238         { }
2239 };
2240
2241 static struct omap_hwmod_ocp_if omap3_l4_per__uart3 = {
2242         .master         = &omap3xxx_l4_per_hwmod,
2243         .slave          = &omap3xxx_uart3_hwmod,
2244         .clk            = "uart3_ick",
2245         .addr           = omap3xxx_uart3_addr_space,
2246         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2247 };
2248
2249 /* L4 PER -> UART4 interface */
2250 static struct omap_hwmod_addr_space omap36xx_uart4_addr_space[] = {
2251         {
2252                 .pa_start       = OMAP3_UART4_BASE,
2253                 .pa_end         = OMAP3_UART4_BASE + SZ_1K - 1,
2254                 .flags          = ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
2255         },
2256         { }
2257 };
2258
2259 static struct omap_hwmod_ocp_if omap36xx_l4_per__uart4 = {
2260         .master         = &omap3xxx_l4_per_hwmod,
2261         .slave          = &omap36xx_uart4_hwmod,
2262         .clk            = "uart4_ick",
2263         .addr           = omap36xx_uart4_addr_space,
2264         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2265 };
2266
2267 /* AM35xx: L4 CORE -> UART4 interface */
2268 static struct omap_hwmod_addr_space am35xx_uart4_addr_space[] = {
2269         {
2270                 .pa_start       = OMAP3_UART4_AM35XX_BASE,
2271                 .pa_end         = OMAP3_UART4_AM35XX_BASE + SZ_1K - 1,
2272                 .flags          = ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
2273         },
2274         { }
2275 };
2276
2277 static struct omap_hwmod_ocp_if am35xx_l4_core__uart4 = {
2278         .master         = &omap3xxx_l4_core_hwmod,
2279         .slave          = &am35xx_uart4_hwmod,
2280         .clk            = "uart4_ick",
2281         .addr           = am35xx_uart4_addr_space,
2282         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2283 };
2284
2285 /* L4 CORE -> I2C1 interface */
2286 static struct omap_hwmod_ocp_if omap3_l4_core__i2c1 = {
2287         .master         = &omap3xxx_l4_core_hwmod,
2288         .slave          = &omap3xxx_i2c1_hwmod,
2289         .clk            = "i2c1_ick",
2290         .addr           = omap2_i2c1_addr_space,
2291         .fw = {
2292                 .omap2 = {
2293                         .l4_fw_region  = OMAP3_L4_CORE_FW_I2C1_REGION,
2294                         .l4_prot_group = 7,
2295                         .flags  = OMAP_FIREWALL_L4,
2296                 }
2297         },
2298         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2299 };
2300
2301 /* L4 CORE -> I2C2 interface */
2302 static struct omap_hwmod_ocp_if omap3_l4_core__i2c2 = {
2303         .master         = &omap3xxx_l4_core_hwmod,
2304         .slave          = &omap3xxx_i2c2_hwmod,
2305         .clk            = "i2c2_ick",
2306         .addr           = omap2_i2c2_addr_space,
2307         .fw = {
2308                 .omap2 = {
2309                         .l4_fw_region  = OMAP3_L4_CORE_FW_I2C2_REGION,
2310                         .l4_prot_group = 7,
2311                         .flags = OMAP_FIREWALL_L4,
2312                 }
2313         },
2314         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2315 };
2316
2317 /* L4 CORE -> I2C3 interface */
2318 static struct omap_hwmod_addr_space omap3xxx_i2c3_addr_space[] = {
2319         {
2320                 .pa_start       = 0x48060000,
2321                 .pa_end         = 0x48060000 + SZ_128 - 1,
2322                 .flags          = ADDR_TYPE_RT,
2323         },
2324         { }
2325 };
2326
2327 static struct omap_hwmod_ocp_if omap3_l4_core__i2c3 = {
2328         .master         = &omap3xxx_l4_core_hwmod,
2329         .slave          = &omap3xxx_i2c3_hwmod,
2330         .clk            = "i2c3_ick",
2331         .addr           = omap3xxx_i2c3_addr_space,
2332         .fw = {
2333                 .omap2 = {
2334                         .l4_fw_region  = OMAP3_L4_CORE_FW_I2C3_REGION,
2335                         .l4_prot_group = 7,
2336                         .flags = OMAP_FIREWALL_L4,
2337                 }
2338         },
2339         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2340 };
2341
2342 /* L4 CORE -> SR1 interface */
2343 static struct omap_hwmod_addr_space omap3_sr1_addr_space[] = {
2344         {
2345                 .pa_start       = OMAP34XX_SR1_BASE,
2346                 .pa_end         = OMAP34XX_SR1_BASE + SZ_1K - 1,
2347                 .flags          = ADDR_TYPE_RT,
2348         },
2349         { }
2350 };
2351
2352 static struct omap_hwmod_ocp_if omap34xx_l4_core__sr1 = {
2353         .master         = &omap3xxx_l4_core_hwmod,
2354         .slave          = &omap34xx_sr1_hwmod,
2355         .clk            = "sr_l4_ick",
2356         .addr           = omap3_sr1_addr_space,
2357         .user           = OCP_USER_MPU,
2358 };
2359
2360 static struct omap_hwmod_ocp_if omap36xx_l4_core__sr1 = {
2361         .master         = &omap3xxx_l4_core_hwmod,
2362         .slave          = &omap36xx_sr1_hwmod,
2363         .clk            = "sr_l4_ick",
2364         .addr           = omap3_sr1_addr_space,
2365         .user           = OCP_USER_MPU,
2366 };
2367
2368 /* L4 CORE -> SR1 interface */
2369 static struct omap_hwmod_addr_space omap3_sr2_addr_space[] = {
2370         {
2371                 .pa_start       = OMAP34XX_SR2_BASE,
2372                 .pa_end         = OMAP34XX_SR2_BASE + SZ_1K - 1,
2373                 .flags          = ADDR_TYPE_RT,
2374         },
2375         { }
2376 };
2377
2378 static struct omap_hwmod_ocp_if omap34xx_l4_core__sr2 = {
2379         .master         = &omap3xxx_l4_core_hwmod,
2380         .slave          = &omap34xx_sr2_hwmod,
2381         .clk            = "sr_l4_ick",
2382         .addr           = omap3_sr2_addr_space,
2383         .user           = OCP_USER_MPU,
2384 };
2385
2386 static struct omap_hwmod_ocp_if omap36xx_l4_core__sr2 = {
2387         .master         = &omap3xxx_l4_core_hwmod,
2388         .slave          = &omap36xx_sr2_hwmod,
2389         .clk            = "sr_l4_ick",
2390         .addr           = omap3_sr2_addr_space,
2391         .user           = OCP_USER_MPU,
2392 };
2393
2394 static struct omap_hwmod_addr_space omap3xxx_usbhsotg_addrs[] = {
2395         {
2396                 .pa_start       = OMAP34XX_HSUSB_OTG_BASE,
2397                 .pa_end         = OMAP34XX_HSUSB_OTG_BASE + SZ_4K - 1,
2398                 .flags          = ADDR_TYPE_RT
2399         },
2400         { }
2401 };
2402
2403 /* l4_core -> usbhsotg  */
2404 static struct omap_hwmod_ocp_if omap3xxx_l4_core__usbhsotg = {
2405         .master         = &omap3xxx_l4_core_hwmod,
2406         .slave          = &omap3xxx_usbhsotg_hwmod,
2407         .clk            = "l4_ick",
2408         .addr           = omap3xxx_usbhsotg_addrs,
2409         .user           = OCP_USER_MPU,
2410 };
2411
2412 static struct omap_hwmod_addr_space am35xx_usbhsotg_addrs[] = {
2413         {
2414                 .pa_start       = AM35XX_IPSS_USBOTGSS_BASE,
2415                 .pa_end         = AM35XX_IPSS_USBOTGSS_BASE + SZ_4K - 1,
2416                 .flags          = ADDR_TYPE_RT
2417         },
2418         { }
2419 };
2420
2421 /* l4_core -> usbhsotg  */
2422 static struct omap_hwmod_ocp_if am35xx_l4_core__usbhsotg = {
2423         .master         = &omap3xxx_l4_core_hwmod,
2424         .slave          = &am35xx_usbhsotg_hwmod,
2425         .clk            = "hsotgusb_ick",
2426         .addr           = am35xx_usbhsotg_addrs,
2427         .user           = OCP_USER_MPU,
2428 };
2429
2430 /* L4_WKUP -> L4_SEC interface */
2431 static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__l4_sec = {
2432         .master = &omap3xxx_l4_wkup_hwmod,
2433         .slave  = &omap3xxx_l4_sec_hwmod,
2434         .user   = OCP_USER_MPU | OCP_USER_SDMA,
2435 };
2436
2437 /* IVA2 <- L3 interface */
2438 static struct omap_hwmod_ocp_if omap3xxx_l3__iva = {
2439         .master         = &omap3xxx_l3_main_hwmod,
2440         .slave          = &omap3xxx_iva_hwmod,
2441         .clk            = "core_l3_ick",
2442         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2443 };
2444
2445 static struct omap_hwmod_addr_space omap3xxx_timer1_addrs[] = {
2446         {
2447                 .pa_start       = 0x48318000,
2448                 .pa_end         = 0x48318000 + SZ_1K - 1,
2449                 .flags          = ADDR_TYPE_RT
2450         },
2451         { }
2452 };
2453
2454 /* l4_wkup -> timer1 */
2455 static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__timer1 = {
2456         .master         = &omap3xxx_l4_wkup_hwmod,
2457         .slave          = &omap3xxx_timer1_hwmod,
2458         .clk            = "gpt1_ick",
2459         .addr           = omap3xxx_timer1_addrs,
2460         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2461 };
2462
2463 static struct omap_hwmod_addr_space omap3xxx_timer2_addrs[] = {
2464         {
2465                 .pa_start       = 0x49032000,
2466                 .pa_end         = 0x49032000 + SZ_1K - 1,
2467                 .flags          = ADDR_TYPE_RT
2468         },
2469         { }
2470 };
2471
2472 /* l4_per -> timer2 */
2473 static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer2 = {
2474         .master         = &omap3xxx_l4_per_hwmod,
2475         .slave          = &omap3xxx_timer2_hwmod,
2476         .clk            = "gpt2_ick",
2477         .addr           = omap3xxx_timer2_addrs,
2478         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2479 };
2480
2481 static struct omap_hwmod_addr_space omap3xxx_timer3_addrs[] = {
2482         {
2483                 .pa_start       = 0x49034000,
2484                 .pa_end         = 0x49034000 + SZ_1K - 1,
2485                 .flags          = ADDR_TYPE_RT
2486         },
2487         { }
2488 };
2489
2490 /* l4_per -> timer3 */
2491 static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer3 = {
2492         .master         = &omap3xxx_l4_per_hwmod,
2493         .slave          = &omap3xxx_timer3_hwmod,
2494         .clk            = "gpt3_ick",
2495         .addr           = omap3xxx_timer3_addrs,
2496         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2497 };
2498
2499 static struct omap_hwmod_addr_space omap3xxx_timer4_addrs[] = {
2500         {
2501                 .pa_start       = 0x49036000,
2502                 .pa_end         = 0x49036000 + SZ_1K - 1,
2503                 .flags          = ADDR_TYPE_RT
2504         },
2505         { }
2506 };
2507
2508 /* l4_per -> timer4 */
2509 static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer4 = {
2510         .master         = &omap3xxx_l4_per_hwmod,
2511         .slave          = &omap3xxx_timer4_hwmod,
2512         .clk            = "gpt4_ick",
2513         .addr           = omap3xxx_timer4_addrs,
2514         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2515 };
2516
2517 static struct omap_hwmod_addr_space omap3xxx_timer5_addrs[] = {
2518         {
2519                 .pa_start       = 0x49038000,
2520                 .pa_end         = 0x49038000 + SZ_1K - 1,
2521                 .flags          = ADDR_TYPE_RT
2522         },
2523         { }
2524 };
2525
2526 /* l4_per -> timer5 */
2527 static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer5 = {
2528         .master         = &omap3xxx_l4_per_hwmod,
2529         .slave          = &omap3xxx_timer5_hwmod,
2530         .clk            = "gpt5_ick",
2531         .addr           = omap3xxx_timer5_addrs,
2532         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2533 };
2534
2535 static struct omap_hwmod_addr_space omap3xxx_timer6_addrs[] = {
2536         {
2537                 .pa_start       = 0x4903A000,
2538                 .pa_end         = 0x4903A000 + SZ_1K - 1,
2539                 .flags          = ADDR_TYPE_RT
2540         },
2541         { }
2542 };
2543
2544 /* l4_per -> timer6 */
2545 static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer6 = {
2546         .master         = &omap3xxx_l4_per_hwmod,
2547         .slave          = &omap3xxx_timer6_hwmod,
2548         .clk            = "gpt6_ick",
2549         .addr           = omap3xxx_timer6_addrs,
2550         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2551 };
2552
2553 static struct omap_hwmod_addr_space omap3xxx_timer7_addrs[] = {
2554         {
2555                 .pa_start       = 0x4903C000,
2556                 .pa_end         = 0x4903C000 + SZ_1K - 1,
2557                 .flags          = ADDR_TYPE_RT
2558         },
2559         { }
2560 };
2561
2562 /* l4_per -> timer7 */
2563 static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer7 = {
2564         .master         = &omap3xxx_l4_per_hwmod,
2565         .slave          = &omap3xxx_timer7_hwmod,
2566         .clk            = "gpt7_ick",
2567         .addr           = omap3xxx_timer7_addrs,
2568         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2569 };
2570
2571 static struct omap_hwmod_addr_space omap3xxx_timer8_addrs[] = {
2572         {
2573                 .pa_start       = 0x4903E000,
2574                 .pa_end         = 0x4903E000 + SZ_1K - 1,
2575                 .flags          = ADDR_TYPE_RT
2576         },
2577         { }
2578 };
2579
2580 /* l4_per -> timer8 */
2581 static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer8 = {
2582         .master         = &omap3xxx_l4_per_hwmod,
2583         .slave          = &omap3xxx_timer8_hwmod,
2584         .clk            = "gpt8_ick",
2585         .addr           = omap3xxx_timer8_addrs,
2586         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2587 };
2588
2589 static struct omap_hwmod_addr_space omap3xxx_timer9_addrs[] = {
2590         {
2591                 .pa_start       = 0x49040000,
2592                 .pa_end         = 0x49040000 + SZ_1K - 1,
2593                 .flags          = ADDR_TYPE_RT
2594         },
2595         { }
2596 };
2597
2598 /* l4_per -> timer9 */
2599 static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer9 = {
2600         .master         = &omap3xxx_l4_per_hwmod,
2601         .slave          = &omap3xxx_timer9_hwmod,
2602         .clk            = "gpt9_ick",
2603         .addr           = omap3xxx_timer9_addrs,
2604         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2605 };
2606
2607 /* l4_core -> timer10 */
2608 static struct omap_hwmod_ocp_if omap3xxx_l4_core__timer10 = {
2609         .master         = &omap3xxx_l4_core_hwmod,
2610         .slave          = &omap3xxx_timer10_hwmod,
2611         .clk            = "gpt10_ick",
2612         .addr           = omap2_timer10_addrs,
2613         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2614 };
2615
2616 /* l4_core -> timer11 */
2617 static struct omap_hwmod_ocp_if omap3xxx_l4_core__timer11 = {
2618         .master         = &omap3xxx_l4_core_hwmod,
2619         .slave          = &omap3xxx_timer11_hwmod,
2620         .clk            = "gpt11_ick",
2621         .addr           = omap2_timer11_addrs,
2622         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2623 };
2624
2625 static struct omap_hwmod_addr_space omap3xxx_timer12_addrs[] = {
2626         {
2627                 .pa_start       = 0x48304000,
2628                 .pa_end         = 0x48304000 + SZ_1K - 1,
2629                 .flags          = ADDR_TYPE_RT
2630         },
2631         { }
2632 };
2633
2634 /* l4_core -> timer12 */
2635 static struct omap_hwmod_ocp_if omap3xxx_l4_sec__timer12 = {
2636         .master         = &omap3xxx_l4_sec_hwmod,
2637         .slave          = &omap3xxx_timer12_hwmod,
2638         .clk            = "gpt12_ick",
2639         .addr           = omap3xxx_timer12_addrs,
2640         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2641 };
2642
2643 /* l4_wkup -> wd_timer2 */
2644 static struct omap_hwmod_addr_space omap3xxx_wd_timer2_addrs[] = {
2645         {
2646                 .pa_start       = 0x48314000,
2647                 .pa_end         = 0x4831407f,
2648                 .flags          = ADDR_TYPE_RT
2649         },
2650         { }
2651 };
2652
2653 static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__wd_timer2 = {
2654         .master         = &omap3xxx_l4_wkup_hwmod,
2655         .slave          = &omap3xxx_wd_timer2_hwmod,
2656         .clk            = "wdt2_ick",
2657         .addr           = omap3xxx_wd_timer2_addrs,
2658         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2659 };
2660
2661 /* l4_core -> dss */
2662 static struct omap_hwmod_ocp_if omap3430es1_l4_core__dss = {
2663         .master         = &omap3xxx_l4_core_hwmod,
2664         .slave          = &omap3430es1_dss_core_hwmod,
2665         .clk            = "dss_ick",
2666         .addr           = omap2_dss_addrs,
2667         .fw = {
2668                 .omap2 = {
2669                         .l4_fw_region  = OMAP3ES1_L4_CORE_FW_DSS_CORE_REGION,
2670                         .l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
2671                         .flags  = OMAP_FIREWALL_L4,
2672                 }
2673         },
2674         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2675 };
2676
2677 static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss = {
2678         .master         = &omap3xxx_l4_core_hwmod,
2679         .slave          = &omap3xxx_dss_core_hwmod,
2680         .clk            = "dss_ick",
2681         .addr           = omap2_dss_addrs,
2682         .fw = {
2683                 .omap2 = {
2684                         .l4_fw_region  = OMAP3_L4_CORE_FW_DSS_CORE_REGION,
2685                         .l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
2686                         .flags  = OMAP_FIREWALL_L4,
2687                 }
2688         },
2689         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2690 };
2691
2692 /* l4_core -> dss_dispc */
2693 static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_dispc = {
2694         .master         = &omap3xxx_l4_core_hwmod,
2695         .slave          = &omap3xxx_dss_dispc_hwmod,
2696         .clk            = "dss_ick",
2697         .addr           = omap2_dss_dispc_addrs,
2698         .fw = {
2699                 .omap2 = {
2700                         .l4_fw_region  = OMAP3_L4_CORE_FW_DSS_DISPC_REGION,
2701                         .l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
2702                         .flags  = OMAP_FIREWALL_L4,
2703                 }
2704         },
2705         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2706 };
2707
2708 static struct omap_hwmod_addr_space omap3xxx_dss_dsi1_addrs[] = {
2709         {
2710                 .pa_start       = 0x4804FC00,
2711                 .pa_end         = 0x4804FFFF,
2712                 .flags          = ADDR_TYPE_RT
2713         },
2714         { }
2715 };
2716
2717 /* l4_core -> dss_dsi1 */
2718 static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_dsi1 = {
2719         .master         = &omap3xxx_l4_core_hwmod,
2720         .slave          = &omap3xxx_dss_dsi1_hwmod,
2721         .clk            = "dss_ick",
2722         .addr           = omap3xxx_dss_dsi1_addrs,
2723         .fw = {
2724                 .omap2 = {
2725                         .l4_fw_region  = OMAP3_L4_CORE_FW_DSS_DSI_REGION,
2726                         .l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
2727                         .flags  = OMAP_FIREWALL_L4,
2728                 }
2729         },
2730         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2731 };
2732
2733 /* l4_core -> dss_rfbi */
2734 static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_rfbi = {
2735         .master         = &omap3xxx_l4_core_hwmod,
2736         .slave          = &omap3xxx_dss_rfbi_hwmod,
2737         .clk            = "dss_ick",
2738         .addr           = omap2_dss_rfbi_addrs,
2739         .fw = {
2740                 .omap2 = {
2741                         .l4_fw_region  = OMAP3_L4_CORE_FW_DSS_RFBI_REGION,
2742                         .l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP ,
2743                         .flags  = OMAP_FIREWALL_L4,
2744                 }
2745         },
2746         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2747 };
2748
2749 /* l4_core -> dss_venc */
2750 static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_venc = {
2751         .master         = &omap3xxx_l4_core_hwmod,
2752         .slave          = &omap3xxx_dss_venc_hwmod,
2753         .clk            = "dss_ick",
2754         .addr           = omap2_dss_venc_addrs,
2755         .fw = {
2756                 .omap2 = {
2757                         .l4_fw_region  = OMAP3_L4_CORE_FW_DSS_VENC_REGION,
2758                         .l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
2759                         .flags  = OMAP_FIREWALL_L4,
2760                 }
2761         },
2762         .flags          = OCPIF_SWSUP_IDLE,
2763         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2764 };
2765
2766 /* l4_wkup -> gpio1 */
2767 static struct omap_hwmod_addr_space omap3xxx_gpio1_addrs[] = {
2768         {
2769                 .pa_start       = 0x48310000,
2770                 .pa_end         = 0x483101ff,
2771                 .flags          = ADDR_TYPE_RT
2772         },
2773         { }
2774 };
2775
2776 static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__gpio1 = {
2777         .master         = &omap3xxx_l4_wkup_hwmod,
2778         .slave          = &omap3xxx_gpio1_hwmod,
2779         .addr           = omap3xxx_gpio1_addrs,
2780         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2781 };
2782
2783 /* l4_per -> gpio2 */
2784 static struct omap_hwmod_addr_space omap3xxx_gpio2_addrs[] = {
2785         {
2786                 .pa_start       = 0x49050000,
2787                 .pa_end         = 0x490501ff,
2788                 .flags          = ADDR_TYPE_RT
2789         },
2790         { }
2791 };
2792
2793 static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio2 = {
2794         .master         = &omap3xxx_l4_per_hwmod,
2795         .slave          = &omap3xxx_gpio2_hwmod,
2796         .addr           = omap3xxx_gpio2_addrs,
2797         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2798 };
2799
2800 /* l4_per -> gpio3 */
2801 static struct omap_hwmod_addr_space omap3xxx_gpio3_addrs[] = {
2802         {
2803                 .pa_start       = 0x49052000,
2804                 .pa_end         = 0x490521ff,
2805                 .flags          = ADDR_TYPE_RT
2806         },
2807         { }
2808 };
2809
2810 static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio3 = {
2811         .master         = &omap3xxx_l4_per_hwmod,
2812         .slave          = &omap3xxx_gpio3_hwmod,
2813         .addr           = omap3xxx_gpio3_addrs,
2814         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2815 };
2816
2817 /* l4_per -> gpio4 */
2818 static struct omap_hwmod_addr_space omap3xxx_gpio4_addrs[] = {
2819         {
2820                 .pa_start       = 0x49054000,
2821                 .pa_end         = 0x490541ff,
2822                 .flags          = ADDR_TYPE_RT
2823         },
2824         { }
2825 };
2826
2827 static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio4 = {
2828         .master         = &omap3xxx_l4_per_hwmod,
2829         .slave          = &omap3xxx_gpio4_hwmod,
2830         .addr           = omap3xxx_gpio4_addrs,
2831         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2832 };
2833
2834 /* l4_per -> gpio5 */
2835 static struct omap_hwmod_addr_space omap3xxx_gpio5_addrs[] = {
2836         {
2837                 .pa_start       = 0x49056000,
2838                 .pa_end         = 0x490561ff,
2839                 .flags          = ADDR_TYPE_RT
2840         },
2841         { }
2842 };
2843
2844 static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio5 = {
2845         .master         = &omap3xxx_l4_per_hwmod,
2846         .slave          = &omap3xxx_gpio5_hwmod,
2847         .addr           = omap3xxx_gpio5_addrs,
2848         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2849 };
2850
2851 /* l4_per -> gpio6 */
2852 static struct omap_hwmod_addr_space omap3xxx_gpio6_addrs[] = {
2853         {
2854                 .pa_start       = 0x49058000,
2855                 .pa_end         = 0x490581ff,
2856                 .flags          = ADDR_TYPE_RT
2857         },
2858         { }
2859 };
2860
2861 static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio6 = {
2862         .master         = &omap3xxx_l4_per_hwmod,
2863         .slave          = &omap3xxx_gpio6_hwmod,
2864         .addr           = omap3xxx_gpio6_addrs,
2865         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2866 };
2867
2868 /* dma_system -> L3 */
2869 static struct omap_hwmod_ocp_if omap3xxx_dma_system__l3 = {
2870         .master         = &omap3xxx_dma_system_hwmod,
2871         .slave          = &omap3xxx_l3_main_hwmod,
2872         .clk            = "core_l3_ick",
2873         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2874 };
2875
2876 static struct omap_hwmod_addr_space omap3xxx_dma_system_addrs[] = {
2877         {
2878                 .pa_start       = 0x48056000,
2879                 .pa_end         = 0x48056fff,
2880                 .flags          = ADDR_TYPE_RT
2881         },
2882         { }
2883 };
2884
2885 /* l4_cfg -> dma_system */
2886 static struct omap_hwmod_ocp_if omap3xxx_l4_core__dma_system = {
2887         .master         = &omap3xxx_l4_core_hwmod,
2888         .slave          = &omap3xxx_dma_system_hwmod,
2889         .clk            = "core_l4_ick",
2890         .addr           = omap3xxx_dma_system_addrs,
2891         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2892 };
2893
2894 static struct omap_hwmod_addr_space omap3xxx_mcbsp1_addrs[] = {
2895         {
2896                 .name           = "mpu",
2897                 .pa_start       = 0x48074000,
2898                 .pa_end         = 0x480740ff,
2899                 .flags          = ADDR_TYPE_RT
2900         },
2901         { }
2902 };
2903
2904 /* l4_core -> mcbsp1 */
2905 static struct omap_hwmod_ocp_if omap3xxx_l4_core__mcbsp1 = {
2906         .master         = &omap3xxx_l4_core_hwmod,
2907         .slave          = &omap3xxx_mcbsp1_hwmod,
2908         .clk            = "mcbsp1_ick",
2909         .addr           = omap3xxx_mcbsp1_addrs,
2910         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2911 };
2912
2913 static struct omap_hwmod_addr_space omap3xxx_mcbsp2_addrs[] = {
2914         {
2915                 .name           = "mpu",
2916                 .pa_start       = 0x49022000,
2917                 .pa_end         = 0x490220ff,
2918                 .flags          = ADDR_TYPE_RT
2919         },
2920         { }
2921 };
2922
2923 /* l4_per -> mcbsp2 */
2924 static struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp2 = {
2925         .master         = &omap3xxx_l4_per_hwmod,
2926         .slave          = &omap3xxx_mcbsp2_hwmod,
2927         .clk            = "mcbsp2_ick",
2928         .addr           = omap3xxx_mcbsp2_addrs,
2929         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2930 };
2931
2932 static struct omap_hwmod_addr_space omap3xxx_mcbsp3_addrs[] = {
2933         {
2934                 .name           = "mpu",
2935                 .pa_start       = 0x49024000,
2936                 .pa_end         = 0x490240ff,
2937                 .flags          = ADDR_TYPE_RT
2938         },
2939         { }
2940 };
2941
2942 /* l4_per -> mcbsp3 */
2943 static struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp3 = {
2944         .master         = &omap3xxx_l4_per_hwmod,
2945         .slave          = &omap3xxx_mcbsp3_hwmod,
2946         .clk            = "mcbsp3_ick",
2947         .addr           = omap3xxx_mcbsp3_addrs,
2948         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2949 };
2950
2951 static struct omap_hwmod_addr_space omap3xxx_mcbsp4_addrs[] = {
2952         {
2953                 .name           = "mpu",
2954                 .pa_start       = 0x49026000,
2955                 .pa_end         = 0x490260ff,
2956                 .flags          = ADDR_TYPE_RT
2957         },
2958         { }
2959 };
2960
2961 /* l4_per -> mcbsp4 */
2962 static struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp4 = {
2963         .master         = &omap3xxx_l4_per_hwmod,
2964         .slave          = &omap3xxx_mcbsp4_hwmod,
2965         .clk            = "mcbsp4_ick",
2966         .addr           = omap3xxx_mcbsp4_addrs,
2967         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2968 };
2969
2970 static struct omap_hwmod_addr_space omap3xxx_mcbsp5_addrs[] = {
2971         {
2972                 .name           = "mpu",
2973                 .pa_start       = 0x48096000,
2974                 .pa_end         = 0x480960ff,
2975                 .flags          = ADDR_TYPE_RT
2976         },
2977         { }
2978 };
2979
2980 /* l4_core -> mcbsp5 */
2981 static struct omap_hwmod_ocp_if omap3xxx_l4_core__mcbsp5 = {
2982         .master         = &omap3xxx_l4_core_hwmod,
2983         .slave          = &omap3xxx_mcbsp5_hwmod,
2984         .clk            = "mcbsp5_ick",
2985         .addr           = omap3xxx_mcbsp5_addrs,
2986         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2987 };
2988
2989 static struct omap_hwmod_addr_space omap3xxx_mcbsp2_sidetone_addrs[] = {
2990         {
2991                 .name           = "sidetone",
2992                 .pa_start       = 0x49028000,
2993                 .pa_end         = 0x490280ff,
2994                 .flags          = ADDR_TYPE_RT
2995         },
2996         { }
2997 };
2998
2999 /* l4_per -> mcbsp2_sidetone */
3000 static struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp2_sidetone = {
3001         .master         = &omap3xxx_l4_per_hwmod,
3002         .slave          = &omap3xxx_mcbsp2_sidetone_hwmod,
3003         .clk            = "mcbsp2_ick",
3004         .addr           = omap3xxx_mcbsp2_sidetone_addrs,
3005         .user           = OCP_USER_MPU,
3006 };
3007
3008 static struct omap_hwmod_addr_space omap3xxx_mcbsp3_sidetone_addrs[] = {
3009         {
3010                 .name           = "sidetone",
3011                 .pa_start       = 0x4902A000,
3012                 .pa_end         = 0x4902A0ff,
3013                 .flags          = ADDR_TYPE_RT
3014         },
3015         { }
3016 };
3017
3018 /* l4_per -> mcbsp3_sidetone */
3019 static struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp3_sidetone = {
3020         .master         = &omap3xxx_l4_per_hwmod,
3021         .slave          = &omap3xxx_mcbsp3_sidetone_hwmod,
3022         .clk            = "mcbsp3_ick",
3023         .addr           = omap3xxx_mcbsp3_sidetone_addrs,
3024         .user           = OCP_USER_MPU,
3025 };
3026
3027 static struct omap_hwmod_addr_space omap3xxx_mailbox_addrs[] = {
3028         {
3029                 .pa_start       = 0x48094000,
3030                 .pa_end         = 0x480941ff,
3031                 .flags          = ADDR_TYPE_RT,
3032         },
3033         { }
3034 };
3035
3036 /* l4_core -> mailbox */
3037 static struct omap_hwmod_ocp_if omap3xxx_l4_core__mailbox = {
3038         .master         = &omap3xxx_l4_core_hwmod,
3039         .slave          = &omap3xxx_mailbox_hwmod,
3040         .addr           = omap3xxx_mailbox_addrs,
3041         .user           = OCP_USER_MPU | OCP_USER_SDMA,
3042 };
3043
3044 /* l4 core -> mcspi1 interface */
3045 static struct omap_hwmod_ocp_if omap34xx_l4_core__mcspi1 = {
3046         .master         = &omap3xxx_l4_core_hwmod,
3047         .slave          = &omap34xx_mcspi1,
3048         .clk            = "mcspi1_ick",
3049         .addr           = omap2_mcspi1_addr_space,
3050         .user           = OCP_USER_MPU | OCP_USER_SDMA,
3051 };
3052
3053 /* l4 core -> mcspi2 interface */
3054 static struct omap_hwmod_ocp_if omap34xx_l4_core__mcspi2 = {
3055         .master         = &omap3xxx_l4_core_hwmod,
3056         .slave          = &omap34xx_mcspi2,
3057         .clk            = "mcspi2_ick",
3058         .addr           = omap2_mcspi2_addr_space,
3059         .user           = OCP_USER_MPU | OCP_USER_SDMA,
3060 };
3061
3062 /* l4 core -> mcspi3 interface */
3063 static struct omap_hwmod_ocp_if omap34xx_l4_core__mcspi3 = {
3064         .master         = &omap3xxx_l4_core_hwmod,
3065         .slave          = &omap34xx_mcspi3,
3066         .clk            = "mcspi3_ick",
3067         .addr           = omap2430_mcspi3_addr_space,
3068         .user           = OCP_USER_MPU | OCP_USER_SDMA,
3069 };
3070
3071 /* l4 core -> mcspi4 interface */
3072 static struct omap_hwmod_addr_space omap34xx_mcspi4_addr_space[] = {
3073         {
3074                 .pa_start       = 0x480ba000,
3075                 .pa_end         = 0x480ba0ff,
3076                 .flags          = ADDR_TYPE_RT,
3077         },
3078         { }
3079 };
3080
3081 static struct omap_hwmod_ocp_if omap34xx_l4_core__mcspi4 = {
3082         .master         = &omap3xxx_l4_core_hwmod,
3083         .slave          = &omap34xx_mcspi4,
3084         .clk            = "mcspi4_ick",
3085         .addr           = omap34xx_mcspi4_addr_space,
3086         .user           = OCP_USER_MPU | OCP_USER_SDMA,
3087 };
3088
3089 static struct omap_hwmod_ocp_if omap3xxx_usb_host_hs__l3_main_2 = {
3090         .master         = &omap3xxx_usb_host_hs_hwmod,
3091         .slave          = &omap3xxx_l3_main_hwmod,
3092         .clk            = "core_l3_ick",
3093         .user           = OCP_USER_MPU,
3094 };
3095
3096 static struct omap_hwmod_addr_space omap3xxx_usb_host_hs_addrs[] = {
3097         {
3098                 .name           = "uhh",
3099                 .pa_start       = 0x48064000,
3100                 .pa_end         = 0x480643ff,
3101                 .flags          = ADDR_TYPE_RT
3102         },
3103         {
3104                 .name           = "ohci",
3105                 .pa_start       = 0x48064400,
3106                 .pa_end         = 0x480647ff,
3107         },
3108         {
3109                 .name           = "ehci",
3110                 .pa_start       = 0x48064800,
3111                 .pa_end         = 0x48064cff,
3112         },
3113         {}
3114 };
3115
3116 static struct omap_hwmod_ocp_if omap3xxx_l4_core__usb_host_hs = {
3117         .master         = &omap3xxx_l4_core_hwmod,
3118         .slave          = &omap3xxx_usb_host_hs_hwmod,
3119         .clk            = "usbhost_ick",
3120         .addr           = omap3xxx_usb_host_hs_addrs,
3121         .user           = OCP_USER_MPU | OCP_USER_SDMA,
3122 };
3123
3124 static struct omap_hwmod_addr_space omap3xxx_usb_tll_hs_addrs[] = {
3125         {
3126                 .name           = "tll",
3127                 .pa_start       = 0x48062000,
3128                 .pa_end         = 0x48062fff,
3129                 .flags          = ADDR_TYPE_RT
3130         },
3131         {}
3132 };
3133
3134 static struct omap_hwmod_ocp_if omap3xxx_l4_core__usb_tll_hs = {
3135         .master         = &omap3xxx_l4_core_hwmod,
3136         .slave          = &omap3xxx_usb_tll_hs_hwmod,
3137         .clk            = "usbtll_ick",
3138         .addr           = omap3xxx_usb_tll_hs_addrs,
3139         .user           = OCP_USER_MPU | OCP_USER_SDMA,
3140 };
3141
3142 /* l4_core -> hdq1w interface */
3143 static struct omap_hwmod_ocp_if omap3xxx_l4_core__hdq1w = {
3144         .master         = &omap3xxx_l4_core_hwmod,
3145         .slave          = &omap3xxx_hdq1w_hwmod,
3146         .clk            = "hdq_ick",
3147         .addr           = omap2_hdq1w_addr_space,
3148         .user           = OCP_USER_MPU | OCP_USER_SDMA,
3149         .flags          = OMAP_FIREWALL_L4 | OCPIF_SWSUP_IDLE,
3150 };
3151
3152 /* l4_wkup -> 32ksync_counter */
3153 static struct omap_hwmod_addr_space omap3xxx_counter_32k_addrs[] = {
3154         {
3155                 .pa_start       = 0x48320000,
3156                 .pa_end         = 0x4832001f,
3157                 .flags          = ADDR_TYPE_RT
3158         },
3159         { }
3160 };
3161
3162 static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__counter_32k = {
3163         .master         = &omap3xxx_l4_wkup_hwmod,
3164         .slave          = &omap3xxx_counter_32k_hwmod,
3165         .clk            = "omap_32ksync_ick",
3166         .addr           = omap3xxx_counter_32k_addrs,
3167         .user           = OCP_USER_MPU | OCP_USER_SDMA,
3168 };
3169
3170 /* am35xx has Davinci MDIO & EMAC */
3171 static struct omap_hwmod_class am35xx_mdio_class = {
3172         .name = "davinci_mdio",
3173 };
3174
3175 static struct omap_hwmod am35xx_mdio_hwmod = {
3176         .name           = "davinci_mdio",
3177         .class          = &am35xx_mdio_class,
3178         .flags          = HWMOD_NO_IDLEST,
3179 };
3180
3181 /*
3182  * XXX Should be connected to an IPSS hwmod, not the L3 directly;
3183  * but this will probably require some additional hwmod core support,
3184  * so is left as a future to-do item.
3185  */
3186 static struct omap_hwmod_ocp_if am35xx_mdio__l3 = {
3187         .master         = &am35xx_mdio_hwmod,
3188         .slave          = &omap3xxx_l3_main_hwmod,
3189         .clk            = "emac_fck",
3190         .user           = OCP_USER_MPU,
3191 };
3192
3193 static struct omap_hwmod_addr_space am35xx_mdio_addrs[] = {
3194         {
3195                 .pa_start       = AM35XX_IPSS_MDIO_BASE,
3196                 .pa_end         = AM35XX_IPSS_MDIO_BASE + SZ_4K - 1,
3197                 .flags          = ADDR_TYPE_RT,
3198         },
3199         { }
3200 };
3201
3202 /* l4_core -> davinci mdio  */
3203 /*
3204  * XXX Should be connected to an IPSS hwmod, not the L4_CORE directly;
3205  * but this will probably require some additional hwmod core support,
3206  * so is left as a future to-do item.
3207  */
3208 static struct omap_hwmod_ocp_if am35xx_l4_core__mdio = {
3209         .master         = &omap3xxx_l4_core_hwmod,
3210         .slave          = &am35xx_mdio_hwmod,
3211         .clk            = "emac_fck",
3212         .addr           = am35xx_mdio_addrs,
3213         .user           = OCP_USER_MPU,
3214 };
3215
3216 static struct omap_hwmod_irq_info am35xx_emac_mpu_irqs[] = {
3217         { .name = "rxthresh",   .irq = INT_35XX_EMAC_C0_RXTHRESH_IRQ },
3218         { .name = "rx_pulse",   .irq = INT_35XX_EMAC_C0_RX_PULSE_IRQ },
3219         { .name = "tx_pulse",   .irq = INT_35XX_EMAC_C0_TX_PULSE_IRQ },
3220         { .name = "misc_pulse", .irq = INT_35XX_EMAC_C0_MISC_PULSE_IRQ },
3221         { .irq = -1 }
3222 };
3223
3224 static struct omap_hwmod_class am35xx_emac_class = {
3225         .name = "davinci_emac",
3226 };
3227
3228 static struct omap_hwmod am35xx_emac_hwmod = {
3229         .name           = "davinci_emac",
3230         .mpu_irqs       = am35xx_emac_mpu_irqs,
3231         .class          = &am35xx_emac_class,
3232         .flags          = HWMOD_NO_IDLEST,
3233 };
3234
3235 /* l3_core -> davinci emac interface */
3236 /*
3237  * XXX Should be connected to an IPSS hwmod, not the L3 directly;
3238  * but this will probably require some additional hwmod core support,
3239  * so is left as a future to-do item.
3240  */
3241 static struct omap_hwmod_ocp_if am35xx_emac__l3 = {
3242         .master         = &am35xx_emac_hwmod,
3243         .slave          = &omap3xxx_l3_main_hwmod,
3244         .clk            = "emac_ick",
3245         .user           = OCP_USER_MPU,
3246 };
3247
3248 static struct omap_hwmod_addr_space am35xx_emac_addrs[] = {
3249         {
3250                 .pa_start       = AM35XX_IPSS_EMAC_BASE,
3251                 .pa_end         = AM35XX_IPSS_EMAC_BASE + 0x30000 - 1,
3252                 .flags          = ADDR_TYPE_RT,
3253         },
3254         { }
3255 };
3256
3257 /* l4_core -> davinci emac  */
3258 /*
3259  * XXX Should be connected to an IPSS hwmod, not the L4_CORE directly;
3260  * but this will probably require some additional hwmod core support,
3261  * so is left as a future to-do item.
3262  */
3263 static struct omap_hwmod_ocp_if am35xx_l4_core__emac = {
3264         .master         = &omap3xxx_l4_core_hwmod,
3265         .slave          = &am35xx_emac_hwmod,
3266         .clk            = "emac_ick",
3267         .addr           = am35xx_emac_addrs,
3268         .user           = OCP_USER_MPU,
3269 };
3270
3271 static struct omap_hwmod_ocp_if *omap3xxx_hwmod_ocp_ifs[] __initdata = {
3272         &omap3xxx_l3_main__l4_core,
3273         &omap3xxx_l3_main__l4_per,
3274         &omap3xxx_mpu__l3_main,
3275         &omap3xxx_l4_core__l4_wkup,
3276         &omap3xxx_l4_core__mmc3,
3277         &omap3_l4_core__uart1,
3278         &omap3_l4_core__uart2,
3279         &omap3_l4_per__uart3,
3280         &omap3_l4_core__i2c1,
3281         &omap3_l4_core__i2c2,
3282         &omap3_l4_core__i2c3,
3283         &omap3xxx_l4_wkup__l4_sec,
3284         &omap3xxx_l4_wkup__timer1,
3285         &omap3xxx_l4_per__timer2,
3286         &omap3xxx_l4_per__timer3,
3287         &omap3xxx_l4_per__timer4,
3288         &omap3xxx_l4_per__timer5,
3289         &omap3xxx_l4_per__timer6,
3290         &omap3xxx_l4_per__timer7,
3291         &omap3xxx_l4_per__timer8,
3292         &omap3xxx_l4_per__timer9,
3293         &omap3xxx_l4_core__timer10,
3294         &omap3xxx_l4_core__timer11,
3295         &omap3xxx_l4_wkup__wd_timer2,
3296         &omap3xxx_l4_wkup__gpio1,
3297         &omap3xxx_l4_per__gpio2,
3298         &omap3xxx_l4_per__gpio3,
3299         &omap3xxx_l4_per__gpio4,
3300         &omap3xxx_l4_per__gpio5,
3301         &omap3xxx_l4_per__gpio6,
3302         &omap3xxx_dma_system__l3,
3303         &omap3xxx_l4_core__dma_system,
3304         &omap3xxx_l4_core__mcbsp1,
3305         &omap3xxx_l4_per__mcbsp2,
3306         &omap3xxx_l4_per__mcbsp3,
3307         &omap3xxx_l4_per__mcbsp4,
3308         &omap3xxx_l4_core__mcbsp5,
3309         &omap3xxx_l4_per__mcbsp2_sidetone,
3310         &omap3xxx_l4_per__mcbsp3_sidetone,
3311         &omap34xx_l4_core__mcspi1,
3312         &omap34xx_l4_core__mcspi2,
3313         &omap34xx_l4_core__mcspi3,
3314         &omap34xx_l4_core__mcspi4,
3315         &omap3xxx_l4_wkup__counter_32k,
3316         NULL,
3317 };
3318
3319 /* GP-only hwmod links */
3320 static struct omap_hwmod_ocp_if *omap3xxx_gp_hwmod_ocp_ifs[] __initdata = {
3321         &omap3xxx_l4_sec__timer12,
3322         NULL
3323 };
3324
3325 /* 3430ES1-only hwmod links */
3326 static struct omap_hwmod_ocp_if *omap3430es1_hwmod_ocp_ifs[] __initdata = {
3327         &omap3430es1_dss__l3,
3328         &omap3430es1_l4_core__dss,
3329         NULL
3330 };
3331
3332 /* 3430ES2+-only hwmod links */
3333 static struct omap_hwmod_ocp_if *omap3430es2plus_hwmod_ocp_ifs[] __initdata = {
3334         &omap3xxx_dss__l3,
3335         &omap3xxx_l4_core__dss,
3336         &omap3xxx_usbhsotg__l3,
3337         &omap3xxx_l4_core__usbhsotg,
3338         &omap3xxx_usb_host_hs__l3_main_2,
3339         &omap3xxx_l4_core__usb_host_hs,
3340         &omap3xxx_l4_core__usb_tll_hs,
3341         NULL
3342 };
3343
3344 /* <= 3430ES3-only hwmod links */
3345 static struct omap_hwmod_ocp_if *omap3430_pre_es3_hwmod_ocp_ifs[] __initdata = {
3346         &omap3xxx_l4_core__pre_es3_mmc1,
3347         &omap3xxx_l4_core__pre_es3_mmc2,
3348         NULL
3349 };
3350
3351 /* 3430ES3+-only hwmod links */
3352 static struct omap_hwmod_ocp_if *omap3430_es3plus_hwmod_ocp_ifs[] __initdata = {
3353         &omap3xxx_l4_core__es3plus_mmc1,
3354         &omap3xxx_l4_core__es3plus_mmc2,
3355         NULL
3356 };
3357
3358 /* 34xx-only hwmod links (all ES revisions) */
3359 static struct omap_hwmod_ocp_if *omap34xx_hwmod_ocp_ifs[] __initdata = {
3360         &omap3xxx_l3__iva,
3361         &omap34xx_l4_core__sr1,
3362         &omap34xx_l4_core__sr2,
3363         &omap3xxx_l4_core__mailbox,
3364         &omap3xxx_l4_core__hdq1w,
3365         NULL
3366 };
3367
3368 /* 36xx-only hwmod links (all ES revisions) */
3369 static struct omap_hwmod_ocp_if *omap36xx_hwmod_ocp_ifs[] __initdata = {
3370         &omap3xxx_l3__iva,
3371         &omap36xx_l4_per__uart4,
3372         &omap3xxx_dss__l3,
3373         &omap3xxx_l4_core__dss,
3374         &omap36xx_l4_core__sr1,
3375         &omap36xx_l4_core__sr2,
3376         &omap3xxx_usbhsotg__l3,
3377         &omap3xxx_l4_core__usbhsotg,
3378         &omap3xxx_l4_core__mailbox,
3379         &omap3xxx_usb_host_hs__l3_main_2,
3380         &omap3xxx_l4_core__usb_host_hs,
3381         &omap3xxx_l4_core__usb_tll_hs,
3382         &omap3xxx_l4_core__es3plus_mmc1,
3383         &omap3xxx_l4_core__es3plus_mmc2,
3384         &omap3xxx_l4_core__hdq1w,
3385         NULL
3386 };
3387
3388 static struct omap_hwmod_ocp_if *am35xx_hwmod_ocp_ifs[] __initdata = {
3389         &omap3xxx_dss__l3,
3390         &omap3xxx_l4_core__dss,
3391         &am35xx_usbhsotg__l3,
3392         &am35xx_l4_core__usbhsotg,
3393         &am35xx_l4_core__uart4,
3394         &omap3xxx_usb_host_hs__l3_main_2,
3395         &omap3xxx_l4_core__usb_host_hs,
3396         &omap3xxx_l4_core__usb_tll_hs,
3397         &omap3xxx_l4_core__es3plus_mmc1,
3398         &omap3xxx_l4_core__es3plus_mmc2,
3399         &am35xx_mdio__l3,
3400         &am35xx_l4_core__mdio,
3401         &am35xx_emac__l3,
3402         &am35xx_l4_core__emac,
3403         NULL
3404 };
3405
3406 static struct omap_hwmod_ocp_if *omap3xxx_dss_hwmod_ocp_ifs[] __initdata = {
3407         &omap3xxx_l4_core__dss_dispc,
3408         &omap3xxx_l4_core__dss_dsi1,
3409         &omap3xxx_l4_core__dss_rfbi,
3410         &omap3xxx_l4_core__dss_venc,
3411         NULL
3412 };
3413
3414 int __init omap3xxx_hwmod_init(void)
3415 {
3416         int r;
3417         struct omap_hwmod_ocp_if **h = NULL;
3418         unsigned int rev;
3419
3420         omap_hwmod_init();
3421
3422         /* Register hwmod links common to all OMAP3 */
3423         r = omap_hwmod_register_links(omap3xxx_hwmod_ocp_ifs);
3424         if (r < 0)
3425                 return r;
3426
3427         /* Register GP-only hwmod links. */
3428         if (omap_type() == OMAP2_DEVICE_TYPE_GP) {
3429                 r = omap_hwmod_register_links(omap3xxx_gp_hwmod_ocp_ifs);
3430                 if (r < 0)
3431                         return r;
3432         }
3433
3434         rev = omap_rev();
3435
3436         /*
3437          * Register hwmod links common to individual OMAP3 families, all
3438          * silicon revisions (e.g., 34xx, or AM3505/3517, or 36xx)
3439          * All possible revisions should be included in this conditional.
3440          */
3441         if (rev == OMAP3430_REV_ES1_0 || rev == OMAP3430_REV_ES2_0 ||
3442             rev == OMAP3430_REV_ES2_1 || rev == OMAP3430_REV_ES3_0 ||
3443             rev == OMAP3430_REV_ES3_1 || rev == OMAP3430_REV_ES3_1_2) {
3444                 h = omap34xx_hwmod_ocp_ifs;
3445         } else if (rev == AM35XX_REV_ES1_0 || rev == AM35XX_REV_ES1_1) {
3446                 h = am35xx_hwmod_ocp_ifs;
3447         } else if (rev == OMAP3630_REV_ES1_0 || rev == OMAP3630_REV_ES1_1 ||
3448                    rev == OMAP3630_REV_ES1_2) {
3449                 h = omap36xx_hwmod_ocp_ifs;
3450         } else {
3451                 WARN(1, "OMAP3 hwmod family init: unknown chip type\n");
3452                 return -EINVAL;
3453         };
3454
3455         r = omap_hwmod_register_links(h);
3456         if (r < 0)
3457                 return r;
3458
3459         /*
3460          * Register hwmod links specific to certain ES levels of a
3461          * particular family of silicon (e.g., 34xx ES1.0)
3462          */
3463         h = NULL;
3464         if (rev == OMAP3430_REV_ES1_0) {
3465                 h = omap3430es1_hwmod_ocp_ifs;
3466         } else if (rev == OMAP3430_REV_ES2_0 || rev == OMAP3430_REV_ES2_1 ||
3467                    rev == OMAP3430_REV_ES3_0 || rev == OMAP3430_REV_ES3_1 ||
3468                    rev == OMAP3430_REV_ES3_1_2) {
3469                 h = omap3430es2plus_hwmod_ocp_ifs;
3470         };
3471
3472         if (h) {
3473                 r = omap_hwmod_register_links(h);
3474                 if (r < 0)
3475                         return r;
3476         }
3477
3478         h = NULL;
3479         if (rev == OMAP3430_REV_ES1_0 || rev == OMAP3430_REV_ES2_0 ||
3480             rev == OMAP3430_REV_ES2_1) {
3481                 h = omap3430_pre_es3_hwmod_ocp_ifs;
3482         } else if (rev == OMAP3430_REV_ES3_0 || rev == OMAP3430_REV_ES3_1 ||
3483                    rev == OMAP3430_REV_ES3_1_2) {
3484                 h = omap3430_es3plus_hwmod_ocp_ifs;
3485         };
3486
3487         if (h)
3488                 r = omap_hwmod_register_links(h);
3489         if (r < 0)
3490                 return r;
3491
3492         /*
3493          * DSS code presumes that dss_core hwmod is handled first,
3494          * _before_ any other DSS related hwmods so register common
3495          * DSS hwmod links last to ensure that dss_core is already
3496          * registered.  Otherwise some change things may happen, for
3497          * ex. if dispc is handled before dss_core and DSS is enabled
3498          * in bootloader DISPC will be reset with outputs enabled
3499          * which sometimes leads to unrecoverable L3 error.  XXX The
3500          * long-term fix to this is to ensure hwmods are set up in
3501          * dependency order in the hwmod core code.
3502          */
3503         r = omap_hwmod_register_links(omap3xxx_dss_hwmod_ocp_ifs);
3504
3505         return r;
3506 }