1 /*
2 * Hardware modules present on the OMAP44xx chips
3 *
4 * Copyright (C) 2009-2012 Texas Instruments, Inc.
5 * Copyright (C) 2009-2010 Nokia Corporation
6 *
7 * Paul Walmsley
8 * Benoit Cousson
9 *
10 * This file is automatically generated from the OMAP hardware databases.
11 * We respectfully ask that any modifications to this file be coordinated
12 * with the public linux-omap@vger.kernel.org mailing list and the
13 * authors above to ensure that the autogeneration scripts are kept
14 * up-to-date with the file contents.
15 * Note that this file is currently not in sync with autogeneration scripts.
16 * The above note to be removed, once it is synced up.
17 *
18 * This program is free software; you can redistribute it and/or modify
19 * it under the terms of the GNU General Public License version 2 as
20 * published by the Free Software Foundation.
21 */
22
23 #include <linux/io.h>
24 #include <linux/platform_data/hsmmc-omap.h>
25 #include <linux/power/smartreflex.h>
26 #include <linux/platform_data/i2c-omap.h>
27
28 #include <linux/omap-dma.h>
29
30 #include "omap_hwmod.h"
31 #include "omap_hwmod_common_data.h"
32 #include "cm1_44xx.h"
33 #include "cm2_44xx.h"
34 #include "prm44xx.h"
35 #include "prm-regbits-44xx.h"
36 #include "i2c.h"
37 #include "wd_timer.h"
38
39 /* Base offset for all OMAP4 interrupts external to MPUSS */
40 #define OMAP44XX_IRQ_GIC_START 32
41
42 /* Base offset for all OMAP4 dma requests */
43 #define OMAP44XX_DMA_REQ_START 1
44
45 /*
46 * IP blocks
47 */
48
49 /*
50 * 'dmm' class
51 * instance(s): dmm
52 */
53 static struct omap_hwmod_class omap44xx_dmm_hwmod_class = {
54 .name = "dmm",
55 };
56
57 /* dmm */
58 static struct omap_hwmod omap44xx_dmm_hwmod = {
59 .name = "dmm",
60 .class = &omap44xx_dmm_hwmod_class,
61 .clkdm_name = "l3_emif_clkdm",
62 .prcm = {
63 .omap4 = {
64 .clkctrl_offs = OMAP4_CM_MEMIF_DMM_CLKCTRL_OFFSET,
65 .context_offs = OMAP4_RM_MEMIF_DMM_CONTEXT_OFFSET,
66 },
67 },
68 };
69
70 /*
71 * 'l3' class
72 * instance(s): l3_instr, l3_main_1, l3_main_2, l3_main_3
73 */
74 static struct omap_hwmod_class omap44xx_l3_hwmod_class = {
75 .name = "l3",
76 };
77
78 /* l3_instr */
79 static struct omap_hwmod omap44xx_l3_instr_hwmod = {
80 .name = "l3_instr",
81 .class = &omap44xx_l3_hwmod_class,
82 .clkdm_name = "l3_instr_clkdm",
83 .prcm = {
84 .omap4 = {
85 .clkctrl_offs = OMAP4_CM_L3INSTR_L3_INSTR_CLKCTRL_OFFSET,
86 .context_offs = OMAP4_RM_L3INSTR_L3_INSTR_CONTEXT_OFFSET,
87 .modulemode = MODULEMODE_HWCTRL,
88 },
89 },
90 };
91
92 /* l3_main_1 */
93 static struct omap_hwmod omap44xx_l3_main_1_hwmod = {
94 .name = "l3_main_1",
95 .class = &omap44xx_l3_hwmod_class,
96 .clkdm_name = "l3_1_clkdm",
97 .prcm = {
98 .omap4 = {
99 .clkctrl_offs = OMAP4_CM_L3_1_L3_1_CLKCTRL_OFFSET,
100 .context_offs = OMAP4_RM_L3_1_L3_1_CONTEXT_OFFSET,
101 },
102 },
103 };
104
105 /* l3_main_2 */
106 static struct omap_hwmod omap44xx_l3_main_2_hwmod = {
107 .name = "l3_main_2",
108 .class = &omap44xx_l3_hwmod_class,
109 .clkdm_name = "l3_2_clkdm",
110 .prcm = {
111 .omap4 = {
112 .clkctrl_offs = OMAP4_CM_L3_2_L3_2_CLKCTRL_OFFSET,
113 .context_offs = OMAP4_RM_L3_2_L3_2_CONTEXT_OFFSET,
114 },
115 },
116 };
117
118 /* l3_main_3 */
119 static struct omap_hwmod omap44xx_l3_main_3_hwmod = {
120 .name = "l3_main_3",
121 .class = &omap44xx_l3_hwmod_class,
122 .clkdm_name = "l3_instr_clkdm",
123 .prcm = {
124 .omap4 = {
125 .clkctrl_offs = OMAP4_CM_L3INSTR_L3_3_CLKCTRL_OFFSET,
126 .context_offs = OMAP4_RM_L3INSTR_L3_3_CONTEXT_OFFSET,
127 .modulemode = MODULEMODE_HWCTRL,
128 },
129 },
130 };
131
132 /*
133 * 'l4' class
134 * instance(s): l4_abe, l4_cfg, l4_per, l4_wkup
135 */
136 static struct omap_hwmod_class omap44xx_l4_hwmod_class = {
137 .name = "l4",
138 };
139
140 /* l4_abe */
141 static struct omap_hwmod omap44xx_l4_abe_hwmod = {
142 .name = "l4_abe",
143 .class = &omap44xx_l4_hwmod_class,
144 .clkdm_name = "abe_clkdm",
145 .prcm = {
146 .omap4 = {
147 .clkctrl_offs = OMAP4_CM1_ABE_L4ABE_CLKCTRL_OFFSET,
148 .context_offs = OMAP4_RM_ABE_AESS_CONTEXT_OFFSET,
149 .lostcontext_mask = OMAP4430_LOSTMEM_AESSMEM_MASK,
150 .flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
151 },
152 },
153 };
154
155 /* l4_cfg */
156 static struct omap_hwmod omap44xx_l4_cfg_hwmod = {
157 .name = "l4_cfg",
158 .class = &omap44xx_l4_hwmod_class,
159 .clkdm_name = "l4_cfg_clkdm",
160 .prcm = {
161 .omap4 = {
162 .clkctrl_offs = OMAP4_CM_L4CFG_L4_CFG_CLKCTRL_OFFSET,
163 .context_offs = OMAP4_RM_L4CFG_L4_CFG_CONTEXT_OFFSET,
164 },
165 },
166 };
167
168 /* l4_per */
169 static struct omap_hwmod omap44xx_l4_per_hwmod = {
170 .name = "l4_per",
171 .class = &omap44xx_l4_hwmod_class,
172 .clkdm_name = "l4_per_clkdm",
173 .prcm = {
174 .omap4 = {
175 .clkctrl_offs = OMAP4_CM_L4PER_L4PER_CLKCTRL_OFFSET,
176 .context_offs = OMAP4_RM_L4PER_L4_PER_CONTEXT_OFFSET,
177 },
178 },
179 };
180
181 /* l4_wkup */
182 static struct omap_hwmod omap44xx_l4_wkup_hwmod = {
183 .name = "l4_wkup",
184 .class = &omap44xx_l4_hwmod_class,
185 .clkdm_name = "l4_wkup_clkdm",
186 .prcm = {
187 .omap4 = {
188 .clkctrl_offs = OMAP4_CM_WKUP_L4WKUP_CLKCTRL_OFFSET,
189 .context_offs = OMAP4_RM_WKUP_L4WKUP_CONTEXT_OFFSET,
190 },
191 },
192 };
193
194 /*
195 * 'mpu_bus' class
196 * instance(s): mpu_private
197 */
198 static struct omap_hwmod_class omap44xx_mpu_bus_hwmod_class = {
199 .name = "mpu_bus",
200 };
201
202 /* mpu_private */
203 static struct omap_hwmod omap44xx_mpu_private_hwmod = {
204 .name = "mpu_private",
205 .class = &omap44xx_mpu_bus_hwmod_class,
206 .clkdm_name = "mpuss_clkdm",
207 .prcm = {
208 .omap4 = {
209 .flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
210 },
211 },
212 };
213
214 /*
215 * 'ocp_wp_noc' class
216 * instance(s): ocp_wp_noc
217 */
218 static struct omap_hwmod_class omap44xx_ocp_wp_noc_hwmod_class = {
219 .name = "ocp_wp_noc",
220 };
221
222 /* ocp_wp_noc */
223 static struct omap_hwmod omap44xx_ocp_wp_noc_hwmod = {
224 .name = "ocp_wp_noc",
225 .class = &omap44xx_ocp_wp_noc_hwmod_class,
226 .clkdm_name = "l3_instr_clkdm",
227 .prcm = {
228 .omap4 = {
229 .clkctrl_offs = OMAP4_CM_L3INSTR_OCP_WP1_CLKCTRL_OFFSET,
230 .context_offs = OMAP4_RM_L3INSTR_OCP_WP1_CONTEXT_OFFSET,
231 .modulemode = MODULEMODE_HWCTRL,
232 },
233 },
234 };
235
236 /*
237 * Modules omap_hwmod structures
238 *
239 * The following IPs are excluded for the moment because:
240 * - They do not need an explicit SW control using omap_hwmod API.
241 * - They still need to be validated with the driver
242 * properly adapted to omap_hwmod / omap_device
243 *
244 * usim
245 */
246
247 /*
248 * 'aess' class
249 * audio engine sub system
250 */
251
252 static struct omap_hwmod_class_sysconfig omap44xx_aess_sysc = {
253 .rev_offs = 0x0000,
254 .sysc_offs = 0x0010,
255 .sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE),
256 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
257 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART |
258 MSTANDBY_SMART_WKUP),
259 .sysc_fields = &omap_hwmod_sysc_type2,
260 };
261
262 static struct omap_hwmod_class omap44xx_aess_hwmod_class = {
263 .name = "aess",
264 .sysc = &omap44xx_aess_sysc,
265 .enable_preprogram = omap_hwmod_aess_preprogram,
266 };
267
268 /* aess */
269 static struct omap_hwmod omap44xx_aess_hwmod = {
270 .name = "aess",
271 .class = &omap44xx_aess_hwmod_class,
272 .clkdm_name = "abe_clkdm",
273 .main_clk = "aess_fclk",
274 .prcm = {
275 .omap4 = {
276 .clkctrl_offs = OMAP4_CM1_ABE_AESS_CLKCTRL_OFFSET,
277 .context_offs = OMAP4_RM_ABE_AESS_CONTEXT_OFFSET,
278 .lostcontext_mask = OMAP4430_LOSTCONTEXT_DFF_MASK,
279 .modulemode = MODULEMODE_SWCTRL,
280 },
281 },
282 };
283
284 /*
285 * 'c2c' class
286 * chip 2 chip interface used to plug the ape soc (omap) with an external modem
287 * soc
288 */
289
290 static struct omap_hwmod_class omap44xx_c2c_hwmod_class = {
291 .name = "c2c",
292 };
293
294 /* c2c */
295 static struct omap_hwmod omap44xx_c2c_hwmod = {
296 .name = "c2c",
297 .class = &omap44xx_c2c_hwmod_class,
298 .clkdm_name = "d2d_clkdm",
299 .prcm = {
300 .omap4 = {
301 .clkctrl_offs = OMAP4_CM_D2D_SAD2D_CLKCTRL_OFFSET,
302 .context_offs = OMAP4_RM_D2D_SAD2D_CONTEXT_OFFSET,
303 },
304 },
305 };
306
307 /*
308 * 'counter' class
309 * 32-bit ordinary counter, clocked by the falling edge of the 32 khz clock
310 */
311
312 static struct omap_hwmod_class_sysconfig omap44xx_counter_sysc = {
313 .rev_offs = 0x0000,
314 .sysc_offs = 0x0004,
315 .sysc_flags = SYSC_HAS_SIDLEMODE,
316 .idlemodes = (SIDLE_FORCE | SIDLE_NO),
317 .sysc_fields = &omap_hwmod_sysc_type1,
318 };
319
320 static struct omap_hwmod_class omap44xx_counter_hwmod_class = {
321 .name = "counter",
322 .sysc = &omap44xx_counter_sysc,
323 };
324
325 /* counter_32k */
326 static struct omap_hwmod omap44xx_counter_32k_hwmod = {
327 .name = "counter_32k",
328 .class = &omap44xx_counter_hwmod_class,
329 .clkdm_name = "l4_wkup_clkdm",
330 .flags = HWMOD_SWSUP_SIDLE,
331 .main_clk = "sys_32k_ck",
332 .prcm = {
333 .omap4 = {
334 .clkctrl_offs = OMAP4_CM_WKUP_SYNCTIMER_CLKCTRL_OFFSET,
335 .context_offs = OMAP4_RM_WKUP_SYNCTIMER_CONTEXT_OFFSET,
336 },
337 },
338 };
339
340 /*
341 * 'ctrl_module' class
342 * attila core control module + core pad control module + wkup pad control
343 * module + attila wkup control module
344 */
345
346 static struct omap_hwmod_class_sysconfig omap44xx_ctrl_module_sysc = {
347 .rev_offs = 0x0000,
348 .sysc_offs = 0x0010,
349 .sysc_flags = SYSC_HAS_SIDLEMODE,
350 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
351 SIDLE_SMART_WKUP),
352 .sysc_fields = &omap_hwmod_sysc_type2,
353 };
354
355 static struct omap_hwmod_class omap44xx_ctrl_module_hwmod_class = {
356 .name = "ctrl_module",
357 .sysc = &omap44xx_ctrl_module_sysc,
358 };
359
360 /* ctrl_module_core */
361 static struct omap_hwmod omap44xx_ctrl_module_core_hwmod = {
362 .name = "ctrl_module_core",
363 .class = &omap44xx_ctrl_module_hwmod_class,
364 .clkdm_name = "l4_cfg_clkdm",
365 .prcm = {
366 .omap4 = {
367 .flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
368 },
369 },
370 };
371
372 /* ctrl_module_pad_core */
373 static struct omap_hwmod omap44xx_ctrl_module_pad_core_hwmod = {
374 .name = "ctrl_module_pad_core",
375 .class = &omap44xx_ctrl_module_hwmod_class,
376 .clkdm_name = "l4_cfg_clkdm",
377 .prcm = {
378 .omap4 = {
379 .flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
380 },
381 },
382 };
383
384 /* ctrl_module_wkup */
385 static struct omap_hwmod omap44xx_ctrl_module_wkup_hwmod = {
386 .name = "ctrl_module_wkup",
387 .class = &omap44xx_ctrl_module_hwmod_class,
388 .clkdm_name = "l4_wkup_clkdm",
389 .prcm = {
390 .omap4 = {
391 .flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
392 },
393 },
394 };
395
396 /* ctrl_module_pad_wkup */
397 static struct omap_hwmod omap44xx_ctrl_module_pad_wkup_hwmod = {
398 .name = "ctrl_module_pad_wkup",
399 .class = &omap44xx_ctrl_module_hwmod_class,
400 .clkdm_name = "l4_wkup_clkdm",
401 .prcm = {
402 .omap4 = {
403 .flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
404 },
405 },
406 };
407
408 /*
409 * 'debugss' class
410 * debug and emulation sub system
411 */
412
413 static struct omap_hwmod_class omap44xx_debugss_hwmod_class = {
414 .name = "debugss",
415 };
416
417 /* debugss */
418 static struct omap_hwmod omap44xx_debugss_hwmod = {
419 .name = "debugss",
420 .class = &omap44xx_debugss_hwmod_class,
421 .clkdm_name = "emu_sys_clkdm",
422 .main_clk = "trace_clk_div_ck",
423 .prcm = {
424 .omap4 = {
425 .clkctrl_offs = OMAP4_CM_EMU_DEBUGSS_CLKCTRL_OFFSET,
426 .context_offs = OMAP4_RM_EMU_DEBUGSS_CONTEXT_OFFSET,
427 },
428 },
429 };
430
431 /*
432 * 'dma' class
433 * dma controller for data exchange between memory to memory (i.e. internal or
434 * external memory) and gp peripherals to memory or memory to gp peripherals
435 */
436
437 static struct omap_hwmod_class_sysconfig omap44xx_dma_sysc = {
438 .rev_offs = 0x0000,
439 .sysc_offs = 0x002c,
440 .syss_offs = 0x0028,
441 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
442 SYSC_HAS_EMUFREE | SYSC_HAS_MIDLEMODE |
443 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
444 SYSS_HAS_RESET_STATUS),
445 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
446 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
447 .sysc_fields = &omap_hwmod_sysc_type1,
448 };
449
450 static struct omap_hwmod_class omap44xx_dma_hwmod_class = {
451 .name = "dma",
452 .sysc = &omap44xx_dma_sysc,
453 };
454
455 /* dma dev_attr */
456 static struct omap_dma_dev_attr dma_dev_attr = {
457 .dev_caps = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY |
458 IS_CSSA_32 | IS_CDSA_32 | IS_RW_PRIORITY,
459 .lch_count = 32,
460 };
461
462 /* dma_system */
463 static struct omap_hwmod omap44xx_dma_system_hwmod = {
464 .name = "dma_system",
465 .class = &omap44xx_dma_hwmod_class,
466 .clkdm_name = "l3_dma_clkdm",
467 .main_clk = "l3_div_ck",
468 .prcm = {
469 .omap4 = {
470 .clkctrl_offs = OMAP4_CM_SDMA_SDMA_CLKCTRL_OFFSET,
471 .context_offs = OMAP4_RM_SDMA_SDMA_CONTEXT_OFFSET,
472 },
473 },
474 .dev_attr = &dma_dev_attr,
475 };
476
477 /*
478 * 'dmic' class
479 * digital microphone controller
480 */
481
482 static struct omap_hwmod_class_sysconfig omap44xx_dmic_sysc = {
483 .rev_offs = 0x0000,
484 .sysc_offs = 0x0010,
485 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
486 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
487 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
488 SIDLE_SMART_WKUP),
489 .sysc_fields = &omap_hwmod_sysc_type2,
490 };
491
492 static struct omap_hwmod_class omap44xx_dmic_hwmod_class = {
493 .name = "dmic",
494 .sysc = &omap44xx_dmic_sysc,
495 };
496
497 /* dmic */
498 static struct omap_hwmod omap44xx_dmic_hwmod = {
499 .name = "dmic",
500 .class = &omap44xx_dmic_hwmod_class,
501 .clkdm_name = "abe_clkdm",
502 .main_clk = "func_dmic_abe_gfclk",
503 .prcm = {
504 .omap4 = {
505 .clkctrl_offs = OMAP4_CM1_ABE_DMIC_CLKCTRL_OFFSET,
506 .context_offs = OMAP4_RM_ABE_DMIC_CONTEXT_OFFSET,
507 .modulemode = MODULEMODE_SWCTRL,
508 },
509 },
510 };
511
512 /*
513 * 'dsp' class
514 * dsp sub-system
515 */
516
517 static struct omap_hwmod_class omap44xx_dsp_hwmod_class = {
518 .name = "dsp",
519 };
520
521 /* dsp */
522 static struct omap_hwmod_rst_info omap44xx_dsp_resets[] = {
523 { .name = "dsp", .rst_shift = 0 },
524 };
525
526 static struct omap_hwmod omap44xx_dsp_hwmod = {
527 .name = "dsp",
528 .class = &omap44xx_dsp_hwmod_class,
529 .clkdm_name = "tesla_clkdm",
530 .rst_lines = omap44xx_dsp_resets,
531 .rst_lines_cnt = ARRAY_SIZE(omap44xx_dsp_resets),
532 .main_clk = "dpll_iva_m4x2_ck",
533 .prcm = {
534 .omap4 = {
535 .clkctrl_offs = OMAP4_CM_TESLA_TESLA_CLKCTRL_OFFSET,
536 .rstctrl_offs = OMAP4_RM_TESLA_RSTCTRL_OFFSET,
537 .context_offs = OMAP4_RM_TESLA_TESLA_CONTEXT_OFFSET,
538 .modulemode = MODULEMODE_HWCTRL,
539 },
540 },
541 };
542
543 /*
544 * 'dss' class
545 * display sub-system
546 */
547
548 static struct omap_hwmod_class_sysconfig omap44xx_dss_sysc = {
549 .rev_offs = 0x0000,
550 .syss_offs = 0x0014,
551 .sysc_flags = SYSS_HAS_RESET_STATUS,
552 };
553
554 static struct omap_hwmod_class omap44xx_dss_hwmod_class = {
555 .name = "dss",
556 .sysc = &omap44xx_dss_sysc,
557 .reset = omap_dss_reset,
558 };
559
560 /* dss */
561 static struct omap_hwmod_opt_clk dss_opt_clks[] = {
562 { .role = "sys_clk", .clk = "dss_sys_clk" },
563 { .role = "tv_clk", .clk = "dss_tv_clk" },
564 { .role = "hdmi_clk", .clk = "dss_48mhz_clk" },
565 };
566
567 static struct omap_hwmod omap44xx_dss_hwmod = {
568 .name = "dss_core",
569 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
570 .class = &omap44xx_dss_hwmod_class,
571 .clkdm_name = "l3_dss_clkdm",
572 .main_clk = "dss_dss_clk",
573 .prcm = {
574 .omap4 = {
575 .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
576 .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
577 .modulemode = MODULEMODE_SWCTRL,
578 },
579 },
580 .opt_clks = dss_opt_clks,
581 .opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
582 };
583
584 /*
585 * 'dispc' class
586 * display controller
587 */
588
589 static struct omap_hwmod_class_sysconfig omap44xx_dispc_sysc = {
590 .rev_offs = 0x0000,
591 .sysc_offs = 0x0010,
592 .syss_offs = 0x0014,
593 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
594 SYSC_HAS_ENAWAKEUP | SYSC_HAS_MIDLEMODE |
595 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
596 SYSS_HAS_RESET_STATUS),
597 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
598 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
599 .sysc_fields = &omap_hwmod_sysc_type1,
600 };
601
602 static struct omap_hwmod_class omap44xx_dispc_hwmod_class = {
603 .name = "dispc",
604 .sysc = &omap44xx_dispc_sysc,
605 };
606
607 /* dss_dispc */
608 static struct omap_dss_dispc_dev_attr omap44xx_dss_dispc_dev_attr = {
609 .manager_count = 3,
610 .has_framedonetv_irq = 1
611 };
612
613 static struct omap_hwmod omap44xx_dss_dispc_hwmod = {
614 .name = "dss_dispc",
615 .class = &omap44xx_dispc_hwmod_class,
616 .clkdm_name = "l3_dss_clkdm",
617 .main_clk = "dss_dss_clk",
618 .prcm = {
619 .omap4 = {
620 .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
621 .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
622 },
623 },
624 .dev_attr = &omap44xx_dss_dispc_dev_attr,
625 .parent_hwmod = &omap44xx_dss_hwmod,
626 };
627
628 /*
629 * 'dsi' class
630 * display serial interface controller
631 */
632
633 static struct omap_hwmod_class_sysconfig omap44xx_dsi_sysc = {
634 .rev_offs = 0x0000,
635 .sysc_offs = 0x0010,
636 .syss_offs = 0x0014,
637 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
638 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
639 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
640 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
641 .sysc_fields = &omap_hwmod_sysc_type1,
642 };
643
644 static struct omap_hwmod_class omap44xx_dsi_hwmod_class = {
645 .name = "dsi",
646 .sysc = &omap44xx_dsi_sysc,
647 };
648
649 /* dss_dsi1 */
650 static struct omap_hwmod_opt_clk dss_dsi1_opt_clks[] = {
651 { .role = "sys_clk", .clk = "dss_sys_clk" },
652 };
653
654 static struct omap_hwmod omap44xx_dss_dsi1_hwmod = {
655 .name = "dss_dsi1",
656 .class = &omap44xx_dsi_hwmod_class,
657 .clkdm_name = "l3_dss_clkdm",
658 .main_clk = "dss_dss_clk",
659 .prcm = {
660 .omap4 = {
661 .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
662 .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
663 },
664 },
665 .opt_clks = dss_dsi1_opt_clks,
666 .opt_clks_cnt = ARRAY_SIZE(dss_dsi1_opt_clks),
667 .parent_hwmod = &omap44xx_dss_hwmod,
668 };
669
670 /* dss_dsi2 */
671 static struct omap_hwmod_opt_clk dss_dsi2_opt_clks[] = {
672 { .role = "sys_clk", .clk = "dss_sys_clk" },
673 };
674
675 static struct omap_hwmod omap44xx_dss_dsi2_hwmod = {
676 .name = "dss_dsi2",
677 .class = &omap44xx_dsi_hwmod_class,
678 .clkdm_name = "l3_dss_clkdm",
679 .main_clk = "dss_dss_clk",
680 .prcm = {
681 .omap4 = {
682 .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
683 .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
684 },
685 },
686 .opt_clks = dss_dsi2_opt_clks,
687 .opt_clks_cnt = ARRAY_SIZE(dss_dsi2_opt_clks),
688 .parent_hwmod = &omap44xx_dss_hwmod,
689 };
690
691 /*
692 * 'hdmi' class
693 * hdmi controller
694 */
695
696 static struct omap_hwmod_class_sysconfig omap44xx_hdmi_sysc = {
697 .rev_offs = 0x0000,
698 .sysc_offs = 0x0010,
699 .sysc_flags = (SYSC_HAS_RESET_STATUS | SYSC_HAS_SIDLEMODE |
700 SYSC_HAS_SOFTRESET),
701 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
702 SIDLE_SMART_WKUP),
703 .sysc_fields = &omap_hwmod_sysc_type2,
704 };
705
706 static struct omap_hwmod_class omap44xx_hdmi_hwmod_class = {
707 .name = "hdmi",
708 .sysc = &omap44xx_hdmi_sysc,
709 };
710
711 /* dss_hdmi */
712 static struct omap_hwmod_opt_clk dss_hdmi_opt_clks[] = {
713 { .role = "sys_clk", .clk = "dss_sys_clk" },
714 { .role = "hdmi_clk", .clk = "dss_48mhz_clk" },
715 };
716
717 static struct omap_hwmod omap44xx_dss_hdmi_hwmod = {
718 .name = "dss_hdmi",
719 .class = &omap44xx_hdmi_hwmod_class,
720 .clkdm_name = "l3_dss_clkdm",
721 /*
722 * HDMI audio requires to use no-idle mode. Hence,
723 * set idle mode by software.
724 */
725 .flags = HWMOD_SWSUP_SIDLE | HWMOD_OPT_CLKS_NEEDED,
726 .main_clk = "dss_48mhz_clk",
727 .prcm = {
728 .omap4 = {
729 .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
730 .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
731 },
732 },
733 .opt_clks = dss_hdmi_opt_clks,
734 .opt_clks_cnt = ARRAY_SIZE(dss_hdmi_opt_clks),
735 .parent_hwmod = &omap44xx_dss_hwmod,
736 };
737
738 /*
739 * 'rfbi' class
740 * remote frame buffer interface
741 */
742
743 static struct omap_hwmod_class_sysconfig omap44xx_rfbi_sysc = {
744 .rev_offs = 0x0000,
745 .sysc_offs = 0x0010,
746 .syss_offs = 0x0014,
747 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_SIDLEMODE |
748 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
749 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
750 .sysc_fields = &omap_hwmod_sysc_type1,
751 };
752
753 static struct omap_hwmod_class omap44xx_rfbi_hwmod_class = {
754 .name = "rfbi",
755 .sysc = &omap44xx_rfbi_sysc,
756 };
757
758 /* dss_rfbi */
759 static struct omap_hwmod_opt_clk dss_rfbi_opt_clks[] = {
760 { .role = "ick", .clk = "l3_div_ck" },
761 };
762
763 static struct omap_hwmod omap44xx_dss_rfbi_hwmod = {
764 .name = "dss_rfbi",
765 .class = &omap44xx_rfbi_hwmod_class,
766 .clkdm_name = "l3_dss_clkdm",
767 .main_clk = "dss_dss_clk",
768 .prcm = {
769 .omap4 = {
770 .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
771 .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
772 },
773 },
774 .opt_clks = dss_rfbi_opt_clks,
775 .opt_clks_cnt = ARRAY_SIZE(dss_rfbi_opt_clks),
776 .parent_hwmod = &omap44xx_dss_hwmod,
777 };
778
779 /*
780 * 'venc' class
781 * video encoder
782 */
783
784 static struct omap_hwmod_class omap44xx_venc_hwmod_class = {
785 .name = "venc",
786 };
787
788 /* dss_venc */
789 static struct omap_hwmod_opt_clk dss_venc_opt_clks[] = {
790 { .role = "tv_clk", .clk = "dss_tv_clk" },
791 };
792
793 static struct omap_hwmod omap44xx_dss_venc_hwmod = {
794 .name = "dss_venc",
795 .class = &omap44xx_venc_hwmod_class,
796 .clkdm_name = "l3_dss_clkdm",
797 .main_clk = "dss_tv_clk",
798 .flags = HWMOD_OPT_CLKS_NEEDED,
799 .prcm = {
800 .omap4 = {
801 .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
802 .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
803 },
804 },
805 .parent_hwmod = &omap44xx_dss_hwmod,
806 .opt_clks = dss_venc_opt_clks,
807 .opt_clks_cnt = ARRAY_SIZE(dss_venc_opt_clks),
808 };
809
810 /* sha0 HIB2 (the 'P' (public) device) */
811 static struct omap_hwmod_class_sysconfig omap44xx_sha0_sysc = {
812 .rev_offs = 0x100,
813 .sysc_offs = 0x110,
814 .syss_offs = 0x114,
815 .sysc_flags = SYSS_HAS_RESET_STATUS,
816 };
817
818 static struct omap_hwmod_class omap44xx_sha0_hwmod_class = {
819 .name = "sham",
820 .sysc = &omap44xx_sha0_sysc,
821 };
822
823 struct omap_hwmod omap44xx_sha0_hwmod = {
824 .name = "sham",
825 .class = &omap44xx_sha0_hwmod_class,
826 .clkdm_name = "l4_secure_clkdm",
827 .main_clk = "l3_div_ck",
828 .prcm = {
829 .omap4 = {
830 .clkctrl_offs = OMAP4_CM_L4SEC_SHA2MD51_CLKCTRL_OFFSET,
831 .context_offs = OMAP4_RM_L4SEC_SHA2MD51_CONTEXT_OFFSET,
832 .modulemode = MODULEMODE_SWCTRL,
833 },
834 },
835 };
836
837 /*
838 * 'elm' class
839 * bch error location module
840 */
841
842 static struct omap_hwmod_class_sysconfig omap44xx_elm_sysc = {
843 .rev_offs = 0x0000,
844 .sysc_offs = 0x0010,
845 .syss_offs = 0x0014,
846 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
847 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
848 SYSS_HAS_RESET_STATUS),
849 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
850 .sysc_fields = &omap_hwmod_sysc_type1,
851 };
852
853 static struct omap_hwmod_class omap44xx_elm_hwmod_class = {
854 .name = "elm",
855 .sysc = &omap44xx_elm_sysc,
856 };
857
858 /* elm */
859 static struct omap_hwmod omap44xx_elm_hwmod = {
860 .name = "elm",
861 .class = &omap44xx_elm_hwmod_class,
862 .clkdm_name = "l4_per_clkdm",
863 .prcm = {
864 .omap4 = {
865 .clkctrl_offs = OMAP4_CM_L4PER_ELM_CLKCTRL_OFFSET,
866 .context_offs = OMAP4_RM_L4PER_ELM_CONTEXT_OFFSET,
867 },
868 },
869 };
870
871 /*
872 * 'emif' class
873 * external memory interface no1
874 */
875
876 static struct omap_hwmod_class_sysconfig omap44xx_emif_sysc = {
877 .rev_offs = 0x0000,
878 };
879
880 static struct omap_hwmod_class omap44xx_emif_hwmod_class = {
881 .name = "emif",
882 .sysc = &omap44xx_emif_sysc,
883 };
884
885 /* emif1 */
886 static struct omap_hwmod omap44xx_emif1_hwmod = {
887 .name = "emif1",
888 .class = &omap44xx_emif_hwmod_class,
889 .clkdm_name = "l3_emif_clkdm",
890 .flags = HWMOD_INIT_NO_IDLE,
891 .main_clk = "ddrphy_ck",
892 .prcm = {
893 .omap4 = {
894 .clkctrl_offs = OMAP4_CM_MEMIF_EMIF_1_CLKCTRL_OFFSET,
895 .context_offs = OMAP4_RM_MEMIF_EMIF_1_CONTEXT_OFFSET,
896 .modulemode = MODULEMODE_HWCTRL,
897 },
898 },
899 };
900
901 /* emif2 */
902 static struct omap_hwmod omap44xx_emif2_hwmod = {
903 .name = "emif2",
904 .class = &omap44xx_emif_hwmod_class,
905 .clkdm_name = "l3_emif_clkdm",
906 .flags = HWMOD_INIT_NO_IDLE,
907 .main_clk = "ddrphy_ck",
908 .prcm = {
909 .omap4 = {
910 .clkctrl_offs = OMAP4_CM_MEMIF_EMIF_2_CLKCTRL_OFFSET,
911 .context_offs = OMAP4_RM_MEMIF_EMIF_2_CONTEXT_OFFSET,
912 .modulemode = MODULEMODE_HWCTRL,
913 },
914 },
915 };
916
917 /*
918 Crypto modules AES0/1 belong to:
919 PD_L4_PER power domain
920 CD_L4_SEC clock domain
921 On the L3, the AES modules are mapped to
922 L3_CLK2: Peripherals and multimedia sub clock domain
923 */
924 static struct omap_hwmod_class_sysconfig omap44xx_aes_sysc = {
925 .rev_offs = 0x80,
926 .sysc_offs = 0x84,
927 .syss_offs = 0x88,
928 .sysc_flags = SYSS_HAS_RESET_STATUS,
929 };
930
931 static struct omap_hwmod_class omap44xx_aes_hwmod_class = {
932 .name = "aes",
933 .sysc = &omap44xx_aes_sysc,
934 };
935
936 static struct omap_hwmod omap44xx_aes1_hwmod = {
937 .name = "aes1",
938 .class = &omap44xx_aes_hwmod_class,
939 .clkdm_name = "l4_secure_clkdm",
940 .main_clk = "l3_div_ck",
941 .prcm = {
942 .omap4 = {
943 .context_offs = OMAP4_RM_L4SEC_AES1_CONTEXT_OFFSET,
944 .clkctrl_offs = OMAP4_CM_L4SEC_AES1_CLKCTRL_OFFSET,
945 .modulemode = MODULEMODE_SWCTRL,
946 },
947 },
948 };
949
950 static struct omap_hwmod_ocp_if omap44xx_l3_main_2__aes1 = {
951 .master = &omap44xx_l4_per_hwmod,
952 .slave = &omap44xx_aes1_hwmod,
953 .clk = "l3_div_ck",
954 .user = OCP_USER_MPU | OCP_USER_SDMA,
955 };
956
957 static struct omap_hwmod omap44xx_aes2_hwmod = {
958 .name = "aes2",
959 .class = &omap44xx_aes_hwmod_class,
960 .clkdm_name = "l4_secure_clkdm",
961 .main_clk = "l3_div_ck",
962 .prcm = {
963 .omap4 = {
964 .context_offs = OMAP4_RM_L4SEC_AES2_CONTEXT_OFFSET,
965 .clkctrl_offs = OMAP4_CM_L4SEC_AES2_CLKCTRL_OFFSET,
966 .modulemode = MODULEMODE_SWCTRL,
967 },
968 },
969 };
970
971 static struct omap_hwmod_ocp_if omap44xx_l3_main_2__aes2 = {
972 .master = &omap44xx_l4_per_hwmod,
973 .slave = &omap44xx_aes2_hwmod,
974 .clk = "l3_div_ck",
975 .user = OCP_USER_MPU | OCP_USER_SDMA,
976 };
977
978 /*
979 * 'des' class for DES3DES module
980 */
981 static struct omap_hwmod_class_sysconfig omap44xx_des_sysc = {
982 .rev_offs = 0x30,
983 .sysc_offs = 0x34,
984 .syss_offs = 0x38,
985 .sysc_flags = SYSS_HAS_RESET_STATUS,
986 };
987
988 static struct omap_hwmod_class omap44xx_des_hwmod_class = {
989 .name = "des",
990 .sysc = &omap44xx_des_sysc,
991 };
992
993 static struct omap_hwmod omap44xx_des_hwmod = {
994 .name = "des",
995 .class = &omap44xx_des_hwmod_class,
996 .clkdm_name = "l4_secure_clkdm",
997 .main_clk = "l3_div_ck",
998 .prcm = {
999 .omap4 = {
1000 .context_offs = OMAP4_RM_L4SEC_DES3DES_CONTEXT_OFFSET,
1001 .clkctrl_offs = OMAP4_CM_L4SEC_DES3DES_CLKCTRL_OFFSET,
1002 .modulemode = MODULEMODE_SWCTRL,
1003 },
1004 },
1005 };
1006
1007 struct omap_hwmod_ocp_if omap44xx_l3_main_2__des = {
1008 .master = &omap44xx_l3_main_2_hwmod,
1009 .slave = &omap44xx_des_hwmod,
1010 .clk = "l3_div_ck",
1011 .user = OCP_USER_MPU | OCP_USER_SDMA,
1012 };
1013
1014 /*
1015 * 'fdif' class
1016 * face detection hw accelerator module
1017 */
1018
1019 static struct omap_hwmod_class_sysconfig omap44xx_fdif_sysc = {
1020 .rev_offs = 0x0000,
1021 .sysc_offs = 0x0010,
1022 /*
1023 * FDIF needs 100 OCP clk cycles delay after a softreset before
1024 * accessing sysconfig again.
1025 * The lowest frequency at the moment for L3 bus is 100 MHz, so
1026 * 1usec delay is needed. Add an x2 margin to be safe (2 usecs).
1027 *
1028 * TODO: Indicate errata when available.
1029 */
1030 .srst_udelay = 2,
1031 .sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_RESET_STATUS |
1032 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
1033 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1034 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
1035 .sysc_fields = &omap_hwmod_sysc_type2,
1036 };
1037
1038 static struct omap_hwmod_class omap44xx_fdif_hwmod_class = {
1039 .name = "fdif",
1040 .sysc = &omap44xx_fdif_sysc,
1041 };
1042
1043 /* fdif */
1044 static struct omap_hwmod omap44xx_fdif_hwmod = {
1045 .name = "fdif",
1046 .class = &omap44xx_fdif_hwmod_class,
1047 .clkdm_name = "iss_clkdm",
1048 .main_clk = "fdif_fck",
1049 .prcm = {
1050 .omap4 = {
1051 .clkctrl_offs = OMAP4_CM_CAM_FDIF_CLKCTRL_OFFSET,
1052 .context_offs = OMAP4_RM_CAM_FDIF_CONTEXT_OFFSET,
1053 .modulemode = MODULEMODE_SWCTRL,
1054 },
1055 },
1056 };
1057
1058 /*
1059 * 'gpio' class
1060 * general purpose io module
1061 */
1062
1063 static struct omap_hwmod_class_sysconfig omap44xx_gpio_sysc = {
1064 .rev_offs = 0x0000,
1065 .sysc_offs = 0x0010,
1066 .syss_offs = 0x0114,
1067 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_ENAWAKEUP |
1068 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
1069 SYSS_HAS_RESET_STATUS),
1070 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1071 SIDLE_SMART_WKUP),
1072 .sysc_fields = &omap_hwmod_sysc_type1,
1073 };
1074
1075 static struct omap_hwmod_class omap44xx_gpio_hwmod_class = {
1076 .name = "gpio",
1077 .sysc = &omap44xx_gpio_sysc,
1078 .rev = 2,
1079 };
1080
1081 /* gpio1 */
1082 static struct omap_hwmod_opt_clk gpio1_opt_clks[] = {
1083 { .role = "dbclk", .clk = "gpio1_dbclk" },
1084 };
1085
1086 static struct omap_hwmod omap44xx_gpio1_hwmod = {
1087 .name = "gpio1",
1088 .class = &omap44xx_gpio_hwmod_class,
1089 .clkdm_name = "l4_wkup_clkdm",
1090 .main_clk = "l4_wkup_clk_mux_ck",
1091 .prcm = {
1092 .omap4 = {
1093 .clkctrl_offs = OMAP4_CM_WKUP_GPIO1_CLKCTRL_OFFSET,
1094 .context_offs = OMAP4_RM_WKUP_GPIO1_CONTEXT_OFFSET,
1095 .modulemode = MODULEMODE_HWCTRL,
1096 },
1097 },
1098 .opt_clks = gpio1_opt_clks,
1099 .opt_clks_cnt = ARRAY_SIZE(gpio1_opt_clks),
1100 };
1101
1102 /* gpio2 */
1103 static struct omap_hwmod_opt_clk gpio2_opt_clks[] = {
1104 { .role = "dbclk", .clk = "gpio2_dbclk" },
1105 };
1106
1107 static struct omap_hwmod omap44xx_gpio2_hwmod = {
1108 .name = "gpio2",
1109 .class = &omap44xx_gpio_hwmod_class,
1110 .clkdm_name = "l4_per_clkdm",
1111 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
1112 .main_clk = "l4_div_ck",
1113 .prcm = {
1114 .omap4 = {
1115 .clkctrl_offs = OMAP4_CM_L4PER_GPIO2_CLKCTRL_OFFSET,
1116 .context_offs = OMAP4_RM_L4PER_GPIO2_CONTEXT_OFFSET,
1117 .modulemode = MODULEMODE_HWCTRL,
1118 },
1119 },
1120 .opt_clks = gpio2_opt_clks,
1121 .opt_clks_cnt = ARRAY_SIZE(gpio2_opt_clks),
1122 };
1123
1124 /* gpio3 */
1125 static struct omap_hwmod_opt_clk gpio3_opt_clks[] = {
1126 { .role = "dbclk", .clk = "gpio3_dbclk" },
1127 };
1128
1129 static struct omap_hwmod omap44xx_gpio3_hwmod = {
1130 .name = "gpio3",
1131 .class = &omap44xx_gpio_hwmod_class,
1132 .clkdm_name = "l4_per_clkdm",
1133 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
1134 .main_clk = "l4_div_ck",
1135 .prcm = {
1136 .omap4 = {
1137 .clkctrl_offs = OMAP4_CM_L4PER_GPIO3_CLKCTRL_OFFSET,
1138 .context_offs = OMAP4_RM_L4PER_GPIO3_CONTEXT_OFFSET,
1139 .modulemode = MODULEMODE_HWCTRL,
1140 },
1141 },
1142 .opt_clks = gpio3_opt_clks,
1143 .opt_clks_cnt = ARRAY_SIZE(gpio3_opt_clks),
1144 };
1145
1146 /* gpio4 */
1147 static struct omap_hwmod_opt_clk gpio4_opt_clks[] = {
1148 { .role = "dbclk", .clk = "gpio4_dbclk" },
1149 };
1150
1151 static struct omap_hwmod omap44xx_gpio4_hwmod = {
1152 .name = "gpio4",
1153 .class = &omap44xx_gpio_hwmod_class,
1154 .clkdm_name = "l4_per_clkdm",
1155 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
1156 .main_clk = "l4_div_ck",
1157 .prcm = {
1158 .omap4 = {
1159 .clkctrl_offs = OMAP4_CM_L4PER_GPIO4_CLKCTRL_OFFSET,
1160 .context_offs = OMAP4_RM_L4PER_GPIO4_CONTEXT_OFFSET,
1161 .modulemode = MODULEMODE_HWCTRL,
1162 },
1163 },
1164 .opt_clks = gpio4_opt_clks,
1165 .opt_clks_cnt = ARRAY_SIZE(gpio4_opt_clks),
1166 };
1167
1168 /* gpio5 */
1169 static struct omap_hwmod_opt_clk gpio5_opt_clks[] = {
1170 { .role = "dbclk", .clk = "gpio5_dbclk" },
1171 };
1172
1173 static struct omap_hwmod omap44xx_gpio5_hwmod = {
1174 .name = "gpio5",
1175 .class = &omap44xx_gpio_hwmod_class,
1176 .clkdm_name = "l4_per_clkdm",
1177 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
1178 .main_clk = "l4_div_ck",
1179 .prcm = {
1180 .omap4 = {
1181 .clkctrl_offs = OMAP4_CM_L4PER_GPIO5_CLKCTRL_OFFSET,
1182 .context_offs = OMAP4_RM_L4PER_GPIO5_CONTEXT_OFFSET,
1183 .modulemode = MODULEMODE_HWCTRL,
1184 },
1185 },
1186 .opt_clks = gpio5_opt_clks,
1187 .opt_clks_cnt = ARRAY_SIZE(gpio5_opt_clks),
1188 };
1189
1190 /* gpio6 */
1191 static struct omap_hwmod_opt_clk gpio6_opt_clks[] = {
1192 { .role = "dbclk", .clk = "gpio6_dbclk" },
1193 };
1194
1195 static struct omap_hwmod omap44xx_gpio6_hwmod = {
1196 .name = "gpio6",
1197 .class = &omap44xx_gpio_hwmod_class,
1198 .clkdm_name = "l4_per_clkdm",
1199 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
1200 .main_clk = "l4_div_ck",
1201 .prcm = {
1202 .omap4 = {
1203 .clkctrl_offs = OMAP4_CM_L4PER_GPIO6_CLKCTRL_OFFSET,
1204 .context_offs = OMAP4_RM_L4PER_GPIO6_CONTEXT_OFFSET,
1205 .modulemode = MODULEMODE_HWCTRL,
1206 },
1207 },
1208 .opt_clks = gpio6_opt_clks,
1209 .opt_clks_cnt = ARRAY_SIZE(gpio6_opt_clks),
1210 };
1211
1212 /*
1213 * 'gpmc' class
1214 * general purpose memory controller
1215 */
1216
1217 static struct omap_hwmod_class_sysconfig omap44xx_gpmc_sysc = {
1218 .rev_offs = 0x0000,
1219 .sysc_offs = 0x0010,
1220 .syss_offs = 0x0014,
1221 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_SIDLEMODE |
1222 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
1223 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1224 .sysc_fields = &omap_hwmod_sysc_type1,
1225 };
1226
1227 static struct omap_hwmod_class omap44xx_gpmc_hwmod_class = {
1228 .name = "gpmc",
1229 .sysc = &omap44xx_gpmc_sysc,
1230 };
1231
1232 /* gpmc */
1233 static struct omap_hwmod omap44xx_gpmc_hwmod = {
1234 .name = "gpmc",
1235 .class = &omap44xx_gpmc_hwmod_class,
1236 .clkdm_name = "l3_2_clkdm",
1237 /* Skip reset for CONFIG_OMAP_GPMC_DEBUG for bootloader timings */
1238 .flags = DEBUG_OMAP_GPMC_HWMOD_FLAGS,
1239 .prcm = {
1240 .omap4 = {
1241 .clkctrl_offs = OMAP4_CM_L3_2_GPMC_CLKCTRL_OFFSET,
1242 .context_offs = OMAP4_RM_L3_2_GPMC_CONTEXT_OFFSET,
1243 .modulemode = MODULEMODE_HWCTRL,
1244 },
1245 },
1246 };
1247
1248 /*
1249 * 'gpu' class
1250 * 2d/3d graphics accelerator
1251 */
1252
1253 static struct omap_hwmod_class_sysconfig omap44xx_gpu_sysc = {
1254 .rev_offs = 0x1fc00,
1255 .sysc_offs = 0x1fc10,
1256 .sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE),
1257 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1258 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
1259 MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
1260 .sysc_fields = &omap_hwmod_sysc_type2,
1261 };
1262
1263 static struct omap_hwmod_class omap44xx_gpu_hwmod_class = {
1264 .name = "gpu",
1265 .sysc = &omap44xx_gpu_sysc,
1266 };
1267
1268 /* gpu */
1269 static struct omap_hwmod omap44xx_gpu_hwmod = {
1270 .name = "gpu",
1271 .class = &omap44xx_gpu_hwmod_class,
1272 .clkdm_name = "l3_gfx_clkdm",
1273 .main_clk = "sgx_clk_mux",
1274 .prcm = {
1275 .omap4 = {
1276 .clkctrl_offs = OMAP4_CM_GFX_GFX_CLKCTRL_OFFSET,
1277 .context_offs = OMAP4_RM_GFX_GFX_CONTEXT_OFFSET,
1278 .modulemode = MODULEMODE_SWCTRL,
1279 },
1280 },
1281 };
1282
1283 /*
1284 * 'hdq1w' class
1285 * hdq / 1-wire serial interface controller
1286 */
1287
1288 static struct omap_hwmod_class_sysconfig omap44xx_hdq1w_sysc = {
1289 .rev_offs = 0x0000,
1290 .sysc_offs = 0x0014,
1291 .syss_offs = 0x0018,
1292 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_SOFTRESET |
1293 SYSS_HAS_RESET_STATUS),
1294 .sysc_fields = &omap_hwmod_sysc_type1,
1295 };
1296
1297 static struct omap_hwmod_class omap44xx_hdq1w_hwmod_class = {
1298 .name = "hdq1w",
1299 .sysc = &omap44xx_hdq1w_sysc,
1300 };
1301
1302 /* hdq1w */
1303 static struct omap_hwmod omap44xx_hdq1w_hwmod = {
1304 .name = "hdq1w",
1305 .class = &omap44xx_hdq1w_hwmod_class,
1306 .clkdm_name = "l4_per_clkdm",
1307 .flags = HWMOD_INIT_NO_RESET, /* XXX temporary */
1308 .main_clk = "func_12m_fclk",
1309 .prcm = {
1310 .omap4 = {
1311 .clkctrl_offs = OMAP4_CM_L4PER_HDQ1W_CLKCTRL_OFFSET,
1312 .context_offs = OMAP4_RM_L4PER_HDQ1W_CONTEXT_OFFSET,
1313 .modulemode = MODULEMODE_SWCTRL,
1314 },
1315 },
1316 };
1317
1318 /*
1319 * 'hsi' class
1320 * mipi high-speed synchronous serial interface (multichannel and full-duplex
1321 * serial if)
1322 */
1323
1324 static struct omap_hwmod_class_sysconfig omap44xx_hsi_sysc = {
1325 .rev_offs = 0x0000,
1326 .sysc_offs = 0x0010,
1327 .syss_offs = 0x0014,
1328 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_EMUFREE |
1329 SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE |
1330 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
1331 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1332 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
1333 MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
1334 .sysc_fields = &omap_hwmod_sysc_type1,
1335 };
1336
1337 static struct omap_hwmod_class omap44xx_hsi_hwmod_class = {
1338 .name = "hsi",
1339 .sysc = &omap44xx_hsi_sysc,
1340 };
1341
1342 /* hsi */
1343 static struct omap_hwmod omap44xx_hsi_hwmod = {
1344 .name = "hsi",
1345 .class = &omap44xx_hsi_hwmod_class,
1346 .clkdm_name = "l3_init_clkdm",
1347 .main_clk = "hsi_fck",
1348 .prcm = {
1349 .omap4 = {
1350 .clkctrl_offs = OMAP4_CM_L3INIT_HSI_CLKCTRL_OFFSET,
1351 .context_offs = OMAP4_RM_L3INIT_HSI_CONTEXT_OFFSET,
1352 .modulemode = MODULEMODE_HWCTRL,
1353 },
1354 },
1355 };
1356
1357 /*
1358 * 'i2c' class
1359 * multimaster high-speed i2c controller
1360 */
1361
1362 static struct omap_hwmod_class_sysconfig omap44xx_i2c_sysc = {
1363 .rev_offs = 0,
1364 .sysc_offs = 0x0010,
1365 .syss_offs = 0x0090,
1366 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
1367 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
1368 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
1369 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1370 SIDLE_SMART_WKUP),
1371 .sysc_fields = &omap_hwmod_sysc_type1,
1372 };
1373
1374 static struct omap_hwmod_class omap44xx_i2c_hwmod_class = {
1375 .name = "i2c",
1376 .sysc = &omap44xx_i2c_sysc,
1377 .rev = OMAP_I2C_IP_VERSION_2,
1378 .reset = &omap_i2c_reset,
1379 };
1380
1381 /* i2c1 */
1382 static struct omap_hwmod omap44xx_i2c1_hwmod = {
1383 .name = "i2c1",
1384 .class = &omap44xx_i2c_hwmod_class,
1385 .clkdm_name = "l4_per_clkdm",
1386 .flags = HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
1387 .main_clk = "func_96m_fclk",
1388 .prcm = {
1389 .omap4 = {
1390 .clkctrl_offs = OMAP4_CM_L4PER_I2C1_CLKCTRL_OFFSET,
1391 .context_offs = OMAP4_RM_L4PER_I2C1_CONTEXT_OFFSET,
1392 .modulemode = MODULEMODE_SWCTRL,
1393 },
1394 },
1395 };
1396
1397 /* i2c2 */
1398 static struct omap_hwmod omap44xx_i2c2_hwmod = {
1399 .name = "i2c2",
1400 .class = &omap44xx_i2c_hwmod_class,
1401 .clkdm_name = "l4_per_clkdm",
1402 .flags = HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
1403 .main_clk = "func_96m_fclk",
1404 .prcm = {
1405 .omap4 = {
1406 .clkctrl_offs = OMAP4_CM_L4PER_I2C2_CLKCTRL_OFFSET,
1407 .context_offs = OMAP4_RM_L4PER_I2C2_CONTEXT_OFFSET,
1408 .modulemode = MODULEMODE_SWCTRL,
1409 },
1410 },
1411 };
1412
1413 /* i2c3 */
1414 static struct omap_hwmod omap44xx_i2c3_hwmod = {
1415 .name = "i2c3",
1416 .class = &omap44xx_i2c_hwmod_class,
1417 .clkdm_name = "l4_per_clkdm",
1418 .flags = HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
1419 .main_clk = "func_96m_fclk",
1420 .prcm = {
1421 .omap4 = {
1422 .clkctrl_offs = OMAP4_CM_L4PER_I2C3_CLKCTRL_OFFSET,
1423 .context_offs = OMAP4_RM_L4PER_I2C3_CONTEXT_OFFSET,
1424 .modulemode = MODULEMODE_SWCTRL,
1425 },
1426 },
1427 };
1428
1429 /* i2c4 */
1430 static struct omap_hwmod omap44xx_i2c4_hwmod = {
1431 .name = "i2c4",
1432 .class = &omap44xx_i2c_hwmod_class,
1433 .clkdm_name = "l4_per_clkdm",
1434 .flags = HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
1435 .main_clk = "func_96m_fclk",
1436 .prcm = {
1437 .omap4 = {
1438 .clkctrl_offs = OMAP4_CM_L4PER_I2C4_CLKCTRL_OFFSET,
1439 .context_offs = OMAP4_RM_L4PER_I2C4_CONTEXT_OFFSET,
1440 .modulemode = MODULEMODE_SWCTRL,
1441 },
1442 },
1443 };
1444
1445 /*
1446 * 'ipu' class
1447 * imaging processor unit
1448 */
1449
1450 static struct omap_hwmod_class omap44xx_ipu_hwmod_class = {
1451 .name = "ipu",
1452 };
1453
1454 /* ipu */
1455 static struct omap_hwmod_rst_info omap44xx_ipu_resets[] = {
1456 { .name = "cpu0", .rst_shift = 0 },
1457 { .name = "cpu1", .rst_shift = 1 },
1458 };
1459
1460 static struct omap_hwmod omap44xx_ipu_hwmod = {
1461 .name = "ipu",
1462 .class = &omap44xx_ipu_hwmod_class,
1463 .clkdm_name = "ducati_clkdm",
1464 .rst_lines = omap44xx_ipu_resets,
1465 .rst_lines_cnt = ARRAY_SIZE(omap44xx_ipu_resets),
1466 .main_clk = "ducati_clk_mux_ck",
1467 .prcm = {
1468 .omap4 = {
1469 .clkctrl_offs = OMAP4_CM_DUCATI_DUCATI_CLKCTRL_OFFSET,
1470 .rstctrl_offs = OMAP4_RM_DUCATI_RSTCTRL_OFFSET,
1471 .context_offs = OMAP4_RM_DUCATI_DUCATI_CONTEXT_OFFSET,
1472 .modulemode = MODULEMODE_HWCTRL,
1473 },
1474 },
1475 };
1476
1477 /*
1478 * 'iss' class
1479 * external images sensor pixel data processor
1480 */
1481
1482 static struct omap_hwmod_class_sysconfig omap44xx_iss_sysc = {
1483 .rev_offs = 0x0000,
1484 .sysc_offs = 0x0010,
1485 /*
1486 * ISS needs 100 OCP clk cycles delay after a softreset before
1487 * accessing sysconfig again.
1488 * The lowest frequency at the moment for L3 bus is 100 MHz, so
1489 * 1usec delay is needed. Add an x2 margin to be safe (2 usecs).
1490 *
1491 * TODO: Indicate errata when available.
1492 */
1493 .srst_udelay = 2,
1494 .sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_RESET_STATUS |
1495 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
1496 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1497 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
1498 MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
1499 .sysc_fields = &omap_hwmod_sysc_type2,
1500 };
1501
1502 static struct omap_hwmod_class omap44xx_iss_hwmod_class = {
1503 .name = "iss",
1504 .sysc = &omap44xx_iss_sysc,
1505 };
1506
1507 /* iss */
1508 static struct omap_hwmod_opt_clk iss_opt_clks[] = {
1509 { .role = "ctrlclk", .clk = "iss_ctrlclk" },
1510 };
1511
1512 static struct omap_hwmod omap44xx_iss_hwmod = {
1513 .name = "iss",
1514 .class = &omap44xx_iss_hwmod_class,
1515 .clkdm_name = "iss_clkdm",
1516 .main_clk = "ducati_clk_mux_ck",
1517 .prcm = {
1518 .omap4 = {
1519 .clkctrl_offs = OMAP4_CM_CAM_ISS_CLKCTRL_OFFSET,
1520 .context_offs = OMAP4_RM_CAM_ISS_CONTEXT_OFFSET,
1521 .modulemode = MODULEMODE_SWCTRL,
1522 },
1523 },
1524 .opt_clks = iss_opt_clks,
1525 .opt_clks_cnt = ARRAY_SIZE(iss_opt_clks),
1526 };
1527
1528 /*
1529 * 'iva' class
1530 * multi-standard video encoder/decoder hardware accelerator
1531 */
1532
1533 static struct omap_hwmod_class omap44xx_iva_hwmod_class = {
1534 .name = "iva",
1535 };
1536
1537 /* iva */
1538 static struct omap_hwmod_rst_info omap44xx_iva_resets[] = {
1539 { .name = "seq0", .rst_shift = 0 },
1540 { .name = "seq1", .rst_shift = 1 },
1541 { .name = "logic", .rst_shift = 2 },
1542 };
1543
1544 static struct omap_hwmod omap44xx_iva_hwmod = {
1545 .name = "iva",
1546 .class = &omap44xx_iva_hwmod_class,
1547 .clkdm_name = "ivahd_clkdm",
1548 .rst_lines = omap44xx_iva_resets,
1549 .rst_lines_cnt = ARRAY_SIZE(omap44xx_iva_resets),
1550 .main_clk = "dpll_iva_m5x2_ck",
1551 .prcm = {
1552 .omap4 = {
1553 .clkctrl_offs = OMAP4_CM_IVAHD_IVAHD_CLKCTRL_OFFSET,
1554 .rstctrl_offs = OMAP4_RM_IVAHD_RSTCTRL_OFFSET,
1555 .context_offs = OMAP4_RM_IVAHD_IVAHD_CONTEXT_OFFSET,
1556 .modulemode = MODULEMODE_HWCTRL,
1557 },
1558 },
1559 };
1560
1561 /*
1562 * 'kbd' class
1563 * keyboard controller
1564 */
1565
1566 static struct omap_hwmod_class_sysconfig omap44xx_kbd_sysc = {
1567 .rev_offs = 0x0000,
1568 .sysc_offs = 0x0010,
1569 .syss_offs = 0x0014,
1570 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
1571 SYSC_HAS_EMUFREE | SYSC_HAS_ENAWAKEUP |
1572 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
1573 SYSS_HAS_RESET_STATUS),
1574 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1575 .sysc_fields = &omap_hwmod_sysc_type1,
1576 };
1577
1578 static struct omap_hwmod_class omap44xx_kbd_hwmod_class = {
1579 .name = "kbd",
1580 .sysc = &omap44xx_kbd_sysc,
1581 };
1582
1583 /* kbd */
1584 static struct omap_hwmod omap44xx_kbd_hwmod = {
1585 .name = "kbd",
1586 .class = &omap44xx_kbd_hwmod_class,
1587 .clkdm_name = "l4_wkup_clkdm",
1588 .main_clk = "sys_32k_ck",
1589 .prcm = {
1590 .omap4 = {
1591 .clkctrl_offs = OMAP4_CM_WKUP_KEYBOARD_CLKCTRL_OFFSET,
1592 .context_offs = OMAP4_RM_WKUP_KEYBOARD_CONTEXT_OFFSET,
1593 .modulemode = MODULEMODE_SWCTRL,
1594 },
1595 },
1596 };
1597
1598 /*
1599 * 'mailbox' class
1600 * mailbox module allowing communication between the on-chip processors using a
1601 * queued mailbox-interrupt mechanism.
1602 */
1603
1604 static struct omap_hwmod_class_sysconfig omap44xx_mailbox_sysc = {
1605 .rev_offs = 0x0000,
1606 .sysc_offs = 0x0010,
1607 .sysc_flags = (SYSC_HAS_RESET_STATUS | SYSC_HAS_SIDLEMODE |
1608 SYSC_HAS_SOFTRESET),
1609 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1610 .sysc_fields = &omap_hwmod_sysc_type2,
1611 };
1612
1613 static struct omap_hwmod_class omap44xx_mailbox_hwmod_class = {
1614 .name = "mailbox",
1615 .sysc = &omap44xx_mailbox_sysc,
1616 };
1617
1618 /* mailbox */
1619 static struct omap_hwmod omap44xx_mailbox_hwmod = {
1620 .name = "mailbox",
1621 .class = &omap44xx_mailbox_hwmod_class,
1622 .clkdm_name = "l4_cfg_clkdm",
1623 .prcm = {
1624 .omap4 = {
1625 .clkctrl_offs = OMAP4_CM_L4CFG_MAILBOX_CLKCTRL_OFFSET,
1626 .context_offs = OMAP4_RM_L4CFG_MAILBOX_CONTEXT_OFFSET,
1627 },
1628 },
1629 };
1630
1631 /*
1632 * 'mcasp' class
1633 * multi-channel audio serial port controller
1634 */
1635
1636 /* The IP is not compliant to type1 / type2 scheme */
1637 static struct omap_hwmod_class_sysconfig omap44xx_mcasp_sysc = {
1638 .rev_offs = 0,
1639 .sysc_offs = 0x0004,
1640 .sysc_flags = SYSC_HAS_SIDLEMODE,
1641 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1642 SIDLE_SMART_WKUP),
1643 .sysc_fields = &omap_hwmod_sysc_type_mcasp,
1644 };
1645
1646 static struct omap_hwmod_class omap44xx_mcasp_hwmod_class = {
1647 .name = "mcasp",
1648 .sysc = &omap44xx_mcasp_sysc,
1649 };
1650
1651 /* mcasp */
1652 static struct omap_hwmod omap44xx_mcasp_hwmod = {
1653 .name = "mcasp",
1654 .class = &omap44xx_mcasp_hwmod_class,
1655 .clkdm_name = "abe_clkdm",
1656 .main_clk = "func_mcasp_abe_gfclk",
1657 .prcm = {
1658 .omap4 = {
1659 .clkctrl_offs = OMAP4_CM1_ABE_MCASP_CLKCTRL_OFFSET,
1660 .context_offs = OMAP4_RM_ABE_MCASP_CONTEXT_OFFSET,
1661 .modulemode = MODULEMODE_SWCTRL,
1662 },
1663 },
1664 };
1665
1666 /*
1667 * 'mcbsp' class
1668 * multi channel buffered serial port controller
1669 */
1670
1671 static struct omap_hwmod_class_sysconfig omap44xx_mcbsp_sysc = {
1672 .rev_offs = -ENODEV,
1673 .sysc_offs = 0x008c,
1674 .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_ENAWAKEUP |
1675 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
1676 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1677 .sysc_fields = &omap_hwmod_sysc_type1,
1678 };
1679
1680 static struct omap_hwmod_class omap44xx_mcbsp_hwmod_class = {
1681 .name = "mcbsp",
1682 .sysc = &omap44xx_mcbsp_sysc,
1683 };
1684
1685 /* mcbsp1 */
1686 static struct omap_hwmod_opt_clk mcbsp1_opt_clks[] = {
1687 { .role = "pad_fck", .clk = "pad_clks_ck" },
1688 { .role = "prcm_fck", .clk = "mcbsp1_sync_mux_ck" },
1689 };
1690
1691 static struct omap_hwmod omap44xx_mcbsp1_hwmod = {
1692 .name = "mcbsp1",
1693 .class = &omap44xx_mcbsp_hwmod_class,
1694 .clkdm_name = "abe_clkdm",
1695 .main_clk = "func_mcbsp1_gfclk",
1696 .prcm = {
1697 .omap4 = {
1698 .clkctrl_offs = OMAP4_CM1_ABE_MCBSP1_CLKCTRL_OFFSET,
1699 .context_offs = OMAP4_RM_ABE_MCBSP1_CONTEXT_OFFSET,
1700 .modulemode = MODULEMODE_SWCTRL,
1701 },
1702 },
1703 .opt_clks = mcbsp1_opt_clks,
1704 .opt_clks_cnt = ARRAY_SIZE(mcbsp1_opt_clks),
1705 };
1706
1707 /* mcbsp2 */
1708 static struct omap_hwmod_opt_clk mcbsp2_opt_clks[] = {
1709 { .role = "pad_fck", .clk = "pad_clks_ck" },
1710 { .role = "prcm_fck", .clk = "mcbsp2_sync_mux_ck" },
1711 };
1712
1713 static struct omap_hwmod omap44xx_mcbsp2_hwmod = {
1714 .name = "mcbsp2",
1715 .class = &omap44xx_mcbsp_hwmod_class,
1716 .clkdm_name = "abe_clkdm",
1717 .main_clk = "func_mcbsp2_gfclk",
1718 .prcm = {
1719 .omap4 = {
1720 .clkctrl_offs = OMAP4_CM1_ABE_MCBSP2_CLKCTRL_OFFSET,
1721 .context_offs = OMAP4_RM_ABE_MCBSP2_CONTEXT_OFFSET,
1722 .modulemode = MODULEMODE_SWCTRL,
1723 },
1724 },
1725 .opt_clks = mcbsp2_opt_clks,
1726 .opt_clks_cnt = ARRAY_SIZE(mcbsp2_opt_clks),
1727 };
1728
1729 /* mcbsp3 */
1730 static struct omap_hwmod_opt_clk mcbsp3_opt_clks[] = {
1731 { .role = "pad_fck", .clk = "pad_clks_ck" },
1732 { .role = "prcm_fck", .clk = "mcbsp3_sync_mux_ck" },
1733 };
1734
1735 static struct omap_hwmod omap44xx_mcbsp3_hwmod = {
1736 .name = "mcbsp3",
1737 .class = &omap44xx_mcbsp_hwmod_class,
1738 .clkdm_name = "abe_clkdm",
1739 .main_clk = "func_mcbsp3_gfclk",
1740 .prcm = {
1741 .omap4 = {
1742 .clkctrl_offs = OMAP4_CM1_ABE_MCBSP3_CLKCTRL_OFFSET,
1743 .context_offs = OMAP4_RM_ABE_MCBSP3_CONTEXT_OFFSET,
1744 .modulemode = MODULEMODE_SWCTRL,
1745 },
1746 },
1747 .opt_clks = mcbsp3_opt_clks,
1748 .opt_clks_cnt = ARRAY_SIZE(mcbsp3_opt_clks),
1749 };
1750
1751 /* mcbsp4 */
1752 static struct omap_hwmod_opt_clk mcbsp4_opt_clks[] = {
1753 { .role = "pad_fck", .clk = "pad_clks_ck" },
1754 { .role = "prcm_fck", .clk = "mcbsp4_sync_mux_ck" },
1755 };
1756
1757 static struct omap_hwmod omap44xx_mcbsp4_hwmod = {
1758 .name = "mcbsp4",
1759 .class = &omap44xx_mcbsp_hwmod_class,
1760 .clkdm_name = "l4_per_clkdm",
1761 .main_clk = "per_mcbsp4_gfclk",
1762 .prcm = {
1763 .omap4 = {
1764 .clkctrl_offs = OMAP4_CM_L4PER_MCBSP4_CLKCTRL_OFFSET,
1765 .context_offs = OMAP4_RM_L4PER_MCBSP4_CONTEXT_OFFSET,
1766 .modulemode = MODULEMODE_SWCTRL,
1767 },
1768 },
1769 .opt_clks = mcbsp4_opt_clks,
1770 .opt_clks_cnt = ARRAY_SIZE(mcbsp4_opt_clks),
1771 };
1772
1773 /*
1774 * 'mcpdm' class
1775 * multi channel pdm controller (proprietary interface with phoenix power
1776 * ic)
1777 */
1778
1779 static struct omap_hwmod_class_sysconfig omap44xx_mcpdm_sysc = {
1780 .rev_offs = 0x0000,
1781 .sysc_offs = 0x0010,
1782 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
1783 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
1784 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1785 SIDLE_SMART_WKUP),
1786 .sysc_fields = &omap_hwmod_sysc_type2,
1787 };
1788
1789 static struct omap_hwmod_class omap44xx_mcpdm_hwmod_class = {
1790 .name = "mcpdm",
1791 .sysc = &omap44xx_mcpdm_sysc,
1792 };
1793
1794 /* mcpdm */
1795 static struct omap_hwmod omap44xx_mcpdm_hwmod = {
1796 .name = "mcpdm",
1797 .class = &omap44xx_mcpdm_hwmod_class,
1798 .clkdm_name = "abe_clkdm",
1799 /*
1800 * It's suspected that the McPDM requires an off-chip main
1801 * functional clock, controlled via I2C. This IP block is
1802 * currently reset very early during boot, before I2C is
1803 * available, so it doesn't seem that we have any choice in
1804 * the kernel other than to avoid resetting it.
1805 *
1806 * Also, McPDM needs to be configured to NO_IDLE mode when it
1807 * is in used otherwise vital clocks will be gated which
1808 * results 'slow motion' audio playback.
1809 */
1810 .flags = HWMOD_EXT_OPT_MAIN_CLK | HWMOD_SWSUP_SIDLE,
1811 .main_clk = "pad_clks_ck",
1812 .prcm = {
1813 .omap4 = {
1814 .clkctrl_offs = OMAP4_CM1_ABE_PDM_CLKCTRL_OFFSET,
1815 .context_offs = OMAP4_RM_ABE_PDM_CONTEXT_OFFSET,
1816 .modulemode = MODULEMODE_SWCTRL,
1817 },
1818 },
1819 };
1820
1821 /*
1822 * 'mcspi' class
1823 * multichannel serial port interface (mcspi) / master/slave synchronous serial
1824 * bus
1825 */
1826
1827 static struct omap_hwmod_class_sysconfig omap44xx_mcspi_sysc = {
1828 .rev_offs = 0x0000,
1829 .sysc_offs = 0x0010,
1830 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
1831 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
1832 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1833 SIDLE_SMART_WKUP),
1834 .sysc_fields = &omap_hwmod_sysc_type2,
1835 };
1836
1837 static struct omap_hwmod_class omap44xx_mcspi_hwmod_class = {
1838 .name = "mcspi",
1839 .sysc = &omap44xx_mcspi_sysc,
1840 };
1841
1842 /* mcspi1 */
1843 static struct omap_hwmod omap44xx_mcspi1_hwmod = {
1844 .name = "mcspi1",
1845 .class = &omap44xx_mcspi_hwmod_class,
1846 .clkdm_name = "l4_per_clkdm",
1847 .main_clk = "func_48m_fclk",
1848 .prcm = {
1849 .omap4 = {
1850 .clkctrl_offs = OMAP4_CM_L4PER_MCSPI1_CLKCTRL_OFFSET,
1851 .context_offs = OMAP4_RM_L4PER_MCSPI1_CONTEXT_OFFSET,
1852 .modulemode = MODULEMODE_SWCTRL,
1853 },
1854 },
1855 };
1856
1857 /* mcspi2 */
1858 static struct omap_hwmod omap44xx_mcspi2_hwmod = {
1859 .name = "mcspi2",
1860 .class = &omap44xx_mcspi_hwmod_class,
1861 .clkdm_name = "l4_per_clkdm",
1862 .main_clk = "func_48m_fclk",
1863 .prcm = {
1864 .omap4 = {
1865 .clkctrl_offs = OMAP4_CM_L4PER_MCSPI2_CLKCTRL_OFFSET,
1866 .context_offs = OMAP4_RM_L4PER_MCSPI2_CONTEXT_OFFSET,
1867 .modulemode = MODULEMODE_SWCTRL,
1868 },
1869 },
1870 };
1871
1872 /* mcspi3 */
1873 static struct omap_hwmod omap44xx_mcspi3_hwmod = {
1874 .name = "mcspi3",
1875 .class = &omap44xx_mcspi_hwmod_class,
1876 .clkdm_name = "l4_per_clkdm",
1877 .main_clk = "func_48m_fclk",
1878 .prcm = {
1879 .omap4 = {
1880 .clkctrl_offs = OMAP4_CM_L4PER_MCSPI3_CLKCTRL_OFFSET,
1881 .context_offs = OMAP4_RM_L4PER_MCSPI3_CONTEXT_OFFSET,
1882 .modulemode = MODULEMODE_SWCTRL,
1883 },
1884 },
1885 };
1886
1887 /* mcspi4 */
1888 static struct omap_hwmod omap44xx_mcspi4_hwmod = {
1889 .name = "mcspi4",
1890 .class = &omap44xx_mcspi_hwmod_class,
1891 .clkdm_name = "l4_per_clkdm",
1892 .main_clk = "func_48m_fclk",
1893 .prcm = {
1894 .omap4 = {
1895 .clkctrl_offs = OMAP4_CM_L4PER_MCSPI4_CLKCTRL_OFFSET,
1896 .context_offs = OMAP4_RM_L4PER_MCSPI4_CONTEXT_OFFSET,
1897 .modulemode = MODULEMODE_SWCTRL,
1898 },
1899 },
1900 };
1901
1902 /*
1903 * 'mmc' class
1904 * multimedia card high-speed/sd/sdio (mmc/sd/sdio) host controller
1905 */
1906
1907 static struct omap_hwmod_class_sysconfig omap44xx_mmc_sysc = {
1908 .rev_offs = 0x0000,
1909 .sysc_offs = 0x0010,
1910 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_MIDLEMODE |
1911 SYSC_HAS_RESET_STATUS | SYSC_HAS_SIDLEMODE |
1912 SYSC_HAS_SOFTRESET),
1913 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1914 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
1915 MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
1916 .sysc_fields = &omap_hwmod_sysc_type2,
1917 };
1918
1919 static struct omap_hwmod_class omap44xx_mmc_hwmod_class = {
1920 .name = "mmc",
1921 .sysc = &omap44xx_mmc_sysc,
1922 };
1923
1924 /* mmc1 */
1925 static struct omap_hsmmc_dev_attr mmc1_dev_attr = {
1926 .flags = OMAP_HSMMC_SUPPORTS_DUAL_VOLT,
1927 };
1928
1929 static struct omap_hwmod omap44xx_mmc1_hwmod = {
1930 .name = "mmc1",
1931 .class = &omap44xx_mmc_hwmod_class,
1932 .clkdm_name = "l3_init_clkdm",
1933 .main_clk = "hsmmc1_fclk",
1934 .prcm = {
1935 .omap4 = {
1936 .clkctrl_offs = OMAP4_CM_L3INIT_MMC1_CLKCTRL_OFFSET,
1937 .context_offs = OMAP4_RM_L3INIT_MMC1_CONTEXT_OFFSET,
1938 .modulemode = MODULEMODE_SWCTRL,
1939 },
1940 },
1941 .dev_attr = &mmc1_dev_attr,
1942 };
1943
1944 /* mmc2 */
1945 static struct omap_hwmod omap44xx_mmc2_hwmod = {
1946 .name = "mmc2",
1947 .class = &omap44xx_mmc_hwmod_class,
1948 .clkdm_name = "l3_init_clkdm",
1949 .main_clk = "hsmmc2_fclk",
1950 .prcm = {
1951 .omap4 = {
1952 .clkctrl_offs = OMAP4_CM_L3INIT_MMC2_CLKCTRL_OFFSET,
1953 .context_offs = OMAP4_RM_L3INIT_MMC2_CONTEXT_OFFSET,
1954 .modulemode = MODULEMODE_SWCTRL,
1955 },
1956 },
1957 };
1958
1959 /* mmc3 */
1960 static struct omap_hwmod omap44xx_mmc3_hwmod = {
1961 .name = "mmc3",
1962 .class = &omap44xx_mmc_hwmod_class,
1963 .clkdm_name = "l4_per_clkdm",
1964 .main_clk = "func_48m_fclk",
1965 .prcm = {
1966 .omap4 = {
1967 .clkctrl_offs = OMAP4_CM_L4PER_MMCSD3_CLKCTRL_OFFSET,
1968 .context_offs = OMAP4_RM_L4PER_MMCSD3_CONTEXT_OFFSET,
1969 .modulemode = MODULEMODE_SWCTRL,
1970 },
1971 },
1972 };
1973
1974 /* mmc4 */
1975 static struct omap_hwmod omap44xx_mmc4_hwmod = {
1976 .name = "mmc4",
1977 .class = &omap44xx_mmc_hwmod_class,
1978 .clkdm_name = "l4_per_clkdm",
1979 .main_clk = "func_48m_fclk",
1980 .prcm = {
1981 .omap4 = {
1982 .clkctrl_offs = OMAP4_CM_L4PER_MMCSD4_CLKCTRL_OFFSET,
1983 .context_offs = OMAP4_RM_L4PER_MMCSD4_CONTEXT_OFFSET,
1984 .modulemode = MODULEMODE_SWCTRL,
1985 },
1986 },
1987 };
1988
1989 /* mmc5 */
1990 static struct omap_hwmod omap44xx_mmc5_hwmod = {
1991 .name = "mmc5",
1992 .class = &omap44xx_mmc_hwmod_class,
1993 .clkdm_name = "l4_per_clkdm",
1994 .main_clk = "func_48m_fclk",
1995 .prcm = {
1996 .omap4 = {
1997 .clkctrl_offs = OMAP4_CM_L4PER_MMCSD5_CLKCTRL_OFFSET,
1998 .context_offs = OMAP4_RM_L4PER_MMCSD5_CONTEXT_OFFSET,
1999 .modulemode = MODULEMODE_SWCTRL,
2000 },
2001 },
2002 };
2003
2004 /*
2005 * 'mmu' class
2006 * The memory management unit performs virtual to physical address translation
2007 * for its requestors.
2008 */
2009
2010 static struct omap_hwmod_class_sysconfig mmu_sysc = {
2011 .rev_offs = 0x000,
2012 .sysc_offs = 0x010,
2013 .syss_offs = 0x014,
2014 .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
2015 SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
2016 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2017 .sysc_fields = &omap_hwmod_sysc_type1,
2018 };
2019
2020 static struct omap_hwmod_class omap44xx_mmu_hwmod_class = {
2021 .name = "mmu",
2022 .sysc = &mmu_sysc,
2023 };
2024
2025 /* mmu ipu */
2026
2027 static struct omap_hwmod omap44xx_mmu_ipu_hwmod;
2028 static struct omap_hwmod_rst_info omap44xx_mmu_ipu_resets[] = {
2029 { .name = "mmu_cache", .rst_shift = 2 },
2030 };
2031
2032 /* l3_main_2 -> mmu_ipu */
2033 static struct omap_hwmod_ocp_if omap44xx_l3_main_2__mmu_ipu = {
2034 .master = &omap44xx_l3_main_2_hwmod,
2035 .slave = &omap44xx_mmu_ipu_hwmod,
2036 .clk = "l3_div_ck",
2037 .user = OCP_USER_MPU | OCP_USER_SDMA,
2038 };
2039
2040 static struct omap_hwmod omap44xx_mmu_ipu_hwmod = {
2041 .name = "mmu_ipu",
2042 .class = &omap44xx_mmu_hwmod_class,
2043 .clkdm_name = "ducati_clkdm",
2044 .rst_lines = omap44xx_mmu_ipu_resets,
2045 .rst_lines_cnt = ARRAY_SIZE(omap44xx_mmu_ipu_resets),
2046 .main_clk = "ducati_clk_mux_ck",
2047 .prcm = {
2048 .omap4 = {
2049 .clkctrl_offs = OMAP4_CM_DUCATI_DUCATI_CLKCTRL_OFFSET,
2050 .rstctrl_offs = OMAP4_RM_DUCATI_RSTCTRL_OFFSET,
2051 .context_offs = OMAP4_RM_DUCATI_DUCATI_CONTEXT_OFFSET,
2052 .modulemode = MODULEMODE_HWCTRL,
2053 },
2054 },
2055 };
2056
2057 /* mmu dsp */
2058
2059 static struct omap_hwmod omap44xx_mmu_dsp_hwmod;
2060 static struct omap_hwmod_rst_info omap44xx_mmu_dsp_resets[] = {
2061 { .name = "mmu_cache", .rst_shift = 1 },
2062 };
2063
2064 /* l4_cfg -> dsp */
2065 static struct omap_hwmod_ocp_if omap44xx_l4_cfg__mmu_dsp = {
2066 .master = &omap44xx_l4_cfg_hwmod,
2067 .slave = &omap44xx_mmu_dsp_hwmod,
2068 .clk = "l4_div_ck",
2069 .user = OCP_USER_MPU | OCP_USER_SDMA,
2070 };
2071
2072 static struct omap_hwmod omap44xx_mmu_dsp_hwmod = {
2073 .name = "mmu_dsp",
2074 .class = &omap44xx_mmu_hwmod_class,
2075 .clkdm_name = "tesla_clkdm",
2076 .rst_lines = omap44xx_mmu_dsp_resets,
2077 .rst_lines_cnt = ARRAY_SIZE(omap44xx_mmu_dsp_resets),
2078 .main_clk = "dpll_iva_m4x2_ck",
2079 .prcm = {
2080 .omap4 = {
2081 .clkctrl_offs = OMAP4_CM_TESLA_TESLA_CLKCTRL_OFFSET,
2082 .rstctrl_offs = OMAP4_RM_TESLA_RSTCTRL_OFFSET,
2083 .context_offs = OMAP4_RM_TESLA_TESLA_CONTEXT_OFFSET,
2084 .modulemode = MODULEMODE_HWCTRL,
2085 },
2086 },
2087 };
2088
2089 /*
2090 * 'mpu' class
2091 * mpu sub-system
2092 */
2093
2094 static struct omap_hwmod_class omap44xx_mpu_hwmod_class = {
2095 .name = "mpu",
2096 };
2097
2098 /* mpu */
2099 static struct omap_hwmod omap44xx_mpu_hwmod = {
2100 .name = "mpu",
2101 .class = &omap44xx_mpu_hwmod_class,
2102 .clkdm_name = "mpuss_clkdm",
2103 .flags = HWMOD_INIT_NO_IDLE,
2104 .main_clk = "dpll_mpu_m2_ck",
2105 .prcm = {
2106 .omap4 = {
2107 .clkctrl_offs = OMAP4_CM_MPU_MPU_CLKCTRL_OFFSET,
2108 .context_offs = OMAP4_RM_MPU_MPU_CONTEXT_OFFSET,
2109 },
2110 },
2111 };
2112
2113 /*
2114 * 'ocmc_ram' class
2115 * top-level core on-chip ram
2116 */
2117
2118 static struct omap_hwmod_class omap44xx_ocmc_ram_hwmod_class = {
2119 .name = "ocmc_ram",
2120 };
2121
2122 /* ocmc_ram */
2123 static struct omap_hwmod omap44xx_ocmc_ram_hwmod = {
2124 .name = "ocmc_ram",
2125 .class = &omap44xx_ocmc_ram_hwmod_class,
2126 .clkdm_name = "l3_2_clkdm",
2127 .prcm = {
2128 .omap4 = {
2129 .clkctrl_offs = OMAP4_CM_L3_2_OCMC_RAM_CLKCTRL_OFFSET,
2130 .context_offs = OMAP4_RM_L3_2_OCMC_RAM_CONTEXT_OFFSET,
2131 },
2132 },
2133 };
2134
2135 /*
2136 * 'ocp2scp' class
2137 * bridge to transform ocp interface protocol to scp (serial control port)
2138 * protocol
2139 */
2140
2141 static struct omap_hwmod_class_sysconfig omap44xx_ocp2scp_sysc = {
2142 .rev_offs = 0x0000,
2143 .sysc_offs = 0x0010,
2144 .syss_offs = 0x0014,
2145 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_SIDLEMODE |
2146 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
2147 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2148 .sysc_fields = &omap_hwmod_sysc_type1,
2149 };
2150
2151 static struct omap_hwmod_class omap44xx_ocp2scp_hwmod_class = {
2152 .name = "ocp2scp",
2153 .sysc = &omap44xx_ocp2scp_sysc,
2154 };
2155
2156 /* ocp2scp_usb_phy */
2157 static struct omap_hwmod omap44xx_ocp2scp_usb_phy_hwmod = {
2158 .name = "ocp2scp_usb_phy",
2159 .class = &omap44xx_ocp2scp_hwmod_class,
2160 .clkdm_name = "l3_init_clkdm",
2161 /*
2162 * ocp2scp_usb_phy_phy_48m is provided by the OMAP4 PRCM IP
2163 * block as an "optional clock," and normally should never be
2164 * specified as the main_clk for an OMAP IP block. However it
2165 * turns out that this clock is actually the main clock for
2166 * the ocp2scp_usb_phy IP block:
2167 * http://lists.infradead.org/pipermail/linux-arm-kernel/2012-September/119943.html
2168 * So listing ocp2scp_usb_phy_phy_48m as a main_clk here seems
2169 * to be the best workaround.
2170 */
2171 .main_clk = "ocp2scp_usb_phy_phy_48m",
2172 .prcm = {
2173 .omap4 = {
2174 .clkctrl_offs = OMAP4_CM_L3INIT_USBPHYOCP2SCP_CLKCTRL_OFFSET,
2175 .context_offs = OMAP4_RM_L3INIT_USBPHYOCP2SCP_CONTEXT_OFFSET,
2176 .modulemode = MODULEMODE_HWCTRL,
2177 },
2178 },
2179 };
2180
2181 /*
2182 * 'prcm' class
2183 * power and reset manager (part of the prcm infrastructure) + clock manager 2
2184 * + clock manager 1 (in always on power domain) + local prm in mpu
2185 */
2186
2187 static struct omap_hwmod_class omap44xx_prcm_hwmod_class = {
2188 .name = "prcm",
2189 };
2190
2191 /* prcm_mpu */
2192 static struct omap_hwmod omap44xx_prcm_mpu_hwmod = {
2193 .name = "prcm_mpu",
2194 .class = &omap44xx_prcm_hwmod_class,
2195 .clkdm_name = "l4_wkup_clkdm",
2196 .flags = HWMOD_NO_IDLEST,
2197 .prcm = {
2198 .omap4 = {
2199 .flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
2200 },
2201 },
2202 };
2203
2204 /* cm_core_aon */
2205 static struct omap_hwmod omap44xx_cm_core_aon_hwmod = {
2206 .name = "cm_core_aon",
2207 .class = &omap44xx_prcm_hwmod_class,
2208 .flags = HWMOD_NO_IDLEST,
2209 .prcm = {
2210 .omap4 = {
2211 .flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
2212 },
2213 },
2214 };
2215
2216 /* cm_core */
2217 static struct omap_hwmod omap44xx_cm_core_hwmod = {
2218 .name = "cm_core",
2219 .class = &omap44xx_prcm_hwmod_class,
2220 .flags = HWMOD_NO_IDLEST,
2221 .prcm = {
2222 .omap4 = {
2223 .flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
2224 },
2225 },
2226 };
2227
2228 /* prm */
2229 static struct omap_hwmod_rst_info omap44xx_prm_resets[] = {
2230 { .name = "rst_global_warm_sw", .rst_shift = 0 },
2231 { .name = "rst_global_cold_sw", .rst_shift = 1 },
2232 };
2233
2234 static struct omap_hwmod omap44xx_prm_hwmod = {
2235 .name = "prm",
2236 .class = &omap44xx_prcm_hwmod_class,
2237 .rst_lines = omap44xx_prm_resets,
2238 .rst_lines_cnt = ARRAY_SIZE(omap44xx_prm_resets),
2239 };
2240
2241 /*
2242 * 'scrm' class
2243 * system clock and reset manager
2244 */
2245
2246 static struct omap_hwmod_class omap44xx_scrm_hwmod_class = {
2247 .name = "scrm",
2248 };
2249
2250 /* scrm */
2251 static struct omap_hwmod omap44xx_scrm_hwmod = {
2252 .name = "scrm",
2253 .class = &omap44xx_scrm_hwmod_class,
2254 .clkdm_name = "l4_wkup_clkdm",
2255 .prcm = {
2256 .omap4 = {
2257 .flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
2258 },
2259 },
2260 };
2261
2262 /*
2263 * 'sl2if' class
2264 * shared level 2 memory interface
2265 */
2266
2267 static struct omap_hwmod_class omap44xx_sl2if_hwmod_class = {
2268 .name = "sl2if",
2269 };
2270
2271 /* sl2if */
2272 static struct omap_hwmod omap44xx_sl2if_hwmod = {
2273 .name = "sl2if",
2274 .class = &omap44xx_sl2if_hwmod_class,
2275 .clkdm_name = "ivahd_clkdm",
2276 .prcm = {
2277 .omap4 = {
2278 .clkctrl_offs = OMAP4_CM_IVAHD_SL2_CLKCTRL_OFFSET,
2279 .context_offs = OMAP4_RM_IVAHD_SL2_CONTEXT_OFFSET,
2280 .modulemode = MODULEMODE_HWCTRL,
2281 },
2282 },
2283 };
2284
2285 /*
2286 * 'slimbus' class
2287 * bidirectional, multi-drop, multi-channel two-line serial interface between
2288 * the device and external components
2289 */
2290
2291 static struct omap_hwmod_class_sysconfig omap44xx_slimbus_sysc = {
2292 .rev_offs = 0x0000,
2293 .sysc_offs = 0x0010,
2294 .sysc_flags = (SYSC_HAS_RESET_STATUS | SYSC_HAS_SIDLEMODE |
2295 SYSC_HAS_SOFTRESET),
2296 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2297 SIDLE_SMART_WKUP),
2298 .sysc_fields = &omap_hwmod_sysc_type2,
2299 };
2300
2301 static struct omap_hwmod_class omap44xx_slimbus_hwmod_class = {
2302 .name = "slimbus",
2303 .sysc = &omap44xx_slimbus_sysc,
2304 };
2305
2306 /* slimbus1 */
2307 static struct omap_hwmod_opt_clk slimbus1_opt_clks[] = {
2308 { .role = "fclk_1", .clk = "slimbus1_fclk_1" },
2309 { .role = "fclk_0", .clk = "slimbus1_fclk_0" },
2310 { .role = "fclk_2", .clk = "slimbus1_fclk_2" },
2311 { .role = "slimbus_clk", .clk = "slimbus1_slimbus_clk" },
2312 };
2313
2314 static struct omap_hwmod omap44xx_slimbus1_hwmod = {
2315 .name = "slimbus1",
2316 .class = &omap44xx_slimbus_hwmod_class,
2317 .clkdm_name = "abe_clkdm",
2318 .prcm = {
2319 .omap4 = {
2320 .clkctrl_offs = OMAP4_CM1_ABE_SLIMBUS_CLKCTRL_OFFSET,
2321 .context_offs = OMAP4_RM_ABE_SLIMBUS_CONTEXT_OFFSET,
2322 .modulemode = MODULEMODE_SWCTRL,
2323 },
2324 },
2325 .opt_clks = slimbus1_opt_clks,
2326 .opt_clks_cnt = ARRAY_SIZE(slimbus1_opt_clks),
2327 };
2328
2329 /* slimbus2 */
2330 static struct omap_hwmod_opt_clk slimbus2_opt_clks[] = {
2331 { .role = "fclk_1", .clk = "slimbus2_fclk_1" },
2332 { .role = "fclk_0", .clk = "slimbus2_fclk_0" },
2333 { .role = "slimbus_clk", .clk = "slimbus2_slimbus_clk" },
2334 };
2335
2336 static struct omap_hwmod omap44xx_slimbus2_hwmod = {
2337 .name = "slimbus2",
2338 .class = &omap44xx_slimbus_hwmod_class,
2339 .clkdm_name = "l4_per_clkdm",
2340 .prcm = {
2341 .omap4 = {
2342 .clkctrl_offs = OMAP4_CM_L4PER_SLIMBUS2_CLKCTRL_OFFSET,
2343 .context_offs = OMAP4_RM_L4PER_SLIMBUS2_CONTEXT_OFFSET,
2344 .modulemode = MODULEMODE_SWCTRL,
2345 },
2346 },
2347 .opt_clks = slimbus2_opt_clks,
2348 .opt_clks_cnt = ARRAY_SIZE(slimbus2_opt_clks),
2349 };
2350
2351 /*
2352 * 'smartreflex' class
2353 * smartreflex module (monitor silicon performance and outputs a measure of
2354 * performance error)
2355 */
2356
2357 /* The IP is not compliant to type1 / type2 scheme */
2358 static struct omap_hwmod_class_sysconfig omap44xx_smartreflex_sysc = {
2359 .rev_offs = -ENODEV,
2360 .sysc_offs = 0x0038,
2361 .sysc_flags = (SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE),
2362 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2363 SIDLE_SMART_WKUP),
2364 .sysc_fields = &omap36xx_sr_sysc_fields,
2365 };
2366
2367 static struct omap_hwmod_class omap44xx_smartreflex_hwmod_class = {
2368 .name = "smartreflex",
2369 .sysc = &omap44xx_smartreflex_sysc,
2370 .rev = 2,
2371 };
2372
2373 /* smartreflex_core */
2374 static struct omap_smartreflex_dev_attr smartreflex_core_dev_attr = {
2375 .sensor_voltdm_name = "core",
2376 };
2377
2378 static struct omap_hwmod omap44xx_smartreflex_core_hwmod = {
2379 .name = "smartreflex_core",
2380 .class = &omap44xx_smartreflex_hwmod_class,
2381 .clkdm_name = "l4_ao_clkdm",
2382
2383 .main_clk = "smartreflex_core_fck",
2384 .prcm = {
2385 .omap4 = {
2386 .clkctrl_offs = OMAP4_CM_ALWON_SR_CORE_CLKCTRL_OFFSET,
2387 .context_offs = OMAP4_RM_ALWON_SR_CORE_CONTEXT_OFFSET,
2388 .modulemode = MODULEMODE_SWCTRL,
2389 },
2390 },
2391 .dev_attr = &smartreflex_core_dev_attr,
2392 };
2393
2394 /* smartreflex_iva */
2395 static struct omap_smartreflex_dev_attr smartreflex_iva_dev_attr = {
2396 .sensor_voltdm_name = "iva",
2397 };
2398
2399 static struct omap_hwmod omap44xx_smartreflex_iva_hwmod = {
2400 .name = "smartreflex_iva",
2401 .class = &omap44xx_smartreflex_hwmod_class,
2402 .clkdm_name = "l4_ao_clkdm",
2403 .main_clk = "smartreflex_iva_fck",
2404 .prcm = {
2405 .omap4 = {
2406 .clkctrl_offs = OMAP4_CM_ALWON_SR_IVA_CLKCTRL_OFFSET,
2407 .context_offs = OMAP4_RM_ALWON_SR_IVA_CONTEXT_OFFSET,
2408 .modulemode = MODULEMODE_SWCTRL,
2409 },
2410 },
2411 .dev_attr = &smartreflex_iva_dev_attr,
2412 };
2413
2414 /* smartreflex_mpu */
2415 static struct omap_smartreflex_dev_attr smartreflex_mpu_dev_attr = {
2416 .sensor_voltdm_name = "mpu",
2417 };
2418
2419 static struct omap_hwmod omap44xx_smartreflex_mpu_hwmod = {
2420 .name = "smartreflex_mpu",
2421 .class = &omap44xx_smartreflex_hwmod_class,
2422 .clkdm_name = "l4_ao_clkdm",
2423 .main_clk = "smartreflex_mpu_fck",
2424 .prcm = {
2425 .omap4 = {
2426 .clkctrl_offs = OMAP4_CM_ALWON_SR_MPU_CLKCTRL_OFFSET,
2427 .context_offs = OMAP4_RM_ALWON_SR_MPU_CONTEXT_OFFSET,
2428 .modulemode = MODULEMODE_SWCTRL,
2429 },
2430 },
2431 .dev_attr = &smartreflex_mpu_dev_attr,
2432 };
2433
2434 /*
2435 * 'spinlock' class
2436 * spinlock provides hardware assistance for synchronizing the processes
2437 * running on multiple processors
2438 */
2439
2440 static struct omap_hwmod_class_sysconfig omap44xx_spinlock_sysc = {
2441 .rev_offs = 0x0000,
2442 .sysc_offs = 0x0010,
2443 .syss_offs = 0x0014,
2444 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
2445 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
2446 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
2447 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2448 .sysc_fields = &omap_hwmod_sysc_type1,
2449 };
2450
2451 static struct omap_hwmod_class omap44xx_spinlock_hwmod_class = {
2452 .name = "spinlock",
2453 .sysc = &omap44xx_spinlock_sysc,
2454 };
2455
2456 /* spinlock */
2457 static struct omap_hwmod omap44xx_spinlock_hwmod = {
2458 .name = "spinlock",
2459 .class = &omap44xx_spinlock_hwmod_class,
2460 .clkdm_name = "l4_cfg_clkdm",
2461 .prcm = {
2462 .omap4 = {
2463 .clkctrl_offs = OMAP4_CM_L4CFG_HW_SEM_CLKCTRL_OFFSET,
2464 .context_offs = OMAP4_RM_L4CFG_HW_SEM_CONTEXT_OFFSET,
2465 },
2466 },
2467 };
2468
2469 /*
2470 * 'timer' class
2471 * general purpose timer module with accurate 1ms tick
2472 * This class contains several variants: ['timer_1ms', 'timer']
2473 */
2474
2475 static struct omap_hwmod_class_sysconfig omap44xx_timer_1ms_sysc = {
2476 .rev_offs = 0x0000,
2477 .sysc_offs = 0x0010,
2478 .syss_offs = 0x0014,
2479 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
2480 SYSC_HAS_EMUFREE | SYSC_HAS_ENAWAKEUP |
2481 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
2482 SYSS_HAS_RESET_STATUS),
2483 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2484 .sysc_fields = &omap_hwmod_sysc_type1,
2485 };
2486
2487 static struct omap_hwmod_class omap44xx_timer_1ms_hwmod_class = {
2488 .name = "timer",
2489 .sysc = &omap44xx_timer_1ms_sysc,
2490 };
2491
2492 static struct omap_hwmod_class_sysconfig omap44xx_timer_sysc = {
2493 .rev_offs = 0x0000,
2494 .sysc_offs = 0x0010,
2495 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
2496 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
2497 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2498 SIDLE_SMART_WKUP),
2499 .sysc_fields = &omap_hwmod_sysc_type2,
2500 };
2501
2502 static struct omap_hwmod_class omap44xx_timer_hwmod_class = {
2503 .name = "timer",
2504 .sysc = &omap44xx_timer_sysc,
2505 };
2506
2507 /* timer1 */
2508 static struct omap_hwmod omap44xx_timer1_hwmod = {
2509 .name = "timer1",
2510 .class = &omap44xx_timer_1ms_hwmod_class,
2511 .clkdm_name = "l4_wkup_clkdm",
2512 .flags = HWMOD_SET_DEFAULT_CLOCKACT,
2513 .main_clk = "dmt1_clk_mux",
2514 .prcm = {
2515 .omap4 = {
2516 .clkctrl_offs = OMAP4_CM_WKUP_TIMER1_CLKCTRL_OFFSET,
2517 .context_offs = OMAP4_RM_WKUP_TIMER1_CONTEXT_OFFSET,
2518 .modulemode = MODULEMODE_SWCTRL,
2519 },
2520 },
2521 };
2522
2523 /* timer2 */
2524 static struct omap_hwmod omap44xx_timer2_hwmod = {
2525 .name = "timer2",
2526 .class = &omap44xx_timer_1ms_hwmod_class,
2527 .clkdm_name = "l4_per_clkdm",
2528 .flags = HWMOD_SET_DEFAULT_CLOCKACT,
2529 .main_clk = "cm2_dm2_mux",
2530 .prcm = {
2531 .omap4 = {
2532 .clkctrl_offs = OMAP4_CM_L4PER_DMTIMER2_CLKCTRL_OFFSET,
2533 .context_offs = OMAP4_RM_L4PER_DMTIMER2_CONTEXT_OFFSET,
2534 .modulemode = MODULEMODE_SWCTRL,
2535 },
2536 },
2537 };
2538
2539 /* timer3 */
2540 static struct omap_hwmod omap44xx_timer3_hwmod = {
2541 .name = "timer3",
2542 .class = &omap44xx_timer_hwmod_class,
2543 .clkdm_name = "l4_per_clkdm",
2544 .main_clk = "cm2_dm3_mux",
2545 .prcm = {
2546 .omap4 = {
2547 .clkctrl_offs = OMAP4_CM_L4PER_DMTIMER3_CLKCTRL_OFFSET,
2548 .context_offs = OMAP4_RM_L4PER_DMTIMER3_CONTEXT_OFFSET,
2549 .modulemode = MODULEMODE_SWCTRL,
2550 },
2551 },
2552 };
2553
2554 /* timer4 */
2555 static struct omap_hwmod omap44xx_timer4_hwmod = {
2556 .name = "timer4",
2557 .class = &omap44xx_timer_hwmod_class,
2558 .clkdm_name = "l4_per_clkdm",
2559 .main_clk = "cm2_dm4_mux",
2560 .prcm = {
2561 .omap4 = {
2562 .clkctrl_offs = OMAP4_CM_L4PER_DMTIMER4_CLKCTRL_OFFSET,
2563 .context_offs = OMAP4_RM_L4PER_DMTIMER4_CONTEXT_OFFSET,
2564 .modulemode = MODULEMODE_SWCTRL,
2565 },
2566 },
2567 };
2568
2569 /* timer5 */
2570 static struct omap_hwmod omap44xx_timer5_hwmod = {
2571 .name = "timer5",
2572 .class = &omap44xx_timer_hwmod_class,
2573 .clkdm_name = "abe_clkdm",
2574 .main_clk = "timer5_sync_mux",
2575 .prcm = {
2576 .omap4 = {
2577 .clkctrl_offs = OMAP4_CM1_ABE_TIMER5_CLKCTRL_OFFSET,
2578 .context_offs = OMAP4_RM_ABE_TIMER5_CONTEXT_OFFSET,
2579 .modulemode = MODULEMODE_SWCTRL,
2580 },
2581 },
2582 };
2583
2584 /* timer6 */
2585 static struct omap_hwmod omap44xx_timer6_hwmod = {
2586 .name = "timer6",
2587 .class = &omap44xx_timer_hwmod_class,
2588 .clkdm_name = "abe_clkdm",
2589 .main_clk = "timer6_sync_mux",
2590 .prcm = {
2591 .omap4 = {
2592 .clkctrl_offs = OMAP4_CM1_ABE_TIMER6_CLKCTRL_OFFSET,
2593 .context_offs = OMAP4_RM_ABE_TIMER6_CONTEXT_OFFSET,
2594 .modulemode = MODULEMODE_SWCTRL,
2595 },
2596 },
2597 };
2598
2599 /* timer7 */
2600 static struct omap_hwmod omap44xx_timer7_hwmod = {
2601 .name = "timer7",
2602 .class = &omap44xx_timer_hwmod_class,
2603 .clkdm_name = "abe_clkdm",
2604 .main_clk = "timer7_sync_mux",
2605 .prcm = {
2606 .omap4 = {
2607 .clkctrl_offs = OMAP4_CM1_ABE_TIMER7_CLKCTRL_OFFSET,
2608 .context_offs = OMAP4_RM_ABE_TIMER7_CONTEXT_OFFSET,
2609 .modulemode = MODULEMODE_SWCTRL,
2610 },
2611 },
2612 };
2613
2614 /* timer8 */
2615 static struct omap_hwmod omap44xx_timer8_hwmod = {
2616 .name = "timer8",
2617 .class = &omap44xx_timer_hwmod_class,
2618 .clkdm_name = "abe_clkdm",
2619 .main_clk = "timer8_sync_mux",
2620 .prcm = {
2621 .omap4 = {
2622 .clkctrl_offs = OMAP4_CM1_ABE_TIMER8_CLKCTRL_OFFSET,
2623 .context_offs = OMAP4_RM_ABE_TIMER8_CONTEXT_OFFSET,
2624 .modulemode = MODULEMODE_SWCTRL,
2625 },
2626 },
2627 };
2628
2629 /* timer9 */
2630 static struct omap_hwmod omap44xx_timer9_hwmod = {
2631 .name = "timer9",
2632 .class = &omap44xx_timer_hwmod_class,
2633 .clkdm_name = "l4_per_clkdm",
2634 .main_clk = "cm2_dm9_mux",
2635 .prcm = {
2636 .omap4 = {
2637 .clkctrl_offs = OMAP4_CM_L4PER_DMTIMER9_CLKCTRL_OFFSET,
2638 .context_offs = OMAP4_RM_L4PER_DMTIMER9_CONTEXT_OFFSET,
2639 .modulemode = MODULEMODE_SWCTRL,
2640 },
2641 },
2642 };
2643
2644 /* timer10 */
2645 static struct omap_hwmod omap44xx_timer10_hwmod = {
2646 .name = "timer10",
2647 .class = &omap44xx_timer_1ms_hwmod_class,
2648 .clkdm_name = "l4_per_clkdm",
2649 .flags = HWMOD_SET_DEFAULT_CLOCKACT,
2650 .main_clk = "cm2_dm10_mux",
2651 .prcm = {
2652 .omap4 = {
2653 .clkctrl_offs = OMAP4_CM_L4PER_DMTIMER10_CLKCTRL_OFFSET,
2654 .context_offs = OMAP4_RM_L4PER_DMTIMER10_CONTEXT_OFFSET,
2655 .modulemode = MODULEMODE_SWCTRL,
2656 },
2657 },
2658 };
2659
2660 /* timer11 */
2661 static struct omap_hwmod omap44xx_timer11_hwmod = {
2662 .name = "timer11",
2663 .class = &omap44xx_timer_hwmod_class,
2664 .clkdm_name = "l4_per_clkdm",
2665 .main_clk = "cm2_dm11_mux",
2666 .prcm = {
2667 .omap4 = {
2668 .clkctrl_offs = OMAP4_CM_L4PER_DMTIMER11_CLKCTRL_OFFSET,
2669 .context_offs = OMAP4_RM_L4PER_DMTIMER11_CONTEXT_OFFSET,
2670 .modulemode = MODULEMODE_SWCTRL,
2671 },
2672 },
2673 };
2674
2675 /*
2676 * 'uart' class
2677 * universal asynchronous receiver/transmitter (uart)
2678 */
2679
2680 static struct omap_hwmod_class_sysconfig omap44xx_uart_sysc = {
2681 .rev_offs = 0x0050,
2682 .sysc_offs = 0x0054,
2683 .syss_offs = 0x0058,
2684 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_ENAWAKEUP |
2685 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
2686 SYSS_HAS_RESET_STATUS),
2687 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2688 SIDLE_SMART_WKUP),
2689 .sysc_fields = &omap_hwmod_sysc_type1,
2690 };
2691
2692 static struct omap_hwmod_class omap44xx_uart_hwmod_class = {
2693 .name = "uart",
2694 .sysc = &omap44xx_uart_sysc,
2695 };
2696
2697 /* uart1 */
2698 static struct omap_hwmod omap44xx_uart1_hwmod = {
2699 .name = "uart1",
2700 .class = &omap44xx_uart_hwmod_class,
2701 .clkdm_name = "l4_per_clkdm",
2702 .flags = HWMOD_SWSUP_SIDLE_ACT,
2703 .main_clk = "func_48m_fclk",
2704 .prcm = {
2705 .omap4 = {
2706 .clkctrl_offs = OMAP4_CM_L4PER_UART1_CLKCTRL_OFFSET,
2707 .context_offs = OMAP4_RM_L4PER_UART1_CONTEXT_OFFSET,
2708 .modulemode = MODULEMODE_SWCTRL,
2709 },
2710 },
2711 };
2712
2713 /* uart2 */
2714 static struct omap_hwmod omap44xx_uart2_hwmod = {
2715 .name = "uart2",
2716 .class = &omap44xx_uart_hwmod_class,
2717 .clkdm_name = "l4_per_clkdm",
2718 .flags = HWMOD_SWSUP_SIDLE_ACT,
2719 .main_clk = "func_48m_fclk",
2720 .prcm = {
2721 .omap4 = {
2722 .clkctrl_offs = OMAP4_CM_L4PER_UART2_CLKCTRL_OFFSET,
2723 .context_offs = OMAP4_RM_L4PER_UART2_CONTEXT_OFFSET,
2724 .modulemode = MODULEMODE_SWCTRL,
2725 },
2726 },
2727 };
2728
2729 /* uart3 */
2730 static struct omap_hwmod omap44xx_uart3_hwmod = {
2731 .name = "uart3",
2732 .class = &omap44xx_uart_hwmod_class,
2733 .clkdm_name = "l4_per_clkdm",
2734 .flags = DEBUG_OMAP4UART3_FLAGS | HWMOD_SWSUP_SIDLE_ACT,
2735 .main_clk = "func_48m_fclk",
2736 .prcm = {
2737 .omap4 = {
2738 .clkctrl_offs = OMAP4_CM_L4PER_UART3_CLKCTRL_OFFSET,
2739 .context_offs = OMAP4_RM_L4PER_UART3_CONTEXT_OFFSET,
2740 .modulemode = MODULEMODE_SWCTRL,
2741 },
2742 },
2743 };
2744
2745 /* uart4 */
2746 static struct omap_hwmod omap44xx_uart4_hwmod = {
2747 .name = "uart4",
2748 .class = &omap44xx_uart_hwmod_class,
2749 .clkdm_name = "l4_per_clkdm",
2750 .flags = DEBUG_OMAP4UART4_FLAGS | HWMOD_SWSUP_SIDLE_ACT,
2751 .main_clk = "func_48m_fclk",
2752 .prcm = {
2753 .omap4 = {
2754 .clkctrl_offs = OMAP4_CM_L4PER_UART4_CLKCTRL_OFFSET,
2755 .context_offs = OMAP4_RM_L4PER_UART4_CONTEXT_OFFSET,
2756 .modulemode = MODULEMODE_SWCTRL,
2757 },
2758 },
2759 };
2760
2761 /*
2762 * 'usb_host_fs' class
2763 * full-speed usb host controller
2764 */
2765
2766 /* The IP is not compliant to type1 / type2 scheme */
2767 static struct omap_hwmod_class_sysconfig omap44xx_usb_host_fs_sysc = {
2768 .rev_offs = 0x0000,
2769 .sysc_offs = 0x0210,
2770 .sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE |
2771 SYSC_HAS_SOFTRESET),
2772 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2773 SIDLE_SMART_WKUP),
2774 .sysc_fields = &omap_hwmod_sysc_type_usb_host_fs,
2775 };
2776
2777 static struct omap_hwmod_class omap44xx_usb_host_fs_hwmod_class = {
2778 .name = "usb_host_fs",
2779 .sysc = &omap44xx_usb_host_fs_sysc,
2780 };
2781
2782 /* usb_host_fs */
2783 static struct omap_hwmod omap44xx_usb_host_fs_hwmod = {
2784 .name = "usb_host_fs",
2785 .class = &omap44xx_usb_host_fs_hwmod_class,
2786 .clkdm_name = "l3_init_clkdm",
2787 .main_clk = "usb_host_fs_fck",
2788 .prcm = {
2789 .omap4 = {
2790 .clkctrl_offs = OMAP4_CM_L3INIT_USB_HOST_FS_CLKCTRL_OFFSET,
2791 .context_offs = OMAP4_RM_L3INIT_USB_HOST_FS_CONTEXT_OFFSET,
2792 .modulemode = MODULEMODE_SWCTRL,
2793 },
2794 },
2795 };
2796
2797 /*
2798 * 'usb_host_hs' class
2799 * high-speed multi-port usb host controller
2800 */
2801
2802 static struct omap_hwmod_class_sysconfig omap44xx_usb_host_hs_sysc = {
2803 .rev_offs = 0x0000,
2804 .sysc_offs = 0x0010,
2805 .syss_offs = 0x0014,
2806 .sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE |
2807 SYSC_HAS_SOFTRESET | SYSC_HAS_RESET_STATUS),
2808 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2809 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
2810 MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
2811 .sysc_fields = &omap_hwmod_sysc_type2,
2812 };
2813
2814 static struct omap_hwmod_class omap44xx_usb_host_hs_hwmod_class = {
2815 .name = "usb_host_hs",
2816 .sysc = &omap44xx_usb_host_hs_sysc,
2817 };
2818
2819 /* usb_host_hs */
2820 static struct omap_hwmod omap44xx_usb_host_hs_hwmod = {
2821 .name = "usb_host_hs",
2822 .class = &omap44xx_usb_host_hs_hwmod_class,
2823 .clkdm_name = "l3_init_clkdm",
2824 .main_clk = "usb_host_hs_fck",
2825 .prcm = {
2826 .omap4 = {
2827 .clkctrl_offs = OMAP4_CM_L3INIT_USB_HOST_CLKCTRL_OFFSET,
2828 .context_offs = OMAP4_RM_L3INIT_USB_HOST_CONTEXT_OFFSET,
2829 .modulemode = MODULEMODE_SWCTRL,
2830 },
2831 },
2832
2833 /*
2834 * Errata: USBHOST Configured In Smart-Idle Can Lead To a Deadlock
2835 * id: i660
2836 *
2837 * Description:
2838 * In the following configuration :
2839 * - USBHOST module is set to smart-idle mode
2840 * - PRCM asserts idle_req to the USBHOST module ( This typically
2841 * happens when the system is going to a low power mode : all ports
2842 * have been suspended, the master part of the USBHOST module has
2843 * entered the standby state, and SW has cut the functional clocks)
2844 * - an USBHOST interrupt occurs before the module is able to answer
2845 * idle_ack, typically a remote wakeup IRQ.
2846 * Then the USB HOST module will enter a deadlock situation where it
2847 * is no more accessible nor functional.
2848 *
2849 * Workaround:
2850 * Don't use smart idle; use only force idle, hence HWMOD_SWSUP_SIDLE
2851 */
2852
2853 /*
2854 * Errata: USB host EHCI may stall when entering smart-standby mode
2855 * Id: i571
2856 *
2857 * Description:
2858 * When the USBHOST module is set to smart-standby mode, and when it is
2859 * ready to enter the standby state (i.e. all ports are suspended and
2860 * all attached devices are in suspend mode), then it can wrongly assert
2861 * the Mstandby signal too early while there are still some residual OCP
2862 * transactions ongoing. If this condition occurs, the internal state
2863 * machine may go to an undefined state and the USB link may be stuck
2864 * upon the next resume.
2865 *
2866 * Workaround:
2867 * Don't use smart standby; use only force standby,
2868 * hence HWMOD_SWSUP_MSTANDBY
2869 */
2870
2871 .flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY,
2872 };
2873
2874 /*
2875 * 'usb_otg_hs' class
2876 * high-speed on-the-go universal serial bus (usb_otg_hs) controller
2877 */
2878
2879 static struct omap_hwmod_class_sysconfig omap44xx_usb_otg_hs_sysc = {
2880 .rev_offs = 0x0400,
2881 .sysc_offs = 0x0404,
2882 .syss_offs = 0x0408,
2883 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_ENAWAKEUP |
2884 SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE |
2885 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
2886 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2887 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
2888 MSTANDBY_SMART),
2889 .sysc_fields = &omap_hwmod_sysc_type1,
2890 };
2891
2892 static struct omap_hwmod_class omap44xx_usb_otg_hs_hwmod_class = {
2893 .name = "usb_otg_hs",
2894 .sysc = &omap44xx_usb_otg_hs_sysc,
2895 };
2896
2897 /* usb_otg_hs */
2898 static struct omap_hwmod_opt_clk usb_otg_hs_opt_clks[] = {
2899 { .role = "xclk", .clk = "usb_otg_hs_xclk" },
2900 };
2901
2902 static struct omap_hwmod omap44xx_usb_otg_hs_hwmod = {
2903 .name = "usb_otg_hs",
2904 .class = &omap44xx_usb_otg_hs_hwmod_class,
2905 .clkdm_name = "l3_init_clkdm",
2906 .flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY,
2907 .main_clk = "usb_otg_hs_ick",
2908 .prcm = {
2909 .omap4 = {
2910 .clkctrl_offs = OMAP4_CM_L3INIT_USB_OTG_CLKCTRL_OFFSET,
2911 .context_offs = OMAP4_RM_L3INIT_USB_OTG_CONTEXT_OFFSET,
2912 .modulemode = MODULEMODE_HWCTRL,
2913 },
2914 },
2915 .opt_clks = usb_otg_hs_opt_clks,
2916 .opt_clks_cnt = ARRAY_SIZE(usb_otg_hs_opt_clks),
2917 };
2918
2919 /*
2920 * 'usb_tll_hs' class
2921 * usb_tll_hs module is the adapter on the usb_host_hs ports
2922 */
2923
2924 static struct omap_hwmod_class_sysconfig omap44xx_usb_tll_hs_sysc = {
2925 .rev_offs = 0x0000,
2926 .sysc_offs = 0x0010,
2927 .syss_offs = 0x0014,
2928 .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
2929 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
2930 SYSC_HAS_AUTOIDLE),
2931 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2932 .sysc_fields = &omap_hwmod_sysc_type1,
2933 };
2934
2935 static struct omap_hwmod_class omap44xx_usb_tll_hs_hwmod_class = {
2936 .name = "usb_tll_hs",
2937 .sysc = &omap44xx_usb_tll_hs_sysc,
2938 };
2939
2940 static struct omap_hwmod omap44xx_usb_tll_hs_hwmod = {
2941 .name = "usb_tll_hs",
2942 .class = &omap44xx_usb_tll_hs_hwmod_class,
2943 .clkdm_name = "l3_init_clkdm",
2944 .main_clk = "usb_tll_hs_ick",
2945 .prcm = {
2946 .omap4 = {
2947 .clkctrl_offs = OMAP4_CM_L3INIT_USB_TLL_CLKCTRL_OFFSET,
2948 .context_offs = OMAP4_RM_L3INIT_USB_TLL_CONTEXT_OFFSET,
2949 .modulemode = MODULEMODE_HWCTRL,
2950 },
2951 },
2952 };
2953
2954 /*
2955 * 'wd_timer' class
2956 * 32-bit watchdog upward counter that generates a pulse on the reset pin on
2957 * overflow condition
2958 */
2959
2960 static struct omap_hwmod_class_sysconfig omap44xx_wd_timer_sysc = {
2961 .rev_offs = 0x0000,
2962 .sysc_offs = 0x0010,
2963 .syss_offs = 0x0014,
2964 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_SIDLEMODE |
2965 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
2966 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2967 SIDLE_SMART_WKUP),
2968 .sysc_fields = &omap_hwmod_sysc_type1,
2969 };
2970
2971 static struct omap_hwmod_class omap44xx_wd_timer_hwmod_class = {
2972 .name = "wd_timer",
2973 .sysc = &omap44xx_wd_timer_sysc,
2974 .pre_shutdown = &omap2_wd_timer_disable,
2975 .reset = &omap2_wd_timer_reset,
2976 };
2977
2978 /* wd_timer2 */
2979 static struct omap_hwmod omap44xx_wd_timer2_hwmod = {
2980 .name = "wd_timer2",
2981 .class = &omap44xx_wd_timer_hwmod_class,
2982 .clkdm_name = "l4_wkup_clkdm",
2983 .main_clk = "sys_32k_ck",
2984 .prcm = {
2985 .omap4 = {
2986 .clkctrl_offs = OMAP4_CM_WKUP_WDT2_CLKCTRL_OFFSET,
2987 .context_offs = OMAP4_RM_WKUP_WDT2_CONTEXT_OFFSET,
2988 .modulemode = MODULEMODE_SWCTRL,
2989 },
2990 },
2991 };
2992
2993 /* wd_timer3 */
2994 static struct omap_hwmod omap44xx_wd_timer3_hwmod = {
2995 .name = "wd_timer3",
2996 .class = &omap44xx_wd_timer_hwmod_class,
2997 .clkdm_name = "abe_clkdm",
2998 .main_clk = "sys_32k_ck",
2999 .prcm = {
3000 .omap4 = {
3001 .clkctrl_offs = OMAP4_CM1_ABE_WDT3_CLKCTRL_OFFSET,
3002 .context_offs = OMAP4_RM_ABE_WDT3_CONTEXT_OFFSET,
3003 .modulemode = MODULEMODE_SWCTRL,
3004 },
3005 },
3006 };
3007
3008
3009 /*
3010 * interfaces
3011 */
3012
3013 /* l3_main_1 -> dmm */
3014 static struct omap_hwmod_ocp_if omap44xx_l3_main_1__dmm = {
3015 .master = &omap44xx_l3_main_1_hwmod,
3016 .slave = &omap44xx_dmm_hwmod,
3017 .clk = "l3_div_ck",
3018 .user = OCP_USER_SDMA,
3019 };
3020
3021 /* mpu -> dmm */
3022 static struct omap_hwmod_ocp_if omap44xx_mpu__dmm = {
3023 .master = &omap44xx_mpu_hwmod,
3024 .slave = &omap44xx_dmm_hwmod,
3025 .clk = "l3_div_ck",
3026 .user = OCP_USER_MPU,
3027 };
3028
3029 /* iva -> l3_instr */
3030 static struct omap_hwmod_ocp_if omap44xx_iva__l3_instr = {
3031 .master = &omap44xx_iva_hwmod,
3032 .slave = &omap44xx_l3_instr_hwmod,
3033 .clk = "l3_div_ck",
3034 .user = OCP_USER_MPU | OCP_USER_SDMA,
3035 };
3036
3037 /* l3_main_3 -> l3_instr */
3038 static struct omap_hwmod_ocp_if omap44xx_l3_main_3__l3_instr = {
3039 .master = &omap44xx_l3_main_3_hwmod,
3040 .slave = &omap44xx_l3_instr_hwmod,
3041 .clk = "l3_div_ck",
3042 .user = OCP_USER_MPU | OCP_USER_SDMA,
3043 };
3044
3045 /* ocp_wp_noc -> l3_instr */
3046 static struct omap_hwmod_ocp_if omap44xx_ocp_wp_noc__l3_instr = {
3047 .master = &omap44xx_ocp_wp_noc_hwmod,
3048 .slave = &omap44xx_l3_instr_hwmod,
3049 .clk = "l3_div_ck",
3050 .user = OCP_USER_MPU | OCP_USER_SDMA,
3051 };
3052
3053 /* dsp -> l3_main_1 */
3054 static struct omap_hwmod_ocp_if omap44xx_dsp__l3_main_1 = {
3055 .master = &omap44xx_dsp_hwmod,
3056 .slave = &omap44xx_l3_main_1_hwmod,
3057 .clk = "l3_div_ck",
3058 .user = OCP_USER_MPU | OCP_USER_SDMA,
3059 };
3060
3061 /* dss -> l3_main_1 */
3062 static struct omap_hwmod_ocp_if omap44xx_dss__l3_main_1 = {
3063 .master = &omap44xx_dss_hwmod,
3064 .slave = &omap44xx_l3_main_1_hwmod,
3065 .clk = "l3_div_ck",
3066 .user = OCP_USER_MPU | OCP_USER_SDMA,
3067 };
3068
3069 /* l3_main_2 -> l3_main_1 */
3070 static struct omap_hwmod_ocp_if omap44xx_l3_main_2__l3_main_1 = {
3071 .master = &omap44xx_l3_main_2_hwmod,
3072 .slave = &omap44xx_l3_main_1_hwmod,
3073 .clk = "l3_div_ck",
3074 .user = OCP_USER_MPU | OCP_USER_SDMA,
3075 };
3076
3077 /* l4_cfg -> l3_main_1 */
3078 static struct omap_hwmod_ocp_if omap44xx_l4_cfg__l3_main_1 = {
3079 .master = &omap44xx_l4_cfg_hwmod,
3080 .slave = &omap44xx_l3_main_1_hwmod,
3081 .clk = "l4_div_ck",
3082 .user = OCP_USER_MPU | OCP_USER_SDMA,
3083 };
3084
3085 /* mmc1 -> l3_main_1 */
3086 static struct omap_hwmod_ocp_if omap44xx_mmc1__l3_main_1 = {
3087 .master = &omap44xx_mmc1_hwmod,
3088 .slave = &omap44xx_l3_main_1_hwmod,
3089 .clk = "l3_div_ck",
3090 .user = OCP_USER_MPU | OCP_USER_SDMA,
3091 };
3092
3093 /* mmc2 -> l3_main_1 */
3094 static struct omap_hwmod_ocp_if omap44xx_mmc2__l3_main_1 = {
3095 .master = &omap44xx_mmc2_hwmod,
3096 .slave = &omap44xx_l3_main_1_hwmod,
3097 .clk = "l3_div_ck",
3098 .user = OCP_USER_MPU | OCP_USER_SDMA,
3099 };
3100
3101 /* mpu -> l3_main_1 */
3102 static struct omap_hwmod_ocp_if omap44xx_mpu__l3_main_1 = {
3103 .master = &omap44xx_mpu_hwmod,
3104 .slave = &omap44xx_l3_main_1_hwmod,
3105 .clk = "l3_div_ck",
3106 .user = OCP_USER_MPU,
3107 };
3108
3109 /* debugss -> l3_main_2 */
3110 static struct omap_hwmod_ocp_if omap44xx_debugss__l3_main_2 = {
3111 .master = &omap44xx_debugss_hwmod,
3112 .slave = &omap44xx_l3_main_2_hwmod,
3113 .clk = "dbgclk_mux_ck",
3114 .user = OCP_USER_MPU | OCP_USER_SDMA,
3115 };
3116
3117 /* dma_system -> l3_main_2 */
3118 static struct omap_hwmod_ocp_if omap44xx_dma_system__l3_main_2 = {
3119 .master = &omap44xx_dma_system_hwmod,
3120 .slave = &omap44xx_l3_main_2_hwmod,
3121 .clk = "l3_div_ck",
3122 .user = OCP_USER_MPU | OCP_USER_SDMA,
3123 };
3124
3125 /* fdif -> l3_main_2 */
3126 static struct omap_hwmod_ocp_if omap44xx_fdif__l3_main_2 = {
3127 .master = &omap44xx_fdif_hwmod,
3128 .slave = &omap44xx_l3_main_2_hwmod,
3129 .clk = "l3_div_ck",
3130 .user = OCP_USER_MPU | OCP_USER_SDMA,
3131 };
3132
3133 /* gpu -> l3_main_2 */
3134 static struct omap_hwmod_ocp_if omap44xx_gpu__l3_main_2 = {
3135 .master = &omap44xx_gpu_hwmod,
3136 .slave = &omap44xx_l3_main_2_hwmod,
3137 .clk = "l3_div_ck",
3138 .user = OCP_USER_MPU | OCP_USER_SDMA,
3139 };
3140
3141 /* hsi -> l3_main_2 */
3142 static struct omap_hwmod_ocp_if omap44xx_hsi__l3_main_2 = {
3143 .master = &omap44xx_hsi_hwmod,
3144 .slave = &omap44xx_l3_main_2_hwmod,
3145 .clk = "l3_div_ck",
3146 .user = OCP_USER_MPU | OCP_USER_SDMA,
3147 };
3148
3149 /* ipu -> l3_main_2 */
3150 static struct omap_hwmod_ocp_if omap44xx_ipu__l3_main_2 = {
3151 .master = &omap44xx_ipu_hwmod,
3152 .slave = &omap44xx_l3_main_2_hwmod,
3153 .clk = "l3_div_ck",
3154 .user = OCP_USER_MPU | OCP_USER_SDMA,
3155 };
3156
3157 /* iss -> l3_main_2 */
3158 static struct omap_hwmod_ocp_if omap44xx_iss__l3_main_2 = {
3159 .master = &omap44xx_iss_hwmod,
3160 .slave = &omap44xx_l3_main_2_hwmod,
3161 .clk = "l3_div_ck",
3162 .user = OCP_USER_MPU | OCP_USER_SDMA,
3163 };
3164
3165 /* iva -> l3_main_2 */
3166 static struct omap_hwmod_ocp_if omap44xx_iva__l3_main_2 = {
3167 .master = &omap44xx_iva_hwmod,
3168 .slave = &omap44xx_l3_main_2_hwmod,
3169 .clk = "l3_div_ck",
3170 .user = OCP_USER_MPU | OCP_USER_SDMA,
3171 };
3172
3173 /* l3_main_1 -> l3_main_2 */
3174 static struct omap_hwmod_ocp_if omap44xx_l3_main_1__l3_main_2 = {
3175 .master = &omap44xx_l3_main_1_hwmod,
3176 .slave = &omap44xx_l3_main_2_hwmod,
3177 .clk = "l3_div_ck",
3178 .user = OCP_USER_MPU,
3179 };
3180
3181 /* l4_cfg -> l3_main_2 */
3182 static struct omap_hwmod_ocp_if omap44xx_l4_cfg__l3_main_2 = {
3183 .master = &omap44xx_l4_cfg_hwmod,
3184 .slave = &omap44xx_l3_main_2_hwmod,
3185 .clk = "l4_div_ck",
3186 .user = OCP_USER_MPU | OCP_USER_SDMA,
3187 };
3188
3189 /* usb_host_fs -> l3_main_2 */
3190 static struct omap_hwmod_ocp_if __maybe_unused omap44xx_usb_host_fs__l3_main_2 = {
3191 .master = &omap44xx_usb_host_fs_hwmod,
3192 .slave = &omap44xx_l3_main_2_hwmod,
3193 .clk = "l3_div_ck",
3194 .user = OCP_USER_MPU | OCP_USER_SDMA,
3195 };
3196
3197 /* usb_host_hs -> l3_main_2 */
3198 static struct omap_hwmod_ocp_if omap44xx_usb_host_hs__l3_main_2 = {
3199 .master = &omap44xx_usb_host_hs_hwmod,
3200 .slave = &omap44xx_l3_main_2_hwmod,
3201 .clk = "l3_div_ck",
3202 .user = OCP_USER_MPU | OCP_USER_SDMA,
3203 };
3204
3205 /* usb_otg_hs -> l3_main_2 */
3206 static struct omap_hwmod_ocp_if omap44xx_usb_otg_hs__l3_main_2 = {
3207 .master = &omap44xx_usb_otg_hs_hwmod,
3208 .slave = &omap44xx_l3_main_2_hwmod,
3209 .clk = "l3_div_ck",
3210 .user = OCP_USER_MPU | OCP_USER_SDMA,
3211 };
3212
3213 /* l3_main_1 -> l3_main_3 */
3214 static struct omap_hwmod_ocp_if omap44xx_l3_main_1__l3_main_3 = {
3215 .master = &omap44xx_l3_main_1_hwmod,
3216 .slave = &omap44xx_l3_main_3_hwmod,
3217 .clk = "l3_div_ck",
3218 .user = OCP_USER_MPU,
3219 };
3220
3221 /* l3_main_2 -> l3_main_3 */
3222 static struct omap_hwmod_ocp_if omap44xx_l3_main_2__l3_main_3 = {
3223 .master = &omap44xx_l3_main_2_hwmod,
3224 .slave = &omap44xx_l3_main_3_hwmod,
3225 .clk = "l3_div_ck",
3226 .user = OCP_USER_MPU | OCP_USER_SDMA,
3227 };
3228
3229 /* l4_cfg -> l3_main_3 */
3230 static struct omap_hwmod_ocp_if omap44xx_l4_cfg__l3_main_3 = {
3231 .master = &omap44xx_l4_cfg_hwmod,
3232 .slave = &omap44xx_l3_main_3_hwmod,
3233 .clk = "l4_div_ck",
3234 .user = OCP_USER_MPU | OCP_USER_SDMA,
3235 };
3236
3237 /* aess -> l4_abe */
3238 static struct omap_hwmod_ocp_if __maybe_unused omap44xx_aess__l4_abe = {
3239 .master = &omap44xx_aess_hwmod,
3240 .slave = &omap44xx_l4_abe_hwmod,
3241 .clk = "ocp_abe_iclk",
3242 .user = OCP_USER_MPU | OCP_USER_SDMA,
3243 };
3244
3245 /* dsp -> l4_abe */
3246 static struct omap_hwmod_ocp_if omap44xx_dsp__l4_abe = {
3247 .master = &omap44xx_dsp_hwmod,
3248 .slave = &omap44xx_l4_abe_hwmod,
3249 .clk = "ocp_abe_iclk",
3250 .user = OCP_USER_MPU | OCP_USER_SDMA,
3251 };
3252
3253 /* l3_main_1 -> l4_abe */
3254 static struct omap_hwmod_ocp_if omap44xx_l3_main_1__l4_abe = {
3255 .master = &omap44xx_l3_main_1_hwmod,
3256 .slave = &omap44xx_l4_abe_hwmod,
3257 .clk = "l3_div_ck",
3258 .user = OCP_USER_MPU | OCP_USER_SDMA,
3259 };
3260
3261 /* mpu -> l4_abe */
3262 static struct omap_hwmod_ocp_if omap44xx_mpu__l4_abe = {
3263 .master = &omap44xx_mpu_hwmod,
3264 .slave = &omap44xx_l4_abe_hwmod,
3265 .clk = "ocp_abe_iclk",
3266 .user = OCP_USER_MPU | OCP_USER_SDMA,
3267 };
3268
3269 /* l3_main_1 -> l4_cfg */
3270 static struct omap_hwmod_ocp_if omap44xx_l3_main_1__l4_cfg = {
3271 .master = &omap44xx_l3_main_1_hwmod,
3272 .slave = &omap44xx_l4_cfg_hwmod,
3273 .clk = "l3_div_ck",
3274 .user = OCP_USER_MPU | OCP_USER_SDMA,
3275 };
3276
3277 /* l3_main_2 -> l4_per */
3278 static struct omap_hwmod_ocp_if omap44xx_l3_main_2__l4_per = {
3279 .master = &omap44xx_l3_main_2_hwmod,
3280 .slave = &omap44xx_l4_per_hwmod,
3281 .clk = "l3_div_ck",
3282 .user = OCP_USER_MPU | OCP_USER_SDMA,
3283 };
3284
3285 /* l4_cfg -> l4_wkup */
3286 static struct omap_hwmod_ocp_if omap44xx_l4_cfg__l4_wkup = {
3287 .master = &omap44xx_l4_cfg_hwmod,
3288 .slave = &omap44xx_l4_wkup_hwmod,
3289 .clk = "l4_div_ck",
3290 .user = OCP_USER_MPU | OCP_USER_SDMA,
3291 };
3292
3293 /* mpu -> mpu_private */
3294 static struct omap_hwmod_ocp_if omap44xx_mpu__mpu_private = {
3295 .master = &omap44xx_mpu_hwmod,
3296 .slave = &omap44xx_mpu_private_hwmod,
3297 .clk = "l3_div_ck",
3298 .user = OCP_USER_MPU | OCP_USER_SDMA,
3299 };
3300
3301 /* l4_cfg -> ocp_wp_noc */
3302 static struct omap_hwmod_ocp_if omap44xx_l4_cfg__ocp_wp_noc = {
3303 .master = &omap44xx_l4_cfg_hwmod,
3304 .slave = &omap44xx_ocp_wp_noc_hwmod,
3305 .clk = "l4_div_ck",
3306 .user = OCP_USER_MPU | OCP_USER_SDMA,
3307 };
3308
3309 /* l4_abe -> aess */
3310 static struct omap_hwmod_ocp_if __maybe_unused omap44xx_l4_abe__aess = {
3311 .master = &omap44xx_l4_abe_hwmod,
3312 .slave = &omap44xx_aess_hwmod,
3313 .clk = "ocp_abe_iclk",
3314 .user = OCP_USER_MPU,
3315 };
3316
3317 /* l4_abe -> aess (dma) */
3318 static struct omap_hwmod_ocp_if __maybe_unused omap44xx_l4_abe__aess_dma = {
3319 .master = &omap44xx_l4_abe_hwmod,
3320 .slave = &omap44xx_aess_hwmod,
3321 .clk = "ocp_abe_iclk",
3322 .user = OCP_USER_SDMA,
3323 };
3324
3325 /* l3_main_2 -> c2c */
3326 static struct omap_hwmod_ocp_if omap44xx_l3_main_2__c2c = {
3327 .master = &omap44xx_l3_main_2_hwmod,
3328 .slave = &omap44xx_c2c_hwmod,
3329 .clk = "l3_div_ck",
3330 .user = OCP_USER_MPU | OCP_USER_SDMA,
3331 };
3332
3333 /* l4_wkup -> counter_32k */
3334 static struct omap_hwmod_ocp_if omap44xx_l4_wkup__counter_32k = {
3335 .master = &omap44xx_l4_wkup_hwmod,
3336 .slave = &omap44xx_counter_32k_hwmod,
3337 .clk = "l4_wkup_clk_mux_ck",
3338 .user = OCP_USER_MPU | OCP_USER_SDMA,
3339 };
3340
3341 /* l4_cfg -> ctrl_module_core */
3342 static struct omap_hwmod_ocp_if omap44xx_l4_cfg__ctrl_module_core = {
3343 .master = &omap44xx_l4_cfg_hwmod,
3344 .slave = &omap44xx_ctrl_module_core_hwmod,
3345 .clk = "l4_div_ck",
3346 .user = OCP_USER_MPU | OCP_USER_SDMA,
3347 };
3348
3349 /* l4_cfg -> ctrl_module_pad_core */
3350 static struct omap_hwmod_ocp_if omap44xx_l4_cfg__ctrl_module_pad_core = {
3351 .master = &omap44xx_l4_cfg_hwmod,
3352 .slave = &omap44xx_ctrl_module_pad_core_hwmod,
3353 .clk = "l4_div_ck",
3354 .user = OCP_USER_MPU | OCP_USER_SDMA,
3355 };
3356
3357 /* l4_wkup -> ctrl_module_wkup */
3358 static struct omap_hwmod_ocp_if omap44xx_l4_wkup__ctrl_module_wkup = {
3359 .master = &omap44xx_l4_wkup_hwmod,
3360 .slave = &omap44xx_ctrl_module_wkup_hwmod,
3361 .clk = "l4_wkup_clk_mux_ck",
3362 .user = OCP_USER_MPU | OCP_USER_SDMA,
3363 };
3364
3365 /* l4_wkup -> ctrl_module_pad_wkup */
3366 static struct omap_hwmod_ocp_if omap44xx_l4_wkup__ctrl_module_pad_wkup = {
3367 .master = &omap44xx_l4_wkup_hwmod,
3368 .slave = &omap44xx_ctrl_module_pad_wkup_hwmod,
3369 .clk = "l4_wkup_clk_mux_ck",
3370 .user = OCP_USER_MPU | OCP_USER_SDMA,
3371 };
3372
3373 /* l3_instr -> debugss */
3374 static struct omap_hwmod_ocp_if omap44xx_l3_instr__debugss = {
3375 .master = &omap44xx_l3_instr_hwmod,
3376 .slave = &omap44xx_debugss_hwmod,
3377 .clk = "l3_div_ck",
3378 .user = OCP_USER_MPU | OCP_USER_SDMA,
3379 };
3380
3381 /* l4_cfg -> dma_system */
3382 static struct omap_hwmod_ocp_if omap44xx_l4_cfg__dma_system = {
3383 .master = &omap44xx_l4_cfg_hwmod,
3384 .slave = &omap44xx_dma_system_hwmod,
3385 .clk = "l4_div_ck",
3386 .user = OCP_USER_MPU | OCP_USER_SDMA,
3387 };
3388
3389 /* l4_abe -> dmic */
3390 static struct omap_hwmod_ocp_if omap44xx_l4_abe__dmic = {
3391 .master = &omap44xx_l4_abe_hwmod,
3392 .slave = &omap44xx_dmic_hwmod,
3393 .clk = "ocp_abe_iclk",
3394 .user = OCP_USER_MPU | OCP_USER_SDMA,
3395 };
3396
3397 /* dsp -> iva */
3398 static struct omap_hwmod_ocp_if omap44xx_dsp__iva = {
3399 .master = &omap44xx_dsp_hwmod,
3400 .slave = &omap44xx_iva_hwmod,
3401 .clk = "dpll_iva_m5x2_ck",
3402 .user = OCP_USER_DSP,
3403 };
3404
3405 /* dsp -> sl2if */
3406 static struct omap_hwmod_ocp_if __maybe_unused omap44xx_dsp__sl2if = {
3407 .master = &omap44xx_dsp_hwmod,
3408 .slave = &omap44xx_sl2if_hwmod,
3409 .clk = "dpll_iva_m5x2_ck",
3410 .user = OCP_USER_DSP,
3411 };
3412
3413 /* l4_cfg -> dsp */
3414 static struct omap_hwmod_ocp_if omap44xx_l4_cfg__dsp = {
3415 .master = &omap44xx_l4_cfg_hwmod,
3416 .slave = &omap44xx_dsp_hwmod,
3417 .clk = "l4_div_ck",
3418 .user = OCP_USER_MPU | OCP_USER_SDMA,
3419 };
3420
3421 /* l3_main_2 -> dss */
3422 static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss = {
3423 .master = &omap44xx_l3_main_2_hwmod,
3424 .slave = &omap44xx_dss_hwmod,
3425 .clk = "l3_div_ck",
3426 .user = OCP_USER_SDMA,
3427 };
3428
3429 /* l4_per -> dss */
3430 static struct omap_hwmod_ocp_if omap44xx_l4_per__dss = {
3431 .master = &omap44xx_l4_per_hwmod,
3432 .slave = &omap44xx_dss_hwmod,
3433 .clk = "l4_div_ck",
3434 .user = OCP_USER_MPU,
3435 };
3436
3437 /* l3_main_2 -> dss_dispc */
3438 static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_dispc = {
3439 .master = &omap44xx_l3_main_2_hwmod,
3440 .slave = &omap44xx_dss_dispc_hwmod,
3441 .clk = "l3_div_ck",
3442 .user = OCP_USER_SDMA,
3443 };
3444
3445 /* l4_per -> dss_dispc */
3446 static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_dispc = {
3447 .master = &omap44xx_l4_per_hwmod,
3448 .slave = &omap44xx_dss_dispc_hwmod,
3449 .clk = "l4_div_ck",
3450 .user = OCP_USER_MPU,
3451 };
3452
3453 /* l3_main_2 -> dss_dsi1 */
3454 static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_dsi1 = {
3455 .master = &omap44xx_l3_main_2_hwmod,
3456 .slave = &omap44xx_dss_dsi1_hwmod,
3457 .clk = "l3_div_ck",
3458 .user = OCP_USER_SDMA,
3459 };
3460
3461 /* l4_per -> dss_dsi1 */
3462 static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_dsi1 = {
3463 .master = &omap44xx_l4_per_hwmod,
3464 .slave = &omap44xx_dss_dsi1_hwmod,
3465 .clk = "l4_div_ck",
3466 .user = OCP_USER_MPU,
3467 };
3468
3469 /* l3_main_2 -> dss_dsi2 */
3470 static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_dsi2 = {
3471 .master = &omap44xx_l3_main_2_hwmod,
3472 .slave = &omap44xx_dss_dsi2_hwmod,
3473 .clk = "l3_div_ck",
3474 .user = OCP_USER_SDMA,
3475 };
3476
3477 /* l4_per -> dss_dsi2 */
3478 static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_dsi2 = {
3479 .master = &omap44xx_l4_per_hwmod,
3480 .slave = &omap44xx_dss_dsi2_hwmod,
3481 .clk = "l4_div_ck",
3482 .user = OCP_USER_MPU,
3483 };
3484
3485 /* l3_main_2 -> dss_hdmi */
3486 static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_hdmi = {
3487 .master = &omap44xx_l3_main_2_hwmod,
3488 .slave = &omap44xx_dss_hdmi_hwmod,
3489 .clk = "l3_div_ck",
3490 .user = OCP_USER_SDMA,
3491 };
3492
3493 /* l4_per -> dss_hdmi */
3494 static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_hdmi = {
3495 .master = &omap44xx_l4_per_hwmod,
3496 .slave = &omap44xx_dss_hdmi_hwmod,
3497 .clk = "l4_div_ck",
3498 .user = OCP_USER_MPU,
3499 };
3500
3501 /* l3_main_2 -> dss_rfbi */
3502 static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_rfbi = {
3503 .master = &omap44xx_l3_main_2_hwmod,
3504 .slave = &omap44xx_dss_rfbi_hwmod,
3505 .clk = "l3_div_ck",
3506 .user = OCP_USER_SDMA,
3507 };
3508
3509 /* l4_per -> dss_rfbi */
3510 static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_rfbi = {
3511 .master = &omap44xx_l4_per_hwmod,
3512 .slave = &omap44xx_dss_rfbi_hwmod,
3513 .clk = "l4_div_ck",
3514 .user = OCP_USER_MPU,
3515 };
3516
3517 /* l3_main_2 -> dss_venc */
3518 static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_venc = {
3519 .master = &omap44xx_l3_main_2_hwmod,
3520 .slave = &omap44xx_dss_venc_hwmod,
3521 .clk = "l3_div_ck",
3522 .user = OCP_USER_SDMA,
3523 };
3524
3525 /* l4_per -> dss_venc */
3526 static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_venc = {
3527 .master = &omap44xx_l4_per_hwmod,
3528 .slave = &omap44xx_dss_venc_hwmod,
3529 .clk = "l4_div_ck",
3530 .user = OCP_USER_MPU,
3531 };
3532
3533 /* l3_main_2 -> sham */
3534 static struct omap_hwmod_ocp_if omap44xx_l3_main_2__sha0 = {
3535 .master = &omap44xx_l3_main_2_hwmod,
3536 .slave = &omap44xx_sha0_hwmod,
3537 .clk = "l3_div_ck",
3538 .user = OCP_USER_MPU | OCP_USER_SDMA,
3539 };
3540
3541 /* l4_per -> elm */
3542 static struct omap_hwmod_ocp_if omap44xx_l4_per__elm = {
3543 .master = &omap44xx_l4_per_hwmod,
3544 .slave = &omap44xx_elm_hwmod,
3545 .clk = "l4_div_ck",
3546 .user = OCP_USER_MPU | OCP_USER_SDMA,
3547 };
3548
3549 /* l4_cfg -> fdif */
3550 static struct omap_hwmod_ocp_if omap44xx_l4_cfg__fdif = {
3551 .master = &omap44xx_l4_cfg_hwmod,
3552 .slave = &omap44xx_fdif_hwmod,
3553 .clk = "l4_div_ck",
3554 .user = OCP_USER_MPU | OCP_USER_SDMA,
3555 };
3556
3557 /* l4_wkup -> gpio1 */
3558 static struct omap_hwmod_ocp_if omap44xx_l4_wkup__gpio1 = {
3559 .master = &omap44xx_l4_wkup_hwmod,
3560 .slave = &omap44xx_gpio1_hwmod,
3561 .clk = "l4_wkup_clk_mux_ck",
3562 .user = OCP_USER_MPU | OCP_USER_SDMA,
3563 };
3564
3565 /* l4_per -> gpio2 */
3566 static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio2 = {
3567 .master = &omap44xx_l4_per_hwmod,
3568 .slave = &omap44xx_gpio2_hwmod,
3569 .clk = "l4_div_ck",
3570 .user = OCP_USER_MPU | OCP_USER_SDMA,
3571 };
3572
3573 /* l4_per -> gpio3 */
3574 static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio3 = {
3575 .master = &omap44xx_l4_per_hwmod,
3576 .slave = &omap44xx_gpio3_hwmod,
3577 .clk = "l4_div_ck",
3578 .user = OCP_USER_MPU | OCP_USER_SDMA,
3579 };
3580
3581 /* l4_per -> gpio4 */
3582 static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio4 = {
3583 .master = &omap44xx_l4_per_hwmod,
3584 .slave = &omap44xx_gpio4_hwmod,
3585 .clk = "l4_div_ck",
3586 .user = OCP_USER_MPU | OCP_USER_SDMA,
3587 };
3588
3589 /* l4_per -> gpio5 */
3590 static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio5 = {
3591 .master = &omap44xx_l4_per_hwmod,
3592 .slave = &omap44xx_gpio5_hwmod,
3593 .clk = "l4_div_ck",
3594 .user = OCP_USER_MPU | OCP_USER_SDMA,
3595 };
3596
3597 /* l4_per -> gpio6 */
3598 static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio6 = {
3599 .master = &omap44xx_l4_per_hwmod,
3600 .slave = &omap44xx_gpio6_hwmod,
3601 .clk = "l4_div_ck",
3602 .user = OCP_USER_MPU | OCP_USER_SDMA,
3603 };
3604
3605 /* l3_main_2 -> gpmc */
3606 static struct omap_hwmod_ocp_if omap44xx_l3_main_2__gpmc = {
3607 .master = &omap44xx_l3_main_2_hwmod,
3608 .slave = &omap44xx_gpmc_hwmod,
3609 .clk = "l3_div_ck",
3610 .user = OCP_USER_MPU | OCP_USER_SDMA,
3611 };
3612
3613 /* l3_main_2 -> gpu */
3614 static struct omap_hwmod_ocp_if omap44xx_l3_main_2__gpu = {
3615 .master = &omap44xx_l3_main_2_hwmod,
3616 .slave = &omap44xx_gpu_hwmod,
3617 .clk = "l3_div_ck",
3618 .user = OCP_USER_MPU | OCP_USER_SDMA,
3619 };
3620
3621 /* l4_per -> hdq1w */
3622 static struct omap_hwmod_ocp_if omap44xx_l4_per__hdq1w = {
3623 .master = &omap44xx_l4_per_hwmod,
3624 .slave = &omap44xx_hdq1w_hwmod,
3625 .clk = "l4_div_ck",
3626 .user = OCP_USER_MPU | OCP_USER_SDMA,
3627 };
3628
3629 /* l4_cfg -> hsi */
3630 static struct omap_hwmod_ocp_if omap44xx_l4_cfg__hsi = {
3631 .master = &omap44xx_l4_cfg_hwmod,
3632 .slave = &omap44xx_hsi_hwmod,
3633 .clk = "l4_div_ck",
3634 .user = OCP_USER_MPU | OCP_USER_SDMA,
3635 };
3636
3637 /* l4_per -> i2c1 */
3638 static struct omap_hwmod_ocp_if omap44xx_l4_per__i2c1 = {
3639 .master = &omap44xx_l4_per_hwmod,
3640 .slave = &omap44xx_i2c1_hwmod,
3641 .clk = "l4_div_ck",
3642 .user = OCP_USER_MPU | OCP_USER_SDMA,
3643 };
3644
3645 /* l4_per -> i2c2 */
3646 static struct omap_hwmod_ocp_if omap44xx_l4_per__i2c2 = {
3647 .master = &omap44xx_l4_per_hwmod,
3648 .slave = &omap44xx_i2c2_hwmod,
3649 .clk = "l4_div_ck",
3650 .user = OCP_USER_MPU | OCP_USER_SDMA,
3651 };
3652
3653 /* l4_per -> i2c3 */
3654 static struct omap_hwmod_ocp_if omap44xx_l4_per__i2c3 = {
3655 .master = &omap44xx_l4_per_hwmod,
3656 .slave = &omap44xx_i2c3_hwmod,
3657 .clk = "l4_div_ck",
3658 .user = OCP_USER_MPU | OCP_USER_SDMA,
3659 };
3660
3661 /* l4_per -> i2c4 */
3662 static struct omap_hwmod_ocp_if omap44xx_l4_per__i2c4 = {
3663 .master = &omap44xx_l4_per_hwmod,
3664 .slave = &omap44xx_i2c4_hwmod,
3665 .clk = "l4_div_ck",
3666 .user = OCP_USER_MPU | OCP_USER_SDMA,
3667 };
3668
3669 /* l3_main_2 -> ipu */
3670 static struct omap_hwmod_ocp_if omap44xx_l3_main_2__ipu = {
3671 .master = &omap44xx_l3_main_2_hwmod,
3672 .slave = &omap44xx_ipu_hwmod,
3673 .clk = "l3_div_ck",
3674 .user = OCP_USER_MPU | OCP_USER_SDMA,
3675 };
3676
3677 /* l3_main_2 -> iss */
3678 static struct omap_hwmod_ocp_if omap44xx_l3_main_2__iss = {
3679 .master = &omap44xx_l3_main_2_hwmod,
3680 .slave = &omap44xx_iss_hwmod,
3681 .clk = "l3_div_ck",
3682 .user = OCP_USER_MPU | OCP_USER_SDMA,
3683 };
3684
3685 /* iva -> sl2if */
3686 static struct omap_hwmod_ocp_if __maybe_unused omap44xx_iva__sl2if = {
3687 .master = &omap44xx_iva_hwmod,
3688 .slave = &omap44xx_sl2if_hwmod,
3689 .clk = "dpll_iva_m5x2_ck",
3690 .user = OCP_USER_IVA,
3691 };
3692
3693 /* l3_main_2 -> iva */
3694 static struct omap_hwmod_ocp_if omap44xx_l3_main_2__iva = {
3695 .master = &omap44xx_l3_main_2_hwmod,
3696 .slave = &omap44xx_iva_hwmod,
3697 .clk = "l3_div_ck",
3698 .user = OCP_USER_MPU,
3699 };
3700
3701 /* l4_wkup -> kbd */
3702 static struct omap_hwmod_ocp_if omap44xx_l4_wkup__kbd = {
3703 .master = &omap44xx_l4_wkup_hwmod,
3704 .slave = &omap44xx_kbd_hwmod,
3705 .clk = "l4_wkup_clk_mux_ck",
3706 .user = OCP_USER_MPU | OCP_USER_SDMA,
3707 };
3708
3709 /* l4_cfg -> mailbox */
3710 static struct omap_hwmod_ocp_if omap44xx_l4_cfg__mailbox = {
3711 .master = &omap44xx_l4_cfg_hwmod,
3712 .slave = &omap44xx_mailbox_hwmod,
3713 .clk = "l4_div_ck",
3714 .user = OCP_USER_MPU | OCP_USER_SDMA,
3715 };
3716
3717 /* l4_abe -> mcasp */
3718 static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcasp = {
3719 .master = &omap44xx_l4_abe_hwmod,
3720 .slave = &omap44xx_mcasp_hwmod,
3721 .clk = "ocp_abe_iclk",
3722 .user = OCP_USER_MPU,
3723 };
3724
3725 /* l4_abe -> mcasp (dma) */
3726 static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcasp_dma = {
3727 .master = &omap44xx_l4_abe_hwmod,
3728 .slave = &omap44xx_mcasp_hwmod,
3729 .clk = "ocp_abe_iclk",
3730 .user = OCP_USER_SDMA,
3731 };
3732
3733 /* l4_abe -> mcbsp1 */
3734 static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp1 = {
3735 .master = &omap44xx_l4_abe_hwmod,
3736 .slave = &omap44xx_mcbsp1_hwmod,
3737 .clk = "ocp_abe_iclk",
3738 .user = OCP_USER_MPU | OCP_USER_SDMA,
3739 };
3740
3741 /* l4_abe -> mcbsp2 */
3742 static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp2 = {
3743 .master = &omap44xx_l4_abe_hwmod,
3744 .slave = &omap44xx_mcbsp2_hwmod,
3745 .clk = "ocp_abe_iclk",
3746 .user = OCP_USER_MPU | OCP_USER_SDMA,
3747 };
3748
3749 /* l4_abe -> mcbsp3 */
3750 static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp3 = {
3751 .master = &omap44xx_l4_abe_hwmod,
3752 .slave = &omap44xx_mcbsp3_hwmod,
3753 .clk = "ocp_abe_iclk",
3754 .user = OCP_USER_MPU | OCP_USER_SDMA,
3755 };
3756
3757 /* l4_per -> mcbsp4 */
3758 static struct omap_hwmod_ocp_if omap44xx_l4_per__mcbsp4 = {
3759 .master = &omap44xx_l4_per_hwmod,
3760 .slave = &omap44xx_mcbsp4_hwmod,
3761 .clk = "l4_div_ck",
3762 .user = OCP_USER_MPU | OCP_USER_SDMA,
3763 };
3764
3765 /* l4_abe -> mcpdm */
3766 static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcpdm = {
3767 .master = &omap44xx_l4_abe_hwmod,
3768 .slave = &omap44xx_mcpdm_hwmod,
3769 .clk = "ocp_abe_iclk",
3770 .user = OCP_USER_MPU | OCP_USER_SDMA,
3771 };
3772
3773 /* l4_per -> mcspi1 */
3774 static struct omap_hwmod_ocp_if omap44xx_l4_per__mcspi1 = {
3775 .master = &omap44xx_l4_per_hwmod,
3776 .slave = &omap44xx_mcspi1_hwmod,
3777 .clk = "l4_div_ck",
3778 .user = OCP_USER_MPU | OCP_USER_SDMA,
3779 };
3780
3781 /* l4_per -> mcspi2 */
3782 static struct omap_hwmod_ocp_if omap44xx_l4_per__mcspi2 = {
3783 .master = &omap44xx_l4_per_hwmod,
3784 .slave = &omap44xx_mcspi2_hwmod,
3785 .clk = "l4_div_ck",
3786 .user = OCP_USER_MPU | OCP_USER_SDMA,
3787 };
3788
3789 /* l4_per -> mcspi3 */
3790 static struct omap_hwmod_ocp_if omap44xx_l4_per__mcspi3 = {
3791 .master = &omap44xx_l4_per_hwmod,
3792 .slave = &omap44xx_mcspi3_hwmod,
3793 .clk = "l4_div_ck",
3794 .user = OCP_USER_MPU | OCP_USER_SDMA,
3795 };
3796
3797 /* l4_per -> mcspi4 */
3798 static struct omap_hwmod_ocp_if omap44xx_l4_per__mcspi4 = {
3799 .master = &omap44xx_l4_per_hwmod,
3800 .slave = &omap44xx_mcspi4_hwmod,
3801 .clk = "l4_div_ck",
3802 .user = OCP_USER_MPU | OCP_USER_SDMA,
3803 };
3804
3805 /* l4_per -> mmc1 */
3806 static struct omap_hwmod_ocp_if omap44xx_l4_per__mmc1 = {
3807 .master = &omap44xx_l4_per_hwmod,
3808 .slave = &omap44xx_mmc1_hwmod,
3809 .clk = "l4_div_ck",
3810 .user = OCP_USER_MPU | OCP_USER_SDMA,
3811 };
3812
3813 /* l4_per -> mmc2 */
3814 static struct omap_hwmod_ocp_if omap44xx_l4_per__mmc2 = {
3815 .master = &omap44xx_l4_per_hwmod,
3816 .slave = &omap44xx_mmc2_hwmod,
3817 .clk = "l4_div_ck",
3818 .user = OCP_USER_MPU | OCP_USER_SDMA,
3819 };
3820
3821 /* l4_per -> mmc3 */
3822 static struct omap_hwmod_ocp_if omap44xx_l4_per__mmc3 = {
3823 .master = &omap44xx_l4_per_hwmod,
3824 .slave = &omap44xx_mmc3_hwmod,
3825 .clk = "l4_div_ck",
3826 .user = OCP_USER_MPU | OCP_USER_SDMA,
3827 };
3828
3829 /* l4_per -> mmc4 */
3830 static struct omap_hwmod_ocp_if omap44xx_l4_per__mmc4 = {
3831 .master = &omap44xx_l4_per_hwmod,
3832 .slave = &omap44xx_mmc4_hwmod,
3833 .clk = "l4_div_ck",
3834 .user = OCP_USER_MPU | OCP_USER_SDMA,
3835 };
3836
3837 /* l4_per -> mmc5 */
3838 static struct omap_hwmod_ocp_if omap44xx_l4_per__mmc5 = {
3839 .master = &omap44xx_l4_per_hwmod,
3840 .slave = &omap44xx_mmc5_hwmod,
3841 .clk = "l4_div_ck",
3842 .user = OCP_USER_MPU | OCP_USER_SDMA,
3843 };
3844
3845 /* l3_main_2 -> ocmc_ram */
3846 static struct omap_hwmod_ocp_if omap44xx_l3_main_2__ocmc_ram = {
3847 .master = &omap44xx_l3_main_2_hwmod,
3848 .slave = &omap44xx_ocmc_ram_hwmod,
3849 .clk = "l3_div_ck",
3850 .user = OCP_USER_MPU | OCP_USER_SDMA,
3851 };
3852
3853 /* l4_cfg -> ocp2scp_usb_phy */
3854 static struct omap_hwmod_ocp_if omap44xx_l4_cfg__ocp2scp_usb_phy = {
3855 .master = &omap44xx_l4_cfg_hwmod,
3856 .slave = &omap44xx_ocp2scp_usb_phy_hwmod,
3857 .clk = "l4_div_ck",
3858 .user = OCP_USER_MPU | OCP_USER_SDMA,
3859 };
3860
3861 /* mpu_private -> prcm_mpu */
3862 static struct omap_hwmod_ocp_if omap44xx_mpu_private__prcm_mpu = {
3863 .master = &omap44xx_mpu_private_hwmod,
3864 .slave = &omap44xx_prcm_mpu_hwmod,
3865 .clk = "l3_div_ck",
3866 .user = OCP_USER_MPU | OCP_USER_SDMA,
3867 };
3868
3869 /* l4_wkup -> cm_core_aon */
3870 static struct omap_hwmod_ocp_if omap44xx_l4_wkup__cm_core_aon = {
3871 .master = &omap44xx_l4_wkup_hwmod,
3872 .slave = &omap44xx_cm_core_aon_hwmod,
3873 .clk = "l4_wkup_clk_mux_ck",
3874 .user = OCP_USER_MPU | OCP_USER_SDMA,
3875 };
3876
3877 /* l4_cfg -> cm_core */
3878 static struct omap_hwmod_ocp_if omap44xx_l4_cfg__cm_core = {
3879 .master = &omap44xx_l4_cfg_hwmod,
3880 .slave = &omap44xx_cm_core_hwmod,
3881 .clk = "l4_div_ck",
3882 .user = OCP_USER_MPU | OCP_USER_SDMA,
3883 };
3884
3885 /* l4_wkup -> prm */
3886 static struct omap_hwmod_ocp_if omap44xx_l4_wkup__prm = {
3887 .master = &omap44xx_l4_wkup_hwmod,
3888 .slave = &omap44xx_prm_hwmod,
3889 .clk = "l4_wkup_clk_mux_ck",
3890 .user = OCP_USER_MPU | OCP_USER_SDMA,
3891 };
3892
3893 /* l4_wkup -> scrm */
3894 static struct omap_hwmod_ocp_if omap44xx_l4_wkup__scrm = {
3895 .master = &omap44xx_l4_wkup_hwmod,
3896 .slave = &omap44xx_scrm_hwmod,
3897 .clk = "l4_wkup_clk_mux_ck",
3898 .user = OCP_USER_MPU | OCP_USER_SDMA,
3899 };
3900
3901 /* l3_main_2 -> sl2if */
3902 static struct omap_hwmod_ocp_if __maybe_unused omap44xx_l3_main_2__sl2if = {
3903 .master = &omap44xx_l3_main_2_hwmod,
3904 .slave = &omap44xx_sl2if_hwmod,
3905 .clk = "l3_div_ck",
3906 .user = OCP_USER_MPU | OCP_USER_SDMA,
3907 };
3908
3909 /* l4_abe -> slimbus1 */
3910 static struct omap_hwmod_ocp_if omap44xx_l4_abe__slimbus1 = {
3911 .master = &omap44xx_l4_abe_hwmod,
3912 .slave = &omap44xx_slimbus1_hwmod,
3913 .clk = "ocp_abe_iclk",
3914 .user = OCP_USER_MPU,
3915 };
3916
3917 /* l4_abe -> slimbus1 (dma) */
3918 static struct omap_hwmod_ocp_if omap44xx_l4_abe__slimbus1_dma = {
3919 .master = &omap44xx_l4_abe_hwmod,
3920 .slave = &omap44xx_slimbus1_hwmod,
3921 .clk = "ocp_abe_iclk",
3922 .user = OCP_USER_SDMA,
3923 };
3924
3925 /* l4_per -> slimbus2 */
3926 static struct omap_hwmod_ocp_if omap44xx_l4_per__slimbus2 = {
3927 .master = &omap44xx_l4_per_hwmod,
3928 .slave = &omap44xx_slimbus2_hwmod,
3929 .clk = "l4_div_ck",
3930 .user = OCP_USER_MPU | OCP_USER_SDMA,
3931 };
3932
3933 /* l4_cfg -> smartreflex_core */
3934 static struct omap_hwmod_ocp_if omap44xx_l4_cfg__smartreflex_core = {
3935 .master = &omap44xx_l4_cfg_hwmod,
3936 .slave = &omap44xx_smartreflex_core_hwmod,
3937 .clk = "l4_div_ck",
3938 .user = OCP_USER_MPU | OCP_USER_SDMA,
3939 };
3940
3941 /* l4_cfg -> smartreflex_iva */
3942 static struct omap_hwmod_ocp_if omap44xx_l4_cfg__smartreflex_iva = {
3943 .master = &omap44xx_l4_cfg_hwmod,
3944 .slave = &omap44xx_smartreflex_iva_hwmod,
3945 .clk = "l4_div_ck",
3946 .user = OCP_USER_MPU | OCP_USER_SDMA,
3947 };
3948
3949 /* l4_cfg -> smartreflex_mpu */
3950 static struct omap_hwmod_ocp_if omap44xx_l4_cfg__smartreflex_mpu = {
3951 .master = &omap44xx_l4_cfg_hwmod,
3952 .slave = &omap44xx_smartreflex_mpu_hwmod,
3953 .clk = "l4_div_ck",
3954 .user = OCP_USER_MPU | OCP_USER_SDMA,
3955 };
3956
3957 /* l4_cfg -> spinlock */
3958 static struct omap_hwmod_ocp_if omap44xx_l4_cfg__spinlock = {
3959 .master = &omap44xx_l4_cfg_hwmod,
3960 .slave = &omap44xx_spinlock_hwmod,
3961 .clk = "l4_div_ck",
3962 .user = OCP_USER_MPU | OCP_USER_SDMA,
3963 };
3964
3965 /* l4_wkup -> timer1 */
3966 static struct omap_hwmod_ocp_if omap44xx_l4_wkup__timer1 = {
3967 .master = &omap44xx_l4_wkup_hwmod,
3968 .slave = &omap44xx_timer1_hwmod,
3969 .clk = "l4_wkup_clk_mux_ck",
3970 .user = OCP_USER_MPU | OCP_USER_SDMA,
3971 };
3972
3973 /* l4_per -> timer2 */
3974 static struct omap_hwmod_ocp_if omap44xx_l4_per__timer2 = {
3975 .master = &omap44xx_l4_per_hwmod,
3976 .slave = &omap44xx_timer2_hwmod,
3977 .clk = "l4_div_ck",
3978 .user = OCP_USER_MPU | OCP_USER_SDMA,
3979 };
3980
3981 /* l4_per -> timer3 */
3982 static struct omap_hwmod_ocp_if omap44xx_l4_per__timer3 = {
3983 .master = &omap44xx_l4_per_hwmod,
3984 .slave = &omap44xx_timer3_hwmod,
3985 .clk = "l4_div_ck",
3986 .user = OCP_USER_MPU | OCP_USER_SDMA,
3987 };
3988
3989 /* l4_per -> timer4 */
3990 static struct omap_hwmod_ocp_if omap44xx_l4_per__timer4 = {
3991 .master = &omap44xx_l4_per_hwmod,
3992 .slave = &omap44xx_timer4_hwmod,
3993 .clk = "l4_div_ck",
3994 .user = OCP_USER_MPU | OCP_USER_SDMA,
3995 };
3996
3997 /* l4_abe -> timer5 */
3998 static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer5 = {
3999 .master = &omap44xx_l4_abe_hwmod,
4000 .slave = &omap44xx_timer5_hwmod,
4001 .clk = "ocp_abe_iclk",
4002 .user = OCP_USER_MPU | OCP_USER_SDMA,
4003 };
4004
4005 /* l4_abe -> timer6 */
4006 static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer6 = {
4007 .master = &omap44xx_l4_abe_hwmod,
4008 .slave = &omap44xx_timer6_hwmod,
4009 .clk = "ocp_abe_iclk",
4010 .user = OCP_USER_MPU | OCP_USER_SDMA,
4011 };
4012
4013 /* l4_abe -> timer7 */
4014 static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer7 = {
4015 .master = &omap44xx_l4_abe_hwmod,
4016 .slave = &omap44xx_timer7_hwmod,
4017 .clk = "ocp_abe_iclk",
4018 .user = OCP_USER_MPU | OCP_USER_SDMA,
4019 };
4020
4021 /* l4_abe -> timer8 */
4022 static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer8 = {
4023 .master = &omap44xx_l4_abe_hwmod,
4024 .slave = &omap44xx_timer8_hwmod,
4025 .clk = "ocp_abe_iclk",
4026 .user = OCP_USER_MPU | OCP_USER_SDMA,
4027 };
4028
4029 /* l4_per -> timer9 */
4030 static struct omap_hwmod_ocp_if omap44xx_l4_per__timer9 = {
4031 .master = &omap44xx_l4_per_hwmod,
4032 .slave = &omap44xx_timer9_hwmod,
4033 .clk = "l4_div_ck",
4034 .user = OCP_USER_MPU | OCP_USER_SDMA,
4035 };
4036
4037 /* l4_per -> timer10 */
4038 static struct omap_hwmod_ocp_if omap44xx_l4_per__timer10 = {
4039 .master = &omap44xx_l4_per_hwmod,
4040 .slave = &omap44xx_timer10_hwmod,
4041 .clk = "l4_div_ck",
4042 .user = OCP_USER_MPU | OCP_USER_SDMA,
4043 };
4044
4045 /* l4_per -> timer11 */
4046 static struct omap_hwmod_ocp_if omap44xx_l4_per__timer11 = {
4047 .master = &omap44xx_l4_per_hwmod,
4048 .slave = &omap44xx_timer11_hwmod,
4049 .clk = "l4_div_ck",
4050 .user = OCP_USER_MPU | OCP_USER_SDMA,
4051 };
4052
4053 /* l4_per -> uart1 */
4054 static struct omap_hwmod_ocp_if omap44xx_l4_per__uart1 = {
4055 .master = &omap44xx_l4_per_hwmod,
4056 .slave = &omap44xx_uart1_hwmod,
4057 .clk = "l4_div_ck",
4058 .user = OCP_USER_MPU | OCP_USER_SDMA,
4059 };
4060
4061 /* l4_per -> uart2 */
4062 static struct omap_hwmod_ocp_if omap44xx_l4_per__uart2 = {
4063 .master = &omap44xx_l4_per_hwmod,
4064 .slave = &omap44xx_uart2_hwmod,
4065 .clk = "l4_div_ck",
4066 .user = OCP_USER_MPU | OCP_USER_SDMA,
4067 };
4068
4069 /* l4_per -> uart3 */
4070 static struct omap_hwmod_ocp_if omap44xx_l4_per__uart3 = {
4071 .master = &omap44xx_l4_per_hwmod,
4072 .slave = &omap44xx_uart3_hwmod,
4073 .clk = "l4_div_ck",
4074 .user = OCP_USER_MPU | OCP_USER_SDMA,
4075 };
4076
4077 /* l4_per -> uart4 */
4078 static struct omap_hwmod_ocp_if omap44xx_l4_per__uart4 = {
4079 .master = &omap44xx_l4_per_hwmod,
4080 .slave = &omap44xx_uart4_hwmod,
4081 .clk = "l4_div_ck",
4082 .user = OCP_USER_MPU | OCP_USER_SDMA,
4083 };
4084
4085 /* l4_cfg -> usb_host_fs */
4086 static struct omap_hwmod_ocp_if __maybe_unused omap44xx_l4_cfg__usb_host_fs = {
4087 .master = &omap44xx_l4_cfg_hwmod,
4088 .slave = &omap44xx_usb_host_fs_hwmod,
4089 .clk = "l4_div_ck",
4090 .user = OCP_USER_MPU | OCP_USER_SDMA,
4091 };
4092
4093 /* l4_cfg -> usb_host_hs */
4094 static struct omap_hwmod_ocp_if omap44xx_l4_cfg__usb_host_hs = {
4095 .master = &omap44xx_l4_cfg_hwmod,
4096 .slave = &omap44xx_usb_host_hs_hwmod,
4097 .clk = "l4_div_ck",
4098 .user = OCP_USER_MPU | OCP_USER_SDMA,
4099 };
4100
4101 /* l4_cfg -> usb_otg_hs */
4102 static struct omap_hwmod_ocp_if omap44xx_l4_cfg__usb_otg_hs = {
4103 .master = &omap44xx_l4_cfg_hwmod,
4104 .slave = &omap44xx_usb_otg_hs_hwmod,
4105 .clk = "l4_div_ck",
4106 .user = OCP_USER_MPU | OCP_USER_SDMA,
4107 };
4108
4109 /* l4_cfg -> usb_tll_hs */
4110 static struct omap_hwmod_ocp_if omap44xx_l4_cfg__usb_tll_hs = {
4111 .master = &omap44xx_l4_cfg_hwmod,
4112 .slave = &omap44xx_usb_tll_hs_hwmod,
4113 .clk = "l4_div_ck",
4114 .user = OCP_USER_MPU | OCP_USER_SDMA,
4115 };
4116
4117 /* l4_wkup -> wd_timer2 */
4118 static struct omap_hwmod_ocp_if omap44xx_l4_wkup__wd_timer2 = {
4119 .master = &omap44xx_l4_wkup_hwmod,
4120 .slave = &omap44xx_wd_timer2_hwmod,
4121 .clk = "l4_wkup_clk_mux_ck",
4122 .user = OCP_USER_MPU | OCP_USER_SDMA,
4123 };
4124
4125 /* l4_abe -> wd_timer3 */
4126 static struct omap_hwmod_ocp_if omap44xx_l4_abe__wd_timer3 = {
4127 .master = &omap44xx_l4_abe_hwmod,
4128 .slave = &omap44xx_wd_timer3_hwmod,
4129 .clk = "ocp_abe_iclk",
4130 .user = OCP_USER_MPU,
4131 };
4132
4133 /* l4_abe -> wd_timer3 (dma) */
4134 static struct omap_hwmod_ocp_if omap44xx_l4_abe__wd_timer3_dma = {
4135 .master = &omap44xx_l4_abe_hwmod,
4136 .slave = &omap44xx_wd_timer3_hwmod,
4137 .clk = "ocp_abe_iclk",
4138 .user = OCP_USER_SDMA,
4139 };
4140
4141 /* mpu -> emif1 */
4142 static struct omap_hwmod_ocp_if omap44xx_mpu__emif1 = {
4143 .master = &omap44xx_mpu_hwmod,
4144 .slave = &omap44xx_emif1_hwmod,
4145 .clk = "l3_div_ck",
4146 .user = OCP_USER_MPU | OCP_USER_SDMA,
4147 };
4148
4149 /* mpu -> emif2 */
4150 static struct omap_hwmod_ocp_if omap44xx_mpu__emif2 = {
4151 .master = &omap44xx_mpu_hwmod,
4152 .slave = &omap44xx_emif2_hwmod,
4153 .clk = "l3_div_ck",
4154 .user = OCP_USER_MPU | OCP_USER_SDMA,
4155 };
4156
4157 static struct omap_hwmod_ocp_if *omap44xx_hwmod_ocp_ifs[] __initdata = {
4158 &omap44xx_l3_main_1__dmm,
4159 &omap44xx_mpu__dmm,
4160 &omap44xx_iva__l3_instr,
4161 &omap44xx_l3_main_3__l3_instr,
4162 &omap44xx_ocp_wp_noc__l3_instr,
4163 &omap44xx_dsp__l3_main_1,
4164 &omap44xx_dss__l3_main_1,
4165 &omap44xx_l3_main_2__l3_main_1,
4166 &omap44xx_l4_cfg__l3_main_1,
4167 &omap44xx_mmc1__l3_main_1,
4168 &omap44xx_mmc2__l3_main_1,
4169 &omap44xx_mpu__l3_main_1,
4170 &omap44xx_debugss__l3_main_2,
4171 &omap44xx_dma_system__l3_main_2,
4172 &omap44xx_fdif__l3_main_2,
4173 &omap44xx_gpu__l3_main_2,
4174 &omap44xx_hsi__l3_main_2,
4175 &omap44xx_ipu__l3_main_2,
4176 &omap44xx_iss__l3_main_2,
4177 &omap44xx_iva__l3_main_2,
4178 &omap44xx_l3_main_1__l3_main_2,
4179 &omap44xx_l4_cfg__l3_main_2,
4180 /* &omap44xx_usb_host_fs__l3_main_2, */
4181 &omap44xx_usb_host_hs__l3_main_2,
4182 &omap44xx_usb_otg_hs__l3_main_2,
4183 &omap44xx_l3_main_1__l3_main_3,
4184 &omap44xx_l3_main_2__l3_main_3,
4185 &omap44xx_l4_cfg__l3_main_3,
4186 &omap44xx_aess__l4_abe,
4187 &omap44xx_dsp__l4_abe,
4188 &omap44xx_l3_main_1__l4_abe,
4189 &omap44xx_mpu__l4_abe,
4190 &omap44xx_l3_main_1__l4_cfg,
4191 &omap44xx_l3_main_2__l4_per,
4192 &omap44xx_l4_cfg__l4_wkup,
4193 &omap44xx_mpu__mpu_private,
4194 &omap44xx_l4_cfg__ocp_wp_noc,
4195 &omap44xx_l4_abe__aess,
4196 &omap44xx_l4_abe__aess_dma,
4197 &omap44xx_l3_main_2__c2c,
4198 &omap44xx_l4_wkup__counter_32k,
4199 &omap44xx_l4_cfg__ctrl_module_core,
4200 &omap44xx_l4_cfg__ctrl_module_pad_core,
4201 &omap44xx_l4_wkup__ctrl_module_wkup,
4202 &omap44xx_l4_wkup__ctrl_module_pad_wkup,
4203 &omap44xx_l3_instr__debugss,
4204 &omap44xx_l4_cfg__dma_system,
4205 &omap44xx_l4_abe__dmic,
4206 &omap44xx_dsp__iva,
4207 /* &omap44xx_dsp__sl2if, */
4208 &omap44xx_l4_cfg__dsp,
4209 &omap44xx_l3_main_2__dss,
4210 &omap44xx_l4_per__dss,
4211 &omap44xx_l3_main_2__dss_dispc,
4212 &omap44xx_l4_per__dss_dispc,
4213 &omap44xx_l3_main_2__dss_dsi1,
4214 &omap44xx_l4_per__dss_dsi1,
4215 &omap44xx_l3_main_2__dss_dsi2,
4216 &omap44xx_l4_per__dss_dsi2,
4217 &omap44xx_l3_main_2__dss_hdmi,
4218 &omap44xx_l4_per__dss_hdmi,
4219 &omap44xx_l3_main_2__dss_rfbi,
4220 &omap44xx_l4_per__dss_rfbi,
4221 &omap44xx_l3_main_2__dss_venc,
4222 &omap44xx_l4_per__dss_venc,
4223 &omap44xx_l4_per__elm,
4224 &omap44xx_l4_cfg__fdif,
4225 &omap44xx_l4_wkup__gpio1,
4226 &omap44xx_l4_per__gpio2,
4227 &omap44xx_l4_per__gpio3,
4228 &omap44xx_l4_per__gpio4,
4229 &omap44xx_l4_per__gpio5,
4230 &omap44xx_l4_per__gpio6,
4231 &omap44xx_l3_main_2__gpmc,
4232 &omap44xx_l3_main_2__gpu,
4233 &omap44xx_l4_per__hdq1w,
4234 &omap44xx_l4_cfg__hsi,
4235 &omap44xx_l4_per__i2c1,
4236 &omap44xx_l4_per__i2c2,
4237 &omap44xx_l4_per__i2c3,
4238 &omap44xx_l4_per__i2c4,
4239 &omap44xx_l3_main_2__ipu,
4240 &omap44xx_l3_main_2__iss,
4241 /* &omap44xx_iva__sl2if, */
4242 &omap44xx_l3_main_2__iva,
4243 &omap44xx_l4_wkup__kbd,
4244 &omap44xx_l4_cfg__mailbox,
4245 &omap44xx_l4_abe__mcasp,
4246 &omap44xx_l4_abe__mcasp_dma,
4247 &omap44xx_l4_abe__mcbsp1,
4248 &omap44xx_l4_abe__mcbsp2,
4249 &omap44xx_l4_abe__mcbsp3,
4250 &omap44xx_l4_per__mcbsp4,
4251 &omap44xx_l4_abe__mcpdm,
4252 &omap44xx_l4_per__mcspi1,
4253 &omap44xx_l4_per__mcspi2,
4254 &omap44xx_l4_per__mcspi3,
4255 &omap44xx_l4_per__mcspi4,
4256 &omap44xx_l4_per__mmc1,
4257 &omap44xx_l4_per__mmc2,
4258 &omap44xx_l4_per__mmc3,
4259 &omap44xx_l4_per__mmc4,
4260 &omap44xx_l4_per__mmc5,
4261 &omap44xx_l3_main_2__mmu_ipu,
4262 &omap44xx_l4_cfg__mmu_dsp,
4263 &omap44xx_l3_main_2__ocmc_ram,
4264 &omap44xx_l4_cfg__ocp2scp_usb_phy,
4265 &omap44xx_mpu_private__prcm_mpu,
4266 &omap44xx_l4_wkup__cm_core_aon,
4267 &omap44xx_l4_cfg__cm_core,
4268 &omap44xx_l4_wkup__prm,
4269 &omap44xx_l4_wkup__scrm,
4270 /* &omap44xx_l3_main_2__sl2if, */
4271 &omap44xx_l4_abe__slimbus1,
4272 &omap44xx_l4_abe__slimbus1_dma,
4273 &omap44xx_l4_per__slimbus2,
4274 &omap44xx_l4_cfg__smartreflex_core,
4275 &omap44xx_l4_cfg__smartreflex_iva,
4276 &omap44xx_l4_cfg__smartreflex_mpu,
4277 &omap44xx_l4_cfg__spinlock,
4278 &omap44xx_l4_wkup__timer1,
4279 &omap44xx_l4_per__timer2,
4280 &omap44xx_l4_per__timer3,
4281 &omap44xx_l4_per__timer4,
4282 &omap44xx_l4_abe__timer5,
4283 &omap44xx_l4_abe__timer6,
4284 &omap44xx_l4_abe__timer7,
4285 &omap44xx_l4_abe__timer8,
4286 &omap44xx_l4_per__timer9,
4287 &omap44xx_l4_per__timer10,
4288 &omap44xx_l4_per__timer11,
4289 &omap44xx_l4_per__uart1,
4290 &omap44xx_l4_per__uart2,
4291 &omap44xx_l4_per__uart3,
4292 &omap44xx_l4_per__uart4,
4293 /* &omap44xx_l4_cfg__usb_host_fs, */
4294 &omap44xx_l4_cfg__usb_host_hs,
4295 &omap44xx_l4_cfg__usb_otg_hs,
4296 &omap44xx_l4_cfg__usb_tll_hs,
4297 &omap44xx_l4_wkup__wd_timer2,
4298 &omap44xx_l4_abe__wd_timer3,
4299 &omap44xx_l4_abe__wd_timer3_dma,
4300 &omap44xx_mpu__emif1,
4301 &omap44xx_mpu__emif2,
4302 &omap44xx_l3_main_2__aes1,
4303 &omap44xx_l3_main_2__aes2,
4304 &omap44xx_l3_main_2__des,
4305 &omap44xx_l3_main_2__sha0,
4306 NULL,
4307 };
4308
omap44xx_hwmod_init(void)4309 int __init omap44xx_hwmod_init(void)
4310 {
4311 omap_hwmod_init();
4312 return omap_hwmod_register_links(omap44xx_hwmod_ocp_ifs);
4313 }
4314
4315