Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
omap_hwmod_3xxx_data.c
Go to the documentation of this file.
1 /*
2  * omap_hwmod_3xxx_data.c - hardware modules present on the OMAP3xxx chips
3  *
4  * Copyright (C) 2009-2011 Nokia Corporation
5  * Copyright (C) 2012 Texas Instruments, Inc.
6  * Paul Walmsley
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License version 2 as
10  * published by the Free Software Foundation.
11  *
12  * The data in this file should be completely autogeneratable from
13  * the TI hardware database or other technical documentation.
14  *
15  * XXX these should be marked initdata for multi-OMAP kernels
16  */
19 
20 #include <plat/omap_hwmod.h>
21 #include <plat/dma.h>
22 #include <plat/serial.h>
23 #include "l3_3xxx.h"
24 #include "l4_3xxx.h"
25 #include <plat/i2c.h>
26 #include <plat/mmc.h>
29 #include <plat/dmtimer.h>
30 #include <plat/iommu.h>
31 
32 #include "am35xx.h"
33 
34 #include "soc.h"
35 #include "omap_hwmod_common_data.h"
36 #include "prm-regbits-34xx.h"
37 #include "cm-regbits-34xx.h"
38 #include "wd_timer.h"
39 
40 /*
41  * OMAP3xxx hardware module integration data
42  *
43  * All of the data in this section should be autogeneratable from the
44  * TI hardware database or other technical documentation. Data that
45  * is driver-specific or driver-kernel integration-specific belongs
46  * elsewhere.
47  */
48 
49 /*
50  * IP blocks
51  */
52 
53 /* L3 */
54 static struct omap_hwmod_irq_info omap3xxx_l3_main_irqs[] = {
55  { .irq = 9 + OMAP_INTC_START, },
56  { .irq = 10 + OMAP_INTC_START, },
57  { .irq = -1 },
58 };
59 
60 static struct omap_hwmod omap3xxx_l3_main_hwmod = {
61  .name = "l3_main",
62  .class = &l3_hwmod_class,
63  .mpu_irqs = omap3xxx_l3_main_irqs,
64  .flags = HWMOD_NO_IDLEST,
65 };
66 
67 /* L4 CORE */
68 static struct omap_hwmod omap3xxx_l4_core_hwmod = {
69  .name = "l4_core",
70  .class = &l4_hwmod_class,
71  .flags = HWMOD_NO_IDLEST,
72 };
73 
74 /* L4 PER */
75 static struct omap_hwmod omap3xxx_l4_per_hwmod = {
76  .name = "l4_per",
77  .class = &l4_hwmod_class,
78  .flags = HWMOD_NO_IDLEST,
79 };
80 
81 /* L4 WKUP */
82 static struct omap_hwmod omap3xxx_l4_wkup_hwmod = {
83  .name = "l4_wkup",
84  .class = &l4_hwmod_class,
85  .flags = HWMOD_NO_IDLEST,
86 };
87 
88 /* L4 SEC */
89 static struct omap_hwmod omap3xxx_l4_sec_hwmod = {
90  .name = "l4_sec",
91  .class = &l4_hwmod_class,
92  .flags = HWMOD_NO_IDLEST,
93 };
94 
95 /* MPU */
96 static struct omap_hwmod_irq_info omap3xxx_mpu_irqs[] = {
97  { .name = "pmu", .irq = 3 + OMAP_INTC_START },
98  { .irq = -1 }
99 };
100 
101 static struct omap_hwmod omap3xxx_mpu_hwmod = {
102  .name = "mpu",
103  .mpu_irqs = omap3xxx_mpu_irqs,
104  .class = &mpu_hwmod_class,
105  .main_clk = "arm_fck",
106 };
107 
108 /* IVA2 (IVA2) */
109 static struct omap_hwmod_rst_info omap3xxx_iva_resets[] = {
110  { .name = "logic", .rst_shift = 0, .st_shift = 8 },
111  { .name = "seq0", .rst_shift = 1, .st_shift = 9 },
112  { .name = "seq1", .rst_shift = 2, .st_shift = 10 },
113 };
114 
115 static struct omap_hwmod omap3xxx_iva_hwmod = {
116  .name = "iva",
117  .class = &iva_hwmod_class,
118  .clkdm_name = "iva2_clkdm",
119  .rst_lines = omap3xxx_iva_resets,
120  .rst_lines_cnt = ARRAY_SIZE(omap3xxx_iva_resets),
121  .main_clk = "iva2_ck",
122  .prcm = {
123  .omap2 = {
124  .module_offs = OMAP3430_IVA2_MOD,
125  .prcm_reg_id = 1,
127  .idlest_reg_id = 1,
128  .idlest_idle_bit = OMAP3430_ST_IVA2_SHIFT,
129  }
130  },
131 };
132 
133 /*
134  * 'debugss' class
135  * debug and emulation sub system
136  */
137 
138 static struct omap_hwmod_class omap3xxx_debugss_hwmod_class = {
139  .name = "debugss",
140 };
141 
142 /* debugss */
143 static struct omap_hwmod omap3xxx_debugss_hwmod = {
144  .name = "debugss",
145  .class = &omap3xxx_debugss_hwmod_class,
146  .clkdm_name = "emu_clkdm",
147  .main_clk = "emu_src_ck",
148  .flags = HWMOD_NO_IDLEST,
149 };
150 
151 /* timer class */
152 static struct omap_hwmod_class_sysconfig omap3xxx_timer_1ms_sysc = {
153  .rev_offs = 0x0000,
154  .sysc_offs = 0x0010,
155  .syss_offs = 0x0014,
156  .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_CLOCKACTIVITY |
160  .sysc_fields = &omap_hwmod_sysc_type1,
161 };
162 
163 static struct omap_hwmod_class omap3xxx_timer_1ms_hwmod_class = {
164  .name = "timer",
165  .sysc = &omap3xxx_timer_1ms_sysc,
166 };
167 
168 static struct omap_hwmod_class_sysconfig omap3xxx_timer_sysc = {
169  .rev_offs = 0x0000,
170  .sysc_offs = 0x0010,
171  .syss_offs = 0x0014,
172  .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_ENAWAKEUP |
175  .sysc_fields = &omap_hwmod_sysc_type1,
176 };
177 
178 static struct omap_hwmod_class omap3xxx_timer_hwmod_class = {
179  .name = "timer",
180  .sysc = &omap3xxx_timer_sysc,
181 };
182 
183 /* secure timers dev attribute */
184 static struct omap_timer_capability_dev_attr capability_secure_dev_attr = {
185  .timer_capability = OMAP_TIMER_ALWON | OMAP_TIMER_SECURE,
186 };
187 
188 /* always-on timers dev attribute */
189 static struct omap_timer_capability_dev_attr capability_alwon_dev_attr = {
190  .timer_capability = OMAP_TIMER_ALWON,
191 };
192 
193 /* pwm timers dev attribute */
194 static struct omap_timer_capability_dev_attr capability_pwm_dev_attr = {
195  .timer_capability = OMAP_TIMER_HAS_PWM,
196 };
197 
198 /* timers with DSP interrupt dev attribute */
199 static struct omap_timer_capability_dev_attr capability_dsp_dev_attr = {
200  .timer_capability = OMAP_TIMER_HAS_DSP_IRQ,
201 };
202 
203 /* pwm timers with DSP interrupt dev attribute */
204 static struct omap_timer_capability_dev_attr capability_dsp_pwm_dev_attr = {
205  .timer_capability = OMAP_TIMER_HAS_DSP_IRQ | OMAP_TIMER_HAS_PWM,
206 };
207 
208 /* timer1 */
209 static struct omap_hwmod omap3xxx_timer1_hwmod = {
210  .name = "timer1",
211  .mpu_irqs = omap2_timer1_mpu_irqs,
212  .main_clk = "gpt1_fck",
213  .prcm = {
214  .omap2 = {
215  .prcm_reg_id = 1,
216  .module_bit = OMAP3430_EN_GPT1_SHIFT,
217  .module_offs = WKUP_MOD,
218  .idlest_reg_id = 1,
219  .idlest_idle_bit = OMAP3430_ST_GPT1_SHIFT,
220  },
221  },
222  .dev_attr = &capability_alwon_dev_attr,
223  .class = &omap3xxx_timer_1ms_hwmod_class,
224 };
225 
226 /* timer2 */
227 static struct omap_hwmod omap3xxx_timer2_hwmod = {
228  .name = "timer2",
229  .mpu_irqs = omap2_timer2_mpu_irqs,
230  .main_clk = "gpt2_fck",
231  .prcm = {
232  .omap2 = {
233  .prcm_reg_id = 1,
234  .module_bit = OMAP3430_EN_GPT2_SHIFT,
235  .module_offs = OMAP3430_PER_MOD,
236  .idlest_reg_id = 1,
237  .idlest_idle_bit = OMAP3430_ST_GPT2_SHIFT,
238  },
239  },
240  .class = &omap3xxx_timer_1ms_hwmod_class,
241 };
242 
243 /* timer3 */
244 static struct omap_hwmod omap3xxx_timer3_hwmod = {
245  .name = "timer3",
246  .mpu_irqs = omap2_timer3_mpu_irqs,
247  .main_clk = "gpt3_fck",
248  .prcm = {
249  .omap2 = {
250  .prcm_reg_id = 1,
251  .module_bit = OMAP3430_EN_GPT3_SHIFT,
252  .module_offs = OMAP3430_PER_MOD,
253  .idlest_reg_id = 1,
254  .idlest_idle_bit = OMAP3430_ST_GPT3_SHIFT,
255  },
256  },
257  .class = &omap3xxx_timer_hwmod_class,
258 };
259 
260 /* timer4 */
261 static struct omap_hwmod omap3xxx_timer4_hwmod = {
262  .name = "timer4",
263  .mpu_irqs = omap2_timer4_mpu_irqs,
264  .main_clk = "gpt4_fck",
265  .prcm = {
266  .omap2 = {
267  .prcm_reg_id = 1,
268  .module_bit = OMAP3430_EN_GPT4_SHIFT,
269  .module_offs = OMAP3430_PER_MOD,
270  .idlest_reg_id = 1,
271  .idlest_idle_bit = OMAP3430_ST_GPT4_SHIFT,
272  },
273  },
274  .class = &omap3xxx_timer_hwmod_class,
275 };
276 
277 /* timer5 */
278 static struct omap_hwmod omap3xxx_timer5_hwmod = {
279  .name = "timer5",
280  .mpu_irqs = omap2_timer5_mpu_irqs,
281  .main_clk = "gpt5_fck",
282  .prcm = {
283  .omap2 = {
284  .prcm_reg_id = 1,
285  .module_bit = OMAP3430_EN_GPT5_SHIFT,
286  .module_offs = OMAP3430_PER_MOD,
287  .idlest_reg_id = 1,
288  .idlest_idle_bit = OMAP3430_ST_GPT5_SHIFT,
289  },
290  },
291  .dev_attr = &capability_dsp_dev_attr,
292  .class = &omap3xxx_timer_hwmod_class,
293 };
294 
295 /* timer6 */
296 static struct omap_hwmod omap3xxx_timer6_hwmod = {
297  .name = "timer6",
298  .mpu_irqs = omap2_timer6_mpu_irqs,
299  .main_clk = "gpt6_fck",
300  .prcm = {
301  .omap2 = {
302  .prcm_reg_id = 1,
303  .module_bit = OMAP3430_EN_GPT6_SHIFT,
304  .module_offs = OMAP3430_PER_MOD,
305  .idlest_reg_id = 1,
306  .idlest_idle_bit = OMAP3430_ST_GPT6_SHIFT,
307  },
308  },
309  .dev_attr = &capability_dsp_dev_attr,
310  .class = &omap3xxx_timer_hwmod_class,
311 };
312 
313 /* timer7 */
314 static struct omap_hwmod omap3xxx_timer7_hwmod = {
315  .name = "timer7",
316  .mpu_irqs = omap2_timer7_mpu_irqs,
317  .main_clk = "gpt7_fck",
318  .prcm = {
319  .omap2 = {
320  .prcm_reg_id = 1,
321  .module_bit = OMAP3430_EN_GPT7_SHIFT,
322  .module_offs = OMAP3430_PER_MOD,
323  .idlest_reg_id = 1,
324  .idlest_idle_bit = OMAP3430_ST_GPT7_SHIFT,
325  },
326  },
327  .dev_attr = &capability_dsp_dev_attr,
328  .class = &omap3xxx_timer_hwmod_class,
329 };
330 
331 /* timer8 */
332 static struct omap_hwmod omap3xxx_timer8_hwmod = {
333  .name = "timer8",
334  .mpu_irqs = omap2_timer8_mpu_irqs,
335  .main_clk = "gpt8_fck",
336  .prcm = {
337  .omap2 = {
338  .prcm_reg_id = 1,
339  .module_bit = OMAP3430_EN_GPT8_SHIFT,
340  .module_offs = OMAP3430_PER_MOD,
341  .idlest_reg_id = 1,
342  .idlest_idle_bit = OMAP3430_ST_GPT8_SHIFT,
343  },
344  },
345  .dev_attr = &capability_dsp_pwm_dev_attr,
346  .class = &omap3xxx_timer_hwmod_class,
347 };
348 
349 /* timer9 */
350 static struct omap_hwmod omap3xxx_timer9_hwmod = {
351  .name = "timer9",
352  .mpu_irqs = omap2_timer9_mpu_irqs,
353  .main_clk = "gpt9_fck",
354  .prcm = {
355  .omap2 = {
356  .prcm_reg_id = 1,
357  .module_bit = OMAP3430_EN_GPT9_SHIFT,
358  .module_offs = OMAP3430_PER_MOD,
359  .idlest_reg_id = 1,
360  .idlest_idle_bit = OMAP3430_ST_GPT9_SHIFT,
361  },
362  },
363  .dev_attr = &capability_pwm_dev_attr,
364  .class = &omap3xxx_timer_hwmod_class,
365 };
366 
367 /* timer10 */
368 static struct omap_hwmod omap3xxx_timer10_hwmod = {
369  .name = "timer10",
370  .mpu_irqs = omap2_timer10_mpu_irqs,
371  .main_clk = "gpt10_fck",
372  .prcm = {
373  .omap2 = {
374  .prcm_reg_id = 1,
375  .module_bit = OMAP3430_EN_GPT10_SHIFT,
376  .module_offs = CORE_MOD,
377  .idlest_reg_id = 1,
378  .idlest_idle_bit = OMAP3430_ST_GPT10_SHIFT,
379  },
380  },
381  .dev_attr = &capability_pwm_dev_attr,
382  .class = &omap3xxx_timer_1ms_hwmod_class,
383 };
384 
385 /* timer11 */
386 static struct omap_hwmod omap3xxx_timer11_hwmod = {
387  .name = "timer11",
388  .mpu_irqs = omap2_timer11_mpu_irqs,
389  .main_clk = "gpt11_fck",
390  .prcm = {
391  .omap2 = {
392  .prcm_reg_id = 1,
393  .module_bit = OMAP3430_EN_GPT11_SHIFT,
394  .module_offs = CORE_MOD,
395  .idlest_reg_id = 1,
396  .idlest_idle_bit = OMAP3430_ST_GPT11_SHIFT,
397  },
398  },
399  .dev_attr = &capability_pwm_dev_attr,
400  .class = &omap3xxx_timer_hwmod_class,
401 };
402 
403 /* timer12 */
404 static struct omap_hwmod_irq_info omap3xxx_timer12_mpu_irqs[] = {
405  { .irq = 95 + OMAP_INTC_START, },
406  { .irq = -1 },
407 };
408 
409 static struct omap_hwmod omap3xxx_timer12_hwmod = {
410  .name = "timer12",
411  .mpu_irqs = omap3xxx_timer12_mpu_irqs,
412  .main_clk = "gpt12_fck",
413  .prcm = {
414  .omap2 = {
415  .prcm_reg_id = 1,
416  .module_bit = OMAP3430_EN_GPT12_SHIFT,
417  .module_offs = WKUP_MOD,
418  .idlest_reg_id = 1,
419  .idlest_idle_bit = OMAP3430_ST_GPT12_SHIFT,
420  },
421  },
422  .dev_attr = &capability_secure_dev_attr,
423  .class = &omap3xxx_timer_hwmod_class,
424 };
425 
426 /*
427  * 'wd_timer' class
428  * 32-bit watchdog upward counter that generates a pulse on the reset pin on
429  * overflow condition
430  */
431 
432 static struct omap_hwmod_class_sysconfig omap3xxx_wd_timer_sysc = {
433  .rev_offs = 0x0000,
434  .sysc_offs = 0x0010,
435  .syss_offs = 0x0014,
436  .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_EMUFREE |
441  .sysc_fields = &omap_hwmod_sysc_type1,
442 };
443 
444 /* I2C common */
445 static struct omap_hwmod_class_sysconfig i2c_sysc = {
446  .rev_offs = 0x00,
447  .sysc_offs = 0x20,
448  .syss_offs = 0x10,
449  .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
453  .clockact = CLOCKACT_TEST_ICLK,
454  .sysc_fields = &omap_hwmod_sysc_type1,
455 };
456 
457 static struct omap_hwmod_class omap3xxx_wd_timer_hwmod_class = {
458  .name = "wd_timer",
459  .sysc = &omap3xxx_wd_timer_sysc,
460  .pre_shutdown = &omap2_wd_timer_disable,
461  .reset = &omap2_wd_timer_reset,
462 };
463 
464 static struct omap_hwmod omap3xxx_wd_timer2_hwmod = {
465  .name = "wd_timer2",
466  .class = &omap3xxx_wd_timer_hwmod_class,
467  .main_clk = "wdt2_fck",
468  .prcm = {
469  .omap2 = {
470  .prcm_reg_id = 1,
471  .module_bit = OMAP3430_EN_WDT2_SHIFT,
472  .module_offs = WKUP_MOD,
473  .idlest_reg_id = 1,
474  .idlest_idle_bit = OMAP3430_ST_WDT2_SHIFT,
475  },
476  },
477  /*
478  * XXX: Use software supervised mode, HW supervised smartidle seems to
479  * block CORE power domain idle transitions. Maybe a HW bug in wdt2?
480  */
481  .flags = HWMOD_SWSUP_SIDLE,
482 };
483 
484 /* UART1 */
485 static struct omap_hwmod omap3xxx_uart1_hwmod = {
486  .name = "uart1",
487  .mpu_irqs = omap2_uart1_mpu_irqs,
488  .sdma_reqs = omap2_uart1_sdma_reqs,
489  .main_clk = "uart1_fck",
490  .prcm = {
491  .omap2 = {
492  .module_offs = CORE_MOD,
493  .prcm_reg_id = 1,
494  .module_bit = OMAP3430_EN_UART1_SHIFT,
495  .idlest_reg_id = 1,
496  .idlest_idle_bit = OMAP3430_EN_UART1_SHIFT,
497  },
498  },
499  .class = &omap2_uart_class,
500 };
501 
502 /* UART2 */
503 static struct omap_hwmod omap3xxx_uart2_hwmod = {
504  .name = "uart2",
505  .mpu_irqs = omap2_uart2_mpu_irqs,
506  .sdma_reqs = omap2_uart2_sdma_reqs,
507  .main_clk = "uart2_fck",
508  .prcm = {
509  .omap2 = {
510  .module_offs = CORE_MOD,
511  .prcm_reg_id = 1,
512  .module_bit = OMAP3430_EN_UART2_SHIFT,
513  .idlest_reg_id = 1,
514  .idlest_idle_bit = OMAP3430_EN_UART2_SHIFT,
515  },
516  },
517  .class = &omap2_uart_class,
518 };
519 
520 /* UART3 */
521 static struct omap_hwmod omap3xxx_uart3_hwmod = {
522  .name = "uart3",
523  .mpu_irqs = omap2_uart3_mpu_irqs,
524  .sdma_reqs = omap2_uart3_sdma_reqs,
525  .main_clk = "uart3_fck",
526  .prcm = {
527  .omap2 = {
528  .module_offs = OMAP3430_PER_MOD,
529  .prcm_reg_id = 1,
530  .module_bit = OMAP3430_EN_UART3_SHIFT,
531  .idlest_reg_id = 1,
532  .idlest_idle_bit = OMAP3430_EN_UART3_SHIFT,
533  },
534  },
535  .class = &omap2_uart_class,
536 };
537 
538 /* UART4 */
539 static struct omap_hwmod_irq_info uart4_mpu_irqs[] = {
540  { .irq = 80 + OMAP_INTC_START, },
541  { .irq = -1 },
542 };
543 
544 static struct omap_hwmod_dma_info uart4_sdma_reqs[] = {
545  { .name = "rx", .dma_req = OMAP36XX_DMA_UART4_RX, },
546  { .name = "tx", .dma_req = OMAP36XX_DMA_UART4_TX, },
547  { .dma_req = -1 }
548 };
549 
550 static struct omap_hwmod omap36xx_uart4_hwmod = {
551  .name = "uart4",
552  .mpu_irqs = uart4_mpu_irqs,
553  .sdma_reqs = uart4_sdma_reqs,
554  .main_clk = "uart4_fck",
555  .prcm = {
556  .omap2 = {
557  .module_offs = OMAP3430_PER_MOD,
558  .prcm_reg_id = 1,
559  .module_bit = OMAP3630_EN_UART4_SHIFT,
560  .idlest_reg_id = 1,
561  .idlest_idle_bit = OMAP3630_EN_UART4_SHIFT,
562  },
563  },
564  .class = &omap2_uart_class,
565 };
566 
567 static struct omap_hwmod_irq_info am35xx_uart4_mpu_irqs[] = {
568  { .irq = 84 + OMAP_INTC_START, },
569  { .irq = -1 },
570 };
571 
572 static struct omap_hwmod_dma_info am35xx_uart4_sdma_reqs[] = {
573  { .name = "rx", .dma_req = AM35XX_DMA_UART4_RX, },
574  { .name = "tx", .dma_req = AM35XX_DMA_UART4_TX, },
575  { .dma_req = -1 }
576 };
577 
578 /*
579  * XXX AM35xx UART4 cannot complete its softreset without uart1_fck or
580  * uart2_fck being enabled. So we add uart1_fck as an optional clock,
581  * below, and set the HWMOD_CONTROL_OPT_CLKS_IN_RESET. This really
582  * should not be needed. The functional clock structure of the AM35xx
583  * UART4 is extremely unclear and opaque; it is unclear what the role
584  * of uart1/2_fck is for the UART4. Any clarification from either
585  * empirical testing or the AM3505/3517 hardware designers would be
586  * most welcome.
587  */
588 static struct omap_hwmod_opt_clk am35xx_uart4_opt_clks[] = {
589  { .role = "softreset_uart1_fck", .clk = "uart1_fck" },
590 };
591 
592 static struct omap_hwmod am35xx_uart4_hwmod = {
593  .name = "uart4",
594  .mpu_irqs = am35xx_uart4_mpu_irqs,
595  .sdma_reqs = am35xx_uart4_sdma_reqs,
596  .main_clk = "uart4_fck",
597  .prcm = {
598  .omap2 = {
599  .module_offs = CORE_MOD,
600  .prcm_reg_id = 1,
601  .module_bit = AM35XX_EN_UART4_SHIFT,
602  .idlest_reg_id = 1,
603  .idlest_idle_bit = AM35XX_ST_UART4_SHIFT,
604  },
605  },
606  .opt_clks = am35xx_uart4_opt_clks,
607  .opt_clks_cnt = ARRAY_SIZE(am35xx_uart4_opt_clks),
609  .class = &omap2_uart_class,
610 };
611 
612 static struct omap_hwmod_class i2c_class = {
613  .name = "i2c",
614  .sysc = &i2c_sysc,
615  .rev = OMAP_I2C_IP_VERSION_1,
616  .reset = &omap_i2c_reset,
617 };
618 
619 static struct omap_hwmod_dma_info omap3xxx_dss_sdma_chs[] = {
620  { .name = "dispc", .dma_req = 5 },
621  { .name = "dsi1", .dma_req = 74 },
622  { .dma_req = -1 }
623 };
624 
625 /* dss */
626 static struct omap_hwmod_opt_clk dss_opt_clks[] = {
627  /*
628  * The DSS HW needs all DSS clocks enabled during reset. The dss_core
629  * driver does not use these clocks.
630  */
631  { .role = "sys_clk", .clk = "dss2_alwon_fck" },
632  { .role = "tv_clk", .clk = "dss_tv_fck" },
633  /* required only on OMAP3430 */
634  { .role = "tv_dac_clk", .clk = "dss_96m_fck" },
635 };
636 
637 static struct omap_hwmod omap3430es1_dss_core_hwmod = {
638  .name = "dss_core",
639  .class = &omap2_dss_hwmod_class,
640  .main_clk = "dss1_alwon_fck", /* instead of dss_fck */
641  .sdma_reqs = omap3xxx_dss_sdma_chs,
642  .prcm = {
643  .omap2 = {
644  .prcm_reg_id = 1,
645  .module_bit = OMAP3430_EN_DSS1_SHIFT,
646  .module_offs = OMAP3430_DSS_MOD,
647  .idlest_reg_id = 1,
648  .idlest_stdby_bit = OMAP3430ES1_ST_DSS_SHIFT,
649  },
650  },
651  .opt_clks = dss_opt_clks,
652  .opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
654 };
655 
656 static struct omap_hwmod omap3xxx_dss_core_hwmod = {
657  .name = "dss_core",
659  .class = &omap2_dss_hwmod_class,
660  .main_clk = "dss1_alwon_fck", /* instead of dss_fck */
661  .sdma_reqs = omap3xxx_dss_sdma_chs,
662  .prcm = {
663  .omap2 = {
664  .prcm_reg_id = 1,
665  .module_bit = OMAP3430_EN_DSS1_SHIFT,
666  .module_offs = OMAP3430_DSS_MOD,
667  .idlest_reg_id = 1,
668  .idlest_idle_bit = OMAP3430ES2_ST_DSS_IDLE_SHIFT,
669  .idlest_stdby_bit = OMAP3430ES2_ST_DSS_STDBY_SHIFT,
670  },
671  },
672  .opt_clks = dss_opt_clks,
673  .opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
674 };
675 
676 /*
677  * 'dispc' class
678  * display controller
679  */
680 
681 static struct omap_hwmod_class_sysconfig omap3_dispc_sysc = {
682  .rev_offs = 0x0000,
683  .sysc_offs = 0x0010,
684  .syss_offs = 0x0014,
685  .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE |
690  .sysc_fields = &omap_hwmod_sysc_type1,
691 };
692 
693 static struct omap_hwmod_class omap3_dispc_hwmod_class = {
694  .name = "dispc",
695  .sysc = &omap3_dispc_sysc,
696 };
697 
698 static struct omap_hwmod omap3xxx_dss_dispc_hwmod = {
699  .name = "dss_dispc",
700  .class = &omap3_dispc_hwmod_class,
701  .mpu_irqs = omap2_dispc_irqs,
702  .main_clk = "dss1_alwon_fck",
703  .prcm = {
704  .omap2 = {
705  .prcm_reg_id = 1,
706  .module_bit = OMAP3430_EN_DSS1_SHIFT,
707  .module_offs = OMAP3430_DSS_MOD,
708  },
709  },
710  .flags = HWMOD_NO_IDLEST,
711  .dev_attr = &omap2_3_dss_dispc_dev_attr
712 };
713 
714 /*
715  * 'dsi' class
716  * display serial interface controller
717  */
718 
719 static struct omap_hwmod_class omap3xxx_dsi_hwmod_class = {
720  .name = "dsi",
721 };
722 
723 static struct omap_hwmod_irq_info omap3xxx_dsi1_irqs[] = {
724  { .irq = 25 + OMAP_INTC_START, },
725  { .irq = -1 },
726 };
727 
728 /* dss_dsi1 */
729 static struct omap_hwmod_opt_clk dss_dsi1_opt_clks[] = {
730  { .role = "sys_clk", .clk = "dss2_alwon_fck" },
731 };
732 
733 static struct omap_hwmod omap3xxx_dss_dsi1_hwmod = {
734  .name = "dss_dsi1",
735  .class = &omap3xxx_dsi_hwmod_class,
736  .mpu_irqs = omap3xxx_dsi1_irqs,
737  .main_clk = "dss1_alwon_fck",
738  .prcm = {
739  .omap2 = {
740  .prcm_reg_id = 1,
741  .module_bit = OMAP3430_EN_DSS1_SHIFT,
742  .module_offs = OMAP3430_DSS_MOD,
743  },
744  },
745  .opt_clks = dss_dsi1_opt_clks,
746  .opt_clks_cnt = ARRAY_SIZE(dss_dsi1_opt_clks),
747  .flags = HWMOD_NO_IDLEST,
748 };
749 
750 static struct omap_hwmod_opt_clk dss_rfbi_opt_clks[] = {
751  { .role = "ick", .clk = "dss_ick" },
752 };
753 
754 static struct omap_hwmod omap3xxx_dss_rfbi_hwmod = {
755  .name = "dss_rfbi",
756  .class = &omap2_rfbi_hwmod_class,
757  .main_clk = "dss1_alwon_fck",
758  .prcm = {
759  .omap2 = {
760  .prcm_reg_id = 1,
761  .module_bit = OMAP3430_EN_DSS1_SHIFT,
762  .module_offs = OMAP3430_DSS_MOD,
763  },
764  },
765  .opt_clks = dss_rfbi_opt_clks,
766  .opt_clks_cnt = ARRAY_SIZE(dss_rfbi_opt_clks),
767  .flags = HWMOD_NO_IDLEST,
768 };
769 
770 static struct omap_hwmod_opt_clk dss_venc_opt_clks[] = {
771  /* required only on OMAP3430 */
772  { .role = "tv_dac_clk", .clk = "dss_96m_fck" },
773 };
774 
775 static struct omap_hwmod omap3xxx_dss_venc_hwmod = {
776  .name = "dss_venc",
777  .class = &omap2_venc_hwmod_class,
778  .main_clk = "dss_tv_fck",
779  .prcm = {
780  .omap2 = {
781  .prcm_reg_id = 1,
782  .module_bit = OMAP3430_EN_DSS1_SHIFT,
783  .module_offs = OMAP3430_DSS_MOD,
784  },
785  },
786  .opt_clks = dss_venc_opt_clks,
787  .opt_clks_cnt = ARRAY_SIZE(dss_venc_opt_clks),
788  .flags = HWMOD_NO_IDLEST,
789 };
790 
791 /* I2C1 */
792 static struct omap_i2c_dev_attr i2c1_dev_attr = {
793  .fifo_depth = 8, /* bytes */
797 };
798 
799 static struct omap_hwmod omap3xxx_i2c1_hwmod = {
800  .name = "i2c1",
802  .mpu_irqs = omap2_i2c1_mpu_irqs,
803  .sdma_reqs = omap2_i2c1_sdma_reqs,
804  .main_clk = "i2c1_fck",
805  .prcm = {
806  .omap2 = {
807  .module_offs = CORE_MOD,
808  .prcm_reg_id = 1,
809  .module_bit = OMAP3430_EN_I2C1_SHIFT,
810  .idlest_reg_id = 1,
811  .idlest_idle_bit = OMAP3430_ST_I2C1_SHIFT,
812  },
813  },
814  .class = &i2c_class,
815  .dev_attr = &i2c1_dev_attr,
816 };
817 
818 /* I2C2 */
819 static struct omap_i2c_dev_attr i2c2_dev_attr = {
820  .fifo_depth = 8, /* bytes */
824 };
825 
826 static struct omap_hwmod omap3xxx_i2c2_hwmod = {
827  .name = "i2c2",
829  .mpu_irqs = omap2_i2c2_mpu_irqs,
830  .sdma_reqs = omap2_i2c2_sdma_reqs,
831  .main_clk = "i2c2_fck",
832  .prcm = {
833  .omap2 = {
834  .module_offs = CORE_MOD,
835  .prcm_reg_id = 1,
836  .module_bit = OMAP3430_EN_I2C2_SHIFT,
837  .idlest_reg_id = 1,
838  .idlest_idle_bit = OMAP3430_ST_I2C2_SHIFT,
839  },
840  },
841  .class = &i2c_class,
842  .dev_attr = &i2c2_dev_attr,
843 };
844 
845 /* I2C3 */
846 static struct omap_i2c_dev_attr i2c3_dev_attr = {
847  .fifo_depth = 64, /* bytes */
851 };
852 
853 static struct omap_hwmod_irq_info i2c3_mpu_irqs[] = {
854  { .irq = 61 + OMAP_INTC_START, },
855  { .irq = -1 },
856 };
857 
858 static struct omap_hwmod_dma_info i2c3_sdma_reqs[] = {
859  { .name = "tx", .dma_req = OMAP34XX_DMA_I2C3_TX },
860  { .name = "rx", .dma_req = OMAP34XX_DMA_I2C3_RX },
861  { .dma_req = -1 }
862 };
863 
864 static struct omap_hwmod omap3xxx_i2c3_hwmod = {
865  .name = "i2c3",
867  .mpu_irqs = i2c3_mpu_irqs,
868  .sdma_reqs = i2c3_sdma_reqs,
869  .main_clk = "i2c3_fck",
870  .prcm = {
871  .omap2 = {
872  .module_offs = CORE_MOD,
873  .prcm_reg_id = 1,
874  .module_bit = OMAP3430_EN_I2C3_SHIFT,
875  .idlest_reg_id = 1,
876  .idlest_idle_bit = OMAP3430_ST_I2C3_SHIFT,
877  },
878  },
879  .class = &i2c_class,
880  .dev_attr = &i2c3_dev_attr,
881 };
882 
883 /*
884  * 'gpio' class
885  * general purpose io module
886  */
887 
888 static struct omap_hwmod_class_sysconfig omap3xxx_gpio_sysc = {
889  .rev_offs = 0x0000,
890  .sysc_offs = 0x0010,
891  .syss_offs = 0x0014,
892  .sysc_flags = (SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
896  .sysc_fields = &omap_hwmod_sysc_type1,
897 };
898 
899 static struct omap_hwmod_class omap3xxx_gpio_hwmod_class = {
900  .name = "gpio",
901  .sysc = &omap3xxx_gpio_sysc,
902  .rev = 1,
903 };
904 
905 /* gpio_dev_attr */
906 static struct omap_gpio_dev_attr gpio_dev_attr = {
907  .bank_width = 32,
908  .dbck_flag = true,
909 };
910 
911 /* gpio1 */
912 static struct omap_hwmod_opt_clk gpio1_opt_clks[] = {
913  { .role = "dbclk", .clk = "gpio1_dbck", },
914 };
915 
916 static struct omap_hwmod omap3xxx_gpio1_hwmod = {
917  .name = "gpio1",
919  .mpu_irqs = omap2_gpio1_irqs,
920  .main_clk = "gpio1_ick",
921  .opt_clks = gpio1_opt_clks,
922  .opt_clks_cnt = ARRAY_SIZE(gpio1_opt_clks),
923  .prcm = {
924  .omap2 = {
925  .prcm_reg_id = 1,
926  .module_bit = OMAP3430_EN_GPIO1_SHIFT,
927  .module_offs = WKUP_MOD,
928  .idlest_reg_id = 1,
929  .idlest_idle_bit = OMAP3430_ST_GPIO1_SHIFT,
930  },
931  },
932  .class = &omap3xxx_gpio_hwmod_class,
933  .dev_attr = &gpio_dev_attr,
934 };
935 
936 /* gpio2 */
937 static struct omap_hwmod_opt_clk gpio2_opt_clks[] = {
938  { .role = "dbclk", .clk = "gpio2_dbck", },
939 };
940 
941 static struct omap_hwmod omap3xxx_gpio2_hwmod = {
942  .name = "gpio2",
944  .mpu_irqs = omap2_gpio2_irqs,
945  .main_clk = "gpio2_ick",
946  .opt_clks = gpio2_opt_clks,
947  .opt_clks_cnt = ARRAY_SIZE(gpio2_opt_clks),
948  .prcm = {
949  .omap2 = {
950  .prcm_reg_id = 1,
951  .module_bit = OMAP3430_EN_GPIO2_SHIFT,
952  .module_offs = OMAP3430_PER_MOD,
953  .idlest_reg_id = 1,
954  .idlest_idle_bit = OMAP3430_ST_GPIO2_SHIFT,
955  },
956  },
957  .class = &omap3xxx_gpio_hwmod_class,
958  .dev_attr = &gpio_dev_attr,
959 };
960 
961 /* gpio3 */
962 static struct omap_hwmod_opt_clk gpio3_opt_clks[] = {
963  { .role = "dbclk", .clk = "gpio3_dbck", },
964 };
965 
966 static struct omap_hwmod omap3xxx_gpio3_hwmod = {
967  .name = "gpio3",
969  .mpu_irqs = omap2_gpio3_irqs,
970  .main_clk = "gpio3_ick",
971  .opt_clks = gpio3_opt_clks,
972  .opt_clks_cnt = ARRAY_SIZE(gpio3_opt_clks),
973  .prcm = {
974  .omap2 = {
975  .prcm_reg_id = 1,
976  .module_bit = OMAP3430_EN_GPIO3_SHIFT,
977  .module_offs = OMAP3430_PER_MOD,
978  .idlest_reg_id = 1,
979  .idlest_idle_bit = OMAP3430_ST_GPIO3_SHIFT,
980  },
981  },
982  .class = &omap3xxx_gpio_hwmod_class,
983  .dev_attr = &gpio_dev_attr,
984 };
985 
986 /* gpio4 */
987 static struct omap_hwmod_opt_clk gpio4_opt_clks[] = {
988  { .role = "dbclk", .clk = "gpio4_dbck", },
989 };
990 
991 static struct omap_hwmod omap3xxx_gpio4_hwmod = {
992  .name = "gpio4",
994  .mpu_irqs = omap2_gpio4_irqs,
995  .main_clk = "gpio4_ick",
996  .opt_clks = gpio4_opt_clks,
997  .opt_clks_cnt = ARRAY_SIZE(gpio4_opt_clks),
998  .prcm = {
999  .omap2 = {
1000  .prcm_reg_id = 1,
1001  .module_bit = OMAP3430_EN_GPIO4_SHIFT,
1002  .module_offs = OMAP3430_PER_MOD,
1003  .idlest_reg_id = 1,
1004  .idlest_idle_bit = OMAP3430_ST_GPIO4_SHIFT,
1005  },
1006  },
1007  .class = &omap3xxx_gpio_hwmod_class,
1008  .dev_attr = &gpio_dev_attr,
1009 };
1010 
1011 /* gpio5 */
1012 static struct omap_hwmod_irq_info omap3xxx_gpio5_irqs[] = {
1013  { .irq = 33 + OMAP_INTC_START, }, /* INT_34XX_GPIO_BANK5 */
1014  { .irq = -1 },
1015 };
1016 
1017 static struct omap_hwmod_opt_clk gpio5_opt_clks[] = {
1018  { .role = "dbclk", .clk = "gpio5_dbck", },
1019 };
1020 
1021 static struct omap_hwmod omap3xxx_gpio5_hwmod = {
1022  .name = "gpio5",
1024  .mpu_irqs = omap3xxx_gpio5_irqs,
1025  .main_clk = "gpio5_ick",
1026  .opt_clks = gpio5_opt_clks,
1027  .opt_clks_cnt = ARRAY_SIZE(gpio5_opt_clks),
1028  .prcm = {
1029  .omap2 = {
1030  .prcm_reg_id = 1,
1031  .module_bit = OMAP3430_EN_GPIO5_SHIFT,
1032  .module_offs = OMAP3430_PER_MOD,
1033  .idlest_reg_id = 1,
1034  .idlest_idle_bit = OMAP3430_ST_GPIO5_SHIFT,
1035  },
1036  },
1037  .class = &omap3xxx_gpio_hwmod_class,
1038  .dev_attr = &gpio_dev_attr,
1039 };
1040 
1041 /* gpio6 */
1042 static struct omap_hwmod_irq_info omap3xxx_gpio6_irqs[] = {
1043  { .irq = 34 + OMAP_INTC_START, }, /* INT_34XX_GPIO_BANK6 */
1044  { .irq = -1 },
1045 };
1046 
1047 static struct omap_hwmod_opt_clk gpio6_opt_clks[] = {
1048  { .role = "dbclk", .clk = "gpio6_dbck", },
1049 };
1050 
1051 static struct omap_hwmod omap3xxx_gpio6_hwmod = {
1052  .name = "gpio6",
1054  .mpu_irqs = omap3xxx_gpio6_irqs,
1055  .main_clk = "gpio6_ick",
1056  .opt_clks = gpio6_opt_clks,
1057  .opt_clks_cnt = ARRAY_SIZE(gpio6_opt_clks),
1058  .prcm = {
1059  .omap2 = {
1060  .prcm_reg_id = 1,
1061  .module_bit = OMAP3430_EN_GPIO6_SHIFT,
1062  .module_offs = OMAP3430_PER_MOD,
1063  .idlest_reg_id = 1,
1064  .idlest_idle_bit = OMAP3430_ST_GPIO6_SHIFT,
1065  },
1066  },
1067  .class = &omap3xxx_gpio_hwmod_class,
1068  .dev_attr = &gpio_dev_attr,
1069 };
1070 
1071 /* dma attributes */
1072 static struct omap_dma_dev_attr dma_dev_attr = {
1075  .lch_count = 32,
1076 };
1077 
1078 static struct omap_hwmod_class_sysconfig omap3xxx_dma_sysc = {
1079  .rev_offs = 0x0000,
1080  .sysc_offs = 0x002c,
1081  .syss_offs = 0x0028,
1082  .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
1088  .sysc_fields = &omap_hwmod_sysc_type1,
1089 };
1090 
1091 static struct omap_hwmod_class omap3xxx_dma_hwmod_class = {
1092  .name = "dma",
1093  .sysc = &omap3xxx_dma_sysc,
1094 };
1095 
1096 /* dma_system */
1097 static struct omap_hwmod omap3xxx_dma_system_hwmod = {
1098  .name = "dma",
1099  .class = &omap3xxx_dma_hwmod_class,
1100  .mpu_irqs = omap2_dma_system_irqs,
1101  .main_clk = "core_l3_ick",
1102  .prcm = {
1103  .omap2 = {
1104  .module_offs = CORE_MOD,
1105  .prcm_reg_id = 1,
1106  .module_bit = OMAP3430_ST_SDMA_SHIFT,
1107  .idlest_reg_id = 1,
1108  .idlest_idle_bit = OMAP3430_ST_SDMA_SHIFT,
1109  },
1110  },
1111  .dev_attr = &dma_dev_attr,
1112  .flags = HWMOD_NO_IDLEST,
1113 };
1114 
1115 /*
1116  * 'mcbsp' class
1117  * multi channel buffered serial port controller
1118  */
1119 
1120 static struct omap_hwmod_class_sysconfig omap3xxx_mcbsp_sysc = {
1121  .sysc_offs = 0x008c,
1122  .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_ENAWAKEUP |
1125  .sysc_fields = &omap_hwmod_sysc_type1,
1126  .clockact = 0x2,
1127 };
1128 
1129 static struct omap_hwmod_class omap3xxx_mcbsp_hwmod_class = {
1130  .name = "mcbsp",
1131  .sysc = &omap3xxx_mcbsp_sysc,
1132  .rev = MCBSP_CONFIG_TYPE3,
1133 };
1134 
1135 /* McBSP functional clock mapping */
1136 static struct omap_hwmod_opt_clk mcbsp15_opt_clks[] = {
1137  { .role = "pad_fck", .clk = "mcbsp_clks" },
1138  { .role = "prcm_fck", .clk = "core_96m_fck" },
1139 };
1140 
1141 static struct omap_hwmod_opt_clk mcbsp234_opt_clks[] = {
1142  { .role = "pad_fck", .clk = "mcbsp_clks" },
1143  { .role = "prcm_fck", .clk = "per_96m_fck" },
1144 };
1145 
1146 /* mcbsp1 */
1147 static struct omap_hwmod_irq_info omap3xxx_mcbsp1_irqs[] = {
1148  { .name = "common", .irq = 16 + OMAP_INTC_START, },
1149  { .name = "tx", .irq = 59 + OMAP_INTC_START, },
1150  { .name = "rx", .irq = 60 + OMAP_INTC_START, },
1151  { .irq = -1 },
1152 };
1153 
1154 static struct omap_hwmod omap3xxx_mcbsp1_hwmod = {
1155  .name = "mcbsp1",
1156  .class = &omap3xxx_mcbsp_hwmod_class,
1157  .mpu_irqs = omap3xxx_mcbsp1_irqs,
1158  .sdma_reqs = omap2_mcbsp1_sdma_reqs,
1159  .main_clk = "mcbsp1_fck",
1160  .prcm = {
1161  .omap2 = {
1162  .prcm_reg_id = 1,
1163  .module_bit = OMAP3430_EN_MCBSP1_SHIFT,
1164  .module_offs = CORE_MOD,
1165  .idlest_reg_id = 1,
1166  .idlest_idle_bit = OMAP3430_ST_MCBSP1_SHIFT,
1167  },
1168  },
1169  .opt_clks = mcbsp15_opt_clks,
1170  .opt_clks_cnt = ARRAY_SIZE(mcbsp15_opt_clks),
1171 };
1172 
1173 /* mcbsp2 */
1174 static struct omap_hwmod_irq_info omap3xxx_mcbsp2_irqs[] = {
1175  { .name = "common", .irq = 17 + OMAP_INTC_START, },
1176  { .name = "tx", .irq = 62 + OMAP_INTC_START, },
1177  { .name = "rx", .irq = 63 + OMAP_INTC_START, },
1178  { .irq = -1 },
1179 };
1180 
1181 static struct omap_mcbsp_dev_attr omap34xx_mcbsp2_dev_attr = {
1182  .sidetone = "mcbsp2_sidetone",
1183 };
1184 
1185 static struct omap_hwmod omap3xxx_mcbsp2_hwmod = {
1186  .name = "mcbsp2",
1187  .class = &omap3xxx_mcbsp_hwmod_class,
1188  .mpu_irqs = omap3xxx_mcbsp2_irqs,
1189  .sdma_reqs = omap2_mcbsp2_sdma_reqs,
1190  .main_clk = "mcbsp2_fck",
1191  .prcm = {
1192  .omap2 = {
1193  .prcm_reg_id = 1,
1194  .module_bit = OMAP3430_EN_MCBSP2_SHIFT,
1195  .module_offs = OMAP3430_PER_MOD,
1196  .idlest_reg_id = 1,
1197  .idlest_idle_bit = OMAP3430_ST_MCBSP2_SHIFT,
1198  },
1199  },
1200  .opt_clks = mcbsp234_opt_clks,
1201  .opt_clks_cnt = ARRAY_SIZE(mcbsp234_opt_clks),
1202  .dev_attr = &omap34xx_mcbsp2_dev_attr,
1203 };
1204 
1205 /* mcbsp3 */
1206 static struct omap_hwmod_irq_info omap3xxx_mcbsp3_irqs[] = {
1207  { .name = "common", .irq = 22 + OMAP_INTC_START, },
1208  { .name = "tx", .irq = 89 + OMAP_INTC_START, },
1209  { .name = "rx", .irq = 90 + OMAP_INTC_START, },
1210  { .irq = -1 },
1211 };
1212 
1213 static struct omap_mcbsp_dev_attr omap34xx_mcbsp3_dev_attr = {
1214  .sidetone = "mcbsp3_sidetone",
1215 };
1216 
1217 static struct omap_hwmod omap3xxx_mcbsp3_hwmod = {
1218  .name = "mcbsp3",
1219  .class = &omap3xxx_mcbsp_hwmod_class,
1220  .mpu_irqs = omap3xxx_mcbsp3_irqs,
1221  .sdma_reqs = omap2_mcbsp3_sdma_reqs,
1222  .main_clk = "mcbsp3_fck",
1223  .prcm = {
1224  .omap2 = {
1225  .prcm_reg_id = 1,
1226  .module_bit = OMAP3430_EN_MCBSP3_SHIFT,
1227  .module_offs = OMAP3430_PER_MOD,
1228  .idlest_reg_id = 1,
1229  .idlest_idle_bit = OMAP3430_ST_MCBSP3_SHIFT,
1230  },
1231  },
1232  .opt_clks = mcbsp234_opt_clks,
1233  .opt_clks_cnt = ARRAY_SIZE(mcbsp234_opt_clks),
1234  .dev_attr = &omap34xx_mcbsp3_dev_attr,
1235 };
1236 
1237 /* mcbsp4 */
1238 static struct omap_hwmod_irq_info omap3xxx_mcbsp4_irqs[] = {
1239  { .name = "common", .irq = 23 + OMAP_INTC_START, },
1240  { .name = "tx", .irq = 54 + OMAP_INTC_START, },
1241  { .name = "rx", .irq = 55 + OMAP_INTC_START, },
1242  { .irq = -1 },
1243 };
1244 
1245 static struct omap_hwmod_dma_info omap3xxx_mcbsp4_sdma_chs[] = {
1246  { .name = "rx", .dma_req = 20 },
1247  { .name = "tx", .dma_req = 19 },
1248  { .dma_req = -1 }
1249 };
1250 
1251 static struct omap_hwmod omap3xxx_mcbsp4_hwmod = {
1252  .name = "mcbsp4",
1253  .class = &omap3xxx_mcbsp_hwmod_class,
1254  .mpu_irqs = omap3xxx_mcbsp4_irqs,
1255  .sdma_reqs = omap3xxx_mcbsp4_sdma_chs,
1256  .main_clk = "mcbsp4_fck",
1257  .prcm = {
1258  .omap2 = {
1259  .prcm_reg_id = 1,
1260  .module_bit = OMAP3430_EN_MCBSP4_SHIFT,
1261  .module_offs = OMAP3430_PER_MOD,
1262  .idlest_reg_id = 1,
1263  .idlest_idle_bit = OMAP3430_ST_MCBSP4_SHIFT,
1264  },
1265  },
1266  .opt_clks = mcbsp234_opt_clks,
1267  .opt_clks_cnt = ARRAY_SIZE(mcbsp234_opt_clks),
1268 };
1269 
1270 /* mcbsp5 */
1271 static struct omap_hwmod_irq_info omap3xxx_mcbsp5_irqs[] = {
1272  { .name = "common", .irq = 27 + OMAP_INTC_START, },
1273  { .name = "tx", .irq = 81 + OMAP_INTC_START, },
1274  { .name = "rx", .irq = 82 + OMAP_INTC_START, },
1275  { .irq = -1 },
1276 };
1277 
1278 static struct omap_hwmod_dma_info omap3xxx_mcbsp5_sdma_chs[] = {
1279  { .name = "rx", .dma_req = 22 },
1280  { .name = "tx", .dma_req = 21 },
1281  { .dma_req = -1 }
1282 };
1283 
1284 static struct omap_hwmod omap3xxx_mcbsp5_hwmod = {
1285  .name = "mcbsp5",
1286  .class = &omap3xxx_mcbsp_hwmod_class,
1287  .mpu_irqs = omap3xxx_mcbsp5_irqs,
1288  .sdma_reqs = omap3xxx_mcbsp5_sdma_chs,
1289  .main_clk = "mcbsp5_fck",
1290  .prcm = {
1291  .omap2 = {
1292  .prcm_reg_id = 1,
1293  .module_bit = OMAP3430_EN_MCBSP5_SHIFT,
1294  .module_offs = CORE_MOD,
1295  .idlest_reg_id = 1,
1296  .idlest_idle_bit = OMAP3430_ST_MCBSP5_SHIFT,
1297  },
1298  },
1299  .opt_clks = mcbsp15_opt_clks,
1300  .opt_clks_cnt = ARRAY_SIZE(mcbsp15_opt_clks),
1301 };
1302 
1303 /* 'mcbsp sidetone' class */
1304 static struct omap_hwmod_class_sysconfig omap3xxx_mcbsp_sidetone_sysc = {
1305  .sysc_offs = 0x0010,
1306  .sysc_flags = SYSC_HAS_AUTOIDLE,
1307  .sysc_fields = &omap_hwmod_sysc_type1,
1308 };
1309 
1310 static struct omap_hwmod_class omap3xxx_mcbsp_sidetone_hwmod_class = {
1311  .name = "mcbsp_sidetone",
1312  .sysc = &omap3xxx_mcbsp_sidetone_sysc,
1313 };
1314 
1315 /* mcbsp2_sidetone */
1316 static struct omap_hwmod_irq_info omap3xxx_mcbsp2_sidetone_irqs[] = {
1317  { .name = "irq", .irq = 4 + OMAP_INTC_START, },
1318  { .irq = -1 },
1319 };
1320 
1321 static struct omap_hwmod omap3xxx_mcbsp2_sidetone_hwmod = {
1322  .name = "mcbsp2_sidetone",
1323  .class = &omap3xxx_mcbsp_sidetone_hwmod_class,
1324  .mpu_irqs = omap3xxx_mcbsp2_sidetone_irqs,
1325  .main_clk = "mcbsp2_fck",
1326  .prcm = {
1327  .omap2 = {
1328  .prcm_reg_id = 1,
1329  .module_bit = OMAP3430_EN_MCBSP2_SHIFT,
1330  .module_offs = OMAP3430_PER_MOD,
1331  .idlest_reg_id = 1,
1332  .idlest_idle_bit = OMAP3430_ST_MCBSP2_SHIFT,
1333  },
1334  },
1335 };
1336 
1337 /* mcbsp3_sidetone */
1338 static struct omap_hwmod_irq_info omap3xxx_mcbsp3_sidetone_irqs[] = {
1339  { .name = "irq", .irq = 5 + OMAP_INTC_START, },
1340  { .irq = -1 },
1341 };
1342 
1343 static struct omap_hwmod omap3xxx_mcbsp3_sidetone_hwmod = {
1344  .name = "mcbsp3_sidetone",
1345  .class = &omap3xxx_mcbsp_sidetone_hwmod_class,
1346  .mpu_irqs = omap3xxx_mcbsp3_sidetone_irqs,
1347  .main_clk = "mcbsp3_fck",
1348  .prcm = {
1349  .omap2 = {
1350  .prcm_reg_id = 1,
1351  .module_bit = OMAP3430_EN_MCBSP3_SHIFT,
1352  .module_offs = OMAP3430_PER_MOD,
1353  .idlest_reg_id = 1,
1354  .idlest_idle_bit = OMAP3430_ST_MCBSP3_SHIFT,
1355  },
1356  },
1357 };
1358 
1359 /* SR common */
1360 static struct omap_hwmod_sysc_fields omap34xx_sr_sysc_fields = {
1361  .clkact_shift = 20,
1362 };
1363 
1364 static struct omap_hwmod_class_sysconfig omap34xx_sr_sysc = {
1365  .sysc_offs = 0x24,
1366  .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_NO_CACHE),
1368  .sysc_fields = &omap34xx_sr_sysc_fields,
1369 };
1370 
1371 static struct omap_hwmod_class omap34xx_smartreflex_hwmod_class = {
1372  .name = "smartreflex",
1373  .sysc = &omap34xx_sr_sysc,
1374  .rev = 1,
1375 };
1376 
1377 static struct omap_hwmod_sysc_fields omap36xx_sr_sysc_fields = {
1378  .sidle_shift = 24,
1379  .enwkup_shift = 26,
1380 };
1381 
1382 static struct omap_hwmod_class_sysconfig omap36xx_sr_sysc = {
1383  .sysc_offs = 0x38,
1384  .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1386  SYSC_NO_CACHE),
1387  .sysc_fields = &omap36xx_sr_sysc_fields,
1388 };
1389 
1390 static struct omap_hwmod_class omap36xx_smartreflex_hwmod_class = {
1391  .name = "smartreflex",
1392  .sysc = &omap36xx_sr_sysc,
1393  .rev = 2,
1394 };
1395 
1396 /* SR1 */
1397 static struct omap_smartreflex_dev_attr sr1_dev_attr = {
1398  .sensor_voltdm_name = "mpu_iva",
1399 };
1400 
1401 static struct omap_hwmod_irq_info omap3_smartreflex_mpu_irqs[] = {
1402  { .irq = 18 + OMAP_INTC_START, },
1403  { .irq = -1 },
1404 };
1405 
1406 static struct omap_hwmod omap34xx_sr1_hwmod = {
1407  .name = "smartreflex_mpu_iva",
1408  .class = &omap34xx_smartreflex_hwmod_class,
1409  .main_clk = "sr1_fck",
1410  .prcm = {
1411  .omap2 = {
1412  .prcm_reg_id = 1,
1413  .module_bit = OMAP3430_EN_SR1_SHIFT,
1414  .module_offs = WKUP_MOD,
1415  .idlest_reg_id = 1,
1416  .idlest_idle_bit = OMAP3430_EN_SR1_SHIFT,
1417  },
1418  },
1419  .dev_attr = &sr1_dev_attr,
1420  .mpu_irqs = omap3_smartreflex_mpu_irqs,
1421  .flags = HWMOD_SET_DEFAULT_CLOCKACT,
1422 };
1423 
1424 static struct omap_hwmod omap36xx_sr1_hwmod = {
1425  .name = "smartreflex_mpu_iva",
1426  .class = &omap36xx_smartreflex_hwmod_class,
1427  .main_clk = "sr1_fck",
1428  .prcm = {
1429  .omap2 = {
1430  .prcm_reg_id = 1,
1431  .module_bit = OMAP3430_EN_SR1_SHIFT,
1432  .module_offs = WKUP_MOD,
1433  .idlest_reg_id = 1,
1434  .idlest_idle_bit = OMAP3430_EN_SR1_SHIFT,
1435  },
1436  },
1437  .dev_attr = &sr1_dev_attr,
1438  .mpu_irqs = omap3_smartreflex_mpu_irqs,
1439 };
1440 
1441 /* SR2 */
1442 static struct omap_smartreflex_dev_attr sr2_dev_attr = {
1443  .sensor_voltdm_name = "core",
1444 };
1445 
1446 static struct omap_hwmod_irq_info omap3_smartreflex_core_irqs[] = {
1447  { .irq = 19 + OMAP_INTC_START, },
1448  { .irq = -1 },
1449 };
1450 
1451 static struct omap_hwmod omap34xx_sr2_hwmod = {
1452  .name = "smartreflex_core",
1453  .class = &omap34xx_smartreflex_hwmod_class,
1454  .main_clk = "sr2_fck",
1455  .prcm = {
1456  .omap2 = {
1457  .prcm_reg_id = 1,
1458  .module_bit = OMAP3430_EN_SR2_SHIFT,
1459  .module_offs = WKUP_MOD,
1460  .idlest_reg_id = 1,
1461  .idlest_idle_bit = OMAP3430_EN_SR2_SHIFT,
1462  },
1463  },
1464  .dev_attr = &sr2_dev_attr,
1465  .mpu_irqs = omap3_smartreflex_core_irqs,
1466  .flags = HWMOD_SET_DEFAULT_CLOCKACT,
1467 };
1468 
1469 static struct omap_hwmod omap36xx_sr2_hwmod = {
1470  .name = "smartreflex_core",
1471  .class = &omap36xx_smartreflex_hwmod_class,
1472  .main_clk = "sr2_fck",
1473  .prcm = {
1474  .omap2 = {
1475  .prcm_reg_id = 1,
1476  .module_bit = OMAP3430_EN_SR2_SHIFT,
1477  .module_offs = WKUP_MOD,
1478  .idlest_reg_id = 1,
1479  .idlest_idle_bit = OMAP3430_EN_SR2_SHIFT,
1480  },
1481  },
1482  .dev_attr = &sr2_dev_attr,
1483  .mpu_irqs = omap3_smartreflex_core_irqs,
1484 };
1485 
1486 /*
1487  * 'mailbox' class
1488  * mailbox module allowing communication between the on-chip processors
1489  * using a queued mailbox-interrupt mechanism.
1490  */
1491 
1492 static struct omap_hwmod_class_sysconfig omap3xxx_mailbox_sysc = {
1493  .rev_offs = 0x000,
1494  .sysc_offs = 0x010,
1495  .syss_offs = 0x014,
1496  .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
1499  .sysc_fields = &omap_hwmod_sysc_type1,
1500 };
1501 
1502 static struct omap_hwmod_class omap3xxx_mailbox_hwmod_class = {
1503  .name = "mailbox",
1504  .sysc = &omap3xxx_mailbox_sysc,
1505 };
1506 
1507 static struct omap_hwmod_irq_info omap3xxx_mailbox_irqs[] = {
1508  { .irq = 26 + OMAP_INTC_START, },
1509  { .irq = -1 },
1510 };
1511 
1512 static struct omap_hwmod omap3xxx_mailbox_hwmod = {
1513  .name = "mailbox",
1514  .class = &omap3xxx_mailbox_hwmod_class,
1515  .mpu_irqs = omap3xxx_mailbox_irqs,
1516  .main_clk = "mailboxes_ick",
1517  .prcm = {
1518  .omap2 = {
1519  .prcm_reg_id = 1,
1520  .module_bit = OMAP3430_EN_MAILBOXES_SHIFT,
1521  .module_offs = CORE_MOD,
1522  .idlest_reg_id = 1,
1523  .idlest_idle_bit = OMAP3430_ST_MAILBOXES_SHIFT,
1524  },
1525  },
1526 };
1527 
1528 /*
1529  * 'mcspi' class
1530  * multichannel serial port interface (mcspi) / master/slave synchronous serial
1531  * bus
1532  */
1533 
1534 static struct omap_hwmod_class_sysconfig omap34xx_mcspi_sysc = {
1535  .rev_offs = 0x0000,
1536  .sysc_offs = 0x0010,
1537  .syss_offs = 0x0014,
1538  .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
1542  .sysc_fields = &omap_hwmod_sysc_type1,
1543 };
1544 
1545 static struct omap_hwmod_class omap34xx_mcspi_class = {
1546  .name = "mcspi",
1547  .sysc = &omap34xx_mcspi_sysc,
1548  .rev = OMAP3_MCSPI_REV,
1549 };
1550 
1551 /* mcspi1 */
1552 static struct omap2_mcspi_dev_attr omap_mcspi1_dev_attr = {
1553  .num_chipselect = 4,
1554 };
1555 
1556 static struct omap_hwmod omap34xx_mcspi1 = {
1557  .name = "mcspi1",
1558  .mpu_irqs = omap2_mcspi1_mpu_irqs,
1559  .sdma_reqs = omap2_mcspi1_sdma_reqs,
1560  .main_clk = "mcspi1_fck",
1561  .prcm = {
1562  .omap2 = {
1563  .module_offs = CORE_MOD,
1564  .prcm_reg_id = 1,
1565  .module_bit = OMAP3430_EN_MCSPI1_SHIFT,
1566  .idlest_reg_id = 1,
1567  .idlest_idle_bit = OMAP3430_ST_MCSPI1_SHIFT,
1568  },
1569  },
1570  .class = &omap34xx_mcspi_class,
1571  .dev_attr = &omap_mcspi1_dev_attr,
1572 };
1573 
1574 /* mcspi2 */
1575 static struct omap2_mcspi_dev_attr omap_mcspi2_dev_attr = {
1576  .num_chipselect = 2,
1577 };
1578 
1579 static struct omap_hwmod omap34xx_mcspi2 = {
1580  .name = "mcspi2",
1581  .mpu_irqs = omap2_mcspi2_mpu_irqs,
1582  .sdma_reqs = omap2_mcspi2_sdma_reqs,
1583  .main_clk = "mcspi2_fck",
1584  .prcm = {
1585  .omap2 = {
1586  .module_offs = CORE_MOD,
1587  .prcm_reg_id = 1,
1588  .module_bit = OMAP3430_EN_MCSPI2_SHIFT,
1589  .idlest_reg_id = 1,
1590  .idlest_idle_bit = OMAP3430_ST_MCSPI2_SHIFT,
1591  },
1592  },
1593  .class = &omap34xx_mcspi_class,
1594  .dev_attr = &omap_mcspi2_dev_attr,
1595 };
1596 
1597 /* mcspi3 */
1598 static struct omap_hwmod_irq_info omap34xx_mcspi3_mpu_irqs[] = {
1599  { .name = "irq", .irq = 91 + OMAP_INTC_START, }, /* 91 */
1600  { .irq = -1 },
1601 };
1602 
1603 static struct omap_hwmod_dma_info omap34xx_mcspi3_sdma_reqs[] = {
1604  { .name = "tx0", .dma_req = 15 },
1605  { .name = "rx0", .dma_req = 16 },
1606  { .name = "tx1", .dma_req = 23 },
1607  { .name = "rx1", .dma_req = 24 },
1608  { .dma_req = -1 }
1609 };
1610 
1611 static struct omap2_mcspi_dev_attr omap_mcspi3_dev_attr = {
1612  .num_chipselect = 2,
1613 };
1614 
1615 static struct omap_hwmod omap34xx_mcspi3 = {
1616  .name = "mcspi3",
1617  .mpu_irqs = omap34xx_mcspi3_mpu_irqs,
1618  .sdma_reqs = omap34xx_mcspi3_sdma_reqs,
1619  .main_clk = "mcspi3_fck",
1620  .prcm = {
1621  .omap2 = {
1622  .module_offs = CORE_MOD,
1623  .prcm_reg_id = 1,
1624  .module_bit = OMAP3430_EN_MCSPI3_SHIFT,
1625  .idlest_reg_id = 1,
1626  .idlest_idle_bit = OMAP3430_ST_MCSPI3_SHIFT,
1627  },
1628  },
1629  .class = &omap34xx_mcspi_class,
1630  .dev_attr = &omap_mcspi3_dev_attr,
1631 };
1632 
1633 /* mcspi4 */
1634 static struct omap_hwmod_irq_info omap34xx_mcspi4_mpu_irqs[] = {
1635  { .name = "irq", .irq = 48 + OMAP_INTC_START, },
1636  { .irq = -1 },
1637 };
1638 
1639 static struct omap_hwmod_dma_info omap34xx_mcspi4_sdma_reqs[] = {
1640  { .name = "tx0", .dma_req = 70 }, /* DMA_SPI4_TX0 */
1641  { .name = "rx0", .dma_req = 71 }, /* DMA_SPI4_RX0 */
1642  { .dma_req = -1 }
1643 };
1644 
1645 static struct omap2_mcspi_dev_attr omap_mcspi4_dev_attr = {
1646  .num_chipselect = 1,
1647 };
1648 
1649 static struct omap_hwmod omap34xx_mcspi4 = {
1650  .name = "mcspi4",
1651  .mpu_irqs = omap34xx_mcspi4_mpu_irqs,
1652  .sdma_reqs = omap34xx_mcspi4_sdma_reqs,
1653  .main_clk = "mcspi4_fck",
1654  .prcm = {
1655  .omap2 = {
1656  .module_offs = CORE_MOD,
1657  .prcm_reg_id = 1,
1658  .module_bit = OMAP3430_EN_MCSPI4_SHIFT,
1659  .idlest_reg_id = 1,
1660  .idlest_idle_bit = OMAP3430_ST_MCSPI4_SHIFT,
1661  },
1662  },
1663  .class = &omap34xx_mcspi_class,
1664  .dev_attr = &omap_mcspi4_dev_attr,
1665 };
1666 
1667 /* usbhsotg */
1668 static struct omap_hwmod_class_sysconfig omap3xxx_usbhsotg_sysc = {
1669  .rev_offs = 0x0400,
1670  .sysc_offs = 0x0404,
1671  .syss_offs = 0x0408,
1672  .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE|
1677  .sysc_fields = &omap_hwmod_sysc_type1,
1678 };
1679 
1680 static struct omap_hwmod_class usbotg_class = {
1681  .name = "usbotg",
1682  .sysc = &omap3xxx_usbhsotg_sysc,
1683 };
1684 
1685 /* usb_otg_hs */
1686 static struct omap_hwmod_irq_info omap3xxx_usbhsotg_mpu_irqs[] = {
1687 
1688  { .name = "mc", .irq = 92 + OMAP_INTC_START, },
1689  { .name = "dma", .irq = 93 + OMAP_INTC_START, },
1690  { .irq = -1 },
1691 };
1692 
1693 static struct omap_hwmod omap3xxx_usbhsotg_hwmod = {
1694  .name = "usb_otg_hs",
1695  .mpu_irqs = omap3xxx_usbhsotg_mpu_irqs,
1696  .main_clk = "hsotgusb_ick",
1697  .prcm = {
1698  .omap2 = {
1699  .prcm_reg_id = 1,
1700  .module_bit = OMAP3430_EN_HSOTGUSB_SHIFT,
1701  .module_offs = CORE_MOD,
1702  .idlest_reg_id = 1,
1703  .idlest_idle_bit = OMAP3430ES2_ST_HSOTGUSB_IDLE_SHIFT,
1704  .idlest_stdby_bit = OMAP3430ES2_ST_HSOTGUSB_STDBY_SHIFT
1705  },
1706  },
1707  .class = &usbotg_class,
1708 
1709  /*
1710  * Erratum ID: i479 idle_req / idle_ack mechanism potentially
1711  * broken when autoidle is enabled
1712  * workaround is to disable the autoidle bit at module level.
1713  */
1716 };
1717 
1718 /* usb_otg_hs */
1719 static struct omap_hwmod_irq_info am35xx_usbhsotg_mpu_irqs[] = {
1720  { .name = "mc", .irq = 71 + OMAP_INTC_START, },
1721  { .irq = -1 },
1722 };
1723 
1724 static struct omap_hwmod_class am35xx_usbotg_class = {
1725  .name = "am35xx_usbotg",
1726 };
1727 
1728 static struct omap_hwmod am35xx_usbhsotg_hwmod = {
1729  .name = "am35x_otg_hs",
1730  .mpu_irqs = am35xx_usbhsotg_mpu_irqs,
1731  .main_clk = "hsotgusb_fck",
1732  .class = &am35xx_usbotg_class,
1733  .flags = HWMOD_NO_IDLEST,
1734 };
1735 
1736 /* MMC/SD/SDIO common */
1737 static struct omap_hwmod_class_sysconfig omap34xx_mmc_sysc = {
1738  .rev_offs = 0x1fc,
1739  .sysc_offs = 0x10,
1740  .syss_offs = 0x14,
1741  .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
1745  .sysc_fields = &omap_hwmod_sysc_type1,
1746 };
1747 
1748 static struct omap_hwmod_class omap34xx_mmc_class = {
1749  .name = "mmc",
1750  .sysc = &omap34xx_mmc_sysc,
1751 };
1752 
1753 /* MMC/SD/SDIO1 */
1754 
1755 static struct omap_hwmod_irq_info omap34xx_mmc1_mpu_irqs[] = {
1756  { .irq = 83 + OMAP_INTC_START, },
1757  { .irq = -1 },
1758 };
1759 
1760 static struct omap_hwmod_dma_info omap34xx_mmc1_sdma_reqs[] = {
1761  { .name = "tx", .dma_req = 61, },
1762  { .name = "rx", .dma_req = 62, },
1763  { .dma_req = -1 }
1764 };
1765 
1766 static struct omap_hwmod_opt_clk omap34xx_mmc1_opt_clks[] = {
1767  { .role = "dbck", .clk = "omap_32k_fck", },
1768 };
1769 
1770 static struct omap_mmc_dev_attr mmc1_dev_attr = {
1772 };
1773 
1774 /* See 35xx errata 2.1.1.128 in SPRZ278F */
1775 static struct omap_mmc_dev_attr mmc1_pre_es3_dev_attr = {
1776  .flags = (OMAP_HSMMC_SUPPORTS_DUAL_VOLT |
1778 };
1779 
1780 static struct omap_hwmod omap3xxx_pre_es3_mmc1_hwmod = {
1781  .name = "mmc1",
1782  .mpu_irqs = omap34xx_mmc1_mpu_irqs,
1783  .sdma_reqs = omap34xx_mmc1_sdma_reqs,
1784  .opt_clks = omap34xx_mmc1_opt_clks,
1785  .opt_clks_cnt = ARRAY_SIZE(omap34xx_mmc1_opt_clks),
1786  .main_clk = "mmchs1_fck",
1787  .prcm = {
1788  .omap2 = {
1789  .module_offs = CORE_MOD,
1790  .prcm_reg_id = 1,
1791  .module_bit = OMAP3430_EN_MMC1_SHIFT,
1792  .idlest_reg_id = 1,
1793  .idlest_idle_bit = OMAP3430_ST_MMC1_SHIFT,
1794  },
1795  },
1796  .dev_attr = &mmc1_pre_es3_dev_attr,
1797  .class = &omap34xx_mmc_class,
1798 };
1799 
1800 static struct omap_hwmod omap3xxx_es3plus_mmc1_hwmod = {
1801  .name = "mmc1",
1802  .mpu_irqs = omap34xx_mmc1_mpu_irqs,
1803  .sdma_reqs = omap34xx_mmc1_sdma_reqs,
1804  .opt_clks = omap34xx_mmc1_opt_clks,
1805  .opt_clks_cnt = ARRAY_SIZE(omap34xx_mmc1_opt_clks),
1806  .main_clk = "mmchs1_fck",
1807  .prcm = {
1808  .omap2 = {
1809  .module_offs = CORE_MOD,
1810  .prcm_reg_id = 1,
1811  .module_bit = OMAP3430_EN_MMC1_SHIFT,
1812  .idlest_reg_id = 1,
1813  .idlest_idle_bit = OMAP3430_ST_MMC1_SHIFT,
1814  },
1815  },
1816  .dev_attr = &mmc1_dev_attr,
1817  .class = &omap34xx_mmc_class,
1818 };
1819 
1820 /* MMC/SD/SDIO2 */
1821 
1822 static struct omap_hwmod_irq_info omap34xx_mmc2_mpu_irqs[] = {
1823  { .irq = 86 + OMAP_INTC_START, },
1824  { .irq = -1 },
1825 };
1826 
1827 static struct omap_hwmod_dma_info omap34xx_mmc2_sdma_reqs[] = {
1828  { .name = "tx", .dma_req = 47, },
1829  { .name = "rx", .dma_req = 48, },
1830  { .dma_req = -1 }
1831 };
1832 
1833 static struct omap_hwmod_opt_clk omap34xx_mmc2_opt_clks[] = {
1834  { .role = "dbck", .clk = "omap_32k_fck", },
1835 };
1836 
1837 /* See 35xx errata 2.1.1.128 in SPRZ278F */
1838 static struct omap_mmc_dev_attr mmc2_pre_es3_dev_attr = {
1840 };
1841 
1842 static struct omap_hwmod omap3xxx_pre_es3_mmc2_hwmod = {
1843  .name = "mmc2",
1844  .mpu_irqs = omap34xx_mmc2_mpu_irqs,
1845  .sdma_reqs = omap34xx_mmc2_sdma_reqs,
1846  .opt_clks = omap34xx_mmc2_opt_clks,
1847  .opt_clks_cnt = ARRAY_SIZE(omap34xx_mmc2_opt_clks),
1848  .main_clk = "mmchs2_fck",
1849  .prcm = {
1850  .omap2 = {
1851  .module_offs = CORE_MOD,
1852  .prcm_reg_id = 1,
1853  .module_bit = OMAP3430_EN_MMC2_SHIFT,
1854  .idlest_reg_id = 1,
1855  .idlest_idle_bit = OMAP3430_ST_MMC2_SHIFT,
1856  },
1857  },
1858  .dev_attr = &mmc2_pre_es3_dev_attr,
1859  .class = &omap34xx_mmc_class,
1860 };
1861 
1862 static struct omap_hwmod omap3xxx_es3plus_mmc2_hwmod = {
1863  .name = "mmc2",
1864  .mpu_irqs = omap34xx_mmc2_mpu_irqs,
1865  .sdma_reqs = omap34xx_mmc2_sdma_reqs,
1866  .opt_clks = omap34xx_mmc2_opt_clks,
1867  .opt_clks_cnt = ARRAY_SIZE(omap34xx_mmc2_opt_clks),
1868  .main_clk = "mmchs2_fck",
1869  .prcm = {
1870  .omap2 = {
1871  .module_offs = CORE_MOD,
1872  .prcm_reg_id = 1,
1873  .module_bit = OMAP3430_EN_MMC2_SHIFT,
1874  .idlest_reg_id = 1,
1875  .idlest_idle_bit = OMAP3430_ST_MMC2_SHIFT,
1876  },
1877  },
1878  .class = &omap34xx_mmc_class,
1879 };
1880 
1881 /* MMC/SD/SDIO3 */
1882 
1883 static struct omap_hwmod_irq_info omap34xx_mmc3_mpu_irqs[] = {
1884  { .irq = 94 + OMAP_INTC_START, },
1885  { .irq = -1 },
1886 };
1887 
1888 static struct omap_hwmod_dma_info omap34xx_mmc3_sdma_reqs[] = {
1889  { .name = "tx", .dma_req = 77, },
1890  { .name = "rx", .dma_req = 78, },
1891  { .dma_req = -1 }
1892 };
1893 
1894 static struct omap_hwmod_opt_clk omap34xx_mmc3_opt_clks[] = {
1895  { .role = "dbck", .clk = "omap_32k_fck", },
1896 };
1897 
1898 static struct omap_hwmod omap3xxx_mmc3_hwmod = {
1899  .name = "mmc3",
1900  .mpu_irqs = omap34xx_mmc3_mpu_irqs,
1901  .sdma_reqs = omap34xx_mmc3_sdma_reqs,
1902  .opt_clks = omap34xx_mmc3_opt_clks,
1903  .opt_clks_cnt = ARRAY_SIZE(omap34xx_mmc3_opt_clks),
1904  .main_clk = "mmchs3_fck",
1905  .prcm = {
1906  .omap2 = {
1907  .prcm_reg_id = 1,
1908  .module_bit = OMAP3430_EN_MMC3_SHIFT,
1909  .idlest_reg_id = 1,
1910  .idlest_idle_bit = OMAP3430_ST_MMC3_SHIFT,
1911  },
1912  },
1913  .class = &omap34xx_mmc_class,
1914 };
1915 
1916 /*
1917  * 'usb_host_hs' class
1918  * high-speed multi-port usb host controller
1919  */
1920 
1921 static struct omap_hwmod_class_sysconfig omap3xxx_usb_host_hs_sysc = {
1922  .rev_offs = 0x0000,
1923  .sysc_offs = 0x0010,
1924  .syss_offs = 0x0014,
1925  .sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_CLOCKACTIVITY |
1930  .sysc_fields = &omap_hwmod_sysc_type1,
1931 };
1932 
1933 static struct omap_hwmod_class omap3xxx_usb_host_hs_hwmod_class = {
1934  .name = "usb_host_hs",
1935  .sysc = &omap3xxx_usb_host_hs_sysc,
1936 };
1937 
1938 static struct omap_hwmod_opt_clk omap3xxx_usb_host_hs_opt_clks[] = {
1939  { .role = "ehci_logic_fck", .clk = "usbhost_120m_fck", },
1940 };
1941 
1942 static struct omap_hwmod_irq_info omap3xxx_usb_host_hs_irqs[] = {
1943  { .name = "ohci-irq", .irq = 76 + OMAP_INTC_START, },
1944  { .name = "ehci-irq", .irq = 77 + OMAP_INTC_START, },
1945  { .irq = -1 },
1946 };
1947 
1948 static struct omap_hwmod omap3xxx_usb_host_hs_hwmod = {
1949  .name = "usb_host_hs",
1950  .class = &omap3xxx_usb_host_hs_hwmod_class,
1951  .clkdm_name = "l3_init_clkdm",
1952  .mpu_irqs = omap3xxx_usb_host_hs_irqs,
1953  .main_clk = "usbhost_48m_fck",
1954  .prcm = {
1955  .omap2 = {
1956  .module_offs = OMAP3430ES2_USBHOST_MOD,
1957  .prcm_reg_id = 1,
1958  .module_bit = OMAP3430ES2_EN_USBHOST1_SHIFT,
1959  .idlest_reg_id = 1,
1960  .idlest_idle_bit = OMAP3430ES2_ST_USBHOST_IDLE_SHIFT,
1961  .idlest_stdby_bit = OMAP3430ES2_ST_USBHOST_STDBY_SHIFT,
1962  },
1963  },
1964  .opt_clks = omap3xxx_usb_host_hs_opt_clks,
1965  .opt_clks_cnt = ARRAY_SIZE(omap3xxx_usb_host_hs_opt_clks),
1966 
1967  /*
1968  * Errata: USBHOST Configured In Smart-Idle Can Lead To a Deadlock
1969  * id: i660
1970  *
1971  * Description:
1972  * In the following configuration :
1973  * - USBHOST module is set to smart-idle mode
1974  * - PRCM asserts idle_req to the USBHOST module ( This typically
1975  * happens when the system is going to a low power mode : all ports
1976  * have been suspended, the master part of the USBHOST module has
1977  * entered the standby state, and SW has cut the functional clocks)
1978  * - an USBHOST interrupt occurs before the module is able to answer
1979  * idle_ack, typically a remote wakeup IRQ.
1980  * Then the USB HOST module will enter a deadlock situation where it
1981  * is no more accessible nor functional.
1982  *
1983  * Workaround:
1984  * Don't use smart idle; use only force idle, hence HWMOD_SWSUP_SIDLE
1985  */
1986 
1987  /*
1988  * Errata: USB host EHCI may stall when entering smart-standby mode
1989  * Id: i571
1990  *
1991  * Description:
1992  * When the USBHOST module is set to smart-standby mode, and when it is
1993  * ready to enter the standby state (i.e. all ports are suspended and
1994  * all attached devices are in suspend mode), then it can wrongly assert
1995  * the Mstandby signal too early while there are still some residual OCP
1996  * transactions ongoing. If this condition occurs, the internal state
1997  * machine may go to an undefined state and the USB link may be stuck
1998  * upon the next resume.
1999  *
2000  * Workaround:
2001  * Don't use smart standby; use only force standby,
2002  * hence HWMOD_SWSUP_MSTANDBY
2003  */
2004 
2005  /*
2006  * During system boot; If the hwmod framework resets the module
2007  * the module will have smart idle settings; which can lead to deadlock
2008  * (above Errata Id:i660); so, dont reset the module during boot;
2009  * Use HWMOD_INIT_NO_RESET.
2010  */
2011 
2014 };
2015 
2016 /*
2017  * 'usb_tll_hs' class
2018  * usb_tll_hs module is the adapter on the usb_host_hs ports
2019  */
2020 static struct omap_hwmod_class_sysconfig omap3xxx_usb_tll_hs_sysc = {
2021  .rev_offs = 0x0000,
2022  .sysc_offs = 0x0010,
2023  .syss_offs = 0x0014,
2024  .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
2028  .sysc_fields = &omap_hwmod_sysc_type1,
2029 };
2030 
2031 static struct omap_hwmod_class omap3xxx_usb_tll_hs_hwmod_class = {
2032  .name = "usb_tll_hs",
2033  .sysc = &omap3xxx_usb_tll_hs_sysc,
2034 };
2035 
2036 static struct omap_hwmod_irq_info omap3xxx_usb_tll_hs_irqs[] = {
2037  { .name = "tll-irq", .irq = 78 + OMAP_INTC_START, },
2038  { .irq = -1 },
2039 };
2040 
2041 static struct omap_hwmod omap3xxx_usb_tll_hs_hwmod = {
2042  .name = "usb_tll_hs",
2043  .class = &omap3xxx_usb_tll_hs_hwmod_class,
2044  .clkdm_name = "l3_init_clkdm",
2045  .mpu_irqs = omap3xxx_usb_tll_hs_irqs,
2046  .main_clk = "usbtll_fck",
2047  .prcm = {
2048  .omap2 = {
2049  .module_offs = CORE_MOD,
2050  .prcm_reg_id = 3,
2051  .module_bit = OMAP3430ES2_EN_USBTLL_SHIFT,
2052  .idlest_reg_id = 3,
2053  .idlest_idle_bit = OMAP3430ES2_ST_USBTLL_SHIFT,
2054  },
2055  },
2056 };
2057 
2058 static struct omap_hwmod omap3xxx_hdq1w_hwmod = {
2059  .name = "hdq1w",
2060  .mpu_irqs = omap2_hdq1w_mpu_irqs,
2061  .main_clk = "hdq_fck",
2062  .prcm = {
2063  .omap2 = {
2064  .module_offs = CORE_MOD,
2065  .prcm_reg_id = 1,
2066  .module_bit = OMAP3430_EN_HDQ_SHIFT,
2067  .idlest_reg_id = 1,
2068  .idlest_idle_bit = OMAP3430_ST_HDQ_SHIFT,
2069  },
2070  },
2071  .class = &omap2_hdq1w_class,
2072 };
2073 
2074 /* SAD2D */
2075 static struct omap_hwmod_rst_info omap3xxx_sad2d_resets[] = {
2076  { .name = "rst_modem_pwron_sw", .rst_shift = 0 },
2077  { .name = "rst_modem_sw", .rst_shift = 1 },
2078 };
2079 
2080 static struct omap_hwmod_class omap3xxx_sad2d_class = {
2081  .name = "sad2d",
2082 };
2083 
2084 static struct omap_hwmod omap3xxx_sad2d_hwmod = {
2085  .name = "sad2d",
2086  .rst_lines = omap3xxx_sad2d_resets,
2087  .rst_lines_cnt = ARRAY_SIZE(omap3xxx_sad2d_resets),
2088  .main_clk = "sad2d_ick",
2089  .prcm = {
2090  .omap2 = {
2091  .module_offs = CORE_MOD,
2092  .prcm_reg_id = 1,
2093  .module_bit = OMAP3430_EN_SAD2D_SHIFT,
2094  .idlest_reg_id = 1,
2095  .idlest_idle_bit = OMAP3430_ST_SAD2D_SHIFT,
2096  },
2097  },
2098  .class = &omap3xxx_sad2d_class,
2099 };
2100 
2101 /*
2102  * '32K sync counter' class
2103  * 32-bit ordinary counter, clocked by the falling edge of the 32 khz clock
2104  */
2105 static struct omap_hwmod_class_sysconfig omap3xxx_counter_sysc = {
2106  .rev_offs = 0x0000,
2107  .sysc_offs = 0x0004,
2108  .sysc_flags = SYSC_HAS_SIDLEMODE,
2109  .idlemodes = (SIDLE_FORCE | SIDLE_NO),
2111 };
2112 
2113 static struct omap_hwmod_class omap3xxx_counter_hwmod_class = {
2114  .name = "counter",
2115  .sysc = &omap3xxx_counter_sysc,
2116 };
2117 
2118 static struct omap_hwmod omap3xxx_counter_32k_hwmod = {
2119  .name = "counter_32k",
2120  .class = &omap3xxx_counter_hwmod_class,
2121  .clkdm_name = "wkup_clkdm",
2122  .flags = HWMOD_SWSUP_SIDLE,
2123  .main_clk = "wkup_32k_fck",
2124  .prcm = {
2125  .omap2 = {
2126  .module_offs = WKUP_MOD,
2127  .prcm_reg_id = 1,
2128  .module_bit = OMAP3430_ST_32KSYNC_SHIFT,
2129  .idlest_reg_id = 1,
2130  .idlest_idle_bit = OMAP3430_ST_32KSYNC_SHIFT,
2131  },
2132  },
2133 };
2134 
2135 /*
2136  * 'gpmc' class
2137  * general purpose memory controller
2138  */
2139 
2140 static struct omap_hwmod_class_sysconfig omap3xxx_gpmc_sysc = {
2141  .rev_offs = 0x0000,
2142  .sysc_offs = 0x0010,
2143  .syss_offs = 0x0014,
2144  .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_SIDLEMODE |
2147  .sysc_fields = &omap_hwmod_sysc_type1,
2148 };
2149 
2150 static struct omap_hwmod_class omap3xxx_gpmc_hwmod_class = {
2151  .name = "gpmc",
2152  .sysc = &omap3xxx_gpmc_sysc,
2153 };
2154 
2155 static struct omap_hwmod_irq_info omap3xxx_gpmc_irqs[] = {
2156  { .irq = 20 },
2157  { .irq = -1 }
2158 };
2159 
2160 static struct omap_hwmod omap3xxx_gpmc_hwmod = {
2161  .name = "gpmc",
2162  .class = &omap3xxx_gpmc_hwmod_class,
2163  .clkdm_name = "core_l3_clkdm",
2164  .mpu_irqs = omap3xxx_gpmc_irqs,
2165  .main_clk = "gpmc_fck",
2166  /*
2167  * XXX HWMOD_INIT_NO_RESET should not be needed for this IP
2168  * block. It is not being added due to any known bugs with
2169  * resetting the GPMC IP block, but rather because any timings
2170  * set by the bootloader are not being correctly programmed by
2171  * the kernel from the board file or DT data.
2172  * HWMOD_INIT_NO_RESET should be removed ASAP.
2173  */
2175  HWMOD_NO_IDLEST),
2176 };
2177 
2178 /*
2179  * interfaces
2180  */
2181 
2182 /* L3 -> L4_CORE interface */
2183 static struct omap_hwmod_ocp_if omap3xxx_l3_main__l4_core = {
2184  .master = &omap3xxx_l3_main_hwmod,
2185  .slave = &omap3xxx_l4_core_hwmod,
2186  .user = OCP_USER_MPU | OCP_USER_SDMA,
2187 };
2188 
2189 /* L3 -> L4_PER interface */
2190 static struct omap_hwmod_ocp_if omap3xxx_l3_main__l4_per = {
2191  .master = &omap3xxx_l3_main_hwmod,
2192  .slave = &omap3xxx_l4_per_hwmod,
2193  .user = OCP_USER_MPU | OCP_USER_SDMA,
2194 };
2195 
2196 static struct omap_hwmod_addr_space omap3xxx_l3_main_addrs[] = {
2197  {
2198  .pa_start = 0x68000000,
2199  .pa_end = 0x6800ffff,
2200  .flags = ADDR_TYPE_RT,
2201  },
2202  { }
2203 };
2204 
2205 /* MPU -> L3 interface */
2206 static struct omap_hwmod_ocp_if omap3xxx_mpu__l3_main = {
2207  .master = &omap3xxx_mpu_hwmod,
2208  .slave = &omap3xxx_l3_main_hwmod,
2209  .addr = omap3xxx_l3_main_addrs,
2210  .user = OCP_USER_MPU,
2211 };
2212 
2213 static struct omap_hwmod_addr_space omap3xxx_l4_emu_addrs[] = {
2214  {
2215  .pa_start = 0x54000000,
2216  .pa_end = 0x547fffff,
2217  .flags = ADDR_TYPE_RT,
2218  },
2219  { }
2220 };
2221 
2222 /* l3 -> debugss */
2223 static struct omap_hwmod_ocp_if omap3xxx_l3_main__l4_debugss = {
2224  .master = &omap3xxx_l3_main_hwmod,
2225  .slave = &omap3xxx_debugss_hwmod,
2226  .addr = omap3xxx_l4_emu_addrs,
2227  .user = OCP_USER_MPU,
2228 };
2229 
2230 /* DSS -> l3 */
2231 static struct omap_hwmod_ocp_if omap3430es1_dss__l3 = {
2232  .master = &omap3430es1_dss_core_hwmod,
2233  .slave = &omap3xxx_l3_main_hwmod,
2234  .user = OCP_USER_MPU | OCP_USER_SDMA,
2235 };
2236 
2237 static struct omap_hwmod_ocp_if omap3xxx_dss__l3 = {
2238  .master = &omap3xxx_dss_core_hwmod,
2239  .slave = &omap3xxx_l3_main_hwmod,
2240  .fw = {
2241  .omap2 = {
2242  .l3_perm_bit = OMAP3_L3_CORE_FW_INIT_ID_DSS,
2243  .flags = OMAP_FIREWALL_L3,
2244  }
2245  },
2246  .user = OCP_USER_MPU | OCP_USER_SDMA,
2247 };
2248 
2249 /* l3_core -> usbhsotg interface */
2250 static struct omap_hwmod_ocp_if omap3xxx_usbhsotg__l3 = {
2251  .master = &omap3xxx_usbhsotg_hwmod,
2252  .slave = &omap3xxx_l3_main_hwmod,
2253  .clk = "core_l3_ick",
2254  .user = OCP_USER_MPU,
2255 };
2256 
2257 /* l3_core -> am35xx_usbhsotg interface */
2258 static struct omap_hwmod_ocp_if am35xx_usbhsotg__l3 = {
2259  .master = &am35xx_usbhsotg_hwmod,
2260  .slave = &omap3xxx_l3_main_hwmod,
2261  .clk = "hsotgusb_ick",
2262  .user = OCP_USER_MPU,
2263 };
2264 
2265 /* l3_core -> sad2d interface */
2266 static struct omap_hwmod_ocp_if omap3xxx_sad2d__l3 = {
2267  .master = &omap3xxx_sad2d_hwmod,
2268  .slave = &omap3xxx_l3_main_hwmod,
2269  .clk = "core_l3_ick",
2270  .user = OCP_USER_MPU,
2271 };
2272 
2273 /* L4_CORE -> L4_WKUP interface */
2274 static struct omap_hwmod_ocp_if omap3xxx_l4_core__l4_wkup = {
2275  .master = &omap3xxx_l4_core_hwmod,
2276  .slave = &omap3xxx_l4_wkup_hwmod,
2277  .user = OCP_USER_MPU | OCP_USER_SDMA,
2278 };
2279 
2280 /* L4 CORE -> MMC1 interface */
2281 static struct omap_hwmod_ocp_if omap3xxx_l4_core__pre_es3_mmc1 = {
2282  .master = &omap3xxx_l4_core_hwmod,
2283  .slave = &omap3xxx_pre_es3_mmc1_hwmod,
2284  .clk = "mmchs1_ick",
2285  .addr = omap2430_mmc1_addr_space,
2286  .user = OCP_USER_MPU | OCP_USER_SDMA,
2287  .flags = OMAP_FIREWALL_L4
2288 };
2289 
2290 static struct omap_hwmod_ocp_if omap3xxx_l4_core__es3plus_mmc1 = {
2291  .master = &omap3xxx_l4_core_hwmod,
2292  .slave = &omap3xxx_es3plus_mmc1_hwmod,
2293  .clk = "mmchs1_ick",
2294  .addr = omap2430_mmc1_addr_space,
2295  .user = OCP_USER_MPU | OCP_USER_SDMA,
2296  .flags = OMAP_FIREWALL_L4
2297 };
2298 
2299 /* L4 CORE -> MMC2 interface */
2300 static struct omap_hwmod_ocp_if omap3xxx_l4_core__pre_es3_mmc2 = {
2301  .master = &omap3xxx_l4_core_hwmod,
2302  .slave = &omap3xxx_pre_es3_mmc2_hwmod,
2303  .clk = "mmchs2_ick",
2304  .addr = omap2430_mmc2_addr_space,
2305  .user = OCP_USER_MPU | OCP_USER_SDMA,
2306  .flags = OMAP_FIREWALL_L4
2307 };
2308 
2309 static struct omap_hwmod_ocp_if omap3xxx_l4_core__es3plus_mmc2 = {
2310  .master = &omap3xxx_l4_core_hwmod,
2311  .slave = &omap3xxx_es3plus_mmc2_hwmod,
2312  .clk = "mmchs2_ick",
2313  .addr = omap2430_mmc2_addr_space,
2314  .user = OCP_USER_MPU | OCP_USER_SDMA,
2315  .flags = OMAP_FIREWALL_L4
2316 };
2317 
2318 /* L4 CORE -> MMC3 interface */
2319 static struct omap_hwmod_addr_space omap3xxx_mmc3_addr_space[] = {
2320  {
2321  .pa_start = 0x480ad000,
2322  .pa_end = 0x480ad1ff,
2323  .flags = ADDR_TYPE_RT,
2324  },
2325  { }
2326 };
2327 
2328 static struct omap_hwmod_ocp_if omap3xxx_l4_core__mmc3 = {
2329  .master = &omap3xxx_l4_core_hwmod,
2330  .slave = &omap3xxx_mmc3_hwmod,
2331  .clk = "mmchs3_ick",
2332  .addr = omap3xxx_mmc3_addr_space,
2333  .user = OCP_USER_MPU | OCP_USER_SDMA,
2334  .flags = OMAP_FIREWALL_L4
2335 };
2336 
2337 /* L4 CORE -> UART1 interface */
2338 static struct omap_hwmod_addr_space omap3xxx_uart1_addr_space[] = {
2339  {
2340  .pa_start = OMAP3_UART1_BASE,
2341  .pa_end = OMAP3_UART1_BASE + SZ_8K - 1,
2342  .flags = ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
2343  },
2344  { }
2345 };
2346 
2347 static struct omap_hwmod_ocp_if omap3_l4_core__uart1 = {
2348  .master = &omap3xxx_l4_core_hwmod,
2349  .slave = &omap3xxx_uart1_hwmod,
2350  .clk = "uart1_ick",
2351  .addr = omap3xxx_uart1_addr_space,
2352  .user = OCP_USER_MPU | OCP_USER_SDMA,
2353 };
2354 
2355 /* L4 CORE -> UART2 interface */
2356 static struct omap_hwmod_addr_space omap3xxx_uart2_addr_space[] = {
2357  {
2358  .pa_start = OMAP3_UART2_BASE,
2359  .pa_end = OMAP3_UART2_BASE + SZ_1K - 1,
2360  .flags = ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
2361  },
2362  { }
2363 };
2364 
2365 static struct omap_hwmod_ocp_if omap3_l4_core__uart2 = {
2366  .master = &omap3xxx_l4_core_hwmod,
2367  .slave = &omap3xxx_uart2_hwmod,
2368  .clk = "uart2_ick",
2369  .addr = omap3xxx_uart2_addr_space,
2370  .user = OCP_USER_MPU | OCP_USER_SDMA,
2371 };
2372 
2373 /* L4 PER -> UART3 interface */
2374 static struct omap_hwmod_addr_space omap3xxx_uart3_addr_space[] = {
2375  {
2376  .pa_start = OMAP3_UART3_BASE,
2377  .pa_end = OMAP3_UART3_BASE + SZ_1K - 1,
2378  .flags = ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
2379  },
2380  { }
2381 };
2382 
2383 static struct omap_hwmod_ocp_if omap3_l4_per__uart3 = {
2384  .master = &omap3xxx_l4_per_hwmod,
2385  .slave = &omap3xxx_uart3_hwmod,
2386  .clk = "uart3_ick",
2387  .addr = omap3xxx_uart3_addr_space,
2388  .user = OCP_USER_MPU | OCP_USER_SDMA,
2389 };
2390 
2391 /* L4 PER -> UART4 interface */
2392 static struct omap_hwmod_addr_space omap36xx_uart4_addr_space[] = {
2393  {
2394  .pa_start = OMAP3_UART4_BASE,
2395  .pa_end = OMAP3_UART4_BASE + SZ_1K - 1,
2396  .flags = ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
2397  },
2398  { }
2399 };
2400 
2401 static struct omap_hwmod_ocp_if omap36xx_l4_per__uart4 = {
2402  .master = &omap3xxx_l4_per_hwmod,
2403  .slave = &omap36xx_uart4_hwmod,
2404  .clk = "uart4_ick",
2405  .addr = omap36xx_uart4_addr_space,
2406  .user = OCP_USER_MPU | OCP_USER_SDMA,
2407 };
2408 
2409 /* AM35xx: L4 CORE -> UART4 interface */
2410 static struct omap_hwmod_addr_space am35xx_uart4_addr_space[] = {
2411  {
2412  .pa_start = OMAP3_UART4_AM35XX_BASE,
2413  .pa_end = OMAP3_UART4_AM35XX_BASE + SZ_1K - 1,
2414  .flags = ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
2415  },
2416  { }
2417 };
2418 
2419 static struct omap_hwmod_ocp_if am35xx_l4_core__uart4 = {
2420  .master = &omap3xxx_l4_core_hwmod,
2421  .slave = &am35xx_uart4_hwmod,
2422  .clk = "uart4_ick",
2423  .addr = am35xx_uart4_addr_space,
2424  .user = OCP_USER_MPU | OCP_USER_SDMA,
2425 };
2426 
2427 /* L4 CORE -> I2C1 interface */
2428 static struct omap_hwmod_ocp_if omap3_l4_core__i2c1 = {
2429  .master = &omap3xxx_l4_core_hwmod,
2430  .slave = &omap3xxx_i2c1_hwmod,
2431  .clk = "i2c1_ick",
2432  .addr = omap2_i2c1_addr_space,
2433  .fw = {
2434  .omap2 = {
2435  .l4_fw_region = OMAP3_L4_CORE_FW_I2C1_REGION,
2436  .l4_prot_group = 7,
2437  .flags = OMAP_FIREWALL_L4,
2438  }
2439  },
2440  .user = OCP_USER_MPU | OCP_USER_SDMA,
2441 };
2442 
2443 /* L4 CORE -> I2C2 interface */
2444 static struct omap_hwmod_ocp_if omap3_l4_core__i2c2 = {
2445  .master = &omap3xxx_l4_core_hwmod,
2446  .slave = &omap3xxx_i2c2_hwmod,
2447  .clk = "i2c2_ick",
2448  .addr = omap2_i2c2_addr_space,
2449  .fw = {
2450  .omap2 = {
2451  .l4_fw_region = OMAP3_L4_CORE_FW_I2C2_REGION,
2452  .l4_prot_group = 7,
2453  .flags = OMAP_FIREWALL_L4,
2454  }
2455  },
2456  .user = OCP_USER_MPU | OCP_USER_SDMA,
2457 };
2458 
2459 /* L4 CORE -> I2C3 interface */
2460 static struct omap_hwmod_addr_space omap3xxx_i2c3_addr_space[] = {
2461  {
2462  .pa_start = 0x48060000,
2463  .pa_end = 0x48060000 + SZ_128 - 1,
2464  .flags = ADDR_TYPE_RT,
2465  },
2466  { }
2467 };
2468 
2469 static struct omap_hwmod_ocp_if omap3_l4_core__i2c3 = {
2470  .master = &omap3xxx_l4_core_hwmod,
2471  .slave = &omap3xxx_i2c3_hwmod,
2472  .clk = "i2c3_ick",
2473  .addr = omap3xxx_i2c3_addr_space,
2474  .fw = {
2475  .omap2 = {
2476  .l4_fw_region = OMAP3_L4_CORE_FW_I2C3_REGION,
2477  .l4_prot_group = 7,
2478  .flags = OMAP_FIREWALL_L4,
2479  }
2480  },
2481  .user = OCP_USER_MPU | OCP_USER_SDMA,
2482 };
2483 
2484 /* L4 CORE -> SR1 interface */
2485 static struct omap_hwmod_addr_space omap3_sr1_addr_space[] = {
2486  {
2487  .pa_start = OMAP34XX_SR1_BASE,
2488  .pa_end = OMAP34XX_SR1_BASE + SZ_1K - 1,
2489  .flags = ADDR_TYPE_RT,
2490  },
2491  { }
2492 };
2493 
2494 static struct omap_hwmod_ocp_if omap34xx_l4_core__sr1 = {
2495  .master = &omap3xxx_l4_core_hwmod,
2496  .slave = &omap34xx_sr1_hwmod,
2497  .clk = "sr_l4_ick",
2498  .addr = omap3_sr1_addr_space,
2499  .user = OCP_USER_MPU,
2500 };
2501 
2502 static struct omap_hwmod_ocp_if omap36xx_l4_core__sr1 = {
2503  .master = &omap3xxx_l4_core_hwmod,
2504  .slave = &omap36xx_sr1_hwmod,
2505  .clk = "sr_l4_ick",
2506  .addr = omap3_sr1_addr_space,
2507  .user = OCP_USER_MPU,
2508 };
2509 
2510 /* L4 CORE -> SR1 interface */
2511 static struct omap_hwmod_addr_space omap3_sr2_addr_space[] = {
2512  {
2513  .pa_start = OMAP34XX_SR2_BASE,
2514  .pa_end = OMAP34XX_SR2_BASE + SZ_1K - 1,
2515  .flags = ADDR_TYPE_RT,
2516  },
2517  { }
2518 };
2519 
2520 static struct omap_hwmod_ocp_if omap34xx_l4_core__sr2 = {
2521  .master = &omap3xxx_l4_core_hwmod,
2522  .slave = &omap34xx_sr2_hwmod,
2523  .clk = "sr_l4_ick",
2524  .addr = omap3_sr2_addr_space,
2525  .user = OCP_USER_MPU,
2526 };
2527 
2528 static struct omap_hwmod_ocp_if omap36xx_l4_core__sr2 = {
2529  .master = &omap3xxx_l4_core_hwmod,
2530  .slave = &omap36xx_sr2_hwmod,
2531  .clk = "sr_l4_ick",
2532  .addr = omap3_sr2_addr_space,
2533  .user = OCP_USER_MPU,
2534 };
2535 
2536 static struct omap_hwmod_addr_space omap3xxx_usbhsotg_addrs[] = {
2537  {
2538  .pa_start = OMAP34XX_HSUSB_OTG_BASE,
2539  .pa_end = OMAP34XX_HSUSB_OTG_BASE + SZ_4K - 1,
2540  .flags = ADDR_TYPE_RT
2541  },
2542  { }
2543 };
2544 
2545 /* l4_core -> usbhsotg */
2546 static struct omap_hwmod_ocp_if omap3xxx_l4_core__usbhsotg = {
2547  .master = &omap3xxx_l4_core_hwmod,
2548  .slave = &omap3xxx_usbhsotg_hwmod,
2549  .clk = "l4_ick",
2550  .addr = omap3xxx_usbhsotg_addrs,
2551  .user = OCP_USER_MPU,
2552 };
2553 
2554 static struct omap_hwmod_addr_space am35xx_usbhsotg_addrs[] = {
2555  {
2556  .pa_start = AM35XX_IPSS_USBOTGSS_BASE,
2557  .pa_end = AM35XX_IPSS_USBOTGSS_BASE + SZ_4K - 1,
2558  .flags = ADDR_TYPE_RT
2559  },
2560  { }
2561 };
2562 
2563 /* l4_core -> usbhsotg */
2564 static struct omap_hwmod_ocp_if am35xx_l4_core__usbhsotg = {
2565  .master = &omap3xxx_l4_core_hwmod,
2566  .slave = &am35xx_usbhsotg_hwmod,
2567  .clk = "hsotgusb_ick",
2568  .addr = am35xx_usbhsotg_addrs,
2569  .user = OCP_USER_MPU,
2570 };
2571 
2572 /* L4_WKUP -> L4_SEC interface */
2573 static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__l4_sec = {
2574  .master = &omap3xxx_l4_wkup_hwmod,
2575  .slave = &omap3xxx_l4_sec_hwmod,
2576  .user = OCP_USER_MPU | OCP_USER_SDMA,
2577 };
2578 
2579 /* IVA2 <- L3 interface */
2580 static struct omap_hwmod_ocp_if omap3xxx_l3__iva = {
2581  .master = &omap3xxx_l3_main_hwmod,
2582  .slave = &omap3xxx_iva_hwmod,
2583  .clk = "core_l3_ick",
2584  .user = OCP_USER_MPU | OCP_USER_SDMA,
2585 };
2586 
2587 static struct omap_hwmod_addr_space omap3xxx_timer1_addrs[] = {
2588  {
2589  .pa_start = 0x48318000,
2590  .pa_end = 0x48318000 + SZ_1K - 1,
2591  .flags = ADDR_TYPE_RT
2592  },
2593  { }
2594 };
2595 
2596 /* l4_wkup -> timer1 */
2597 static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__timer1 = {
2598  .master = &omap3xxx_l4_wkup_hwmod,
2599  .slave = &omap3xxx_timer1_hwmod,
2600  .clk = "gpt1_ick",
2601  .addr = omap3xxx_timer1_addrs,
2602  .user = OCP_USER_MPU | OCP_USER_SDMA,
2603 };
2604 
2605 static struct omap_hwmod_addr_space omap3xxx_timer2_addrs[] = {
2606  {
2607  .pa_start = 0x49032000,
2608  .pa_end = 0x49032000 + SZ_1K - 1,
2609  .flags = ADDR_TYPE_RT
2610  },
2611  { }
2612 };
2613 
2614 /* l4_per -> timer2 */
2615 static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer2 = {
2616  .master = &omap3xxx_l4_per_hwmod,
2617  .slave = &omap3xxx_timer2_hwmod,
2618  .clk = "gpt2_ick",
2619  .addr = omap3xxx_timer2_addrs,
2620  .user = OCP_USER_MPU | OCP_USER_SDMA,
2621 };
2622 
2623 static struct omap_hwmod_addr_space omap3xxx_timer3_addrs[] = {
2624  {
2625  .pa_start = 0x49034000,
2626  .pa_end = 0x49034000 + SZ_1K - 1,
2627  .flags = ADDR_TYPE_RT
2628  },
2629  { }
2630 };
2631 
2632 /* l4_per -> timer3 */
2633 static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer3 = {
2634  .master = &omap3xxx_l4_per_hwmod,
2635  .slave = &omap3xxx_timer3_hwmod,
2636  .clk = "gpt3_ick",
2637  .addr = omap3xxx_timer3_addrs,
2638  .user = OCP_USER_MPU | OCP_USER_SDMA,
2639 };
2640 
2641 static struct omap_hwmod_addr_space omap3xxx_timer4_addrs[] = {
2642  {
2643  .pa_start = 0x49036000,
2644  .pa_end = 0x49036000 + SZ_1K - 1,
2645  .flags = ADDR_TYPE_RT
2646  },
2647  { }
2648 };
2649 
2650 /* l4_per -> timer4 */
2651 static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer4 = {
2652  .master = &omap3xxx_l4_per_hwmod,
2653  .slave = &omap3xxx_timer4_hwmod,
2654  .clk = "gpt4_ick",
2655  .addr = omap3xxx_timer4_addrs,
2656  .user = OCP_USER_MPU | OCP_USER_SDMA,
2657 };
2658 
2659 static struct omap_hwmod_addr_space omap3xxx_timer5_addrs[] = {
2660  {
2661  .pa_start = 0x49038000,
2662  .pa_end = 0x49038000 + SZ_1K - 1,
2663  .flags = ADDR_TYPE_RT
2664  },
2665  { }
2666 };
2667 
2668 /* l4_per -> timer5 */
2669 static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer5 = {
2670  .master = &omap3xxx_l4_per_hwmod,
2671  .slave = &omap3xxx_timer5_hwmod,
2672  .clk = "gpt5_ick",
2673  .addr = omap3xxx_timer5_addrs,
2674  .user = OCP_USER_MPU | OCP_USER_SDMA,
2675 };
2676 
2677 static struct omap_hwmod_addr_space omap3xxx_timer6_addrs[] = {
2678  {
2679  .pa_start = 0x4903A000,
2680  .pa_end = 0x4903A000 + SZ_1K - 1,
2681  .flags = ADDR_TYPE_RT
2682  },
2683  { }
2684 };
2685 
2686 /* l4_per -> timer6 */
2687 static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer6 = {
2688  .master = &omap3xxx_l4_per_hwmod,
2689  .slave = &omap3xxx_timer6_hwmod,
2690  .clk = "gpt6_ick",
2691  .addr = omap3xxx_timer6_addrs,
2692  .user = OCP_USER_MPU | OCP_USER_SDMA,
2693 };
2694 
2695 static struct omap_hwmod_addr_space omap3xxx_timer7_addrs[] = {
2696  {
2697  .pa_start = 0x4903C000,
2698  .pa_end = 0x4903C000 + SZ_1K - 1,
2699  .flags = ADDR_TYPE_RT
2700  },
2701  { }
2702 };
2703 
2704 /* l4_per -> timer7 */
2705 static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer7 = {
2706  .master = &omap3xxx_l4_per_hwmod,
2707  .slave = &omap3xxx_timer7_hwmod,
2708  .clk = "gpt7_ick",
2709  .addr = omap3xxx_timer7_addrs,
2710  .user = OCP_USER_MPU | OCP_USER_SDMA,
2711 };
2712 
2713 static struct omap_hwmod_addr_space omap3xxx_timer8_addrs[] = {
2714  {
2715  .pa_start = 0x4903E000,
2716  .pa_end = 0x4903E000 + SZ_1K - 1,
2717  .flags = ADDR_TYPE_RT
2718  },
2719  { }
2720 };
2721 
2722 /* l4_per -> timer8 */
2723 static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer8 = {
2724  .master = &omap3xxx_l4_per_hwmod,
2725  .slave = &omap3xxx_timer8_hwmod,
2726  .clk = "gpt8_ick",
2727  .addr = omap3xxx_timer8_addrs,
2728  .user = OCP_USER_MPU | OCP_USER_SDMA,
2729 };
2730 
2731 static struct omap_hwmod_addr_space omap3xxx_timer9_addrs[] = {
2732  {
2733  .pa_start = 0x49040000,
2734  .pa_end = 0x49040000 + SZ_1K - 1,
2735  .flags = ADDR_TYPE_RT
2736  },
2737  { }
2738 };
2739 
2740 /* l4_per -> timer9 */
2741 static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer9 = {
2742  .master = &omap3xxx_l4_per_hwmod,
2743  .slave = &omap3xxx_timer9_hwmod,
2744  .clk = "gpt9_ick",
2745  .addr = omap3xxx_timer9_addrs,
2746  .user = OCP_USER_MPU | OCP_USER_SDMA,
2747 };
2748 
2749 /* l4_core -> timer10 */
2750 static struct omap_hwmod_ocp_if omap3xxx_l4_core__timer10 = {
2751  .master = &omap3xxx_l4_core_hwmod,
2752  .slave = &omap3xxx_timer10_hwmod,
2753  .clk = "gpt10_ick",
2754  .addr = omap2_timer10_addrs,
2755  .user = OCP_USER_MPU | OCP_USER_SDMA,
2756 };
2757 
2758 /* l4_core -> timer11 */
2759 static struct omap_hwmod_ocp_if omap3xxx_l4_core__timer11 = {
2760  .master = &omap3xxx_l4_core_hwmod,
2761  .slave = &omap3xxx_timer11_hwmod,
2762  .clk = "gpt11_ick",
2763  .addr = omap2_timer11_addrs,
2764  .user = OCP_USER_MPU | OCP_USER_SDMA,
2765 };
2766 
2767 static struct omap_hwmod_addr_space omap3xxx_timer12_addrs[] = {
2768  {
2769  .pa_start = 0x48304000,
2770  .pa_end = 0x48304000 + SZ_1K - 1,
2771  .flags = ADDR_TYPE_RT
2772  },
2773  { }
2774 };
2775 
2776 /* l4_core -> timer12 */
2777 static struct omap_hwmod_ocp_if omap3xxx_l4_sec__timer12 = {
2778  .master = &omap3xxx_l4_sec_hwmod,
2779  .slave = &omap3xxx_timer12_hwmod,
2780  .clk = "gpt12_ick",
2781  .addr = omap3xxx_timer12_addrs,
2782  .user = OCP_USER_MPU | OCP_USER_SDMA,
2783 };
2784 
2785 /* l4_wkup -> wd_timer2 */
2786 static struct omap_hwmod_addr_space omap3xxx_wd_timer2_addrs[] = {
2787  {
2788  .pa_start = 0x48314000,
2789  .pa_end = 0x4831407f,
2790  .flags = ADDR_TYPE_RT
2791  },
2792  { }
2793 };
2794 
2795 static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__wd_timer2 = {
2796  .master = &omap3xxx_l4_wkup_hwmod,
2797  .slave = &omap3xxx_wd_timer2_hwmod,
2798  .clk = "wdt2_ick",
2799  .addr = omap3xxx_wd_timer2_addrs,
2800  .user = OCP_USER_MPU | OCP_USER_SDMA,
2801 };
2802 
2803 /* l4_core -> dss */
2804 static struct omap_hwmod_ocp_if omap3430es1_l4_core__dss = {
2805  .master = &omap3xxx_l4_core_hwmod,
2806  .slave = &omap3430es1_dss_core_hwmod,
2807  .clk = "dss_ick",
2808  .addr = omap2_dss_addrs,
2809  .fw = {
2810  .omap2 = {
2811  .l4_fw_region = OMAP3ES1_L4_CORE_FW_DSS_CORE_REGION,
2812  .l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
2813  .flags = OMAP_FIREWALL_L4,
2814  }
2815  },
2816  .user = OCP_USER_MPU | OCP_USER_SDMA,
2817 };
2818 
2819 static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss = {
2820  .master = &omap3xxx_l4_core_hwmod,
2821  .slave = &omap3xxx_dss_core_hwmod,
2822  .clk = "dss_ick",
2823  .addr = omap2_dss_addrs,
2824  .fw = {
2825  .omap2 = {
2826  .l4_fw_region = OMAP3_L4_CORE_FW_DSS_CORE_REGION,
2827  .l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
2828  .flags = OMAP_FIREWALL_L4,
2829  }
2830  },
2831  .user = OCP_USER_MPU | OCP_USER_SDMA,
2832 };
2833 
2834 /* l4_core -> dss_dispc */
2835 static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_dispc = {
2836  .master = &omap3xxx_l4_core_hwmod,
2837  .slave = &omap3xxx_dss_dispc_hwmod,
2838  .clk = "dss_ick",
2839  .addr = omap2_dss_dispc_addrs,
2840  .fw = {
2841  .omap2 = {
2842  .l4_fw_region = OMAP3_L4_CORE_FW_DSS_DISPC_REGION,
2843  .l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
2844  .flags = OMAP_FIREWALL_L4,
2845  }
2846  },
2847  .user = OCP_USER_MPU | OCP_USER_SDMA,
2848 };
2849 
2850 static struct omap_hwmod_addr_space omap3xxx_dss_dsi1_addrs[] = {
2851  {
2852  .pa_start = 0x4804FC00,
2853  .pa_end = 0x4804FFFF,
2854  .flags = ADDR_TYPE_RT
2855  },
2856  { }
2857 };
2858 
2859 /* l4_core -> dss_dsi1 */
2860 static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_dsi1 = {
2861  .master = &omap3xxx_l4_core_hwmod,
2862  .slave = &omap3xxx_dss_dsi1_hwmod,
2863  .clk = "dss_ick",
2864  .addr = omap3xxx_dss_dsi1_addrs,
2865  .fw = {
2866  .omap2 = {
2867  .l4_fw_region = OMAP3_L4_CORE_FW_DSS_DSI_REGION,
2868  .l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
2869  .flags = OMAP_FIREWALL_L4,
2870  }
2871  },
2872  .user = OCP_USER_MPU | OCP_USER_SDMA,
2873 };
2874 
2875 /* l4_core -> dss_rfbi */
2876 static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_rfbi = {
2877  .master = &omap3xxx_l4_core_hwmod,
2878  .slave = &omap3xxx_dss_rfbi_hwmod,
2879  .clk = "dss_ick",
2880  .addr = omap2_dss_rfbi_addrs,
2881  .fw = {
2882  .omap2 = {
2883  .l4_fw_region = OMAP3_L4_CORE_FW_DSS_RFBI_REGION,
2884  .l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP ,
2885  .flags = OMAP_FIREWALL_L4,
2886  }
2887  },
2888  .user = OCP_USER_MPU | OCP_USER_SDMA,
2889 };
2890 
2891 /* l4_core -> dss_venc */
2892 static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_venc = {
2893  .master = &omap3xxx_l4_core_hwmod,
2894  .slave = &omap3xxx_dss_venc_hwmod,
2895  .clk = "dss_ick",
2896  .addr = omap2_dss_venc_addrs,
2897  .fw = {
2898  .omap2 = {
2899  .l4_fw_region = OMAP3_L4_CORE_FW_DSS_VENC_REGION,
2900  .l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
2901  .flags = OMAP_FIREWALL_L4,
2902  }
2903  },
2904  .flags = OCPIF_SWSUP_IDLE,
2905  .user = OCP_USER_MPU | OCP_USER_SDMA,
2906 };
2907 
2908 /* l4_wkup -> gpio1 */
2909 static struct omap_hwmod_addr_space omap3xxx_gpio1_addrs[] = {
2910  {
2911  .pa_start = 0x48310000,
2912  .pa_end = 0x483101ff,
2913  .flags = ADDR_TYPE_RT
2914  },
2915  { }
2916 };
2917 
2918 static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__gpio1 = {
2919  .master = &omap3xxx_l4_wkup_hwmod,
2920  .slave = &omap3xxx_gpio1_hwmod,
2921  .addr = omap3xxx_gpio1_addrs,
2922  .user = OCP_USER_MPU | OCP_USER_SDMA,
2923 };
2924 
2925 /* l4_per -> gpio2 */
2926 static struct omap_hwmod_addr_space omap3xxx_gpio2_addrs[] = {
2927  {
2928  .pa_start = 0x49050000,
2929  .pa_end = 0x490501ff,
2930  .flags = ADDR_TYPE_RT
2931  },
2932  { }
2933 };
2934 
2935 static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio2 = {
2936  .master = &omap3xxx_l4_per_hwmod,
2937  .slave = &omap3xxx_gpio2_hwmod,
2938  .addr = omap3xxx_gpio2_addrs,
2939  .user = OCP_USER_MPU | OCP_USER_SDMA,
2940 };
2941 
2942 /* l4_per -> gpio3 */
2943 static struct omap_hwmod_addr_space omap3xxx_gpio3_addrs[] = {
2944  {
2945  .pa_start = 0x49052000,
2946  .pa_end = 0x490521ff,
2947  .flags = ADDR_TYPE_RT
2948  },
2949  { }
2950 };
2951 
2952 static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio3 = {
2953  .master = &omap3xxx_l4_per_hwmod,
2954  .slave = &omap3xxx_gpio3_hwmod,
2955  .addr = omap3xxx_gpio3_addrs,
2956  .user = OCP_USER_MPU | OCP_USER_SDMA,
2957 };
2958 
2959 /*
2960  * 'mmu' class
2961  * The memory management unit performs virtual to physical address translation
2962  * for its requestors.
2963  */
2964 
2965 static struct omap_hwmod_class_sysconfig mmu_sysc = {
2966  .rev_offs = 0x000,
2967  .sysc_offs = 0x010,
2968  .syss_offs = 0x014,
2969  .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
2972  .sysc_fields = &omap_hwmod_sysc_type1,
2973 };
2974 
2975 static struct omap_hwmod_class omap3xxx_mmu_hwmod_class = {
2976  .name = "mmu",
2977  .sysc = &mmu_sysc,
2978 };
2979 
2980 /* mmu isp */
2981 
2982 static struct omap_mmu_dev_attr mmu_isp_dev_attr = {
2983  .da_start = 0x0,
2984  .da_end = 0xfffff000,
2985  .nr_tlb_entries = 8,
2986 };
2987 
2988 static struct omap_hwmod omap3xxx_mmu_isp_hwmod;
2989 static struct omap_hwmod_irq_info omap3xxx_mmu_isp_irqs[] = {
2990  { .irq = 24 },
2991  { .irq = -1 }
2992 };
2993 
2994 static struct omap_hwmod_addr_space omap3xxx_mmu_isp_addrs[] = {
2995  {
2996  .pa_start = 0x480bd400,
2997  .pa_end = 0x480bd47f,
2998  .flags = ADDR_TYPE_RT,
2999  },
3000  { }
3001 };
3002 
3003 /* l4_core -> mmu isp */
3004 static struct omap_hwmod_ocp_if omap3xxx_l4_core__mmu_isp = {
3005  .master = &omap3xxx_l4_core_hwmod,
3006  .slave = &omap3xxx_mmu_isp_hwmod,
3007  .addr = omap3xxx_mmu_isp_addrs,
3008  .user = OCP_USER_MPU | OCP_USER_SDMA,
3009 };
3010 
3011 static struct omap_hwmod omap3xxx_mmu_isp_hwmod = {
3012  .name = "mmu_isp",
3013  .class = &omap3xxx_mmu_hwmod_class,
3014  .mpu_irqs = omap3xxx_mmu_isp_irqs,
3015  .main_clk = "cam_ick",
3016  .dev_attr = &mmu_isp_dev_attr,
3017  .flags = HWMOD_NO_IDLEST,
3018 };
3019 
3020 #ifdef CONFIG_OMAP_IOMMU_IVA2
3021 
3022 /* mmu iva */
3023 
3024 static struct omap_mmu_dev_attr mmu_iva_dev_attr = {
3025  .da_start = 0x11000000,
3026  .da_end = 0xfffff000,
3027  .nr_tlb_entries = 32,
3028 };
3029 
3030 static struct omap_hwmod omap3xxx_mmu_iva_hwmod;
3031 static struct omap_hwmod_irq_info omap3xxx_mmu_iva_irqs[] = {
3032  { .irq = 28 },
3033  { .irq = -1 }
3034 };
3035 
3036 static struct omap_hwmod_rst_info omap3xxx_mmu_iva_resets[] = {
3037  { .name = "mmu", .rst_shift = 1, .st_shift = 9 },
3038 };
3039 
3040 static struct omap_hwmod_addr_space omap3xxx_mmu_iva_addrs[] = {
3041  {
3042  .pa_start = 0x5d000000,
3043  .pa_end = 0x5d00007f,
3044  .flags = ADDR_TYPE_RT,
3045  },
3046  { }
3047 };
3048 
3049 /* l3_main -> iva mmu */
3050 static struct omap_hwmod_ocp_if omap3xxx_l3_main__mmu_iva = {
3051  .master = &omap3xxx_l3_main_hwmod,
3052  .slave = &omap3xxx_mmu_iva_hwmod,
3053  .addr = omap3xxx_mmu_iva_addrs,
3054  .user = OCP_USER_MPU | OCP_USER_SDMA,
3055 };
3056 
3057 static struct omap_hwmod omap3xxx_mmu_iva_hwmod = {
3058  .name = "mmu_iva",
3059  .class = &omap3xxx_mmu_hwmod_class,
3060  .mpu_irqs = omap3xxx_mmu_iva_irqs,
3061  .rst_lines = omap3xxx_mmu_iva_resets,
3062  .rst_lines_cnt = ARRAY_SIZE(omap3xxx_mmu_iva_resets),
3063  .main_clk = "iva2_ck",
3064  .prcm = {
3065  .omap2 = {
3066  .module_offs = OMAP3430_IVA2_MOD,
3067  },
3068  },
3069  .dev_attr = &mmu_iva_dev_attr,
3070  .flags = HWMOD_NO_IDLEST,
3071 };
3072 
3073 #endif
3074 
3075 /* l4_per -> gpio4 */
3076 static struct omap_hwmod_addr_space omap3xxx_gpio4_addrs[] = {
3077  {
3078  .pa_start = 0x49054000,
3079  .pa_end = 0x490541ff,
3080  .flags = ADDR_TYPE_RT
3081  },
3082  { }
3083 };
3084 
3085 static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio4 = {
3086  .master = &omap3xxx_l4_per_hwmod,
3087  .slave = &omap3xxx_gpio4_hwmod,
3088  .addr = omap3xxx_gpio4_addrs,
3089  .user = OCP_USER_MPU | OCP_USER_SDMA,
3090 };
3091 
3092 /* l4_per -> gpio5 */
3093 static struct omap_hwmod_addr_space omap3xxx_gpio5_addrs[] = {
3094  {
3095  .pa_start = 0x49056000,
3096  .pa_end = 0x490561ff,
3097  .flags = ADDR_TYPE_RT
3098  },
3099  { }
3100 };
3101 
3102 static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio5 = {
3103  .master = &omap3xxx_l4_per_hwmod,
3104  .slave = &omap3xxx_gpio5_hwmod,
3105  .addr = omap3xxx_gpio5_addrs,
3106  .user = OCP_USER_MPU | OCP_USER_SDMA,
3107 };
3108 
3109 /* l4_per -> gpio6 */
3110 static struct omap_hwmod_addr_space omap3xxx_gpio6_addrs[] = {
3111  {
3112  .pa_start = 0x49058000,
3113  .pa_end = 0x490581ff,
3114  .flags = ADDR_TYPE_RT
3115  },
3116  { }
3117 };
3118 
3119 static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio6 = {
3120  .master = &omap3xxx_l4_per_hwmod,
3121  .slave = &omap3xxx_gpio6_hwmod,
3122  .addr = omap3xxx_gpio6_addrs,
3123  .user = OCP_USER_MPU | OCP_USER_SDMA,
3124 };
3125 
3126 /* dma_system -> L3 */
3127 static struct omap_hwmod_ocp_if omap3xxx_dma_system__l3 = {
3128  .master = &omap3xxx_dma_system_hwmod,
3129  .slave = &omap3xxx_l3_main_hwmod,
3130  .clk = "core_l3_ick",
3131  .user = OCP_USER_MPU | OCP_USER_SDMA,
3132 };
3133 
3134 static struct omap_hwmod_addr_space omap3xxx_dma_system_addrs[] = {
3135  {
3136  .pa_start = 0x48056000,
3137  .pa_end = 0x48056fff,
3138  .flags = ADDR_TYPE_RT
3139  },
3140  { }
3141 };
3142 
3143 /* l4_cfg -> dma_system */
3144 static struct omap_hwmod_ocp_if omap3xxx_l4_core__dma_system = {
3145  .master = &omap3xxx_l4_core_hwmod,
3146  .slave = &omap3xxx_dma_system_hwmod,
3147  .clk = "core_l4_ick",
3148  .addr = omap3xxx_dma_system_addrs,
3149  .user = OCP_USER_MPU | OCP_USER_SDMA,
3150 };
3151 
3152 static struct omap_hwmod_addr_space omap3xxx_mcbsp1_addrs[] = {
3153  {
3154  .name = "mpu",
3155  .pa_start = 0x48074000,
3156  .pa_end = 0x480740ff,
3157  .flags = ADDR_TYPE_RT
3158  },
3159  { }
3160 };
3161 
3162 /* l4_core -> mcbsp1 */
3163 static struct omap_hwmod_ocp_if omap3xxx_l4_core__mcbsp1 = {
3164  .master = &omap3xxx_l4_core_hwmod,
3165  .slave = &omap3xxx_mcbsp1_hwmod,
3166  .clk = "mcbsp1_ick",
3167  .addr = omap3xxx_mcbsp1_addrs,
3168  .user = OCP_USER_MPU | OCP_USER_SDMA,
3169 };
3170 
3171 static struct omap_hwmod_addr_space omap3xxx_mcbsp2_addrs[] = {
3172  {
3173  .name = "mpu",
3174  .pa_start = 0x49022000,
3175  .pa_end = 0x490220ff,
3176  .flags = ADDR_TYPE_RT
3177  },
3178  { }
3179 };
3180 
3181 /* l4_per -> mcbsp2 */
3182 static struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp2 = {
3183  .master = &omap3xxx_l4_per_hwmod,
3184  .slave = &omap3xxx_mcbsp2_hwmod,
3185  .clk = "mcbsp2_ick",
3186  .addr = omap3xxx_mcbsp2_addrs,
3187  .user = OCP_USER_MPU | OCP_USER_SDMA,
3188 };
3189 
3190 static struct omap_hwmod_addr_space omap3xxx_mcbsp3_addrs[] = {
3191  {
3192  .name = "mpu",
3193  .pa_start = 0x49024000,
3194  .pa_end = 0x490240ff,
3195  .flags = ADDR_TYPE_RT
3196  },
3197  { }
3198 };
3199 
3200 /* l4_per -> mcbsp3 */
3201 static struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp3 = {
3202  .master = &omap3xxx_l4_per_hwmod,
3203  .slave = &omap3xxx_mcbsp3_hwmod,
3204  .clk = "mcbsp3_ick",
3205  .addr = omap3xxx_mcbsp3_addrs,
3206  .user = OCP_USER_MPU | OCP_USER_SDMA,
3207 };
3208 
3209 static struct omap_hwmod_addr_space omap3xxx_mcbsp4_addrs[] = {
3210  {
3211  .name = "mpu",
3212  .pa_start = 0x49026000,
3213  .pa_end = 0x490260ff,
3214  .flags = ADDR_TYPE_RT
3215  },
3216  { }
3217 };
3218 
3219 /* l4_per -> mcbsp4 */
3220 static struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp4 = {
3221  .master = &omap3xxx_l4_per_hwmod,
3222  .slave = &omap3xxx_mcbsp4_hwmod,
3223  .clk = "mcbsp4_ick",
3224  .addr = omap3xxx_mcbsp4_addrs,
3225  .user = OCP_USER_MPU | OCP_USER_SDMA,
3226 };
3227 
3228 static struct omap_hwmod_addr_space omap3xxx_mcbsp5_addrs[] = {
3229  {
3230  .name = "mpu",
3231  .pa_start = 0x48096000,
3232  .pa_end = 0x480960ff,
3233  .flags = ADDR_TYPE_RT
3234  },
3235  { }
3236 };
3237 
3238 /* l4_core -> mcbsp5 */
3239 static struct omap_hwmod_ocp_if omap3xxx_l4_core__mcbsp5 = {
3240  .master = &omap3xxx_l4_core_hwmod,
3241  .slave = &omap3xxx_mcbsp5_hwmod,
3242  .clk = "mcbsp5_ick",
3243  .addr = omap3xxx_mcbsp5_addrs,
3244  .user = OCP_USER_MPU | OCP_USER_SDMA,
3245 };
3246 
3247 static struct omap_hwmod_addr_space omap3xxx_mcbsp2_sidetone_addrs[] = {
3248  {
3249  .name = "sidetone",
3250  .pa_start = 0x49028000,
3251  .pa_end = 0x490280ff,
3252  .flags = ADDR_TYPE_RT
3253  },
3254  { }
3255 };
3256 
3257 /* l4_per -> mcbsp2_sidetone */
3258 static struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp2_sidetone = {
3259  .master = &omap3xxx_l4_per_hwmod,
3260  .slave = &omap3xxx_mcbsp2_sidetone_hwmod,
3261  .clk = "mcbsp2_ick",
3262  .addr = omap3xxx_mcbsp2_sidetone_addrs,
3263  .user = OCP_USER_MPU,
3264 };
3265 
3266 static struct omap_hwmod_addr_space omap3xxx_mcbsp3_sidetone_addrs[] = {
3267  {
3268  .name = "sidetone",
3269  .pa_start = 0x4902A000,
3270  .pa_end = 0x4902A0ff,
3271  .flags = ADDR_TYPE_RT
3272  },
3273  { }
3274 };
3275 
3276 /* l4_per -> mcbsp3_sidetone */
3277 static struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp3_sidetone = {
3278  .master = &omap3xxx_l4_per_hwmod,
3279  .slave = &omap3xxx_mcbsp3_sidetone_hwmod,
3280  .clk = "mcbsp3_ick",
3281  .addr = omap3xxx_mcbsp3_sidetone_addrs,
3282  .user = OCP_USER_MPU,
3283 };
3284 
3285 static struct omap_hwmod_addr_space omap3xxx_mailbox_addrs[] = {
3286  {
3287  .pa_start = 0x48094000,
3288  .pa_end = 0x480941ff,
3289  .flags = ADDR_TYPE_RT,
3290  },
3291  { }
3292 };
3293 
3294 /* l4_core -> mailbox */
3295 static struct omap_hwmod_ocp_if omap3xxx_l4_core__mailbox = {
3296  .master = &omap3xxx_l4_core_hwmod,
3297  .slave = &omap3xxx_mailbox_hwmod,
3298  .addr = omap3xxx_mailbox_addrs,
3299  .user = OCP_USER_MPU | OCP_USER_SDMA,
3300 };
3301 
3302 /* l4 core -> mcspi1 interface */
3303 static struct omap_hwmod_ocp_if omap34xx_l4_core__mcspi1 = {
3304  .master = &omap3xxx_l4_core_hwmod,
3305  .slave = &omap34xx_mcspi1,
3306  .clk = "mcspi1_ick",
3307  .addr = omap2_mcspi1_addr_space,
3308  .user = OCP_USER_MPU | OCP_USER_SDMA,
3309 };
3310 
3311 /* l4 core -> mcspi2 interface */
3312 static struct omap_hwmod_ocp_if omap34xx_l4_core__mcspi2 = {
3313  .master = &omap3xxx_l4_core_hwmod,
3314  .slave = &omap34xx_mcspi2,
3315  .clk = "mcspi2_ick",
3316  .addr = omap2_mcspi2_addr_space,
3317  .user = OCP_USER_MPU | OCP_USER_SDMA,
3318 };
3319 
3320 /* l4 core -> mcspi3 interface */
3321 static struct omap_hwmod_ocp_if omap34xx_l4_core__mcspi3 = {
3322  .master = &omap3xxx_l4_core_hwmod,
3323  .slave = &omap34xx_mcspi3,
3324  .clk = "mcspi3_ick",
3326  .user = OCP_USER_MPU | OCP_USER_SDMA,
3327 };
3328 
3329 /* l4 core -> mcspi4 interface */
3330 static struct omap_hwmod_addr_space omap34xx_mcspi4_addr_space[] = {
3331  {
3332  .pa_start = 0x480ba000,
3333  .pa_end = 0x480ba0ff,
3334  .flags = ADDR_TYPE_RT,
3335  },
3336  { }
3337 };
3338 
3339 static struct omap_hwmod_ocp_if omap34xx_l4_core__mcspi4 = {
3340  .master = &omap3xxx_l4_core_hwmod,
3341  .slave = &omap34xx_mcspi4,
3342  .clk = "mcspi4_ick",
3343  .addr = omap34xx_mcspi4_addr_space,
3344  .user = OCP_USER_MPU | OCP_USER_SDMA,
3345 };
3346 
3347 static struct omap_hwmod_ocp_if omap3xxx_usb_host_hs__l3_main_2 = {
3348  .master = &omap3xxx_usb_host_hs_hwmod,
3349  .slave = &omap3xxx_l3_main_hwmod,
3350  .clk = "core_l3_ick",
3351  .user = OCP_USER_MPU,
3352 };
3353 
3354 static struct omap_hwmod_addr_space omap3xxx_usb_host_hs_addrs[] = {
3355  {
3356  .name = "uhh",
3357  .pa_start = 0x48064000,
3358  .pa_end = 0x480643ff,
3359  .flags = ADDR_TYPE_RT
3360  },
3361  {
3362  .name = "ohci",
3363  .pa_start = 0x48064400,
3364  .pa_end = 0x480647ff,
3365  },
3366  {
3367  .name = "ehci",
3368  .pa_start = 0x48064800,
3369  .pa_end = 0x48064cff,
3370  },
3371  {}
3372 };
3373 
3374 static struct omap_hwmod_ocp_if omap3xxx_l4_core__usb_host_hs = {
3375  .master = &omap3xxx_l4_core_hwmod,
3376  .slave = &omap3xxx_usb_host_hs_hwmod,
3377  .clk = "usbhost_ick",
3378  .addr = omap3xxx_usb_host_hs_addrs,
3379  .user = OCP_USER_MPU | OCP_USER_SDMA,
3380 };
3381 
3382 static struct omap_hwmod_addr_space omap3xxx_usb_tll_hs_addrs[] = {
3383  {
3384  .name = "tll",
3385  .pa_start = 0x48062000,
3386  .pa_end = 0x48062fff,
3387  .flags = ADDR_TYPE_RT
3388  },
3389  {}
3390 };
3391 
3392 static struct omap_hwmod_ocp_if omap3xxx_l4_core__usb_tll_hs = {
3393  .master = &omap3xxx_l4_core_hwmod,
3394  .slave = &omap3xxx_usb_tll_hs_hwmod,
3395  .clk = "usbtll_ick",
3396  .addr = omap3xxx_usb_tll_hs_addrs,
3397  .user = OCP_USER_MPU | OCP_USER_SDMA,
3398 };
3399 
3400 /* l4_core -> hdq1w interface */
3401 static struct omap_hwmod_ocp_if omap3xxx_l4_core__hdq1w = {
3402  .master = &omap3xxx_l4_core_hwmod,
3403  .slave = &omap3xxx_hdq1w_hwmod,
3404  .clk = "hdq_ick",
3405  .addr = omap2_hdq1w_addr_space,
3406  .user = OCP_USER_MPU | OCP_USER_SDMA,
3408 };
3409 
3410 /* l4_wkup -> 32ksync_counter */
3411 static struct omap_hwmod_addr_space omap3xxx_counter_32k_addrs[] = {
3412  {
3413  .pa_start = 0x48320000,
3414  .pa_end = 0x4832001f,
3415  .flags = ADDR_TYPE_RT
3416  },
3417  { }
3418 };
3419 
3420 static struct omap_hwmod_addr_space omap3xxx_gpmc_addrs[] = {
3421  {
3422  .pa_start = 0x6e000000,
3423  .pa_end = 0x6e000fff,
3424  .flags = ADDR_TYPE_RT
3425  },
3426  { }
3427 };
3428 
3429 static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__counter_32k = {
3430  .master = &omap3xxx_l4_wkup_hwmod,
3431  .slave = &omap3xxx_counter_32k_hwmod,
3432  .clk = "omap_32ksync_ick",
3433  .addr = omap3xxx_counter_32k_addrs,
3434  .user = OCP_USER_MPU | OCP_USER_SDMA,
3435 };
3436 
3437 /* am35xx has Davinci MDIO & EMAC */
3438 static struct omap_hwmod_class am35xx_mdio_class = {
3439  .name = "davinci_mdio",
3440 };
3441 
3442 static struct omap_hwmod am35xx_mdio_hwmod = {
3443  .name = "davinci_mdio",
3444  .class = &am35xx_mdio_class,
3445  .flags = HWMOD_NO_IDLEST,
3446 };
3447 
3448 /*
3449  * XXX Should be connected to an IPSS hwmod, not the L3 directly;
3450  * but this will probably require some additional hwmod core support,
3451  * so is left as a future to-do item.
3452  */
3453 static struct omap_hwmod_ocp_if am35xx_mdio__l3 = {
3454  .master = &am35xx_mdio_hwmod,
3455  .slave = &omap3xxx_l3_main_hwmod,
3456  .clk = "emac_fck",
3457  .user = OCP_USER_MPU,
3458 };
3459 
3460 static struct omap_hwmod_addr_space am35xx_mdio_addrs[] = {
3461  {
3462  .pa_start = AM35XX_IPSS_MDIO_BASE,
3463  .pa_end = AM35XX_IPSS_MDIO_BASE + SZ_4K - 1,
3464  .flags = ADDR_TYPE_RT,
3465  },
3466  { }
3467 };
3468 
3469 /* l4_core -> davinci mdio */
3470 /*
3471  * XXX Should be connected to an IPSS hwmod, not the L4_CORE directly;
3472  * but this will probably require some additional hwmod core support,
3473  * so is left as a future to-do item.
3474  */
3475 static struct omap_hwmod_ocp_if am35xx_l4_core__mdio = {
3476  .master = &omap3xxx_l4_core_hwmod,
3477  .slave = &am35xx_mdio_hwmod,
3478  .clk = "emac_fck",
3479  .addr = am35xx_mdio_addrs,
3480  .user = OCP_USER_MPU,
3481 };
3482 
3483 static struct omap_hwmod_irq_info am35xx_emac_mpu_irqs[] = {
3484  { .name = "rxthresh", .irq = 67 + OMAP_INTC_START, },
3485  { .name = "rx_pulse", .irq = 68 + OMAP_INTC_START, },
3486  { .name = "tx_pulse", .irq = 69 + OMAP_INTC_START },
3487  { .name = "misc_pulse", .irq = 70 + OMAP_INTC_START },
3488  { .irq = -1 },
3489 };
3490 
3491 static struct omap_hwmod_class am35xx_emac_class = {
3492  .name = "davinci_emac",
3493 };
3494 
3495 static struct omap_hwmod am35xx_emac_hwmod = {
3496  .name = "davinci_emac",
3497  .mpu_irqs = am35xx_emac_mpu_irqs,
3498  .class = &am35xx_emac_class,
3499  .flags = HWMOD_NO_IDLEST,
3500 };
3501 
3502 /* l3_core -> davinci emac interface */
3503 /*
3504  * XXX Should be connected to an IPSS hwmod, not the L3 directly;
3505  * but this will probably require some additional hwmod core support,
3506  * so is left as a future to-do item.
3507  */
3508 static struct omap_hwmod_ocp_if am35xx_emac__l3 = {
3509  .master = &am35xx_emac_hwmod,
3510  .slave = &omap3xxx_l3_main_hwmod,
3511  .clk = "emac_ick",
3512  .user = OCP_USER_MPU,
3513 };
3514 
3515 static struct omap_hwmod_addr_space am35xx_emac_addrs[] = {
3516  {
3517  .pa_start = AM35XX_IPSS_EMAC_BASE,
3518  .pa_end = AM35XX_IPSS_EMAC_BASE + 0x30000 - 1,
3519  .flags = ADDR_TYPE_RT,
3520  },
3521  { }
3522 };
3523 
3524 /* l4_core -> davinci emac */
3525 /*
3526  * XXX Should be connected to an IPSS hwmod, not the L4_CORE directly;
3527  * but this will probably require some additional hwmod core support,
3528  * so is left as a future to-do item.
3529  */
3530 static struct omap_hwmod_ocp_if am35xx_l4_core__emac = {
3531  .master = &omap3xxx_l4_core_hwmod,
3532  .slave = &am35xx_emac_hwmod,
3533  .clk = "emac_ick",
3534  .addr = am35xx_emac_addrs,
3535  .user = OCP_USER_MPU,
3536 };
3537 
3538 static struct omap_hwmod_ocp_if omap3xxx_l3_main__gpmc = {
3539  .master = &omap3xxx_l3_main_hwmod,
3540  .slave = &omap3xxx_gpmc_hwmod,
3541  .clk = "core_l3_ick",
3542  .addr = omap3xxx_gpmc_addrs,
3543  .user = OCP_USER_MPU | OCP_USER_SDMA,
3544 };
3545 
3546 static struct omap_hwmod_ocp_if *omap3xxx_hwmod_ocp_ifs[] __initdata = {
3547  &omap3xxx_l3_main__l4_core,
3548  &omap3xxx_l3_main__l4_per,
3549  &omap3xxx_mpu__l3_main,
3550  &omap3xxx_l3_main__l4_debugss,
3551  &omap3xxx_l4_core__l4_wkup,
3552  &omap3xxx_l4_core__mmc3,
3553  &omap3_l4_core__uart1,
3554  &omap3_l4_core__uart2,
3555  &omap3_l4_per__uart3,
3556  &omap3_l4_core__i2c1,
3557  &omap3_l4_core__i2c2,
3558  &omap3_l4_core__i2c3,
3559  &omap3xxx_l4_wkup__l4_sec,
3560  &omap3xxx_l4_wkup__timer1,
3561  &omap3xxx_l4_per__timer2,
3562  &omap3xxx_l4_per__timer3,
3563  &omap3xxx_l4_per__timer4,
3564  &omap3xxx_l4_per__timer5,
3565  &omap3xxx_l4_per__timer6,
3566  &omap3xxx_l4_per__timer7,
3567  &omap3xxx_l4_per__timer8,
3568  &omap3xxx_l4_per__timer9,
3569  &omap3xxx_l4_core__timer10,
3570  &omap3xxx_l4_core__timer11,
3571  &omap3xxx_l4_wkup__wd_timer2,
3572  &omap3xxx_l4_wkup__gpio1,
3573  &omap3xxx_l4_per__gpio2,
3574  &omap3xxx_l4_per__gpio3,
3575  &omap3xxx_l4_per__gpio4,
3576  &omap3xxx_l4_per__gpio5,
3577  &omap3xxx_l4_per__gpio6,
3578  &omap3xxx_dma_system__l3,
3579  &omap3xxx_l4_core__dma_system,
3580  &omap3xxx_l4_core__mcbsp1,
3581  &omap3xxx_l4_per__mcbsp2,
3582  &omap3xxx_l4_per__mcbsp3,
3583  &omap3xxx_l4_per__mcbsp4,
3584  &omap3xxx_l4_core__mcbsp5,
3585  &omap3xxx_l4_per__mcbsp2_sidetone,
3586  &omap3xxx_l4_per__mcbsp3_sidetone,
3587  &omap34xx_l4_core__mcspi1,
3588  &omap34xx_l4_core__mcspi2,
3589  &omap34xx_l4_core__mcspi3,
3590  &omap34xx_l4_core__mcspi4,
3591  &omap3xxx_l4_wkup__counter_32k,
3592  &omap3xxx_l3_main__gpmc,
3593  NULL,
3594 };
3595 
3596 /* GP-only hwmod links */
3597 static struct omap_hwmod_ocp_if *omap3xxx_gp_hwmod_ocp_ifs[] __initdata = {
3598  &omap3xxx_l4_sec__timer12,
3599  NULL
3600 };
3601 
3602 /* 3430ES1-only hwmod links */
3603 static struct omap_hwmod_ocp_if *omap3430es1_hwmod_ocp_ifs[] __initdata = {
3604  &omap3430es1_dss__l3,
3605  &omap3430es1_l4_core__dss,
3606  NULL
3607 };
3608 
3609 /* 3430ES2+-only hwmod links */
3610 static struct omap_hwmod_ocp_if *omap3430es2plus_hwmod_ocp_ifs[] __initdata = {
3611  &omap3xxx_dss__l3,
3612  &omap3xxx_l4_core__dss,
3613  &omap3xxx_usbhsotg__l3,
3614  &omap3xxx_l4_core__usbhsotg,
3615  &omap3xxx_usb_host_hs__l3_main_2,
3616  &omap3xxx_l4_core__usb_host_hs,
3617  &omap3xxx_l4_core__usb_tll_hs,
3618  NULL
3619 };
3620 
3621 /* <= 3430ES3-only hwmod links */
3622 static struct omap_hwmod_ocp_if *omap3430_pre_es3_hwmod_ocp_ifs[] __initdata = {
3623  &omap3xxx_l4_core__pre_es3_mmc1,
3624  &omap3xxx_l4_core__pre_es3_mmc2,
3625  NULL
3626 };
3627 
3628 /* 3430ES3+-only hwmod links */
3629 static struct omap_hwmod_ocp_if *omap3430_es3plus_hwmod_ocp_ifs[] __initdata = {
3630  &omap3xxx_l4_core__es3plus_mmc1,
3631  &omap3xxx_l4_core__es3plus_mmc2,
3632  NULL
3633 };
3634 
3635 /* 34xx-only hwmod links (all ES revisions) */
3636 static struct omap_hwmod_ocp_if *omap34xx_hwmod_ocp_ifs[] __initdata = {
3637  &omap3xxx_l3__iva,
3638  &omap34xx_l4_core__sr1,
3639  &omap34xx_l4_core__sr2,
3640  &omap3xxx_l4_core__mailbox,
3641  &omap3xxx_l4_core__hdq1w,
3642  &omap3xxx_sad2d__l3,
3643  &omap3xxx_l4_core__mmu_isp,
3644 #ifdef CONFIG_OMAP_IOMMU_IVA2
3645  &omap3xxx_l3_main__mmu_iva,
3646 #endif
3647  NULL
3648 };
3649 
3650 /* 36xx-only hwmod links (all ES revisions) */
3651 static struct omap_hwmod_ocp_if *omap36xx_hwmod_ocp_ifs[] __initdata = {
3652  &omap3xxx_l3__iva,
3653  &omap36xx_l4_per__uart4,
3654  &omap3xxx_dss__l3,
3655  &omap3xxx_l4_core__dss,
3656  &omap36xx_l4_core__sr1,
3657  &omap36xx_l4_core__sr2,
3658  &omap3xxx_usbhsotg__l3,
3659  &omap3xxx_l4_core__usbhsotg,
3660  &omap3xxx_l4_core__mailbox,
3661  &omap3xxx_usb_host_hs__l3_main_2,
3662  &omap3xxx_l4_core__usb_host_hs,
3663  &omap3xxx_l4_core__usb_tll_hs,
3664  &omap3xxx_l4_core__es3plus_mmc1,
3665  &omap3xxx_l4_core__es3plus_mmc2,
3666  &omap3xxx_l4_core__hdq1w,
3667  &omap3xxx_sad2d__l3,
3668  &omap3xxx_l4_core__mmu_isp,
3669 #ifdef CONFIG_OMAP_IOMMU_IVA2
3670  &omap3xxx_l3_main__mmu_iva,
3671 #endif
3672  NULL
3673 };
3674 
3675 static struct omap_hwmod_ocp_if *am35xx_hwmod_ocp_ifs[] __initdata = {
3676  &omap3xxx_dss__l3,
3677  &omap3xxx_l4_core__dss,
3678  &am35xx_usbhsotg__l3,
3679  &am35xx_l4_core__usbhsotg,
3680  &am35xx_l4_core__uart4,
3681  &omap3xxx_usb_host_hs__l3_main_2,
3682  &omap3xxx_l4_core__usb_host_hs,
3683  &omap3xxx_l4_core__usb_tll_hs,
3684  &omap3xxx_l4_core__es3plus_mmc1,
3685  &omap3xxx_l4_core__es3plus_mmc2,
3686  &omap3xxx_l4_core__hdq1w,
3687  &am35xx_mdio__l3,
3688  &am35xx_l4_core__mdio,
3689  &am35xx_emac__l3,
3690  &am35xx_l4_core__emac,
3691  NULL
3692 };
3693 
3694 static struct omap_hwmod_ocp_if *omap3xxx_dss_hwmod_ocp_ifs[] __initdata = {
3695  &omap3xxx_l4_core__dss_dispc,
3696  &omap3xxx_l4_core__dss_dsi1,
3697  &omap3xxx_l4_core__dss_rfbi,
3698  &omap3xxx_l4_core__dss_venc,
3699  NULL
3700 };
3701 
3703 {
3704  int r;
3705  struct omap_hwmod_ocp_if **h = NULL;
3706  unsigned int rev;
3707 
3708  omap_hwmod_init();
3709 
3710  /* Register hwmod links common to all OMAP3 */
3711  r = omap_hwmod_register_links(omap3xxx_hwmod_ocp_ifs);
3712  if (r < 0)
3713  return r;
3714 
3715  /* Register GP-only hwmod links. */
3716  if (omap_type() == OMAP2_DEVICE_TYPE_GP) {
3717  r = omap_hwmod_register_links(omap3xxx_gp_hwmod_ocp_ifs);
3718  if (r < 0)
3719  return r;
3720  }
3721 
3722  rev = omap_rev();
3723 
3724  /*
3725  * Register hwmod links common to individual OMAP3 families, all
3726  * silicon revisions (e.g., 34xx, or AM3505/3517, or 36xx)
3727  * All possible revisions should be included in this conditional.
3728  */
3729  if (rev == OMAP3430_REV_ES1_0 || rev == OMAP3430_REV_ES2_0 ||
3730  rev == OMAP3430_REV_ES2_1 || rev == OMAP3430_REV_ES3_0 ||
3731  rev == OMAP3430_REV_ES3_1 || rev == OMAP3430_REV_ES3_1_2) {
3732  h = omap34xx_hwmod_ocp_ifs;
3733  } else if (rev == AM35XX_REV_ES1_0 || rev == AM35XX_REV_ES1_1) {
3734  h = am35xx_hwmod_ocp_ifs;
3735  } else if (rev == OMAP3630_REV_ES1_0 || rev == OMAP3630_REV_ES1_1 ||
3736  rev == OMAP3630_REV_ES1_2) {
3737  h = omap36xx_hwmod_ocp_ifs;
3738  } else {
3739  WARN(1, "OMAP3 hwmod family init: unknown chip type\n");
3740  return -EINVAL;
3741  }
3742 
3744  if (r < 0)
3745  return r;
3746 
3747  /*
3748  * Register hwmod links specific to certain ES levels of a
3749  * particular family of silicon (e.g., 34xx ES1.0)
3750  */
3751  h = NULL;
3752  if (rev == OMAP3430_REV_ES1_0) {
3753  h = omap3430es1_hwmod_ocp_ifs;
3754  } else if (rev == OMAP3430_REV_ES2_0 || rev == OMAP3430_REV_ES2_1 ||
3755  rev == OMAP3430_REV_ES3_0 || rev == OMAP3430_REV_ES3_1 ||
3756  rev == OMAP3430_REV_ES3_1_2) {
3757  h = omap3430es2plus_hwmod_ocp_ifs;
3758  }
3759 
3760  if (h) {
3762  if (r < 0)
3763  return r;
3764  }
3765 
3766  h = NULL;
3767  if (rev == OMAP3430_REV_ES1_0 || rev == OMAP3430_REV_ES2_0 ||
3768  rev == OMAP3430_REV_ES2_1) {
3769  h = omap3430_pre_es3_hwmod_ocp_ifs;
3770  } else if (rev == OMAP3430_REV_ES3_0 || rev == OMAP3430_REV_ES3_1 ||
3771  rev == OMAP3430_REV_ES3_1_2) {
3772  h = omap3430_es3plus_hwmod_ocp_ifs;
3773  }
3774 
3775  if (h)
3777  if (r < 0)
3778  return r;
3779 
3780  /*
3781  * DSS code presumes that dss_core hwmod is handled first,
3782  * _before_ any other DSS related hwmods so register common
3783  * DSS hwmod links last to ensure that dss_core is already
3784  * registered. Otherwise some change things may happen, for
3785  * ex. if dispc is handled before dss_core and DSS is enabled
3786  * in bootloader DISPC will be reset with outputs enabled
3787  * which sometimes leads to unrecoverable L3 error. XXX The
3788  * long-term fix to this is to ensure hwmods are set up in
3789  * dependency order in the hwmod core code.
3790  */
3791  r = omap_hwmod_register_links(omap3xxx_dss_hwmod_ocp_ifs);
3792 
3793  return r;
3794 }