Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /*
0003  * DM81xx hwmod data.
0004  *
0005  * Copyright (C) 2010 Texas Instruments, Inc. - https://www.ti.com/
0006  * Copyright (C) 2013 SKTB SKiT, http://www.skitlab.ru/
0007  */
0008 
0009 #include <linux/types.h>
0010 
0011 #include <linux/platform_data/hsmmc-omap.h>
0012 
0013 #include "omap_hwmod_common_data.h"
0014 #include "cm81xx.h"
0015 #include "ti81xx.h"
0016 #include "wd_timer.h"
0017 
0018 /*
0019  * DM816X hardware modules integration data
0020  *
0021  * Note: This is incomplete and at present, not generated from h/w database.
0022  */
0023 
0024 /*
0025  * Common alwon .clkctrl_offs from dm814x TRM "Table 2-278. CM_ALWON REGISTERS"
0026  * also dm816x TRM 18.7.17 CM_ALWON device register values minus 0x1400.
0027  */
0028 #define DM81XX_CM_ALWON_MCASP0_CLKCTRL      0x140
0029 #define DM81XX_CM_ALWON_MCASP1_CLKCTRL      0x144
0030 #define DM81XX_CM_ALWON_MCASP2_CLKCTRL      0x148
0031 #define DM81XX_CM_ALWON_MCBSP_CLKCTRL       0x14c
0032 #define DM81XX_CM_ALWON_UART_0_CLKCTRL      0x150
0033 #define DM81XX_CM_ALWON_UART_1_CLKCTRL      0x154
0034 #define DM81XX_CM_ALWON_UART_2_CLKCTRL      0x158
0035 #define DM81XX_CM_ALWON_GPIO_0_CLKCTRL      0x15c
0036 #define DM81XX_CM_ALWON_GPIO_1_CLKCTRL      0x160
0037 #define DM81XX_CM_ALWON_I2C_0_CLKCTRL       0x164
0038 #define DM81XX_CM_ALWON_I2C_1_CLKCTRL       0x168
0039 #define DM81XX_CM_ALWON_WDTIMER_CLKCTRL     0x18c
0040 #define DM81XX_CM_ALWON_SPI_CLKCTRL     0x190
0041 #define DM81XX_CM_ALWON_MAILBOX_CLKCTRL     0x194
0042 #define DM81XX_CM_ALWON_SPINBOX_CLKCTRL     0x198
0043 #define DM81XX_CM_ALWON_MMUDATA_CLKCTRL     0x19c
0044 #define DM81XX_CM_ALWON_MMUCFG_CLKCTRL      0x1a8
0045 #define DM81XX_CM_ALWON_CONTROL_CLKCTRL     0x1c4
0046 #define DM81XX_CM_ALWON_GPMC_CLKCTRL        0x1d0
0047 #define DM81XX_CM_ALWON_ETHERNET_0_CLKCTRL  0x1d4
0048 #define DM81XX_CM_ALWON_L3_CLKCTRL      0x1e4
0049 #define DM81XX_CM_ALWON_L4HS_CLKCTRL        0x1e8
0050 #define DM81XX_CM_ALWON_L4LS_CLKCTRL        0x1ec
0051 #define DM81XX_CM_ALWON_RTC_CLKCTRL     0x1f0
0052 #define DM81XX_CM_ALWON_TPCC_CLKCTRL        0x1f4
0053 #define DM81XX_CM_ALWON_TPTC0_CLKCTRL       0x1f8
0054 #define DM81XX_CM_ALWON_TPTC1_CLKCTRL       0x1fc
0055 #define DM81XX_CM_ALWON_TPTC2_CLKCTRL       0x200
0056 #define DM81XX_CM_ALWON_TPTC3_CLKCTRL       0x204
0057 
0058 /* Registers specific to dm814x */
0059 #define DM814X_CM_ALWON_MCASP_3_4_5_CLKCTRL 0x16c
0060 #define DM814X_CM_ALWON_ATL_CLKCTRL     0x170
0061 #define DM814X_CM_ALWON_MLB_CLKCTRL     0x174
0062 #define DM814X_CM_ALWON_PATA_CLKCTRL        0x178
0063 #define DM814X_CM_ALWON_UART_3_CLKCTRL      0x180
0064 #define DM814X_CM_ALWON_UART_4_CLKCTRL      0x184
0065 #define DM814X_CM_ALWON_UART_5_CLKCTRL      0x188
0066 #define DM814X_CM_ALWON_OCM_0_CLKCTRL       0x1b4
0067 #define DM814X_CM_ALWON_VCP_CLKCTRL     0x1b8
0068 #define DM814X_CM_ALWON_MPU_CLKCTRL     0x1dc
0069 #define DM814X_CM_ALWON_DEBUGSS_CLKCTRL     0x1e0
0070 #define DM814X_CM_ALWON_DCAN_0_1_CLKCTRL    0x218
0071 #define DM814X_CM_ALWON_MMCHS_0_CLKCTRL     0x21c
0072 #define DM814X_CM_ALWON_MMCHS_1_CLKCTRL     0x220
0073 #define DM814X_CM_ALWON_MMCHS_2_CLKCTRL     0x224
0074 #define DM814X_CM_ALWON_CUST_EFUSE_CLKCTRL  0x228
0075 
0076 /* Registers specific to dm816x */
0077 #define DM816X_DM_ALWON_BASE        0x1400
0078 #define DM816X_CM_ALWON_TIMER_1_CLKCTRL (0x1570 - DM816X_DM_ALWON_BASE)
0079 #define DM816X_CM_ALWON_TIMER_2_CLKCTRL (0x1574 - DM816X_DM_ALWON_BASE)
0080 #define DM816X_CM_ALWON_TIMER_3_CLKCTRL (0x1578 - DM816X_DM_ALWON_BASE)
0081 #define DM816X_CM_ALWON_TIMER_4_CLKCTRL (0x157c - DM816X_DM_ALWON_BASE)
0082 #define DM816X_CM_ALWON_TIMER_5_CLKCTRL (0x1580 - DM816X_DM_ALWON_BASE)
0083 #define DM816X_CM_ALWON_TIMER_6_CLKCTRL (0x1584 - DM816X_DM_ALWON_BASE)
0084 #define DM816X_CM_ALWON_TIMER_7_CLKCTRL (0x1588 - DM816X_DM_ALWON_BASE)
0085 #define DM816X_CM_ALWON_SDIO_CLKCTRL    (0x15b0 - DM816X_DM_ALWON_BASE)
0086 #define DM816X_CM_ALWON_OCMC_0_CLKCTRL  (0x15b4 - DM816X_DM_ALWON_BASE)
0087 #define DM816X_CM_ALWON_OCMC_1_CLKCTRL  (0x15b8 - DM816X_DM_ALWON_BASE)
0088 #define DM816X_CM_ALWON_ETHERNET_1_CLKCTRL (0x15d8 - DM816X_DM_ALWON_BASE)
0089 #define DM816X_CM_ALWON_MPU_CLKCTRL (0x15dc - DM816X_DM_ALWON_BASE)
0090 #define DM816X_CM_ALWON_SR_0_CLKCTRL    (0x1608 - DM816X_DM_ALWON_BASE)
0091 #define DM816X_CM_ALWON_SR_1_CLKCTRL    (0x160c - DM816X_DM_ALWON_BASE)
0092 
0093 /*
0094  * The default .clkctrl_offs field is offset from CM_DEFAULT, that's
0095  * TRM 18.7.6 CM_DEFAULT device register values minus 0x500
0096  */
0097 #define DM81XX_CM_DEFAULT_OFFSET    0x500
0098 #define DM81XX_CM_DEFAULT_USB_CLKCTRL   (0x558 - DM81XX_CM_DEFAULT_OFFSET)
0099 #define DM81XX_CM_DEFAULT_SATA_CLKCTRL  (0x560 - DM81XX_CM_DEFAULT_OFFSET)
0100 
0101 /* L3 Interconnect entries clocked at 125, 250 and 500MHz */
0102 static struct omap_hwmod dm81xx_alwon_l3_slow_hwmod = {
0103     .name       = "alwon_l3_slow",
0104     .clkdm_name = "alwon_l3s_clkdm",
0105     .class      = &l3_hwmod_class,
0106     .flags      = HWMOD_NO_IDLEST,
0107 };
0108 
0109 static struct omap_hwmod dm81xx_default_l3_slow_hwmod = {
0110     .name       = "default_l3_slow",
0111     .clkdm_name = "default_l3_slow_clkdm",
0112     .class      = &l3_hwmod_class,
0113     .flags      = HWMOD_NO_IDLEST,
0114 };
0115 
0116 static struct omap_hwmod dm81xx_alwon_l3_med_hwmod = {
0117     .name       = "l3_med",
0118     .clkdm_name = "alwon_l3_med_clkdm",
0119     .class      = &l3_hwmod_class,
0120     .flags      = HWMOD_NO_IDLEST,
0121 };
0122 
0123 /*
0124  * L4 standard peripherals, see TRM table 1-12 for devices using this.
0125  * See TRM table 1-73 for devices using the 125MHz SYSCLK6 clock.
0126  */
0127 static struct omap_hwmod dm81xx_l4_ls_hwmod = {
0128     .name       = "l4_ls",
0129     .clkdm_name = "alwon_l3s_clkdm",
0130     .class      = &l4_hwmod_class,
0131     .flags      = HWMOD_NO_IDLEST,
0132 };
0133 
0134 /*
0135  * L4 high-speed peripherals. For devices using this, please see the TRM
0136  * table 1-13. On dm816x, only EMAC, MDIO and SATA use this. See also TRM
0137  * table 1-73 for devices using 250MHz SYSCLK5 clock.
0138  */
0139 static struct omap_hwmod dm81xx_l4_hs_hwmod = {
0140     .name       = "l4_hs",
0141     .clkdm_name = "alwon_l3_med_clkdm",
0142     .class      = &l4_hwmod_class,
0143     .flags      = HWMOD_NO_IDLEST,
0144 };
0145 
0146 /* L3 slow -> L4 ls peripheral interface running at 125MHz */
0147 static struct omap_hwmod_ocp_if dm81xx_alwon_l3_slow__l4_ls = {
0148     .master = &dm81xx_alwon_l3_slow_hwmod,
0149     .slave  = &dm81xx_l4_ls_hwmod,
0150     .user   = OCP_USER_MPU,
0151 };
0152 
0153 /* L3 med -> L4 fast peripheral interface running at 250MHz */
0154 static struct omap_hwmod_ocp_if dm81xx_alwon_l3_slow__l4_hs = {
0155     .master = &dm81xx_alwon_l3_med_hwmod,
0156     .slave  = &dm81xx_l4_hs_hwmod,
0157     .user   = OCP_USER_MPU,
0158 };
0159 
0160 /* MPU */
0161 static struct omap_hwmod dm814x_mpu_hwmod = {
0162     .name       = "mpu",
0163     .clkdm_name = "alwon_l3s_clkdm",
0164     .class      = &mpu_hwmod_class,
0165     .flags      = HWMOD_INIT_NO_IDLE,
0166     .main_clk   = "mpu_ck",
0167     .prcm       = {
0168         .omap4 = {
0169             .clkctrl_offs = DM814X_CM_ALWON_MPU_CLKCTRL,
0170             .modulemode = MODULEMODE_SWCTRL,
0171         },
0172     },
0173 };
0174 
0175 static struct omap_hwmod_ocp_if dm814x_mpu__alwon_l3_slow = {
0176     .master     = &dm814x_mpu_hwmod,
0177     .slave      = &dm81xx_alwon_l3_slow_hwmod,
0178     .user       = OCP_USER_MPU,
0179 };
0180 
0181 /* L3 med peripheral interface running at 200MHz */
0182 static struct omap_hwmod_ocp_if dm814x_mpu__alwon_l3_med = {
0183     .master = &dm814x_mpu_hwmod,
0184     .slave  = &dm81xx_alwon_l3_med_hwmod,
0185     .user   = OCP_USER_MPU,
0186 };
0187 
0188 static struct omap_hwmod dm816x_mpu_hwmod = {
0189     .name       = "mpu",
0190     .clkdm_name = "alwon_mpu_clkdm",
0191     .class      = &mpu_hwmod_class,
0192     .flags      = HWMOD_INIT_NO_IDLE,
0193     .main_clk   = "mpu_ck",
0194     .prcm       = {
0195         .omap4 = {
0196             .clkctrl_offs = DM816X_CM_ALWON_MPU_CLKCTRL,
0197             .modulemode = MODULEMODE_SWCTRL,
0198         },
0199     },
0200 };
0201 
0202 static struct omap_hwmod_ocp_if dm816x_mpu__alwon_l3_slow = {
0203     .master     = &dm816x_mpu_hwmod,
0204     .slave      = &dm81xx_alwon_l3_slow_hwmod,
0205     .user       = OCP_USER_MPU,
0206 };
0207 
0208 /* L3 med peripheral interface running at 250MHz */
0209 static struct omap_hwmod_ocp_if dm816x_mpu__alwon_l3_med = {
0210     .master = &dm816x_mpu_hwmod,
0211     .slave  = &dm81xx_alwon_l3_med_hwmod,
0212     .user   = OCP_USER_MPU,
0213 };
0214 
0215 /* RTC */
0216 static struct omap_hwmod_class_sysconfig ti81xx_rtc_sysc = {
0217     .rev_offs   = 0x74,
0218     .sysc_offs  = 0x78,
0219     .sysc_flags = SYSC_HAS_SIDLEMODE,
0220     .idlemodes  = SIDLE_FORCE | SIDLE_NO |
0221               SIDLE_SMART | SIDLE_SMART_WKUP,
0222     .sysc_fields    = &omap_hwmod_sysc_type3,
0223 };
0224 
0225 static struct omap_hwmod_class ti81xx_rtc_hwmod_class = {
0226     .name       = "rtc",
0227     .sysc       = &ti81xx_rtc_sysc,
0228 };
0229 
0230 static struct omap_hwmod ti81xx_rtc_hwmod = {
0231     .name       = "rtc",
0232     .class      = &ti81xx_rtc_hwmod_class,
0233     .clkdm_name = "alwon_l3s_clkdm",
0234     .flags      = HWMOD_NO_IDLEST,
0235     .main_clk   = "sysclk18_ck",
0236     .prcm       = {
0237         .omap4  = {
0238             .clkctrl_offs = DM81XX_CM_ALWON_RTC_CLKCTRL,
0239             .modulemode = MODULEMODE_SWCTRL,
0240         },
0241     },
0242 };
0243 
0244 static struct omap_hwmod_ocp_if ti81xx_l4_ls__rtc = {
0245     .master     = &dm81xx_l4_ls_hwmod,
0246     .slave      = &ti81xx_rtc_hwmod,
0247     .clk        = "sysclk6_ck",
0248     .user       = OCP_USER_MPU,
0249 };
0250 
0251 /* UART common */
0252 static struct omap_hwmod_class_sysconfig uart_sysc = {
0253     .rev_offs   = 0x50,
0254     .sysc_offs  = 0x54,
0255     .syss_offs  = 0x58,
0256     .sysc_flags = SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
0257                 SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
0258                 SYSS_HAS_RESET_STATUS,
0259     .idlemodes  = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
0260                 MSTANDBY_SMART_WKUP,
0261     .sysc_fields    = &omap_hwmod_sysc_type1,
0262 };
0263 
0264 static struct omap_hwmod_class uart_class = {
0265     .name = "uart",
0266     .sysc = &uart_sysc,
0267 };
0268 
0269 static struct omap_hwmod dm81xx_uart1_hwmod = {
0270     .name       = "uart1",
0271     .clkdm_name = "alwon_l3s_clkdm",
0272     .main_clk   = "sysclk10_ck",
0273     .prcm       = {
0274         .omap4 = {
0275             .clkctrl_offs = DM81XX_CM_ALWON_UART_0_CLKCTRL,
0276             .modulemode = MODULEMODE_SWCTRL,
0277         },
0278     },
0279     .class      = &uart_class,
0280     .flags      = DEBUG_TI81XXUART1_FLAGS,
0281 };
0282 
0283 static struct omap_hwmod_ocp_if dm81xx_l4_ls__uart1 = {
0284     .master     = &dm81xx_l4_ls_hwmod,
0285     .slave      = &dm81xx_uart1_hwmod,
0286     .clk        = "sysclk6_ck",
0287     .user       = OCP_USER_MPU,
0288 };
0289 
0290 static struct omap_hwmod dm81xx_uart2_hwmod = {
0291     .name       = "uart2",
0292     .clkdm_name = "alwon_l3s_clkdm",
0293     .main_clk   = "sysclk10_ck",
0294     .prcm       = {
0295         .omap4 = {
0296             .clkctrl_offs = DM81XX_CM_ALWON_UART_1_CLKCTRL,
0297             .modulemode = MODULEMODE_SWCTRL,
0298         },
0299     },
0300     .class      = &uart_class,
0301     .flags      = DEBUG_TI81XXUART2_FLAGS,
0302 };
0303 
0304 static struct omap_hwmod_ocp_if dm81xx_l4_ls__uart2 = {
0305     .master     = &dm81xx_l4_ls_hwmod,
0306     .slave      = &dm81xx_uart2_hwmod,
0307     .clk        = "sysclk6_ck",
0308     .user       = OCP_USER_MPU,
0309 };
0310 
0311 static struct omap_hwmod dm81xx_uart3_hwmod = {
0312     .name       = "uart3",
0313     .clkdm_name = "alwon_l3s_clkdm",
0314     .main_clk   = "sysclk10_ck",
0315     .prcm       = {
0316         .omap4 = {
0317             .clkctrl_offs = DM81XX_CM_ALWON_UART_2_CLKCTRL,
0318             .modulemode = MODULEMODE_SWCTRL,
0319         },
0320     },
0321     .class      = &uart_class,
0322     .flags      = DEBUG_TI81XXUART3_FLAGS,
0323 };
0324 
0325 static struct omap_hwmod_ocp_if dm81xx_l4_ls__uart3 = {
0326     .master     = &dm81xx_l4_ls_hwmod,
0327     .slave      = &dm81xx_uart3_hwmod,
0328     .clk        = "sysclk6_ck",
0329     .user       = OCP_USER_MPU,
0330 };
0331 
0332 static struct omap_hwmod_class_sysconfig wd_timer_sysc = {
0333     .rev_offs   = 0x0,
0334     .sysc_offs  = 0x10,
0335     .syss_offs  = 0x14,
0336     .sysc_flags = SYSC_HAS_EMUFREE | SYSC_HAS_SOFTRESET |
0337                 SYSS_HAS_RESET_STATUS,
0338     .sysc_fields    = &omap_hwmod_sysc_type1,
0339 };
0340 
0341 static struct omap_hwmod_class wd_timer_class = {
0342     .name       = "wd_timer",
0343     .sysc       = &wd_timer_sysc,
0344     .pre_shutdown   = &omap2_wd_timer_disable,
0345     .reset      = &omap2_wd_timer_reset,
0346 };
0347 
0348 static struct omap_hwmod dm81xx_wd_timer_hwmod = {
0349     .name       = "wd_timer",
0350     .clkdm_name = "alwon_l3s_clkdm",
0351     .main_clk   = "sysclk18_ck",
0352     .flags      = HWMOD_NO_IDLEST,
0353     .prcm       = {
0354         .omap4 = {
0355             .clkctrl_offs = DM81XX_CM_ALWON_WDTIMER_CLKCTRL,
0356             .modulemode = MODULEMODE_SWCTRL,
0357         },
0358     },
0359     .class      = &wd_timer_class,
0360 };
0361 
0362 static struct omap_hwmod_ocp_if dm81xx_l4_ls__wd_timer1 = {
0363     .master     = &dm81xx_l4_ls_hwmod,
0364     .slave      = &dm81xx_wd_timer_hwmod,
0365     .clk        = "sysclk6_ck",
0366     .user       = OCP_USER_MPU,
0367 };
0368 
0369 /* I2C common */
0370 static struct omap_hwmod_class_sysconfig i2c_sysc = {
0371     .rev_offs   = 0x0,
0372     .sysc_offs  = 0x10,
0373     .syss_offs  = 0x90,
0374     .sysc_flags = SYSC_HAS_SIDLEMODE |
0375                 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
0376                 SYSC_HAS_AUTOIDLE,
0377     .idlemodes  = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART,
0378     .sysc_fields    = &omap_hwmod_sysc_type1,
0379 };
0380 
0381 static struct omap_hwmod_class i2c_class = {
0382     .name = "i2c",
0383     .sysc = &i2c_sysc,
0384 };
0385 
0386 static struct omap_hwmod dm81xx_i2c1_hwmod = {
0387     .name       = "i2c1",
0388     .clkdm_name = "alwon_l3s_clkdm",
0389     .main_clk   = "sysclk10_ck",
0390     .prcm       = {
0391         .omap4 = {
0392             .clkctrl_offs = DM81XX_CM_ALWON_I2C_0_CLKCTRL,
0393             .modulemode = MODULEMODE_SWCTRL,
0394         },
0395     },
0396     .class      = &i2c_class,
0397 };
0398 
0399 static struct omap_hwmod_ocp_if dm81xx_l4_ls__i2c1 = {
0400     .master     = &dm81xx_l4_ls_hwmod,
0401     .slave      = &dm81xx_i2c1_hwmod,
0402     .clk        = "sysclk6_ck",
0403     .user       = OCP_USER_MPU,
0404 };
0405 
0406 static struct omap_hwmod dm81xx_i2c2_hwmod = {
0407     .name       = "i2c2",
0408     .clkdm_name = "alwon_l3s_clkdm",
0409     .main_clk   = "sysclk10_ck",
0410     .prcm       = {
0411         .omap4 = {
0412             .clkctrl_offs = DM81XX_CM_ALWON_I2C_1_CLKCTRL,
0413             .modulemode = MODULEMODE_SWCTRL,
0414         },
0415     },
0416     .class      = &i2c_class,
0417 };
0418 
0419 static struct omap_hwmod_ocp_if dm81xx_l4_ls__i2c2 = {
0420     .master     = &dm81xx_l4_ls_hwmod,
0421     .slave      = &dm81xx_i2c2_hwmod,
0422     .clk        = "sysclk6_ck",
0423     .user       = OCP_USER_MPU,
0424 };
0425 
0426 static struct omap_hwmod_class_sysconfig dm81xx_elm_sysc = {
0427     .rev_offs   = 0x0000,
0428     .sysc_offs  = 0x0010,
0429     .syss_offs  = 0x0014,
0430     .sysc_flags = SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
0431                 SYSC_HAS_SOFTRESET |
0432                 SYSS_HAS_RESET_STATUS,
0433     .idlemodes  = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART,
0434     .sysc_fields    = &omap_hwmod_sysc_type1,
0435 };
0436 
0437 static struct omap_hwmod_class dm81xx_elm_hwmod_class = {
0438     .name = "elm",
0439     .sysc = &dm81xx_elm_sysc,
0440 };
0441 
0442 static struct omap_hwmod dm81xx_elm_hwmod = {
0443     .name       = "elm",
0444     .clkdm_name = "alwon_l3s_clkdm",
0445     .class      = &dm81xx_elm_hwmod_class,
0446     .main_clk   = "sysclk6_ck",
0447 };
0448 
0449 static struct omap_hwmod_ocp_if dm81xx_l4_ls__elm = {
0450     .master     = &dm81xx_l4_ls_hwmod,
0451     .slave      = &dm81xx_elm_hwmod,
0452     .clk        = "sysclk6_ck",
0453     .user       = OCP_USER_MPU,
0454 };
0455 
0456 static struct omap_hwmod_class_sysconfig dm81xx_gpio_sysc = {
0457     .rev_offs   = 0x0000,
0458     .sysc_offs  = 0x0010,
0459     .syss_offs  = 0x0114,
0460     .sysc_flags = SYSC_HAS_AUTOIDLE | SYSC_HAS_ENAWAKEUP |
0461                 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
0462                 SYSS_HAS_RESET_STATUS,
0463     .idlemodes  = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
0464                 SIDLE_SMART_WKUP,
0465     .sysc_fields    = &omap_hwmod_sysc_type1,
0466 };
0467 
0468 static struct omap_hwmod_class dm81xx_gpio_hwmod_class = {
0469     .name   = "gpio",
0470     .sysc   = &dm81xx_gpio_sysc,
0471 };
0472 
0473 static struct omap_hwmod_opt_clk gpio1_opt_clks[] = {
0474     { .role = "dbclk", .clk = "sysclk18_ck" },
0475 };
0476 
0477 static struct omap_hwmod dm81xx_gpio1_hwmod = {
0478     .name       = "gpio1",
0479     .clkdm_name = "alwon_l3s_clkdm",
0480     .class      = &dm81xx_gpio_hwmod_class,
0481     .main_clk   = "sysclk6_ck",
0482     .prcm = {
0483         .omap4 = {
0484             .clkctrl_offs = DM81XX_CM_ALWON_GPIO_0_CLKCTRL,
0485             .modulemode = MODULEMODE_SWCTRL,
0486         },
0487     },
0488     .opt_clks   = gpio1_opt_clks,
0489     .opt_clks_cnt   = ARRAY_SIZE(gpio1_opt_clks),
0490 };
0491 
0492 static struct omap_hwmod_ocp_if dm81xx_l4_ls__gpio1 = {
0493     .master     = &dm81xx_l4_ls_hwmod,
0494     .slave      = &dm81xx_gpio1_hwmod,
0495     .clk        = "sysclk6_ck",
0496     .user       = OCP_USER_MPU,
0497 };
0498 
0499 static struct omap_hwmod_opt_clk gpio2_opt_clks[] = {
0500     { .role = "dbclk", .clk = "sysclk18_ck" },
0501 };
0502 
0503 static struct omap_hwmod dm81xx_gpio2_hwmod = {
0504     .name       = "gpio2",
0505     .clkdm_name = "alwon_l3s_clkdm",
0506     .class      = &dm81xx_gpio_hwmod_class,
0507     .main_clk   = "sysclk6_ck",
0508     .prcm = {
0509         .omap4 = {
0510             .clkctrl_offs = DM81XX_CM_ALWON_GPIO_1_CLKCTRL,
0511             .modulemode = MODULEMODE_SWCTRL,
0512         },
0513     },
0514     .opt_clks   = gpio2_opt_clks,
0515     .opt_clks_cnt   = ARRAY_SIZE(gpio2_opt_clks),
0516 };
0517 
0518 static struct omap_hwmod_ocp_if dm81xx_l4_ls__gpio2 = {
0519     .master     = &dm81xx_l4_ls_hwmod,
0520     .slave      = &dm81xx_gpio2_hwmod,
0521     .clk        = "sysclk6_ck",
0522     .user       = OCP_USER_MPU,
0523 };
0524 
0525 static struct omap_hwmod_opt_clk gpio3_opt_clks[] = {
0526     { .role = "dbclk", .clk = "sysclk18_ck" },
0527 };
0528 
0529 static struct omap_hwmod dm81xx_gpio3_hwmod = {
0530     .name       = "gpio3",
0531     .clkdm_name = "alwon_l3s_clkdm",
0532     .class      = &dm81xx_gpio_hwmod_class,
0533     .main_clk   = "sysclk6_ck",
0534     .prcm = {
0535         .omap4 = {
0536             .clkctrl_offs = DM81XX_CM_ALWON_GPIO_1_CLKCTRL,
0537             .modulemode = MODULEMODE_SWCTRL,
0538         },
0539     },
0540     .opt_clks   = gpio3_opt_clks,
0541     .opt_clks_cnt   = ARRAY_SIZE(gpio3_opt_clks),
0542 };
0543 
0544 static struct omap_hwmod_ocp_if dm81xx_l4_ls__gpio3 = {
0545     .master     = &dm81xx_l4_ls_hwmod,
0546     .slave      = &dm81xx_gpio3_hwmod,
0547     .clk        = "sysclk6_ck",
0548     .user       = OCP_USER_MPU,
0549 };
0550 
0551 static struct omap_hwmod_opt_clk gpio4_opt_clks[] = {
0552     { .role = "dbclk", .clk = "sysclk18_ck" },
0553 };
0554 
0555 static struct omap_hwmod dm81xx_gpio4_hwmod = {
0556     .name       = "gpio4",
0557     .clkdm_name = "alwon_l3s_clkdm",
0558     .class      = &dm81xx_gpio_hwmod_class,
0559     .main_clk   = "sysclk6_ck",
0560     .prcm = {
0561         .omap4 = {
0562             .clkctrl_offs = DM81XX_CM_ALWON_GPIO_1_CLKCTRL,
0563             .modulemode = MODULEMODE_SWCTRL,
0564         },
0565     },
0566     .opt_clks   = gpio4_opt_clks,
0567     .opt_clks_cnt   = ARRAY_SIZE(gpio4_opt_clks),
0568 };
0569 
0570 static struct omap_hwmod_ocp_if dm81xx_l4_ls__gpio4 = {
0571     .master     = &dm81xx_l4_ls_hwmod,
0572     .slave      = &dm81xx_gpio4_hwmod,
0573     .clk        = "sysclk6_ck",
0574     .user       = OCP_USER_MPU,
0575 };
0576 
0577 static struct omap_hwmod_class_sysconfig dm81xx_gpmc_sysc = {
0578     .rev_offs   = 0x0,
0579     .sysc_offs  = 0x10,
0580     .syss_offs  = 0x14,
0581     .sysc_flags = SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
0582                 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS,
0583     .idlemodes  = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART,
0584     .sysc_fields    = &omap_hwmod_sysc_type1,
0585 };
0586 
0587 static struct omap_hwmod_class dm81xx_gpmc_hwmod_class = {
0588     .name   = "gpmc",
0589     .sysc   = &dm81xx_gpmc_sysc,
0590 };
0591 
0592 static struct omap_hwmod dm81xx_gpmc_hwmod = {
0593     .name       = "gpmc",
0594     .clkdm_name = "alwon_l3s_clkdm",
0595     .class      = &dm81xx_gpmc_hwmod_class,
0596     .main_clk   = "sysclk6_ck",
0597     /* Skip reset for CONFIG_OMAP_GPMC_DEBUG for bootloader timings */
0598     .flags      = DEBUG_OMAP_GPMC_HWMOD_FLAGS,
0599     .prcm = {
0600         .omap4 = {
0601             .clkctrl_offs = DM81XX_CM_ALWON_GPMC_CLKCTRL,
0602             .modulemode = MODULEMODE_SWCTRL,
0603         },
0604     },
0605 };
0606 
0607 static struct omap_hwmod_ocp_if dm81xx_alwon_l3_slow__gpmc = {
0608     .master     = &dm81xx_alwon_l3_slow_hwmod,
0609     .slave      = &dm81xx_gpmc_hwmod,
0610     .user       = OCP_USER_MPU,
0611 };
0612 
0613 /* USB needs udelay 1 after reset at least on hp t410, use 2 for margin */
0614 static struct omap_hwmod_class_sysconfig dm81xx_usbhsotg_sysc = {
0615     .rev_offs   = 0x0,
0616     .sysc_offs  = 0x10,
0617     .srst_udelay    = 2,
0618     .sysc_flags = SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE |
0619                 SYSC_HAS_SOFTRESET,
0620     .idlemodes  = SIDLE_SMART | MSTANDBY_FORCE | MSTANDBY_SMART,
0621     .sysc_fields    = &omap_hwmod_sysc_type2,
0622 };
0623 
0624 static struct omap_hwmod_class dm81xx_usbotg_class = {
0625     .name = "usbotg",
0626     .sysc = &dm81xx_usbhsotg_sysc,
0627 };
0628 
0629 static struct omap_hwmod dm814x_usbss_hwmod = {
0630     .name       = "usb_otg_hs",
0631     .clkdm_name = "default_l3_slow_clkdm",
0632     .main_clk   = "pll260dcoclkldo",    /* 481c5260.adpll.dcoclkldo */
0633     .prcm       = {
0634         .omap4 = {
0635             .clkctrl_offs = DM81XX_CM_DEFAULT_USB_CLKCTRL,
0636             .modulemode = MODULEMODE_SWCTRL,
0637         },
0638     },
0639     .class      = &dm81xx_usbotg_class,
0640 };
0641 
0642 static struct omap_hwmod_ocp_if dm814x_default_l3_slow__usbss = {
0643     .master     = &dm81xx_default_l3_slow_hwmod,
0644     .slave      = &dm814x_usbss_hwmod,
0645     .clk        = "sysclk6_ck",
0646     .user       = OCP_USER_MPU,
0647 };
0648 
0649 static struct omap_hwmod dm816x_usbss_hwmod = {
0650     .name       = "usb_otg_hs",
0651     .clkdm_name = "default_l3_slow_clkdm",
0652     .main_clk   = "sysclk6_ck",
0653     .prcm       = {
0654         .omap4 = {
0655             .clkctrl_offs = DM81XX_CM_DEFAULT_USB_CLKCTRL,
0656             .modulemode = MODULEMODE_SWCTRL,
0657         },
0658     },
0659     .class      = &dm81xx_usbotg_class,
0660 };
0661 
0662 static struct omap_hwmod_ocp_if dm816x_default_l3_slow__usbss = {
0663     .master     = &dm81xx_default_l3_slow_hwmod,
0664     .slave      = &dm816x_usbss_hwmod,
0665     .clk        = "sysclk6_ck",
0666     .user       = OCP_USER_MPU,
0667 };
0668 
0669 static struct omap_hwmod_class_sysconfig dm816x_timer_sysc = {
0670     .rev_offs   = 0x0000,
0671     .sysc_offs  = 0x0010,
0672     .syss_offs  = 0x0014,
0673     .sysc_flags = SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET,
0674     .idlemodes  = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
0675                 SIDLE_SMART_WKUP,
0676     .sysc_fields    = &omap_hwmod_sysc_type2,
0677 };
0678 
0679 static struct omap_hwmod_class dm816x_timer_hwmod_class = {
0680     .name = "timer",
0681     .sysc = &dm816x_timer_sysc,
0682 };
0683 
0684 static struct omap_hwmod dm816x_timer3_hwmod = {
0685     .name       = "timer3",
0686     .clkdm_name = "alwon_l3s_clkdm",
0687     .main_clk   = "timer3_fck",
0688     .prcm       = {
0689         .omap4 = {
0690             .clkctrl_offs = DM816X_CM_ALWON_TIMER_3_CLKCTRL,
0691             .modulemode = MODULEMODE_SWCTRL,
0692         },
0693     },
0694     .class      = &dm816x_timer_hwmod_class,
0695 };
0696 
0697 static struct omap_hwmod_ocp_if dm816x_l4_ls__timer3 = {
0698     .master     = &dm81xx_l4_ls_hwmod,
0699     .slave      = &dm816x_timer3_hwmod,
0700     .clk        = "sysclk6_ck",
0701     .user       = OCP_USER_MPU,
0702 };
0703 
0704 static struct omap_hwmod dm816x_timer4_hwmod = {
0705     .name       = "timer4",
0706     .clkdm_name = "alwon_l3s_clkdm",
0707     .main_clk   = "timer4_fck",
0708     .prcm       = {
0709         .omap4 = {
0710             .clkctrl_offs = DM816X_CM_ALWON_TIMER_4_CLKCTRL,
0711             .modulemode = MODULEMODE_SWCTRL,
0712         },
0713     },
0714     .class      = &dm816x_timer_hwmod_class,
0715 };
0716 
0717 static struct omap_hwmod_ocp_if dm816x_l4_ls__timer4 = {
0718     .master     = &dm81xx_l4_ls_hwmod,
0719     .slave      = &dm816x_timer4_hwmod,
0720     .clk        = "sysclk6_ck",
0721     .user       = OCP_USER_MPU,
0722 };
0723 
0724 static struct omap_hwmod dm816x_timer5_hwmod = {
0725     .name       = "timer5",
0726     .clkdm_name = "alwon_l3s_clkdm",
0727     .main_clk   = "timer5_fck",
0728     .prcm       = {
0729         .omap4 = {
0730             .clkctrl_offs = DM816X_CM_ALWON_TIMER_5_CLKCTRL,
0731             .modulemode = MODULEMODE_SWCTRL,
0732         },
0733     },
0734     .class      = &dm816x_timer_hwmod_class,
0735 };
0736 
0737 static struct omap_hwmod_ocp_if dm816x_l4_ls__timer5 = {
0738     .master     = &dm81xx_l4_ls_hwmod,
0739     .slave      = &dm816x_timer5_hwmod,
0740     .clk        = "sysclk6_ck",
0741     .user       = OCP_USER_MPU,
0742 };
0743 
0744 static struct omap_hwmod dm816x_timer6_hwmod = {
0745     .name       = "timer6",
0746     .clkdm_name = "alwon_l3s_clkdm",
0747     .main_clk   = "timer6_fck",
0748     .prcm       = {
0749         .omap4 = {
0750             .clkctrl_offs = DM816X_CM_ALWON_TIMER_6_CLKCTRL,
0751             .modulemode = MODULEMODE_SWCTRL,
0752         },
0753     },
0754     .class      = &dm816x_timer_hwmod_class,
0755 };
0756 
0757 static struct omap_hwmod_ocp_if dm816x_l4_ls__timer6 = {
0758     .master     = &dm81xx_l4_ls_hwmod,
0759     .slave      = &dm816x_timer6_hwmod,
0760     .clk        = "sysclk6_ck",
0761     .user       = OCP_USER_MPU,
0762 };
0763 
0764 static struct omap_hwmod dm816x_timer7_hwmod = {
0765     .name       = "timer7",
0766     .clkdm_name = "alwon_l3s_clkdm",
0767     .main_clk   = "timer7_fck",
0768     .prcm       = {
0769         .omap4 = {
0770             .clkctrl_offs = DM816X_CM_ALWON_TIMER_7_CLKCTRL,
0771             .modulemode = MODULEMODE_SWCTRL,
0772         },
0773     },
0774     .class      = &dm816x_timer_hwmod_class,
0775 };
0776 
0777 static struct omap_hwmod_ocp_if dm816x_l4_ls__timer7 = {
0778     .master     = &dm81xx_l4_ls_hwmod,
0779     .slave      = &dm816x_timer7_hwmod,
0780     .clk        = "sysclk6_ck",
0781     .user       = OCP_USER_MPU,
0782 };
0783 
0784 /* EMAC Ethernet */
0785 static struct omap_hwmod_class_sysconfig dm816x_emac_sysc = {
0786     .rev_offs   = 0x0,
0787     .sysc_offs  = 0x4,
0788     .sysc_flags = SYSC_HAS_SOFTRESET,
0789     .sysc_fields    = &omap_hwmod_sysc_type2,
0790 };
0791 
0792 static struct omap_hwmod_class dm816x_emac_hwmod_class = {
0793     .name       = "emac",
0794     .sysc       = &dm816x_emac_sysc,
0795 };
0796 
0797 /*
0798  * On dm816x the MDIO is within EMAC0. As the MDIO driver is a separate
0799  * driver probed before EMAC0, we let MDIO do the clock idling.
0800  */
0801 static struct omap_hwmod dm816x_emac0_hwmod = {
0802     .name       = "emac0",
0803     .clkdm_name = "alwon_ethernet_clkdm",
0804     .class      = &dm816x_emac_hwmod_class,
0805     .flags      = HWMOD_NO_IDLEST,
0806 };
0807 
0808 static struct omap_hwmod_ocp_if dm81xx_l4_hs__emac0 = {
0809     .master     = &dm81xx_l4_hs_hwmod,
0810     .slave      = &dm816x_emac0_hwmod,
0811     .clk        = "sysclk5_ck",
0812     .user       = OCP_USER_MPU,
0813 };
0814 
0815 static struct omap_hwmod_class dm81xx_mdio_hwmod_class = {
0816     .name       = "davinci_mdio",
0817     .sysc       = &dm816x_emac_sysc,
0818 };
0819 
0820 static struct omap_hwmod dm81xx_emac0_mdio_hwmod = {
0821     .name       = "davinci_mdio",
0822     .class      = &dm81xx_mdio_hwmod_class,
0823     .clkdm_name = "alwon_ethernet_clkdm",
0824     .main_clk   = "sysclk24_ck",
0825     .flags      = HWMOD_NO_IDLEST,
0826     /*
0827      * REVISIT: This should be moved to the emac0_hwmod
0828      * once we have a better way to handle device slaves.
0829      */
0830     .prcm       = {
0831         .omap4 = {
0832             .clkctrl_offs = DM81XX_CM_ALWON_ETHERNET_0_CLKCTRL,
0833             .modulemode = MODULEMODE_SWCTRL,
0834         },
0835     },
0836 };
0837 
0838 static struct omap_hwmod_ocp_if dm81xx_emac0__mdio = {
0839     .master     = &dm81xx_l4_hs_hwmod,
0840     .slave      = &dm81xx_emac0_mdio_hwmod,
0841     .user       = OCP_USER_MPU,
0842 };
0843 
0844 static struct omap_hwmod dm816x_emac1_hwmod = {
0845     .name       = "emac1",
0846     .clkdm_name = "alwon_ethernet_clkdm",
0847     .main_clk   = "sysclk24_ck",
0848     .flags      = HWMOD_NO_IDLEST,
0849     .prcm       = {
0850         .omap4 = {
0851             .clkctrl_offs = DM816X_CM_ALWON_ETHERNET_1_CLKCTRL,
0852             .modulemode = MODULEMODE_SWCTRL,
0853         },
0854     },
0855     .class      = &dm816x_emac_hwmod_class,
0856 };
0857 
0858 static struct omap_hwmod_ocp_if dm816x_l4_hs__emac1 = {
0859     .master     = &dm81xx_l4_hs_hwmod,
0860     .slave      = &dm816x_emac1_hwmod,
0861     .clk        = "sysclk5_ck",
0862     .user       = OCP_USER_MPU,
0863 };
0864 
0865 static struct omap_hwmod_class_sysconfig dm81xx_sata_sysc = {
0866     .rev_offs   = 0x00fc,
0867     .sysc_offs  = 0x1100,
0868     .sysc_flags = SYSC_HAS_SIDLEMODE,
0869     .idlemodes  = SIDLE_FORCE,
0870     .sysc_fields    = &omap_hwmod_sysc_type3,
0871 };
0872 
0873 static struct omap_hwmod_class dm81xx_sata_hwmod_class = {
0874     .name   = "sata",
0875     .sysc   = &dm81xx_sata_sysc,
0876 };
0877 
0878 static struct omap_hwmod dm81xx_sata_hwmod = {
0879     .name       = "sata",
0880     .clkdm_name = "default_clkdm",
0881     .flags      = HWMOD_NO_IDLEST,
0882     .prcm = {
0883         .omap4 = {
0884             .clkctrl_offs = DM81XX_CM_DEFAULT_SATA_CLKCTRL,
0885             .modulemode   = MODULEMODE_SWCTRL,
0886         },
0887     },
0888     .class      = &dm81xx_sata_hwmod_class,
0889 };
0890 
0891 static struct omap_hwmod_ocp_if dm81xx_l4_hs__sata = {
0892     .master     = &dm81xx_l4_hs_hwmod,
0893     .slave      = &dm81xx_sata_hwmod,
0894     .clk        = "sysclk5_ck",
0895     .user       = OCP_USER_MPU,
0896 };
0897 
0898 static struct omap_hwmod_class_sysconfig dm81xx_mmc_sysc = {
0899     .rev_offs   = 0x0,
0900     .sysc_offs  = 0x110,
0901     .syss_offs  = 0x114,
0902     .sysc_flags = SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
0903                 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
0904                 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS,
0905     .idlemodes  = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART,
0906     .sysc_fields    = &omap_hwmod_sysc_type1,
0907 };
0908 
0909 static struct omap_hwmod_class dm81xx_mmc_class = {
0910     .name = "mmc",
0911     .sysc = &dm81xx_mmc_sysc,
0912 };
0913 
0914 static struct omap_hwmod_opt_clk dm81xx_mmc_opt_clks[] = {
0915     { .role = "dbck", .clk = "sysclk18_ck", },
0916 };
0917 
0918 static struct omap_hsmmc_dev_attr mmc_dev_attr = {
0919 };
0920 
0921 static struct omap_hwmod dm814x_mmc1_hwmod = {
0922     .name       = "mmc1",
0923     .clkdm_name = "alwon_l3s_clkdm",
0924     .opt_clks   = dm81xx_mmc_opt_clks,
0925     .opt_clks_cnt   = ARRAY_SIZE(dm81xx_mmc_opt_clks),
0926     .main_clk   = "sysclk8_ck",
0927     .prcm       = {
0928         .omap4 = {
0929             .clkctrl_offs = DM814X_CM_ALWON_MMCHS_0_CLKCTRL,
0930             .modulemode = MODULEMODE_SWCTRL,
0931         },
0932     },
0933     .dev_attr   = &mmc_dev_attr,
0934     .class      = &dm81xx_mmc_class,
0935 };
0936 
0937 static struct omap_hwmod_ocp_if dm814x_l4_ls__mmc1 = {
0938     .master     = &dm81xx_l4_ls_hwmod,
0939     .slave      = &dm814x_mmc1_hwmod,
0940     .clk        = "sysclk6_ck",
0941     .user       = OCP_USER_MPU,
0942     .flags      = OMAP_FIREWALL_L4
0943 };
0944 
0945 static struct omap_hwmod dm814x_mmc2_hwmod = {
0946     .name       = "mmc2",
0947     .clkdm_name = "alwon_l3s_clkdm",
0948     .opt_clks   = dm81xx_mmc_opt_clks,
0949     .opt_clks_cnt   = ARRAY_SIZE(dm81xx_mmc_opt_clks),
0950     .main_clk   = "sysclk8_ck",
0951     .prcm       = {
0952         .omap4 = {
0953             .clkctrl_offs = DM814X_CM_ALWON_MMCHS_1_CLKCTRL,
0954             .modulemode = MODULEMODE_SWCTRL,
0955         },
0956     },
0957     .dev_attr   = &mmc_dev_attr,
0958     .class      = &dm81xx_mmc_class,
0959 };
0960 
0961 static struct omap_hwmod_ocp_if dm814x_l4_ls__mmc2 = {
0962     .master     = &dm81xx_l4_ls_hwmod,
0963     .slave      = &dm814x_mmc2_hwmod,
0964     .clk        = "sysclk6_ck",
0965     .user       = OCP_USER_MPU,
0966     .flags      = OMAP_FIREWALL_L4
0967 };
0968 
0969 static struct omap_hwmod dm814x_mmc3_hwmod = {
0970     .name       = "mmc3",
0971     .clkdm_name = "alwon_l3_med_clkdm",
0972     .opt_clks   = dm81xx_mmc_opt_clks,
0973     .opt_clks_cnt   = ARRAY_SIZE(dm81xx_mmc_opt_clks),
0974     .main_clk   = "sysclk8_ck",
0975     .prcm       = {
0976         .omap4 = {
0977             .clkctrl_offs = DM814X_CM_ALWON_MMCHS_2_CLKCTRL,
0978             .modulemode = MODULEMODE_SWCTRL,
0979         },
0980     },
0981     .dev_attr   = &mmc_dev_attr,
0982     .class      = &dm81xx_mmc_class,
0983 };
0984 
0985 static struct omap_hwmod_ocp_if dm814x_alwon_l3_med__mmc3 = {
0986     .master     = &dm81xx_alwon_l3_med_hwmod,
0987     .slave      = &dm814x_mmc3_hwmod,
0988     .clk        = "sysclk4_ck",
0989     .user       = OCP_USER_MPU,
0990 };
0991 
0992 static struct omap_hwmod dm816x_mmc1_hwmod = {
0993     .name       = "mmc1",
0994     .clkdm_name = "alwon_l3s_clkdm",
0995     .opt_clks   = dm81xx_mmc_opt_clks,
0996     .opt_clks_cnt   = ARRAY_SIZE(dm81xx_mmc_opt_clks),
0997     .main_clk   = "sysclk10_ck",
0998     .prcm       = {
0999         .omap4 = {
1000             .clkctrl_offs = DM816X_CM_ALWON_SDIO_CLKCTRL,
1001             .modulemode = MODULEMODE_SWCTRL,
1002         },
1003     },
1004     .dev_attr   = &mmc_dev_attr,
1005     .class      = &dm81xx_mmc_class,
1006 };
1007 
1008 static struct omap_hwmod_ocp_if dm816x_l4_ls__mmc1 = {
1009     .master     = &dm81xx_l4_ls_hwmod,
1010     .slave      = &dm816x_mmc1_hwmod,
1011     .clk        = "sysclk6_ck",
1012     .user       = OCP_USER_MPU,
1013     .flags      = OMAP_FIREWALL_L4
1014 };
1015 
1016 static struct omap_hwmod_class_sysconfig dm816x_mcspi_sysc = {
1017     .rev_offs   = 0x0,
1018     .sysc_offs  = 0x110,
1019     .syss_offs  = 0x114,
1020     .sysc_flags = SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
1021                 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
1022                 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS,
1023     .idlemodes  = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART,
1024     .sysc_fields    = &omap_hwmod_sysc_type1,
1025 };
1026 
1027 static struct omap_hwmod_class dm816x_mcspi_class = {
1028     .name = "mcspi",
1029     .sysc = &dm816x_mcspi_sysc,
1030 };
1031 
1032 static struct omap_hwmod dm81xx_mcspi1_hwmod = {
1033     .name       = "mcspi1",
1034     .clkdm_name = "alwon_l3s_clkdm",
1035     .main_clk   = "sysclk10_ck",
1036     .prcm       = {
1037         .omap4 = {
1038             .clkctrl_offs = DM81XX_CM_ALWON_SPI_CLKCTRL,
1039             .modulemode = MODULEMODE_SWCTRL,
1040         },
1041     },
1042     .class      = &dm816x_mcspi_class,
1043 };
1044 
1045 static struct omap_hwmod dm81xx_mcspi2_hwmod = {
1046     .name       = "mcspi2",
1047     .clkdm_name = "alwon_l3s_clkdm",
1048     .main_clk   = "sysclk10_ck",
1049     .prcm       = {
1050         .omap4 = {
1051             .clkctrl_offs = DM81XX_CM_ALWON_SPI_CLKCTRL,
1052             .modulemode = MODULEMODE_SWCTRL,
1053         },
1054     },
1055     .class      = &dm816x_mcspi_class,
1056 };
1057 
1058 static struct omap_hwmod dm81xx_mcspi3_hwmod = {
1059     .name       = "mcspi3",
1060     .clkdm_name = "alwon_l3s_clkdm",
1061     .main_clk   = "sysclk10_ck",
1062     .prcm       = {
1063         .omap4 = {
1064             .clkctrl_offs = DM81XX_CM_ALWON_SPI_CLKCTRL,
1065             .modulemode = MODULEMODE_SWCTRL,
1066         },
1067     },
1068     .class      = &dm816x_mcspi_class,
1069 };
1070 
1071 static struct omap_hwmod dm81xx_mcspi4_hwmod = {
1072     .name       = "mcspi4",
1073     .clkdm_name = "alwon_l3s_clkdm",
1074     .main_clk   = "sysclk10_ck",
1075     .prcm       = {
1076         .omap4 = {
1077             .clkctrl_offs = DM81XX_CM_ALWON_SPI_CLKCTRL,
1078             .modulemode = MODULEMODE_SWCTRL,
1079         },
1080     },
1081     .class      = &dm816x_mcspi_class,
1082 };
1083 
1084 static struct omap_hwmod_ocp_if dm81xx_l4_ls__mcspi1 = {
1085     .master     = &dm81xx_l4_ls_hwmod,
1086     .slave      = &dm81xx_mcspi1_hwmod,
1087     .clk        = "sysclk6_ck",
1088     .user       = OCP_USER_MPU,
1089 };
1090 
1091 static struct omap_hwmod_ocp_if dm81xx_l4_ls__mcspi2 = {
1092     .master     = &dm81xx_l4_ls_hwmod,
1093     .slave      = &dm81xx_mcspi2_hwmod,
1094     .clk        = "sysclk6_ck",
1095     .user       = OCP_USER_MPU,
1096 };
1097 
1098 static struct omap_hwmod_ocp_if dm81xx_l4_ls__mcspi3 = {
1099     .master     = &dm81xx_l4_ls_hwmod,
1100     .slave      = &dm81xx_mcspi3_hwmod,
1101     .clk        = "sysclk6_ck",
1102     .user       = OCP_USER_MPU,
1103 };
1104 
1105 static struct omap_hwmod_ocp_if dm81xx_l4_ls__mcspi4 = {
1106     .master     = &dm81xx_l4_ls_hwmod,
1107     .slave      = &dm81xx_mcspi4_hwmod,
1108     .clk        = "sysclk6_ck",
1109     .user       = OCP_USER_MPU,
1110 };
1111 
1112 static struct omap_hwmod_class_sysconfig dm81xx_mailbox_sysc = {
1113     .rev_offs   = 0x000,
1114     .sysc_offs  = 0x010,
1115     .syss_offs  = 0x014,
1116     .sysc_flags = SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
1117                 SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE,
1118     .idlemodes  = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART,
1119     .sysc_fields    = &omap_hwmod_sysc_type1,
1120 };
1121 
1122 static struct omap_hwmod_class dm81xx_mailbox_hwmod_class = {
1123     .name = "mailbox",
1124     .sysc = &dm81xx_mailbox_sysc,
1125 };
1126 
1127 static struct omap_hwmod dm81xx_mailbox_hwmod = {
1128     .name       = "mailbox",
1129     .clkdm_name = "alwon_l3s_clkdm",
1130     .class      = &dm81xx_mailbox_hwmod_class,
1131     .main_clk   = "sysclk6_ck",
1132     .prcm       = {
1133         .omap4 = {
1134             .clkctrl_offs = DM81XX_CM_ALWON_MAILBOX_CLKCTRL,
1135             .modulemode = MODULEMODE_SWCTRL,
1136         },
1137     },
1138 };
1139 
1140 static struct omap_hwmod_ocp_if dm81xx_l4_ls__mailbox = {
1141     .master     = &dm81xx_l4_ls_hwmod,
1142     .slave      = &dm81xx_mailbox_hwmod,
1143     .clk        = "sysclk6_ck",
1144     .user       = OCP_USER_MPU,
1145 };
1146 
1147 static struct omap_hwmod_class_sysconfig dm81xx_spinbox_sysc = {
1148     .rev_offs   = 0x000,
1149     .sysc_offs  = 0x010,
1150     .syss_offs  = 0x014,
1151     .sysc_flags = SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
1152                 SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE,
1153     .idlemodes  = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART,
1154     .sysc_fields    = &omap_hwmod_sysc_type1,
1155 };
1156 
1157 static struct omap_hwmod_class dm81xx_spinbox_hwmod_class = {
1158     .name = "spinbox",
1159     .sysc = &dm81xx_spinbox_sysc,
1160 };
1161 
1162 static struct omap_hwmod dm81xx_spinbox_hwmod = {
1163     .name       = "spinbox",
1164     .clkdm_name = "alwon_l3s_clkdm",
1165     .class      = &dm81xx_spinbox_hwmod_class,
1166     .main_clk   = "sysclk6_ck",
1167     .prcm       = {
1168         .omap4 = {
1169             .clkctrl_offs = DM81XX_CM_ALWON_SPINBOX_CLKCTRL,
1170             .modulemode = MODULEMODE_SWCTRL,
1171         },
1172     },
1173 };
1174 
1175 static struct omap_hwmod_ocp_if dm81xx_l4_ls__spinbox = {
1176     .master     = &dm81xx_l4_ls_hwmod,
1177     .slave      = &dm81xx_spinbox_hwmod,
1178     .clk        = "sysclk6_ck",
1179     .user       = OCP_USER_MPU,
1180 };
1181 
1182 /*
1183  * REVISIT: Test and enable the following once clocks work:
1184  * dm81xx_l4_ls__mailbox
1185  *
1186  * Also note that some devices share a single clkctrl_offs..
1187  * For example, i2c1 and 3 share one, and i2c2 and 4 share one.
1188  */
1189 static struct omap_hwmod_ocp_if *dm814x_hwmod_ocp_ifs[] __initdata = {
1190     &dm814x_mpu__alwon_l3_slow,
1191     &dm814x_mpu__alwon_l3_med,
1192     &dm81xx_alwon_l3_slow__l4_ls,
1193     &dm81xx_alwon_l3_slow__l4_hs,
1194     &dm81xx_l4_ls__uart1,
1195     &dm81xx_l4_ls__uart2,
1196     &dm81xx_l4_ls__uart3,
1197     &dm81xx_l4_ls__wd_timer1,
1198     &dm81xx_l4_ls__i2c1,
1199     &dm81xx_l4_ls__i2c2,
1200     &dm81xx_l4_ls__gpio1,
1201     &dm81xx_l4_ls__gpio2,
1202     &dm81xx_l4_ls__gpio3,
1203     &dm81xx_l4_ls__gpio4,
1204     &dm81xx_l4_ls__elm,
1205     &dm81xx_l4_ls__mcspi1,
1206     &dm81xx_l4_ls__mcspi2,
1207     &dm81xx_l4_ls__mcspi3,
1208     &dm81xx_l4_ls__mcspi4,
1209     &dm814x_l4_ls__mmc1,
1210     &dm814x_l4_ls__mmc2,
1211     &ti81xx_l4_ls__rtc,
1212     &dm81xx_alwon_l3_slow__gpmc,
1213     &dm814x_default_l3_slow__usbss,
1214     &dm814x_alwon_l3_med__mmc3,
1215     NULL,
1216 };
1217 
1218 int __init dm814x_hwmod_init(void)
1219 {
1220     omap_hwmod_init();
1221     return omap_hwmod_register_links(dm814x_hwmod_ocp_ifs);
1222 }
1223 
1224 static struct omap_hwmod_ocp_if *dm816x_hwmod_ocp_ifs[] __initdata = {
1225     &dm816x_mpu__alwon_l3_slow,
1226     &dm816x_mpu__alwon_l3_med,
1227     &dm81xx_alwon_l3_slow__l4_ls,
1228     &dm81xx_alwon_l3_slow__l4_hs,
1229     &dm81xx_l4_ls__uart1,
1230     &dm81xx_l4_ls__uart2,
1231     &dm81xx_l4_ls__uart3,
1232     &dm81xx_l4_ls__wd_timer1,
1233     &dm81xx_l4_ls__i2c1,
1234     &dm81xx_l4_ls__i2c2,
1235     &dm81xx_l4_ls__gpio1,
1236     &dm81xx_l4_ls__gpio2,
1237     &dm81xx_l4_ls__elm,
1238     &ti81xx_l4_ls__rtc,
1239     &dm816x_l4_ls__mmc1,
1240     &dm816x_l4_ls__timer3,
1241     &dm816x_l4_ls__timer4,
1242     &dm816x_l4_ls__timer5,
1243     &dm816x_l4_ls__timer6,
1244     &dm816x_l4_ls__timer7,
1245     &dm81xx_l4_ls__mcspi1,
1246     &dm81xx_l4_ls__mailbox,
1247     &dm81xx_l4_ls__spinbox,
1248     &dm81xx_l4_hs__emac0,
1249     &dm81xx_emac0__mdio,
1250     &dm816x_l4_hs__emac1,
1251     &dm81xx_l4_hs__sata,
1252     &dm81xx_alwon_l3_slow__gpmc,
1253     &dm816x_default_l3_slow__usbss,
1254     NULL,
1255 };
1256 
1257 int __init dm816x_hwmod_init(void)
1258 {
1259     omap_hwmod_init();
1260     return omap_hwmod_register_links(dm816x_hwmod_ocp_ifs);
1261 }