Merge branch 'linux-4.18' of git://github.com/skeggsb/linux into drm-fixes
[sfrench/cifs-2.6.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
18 #include <linux/platform_data/i2c-omap.h>
19 #include <linux/power/smartreflex.h>
20 #include <linux/platform_data/hsmmc-omap.h>
21
22 #include <linux/omap-dma.h>
23 #include "l3_3xxx.h"
24 #include "l4_3xxx.h"
25
26 #include "soc.h"
27 #include "omap_hwmod.h"
28 #include "omap_hwmod_common_data.h"
29 #include "prm-regbits-34xx.h"
30 #include "cm-regbits-34xx.h"
31
32 #include "i2c.h"
33 #include "wd_timer.h"
34 #include "serial.h"
35
36 /*
37  * OMAP3xxx hardware module integration data
38  *
39  * All of the data in this section should be autogeneratable from the
40  * TI hardware database or other technical documentation.  Data that
41  * is driver-specific or driver-kernel integration-specific belongs
42  * elsewhere.
43  */
44
45 #define AM35XX_IPSS_USBOTGSS_BASE      0x5C040000
46
47 /*
48  * IP blocks
49  */
50
51 /* L3 */
52
53 static struct omap_hwmod omap3xxx_l3_main_hwmod = {
54         .name           = "l3_main",
55         .class          = &l3_hwmod_class,
56         .flags          = HWMOD_NO_IDLEST,
57 };
58
59 /* L4 CORE */
60 static struct omap_hwmod omap3xxx_l4_core_hwmod = {
61         .name           = "l4_core",
62         .class          = &l4_hwmod_class,
63         .flags          = HWMOD_NO_IDLEST,
64 };
65
66 /* L4 PER */
67 static struct omap_hwmod omap3xxx_l4_per_hwmod = {
68         .name           = "l4_per",
69         .class          = &l4_hwmod_class,
70         .flags          = HWMOD_NO_IDLEST,
71 };
72
73 /* L4 WKUP */
74 static struct omap_hwmod omap3xxx_l4_wkup_hwmod = {
75         .name           = "l4_wkup",
76         .class          = &l4_hwmod_class,
77         .flags          = HWMOD_NO_IDLEST,
78 };
79
80 /* L4 SEC */
81 static struct omap_hwmod omap3xxx_l4_sec_hwmod = {
82         .name           = "l4_sec",
83         .class          = &l4_hwmod_class,
84         .flags          = HWMOD_NO_IDLEST,
85 };
86
87 /* MPU */
88
89 static struct omap_hwmod omap3xxx_mpu_hwmod = {
90         .name           = "mpu",
91         .class          = &mpu_hwmod_class,
92         .main_clk       = "arm_fck",
93 };
94
95 /* IVA2 (IVA2) */
96 static struct omap_hwmod_rst_info omap3xxx_iva_resets[] = {
97         { .name = "logic", .rst_shift = 0, .st_shift = 8 },
98         { .name = "seq0", .rst_shift = 1, .st_shift = 9 },
99         { .name = "seq1", .rst_shift = 2, .st_shift = 10 },
100 };
101
102 static struct omap_hwmod omap3xxx_iva_hwmod = {
103         .name           = "iva",
104         .class          = &iva_hwmod_class,
105         .clkdm_name     = "iva2_clkdm",
106         .rst_lines      = omap3xxx_iva_resets,
107         .rst_lines_cnt  = ARRAY_SIZE(omap3xxx_iva_resets),
108         .main_clk       = "iva2_ck",
109         .prcm = {
110                 .omap2 = {
111                         .module_offs = OMAP3430_IVA2_MOD,
112                         .idlest_reg_id = 1,
113                         .idlest_idle_bit = OMAP3430_ST_IVA2_SHIFT,
114                 },
115         },
116 };
117
118 /*
119  * 'debugss' class
120  * debug and emulation sub system
121  */
122
123 static struct omap_hwmod_class omap3xxx_debugss_hwmod_class = {
124         .name   = "debugss",
125 };
126
127 /* debugss */
128 static struct omap_hwmod omap3xxx_debugss_hwmod = {
129         .name           = "debugss",
130         .class          = &omap3xxx_debugss_hwmod_class,
131         .clkdm_name     = "emu_clkdm",
132         .main_clk       = "emu_src_ck",
133         .flags          = HWMOD_NO_IDLEST,
134 };
135
136 /* timer class */
137 static struct omap_hwmod_class_sysconfig omap3xxx_timer_sysc = {
138         .rev_offs       = 0x0000,
139         .sysc_offs      = 0x0010,
140         .syss_offs      = 0x0014,
141         .sysc_flags     = (SYSC_HAS_SIDLEMODE | SYSC_HAS_CLOCKACTIVITY |
142                            SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
143                            SYSC_HAS_EMUFREE | SYSC_HAS_AUTOIDLE |
144                            SYSS_HAS_RESET_STATUS),
145         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
146         .sysc_fields    = &omap_hwmod_sysc_type1,
147 };
148
149 static struct omap_hwmod_class omap3xxx_timer_hwmod_class = {
150         .name = "timer",
151         .sysc = &omap3xxx_timer_sysc,
152 };
153
154 /* timer1 */
155 static struct omap_hwmod omap3xxx_timer1_hwmod = {
156         .name           = "timer1",
157         .main_clk       = "gpt1_fck",
158         .prcm           = {
159                 .omap2 = {
160                         .module_offs = WKUP_MOD,
161                         .idlest_reg_id = 1,
162                         .idlest_idle_bit = OMAP3430_ST_GPT1_SHIFT,
163                 },
164         },
165         .class          = &omap3xxx_timer_hwmod_class,
166         .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
167 };
168
169 /* timer2 */
170 static struct omap_hwmod omap3xxx_timer2_hwmod = {
171         .name           = "timer2",
172         .main_clk       = "gpt2_fck",
173         .prcm           = {
174                 .omap2 = {
175                         .module_offs = OMAP3430_PER_MOD,
176                         .idlest_reg_id = 1,
177                         .idlest_idle_bit = OMAP3430_ST_GPT2_SHIFT,
178                 },
179         },
180         .class          = &omap3xxx_timer_hwmod_class,
181         .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
182 };
183
184 /* timer3 */
185 static struct omap_hwmod omap3xxx_timer3_hwmod = {
186         .name           = "timer3",
187         .main_clk       = "gpt3_fck",
188         .prcm           = {
189                 .omap2 = {
190                         .module_offs = OMAP3430_PER_MOD,
191                         .idlest_reg_id = 1,
192                         .idlest_idle_bit = OMAP3430_ST_GPT3_SHIFT,
193                 },
194         },
195         .class          = &omap3xxx_timer_hwmod_class,
196         .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
197 };
198
199 /* timer4 */
200 static struct omap_hwmod omap3xxx_timer4_hwmod = {
201         .name           = "timer4",
202         .main_clk       = "gpt4_fck",
203         .prcm           = {
204                 .omap2 = {
205                         .module_offs = OMAP3430_PER_MOD,
206                         .idlest_reg_id = 1,
207                         .idlest_idle_bit = OMAP3430_ST_GPT4_SHIFT,
208                 },
209         },
210         .class          = &omap3xxx_timer_hwmod_class,
211         .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
212 };
213
214 /* timer5 */
215 static struct omap_hwmod omap3xxx_timer5_hwmod = {
216         .name           = "timer5",
217         .main_clk       = "gpt5_fck",
218         .prcm           = {
219                 .omap2 = {
220                         .module_offs = OMAP3430_PER_MOD,
221                         .idlest_reg_id = 1,
222                         .idlest_idle_bit = OMAP3430_ST_GPT5_SHIFT,
223                 },
224         },
225         .class          = &omap3xxx_timer_hwmod_class,
226         .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
227 };
228
229 /* timer6 */
230 static struct omap_hwmod omap3xxx_timer6_hwmod = {
231         .name           = "timer6",
232         .main_clk       = "gpt6_fck",
233         .prcm           = {
234                 .omap2 = {
235                         .module_offs = OMAP3430_PER_MOD,
236                         .idlest_reg_id = 1,
237                         .idlest_idle_bit = OMAP3430_ST_GPT6_SHIFT,
238                 },
239         },
240         .class          = &omap3xxx_timer_hwmod_class,
241         .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
242 };
243
244 /* timer7 */
245 static struct omap_hwmod omap3xxx_timer7_hwmod = {
246         .name           = "timer7",
247         .main_clk       = "gpt7_fck",
248         .prcm           = {
249                 .omap2 = {
250                         .module_offs = OMAP3430_PER_MOD,
251                         .idlest_reg_id = 1,
252                         .idlest_idle_bit = OMAP3430_ST_GPT7_SHIFT,
253                 },
254         },
255         .class          = &omap3xxx_timer_hwmod_class,
256         .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
257 };
258
259 /* timer8 */
260 static struct omap_hwmod omap3xxx_timer8_hwmod = {
261         .name           = "timer8",
262         .main_clk       = "gpt8_fck",
263         .prcm           = {
264                 .omap2 = {
265                         .module_offs = OMAP3430_PER_MOD,
266                         .idlest_reg_id = 1,
267                         .idlest_idle_bit = OMAP3430_ST_GPT8_SHIFT,
268                 },
269         },
270         .class          = &omap3xxx_timer_hwmod_class,
271         .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
272 };
273
274 /* timer9 */
275 static struct omap_hwmod omap3xxx_timer9_hwmod = {
276         .name           = "timer9",
277         .main_clk       = "gpt9_fck",
278         .prcm           = {
279                 .omap2 = {
280                         .module_offs = OMAP3430_PER_MOD,
281                         .idlest_reg_id = 1,
282                         .idlest_idle_bit = OMAP3430_ST_GPT9_SHIFT,
283                 },
284         },
285         .class          = &omap3xxx_timer_hwmod_class,
286         .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
287 };
288
289 /* timer10 */
290 static struct omap_hwmod omap3xxx_timer10_hwmod = {
291         .name           = "timer10",
292         .main_clk       = "gpt10_fck",
293         .prcm           = {
294                 .omap2 = {
295                         .module_offs = CORE_MOD,
296                         .idlest_reg_id = 1,
297                         .idlest_idle_bit = OMAP3430_ST_GPT10_SHIFT,
298                 },
299         },
300         .class          = &omap3xxx_timer_hwmod_class,
301         .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
302 };
303
304 /* timer11 */
305 static struct omap_hwmod omap3xxx_timer11_hwmod = {
306         .name           = "timer11",
307         .main_clk       = "gpt11_fck",
308         .prcm           = {
309                 .omap2 = {
310                         .module_offs = CORE_MOD,
311                         .idlest_reg_id = 1,
312                         .idlest_idle_bit = OMAP3430_ST_GPT11_SHIFT,
313                 },
314         },
315         .class          = &omap3xxx_timer_hwmod_class,
316         .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
317 };
318
319 /* timer12 */
320 static struct omap_hwmod omap3xxx_timer12_hwmod = {
321         .name           = "timer12",
322         .main_clk       = "gpt12_fck",
323         .prcm           = {
324                 .omap2 = {
325                         .module_offs = WKUP_MOD,
326                         .idlest_reg_id = 1,
327                         .idlest_idle_bit = OMAP3430_ST_GPT12_SHIFT,
328                 },
329         },
330         .class          = &omap3xxx_timer_hwmod_class,
331         .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
332 };
333
334 /*
335  * 'wd_timer' class
336  * 32-bit watchdog upward counter that generates a pulse on the reset pin on
337  * overflow condition
338  */
339
340 static struct omap_hwmod_class_sysconfig omap3xxx_wd_timer_sysc = {
341         .rev_offs       = 0x0000,
342         .sysc_offs      = 0x0010,
343         .syss_offs      = 0x0014,
344         .sysc_flags     = (SYSC_HAS_SIDLEMODE | SYSC_HAS_EMUFREE |
345                            SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
346                            SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
347                            SYSS_HAS_RESET_STATUS),
348         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
349         .sysc_fields    = &omap_hwmod_sysc_type1,
350 };
351
352 /* I2C common */
353 static struct omap_hwmod_class_sysconfig i2c_sysc = {
354         .rev_offs       = 0x00,
355         .sysc_offs      = 0x20,
356         .syss_offs      = 0x10,
357         .sysc_flags     = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
358                            SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
359                            SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
360         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
361         .sysc_fields    = &omap_hwmod_sysc_type1,
362 };
363
364 static struct omap_hwmod_class omap3xxx_wd_timer_hwmod_class = {
365         .name           = "wd_timer",
366         .sysc           = &omap3xxx_wd_timer_sysc,
367         .pre_shutdown   = &omap2_wd_timer_disable,
368         .reset          = &omap2_wd_timer_reset,
369 };
370
371 static struct omap_hwmod omap3xxx_wd_timer2_hwmod = {
372         .name           = "wd_timer2",
373         .class          = &omap3xxx_wd_timer_hwmod_class,
374         .main_clk       = "wdt2_fck",
375         .prcm           = {
376                 .omap2 = {
377                         .module_offs = WKUP_MOD,
378                         .idlest_reg_id = 1,
379                         .idlest_idle_bit = OMAP3430_ST_WDT2_SHIFT,
380                 },
381         },
382         /*
383          * XXX: Use software supervised mode, HW supervised smartidle seems to
384          * block CORE power domain idle transitions. Maybe a HW bug in wdt2?
385          */
386         .flags          = HWMOD_SWSUP_SIDLE,
387 };
388
389 /* UART1 */
390 static struct omap_hwmod omap3xxx_uart1_hwmod = {
391         .name           = "uart1",
392         .main_clk       = "uart1_fck",
393         .flags          = DEBUG_TI81XXUART1_FLAGS | HWMOD_SWSUP_SIDLE,
394         .prcm           = {
395                 .omap2 = {
396                         .module_offs = CORE_MOD,
397                         .idlest_reg_id = 1,
398                         .idlest_idle_bit = OMAP3430_EN_UART1_SHIFT,
399                 },
400         },
401         .class          = &omap2_uart_class,
402 };
403
404 /* UART2 */
405 static struct omap_hwmod omap3xxx_uart2_hwmod = {
406         .name           = "uart2",
407         .main_clk       = "uart2_fck",
408         .flags          = DEBUG_TI81XXUART2_FLAGS | HWMOD_SWSUP_SIDLE,
409         .prcm           = {
410                 .omap2 = {
411                         .module_offs = CORE_MOD,
412                         .idlest_reg_id = 1,
413                         .idlest_idle_bit = OMAP3430_EN_UART2_SHIFT,
414                 },
415         },
416         .class          = &omap2_uart_class,
417 };
418
419 /* UART3 */
420 static struct omap_hwmod omap3xxx_uart3_hwmod = {
421         .name           = "uart3",
422         .main_clk       = "uart3_fck",
423         .flags          = DEBUG_OMAP3UART3_FLAGS | DEBUG_TI81XXUART3_FLAGS |
424                                 HWMOD_SWSUP_SIDLE,
425         .prcm           = {
426                 .omap2 = {
427                         .module_offs = OMAP3430_PER_MOD,
428                         .idlest_reg_id = 1,
429                         .idlest_idle_bit = OMAP3430_EN_UART3_SHIFT,
430                 },
431         },
432         .class          = &omap2_uart_class,
433 };
434
435 /* UART4 */
436
437
438 static struct omap_hwmod omap36xx_uart4_hwmod = {
439         .name           = "uart4",
440         .main_clk       = "uart4_fck",
441         .flags          = DEBUG_OMAP3UART4_FLAGS | HWMOD_SWSUP_SIDLE,
442         .prcm           = {
443                 .omap2 = {
444                         .module_offs = OMAP3430_PER_MOD,
445                         .idlest_reg_id = 1,
446                         .idlest_idle_bit = OMAP3630_EN_UART4_SHIFT,
447                 },
448         },
449         .class          = &omap2_uart_class,
450 };
451
452
453
454 /*
455  * XXX AM35xx UART4 cannot complete its softreset without uart1_fck or
456  * uart2_fck being enabled.  So we add uart1_fck as an optional clock,
457  * below, and set the HWMOD_CONTROL_OPT_CLKS_IN_RESET.  This really
458  * should not be needed.  The functional clock structure of the AM35xx
459  * UART4 is extremely unclear and opaque; it is unclear what the role
460  * of uart1/2_fck is for the UART4.  Any clarification from either
461  * empirical testing or the AM3505/3517 hardware designers would be
462  * most welcome.
463  */
464 static struct omap_hwmod_opt_clk am35xx_uart4_opt_clks[] = {
465         { .role = "softreset_uart1_fck", .clk = "uart1_fck" },
466 };
467
468 static struct omap_hwmod am35xx_uart4_hwmod = {
469         .name           = "uart4",
470         .main_clk       = "uart4_fck",
471         .prcm           = {
472                 .omap2 = {
473                         .module_offs = CORE_MOD,
474                         .idlest_reg_id = 1,
475                         .idlest_idle_bit = AM35XX_ST_UART4_SHIFT,
476                 },
477         },
478         .opt_clks       = am35xx_uart4_opt_clks,
479         .opt_clks_cnt   = ARRAY_SIZE(am35xx_uart4_opt_clks),
480         .flags          = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
481         .class          = &omap2_uart_class,
482 };
483
484 static struct omap_hwmod_class i2c_class = {
485         .name   = "i2c",
486         .sysc   = &i2c_sysc,
487         .rev    = OMAP_I2C_IP_VERSION_1,
488         .reset  = &omap_i2c_reset,
489 };
490
491 /* dss */
492 static struct omap_hwmod_opt_clk dss_opt_clks[] = {
493         /*
494          * The DSS HW needs all DSS clocks enabled during reset. The dss_core
495          * driver does not use these clocks.
496          */
497         { .role = "sys_clk", .clk = "dss2_alwon_fck" },
498         { .role = "tv_clk", .clk = "dss_tv_fck" },
499         /* required only on OMAP3430 */
500         { .role = "tv_dac_clk", .clk = "dss_96m_fck" },
501 };
502
503 static struct omap_hwmod omap3430es1_dss_core_hwmod = {
504         .name           = "dss_core",
505         .class          = &omap2_dss_hwmod_class,
506         .main_clk       = "dss1_alwon_fck", /* instead of dss_fck */
507         .prcm           = {
508                 .omap2 = {
509                         .module_offs = OMAP3430_DSS_MOD,
510                         .idlest_reg_id = 1,
511                 },
512         },
513         .opt_clks       = dss_opt_clks,
514         .opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
515         .flags          = HWMOD_NO_IDLEST | HWMOD_CONTROL_OPT_CLKS_IN_RESET,
516 };
517
518 static struct omap_hwmod omap3xxx_dss_core_hwmod = {
519         .name           = "dss_core",
520         .flags          = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
521         .class          = &omap2_dss_hwmod_class,
522         .main_clk       = "dss1_alwon_fck", /* instead of dss_fck */
523         .prcm           = {
524                 .omap2 = {
525                         .module_offs = OMAP3430_DSS_MOD,
526                         .idlest_reg_id = 1,
527                         .idlest_idle_bit = OMAP3430ES2_ST_DSS_IDLE_SHIFT,
528                 },
529         },
530         .opt_clks       = dss_opt_clks,
531         .opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
532 };
533
534 /*
535  * 'dispc' class
536  * display controller
537  */
538
539 static struct omap_hwmod_class_sysconfig omap3_dispc_sysc = {
540         .rev_offs       = 0x0000,
541         .sysc_offs      = 0x0010,
542         .syss_offs      = 0x0014,
543         .sysc_flags     = (SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE |
544                            SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
545                            SYSC_HAS_ENAWAKEUP),
546         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
547                            MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
548         .sysc_fields    = &omap_hwmod_sysc_type1,
549 };
550
551 static struct omap_hwmod_class omap3_dispc_hwmod_class = {
552         .name   = "dispc",
553         .sysc   = &omap3_dispc_sysc,
554 };
555
556 static struct omap_hwmod omap3xxx_dss_dispc_hwmod = {
557         .name           = "dss_dispc",
558         .class          = &omap3_dispc_hwmod_class,
559         .main_clk       = "dss1_alwon_fck",
560         .prcm           = {
561                 .omap2 = {
562                         .module_offs = OMAP3430_DSS_MOD,
563                 },
564         },
565         .flags          = HWMOD_NO_IDLEST,
566         .dev_attr       = &omap2_3_dss_dispc_dev_attr,
567 };
568
569 /*
570  * 'dsi' class
571  * display serial interface controller
572  */
573
574 static struct omap_hwmod_class_sysconfig omap3xxx_dsi_sysc = {
575         .rev_offs       = 0x0000,
576         .sysc_offs      = 0x0010,
577         .syss_offs      = 0x0014,
578         .sysc_flags     = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
579                            SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
580                            SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
581         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
582         .sysc_fields    = &omap_hwmod_sysc_type1,
583 };
584
585 static struct omap_hwmod_class omap3xxx_dsi_hwmod_class = {
586         .name = "dsi",
587         .sysc   = &omap3xxx_dsi_sysc,
588 };
589
590 /* dss_dsi1 */
591 static struct omap_hwmod_opt_clk dss_dsi1_opt_clks[] = {
592         { .role = "sys_clk", .clk = "dss2_alwon_fck" },
593 };
594
595 static struct omap_hwmod omap3xxx_dss_dsi1_hwmod = {
596         .name           = "dss_dsi1",
597         .class          = &omap3xxx_dsi_hwmod_class,
598         .main_clk       = "dss1_alwon_fck",
599         .prcm           = {
600                 .omap2 = {
601                         .module_offs = OMAP3430_DSS_MOD,
602                 },
603         },
604         .opt_clks       = dss_dsi1_opt_clks,
605         .opt_clks_cnt   = ARRAY_SIZE(dss_dsi1_opt_clks),
606         .flags          = HWMOD_NO_IDLEST,
607 };
608
609 static struct omap_hwmod_opt_clk dss_rfbi_opt_clks[] = {
610         { .role = "ick", .clk = "dss_ick" },
611 };
612
613 static struct omap_hwmod omap3xxx_dss_rfbi_hwmod = {
614         .name           = "dss_rfbi",
615         .class          = &omap2_rfbi_hwmod_class,
616         .main_clk       = "dss1_alwon_fck",
617         .prcm           = {
618                 .omap2 = {
619                         .module_offs = OMAP3430_DSS_MOD,
620                 },
621         },
622         .opt_clks       = dss_rfbi_opt_clks,
623         .opt_clks_cnt   = ARRAY_SIZE(dss_rfbi_opt_clks),
624         .flags          = HWMOD_NO_IDLEST,
625 };
626
627 static struct omap_hwmod_opt_clk dss_venc_opt_clks[] = {
628         /* required only on OMAP3430 */
629         { .role = "tv_dac_clk", .clk = "dss_96m_fck" },
630 };
631
632 static struct omap_hwmod omap3xxx_dss_venc_hwmod = {
633         .name           = "dss_venc",
634         .class          = &omap2_venc_hwmod_class,
635         .main_clk       = "dss_tv_fck",
636         .prcm           = {
637                 .omap2 = {
638                         .module_offs = OMAP3430_DSS_MOD,
639                 },
640         },
641         .opt_clks       = dss_venc_opt_clks,
642         .opt_clks_cnt   = ARRAY_SIZE(dss_venc_opt_clks),
643         .flags          = HWMOD_NO_IDLEST,
644 };
645
646 /* I2C1 */
647 static struct omap_hwmod omap3xxx_i2c1_hwmod = {
648         .name           = "i2c1",
649         .flags          = HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
650         .main_clk       = "i2c1_fck",
651         .prcm           = {
652                 .omap2 = {
653                         .module_offs = CORE_MOD,
654                         .idlest_reg_id = 1,
655                         .idlest_idle_bit = OMAP3430_ST_I2C1_SHIFT,
656                 },
657         },
658         .class          = &i2c_class,
659 };
660
661 /* I2C2 */
662 static struct omap_hwmod omap3xxx_i2c2_hwmod = {
663         .name           = "i2c2",
664         .flags          = HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
665         .main_clk       = "i2c2_fck",
666         .prcm           = {
667                 .omap2 = {
668                         .module_offs = CORE_MOD,
669                         .idlest_reg_id = 1,
670                         .idlest_idle_bit = OMAP3430_ST_I2C2_SHIFT,
671                 },
672         },
673         .class          = &i2c_class,
674 };
675
676 /* I2C3 */
677 static struct omap_hwmod omap3xxx_i2c3_hwmod = {
678         .name           = "i2c3",
679         .flags          = HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
680         .main_clk       = "i2c3_fck",
681         .prcm           = {
682                 .omap2 = {
683                         .module_offs = CORE_MOD,
684                         .idlest_reg_id = 1,
685                         .idlest_idle_bit = OMAP3430_ST_I2C3_SHIFT,
686                 },
687         },
688         .class          = &i2c_class,
689 };
690
691 /*
692  * 'gpio' class
693  * general purpose io module
694  */
695
696 static struct omap_hwmod_class_sysconfig omap3xxx_gpio_sysc = {
697         .rev_offs       = 0x0000,
698         .sysc_offs      = 0x0010,
699         .syss_offs      = 0x0014,
700         .sysc_flags     = (SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
701                            SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
702                            SYSS_HAS_RESET_STATUS),
703         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
704         .sysc_fields    = &omap_hwmod_sysc_type1,
705 };
706
707 static struct omap_hwmod_class omap3xxx_gpio_hwmod_class = {
708         .name = "gpio",
709         .sysc = &omap3xxx_gpio_sysc,
710         .rev = 1,
711 };
712
713 /* gpio1 */
714 static struct omap_hwmod_opt_clk gpio1_opt_clks[] = {
715         { .role = "dbclk", .clk = "gpio1_dbck", },
716 };
717
718 static struct omap_hwmod omap3xxx_gpio1_hwmod = {
719         .name           = "gpio1",
720         .flags          = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
721         .main_clk       = "gpio1_ick",
722         .opt_clks       = gpio1_opt_clks,
723         .opt_clks_cnt   = ARRAY_SIZE(gpio1_opt_clks),
724         .prcm           = {
725                 .omap2 = {
726                         .module_offs = WKUP_MOD,
727                         .idlest_reg_id = 1,
728                         .idlest_idle_bit = OMAP3430_ST_GPIO1_SHIFT,
729                 },
730         },
731         .class          = &omap3xxx_gpio_hwmod_class,
732 };
733
734 /* gpio2 */
735 static struct omap_hwmod_opt_clk gpio2_opt_clks[] = {
736         { .role = "dbclk", .clk = "gpio2_dbck", },
737 };
738
739 static struct omap_hwmod omap3xxx_gpio2_hwmod = {
740         .name           = "gpio2",
741         .flags          = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
742         .main_clk       = "gpio2_ick",
743         .opt_clks       = gpio2_opt_clks,
744         .opt_clks_cnt   = ARRAY_SIZE(gpio2_opt_clks),
745         .prcm           = {
746                 .omap2 = {
747                         .module_offs = OMAP3430_PER_MOD,
748                         .idlest_reg_id = 1,
749                         .idlest_idle_bit = OMAP3430_ST_GPIO2_SHIFT,
750                 },
751         },
752         .class          = &omap3xxx_gpio_hwmod_class,
753 };
754
755 /* gpio3 */
756 static struct omap_hwmod_opt_clk gpio3_opt_clks[] = {
757         { .role = "dbclk", .clk = "gpio3_dbck", },
758 };
759
760 static struct omap_hwmod omap3xxx_gpio3_hwmod = {
761         .name           = "gpio3",
762         .flags          = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
763         .main_clk       = "gpio3_ick",
764         .opt_clks       = gpio3_opt_clks,
765         .opt_clks_cnt   = ARRAY_SIZE(gpio3_opt_clks),
766         .prcm           = {
767                 .omap2 = {
768                         .module_offs = OMAP3430_PER_MOD,
769                         .idlest_reg_id = 1,
770                         .idlest_idle_bit = OMAP3430_ST_GPIO3_SHIFT,
771                 },
772         },
773         .class          = &omap3xxx_gpio_hwmod_class,
774 };
775
776 /* gpio4 */
777 static struct omap_hwmod_opt_clk gpio4_opt_clks[] = {
778         { .role = "dbclk", .clk = "gpio4_dbck", },
779 };
780
781 static struct omap_hwmod omap3xxx_gpio4_hwmod = {
782         .name           = "gpio4",
783         .flags          = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
784         .main_clk       = "gpio4_ick",
785         .opt_clks       = gpio4_opt_clks,
786         .opt_clks_cnt   = ARRAY_SIZE(gpio4_opt_clks),
787         .prcm           = {
788                 .omap2 = {
789                         .module_offs = OMAP3430_PER_MOD,
790                         .idlest_reg_id = 1,
791                         .idlest_idle_bit = OMAP3430_ST_GPIO4_SHIFT,
792                 },
793         },
794         .class          = &omap3xxx_gpio_hwmod_class,
795 };
796
797 /* gpio5 */
798
799 static struct omap_hwmod_opt_clk gpio5_opt_clks[] = {
800         { .role = "dbclk", .clk = "gpio5_dbck", },
801 };
802
803 static struct omap_hwmod omap3xxx_gpio5_hwmod = {
804         .name           = "gpio5",
805         .flags          = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
806         .main_clk       = "gpio5_ick",
807         .opt_clks       = gpio5_opt_clks,
808         .opt_clks_cnt   = ARRAY_SIZE(gpio5_opt_clks),
809         .prcm           = {
810                 .omap2 = {
811                         .module_offs = OMAP3430_PER_MOD,
812                         .idlest_reg_id = 1,
813                         .idlest_idle_bit = OMAP3430_ST_GPIO5_SHIFT,
814                 },
815         },
816         .class          = &omap3xxx_gpio_hwmod_class,
817 };
818
819 /* gpio6 */
820
821 static struct omap_hwmod_opt_clk gpio6_opt_clks[] = {
822         { .role = "dbclk", .clk = "gpio6_dbck", },
823 };
824
825 static struct omap_hwmod omap3xxx_gpio6_hwmod = {
826         .name           = "gpio6",
827         .flags          = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
828         .main_clk       = "gpio6_ick",
829         .opt_clks       = gpio6_opt_clks,
830         .opt_clks_cnt   = ARRAY_SIZE(gpio6_opt_clks),
831         .prcm           = {
832                 .omap2 = {
833                         .module_offs = OMAP3430_PER_MOD,
834                         .idlest_reg_id = 1,
835                         .idlest_idle_bit = OMAP3430_ST_GPIO6_SHIFT,
836                 },
837         },
838         .class          = &omap3xxx_gpio_hwmod_class,
839 };
840
841 /* dma attributes */
842 static struct omap_dma_dev_attr dma_dev_attr = {
843         .dev_caps  = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY |
844                                 IS_CSSA_32 | IS_CDSA_32 | IS_RW_PRIORITY,
845         .lch_count = 32,
846 };
847
848 static struct omap_hwmod_class_sysconfig omap3xxx_dma_sysc = {
849         .rev_offs       = 0x0000,
850         .sysc_offs      = 0x002c,
851         .syss_offs      = 0x0028,
852         .sysc_flags     = (SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
853                            SYSC_HAS_MIDLEMODE | SYSC_HAS_CLOCKACTIVITY |
854                            SYSC_HAS_EMUFREE | SYSC_HAS_AUTOIDLE |
855                            SYSS_HAS_RESET_STATUS),
856         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
857                            MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
858         .sysc_fields    = &omap_hwmod_sysc_type1,
859 };
860
861 static struct omap_hwmod_class omap3xxx_dma_hwmod_class = {
862         .name = "dma",
863         .sysc = &omap3xxx_dma_sysc,
864 };
865
866 /* dma_system */
867 static struct omap_hwmod omap3xxx_dma_system_hwmod = {
868         .name           = "dma",
869         .class          = &omap3xxx_dma_hwmod_class,
870         .main_clk       = "core_l3_ick",
871         .prcm = {
872                 .omap2 = {
873                         .module_offs            = CORE_MOD,
874                         .idlest_reg_id          = 1,
875                         .idlest_idle_bit        = OMAP3430_ST_SDMA_SHIFT,
876                 },
877         },
878         .dev_attr       = &dma_dev_attr,
879         .flags          = HWMOD_NO_IDLEST,
880 };
881
882 /*
883  * 'mcbsp' class
884  * multi channel buffered serial port controller
885  */
886
887 static struct omap_hwmod_class_sysconfig omap3xxx_mcbsp_sysc = {
888         .rev_offs       = -ENODEV,
889         .sysc_offs      = 0x008c,
890         .sysc_flags     = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_ENAWAKEUP |
891                            SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
892         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
893         .sysc_fields    = &omap_hwmod_sysc_type1,
894 };
895
896 static struct omap_hwmod_class omap3xxx_mcbsp_hwmod_class = {
897         .name = "mcbsp",
898         .sysc = &omap3xxx_mcbsp_sysc,
899 };
900
901 /* McBSP functional clock mapping */
902 static struct omap_hwmod_opt_clk mcbsp15_opt_clks[] = {
903         { .role = "pad_fck", .clk = "mcbsp_clks" },
904         { .role = "prcm_fck", .clk = "core_96m_fck" },
905 };
906
907 static struct omap_hwmod_opt_clk mcbsp234_opt_clks[] = {
908         { .role = "pad_fck", .clk = "mcbsp_clks" },
909         { .role = "prcm_fck", .clk = "per_96m_fck" },
910 };
911
912 /* mcbsp1 */
913 static struct omap_hwmod omap3xxx_mcbsp1_hwmod = {
914         .name           = "mcbsp1",
915         .class          = &omap3xxx_mcbsp_hwmod_class,
916         .main_clk       = "mcbsp1_fck",
917         .prcm           = {
918                 .omap2 = {
919                         .module_offs = CORE_MOD,
920                         .idlest_reg_id = 1,
921                         .idlest_idle_bit = OMAP3430_ST_MCBSP1_SHIFT,
922                 },
923         },
924         .opt_clks       = mcbsp15_opt_clks,
925         .opt_clks_cnt   = ARRAY_SIZE(mcbsp15_opt_clks),
926 };
927
928 /* mcbsp2 */
929 static struct omap_hwmod omap3xxx_mcbsp2_hwmod = {
930         .name           = "mcbsp2",
931         .class          = &omap3xxx_mcbsp_hwmod_class,
932         .main_clk       = "mcbsp2_fck",
933         .prcm           = {
934                 .omap2 = {
935                         .module_offs = OMAP3430_PER_MOD,
936                         .idlest_reg_id = 1,
937                         .idlest_idle_bit = OMAP3430_ST_MCBSP2_SHIFT,
938                 },
939         },
940         .opt_clks       = mcbsp234_opt_clks,
941         .opt_clks_cnt   = ARRAY_SIZE(mcbsp234_opt_clks),
942 };
943
944 /* mcbsp3 */
945 static struct omap_hwmod omap3xxx_mcbsp3_hwmod = {
946         .name           = "mcbsp3",
947         .class          = &omap3xxx_mcbsp_hwmod_class,
948         .main_clk       = "mcbsp3_fck",
949         .prcm           = {
950                 .omap2 = {
951                         .module_offs = OMAP3430_PER_MOD,
952                         .idlest_reg_id = 1,
953                         .idlest_idle_bit = OMAP3430_ST_MCBSP3_SHIFT,
954                 },
955         },
956         .opt_clks       = mcbsp234_opt_clks,
957         .opt_clks_cnt   = ARRAY_SIZE(mcbsp234_opt_clks),
958 };
959
960 /* mcbsp4 */
961 static struct omap_hwmod omap3xxx_mcbsp4_hwmod = {
962         .name           = "mcbsp4",
963         .class          = &omap3xxx_mcbsp_hwmod_class,
964         .main_clk       = "mcbsp4_fck",
965         .prcm           = {
966                 .omap2 = {
967                         .module_offs = OMAP3430_PER_MOD,
968                         .idlest_reg_id = 1,
969                         .idlest_idle_bit = OMAP3430_ST_MCBSP4_SHIFT,
970                 },
971         },
972         .opt_clks       = mcbsp234_opt_clks,
973         .opt_clks_cnt   = ARRAY_SIZE(mcbsp234_opt_clks),
974 };
975
976 /* mcbsp5 */
977 static struct omap_hwmod omap3xxx_mcbsp5_hwmod = {
978         .name           = "mcbsp5",
979         .class          = &omap3xxx_mcbsp_hwmod_class,
980         .main_clk       = "mcbsp5_fck",
981         .prcm           = {
982                 .omap2 = {
983                         .module_offs = CORE_MOD,
984                         .idlest_reg_id = 1,
985                         .idlest_idle_bit = OMAP3430_ST_MCBSP5_SHIFT,
986                 },
987         },
988         .opt_clks       = mcbsp15_opt_clks,
989         .opt_clks_cnt   = ARRAY_SIZE(mcbsp15_opt_clks),
990 };
991
992 /* 'mcbsp sidetone' class */
993 static struct omap_hwmod_class_sysconfig omap3xxx_mcbsp_sidetone_sysc = {
994         .rev_offs       = -ENODEV,
995         .sysc_offs      = 0x0010,
996         .sysc_flags     = SYSC_HAS_AUTOIDLE,
997         .sysc_fields    = &omap_hwmod_sysc_type1,
998 };
999
1000 static struct omap_hwmod_class omap3xxx_mcbsp_sidetone_hwmod_class = {
1001         .name = "mcbsp_sidetone",
1002         .sysc = &omap3xxx_mcbsp_sidetone_sysc,
1003 };
1004
1005 /* mcbsp2_sidetone */
1006 static struct omap_hwmod omap3xxx_mcbsp2_sidetone_hwmod = {
1007         .name           = "mcbsp2_sidetone",
1008         .class          = &omap3xxx_mcbsp_sidetone_hwmod_class,
1009         .main_clk       = "mcbsp2_ick",
1010         .flags          = HWMOD_NO_IDLEST,
1011 };
1012
1013 /* mcbsp3_sidetone */
1014 static struct omap_hwmod omap3xxx_mcbsp3_sidetone_hwmod = {
1015         .name           = "mcbsp3_sidetone",
1016         .class          = &omap3xxx_mcbsp_sidetone_hwmod_class,
1017         .main_clk       = "mcbsp3_ick",
1018         .flags          = HWMOD_NO_IDLEST,
1019 };
1020
1021 /* SR common */
1022 static struct omap_hwmod_class_sysconfig omap34xx_sr_sysc = {
1023         .rev_offs       = -ENODEV,
1024         .sysc_offs      = 0x24,
1025         .sysc_flags     = (SYSC_HAS_CLOCKACTIVITY | SYSC_NO_CACHE),
1026         .sysc_fields    = &omap34xx_sr_sysc_fields,
1027 };
1028
1029 static struct omap_hwmod_class omap34xx_smartreflex_hwmod_class = {
1030         .name = "smartreflex",
1031         .sysc = &omap34xx_sr_sysc,
1032         .rev  = 1,
1033 };
1034
1035 static struct omap_hwmod_class_sysconfig omap36xx_sr_sysc = {
1036         .rev_offs       = -ENODEV,
1037         .sysc_offs      = 0x38,
1038         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1039         .sysc_flags     = (SYSC_HAS_SIDLEMODE | SYSC_HAS_ENAWAKEUP |
1040                         SYSC_NO_CACHE),
1041         .sysc_fields    = &omap36xx_sr_sysc_fields,
1042 };
1043
1044 static struct omap_hwmod_class omap36xx_smartreflex_hwmod_class = {
1045         .name = "smartreflex",
1046         .sysc = &omap36xx_sr_sysc,
1047         .rev  = 2,
1048 };
1049
1050 /* SR1 */
1051 static struct omap_smartreflex_dev_attr sr1_dev_attr = {
1052         .sensor_voltdm_name   = "mpu_iva",
1053 };
1054
1055
1056 static struct omap_hwmod omap34xx_sr1_hwmod = {
1057         .name           = "smartreflex_mpu_iva",
1058         .class          = &omap34xx_smartreflex_hwmod_class,
1059         .main_clk       = "sr1_fck",
1060         .prcm           = {
1061                 .omap2 = {
1062                         .module_offs = WKUP_MOD,
1063                         .idlest_reg_id = 1,
1064                         .idlest_idle_bit = OMAP3430_EN_SR1_SHIFT,
1065                 },
1066         },
1067         .dev_attr       = &sr1_dev_attr,
1068         .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
1069 };
1070
1071 static struct omap_hwmod omap36xx_sr1_hwmod = {
1072         .name           = "smartreflex_mpu_iva",
1073         .class          = &omap36xx_smartreflex_hwmod_class,
1074         .main_clk       = "sr1_fck",
1075         .prcm           = {
1076                 .omap2 = {
1077                         .module_offs = WKUP_MOD,
1078                         .idlest_reg_id = 1,
1079                         .idlest_idle_bit = OMAP3430_EN_SR1_SHIFT,
1080                 },
1081         },
1082         .dev_attr       = &sr1_dev_attr,
1083 };
1084
1085 /* SR2 */
1086 static struct omap_smartreflex_dev_attr sr2_dev_attr = {
1087         .sensor_voltdm_name     = "core",
1088 };
1089
1090
1091 static struct omap_hwmod omap34xx_sr2_hwmod = {
1092         .name           = "smartreflex_core",
1093         .class          = &omap34xx_smartreflex_hwmod_class,
1094         .main_clk       = "sr2_fck",
1095         .prcm           = {
1096                 .omap2 = {
1097                         .module_offs = WKUP_MOD,
1098                         .idlest_reg_id = 1,
1099                         .idlest_idle_bit = OMAP3430_EN_SR2_SHIFT,
1100                 },
1101         },
1102         .dev_attr       = &sr2_dev_attr,
1103         .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
1104 };
1105
1106 static struct omap_hwmod omap36xx_sr2_hwmod = {
1107         .name           = "smartreflex_core",
1108         .class          = &omap36xx_smartreflex_hwmod_class,
1109         .main_clk       = "sr2_fck",
1110         .prcm           = {
1111                 .omap2 = {
1112                         .module_offs = WKUP_MOD,
1113                         .idlest_reg_id = 1,
1114                         .idlest_idle_bit = OMAP3430_EN_SR2_SHIFT,
1115                 },
1116         },
1117         .dev_attr       = &sr2_dev_attr,
1118 };
1119
1120 /*
1121  * 'mailbox' class
1122  * mailbox module allowing communication between the on-chip processors
1123  * using a queued mailbox-interrupt mechanism.
1124  */
1125
1126 static struct omap_hwmod_class_sysconfig omap3xxx_mailbox_sysc = {
1127         .rev_offs       = 0x000,
1128         .sysc_offs      = 0x010,
1129         .syss_offs      = 0x014,
1130         .sysc_flags     = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
1131                                 SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
1132         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1133         .sysc_fields    = &omap_hwmod_sysc_type1,
1134 };
1135
1136 static struct omap_hwmod_class omap3xxx_mailbox_hwmod_class = {
1137         .name = "mailbox",
1138         .sysc = &omap3xxx_mailbox_sysc,
1139 };
1140
1141 static struct omap_hwmod omap3xxx_mailbox_hwmod = {
1142         .name           = "mailbox",
1143         .class          = &omap3xxx_mailbox_hwmod_class,
1144         .main_clk       = "mailboxes_ick",
1145         .prcm           = {
1146                 .omap2 = {
1147                         .module_offs = CORE_MOD,
1148                         .idlest_reg_id = 1,
1149                         .idlest_idle_bit = OMAP3430_ST_MAILBOXES_SHIFT,
1150                 },
1151         },
1152 };
1153
1154 /*
1155  * 'mcspi' class
1156  * multichannel serial port interface (mcspi) / master/slave synchronous serial
1157  * bus
1158  */
1159
1160 static struct omap_hwmod_class_sysconfig omap34xx_mcspi_sysc = {
1161         .rev_offs       = 0x0000,
1162         .sysc_offs      = 0x0010,
1163         .syss_offs      = 0x0014,
1164         .sysc_flags     = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
1165                                 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
1166                                 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
1167         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1168         .sysc_fields    = &omap_hwmod_sysc_type1,
1169 };
1170
1171 static struct omap_hwmod_class omap34xx_mcspi_class = {
1172         .name = "mcspi",
1173         .sysc = &omap34xx_mcspi_sysc,
1174 };
1175
1176 /* mcspi1 */
1177 static struct omap_hwmod omap34xx_mcspi1 = {
1178         .name           = "mcspi1",
1179         .main_clk       = "mcspi1_fck",
1180         .prcm           = {
1181                 .omap2 = {
1182                         .module_offs = CORE_MOD,
1183                         .idlest_reg_id = 1,
1184                         .idlest_idle_bit = OMAP3430_ST_MCSPI1_SHIFT,
1185                 },
1186         },
1187         .class          = &omap34xx_mcspi_class,
1188 };
1189
1190 /* mcspi2 */
1191 static struct omap_hwmod omap34xx_mcspi2 = {
1192         .name           = "mcspi2",
1193         .main_clk       = "mcspi2_fck",
1194         .prcm           = {
1195                 .omap2 = {
1196                         .module_offs = CORE_MOD,
1197                         .idlest_reg_id = 1,
1198                         .idlest_idle_bit = OMAP3430_ST_MCSPI2_SHIFT,
1199                 },
1200         },
1201         .class          = &omap34xx_mcspi_class,
1202 };
1203
1204 /* mcspi3 */
1205 static struct omap_hwmod omap34xx_mcspi3 = {
1206         .name           = "mcspi3",
1207         .main_clk       = "mcspi3_fck",
1208         .prcm           = {
1209                 .omap2 = {
1210                         .module_offs = CORE_MOD,
1211                         .idlest_reg_id = 1,
1212                         .idlest_idle_bit = OMAP3430_ST_MCSPI3_SHIFT,
1213                 },
1214         },
1215         .class          = &omap34xx_mcspi_class,
1216 };
1217
1218 /* mcspi4 */
1219 static struct omap_hwmod omap34xx_mcspi4 = {
1220         .name           = "mcspi4",
1221         .main_clk       = "mcspi4_fck",
1222         .prcm           = {
1223                 .omap2 = {
1224                         .module_offs = CORE_MOD,
1225                         .idlest_reg_id = 1,
1226                         .idlest_idle_bit = OMAP3430_ST_MCSPI4_SHIFT,
1227                 },
1228         },
1229         .class          = &omap34xx_mcspi_class,
1230 };
1231
1232 /* usbhsotg */
1233 static struct omap_hwmod_class_sysconfig omap3xxx_usbhsotg_sysc = {
1234         .rev_offs       = 0x0400,
1235         .sysc_offs      = 0x0404,
1236         .syss_offs      = 0x0408,
1237         .sysc_flags     = (SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE|
1238                           SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
1239                           SYSC_HAS_AUTOIDLE),
1240         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1241                           MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
1242         .sysc_fields    = &omap_hwmod_sysc_type1,
1243 };
1244
1245 static struct omap_hwmod_class usbotg_class = {
1246         .name = "usbotg",
1247         .sysc = &omap3xxx_usbhsotg_sysc,
1248 };
1249
1250 /* usb_otg_hs */
1251
1252 static struct omap_hwmod omap3xxx_usbhsotg_hwmod = {
1253         .name           = "usb_otg_hs",
1254         .main_clk       = "hsotgusb_ick",
1255         .prcm           = {
1256                 .omap2 = {
1257                         .module_offs = CORE_MOD,
1258                         .idlest_reg_id = 1,
1259                         .idlest_idle_bit = OMAP3430ES2_ST_HSOTGUSB_IDLE_SHIFT,
1260                 },
1261         },
1262         .class          = &usbotg_class,
1263
1264         /*
1265          * Erratum ID: i479  idle_req / idle_ack mechanism potentially
1266          * broken when autoidle is enabled
1267          * workaround is to disable the autoidle bit at module level.
1268          *
1269          * Enabling the device in any other MIDLEMODE setting but force-idle
1270          * causes core_pwrdm not enter idle states at least on OMAP3630.
1271          * Note that musb has OTG_FORCESTDBY register that controls MSTANDBY
1272          * signal when MIDLEMODE is set to force-idle.
1273          */
1274         .flags          = HWMOD_NO_OCP_AUTOIDLE | HWMOD_SWSUP_SIDLE |
1275                           HWMOD_FORCE_MSTANDBY | HWMOD_RECONFIG_IO_CHAIN,
1276 };
1277
1278 /* usb_otg_hs */
1279
1280 static struct omap_hwmod_class am35xx_usbotg_class = {
1281         .name = "am35xx_usbotg",
1282 };
1283
1284 static struct omap_hwmod am35xx_usbhsotg_hwmod = {
1285         .name           = "am35x_otg_hs",
1286         .main_clk       = "hsotgusb_fck",
1287         .class          = &am35xx_usbotg_class,
1288         .flags          = HWMOD_NO_IDLEST,
1289 };
1290
1291 /* MMC/SD/SDIO common */
1292 static struct omap_hwmod_class_sysconfig omap34xx_mmc_sysc = {
1293         .rev_offs       = 0x1fc,
1294         .sysc_offs      = 0x10,
1295         .syss_offs      = 0x14,
1296         .sysc_flags     = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
1297                            SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
1298                            SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
1299         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1300         .sysc_fields    = &omap_hwmod_sysc_type1,
1301 };
1302
1303 static struct omap_hwmod_class omap34xx_mmc_class = {
1304         .name = "mmc",
1305         .sysc = &omap34xx_mmc_sysc,
1306 };
1307
1308 /* MMC/SD/SDIO1 */
1309
1310
1311
1312 static struct omap_hwmod_opt_clk omap34xx_mmc1_opt_clks[] = {
1313         { .role = "dbck", .clk = "omap_32k_fck", },
1314 };
1315
1316 static struct omap_hsmmc_dev_attr mmc1_dev_attr = {
1317         .flags = OMAP_HSMMC_SUPPORTS_DUAL_VOLT,
1318 };
1319
1320 /* See 35xx errata 2.1.1.128 in SPRZ278F */
1321 static struct omap_hsmmc_dev_attr mmc1_pre_es3_dev_attr = {
1322         .flags = (OMAP_HSMMC_SUPPORTS_DUAL_VOLT |
1323                   OMAP_HSMMC_BROKEN_MULTIBLOCK_READ),
1324 };
1325
1326 static struct omap_hwmod omap3xxx_pre_es3_mmc1_hwmod = {
1327         .name           = "mmc1",
1328         .opt_clks       = omap34xx_mmc1_opt_clks,
1329         .opt_clks_cnt   = ARRAY_SIZE(omap34xx_mmc1_opt_clks),
1330         .main_clk       = "mmchs1_fck",
1331         .prcm           = {
1332                 .omap2 = {
1333                         .module_offs = CORE_MOD,
1334                         .idlest_reg_id = 1,
1335                         .idlest_idle_bit = OMAP3430_ST_MMC1_SHIFT,
1336                 },
1337         },
1338         .dev_attr       = &mmc1_pre_es3_dev_attr,
1339         .class          = &omap34xx_mmc_class,
1340 };
1341
1342 static struct omap_hwmod omap3xxx_es3plus_mmc1_hwmod = {
1343         .name           = "mmc1",
1344         .opt_clks       = omap34xx_mmc1_opt_clks,
1345         .opt_clks_cnt   = ARRAY_SIZE(omap34xx_mmc1_opt_clks),
1346         .main_clk       = "mmchs1_fck",
1347         .prcm           = {
1348                 .omap2 = {
1349                         .module_offs = CORE_MOD,
1350                         .idlest_reg_id = 1,
1351                         .idlest_idle_bit = OMAP3430_ST_MMC1_SHIFT,
1352                 },
1353         },
1354         .dev_attr       = &mmc1_dev_attr,
1355         .class          = &omap34xx_mmc_class,
1356 };
1357
1358 /* MMC/SD/SDIO2 */
1359
1360
1361
1362 static struct omap_hwmod_opt_clk omap34xx_mmc2_opt_clks[] = {
1363         { .role = "dbck", .clk = "omap_32k_fck", },
1364 };
1365
1366 /* See 35xx errata 2.1.1.128 in SPRZ278F */
1367 static struct omap_hsmmc_dev_attr mmc2_pre_es3_dev_attr = {
1368         .flags = OMAP_HSMMC_BROKEN_MULTIBLOCK_READ,
1369 };
1370
1371 static struct omap_hwmod omap3xxx_pre_es3_mmc2_hwmod = {
1372         .name           = "mmc2",
1373         .opt_clks       = omap34xx_mmc2_opt_clks,
1374         .opt_clks_cnt   = ARRAY_SIZE(omap34xx_mmc2_opt_clks),
1375         .main_clk       = "mmchs2_fck",
1376         .prcm           = {
1377                 .omap2 = {
1378                         .module_offs = CORE_MOD,
1379                         .idlest_reg_id = 1,
1380                         .idlest_idle_bit = OMAP3430_ST_MMC2_SHIFT,
1381                 },
1382         },
1383         .dev_attr       = &mmc2_pre_es3_dev_attr,
1384         .class          = &omap34xx_mmc_class,
1385 };
1386
1387 static struct omap_hwmod omap3xxx_es3plus_mmc2_hwmod = {
1388         .name           = "mmc2",
1389         .opt_clks       = omap34xx_mmc2_opt_clks,
1390         .opt_clks_cnt   = ARRAY_SIZE(omap34xx_mmc2_opt_clks),
1391         .main_clk       = "mmchs2_fck",
1392         .prcm           = {
1393                 .omap2 = {
1394                         .module_offs = CORE_MOD,
1395                         .idlest_reg_id = 1,
1396                         .idlest_idle_bit = OMAP3430_ST_MMC2_SHIFT,
1397                 },
1398         },
1399         .class          = &omap34xx_mmc_class,
1400 };
1401
1402 /* MMC/SD/SDIO3 */
1403
1404
1405
1406 static struct omap_hwmod_opt_clk omap34xx_mmc3_opt_clks[] = {
1407         { .role = "dbck", .clk = "omap_32k_fck", },
1408 };
1409
1410 static struct omap_hwmod omap3xxx_mmc3_hwmod = {
1411         .name           = "mmc3",
1412         .opt_clks       = omap34xx_mmc3_opt_clks,
1413         .opt_clks_cnt   = ARRAY_SIZE(omap34xx_mmc3_opt_clks),
1414         .main_clk       = "mmchs3_fck",
1415         .prcm           = {
1416                 .omap2 = {
1417                         .module_offs = CORE_MOD,
1418                         .idlest_reg_id = 1,
1419                         .idlest_idle_bit = OMAP3430_ST_MMC3_SHIFT,
1420                 },
1421         },
1422         .class          = &omap34xx_mmc_class,
1423 };
1424
1425 /*
1426  * 'usb_host_hs' class
1427  * high-speed multi-port usb host controller
1428  */
1429
1430 static struct omap_hwmod_class_sysconfig omap3xxx_usb_host_hs_sysc = {
1431         .rev_offs       = 0x0000,
1432         .sysc_offs      = 0x0010,
1433         .syss_offs      = 0x0014,
1434         .sysc_flags     = (SYSC_HAS_MIDLEMODE | SYSC_HAS_CLOCKACTIVITY |
1435                            SYSC_HAS_SIDLEMODE | SYSC_HAS_ENAWAKEUP |
1436                            SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
1437                            SYSS_HAS_RESET_STATUS),
1438         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1439                            MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
1440         .sysc_fields    = &omap_hwmod_sysc_type1,
1441 };
1442
1443 static struct omap_hwmod_class omap3xxx_usb_host_hs_hwmod_class = {
1444         .name = "usb_host_hs",
1445         .sysc = &omap3xxx_usb_host_hs_sysc,
1446 };
1447
1448
1449 static struct omap_hwmod omap3xxx_usb_host_hs_hwmod = {
1450         .name           = "usb_host_hs",
1451         .class          = &omap3xxx_usb_host_hs_hwmod_class,
1452         .clkdm_name     = "usbhost_clkdm",
1453         .main_clk       = "usbhost_48m_fck",
1454         .prcm = {
1455                 .omap2 = {
1456                         .module_offs = OMAP3430ES2_USBHOST_MOD,
1457                         .idlest_reg_id = 1,
1458                         .idlest_idle_bit = OMAP3430ES2_ST_USBHOST_IDLE_SHIFT,
1459                 },
1460         },
1461
1462         /*
1463          * Errata: USBHOST Configured In Smart-Idle Can Lead To a Deadlock
1464          * id: i660
1465          *
1466          * Description:
1467          * In the following configuration :
1468          * - USBHOST module is set to smart-idle mode
1469          * - PRCM asserts idle_req to the USBHOST module ( This typically
1470          *   happens when the system is going to a low power mode : all ports
1471          *   have been suspended, the master part of the USBHOST module has
1472          *   entered the standby state, and SW has cut the functional clocks)
1473          * - an USBHOST interrupt occurs before the module is able to answer
1474          *   idle_ack, typically a remote wakeup IRQ.
1475          * Then the USB HOST module will enter a deadlock situation where it
1476          * is no more accessible nor functional.
1477          *
1478          * Workaround:
1479          * Don't use smart idle; use only force idle, hence HWMOD_SWSUP_SIDLE
1480          */
1481
1482         /*
1483          * Errata: USB host EHCI may stall when entering smart-standby mode
1484          * Id: i571
1485          *
1486          * Description:
1487          * When the USBHOST module is set to smart-standby mode, and when it is
1488          * ready to enter the standby state (i.e. all ports are suspended and
1489          * all attached devices are in suspend mode), then it can wrongly assert
1490          * the Mstandby signal too early while there are still some residual OCP
1491          * transactions ongoing. If this condition occurs, the internal state
1492          * machine may go to an undefined state and the USB link may be stuck
1493          * upon the next resume.
1494          *
1495          * Workaround:
1496          * Don't use smart standby; use only force standby,
1497          * hence HWMOD_SWSUP_MSTANDBY
1498          */
1499
1500         .flags          = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY,
1501 };
1502
1503 /*
1504  * 'usb_tll_hs' class
1505  * usb_tll_hs module is the adapter on the usb_host_hs ports
1506  */
1507 static struct omap_hwmod_class_sysconfig omap3xxx_usb_tll_hs_sysc = {
1508         .rev_offs       = 0x0000,
1509         .sysc_offs      = 0x0010,
1510         .syss_offs      = 0x0014,
1511         .sysc_flags     = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
1512                            SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
1513                            SYSC_HAS_AUTOIDLE),
1514         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1515         .sysc_fields    = &omap_hwmod_sysc_type1,
1516 };
1517
1518 static struct omap_hwmod_class omap3xxx_usb_tll_hs_hwmod_class = {
1519         .name = "usb_tll_hs",
1520         .sysc = &omap3xxx_usb_tll_hs_sysc,
1521 };
1522
1523
1524 static struct omap_hwmod omap3xxx_usb_tll_hs_hwmod = {
1525         .name           = "usb_tll_hs",
1526         .class          = &omap3xxx_usb_tll_hs_hwmod_class,
1527         .clkdm_name     = "core_l4_clkdm",
1528         .main_clk       = "usbtll_fck",
1529         .prcm = {
1530                 .omap2 = {
1531                         .module_offs = CORE_MOD,
1532                         .idlest_reg_id = 3,
1533                         .idlest_idle_bit = OMAP3430ES2_ST_USBTLL_SHIFT,
1534                 },
1535         },
1536 };
1537
1538 static struct omap_hwmod omap3xxx_hdq1w_hwmod = {
1539         .name           = "hdq1w",
1540         .main_clk       = "hdq_fck",
1541         .prcm           = {
1542                 .omap2 = {
1543                         .module_offs = CORE_MOD,
1544                         .idlest_reg_id = 1,
1545                         .idlest_idle_bit = OMAP3430_ST_HDQ_SHIFT,
1546                 },
1547         },
1548         .class          = &omap2_hdq1w_class,
1549 };
1550
1551 /* SAD2D */
1552 static struct omap_hwmod_rst_info omap3xxx_sad2d_resets[] = {
1553         { .name = "rst_modem_pwron_sw", .rst_shift = 0 },
1554         { .name = "rst_modem_sw", .rst_shift = 1 },
1555 };
1556
1557 static struct omap_hwmod_class omap3xxx_sad2d_class = {
1558         .name                   = "sad2d",
1559 };
1560
1561 static struct omap_hwmod omap3xxx_sad2d_hwmod = {
1562         .name           = "sad2d",
1563         .rst_lines      = omap3xxx_sad2d_resets,
1564         .rst_lines_cnt  = ARRAY_SIZE(omap3xxx_sad2d_resets),
1565         .main_clk       = "sad2d_ick",
1566         .prcm           = {
1567                 .omap2 = {
1568                         .module_offs = CORE_MOD,
1569                         .idlest_reg_id = 1,
1570                         .idlest_idle_bit = OMAP3430_ST_SAD2D_SHIFT,
1571                 },
1572         },
1573         .class          = &omap3xxx_sad2d_class,
1574 };
1575
1576 /*
1577  * '32K sync counter' class
1578  * 32-bit ordinary counter, clocked by the falling edge of the 32 khz clock
1579  */
1580 static struct omap_hwmod_class_sysconfig omap3xxx_counter_sysc = {
1581         .rev_offs       = 0x0000,
1582         .sysc_offs      = 0x0004,
1583         .sysc_flags     = SYSC_HAS_SIDLEMODE,
1584         .idlemodes      = (SIDLE_FORCE | SIDLE_NO),
1585         .sysc_fields    = &omap_hwmod_sysc_type1,
1586 };
1587
1588 static struct omap_hwmod_class omap3xxx_counter_hwmod_class = {
1589         .name   = "counter",
1590         .sysc   = &omap3xxx_counter_sysc,
1591 };
1592
1593 static struct omap_hwmod omap3xxx_counter_32k_hwmod = {
1594         .name           = "counter_32k",
1595         .class          = &omap3xxx_counter_hwmod_class,
1596         .clkdm_name     = "wkup_clkdm",
1597         .flags          = HWMOD_SWSUP_SIDLE,
1598         .main_clk       = "wkup_32k_fck",
1599         .prcm           = {
1600                 .omap2  = {
1601                         .module_offs = WKUP_MOD,
1602                         .idlest_reg_id = 1,
1603                         .idlest_idle_bit = OMAP3430_ST_32KSYNC_SHIFT,
1604                 },
1605         },
1606 };
1607
1608 /*
1609  * 'gpmc' class
1610  * general purpose memory controller
1611  */
1612
1613 static struct omap_hwmod_class_sysconfig omap3xxx_gpmc_sysc = {
1614         .rev_offs       = 0x0000,
1615         .sysc_offs      = 0x0010,
1616         .syss_offs      = 0x0014,
1617         .sysc_flags     = (SYSC_HAS_AUTOIDLE | SYSC_HAS_SIDLEMODE |
1618                            SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
1619         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1620         .sysc_fields    = &omap_hwmod_sysc_type1,
1621 };
1622
1623 static struct omap_hwmod_class omap3xxx_gpmc_hwmod_class = {
1624         .name   = "gpmc",
1625         .sysc   = &omap3xxx_gpmc_sysc,
1626 };
1627
1628 static struct omap_hwmod omap3xxx_gpmc_hwmod = {
1629         .name           = "gpmc",
1630         .class          = &omap3xxx_gpmc_hwmod_class,
1631         .clkdm_name     = "core_l3_clkdm",
1632         .main_clk       = "gpmc_fck",
1633         /* Skip reset for CONFIG_OMAP_GPMC_DEBUG for bootloader timings */
1634         .flags          = HWMOD_NO_IDLEST | DEBUG_OMAP_GPMC_HWMOD_FLAGS,
1635 };
1636
1637 /*
1638  * interfaces
1639  */
1640
1641 /* L3 -> L4_CORE interface */
1642 static struct omap_hwmod_ocp_if omap3xxx_l3_main__l4_core = {
1643         .master = &omap3xxx_l3_main_hwmod,
1644         .slave  = &omap3xxx_l4_core_hwmod,
1645         .user   = OCP_USER_MPU | OCP_USER_SDMA,
1646 };
1647
1648 /* L3 -> L4_PER interface */
1649 static struct omap_hwmod_ocp_if omap3xxx_l3_main__l4_per = {
1650         .master = &omap3xxx_l3_main_hwmod,
1651         .slave  = &omap3xxx_l4_per_hwmod,
1652         .user   = OCP_USER_MPU | OCP_USER_SDMA,
1653 };
1654
1655
1656 /* MPU -> L3 interface */
1657 static struct omap_hwmod_ocp_if omap3xxx_mpu__l3_main = {
1658         .master   = &omap3xxx_mpu_hwmod,
1659         .slave    = &omap3xxx_l3_main_hwmod,
1660         .user   = OCP_USER_MPU,
1661 };
1662
1663
1664 /* l3 -> debugss */
1665 static struct omap_hwmod_ocp_if omap3xxx_l3_main__l4_debugss = {
1666         .master         = &omap3xxx_l3_main_hwmod,
1667         .slave          = &omap3xxx_debugss_hwmod,
1668         .user           = OCP_USER_MPU,
1669 };
1670
1671 /* DSS -> l3 */
1672 static struct omap_hwmod_ocp_if omap3430es1_dss__l3 = {
1673         .master         = &omap3430es1_dss_core_hwmod,
1674         .slave          = &omap3xxx_l3_main_hwmod,
1675         .user           = OCP_USER_MPU | OCP_USER_SDMA,
1676 };
1677
1678 static struct omap_hwmod_ocp_if omap3xxx_dss__l3 = {
1679         .master         = &omap3xxx_dss_core_hwmod,
1680         .slave          = &omap3xxx_l3_main_hwmod,
1681         .fw = {
1682                 .omap2 = {
1683                         .l3_perm_bit  = OMAP3_L3_CORE_FW_INIT_ID_DSS,
1684                         .flags  = OMAP_FIREWALL_L3,
1685                 },
1686         },
1687         .user           = OCP_USER_MPU | OCP_USER_SDMA,
1688 };
1689
1690 /* l3_core -> usbhsotg interface */
1691 static struct omap_hwmod_ocp_if omap3xxx_usbhsotg__l3 = {
1692         .master         = &omap3xxx_usbhsotg_hwmod,
1693         .slave          = &omap3xxx_l3_main_hwmod,
1694         .clk            = "core_l3_ick",
1695         .user           = OCP_USER_MPU,
1696 };
1697
1698 /* l3_core -> am35xx_usbhsotg interface */
1699 static struct omap_hwmod_ocp_if am35xx_usbhsotg__l3 = {
1700         .master         = &am35xx_usbhsotg_hwmod,
1701         .slave          = &omap3xxx_l3_main_hwmod,
1702         .clk            = "hsotgusb_ick",
1703         .user           = OCP_USER_MPU,
1704 };
1705
1706 /* l3_core -> sad2d interface */
1707 static struct omap_hwmod_ocp_if omap3xxx_sad2d__l3 = {
1708         .master         = &omap3xxx_sad2d_hwmod,
1709         .slave          = &omap3xxx_l3_main_hwmod,
1710         .clk            = "core_l3_ick",
1711         .user           = OCP_USER_MPU,
1712 };
1713
1714 /* L4_CORE -> L4_WKUP interface */
1715 static struct omap_hwmod_ocp_if omap3xxx_l4_core__l4_wkup = {
1716         .master = &omap3xxx_l4_core_hwmod,
1717         .slave  = &omap3xxx_l4_wkup_hwmod,
1718         .user   = OCP_USER_MPU | OCP_USER_SDMA,
1719 };
1720
1721 /* L4 CORE -> MMC1 interface */
1722 static struct omap_hwmod_ocp_if omap3xxx_l4_core__pre_es3_mmc1 = {
1723         .master         = &omap3xxx_l4_core_hwmod,
1724         .slave          = &omap3xxx_pre_es3_mmc1_hwmod,
1725         .clk            = "mmchs1_ick",
1726         .user           = OCP_USER_MPU | OCP_USER_SDMA,
1727         .flags          = OMAP_FIREWALL_L4,
1728 };
1729
1730 static struct omap_hwmod_ocp_if omap3xxx_l4_core__es3plus_mmc1 = {
1731         .master         = &omap3xxx_l4_core_hwmod,
1732         .slave          = &omap3xxx_es3plus_mmc1_hwmod,
1733         .clk            = "mmchs1_ick",
1734         .user           = OCP_USER_MPU | OCP_USER_SDMA,
1735         .flags          = OMAP_FIREWALL_L4,
1736 };
1737
1738 /* L4 CORE -> MMC2 interface */
1739 static struct omap_hwmod_ocp_if omap3xxx_l4_core__pre_es3_mmc2 = {
1740         .master         = &omap3xxx_l4_core_hwmod,
1741         .slave          = &omap3xxx_pre_es3_mmc2_hwmod,
1742         .clk            = "mmchs2_ick",
1743         .user           = OCP_USER_MPU | OCP_USER_SDMA,
1744         .flags          = OMAP_FIREWALL_L4,
1745 };
1746
1747 static struct omap_hwmod_ocp_if omap3xxx_l4_core__es3plus_mmc2 = {
1748         .master         = &omap3xxx_l4_core_hwmod,
1749         .slave          = &omap3xxx_es3plus_mmc2_hwmod,
1750         .clk            = "mmchs2_ick",
1751         .user           = OCP_USER_MPU | OCP_USER_SDMA,
1752         .flags          = OMAP_FIREWALL_L4,
1753 };
1754
1755 /* L4 CORE -> MMC3 interface */
1756
1757 static struct omap_hwmod_ocp_if omap3xxx_l4_core__mmc3 = {
1758         .master         = &omap3xxx_l4_core_hwmod,
1759         .slave          = &omap3xxx_mmc3_hwmod,
1760         .clk            = "mmchs3_ick",
1761         .user           = OCP_USER_MPU | OCP_USER_SDMA,
1762         .flags          = OMAP_FIREWALL_L4,
1763 };
1764
1765 /* L4 CORE -> UART1 interface */
1766
1767 static struct omap_hwmod_ocp_if omap3_l4_core__uart1 = {
1768         .master         = &omap3xxx_l4_core_hwmod,
1769         .slave          = &omap3xxx_uart1_hwmod,
1770         .clk            = "uart1_ick",
1771         .user           = OCP_USER_MPU | OCP_USER_SDMA,
1772 };
1773
1774 /* L4 CORE -> UART2 interface */
1775
1776 static struct omap_hwmod_ocp_if omap3_l4_core__uart2 = {
1777         .master         = &omap3xxx_l4_core_hwmod,
1778         .slave          = &omap3xxx_uart2_hwmod,
1779         .clk            = "uart2_ick",
1780         .user           = OCP_USER_MPU | OCP_USER_SDMA,
1781 };
1782
1783 /* L4 PER -> UART3 interface */
1784
1785 static struct omap_hwmod_ocp_if omap3_l4_per__uart3 = {
1786         .master         = &omap3xxx_l4_per_hwmod,
1787         .slave          = &omap3xxx_uart3_hwmod,
1788         .clk            = "uart3_ick",
1789         .user           = OCP_USER_MPU | OCP_USER_SDMA,
1790 };
1791
1792 /* L4 PER -> UART4 interface */
1793
1794 static struct omap_hwmod_ocp_if omap36xx_l4_per__uart4 = {
1795         .master         = &omap3xxx_l4_per_hwmod,
1796         .slave          = &omap36xx_uart4_hwmod,
1797         .clk            = "uart4_ick",
1798         .user           = OCP_USER_MPU | OCP_USER_SDMA,
1799 };
1800
1801 /* AM35xx: L4 CORE -> UART4 interface */
1802
1803 static struct omap_hwmod_ocp_if am35xx_l4_core__uart4 = {
1804         .master         = &omap3xxx_l4_core_hwmod,
1805         .slave          = &am35xx_uart4_hwmod,
1806         .clk            = "uart4_ick",
1807         .user           = OCP_USER_MPU | OCP_USER_SDMA,
1808 };
1809
1810 /* L4 CORE -> I2C1 interface */
1811 static struct omap_hwmod_ocp_if omap3_l4_core__i2c1 = {
1812         .master         = &omap3xxx_l4_core_hwmod,
1813         .slave          = &omap3xxx_i2c1_hwmod,
1814         .clk            = "i2c1_ick",
1815         .fw = {
1816                 .omap2 = {
1817                         .l4_fw_region  = OMAP3_L4_CORE_FW_I2C1_REGION,
1818                         .l4_prot_group = 7,
1819                         .flags  = OMAP_FIREWALL_L4,
1820                 },
1821         },
1822         .user           = OCP_USER_MPU | OCP_USER_SDMA,
1823 };
1824
1825 /* L4 CORE -> I2C2 interface */
1826 static struct omap_hwmod_ocp_if omap3_l4_core__i2c2 = {
1827         .master         = &omap3xxx_l4_core_hwmod,
1828         .slave          = &omap3xxx_i2c2_hwmod,
1829         .clk            = "i2c2_ick",
1830         .fw = {
1831                 .omap2 = {
1832                         .l4_fw_region  = OMAP3_L4_CORE_FW_I2C2_REGION,
1833                         .l4_prot_group = 7,
1834                         .flags = OMAP_FIREWALL_L4,
1835                 },
1836         },
1837         .user           = OCP_USER_MPU | OCP_USER_SDMA,
1838 };
1839
1840 /* L4 CORE -> I2C3 interface */
1841
1842 static struct omap_hwmod_ocp_if omap3_l4_core__i2c3 = {
1843         .master         = &omap3xxx_l4_core_hwmod,
1844         .slave          = &omap3xxx_i2c3_hwmod,
1845         .clk            = "i2c3_ick",
1846         .fw = {
1847                 .omap2 = {
1848                         .l4_fw_region  = OMAP3_L4_CORE_FW_I2C3_REGION,
1849                         .l4_prot_group = 7,
1850                         .flags = OMAP_FIREWALL_L4,
1851                 },
1852         },
1853         .user           = OCP_USER_MPU | OCP_USER_SDMA,
1854 };
1855
1856 /* L4 CORE -> SR1 interface */
1857 static struct omap_hwmod_ocp_if omap34xx_l4_core__sr1 = {
1858         .master         = &omap3xxx_l4_core_hwmod,
1859         .slave          = &omap34xx_sr1_hwmod,
1860         .clk            = "sr_l4_ick",
1861         .user           = OCP_USER_MPU,
1862 };
1863
1864 static struct omap_hwmod_ocp_if omap36xx_l4_core__sr1 = {
1865         .master         = &omap3xxx_l4_core_hwmod,
1866         .slave          = &omap36xx_sr1_hwmod,
1867         .clk            = "sr_l4_ick",
1868         .user           = OCP_USER_MPU,
1869 };
1870
1871 /* L4 CORE -> SR2 interface */
1872
1873 static struct omap_hwmod_ocp_if omap34xx_l4_core__sr2 = {
1874         .master         = &omap3xxx_l4_core_hwmod,
1875         .slave          = &omap34xx_sr2_hwmod,
1876         .clk            = "sr_l4_ick",
1877         .user           = OCP_USER_MPU,
1878 };
1879
1880 static struct omap_hwmod_ocp_if omap36xx_l4_core__sr2 = {
1881         .master         = &omap3xxx_l4_core_hwmod,
1882         .slave          = &omap36xx_sr2_hwmod,
1883         .clk            = "sr_l4_ick",
1884         .user           = OCP_USER_MPU,
1885 };
1886
1887
1888 /* l4_core -> usbhsotg  */
1889 static struct omap_hwmod_ocp_if omap3xxx_l4_core__usbhsotg = {
1890         .master         = &omap3xxx_l4_core_hwmod,
1891         .slave          = &omap3xxx_usbhsotg_hwmod,
1892         .clk            = "l4_ick",
1893         .user           = OCP_USER_MPU,
1894 };
1895
1896
1897 /* l4_core -> usbhsotg  */
1898 static struct omap_hwmod_ocp_if am35xx_l4_core__usbhsotg = {
1899         .master         = &omap3xxx_l4_core_hwmod,
1900         .slave          = &am35xx_usbhsotg_hwmod,
1901         .clk            = "hsotgusb_ick",
1902         .user           = OCP_USER_MPU,
1903 };
1904
1905 /* L4_WKUP -> L4_SEC interface */
1906 static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__l4_sec = {
1907         .master = &omap3xxx_l4_wkup_hwmod,
1908         .slave  = &omap3xxx_l4_sec_hwmod,
1909         .user   = OCP_USER_MPU | OCP_USER_SDMA,
1910 };
1911
1912 /* IVA2 <- L3 interface */
1913 static struct omap_hwmod_ocp_if omap3xxx_l3__iva = {
1914         .master         = &omap3xxx_l3_main_hwmod,
1915         .slave          = &omap3xxx_iva_hwmod,
1916         .clk            = "core_l3_ick",
1917         .user           = OCP_USER_MPU | OCP_USER_SDMA,
1918 };
1919
1920
1921 /* l4_wkup -> timer1 */
1922 static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__timer1 = {
1923         .master         = &omap3xxx_l4_wkup_hwmod,
1924         .slave          = &omap3xxx_timer1_hwmod,
1925         .clk            = "gpt1_ick",
1926         .user           = OCP_USER_MPU | OCP_USER_SDMA,
1927 };
1928
1929
1930 /* l4_per -> timer2 */
1931 static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer2 = {
1932         .master         = &omap3xxx_l4_per_hwmod,
1933         .slave          = &omap3xxx_timer2_hwmod,
1934         .clk            = "gpt2_ick",
1935         .user           = OCP_USER_MPU | OCP_USER_SDMA,
1936 };
1937
1938
1939 /* l4_per -> timer3 */
1940 static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer3 = {
1941         .master         = &omap3xxx_l4_per_hwmod,
1942         .slave          = &omap3xxx_timer3_hwmod,
1943         .clk            = "gpt3_ick",
1944         .user           = OCP_USER_MPU | OCP_USER_SDMA,
1945 };
1946
1947
1948 /* l4_per -> timer4 */
1949 static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer4 = {
1950         .master         = &omap3xxx_l4_per_hwmod,
1951         .slave          = &omap3xxx_timer4_hwmod,
1952         .clk            = "gpt4_ick",
1953         .user           = OCP_USER_MPU | OCP_USER_SDMA,
1954 };
1955
1956
1957 /* l4_per -> timer5 */
1958 static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer5 = {
1959         .master         = &omap3xxx_l4_per_hwmod,
1960         .slave          = &omap3xxx_timer5_hwmod,
1961         .clk            = "gpt5_ick",
1962         .user           = OCP_USER_MPU | OCP_USER_SDMA,
1963 };
1964
1965
1966 /* l4_per -> timer6 */
1967 static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer6 = {
1968         .master         = &omap3xxx_l4_per_hwmod,
1969         .slave          = &omap3xxx_timer6_hwmod,
1970         .clk            = "gpt6_ick",
1971         .user           = OCP_USER_MPU | OCP_USER_SDMA,
1972 };
1973
1974
1975 /* l4_per -> timer7 */
1976 static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer7 = {
1977         .master         = &omap3xxx_l4_per_hwmod,
1978         .slave          = &omap3xxx_timer7_hwmod,
1979         .clk            = "gpt7_ick",
1980         .user           = OCP_USER_MPU | OCP_USER_SDMA,
1981 };
1982
1983
1984 /* l4_per -> timer8 */
1985 static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer8 = {
1986         .master         = &omap3xxx_l4_per_hwmod,
1987         .slave          = &omap3xxx_timer8_hwmod,
1988         .clk            = "gpt8_ick",
1989         .user           = OCP_USER_MPU | OCP_USER_SDMA,
1990 };
1991
1992
1993 /* l4_per -> timer9 */
1994 static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer9 = {
1995         .master         = &omap3xxx_l4_per_hwmod,
1996         .slave          = &omap3xxx_timer9_hwmod,
1997         .clk            = "gpt9_ick",
1998         .user           = OCP_USER_MPU | OCP_USER_SDMA,
1999 };
2000
2001 /* l4_core -> timer10 */
2002 static struct omap_hwmod_ocp_if omap3xxx_l4_core__timer10 = {
2003         .master         = &omap3xxx_l4_core_hwmod,
2004         .slave          = &omap3xxx_timer10_hwmod,
2005         .clk            = "gpt10_ick",
2006         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2007 };
2008
2009 /* l4_core -> timer11 */
2010 static struct omap_hwmod_ocp_if omap3xxx_l4_core__timer11 = {
2011         .master         = &omap3xxx_l4_core_hwmod,
2012         .slave          = &omap3xxx_timer11_hwmod,
2013         .clk            = "gpt11_ick",
2014         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2015 };
2016
2017
2018 /* l4_core -> timer12 */
2019 static struct omap_hwmod_ocp_if omap3xxx_l4_sec__timer12 = {
2020         .master         = &omap3xxx_l4_sec_hwmod,
2021         .slave          = &omap3xxx_timer12_hwmod,
2022         .clk            = "gpt12_ick",
2023         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2024 };
2025
2026 /* l4_wkup -> wd_timer2 */
2027
2028 static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__wd_timer2 = {
2029         .master         = &omap3xxx_l4_wkup_hwmod,
2030         .slave          = &omap3xxx_wd_timer2_hwmod,
2031         .clk            = "wdt2_ick",
2032         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2033 };
2034
2035 /* l4_core -> dss */
2036 static struct omap_hwmod_ocp_if omap3430es1_l4_core__dss = {
2037         .master         = &omap3xxx_l4_core_hwmod,
2038         .slave          = &omap3430es1_dss_core_hwmod,
2039         .clk            = "dss_ick",
2040         .fw = {
2041                 .omap2 = {
2042                         .l4_fw_region  = OMAP3ES1_L4_CORE_FW_DSS_CORE_REGION,
2043                         .l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
2044                         .flags  = OMAP_FIREWALL_L4,
2045                 },
2046         },
2047         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2048 };
2049
2050 static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss = {
2051         .master         = &omap3xxx_l4_core_hwmod,
2052         .slave          = &omap3xxx_dss_core_hwmod,
2053         .clk            = "dss_ick",
2054         .fw = {
2055                 .omap2 = {
2056                         .l4_fw_region  = OMAP3_L4_CORE_FW_DSS_CORE_REGION,
2057                         .l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
2058                         .flags  = OMAP_FIREWALL_L4,
2059                 },
2060         },
2061         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2062 };
2063
2064 /* l4_core -> dss_dispc */
2065 static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_dispc = {
2066         .master         = &omap3xxx_l4_core_hwmod,
2067         .slave          = &omap3xxx_dss_dispc_hwmod,
2068         .clk            = "dss_ick",
2069         .fw = {
2070                 .omap2 = {
2071                         .l4_fw_region  = OMAP3_L4_CORE_FW_DSS_DISPC_REGION,
2072                         .l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
2073                         .flags  = OMAP_FIREWALL_L4,
2074                 },
2075         },
2076         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2077 };
2078
2079 /* l4_core -> dss_dsi1 */
2080 static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_dsi1 = {
2081         .master         = &omap3xxx_l4_core_hwmod,
2082         .slave          = &omap3xxx_dss_dsi1_hwmod,
2083         .clk            = "dss_ick",
2084         .fw = {
2085                 .omap2 = {
2086                         .l4_fw_region  = OMAP3_L4_CORE_FW_DSS_DSI_REGION,
2087                         .l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
2088                         .flags  = OMAP_FIREWALL_L4,
2089                 },
2090         },
2091         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2092 };
2093
2094 /* l4_core -> dss_rfbi */
2095 static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_rfbi = {
2096         .master         = &omap3xxx_l4_core_hwmod,
2097         .slave          = &omap3xxx_dss_rfbi_hwmod,
2098         .clk            = "dss_ick",
2099         .fw = {
2100                 .omap2 = {
2101                         .l4_fw_region  = OMAP3_L4_CORE_FW_DSS_RFBI_REGION,
2102                         .l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP ,
2103                         .flags  = OMAP_FIREWALL_L4,
2104                 },
2105         },
2106         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2107 };
2108
2109 /* l4_core -> dss_venc */
2110 static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_venc = {
2111         .master         = &omap3xxx_l4_core_hwmod,
2112         .slave          = &omap3xxx_dss_venc_hwmod,
2113         .clk            = "dss_ick",
2114         .fw = {
2115                 .omap2 = {
2116                         .l4_fw_region  = OMAP3_L4_CORE_FW_DSS_VENC_REGION,
2117                         .l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
2118                         .flags  = OMAP_FIREWALL_L4,
2119                 },
2120         },
2121         .flags          = OCPIF_SWSUP_IDLE,
2122         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2123 };
2124
2125 /* l4_wkup -> gpio1 */
2126
2127 static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__gpio1 = {
2128         .master         = &omap3xxx_l4_wkup_hwmod,
2129         .slave          = &omap3xxx_gpio1_hwmod,
2130         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2131 };
2132
2133 /* l4_per -> gpio2 */
2134
2135 static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio2 = {
2136         .master         = &omap3xxx_l4_per_hwmod,
2137         .slave          = &omap3xxx_gpio2_hwmod,
2138         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2139 };
2140
2141 /* l4_per -> gpio3 */
2142
2143 static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio3 = {
2144         .master         = &omap3xxx_l4_per_hwmod,
2145         .slave          = &omap3xxx_gpio3_hwmod,
2146         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2147 };
2148
2149 /*
2150  * 'mmu' class
2151  * The memory management unit performs virtual to physical address translation
2152  * for its requestors.
2153  */
2154
2155 static struct omap_hwmod_class_sysconfig mmu_sysc = {
2156         .rev_offs       = 0x000,
2157         .sysc_offs      = 0x010,
2158         .syss_offs      = 0x014,
2159         .sysc_flags     = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
2160                            SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
2161         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2162         .sysc_fields    = &omap_hwmod_sysc_type1,
2163 };
2164
2165 static struct omap_hwmod_class omap3xxx_mmu_hwmod_class = {
2166         .name = "mmu",
2167         .sysc = &mmu_sysc,
2168 };
2169
2170 /* mmu isp */
2171 static struct omap_hwmod omap3xxx_mmu_isp_hwmod;
2172
2173 /* l4_core -> mmu isp */
2174 static struct omap_hwmod_ocp_if omap3xxx_l4_core__mmu_isp = {
2175         .master         = &omap3xxx_l4_core_hwmod,
2176         .slave          = &omap3xxx_mmu_isp_hwmod,
2177         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2178 };
2179
2180 static struct omap_hwmod omap3xxx_mmu_isp_hwmod = {
2181         .name           = "mmu_isp",
2182         .class          = &omap3xxx_mmu_hwmod_class,
2183         .main_clk       = "cam_ick",
2184         .flags          = HWMOD_NO_IDLEST,
2185 };
2186
2187 /* mmu iva */
2188
2189 static struct omap_hwmod omap3xxx_mmu_iva_hwmod;
2190
2191 static struct omap_hwmod_rst_info omap3xxx_mmu_iva_resets[] = {
2192         { .name = "mmu", .rst_shift = 1, .st_shift = 9 },
2193 };
2194
2195 /* l3_main -> iva mmu */
2196 static struct omap_hwmod_ocp_if omap3xxx_l3_main__mmu_iva = {
2197         .master         = &omap3xxx_l3_main_hwmod,
2198         .slave          = &omap3xxx_mmu_iva_hwmod,
2199         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2200 };
2201
2202 static struct omap_hwmod omap3xxx_mmu_iva_hwmod = {
2203         .name           = "mmu_iva",
2204         .class          = &omap3xxx_mmu_hwmod_class,
2205         .clkdm_name     = "iva2_clkdm",
2206         .rst_lines      = omap3xxx_mmu_iva_resets,
2207         .rst_lines_cnt  = ARRAY_SIZE(omap3xxx_mmu_iva_resets),
2208         .main_clk       = "iva2_ck",
2209         .prcm = {
2210                 .omap2 = {
2211                         .module_offs = OMAP3430_IVA2_MOD,
2212                         .idlest_reg_id = 1,
2213                         .idlest_idle_bit = OMAP3430_ST_IVA2_SHIFT,
2214                 },
2215         },
2216         .flags          = HWMOD_NO_IDLEST,
2217 };
2218
2219 /* l4_per -> gpio4 */
2220
2221 static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio4 = {
2222         .master         = &omap3xxx_l4_per_hwmod,
2223         .slave          = &omap3xxx_gpio4_hwmod,
2224         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2225 };
2226
2227 /* l4_per -> gpio5 */
2228
2229 static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio5 = {
2230         .master         = &omap3xxx_l4_per_hwmod,
2231         .slave          = &omap3xxx_gpio5_hwmod,
2232         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2233 };
2234
2235 /* l4_per -> gpio6 */
2236
2237 static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio6 = {
2238         .master         = &omap3xxx_l4_per_hwmod,
2239         .slave          = &omap3xxx_gpio6_hwmod,
2240         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2241 };
2242
2243 /* dma_system -> L3 */
2244 static struct omap_hwmod_ocp_if omap3xxx_dma_system__l3 = {
2245         .master         = &omap3xxx_dma_system_hwmod,
2246         .slave          = &omap3xxx_l3_main_hwmod,
2247         .clk            = "core_l3_ick",
2248         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2249 };
2250
2251 /* l4_cfg -> dma_system */
2252 static struct omap_hwmod_ocp_if omap3xxx_l4_core__dma_system = {
2253         .master         = &omap3xxx_l4_core_hwmod,
2254         .slave          = &omap3xxx_dma_system_hwmod,
2255         .clk            = "core_l4_ick",
2256         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2257 };
2258
2259
2260 /* l4_core -> mcbsp1 */
2261 static struct omap_hwmod_ocp_if omap3xxx_l4_core__mcbsp1 = {
2262         .master         = &omap3xxx_l4_core_hwmod,
2263         .slave          = &omap3xxx_mcbsp1_hwmod,
2264         .clk            = "mcbsp1_ick",
2265         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2266 };
2267
2268
2269 /* l4_per -> mcbsp2 */
2270 static struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp2 = {
2271         .master         = &omap3xxx_l4_per_hwmod,
2272         .slave          = &omap3xxx_mcbsp2_hwmod,
2273         .clk            = "mcbsp2_ick",
2274         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2275 };
2276
2277
2278 /* l4_per -> mcbsp3 */
2279 static struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp3 = {
2280         .master         = &omap3xxx_l4_per_hwmod,
2281         .slave          = &omap3xxx_mcbsp3_hwmod,
2282         .clk            = "mcbsp3_ick",
2283         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2284 };
2285
2286
2287 /* l4_per -> mcbsp4 */
2288 static struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp4 = {
2289         .master         = &omap3xxx_l4_per_hwmod,
2290         .slave          = &omap3xxx_mcbsp4_hwmod,
2291         .clk            = "mcbsp4_ick",
2292         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2293 };
2294
2295
2296 /* l4_core -> mcbsp5 */
2297 static struct omap_hwmod_ocp_if omap3xxx_l4_core__mcbsp5 = {
2298         .master         = &omap3xxx_l4_core_hwmod,
2299         .slave          = &omap3xxx_mcbsp5_hwmod,
2300         .clk            = "mcbsp5_ick",
2301         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2302 };
2303
2304
2305 /* l4_per -> mcbsp2_sidetone */
2306 static struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp2_sidetone = {
2307         .master         = &omap3xxx_l4_per_hwmod,
2308         .slave          = &omap3xxx_mcbsp2_sidetone_hwmod,
2309         .clk            = "mcbsp2_ick",
2310         .user           = OCP_USER_MPU,
2311 };
2312
2313
2314 /* l4_per -> mcbsp3_sidetone */
2315 static struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp3_sidetone = {
2316         .master         = &omap3xxx_l4_per_hwmod,
2317         .slave          = &omap3xxx_mcbsp3_sidetone_hwmod,
2318         .clk            = "mcbsp3_ick",
2319         .user           = OCP_USER_MPU,
2320 };
2321
2322 /* l4_core -> mailbox */
2323 static struct omap_hwmod_ocp_if omap3xxx_l4_core__mailbox = {
2324         .master         = &omap3xxx_l4_core_hwmod,
2325         .slave          = &omap3xxx_mailbox_hwmod,
2326         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2327 };
2328
2329 /* l4 core -> mcspi1 interface */
2330 static struct omap_hwmod_ocp_if omap34xx_l4_core__mcspi1 = {
2331         .master         = &omap3xxx_l4_core_hwmod,
2332         .slave          = &omap34xx_mcspi1,
2333         .clk            = "mcspi1_ick",
2334         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2335 };
2336
2337 /* l4 core -> mcspi2 interface */
2338 static struct omap_hwmod_ocp_if omap34xx_l4_core__mcspi2 = {
2339         .master         = &omap3xxx_l4_core_hwmod,
2340         .slave          = &omap34xx_mcspi2,
2341         .clk            = "mcspi2_ick",
2342         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2343 };
2344
2345 /* l4 core -> mcspi3 interface */
2346 static struct omap_hwmod_ocp_if omap34xx_l4_core__mcspi3 = {
2347         .master         = &omap3xxx_l4_core_hwmod,
2348         .slave          = &omap34xx_mcspi3,
2349         .clk            = "mcspi3_ick",
2350         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2351 };
2352
2353 /* l4 core -> mcspi4 interface */
2354
2355 static struct omap_hwmod_ocp_if omap34xx_l4_core__mcspi4 = {
2356         .master         = &omap3xxx_l4_core_hwmod,
2357         .slave          = &omap34xx_mcspi4,
2358         .clk            = "mcspi4_ick",
2359         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2360 };
2361
2362 static struct omap_hwmod_ocp_if omap3xxx_usb_host_hs__l3_main_2 = {
2363         .master         = &omap3xxx_usb_host_hs_hwmod,
2364         .slave          = &omap3xxx_l3_main_hwmod,
2365         .clk            = "core_l3_ick",
2366         .user           = OCP_USER_MPU,
2367 };
2368
2369
2370 static struct omap_hwmod_ocp_if omap3xxx_l4_core__usb_host_hs = {
2371         .master         = &omap3xxx_l4_core_hwmod,
2372         .slave          = &omap3xxx_usb_host_hs_hwmod,
2373         .clk            = "usbhost_ick",
2374         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2375 };
2376
2377
2378 static struct omap_hwmod_ocp_if omap3xxx_l4_core__usb_tll_hs = {
2379         .master         = &omap3xxx_l4_core_hwmod,
2380         .slave          = &omap3xxx_usb_tll_hs_hwmod,
2381         .clk            = "usbtll_ick",
2382         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2383 };
2384
2385 /* l4_core -> hdq1w interface */
2386 static struct omap_hwmod_ocp_if omap3xxx_l4_core__hdq1w = {
2387         .master         = &omap3xxx_l4_core_hwmod,
2388         .slave          = &omap3xxx_hdq1w_hwmod,
2389         .clk            = "hdq_ick",
2390         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2391         .flags          = OMAP_FIREWALL_L4 | OCPIF_SWSUP_IDLE,
2392 };
2393
2394 /* l4_wkup -> 32ksync_counter */
2395
2396
2397 static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__counter_32k = {
2398         .master         = &omap3xxx_l4_wkup_hwmod,
2399         .slave          = &omap3xxx_counter_32k_hwmod,
2400         .clk            = "omap_32ksync_ick",
2401         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2402 };
2403
2404 /* am35xx has Davinci MDIO & EMAC */
2405 static struct omap_hwmod_class am35xx_mdio_class = {
2406         .name = "davinci_mdio",
2407 };
2408
2409 static struct omap_hwmod am35xx_mdio_hwmod = {
2410         .name           = "davinci_mdio",
2411         .class          = &am35xx_mdio_class,
2412         .flags          = HWMOD_NO_IDLEST,
2413 };
2414
2415 /*
2416  * XXX Should be connected to an IPSS hwmod, not the L3 directly;
2417  * but this will probably require some additional hwmod core support,
2418  * so is left as a future to-do item.
2419  */
2420 static struct omap_hwmod_ocp_if am35xx_mdio__l3 = {
2421         .master         = &am35xx_mdio_hwmod,
2422         .slave          = &omap3xxx_l3_main_hwmod,
2423         .clk            = "emac_fck",
2424         .user           = OCP_USER_MPU,
2425 };
2426
2427 /* l4_core -> davinci mdio  */
2428 /*
2429  * XXX Should be connected to an IPSS hwmod, not the L4_CORE directly;
2430  * but this will probably require some additional hwmod core support,
2431  * so is left as a future to-do item.
2432  */
2433 static struct omap_hwmod_ocp_if am35xx_l4_core__mdio = {
2434         .master         = &omap3xxx_l4_core_hwmod,
2435         .slave          = &am35xx_mdio_hwmod,
2436         .clk            = "emac_fck",
2437         .user           = OCP_USER_MPU,
2438 };
2439
2440 static struct omap_hwmod_class am35xx_emac_class = {
2441         .name = "davinci_emac",
2442 };
2443
2444 static struct omap_hwmod am35xx_emac_hwmod = {
2445         .name           = "davinci_emac",
2446         .class          = &am35xx_emac_class,
2447         /*
2448          * According to Mark Greer, the MPU will not return from WFI
2449          * when the EMAC signals an interrupt.
2450          * http://www.spinics.net/lists/arm-kernel/msg174734.html
2451          */
2452         .flags          = (HWMOD_NO_IDLEST | HWMOD_BLOCK_WFI),
2453 };
2454
2455 /* l3_core -> davinci emac interface */
2456 /*
2457  * XXX Should be connected to an IPSS hwmod, not the L3 directly;
2458  * but this will probably require some additional hwmod core support,
2459  * so is left as a future to-do item.
2460  */
2461 static struct omap_hwmod_ocp_if am35xx_emac__l3 = {
2462         .master         = &am35xx_emac_hwmod,
2463         .slave          = &omap3xxx_l3_main_hwmod,
2464         .clk            = "emac_ick",
2465         .user           = OCP_USER_MPU,
2466 };
2467
2468 /* l4_core -> davinci emac  */
2469 /*
2470  * XXX Should be connected to an IPSS hwmod, not the L4_CORE directly;
2471  * but this will probably require some additional hwmod core support,
2472  * so is left as a future to-do item.
2473  */
2474 static struct omap_hwmod_ocp_if am35xx_l4_core__emac = {
2475         .master         = &omap3xxx_l4_core_hwmod,
2476         .slave          = &am35xx_emac_hwmod,
2477         .clk            = "emac_ick",
2478         .user           = OCP_USER_MPU,
2479 };
2480
2481 static struct omap_hwmod_ocp_if omap3xxx_l3_main__gpmc = {
2482         .master         = &omap3xxx_l3_main_hwmod,
2483         .slave          = &omap3xxx_gpmc_hwmod,
2484         .clk            = "core_l3_ick",
2485         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2486 };
2487
2488 /* l4_core -> SHAM2 (SHA1/MD5) (similar to omap24xx) */
2489 static struct omap_hwmod_class_sysconfig omap3_sham_sysc = {
2490         .rev_offs       = 0x5c,
2491         .sysc_offs      = 0x60,
2492         .syss_offs      = 0x64,
2493         .sysc_flags     = (SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
2494                            SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
2495         .sysc_fields    = &omap3_sham_sysc_fields,
2496 };
2497
2498 static struct omap_hwmod_class omap3xxx_sham_class = {
2499         .name   = "sham",
2500         .sysc   = &omap3_sham_sysc,
2501 };
2502
2503
2504
2505 static struct omap_hwmod omap3xxx_sham_hwmod = {
2506         .name           = "sham",
2507         .main_clk       = "sha12_ick",
2508         .prcm           = {
2509                 .omap2 = {
2510                         .module_offs = CORE_MOD,
2511                         .idlest_reg_id = 1,
2512                         .idlest_idle_bit = OMAP3430_ST_SHA12_SHIFT,
2513                 },
2514         },
2515         .class          = &omap3xxx_sham_class,
2516 };
2517
2518
2519 static struct omap_hwmod_ocp_if omap3xxx_l4_core__sham = {
2520         .master         = &omap3xxx_l4_core_hwmod,
2521         .slave          = &omap3xxx_sham_hwmod,
2522         .clk            = "sha12_ick",
2523         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2524 };
2525
2526 /* l4_core -> AES */
2527 static struct omap_hwmod_class_sysconfig omap3_aes_sysc = {
2528         .rev_offs       = 0x44,
2529         .sysc_offs      = 0x48,
2530         .syss_offs      = 0x4c,
2531         .sysc_flags     = (SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
2532                            SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
2533         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2534         .sysc_fields    = &omap3xxx_aes_sysc_fields,
2535 };
2536
2537 static struct omap_hwmod_class omap3xxx_aes_class = {
2538         .name   = "aes",
2539         .sysc   = &omap3_aes_sysc,
2540 };
2541
2542
2543 static struct omap_hwmod omap3xxx_aes_hwmod = {
2544         .name           = "aes",
2545         .main_clk       = "aes2_ick",
2546         .prcm           = {
2547                 .omap2 = {
2548                         .module_offs = CORE_MOD,
2549                         .idlest_reg_id = 1,
2550                         .idlest_idle_bit = OMAP3430_ST_AES2_SHIFT,
2551                 },
2552         },
2553         .class          = &omap3xxx_aes_class,
2554 };
2555
2556
2557 static struct omap_hwmod_ocp_if omap3xxx_l4_core__aes = {
2558         .master         = &omap3xxx_l4_core_hwmod,
2559         .slave          = &omap3xxx_aes_hwmod,
2560         .clk            = "aes2_ick",
2561         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2562 };
2563
2564 /*
2565  * 'ssi' class
2566  * synchronous serial interface (multichannel and full-duplex serial if)
2567  */
2568
2569 static struct omap_hwmod_class_sysconfig omap34xx_ssi_sysc = {
2570         .rev_offs       = 0x0000,
2571         .sysc_offs      = 0x0010,
2572         .syss_offs      = 0x0014,
2573         .sysc_flags     = (SYSC_HAS_AUTOIDLE | SYSC_HAS_MIDLEMODE |
2574                            SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
2575         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2576         .sysc_fields    = &omap_hwmod_sysc_type1,
2577 };
2578
2579 static struct omap_hwmod_class omap3xxx_ssi_hwmod_class = {
2580         .name   = "ssi",
2581         .sysc   = &omap34xx_ssi_sysc,
2582 };
2583
2584 static struct omap_hwmod omap3xxx_ssi_hwmod = {
2585         .name           = "ssi",
2586         .class          = &omap3xxx_ssi_hwmod_class,
2587         .clkdm_name     = "core_l4_clkdm",
2588         .main_clk       = "ssi_ssr_fck",
2589         .prcm           = {
2590                 .omap2 = {
2591                         .module_offs            = CORE_MOD,
2592                         .idlest_reg_id          = 1,
2593                         .idlest_idle_bit        = OMAP3430ES2_ST_SSI_IDLE_SHIFT,
2594                 },
2595         },
2596 };
2597
2598 /* L4 CORE -> SSI */
2599 static struct omap_hwmod_ocp_if omap3xxx_l4_core__ssi = {
2600         .master         = &omap3xxx_l4_core_hwmod,
2601         .slave          = &omap3xxx_ssi_hwmod,
2602         .clk            = "ssi_ick",
2603         .user           = OCP_USER_MPU | OCP_USER_SDMA,
2604 };
2605
2606 static struct omap_hwmod_ocp_if *omap3xxx_hwmod_ocp_ifs[] __initdata = {
2607         &omap3xxx_l3_main__l4_core,
2608         &omap3xxx_l3_main__l4_per,
2609         &omap3xxx_mpu__l3_main,
2610         &omap3xxx_l3_main__l4_debugss,
2611         &omap3xxx_l4_core__l4_wkup,
2612         &omap3xxx_l4_core__mmc3,
2613         &omap3_l4_core__uart1,
2614         &omap3_l4_core__uart2,
2615         &omap3_l4_per__uart3,
2616         &omap3_l4_core__i2c1,
2617         &omap3_l4_core__i2c2,
2618         &omap3_l4_core__i2c3,
2619         &omap3xxx_l4_wkup__l4_sec,
2620         &omap3xxx_l4_wkup__timer1,
2621         &omap3xxx_l4_per__timer2,
2622         &omap3xxx_l4_per__timer3,
2623         &omap3xxx_l4_per__timer4,
2624         &omap3xxx_l4_per__timer5,
2625         &omap3xxx_l4_per__timer6,
2626         &omap3xxx_l4_per__timer7,
2627         &omap3xxx_l4_per__timer8,
2628         &omap3xxx_l4_per__timer9,
2629         &omap3xxx_l4_core__timer10,
2630         &omap3xxx_l4_core__timer11,
2631         &omap3xxx_l4_wkup__wd_timer2,
2632         &omap3xxx_l4_wkup__gpio1,
2633         &omap3xxx_l4_per__gpio2,
2634         &omap3xxx_l4_per__gpio3,
2635         &omap3xxx_l4_per__gpio4,
2636         &omap3xxx_l4_per__gpio5,
2637         &omap3xxx_l4_per__gpio6,
2638         &omap3xxx_dma_system__l3,
2639         &omap3xxx_l4_core__dma_system,
2640         &omap3xxx_l4_core__mcbsp1,
2641         &omap3xxx_l4_per__mcbsp2,
2642         &omap3xxx_l4_per__mcbsp3,
2643         &omap3xxx_l4_per__mcbsp4,
2644         &omap3xxx_l4_core__mcbsp5,
2645         &omap3xxx_l4_per__mcbsp2_sidetone,
2646         &omap3xxx_l4_per__mcbsp3_sidetone,
2647         &omap34xx_l4_core__mcspi1,
2648         &omap34xx_l4_core__mcspi2,
2649         &omap34xx_l4_core__mcspi3,
2650         &omap34xx_l4_core__mcspi4,
2651         &omap3xxx_l4_wkup__counter_32k,
2652         &omap3xxx_l3_main__gpmc,
2653         NULL,
2654 };
2655
2656 /* GP-only hwmod links */
2657 static struct omap_hwmod_ocp_if *omap34xx_gp_hwmod_ocp_ifs[] __initdata = {
2658         &omap3xxx_l4_sec__timer12,
2659         NULL,
2660 };
2661
2662 static struct omap_hwmod_ocp_if *omap36xx_gp_hwmod_ocp_ifs[] __initdata = {
2663         &omap3xxx_l4_sec__timer12,
2664         NULL,
2665 };
2666
2667 static struct omap_hwmod_ocp_if *am35xx_gp_hwmod_ocp_ifs[] __initdata = {
2668         &omap3xxx_l4_sec__timer12,
2669         NULL,
2670 };
2671
2672 /* crypto hwmod links */
2673 static struct omap_hwmod_ocp_if *omap34xx_sham_hwmod_ocp_ifs[] __initdata = {
2674         &omap3xxx_l4_core__sham,
2675         NULL,
2676 };
2677
2678 static struct omap_hwmod_ocp_if *omap34xx_aes_hwmod_ocp_ifs[] __initdata = {
2679         &omap3xxx_l4_core__aes,
2680         NULL,
2681 };
2682
2683 static struct omap_hwmod_ocp_if *omap36xx_sham_hwmod_ocp_ifs[] __initdata = {
2684         &omap3xxx_l4_core__sham,
2685         NULL
2686 };
2687
2688 static struct omap_hwmod_ocp_if *omap36xx_aes_hwmod_ocp_ifs[] __initdata = {
2689         &omap3xxx_l4_core__aes,
2690         NULL
2691 };
2692
2693 /*
2694  * Apparently the SHA/MD5 and AES accelerator IP blocks are
2695  * only present on some AM35xx chips, and no one knows which
2696  * ones.  See
2697  * http://www.spinics.net/lists/arm-kernel/msg215466.html So
2698  * if you need these IP blocks on an AM35xx, try uncommenting
2699  * the following lines.
2700  */
2701 static struct omap_hwmod_ocp_if *am35xx_sham_hwmod_ocp_ifs[] __initdata = {
2702         /* &omap3xxx_l4_core__sham, */
2703         NULL
2704 };
2705
2706 static struct omap_hwmod_ocp_if *am35xx_aes_hwmod_ocp_ifs[] __initdata = {
2707         /* &omap3xxx_l4_core__aes, */
2708         NULL,
2709 };
2710
2711 /* 3430ES1-only hwmod links */
2712 static struct omap_hwmod_ocp_if *omap3430es1_hwmod_ocp_ifs[] __initdata = {
2713         &omap3430es1_dss__l3,
2714         &omap3430es1_l4_core__dss,
2715         NULL,
2716 };
2717
2718 /* 3430ES2+-only hwmod links */
2719 static struct omap_hwmod_ocp_if *omap3430es2plus_hwmod_ocp_ifs[] __initdata = {
2720         &omap3xxx_dss__l3,
2721         &omap3xxx_l4_core__dss,
2722         &omap3xxx_usbhsotg__l3,
2723         &omap3xxx_l4_core__usbhsotg,
2724         &omap3xxx_usb_host_hs__l3_main_2,
2725         &omap3xxx_l4_core__usb_host_hs,
2726         &omap3xxx_l4_core__usb_tll_hs,
2727         NULL,
2728 };
2729
2730 /* <= 3430ES3-only hwmod links */
2731 static struct omap_hwmod_ocp_if *omap3430_pre_es3_hwmod_ocp_ifs[] __initdata = {
2732         &omap3xxx_l4_core__pre_es3_mmc1,
2733         &omap3xxx_l4_core__pre_es3_mmc2,
2734         NULL,
2735 };
2736
2737 /* 3430ES3+-only hwmod links */
2738 static struct omap_hwmod_ocp_if *omap3430_es3plus_hwmod_ocp_ifs[] __initdata = {
2739         &omap3xxx_l4_core__es3plus_mmc1,
2740         &omap3xxx_l4_core__es3plus_mmc2,
2741         NULL,
2742 };
2743
2744 /* 34xx-only hwmod links (all ES revisions) */
2745 static struct omap_hwmod_ocp_if *omap34xx_hwmod_ocp_ifs[] __initdata = {
2746         &omap3xxx_l3__iva,
2747         &omap34xx_l4_core__sr1,
2748         &omap34xx_l4_core__sr2,
2749         &omap3xxx_l4_core__mailbox,
2750         &omap3xxx_l4_core__hdq1w,
2751         &omap3xxx_sad2d__l3,
2752         &omap3xxx_l4_core__mmu_isp,
2753         &omap3xxx_l3_main__mmu_iva,
2754         &omap3xxx_l4_core__ssi,
2755         NULL,
2756 };
2757
2758 /* 36xx-only hwmod links (all ES revisions) */
2759 static struct omap_hwmod_ocp_if *omap36xx_hwmod_ocp_ifs[] __initdata = {
2760         &omap3xxx_l3__iva,
2761         &omap36xx_l4_per__uart4,
2762         &omap3xxx_dss__l3,
2763         &omap3xxx_l4_core__dss,
2764         &omap36xx_l4_core__sr1,
2765         &omap36xx_l4_core__sr2,
2766         &omap3xxx_usbhsotg__l3,
2767         &omap3xxx_l4_core__usbhsotg,
2768         &omap3xxx_l4_core__mailbox,
2769         &omap3xxx_usb_host_hs__l3_main_2,
2770         &omap3xxx_l4_core__usb_host_hs,
2771         &omap3xxx_l4_core__usb_tll_hs,
2772         &omap3xxx_l4_core__es3plus_mmc1,
2773         &omap3xxx_l4_core__es3plus_mmc2,
2774         &omap3xxx_l4_core__hdq1w,
2775         &omap3xxx_sad2d__l3,
2776         &omap3xxx_l4_core__mmu_isp,
2777         &omap3xxx_l3_main__mmu_iva,
2778         &omap3xxx_l4_core__ssi,
2779         NULL,
2780 };
2781
2782 static struct omap_hwmod_ocp_if *am35xx_hwmod_ocp_ifs[] __initdata = {
2783         &omap3xxx_dss__l3,
2784         &omap3xxx_l4_core__dss,
2785         &am35xx_usbhsotg__l3,
2786         &am35xx_l4_core__usbhsotg,
2787         &am35xx_l4_core__uart4,
2788         &omap3xxx_usb_host_hs__l3_main_2,
2789         &omap3xxx_l4_core__usb_host_hs,
2790         &omap3xxx_l4_core__usb_tll_hs,
2791         &omap3xxx_l4_core__es3plus_mmc1,
2792         &omap3xxx_l4_core__es3plus_mmc2,
2793         &omap3xxx_l4_core__hdq1w,
2794         &am35xx_mdio__l3,
2795         &am35xx_l4_core__mdio,
2796         &am35xx_emac__l3,
2797         &am35xx_l4_core__emac,
2798         NULL,
2799 };
2800
2801 static struct omap_hwmod_ocp_if *omap3xxx_dss_hwmod_ocp_ifs[] __initdata = {
2802         &omap3xxx_l4_core__dss_dispc,
2803         &omap3xxx_l4_core__dss_dsi1,
2804         &omap3xxx_l4_core__dss_rfbi,
2805         &omap3xxx_l4_core__dss_venc,
2806         NULL,
2807 };
2808
2809 /**
2810  * omap3xxx_hwmod_is_hs_ip_block_usable - is a security IP block accessible?
2811  * @bus: struct device_node * for the top-level OMAP DT data
2812  * @dev_name: device name used in the DT file
2813  *
2814  * Determine whether a "secure" IP block @dev_name is usable by Linux.
2815  * There doesn't appear to be a 100% reliable way to determine this,
2816  * so we rely on heuristics.  If @bus is null, meaning there's no DT
2817  * data, then we only assume the IP block is accessible if the OMAP is
2818  * fused as a 'general-purpose' SoC.  If however DT data is present,
2819  * test to see if the IP block is described in the DT data and set to
2820  * 'status = "okay"'.  If so then we assume the ODM has configured the
2821  * OMAP firewalls to allow access to the IP block.
2822  *
2823  * Return: 0 if device named @dev_name is not likely to be accessible,
2824  * or 1 if it is likely to be accessible.
2825  */
2826 static bool __init omap3xxx_hwmod_is_hs_ip_block_usable(struct device_node *bus,
2827                                                         const char *dev_name)
2828 {
2829         struct device_node *node;
2830         bool available;
2831
2832         if (!bus)
2833                 return omap_type() == OMAP2_DEVICE_TYPE_GP;
2834
2835         node = of_get_child_by_name(bus, dev_name);
2836         available = of_device_is_available(node);
2837         of_node_put(node);
2838
2839         return available;
2840 }
2841
2842 int __init omap3xxx_hwmod_init(void)
2843 {
2844         int r;
2845         struct omap_hwmod_ocp_if **h = NULL, **h_gp = NULL, **h_sham = NULL;
2846         struct omap_hwmod_ocp_if **h_aes = NULL;
2847         struct device_node *bus;
2848         unsigned int rev;
2849
2850         omap_hwmod_init();
2851
2852         /* Register hwmod links common to all OMAP3 */
2853         r = omap_hwmod_register_links(omap3xxx_hwmod_ocp_ifs);
2854         if (r < 0)
2855                 return r;
2856
2857         rev = omap_rev();
2858
2859         /*
2860          * Register hwmod links common to individual OMAP3 families, all
2861          * silicon revisions (e.g., 34xx, or AM3505/3517, or 36xx)
2862          * All possible revisions should be included in this conditional.
2863          */
2864         if (rev == OMAP3430_REV_ES1_0 || rev == OMAP3430_REV_ES2_0 ||
2865             rev == OMAP3430_REV_ES2_1 || rev == OMAP3430_REV_ES3_0 ||
2866             rev == OMAP3430_REV_ES3_1 || rev == OMAP3430_REV_ES3_1_2) {
2867                 h = omap34xx_hwmod_ocp_ifs;
2868                 h_gp = omap34xx_gp_hwmod_ocp_ifs;
2869                 h_sham = omap34xx_sham_hwmod_ocp_ifs;
2870                 h_aes = omap34xx_aes_hwmod_ocp_ifs;
2871         } else if (rev == AM35XX_REV_ES1_0 || rev == AM35XX_REV_ES1_1) {
2872                 h = am35xx_hwmod_ocp_ifs;
2873                 h_gp = am35xx_gp_hwmod_ocp_ifs;
2874                 h_sham = am35xx_sham_hwmod_ocp_ifs;
2875                 h_aes = am35xx_aes_hwmod_ocp_ifs;
2876         } else if (rev == OMAP3630_REV_ES1_0 || rev == OMAP3630_REV_ES1_1 ||
2877                    rev == OMAP3630_REV_ES1_2) {
2878                 h = omap36xx_hwmod_ocp_ifs;
2879                 h_gp = omap36xx_gp_hwmod_ocp_ifs;
2880                 h_sham = omap36xx_sham_hwmod_ocp_ifs;
2881                 h_aes = omap36xx_aes_hwmod_ocp_ifs;
2882         } else {
2883                 WARN(1, "OMAP3 hwmod family init: unknown chip type\n");
2884                 return -EINVAL;
2885         }
2886
2887         r = omap_hwmod_register_links(h);
2888         if (r < 0)
2889                 return r;
2890
2891         /* Register GP-only hwmod links. */
2892         if (h_gp && omap_type() == OMAP2_DEVICE_TYPE_GP) {
2893                 r = omap_hwmod_register_links(h_gp);
2894                 if (r < 0)
2895                         return r;
2896         }
2897
2898         /*
2899          * Register crypto hwmod links only if they are not disabled in DT.
2900          * If DT information is missing, enable them only for GP devices.
2901          */
2902
2903         bus = of_find_node_by_name(NULL, "ocp");
2904
2905         if (h_sham && omap3xxx_hwmod_is_hs_ip_block_usable(bus, "sham")) {
2906                 r = omap_hwmod_register_links(h_sham);
2907                 if (r < 0)
2908                         goto put_node;
2909         }
2910
2911         if (h_aes && omap3xxx_hwmod_is_hs_ip_block_usable(bus, "aes")) {
2912                 r = omap_hwmod_register_links(h_aes);
2913                 if (r < 0)
2914                         goto put_node;
2915         }
2916         of_node_put(bus);
2917
2918         /*
2919          * Register hwmod links specific to certain ES levels of a
2920          * particular family of silicon (e.g., 34xx ES1.0)
2921          */
2922         h = NULL;
2923         if (rev == OMAP3430_REV_ES1_0) {
2924                 h = omap3430es1_hwmod_ocp_ifs;
2925         } else if (rev == OMAP3430_REV_ES2_0 || rev == OMAP3430_REV_ES2_1 ||
2926                    rev == OMAP3430_REV_ES3_0 || rev == OMAP3430_REV_ES3_1 ||
2927                    rev == OMAP3430_REV_ES3_1_2) {
2928                 h = omap3430es2plus_hwmod_ocp_ifs;
2929         }
2930
2931         if (h) {
2932                 r = omap_hwmod_register_links(h);
2933                 if (r < 0)
2934                         return r;
2935         }
2936
2937         h = NULL;
2938         if (rev == OMAP3430_REV_ES1_0 || rev == OMAP3430_REV_ES2_0 ||
2939             rev == OMAP3430_REV_ES2_1) {
2940                 h = omap3430_pre_es3_hwmod_ocp_ifs;
2941         } else if (rev == OMAP3430_REV_ES3_0 || rev == OMAP3430_REV_ES3_1 ||
2942                    rev == OMAP3430_REV_ES3_1_2) {
2943                 h = omap3430_es3plus_hwmod_ocp_ifs;
2944         }
2945
2946         if (h)
2947                 r = omap_hwmod_register_links(h);
2948         if (r < 0)
2949                 return r;
2950
2951         /*
2952          * DSS code presumes that dss_core hwmod is handled first,
2953          * _before_ any other DSS related hwmods so register common
2954          * DSS hwmod links last to ensure that dss_core is already
2955          * registered.  Otherwise some change things may happen, for
2956          * ex. if dispc is handled before dss_core and DSS is enabled
2957          * in bootloader DISPC will be reset with outputs enabled
2958          * which sometimes leads to unrecoverable L3 error.  XXX The
2959          * long-term fix to this is to ensure hwmods are set up in
2960          * dependency order in the hwmod core code.
2961          */
2962         r = omap_hwmod_register_links(omap3xxx_dss_hwmod_ocp_ifs);
2963
2964         return r;
2965
2966 put_node:
2967         of_node_put(bus);
2968         return r;
2969 }