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