Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /*
0003  * omap_hwmod_2xxx_ipblock_data.c - common IP block data for OMAP2xxx
0004  *
0005  * Copyright (C) 2011 Nokia Corporation
0006  * Paul Walmsley
0007  */
0008 
0009 #include <linux/types.h>
0010 
0011 #include "omap_hwmod.h"
0012 #include "omap_hwmod_common_data.h"
0013 #include "cm-regbits-24xx.h"
0014 #include "prm-regbits-24xx.h"
0015 #include "wd_timer.h"
0016 
0017 /*
0018  * 'dispc' class
0019  * display controller
0020  */
0021 
0022 static struct omap_hwmod_class_sysconfig omap2_dispc_sysc = {
0023     .rev_offs   = 0x0000,
0024     .sysc_offs  = 0x0010,
0025     .syss_offs  = 0x0014,
0026     .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE |
0027                SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
0028     .idlemodes  = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
0029                MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
0030     .sysc_fields    = &omap_hwmod_sysc_type1,
0031 };
0032 
0033 struct omap_hwmod_class omap2_dispc_hwmod_class = {
0034     .name   = "dispc",
0035     .sysc   = &omap2_dispc_sysc,
0036 };
0037 
0038 /* OMAP2xxx Timer Common */
0039 static struct omap_hwmod_class_sysconfig omap2xxx_timer_sysc = {
0040     .rev_offs   = 0x0000,
0041     .sysc_offs  = 0x0010,
0042     .syss_offs  = 0x0014,
0043     .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_CLOCKACTIVITY |
0044                SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
0045                SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
0046     .idlemodes  = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
0047     .sysc_fields    = &omap_hwmod_sysc_type1,
0048 };
0049 
0050 struct omap_hwmod_class omap2xxx_timer_hwmod_class = {
0051     .name   = "timer",
0052     .sysc   = &omap2xxx_timer_sysc,
0053 };
0054 
0055 /*
0056  * 'wd_timer' class
0057  * 32-bit watchdog upward counter that generates a pulse on the reset pin on
0058  * overflow condition
0059  */
0060 
0061 static struct omap_hwmod_class_sysconfig omap2xxx_wd_timer_sysc = {
0062     .rev_offs   = 0x0000,
0063     .sysc_offs  = 0x0010,
0064     .syss_offs  = 0x0014,
0065     .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_SOFTRESET |
0066                SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
0067     .sysc_fields    = &omap_hwmod_sysc_type1,
0068 };
0069 
0070 struct omap_hwmod_class omap2xxx_wd_timer_hwmod_class = {
0071     .name       = "wd_timer",
0072     .sysc       = &omap2xxx_wd_timer_sysc,
0073     .pre_shutdown   = &omap2_wd_timer_disable,
0074     .reset      = &omap2_wd_timer_reset,
0075 };
0076 
0077 /*
0078  * 'gpio' class
0079  * general purpose io module
0080  */
0081 static struct omap_hwmod_class_sysconfig omap2xxx_gpio_sysc = {
0082     .rev_offs   = 0x0000,
0083     .sysc_offs  = 0x0010,
0084     .syss_offs  = 0x0014,
0085     .sysc_flags = (SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
0086                SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
0087                SYSS_HAS_RESET_STATUS),
0088     .idlemodes  = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
0089     .sysc_fields    = &omap_hwmod_sysc_type1,
0090 };
0091 
0092 struct omap_hwmod_class omap2xxx_gpio_hwmod_class = {
0093     .name = "gpio",
0094     .sysc = &omap2xxx_gpio_sysc,
0095 };
0096 
0097 /*
0098  * 'mailbox' class
0099  * mailbox module allowing communication between the on-chip processors
0100  * using a queued mailbox-interrupt mechanism.
0101  */
0102 
0103 static struct omap_hwmod_class_sysconfig omap2xxx_mailbox_sysc = {
0104     .rev_offs   = 0x000,
0105     .sysc_offs  = 0x010,
0106     .syss_offs  = 0x014,
0107     .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
0108                SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
0109     .idlemodes  = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
0110     .sysc_fields    = &omap_hwmod_sysc_type1,
0111 };
0112 
0113 struct omap_hwmod_class omap2xxx_mailbox_hwmod_class = {
0114     .name   = "mailbox",
0115     .sysc   = &omap2xxx_mailbox_sysc,
0116 };
0117 
0118 /*
0119  * 'mcspi' class
0120  * multichannel serial port interface (mcspi) / master/slave synchronous serial
0121  * bus
0122  */
0123 
0124 static struct omap_hwmod_class_sysconfig omap2xxx_mcspi_sysc = {
0125     .rev_offs   = 0x0000,
0126     .sysc_offs  = 0x0010,
0127     .syss_offs  = 0x0014,
0128     .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
0129                 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
0130                 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
0131     .idlemodes  = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
0132     .sysc_fields    = &omap_hwmod_sysc_type1,
0133 };
0134 
0135 struct omap_hwmod_class omap2xxx_mcspi_class = {
0136     .name   = "mcspi",
0137     .sysc   = &omap2xxx_mcspi_sysc,
0138 };
0139 
0140 /*
0141  * 'gpmc' class
0142  * general purpose memory controller
0143  */
0144 
0145 static struct omap_hwmod_class_sysconfig omap2xxx_gpmc_sysc = {
0146     .rev_offs   = 0x0000,
0147     .sysc_offs  = 0x0010,
0148     .syss_offs  = 0x0014,
0149     .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_SIDLEMODE |
0150                SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
0151     .idlemodes  = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
0152     .sysc_fields    = &omap_hwmod_sysc_type1,
0153 };
0154 
0155 static struct omap_hwmod_class omap2xxx_gpmc_hwmod_class = {
0156     .name   = "gpmc",
0157     .sysc   = &omap2xxx_gpmc_sysc,
0158 };
0159 
0160 /*
0161  * IP blocks
0162  */
0163 
0164 /* L3 */
0165 struct omap_hwmod omap2xxx_l3_main_hwmod = {
0166     .name       = "l3_main",
0167     .class      = &l3_hwmod_class,
0168     .flags      = HWMOD_NO_IDLEST,
0169 };
0170 
0171 /* L4 CORE */
0172 struct omap_hwmod omap2xxx_l4_core_hwmod = {
0173     .name       = "l4_core",
0174     .class      = &l4_hwmod_class,
0175     .flags      = HWMOD_NO_IDLEST,
0176 };
0177 
0178 /* L4 WKUP */
0179 struct omap_hwmod omap2xxx_l4_wkup_hwmod = {
0180     .name       = "l4_wkup",
0181     .class      = &l4_hwmod_class,
0182     .flags      = HWMOD_NO_IDLEST,
0183 };
0184 
0185 /* MPU */
0186 struct omap_hwmod omap2xxx_mpu_hwmod = {
0187     .name       = "mpu",
0188     .class      = &mpu_hwmod_class,
0189     .main_clk   = "mpu_ck",
0190 };
0191 
0192 /* IVA2 */
0193 struct omap_hwmod omap2xxx_iva_hwmod = {
0194     .name       = "iva",
0195     .class      = &iva_hwmod_class,
0196 };
0197 
0198 /* timer3 */
0199 struct omap_hwmod omap2xxx_timer3_hwmod = {
0200     .name       = "timer3",
0201     .main_clk   = "gpt3_fck",
0202     .prcm       = {
0203         .omap2 = {
0204             .module_offs = CORE_MOD,
0205             .idlest_reg_id = 1,
0206             .idlest_idle_bit = OMAP24XX_ST_GPT3_SHIFT,
0207         },
0208     },
0209     .class      = &omap2xxx_timer_hwmod_class,
0210     .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
0211 };
0212 
0213 /* timer4 */
0214 struct omap_hwmod omap2xxx_timer4_hwmod = {
0215     .name       = "timer4",
0216     .main_clk   = "gpt4_fck",
0217     .prcm       = {
0218         .omap2 = {
0219             .module_offs = CORE_MOD,
0220             .idlest_reg_id = 1,
0221             .idlest_idle_bit = OMAP24XX_ST_GPT4_SHIFT,
0222         },
0223     },
0224     .class      = &omap2xxx_timer_hwmod_class,
0225     .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
0226 };
0227 
0228 /* timer5 */
0229 struct omap_hwmod omap2xxx_timer5_hwmod = {
0230     .name       = "timer5",
0231     .main_clk   = "gpt5_fck",
0232     .prcm       = {
0233         .omap2 = {
0234             .module_offs = CORE_MOD,
0235             .idlest_reg_id = 1,
0236             .idlest_idle_bit = OMAP24XX_ST_GPT5_SHIFT,
0237         },
0238     },
0239     .class      = &omap2xxx_timer_hwmod_class,
0240     .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
0241 };
0242 
0243 /* timer6 */
0244 struct omap_hwmod omap2xxx_timer6_hwmod = {
0245     .name       = "timer6",
0246     .main_clk   = "gpt6_fck",
0247     .prcm       = {
0248         .omap2 = {
0249             .module_offs = CORE_MOD,
0250             .idlest_reg_id = 1,
0251             .idlest_idle_bit = OMAP24XX_ST_GPT6_SHIFT,
0252         },
0253     },
0254     .class      = &omap2xxx_timer_hwmod_class,
0255     .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
0256 };
0257 
0258 /* timer7 */
0259 struct omap_hwmod omap2xxx_timer7_hwmod = {
0260     .name       = "timer7",
0261     .main_clk   = "gpt7_fck",
0262     .prcm       = {
0263         .omap2 = {
0264             .module_offs = CORE_MOD,
0265             .idlest_reg_id = 1,
0266             .idlest_idle_bit = OMAP24XX_ST_GPT7_SHIFT,
0267         },
0268     },
0269     .class      = &omap2xxx_timer_hwmod_class,
0270     .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
0271 };
0272 
0273 /* timer8 */
0274 struct omap_hwmod omap2xxx_timer8_hwmod = {
0275     .name       = "timer8",
0276     .main_clk   = "gpt8_fck",
0277     .prcm       = {
0278         .omap2 = {
0279             .module_offs = CORE_MOD,
0280             .idlest_reg_id = 1,
0281             .idlest_idle_bit = OMAP24XX_ST_GPT8_SHIFT,
0282         },
0283     },
0284     .class      = &omap2xxx_timer_hwmod_class,
0285     .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
0286 };
0287 
0288 /* timer9 */
0289 struct omap_hwmod omap2xxx_timer9_hwmod = {
0290     .name       = "timer9",
0291     .main_clk   = "gpt9_fck",
0292     .prcm       = {
0293         .omap2 = {
0294             .module_offs = CORE_MOD,
0295             .idlest_reg_id = 1,
0296             .idlest_idle_bit = OMAP24XX_ST_GPT9_SHIFT,
0297         },
0298     },
0299     .class      = &omap2xxx_timer_hwmod_class,
0300     .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
0301 };
0302 
0303 /* timer10 */
0304 struct omap_hwmod omap2xxx_timer10_hwmod = {
0305     .name       = "timer10",
0306     .main_clk   = "gpt10_fck",
0307     .prcm       = {
0308         .omap2 = {
0309             .module_offs = CORE_MOD,
0310             .idlest_reg_id = 1,
0311             .idlest_idle_bit = OMAP24XX_ST_GPT10_SHIFT,
0312         },
0313     },
0314     .class      = &omap2xxx_timer_hwmod_class,
0315     .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
0316 };
0317 
0318 /* timer11 */
0319 struct omap_hwmod omap2xxx_timer11_hwmod = {
0320     .name       = "timer11",
0321     .main_clk   = "gpt11_fck",
0322     .prcm       = {
0323         .omap2 = {
0324             .module_offs = CORE_MOD,
0325             .idlest_reg_id = 1,
0326             .idlest_idle_bit = OMAP24XX_ST_GPT11_SHIFT,
0327         },
0328     },
0329     .class      = &omap2xxx_timer_hwmod_class,
0330     .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
0331 };
0332 
0333 /* timer12 */
0334 struct omap_hwmod omap2xxx_timer12_hwmod = {
0335     .name       = "timer12",
0336     .main_clk   = "gpt12_fck",
0337     .prcm       = {
0338         .omap2 = {
0339             .module_offs = CORE_MOD,
0340             .idlest_reg_id = 1,
0341             .idlest_idle_bit = OMAP24XX_ST_GPT12_SHIFT,
0342         },
0343     },
0344     .class      = &omap2xxx_timer_hwmod_class,
0345     .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
0346 };
0347 
0348 /* wd_timer2 */
0349 struct omap_hwmod omap2xxx_wd_timer2_hwmod = {
0350     .name       = "wd_timer2",
0351     .class      = &omap2xxx_wd_timer_hwmod_class,
0352     .main_clk   = "mpu_wdt_fck",
0353     .prcm       = {
0354         .omap2 = {
0355             .module_offs = WKUP_MOD,
0356             .idlest_reg_id = 1,
0357             .idlest_idle_bit = OMAP24XX_ST_MPU_WDT_SHIFT,
0358         },
0359     },
0360 };
0361 
0362 /* UART1 */
0363 
0364 struct omap_hwmod omap2xxx_uart1_hwmod = {
0365     .name       = "uart1",
0366     .main_clk   = "uart1_fck",
0367     .flags      = DEBUG_OMAP2UART1_FLAGS | HWMOD_SWSUP_SIDLE_ACT,
0368     .prcm       = {
0369         .omap2 = {
0370             .module_offs = CORE_MOD,
0371             .idlest_reg_id = 1,
0372             .idlest_idle_bit = OMAP24XX_EN_UART1_SHIFT,
0373         },
0374     },
0375     .class      = &omap2_uart_class,
0376 };
0377 
0378 /* UART2 */
0379 
0380 struct omap_hwmod omap2xxx_uart2_hwmod = {
0381     .name       = "uart2",
0382     .main_clk   = "uart2_fck",
0383     .flags      = DEBUG_OMAP2UART2_FLAGS | HWMOD_SWSUP_SIDLE_ACT,
0384     .prcm       = {
0385         .omap2 = {
0386             .module_offs = CORE_MOD,
0387             .idlest_reg_id = 1,
0388             .idlest_idle_bit = OMAP24XX_EN_UART2_SHIFT,
0389         },
0390     },
0391     .class      = &omap2_uart_class,
0392 };
0393 
0394 /* UART3 */
0395 
0396 struct omap_hwmod omap2xxx_uart3_hwmod = {
0397     .name       = "uart3",
0398     .main_clk   = "uart3_fck",
0399     .flags      = DEBUG_OMAP2UART3_FLAGS | HWMOD_SWSUP_SIDLE_ACT,
0400     .prcm       = {
0401         .omap2 = {
0402             .module_offs = CORE_MOD,
0403             .idlest_reg_id = 2,
0404             .idlest_idle_bit = OMAP24XX_EN_UART3_SHIFT,
0405         },
0406     },
0407     .class      = &omap2_uart_class,
0408 };
0409 
0410 /* dss */
0411 
0412 static struct omap_hwmod_opt_clk dss_opt_clks[] = {
0413     /*
0414      * The DSS HW needs all DSS clocks enabled during reset. The dss_core
0415      * driver does not use these clocks.
0416      */
0417     { .role = "tv_clk", .clk = "dss_54m_fck" },
0418     { .role = "sys_clk", .clk = "dss2_fck" },
0419 };
0420 
0421 struct omap_hwmod omap2xxx_dss_core_hwmod = {
0422     .name       = "dss_core",
0423     .class      = &omap2_dss_hwmod_class,
0424     .main_clk   = "dss1_fck", /* instead of dss_fck */
0425     .prcm       = {
0426         .omap2 = {
0427             .module_offs = CORE_MOD,
0428             .idlest_reg_id = 1,
0429         },
0430     },
0431     .opt_clks   = dss_opt_clks,
0432     .opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
0433     .flags      = HWMOD_NO_IDLEST | HWMOD_CONTROL_OPT_CLKS_IN_RESET,
0434 };
0435 
0436 struct omap_hwmod omap2xxx_dss_dispc_hwmod = {
0437     .name       = "dss_dispc",
0438     .class      = &omap2_dispc_hwmod_class,
0439     .main_clk   = "dss1_fck",
0440     .prcm       = {
0441         .omap2 = {
0442             .module_offs = CORE_MOD,
0443             .idlest_reg_id = 1,
0444         },
0445     },
0446     .flags      = HWMOD_NO_IDLEST,
0447     .dev_attr   = &omap2_3_dss_dispc_dev_attr,
0448 };
0449 
0450 static struct omap_hwmod_opt_clk dss_rfbi_opt_clks[] = {
0451     { .role = "ick", .clk = "dss_ick" },
0452 };
0453 
0454 struct omap_hwmod omap2xxx_dss_rfbi_hwmod = {
0455     .name       = "dss_rfbi",
0456     .class      = &omap2_rfbi_hwmod_class,
0457     .main_clk   = "dss1_fck",
0458     .prcm       = {
0459         .omap2 = {
0460             .module_offs = CORE_MOD,
0461         },
0462     },
0463     .opt_clks   = dss_rfbi_opt_clks,
0464     .opt_clks_cnt   = ARRAY_SIZE(dss_rfbi_opt_clks),
0465     .flags      = HWMOD_NO_IDLEST,
0466 };
0467 
0468 struct omap_hwmod omap2xxx_dss_venc_hwmod = {
0469     .name       = "dss_venc",
0470     .class      = &omap2_venc_hwmod_class,
0471     .main_clk   = "dss_54m_fck",
0472     .prcm       = {
0473         .omap2 = {
0474             .module_offs = CORE_MOD,
0475         },
0476     },
0477     .flags      = HWMOD_NO_IDLEST,
0478 };
0479 
0480 /* gpio1 */
0481 struct omap_hwmod omap2xxx_gpio1_hwmod = {
0482     .name       = "gpio1",
0483     .flags      = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
0484     .main_clk   = "gpios_fck",
0485     .prcm       = {
0486         .omap2 = {
0487             .module_offs = WKUP_MOD,
0488             .idlest_reg_id = 1,
0489             .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
0490         },
0491     },
0492     .class      = &omap2xxx_gpio_hwmod_class,
0493 };
0494 
0495 /* gpio2 */
0496 struct omap_hwmod omap2xxx_gpio2_hwmod = {
0497     .name       = "gpio2",
0498     .flags      = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
0499     .main_clk   = "gpios_fck",
0500     .prcm       = {
0501         .omap2 = {
0502             .module_offs = WKUP_MOD,
0503             .idlest_reg_id = 1,
0504             .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
0505         },
0506     },
0507     .class      = &omap2xxx_gpio_hwmod_class,
0508 };
0509 
0510 /* gpio3 */
0511 struct omap_hwmod omap2xxx_gpio3_hwmod = {
0512     .name       = "gpio3",
0513     .flags      = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
0514     .main_clk   = "gpios_fck",
0515     .prcm       = {
0516         .omap2 = {
0517             .module_offs = WKUP_MOD,
0518             .idlest_reg_id = 1,
0519             .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
0520         },
0521     },
0522     .class      = &omap2xxx_gpio_hwmod_class,
0523 };
0524 
0525 /* gpio4 */
0526 struct omap_hwmod omap2xxx_gpio4_hwmod = {
0527     .name       = "gpio4",
0528     .flags      = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
0529     .main_clk   = "gpios_fck",
0530     .prcm       = {
0531         .omap2 = {
0532             .module_offs = WKUP_MOD,
0533             .idlest_reg_id = 1,
0534             .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
0535         },
0536     },
0537     .class      = &omap2xxx_gpio_hwmod_class,
0538 };
0539 
0540 /* mcspi1 */
0541 struct omap_hwmod omap2xxx_mcspi1_hwmod = {
0542     .name       = "mcspi1",
0543     .main_clk   = "mcspi1_fck",
0544     .prcm       = {
0545         .omap2 = {
0546             .module_offs = CORE_MOD,
0547             .idlest_reg_id = 1,
0548             .idlest_idle_bit = OMAP24XX_ST_MCSPI1_SHIFT,
0549         },
0550     },
0551     .class      = &omap2xxx_mcspi_class,
0552 };
0553 
0554 /* mcspi2 */
0555 struct omap_hwmod omap2xxx_mcspi2_hwmod = {
0556     .name       = "mcspi2",
0557     .main_clk   = "mcspi2_fck",
0558     .prcm       = {
0559         .omap2 = {
0560             .module_offs = CORE_MOD,
0561             .idlest_reg_id = 1,
0562             .idlest_idle_bit = OMAP24XX_ST_MCSPI2_SHIFT,
0563         },
0564     },
0565     .class      = &omap2xxx_mcspi_class,
0566 };
0567 
0568 /* gpmc */
0569 struct omap_hwmod omap2xxx_gpmc_hwmod = {
0570     .name       = "gpmc",
0571     .class      = &omap2xxx_gpmc_hwmod_class,
0572     .main_clk   = "gpmc_fck",
0573     /* Skip reset for CONFIG_OMAP_GPMC_DEBUG for bootloader timings */
0574     .flags      = HWMOD_NO_IDLEST | DEBUG_OMAP_GPMC_HWMOD_FLAGS,
0575     .prcm       = {
0576         .omap2  = {
0577             .module_offs = CORE_MOD,
0578         },
0579     },
0580 };
0581 
0582 /* RNG */
0583 
0584 static struct omap_hwmod_class_sysconfig omap2_rng_sysc = {
0585     .rev_offs   = 0x3c,
0586     .sysc_offs  = 0x40,
0587     .syss_offs  = 0x44,
0588     .sysc_flags = (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
0589                SYSS_HAS_RESET_STATUS),
0590     .sysc_fields    = &omap_hwmod_sysc_type1,
0591 };
0592 
0593 static struct omap_hwmod_class omap2_rng_hwmod_class = {
0594     .name       = "rng",
0595     .sysc       = &omap2_rng_sysc,
0596 };
0597 
0598 struct omap_hwmod omap2xxx_rng_hwmod = {
0599     .name       = "rng",
0600     .main_clk   = "l4_ck",
0601     .prcm       = {
0602         .omap2 = {
0603             .module_offs = CORE_MOD,
0604             .idlest_reg_id = 4,
0605             .idlest_idle_bit = OMAP24XX_ST_RNG_SHIFT,
0606         },
0607     },
0608     /*
0609      * XXX The first read from the SYSSTATUS register of the RNG
0610      * after the SYSCONFIG SOFTRESET bit is set triggers an
0611      * imprecise external abort.  It's unclear why this happens.
0612      * Until this is analyzed, skip the IP block reset.
0613      */
0614     .flags      = HWMOD_INIT_NO_RESET,
0615     .class      = &omap2_rng_hwmod_class,
0616 };
0617 
0618 /* SHAM */
0619 
0620 static struct omap_hwmod_class_sysconfig omap2_sham_sysc = {
0621     .rev_offs   = 0x5c,
0622     .sysc_offs  = 0x60,
0623     .syss_offs  = 0x64,
0624     .sysc_flags = (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
0625                SYSS_HAS_RESET_STATUS),
0626     .sysc_fields    = &omap_hwmod_sysc_type1,
0627 };
0628 
0629 static struct omap_hwmod_class omap2xxx_sham_class = {
0630     .name   = "sham",
0631     .sysc   = &omap2_sham_sysc,
0632 };
0633 
0634 struct omap_hwmod omap2xxx_sham_hwmod = {
0635     .name       = "sham",
0636     .main_clk   = "l4_ck",
0637     .prcm       = {
0638         .omap2 = {
0639             .module_offs = CORE_MOD,
0640             .idlest_reg_id = 4,
0641             .idlest_idle_bit = OMAP24XX_ST_SHA_SHIFT,
0642         },
0643     },
0644     .class      = &omap2xxx_sham_class,
0645 };
0646 
0647 /* AES */
0648 
0649 static struct omap_hwmod_class_sysconfig omap2_aes_sysc = {
0650     .rev_offs   = 0x44,
0651     .sysc_offs  = 0x48,
0652     .syss_offs  = 0x4c,
0653     .sysc_flags = (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
0654                SYSS_HAS_RESET_STATUS),
0655     .sysc_fields    = &omap_hwmod_sysc_type1,
0656 };
0657 
0658 static struct omap_hwmod_class omap2xxx_aes_class = {
0659     .name   = "aes",
0660     .sysc   = &omap2_aes_sysc,
0661 };
0662 
0663 struct omap_hwmod omap2xxx_aes_hwmod = {
0664     .name       = "aes",
0665     .main_clk   = "l4_ck",
0666     .prcm       = {
0667         .omap2 = {
0668             .module_offs = CORE_MOD,
0669             .idlest_reg_id = 4,
0670             .idlest_idle_bit = OMAP24XX_ST_AES_SHIFT,
0671         },
0672     },
0673     .class      = &omap2xxx_aes_class,
0674 };