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