Merge tag 'qcom-dts-for-5.9' of git://git.kernel.org/pub/scm/linux/kernel/git/qcom...
[linux-2.6-microblaze.git] / arch / arm / mach-omap2 / omap_hwmod_2xxx_ipblock_data.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * omap_hwmod_2xxx_ipblock_data.c - common IP block data for OMAP2xxx
4  *
5  * Copyright (C) 2011 Nokia Corporation
6  * Paul Walmsley
7  */
8
9 #include <linux/types.h>
10
11 #include "omap_hwmod.h"
12 #include "omap_hwmod_common_data.h"
13 #include "cm-regbits-24xx.h"
14 #include "prm-regbits-24xx.h"
15 #include "wd_timer.h"
16
17 /*
18  * 'dispc' class
19  * display controller
20  */
21
22 static struct omap_hwmod_class_sysconfig omap2_dispc_sysc = {
23         .rev_offs       = 0x0000,
24         .sysc_offs      = 0x0010,
25         .syss_offs      = 0x0014,
26         .sysc_flags     = (SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE |
27                            SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
28         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
29                            MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
30         .sysc_fields    = &omap_hwmod_sysc_type1,
31 };
32
33 struct omap_hwmod_class omap2_dispc_hwmod_class = {
34         .name   = "dispc",
35         .sysc   = &omap2_dispc_sysc,
36 };
37
38 /* OMAP2xxx Timer Common */
39 static struct omap_hwmod_class_sysconfig omap2xxx_timer_sysc = {
40         .rev_offs       = 0x0000,
41         .sysc_offs      = 0x0010,
42         .syss_offs      = 0x0014,
43         .sysc_flags     = (SYSC_HAS_SIDLEMODE | SYSC_HAS_CLOCKACTIVITY |
44                            SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
45                            SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
46         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
47         .sysc_fields    = &omap_hwmod_sysc_type1,
48 };
49
50 struct omap_hwmod_class omap2xxx_timer_hwmod_class = {
51         .name   = "timer",
52         .sysc   = &omap2xxx_timer_sysc,
53 };
54
55 /*
56  * 'wd_timer' class
57  * 32-bit watchdog upward counter that generates a pulse on the reset pin on
58  * overflow condition
59  */
60
61 static struct omap_hwmod_class_sysconfig omap2xxx_wd_timer_sysc = {
62         .rev_offs       = 0x0000,
63         .sysc_offs      = 0x0010,
64         .syss_offs      = 0x0014,
65         .sysc_flags     = (SYSC_HAS_EMUFREE | SYSC_HAS_SOFTRESET |
66                            SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
67         .sysc_fields    = &omap_hwmod_sysc_type1,
68 };
69
70 struct omap_hwmod_class omap2xxx_wd_timer_hwmod_class = {
71         .name           = "wd_timer",
72         .sysc           = &omap2xxx_wd_timer_sysc,
73         .pre_shutdown   = &omap2_wd_timer_disable,
74         .reset          = &omap2_wd_timer_reset,
75 };
76
77 /*
78  * 'gpio' class
79  * general purpose io module
80  */
81 static struct omap_hwmod_class_sysconfig omap2xxx_gpio_sysc = {
82         .rev_offs       = 0x0000,
83         .sysc_offs      = 0x0010,
84         .syss_offs      = 0x0014,
85         .sysc_flags     = (SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
86                            SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
87                            SYSS_HAS_RESET_STATUS),
88         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
89         .sysc_fields    = &omap_hwmod_sysc_type1,
90 };
91
92 struct omap_hwmod_class omap2xxx_gpio_hwmod_class = {
93         .name = "gpio",
94         .sysc = &omap2xxx_gpio_sysc,
95 };
96
97 /*
98  * 'mailbox' class
99  * mailbox module allowing communication between the on-chip processors
100  * using a queued mailbox-interrupt mechanism.
101  */
102
103 static struct omap_hwmod_class_sysconfig omap2xxx_mailbox_sysc = {
104         .rev_offs       = 0x000,
105         .sysc_offs      = 0x010,
106         .syss_offs      = 0x014,
107         .sysc_flags     = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
108                            SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
109         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
110         .sysc_fields    = &omap_hwmod_sysc_type1,
111 };
112
113 struct omap_hwmod_class omap2xxx_mailbox_hwmod_class = {
114         .name   = "mailbox",
115         .sysc   = &omap2xxx_mailbox_sysc,
116 };
117
118 /*
119  * 'mcspi' class
120  * multichannel serial port interface (mcspi) / master/slave synchronous serial
121  * bus
122  */
123
124 static struct omap_hwmod_class_sysconfig omap2xxx_mcspi_sysc = {
125         .rev_offs       = 0x0000,
126         .sysc_offs      = 0x0010,
127         .syss_offs      = 0x0014,
128         .sysc_flags     = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
129                                 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
130                                 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
131         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
132         .sysc_fields    = &omap_hwmod_sysc_type1,
133 };
134
135 struct omap_hwmod_class omap2xxx_mcspi_class = {
136         .name   = "mcspi",
137         .sysc   = &omap2xxx_mcspi_sysc,
138 };
139
140 /*
141  * 'gpmc' class
142  * general purpose memory controller
143  */
144
145 static struct omap_hwmod_class_sysconfig omap2xxx_gpmc_sysc = {
146         .rev_offs       = 0x0000,
147         .sysc_offs      = 0x0010,
148         .syss_offs      = 0x0014,
149         .sysc_flags     = (SYSC_HAS_AUTOIDLE | SYSC_HAS_SIDLEMODE |
150                            SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
151         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
152         .sysc_fields    = &omap_hwmod_sysc_type1,
153 };
154
155 static struct omap_hwmod_class omap2xxx_gpmc_hwmod_class = {
156         .name   = "gpmc",
157         .sysc   = &omap2xxx_gpmc_sysc,
158 };
159
160 /*
161  * IP blocks
162  */
163
164 /* L3 */
165 struct omap_hwmod omap2xxx_l3_main_hwmod = {
166         .name           = "l3_main",
167         .class          = &l3_hwmod_class,
168         .flags          = HWMOD_NO_IDLEST,
169 };
170
171 /* L4 CORE */
172 struct omap_hwmod omap2xxx_l4_core_hwmod = {
173         .name           = "l4_core",
174         .class          = &l4_hwmod_class,
175         .flags          = HWMOD_NO_IDLEST,
176 };
177
178 /* L4 WKUP */
179 struct omap_hwmod omap2xxx_l4_wkup_hwmod = {
180         .name           = "l4_wkup",
181         .class          = &l4_hwmod_class,
182         .flags          = HWMOD_NO_IDLEST,
183 };
184
185 /* MPU */
186 struct omap_hwmod omap2xxx_mpu_hwmod = {
187         .name           = "mpu",
188         .class          = &mpu_hwmod_class,
189         .main_clk       = "mpu_ck",
190 };
191
192 /* IVA2 */
193 struct omap_hwmod omap2xxx_iva_hwmod = {
194         .name           = "iva",
195         .class          = &iva_hwmod_class,
196 };
197
198 /* timer3 */
199 struct omap_hwmod omap2xxx_timer3_hwmod = {
200         .name           = "timer3",
201         .main_clk       = "gpt3_fck",
202         .prcm           = {
203                 .omap2 = {
204                         .module_offs = CORE_MOD,
205                         .idlest_reg_id = 1,
206                         .idlest_idle_bit = OMAP24XX_ST_GPT3_SHIFT,
207                 },
208         },
209         .class          = &omap2xxx_timer_hwmod_class,
210         .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
211 };
212
213 /* timer4 */
214 struct omap_hwmod omap2xxx_timer4_hwmod = {
215         .name           = "timer4",
216         .main_clk       = "gpt4_fck",
217         .prcm           = {
218                 .omap2 = {
219                         .module_offs = CORE_MOD,
220                         .idlest_reg_id = 1,
221                         .idlest_idle_bit = OMAP24XX_ST_GPT4_SHIFT,
222                 },
223         },
224         .class          = &omap2xxx_timer_hwmod_class,
225         .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
226 };
227
228 /* timer5 */
229 struct omap_hwmod omap2xxx_timer5_hwmod = {
230         .name           = "timer5",
231         .main_clk       = "gpt5_fck",
232         .prcm           = {
233                 .omap2 = {
234                         .module_offs = CORE_MOD,
235                         .idlest_reg_id = 1,
236                         .idlest_idle_bit = OMAP24XX_ST_GPT5_SHIFT,
237                 },
238         },
239         .class          = &omap2xxx_timer_hwmod_class,
240         .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
241 };
242
243 /* timer6 */
244 struct omap_hwmod omap2xxx_timer6_hwmod = {
245         .name           = "timer6",
246         .main_clk       = "gpt6_fck",
247         .prcm           = {
248                 .omap2 = {
249                         .module_offs = CORE_MOD,
250                         .idlest_reg_id = 1,
251                         .idlest_idle_bit = OMAP24XX_ST_GPT6_SHIFT,
252                 },
253         },
254         .class          = &omap2xxx_timer_hwmod_class,
255         .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
256 };
257
258 /* timer7 */
259 struct omap_hwmod omap2xxx_timer7_hwmod = {
260         .name           = "timer7",
261         .main_clk       = "gpt7_fck",
262         .prcm           = {
263                 .omap2 = {
264                         .module_offs = CORE_MOD,
265                         .idlest_reg_id = 1,
266                         .idlest_idle_bit = OMAP24XX_ST_GPT7_SHIFT,
267                 },
268         },
269         .class          = &omap2xxx_timer_hwmod_class,
270         .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
271 };
272
273 /* timer8 */
274 struct omap_hwmod omap2xxx_timer8_hwmod = {
275         .name           = "timer8",
276         .main_clk       = "gpt8_fck",
277         .prcm           = {
278                 .omap2 = {
279                         .module_offs = CORE_MOD,
280                         .idlest_reg_id = 1,
281                         .idlest_idle_bit = OMAP24XX_ST_GPT8_SHIFT,
282                 },
283         },
284         .class          = &omap2xxx_timer_hwmod_class,
285         .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
286 };
287
288 /* timer9 */
289 struct omap_hwmod omap2xxx_timer9_hwmod = {
290         .name           = "timer9",
291         .main_clk       = "gpt9_fck",
292         .prcm           = {
293                 .omap2 = {
294                         .module_offs = CORE_MOD,
295                         .idlest_reg_id = 1,
296                         .idlest_idle_bit = OMAP24XX_ST_GPT9_SHIFT,
297                 },
298         },
299         .class          = &omap2xxx_timer_hwmod_class,
300         .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
301 };
302
303 /* timer10 */
304 struct omap_hwmod omap2xxx_timer10_hwmod = {
305         .name           = "timer10",
306         .main_clk       = "gpt10_fck",
307         .prcm           = {
308                 .omap2 = {
309                         .module_offs = CORE_MOD,
310                         .idlest_reg_id = 1,
311                         .idlest_idle_bit = OMAP24XX_ST_GPT10_SHIFT,
312                 },
313         },
314         .class          = &omap2xxx_timer_hwmod_class,
315         .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
316 };
317
318 /* timer11 */
319 struct omap_hwmod omap2xxx_timer11_hwmod = {
320         .name           = "timer11",
321         .main_clk       = "gpt11_fck",
322         .prcm           = {
323                 .omap2 = {
324                         .module_offs = CORE_MOD,
325                         .idlest_reg_id = 1,
326                         .idlest_idle_bit = OMAP24XX_ST_GPT11_SHIFT,
327                 },
328         },
329         .class          = &omap2xxx_timer_hwmod_class,
330         .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
331 };
332
333 /* timer12 */
334 struct omap_hwmod omap2xxx_timer12_hwmod = {
335         .name           = "timer12",
336         .main_clk       = "gpt12_fck",
337         .prcm           = {
338                 .omap2 = {
339                         .module_offs = CORE_MOD,
340                         .idlest_reg_id = 1,
341                         .idlest_idle_bit = OMAP24XX_ST_GPT12_SHIFT,
342                 },
343         },
344         .class          = &omap2xxx_timer_hwmod_class,
345         .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
346 };
347
348 /* wd_timer2 */
349 struct omap_hwmod omap2xxx_wd_timer2_hwmod = {
350         .name           = "wd_timer2",
351         .class          = &omap2xxx_wd_timer_hwmod_class,
352         .main_clk       = "mpu_wdt_fck",
353         .prcm           = {
354                 .omap2 = {
355                         .module_offs = WKUP_MOD,
356                         .idlest_reg_id = 1,
357                         .idlest_idle_bit = OMAP24XX_ST_MPU_WDT_SHIFT,
358                 },
359         },
360 };
361
362 /* UART1 */
363
364 struct omap_hwmod omap2xxx_uart1_hwmod = {
365         .name           = "uart1",
366         .main_clk       = "uart1_fck",
367         .flags          = DEBUG_OMAP2UART1_FLAGS | HWMOD_SWSUP_SIDLE_ACT,
368         .prcm           = {
369                 .omap2 = {
370                         .module_offs = CORE_MOD,
371                         .idlest_reg_id = 1,
372                         .idlest_idle_bit = OMAP24XX_EN_UART1_SHIFT,
373                 },
374         },
375         .class          = &omap2_uart_class,
376 };
377
378 /* UART2 */
379
380 struct omap_hwmod omap2xxx_uart2_hwmod = {
381         .name           = "uart2",
382         .main_clk       = "uart2_fck",
383         .flags          = DEBUG_OMAP2UART2_FLAGS | HWMOD_SWSUP_SIDLE_ACT,
384         .prcm           = {
385                 .omap2 = {
386                         .module_offs = CORE_MOD,
387                         .idlest_reg_id = 1,
388                         .idlest_idle_bit = OMAP24XX_EN_UART2_SHIFT,
389                 },
390         },
391         .class          = &omap2_uart_class,
392 };
393
394 /* UART3 */
395
396 struct omap_hwmod omap2xxx_uart3_hwmod = {
397         .name           = "uart3",
398         .main_clk       = "uart3_fck",
399         .flags          = DEBUG_OMAP2UART3_FLAGS | HWMOD_SWSUP_SIDLE_ACT,
400         .prcm           = {
401                 .omap2 = {
402                         .module_offs = CORE_MOD,
403                         .idlest_reg_id = 2,
404                         .idlest_idle_bit = OMAP24XX_EN_UART3_SHIFT,
405                 },
406         },
407         .class          = &omap2_uart_class,
408 };
409
410 /* dss */
411
412 static struct omap_hwmod_opt_clk dss_opt_clks[] = {
413         /*
414          * The DSS HW needs all DSS clocks enabled during reset. The dss_core
415          * driver does not use these clocks.
416          */
417         { .role = "tv_clk", .clk = "dss_54m_fck" },
418         { .role = "sys_clk", .clk = "dss2_fck" },
419 };
420
421 struct omap_hwmod omap2xxx_dss_core_hwmod = {
422         .name           = "dss_core",
423         .class          = &omap2_dss_hwmod_class,
424         .main_clk       = "dss1_fck", /* instead of dss_fck */
425         .prcm           = {
426                 .omap2 = {
427                         .module_offs = CORE_MOD,
428                         .idlest_reg_id = 1,
429                 },
430         },
431         .opt_clks       = dss_opt_clks,
432         .opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
433         .flags          = HWMOD_NO_IDLEST | HWMOD_CONTROL_OPT_CLKS_IN_RESET,
434 };
435
436 struct omap_hwmod omap2xxx_dss_dispc_hwmod = {
437         .name           = "dss_dispc",
438         .class          = &omap2_dispc_hwmod_class,
439         .main_clk       = "dss1_fck",
440         .prcm           = {
441                 .omap2 = {
442                         .module_offs = CORE_MOD,
443                         .idlest_reg_id = 1,
444                 },
445         },
446         .flags          = HWMOD_NO_IDLEST,
447         .dev_attr       = &omap2_3_dss_dispc_dev_attr,
448 };
449
450 static struct omap_hwmod_opt_clk dss_rfbi_opt_clks[] = {
451         { .role = "ick", .clk = "dss_ick" },
452 };
453
454 struct omap_hwmod omap2xxx_dss_rfbi_hwmod = {
455         .name           = "dss_rfbi",
456         .class          = &omap2_rfbi_hwmod_class,
457         .main_clk       = "dss1_fck",
458         .prcm           = {
459                 .omap2 = {
460                         .module_offs = CORE_MOD,
461                 },
462         },
463         .opt_clks       = dss_rfbi_opt_clks,
464         .opt_clks_cnt   = ARRAY_SIZE(dss_rfbi_opt_clks),
465         .flags          = HWMOD_NO_IDLEST,
466 };
467
468 struct omap_hwmod omap2xxx_dss_venc_hwmod = {
469         .name           = "dss_venc",
470         .class          = &omap2_venc_hwmod_class,
471         .main_clk       = "dss_54m_fck",
472         .prcm           = {
473                 .omap2 = {
474                         .module_offs = CORE_MOD,
475                 },
476         },
477         .flags          = HWMOD_NO_IDLEST,
478 };
479
480 /* gpio1 */
481 struct omap_hwmod omap2xxx_gpio1_hwmod = {
482         .name           = "gpio1",
483         .flags          = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
484         .main_clk       = "gpios_fck",
485         .prcm           = {
486                 .omap2 = {
487                         .module_offs = WKUP_MOD,
488                         .idlest_reg_id = 1,
489                         .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
490                 },
491         },
492         .class          = &omap2xxx_gpio_hwmod_class,
493 };
494
495 /* gpio2 */
496 struct omap_hwmod omap2xxx_gpio2_hwmod = {
497         .name           = "gpio2",
498         .flags          = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
499         .main_clk       = "gpios_fck",
500         .prcm           = {
501                 .omap2 = {
502                         .module_offs = WKUP_MOD,
503                         .idlest_reg_id = 1,
504                         .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
505                 },
506         },
507         .class          = &omap2xxx_gpio_hwmod_class,
508 };
509
510 /* gpio3 */
511 struct omap_hwmod omap2xxx_gpio3_hwmod = {
512         .name           = "gpio3",
513         .flags          = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
514         .main_clk       = "gpios_fck",
515         .prcm           = {
516                 .omap2 = {
517                         .module_offs = WKUP_MOD,
518                         .idlest_reg_id = 1,
519                         .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
520                 },
521         },
522         .class          = &omap2xxx_gpio_hwmod_class,
523 };
524
525 /* gpio4 */
526 struct omap_hwmod omap2xxx_gpio4_hwmod = {
527         .name           = "gpio4",
528         .flags          = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
529         .main_clk       = "gpios_fck",
530         .prcm           = {
531                 .omap2 = {
532                         .module_offs = WKUP_MOD,
533                         .idlest_reg_id = 1,
534                         .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
535                 },
536         },
537         .class          = &omap2xxx_gpio_hwmod_class,
538 };
539
540 /* mcspi1 */
541 struct omap_hwmod omap2xxx_mcspi1_hwmod = {
542         .name           = "mcspi1",
543         .main_clk       = "mcspi1_fck",
544         .prcm           = {
545                 .omap2 = {
546                         .module_offs = CORE_MOD,
547                         .idlest_reg_id = 1,
548                         .idlest_idle_bit = OMAP24XX_ST_MCSPI1_SHIFT,
549                 },
550         },
551         .class          = &omap2xxx_mcspi_class,
552 };
553
554 /* mcspi2 */
555 struct omap_hwmod omap2xxx_mcspi2_hwmod = {
556         .name           = "mcspi2",
557         .main_clk       = "mcspi2_fck",
558         .prcm           = {
559                 .omap2 = {
560                         .module_offs = CORE_MOD,
561                         .idlest_reg_id = 1,
562                         .idlest_idle_bit = OMAP24XX_ST_MCSPI2_SHIFT,
563                 },
564         },
565         .class          = &omap2xxx_mcspi_class,
566 };
567
568 /* gpmc */
569 struct omap_hwmod omap2xxx_gpmc_hwmod = {
570         .name           = "gpmc",
571         .class          = &omap2xxx_gpmc_hwmod_class,
572         .main_clk       = "gpmc_fck",
573         /* Skip reset for CONFIG_OMAP_GPMC_DEBUG for bootloader timings */
574         .flags          = HWMOD_NO_IDLEST | DEBUG_OMAP_GPMC_HWMOD_FLAGS,
575         .prcm           = {
576                 .omap2  = {
577                         .module_offs = CORE_MOD,
578                 },
579         },
580 };
581
582 /* RNG */
583
584 static struct omap_hwmod_class_sysconfig omap2_rng_sysc = {
585         .rev_offs       = 0x3c,
586         .sysc_offs      = 0x40,
587         .syss_offs      = 0x44,
588         .sysc_flags     = (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
589                            SYSS_HAS_RESET_STATUS),
590         .sysc_fields    = &omap_hwmod_sysc_type1,
591 };
592
593 static struct omap_hwmod_class omap2_rng_hwmod_class = {
594         .name           = "rng",
595         .sysc           = &omap2_rng_sysc,
596 };
597
598 struct omap_hwmod omap2xxx_rng_hwmod = {
599         .name           = "rng",
600         .main_clk       = "l4_ck",
601         .prcm           = {
602                 .omap2 = {
603                         .module_offs = CORE_MOD,
604                         .idlest_reg_id = 4,
605                         .idlest_idle_bit = OMAP24XX_ST_RNG_SHIFT,
606                 },
607         },
608         /*
609          * XXX The first read from the SYSSTATUS register of the RNG
610          * after the SYSCONFIG SOFTRESET bit is set triggers an
611          * imprecise external abort.  It's unclear why this happens.
612          * Until this is analyzed, skip the IP block reset.
613          */
614         .flags          = HWMOD_INIT_NO_RESET,
615         .class          = &omap2_rng_hwmod_class,
616 };
617
618 /* SHAM */
619
620 static struct omap_hwmod_class_sysconfig omap2_sham_sysc = {
621         .rev_offs       = 0x5c,
622         .sysc_offs      = 0x60,
623         .syss_offs      = 0x64,
624         .sysc_flags     = (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
625                            SYSS_HAS_RESET_STATUS),
626         .sysc_fields    = &omap_hwmod_sysc_type1,
627 };
628
629 static struct omap_hwmod_class omap2xxx_sham_class = {
630         .name   = "sham",
631         .sysc   = &omap2_sham_sysc,
632 };
633
634 struct omap_hwmod omap2xxx_sham_hwmod = {
635         .name           = "sham",
636         .main_clk       = "l4_ck",
637         .prcm           = {
638                 .omap2 = {
639                         .module_offs = CORE_MOD,
640                         .idlest_reg_id = 4,
641                         .idlest_idle_bit = OMAP24XX_ST_SHA_SHIFT,
642                 },
643         },
644         .class          = &omap2xxx_sham_class,
645 };
646
647 /* AES */
648
649 static struct omap_hwmod_class_sysconfig omap2_aes_sysc = {
650         .rev_offs       = 0x44,
651         .sysc_offs      = 0x48,
652         .syss_offs      = 0x4c,
653         .sysc_flags     = (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
654                            SYSS_HAS_RESET_STATUS),
655         .sysc_fields    = &omap_hwmod_sysc_type1,
656 };
657
658 static struct omap_hwmod_class omap2xxx_aes_class = {
659         .name   = "aes",
660         .sysc   = &omap2_aes_sysc,
661 };
662
663 struct omap_hwmod omap2xxx_aes_hwmod = {
664         .name           = "aes",
665         .main_clk       = "l4_ck",
666         .prcm           = {
667                 .omap2 = {
668                         .module_offs = CORE_MOD,
669                         .idlest_reg_id = 4,
670                         .idlest_idle_bit = OMAP24XX_ST_AES_SHIFT,
671                 },
672         },
673         .class          = &omap2xxx_aes_class,
674 };