Merge tag 'arm-soc/for-5.6/devicetree-part2' of https://github.com/Broadcom/stblinux...
[sfrench/cifs-2.6.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 /* timer1 */
199 struct omap_hwmod omap2xxx_timer1_hwmod = {
200         .name           = "timer1",
201         .main_clk       = "gpt1_fck",
202         .prcm           = {
203                 .omap2 = {
204                         .module_offs = WKUP_MOD,
205                         .idlest_reg_id = 1,
206                         .idlest_idle_bit = OMAP24XX_ST_GPT1_SHIFT,
207                 },
208         },
209         .class          = &omap2xxx_timer_hwmod_class,
210         .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
211 };
212
213 /* timer2 */
214 struct omap_hwmod omap2xxx_timer2_hwmod = {
215         .name           = "timer2",
216         .main_clk       = "gpt2_fck",
217         .prcm           = {
218                 .omap2 = {
219                         .module_offs = CORE_MOD,
220                         .idlest_reg_id = 1,
221                         .idlest_idle_bit = OMAP24XX_ST_GPT2_SHIFT,
222                 },
223         },
224         .class          = &omap2xxx_timer_hwmod_class,
225         .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
226 };
227
228 /* timer3 */
229 struct omap_hwmod omap2xxx_timer3_hwmod = {
230         .name           = "timer3",
231         .main_clk       = "gpt3_fck",
232         .prcm           = {
233                 .omap2 = {
234                         .module_offs = CORE_MOD,
235                         .idlest_reg_id = 1,
236                         .idlest_idle_bit = OMAP24XX_ST_GPT3_SHIFT,
237                 },
238         },
239         .class          = &omap2xxx_timer_hwmod_class,
240         .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
241 };
242
243 /* timer4 */
244 struct omap_hwmod omap2xxx_timer4_hwmod = {
245         .name           = "timer4",
246         .main_clk       = "gpt4_fck",
247         .prcm           = {
248                 .omap2 = {
249                         .module_offs = CORE_MOD,
250                         .idlest_reg_id = 1,
251                         .idlest_idle_bit = OMAP24XX_ST_GPT4_SHIFT,
252                 },
253         },
254         .class          = &omap2xxx_timer_hwmod_class,
255         .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
256 };
257
258 /* timer5 */
259 struct omap_hwmod omap2xxx_timer5_hwmod = {
260         .name           = "timer5",
261         .main_clk       = "gpt5_fck",
262         .prcm           = {
263                 .omap2 = {
264                         .module_offs = CORE_MOD,
265                         .idlest_reg_id = 1,
266                         .idlest_idle_bit = OMAP24XX_ST_GPT5_SHIFT,
267                 },
268         },
269         .class          = &omap2xxx_timer_hwmod_class,
270         .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
271 };
272
273 /* timer6 */
274 struct omap_hwmod omap2xxx_timer6_hwmod = {
275         .name           = "timer6",
276         .main_clk       = "gpt6_fck",
277         .prcm           = {
278                 .omap2 = {
279                         .module_offs = CORE_MOD,
280                         .idlest_reg_id = 1,
281                         .idlest_idle_bit = OMAP24XX_ST_GPT6_SHIFT,
282                 },
283         },
284         .class          = &omap2xxx_timer_hwmod_class,
285         .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
286 };
287
288 /* timer7 */
289 struct omap_hwmod omap2xxx_timer7_hwmod = {
290         .name           = "timer7",
291         .main_clk       = "gpt7_fck",
292         .prcm           = {
293                 .omap2 = {
294                         .module_offs = CORE_MOD,
295                         .idlest_reg_id = 1,
296                         .idlest_idle_bit = OMAP24XX_ST_GPT7_SHIFT,
297                 },
298         },
299         .class          = &omap2xxx_timer_hwmod_class,
300         .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
301 };
302
303 /* timer8 */
304 struct omap_hwmod omap2xxx_timer8_hwmod = {
305         .name           = "timer8",
306         .main_clk       = "gpt8_fck",
307         .prcm           = {
308                 .omap2 = {
309                         .module_offs = CORE_MOD,
310                         .idlest_reg_id = 1,
311                         .idlest_idle_bit = OMAP24XX_ST_GPT8_SHIFT,
312                 },
313         },
314         .class          = &omap2xxx_timer_hwmod_class,
315         .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
316 };
317
318 /* timer9 */
319 struct omap_hwmod omap2xxx_timer9_hwmod = {
320         .name           = "timer9",
321         .main_clk       = "gpt9_fck",
322         .prcm           = {
323                 .omap2 = {
324                         .module_offs = CORE_MOD,
325                         .idlest_reg_id = 1,
326                         .idlest_idle_bit = OMAP24XX_ST_GPT9_SHIFT,
327                 },
328         },
329         .class          = &omap2xxx_timer_hwmod_class,
330         .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
331 };
332
333 /* timer10 */
334 struct omap_hwmod omap2xxx_timer10_hwmod = {
335         .name           = "timer10",
336         .main_clk       = "gpt10_fck",
337         .prcm           = {
338                 .omap2 = {
339                         .module_offs = CORE_MOD,
340                         .idlest_reg_id = 1,
341                         .idlest_idle_bit = OMAP24XX_ST_GPT10_SHIFT,
342                 },
343         },
344         .class          = &omap2xxx_timer_hwmod_class,
345         .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
346 };
347
348 /* timer11 */
349 struct omap_hwmod omap2xxx_timer11_hwmod = {
350         .name           = "timer11",
351         .main_clk       = "gpt11_fck",
352         .prcm           = {
353                 .omap2 = {
354                         .module_offs = CORE_MOD,
355                         .idlest_reg_id = 1,
356                         .idlest_idle_bit = OMAP24XX_ST_GPT11_SHIFT,
357                 },
358         },
359         .class          = &omap2xxx_timer_hwmod_class,
360         .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
361 };
362
363 /* timer12 */
364 struct omap_hwmod omap2xxx_timer12_hwmod = {
365         .name           = "timer12",
366         .main_clk       = "gpt12_fck",
367         .prcm           = {
368                 .omap2 = {
369                         .module_offs = CORE_MOD,
370                         .idlest_reg_id = 1,
371                         .idlest_idle_bit = OMAP24XX_ST_GPT12_SHIFT,
372                 },
373         },
374         .class          = &omap2xxx_timer_hwmod_class,
375         .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
376 };
377
378 /* wd_timer2 */
379 struct omap_hwmod omap2xxx_wd_timer2_hwmod = {
380         .name           = "wd_timer2",
381         .class          = &omap2xxx_wd_timer_hwmod_class,
382         .main_clk       = "mpu_wdt_fck",
383         .prcm           = {
384                 .omap2 = {
385                         .module_offs = WKUP_MOD,
386                         .idlest_reg_id = 1,
387                         .idlest_idle_bit = OMAP24XX_ST_MPU_WDT_SHIFT,
388                 },
389         },
390 };
391
392 /* UART1 */
393
394 struct omap_hwmod omap2xxx_uart1_hwmod = {
395         .name           = "uart1",
396         .main_clk       = "uart1_fck",
397         .flags          = DEBUG_OMAP2UART1_FLAGS | HWMOD_SWSUP_SIDLE_ACT,
398         .prcm           = {
399                 .omap2 = {
400                         .module_offs = CORE_MOD,
401                         .idlest_reg_id = 1,
402                         .idlest_idle_bit = OMAP24XX_EN_UART1_SHIFT,
403                 },
404         },
405         .class          = &omap2_uart_class,
406 };
407
408 /* UART2 */
409
410 struct omap_hwmod omap2xxx_uart2_hwmod = {
411         .name           = "uart2",
412         .main_clk       = "uart2_fck",
413         .flags          = DEBUG_OMAP2UART2_FLAGS | HWMOD_SWSUP_SIDLE_ACT,
414         .prcm           = {
415                 .omap2 = {
416                         .module_offs = CORE_MOD,
417                         .idlest_reg_id = 1,
418                         .idlest_idle_bit = OMAP24XX_EN_UART2_SHIFT,
419                 },
420         },
421         .class          = &omap2_uart_class,
422 };
423
424 /* UART3 */
425
426 struct omap_hwmod omap2xxx_uart3_hwmod = {
427         .name           = "uart3",
428         .main_clk       = "uart3_fck",
429         .flags          = DEBUG_OMAP2UART3_FLAGS | HWMOD_SWSUP_SIDLE_ACT,
430         .prcm           = {
431                 .omap2 = {
432                         .module_offs = CORE_MOD,
433                         .idlest_reg_id = 2,
434                         .idlest_idle_bit = OMAP24XX_EN_UART3_SHIFT,
435                 },
436         },
437         .class          = &omap2_uart_class,
438 };
439
440 /* dss */
441
442 static struct omap_hwmod_opt_clk dss_opt_clks[] = {
443         /*
444          * The DSS HW needs all DSS clocks enabled during reset. The dss_core
445          * driver does not use these clocks.
446          */
447         { .role = "tv_clk", .clk = "dss_54m_fck" },
448         { .role = "sys_clk", .clk = "dss2_fck" },
449 };
450
451 struct omap_hwmod omap2xxx_dss_core_hwmod = {
452         .name           = "dss_core",
453         .class          = &omap2_dss_hwmod_class,
454         .main_clk       = "dss1_fck", /* instead of dss_fck */
455         .prcm           = {
456                 .omap2 = {
457                         .module_offs = CORE_MOD,
458                         .idlest_reg_id = 1,
459                 },
460         },
461         .opt_clks       = dss_opt_clks,
462         .opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
463         .flags          = HWMOD_NO_IDLEST | HWMOD_CONTROL_OPT_CLKS_IN_RESET,
464 };
465
466 struct omap_hwmod omap2xxx_dss_dispc_hwmod = {
467         .name           = "dss_dispc",
468         .class          = &omap2_dispc_hwmod_class,
469         .main_clk       = "dss1_fck",
470         .prcm           = {
471                 .omap2 = {
472                         .module_offs = CORE_MOD,
473                         .idlest_reg_id = 1,
474                 },
475         },
476         .flags          = HWMOD_NO_IDLEST,
477         .dev_attr       = &omap2_3_dss_dispc_dev_attr,
478 };
479
480 static struct omap_hwmod_opt_clk dss_rfbi_opt_clks[] = {
481         { .role = "ick", .clk = "dss_ick" },
482 };
483
484 struct omap_hwmod omap2xxx_dss_rfbi_hwmod = {
485         .name           = "dss_rfbi",
486         .class          = &omap2_rfbi_hwmod_class,
487         .main_clk       = "dss1_fck",
488         .prcm           = {
489                 .omap2 = {
490                         .module_offs = CORE_MOD,
491                 },
492         },
493         .opt_clks       = dss_rfbi_opt_clks,
494         .opt_clks_cnt   = ARRAY_SIZE(dss_rfbi_opt_clks),
495         .flags          = HWMOD_NO_IDLEST,
496 };
497
498 struct omap_hwmod omap2xxx_dss_venc_hwmod = {
499         .name           = "dss_venc",
500         .class          = &omap2_venc_hwmod_class,
501         .main_clk       = "dss_54m_fck",
502         .prcm           = {
503                 .omap2 = {
504                         .module_offs = CORE_MOD,
505                 },
506         },
507         .flags          = HWMOD_NO_IDLEST,
508 };
509
510 /* gpio1 */
511 struct omap_hwmod omap2xxx_gpio1_hwmod = {
512         .name           = "gpio1",
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 /* gpio2 */
526 struct omap_hwmod omap2xxx_gpio2_hwmod = {
527         .name           = "gpio2",
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 /* gpio3 */
541 struct omap_hwmod omap2xxx_gpio3_hwmod = {
542         .name           = "gpio3",
543         .flags          = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
544         .main_clk       = "gpios_fck",
545         .prcm           = {
546                 .omap2 = {
547                         .module_offs = WKUP_MOD,
548                         .idlest_reg_id = 1,
549                         .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
550                 },
551         },
552         .class          = &omap2xxx_gpio_hwmod_class,
553 };
554
555 /* gpio4 */
556 struct omap_hwmod omap2xxx_gpio4_hwmod = {
557         .name           = "gpio4",
558         .flags          = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
559         .main_clk       = "gpios_fck",
560         .prcm           = {
561                 .omap2 = {
562                         .module_offs = WKUP_MOD,
563                         .idlest_reg_id = 1,
564                         .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
565                 },
566         },
567         .class          = &omap2xxx_gpio_hwmod_class,
568 };
569
570 /* mcspi1 */
571 struct omap_hwmod omap2xxx_mcspi1_hwmod = {
572         .name           = "mcspi1",
573         .main_clk       = "mcspi1_fck",
574         .prcm           = {
575                 .omap2 = {
576                         .module_offs = CORE_MOD,
577                         .idlest_reg_id = 1,
578                         .idlest_idle_bit = OMAP24XX_ST_MCSPI1_SHIFT,
579                 },
580         },
581         .class          = &omap2xxx_mcspi_class,
582 };
583
584 /* mcspi2 */
585 struct omap_hwmod omap2xxx_mcspi2_hwmod = {
586         .name           = "mcspi2",
587         .main_clk       = "mcspi2_fck",
588         .prcm           = {
589                 .omap2 = {
590                         .module_offs = CORE_MOD,
591                         .idlest_reg_id = 1,
592                         .idlest_idle_bit = OMAP24XX_ST_MCSPI2_SHIFT,
593                 },
594         },
595         .class          = &omap2xxx_mcspi_class,
596 };
597
598 static struct omap_hwmod_class omap2xxx_counter_hwmod_class = {
599         .name   = "counter",
600 };
601
602 struct omap_hwmod omap2xxx_counter_32k_hwmod = {
603         .name           = "counter_32k",
604         .main_clk       = "func_32k_ck",
605         .prcm           = {
606                 .omap2  = {
607                         .module_offs = WKUP_MOD,
608                         .idlest_reg_id = 1,
609                         .idlest_idle_bit = OMAP24XX_ST_32KSYNC_SHIFT,
610                 },
611         },
612         .class          = &omap2xxx_counter_hwmod_class,
613 };
614
615 /* gpmc */
616 struct omap_hwmod omap2xxx_gpmc_hwmod = {
617         .name           = "gpmc",
618         .class          = &omap2xxx_gpmc_hwmod_class,
619         .main_clk       = "gpmc_fck",
620         /* Skip reset for CONFIG_OMAP_GPMC_DEBUG for bootloader timings */
621         .flags          = HWMOD_NO_IDLEST | DEBUG_OMAP_GPMC_HWMOD_FLAGS,
622         .prcm           = {
623                 .omap2  = {
624                         .module_offs = CORE_MOD,
625                 },
626         },
627 };
628
629 /* RNG */
630
631 static struct omap_hwmod_class_sysconfig omap2_rng_sysc = {
632         .rev_offs       = 0x3c,
633         .sysc_offs      = 0x40,
634         .syss_offs      = 0x44,
635         .sysc_flags     = (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
636                            SYSS_HAS_RESET_STATUS),
637         .sysc_fields    = &omap_hwmod_sysc_type1,
638 };
639
640 static struct omap_hwmod_class omap2_rng_hwmod_class = {
641         .name           = "rng",
642         .sysc           = &omap2_rng_sysc,
643 };
644
645 struct omap_hwmod omap2xxx_rng_hwmod = {
646         .name           = "rng",
647         .main_clk       = "l4_ck",
648         .prcm           = {
649                 .omap2 = {
650                         .module_offs = CORE_MOD,
651                         .idlest_reg_id = 4,
652                         .idlest_idle_bit = OMAP24XX_ST_RNG_SHIFT,
653                 },
654         },
655         /*
656          * XXX The first read from the SYSSTATUS register of the RNG
657          * after the SYSCONFIG SOFTRESET bit is set triggers an
658          * imprecise external abort.  It's unclear why this happens.
659          * Until this is analyzed, skip the IP block reset.
660          */
661         .flags          = HWMOD_INIT_NO_RESET,
662         .class          = &omap2_rng_hwmod_class,
663 };
664
665 /* SHAM */
666
667 static struct omap_hwmod_class_sysconfig omap2_sham_sysc = {
668         .rev_offs       = 0x5c,
669         .sysc_offs      = 0x60,
670         .syss_offs      = 0x64,
671         .sysc_flags     = (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
672                            SYSS_HAS_RESET_STATUS),
673         .sysc_fields    = &omap_hwmod_sysc_type1,
674 };
675
676 static struct omap_hwmod_class omap2xxx_sham_class = {
677         .name   = "sham",
678         .sysc   = &omap2_sham_sysc,
679 };
680
681 struct omap_hwmod omap2xxx_sham_hwmod = {
682         .name           = "sham",
683         .main_clk       = "l4_ck",
684         .prcm           = {
685                 .omap2 = {
686                         .module_offs = CORE_MOD,
687                         .idlest_reg_id = 4,
688                         .idlest_idle_bit = OMAP24XX_ST_SHA_SHIFT,
689                 },
690         },
691         .class          = &omap2xxx_sham_class,
692 };
693
694 /* AES */
695
696 static struct omap_hwmod_class_sysconfig omap2_aes_sysc = {
697         .rev_offs       = 0x44,
698         .sysc_offs      = 0x48,
699         .syss_offs      = 0x4c,
700         .sysc_flags     = (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
701                            SYSS_HAS_RESET_STATUS),
702         .sysc_fields    = &omap_hwmod_sysc_type1,
703 };
704
705 static struct omap_hwmod_class omap2xxx_aes_class = {
706         .name   = "aes",
707         .sysc   = &omap2_aes_sysc,
708 };
709
710 struct omap_hwmod omap2xxx_aes_hwmod = {
711         .name           = "aes",
712         .main_clk       = "l4_ck",
713         .prcm           = {
714                 .omap2 = {
715                         .module_offs = CORE_MOD,
716                         .idlest_reg_id = 4,
717                         .idlest_idle_bit = OMAP24XX_ST_AES_SHIFT,
718                 },
719         },
720         .class          = &omap2xxx_aes_class,
721 };