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