3 * Copyright (C) 2013 Texas Instruments Incorporated
5 * Hwmod common for AM335x and AM43x
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License as
9 * published by the Free Software Foundation version 2.
11 * This program is distributed "as is" WITHOUT ANY WARRANTY of any
12 * kind, whether express or implied; without even the implied warranty
13 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
17 #include <linux/platform_data/gpio-omap.h>
18 #include <linux/platform_data/spi-omap2-mcspi.h>
19 #include "omap_hwmod.h"
25 #include "omap_hwmod_33xx_43xx_common_data.h"
29 * instance(s): l3_main, l3_s, l3_instr
31 static struct omap_hwmod_class am33xx_l3_hwmod_class
= {
35 struct omap_hwmod am33xx_l3_main_hwmod
= {
37 .class = &am33xx_l3_hwmod_class
,
38 .clkdm_name
= "l3_clkdm",
39 .flags
= HWMOD_INIT_NO_IDLE
,
40 .main_clk
= "l3_gclk",
43 .clkctrl_offs
= AM33XX_CM_PER_L3_CLKCTRL_OFFSET
,
44 .modulemode
= MODULEMODE_SWCTRL
,
50 struct omap_hwmod am33xx_l3_s_hwmod
= {
52 .class = &am33xx_l3_hwmod_class
,
53 .clkdm_name
= "l3s_clkdm",
57 struct omap_hwmod am33xx_l3_instr_hwmod
= {
59 .class = &am33xx_l3_hwmod_class
,
60 .clkdm_name
= "l3_clkdm",
61 .flags
= HWMOD_INIT_NO_IDLE
,
62 .main_clk
= "l3_gclk",
65 .clkctrl_offs
= AM33XX_CM_PER_L3_INSTR_CLKCTRL_OFFSET
,
66 .modulemode
= MODULEMODE_SWCTRL
,
73 * instance(s): l4_ls, l4_hs, l4_wkup, l4_fw
75 struct omap_hwmod_class am33xx_l4_hwmod_class
= {
80 struct omap_hwmod am33xx_l4_ls_hwmod
= {
82 .class = &am33xx_l4_hwmod_class
,
83 .clkdm_name
= "l4ls_clkdm",
84 .flags
= HWMOD_INIT_NO_IDLE
,
85 .main_clk
= "l4ls_gclk",
88 .clkctrl_offs
= AM33XX_CM_PER_L4LS_CLKCTRL_OFFSET
,
89 .modulemode
= MODULEMODE_SWCTRL
,
95 struct omap_hwmod am33xx_l4_wkup_hwmod
= {
97 .class = &am33xx_l4_hwmod_class
,
98 .clkdm_name
= "l4_wkup_clkdm",
99 .flags
= HWMOD_INIT_NO_IDLE
,
102 .clkctrl_offs
= AM33XX_CM_WKUP_L4WKUP_CLKCTRL_OFFSET
,
103 .modulemode
= MODULEMODE_SWCTRL
,
111 static struct omap_hwmod_class am33xx_mpu_hwmod_class
= {
115 struct omap_hwmod am33xx_mpu_hwmod
= {
117 .class = &am33xx_mpu_hwmod_class
,
118 .clkdm_name
= "mpu_clkdm",
119 .flags
= HWMOD_INIT_NO_IDLE
,
120 .main_clk
= "dpll_mpu_m2_ck",
123 .clkctrl_offs
= AM33XX_CM_MPU_MPU_CLKCTRL_OFFSET
,
124 .modulemode
= MODULEMODE_SWCTRL
,
131 * Wakeup controller sub-system under wakeup domain
133 struct omap_hwmod_class am33xx_wkup_m3_hwmod_class
= {
139 * Programmable Real-Time Unit and Industrial Communication Subsystem
141 static struct omap_hwmod_class am33xx_pruss_hwmod_class
= {
145 static struct omap_hwmod_rst_info am33xx_pruss_resets
[] = {
146 { .name
= "pruss", .rst_shift
= 1 },
150 /* Pseudo hwmod for reset control purpose only */
151 struct omap_hwmod am33xx_pruss_hwmod
= {
153 .class = &am33xx_pruss_hwmod_class
,
154 .clkdm_name
= "pruss_ocp_clkdm",
155 .main_clk
= "pruss_ocp_gclk",
158 .clkctrl_offs
= AM33XX_CM_PER_PRUSS_CLKCTRL_OFFSET
,
159 .rstctrl_offs
= AM33XX_RM_PER_RSTCTRL_OFFSET
,
160 .modulemode
= MODULEMODE_SWCTRL
,
163 .rst_lines
= am33xx_pruss_resets
,
164 .rst_lines_cnt
= ARRAY_SIZE(am33xx_pruss_resets
),
168 /* Pseudo hwmod for reset control purpose only */
169 static struct omap_hwmod_class am33xx_gfx_hwmod_class
= {
173 static struct omap_hwmod_rst_info am33xx_gfx_resets
[] = {
174 { .name
= "gfx", .rst_shift
= 0, .st_shift
= 0},
177 struct omap_hwmod am33xx_gfx_hwmod
= {
179 .class = &am33xx_gfx_hwmod_class
,
180 .clkdm_name
= "gfx_l3_clkdm",
181 .main_clk
= "gfx_fck_div_ck",
184 .clkctrl_offs
= AM33XX_CM_GFX_GFX_CLKCTRL_OFFSET
,
185 .rstctrl_offs
= AM33XX_RM_GFX_RSTCTRL_OFFSET
,
186 .rstst_offs
= AM33XX_RM_GFX_RSTST_OFFSET
,
187 .modulemode
= MODULEMODE_SWCTRL
,
190 .rst_lines
= am33xx_gfx_resets
,
191 .rst_lines_cnt
= ARRAY_SIZE(am33xx_gfx_resets
),
196 * power and reset manager (whole prcm infrastructure)
198 static struct omap_hwmod_class am33xx_prcm_hwmod_class
= {
203 struct omap_hwmod am33xx_prcm_hwmod
= {
205 .class = &am33xx_prcm_hwmod_class
,
206 .clkdm_name
= "l4_wkup_clkdm",
212 static struct omap_hwmod_class_sysconfig am33xx_aes0_sysc
= {
216 .sysc_flags
= SYSS_HAS_RESET_STATUS
,
219 static struct omap_hwmod_class am33xx_aes0_hwmod_class
= {
221 .sysc
= &am33xx_aes0_sysc
,
224 struct omap_hwmod am33xx_aes0_hwmod
= {
226 .class = &am33xx_aes0_hwmod_class
,
227 .clkdm_name
= "l3_clkdm",
228 .main_clk
= "aes0_fck",
231 .clkctrl_offs
= AM33XX_CM_PER_AES0_CLKCTRL_OFFSET
,
232 .modulemode
= MODULEMODE_SWCTRL
,
237 /* sha0 HIB2 (the 'P' (public) device) */
238 static struct omap_hwmod_class_sysconfig am33xx_sha0_sysc
= {
242 .sysc_flags
= SYSS_HAS_RESET_STATUS
,
245 static struct omap_hwmod_class am33xx_sha0_hwmod_class
= {
247 .sysc
= &am33xx_sha0_sysc
,
250 struct omap_hwmod am33xx_sha0_hwmod
= {
252 .class = &am33xx_sha0_hwmod_class
,
253 .clkdm_name
= "l3_clkdm",
254 .main_clk
= "l3_gclk",
257 .clkctrl_offs
= AM33XX_CM_PER_SHA0_CLKCTRL_OFFSET
,
258 .modulemode
= MODULEMODE_SWCTRL
,
264 static struct omap_hwmod_class am33xx_ocmcram_hwmod_class
= {
268 struct omap_hwmod am33xx_ocmcram_hwmod
= {
270 .class = &am33xx_ocmcram_hwmod_class
,
271 .clkdm_name
= "l3_clkdm",
272 .flags
= HWMOD_INIT_NO_IDLE
,
273 .main_clk
= "l3_gclk",
276 .clkctrl_offs
= AM33XX_CM_PER_OCMCRAM_CLKCTRL_OFFSET
,
277 .modulemode
= MODULEMODE_SWCTRL
,
282 /* 'smartreflex' class */
283 static struct omap_hwmod_class am33xx_smartreflex_hwmod_class
= {
284 .name
= "smartreflex",
288 struct omap_hwmod am33xx_smartreflex0_hwmod
= {
289 .name
= "smartreflex0",
290 .class = &am33xx_smartreflex_hwmod_class
,
291 .clkdm_name
= "l4_wkup_clkdm",
292 .main_clk
= "smartreflex0_fck",
295 .clkctrl_offs
= AM33XX_CM_WKUP_SMARTREFLEX0_CLKCTRL_OFFSET
,
296 .modulemode
= MODULEMODE_SWCTRL
,
302 struct omap_hwmod am33xx_smartreflex1_hwmod
= {
303 .name
= "smartreflex1",
304 .class = &am33xx_smartreflex_hwmod_class
,
305 .clkdm_name
= "l4_wkup_clkdm",
306 .main_clk
= "smartreflex1_fck",
309 .clkctrl_offs
= AM33XX_CM_WKUP_SMARTREFLEX1_CLKCTRL_OFFSET
,
310 .modulemode
= MODULEMODE_SWCTRL
,
316 * 'control' module class
318 struct omap_hwmod_class am33xx_control_hwmod_class
= {
324 * cpsw/cpgmac sub system
326 static struct omap_hwmod_class_sysconfig am33xx_cpgmac_sysc
= {
330 .sysc_flags
= (SYSC_HAS_SIDLEMODE
| SYSC_HAS_MIDLEMODE
|
331 SYSS_HAS_RESET_STATUS
),
332 .idlemodes
= (SIDLE_FORCE
| SIDLE_NO
| MSTANDBY_FORCE
|
334 .sysc_fields
= &omap_hwmod_sysc_type3
,
337 static struct omap_hwmod_class am33xx_cpgmac0_hwmod_class
= {
339 .sysc
= &am33xx_cpgmac_sysc
,
342 struct omap_hwmod am33xx_cpgmac0_hwmod
= {
344 .class = &am33xx_cpgmac0_hwmod_class
,
345 .clkdm_name
= "cpsw_125mhz_clkdm",
346 .flags
= (HWMOD_SWSUP_SIDLE
| HWMOD_SWSUP_MSTANDBY
),
347 .main_clk
= "cpsw_125mhz_gclk",
351 .clkctrl_offs
= AM33XX_CM_PER_CPGMAC0_CLKCTRL_OFFSET
,
352 .modulemode
= MODULEMODE_SWCTRL
,
360 static struct omap_hwmod_class am33xx_mdio_hwmod_class
= {
361 .name
= "davinci_mdio",
364 struct omap_hwmod am33xx_mdio_hwmod
= {
365 .name
= "davinci_mdio",
366 .class = &am33xx_mdio_hwmod_class
,
367 .clkdm_name
= "cpsw_125mhz_clkdm",
368 .main_clk
= "cpsw_125mhz_gclk",
374 static struct omap_hwmod_class am33xx_dcan_hwmod_class
= {
379 struct omap_hwmod am33xx_dcan0_hwmod
= {
381 .class = &am33xx_dcan_hwmod_class
,
382 .clkdm_name
= "l4ls_clkdm",
383 .main_clk
= "dcan0_fck",
386 .clkctrl_offs
= AM33XX_CM_PER_DCAN0_CLKCTRL_OFFSET
,
387 .modulemode
= MODULEMODE_SWCTRL
,
393 struct omap_hwmod am33xx_dcan1_hwmod
= {
395 .class = &am33xx_dcan_hwmod_class
,
396 .clkdm_name
= "l4ls_clkdm",
397 .main_clk
= "dcan1_fck",
400 .clkctrl_offs
= AM33XX_CM_PER_DCAN1_CLKCTRL_OFFSET
,
401 .modulemode
= MODULEMODE_SWCTRL
,
407 static struct omap_hwmod_class_sysconfig am33xx_elm_sysc
= {
411 .sysc_flags
= (SYSC_HAS_CLOCKACTIVITY
| SYSC_HAS_SIDLEMODE
|
412 SYSC_HAS_SOFTRESET
| SYSC_HAS_AUTOIDLE
|
413 SYSS_HAS_RESET_STATUS
),
414 .idlemodes
= (SIDLE_FORCE
| SIDLE_NO
| SIDLE_SMART
),
415 .sysc_fields
= &omap_hwmod_sysc_type1
,
418 static struct omap_hwmod_class am33xx_elm_hwmod_class
= {
420 .sysc
= &am33xx_elm_sysc
,
423 struct omap_hwmod am33xx_elm_hwmod
= {
425 .class = &am33xx_elm_hwmod_class
,
426 .clkdm_name
= "l4ls_clkdm",
427 .main_clk
= "l4ls_gclk",
430 .clkctrl_offs
= AM33XX_CM_PER_ELM_CLKCTRL_OFFSET
,
431 .modulemode
= MODULEMODE_SWCTRL
,
437 static struct omap_hwmod_class_sysconfig am33xx_epwmss_sysc
= {
440 .sysc_flags
= (SYSC_HAS_SIDLEMODE
| SYSC_HAS_MIDLEMODE
),
441 .idlemodes
= (SIDLE_FORCE
| SIDLE_NO
| SIDLE_SMART
|
442 SIDLE_SMART_WKUP
| MSTANDBY_FORCE
| MSTANDBY_NO
|
443 MSTANDBY_SMART
| MSTANDBY_SMART_WKUP
),
444 .sysc_fields
= &omap_hwmod_sysc_type2
,
447 struct omap_hwmod_class am33xx_epwmss_hwmod_class
= {
449 .sysc
= &am33xx_epwmss_sysc
,
452 static struct omap_hwmod_class am33xx_ecap_hwmod_class
= {
456 static struct omap_hwmod_class am33xx_eqep_hwmod_class
= {
460 struct omap_hwmod_class am33xx_ehrpwm_hwmod_class
= {
465 struct omap_hwmod am33xx_epwmss0_hwmod
= {
467 .class = &am33xx_epwmss_hwmod_class
,
468 .clkdm_name
= "l4ls_clkdm",
469 .main_clk
= "l4ls_gclk",
472 .clkctrl_offs
= AM33XX_CM_PER_EPWMSS0_CLKCTRL_OFFSET
,
473 .modulemode
= MODULEMODE_SWCTRL
,
479 struct omap_hwmod am33xx_ecap0_hwmod
= {
481 .class = &am33xx_ecap_hwmod_class
,
482 .clkdm_name
= "l4ls_clkdm",
483 .main_clk
= "l4ls_gclk",
487 struct omap_hwmod am33xx_eqep0_hwmod
= {
489 .class = &am33xx_eqep_hwmod_class
,
490 .clkdm_name
= "l4ls_clkdm",
491 .main_clk
= "l4ls_gclk",
495 struct omap_hwmod am33xx_ehrpwm0_hwmod
= {
497 .class = &am33xx_ehrpwm_hwmod_class
,
498 .clkdm_name
= "l4ls_clkdm",
499 .main_clk
= "l4ls_gclk",
503 struct omap_hwmod am33xx_epwmss1_hwmod
= {
505 .class = &am33xx_epwmss_hwmod_class
,
506 .clkdm_name
= "l4ls_clkdm",
507 .main_clk
= "l4ls_gclk",
510 .clkctrl_offs
= AM33XX_CM_PER_EPWMSS1_CLKCTRL_OFFSET
,
511 .modulemode
= MODULEMODE_SWCTRL
,
517 struct omap_hwmod am33xx_ecap1_hwmod
= {
519 .class = &am33xx_ecap_hwmod_class
,
520 .clkdm_name
= "l4ls_clkdm",
521 .main_clk
= "l4ls_gclk",
525 struct omap_hwmod am33xx_eqep1_hwmod
= {
527 .class = &am33xx_eqep_hwmod_class
,
528 .clkdm_name
= "l4ls_clkdm",
529 .main_clk
= "l4ls_gclk",
533 struct omap_hwmod am33xx_ehrpwm1_hwmod
= {
535 .class = &am33xx_ehrpwm_hwmod_class
,
536 .clkdm_name
= "l4ls_clkdm",
537 .main_clk
= "l4ls_gclk",
541 struct omap_hwmod am33xx_epwmss2_hwmod
= {
543 .class = &am33xx_epwmss_hwmod_class
,
544 .clkdm_name
= "l4ls_clkdm",
545 .main_clk
= "l4ls_gclk",
548 .clkctrl_offs
= AM33XX_CM_PER_EPWMSS2_CLKCTRL_OFFSET
,
549 .modulemode
= MODULEMODE_SWCTRL
,
555 struct omap_hwmod am33xx_ecap2_hwmod
= {
557 .class = &am33xx_ecap_hwmod_class
,
558 .clkdm_name
= "l4ls_clkdm",
559 .main_clk
= "l4ls_gclk",
563 struct omap_hwmod am33xx_eqep2_hwmod
= {
565 .class = &am33xx_eqep_hwmod_class
,
566 .clkdm_name
= "l4ls_clkdm",
567 .main_clk
= "l4ls_gclk",
571 struct omap_hwmod am33xx_ehrpwm2_hwmod
= {
573 .class = &am33xx_ehrpwm_hwmod_class
,
574 .clkdm_name
= "l4ls_clkdm",
575 .main_clk
= "l4ls_gclk",
579 * 'gpio' class: for gpio 0,1,2,3
581 static struct omap_hwmod_class_sysconfig am33xx_gpio_sysc
= {
585 .sysc_flags
= (SYSC_HAS_AUTOIDLE
| SYSC_HAS_ENAWAKEUP
|
586 SYSC_HAS_SIDLEMODE
| SYSC_HAS_SOFTRESET
|
587 SYSS_HAS_RESET_STATUS
),
588 .idlemodes
= (SIDLE_FORCE
| SIDLE_NO
| SIDLE_SMART
|
590 .sysc_fields
= &omap_hwmod_sysc_type1
,
593 struct omap_hwmod_class am33xx_gpio_hwmod_class
= {
595 .sysc
= &am33xx_gpio_sysc
,
599 struct omap_gpio_dev_attr gpio_dev_attr
= {
605 static struct omap_hwmod_opt_clk gpio1_opt_clks
[] = {
606 { .role
= "dbclk", .clk
= "gpio1_dbclk" },
609 struct omap_hwmod am33xx_gpio1_hwmod
= {
611 .class = &am33xx_gpio_hwmod_class
,
612 .clkdm_name
= "l4ls_clkdm",
613 .flags
= HWMOD_CONTROL_OPT_CLKS_IN_RESET
,
614 .main_clk
= "l4ls_gclk",
617 .clkctrl_offs
= AM33XX_CM_PER_GPIO1_CLKCTRL_OFFSET
,
618 .modulemode
= MODULEMODE_SWCTRL
,
621 .opt_clks
= gpio1_opt_clks
,
622 .opt_clks_cnt
= ARRAY_SIZE(gpio1_opt_clks
),
623 .dev_attr
= &gpio_dev_attr
,
627 static struct omap_hwmod_opt_clk gpio2_opt_clks
[] = {
628 { .role
= "dbclk", .clk
= "gpio2_dbclk" },
631 struct omap_hwmod am33xx_gpio2_hwmod
= {
633 .class = &am33xx_gpio_hwmod_class
,
634 .clkdm_name
= "l4ls_clkdm",
635 .flags
= HWMOD_CONTROL_OPT_CLKS_IN_RESET
,
636 .main_clk
= "l4ls_gclk",
639 .clkctrl_offs
= AM33XX_CM_PER_GPIO2_CLKCTRL_OFFSET
,
640 .modulemode
= MODULEMODE_SWCTRL
,
643 .opt_clks
= gpio2_opt_clks
,
644 .opt_clks_cnt
= ARRAY_SIZE(gpio2_opt_clks
),
645 .dev_attr
= &gpio_dev_attr
,
649 static struct omap_hwmod_opt_clk gpio3_opt_clks
[] = {
650 { .role
= "dbclk", .clk
= "gpio3_dbclk" },
653 struct omap_hwmod am33xx_gpio3_hwmod
= {
655 .class = &am33xx_gpio_hwmod_class
,
656 .clkdm_name
= "l4ls_clkdm",
657 .flags
= HWMOD_CONTROL_OPT_CLKS_IN_RESET
,
658 .main_clk
= "l4ls_gclk",
661 .clkctrl_offs
= AM33XX_CM_PER_GPIO3_CLKCTRL_OFFSET
,
662 .modulemode
= MODULEMODE_SWCTRL
,
665 .opt_clks
= gpio3_opt_clks
,
666 .opt_clks_cnt
= ARRAY_SIZE(gpio3_opt_clks
),
667 .dev_attr
= &gpio_dev_attr
,
671 static struct omap_hwmod_class_sysconfig gpmc_sysc
= {
675 .sysc_flags
= (SYSC_HAS_AUTOIDLE
| SYSC_HAS_SIDLEMODE
|
676 SYSC_HAS_SOFTRESET
| SYSS_HAS_RESET_STATUS
),
677 .idlemodes
= (SIDLE_FORCE
| SIDLE_NO
| SIDLE_SMART
),
678 .sysc_fields
= &omap_hwmod_sysc_type1
,
681 static struct omap_hwmod_class am33xx_gpmc_hwmod_class
= {
686 struct omap_hwmod am33xx_gpmc_hwmod
= {
688 .class = &am33xx_gpmc_hwmod_class
,
689 .clkdm_name
= "l3s_clkdm",
690 .flags
= (HWMOD_INIT_NO_IDLE
| HWMOD_INIT_NO_RESET
),
691 .main_clk
= "l3s_gclk",
694 .clkctrl_offs
= AM33XX_CM_PER_GPMC_CLKCTRL_OFFSET
,
695 .modulemode
= MODULEMODE_SWCTRL
,
701 static struct omap_hwmod_class_sysconfig am33xx_i2c_sysc
= {
704 .sysc_flags
= (SYSC_HAS_AUTOIDLE
| SYSC_HAS_CLOCKACTIVITY
|
705 SYSC_HAS_ENAWAKEUP
| SYSC_HAS_SIDLEMODE
|
706 SYSC_HAS_SOFTRESET
| SYSS_HAS_RESET_STATUS
),
707 .idlemodes
= (SIDLE_FORCE
| SIDLE_NO
| SIDLE_SMART
|
709 .sysc_fields
= &omap_hwmod_sysc_type1
,
712 static struct omap_hwmod_class i2c_class
= {
714 .sysc
= &am33xx_i2c_sysc
,
715 .rev
= OMAP_I2C_IP_VERSION_2
,
716 .reset
= &omap_i2c_reset
,
719 static struct omap_i2c_dev_attr i2c_dev_attr
= {
720 .flags
= OMAP_I2C_FLAG_BUS_SHIFT_NONE
,
724 struct omap_hwmod am33xx_i2c1_hwmod
= {
727 .clkdm_name
= "l4_wkup_clkdm",
728 .flags
= HWMOD_16BIT_REG
| HWMOD_SET_DEFAULT_CLOCKACT
,
729 .main_clk
= "dpll_per_m2_div4_wkupdm_ck",
732 .clkctrl_offs
= AM33XX_CM_WKUP_I2C0_CLKCTRL_OFFSET
,
733 .modulemode
= MODULEMODE_SWCTRL
,
736 .dev_attr
= &i2c_dev_attr
,
740 struct omap_hwmod am33xx_i2c2_hwmod
= {
743 .clkdm_name
= "l4ls_clkdm",
744 .flags
= HWMOD_16BIT_REG
| HWMOD_SET_DEFAULT_CLOCKACT
,
745 .main_clk
= "dpll_per_m2_div4_ck",
748 .clkctrl_offs
= AM33XX_CM_PER_I2C1_CLKCTRL_OFFSET
,
749 .modulemode
= MODULEMODE_SWCTRL
,
752 .dev_attr
= &i2c_dev_attr
,
756 struct omap_hwmod am33xx_i2c3_hwmod
= {
759 .clkdm_name
= "l4ls_clkdm",
760 .flags
= HWMOD_16BIT_REG
| HWMOD_SET_DEFAULT_CLOCKACT
,
761 .main_clk
= "dpll_per_m2_div4_ck",
764 .clkctrl_offs
= AM33XX_CM_PER_I2C2_CLKCTRL_OFFSET
,
765 .modulemode
= MODULEMODE_SWCTRL
,
768 .dev_attr
= &i2c_dev_attr
,
773 * mailbox module allowing communication between the on-chip processors using a
774 * queued mailbox-interrupt mechanism.
776 static struct omap_hwmod_class_sysconfig am33xx_mailbox_sysc
= {
779 .sysc_flags
= (SYSC_HAS_RESET_STATUS
| SYSC_HAS_SIDLEMODE
|
781 .idlemodes
= (SIDLE_FORCE
| SIDLE_NO
| SIDLE_SMART
),
782 .sysc_fields
= &omap_hwmod_sysc_type2
,
785 static struct omap_hwmod_class am33xx_mailbox_hwmod_class
= {
787 .sysc
= &am33xx_mailbox_sysc
,
790 struct omap_hwmod am33xx_mailbox_hwmod
= {
792 .class = &am33xx_mailbox_hwmod_class
,
793 .clkdm_name
= "l4ls_clkdm",
794 .main_clk
= "l4ls_gclk",
797 .clkctrl_offs
= AM33XX_CM_PER_MAILBOX0_CLKCTRL_OFFSET
,
798 .modulemode
= MODULEMODE_SWCTRL
,
806 static struct omap_hwmod_class_sysconfig am33xx_mcasp_sysc
= {
809 .sysc_flags
= SYSC_HAS_SIDLEMODE
,
810 .idlemodes
= (SIDLE_FORCE
| SIDLE_NO
| SIDLE_SMART
),
811 .sysc_fields
= &omap_hwmod_sysc_type3
,
814 static struct omap_hwmod_class am33xx_mcasp_hwmod_class
= {
816 .sysc
= &am33xx_mcasp_sysc
,
820 struct omap_hwmod am33xx_mcasp0_hwmod
= {
822 .class = &am33xx_mcasp_hwmod_class
,
823 .clkdm_name
= "l3s_clkdm",
824 .main_clk
= "mcasp0_fck",
827 .clkctrl_offs
= AM33XX_CM_PER_MCASP0_CLKCTRL_OFFSET
,
828 .modulemode
= MODULEMODE_SWCTRL
,
834 struct omap_hwmod am33xx_mcasp1_hwmod
= {
836 .class = &am33xx_mcasp_hwmod_class
,
837 .clkdm_name
= "l3s_clkdm",
838 .main_clk
= "mcasp1_fck",
841 .clkctrl_offs
= AM33XX_CM_PER_MCASP1_CLKCTRL_OFFSET
,
842 .modulemode
= MODULEMODE_SWCTRL
,
848 static struct omap_hwmod_class_sysconfig am33xx_mmc_sysc
= {
852 .sysc_flags
= (SYSC_HAS_CLOCKACTIVITY
| SYSC_HAS_SIDLEMODE
|
853 SYSC_HAS_ENAWAKEUP
| SYSC_HAS_SOFTRESET
|
854 SYSC_HAS_AUTOIDLE
| SYSS_HAS_RESET_STATUS
),
855 .idlemodes
= (SIDLE_FORCE
| SIDLE_NO
| SIDLE_SMART
),
856 .sysc_fields
= &omap_hwmod_sysc_type1
,
859 static struct omap_hwmod_class am33xx_mmc_hwmod_class
= {
861 .sysc
= &am33xx_mmc_sysc
,
865 static struct omap_mmc_dev_attr am33xx_mmc0_dev_attr
= {
866 .flags
= OMAP_HSMMC_SUPPORTS_DUAL_VOLT
,
869 struct omap_hwmod am33xx_mmc0_hwmod
= {
871 .class = &am33xx_mmc_hwmod_class
,
872 .clkdm_name
= "l4ls_clkdm",
873 .main_clk
= "mmc_clk",
876 .clkctrl_offs
= AM33XX_CM_PER_MMC0_CLKCTRL_OFFSET
,
877 .modulemode
= MODULEMODE_SWCTRL
,
880 .dev_attr
= &am33xx_mmc0_dev_attr
,
884 static struct omap_mmc_dev_attr am33xx_mmc1_dev_attr
= {
885 .flags
= OMAP_HSMMC_SUPPORTS_DUAL_VOLT
,
888 struct omap_hwmod am33xx_mmc1_hwmod
= {
890 .class = &am33xx_mmc_hwmod_class
,
891 .clkdm_name
= "l4ls_clkdm",
892 .main_clk
= "mmc_clk",
895 .clkctrl_offs
= AM33XX_CM_PER_MMC1_CLKCTRL_OFFSET
,
896 .modulemode
= MODULEMODE_SWCTRL
,
899 .dev_attr
= &am33xx_mmc1_dev_attr
,
903 static struct omap_mmc_dev_attr am33xx_mmc2_dev_attr
= {
904 .flags
= OMAP_HSMMC_SUPPORTS_DUAL_VOLT
,
906 struct omap_hwmod am33xx_mmc2_hwmod
= {
908 .class = &am33xx_mmc_hwmod_class
,
909 .clkdm_name
= "l3s_clkdm",
910 .main_clk
= "mmc_clk",
913 .clkctrl_offs
= AM33XX_CM_PER_MMC2_CLKCTRL_OFFSET
,
914 .modulemode
= MODULEMODE_SWCTRL
,
917 .dev_attr
= &am33xx_mmc2_dev_attr
,
924 static struct omap_hwmod_class_sysconfig am33xx_rtc_sysc
= {
927 .sysc_flags
= SYSC_HAS_SIDLEMODE
,
928 .idlemodes
= (SIDLE_FORCE
| SIDLE_NO
|
929 SIDLE_SMART
| SIDLE_SMART_WKUP
),
930 .sysc_fields
= &omap_hwmod_sysc_type3
,
933 static struct omap_hwmod_class am33xx_rtc_hwmod_class
= {
935 .sysc
= &am33xx_rtc_sysc
,
938 struct omap_hwmod am33xx_rtc_hwmod
= {
940 .class = &am33xx_rtc_hwmod_class
,
941 .clkdm_name
= "l4_rtc_clkdm",
942 .main_clk
= "clk_32768_ck",
945 .clkctrl_offs
= AM33XX_CM_RTC_RTC_CLKCTRL_OFFSET
,
946 .modulemode
= MODULEMODE_SWCTRL
,
952 static struct omap_hwmod_class_sysconfig am33xx_mcspi_sysc
= {
956 .sysc_flags
= (SYSC_HAS_CLOCKACTIVITY
| SYSC_HAS_SIDLEMODE
|
957 SYSC_HAS_SOFTRESET
| SYSC_HAS_AUTOIDLE
|
958 SYSS_HAS_RESET_STATUS
),
959 .idlemodes
= (SIDLE_FORCE
| SIDLE_NO
| SIDLE_SMART
),
960 .sysc_fields
= &omap_hwmod_sysc_type1
,
963 struct omap_hwmod_class am33xx_spi_hwmod_class
= {
965 .sysc
= &am33xx_mcspi_sysc
,
966 .rev
= OMAP4_MCSPI_REV
,
970 struct omap2_mcspi_dev_attr mcspi_attrib
= {
973 struct omap_hwmod am33xx_spi0_hwmod
= {
975 .class = &am33xx_spi_hwmod_class
,
976 .clkdm_name
= "l4ls_clkdm",
977 .main_clk
= "dpll_per_m2_div4_ck",
980 .clkctrl_offs
= AM33XX_CM_PER_SPI0_CLKCTRL_OFFSET
,
981 .modulemode
= MODULEMODE_SWCTRL
,
984 .dev_attr
= &mcspi_attrib
,
988 struct omap_hwmod am33xx_spi1_hwmod
= {
990 .class = &am33xx_spi_hwmod_class
,
991 .clkdm_name
= "l4ls_clkdm",
992 .main_clk
= "dpll_per_m2_div4_ck",
995 .clkctrl_offs
= AM33XX_CM_PER_SPI1_CLKCTRL_OFFSET
,
996 .modulemode
= MODULEMODE_SWCTRL
,
999 .dev_attr
= &mcspi_attrib
,
1004 * spinlock provides hardware assistance for synchronizing the
1005 * processes running on multiple processors
1008 static struct omap_hwmod_class_sysconfig am33xx_spinlock_sysc
= {
1010 .sysc_offs
= 0x0010,
1011 .syss_offs
= 0x0014,
1012 .sysc_flags
= (SYSC_HAS_AUTOIDLE
| SYSC_HAS_CLOCKACTIVITY
|
1013 SYSC_HAS_ENAWAKEUP
| SYSC_HAS_SIDLEMODE
|
1014 SYSC_HAS_SOFTRESET
| SYSS_HAS_RESET_STATUS
),
1015 .idlemodes
= (SIDLE_FORCE
| SIDLE_NO
| SIDLE_SMART
),
1016 .sysc_fields
= &omap_hwmod_sysc_type1
,
1019 static struct omap_hwmod_class am33xx_spinlock_hwmod_class
= {
1021 .sysc
= &am33xx_spinlock_sysc
,
1024 struct omap_hwmod am33xx_spinlock_hwmod
= {
1026 .class = &am33xx_spinlock_hwmod_class
,
1027 .clkdm_name
= "l4ls_clkdm",
1028 .main_clk
= "l4ls_gclk",
1031 .clkctrl_offs
= AM33XX_CM_PER_SPINLOCK_CLKCTRL_OFFSET
,
1032 .modulemode
= MODULEMODE_SWCTRL
,
1037 /* 'timer 2-7' class */
1038 static struct omap_hwmod_class_sysconfig am33xx_timer_sysc
= {
1040 .sysc_offs
= 0x0010,
1041 .syss_offs
= 0x0014,
1042 .sysc_flags
= (SYSC_HAS_SIDLEMODE
| SYSC_HAS_SOFTRESET
),
1043 .idlemodes
= (SIDLE_FORCE
| SIDLE_NO
| SIDLE_SMART
|
1045 .sysc_fields
= &omap_hwmod_sysc_type2
,
1048 struct omap_hwmod_class am33xx_timer_hwmod_class
= {
1050 .sysc
= &am33xx_timer_sysc
,
1054 static struct omap_hwmod_class_sysconfig am33xx_timer1ms_sysc
= {
1056 .sysc_offs
= 0x0010,
1057 .syss_offs
= 0x0014,
1058 .sysc_flags
= (SYSC_HAS_CLOCKACTIVITY
| SYSC_HAS_SIDLEMODE
|
1059 SYSC_HAS_SOFTRESET
| SYSC_HAS_AUTOIDLE
|
1060 SYSS_HAS_RESET_STATUS
),
1061 .idlemodes
= (SIDLE_FORCE
| SIDLE_NO
| SIDLE_SMART
),
1062 .sysc_fields
= &omap_hwmod_sysc_type1
,
1065 static struct omap_hwmod_class am33xx_timer1ms_hwmod_class
= {
1067 .sysc
= &am33xx_timer1ms_sysc
,
1070 struct omap_hwmod am33xx_timer1_hwmod
= {
1072 .class = &am33xx_timer1ms_hwmod_class
,
1073 .clkdm_name
= "l4_wkup_clkdm",
1074 .main_clk
= "timer1_fck",
1077 .clkctrl_offs
= AM33XX_CM_WKUP_TIMER1_CLKCTRL_OFFSET
,
1078 .modulemode
= MODULEMODE_SWCTRL
,
1083 struct omap_hwmod am33xx_timer2_hwmod
= {
1085 .class = &am33xx_timer_hwmod_class
,
1086 .clkdm_name
= "l4ls_clkdm",
1087 .main_clk
= "timer2_fck",
1090 .clkctrl_offs
= AM33XX_CM_PER_TIMER2_CLKCTRL_OFFSET
,
1091 .modulemode
= MODULEMODE_SWCTRL
,
1096 struct omap_hwmod am33xx_timer3_hwmod
= {
1098 .class = &am33xx_timer_hwmod_class
,
1099 .clkdm_name
= "l4ls_clkdm",
1100 .main_clk
= "timer3_fck",
1103 .clkctrl_offs
= AM33XX_CM_PER_TIMER3_CLKCTRL_OFFSET
,
1104 .modulemode
= MODULEMODE_SWCTRL
,
1109 struct omap_hwmod am33xx_timer4_hwmod
= {
1111 .class = &am33xx_timer_hwmod_class
,
1112 .clkdm_name
= "l4ls_clkdm",
1113 .main_clk
= "timer4_fck",
1116 .clkctrl_offs
= AM33XX_CM_PER_TIMER4_CLKCTRL_OFFSET
,
1117 .modulemode
= MODULEMODE_SWCTRL
,
1122 struct omap_hwmod am33xx_timer5_hwmod
= {
1124 .class = &am33xx_timer_hwmod_class
,
1125 .clkdm_name
= "l4ls_clkdm",
1126 .main_clk
= "timer5_fck",
1129 .clkctrl_offs
= AM33XX_CM_PER_TIMER5_CLKCTRL_OFFSET
,
1130 .modulemode
= MODULEMODE_SWCTRL
,
1135 struct omap_hwmod am33xx_timer6_hwmod
= {
1137 .class = &am33xx_timer_hwmod_class
,
1138 .clkdm_name
= "l4ls_clkdm",
1139 .main_clk
= "timer6_fck",
1142 .clkctrl_offs
= AM33XX_CM_PER_TIMER6_CLKCTRL_OFFSET
,
1143 .modulemode
= MODULEMODE_SWCTRL
,
1148 struct omap_hwmod am33xx_timer7_hwmod
= {
1150 .class = &am33xx_timer_hwmod_class
,
1151 .clkdm_name
= "l4ls_clkdm",
1152 .main_clk
= "timer7_fck",
1155 .clkctrl_offs
= AM33XX_CM_PER_TIMER7_CLKCTRL_OFFSET
,
1156 .modulemode
= MODULEMODE_SWCTRL
,
1162 static struct omap_hwmod_class am33xx_tpcc_hwmod_class
= {
1166 struct omap_hwmod am33xx_tpcc_hwmod
= {
1168 .class = &am33xx_tpcc_hwmod_class
,
1169 .clkdm_name
= "l3_clkdm",
1170 .main_clk
= "l3_gclk",
1173 .clkctrl_offs
= AM33XX_CM_PER_TPCC_CLKCTRL_OFFSET
,
1174 .modulemode
= MODULEMODE_SWCTRL
,
1179 static struct omap_hwmod_class_sysconfig am33xx_tptc_sysc
= {
1182 .sysc_flags
= (SYSC_HAS_SIDLEMODE
| SYSC_HAS_SOFTRESET
|
1183 SYSC_HAS_MIDLEMODE
),
1184 .idlemodes
= (SIDLE_FORCE
| SIDLE_SMART
| MSTANDBY_FORCE
),
1185 .sysc_fields
= &omap_hwmod_sysc_type2
,
1189 static struct omap_hwmod_class am33xx_tptc_hwmod_class
= {
1191 .sysc
= &am33xx_tptc_sysc
,
1195 struct omap_hwmod am33xx_tptc0_hwmod
= {
1197 .class = &am33xx_tptc_hwmod_class
,
1198 .clkdm_name
= "l3_clkdm",
1199 .flags
= HWMOD_SWSUP_SIDLE
| HWMOD_SWSUP_MSTANDBY
,
1200 .main_clk
= "l3_gclk",
1203 .clkctrl_offs
= AM33XX_CM_PER_TPTC0_CLKCTRL_OFFSET
,
1204 .modulemode
= MODULEMODE_SWCTRL
,
1210 struct omap_hwmod am33xx_tptc1_hwmod
= {
1212 .class = &am33xx_tptc_hwmod_class
,
1213 .clkdm_name
= "l3_clkdm",
1214 .flags
= (HWMOD_SWSUP_SIDLE
| HWMOD_SWSUP_MSTANDBY
),
1215 .main_clk
= "l3_gclk",
1218 .clkctrl_offs
= AM33XX_CM_PER_TPTC1_CLKCTRL_OFFSET
,
1219 .modulemode
= MODULEMODE_SWCTRL
,
1225 struct omap_hwmod am33xx_tptc2_hwmod
= {
1227 .class = &am33xx_tptc_hwmod_class
,
1228 .clkdm_name
= "l3_clkdm",
1229 .flags
= (HWMOD_SWSUP_SIDLE
| HWMOD_SWSUP_MSTANDBY
),
1230 .main_clk
= "l3_gclk",
1233 .clkctrl_offs
= AM33XX_CM_PER_TPTC2_CLKCTRL_OFFSET
,
1234 .modulemode
= MODULEMODE_SWCTRL
,
1240 static struct omap_hwmod_class_sysconfig uart_sysc
= {
1244 .sysc_flags
= (SYSC_HAS_SIDLEMODE
| SYSC_HAS_ENAWAKEUP
|
1245 SYSC_HAS_SOFTRESET
| SYSC_HAS_AUTOIDLE
),
1246 .idlemodes
= (SIDLE_FORCE
| SIDLE_NO
| SIDLE_SMART
|
1248 .sysc_fields
= &omap_hwmod_sysc_type1
,
1251 static struct omap_hwmod_class uart_class
= {
1256 struct omap_hwmod am33xx_uart1_hwmod
= {
1258 .class = &uart_class
,
1259 .clkdm_name
= "l4_wkup_clkdm",
1260 .flags
= DEBUG_AM33XXUART1_FLAGS
| HWMOD_SWSUP_SIDLE_ACT
,
1261 .main_clk
= "dpll_per_m2_div4_wkupdm_ck",
1264 .clkctrl_offs
= AM33XX_CM_WKUP_UART0_CLKCTRL_OFFSET
,
1265 .modulemode
= MODULEMODE_SWCTRL
,
1270 struct omap_hwmod am33xx_uart2_hwmod
= {
1272 .class = &uart_class
,
1273 .clkdm_name
= "l4ls_clkdm",
1274 .flags
= HWMOD_SWSUP_SIDLE_ACT
,
1275 .main_clk
= "dpll_per_m2_div4_ck",
1278 .clkctrl_offs
= AM33XX_CM_PER_UART1_CLKCTRL_OFFSET
,
1279 .modulemode
= MODULEMODE_SWCTRL
,
1285 struct omap_hwmod am33xx_uart3_hwmod
= {
1287 .class = &uart_class
,
1288 .clkdm_name
= "l4ls_clkdm",
1289 .flags
= HWMOD_SWSUP_SIDLE_ACT
,
1290 .main_clk
= "dpll_per_m2_div4_ck",
1293 .clkctrl_offs
= AM33XX_CM_PER_UART2_CLKCTRL_OFFSET
,
1294 .modulemode
= MODULEMODE_SWCTRL
,
1299 struct omap_hwmod am33xx_uart4_hwmod
= {
1301 .class = &uart_class
,
1302 .clkdm_name
= "l4ls_clkdm",
1303 .flags
= HWMOD_SWSUP_SIDLE_ACT
,
1304 .main_clk
= "dpll_per_m2_div4_ck",
1307 .clkctrl_offs
= AM33XX_CM_PER_UART3_CLKCTRL_OFFSET
,
1308 .modulemode
= MODULEMODE_SWCTRL
,
1313 struct omap_hwmod am33xx_uart5_hwmod
= {
1315 .class = &uart_class
,
1316 .clkdm_name
= "l4ls_clkdm",
1317 .flags
= HWMOD_SWSUP_SIDLE_ACT
,
1318 .main_clk
= "dpll_per_m2_div4_ck",
1321 .clkctrl_offs
= AM33XX_CM_PER_UART4_CLKCTRL_OFFSET
,
1322 .modulemode
= MODULEMODE_SWCTRL
,
1327 struct omap_hwmod am33xx_uart6_hwmod
= {
1329 .class = &uart_class
,
1330 .clkdm_name
= "l4ls_clkdm",
1331 .flags
= HWMOD_SWSUP_SIDLE_ACT
,
1332 .main_clk
= "dpll_per_m2_div4_ck",
1335 .clkctrl_offs
= AM33XX_CM_PER_UART5_CLKCTRL_OFFSET
,
1336 .modulemode
= MODULEMODE_SWCTRL
,
1341 /* 'wd_timer' class */
1342 static struct omap_hwmod_class_sysconfig wdt_sysc
= {
1346 .sysc_flags
= (SYSC_HAS_EMUFREE
| SYSC_HAS_SIDLEMODE
|
1347 SYSC_HAS_SOFTRESET
| SYSS_HAS_RESET_STATUS
),
1348 .idlemodes
= (SIDLE_FORCE
| SIDLE_NO
| SIDLE_SMART
|
1350 .sysc_fields
= &omap_hwmod_sysc_type1
,
1353 static struct omap_hwmod_class am33xx_wd_timer_hwmod_class
= {
1356 .pre_shutdown
= &omap2_wd_timer_disable
,
1360 * XXX: device.c file uses hardcoded name for watchdog timer
1361 * driver "wd_timer2, so we are also using same name as of now...
1363 struct omap_hwmod am33xx_wd_timer1_hwmod
= {
1364 .name
= "wd_timer2",
1365 .class = &am33xx_wd_timer_hwmod_class
,
1366 .clkdm_name
= "l4_wkup_clkdm",
1367 .flags
= HWMOD_SWSUP_SIDLE
,
1368 .main_clk
= "wdt1_fck",
1371 .clkctrl_offs
= AM33XX_CM_WKUP_WDT1_CLKCTRL_OFFSET
,
1372 .modulemode
= MODULEMODE_SWCTRL
,