1 // SPDX-License-Identifier: GPL-2.0-only
3 * Hardware modules present on the OMAP54xx chips
5 * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com
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.
18 #include <linux/power/smartreflex.h>
20 #include <linux/omap-dma.h>
22 #include "omap_hwmod.h"
23 #include "omap_hwmod_common_data.h"
28 /* Base offset for all OMAP5 interrupts external to MPUSS */
29 #define OMAP54XX_IRQ_GIC_START 32
31 /* Base offset for all OMAP5 dma requests */
32 #define OMAP54XX_DMA_REQ_START 1
43 static struct omap_hwmod_class omap54xx_dmm_hwmod_class
= {
48 static struct omap_hwmod omap54xx_dmm_hwmod
= {
50 .class = &omap54xx_dmm_hwmod_class
,
51 .clkdm_name
= "emif_clkdm",
54 .clkctrl_offs
= OMAP54XX_CM_EMIF_DMM_CLKCTRL_OFFSET
,
55 .context_offs
= OMAP54XX_RM_EMIF_DMM_CONTEXT_OFFSET
,
62 * instance(s): l3_instr, l3_main_1, l3_main_2, l3_main_3
64 static struct omap_hwmod_class omap54xx_l3_hwmod_class
= {
69 static struct omap_hwmod omap54xx_l3_instr_hwmod
= {
71 .class = &omap54xx_l3_hwmod_class
,
72 .clkdm_name
= "l3instr_clkdm",
75 .clkctrl_offs
= OMAP54XX_CM_L3INSTR_L3_INSTR_CLKCTRL_OFFSET
,
76 .context_offs
= OMAP54XX_RM_L3INSTR_L3_INSTR_CONTEXT_OFFSET
,
77 .modulemode
= MODULEMODE_HWCTRL
,
83 static struct omap_hwmod omap54xx_l3_main_1_hwmod
= {
85 .class = &omap54xx_l3_hwmod_class
,
86 .clkdm_name
= "l3main1_clkdm",
89 .clkctrl_offs
= OMAP54XX_CM_L3MAIN1_L3_MAIN_1_CLKCTRL_OFFSET
,
90 .context_offs
= OMAP54XX_RM_L3MAIN1_L3_MAIN_1_CONTEXT_OFFSET
,
96 static struct omap_hwmod omap54xx_l3_main_2_hwmod
= {
98 .class = &omap54xx_l3_hwmod_class
,
99 .clkdm_name
= "l3main2_clkdm",
102 .clkctrl_offs
= OMAP54XX_CM_L3MAIN2_L3_MAIN_2_CLKCTRL_OFFSET
,
103 .context_offs
= OMAP54XX_RM_L3MAIN2_L3_MAIN_2_CONTEXT_OFFSET
,
109 static struct omap_hwmod omap54xx_l3_main_3_hwmod
= {
111 .class = &omap54xx_l3_hwmod_class
,
112 .clkdm_name
= "l3instr_clkdm",
115 .clkctrl_offs
= OMAP54XX_CM_L3INSTR_L3_MAIN_3_CLKCTRL_OFFSET
,
116 .context_offs
= OMAP54XX_RM_L3INSTR_L3_MAIN_3_CONTEXT_OFFSET
,
117 .modulemode
= MODULEMODE_HWCTRL
,
124 * instance(s): l4_abe, l4_cfg, l4_per, l4_wkup
126 static struct omap_hwmod_class omap54xx_l4_hwmod_class
= {
131 static struct omap_hwmod omap54xx_l4_abe_hwmod
= {
133 .class = &omap54xx_l4_hwmod_class
,
134 .clkdm_name
= "abe_clkdm",
137 .clkctrl_offs
= OMAP54XX_CM_ABE_L4_ABE_CLKCTRL_OFFSET
,
138 .flags
= HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT
,
144 static struct omap_hwmod omap54xx_l4_cfg_hwmod
= {
146 .class = &omap54xx_l4_hwmod_class
,
147 .clkdm_name
= "l4cfg_clkdm",
150 .clkctrl_offs
= OMAP54XX_CM_L4CFG_L4_CFG_CLKCTRL_OFFSET
,
151 .context_offs
= OMAP54XX_RM_L4CFG_L4_CFG_CONTEXT_OFFSET
,
157 static struct omap_hwmod omap54xx_l4_per_hwmod
= {
159 .class = &omap54xx_l4_hwmod_class
,
160 .clkdm_name
= "l4per_clkdm",
163 .clkctrl_offs
= OMAP54XX_CM_L4PER_L4_PER_CLKCTRL_OFFSET
,
164 .context_offs
= OMAP54XX_RM_L4PER_L4_PER_CONTEXT_OFFSET
,
170 static struct omap_hwmod omap54xx_l4_wkup_hwmod
= {
172 .class = &omap54xx_l4_hwmod_class
,
173 .clkdm_name
= "wkupaon_clkdm",
176 .clkctrl_offs
= OMAP54XX_CM_WKUPAON_L4_WKUP_CLKCTRL_OFFSET
,
177 .context_offs
= OMAP54XX_RM_WKUPAON_L4_WKUP_CONTEXT_OFFSET
,
184 * instance(s): mpu_private
186 static struct omap_hwmod_class omap54xx_mpu_bus_hwmod_class
= {
191 static struct omap_hwmod omap54xx_mpu_private_hwmod
= {
192 .name
= "mpu_private",
193 .class = &omap54xx_mpu_bus_hwmod_class
,
194 .clkdm_name
= "mpu_clkdm",
197 .flags
= HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT
,
204 * 32-bit ordinary counter, clocked by the falling edge of the 32 khz clock
207 static struct omap_hwmod_class_sysconfig omap54xx_counter_sysc
= {
210 .sysc_flags
= SYSC_HAS_SIDLEMODE
,
211 .idlemodes
= (SIDLE_FORCE
| SIDLE_NO
),
212 .sysc_fields
= &omap_hwmod_sysc_type1
,
215 static struct omap_hwmod_class omap54xx_counter_hwmod_class
= {
217 .sysc
= &omap54xx_counter_sysc
,
221 static struct omap_hwmod omap54xx_counter_32k_hwmod
= {
222 .name
= "counter_32k",
223 .class = &omap54xx_counter_hwmod_class
,
224 .clkdm_name
= "wkupaon_clkdm",
225 .flags
= HWMOD_SWSUP_SIDLE
,
226 .main_clk
= "wkupaon_iclk_mux",
229 .clkctrl_offs
= OMAP54XX_CM_WKUPAON_COUNTER_32K_CLKCTRL_OFFSET
,
230 .context_offs
= OMAP54XX_RM_WKUPAON_COUNTER_32K_CONTEXT_OFFSET
,
237 * dma controller for data exchange between memory to memory (i.e. internal or
238 * external memory) and gp peripherals to memory or memory to gp peripherals
241 static struct omap_hwmod_class_sysconfig omap54xx_dma_sysc
= {
245 .sysc_flags
= (SYSC_HAS_AUTOIDLE
| SYSC_HAS_CLOCKACTIVITY
|
246 SYSC_HAS_EMUFREE
| SYSC_HAS_MIDLEMODE
|
247 SYSC_HAS_SIDLEMODE
| SYSC_HAS_SOFTRESET
|
248 SYSS_HAS_RESET_STATUS
),
249 .idlemodes
= (SIDLE_FORCE
| SIDLE_NO
| SIDLE_SMART
|
250 MSTANDBY_FORCE
| MSTANDBY_NO
| MSTANDBY_SMART
),
251 .sysc_fields
= &omap_hwmod_sysc_type1
,
254 static struct omap_hwmod_class omap54xx_dma_hwmod_class
= {
256 .sysc
= &omap54xx_dma_sysc
,
260 static struct omap_dma_dev_attr dma_dev_attr
= {
261 .dev_caps
= RESERVE_CHANNEL
| DMA_LINKED_LCH
| GLOBAL_PRIORITY
|
262 IS_CSSA_32
| IS_CDSA_32
| IS_RW_PRIORITY
,
267 static struct omap_hwmod omap54xx_dma_system_hwmod
= {
268 .name
= "dma_system",
269 .class = &omap54xx_dma_hwmod_class
,
270 .clkdm_name
= "dma_clkdm",
271 .main_clk
= "l3_iclk_div",
274 .clkctrl_offs
= OMAP54XX_CM_DMA_DMA_SYSTEM_CLKCTRL_OFFSET
,
275 .context_offs
= OMAP54XX_RM_DMA_DMA_SYSTEM_CONTEXT_OFFSET
,
278 .dev_attr
= &dma_dev_attr
,
283 * digital microphone controller
286 static struct omap_hwmod_class_sysconfig omap54xx_dmic_sysc
= {
289 .sysc_flags
= (SYSC_HAS_EMUFREE
| SYSC_HAS_RESET_STATUS
|
290 SYSC_HAS_SIDLEMODE
| SYSC_HAS_SOFTRESET
),
291 .idlemodes
= (SIDLE_FORCE
| SIDLE_NO
| SIDLE_SMART
|
293 .sysc_fields
= &omap_hwmod_sysc_type2
,
296 static struct omap_hwmod_class omap54xx_dmic_hwmod_class
= {
298 .sysc
= &omap54xx_dmic_sysc
,
302 static struct omap_hwmod omap54xx_dmic_hwmod
= {
304 .class = &omap54xx_dmic_hwmod_class
,
305 .clkdm_name
= "abe_clkdm",
306 .main_clk
= "dmic_gfclk",
309 .clkctrl_offs
= OMAP54XX_CM_ABE_DMIC_CLKCTRL_OFFSET
,
310 .context_offs
= OMAP54XX_RM_ABE_DMIC_CONTEXT_OFFSET
,
311 .modulemode
= MODULEMODE_SWCTRL
,
320 static struct omap_hwmod_class_sysconfig omap54xx_dss_sysc
= {
323 .sysc_flags
= SYSS_HAS_RESET_STATUS
,
326 static struct omap_hwmod_class omap54xx_dss_hwmod_class
= {
328 .sysc
= &omap54xx_dss_sysc
,
329 .reset
= omap_dss_reset
,
333 static struct omap_hwmod_opt_clk dss_opt_clks
[] = {
334 { .role
= "32khz_clk", .clk
= "dss_32khz_clk" },
335 { .role
= "sys_clk", .clk
= "dss_sys_clk" },
336 { .role
= "hdmi_clk", .clk
= "dss_48mhz_clk" },
339 static struct omap_hwmod omap54xx_dss_hwmod
= {
341 .class = &omap54xx_dss_hwmod_class
,
342 .clkdm_name
= "dss_clkdm",
343 .flags
= HWMOD_CONTROL_OPT_CLKS_IN_RESET
,
344 .main_clk
= "dss_dss_clk",
347 .clkctrl_offs
= OMAP54XX_CM_DSS_DSS_CLKCTRL_OFFSET
,
348 .context_offs
= OMAP54XX_RM_DSS_DSS_CONTEXT_OFFSET
,
349 .modulemode
= MODULEMODE_SWCTRL
,
352 .opt_clks
= dss_opt_clks
,
353 .opt_clks_cnt
= ARRAY_SIZE(dss_opt_clks
),
361 static struct omap_hwmod_class_sysconfig omap54xx_dispc_sysc
= {
365 .sysc_flags
= (SYSC_HAS_AUTOIDLE
| SYSC_HAS_CLOCKACTIVITY
|
366 SYSC_HAS_ENAWAKEUP
| SYSC_HAS_MIDLEMODE
|
367 SYSC_HAS_SIDLEMODE
| SYSC_HAS_SOFTRESET
|
368 SYSS_HAS_RESET_STATUS
),
369 .idlemodes
= (SIDLE_FORCE
| SIDLE_NO
| SIDLE_SMART
|
370 MSTANDBY_FORCE
| MSTANDBY_NO
| MSTANDBY_SMART
),
371 .sysc_fields
= &omap_hwmod_sysc_type1
,
374 static struct omap_hwmod_class omap54xx_dispc_hwmod_class
= {
376 .sysc
= &omap54xx_dispc_sysc
,
380 static struct omap_hwmod_opt_clk dss_dispc_opt_clks
[] = {
381 { .role
= "sys_clk", .clk
= "dss_sys_clk" },
384 /* dss_dispc dev_attr */
385 static struct omap_dss_dispc_dev_attr dss_dispc_dev_attr
= {
386 .has_framedonetv_irq
= 1,
390 static struct omap_hwmod omap54xx_dss_dispc_hwmod
= {
392 .class = &omap54xx_dispc_hwmod_class
,
393 .clkdm_name
= "dss_clkdm",
394 .main_clk
= "dss_dss_clk",
397 .clkctrl_offs
= OMAP54XX_CM_DSS_DSS_CLKCTRL_OFFSET
,
398 .flags
= HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT
,
401 .opt_clks
= dss_dispc_opt_clks
,
402 .opt_clks_cnt
= ARRAY_SIZE(dss_dispc_opt_clks
),
403 .dev_attr
= &dss_dispc_dev_attr
,
404 .parent_hwmod
= &omap54xx_dss_hwmod
,
409 * display serial interface controller
412 static struct omap_hwmod_class_sysconfig omap54xx_dsi1_sysc
= {
416 .sysc_flags
= (SYSC_HAS_AUTOIDLE
| SYSC_HAS_CLOCKACTIVITY
|
417 SYSC_HAS_ENAWAKEUP
| SYSC_HAS_SIDLEMODE
|
418 SYSC_HAS_SOFTRESET
| SYSS_HAS_RESET_STATUS
),
419 .idlemodes
= (SIDLE_FORCE
| SIDLE_NO
| SIDLE_SMART
),
420 .sysc_fields
= &omap_hwmod_sysc_type1
,
423 static struct omap_hwmod_class omap54xx_dsi1_hwmod_class
= {
425 .sysc
= &omap54xx_dsi1_sysc
,
429 static struct omap_hwmod_opt_clk dss_dsi1_a_opt_clks
[] = {
430 { .role
= "sys_clk", .clk
= "dss_sys_clk" },
433 static struct omap_hwmod omap54xx_dss_dsi1_a_hwmod
= {
435 .class = &omap54xx_dsi1_hwmod_class
,
436 .clkdm_name
= "dss_clkdm",
437 .main_clk
= "dss_dss_clk",
440 .clkctrl_offs
= OMAP54XX_CM_DSS_DSS_CLKCTRL_OFFSET
,
441 .flags
= HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT
,
444 .opt_clks
= dss_dsi1_a_opt_clks
,
445 .opt_clks_cnt
= ARRAY_SIZE(dss_dsi1_a_opt_clks
),
446 .parent_hwmod
= &omap54xx_dss_hwmod
,
450 static struct omap_hwmod_opt_clk dss_dsi1_c_opt_clks
[] = {
451 { .role
= "sys_clk", .clk
= "dss_sys_clk" },
454 static struct omap_hwmod omap54xx_dss_dsi1_c_hwmod
= {
456 .class = &omap54xx_dsi1_hwmod_class
,
457 .clkdm_name
= "dss_clkdm",
458 .main_clk
= "dss_dss_clk",
461 .clkctrl_offs
= OMAP54XX_CM_DSS_DSS_CLKCTRL_OFFSET
,
462 .flags
= HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT
,
465 .opt_clks
= dss_dsi1_c_opt_clks
,
466 .opt_clks_cnt
= ARRAY_SIZE(dss_dsi1_c_opt_clks
),
467 .parent_hwmod
= &omap54xx_dss_hwmod
,
475 static struct omap_hwmod_class_sysconfig omap54xx_hdmi_sysc
= {
478 .sysc_flags
= (SYSC_HAS_RESET_STATUS
| SYSC_HAS_SIDLEMODE
|
480 .idlemodes
= (SIDLE_FORCE
| SIDLE_NO
| SIDLE_SMART
|
482 .sysc_fields
= &omap_hwmod_sysc_type2
,
485 static struct omap_hwmod_class omap54xx_hdmi_hwmod_class
= {
487 .sysc
= &omap54xx_hdmi_sysc
,
490 static struct omap_hwmod_opt_clk dss_hdmi_opt_clks
[] = {
491 { .role
= "sys_clk", .clk
= "dss_sys_clk" },
494 static struct omap_hwmod omap54xx_dss_hdmi_hwmod
= {
496 .class = &omap54xx_hdmi_hwmod_class
,
497 .clkdm_name
= "dss_clkdm",
498 .main_clk
= "dss_48mhz_clk",
501 .clkctrl_offs
= OMAP54XX_CM_DSS_DSS_CLKCTRL_OFFSET
,
502 .flags
= HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT
,
505 .opt_clks
= dss_hdmi_opt_clks
,
506 .opt_clks_cnt
= ARRAY_SIZE(dss_hdmi_opt_clks
),
507 .parent_hwmod
= &omap54xx_dss_hwmod
,
512 * remote frame buffer interface
515 static struct omap_hwmod_class_sysconfig omap54xx_rfbi_sysc
= {
519 .sysc_flags
= (SYSC_HAS_AUTOIDLE
| SYSC_HAS_SIDLEMODE
|
520 SYSC_HAS_SOFTRESET
| SYSS_HAS_RESET_STATUS
),
521 .idlemodes
= (SIDLE_FORCE
| SIDLE_NO
| SIDLE_SMART
),
522 .sysc_fields
= &omap_hwmod_sysc_type1
,
525 static struct omap_hwmod_class omap54xx_rfbi_hwmod_class
= {
527 .sysc
= &omap54xx_rfbi_sysc
,
531 static struct omap_hwmod_opt_clk dss_rfbi_opt_clks
[] = {
532 { .role
= "ick", .clk
= "l3_iclk_div" },
535 static struct omap_hwmod omap54xx_dss_rfbi_hwmod
= {
537 .class = &omap54xx_rfbi_hwmod_class
,
538 .clkdm_name
= "dss_clkdm",
541 .clkctrl_offs
= OMAP54XX_CM_DSS_DSS_CLKCTRL_OFFSET
,
542 .flags
= HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT
,
545 .opt_clks
= dss_rfbi_opt_clks
,
546 .opt_clks_cnt
= ARRAY_SIZE(dss_rfbi_opt_clks
),
547 .parent_hwmod
= &omap54xx_dss_hwmod
,
552 * external memory interface no1 (wrapper)
555 static struct omap_hwmod_class_sysconfig omap54xx_emif_sysc
= {
559 static struct omap_hwmod_class omap54xx_emif_hwmod_class
= {
561 .sysc
= &omap54xx_emif_sysc
,
565 static struct omap_hwmod omap54xx_emif1_hwmod
= {
567 .class = &omap54xx_emif_hwmod_class
,
568 .clkdm_name
= "emif_clkdm",
569 .flags
= HWMOD_INIT_NO_IDLE
,
570 .main_clk
= "dpll_core_h11x2_ck",
573 .clkctrl_offs
= OMAP54XX_CM_EMIF_EMIF1_CLKCTRL_OFFSET
,
574 .context_offs
= OMAP54XX_RM_EMIF_EMIF1_CONTEXT_OFFSET
,
575 .modulemode
= MODULEMODE_HWCTRL
,
581 static struct omap_hwmod omap54xx_emif2_hwmod
= {
583 .class = &omap54xx_emif_hwmod_class
,
584 .clkdm_name
= "emif_clkdm",
585 .flags
= HWMOD_INIT_NO_IDLE
,
586 .main_clk
= "dpll_core_h11x2_ck",
589 .clkctrl_offs
= OMAP54XX_CM_EMIF_EMIF2_CLKCTRL_OFFSET
,
590 .context_offs
= OMAP54XX_RM_EMIF_EMIF2_CONTEXT_OFFSET
,
591 .modulemode
= MODULEMODE_HWCTRL
,
598 * keyboard controller
601 static struct omap_hwmod_class_sysconfig omap54xx_kbd_sysc
= {
604 .sysc_flags
= (SYSC_HAS_EMUFREE
| SYSC_HAS_SIDLEMODE
|
606 .idlemodes
= (SIDLE_FORCE
| SIDLE_NO
| SIDLE_SMART
),
607 .sysc_fields
= &omap_hwmod_sysc_type1
,
610 static struct omap_hwmod_class omap54xx_kbd_hwmod_class
= {
612 .sysc
= &omap54xx_kbd_sysc
,
616 static struct omap_hwmod omap54xx_kbd_hwmod
= {
618 .class = &omap54xx_kbd_hwmod_class
,
619 .clkdm_name
= "wkupaon_clkdm",
620 .main_clk
= "sys_32k_ck",
623 .clkctrl_offs
= OMAP54XX_CM_WKUPAON_KBD_CLKCTRL_OFFSET
,
624 .context_offs
= OMAP54XX_RM_WKUPAON_KBD_CONTEXT_OFFSET
,
625 .modulemode
= MODULEMODE_SWCTRL
,
632 * multi channel pdm controller (proprietary interface with phoenix power
636 static struct omap_hwmod_class_sysconfig omap54xx_mcpdm_sysc
= {
639 .sysc_flags
= (SYSC_HAS_EMUFREE
| SYSC_HAS_RESET_STATUS
|
640 SYSC_HAS_SIDLEMODE
| SYSC_HAS_SOFTRESET
),
641 .idlemodes
= (SIDLE_FORCE
| SIDLE_NO
| SIDLE_SMART
|
643 .sysc_fields
= &omap_hwmod_sysc_type2
,
646 static struct omap_hwmod_class omap54xx_mcpdm_hwmod_class
= {
648 .sysc
= &omap54xx_mcpdm_sysc
,
652 static struct omap_hwmod omap54xx_mcpdm_hwmod
= {
654 .class = &omap54xx_mcpdm_hwmod_class
,
655 .clkdm_name
= "abe_clkdm",
657 * It's suspected that the McPDM requires an off-chip main
658 * functional clock, controlled via I2C. This IP block is
659 * currently reset very early during boot, before I2C is
660 * available, so it doesn't seem that we have any choice in
661 * the kernel other than to avoid resetting it. XXX This is
662 * really a hardware issue workaround: every IP block should
663 * be able to source its main functional clock from either
664 * on-chip or off-chip sources. McPDM seems to be the only
668 .flags
= HWMOD_EXT_OPT_MAIN_CLK
| HWMOD_SWSUP_SIDLE
,
669 .main_clk
= "pad_clks_ck",
672 .clkctrl_offs
= OMAP54XX_CM_ABE_MCPDM_CLKCTRL_OFFSET
,
673 .context_offs
= OMAP54XX_RM_ABE_MCPDM_CONTEXT_OFFSET
,
674 .modulemode
= MODULEMODE_SWCTRL
,
682 * The memory management unit performs virtual to physical address translation
683 * for its requestors.
686 static struct omap_hwmod_class_sysconfig omap54xx_mmu_sysc
= {
690 .sysc_flags
= (SYSC_HAS_AUTOIDLE
| SYSC_HAS_CLOCKACTIVITY
|
691 SYSC_HAS_SIDLEMODE
| SYSC_HAS_SOFTRESET
|
692 SYSS_HAS_RESET_STATUS
),
693 .idlemodes
= (SIDLE_FORCE
| SIDLE_NO
| SIDLE_SMART
),
694 .sysc_fields
= &omap_hwmod_sysc_type1
,
697 static struct omap_hwmod_class omap54xx_mmu_hwmod_class
= {
699 .sysc
= &omap54xx_mmu_sysc
,
702 static struct omap_hwmod_rst_info omap54xx_mmu_dsp_resets
[] = {
703 { .name
= "mmu_cache", .rst_shift
= 1 },
706 static struct omap_hwmod omap54xx_mmu_dsp_hwmod
= {
708 .class = &omap54xx_mmu_hwmod_class
,
709 .clkdm_name
= "dsp_clkdm",
710 .rst_lines
= omap54xx_mmu_dsp_resets
,
711 .rst_lines_cnt
= ARRAY_SIZE(omap54xx_mmu_dsp_resets
),
712 .main_clk
= "dpll_iva_h11x2_ck",
715 .clkctrl_offs
= OMAP54XX_CM_DSP_DSP_CLKCTRL_OFFSET
,
716 .rstctrl_offs
= OMAP54XX_RM_DSP_RSTCTRL_OFFSET
,
717 .context_offs
= OMAP54XX_RM_DSP_DSP_CONTEXT_OFFSET
,
718 .modulemode
= MODULEMODE_HWCTRL
,
724 static struct omap_hwmod_rst_info omap54xx_mmu_ipu_resets
[] = {
725 { .name
= "mmu_cache", .rst_shift
= 2 },
728 static struct omap_hwmod omap54xx_mmu_ipu_hwmod
= {
730 .class = &omap54xx_mmu_hwmod_class
,
731 .clkdm_name
= "ipu_clkdm",
732 .rst_lines
= omap54xx_mmu_ipu_resets
,
733 .rst_lines_cnt
= ARRAY_SIZE(omap54xx_mmu_ipu_resets
),
734 .main_clk
= "dpll_core_h22x2_ck",
737 .clkctrl_offs
= OMAP54XX_CM_IPU_IPU_CLKCTRL_OFFSET
,
738 .rstctrl_offs
= OMAP54XX_RM_IPU_RSTCTRL_OFFSET
,
739 .context_offs
= OMAP54XX_RM_IPU_IPU_CONTEXT_OFFSET
,
740 .modulemode
= MODULEMODE_HWCTRL
,
750 static struct omap_hwmod_class omap54xx_mpu_hwmod_class
= {
755 static struct omap_hwmod omap54xx_mpu_hwmod
= {
757 .class = &omap54xx_mpu_hwmod_class
,
758 .clkdm_name
= "mpu_clkdm",
759 .flags
= HWMOD_INIT_NO_IDLE
,
760 .main_clk
= "dpll_mpu_m2_ck",
763 .clkctrl_offs
= OMAP54XX_CM_MPU_MPU_CLKCTRL_OFFSET
,
764 .context_offs
= OMAP54XX_RM_MPU_MPU_CONTEXT_OFFSET
,
771 * spinlock provides hardware assistance for synchronizing the processes
772 * running on multiple processors
775 static struct omap_hwmod_class_sysconfig omap54xx_spinlock_sysc
= {
779 .sysc_flags
= (SYSC_HAS_AUTOIDLE
| SYSC_HAS_CLOCKACTIVITY
|
780 SYSC_HAS_ENAWAKEUP
| SYSC_HAS_SIDLEMODE
|
781 SYSC_HAS_SOFTRESET
| SYSS_HAS_RESET_STATUS
),
782 .idlemodes
= (SIDLE_FORCE
| SIDLE_NO
| SIDLE_SMART
),
783 .sysc_fields
= &omap_hwmod_sysc_type1
,
786 static struct omap_hwmod_class omap54xx_spinlock_hwmod_class
= {
788 .sysc
= &omap54xx_spinlock_sysc
,
792 static struct omap_hwmod omap54xx_spinlock_hwmod
= {
794 .class = &omap54xx_spinlock_hwmod_class
,
795 .clkdm_name
= "l4cfg_clkdm",
798 .clkctrl_offs
= OMAP54XX_CM_L4CFG_SPINLOCK_CLKCTRL_OFFSET
,
799 .context_offs
= OMAP54XX_RM_L4CFG_SPINLOCK_CONTEXT_OFFSET
,
806 * bridge to transform ocp interface protocol to scp (serial control port)
810 static struct omap_hwmod_class_sysconfig omap54xx_ocp2scp_sysc
= {
814 .sysc_flags
= (SYSC_HAS_AUTOIDLE
| SYSC_HAS_SIDLEMODE
|
815 SYSC_HAS_SOFTRESET
| SYSS_HAS_RESET_STATUS
),
816 .idlemodes
= (SIDLE_FORCE
| SIDLE_NO
| SIDLE_SMART
),
817 .sysc_fields
= &omap_hwmod_sysc_type1
,
820 static struct omap_hwmod_class omap54xx_ocp2scp_hwmod_class
= {
822 .sysc
= &omap54xx_ocp2scp_sysc
,
826 static struct omap_hwmod omap54xx_ocp2scp1_hwmod
= {
828 .class = &omap54xx_ocp2scp_hwmod_class
,
829 .clkdm_name
= "l3init_clkdm",
830 .main_clk
= "l4_root_clk_div",
833 .clkctrl_offs
= OMAP54XX_CM_L3INIT_OCP2SCP1_CLKCTRL_OFFSET
,
834 .context_offs
= OMAP54XX_RM_L3INIT_OCP2SCP1_CONTEXT_OFFSET
,
835 .modulemode
= MODULEMODE_HWCTRL
,
842 * general purpose timer module with accurate 1ms tick
843 * This class contains several variants: ['timer_1ms', 'timer']
846 static struct omap_hwmod_class_sysconfig omap54xx_timer_1ms_sysc
= {
849 .sysc_flags
= (SYSC_HAS_EMUFREE
| SYSC_HAS_RESET_STATUS
|
850 SYSC_HAS_SIDLEMODE
| SYSC_HAS_SOFTRESET
),
851 .idlemodes
= (SIDLE_FORCE
| SIDLE_NO
| SIDLE_SMART
|
853 .sysc_fields
= &omap_hwmod_sysc_type2
,
856 static struct omap_hwmod_class omap54xx_timer_1ms_hwmod_class
= {
858 .sysc
= &omap54xx_timer_1ms_sysc
,
861 static struct omap_hwmod_class_sysconfig omap54xx_timer_sysc
= {
864 .sysc_flags
= (SYSC_HAS_EMUFREE
| SYSC_HAS_RESET_STATUS
|
865 SYSC_HAS_SIDLEMODE
| SYSC_HAS_SOFTRESET
),
866 .idlemodes
= (SIDLE_FORCE
| SIDLE_NO
| SIDLE_SMART
|
868 .sysc_fields
= &omap_hwmod_sysc_type2
,
871 static struct omap_hwmod_class omap54xx_timer_hwmod_class
= {
873 .sysc
= &omap54xx_timer_sysc
,
877 static struct omap_hwmod omap54xx_timer1_hwmod
= {
879 .class = &omap54xx_timer_1ms_hwmod_class
,
880 .clkdm_name
= "wkupaon_clkdm",
881 .main_clk
= "timer1_gfclk_mux",
882 .flags
= HWMOD_SET_DEFAULT_CLOCKACT
,
885 .clkctrl_offs
= OMAP54XX_CM_WKUPAON_TIMER1_CLKCTRL_OFFSET
,
886 .context_offs
= OMAP54XX_RM_WKUPAON_TIMER1_CONTEXT_OFFSET
,
887 .modulemode
= MODULEMODE_SWCTRL
,
893 static struct omap_hwmod omap54xx_timer2_hwmod
= {
895 .class = &omap54xx_timer_1ms_hwmod_class
,
896 .clkdm_name
= "l4per_clkdm",
897 .main_clk
= "timer2_gfclk_mux",
898 .flags
= HWMOD_SET_DEFAULT_CLOCKACT
,
901 .clkctrl_offs
= OMAP54XX_CM_L4PER_TIMER2_CLKCTRL_OFFSET
,
902 .context_offs
= OMAP54XX_RM_L4PER_TIMER2_CONTEXT_OFFSET
,
903 .modulemode
= MODULEMODE_SWCTRL
,
909 static struct omap_hwmod omap54xx_timer3_hwmod
= {
911 .class = &omap54xx_timer_hwmod_class
,
912 .clkdm_name
= "l4per_clkdm",
913 .main_clk
= "timer3_gfclk_mux",
916 .clkctrl_offs
= OMAP54XX_CM_L4PER_TIMER3_CLKCTRL_OFFSET
,
917 .context_offs
= OMAP54XX_RM_L4PER_TIMER3_CONTEXT_OFFSET
,
918 .modulemode
= MODULEMODE_SWCTRL
,
924 static struct omap_hwmod omap54xx_timer4_hwmod
= {
926 .class = &omap54xx_timer_hwmod_class
,
927 .clkdm_name
= "l4per_clkdm",
928 .main_clk
= "timer4_gfclk_mux",
931 .clkctrl_offs
= OMAP54XX_CM_L4PER_TIMER4_CLKCTRL_OFFSET
,
932 .context_offs
= OMAP54XX_RM_L4PER_TIMER4_CONTEXT_OFFSET
,
933 .modulemode
= MODULEMODE_SWCTRL
,
939 static struct omap_hwmod omap54xx_timer5_hwmod
= {
941 .class = &omap54xx_timer_hwmod_class
,
942 .clkdm_name
= "abe_clkdm",
943 .main_clk
= "timer5_gfclk_mux",
946 .clkctrl_offs
= OMAP54XX_CM_ABE_TIMER5_CLKCTRL_OFFSET
,
947 .context_offs
= OMAP54XX_RM_ABE_TIMER5_CONTEXT_OFFSET
,
948 .modulemode
= MODULEMODE_SWCTRL
,
954 static struct omap_hwmod omap54xx_timer6_hwmod
= {
956 .class = &omap54xx_timer_hwmod_class
,
957 .clkdm_name
= "abe_clkdm",
958 .main_clk
= "timer6_gfclk_mux",
961 .clkctrl_offs
= OMAP54XX_CM_ABE_TIMER6_CLKCTRL_OFFSET
,
962 .context_offs
= OMAP54XX_RM_ABE_TIMER6_CONTEXT_OFFSET
,
963 .modulemode
= MODULEMODE_SWCTRL
,
969 static struct omap_hwmod omap54xx_timer7_hwmod
= {
971 .class = &omap54xx_timer_hwmod_class
,
972 .clkdm_name
= "abe_clkdm",
973 .main_clk
= "timer7_gfclk_mux",
976 .clkctrl_offs
= OMAP54XX_CM_ABE_TIMER7_CLKCTRL_OFFSET
,
977 .context_offs
= OMAP54XX_RM_ABE_TIMER7_CONTEXT_OFFSET
,
978 .modulemode
= MODULEMODE_SWCTRL
,
984 static struct omap_hwmod omap54xx_timer8_hwmod
= {
986 .class = &omap54xx_timer_hwmod_class
,
987 .clkdm_name
= "abe_clkdm",
988 .main_clk
= "timer8_gfclk_mux",
991 .clkctrl_offs
= OMAP54XX_CM_ABE_TIMER8_CLKCTRL_OFFSET
,
992 .context_offs
= OMAP54XX_RM_ABE_TIMER8_CONTEXT_OFFSET
,
993 .modulemode
= MODULEMODE_SWCTRL
,
999 static struct omap_hwmod omap54xx_timer9_hwmod
= {
1001 .class = &omap54xx_timer_hwmod_class
,
1002 .clkdm_name
= "l4per_clkdm",
1003 .main_clk
= "timer9_gfclk_mux",
1006 .clkctrl_offs
= OMAP54XX_CM_L4PER_TIMER9_CLKCTRL_OFFSET
,
1007 .context_offs
= OMAP54XX_RM_L4PER_TIMER9_CONTEXT_OFFSET
,
1008 .modulemode
= MODULEMODE_SWCTRL
,
1014 static struct omap_hwmod omap54xx_timer10_hwmod
= {
1016 .class = &omap54xx_timer_1ms_hwmod_class
,
1017 .clkdm_name
= "l4per_clkdm",
1018 .main_clk
= "timer10_gfclk_mux",
1019 .flags
= HWMOD_SET_DEFAULT_CLOCKACT
,
1022 .clkctrl_offs
= OMAP54XX_CM_L4PER_TIMER10_CLKCTRL_OFFSET
,
1023 .context_offs
= OMAP54XX_RM_L4PER_TIMER10_CONTEXT_OFFSET
,
1024 .modulemode
= MODULEMODE_SWCTRL
,
1030 static struct omap_hwmod omap54xx_timer11_hwmod
= {
1032 .class = &omap54xx_timer_hwmod_class
,
1033 .clkdm_name
= "l4per_clkdm",
1034 .main_clk
= "timer11_gfclk_mux",
1037 .clkctrl_offs
= OMAP54XX_CM_L4PER_TIMER11_CLKCTRL_OFFSET
,
1038 .context_offs
= OMAP54XX_RM_L4PER_TIMER11_CONTEXT_OFFSET
,
1039 .modulemode
= MODULEMODE_SWCTRL
,
1045 * 'usb_host_hs' class
1046 * high-speed multi-port usb host controller
1049 static struct omap_hwmod_class_sysconfig omap54xx_usb_host_hs_sysc
= {
1051 .sysc_offs
= 0x0010,
1052 .sysc_flags
= (SYSC_HAS_MIDLEMODE
| SYSC_HAS_RESET_STATUS
|
1053 SYSC_HAS_SIDLEMODE
| SYSC_HAS_SOFTRESET
),
1054 .idlemodes
= (SIDLE_FORCE
| SIDLE_NO
| SIDLE_SMART
|
1055 SIDLE_SMART_WKUP
| MSTANDBY_FORCE
| MSTANDBY_NO
|
1056 MSTANDBY_SMART
| MSTANDBY_SMART_WKUP
),
1057 .sysc_fields
= &omap_hwmod_sysc_type2
,
1060 static struct omap_hwmod_class omap54xx_usb_host_hs_hwmod_class
= {
1061 .name
= "usb_host_hs",
1062 .sysc
= &omap54xx_usb_host_hs_sysc
,
1065 static struct omap_hwmod omap54xx_usb_host_hs_hwmod
= {
1066 .name
= "usb_host_hs",
1067 .class = &omap54xx_usb_host_hs_hwmod_class
,
1068 .clkdm_name
= "l3init_clkdm",
1070 * Errata: USBHOST Configured In Smart-Idle Can Lead To a Deadlock
1074 * In the following configuration :
1075 * - USBHOST module is set to smart-idle mode
1076 * - PRCM asserts idle_req to the USBHOST module ( This typically
1077 * happens when the system is going to a low power mode : all ports
1078 * have been suspended, the master part of the USBHOST module has
1079 * entered the standby state, and SW has cut the functional clocks)
1080 * - an USBHOST interrupt occurs before the module is able to answer
1081 * idle_ack, typically a remote wakeup IRQ.
1082 * Then the USB HOST module will enter a deadlock situation where it
1083 * is no more accessible nor functional.
1086 * Don't use smart idle; use only force idle, hence HWMOD_SWSUP_SIDLE
1090 * Errata: USB host EHCI may stall when entering smart-standby mode
1094 * When the USBHOST module is set to smart-standby mode, and when it is
1095 * ready to enter the standby state (i.e. all ports are suspended and
1096 * all attached devices are in suspend mode), then it can wrongly assert
1097 * the Mstandby signal too early while there are still some residual OCP
1098 * transactions ongoing. If this condition occurs, the internal state
1099 * machine may go to an undefined state and the USB link may be stuck
1100 * upon the next resume.
1103 * Don't use smart standby; use only force standby,
1104 * hence HWMOD_SWSUP_MSTANDBY
1107 .flags
= HWMOD_SWSUP_SIDLE
| HWMOD_SWSUP_MSTANDBY
,
1108 .main_clk
= "l3init_60m_fclk",
1111 .clkctrl_offs
= OMAP54XX_CM_L3INIT_USB_HOST_HS_CLKCTRL_OFFSET
,
1112 .context_offs
= OMAP54XX_RM_L3INIT_USB_HOST_HS_CONTEXT_OFFSET
,
1113 .modulemode
= MODULEMODE_SWCTRL
,
1119 * 'usb_tll_hs' class
1120 * usb_tll_hs module is the adapter on the usb_host_hs ports
1123 static struct omap_hwmod_class_sysconfig omap54xx_usb_tll_hs_sysc
= {
1125 .sysc_offs
= 0x0010,
1126 .syss_offs
= 0x0014,
1127 .sysc_flags
= (SYSC_HAS_AUTOIDLE
| SYSC_HAS_CLOCKACTIVITY
|
1128 SYSC_HAS_ENAWAKEUP
| SYSC_HAS_SIDLEMODE
|
1129 SYSC_HAS_SOFTRESET
| SYSS_HAS_RESET_STATUS
),
1130 .idlemodes
= (SIDLE_FORCE
| SIDLE_NO
| SIDLE_SMART
),
1131 .sysc_fields
= &omap_hwmod_sysc_type1
,
1134 static struct omap_hwmod_class omap54xx_usb_tll_hs_hwmod_class
= {
1135 .name
= "usb_tll_hs",
1136 .sysc
= &omap54xx_usb_tll_hs_sysc
,
1139 static struct omap_hwmod omap54xx_usb_tll_hs_hwmod
= {
1140 .name
= "usb_tll_hs",
1141 .class = &omap54xx_usb_tll_hs_hwmod_class
,
1142 .clkdm_name
= "l3init_clkdm",
1143 .main_clk
= "l4_root_clk_div",
1146 .clkctrl_offs
= OMAP54XX_CM_L3INIT_USB_TLL_HS_CLKCTRL_OFFSET
,
1147 .context_offs
= OMAP54XX_RM_L3INIT_USB_TLL_HS_CONTEXT_OFFSET
,
1148 .modulemode
= MODULEMODE_HWCTRL
,
1154 * 'usb_otg_ss' class
1155 * 2.0 super speed (usb_otg_ss) controller
1158 static struct omap_hwmod_class_sysconfig omap54xx_usb_otg_ss_sysc
= {
1160 .sysc_offs
= 0x0010,
1161 .sysc_flags
= (SYSC_HAS_DMADISABLE
| SYSC_HAS_MIDLEMODE
|
1162 SYSC_HAS_SIDLEMODE
),
1163 .idlemodes
= (SIDLE_FORCE
| SIDLE_NO
| SIDLE_SMART
|
1164 SIDLE_SMART_WKUP
| MSTANDBY_FORCE
| MSTANDBY_NO
|
1165 MSTANDBY_SMART
| MSTANDBY_SMART_WKUP
),
1166 .sysc_fields
= &omap_hwmod_sysc_type2
,
1169 static struct omap_hwmod_class omap54xx_usb_otg_ss_hwmod_class
= {
1170 .name
= "usb_otg_ss",
1171 .sysc
= &omap54xx_usb_otg_ss_sysc
,
1175 static struct omap_hwmod_opt_clk usb_otg_ss_opt_clks
[] = {
1176 { .role
= "refclk960m", .clk
= "usb_otg_ss_refclk960m" },
1179 static struct omap_hwmod omap54xx_usb_otg_ss_hwmod
= {
1180 .name
= "usb_otg_ss",
1181 .class = &omap54xx_usb_otg_ss_hwmod_class
,
1182 .clkdm_name
= "l3init_clkdm",
1183 .flags
= HWMOD_SWSUP_SIDLE
,
1184 .main_clk
= "dpll_core_h13x2_ck",
1187 .clkctrl_offs
= OMAP54XX_CM_L3INIT_USB_OTG_SS_CLKCTRL_OFFSET
,
1188 .context_offs
= OMAP54XX_RM_L3INIT_USB_OTG_SS_CONTEXT_OFFSET
,
1189 .modulemode
= MODULEMODE_HWCTRL
,
1192 .opt_clks
= usb_otg_ss_opt_clks
,
1193 .opt_clks_cnt
= ARRAY_SIZE(usb_otg_ss_opt_clks
),
1199 * bridge to transform ocp interface protocol to scp (serial control port)
1203 static struct omap_hwmod omap54xx_ocp2scp3_hwmod
;
1204 /* l4_cfg -> ocp2scp3 */
1205 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__ocp2scp3
= {
1206 .master
= &omap54xx_l4_cfg_hwmod
,
1207 .slave
= &omap54xx_ocp2scp3_hwmod
,
1208 .clk
= "l4_root_clk_div",
1209 .user
= OCP_USER_MPU
| OCP_USER_SDMA
,
1212 static struct omap_hwmod omap54xx_ocp2scp3_hwmod
= {
1214 .class = &omap54xx_ocp2scp_hwmod_class
,
1215 .clkdm_name
= "l3init_clkdm",
1218 .clkctrl_offs
= OMAP54XX_CM_L3INIT_OCP2SCP3_CLKCTRL_OFFSET
,
1219 .context_offs
= OMAP54XX_RM_L3INIT_OCP2SCP3_CONTEXT_OFFSET
,
1220 .modulemode
= MODULEMODE_HWCTRL
,
1227 * sata: serial ata interface gen2 compliant ( 1 rx/ 1 tx)
1230 static struct omap_hwmod_class_sysconfig omap54xx_sata_sysc
= {
1232 .sysc_offs
= 0x0000,
1233 .sysc_flags
= (SYSC_HAS_MIDLEMODE
| SYSC_HAS_SIDLEMODE
),
1234 .idlemodes
= (SIDLE_FORCE
| SIDLE_NO
| SIDLE_SMART
|
1235 SIDLE_SMART_WKUP
| MSTANDBY_FORCE
| MSTANDBY_NO
|
1236 MSTANDBY_SMART
| MSTANDBY_SMART_WKUP
),
1237 .sysc_fields
= &omap_hwmod_sysc_type2
,
1240 static struct omap_hwmod_class omap54xx_sata_hwmod_class
= {
1242 .sysc
= &omap54xx_sata_sysc
,
1246 static struct omap_hwmod omap54xx_sata_hwmod
= {
1248 .class = &omap54xx_sata_hwmod_class
,
1249 .clkdm_name
= "l3init_clkdm",
1250 .flags
= HWMOD_SWSUP_SIDLE
| HWMOD_SWSUP_MSTANDBY
,
1251 .main_clk
= "func_48m_fclk",
1255 .clkctrl_offs
= OMAP54XX_CM_L3INIT_SATA_CLKCTRL_OFFSET
,
1256 .context_offs
= OMAP54XX_RM_L3INIT_SATA_CONTEXT_OFFSET
,
1257 .modulemode
= MODULEMODE_SWCTRL
,
1262 /* l4_cfg -> sata */
1263 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__sata
= {
1264 .master
= &omap54xx_l4_cfg_hwmod
,
1265 .slave
= &omap54xx_sata_hwmod
,
1266 .clk
= "l3_iclk_div",
1267 .user
= OCP_USER_MPU
| OCP_USER_SDMA
,
1274 /* l3_main_1 -> dmm */
1275 static struct omap_hwmod_ocp_if omap54xx_l3_main_1__dmm
= {
1276 .master
= &omap54xx_l3_main_1_hwmod
,
1277 .slave
= &omap54xx_dmm_hwmod
,
1278 .clk
= "l3_iclk_div",
1279 .user
= OCP_USER_SDMA
,
1282 /* l3_main_3 -> l3_instr */
1283 static struct omap_hwmod_ocp_if omap54xx_l3_main_3__l3_instr
= {
1284 .master
= &omap54xx_l3_main_3_hwmod
,
1285 .slave
= &omap54xx_l3_instr_hwmod
,
1286 .clk
= "l3_iclk_div",
1287 .user
= OCP_USER_MPU
| OCP_USER_SDMA
,
1290 /* l3_main_2 -> l3_main_1 */
1291 static struct omap_hwmod_ocp_if omap54xx_l3_main_2__l3_main_1
= {
1292 .master
= &omap54xx_l3_main_2_hwmod
,
1293 .slave
= &omap54xx_l3_main_1_hwmod
,
1294 .clk
= "l3_iclk_div",
1295 .user
= OCP_USER_MPU
| OCP_USER_SDMA
,
1298 /* l4_cfg -> l3_main_1 */
1299 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__l3_main_1
= {
1300 .master
= &omap54xx_l4_cfg_hwmod
,
1301 .slave
= &omap54xx_l3_main_1_hwmod
,
1302 .clk
= "l3_iclk_div",
1303 .user
= OCP_USER_MPU
| OCP_USER_SDMA
,
1306 /* l4_cfg -> mmu_dsp */
1307 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__mmu_dsp
= {
1308 .master
= &omap54xx_l4_cfg_hwmod
,
1309 .slave
= &omap54xx_mmu_dsp_hwmod
,
1310 .clk
= "l4_root_clk_div",
1311 .user
= OCP_USER_MPU
| OCP_USER_SDMA
,
1314 /* mpu -> l3_main_1 */
1315 static struct omap_hwmod_ocp_if omap54xx_mpu__l3_main_1
= {
1316 .master
= &omap54xx_mpu_hwmod
,
1317 .slave
= &omap54xx_l3_main_1_hwmod
,
1318 .clk
= "l3_iclk_div",
1319 .user
= OCP_USER_MPU
,
1322 /* l3_main_1 -> l3_main_2 */
1323 static struct omap_hwmod_ocp_if omap54xx_l3_main_1__l3_main_2
= {
1324 .master
= &omap54xx_l3_main_1_hwmod
,
1325 .slave
= &omap54xx_l3_main_2_hwmod
,
1326 .clk
= "l3_iclk_div",
1327 .user
= OCP_USER_MPU
,
1330 /* l4_cfg -> l3_main_2 */
1331 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__l3_main_2
= {
1332 .master
= &omap54xx_l4_cfg_hwmod
,
1333 .slave
= &omap54xx_l3_main_2_hwmod
,
1334 .clk
= "l3_iclk_div",
1335 .user
= OCP_USER_MPU
| OCP_USER_SDMA
,
1338 /* l3_main_2 -> mmu_ipu */
1339 static struct omap_hwmod_ocp_if omap54xx_l3_main_2__mmu_ipu
= {
1340 .master
= &omap54xx_l3_main_2_hwmod
,
1341 .slave
= &omap54xx_mmu_ipu_hwmod
,
1342 .clk
= "l3_iclk_div",
1343 .user
= OCP_USER_MPU
| OCP_USER_SDMA
,
1346 /* l3_main_1 -> l3_main_3 */
1347 static struct omap_hwmod_ocp_if omap54xx_l3_main_1__l3_main_3
= {
1348 .master
= &omap54xx_l3_main_1_hwmod
,
1349 .slave
= &omap54xx_l3_main_3_hwmod
,
1350 .clk
= "l3_iclk_div",
1351 .user
= OCP_USER_MPU
,
1354 /* l3_main_2 -> l3_main_3 */
1355 static struct omap_hwmod_ocp_if omap54xx_l3_main_2__l3_main_3
= {
1356 .master
= &omap54xx_l3_main_2_hwmod
,
1357 .slave
= &omap54xx_l3_main_3_hwmod
,
1358 .clk
= "l3_iclk_div",
1359 .user
= OCP_USER_MPU
| OCP_USER_SDMA
,
1362 /* l4_cfg -> l3_main_3 */
1363 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__l3_main_3
= {
1364 .master
= &omap54xx_l4_cfg_hwmod
,
1365 .slave
= &omap54xx_l3_main_3_hwmod
,
1366 .clk
= "l3_iclk_div",
1367 .user
= OCP_USER_MPU
| OCP_USER_SDMA
,
1370 /* l3_main_1 -> l4_abe */
1371 static struct omap_hwmod_ocp_if omap54xx_l3_main_1__l4_abe
= {
1372 .master
= &omap54xx_l3_main_1_hwmod
,
1373 .slave
= &omap54xx_l4_abe_hwmod
,
1375 .user
= OCP_USER_MPU
| OCP_USER_SDMA
,
1379 static struct omap_hwmod_ocp_if omap54xx_mpu__l4_abe
= {
1380 .master
= &omap54xx_mpu_hwmod
,
1381 .slave
= &omap54xx_l4_abe_hwmod
,
1383 .user
= OCP_USER_MPU
| OCP_USER_SDMA
,
1386 /* l3_main_1 -> l4_cfg */
1387 static struct omap_hwmod_ocp_if omap54xx_l3_main_1__l4_cfg
= {
1388 .master
= &omap54xx_l3_main_1_hwmod
,
1389 .slave
= &omap54xx_l4_cfg_hwmod
,
1390 .clk
= "l4_root_clk_div",
1391 .user
= OCP_USER_MPU
| OCP_USER_SDMA
,
1394 /* l3_main_2 -> l4_per */
1395 static struct omap_hwmod_ocp_if omap54xx_l3_main_2__l4_per
= {
1396 .master
= &omap54xx_l3_main_2_hwmod
,
1397 .slave
= &omap54xx_l4_per_hwmod
,
1398 .clk
= "l4_root_clk_div",
1399 .user
= OCP_USER_MPU
| OCP_USER_SDMA
,
1402 /* l3_main_1 -> l4_wkup */
1403 static struct omap_hwmod_ocp_if omap54xx_l3_main_1__l4_wkup
= {
1404 .master
= &omap54xx_l3_main_1_hwmod
,
1405 .slave
= &omap54xx_l4_wkup_hwmod
,
1406 .clk
= "wkupaon_iclk_mux",
1407 .user
= OCP_USER_MPU
| OCP_USER_SDMA
,
1410 /* mpu -> mpu_private */
1411 static struct omap_hwmod_ocp_if omap54xx_mpu__mpu_private
= {
1412 .master
= &omap54xx_mpu_hwmod
,
1413 .slave
= &omap54xx_mpu_private_hwmod
,
1414 .clk
= "l3_iclk_div",
1415 .user
= OCP_USER_MPU
| OCP_USER_SDMA
,
1418 /* l4_wkup -> counter_32k */
1419 static struct omap_hwmod_ocp_if omap54xx_l4_wkup__counter_32k
= {
1420 .master
= &omap54xx_l4_wkup_hwmod
,
1421 .slave
= &omap54xx_counter_32k_hwmod
,
1422 .clk
= "wkupaon_iclk_mux",
1423 .user
= OCP_USER_MPU
| OCP_USER_SDMA
,
1426 /* l4_cfg -> dma_system */
1427 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__dma_system
= {
1428 .master
= &omap54xx_l4_cfg_hwmod
,
1429 .slave
= &omap54xx_dma_system_hwmod
,
1430 .clk
= "l4_root_clk_div",
1431 .user
= OCP_USER_MPU
| OCP_USER_SDMA
,
1434 /* l4_abe -> dmic */
1435 static struct omap_hwmod_ocp_if omap54xx_l4_abe__dmic
= {
1436 .master
= &omap54xx_l4_abe_hwmod
,
1437 .slave
= &omap54xx_dmic_hwmod
,
1439 .user
= OCP_USER_MPU
,
1442 /* l3_main_2 -> dss */
1443 static struct omap_hwmod_ocp_if omap54xx_l3_main_2__dss
= {
1444 .master
= &omap54xx_l3_main_2_hwmod
,
1445 .slave
= &omap54xx_dss_hwmod
,
1446 .clk
= "l3_iclk_div",
1447 .user
= OCP_USER_MPU
| OCP_USER_SDMA
,
1450 /* l3_main_2 -> dss_dispc */
1451 static struct omap_hwmod_ocp_if omap54xx_l3_main_2__dss_dispc
= {
1452 .master
= &omap54xx_l3_main_2_hwmod
,
1453 .slave
= &omap54xx_dss_dispc_hwmod
,
1454 .clk
= "l3_iclk_div",
1455 .user
= OCP_USER_MPU
| OCP_USER_SDMA
,
1458 /* l3_main_2 -> dss_dsi1_a */
1459 static struct omap_hwmod_ocp_if omap54xx_l3_main_2__dss_dsi1_a
= {
1460 .master
= &omap54xx_l3_main_2_hwmod
,
1461 .slave
= &omap54xx_dss_dsi1_a_hwmod
,
1462 .clk
= "l3_iclk_div",
1463 .user
= OCP_USER_MPU
| OCP_USER_SDMA
,
1466 /* l3_main_2 -> dss_dsi1_c */
1467 static struct omap_hwmod_ocp_if omap54xx_l3_main_2__dss_dsi1_c
= {
1468 .master
= &omap54xx_l3_main_2_hwmod
,
1469 .slave
= &omap54xx_dss_dsi1_c_hwmod
,
1470 .clk
= "l3_iclk_div",
1471 .user
= OCP_USER_MPU
| OCP_USER_SDMA
,
1474 /* l3_main_2 -> dss_hdmi */
1475 static struct omap_hwmod_ocp_if omap54xx_l3_main_2__dss_hdmi
= {
1476 .master
= &omap54xx_l3_main_2_hwmod
,
1477 .slave
= &omap54xx_dss_hdmi_hwmod
,
1478 .clk
= "l3_iclk_div",
1479 .user
= OCP_USER_MPU
| OCP_USER_SDMA
,
1482 /* l3_main_2 -> dss_rfbi */
1483 static struct omap_hwmod_ocp_if omap54xx_l3_main_2__dss_rfbi
= {
1484 .master
= &omap54xx_l3_main_2_hwmod
,
1485 .slave
= &omap54xx_dss_rfbi_hwmod
,
1486 .clk
= "l3_iclk_div",
1487 .user
= OCP_USER_MPU
| OCP_USER_SDMA
,
1491 static struct omap_hwmod_ocp_if omap54xx_mpu__emif1
= {
1492 .master
= &omap54xx_mpu_hwmod
,
1493 .slave
= &omap54xx_emif1_hwmod
,
1494 .clk
= "dpll_core_h11x2_ck",
1495 .user
= OCP_USER_MPU
| OCP_USER_SDMA
,
1499 static struct omap_hwmod_ocp_if omap54xx_mpu__emif2
= {
1500 .master
= &omap54xx_mpu_hwmod
,
1501 .slave
= &omap54xx_emif2_hwmod
,
1502 .clk
= "dpll_core_h11x2_ck",
1503 .user
= OCP_USER_MPU
| OCP_USER_SDMA
,
1506 /* l4_wkup -> kbd */
1507 static struct omap_hwmod_ocp_if omap54xx_l4_wkup__kbd
= {
1508 .master
= &omap54xx_l4_wkup_hwmod
,
1509 .slave
= &omap54xx_kbd_hwmod
,
1510 .clk
= "wkupaon_iclk_mux",
1511 .user
= OCP_USER_MPU
| OCP_USER_SDMA
,
1514 /* l4_abe -> mcpdm */
1515 static struct omap_hwmod_ocp_if omap54xx_l4_abe__mcpdm
= {
1516 .master
= &omap54xx_l4_abe_hwmod
,
1517 .slave
= &omap54xx_mcpdm_hwmod
,
1519 .user
= OCP_USER_MPU
,
1523 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__mpu
= {
1524 .master
= &omap54xx_l4_cfg_hwmod
,
1525 .slave
= &omap54xx_mpu_hwmod
,
1526 .clk
= "l4_root_clk_div",
1527 .user
= OCP_USER_MPU
| OCP_USER_SDMA
,
1530 /* l4_cfg -> spinlock */
1531 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__spinlock
= {
1532 .master
= &omap54xx_l4_cfg_hwmod
,
1533 .slave
= &omap54xx_spinlock_hwmod
,
1534 .clk
= "l4_root_clk_div",
1535 .user
= OCP_USER_MPU
| OCP_USER_SDMA
,
1538 /* l4_cfg -> ocp2scp1 */
1539 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__ocp2scp1
= {
1540 .master
= &omap54xx_l4_cfg_hwmod
,
1541 .slave
= &omap54xx_ocp2scp1_hwmod
,
1542 .clk
= "l4_root_clk_div",
1543 .user
= OCP_USER_MPU
| OCP_USER_SDMA
,
1546 /* l4_wkup -> timer1 */
1547 static struct omap_hwmod_ocp_if omap54xx_l4_wkup__timer1
= {
1548 .master
= &omap54xx_l4_wkup_hwmod
,
1549 .slave
= &omap54xx_timer1_hwmod
,
1550 .clk
= "wkupaon_iclk_mux",
1551 .user
= OCP_USER_MPU
| OCP_USER_SDMA
,
1554 /* l4_per -> timer2 */
1555 static struct omap_hwmod_ocp_if omap54xx_l4_per__timer2
= {
1556 .master
= &omap54xx_l4_per_hwmod
,
1557 .slave
= &omap54xx_timer2_hwmod
,
1558 .clk
= "l4_root_clk_div",
1559 .user
= OCP_USER_MPU
| OCP_USER_SDMA
,
1562 /* l4_per -> timer3 */
1563 static struct omap_hwmod_ocp_if omap54xx_l4_per__timer3
= {
1564 .master
= &omap54xx_l4_per_hwmod
,
1565 .slave
= &omap54xx_timer3_hwmod
,
1566 .clk
= "l4_root_clk_div",
1567 .user
= OCP_USER_MPU
| OCP_USER_SDMA
,
1570 /* l4_per -> timer4 */
1571 static struct omap_hwmod_ocp_if omap54xx_l4_per__timer4
= {
1572 .master
= &omap54xx_l4_per_hwmod
,
1573 .slave
= &omap54xx_timer4_hwmod
,
1574 .clk
= "l4_root_clk_div",
1575 .user
= OCP_USER_MPU
| OCP_USER_SDMA
,
1578 /* l4_abe -> timer5 */
1579 static struct omap_hwmod_ocp_if omap54xx_l4_abe__timer5
= {
1580 .master
= &omap54xx_l4_abe_hwmod
,
1581 .slave
= &omap54xx_timer5_hwmod
,
1583 .user
= OCP_USER_MPU
,
1586 /* l4_abe -> timer6 */
1587 static struct omap_hwmod_ocp_if omap54xx_l4_abe__timer6
= {
1588 .master
= &omap54xx_l4_abe_hwmod
,
1589 .slave
= &omap54xx_timer6_hwmod
,
1591 .user
= OCP_USER_MPU
,
1594 /* l4_abe -> timer7 */
1595 static struct omap_hwmod_ocp_if omap54xx_l4_abe__timer7
= {
1596 .master
= &omap54xx_l4_abe_hwmod
,
1597 .slave
= &omap54xx_timer7_hwmod
,
1599 .user
= OCP_USER_MPU
,
1602 /* l4_abe -> timer8 */
1603 static struct omap_hwmod_ocp_if omap54xx_l4_abe__timer8
= {
1604 .master
= &omap54xx_l4_abe_hwmod
,
1605 .slave
= &omap54xx_timer8_hwmod
,
1607 .user
= OCP_USER_MPU
,
1610 /* l4_per -> timer9 */
1611 static struct omap_hwmod_ocp_if omap54xx_l4_per__timer9
= {
1612 .master
= &omap54xx_l4_per_hwmod
,
1613 .slave
= &omap54xx_timer9_hwmod
,
1614 .clk
= "l4_root_clk_div",
1615 .user
= OCP_USER_MPU
| OCP_USER_SDMA
,
1618 /* l4_per -> timer10 */
1619 static struct omap_hwmod_ocp_if omap54xx_l4_per__timer10
= {
1620 .master
= &omap54xx_l4_per_hwmod
,
1621 .slave
= &omap54xx_timer10_hwmod
,
1622 .clk
= "l4_root_clk_div",
1623 .user
= OCP_USER_MPU
| OCP_USER_SDMA
,
1626 /* l4_per -> timer11 */
1627 static struct omap_hwmod_ocp_if omap54xx_l4_per__timer11
= {
1628 .master
= &omap54xx_l4_per_hwmod
,
1629 .slave
= &omap54xx_timer11_hwmod
,
1630 .clk
= "l4_root_clk_div",
1631 .user
= OCP_USER_MPU
| OCP_USER_SDMA
,
1634 /* l4_cfg -> usb_host_hs */
1635 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__usb_host_hs
= {
1636 .master
= &omap54xx_l4_cfg_hwmod
,
1637 .slave
= &omap54xx_usb_host_hs_hwmod
,
1638 .clk
= "l3_iclk_div",
1639 .user
= OCP_USER_MPU
| OCP_USER_SDMA
,
1642 /* l4_cfg -> usb_tll_hs */
1643 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__usb_tll_hs
= {
1644 .master
= &omap54xx_l4_cfg_hwmod
,
1645 .slave
= &omap54xx_usb_tll_hs_hwmod
,
1646 .clk
= "l4_root_clk_div",
1647 .user
= OCP_USER_MPU
| OCP_USER_SDMA
,
1650 /* l4_cfg -> usb_otg_ss */
1651 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__usb_otg_ss
= {
1652 .master
= &omap54xx_l4_cfg_hwmod
,
1653 .slave
= &omap54xx_usb_otg_ss_hwmod
,
1654 .clk
= "dpll_core_h13x2_ck",
1655 .user
= OCP_USER_MPU
| OCP_USER_SDMA
,
1658 static struct omap_hwmod_ocp_if
*omap54xx_hwmod_ocp_ifs
[] __initdata
= {
1659 &omap54xx_l3_main_1__dmm
,
1660 &omap54xx_l3_main_3__l3_instr
,
1661 &omap54xx_l3_main_2__l3_main_1
,
1662 &omap54xx_l4_cfg__l3_main_1
,
1663 &omap54xx_mpu__l3_main_1
,
1664 &omap54xx_l3_main_1__l3_main_2
,
1665 &omap54xx_l4_cfg__l3_main_2
,
1666 &omap54xx_l3_main_1__l3_main_3
,
1667 &omap54xx_l3_main_2__l3_main_3
,
1668 &omap54xx_l4_cfg__l3_main_3
,
1669 &omap54xx_l3_main_1__l4_abe
,
1670 &omap54xx_mpu__l4_abe
,
1671 &omap54xx_l3_main_1__l4_cfg
,
1672 &omap54xx_l3_main_2__l4_per
,
1673 &omap54xx_l3_main_1__l4_wkup
,
1674 &omap54xx_mpu__mpu_private
,
1675 &omap54xx_l4_wkup__counter_32k
,
1676 &omap54xx_l4_cfg__dma_system
,
1677 &omap54xx_l4_abe__dmic
,
1678 &omap54xx_l4_cfg__mmu_dsp
,
1679 &omap54xx_l3_main_2__dss
,
1680 &omap54xx_l3_main_2__dss_dispc
,
1681 &omap54xx_l3_main_2__dss_dsi1_a
,
1682 &omap54xx_l3_main_2__dss_dsi1_c
,
1683 &omap54xx_l3_main_2__dss_hdmi
,
1684 &omap54xx_l3_main_2__dss_rfbi
,
1685 &omap54xx_mpu__emif1
,
1686 &omap54xx_mpu__emif2
,
1687 &omap54xx_l3_main_2__mmu_ipu
,
1688 &omap54xx_l4_wkup__kbd
,
1689 &omap54xx_l4_abe__mcpdm
,
1690 &omap54xx_l4_cfg__mpu
,
1691 &omap54xx_l4_cfg__spinlock
,
1692 &omap54xx_l4_cfg__ocp2scp1
,
1693 &omap54xx_l4_wkup__timer1
,
1694 &omap54xx_l4_per__timer2
,
1695 &omap54xx_l4_per__timer3
,
1696 &omap54xx_l4_per__timer4
,
1697 &omap54xx_l4_abe__timer5
,
1698 &omap54xx_l4_abe__timer6
,
1699 &omap54xx_l4_abe__timer7
,
1700 &omap54xx_l4_abe__timer8
,
1701 &omap54xx_l4_per__timer9
,
1702 &omap54xx_l4_per__timer10
,
1703 &omap54xx_l4_per__timer11
,
1704 &omap54xx_l4_cfg__usb_host_hs
,
1705 &omap54xx_l4_cfg__usb_tll_hs
,
1706 &omap54xx_l4_cfg__usb_otg_ss
,
1707 &omap54xx_l4_cfg__ocp2scp3
,
1708 &omap54xx_l4_cfg__sata
,
1712 int __init
omap54xx_hwmod_init(void)
1715 return omap_hwmod_register_links(omap54xx_hwmod_ocp_ifs
);