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