1 // SPDX-License-Identifier: GPL-2.0-only
3 * Hardware modules present on the OMAP44xx chips
5 * Copyright (C) 2009-2012 Texas Instruments, Inc.
6 * Copyright (C) 2009-2010 Nokia Corporation
11 * This file is automatically generated from the OMAP hardware databases.
12 * We respectfully ask that any modifications to this file be coordinated
13 * with the public linux-omap@vger.kernel.org mailing list and the
14 * authors above to ensure that the autogeneration scripts are kept
15 * up-to-date with the file contents.
16 * Note that this file is currently not in sync with autogeneration scripts.
17 * The above note to be removed, once it is synced up.
22 #include "omap_hwmod.h"
23 #include "omap_hwmod_common_data.h"
27 #include "prm-regbits-44xx.h"
29 /* Base offset for all OMAP4 interrupts external to MPUSS */
30 #define OMAP44XX_IRQ_GIC_START 32
40 static struct omap_hwmod_class omap44xx_dmm_hwmod_class = {
45 static struct omap_hwmod omap44xx_dmm_hwmod = {
47 .class = &omap44xx_dmm_hwmod_class,
48 .clkdm_name = "l3_emif_clkdm",
51 .clkctrl_offs = OMAP4_CM_MEMIF_DMM_CLKCTRL_OFFSET,
52 .context_offs = OMAP4_RM_MEMIF_DMM_CONTEXT_OFFSET,
59 * instance(s): l3_instr, l3_main_1, l3_main_2, l3_main_3
61 static struct omap_hwmod_class omap44xx_l3_hwmod_class = {
66 static struct omap_hwmod omap44xx_l3_instr_hwmod = {
68 .class = &omap44xx_l3_hwmod_class,
69 .clkdm_name = "l3_instr_clkdm",
72 .clkctrl_offs = OMAP4_CM_L3INSTR_L3_INSTR_CLKCTRL_OFFSET,
73 .context_offs = OMAP4_RM_L3INSTR_L3_INSTR_CONTEXT_OFFSET,
74 .modulemode = MODULEMODE_HWCTRL,
80 static struct omap_hwmod omap44xx_l3_main_1_hwmod = {
82 .class = &omap44xx_l3_hwmod_class,
83 .clkdm_name = "l3_1_clkdm",
86 .clkctrl_offs = OMAP4_CM_L3_1_L3_1_CLKCTRL_OFFSET,
87 .context_offs = OMAP4_RM_L3_1_L3_1_CONTEXT_OFFSET,
93 static struct omap_hwmod omap44xx_l3_main_2_hwmod = {
95 .class = &omap44xx_l3_hwmod_class,
96 .clkdm_name = "l3_2_clkdm",
99 .clkctrl_offs = OMAP4_CM_L3_2_L3_2_CLKCTRL_OFFSET,
100 .context_offs = OMAP4_RM_L3_2_L3_2_CONTEXT_OFFSET,
106 static struct omap_hwmod omap44xx_l3_main_3_hwmod = {
108 .class = &omap44xx_l3_hwmod_class,
109 .clkdm_name = "l3_instr_clkdm",
112 .clkctrl_offs = OMAP4_CM_L3INSTR_L3_3_CLKCTRL_OFFSET,
113 .context_offs = OMAP4_RM_L3INSTR_L3_3_CONTEXT_OFFSET,
114 .modulemode = MODULEMODE_HWCTRL,
121 * instance(s): l4_abe, l4_cfg, l4_per, l4_wkup
123 static struct omap_hwmod_class omap44xx_l4_hwmod_class = {
128 static struct omap_hwmod omap44xx_l4_abe_hwmod = {
130 .class = &omap44xx_l4_hwmod_class,
131 .clkdm_name = "abe_clkdm",
134 .clkctrl_offs = OMAP4_CM1_ABE_L4ABE_CLKCTRL_OFFSET,
135 .context_offs = OMAP4_RM_ABE_AESS_CONTEXT_OFFSET,
136 .lostcontext_mask = OMAP4430_LOSTMEM_AESSMEM_MASK,
137 .flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
143 static struct omap_hwmod omap44xx_l4_cfg_hwmod = {
145 .class = &omap44xx_l4_hwmod_class,
146 .clkdm_name = "l4_cfg_clkdm",
149 .clkctrl_offs = OMAP4_CM_L4CFG_L4_CFG_CLKCTRL_OFFSET,
150 .context_offs = OMAP4_RM_L4CFG_L4_CFG_CONTEXT_OFFSET,
156 static struct omap_hwmod omap44xx_l4_per_hwmod = {
158 .class = &omap44xx_l4_hwmod_class,
159 .clkdm_name = "l4_per_clkdm",
162 .clkctrl_offs = OMAP4_CM_L4PER_L4PER_CLKCTRL_OFFSET,
163 .context_offs = OMAP4_RM_L4PER_L4_PER_CONTEXT_OFFSET,
169 static struct omap_hwmod omap44xx_l4_wkup_hwmod = {
171 .class = &omap44xx_l4_hwmod_class,
172 .clkdm_name = "l4_wkup_clkdm",
175 .clkctrl_offs = OMAP4_CM_WKUP_L4WKUP_CLKCTRL_OFFSET,
176 .context_offs = OMAP4_RM_WKUP_L4WKUP_CONTEXT_OFFSET,
183 * instance(s): mpu_private
185 static struct omap_hwmod_class omap44xx_mpu_bus_hwmod_class = {
190 static struct omap_hwmod omap44xx_mpu_private_hwmod = {
191 .name = "mpu_private",
192 .class = &omap44xx_mpu_bus_hwmod_class,
193 .clkdm_name = "mpuss_clkdm",
196 .flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
203 * instance(s): ocp_wp_noc
205 static struct omap_hwmod_class omap44xx_ocp_wp_noc_hwmod_class = {
206 .name = "ocp_wp_noc",
210 static struct omap_hwmod omap44xx_ocp_wp_noc_hwmod = {
211 .name = "ocp_wp_noc",
212 .class = &omap44xx_ocp_wp_noc_hwmod_class,
213 .clkdm_name = "l3_instr_clkdm",
216 .clkctrl_offs = OMAP4_CM_L3INSTR_OCP_WP1_CLKCTRL_OFFSET,
217 .context_offs = OMAP4_RM_L3INSTR_OCP_WP1_CONTEXT_OFFSET,
218 .modulemode = MODULEMODE_HWCTRL,
224 * Modules omap_hwmod structures
226 * The following IPs are excluded for the moment because:
227 * - They do not need an explicit SW control using omap_hwmod API.
228 * - They still need to be validated with the driver
229 * properly adapted to omap_hwmod / omap_device
236 * 32-bit ordinary counter, clocked by the falling edge of the 32 khz clock
239 static struct omap_hwmod_class_sysconfig omap44xx_counter_sysc = {
242 .sysc_flags = SYSC_HAS_SIDLEMODE,
243 .idlemodes = (SIDLE_FORCE | SIDLE_NO),
244 .sysc_fields = &omap_hwmod_sysc_type1,
247 static struct omap_hwmod_class omap44xx_counter_hwmod_class = {
249 .sysc = &omap44xx_counter_sysc,
253 static struct omap_hwmod omap44xx_counter_32k_hwmod = {
254 .name = "counter_32k",
255 .class = &omap44xx_counter_hwmod_class,
256 .clkdm_name = "l4_wkup_clkdm",
257 .flags = HWMOD_SWSUP_SIDLE,
258 .main_clk = "sys_32k_ck",
261 .clkctrl_offs = OMAP4_CM_WKUP_SYNCTIMER_CLKCTRL_OFFSET,
262 .context_offs = OMAP4_RM_WKUP_SYNCTIMER_CONTEXT_OFFSET,
268 * 'ctrl_module' class
269 * attila core control module + core pad control module + wkup pad control
270 * module + attila wkup control module
273 static struct omap_hwmod_class_sysconfig omap44xx_ctrl_module_sysc = {
276 .sysc_flags = SYSC_HAS_SIDLEMODE,
277 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
279 .sysc_fields = &omap_hwmod_sysc_type2,
282 static struct omap_hwmod_class omap44xx_ctrl_module_hwmod_class = {
283 .name = "ctrl_module",
284 .sysc = &omap44xx_ctrl_module_sysc,
287 /* ctrl_module_core */
288 static struct omap_hwmod omap44xx_ctrl_module_core_hwmod = {
289 .name = "ctrl_module_core",
290 .class = &omap44xx_ctrl_module_hwmod_class,
291 .clkdm_name = "l4_cfg_clkdm",
294 .flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
299 /* ctrl_module_pad_core */
300 static struct omap_hwmod omap44xx_ctrl_module_pad_core_hwmod = {
301 .name = "ctrl_module_pad_core",
302 .class = &omap44xx_ctrl_module_hwmod_class,
303 .clkdm_name = "l4_cfg_clkdm",
306 .flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
311 /* ctrl_module_wkup */
312 static struct omap_hwmod omap44xx_ctrl_module_wkup_hwmod = {
313 .name = "ctrl_module_wkup",
314 .class = &omap44xx_ctrl_module_hwmod_class,
315 .clkdm_name = "l4_wkup_clkdm",
318 .flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
323 /* ctrl_module_pad_wkup */
324 static struct omap_hwmod omap44xx_ctrl_module_pad_wkup_hwmod = {
325 .name = "ctrl_module_pad_wkup",
326 .class = &omap44xx_ctrl_module_hwmod_class,
327 .clkdm_name = "l4_wkup_clkdm",
330 .flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
337 * debug and emulation sub system
340 static struct omap_hwmod_class omap44xx_debugss_hwmod_class = {
345 static struct omap_hwmod omap44xx_debugss_hwmod = {
347 .class = &omap44xx_debugss_hwmod_class,
348 .clkdm_name = "emu_sys_clkdm",
349 .main_clk = "trace_clk_div_ck",
352 .clkctrl_offs = OMAP4_CM_EMU_DEBUGSS_CLKCTRL_OFFSET,
353 .context_offs = OMAP4_RM_EMU_DEBUGSS_CONTEXT_OFFSET,
363 static struct omap_hwmod_class omap44xx_dsp_hwmod_class = {
368 static struct omap_hwmod_rst_info omap44xx_dsp_resets[] = {
369 { .name = "dsp", .rst_shift = 0 },
372 static struct omap_hwmod omap44xx_dsp_hwmod = {
374 .class = &omap44xx_dsp_hwmod_class,
375 .clkdm_name = "tesla_clkdm",
376 .rst_lines = omap44xx_dsp_resets,
377 .rst_lines_cnt = ARRAY_SIZE(omap44xx_dsp_resets),
378 .main_clk = "dpll_iva_m4x2_ck",
381 .clkctrl_offs = OMAP4_CM_TESLA_TESLA_CLKCTRL_OFFSET,
382 .rstctrl_offs = OMAP4_RM_TESLA_RSTCTRL_OFFSET,
383 .context_offs = OMAP4_RM_TESLA_TESLA_CONTEXT_OFFSET,
384 .modulemode = MODULEMODE_HWCTRL,
394 static struct omap_hwmod_class_sysconfig omap44xx_dss_sysc = {
397 .sysc_flags = SYSS_HAS_RESET_STATUS,
400 static struct omap_hwmod_class omap44xx_dss_hwmod_class = {
402 .sysc = &omap44xx_dss_sysc,
403 .reset = omap_dss_reset,
407 static struct omap_hwmod_opt_clk dss_opt_clks[] = {
408 { .role = "sys_clk", .clk = "dss_sys_clk" },
409 { .role = "tv_clk", .clk = "dss_tv_clk" },
410 { .role = "hdmi_clk", .clk = "dss_48mhz_clk" },
413 static struct omap_hwmod omap44xx_dss_hwmod = {
415 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
416 .class = &omap44xx_dss_hwmod_class,
417 .clkdm_name = "l3_dss_clkdm",
418 .main_clk = "dss_dss_clk",
421 .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
422 .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
423 .modulemode = MODULEMODE_SWCTRL,
426 .opt_clks = dss_opt_clks,
427 .opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
435 static struct omap_hwmod_class_sysconfig omap44xx_dispc_sysc = {
439 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
440 SYSC_HAS_ENAWAKEUP | SYSC_HAS_MIDLEMODE |
441 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
442 SYSS_HAS_RESET_STATUS),
443 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
444 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
445 .sysc_fields = &omap_hwmod_sysc_type1,
448 static struct omap_hwmod_class omap44xx_dispc_hwmod_class = {
450 .sysc = &omap44xx_dispc_sysc,
454 static struct omap_dss_dispc_dev_attr omap44xx_dss_dispc_dev_attr = {
456 .has_framedonetv_irq = 1
459 static struct omap_hwmod omap44xx_dss_dispc_hwmod = {
461 .class = &omap44xx_dispc_hwmod_class,
462 .clkdm_name = "l3_dss_clkdm",
463 .main_clk = "dss_dss_clk",
466 .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
467 .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
470 .dev_attr = &omap44xx_dss_dispc_dev_attr,
471 .parent_hwmod = &omap44xx_dss_hwmod,
476 * display serial interface controller
479 static struct omap_hwmod_class_sysconfig omap44xx_dsi_sysc = {
483 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
484 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
485 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
486 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
487 .sysc_fields = &omap_hwmod_sysc_type1,
490 static struct omap_hwmod_class omap44xx_dsi_hwmod_class = {
492 .sysc = &omap44xx_dsi_sysc,
496 static struct omap_hwmod_opt_clk dss_dsi1_opt_clks[] = {
497 { .role = "sys_clk", .clk = "dss_sys_clk" },
500 static struct omap_hwmod omap44xx_dss_dsi1_hwmod = {
502 .class = &omap44xx_dsi_hwmod_class,
503 .clkdm_name = "l3_dss_clkdm",
504 .main_clk = "dss_dss_clk",
507 .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
508 .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
511 .opt_clks = dss_dsi1_opt_clks,
512 .opt_clks_cnt = ARRAY_SIZE(dss_dsi1_opt_clks),
513 .parent_hwmod = &omap44xx_dss_hwmod,
517 static struct omap_hwmod_opt_clk dss_dsi2_opt_clks[] = {
518 { .role = "sys_clk", .clk = "dss_sys_clk" },
521 static struct omap_hwmod omap44xx_dss_dsi2_hwmod = {
523 .class = &omap44xx_dsi_hwmod_class,
524 .clkdm_name = "l3_dss_clkdm",
525 .main_clk = "dss_dss_clk",
528 .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
529 .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
532 .opt_clks = dss_dsi2_opt_clks,
533 .opt_clks_cnt = ARRAY_SIZE(dss_dsi2_opt_clks),
534 .parent_hwmod = &omap44xx_dss_hwmod,
542 static struct omap_hwmod_class_sysconfig omap44xx_hdmi_sysc = {
545 .sysc_flags = (SYSC_HAS_RESET_STATUS | SYSC_HAS_SIDLEMODE |
547 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
549 .sysc_fields = &omap_hwmod_sysc_type2,
552 static struct omap_hwmod_class omap44xx_hdmi_hwmod_class = {
554 .sysc = &omap44xx_hdmi_sysc,
558 static struct omap_hwmod_opt_clk dss_hdmi_opt_clks[] = {
559 { .role = "sys_clk", .clk = "dss_sys_clk" },
560 { .role = "hdmi_clk", .clk = "dss_48mhz_clk" },
563 static struct omap_hwmod omap44xx_dss_hdmi_hwmod = {
565 .class = &omap44xx_hdmi_hwmod_class,
566 .clkdm_name = "l3_dss_clkdm",
568 * HDMI audio requires to use no-idle mode. Hence,
569 * set idle mode by software.
571 .flags = HWMOD_SWSUP_SIDLE | HWMOD_OPT_CLKS_NEEDED,
572 .main_clk = "dss_48mhz_clk",
575 .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
576 .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
579 .opt_clks = dss_hdmi_opt_clks,
580 .opt_clks_cnt = ARRAY_SIZE(dss_hdmi_opt_clks),
581 .parent_hwmod = &omap44xx_dss_hwmod,
586 * remote frame buffer interface
589 static struct omap_hwmod_class_sysconfig omap44xx_rfbi_sysc = {
593 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_SIDLEMODE |
594 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
595 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
596 .sysc_fields = &omap_hwmod_sysc_type1,
599 static struct omap_hwmod_class omap44xx_rfbi_hwmod_class = {
601 .sysc = &omap44xx_rfbi_sysc,
605 static struct omap_hwmod_opt_clk dss_rfbi_opt_clks[] = {
606 { .role = "ick", .clk = "l3_div_ck" },
609 static struct omap_hwmod omap44xx_dss_rfbi_hwmod = {
611 .class = &omap44xx_rfbi_hwmod_class,
612 .clkdm_name = "l3_dss_clkdm",
613 .main_clk = "dss_dss_clk",
616 .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
617 .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
620 .opt_clks = dss_rfbi_opt_clks,
621 .opt_clks_cnt = ARRAY_SIZE(dss_rfbi_opt_clks),
622 .parent_hwmod = &omap44xx_dss_hwmod,
630 static struct omap_hwmod_class omap44xx_venc_hwmod_class = {
635 static struct omap_hwmod_opt_clk dss_venc_opt_clks[] = {
636 { .role = "tv_clk", .clk = "dss_tv_clk" },
639 static struct omap_hwmod omap44xx_dss_venc_hwmod = {
641 .class = &omap44xx_venc_hwmod_class,
642 .clkdm_name = "l3_dss_clkdm",
643 .main_clk = "dss_tv_clk",
644 .flags = HWMOD_OPT_CLKS_NEEDED,
647 .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
648 .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
651 .parent_hwmod = &omap44xx_dss_hwmod,
652 .opt_clks = dss_venc_opt_clks,
653 .opt_clks_cnt = ARRAY_SIZE(dss_venc_opt_clks),
656 /* sha0 HIB2 (the 'P' (public) device) */
657 static struct omap_hwmod_class_sysconfig omap44xx_sha0_sysc = {
661 .sysc_flags = SYSS_HAS_RESET_STATUS,
664 static struct omap_hwmod_class omap44xx_sha0_hwmod_class = {
666 .sysc = &omap44xx_sha0_sysc,
669 static struct omap_hwmod omap44xx_sha0_hwmod = {
671 .class = &omap44xx_sha0_hwmod_class,
672 .clkdm_name = "l4_secure_clkdm",
673 .main_clk = "l3_div_ck",
676 .clkctrl_offs = OMAP4_CM_L4SEC_SHA2MD51_CLKCTRL_OFFSET,
677 .context_offs = OMAP4_RM_L4SEC_SHA2MD51_CONTEXT_OFFSET,
678 .modulemode = MODULEMODE_SWCTRL,
686 * external memory interface no1
689 static struct omap_hwmod_class_sysconfig omap44xx_emif_sysc = {
693 static struct omap_hwmod_class omap44xx_emif_hwmod_class = {
695 .sysc = &omap44xx_emif_sysc,
699 static struct omap_hwmod omap44xx_emif1_hwmod = {
701 .class = &omap44xx_emif_hwmod_class,
702 .clkdm_name = "l3_emif_clkdm",
703 .flags = HWMOD_INIT_NO_IDLE,
704 .main_clk = "ddrphy_ck",
707 .clkctrl_offs = OMAP4_CM_MEMIF_EMIF_1_CLKCTRL_OFFSET,
708 .context_offs = OMAP4_RM_MEMIF_EMIF_1_CONTEXT_OFFSET,
709 .modulemode = MODULEMODE_HWCTRL,
715 static struct omap_hwmod omap44xx_emif2_hwmod = {
717 .class = &omap44xx_emif_hwmod_class,
718 .clkdm_name = "l3_emif_clkdm",
719 .flags = HWMOD_INIT_NO_IDLE,
720 .main_clk = "ddrphy_ck",
723 .clkctrl_offs = OMAP4_CM_MEMIF_EMIF_2_CLKCTRL_OFFSET,
724 .context_offs = OMAP4_RM_MEMIF_EMIF_2_CONTEXT_OFFSET,
725 .modulemode = MODULEMODE_HWCTRL,
731 Crypto modules AES0/1 belong to:
732 PD_L4_PER power domain
733 CD_L4_SEC clock domain
734 On the L3, the AES modules are mapped to
735 L3_CLK2: Peripherals and multimedia sub clock domain
737 static struct omap_hwmod_class_sysconfig omap44xx_aes_sysc = {
741 .sysc_flags = SYSS_HAS_RESET_STATUS,
744 static struct omap_hwmod_class omap44xx_aes_hwmod_class = {
746 .sysc = &omap44xx_aes_sysc,
749 static struct omap_hwmod omap44xx_aes1_hwmod = {
751 .class = &omap44xx_aes_hwmod_class,
752 .clkdm_name = "l4_secure_clkdm",
753 .main_clk = "l3_div_ck",
756 .context_offs = OMAP4_RM_L4SEC_AES1_CONTEXT_OFFSET,
757 .clkctrl_offs = OMAP4_CM_L4SEC_AES1_CLKCTRL_OFFSET,
758 .modulemode = MODULEMODE_SWCTRL,
763 static struct omap_hwmod_ocp_if omap44xx_l3_main_2__aes1 = {
764 .master = &omap44xx_l4_per_hwmod,
765 .slave = &omap44xx_aes1_hwmod,
767 .user = OCP_USER_MPU | OCP_USER_SDMA,
770 static struct omap_hwmod omap44xx_aes2_hwmod = {
772 .class = &omap44xx_aes_hwmod_class,
773 .clkdm_name = "l4_secure_clkdm",
774 .main_clk = "l3_div_ck",
777 .context_offs = OMAP4_RM_L4SEC_AES2_CONTEXT_OFFSET,
778 .clkctrl_offs = OMAP4_CM_L4SEC_AES2_CLKCTRL_OFFSET,
779 .modulemode = MODULEMODE_SWCTRL,
784 static struct omap_hwmod_ocp_if omap44xx_l3_main_2__aes2 = {
785 .master = &omap44xx_l4_per_hwmod,
786 .slave = &omap44xx_aes2_hwmod,
788 .user = OCP_USER_MPU | OCP_USER_SDMA,
792 * 'des' class for DES3DES module
794 static struct omap_hwmod_class_sysconfig omap44xx_des_sysc = {
798 .sysc_flags = SYSS_HAS_RESET_STATUS,
801 static struct omap_hwmod_class omap44xx_des_hwmod_class = {
803 .sysc = &omap44xx_des_sysc,
806 static struct omap_hwmod omap44xx_des_hwmod = {
808 .class = &omap44xx_des_hwmod_class,
809 .clkdm_name = "l4_secure_clkdm",
810 .main_clk = "l3_div_ck",
813 .context_offs = OMAP4_RM_L4SEC_DES3DES_CONTEXT_OFFSET,
814 .clkctrl_offs = OMAP4_CM_L4SEC_DES3DES_CLKCTRL_OFFSET,
815 .modulemode = MODULEMODE_SWCTRL,
820 static struct omap_hwmod_ocp_if omap44xx_l3_main_2__des = {
821 .master = &omap44xx_l3_main_2_hwmod,
822 .slave = &omap44xx_des_hwmod,
824 .user = OCP_USER_MPU | OCP_USER_SDMA,
829 * general purpose memory controller
832 static struct omap_hwmod_class_sysconfig omap44xx_gpmc_sysc = {
836 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_SIDLEMODE |
837 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
838 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
839 .sysc_fields = &omap_hwmod_sysc_type1,
842 static struct omap_hwmod_class omap44xx_gpmc_hwmod_class = {
844 .sysc = &omap44xx_gpmc_sysc,
848 static struct omap_hwmod omap44xx_gpmc_hwmod = {
850 .class = &omap44xx_gpmc_hwmod_class,
851 .clkdm_name = "l3_2_clkdm",
852 /* Skip reset for CONFIG_OMAP_GPMC_DEBUG for bootloader timings */
853 .flags = DEBUG_OMAP_GPMC_HWMOD_FLAGS,
856 .clkctrl_offs = OMAP4_CM_L3_2_GPMC_CLKCTRL_OFFSET,
857 .context_offs = OMAP4_RM_L3_2_GPMC_CONTEXT_OFFSET,
858 .modulemode = MODULEMODE_HWCTRL,
866 * imaging processor unit
869 static struct omap_hwmod_class omap44xx_ipu_hwmod_class = {
874 static struct omap_hwmod_rst_info omap44xx_ipu_resets[] = {
875 { .name = "cpu0", .rst_shift = 0 },
876 { .name = "cpu1", .rst_shift = 1 },
879 static struct omap_hwmod omap44xx_ipu_hwmod = {
881 .class = &omap44xx_ipu_hwmod_class,
882 .clkdm_name = "ducati_clkdm",
883 .rst_lines = omap44xx_ipu_resets,
884 .rst_lines_cnt = ARRAY_SIZE(omap44xx_ipu_resets),
885 .main_clk = "ducati_clk_mux_ck",
888 .clkctrl_offs = OMAP4_CM_DUCATI_DUCATI_CLKCTRL_OFFSET,
889 .rstctrl_offs = OMAP4_RM_DUCATI_RSTCTRL_OFFSET,
890 .context_offs = OMAP4_RM_DUCATI_DUCATI_CONTEXT_OFFSET,
891 .modulemode = MODULEMODE_HWCTRL,
898 * external images sensor pixel data processor
901 static struct omap_hwmod_class_sysconfig omap44xx_iss_sysc = {
905 * ISS needs 100 OCP clk cycles delay after a softreset before
906 * accessing sysconfig again.
907 * The lowest frequency at the moment for L3 bus is 100 MHz, so
908 * 1usec delay is needed. Add an x2 margin to be safe (2 usecs).
910 * TODO: Indicate errata when available.
913 .sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_RESET_STATUS |
914 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
915 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
916 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
917 MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
918 .sysc_fields = &omap_hwmod_sysc_type2,
921 static struct omap_hwmod_class omap44xx_iss_hwmod_class = {
923 .sysc = &omap44xx_iss_sysc,
927 static struct omap_hwmod_opt_clk iss_opt_clks[] = {
928 { .role = "ctrlclk", .clk = "iss_ctrlclk" },
931 static struct omap_hwmod omap44xx_iss_hwmod = {
933 .class = &omap44xx_iss_hwmod_class,
934 .clkdm_name = "iss_clkdm",
935 .main_clk = "ducati_clk_mux_ck",
938 .clkctrl_offs = OMAP4_CM_CAM_ISS_CLKCTRL_OFFSET,
939 .context_offs = OMAP4_RM_CAM_ISS_CONTEXT_OFFSET,
940 .modulemode = MODULEMODE_SWCTRL,
943 .opt_clks = iss_opt_clks,
944 .opt_clks_cnt = ARRAY_SIZE(iss_opt_clks),
949 * multi-standard video encoder/decoder hardware accelerator
952 static struct omap_hwmod_class omap44xx_iva_hwmod_class = {
957 static struct omap_hwmod_rst_info omap44xx_iva_resets[] = {
958 { .name = "seq0", .rst_shift = 0 },
959 { .name = "seq1", .rst_shift = 1 },
960 { .name = "logic", .rst_shift = 2 },
963 static struct omap_hwmod omap44xx_iva_hwmod = {
965 .class = &omap44xx_iva_hwmod_class,
966 .clkdm_name = "ivahd_clkdm",
967 .rst_lines = omap44xx_iva_resets,
968 .rst_lines_cnt = ARRAY_SIZE(omap44xx_iva_resets),
969 .main_clk = "dpll_iva_m5x2_ck",
972 .clkctrl_offs = OMAP4_CM_IVAHD_IVAHD_CLKCTRL_OFFSET,
973 .rstctrl_offs = OMAP4_RM_IVAHD_RSTCTRL_OFFSET,
974 .context_offs = OMAP4_RM_IVAHD_IVAHD_CONTEXT_OFFSET,
975 .modulemode = MODULEMODE_HWCTRL,
985 static struct omap_hwmod_class omap44xx_mpu_hwmod_class = {
990 static struct omap_hwmod omap44xx_mpu_hwmod = {
992 .class = &omap44xx_mpu_hwmod_class,
993 .clkdm_name = "mpuss_clkdm",
994 .flags = HWMOD_INIT_NO_IDLE,
995 .main_clk = "dpll_mpu_m2_ck",
998 .clkctrl_offs = OMAP4_CM_MPU_MPU_CLKCTRL_OFFSET,
999 .context_offs = OMAP4_RM_MPU_MPU_CONTEXT_OFFSET,
1006 * top-level core on-chip ram
1009 static struct omap_hwmod_class omap44xx_ocmc_ram_hwmod_class = {
1014 static struct omap_hwmod omap44xx_ocmc_ram_hwmod = {
1016 .class = &omap44xx_ocmc_ram_hwmod_class,
1017 .clkdm_name = "l3_2_clkdm",
1020 .clkctrl_offs = OMAP4_CM_L3_2_OCMC_RAM_CLKCTRL_OFFSET,
1021 .context_offs = OMAP4_RM_L3_2_OCMC_RAM_CONTEXT_OFFSET,
1029 * power and reset manager (part of the prcm infrastructure) + clock manager 2
1030 * + clock manager 1 (in always on power domain) + local prm in mpu
1033 static struct omap_hwmod_class omap44xx_prcm_hwmod_class = {
1038 static struct omap_hwmod omap44xx_prcm_mpu_hwmod = {
1040 .class = &omap44xx_prcm_hwmod_class,
1041 .clkdm_name = "l4_wkup_clkdm",
1042 .flags = HWMOD_NO_IDLEST,
1045 .flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
1051 static struct omap_hwmod omap44xx_cm_core_aon_hwmod = {
1052 .name = "cm_core_aon",
1053 .class = &omap44xx_prcm_hwmod_class,
1054 .flags = HWMOD_NO_IDLEST,
1057 .flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
1063 static struct omap_hwmod omap44xx_cm_core_hwmod = {
1065 .class = &omap44xx_prcm_hwmod_class,
1066 .flags = HWMOD_NO_IDLEST,
1069 .flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
1075 static struct omap_hwmod_rst_info omap44xx_prm_resets[] = {
1076 { .name = "rst_global_warm_sw", .rst_shift = 0 },
1077 { .name = "rst_global_cold_sw", .rst_shift = 1 },
1080 static struct omap_hwmod omap44xx_prm_hwmod = {
1082 .class = &omap44xx_prcm_hwmod_class,
1083 .rst_lines = omap44xx_prm_resets,
1084 .rst_lines_cnt = ARRAY_SIZE(omap44xx_prm_resets),
1089 * system clock and reset manager
1092 static struct omap_hwmod_class omap44xx_scrm_hwmod_class = {
1097 static struct omap_hwmod omap44xx_scrm_hwmod = {
1099 .class = &omap44xx_scrm_hwmod_class,
1100 .clkdm_name = "l4_wkup_clkdm",
1103 .flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
1110 * shared level 2 memory interface
1113 static struct omap_hwmod_class omap44xx_sl2if_hwmod_class = {
1118 static struct omap_hwmod omap44xx_sl2if_hwmod = {
1120 .class = &omap44xx_sl2if_hwmod_class,
1121 .clkdm_name = "ivahd_clkdm",
1124 .clkctrl_offs = OMAP4_CM_IVAHD_SL2_CLKCTRL_OFFSET,
1125 .context_offs = OMAP4_RM_IVAHD_SL2_CONTEXT_OFFSET,
1126 .modulemode = MODULEMODE_HWCTRL,
1133 * general purpose timer module with accurate 1ms tick
1134 * This class contains several variants: ['timer_1ms', 'timer']
1137 static struct omap_hwmod_class_sysconfig omap44xx_timer_1ms_sysc = {
1139 .sysc_offs = 0x0010,
1140 .syss_offs = 0x0014,
1141 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
1142 SYSC_HAS_EMUFREE | SYSC_HAS_ENAWAKEUP |
1143 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
1144 SYSS_HAS_RESET_STATUS),
1145 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1146 .sysc_fields = &omap_hwmod_sysc_type1,
1149 static struct omap_hwmod_class omap44xx_timer_1ms_hwmod_class = {
1151 .sysc = &omap44xx_timer_1ms_sysc,
1155 static struct omap_hwmod omap44xx_timer1_hwmod = {
1157 .class = &omap44xx_timer_1ms_hwmod_class,
1158 .clkdm_name = "l4_wkup_clkdm",
1159 .flags = HWMOD_SET_DEFAULT_CLOCKACT,
1160 .main_clk = "dmt1_clk_mux",
1163 .clkctrl_offs = OMAP4_CM_WKUP_TIMER1_CLKCTRL_OFFSET,
1164 .context_offs = OMAP4_RM_WKUP_TIMER1_CONTEXT_OFFSET,
1165 .modulemode = MODULEMODE_SWCTRL,
1171 * 'usb_host_fs' class
1172 * full-speed usb host controller
1175 /* The IP is not compliant to type1 / type2 scheme */
1176 static struct omap_hwmod_class_sysconfig omap44xx_usb_host_fs_sysc = {
1178 .sysc_offs = 0x0210,
1179 .sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE |
1180 SYSC_HAS_SOFTRESET),
1181 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1183 .sysc_fields = &omap_hwmod_sysc_type_usb_host_fs,
1186 static struct omap_hwmod_class omap44xx_usb_host_fs_hwmod_class = {
1187 .name = "usb_host_fs",
1188 .sysc = &omap44xx_usb_host_fs_sysc,
1192 static struct omap_hwmod omap44xx_usb_host_fs_hwmod = {
1193 .name = "usb_host_fs",
1194 .class = &omap44xx_usb_host_fs_hwmod_class,
1195 .clkdm_name = "l3_init_clkdm",
1196 .main_clk = "usb_host_fs_fck",
1199 .clkctrl_offs = OMAP4_CM_L3INIT_USB_HOST_FS_CLKCTRL_OFFSET,
1200 .context_offs = OMAP4_RM_L3INIT_USB_HOST_FS_CONTEXT_OFFSET,
1201 .modulemode = MODULEMODE_SWCTRL,
1207 * 'usb_host_hs' class
1208 * high-speed multi-port usb host controller
1211 static struct omap_hwmod_class_sysconfig omap44xx_usb_host_hs_sysc = {
1213 .sysc_offs = 0x0010,
1214 .syss_offs = 0x0014,
1215 .sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE |
1216 SYSC_HAS_SOFTRESET | SYSC_HAS_RESET_STATUS),
1217 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1218 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
1219 MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
1220 .sysc_fields = &omap_hwmod_sysc_type2,
1223 static struct omap_hwmod_class omap44xx_usb_host_hs_hwmod_class = {
1224 .name = "usb_host_hs",
1225 .sysc = &omap44xx_usb_host_hs_sysc,
1229 static struct omap_hwmod omap44xx_usb_host_hs_hwmod = {
1230 .name = "usb_host_hs",
1231 .class = &omap44xx_usb_host_hs_hwmod_class,
1232 .clkdm_name = "l3_init_clkdm",
1233 .main_clk = "usb_host_hs_fck",
1236 .clkctrl_offs = OMAP4_CM_L3INIT_USB_HOST_CLKCTRL_OFFSET,
1237 .context_offs = OMAP4_RM_L3INIT_USB_HOST_CONTEXT_OFFSET,
1238 .modulemode = MODULEMODE_SWCTRL,
1243 * Errata: USBHOST Configured In Smart-Idle Can Lead To a Deadlock
1247 * In the following configuration :
1248 * - USBHOST module is set to smart-idle mode
1249 * - PRCM asserts idle_req to the USBHOST module ( This typically
1250 * happens when the system is going to a low power mode : all ports
1251 * have been suspended, the master part of the USBHOST module has
1252 * entered the standby state, and SW has cut the functional clocks)
1253 * - an USBHOST interrupt occurs before the module is able to answer
1254 * idle_ack, typically a remote wakeup IRQ.
1255 * Then the USB HOST module will enter a deadlock situation where it
1256 * is no more accessible nor functional.
1259 * Don't use smart idle; use only force idle, hence HWMOD_SWSUP_SIDLE
1263 * Errata: USB host EHCI may stall when entering smart-standby mode
1267 * When the USBHOST module is set to smart-standby mode, and when it is
1268 * ready to enter the standby state (i.e. all ports are suspended and
1269 * all attached devices are in suspend mode), then it can wrongly assert
1270 * the Mstandby signal too early while there are still some residual OCP
1271 * transactions ongoing. If this condition occurs, the internal state
1272 * machine may go to an undefined state and the USB link may be stuck
1273 * upon the next resume.
1276 * Don't use smart standby; use only force standby,
1277 * hence HWMOD_SWSUP_MSTANDBY
1280 .flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY,
1284 * 'usb_tll_hs' class
1285 * usb_tll_hs module is the adapter on the usb_host_hs ports
1288 static struct omap_hwmod_class_sysconfig omap44xx_usb_tll_hs_sysc = {
1290 .sysc_offs = 0x0010,
1291 .syss_offs = 0x0014,
1292 .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
1293 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
1295 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1296 .sysc_fields = &omap_hwmod_sysc_type1,
1299 static struct omap_hwmod_class omap44xx_usb_tll_hs_hwmod_class = {
1300 .name = "usb_tll_hs",
1301 .sysc = &omap44xx_usb_tll_hs_sysc,
1304 static struct omap_hwmod omap44xx_usb_tll_hs_hwmod = {
1305 .name = "usb_tll_hs",
1306 .class = &omap44xx_usb_tll_hs_hwmod_class,
1307 .clkdm_name = "l3_init_clkdm",
1308 .main_clk = "usb_tll_hs_ick",
1311 .clkctrl_offs = OMAP4_CM_L3INIT_USB_TLL_CLKCTRL_OFFSET,
1312 .context_offs = OMAP4_RM_L3INIT_USB_TLL_CONTEXT_OFFSET,
1313 .modulemode = MODULEMODE_HWCTRL,
1322 /* l3_main_1 -> dmm */
1323 static struct omap_hwmod_ocp_if omap44xx_l3_main_1__dmm = {
1324 .master = &omap44xx_l3_main_1_hwmod,
1325 .slave = &omap44xx_dmm_hwmod,
1327 .user = OCP_USER_SDMA,
1331 static struct omap_hwmod_ocp_if omap44xx_mpu__dmm = {
1332 .master = &omap44xx_mpu_hwmod,
1333 .slave = &omap44xx_dmm_hwmod,
1335 .user = OCP_USER_MPU,
1338 /* iva -> l3_instr */
1339 static struct omap_hwmod_ocp_if omap44xx_iva__l3_instr = {
1340 .master = &omap44xx_iva_hwmod,
1341 .slave = &omap44xx_l3_instr_hwmod,
1343 .user = OCP_USER_MPU | OCP_USER_SDMA,
1346 /* l3_main_3 -> l3_instr */
1347 static struct omap_hwmod_ocp_if omap44xx_l3_main_3__l3_instr = {
1348 .master = &omap44xx_l3_main_3_hwmod,
1349 .slave = &omap44xx_l3_instr_hwmod,
1351 .user = OCP_USER_MPU | OCP_USER_SDMA,
1354 /* ocp_wp_noc -> l3_instr */
1355 static struct omap_hwmod_ocp_if omap44xx_ocp_wp_noc__l3_instr = {
1356 .master = &omap44xx_ocp_wp_noc_hwmod,
1357 .slave = &omap44xx_l3_instr_hwmod,
1359 .user = OCP_USER_MPU | OCP_USER_SDMA,
1362 /* dsp -> l3_main_1 */
1363 static struct omap_hwmod_ocp_if omap44xx_dsp__l3_main_1 = {
1364 .master = &omap44xx_dsp_hwmod,
1365 .slave = &omap44xx_l3_main_1_hwmod,
1367 .user = OCP_USER_MPU | OCP_USER_SDMA,
1370 /* dss -> l3_main_1 */
1371 static struct omap_hwmod_ocp_if omap44xx_dss__l3_main_1 = {
1372 .master = &omap44xx_dss_hwmod,
1373 .slave = &omap44xx_l3_main_1_hwmod,
1375 .user = OCP_USER_MPU | OCP_USER_SDMA,
1378 /* l3_main_2 -> l3_main_1 */
1379 static struct omap_hwmod_ocp_if omap44xx_l3_main_2__l3_main_1 = {
1380 .master = &omap44xx_l3_main_2_hwmod,
1381 .slave = &omap44xx_l3_main_1_hwmod,
1383 .user = OCP_USER_MPU | OCP_USER_SDMA,
1386 /* l4_cfg -> l3_main_1 */
1387 static struct omap_hwmod_ocp_if omap44xx_l4_cfg__l3_main_1 = {
1388 .master = &omap44xx_l4_cfg_hwmod,
1389 .slave = &omap44xx_l3_main_1_hwmod,
1391 .user = OCP_USER_MPU | OCP_USER_SDMA,
1394 /* mpu -> l3_main_1 */
1395 static struct omap_hwmod_ocp_if omap44xx_mpu__l3_main_1 = {
1396 .master = &omap44xx_mpu_hwmod,
1397 .slave = &omap44xx_l3_main_1_hwmod,
1399 .user = OCP_USER_MPU,
1402 /* debugss -> l3_main_2 */
1403 static struct omap_hwmod_ocp_if omap44xx_debugss__l3_main_2 = {
1404 .master = &omap44xx_debugss_hwmod,
1405 .slave = &omap44xx_l3_main_2_hwmod,
1406 .clk = "dbgclk_mux_ck",
1407 .user = OCP_USER_MPU | OCP_USER_SDMA,
1410 /* ipu -> l3_main_2 */
1411 static struct omap_hwmod_ocp_if omap44xx_ipu__l3_main_2 = {
1412 .master = &omap44xx_ipu_hwmod,
1413 .slave = &omap44xx_l3_main_2_hwmod,
1415 .user = OCP_USER_MPU | OCP_USER_SDMA,
1418 /* iss -> l3_main_2 */
1419 static struct omap_hwmod_ocp_if omap44xx_iss__l3_main_2 = {
1420 .master = &omap44xx_iss_hwmod,
1421 .slave = &omap44xx_l3_main_2_hwmod,
1423 .user = OCP_USER_MPU | OCP_USER_SDMA,
1426 /* iva -> l3_main_2 */
1427 static struct omap_hwmod_ocp_if omap44xx_iva__l3_main_2 = {
1428 .master = &omap44xx_iva_hwmod,
1429 .slave = &omap44xx_l3_main_2_hwmod,
1431 .user = OCP_USER_MPU | OCP_USER_SDMA,
1434 /* l3_main_1 -> l3_main_2 */
1435 static struct omap_hwmod_ocp_if omap44xx_l3_main_1__l3_main_2 = {
1436 .master = &omap44xx_l3_main_1_hwmod,
1437 .slave = &omap44xx_l3_main_2_hwmod,
1439 .user = OCP_USER_MPU,
1442 /* l4_cfg -> l3_main_2 */
1443 static struct omap_hwmod_ocp_if omap44xx_l4_cfg__l3_main_2 = {
1444 .master = &omap44xx_l4_cfg_hwmod,
1445 .slave = &omap44xx_l3_main_2_hwmod,
1447 .user = OCP_USER_MPU | OCP_USER_SDMA,
1450 /* usb_host_fs -> l3_main_2 */
1451 static struct omap_hwmod_ocp_if __maybe_unused omap44xx_usb_host_fs__l3_main_2 = {
1452 .master = &omap44xx_usb_host_fs_hwmod,
1453 .slave = &omap44xx_l3_main_2_hwmod,
1455 .user = OCP_USER_MPU | OCP_USER_SDMA,
1458 /* usb_host_hs -> l3_main_2 */
1459 static struct omap_hwmod_ocp_if omap44xx_usb_host_hs__l3_main_2 = {
1460 .master = &omap44xx_usb_host_hs_hwmod,
1461 .slave = &omap44xx_l3_main_2_hwmod,
1463 .user = OCP_USER_MPU | OCP_USER_SDMA,
1466 /* l3_main_1 -> l3_main_3 */
1467 static struct omap_hwmod_ocp_if omap44xx_l3_main_1__l3_main_3 = {
1468 .master = &omap44xx_l3_main_1_hwmod,
1469 .slave = &omap44xx_l3_main_3_hwmod,
1471 .user = OCP_USER_MPU,
1474 /* l3_main_2 -> l3_main_3 */
1475 static struct omap_hwmod_ocp_if omap44xx_l3_main_2__l3_main_3 = {
1476 .master = &omap44xx_l3_main_2_hwmod,
1477 .slave = &omap44xx_l3_main_3_hwmod,
1479 .user = OCP_USER_MPU | OCP_USER_SDMA,
1482 /* l4_cfg -> l3_main_3 */
1483 static struct omap_hwmod_ocp_if omap44xx_l4_cfg__l3_main_3 = {
1484 .master = &omap44xx_l4_cfg_hwmod,
1485 .slave = &omap44xx_l3_main_3_hwmod,
1487 .user = OCP_USER_MPU | OCP_USER_SDMA,
1491 static struct omap_hwmod_ocp_if omap44xx_dsp__l4_abe = {
1492 .master = &omap44xx_dsp_hwmod,
1493 .slave = &omap44xx_l4_abe_hwmod,
1494 .clk = "ocp_abe_iclk",
1495 .user = OCP_USER_MPU | OCP_USER_SDMA,
1498 /* l3_main_1 -> l4_abe */
1499 static struct omap_hwmod_ocp_if omap44xx_l3_main_1__l4_abe = {
1500 .master = &omap44xx_l3_main_1_hwmod,
1501 .slave = &omap44xx_l4_abe_hwmod,
1503 .user = OCP_USER_MPU | OCP_USER_SDMA,
1507 static struct omap_hwmod_ocp_if omap44xx_mpu__l4_abe = {
1508 .master = &omap44xx_mpu_hwmod,
1509 .slave = &omap44xx_l4_abe_hwmod,
1510 .clk = "ocp_abe_iclk",
1511 .user = OCP_USER_MPU | OCP_USER_SDMA,
1514 /* l3_main_1 -> l4_cfg */
1515 static struct omap_hwmod_ocp_if omap44xx_l3_main_1__l4_cfg = {
1516 .master = &omap44xx_l3_main_1_hwmod,
1517 .slave = &omap44xx_l4_cfg_hwmod,
1519 .user = OCP_USER_MPU | OCP_USER_SDMA,
1522 /* l3_main_2 -> l4_per */
1523 static struct omap_hwmod_ocp_if omap44xx_l3_main_2__l4_per = {
1524 .master = &omap44xx_l3_main_2_hwmod,
1525 .slave = &omap44xx_l4_per_hwmod,
1527 .user = OCP_USER_MPU | OCP_USER_SDMA,
1530 /* l4_cfg -> l4_wkup */
1531 static struct omap_hwmod_ocp_if omap44xx_l4_cfg__l4_wkup = {
1532 .master = &omap44xx_l4_cfg_hwmod,
1533 .slave = &omap44xx_l4_wkup_hwmod,
1535 .user = OCP_USER_MPU | OCP_USER_SDMA,
1538 /* mpu -> mpu_private */
1539 static struct omap_hwmod_ocp_if omap44xx_mpu__mpu_private = {
1540 .master = &omap44xx_mpu_hwmod,
1541 .slave = &omap44xx_mpu_private_hwmod,
1543 .user = OCP_USER_MPU | OCP_USER_SDMA,
1546 /* l4_cfg -> ocp_wp_noc */
1547 static struct omap_hwmod_ocp_if omap44xx_l4_cfg__ocp_wp_noc = {
1548 .master = &omap44xx_l4_cfg_hwmod,
1549 .slave = &omap44xx_ocp_wp_noc_hwmod,
1551 .user = OCP_USER_MPU | OCP_USER_SDMA,
1554 /* l4_wkup -> counter_32k */
1555 static struct omap_hwmod_ocp_if omap44xx_l4_wkup__counter_32k = {
1556 .master = &omap44xx_l4_wkup_hwmod,
1557 .slave = &omap44xx_counter_32k_hwmod,
1558 .clk = "l4_wkup_clk_mux_ck",
1559 .user = OCP_USER_MPU | OCP_USER_SDMA,
1562 /* l4_cfg -> ctrl_module_core */
1563 static struct omap_hwmod_ocp_if omap44xx_l4_cfg__ctrl_module_core = {
1564 .master = &omap44xx_l4_cfg_hwmod,
1565 .slave = &omap44xx_ctrl_module_core_hwmod,
1567 .user = OCP_USER_MPU | OCP_USER_SDMA,
1570 /* l4_cfg -> ctrl_module_pad_core */
1571 static struct omap_hwmod_ocp_if omap44xx_l4_cfg__ctrl_module_pad_core = {
1572 .master = &omap44xx_l4_cfg_hwmod,
1573 .slave = &omap44xx_ctrl_module_pad_core_hwmod,
1575 .user = OCP_USER_MPU | OCP_USER_SDMA,
1578 /* l4_wkup -> ctrl_module_wkup */
1579 static struct omap_hwmod_ocp_if omap44xx_l4_wkup__ctrl_module_wkup = {
1580 .master = &omap44xx_l4_wkup_hwmod,
1581 .slave = &omap44xx_ctrl_module_wkup_hwmod,
1582 .clk = "l4_wkup_clk_mux_ck",
1583 .user = OCP_USER_MPU | OCP_USER_SDMA,
1586 /* l4_wkup -> ctrl_module_pad_wkup */
1587 static struct omap_hwmod_ocp_if omap44xx_l4_wkup__ctrl_module_pad_wkup = {
1588 .master = &omap44xx_l4_wkup_hwmod,
1589 .slave = &omap44xx_ctrl_module_pad_wkup_hwmod,
1590 .clk = "l4_wkup_clk_mux_ck",
1591 .user = OCP_USER_MPU | OCP_USER_SDMA,
1594 /* l3_instr -> debugss */
1595 static struct omap_hwmod_ocp_if omap44xx_l3_instr__debugss = {
1596 .master = &omap44xx_l3_instr_hwmod,
1597 .slave = &omap44xx_debugss_hwmod,
1599 .user = OCP_USER_MPU | OCP_USER_SDMA,
1603 static struct omap_hwmod_ocp_if omap44xx_dsp__iva = {
1604 .master = &omap44xx_dsp_hwmod,
1605 .slave = &omap44xx_iva_hwmod,
1606 .clk = "dpll_iva_m5x2_ck",
1607 .user = OCP_USER_DSP,
1611 static struct omap_hwmod_ocp_if __maybe_unused omap44xx_dsp__sl2if = {
1612 .master = &omap44xx_dsp_hwmod,
1613 .slave = &omap44xx_sl2if_hwmod,
1614 .clk = "dpll_iva_m5x2_ck",
1615 .user = OCP_USER_DSP,
1619 static struct omap_hwmod_ocp_if omap44xx_l4_cfg__dsp = {
1620 .master = &omap44xx_l4_cfg_hwmod,
1621 .slave = &omap44xx_dsp_hwmod,
1623 .user = OCP_USER_MPU | OCP_USER_SDMA,
1626 /* l3_main_2 -> dss */
1627 static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss = {
1628 .master = &omap44xx_l3_main_2_hwmod,
1629 .slave = &omap44xx_dss_hwmod,
1631 .user = OCP_USER_SDMA,
1635 static struct omap_hwmod_ocp_if omap44xx_l4_per__dss = {
1636 .master = &omap44xx_l4_per_hwmod,
1637 .slave = &omap44xx_dss_hwmod,
1639 .user = OCP_USER_MPU,
1642 /* l3_main_2 -> dss_dispc */
1643 static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_dispc = {
1644 .master = &omap44xx_l3_main_2_hwmod,
1645 .slave = &omap44xx_dss_dispc_hwmod,
1647 .user = OCP_USER_SDMA,
1650 /* l4_per -> dss_dispc */
1651 static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_dispc = {
1652 .master = &omap44xx_l4_per_hwmod,
1653 .slave = &omap44xx_dss_dispc_hwmod,
1655 .user = OCP_USER_MPU,
1658 /* l3_main_2 -> dss_dsi1 */
1659 static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_dsi1 = {
1660 .master = &omap44xx_l3_main_2_hwmod,
1661 .slave = &omap44xx_dss_dsi1_hwmod,
1663 .user = OCP_USER_SDMA,
1666 /* l4_per -> dss_dsi1 */
1667 static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_dsi1 = {
1668 .master = &omap44xx_l4_per_hwmod,
1669 .slave = &omap44xx_dss_dsi1_hwmod,
1671 .user = OCP_USER_MPU,
1674 /* l3_main_2 -> dss_dsi2 */
1675 static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_dsi2 = {
1676 .master = &omap44xx_l3_main_2_hwmod,
1677 .slave = &omap44xx_dss_dsi2_hwmod,
1679 .user = OCP_USER_SDMA,
1682 /* l4_per -> dss_dsi2 */
1683 static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_dsi2 = {
1684 .master = &omap44xx_l4_per_hwmod,
1685 .slave = &omap44xx_dss_dsi2_hwmod,
1687 .user = OCP_USER_MPU,
1690 /* l3_main_2 -> dss_hdmi */
1691 static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_hdmi = {
1692 .master = &omap44xx_l3_main_2_hwmod,
1693 .slave = &omap44xx_dss_hdmi_hwmod,
1695 .user = OCP_USER_SDMA,
1698 /* l4_per -> dss_hdmi */
1699 static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_hdmi = {
1700 .master = &omap44xx_l4_per_hwmod,
1701 .slave = &omap44xx_dss_hdmi_hwmod,
1703 .user = OCP_USER_MPU,
1706 /* l3_main_2 -> dss_rfbi */
1707 static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_rfbi = {
1708 .master = &omap44xx_l3_main_2_hwmod,
1709 .slave = &omap44xx_dss_rfbi_hwmod,
1711 .user = OCP_USER_SDMA,
1714 /* l4_per -> dss_rfbi */
1715 static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_rfbi = {
1716 .master = &omap44xx_l4_per_hwmod,
1717 .slave = &omap44xx_dss_rfbi_hwmod,
1719 .user = OCP_USER_MPU,
1722 /* l3_main_2 -> dss_venc */
1723 static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_venc = {
1724 .master = &omap44xx_l3_main_2_hwmod,
1725 .slave = &omap44xx_dss_venc_hwmod,
1727 .user = OCP_USER_SDMA,
1730 /* l4_per -> dss_venc */
1731 static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_venc = {
1732 .master = &omap44xx_l4_per_hwmod,
1733 .slave = &omap44xx_dss_venc_hwmod,
1735 .user = OCP_USER_MPU,
1738 /* l3_main_2 -> sham */
1739 static struct omap_hwmod_ocp_if omap44xx_l3_main_2__sha0 = {
1740 .master = &omap44xx_l3_main_2_hwmod,
1741 .slave = &omap44xx_sha0_hwmod,
1743 .user = OCP_USER_MPU | OCP_USER_SDMA,
1746 /* l3_main_2 -> gpmc */
1747 static struct omap_hwmod_ocp_if omap44xx_l3_main_2__gpmc = {
1748 .master = &omap44xx_l3_main_2_hwmod,
1749 .slave = &omap44xx_gpmc_hwmod,
1751 .user = OCP_USER_MPU | OCP_USER_SDMA,
1754 /* l3_main_2 -> ipu */
1755 static struct omap_hwmod_ocp_if omap44xx_l3_main_2__ipu = {
1756 .master = &omap44xx_l3_main_2_hwmod,
1757 .slave = &omap44xx_ipu_hwmod,
1759 .user = OCP_USER_MPU | OCP_USER_SDMA,
1762 /* l3_main_2 -> iss */
1763 static struct omap_hwmod_ocp_if omap44xx_l3_main_2__iss = {
1764 .master = &omap44xx_l3_main_2_hwmod,
1765 .slave = &omap44xx_iss_hwmod,
1767 .user = OCP_USER_MPU | OCP_USER_SDMA,
1771 static struct omap_hwmod_ocp_if __maybe_unused omap44xx_iva__sl2if = {
1772 .master = &omap44xx_iva_hwmod,
1773 .slave = &omap44xx_sl2if_hwmod,
1774 .clk = "dpll_iva_m5x2_ck",
1775 .user = OCP_USER_IVA,
1778 /* l3_main_2 -> iva */
1779 static struct omap_hwmod_ocp_if omap44xx_l3_main_2__iva = {
1780 .master = &omap44xx_l3_main_2_hwmod,
1781 .slave = &omap44xx_iva_hwmod,
1783 .user = OCP_USER_MPU,
1786 /* l3_main_2 -> ocmc_ram */
1787 static struct omap_hwmod_ocp_if omap44xx_l3_main_2__ocmc_ram = {
1788 .master = &omap44xx_l3_main_2_hwmod,
1789 .slave = &omap44xx_ocmc_ram_hwmod,
1791 .user = OCP_USER_MPU | OCP_USER_SDMA,
1794 /* mpu_private -> prcm_mpu */
1795 static struct omap_hwmod_ocp_if omap44xx_mpu_private__prcm_mpu = {
1796 .master = &omap44xx_mpu_private_hwmod,
1797 .slave = &omap44xx_prcm_mpu_hwmod,
1799 .user = OCP_USER_MPU | OCP_USER_SDMA,
1802 /* l4_wkup -> cm_core_aon */
1803 static struct omap_hwmod_ocp_if omap44xx_l4_wkup__cm_core_aon = {
1804 .master = &omap44xx_l4_wkup_hwmod,
1805 .slave = &omap44xx_cm_core_aon_hwmod,
1806 .clk = "l4_wkup_clk_mux_ck",
1807 .user = OCP_USER_MPU | OCP_USER_SDMA,
1810 /* l4_cfg -> cm_core */
1811 static struct omap_hwmod_ocp_if omap44xx_l4_cfg__cm_core = {
1812 .master = &omap44xx_l4_cfg_hwmod,
1813 .slave = &omap44xx_cm_core_hwmod,
1815 .user = OCP_USER_MPU | OCP_USER_SDMA,
1818 /* l4_wkup -> prm */
1819 static struct omap_hwmod_ocp_if omap44xx_l4_wkup__prm = {
1820 .master = &omap44xx_l4_wkup_hwmod,
1821 .slave = &omap44xx_prm_hwmod,
1822 .clk = "l4_wkup_clk_mux_ck",
1823 .user = OCP_USER_MPU | OCP_USER_SDMA,
1826 /* l4_wkup -> scrm */
1827 static struct omap_hwmod_ocp_if omap44xx_l4_wkup__scrm = {
1828 .master = &omap44xx_l4_wkup_hwmod,
1829 .slave = &omap44xx_scrm_hwmod,
1830 .clk = "l4_wkup_clk_mux_ck",
1831 .user = OCP_USER_MPU | OCP_USER_SDMA,
1834 /* l3_main_2 -> sl2if */
1835 static struct omap_hwmod_ocp_if __maybe_unused omap44xx_l3_main_2__sl2if = {
1836 .master = &omap44xx_l3_main_2_hwmod,
1837 .slave = &omap44xx_sl2if_hwmod,
1839 .user = OCP_USER_MPU | OCP_USER_SDMA,
1842 /* l4_wkup -> timer1 */
1843 static struct omap_hwmod_ocp_if omap44xx_l4_wkup__timer1 = {
1844 .master = &omap44xx_l4_wkup_hwmod,
1845 .slave = &omap44xx_timer1_hwmod,
1846 .clk = "l4_wkup_clk_mux_ck",
1847 .user = OCP_USER_MPU | OCP_USER_SDMA,
1850 /* l4_cfg -> usb_host_fs */
1851 static struct omap_hwmod_ocp_if __maybe_unused omap44xx_l4_cfg__usb_host_fs = {
1852 .master = &omap44xx_l4_cfg_hwmod,
1853 .slave = &omap44xx_usb_host_fs_hwmod,
1855 .user = OCP_USER_MPU | OCP_USER_SDMA,
1858 /* l4_cfg -> usb_host_hs */
1859 static struct omap_hwmod_ocp_if omap44xx_l4_cfg__usb_host_hs = {
1860 .master = &omap44xx_l4_cfg_hwmod,
1861 .slave = &omap44xx_usb_host_hs_hwmod,
1863 .user = OCP_USER_MPU | OCP_USER_SDMA,
1866 /* l4_cfg -> usb_tll_hs */
1867 static struct omap_hwmod_ocp_if omap44xx_l4_cfg__usb_tll_hs = {
1868 .master = &omap44xx_l4_cfg_hwmod,
1869 .slave = &omap44xx_usb_tll_hs_hwmod,
1871 .user = OCP_USER_MPU | OCP_USER_SDMA,
1875 static struct omap_hwmod_ocp_if omap44xx_mpu__emif1 = {
1876 .master = &omap44xx_mpu_hwmod,
1877 .slave = &omap44xx_emif1_hwmod,
1879 .user = OCP_USER_MPU | OCP_USER_SDMA,
1883 static struct omap_hwmod_ocp_if omap44xx_mpu__emif2 = {
1884 .master = &omap44xx_mpu_hwmod,
1885 .slave = &omap44xx_emif2_hwmod,
1887 .user = OCP_USER_MPU | OCP_USER_SDMA,
1890 static struct omap_hwmod_ocp_if *omap44xx_hwmod_ocp_ifs[] __initdata = {
1891 &omap44xx_l3_main_1__dmm,
1893 &omap44xx_iva__l3_instr,
1894 &omap44xx_l3_main_3__l3_instr,
1895 &omap44xx_ocp_wp_noc__l3_instr,
1896 &omap44xx_dsp__l3_main_1,
1897 &omap44xx_dss__l3_main_1,
1898 &omap44xx_l3_main_2__l3_main_1,
1899 &omap44xx_l4_cfg__l3_main_1,
1900 &omap44xx_mpu__l3_main_1,
1901 &omap44xx_debugss__l3_main_2,
1902 &omap44xx_ipu__l3_main_2,
1903 &omap44xx_iss__l3_main_2,
1904 &omap44xx_iva__l3_main_2,
1905 &omap44xx_l3_main_1__l3_main_2,
1906 &omap44xx_l4_cfg__l3_main_2,
1907 /* &omap44xx_usb_host_fs__l3_main_2, */
1908 &omap44xx_usb_host_hs__l3_main_2,
1909 &omap44xx_l3_main_1__l3_main_3,
1910 &omap44xx_l3_main_2__l3_main_3,
1911 &omap44xx_l4_cfg__l3_main_3,
1912 &omap44xx_dsp__l4_abe,
1913 &omap44xx_l3_main_1__l4_abe,
1914 &omap44xx_mpu__l4_abe,
1915 &omap44xx_l3_main_1__l4_cfg,
1916 &omap44xx_l3_main_2__l4_per,
1917 &omap44xx_l4_cfg__l4_wkup,
1918 &omap44xx_mpu__mpu_private,
1919 &omap44xx_l4_cfg__ocp_wp_noc,
1920 &omap44xx_l4_wkup__counter_32k,
1921 &omap44xx_l4_cfg__ctrl_module_core,
1922 &omap44xx_l4_cfg__ctrl_module_pad_core,
1923 &omap44xx_l4_wkup__ctrl_module_wkup,
1924 &omap44xx_l4_wkup__ctrl_module_pad_wkup,
1925 &omap44xx_l3_instr__debugss,
1927 /* &omap44xx_dsp__sl2if, */
1928 &omap44xx_l4_cfg__dsp,
1929 &omap44xx_l3_main_2__dss,
1930 &omap44xx_l4_per__dss,
1931 &omap44xx_l3_main_2__dss_dispc,
1932 &omap44xx_l4_per__dss_dispc,
1933 &omap44xx_l3_main_2__dss_dsi1,
1934 &omap44xx_l4_per__dss_dsi1,
1935 &omap44xx_l3_main_2__dss_dsi2,
1936 &omap44xx_l4_per__dss_dsi2,
1937 &omap44xx_l3_main_2__dss_hdmi,
1938 &omap44xx_l4_per__dss_hdmi,
1939 &omap44xx_l3_main_2__dss_rfbi,
1940 &omap44xx_l4_per__dss_rfbi,
1941 &omap44xx_l3_main_2__dss_venc,
1942 &omap44xx_l4_per__dss_venc,
1943 &omap44xx_l3_main_2__gpmc,
1944 &omap44xx_l3_main_2__ipu,
1945 &omap44xx_l3_main_2__iss,
1946 /* &omap44xx_iva__sl2if, */
1947 &omap44xx_l3_main_2__iva,
1948 &omap44xx_l3_main_2__ocmc_ram,
1949 &omap44xx_mpu_private__prcm_mpu,
1950 &omap44xx_l4_wkup__cm_core_aon,
1951 &omap44xx_l4_cfg__cm_core,
1952 &omap44xx_l4_wkup__prm,
1953 &omap44xx_l4_wkup__scrm,
1954 /* &omap44xx_l3_main_2__sl2if, */
1955 &omap44xx_l4_wkup__timer1,
1956 /* &omap44xx_l4_cfg__usb_host_fs, */
1957 &omap44xx_l4_cfg__usb_host_hs,
1958 &omap44xx_l4_cfg__usb_tll_hs,
1959 &omap44xx_mpu__emif1,
1960 &omap44xx_mpu__emif2,
1961 &omap44xx_l3_main_2__aes1,
1962 &omap44xx_l3_main_2__aes2,
1963 &omap44xx_l3_main_2__des,
1964 &omap44xx_l3_main_2__sha0,
1968 int __init omap44xx_hwmod_init(void)
1971 return omap_hwmod_register_links(omap44xx_hwmod_ocp_ifs);