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