]> git.ipfire.org Git - thirdparty/kernel/linux.git/blob - arch/arm/mach-omap2/omap_hwmod_54xx_data.c
Merge remote-tracking branch 'drm/drm-next' into drm-misc-next
[thirdparty/kernel/linux.git] / arch / arm / mach-omap2 / omap_hwmod_54xx_data.c
1 /*
2 * Hardware modules present on the OMAP54xx chips
3 *
4 * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com
5 *
6 * Paul Walmsley
7 * Benoit Cousson
8 *
9 * This file is automatically generated from the OMAP hardware databases.
10 * We respectfully ask that any modifications to this file be coordinated
11 * with the public linux-omap@vger.kernel.org mailing list and the
12 * authors above to ensure that the autogeneration scripts are kept
13 * up-to-date with the file contents.
14 *
15 * This program is free software; you can redistribute it and/or modify
16 * it under the terms of the GNU General Public License version 2 as
17 * published by the Free Software Foundation.
18 */
19
20 #include <linux/io.h>
21 #include <linux/platform_data/hsmmc-omap.h>
22 #include <linux/power/smartreflex.h>
23 #include <linux/i2c-omap.h>
24
25 #include <linux/omap-dma.h>
26
27 #include "omap_hwmod.h"
28 #include "omap_hwmod_common_data.h"
29 #include "cm1_54xx.h"
30 #include "cm2_54xx.h"
31 #include "prm54xx.h"
32 #include "i2c.h"
33 #include "wd_timer.h"
34
35 /* Base offset for all OMAP5 interrupts external to MPUSS */
36 #define OMAP54XX_IRQ_GIC_START 32
37
38 /* Base offset for all OMAP5 dma requests */
39 #define OMAP54XX_DMA_REQ_START 1
40
41
42 /*
43 * IP blocks
44 */
45
46 /*
47 * 'dmm' class
48 * instance(s): dmm
49 */
50 static struct omap_hwmod_class omap54xx_dmm_hwmod_class = {
51 .name = "dmm",
52 };
53
54 /* dmm */
55 static struct omap_hwmod omap54xx_dmm_hwmod = {
56 .name = "dmm",
57 .class = &omap54xx_dmm_hwmod_class,
58 .clkdm_name = "emif_clkdm",
59 .prcm = {
60 .omap4 = {
61 .clkctrl_offs = OMAP54XX_CM_EMIF_DMM_CLKCTRL_OFFSET,
62 .context_offs = OMAP54XX_RM_EMIF_DMM_CONTEXT_OFFSET,
63 },
64 },
65 };
66
67 /*
68 * 'l3' class
69 * instance(s): l3_instr, l3_main_1, l3_main_2, l3_main_3
70 */
71 static struct omap_hwmod_class omap54xx_l3_hwmod_class = {
72 .name = "l3",
73 };
74
75 /* l3_instr */
76 static struct omap_hwmod omap54xx_l3_instr_hwmod = {
77 .name = "l3_instr",
78 .class = &omap54xx_l3_hwmod_class,
79 .clkdm_name = "l3instr_clkdm",
80 .prcm = {
81 .omap4 = {
82 .clkctrl_offs = OMAP54XX_CM_L3INSTR_L3_INSTR_CLKCTRL_OFFSET,
83 .context_offs = OMAP54XX_RM_L3INSTR_L3_INSTR_CONTEXT_OFFSET,
84 .modulemode = MODULEMODE_HWCTRL,
85 },
86 },
87 };
88
89 /* l3_main_1 */
90 static struct omap_hwmod omap54xx_l3_main_1_hwmod = {
91 .name = "l3_main_1",
92 .class = &omap54xx_l3_hwmod_class,
93 .clkdm_name = "l3main1_clkdm",
94 .prcm = {
95 .omap4 = {
96 .clkctrl_offs = OMAP54XX_CM_L3MAIN1_L3_MAIN_1_CLKCTRL_OFFSET,
97 .context_offs = OMAP54XX_RM_L3MAIN1_L3_MAIN_1_CONTEXT_OFFSET,
98 },
99 },
100 };
101
102 /* l3_main_2 */
103 static struct omap_hwmod omap54xx_l3_main_2_hwmod = {
104 .name = "l3_main_2",
105 .class = &omap54xx_l3_hwmod_class,
106 .clkdm_name = "l3main2_clkdm",
107 .prcm = {
108 .omap4 = {
109 .clkctrl_offs = OMAP54XX_CM_L3MAIN2_L3_MAIN_2_CLKCTRL_OFFSET,
110 .context_offs = OMAP54XX_RM_L3MAIN2_L3_MAIN_2_CONTEXT_OFFSET,
111 },
112 },
113 };
114
115 /* l3_main_3 */
116 static struct omap_hwmod omap54xx_l3_main_3_hwmod = {
117 .name = "l3_main_3",
118 .class = &omap54xx_l3_hwmod_class,
119 .clkdm_name = "l3instr_clkdm",
120 .prcm = {
121 .omap4 = {
122 .clkctrl_offs = OMAP54XX_CM_L3INSTR_L3_MAIN_3_CLKCTRL_OFFSET,
123 .context_offs = OMAP54XX_RM_L3INSTR_L3_MAIN_3_CONTEXT_OFFSET,
124 .modulemode = MODULEMODE_HWCTRL,
125 },
126 },
127 };
128
129 /*
130 * 'l4' class
131 * instance(s): l4_abe, l4_cfg, l4_per, l4_wkup
132 */
133 static struct omap_hwmod_class omap54xx_l4_hwmod_class = {
134 .name = "l4",
135 };
136
137 /* l4_abe */
138 static struct omap_hwmod omap54xx_l4_abe_hwmod = {
139 .name = "l4_abe",
140 .class = &omap54xx_l4_hwmod_class,
141 .clkdm_name = "abe_clkdm",
142 .prcm = {
143 .omap4 = {
144 .clkctrl_offs = OMAP54XX_CM_ABE_L4_ABE_CLKCTRL_OFFSET,
145 .flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
146 },
147 },
148 };
149
150 /* l4_cfg */
151 static struct omap_hwmod omap54xx_l4_cfg_hwmod = {
152 .name = "l4_cfg",
153 .class = &omap54xx_l4_hwmod_class,
154 .clkdm_name = "l4cfg_clkdm",
155 .prcm = {
156 .omap4 = {
157 .clkctrl_offs = OMAP54XX_CM_L4CFG_L4_CFG_CLKCTRL_OFFSET,
158 .context_offs = OMAP54XX_RM_L4CFG_L4_CFG_CONTEXT_OFFSET,
159 },
160 },
161 };
162
163 /* l4_per */
164 static struct omap_hwmod omap54xx_l4_per_hwmod = {
165 .name = "l4_per",
166 .class = &omap54xx_l4_hwmod_class,
167 .clkdm_name = "l4per_clkdm",
168 .prcm = {
169 .omap4 = {
170 .clkctrl_offs = OMAP54XX_CM_L4PER_L4_PER_CLKCTRL_OFFSET,
171 .context_offs = OMAP54XX_RM_L4PER_L4_PER_CONTEXT_OFFSET,
172 },
173 },
174 };
175
176 /* l4_wkup */
177 static struct omap_hwmod omap54xx_l4_wkup_hwmod = {
178 .name = "l4_wkup",
179 .class = &omap54xx_l4_hwmod_class,
180 .clkdm_name = "wkupaon_clkdm",
181 .prcm = {
182 .omap4 = {
183 .clkctrl_offs = OMAP54XX_CM_WKUPAON_L4_WKUP_CLKCTRL_OFFSET,
184 .context_offs = OMAP54XX_RM_WKUPAON_L4_WKUP_CONTEXT_OFFSET,
185 },
186 },
187 };
188
189 /*
190 * 'mpu_bus' class
191 * instance(s): mpu_private
192 */
193 static struct omap_hwmod_class omap54xx_mpu_bus_hwmod_class = {
194 .name = "mpu_bus",
195 };
196
197 /* mpu_private */
198 static struct omap_hwmod omap54xx_mpu_private_hwmod = {
199 .name = "mpu_private",
200 .class = &omap54xx_mpu_bus_hwmod_class,
201 .clkdm_name = "mpu_clkdm",
202 .prcm = {
203 .omap4 = {
204 .flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
205 },
206 },
207 };
208
209 /*
210 * 'counter' class
211 * 32-bit ordinary counter, clocked by the falling edge of the 32 khz clock
212 */
213
214 static struct omap_hwmod_class_sysconfig omap54xx_counter_sysc = {
215 .rev_offs = 0x0000,
216 .sysc_offs = 0x0010,
217 .sysc_flags = SYSC_HAS_SIDLEMODE,
218 .idlemodes = (SIDLE_FORCE | SIDLE_NO),
219 .sysc_fields = &omap_hwmod_sysc_type1,
220 };
221
222 static struct omap_hwmod_class omap54xx_counter_hwmod_class = {
223 .name = "counter",
224 .sysc = &omap54xx_counter_sysc,
225 };
226
227 /* counter_32k */
228 static struct omap_hwmod omap54xx_counter_32k_hwmod = {
229 .name = "counter_32k",
230 .class = &omap54xx_counter_hwmod_class,
231 .clkdm_name = "wkupaon_clkdm",
232 .flags = HWMOD_SWSUP_SIDLE,
233 .main_clk = "wkupaon_iclk_mux",
234 .prcm = {
235 .omap4 = {
236 .clkctrl_offs = OMAP54XX_CM_WKUPAON_COUNTER_32K_CLKCTRL_OFFSET,
237 .context_offs = OMAP54XX_RM_WKUPAON_COUNTER_32K_CONTEXT_OFFSET,
238 },
239 },
240 };
241
242 /*
243 * 'dma' class
244 * dma controller for data exchange between memory to memory (i.e. internal or
245 * external memory) and gp peripherals to memory or memory to gp peripherals
246 */
247
248 static struct omap_hwmod_class_sysconfig omap54xx_dma_sysc = {
249 .rev_offs = 0x0000,
250 .sysc_offs = 0x002c,
251 .syss_offs = 0x0028,
252 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
253 SYSC_HAS_EMUFREE | SYSC_HAS_MIDLEMODE |
254 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
255 SYSS_HAS_RESET_STATUS),
256 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
257 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
258 .sysc_fields = &omap_hwmod_sysc_type1,
259 };
260
261 static struct omap_hwmod_class omap54xx_dma_hwmod_class = {
262 .name = "dma",
263 .sysc = &omap54xx_dma_sysc,
264 };
265
266 /* dma dev_attr */
267 static struct omap_dma_dev_attr dma_dev_attr = {
268 .dev_caps = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY |
269 IS_CSSA_32 | IS_CDSA_32 | IS_RW_PRIORITY,
270 .lch_count = 32,
271 };
272
273 /* dma_system */
274 static struct omap_hwmod omap54xx_dma_system_hwmod = {
275 .name = "dma_system",
276 .class = &omap54xx_dma_hwmod_class,
277 .clkdm_name = "dma_clkdm",
278 .main_clk = "l3_iclk_div",
279 .prcm = {
280 .omap4 = {
281 .clkctrl_offs = OMAP54XX_CM_DMA_DMA_SYSTEM_CLKCTRL_OFFSET,
282 .context_offs = OMAP54XX_RM_DMA_DMA_SYSTEM_CONTEXT_OFFSET,
283 },
284 },
285 .dev_attr = &dma_dev_attr,
286 };
287
288 /*
289 * 'dmic' class
290 * digital microphone controller
291 */
292
293 static struct omap_hwmod_class_sysconfig omap54xx_dmic_sysc = {
294 .rev_offs = 0x0000,
295 .sysc_offs = 0x0010,
296 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
297 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
298 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
299 SIDLE_SMART_WKUP),
300 .sysc_fields = &omap_hwmod_sysc_type2,
301 };
302
303 static struct omap_hwmod_class omap54xx_dmic_hwmod_class = {
304 .name = "dmic",
305 .sysc = &omap54xx_dmic_sysc,
306 };
307
308 /* dmic */
309 static struct omap_hwmod omap54xx_dmic_hwmod = {
310 .name = "dmic",
311 .class = &omap54xx_dmic_hwmod_class,
312 .clkdm_name = "abe_clkdm",
313 .main_clk = "dmic_gfclk",
314 .prcm = {
315 .omap4 = {
316 .clkctrl_offs = OMAP54XX_CM_ABE_DMIC_CLKCTRL_OFFSET,
317 .context_offs = OMAP54XX_RM_ABE_DMIC_CONTEXT_OFFSET,
318 .modulemode = MODULEMODE_SWCTRL,
319 },
320 },
321 };
322
323 /*
324 * 'dss' class
325 * display sub-system
326 */
327 static struct omap_hwmod_class_sysconfig omap54xx_dss_sysc = {
328 .rev_offs = 0x0000,
329 .syss_offs = 0x0014,
330 .sysc_flags = SYSS_HAS_RESET_STATUS,
331 };
332
333 static struct omap_hwmod_class omap54xx_dss_hwmod_class = {
334 .name = "dss",
335 .sysc = &omap54xx_dss_sysc,
336 .reset = omap_dss_reset,
337 };
338
339 /* dss */
340 static struct omap_hwmod_opt_clk dss_opt_clks[] = {
341 { .role = "32khz_clk", .clk = "dss_32khz_clk" },
342 { .role = "sys_clk", .clk = "dss_sys_clk" },
343 { .role = "hdmi_clk", .clk = "dss_48mhz_clk" },
344 };
345
346 static struct omap_hwmod omap54xx_dss_hwmod = {
347 .name = "dss_core",
348 .class = &omap54xx_dss_hwmod_class,
349 .clkdm_name = "dss_clkdm",
350 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
351 .main_clk = "dss_dss_clk",
352 .prcm = {
353 .omap4 = {
354 .clkctrl_offs = OMAP54XX_CM_DSS_DSS_CLKCTRL_OFFSET,
355 .context_offs = OMAP54XX_RM_DSS_DSS_CONTEXT_OFFSET,
356 .modulemode = MODULEMODE_SWCTRL,
357 },
358 },
359 .opt_clks = dss_opt_clks,
360 .opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
361 };
362
363 /*
364 * 'dispc' class
365 * display controller
366 */
367
368 static struct omap_hwmod_class_sysconfig omap54xx_dispc_sysc = {
369 .rev_offs = 0x0000,
370 .sysc_offs = 0x0010,
371 .syss_offs = 0x0014,
372 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
373 SYSC_HAS_ENAWAKEUP | SYSC_HAS_MIDLEMODE |
374 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
375 SYSS_HAS_RESET_STATUS),
376 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
377 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
378 .sysc_fields = &omap_hwmod_sysc_type1,
379 };
380
381 static struct omap_hwmod_class omap54xx_dispc_hwmod_class = {
382 .name = "dispc",
383 .sysc = &omap54xx_dispc_sysc,
384 };
385
386 /* dss_dispc */
387 static struct omap_hwmod_opt_clk dss_dispc_opt_clks[] = {
388 { .role = "sys_clk", .clk = "dss_sys_clk" },
389 };
390
391 /* dss_dispc dev_attr */
392 static struct omap_dss_dispc_dev_attr dss_dispc_dev_attr = {
393 .has_framedonetv_irq = 1,
394 .manager_count = 4,
395 };
396
397 static struct omap_hwmod omap54xx_dss_dispc_hwmod = {
398 .name = "dss_dispc",
399 .class = &omap54xx_dispc_hwmod_class,
400 .clkdm_name = "dss_clkdm",
401 .main_clk = "dss_dss_clk",
402 .prcm = {
403 .omap4 = {
404 .clkctrl_offs = OMAP54XX_CM_DSS_DSS_CLKCTRL_OFFSET,
405 .flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
406 },
407 },
408 .opt_clks = dss_dispc_opt_clks,
409 .opt_clks_cnt = ARRAY_SIZE(dss_dispc_opt_clks),
410 .dev_attr = &dss_dispc_dev_attr,
411 .parent_hwmod = &omap54xx_dss_hwmod,
412 };
413
414 /*
415 * 'dsi1' class
416 * display serial interface controller
417 */
418
419 static struct omap_hwmod_class_sysconfig omap54xx_dsi1_sysc = {
420 .rev_offs = 0x0000,
421 .sysc_offs = 0x0010,
422 .syss_offs = 0x0014,
423 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
424 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
425 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
426 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
427 .sysc_fields = &omap_hwmod_sysc_type1,
428 };
429
430 static struct omap_hwmod_class omap54xx_dsi1_hwmod_class = {
431 .name = "dsi1",
432 .sysc = &omap54xx_dsi1_sysc,
433 };
434
435 /* dss_dsi1_a */
436 static struct omap_hwmod_opt_clk dss_dsi1_a_opt_clks[] = {
437 { .role = "sys_clk", .clk = "dss_sys_clk" },
438 };
439
440 static struct omap_hwmod omap54xx_dss_dsi1_a_hwmod = {
441 .name = "dss_dsi1",
442 .class = &omap54xx_dsi1_hwmod_class,
443 .clkdm_name = "dss_clkdm",
444 .main_clk = "dss_dss_clk",
445 .prcm = {
446 .omap4 = {
447 .clkctrl_offs = OMAP54XX_CM_DSS_DSS_CLKCTRL_OFFSET,
448 .flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
449 },
450 },
451 .opt_clks = dss_dsi1_a_opt_clks,
452 .opt_clks_cnt = ARRAY_SIZE(dss_dsi1_a_opt_clks),
453 .parent_hwmod = &omap54xx_dss_hwmod,
454 };
455
456 /* dss_dsi1_c */
457 static struct omap_hwmod_opt_clk dss_dsi1_c_opt_clks[] = {
458 { .role = "sys_clk", .clk = "dss_sys_clk" },
459 };
460
461 static struct omap_hwmod omap54xx_dss_dsi1_c_hwmod = {
462 .name = "dss_dsi2",
463 .class = &omap54xx_dsi1_hwmod_class,
464 .clkdm_name = "dss_clkdm",
465 .main_clk = "dss_dss_clk",
466 .prcm = {
467 .omap4 = {
468 .clkctrl_offs = OMAP54XX_CM_DSS_DSS_CLKCTRL_OFFSET,
469 .flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
470 },
471 },
472 .opt_clks = dss_dsi1_c_opt_clks,
473 .opt_clks_cnt = ARRAY_SIZE(dss_dsi1_c_opt_clks),
474 .parent_hwmod = &omap54xx_dss_hwmod,
475 };
476
477 /*
478 * 'hdmi' class
479 * hdmi controller
480 */
481
482 static struct omap_hwmod_class_sysconfig omap54xx_hdmi_sysc = {
483 .rev_offs = 0x0000,
484 .sysc_offs = 0x0010,
485 .sysc_flags = (SYSC_HAS_RESET_STATUS | SYSC_HAS_SIDLEMODE |
486 SYSC_HAS_SOFTRESET),
487 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
488 SIDLE_SMART_WKUP),
489 .sysc_fields = &omap_hwmod_sysc_type2,
490 };
491
492 static struct omap_hwmod_class omap54xx_hdmi_hwmod_class = {
493 .name = "hdmi",
494 .sysc = &omap54xx_hdmi_sysc,
495 };
496
497 static struct omap_hwmod_opt_clk dss_hdmi_opt_clks[] = {
498 { .role = "sys_clk", .clk = "dss_sys_clk" },
499 };
500
501 static struct omap_hwmod omap54xx_dss_hdmi_hwmod = {
502 .name = "dss_hdmi",
503 .class = &omap54xx_hdmi_hwmod_class,
504 .clkdm_name = "dss_clkdm",
505 .main_clk = "dss_48mhz_clk",
506 .prcm = {
507 .omap4 = {
508 .clkctrl_offs = OMAP54XX_CM_DSS_DSS_CLKCTRL_OFFSET,
509 .flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
510 },
511 },
512 .opt_clks = dss_hdmi_opt_clks,
513 .opt_clks_cnt = ARRAY_SIZE(dss_hdmi_opt_clks),
514 .parent_hwmod = &omap54xx_dss_hwmod,
515 };
516
517 /*
518 * 'rfbi' class
519 * remote frame buffer interface
520 */
521
522 static struct omap_hwmod_class_sysconfig omap54xx_rfbi_sysc = {
523 .rev_offs = 0x0000,
524 .sysc_offs = 0x0010,
525 .syss_offs = 0x0014,
526 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_SIDLEMODE |
527 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
528 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
529 .sysc_fields = &omap_hwmod_sysc_type1,
530 };
531
532 static struct omap_hwmod_class omap54xx_rfbi_hwmod_class = {
533 .name = "rfbi",
534 .sysc = &omap54xx_rfbi_sysc,
535 };
536
537 /* dss_rfbi */
538 static struct omap_hwmod_opt_clk dss_rfbi_opt_clks[] = {
539 { .role = "ick", .clk = "l3_iclk_div" },
540 };
541
542 static struct omap_hwmod omap54xx_dss_rfbi_hwmod = {
543 .name = "dss_rfbi",
544 .class = &omap54xx_rfbi_hwmod_class,
545 .clkdm_name = "dss_clkdm",
546 .prcm = {
547 .omap4 = {
548 .clkctrl_offs = OMAP54XX_CM_DSS_DSS_CLKCTRL_OFFSET,
549 .flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
550 },
551 },
552 .opt_clks = dss_rfbi_opt_clks,
553 .opt_clks_cnt = ARRAY_SIZE(dss_rfbi_opt_clks),
554 .parent_hwmod = &omap54xx_dss_hwmod,
555 };
556
557 /*
558 * 'emif' class
559 * external memory interface no1 (wrapper)
560 */
561
562 static struct omap_hwmod_class_sysconfig omap54xx_emif_sysc = {
563 .rev_offs = 0x0000,
564 };
565
566 static struct omap_hwmod_class omap54xx_emif_hwmod_class = {
567 .name = "emif",
568 .sysc = &omap54xx_emif_sysc,
569 };
570
571 /* emif1 */
572 static struct omap_hwmod omap54xx_emif1_hwmod = {
573 .name = "emif1",
574 .class = &omap54xx_emif_hwmod_class,
575 .clkdm_name = "emif_clkdm",
576 .flags = HWMOD_INIT_NO_IDLE,
577 .main_clk = "dpll_core_h11x2_ck",
578 .prcm = {
579 .omap4 = {
580 .clkctrl_offs = OMAP54XX_CM_EMIF_EMIF1_CLKCTRL_OFFSET,
581 .context_offs = OMAP54XX_RM_EMIF_EMIF1_CONTEXT_OFFSET,
582 .modulemode = MODULEMODE_HWCTRL,
583 },
584 },
585 };
586
587 /* emif2 */
588 static struct omap_hwmod omap54xx_emif2_hwmod = {
589 .name = "emif2",
590 .class = &omap54xx_emif_hwmod_class,
591 .clkdm_name = "emif_clkdm",
592 .flags = HWMOD_INIT_NO_IDLE,
593 .main_clk = "dpll_core_h11x2_ck",
594 .prcm = {
595 .omap4 = {
596 .clkctrl_offs = OMAP54XX_CM_EMIF_EMIF2_CLKCTRL_OFFSET,
597 .context_offs = OMAP54XX_RM_EMIF_EMIF2_CONTEXT_OFFSET,
598 .modulemode = MODULEMODE_HWCTRL,
599 },
600 },
601 };
602
603 /*
604 * 'gpio' class
605 * general purpose io module
606 */
607
608 static struct omap_hwmod_class_sysconfig omap54xx_gpio_sysc = {
609 .rev_offs = 0x0000,
610 .sysc_offs = 0x0010,
611 .syss_offs = 0x0114,
612 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_ENAWAKEUP |
613 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
614 SYSS_HAS_RESET_STATUS),
615 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
616 SIDLE_SMART_WKUP),
617 .sysc_fields = &omap_hwmod_sysc_type1,
618 };
619
620 static struct omap_hwmod_class omap54xx_gpio_hwmod_class = {
621 .name = "gpio",
622 .sysc = &omap54xx_gpio_sysc,
623 .rev = 2,
624 };
625
626 /* gpio1 */
627 static struct omap_hwmod_opt_clk gpio1_opt_clks[] = {
628 { .role = "dbclk", .clk = "gpio1_dbclk" },
629 };
630
631 static struct omap_hwmod omap54xx_gpio1_hwmod = {
632 .name = "gpio1",
633 .class = &omap54xx_gpio_hwmod_class,
634 .clkdm_name = "wkupaon_clkdm",
635 .main_clk = "wkupaon_iclk_mux",
636 .prcm = {
637 .omap4 = {
638 .clkctrl_offs = OMAP54XX_CM_WKUPAON_GPIO1_CLKCTRL_OFFSET,
639 .context_offs = OMAP54XX_RM_WKUPAON_GPIO1_CONTEXT_OFFSET,
640 .modulemode = MODULEMODE_HWCTRL,
641 },
642 },
643 .opt_clks = gpio1_opt_clks,
644 .opt_clks_cnt = ARRAY_SIZE(gpio1_opt_clks),
645 };
646
647 /* gpio2 */
648 static struct omap_hwmod_opt_clk gpio2_opt_clks[] = {
649 { .role = "dbclk", .clk = "gpio2_dbclk" },
650 };
651
652 static struct omap_hwmod omap54xx_gpio2_hwmod = {
653 .name = "gpio2",
654 .class = &omap54xx_gpio_hwmod_class,
655 .clkdm_name = "l4per_clkdm",
656 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
657 .main_clk = "l4_root_clk_div",
658 .prcm = {
659 .omap4 = {
660 .clkctrl_offs = OMAP54XX_CM_L4PER_GPIO2_CLKCTRL_OFFSET,
661 .context_offs = OMAP54XX_RM_L4PER_GPIO2_CONTEXT_OFFSET,
662 .modulemode = MODULEMODE_HWCTRL,
663 },
664 },
665 .opt_clks = gpio2_opt_clks,
666 .opt_clks_cnt = ARRAY_SIZE(gpio2_opt_clks),
667 };
668
669 /* gpio3 */
670 static struct omap_hwmod_opt_clk gpio3_opt_clks[] = {
671 { .role = "dbclk", .clk = "gpio3_dbclk" },
672 };
673
674 static struct omap_hwmod omap54xx_gpio3_hwmod = {
675 .name = "gpio3",
676 .class = &omap54xx_gpio_hwmod_class,
677 .clkdm_name = "l4per_clkdm",
678 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
679 .main_clk = "l4_root_clk_div",
680 .prcm = {
681 .omap4 = {
682 .clkctrl_offs = OMAP54XX_CM_L4PER_GPIO3_CLKCTRL_OFFSET,
683 .context_offs = OMAP54XX_RM_L4PER_GPIO3_CONTEXT_OFFSET,
684 .modulemode = MODULEMODE_HWCTRL,
685 },
686 },
687 .opt_clks = gpio3_opt_clks,
688 .opt_clks_cnt = ARRAY_SIZE(gpio3_opt_clks),
689 };
690
691 /* gpio4 */
692 static struct omap_hwmod_opt_clk gpio4_opt_clks[] = {
693 { .role = "dbclk", .clk = "gpio4_dbclk" },
694 };
695
696 static struct omap_hwmod omap54xx_gpio4_hwmod = {
697 .name = "gpio4",
698 .class = &omap54xx_gpio_hwmod_class,
699 .clkdm_name = "l4per_clkdm",
700 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
701 .main_clk = "l4_root_clk_div",
702 .prcm = {
703 .omap4 = {
704 .clkctrl_offs = OMAP54XX_CM_L4PER_GPIO4_CLKCTRL_OFFSET,
705 .context_offs = OMAP54XX_RM_L4PER_GPIO4_CONTEXT_OFFSET,
706 .modulemode = MODULEMODE_HWCTRL,
707 },
708 },
709 .opt_clks = gpio4_opt_clks,
710 .opt_clks_cnt = ARRAY_SIZE(gpio4_opt_clks),
711 };
712
713 /* gpio5 */
714 static struct omap_hwmod_opt_clk gpio5_opt_clks[] = {
715 { .role = "dbclk", .clk = "gpio5_dbclk" },
716 };
717
718 static struct omap_hwmod omap54xx_gpio5_hwmod = {
719 .name = "gpio5",
720 .class = &omap54xx_gpio_hwmod_class,
721 .clkdm_name = "l4per_clkdm",
722 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
723 .main_clk = "l4_root_clk_div",
724 .prcm = {
725 .omap4 = {
726 .clkctrl_offs = OMAP54XX_CM_L4PER_GPIO5_CLKCTRL_OFFSET,
727 .context_offs = OMAP54XX_RM_L4PER_GPIO5_CONTEXT_OFFSET,
728 .modulemode = MODULEMODE_HWCTRL,
729 },
730 },
731 .opt_clks = gpio5_opt_clks,
732 .opt_clks_cnt = ARRAY_SIZE(gpio5_opt_clks),
733 };
734
735 /* gpio6 */
736 static struct omap_hwmod_opt_clk gpio6_opt_clks[] = {
737 { .role = "dbclk", .clk = "gpio6_dbclk" },
738 };
739
740 static struct omap_hwmod omap54xx_gpio6_hwmod = {
741 .name = "gpio6",
742 .class = &omap54xx_gpio_hwmod_class,
743 .clkdm_name = "l4per_clkdm",
744 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
745 .main_clk = "l4_root_clk_div",
746 .prcm = {
747 .omap4 = {
748 .clkctrl_offs = OMAP54XX_CM_L4PER_GPIO6_CLKCTRL_OFFSET,
749 .context_offs = OMAP54XX_RM_L4PER_GPIO6_CONTEXT_OFFSET,
750 .modulemode = MODULEMODE_HWCTRL,
751 },
752 },
753 .opt_clks = gpio6_opt_clks,
754 .opt_clks_cnt = ARRAY_SIZE(gpio6_opt_clks),
755 };
756
757 /* gpio7 */
758 static struct omap_hwmod_opt_clk gpio7_opt_clks[] = {
759 { .role = "dbclk", .clk = "gpio7_dbclk" },
760 };
761
762 static struct omap_hwmod omap54xx_gpio7_hwmod = {
763 .name = "gpio7",
764 .class = &omap54xx_gpio_hwmod_class,
765 .clkdm_name = "l4per_clkdm",
766 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
767 .main_clk = "l4_root_clk_div",
768 .prcm = {
769 .omap4 = {
770 .clkctrl_offs = OMAP54XX_CM_L4PER_GPIO7_CLKCTRL_OFFSET,
771 .context_offs = OMAP54XX_RM_L4PER_GPIO7_CONTEXT_OFFSET,
772 .modulemode = MODULEMODE_HWCTRL,
773 },
774 },
775 .opt_clks = gpio7_opt_clks,
776 .opt_clks_cnt = ARRAY_SIZE(gpio7_opt_clks),
777 };
778
779 /* gpio8 */
780 static struct omap_hwmod_opt_clk gpio8_opt_clks[] = {
781 { .role = "dbclk", .clk = "gpio8_dbclk" },
782 };
783
784 static struct omap_hwmod omap54xx_gpio8_hwmod = {
785 .name = "gpio8",
786 .class = &omap54xx_gpio_hwmod_class,
787 .clkdm_name = "l4per_clkdm",
788 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
789 .main_clk = "l4_root_clk_div",
790 .prcm = {
791 .omap4 = {
792 .clkctrl_offs = OMAP54XX_CM_L4PER_GPIO8_CLKCTRL_OFFSET,
793 .context_offs = OMAP54XX_RM_L4PER_GPIO8_CONTEXT_OFFSET,
794 .modulemode = MODULEMODE_HWCTRL,
795 },
796 },
797 .opt_clks = gpio8_opt_clks,
798 .opt_clks_cnt = ARRAY_SIZE(gpio8_opt_clks),
799 };
800
801 /*
802 * 'i2c' class
803 * multimaster high-speed i2c controller
804 */
805
806 static struct omap_hwmod_class_sysconfig omap54xx_i2c_sysc = {
807 .sysc_offs = 0x0010,
808 .syss_offs = 0x0090,
809 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
810 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
811 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
812 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
813 SIDLE_SMART_WKUP),
814 .sysc_fields = &omap_hwmod_sysc_type1,
815 };
816
817 static struct omap_hwmod_class omap54xx_i2c_hwmod_class = {
818 .name = "i2c",
819 .sysc = &omap54xx_i2c_sysc,
820 .reset = &omap_i2c_reset,
821 .rev = OMAP_I2C_IP_VERSION_2,
822 };
823
824 /* i2c1 */
825 static struct omap_hwmod omap54xx_i2c1_hwmod = {
826 .name = "i2c1",
827 .class = &omap54xx_i2c_hwmod_class,
828 .clkdm_name = "l4per_clkdm",
829 .flags = HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
830 .main_clk = "func_96m_fclk",
831 .prcm = {
832 .omap4 = {
833 .clkctrl_offs = OMAP54XX_CM_L4PER_I2C1_CLKCTRL_OFFSET,
834 .context_offs = OMAP54XX_RM_L4PER_I2C1_CONTEXT_OFFSET,
835 .modulemode = MODULEMODE_SWCTRL,
836 },
837 },
838 };
839
840 /* i2c2 */
841 static struct omap_hwmod omap54xx_i2c2_hwmod = {
842 .name = "i2c2",
843 .class = &omap54xx_i2c_hwmod_class,
844 .clkdm_name = "l4per_clkdm",
845 .flags = HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
846 .main_clk = "func_96m_fclk",
847 .prcm = {
848 .omap4 = {
849 .clkctrl_offs = OMAP54XX_CM_L4PER_I2C2_CLKCTRL_OFFSET,
850 .context_offs = OMAP54XX_RM_L4PER_I2C2_CONTEXT_OFFSET,
851 .modulemode = MODULEMODE_SWCTRL,
852 },
853 },
854 };
855
856 /* i2c3 */
857 static struct omap_hwmod omap54xx_i2c3_hwmod = {
858 .name = "i2c3",
859 .class = &omap54xx_i2c_hwmod_class,
860 .clkdm_name = "l4per_clkdm",
861 .flags = HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
862 .main_clk = "func_96m_fclk",
863 .prcm = {
864 .omap4 = {
865 .clkctrl_offs = OMAP54XX_CM_L4PER_I2C3_CLKCTRL_OFFSET,
866 .context_offs = OMAP54XX_RM_L4PER_I2C3_CONTEXT_OFFSET,
867 .modulemode = MODULEMODE_SWCTRL,
868 },
869 },
870 };
871
872 /* i2c4 */
873 static struct omap_hwmod omap54xx_i2c4_hwmod = {
874 .name = "i2c4",
875 .class = &omap54xx_i2c_hwmod_class,
876 .clkdm_name = "l4per_clkdm",
877 .flags = HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
878 .main_clk = "func_96m_fclk",
879 .prcm = {
880 .omap4 = {
881 .clkctrl_offs = OMAP54XX_CM_L4PER_I2C4_CLKCTRL_OFFSET,
882 .context_offs = OMAP54XX_RM_L4PER_I2C4_CONTEXT_OFFSET,
883 .modulemode = MODULEMODE_SWCTRL,
884 },
885 },
886 };
887
888 /* i2c5 */
889 static struct omap_hwmod omap54xx_i2c5_hwmod = {
890 .name = "i2c5",
891 .class = &omap54xx_i2c_hwmod_class,
892 .clkdm_name = "l4per_clkdm",
893 .flags = HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
894 .main_clk = "func_96m_fclk",
895 .prcm = {
896 .omap4 = {
897 .clkctrl_offs = OMAP54XX_CM_L4PER_I2C5_CLKCTRL_OFFSET,
898 .context_offs = OMAP54XX_RM_L4PER_I2C5_CONTEXT_OFFSET,
899 .modulemode = MODULEMODE_SWCTRL,
900 },
901 },
902 };
903
904 /*
905 * 'kbd' class
906 * keyboard controller
907 */
908
909 static struct omap_hwmod_class_sysconfig omap54xx_kbd_sysc = {
910 .rev_offs = 0x0000,
911 .sysc_offs = 0x0010,
912 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_SIDLEMODE |
913 SYSC_HAS_SOFTRESET),
914 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
915 .sysc_fields = &omap_hwmod_sysc_type1,
916 };
917
918 static struct omap_hwmod_class omap54xx_kbd_hwmod_class = {
919 .name = "kbd",
920 .sysc = &omap54xx_kbd_sysc,
921 };
922
923 /* kbd */
924 static struct omap_hwmod omap54xx_kbd_hwmod = {
925 .name = "kbd",
926 .class = &omap54xx_kbd_hwmod_class,
927 .clkdm_name = "wkupaon_clkdm",
928 .main_clk = "sys_32k_ck",
929 .prcm = {
930 .omap4 = {
931 .clkctrl_offs = OMAP54XX_CM_WKUPAON_KBD_CLKCTRL_OFFSET,
932 .context_offs = OMAP54XX_RM_WKUPAON_KBD_CONTEXT_OFFSET,
933 .modulemode = MODULEMODE_SWCTRL,
934 },
935 },
936 };
937
938 /*
939 * 'mailbox' class
940 * mailbox module allowing communication between the on-chip processors using a
941 * queued mailbox-interrupt mechanism.
942 */
943
944 static struct omap_hwmod_class_sysconfig omap54xx_mailbox_sysc = {
945 .rev_offs = 0x0000,
946 .sysc_offs = 0x0010,
947 .sysc_flags = (SYSC_HAS_RESET_STATUS | SYSC_HAS_SIDLEMODE |
948 SYSC_HAS_SOFTRESET),
949 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
950 .sysc_fields = &omap_hwmod_sysc_type2,
951 };
952
953 static struct omap_hwmod_class omap54xx_mailbox_hwmod_class = {
954 .name = "mailbox",
955 .sysc = &omap54xx_mailbox_sysc,
956 };
957
958 /* mailbox */
959 static struct omap_hwmod omap54xx_mailbox_hwmod = {
960 .name = "mailbox",
961 .class = &omap54xx_mailbox_hwmod_class,
962 .clkdm_name = "l4cfg_clkdm",
963 .prcm = {
964 .omap4 = {
965 .clkctrl_offs = OMAP54XX_CM_L4CFG_MAILBOX_CLKCTRL_OFFSET,
966 .context_offs = OMAP54XX_RM_L4CFG_MAILBOX_CONTEXT_OFFSET,
967 },
968 },
969 };
970
971 /*
972 * 'mcbsp' class
973 * multi channel buffered serial port controller
974 */
975
976 static struct omap_hwmod_class_sysconfig omap54xx_mcbsp_sysc = {
977 .sysc_offs = 0x008c,
978 .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_ENAWAKEUP |
979 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
980 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
981 .sysc_fields = &omap_hwmod_sysc_type1,
982 };
983
984 static struct omap_hwmod_class omap54xx_mcbsp_hwmod_class = {
985 .name = "mcbsp",
986 .sysc = &omap54xx_mcbsp_sysc,
987 };
988
989 /* mcbsp1 */
990 static struct omap_hwmod_opt_clk mcbsp1_opt_clks[] = {
991 { .role = "pad_fck", .clk = "pad_clks_ck" },
992 { .role = "prcm_fck", .clk = "mcbsp1_sync_mux_ck" },
993 };
994
995 static struct omap_hwmod omap54xx_mcbsp1_hwmod = {
996 .name = "mcbsp1",
997 .class = &omap54xx_mcbsp_hwmod_class,
998 .clkdm_name = "abe_clkdm",
999 .main_clk = "mcbsp1_gfclk",
1000 .prcm = {
1001 .omap4 = {
1002 .clkctrl_offs = OMAP54XX_CM_ABE_MCBSP1_CLKCTRL_OFFSET,
1003 .context_offs = OMAP54XX_RM_ABE_MCBSP1_CONTEXT_OFFSET,
1004 .modulemode = MODULEMODE_SWCTRL,
1005 },
1006 },
1007 .opt_clks = mcbsp1_opt_clks,
1008 .opt_clks_cnt = ARRAY_SIZE(mcbsp1_opt_clks),
1009 };
1010
1011 /* mcbsp2 */
1012 static struct omap_hwmod_opt_clk mcbsp2_opt_clks[] = {
1013 { .role = "pad_fck", .clk = "pad_clks_ck" },
1014 { .role = "prcm_fck", .clk = "mcbsp2_sync_mux_ck" },
1015 };
1016
1017 static struct omap_hwmod omap54xx_mcbsp2_hwmod = {
1018 .name = "mcbsp2",
1019 .class = &omap54xx_mcbsp_hwmod_class,
1020 .clkdm_name = "abe_clkdm",
1021 .main_clk = "mcbsp2_gfclk",
1022 .prcm = {
1023 .omap4 = {
1024 .clkctrl_offs = OMAP54XX_CM_ABE_MCBSP2_CLKCTRL_OFFSET,
1025 .context_offs = OMAP54XX_RM_ABE_MCBSP2_CONTEXT_OFFSET,
1026 .modulemode = MODULEMODE_SWCTRL,
1027 },
1028 },
1029 .opt_clks = mcbsp2_opt_clks,
1030 .opt_clks_cnt = ARRAY_SIZE(mcbsp2_opt_clks),
1031 };
1032
1033 /* mcbsp3 */
1034 static struct omap_hwmod_opt_clk mcbsp3_opt_clks[] = {
1035 { .role = "pad_fck", .clk = "pad_clks_ck" },
1036 { .role = "prcm_fck", .clk = "mcbsp3_sync_mux_ck" },
1037 };
1038
1039 static struct omap_hwmod omap54xx_mcbsp3_hwmod = {
1040 .name = "mcbsp3",
1041 .class = &omap54xx_mcbsp_hwmod_class,
1042 .clkdm_name = "abe_clkdm",
1043 .main_clk = "mcbsp3_gfclk",
1044 .prcm = {
1045 .omap4 = {
1046 .clkctrl_offs = OMAP54XX_CM_ABE_MCBSP3_CLKCTRL_OFFSET,
1047 .context_offs = OMAP54XX_RM_ABE_MCBSP3_CONTEXT_OFFSET,
1048 .modulemode = MODULEMODE_SWCTRL,
1049 },
1050 },
1051 .opt_clks = mcbsp3_opt_clks,
1052 .opt_clks_cnt = ARRAY_SIZE(mcbsp3_opt_clks),
1053 };
1054
1055 /*
1056 * 'mcpdm' class
1057 * multi channel pdm controller (proprietary interface with phoenix power
1058 * ic)
1059 */
1060
1061 static struct omap_hwmod_class_sysconfig omap54xx_mcpdm_sysc = {
1062 .rev_offs = 0x0000,
1063 .sysc_offs = 0x0010,
1064 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
1065 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
1066 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1067 SIDLE_SMART_WKUP),
1068 .sysc_fields = &omap_hwmod_sysc_type2,
1069 };
1070
1071 static struct omap_hwmod_class omap54xx_mcpdm_hwmod_class = {
1072 .name = "mcpdm",
1073 .sysc = &omap54xx_mcpdm_sysc,
1074 };
1075
1076 /* mcpdm */
1077 static struct omap_hwmod omap54xx_mcpdm_hwmod = {
1078 .name = "mcpdm",
1079 .class = &omap54xx_mcpdm_hwmod_class,
1080 .clkdm_name = "abe_clkdm",
1081 /*
1082 * It's suspected that the McPDM requires an off-chip main
1083 * functional clock, controlled via I2C. This IP block is
1084 * currently reset very early during boot, before I2C is
1085 * available, so it doesn't seem that we have any choice in
1086 * the kernel other than to avoid resetting it. XXX This is
1087 * really a hardware issue workaround: every IP block should
1088 * be able to source its main functional clock from either
1089 * on-chip or off-chip sources. McPDM seems to be the only
1090 * current exception.
1091 */
1092
1093 .flags = HWMOD_EXT_OPT_MAIN_CLK | HWMOD_SWSUP_SIDLE,
1094 .main_clk = "pad_clks_ck",
1095 .prcm = {
1096 .omap4 = {
1097 .clkctrl_offs = OMAP54XX_CM_ABE_MCPDM_CLKCTRL_OFFSET,
1098 .context_offs = OMAP54XX_RM_ABE_MCPDM_CONTEXT_OFFSET,
1099 .modulemode = MODULEMODE_SWCTRL,
1100 },
1101 },
1102 };
1103
1104 /*
1105 * 'mcspi' class
1106 * multichannel serial port interface (mcspi) / master/slave synchronous serial
1107 * bus
1108 */
1109
1110 static struct omap_hwmod_class_sysconfig omap54xx_mcspi_sysc = {
1111 .rev_offs = 0x0000,
1112 .sysc_offs = 0x0010,
1113 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
1114 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
1115 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1116 SIDLE_SMART_WKUP),
1117 .sysc_fields = &omap_hwmod_sysc_type2,
1118 };
1119
1120 static struct omap_hwmod_class omap54xx_mcspi_hwmod_class = {
1121 .name = "mcspi",
1122 .sysc = &omap54xx_mcspi_sysc,
1123 };
1124
1125 /* mcspi1 */
1126 static struct omap_hwmod omap54xx_mcspi1_hwmod = {
1127 .name = "mcspi1",
1128 .class = &omap54xx_mcspi_hwmod_class,
1129 .clkdm_name = "l4per_clkdm",
1130 .main_clk = "func_48m_fclk",
1131 .prcm = {
1132 .omap4 = {
1133 .clkctrl_offs = OMAP54XX_CM_L4PER_MCSPI1_CLKCTRL_OFFSET,
1134 .context_offs = OMAP54XX_RM_L4PER_MCSPI1_CONTEXT_OFFSET,
1135 .modulemode = MODULEMODE_SWCTRL,
1136 },
1137 },
1138 };
1139
1140 /* mcspi2 */
1141 static struct omap_hwmod omap54xx_mcspi2_hwmod = {
1142 .name = "mcspi2",
1143 .class = &omap54xx_mcspi_hwmod_class,
1144 .clkdm_name = "l4per_clkdm",
1145 .main_clk = "func_48m_fclk",
1146 .prcm = {
1147 .omap4 = {
1148 .clkctrl_offs = OMAP54XX_CM_L4PER_MCSPI2_CLKCTRL_OFFSET,
1149 .context_offs = OMAP54XX_RM_L4PER_MCSPI2_CONTEXT_OFFSET,
1150 .modulemode = MODULEMODE_SWCTRL,
1151 },
1152 },
1153 };
1154
1155 /* mcspi3 */
1156 static struct omap_hwmod omap54xx_mcspi3_hwmod = {
1157 .name = "mcspi3",
1158 .class = &omap54xx_mcspi_hwmod_class,
1159 .clkdm_name = "l4per_clkdm",
1160 .main_clk = "func_48m_fclk",
1161 .prcm = {
1162 .omap4 = {
1163 .clkctrl_offs = OMAP54XX_CM_L4PER_MCSPI3_CLKCTRL_OFFSET,
1164 .context_offs = OMAP54XX_RM_L4PER_MCSPI3_CONTEXT_OFFSET,
1165 .modulemode = MODULEMODE_SWCTRL,
1166 },
1167 },
1168 };
1169
1170 /* mcspi4 */
1171 static struct omap_hwmod omap54xx_mcspi4_hwmod = {
1172 .name = "mcspi4",
1173 .class = &omap54xx_mcspi_hwmod_class,
1174 .clkdm_name = "l4per_clkdm",
1175 .main_clk = "func_48m_fclk",
1176 .prcm = {
1177 .omap4 = {
1178 .clkctrl_offs = OMAP54XX_CM_L4PER_MCSPI4_CLKCTRL_OFFSET,
1179 .context_offs = OMAP54XX_RM_L4PER_MCSPI4_CONTEXT_OFFSET,
1180 .modulemode = MODULEMODE_SWCTRL,
1181 },
1182 },
1183 };
1184
1185 /*
1186 * 'mmc' class
1187 * multimedia card high-speed/sd/sdio (mmc/sd/sdio) host controller
1188 */
1189
1190 static struct omap_hwmod_class_sysconfig omap54xx_mmc_sysc = {
1191 .rev_offs = 0x0000,
1192 .sysc_offs = 0x0010,
1193 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_MIDLEMODE |
1194 SYSC_HAS_RESET_STATUS | SYSC_HAS_SIDLEMODE |
1195 SYSC_HAS_SOFTRESET),
1196 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1197 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
1198 MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
1199 .sysc_fields = &omap_hwmod_sysc_type2,
1200 };
1201
1202 static struct omap_hwmod_class omap54xx_mmc_hwmod_class = {
1203 .name = "mmc",
1204 .sysc = &omap54xx_mmc_sysc,
1205 };
1206
1207 /* mmc1 */
1208 static struct omap_hwmod_opt_clk mmc1_opt_clks[] = {
1209 { .role = "32khz_clk", .clk = "mmc1_32khz_clk" },
1210 };
1211
1212 /* mmc1 dev_attr */
1213 static struct omap_hsmmc_dev_attr mmc1_dev_attr = {
1214 .flags = OMAP_HSMMC_SUPPORTS_DUAL_VOLT,
1215 };
1216
1217 static struct omap_hwmod omap54xx_mmc1_hwmod = {
1218 .name = "mmc1",
1219 .class = &omap54xx_mmc_hwmod_class,
1220 .clkdm_name = "l3init_clkdm",
1221 .main_clk = "mmc1_fclk",
1222 .prcm = {
1223 .omap4 = {
1224 .clkctrl_offs = OMAP54XX_CM_L3INIT_MMC1_CLKCTRL_OFFSET,
1225 .context_offs = OMAP54XX_RM_L3INIT_MMC1_CONTEXT_OFFSET,
1226 .modulemode = MODULEMODE_SWCTRL,
1227 },
1228 },
1229 .opt_clks = mmc1_opt_clks,
1230 .opt_clks_cnt = ARRAY_SIZE(mmc1_opt_clks),
1231 .dev_attr = &mmc1_dev_attr,
1232 };
1233
1234 /* mmc2 */
1235 static struct omap_hwmod omap54xx_mmc2_hwmod = {
1236 .name = "mmc2",
1237 .class = &omap54xx_mmc_hwmod_class,
1238 .clkdm_name = "l3init_clkdm",
1239 .main_clk = "mmc2_fclk",
1240 .prcm = {
1241 .omap4 = {
1242 .clkctrl_offs = OMAP54XX_CM_L3INIT_MMC2_CLKCTRL_OFFSET,
1243 .context_offs = OMAP54XX_RM_L3INIT_MMC2_CONTEXT_OFFSET,
1244 .modulemode = MODULEMODE_SWCTRL,
1245 },
1246 },
1247 };
1248
1249 /* mmc3 */
1250 static struct omap_hwmod omap54xx_mmc3_hwmod = {
1251 .name = "mmc3",
1252 .class = &omap54xx_mmc_hwmod_class,
1253 .clkdm_name = "l4per_clkdm",
1254 .main_clk = "func_48m_fclk",
1255 .prcm = {
1256 .omap4 = {
1257 .clkctrl_offs = OMAP54XX_CM_L4PER_MMC3_CLKCTRL_OFFSET,
1258 .context_offs = OMAP54XX_RM_L4PER_MMC3_CONTEXT_OFFSET,
1259 .modulemode = MODULEMODE_SWCTRL,
1260 },
1261 },
1262 };
1263
1264 /* mmc4 */
1265 static struct omap_hwmod omap54xx_mmc4_hwmod = {
1266 .name = "mmc4",
1267 .class = &omap54xx_mmc_hwmod_class,
1268 .clkdm_name = "l4per_clkdm",
1269 .main_clk = "func_48m_fclk",
1270 .prcm = {
1271 .omap4 = {
1272 .clkctrl_offs = OMAP54XX_CM_L4PER_MMC4_CLKCTRL_OFFSET,
1273 .context_offs = OMAP54XX_RM_L4PER_MMC4_CONTEXT_OFFSET,
1274 .modulemode = MODULEMODE_SWCTRL,
1275 },
1276 },
1277 };
1278
1279 /* mmc5 */
1280 static struct omap_hwmod omap54xx_mmc5_hwmod = {
1281 .name = "mmc5",
1282 .class = &omap54xx_mmc_hwmod_class,
1283 .clkdm_name = "l4per_clkdm",
1284 .main_clk = "func_96m_fclk",
1285 .prcm = {
1286 .omap4 = {
1287 .clkctrl_offs = OMAP54XX_CM_L4PER_MMC5_CLKCTRL_OFFSET,
1288 .context_offs = OMAP54XX_RM_L4PER_MMC5_CONTEXT_OFFSET,
1289 .modulemode = MODULEMODE_SWCTRL,
1290 },
1291 },
1292 };
1293
1294 /*
1295 * 'mmu' class
1296 * The memory management unit performs virtual to physical address translation
1297 * for its requestors.
1298 */
1299
1300 static struct omap_hwmod_class_sysconfig omap54xx_mmu_sysc = {
1301 .rev_offs = 0x0000,
1302 .sysc_offs = 0x0010,
1303 .syss_offs = 0x0014,
1304 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
1305 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
1306 SYSS_HAS_RESET_STATUS),
1307 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1308 .sysc_fields = &omap_hwmod_sysc_type1,
1309 };
1310
1311 static struct omap_hwmod_class omap54xx_mmu_hwmod_class = {
1312 .name = "mmu",
1313 .sysc = &omap54xx_mmu_sysc,
1314 };
1315
1316 static struct omap_hwmod_rst_info omap54xx_mmu_dsp_resets[] = {
1317 { .name = "mmu_cache", .rst_shift = 1 },
1318 };
1319
1320 static struct omap_hwmod omap54xx_mmu_dsp_hwmod = {
1321 .name = "mmu_dsp",
1322 .class = &omap54xx_mmu_hwmod_class,
1323 .clkdm_name = "dsp_clkdm",
1324 .rst_lines = omap54xx_mmu_dsp_resets,
1325 .rst_lines_cnt = ARRAY_SIZE(omap54xx_mmu_dsp_resets),
1326 .main_clk = "dpll_iva_h11x2_ck",
1327 .prcm = {
1328 .omap4 = {
1329 .clkctrl_offs = OMAP54XX_CM_DSP_DSP_CLKCTRL_OFFSET,
1330 .rstctrl_offs = OMAP54XX_RM_DSP_RSTCTRL_OFFSET,
1331 .context_offs = OMAP54XX_RM_DSP_DSP_CONTEXT_OFFSET,
1332 .modulemode = MODULEMODE_HWCTRL,
1333 },
1334 },
1335 };
1336
1337 /* mmu ipu */
1338 static struct omap_hwmod_rst_info omap54xx_mmu_ipu_resets[] = {
1339 { .name = "mmu_cache", .rst_shift = 2 },
1340 };
1341
1342 static struct omap_hwmod omap54xx_mmu_ipu_hwmod = {
1343 .name = "mmu_ipu",
1344 .class = &omap54xx_mmu_hwmod_class,
1345 .clkdm_name = "ipu_clkdm",
1346 .rst_lines = omap54xx_mmu_ipu_resets,
1347 .rst_lines_cnt = ARRAY_SIZE(omap54xx_mmu_ipu_resets),
1348 .main_clk = "dpll_core_h22x2_ck",
1349 .prcm = {
1350 .omap4 = {
1351 .clkctrl_offs = OMAP54XX_CM_IPU_IPU_CLKCTRL_OFFSET,
1352 .rstctrl_offs = OMAP54XX_RM_IPU_RSTCTRL_OFFSET,
1353 .context_offs = OMAP54XX_RM_IPU_IPU_CONTEXT_OFFSET,
1354 .modulemode = MODULEMODE_HWCTRL,
1355 },
1356 },
1357 };
1358
1359 /*
1360 * 'mpu' class
1361 * mpu sub-system
1362 */
1363
1364 static struct omap_hwmod_class omap54xx_mpu_hwmod_class = {
1365 .name = "mpu",
1366 };
1367
1368 /* mpu */
1369 static struct omap_hwmod omap54xx_mpu_hwmod = {
1370 .name = "mpu",
1371 .class = &omap54xx_mpu_hwmod_class,
1372 .clkdm_name = "mpu_clkdm",
1373 .flags = HWMOD_INIT_NO_IDLE,
1374 .main_clk = "dpll_mpu_m2_ck",
1375 .prcm = {
1376 .omap4 = {
1377 .clkctrl_offs = OMAP54XX_CM_MPU_MPU_CLKCTRL_OFFSET,
1378 .context_offs = OMAP54XX_RM_MPU_MPU_CONTEXT_OFFSET,
1379 },
1380 },
1381 };
1382
1383 /*
1384 * 'spinlock' class
1385 * spinlock provides hardware assistance for synchronizing the processes
1386 * running on multiple processors
1387 */
1388
1389 static struct omap_hwmod_class_sysconfig omap54xx_spinlock_sysc = {
1390 .rev_offs = 0x0000,
1391 .sysc_offs = 0x0010,
1392 .syss_offs = 0x0014,
1393 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
1394 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
1395 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
1396 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1397 .sysc_fields = &omap_hwmod_sysc_type1,
1398 };
1399
1400 static struct omap_hwmod_class omap54xx_spinlock_hwmod_class = {
1401 .name = "spinlock",
1402 .sysc = &omap54xx_spinlock_sysc,
1403 };
1404
1405 /* spinlock */
1406 static struct omap_hwmod omap54xx_spinlock_hwmod = {
1407 .name = "spinlock",
1408 .class = &omap54xx_spinlock_hwmod_class,
1409 .clkdm_name = "l4cfg_clkdm",
1410 .prcm = {
1411 .omap4 = {
1412 .clkctrl_offs = OMAP54XX_CM_L4CFG_SPINLOCK_CLKCTRL_OFFSET,
1413 .context_offs = OMAP54XX_RM_L4CFG_SPINLOCK_CONTEXT_OFFSET,
1414 },
1415 },
1416 };
1417
1418 /*
1419 * 'ocp2scp' class
1420 * bridge to transform ocp interface protocol to scp (serial control port)
1421 * protocol
1422 */
1423
1424 static struct omap_hwmod_class_sysconfig omap54xx_ocp2scp_sysc = {
1425 .rev_offs = 0x0000,
1426 .sysc_offs = 0x0010,
1427 .syss_offs = 0x0014,
1428 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_SIDLEMODE |
1429 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
1430 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1431 .sysc_fields = &omap_hwmod_sysc_type1,
1432 };
1433
1434 static struct omap_hwmod_class omap54xx_ocp2scp_hwmod_class = {
1435 .name = "ocp2scp",
1436 .sysc = &omap54xx_ocp2scp_sysc,
1437 };
1438
1439 /* ocp2scp1 */
1440 static struct omap_hwmod omap54xx_ocp2scp1_hwmod = {
1441 .name = "ocp2scp1",
1442 .class = &omap54xx_ocp2scp_hwmod_class,
1443 .clkdm_name = "l3init_clkdm",
1444 .main_clk = "l4_root_clk_div",
1445 .prcm = {
1446 .omap4 = {
1447 .clkctrl_offs = OMAP54XX_CM_L3INIT_OCP2SCP1_CLKCTRL_OFFSET,
1448 .context_offs = OMAP54XX_RM_L3INIT_OCP2SCP1_CONTEXT_OFFSET,
1449 .modulemode = MODULEMODE_HWCTRL,
1450 },
1451 },
1452 };
1453
1454 /*
1455 * 'timer' class
1456 * general purpose timer module with accurate 1ms tick
1457 * This class contains several variants: ['timer_1ms', 'timer']
1458 */
1459
1460 static struct omap_hwmod_class_sysconfig omap54xx_timer_1ms_sysc = {
1461 .rev_offs = 0x0000,
1462 .sysc_offs = 0x0010,
1463 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
1464 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
1465 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1466 SIDLE_SMART_WKUP),
1467 .sysc_fields = &omap_hwmod_sysc_type2,
1468 };
1469
1470 static struct omap_hwmod_class omap54xx_timer_1ms_hwmod_class = {
1471 .name = "timer",
1472 .sysc = &omap54xx_timer_1ms_sysc,
1473 };
1474
1475 static struct omap_hwmod_class_sysconfig omap54xx_timer_sysc = {
1476 .rev_offs = 0x0000,
1477 .sysc_offs = 0x0010,
1478 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
1479 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
1480 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1481 SIDLE_SMART_WKUP),
1482 .sysc_fields = &omap_hwmod_sysc_type2,
1483 };
1484
1485 static struct omap_hwmod_class omap54xx_timer_hwmod_class = {
1486 .name = "timer",
1487 .sysc = &omap54xx_timer_sysc,
1488 };
1489
1490 /* timer1 */
1491 static struct omap_hwmod omap54xx_timer1_hwmod = {
1492 .name = "timer1",
1493 .class = &omap54xx_timer_1ms_hwmod_class,
1494 .clkdm_name = "wkupaon_clkdm",
1495 .main_clk = "timer1_gfclk_mux",
1496 .flags = HWMOD_SET_DEFAULT_CLOCKACT,
1497 .prcm = {
1498 .omap4 = {
1499 .clkctrl_offs = OMAP54XX_CM_WKUPAON_TIMER1_CLKCTRL_OFFSET,
1500 .context_offs = OMAP54XX_RM_WKUPAON_TIMER1_CONTEXT_OFFSET,
1501 .modulemode = MODULEMODE_SWCTRL,
1502 },
1503 },
1504 };
1505
1506 /* timer2 */
1507 static struct omap_hwmod omap54xx_timer2_hwmod = {
1508 .name = "timer2",
1509 .class = &omap54xx_timer_1ms_hwmod_class,
1510 .clkdm_name = "l4per_clkdm",
1511 .main_clk = "timer2_gfclk_mux",
1512 .flags = HWMOD_SET_DEFAULT_CLOCKACT,
1513 .prcm = {
1514 .omap4 = {
1515 .clkctrl_offs = OMAP54XX_CM_L4PER_TIMER2_CLKCTRL_OFFSET,
1516 .context_offs = OMAP54XX_RM_L4PER_TIMER2_CONTEXT_OFFSET,
1517 .modulemode = MODULEMODE_SWCTRL,
1518 },
1519 },
1520 };
1521
1522 /* timer3 */
1523 static struct omap_hwmod omap54xx_timer3_hwmod = {
1524 .name = "timer3",
1525 .class = &omap54xx_timer_hwmod_class,
1526 .clkdm_name = "l4per_clkdm",
1527 .main_clk = "timer3_gfclk_mux",
1528 .prcm = {
1529 .omap4 = {
1530 .clkctrl_offs = OMAP54XX_CM_L4PER_TIMER3_CLKCTRL_OFFSET,
1531 .context_offs = OMAP54XX_RM_L4PER_TIMER3_CONTEXT_OFFSET,
1532 .modulemode = MODULEMODE_SWCTRL,
1533 },
1534 },
1535 };
1536
1537 /* timer4 */
1538 static struct omap_hwmod omap54xx_timer4_hwmod = {
1539 .name = "timer4",
1540 .class = &omap54xx_timer_hwmod_class,
1541 .clkdm_name = "l4per_clkdm",
1542 .main_clk = "timer4_gfclk_mux",
1543 .prcm = {
1544 .omap4 = {
1545 .clkctrl_offs = OMAP54XX_CM_L4PER_TIMER4_CLKCTRL_OFFSET,
1546 .context_offs = OMAP54XX_RM_L4PER_TIMER4_CONTEXT_OFFSET,
1547 .modulemode = MODULEMODE_SWCTRL,
1548 },
1549 },
1550 };
1551
1552 /* timer5 */
1553 static struct omap_hwmod omap54xx_timer5_hwmod = {
1554 .name = "timer5",
1555 .class = &omap54xx_timer_hwmod_class,
1556 .clkdm_name = "abe_clkdm",
1557 .main_clk = "timer5_gfclk_mux",
1558 .prcm = {
1559 .omap4 = {
1560 .clkctrl_offs = OMAP54XX_CM_ABE_TIMER5_CLKCTRL_OFFSET,
1561 .context_offs = OMAP54XX_RM_ABE_TIMER5_CONTEXT_OFFSET,
1562 .modulemode = MODULEMODE_SWCTRL,
1563 },
1564 },
1565 };
1566
1567 /* timer6 */
1568 static struct omap_hwmod omap54xx_timer6_hwmod = {
1569 .name = "timer6",
1570 .class = &omap54xx_timer_hwmod_class,
1571 .clkdm_name = "abe_clkdm",
1572 .main_clk = "timer6_gfclk_mux",
1573 .prcm = {
1574 .omap4 = {
1575 .clkctrl_offs = OMAP54XX_CM_ABE_TIMER6_CLKCTRL_OFFSET,
1576 .context_offs = OMAP54XX_RM_ABE_TIMER6_CONTEXT_OFFSET,
1577 .modulemode = MODULEMODE_SWCTRL,
1578 },
1579 },
1580 };
1581
1582 /* timer7 */
1583 static struct omap_hwmod omap54xx_timer7_hwmod = {
1584 .name = "timer7",
1585 .class = &omap54xx_timer_hwmod_class,
1586 .clkdm_name = "abe_clkdm",
1587 .main_clk = "timer7_gfclk_mux",
1588 .prcm = {
1589 .omap4 = {
1590 .clkctrl_offs = OMAP54XX_CM_ABE_TIMER7_CLKCTRL_OFFSET,
1591 .context_offs = OMAP54XX_RM_ABE_TIMER7_CONTEXT_OFFSET,
1592 .modulemode = MODULEMODE_SWCTRL,
1593 },
1594 },
1595 };
1596
1597 /* timer8 */
1598 static struct omap_hwmod omap54xx_timer8_hwmod = {
1599 .name = "timer8",
1600 .class = &omap54xx_timer_hwmod_class,
1601 .clkdm_name = "abe_clkdm",
1602 .main_clk = "timer8_gfclk_mux",
1603 .prcm = {
1604 .omap4 = {
1605 .clkctrl_offs = OMAP54XX_CM_ABE_TIMER8_CLKCTRL_OFFSET,
1606 .context_offs = OMAP54XX_RM_ABE_TIMER8_CONTEXT_OFFSET,
1607 .modulemode = MODULEMODE_SWCTRL,
1608 },
1609 },
1610 };
1611
1612 /* timer9 */
1613 static struct omap_hwmod omap54xx_timer9_hwmod = {
1614 .name = "timer9",
1615 .class = &omap54xx_timer_hwmod_class,
1616 .clkdm_name = "l4per_clkdm",
1617 .main_clk = "timer9_gfclk_mux",
1618 .prcm = {
1619 .omap4 = {
1620 .clkctrl_offs = OMAP54XX_CM_L4PER_TIMER9_CLKCTRL_OFFSET,
1621 .context_offs = OMAP54XX_RM_L4PER_TIMER9_CONTEXT_OFFSET,
1622 .modulemode = MODULEMODE_SWCTRL,
1623 },
1624 },
1625 };
1626
1627 /* timer10 */
1628 static struct omap_hwmod omap54xx_timer10_hwmod = {
1629 .name = "timer10",
1630 .class = &omap54xx_timer_1ms_hwmod_class,
1631 .clkdm_name = "l4per_clkdm",
1632 .main_clk = "timer10_gfclk_mux",
1633 .flags = HWMOD_SET_DEFAULT_CLOCKACT,
1634 .prcm = {
1635 .omap4 = {
1636 .clkctrl_offs = OMAP54XX_CM_L4PER_TIMER10_CLKCTRL_OFFSET,
1637 .context_offs = OMAP54XX_RM_L4PER_TIMER10_CONTEXT_OFFSET,
1638 .modulemode = MODULEMODE_SWCTRL,
1639 },
1640 },
1641 };
1642
1643 /* timer11 */
1644 static struct omap_hwmod omap54xx_timer11_hwmod = {
1645 .name = "timer11",
1646 .class = &omap54xx_timer_hwmod_class,
1647 .clkdm_name = "l4per_clkdm",
1648 .main_clk = "timer11_gfclk_mux",
1649 .prcm = {
1650 .omap4 = {
1651 .clkctrl_offs = OMAP54XX_CM_L4PER_TIMER11_CLKCTRL_OFFSET,
1652 .context_offs = OMAP54XX_RM_L4PER_TIMER11_CONTEXT_OFFSET,
1653 .modulemode = MODULEMODE_SWCTRL,
1654 },
1655 },
1656 };
1657
1658 /*
1659 * 'uart' class
1660 * universal asynchronous receiver/transmitter (uart)
1661 */
1662
1663 static struct omap_hwmod_class_sysconfig omap54xx_uart_sysc = {
1664 .rev_offs = 0x0050,
1665 .sysc_offs = 0x0054,
1666 .syss_offs = 0x0058,
1667 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_ENAWAKEUP |
1668 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
1669 SYSS_HAS_RESET_STATUS),
1670 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1671 SIDLE_SMART_WKUP),
1672 .sysc_fields = &omap_hwmod_sysc_type1,
1673 };
1674
1675 static struct omap_hwmod_class omap54xx_uart_hwmod_class = {
1676 .name = "uart",
1677 .sysc = &omap54xx_uart_sysc,
1678 };
1679
1680 /* uart1 */
1681 static struct omap_hwmod omap54xx_uart1_hwmod = {
1682 .name = "uart1",
1683 .class = &omap54xx_uart_hwmod_class,
1684 .clkdm_name = "l4per_clkdm",
1685 .flags = HWMOD_SWSUP_SIDLE_ACT,
1686 .main_clk = "func_48m_fclk",
1687 .prcm = {
1688 .omap4 = {
1689 .clkctrl_offs = OMAP54XX_CM_L4PER_UART1_CLKCTRL_OFFSET,
1690 .context_offs = OMAP54XX_RM_L4PER_UART1_CONTEXT_OFFSET,
1691 .modulemode = MODULEMODE_SWCTRL,
1692 },
1693 },
1694 };
1695
1696 /* uart2 */
1697 static struct omap_hwmod omap54xx_uart2_hwmod = {
1698 .name = "uart2",
1699 .class = &omap54xx_uart_hwmod_class,
1700 .clkdm_name = "l4per_clkdm",
1701 .flags = HWMOD_SWSUP_SIDLE_ACT,
1702 .main_clk = "func_48m_fclk",
1703 .prcm = {
1704 .omap4 = {
1705 .clkctrl_offs = OMAP54XX_CM_L4PER_UART2_CLKCTRL_OFFSET,
1706 .context_offs = OMAP54XX_RM_L4PER_UART2_CONTEXT_OFFSET,
1707 .modulemode = MODULEMODE_SWCTRL,
1708 },
1709 },
1710 };
1711
1712 /* uart3 */
1713 static struct omap_hwmod omap54xx_uart3_hwmod = {
1714 .name = "uart3",
1715 .class = &omap54xx_uart_hwmod_class,
1716 .clkdm_name = "l4per_clkdm",
1717 .flags = DEBUG_OMAP4UART3_FLAGS | HWMOD_SWSUP_SIDLE_ACT,
1718 .main_clk = "func_48m_fclk",
1719 .prcm = {
1720 .omap4 = {
1721 .clkctrl_offs = OMAP54XX_CM_L4PER_UART3_CLKCTRL_OFFSET,
1722 .context_offs = OMAP54XX_RM_L4PER_UART3_CONTEXT_OFFSET,
1723 .modulemode = MODULEMODE_SWCTRL,
1724 },
1725 },
1726 };
1727
1728 /* uart4 */
1729 static struct omap_hwmod omap54xx_uart4_hwmod = {
1730 .name = "uart4",
1731 .class = &omap54xx_uart_hwmod_class,
1732 .clkdm_name = "l4per_clkdm",
1733 .flags = DEBUG_OMAP4UART4_FLAGS | HWMOD_SWSUP_SIDLE_ACT,
1734 .main_clk = "func_48m_fclk",
1735 .prcm = {
1736 .omap4 = {
1737 .clkctrl_offs = OMAP54XX_CM_L4PER_UART4_CLKCTRL_OFFSET,
1738 .context_offs = OMAP54XX_RM_L4PER_UART4_CONTEXT_OFFSET,
1739 .modulemode = MODULEMODE_SWCTRL,
1740 },
1741 },
1742 };
1743
1744 /* uart5 */
1745 static struct omap_hwmod omap54xx_uart5_hwmod = {
1746 .name = "uart5",
1747 .class = &omap54xx_uart_hwmod_class,
1748 .clkdm_name = "l4per_clkdm",
1749 .flags = HWMOD_SWSUP_SIDLE_ACT,
1750 .main_clk = "func_48m_fclk",
1751 .prcm = {
1752 .omap4 = {
1753 .clkctrl_offs = OMAP54XX_CM_L4PER_UART5_CLKCTRL_OFFSET,
1754 .context_offs = OMAP54XX_RM_L4PER_UART5_CONTEXT_OFFSET,
1755 .modulemode = MODULEMODE_SWCTRL,
1756 },
1757 },
1758 };
1759
1760 /* uart6 */
1761 static struct omap_hwmod omap54xx_uart6_hwmod = {
1762 .name = "uart6",
1763 .class = &omap54xx_uart_hwmod_class,
1764 .clkdm_name = "l4per_clkdm",
1765 .flags = HWMOD_SWSUP_SIDLE_ACT,
1766 .main_clk = "func_48m_fclk",
1767 .prcm = {
1768 .omap4 = {
1769 .clkctrl_offs = OMAP54XX_CM_L4PER_UART6_CLKCTRL_OFFSET,
1770 .context_offs = OMAP54XX_RM_L4PER_UART6_CONTEXT_OFFSET,
1771 .modulemode = MODULEMODE_SWCTRL,
1772 },
1773 },
1774 };
1775
1776 /*
1777 * 'usb_host_hs' class
1778 * high-speed multi-port usb host controller
1779 */
1780
1781 static struct omap_hwmod_class_sysconfig omap54xx_usb_host_hs_sysc = {
1782 .rev_offs = 0x0000,
1783 .sysc_offs = 0x0010,
1784 .sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_RESET_STATUS |
1785 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
1786 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1787 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
1788 MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
1789 .sysc_fields = &omap_hwmod_sysc_type2,
1790 };
1791
1792 static struct omap_hwmod_class omap54xx_usb_host_hs_hwmod_class = {
1793 .name = "usb_host_hs",
1794 .sysc = &omap54xx_usb_host_hs_sysc,
1795 };
1796
1797 static struct omap_hwmod omap54xx_usb_host_hs_hwmod = {
1798 .name = "usb_host_hs",
1799 .class = &omap54xx_usb_host_hs_hwmod_class,
1800 .clkdm_name = "l3init_clkdm",
1801 /*
1802 * Errata: USBHOST Configured In Smart-Idle Can Lead To a Deadlock
1803 * id: i660
1804 *
1805 * Description:
1806 * In the following configuration :
1807 * - USBHOST module is set to smart-idle mode
1808 * - PRCM asserts idle_req to the USBHOST module ( This typically
1809 * happens when the system is going to a low power mode : all ports
1810 * have been suspended, the master part of the USBHOST module has
1811 * entered the standby state, and SW has cut the functional clocks)
1812 * - an USBHOST interrupt occurs before the module is able to answer
1813 * idle_ack, typically a remote wakeup IRQ.
1814 * Then the USB HOST module will enter a deadlock situation where it
1815 * is no more accessible nor functional.
1816 *
1817 * Workaround:
1818 * Don't use smart idle; use only force idle, hence HWMOD_SWSUP_SIDLE
1819 */
1820
1821 /*
1822 * Errata: USB host EHCI may stall when entering smart-standby mode
1823 * Id: i571
1824 *
1825 * Description:
1826 * When the USBHOST module is set to smart-standby mode, and when it is
1827 * ready to enter the standby state (i.e. all ports are suspended and
1828 * all attached devices are in suspend mode), then it can wrongly assert
1829 * the Mstandby signal too early while there are still some residual OCP
1830 * transactions ongoing. If this condition occurs, the internal state
1831 * machine may go to an undefined state and the USB link may be stuck
1832 * upon the next resume.
1833 *
1834 * Workaround:
1835 * Don't use smart standby; use only force standby,
1836 * hence HWMOD_SWSUP_MSTANDBY
1837 */
1838
1839 .flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY,
1840 .main_clk = "l3init_60m_fclk",
1841 .prcm = {
1842 .omap4 = {
1843 .clkctrl_offs = OMAP54XX_CM_L3INIT_USB_HOST_HS_CLKCTRL_OFFSET,
1844 .context_offs = OMAP54XX_RM_L3INIT_USB_HOST_HS_CONTEXT_OFFSET,
1845 .modulemode = MODULEMODE_SWCTRL,
1846 },
1847 },
1848 };
1849
1850 /*
1851 * 'usb_tll_hs' class
1852 * usb_tll_hs module is the adapter on the usb_host_hs ports
1853 */
1854
1855 static struct omap_hwmod_class_sysconfig omap54xx_usb_tll_hs_sysc = {
1856 .rev_offs = 0x0000,
1857 .sysc_offs = 0x0010,
1858 .syss_offs = 0x0014,
1859 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
1860 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
1861 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
1862 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1863 .sysc_fields = &omap_hwmod_sysc_type1,
1864 };
1865
1866 static struct omap_hwmod_class omap54xx_usb_tll_hs_hwmod_class = {
1867 .name = "usb_tll_hs",
1868 .sysc = &omap54xx_usb_tll_hs_sysc,
1869 };
1870
1871 static struct omap_hwmod omap54xx_usb_tll_hs_hwmod = {
1872 .name = "usb_tll_hs",
1873 .class = &omap54xx_usb_tll_hs_hwmod_class,
1874 .clkdm_name = "l3init_clkdm",
1875 .main_clk = "l4_root_clk_div",
1876 .prcm = {
1877 .omap4 = {
1878 .clkctrl_offs = OMAP54XX_CM_L3INIT_USB_TLL_HS_CLKCTRL_OFFSET,
1879 .context_offs = OMAP54XX_RM_L3INIT_USB_TLL_HS_CONTEXT_OFFSET,
1880 .modulemode = MODULEMODE_HWCTRL,
1881 },
1882 },
1883 };
1884
1885 /*
1886 * 'usb_otg_ss' class
1887 * 2.0 super speed (usb_otg_ss) controller
1888 */
1889
1890 static struct omap_hwmod_class_sysconfig omap54xx_usb_otg_ss_sysc = {
1891 .rev_offs = 0x0000,
1892 .sysc_offs = 0x0010,
1893 .sysc_flags = (SYSC_HAS_DMADISABLE | SYSC_HAS_MIDLEMODE |
1894 SYSC_HAS_SIDLEMODE),
1895 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1896 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
1897 MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
1898 .sysc_fields = &omap_hwmod_sysc_type2,
1899 };
1900
1901 static struct omap_hwmod_class omap54xx_usb_otg_ss_hwmod_class = {
1902 .name = "usb_otg_ss",
1903 .sysc = &omap54xx_usb_otg_ss_sysc,
1904 };
1905
1906 /* usb_otg_ss */
1907 static struct omap_hwmod_opt_clk usb_otg_ss_opt_clks[] = {
1908 { .role = "refclk960m", .clk = "usb_otg_ss_refclk960m" },
1909 };
1910
1911 static struct omap_hwmod omap54xx_usb_otg_ss_hwmod = {
1912 .name = "usb_otg_ss",
1913 .class = &omap54xx_usb_otg_ss_hwmod_class,
1914 .clkdm_name = "l3init_clkdm",
1915 .flags = HWMOD_SWSUP_SIDLE,
1916 .main_clk = "dpll_core_h13x2_ck",
1917 .prcm = {
1918 .omap4 = {
1919 .clkctrl_offs = OMAP54XX_CM_L3INIT_USB_OTG_SS_CLKCTRL_OFFSET,
1920 .context_offs = OMAP54XX_RM_L3INIT_USB_OTG_SS_CONTEXT_OFFSET,
1921 .modulemode = MODULEMODE_HWCTRL,
1922 },
1923 },
1924 .opt_clks = usb_otg_ss_opt_clks,
1925 .opt_clks_cnt = ARRAY_SIZE(usb_otg_ss_opt_clks),
1926 };
1927
1928 /*
1929 * 'wd_timer' class
1930 * 32-bit watchdog upward counter that generates a pulse on the reset pin on
1931 * overflow condition
1932 */
1933
1934 static struct omap_hwmod_class_sysconfig omap54xx_wd_timer_sysc = {
1935 .rev_offs = 0x0000,
1936 .sysc_offs = 0x0010,
1937 .syss_offs = 0x0014,
1938 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_SIDLEMODE |
1939 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
1940 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1941 SIDLE_SMART_WKUP),
1942 .sysc_fields = &omap_hwmod_sysc_type1,
1943 };
1944
1945 static struct omap_hwmod_class omap54xx_wd_timer_hwmod_class = {
1946 .name = "wd_timer",
1947 .sysc = &omap54xx_wd_timer_sysc,
1948 .pre_shutdown = &omap2_wd_timer_disable,
1949 };
1950
1951 /* wd_timer2 */
1952 static struct omap_hwmod omap54xx_wd_timer2_hwmod = {
1953 .name = "wd_timer2",
1954 .class = &omap54xx_wd_timer_hwmod_class,
1955 .clkdm_name = "wkupaon_clkdm",
1956 .main_clk = "sys_32k_ck",
1957 .prcm = {
1958 .omap4 = {
1959 .clkctrl_offs = OMAP54XX_CM_WKUPAON_WD_TIMER2_CLKCTRL_OFFSET,
1960 .context_offs = OMAP54XX_RM_WKUPAON_WD_TIMER2_CONTEXT_OFFSET,
1961 .modulemode = MODULEMODE_SWCTRL,
1962 },
1963 },
1964 };
1965
1966 /*
1967 * 'ocp2scp' class
1968 * bridge to transform ocp interface protocol to scp (serial control port)
1969 * protocol
1970 */
1971 /* ocp2scp3 */
1972 static struct omap_hwmod omap54xx_ocp2scp3_hwmod;
1973 /* l4_cfg -> ocp2scp3 */
1974 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__ocp2scp3 = {
1975 .master = &omap54xx_l4_cfg_hwmod,
1976 .slave = &omap54xx_ocp2scp3_hwmod,
1977 .clk = "l4_root_clk_div",
1978 .user = OCP_USER_MPU | OCP_USER_SDMA,
1979 };
1980
1981 static struct omap_hwmod omap54xx_ocp2scp3_hwmod = {
1982 .name = "ocp2scp3",
1983 .class = &omap54xx_ocp2scp_hwmod_class,
1984 .clkdm_name = "l3init_clkdm",
1985 .prcm = {
1986 .omap4 = {
1987 .clkctrl_offs = OMAP54XX_CM_L3INIT_OCP2SCP3_CLKCTRL_OFFSET,
1988 .context_offs = OMAP54XX_RM_L3INIT_OCP2SCP3_CONTEXT_OFFSET,
1989 .modulemode = MODULEMODE_HWCTRL,
1990 },
1991 },
1992 };
1993
1994 /*
1995 * 'sata' class
1996 * sata: serial ata interface gen2 compliant ( 1 rx/ 1 tx)
1997 */
1998
1999 static struct omap_hwmod_class_sysconfig omap54xx_sata_sysc = {
2000 .sysc_offs = 0x0000,
2001 .sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE),
2002 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2003 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
2004 MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
2005 .sysc_fields = &omap_hwmod_sysc_type2,
2006 };
2007
2008 static struct omap_hwmod_class omap54xx_sata_hwmod_class = {
2009 .name = "sata",
2010 .sysc = &omap54xx_sata_sysc,
2011 };
2012
2013 /* sata */
2014 static struct omap_hwmod omap54xx_sata_hwmod = {
2015 .name = "sata",
2016 .class = &omap54xx_sata_hwmod_class,
2017 .clkdm_name = "l3init_clkdm",
2018 .flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY,
2019 .main_clk = "func_48m_fclk",
2020 .mpu_rt_idx = 1,
2021 .prcm = {
2022 .omap4 = {
2023 .clkctrl_offs = OMAP54XX_CM_L3INIT_SATA_CLKCTRL_OFFSET,
2024 .context_offs = OMAP54XX_RM_L3INIT_SATA_CONTEXT_OFFSET,
2025 .modulemode = MODULEMODE_SWCTRL,
2026 },
2027 },
2028 };
2029
2030 /* l4_cfg -> sata */
2031 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__sata = {
2032 .master = &omap54xx_l4_cfg_hwmod,
2033 .slave = &omap54xx_sata_hwmod,
2034 .clk = "l3_iclk_div",
2035 .user = OCP_USER_MPU | OCP_USER_SDMA,
2036 };
2037
2038 /*
2039 * Interfaces
2040 */
2041
2042 /* l3_main_1 -> dmm */
2043 static struct omap_hwmod_ocp_if omap54xx_l3_main_1__dmm = {
2044 .master = &omap54xx_l3_main_1_hwmod,
2045 .slave = &omap54xx_dmm_hwmod,
2046 .clk = "l3_iclk_div",
2047 .user = OCP_USER_SDMA,
2048 };
2049
2050 /* l3_main_3 -> l3_instr */
2051 static struct omap_hwmod_ocp_if omap54xx_l3_main_3__l3_instr = {
2052 .master = &omap54xx_l3_main_3_hwmod,
2053 .slave = &omap54xx_l3_instr_hwmod,
2054 .clk = "l3_iclk_div",
2055 .user = OCP_USER_MPU | OCP_USER_SDMA,
2056 };
2057
2058 /* l3_main_2 -> l3_main_1 */
2059 static struct omap_hwmod_ocp_if omap54xx_l3_main_2__l3_main_1 = {
2060 .master = &omap54xx_l3_main_2_hwmod,
2061 .slave = &omap54xx_l3_main_1_hwmod,
2062 .clk = "l3_iclk_div",
2063 .user = OCP_USER_MPU | OCP_USER_SDMA,
2064 };
2065
2066 /* l4_cfg -> l3_main_1 */
2067 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__l3_main_1 = {
2068 .master = &omap54xx_l4_cfg_hwmod,
2069 .slave = &omap54xx_l3_main_1_hwmod,
2070 .clk = "l3_iclk_div",
2071 .user = OCP_USER_MPU | OCP_USER_SDMA,
2072 };
2073
2074 /* l4_cfg -> mmu_dsp */
2075 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__mmu_dsp = {
2076 .master = &omap54xx_l4_cfg_hwmod,
2077 .slave = &omap54xx_mmu_dsp_hwmod,
2078 .clk = "l4_root_clk_div",
2079 .user = OCP_USER_MPU | OCP_USER_SDMA,
2080 };
2081
2082 /* mpu -> l3_main_1 */
2083 static struct omap_hwmod_ocp_if omap54xx_mpu__l3_main_1 = {
2084 .master = &omap54xx_mpu_hwmod,
2085 .slave = &omap54xx_l3_main_1_hwmod,
2086 .clk = "l3_iclk_div",
2087 .user = OCP_USER_MPU,
2088 };
2089
2090 /* l3_main_1 -> l3_main_2 */
2091 static struct omap_hwmod_ocp_if omap54xx_l3_main_1__l3_main_2 = {
2092 .master = &omap54xx_l3_main_1_hwmod,
2093 .slave = &omap54xx_l3_main_2_hwmod,
2094 .clk = "l3_iclk_div",
2095 .user = OCP_USER_MPU,
2096 };
2097
2098 /* l4_cfg -> l3_main_2 */
2099 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__l3_main_2 = {
2100 .master = &omap54xx_l4_cfg_hwmod,
2101 .slave = &omap54xx_l3_main_2_hwmod,
2102 .clk = "l3_iclk_div",
2103 .user = OCP_USER_MPU | OCP_USER_SDMA,
2104 };
2105
2106 /* l3_main_2 -> mmu_ipu */
2107 static struct omap_hwmod_ocp_if omap54xx_l3_main_2__mmu_ipu = {
2108 .master = &omap54xx_l3_main_2_hwmod,
2109 .slave = &omap54xx_mmu_ipu_hwmod,
2110 .clk = "l3_iclk_div",
2111 .user = OCP_USER_MPU | OCP_USER_SDMA,
2112 };
2113
2114 /* l3_main_1 -> l3_main_3 */
2115 static struct omap_hwmod_ocp_if omap54xx_l3_main_1__l3_main_3 = {
2116 .master = &omap54xx_l3_main_1_hwmod,
2117 .slave = &omap54xx_l3_main_3_hwmod,
2118 .clk = "l3_iclk_div",
2119 .user = OCP_USER_MPU,
2120 };
2121
2122 /* l3_main_2 -> l3_main_3 */
2123 static struct omap_hwmod_ocp_if omap54xx_l3_main_2__l3_main_3 = {
2124 .master = &omap54xx_l3_main_2_hwmod,
2125 .slave = &omap54xx_l3_main_3_hwmod,
2126 .clk = "l3_iclk_div",
2127 .user = OCP_USER_MPU | OCP_USER_SDMA,
2128 };
2129
2130 /* l4_cfg -> l3_main_3 */
2131 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__l3_main_3 = {
2132 .master = &omap54xx_l4_cfg_hwmod,
2133 .slave = &omap54xx_l3_main_3_hwmod,
2134 .clk = "l3_iclk_div",
2135 .user = OCP_USER_MPU | OCP_USER_SDMA,
2136 };
2137
2138 /* l3_main_1 -> l4_abe */
2139 static struct omap_hwmod_ocp_if omap54xx_l3_main_1__l4_abe = {
2140 .master = &omap54xx_l3_main_1_hwmod,
2141 .slave = &omap54xx_l4_abe_hwmod,
2142 .clk = "abe_iclk",
2143 .user = OCP_USER_MPU | OCP_USER_SDMA,
2144 };
2145
2146 /* mpu -> l4_abe */
2147 static struct omap_hwmod_ocp_if omap54xx_mpu__l4_abe = {
2148 .master = &omap54xx_mpu_hwmod,
2149 .slave = &omap54xx_l4_abe_hwmod,
2150 .clk = "abe_iclk",
2151 .user = OCP_USER_MPU | OCP_USER_SDMA,
2152 };
2153
2154 /* l3_main_1 -> l4_cfg */
2155 static struct omap_hwmod_ocp_if omap54xx_l3_main_1__l4_cfg = {
2156 .master = &omap54xx_l3_main_1_hwmod,
2157 .slave = &omap54xx_l4_cfg_hwmod,
2158 .clk = "l4_root_clk_div",
2159 .user = OCP_USER_MPU | OCP_USER_SDMA,
2160 };
2161
2162 /* l3_main_2 -> l4_per */
2163 static struct omap_hwmod_ocp_if omap54xx_l3_main_2__l4_per = {
2164 .master = &omap54xx_l3_main_2_hwmod,
2165 .slave = &omap54xx_l4_per_hwmod,
2166 .clk = "l4_root_clk_div",
2167 .user = OCP_USER_MPU | OCP_USER_SDMA,
2168 };
2169
2170 /* l3_main_1 -> l4_wkup */
2171 static struct omap_hwmod_ocp_if omap54xx_l3_main_1__l4_wkup = {
2172 .master = &omap54xx_l3_main_1_hwmod,
2173 .slave = &omap54xx_l4_wkup_hwmod,
2174 .clk = "wkupaon_iclk_mux",
2175 .user = OCP_USER_MPU | OCP_USER_SDMA,
2176 };
2177
2178 /* mpu -> mpu_private */
2179 static struct omap_hwmod_ocp_if omap54xx_mpu__mpu_private = {
2180 .master = &omap54xx_mpu_hwmod,
2181 .slave = &omap54xx_mpu_private_hwmod,
2182 .clk = "l3_iclk_div",
2183 .user = OCP_USER_MPU | OCP_USER_SDMA,
2184 };
2185
2186 /* l4_wkup -> counter_32k */
2187 static struct omap_hwmod_ocp_if omap54xx_l4_wkup__counter_32k = {
2188 .master = &omap54xx_l4_wkup_hwmod,
2189 .slave = &omap54xx_counter_32k_hwmod,
2190 .clk = "wkupaon_iclk_mux",
2191 .user = OCP_USER_MPU | OCP_USER_SDMA,
2192 };
2193
2194 /* l4_cfg -> dma_system */
2195 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__dma_system = {
2196 .master = &omap54xx_l4_cfg_hwmod,
2197 .slave = &omap54xx_dma_system_hwmod,
2198 .clk = "l4_root_clk_div",
2199 .user = OCP_USER_MPU | OCP_USER_SDMA,
2200 };
2201
2202 /* l4_abe -> dmic */
2203 static struct omap_hwmod_ocp_if omap54xx_l4_abe__dmic = {
2204 .master = &omap54xx_l4_abe_hwmod,
2205 .slave = &omap54xx_dmic_hwmod,
2206 .clk = "abe_iclk",
2207 .user = OCP_USER_MPU,
2208 };
2209
2210 /* l3_main_2 -> dss */
2211 static struct omap_hwmod_ocp_if omap54xx_l3_main_2__dss = {
2212 .master = &omap54xx_l3_main_2_hwmod,
2213 .slave = &omap54xx_dss_hwmod,
2214 .clk = "l3_iclk_div",
2215 .user = OCP_USER_MPU | OCP_USER_SDMA,
2216 };
2217
2218 /* l3_main_2 -> dss_dispc */
2219 static struct omap_hwmod_ocp_if omap54xx_l3_main_2__dss_dispc = {
2220 .master = &omap54xx_l3_main_2_hwmod,
2221 .slave = &omap54xx_dss_dispc_hwmod,
2222 .clk = "l3_iclk_div",
2223 .user = OCP_USER_MPU | OCP_USER_SDMA,
2224 };
2225
2226 /* l3_main_2 -> dss_dsi1_a */
2227 static struct omap_hwmod_ocp_if omap54xx_l3_main_2__dss_dsi1_a = {
2228 .master = &omap54xx_l3_main_2_hwmod,
2229 .slave = &omap54xx_dss_dsi1_a_hwmod,
2230 .clk = "l3_iclk_div",
2231 .user = OCP_USER_MPU | OCP_USER_SDMA,
2232 };
2233
2234 /* l3_main_2 -> dss_dsi1_c */
2235 static struct omap_hwmod_ocp_if omap54xx_l3_main_2__dss_dsi1_c = {
2236 .master = &omap54xx_l3_main_2_hwmod,
2237 .slave = &omap54xx_dss_dsi1_c_hwmod,
2238 .clk = "l3_iclk_div",
2239 .user = OCP_USER_MPU | OCP_USER_SDMA,
2240 };
2241
2242 /* l3_main_2 -> dss_hdmi */
2243 static struct omap_hwmod_ocp_if omap54xx_l3_main_2__dss_hdmi = {
2244 .master = &omap54xx_l3_main_2_hwmod,
2245 .slave = &omap54xx_dss_hdmi_hwmod,
2246 .clk = "l3_iclk_div",
2247 .user = OCP_USER_MPU | OCP_USER_SDMA,
2248 };
2249
2250 /* l3_main_2 -> dss_rfbi */
2251 static struct omap_hwmod_ocp_if omap54xx_l3_main_2__dss_rfbi = {
2252 .master = &omap54xx_l3_main_2_hwmod,
2253 .slave = &omap54xx_dss_rfbi_hwmod,
2254 .clk = "l3_iclk_div",
2255 .user = OCP_USER_MPU | OCP_USER_SDMA,
2256 };
2257
2258 /* mpu -> emif1 */
2259 static struct omap_hwmod_ocp_if omap54xx_mpu__emif1 = {
2260 .master = &omap54xx_mpu_hwmod,
2261 .slave = &omap54xx_emif1_hwmod,
2262 .clk = "dpll_core_h11x2_ck",
2263 .user = OCP_USER_MPU | OCP_USER_SDMA,
2264 };
2265
2266 /* mpu -> emif2 */
2267 static struct omap_hwmod_ocp_if omap54xx_mpu__emif2 = {
2268 .master = &omap54xx_mpu_hwmod,
2269 .slave = &omap54xx_emif2_hwmod,
2270 .clk = "dpll_core_h11x2_ck",
2271 .user = OCP_USER_MPU | OCP_USER_SDMA,
2272 };
2273
2274 /* l4_wkup -> gpio1 */
2275 static struct omap_hwmod_ocp_if omap54xx_l4_wkup__gpio1 = {
2276 .master = &omap54xx_l4_wkup_hwmod,
2277 .slave = &omap54xx_gpio1_hwmod,
2278 .clk = "wkupaon_iclk_mux",
2279 .user = OCP_USER_MPU | OCP_USER_SDMA,
2280 };
2281
2282 /* l4_per -> gpio2 */
2283 static struct omap_hwmod_ocp_if omap54xx_l4_per__gpio2 = {
2284 .master = &omap54xx_l4_per_hwmod,
2285 .slave = &omap54xx_gpio2_hwmod,
2286 .clk = "l4_root_clk_div",
2287 .user = OCP_USER_MPU | OCP_USER_SDMA,
2288 };
2289
2290 /* l4_per -> gpio3 */
2291 static struct omap_hwmod_ocp_if omap54xx_l4_per__gpio3 = {
2292 .master = &omap54xx_l4_per_hwmod,
2293 .slave = &omap54xx_gpio3_hwmod,
2294 .clk = "l4_root_clk_div",
2295 .user = OCP_USER_MPU | OCP_USER_SDMA,
2296 };
2297
2298 /* l4_per -> gpio4 */
2299 static struct omap_hwmod_ocp_if omap54xx_l4_per__gpio4 = {
2300 .master = &omap54xx_l4_per_hwmod,
2301 .slave = &omap54xx_gpio4_hwmod,
2302 .clk = "l4_root_clk_div",
2303 .user = OCP_USER_MPU | OCP_USER_SDMA,
2304 };
2305
2306 /* l4_per -> gpio5 */
2307 static struct omap_hwmod_ocp_if omap54xx_l4_per__gpio5 = {
2308 .master = &omap54xx_l4_per_hwmod,
2309 .slave = &omap54xx_gpio5_hwmod,
2310 .clk = "l4_root_clk_div",
2311 .user = OCP_USER_MPU | OCP_USER_SDMA,
2312 };
2313
2314 /* l4_per -> gpio6 */
2315 static struct omap_hwmod_ocp_if omap54xx_l4_per__gpio6 = {
2316 .master = &omap54xx_l4_per_hwmod,
2317 .slave = &omap54xx_gpio6_hwmod,
2318 .clk = "l4_root_clk_div",
2319 .user = OCP_USER_MPU | OCP_USER_SDMA,
2320 };
2321
2322 /* l4_per -> gpio7 */
2323 static struct omap_hwmod_ocp_if omap54xx_l4_per__gpio7 = {
2324 .master = &omap54xx_l4_per_hwmod,
2325 .slave = &omap54xx_gpio7_hwmod,
2326 .clk = "l4_root_clk_div",
2327 .user = OCP_USER_MPU | OCP_USER_SDMA,
2328 };
2329
2330 /* l4_per -> gpio8 */
2331 static struct omap_hwmod_ocp_if omap54xx_l4_per__gpio8 = {
2332 .master = &omap54xx_l4_per_hwmod,
2333 .slave = &omap54xx_gpio8_hwmod,
2334 .clk = "l4_root_clk_div",
2335 .user = OCP_USER_MPU | OCP_USER_SDMA,
2336 };
2337
2338 /* l4_per -> i2c1 */
2339 static struct omap_hwmod_ocp_if omap54xx_l4_per__i2c1 = {
2340 .master = &omap54xx_l4_per_hwmod,
2341 .slave = &omap54xx_i2c1_hwmod,
2342 .clk = "l4_root_clk_div",
2343 .user = OCP_USER_MPU | OCP_USER_SDMA,
2344 };
2345
2346 /* l4_per -> i2c2 */
2347 static struct omap_hwmod_ocp_if omap54xx_l4_per__i2c2 = {
2348 .master = &omap54xx_l4_per_hwmod,
2349 .slave = &omap54xx_i2c2_hwmod,
2350 .clk = "l4_root_clk_div",
2351 .user = OCP_USER_MPU | OCP_USER_SDMA,
2352 };
2353
2354 /* l4_per -> i2c3 */
2355 static struct omap_hwmod_ocp_if omap54xx_l4_per__i2c3 = {
2356 .master = &omap54xx_l4_per_hwmod,
2357 .slave = &omap54xx_i2c3_hwmod,
2358 .clk = "l4_root_clk_div",
2359 .user = OCP_USER_MPU | OCP_USER_SDMA,
2360 };
2361
2362 /* l4_per -> i2c4 */
2363 static struct omap_hwmod_ocp_if omap54xx_l4_per__i2c4 = {
2364 .master = &omap54xx_l4_per_hwmod,
2365 .slave = &omap54xx_i2c4_hwmod,
2366 .clk = "l4_root_clk_div",
2367 .user = OCP_USER_MPU | OCP_USER_SDMA,
2368 };
2369
2370 /* l4_per -> i2c5 */
2371 static struct omap_hwmod_ocp_if omap54xx_l4_per__i2c5 = {
2372 .master = &omap54xx_l4_per_hwmod,
2373 .slave = &omap54xx_i2c5_hwmod,
2374 .clk = "l4_root_clk_div",
2375 .user = OCP_USER_MPU | OCP_USER_SDMA,
2376 };
2377
2378 /* l4_wkup -> kbd */
2379 static struct omap_hwmod_ocp_if omap54xx_l4_wkup__kbd = {
2380 .master = &omap54xx_l4_wkup_hwmod,
2381 .slave = &omap54xx_kbd_hwmod,
2382 .clk = "wkupaon_iclk_mux",
2383 .user = OCP_USER_MPU | OCP_USER_SDMA,
2384 };
2385
2386 /* l4_cfg -> mailbox */
2387 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__mailbox = {
2388 .master = &omap54xx_l4_cfg_hwmod,
2389 .slave = &omap54xx_mailbox_hwmod,
2390 .clk = "l4_root_clk_div",
2391 .user = OCP_USER_MPU | OCP_USER_SDMA,
2392 };
2393
2394 /* l4_abe -> mcbsp1 */
2395 static struct omap_hwmod_ocp_if omap54xx_l4_abe__mcbsp1 = {
2396 .master = &omap54xx_l4_abe_hwmod,
2397 .slave = &omap54xx_mcbsp1_hwmod,
2398 .clk = "abe_iclk",
2399 .user = OCP_USER_MPU,
2400 };
2401
2402 /* l4_abe -> mcbsp2 */
2403 static struct omap_hwmod_ocp_if omap54xx_l4_abe__mcbsp2 = {
2404 .master = &omap54xx_l4_abe_hwmod,
2405 .slave = &omap54xx_mcbsp2_hwmod,
2406 .clk = "abe_iclk",
2407 .user = OCP_USER_MPU,
2408 };
2409
2410 /* l4_abe -> mcbsp3 */
2411 static struct omap_hwmod_ocp_if omap54xx_l4_abe__mcbsp3 = {
2412 .master = &omap54xx_l4_abe_hwmod,
2413 .slave = &omap54xx_mcbsp3_hwmod,
2414 .clk = "abe_iclk",
2415 .user = OCP_USER_MPU,
2416 };
2417
2418 /* l4_abe -> mcpdm */
2419 static struct omap_hwmod_ocp_if omap54xx_l4_abe__mcpdm = {
2420 .master = &omap54xx_l4_abe_hwmod,
2421 .slave = &omap54xx_mcpdm_hwmod,
2422 .clk = "abe_iclk",
2423 .user = OCP_USER_MPU,
2424 };
2425
2426 /* l4_per -> mcspi1 */
2427 static struct omap_hwmod_ocp_if omap54xx_l4_per__mcspi1 = {
2428 .master = &omap54xx_l4_per_hwmod,
2429 .slave = &omap54xx_mcspi1_hwmod,
2430 .clk = "l4_root_clk_div",
2431 .user = OCP_USER_MPU | OCP_USER_SDMA,
2432 };
2433
2434 /* l4_per -> mcspi2 */
2435 static struct omap_hwmod_ocp_if omap54xx_l4_per__mcspi2 = {
2436 .master = &omap54xx_l4_per_hwmod,
2437 .slave = &omap54xx_mcspi2_hwmod,
2438 .clk = "l4_root_clk_div",
2439 .user = OCP_USER_MPU | OCP_USER_SDMA,
2440 };
2441
2442 /* l4_per -> mcspi3 */
2443 static struct omap_hwmod_ocp_if omap54xx_l4_per__mcspi3 = {
2444 .master = &omap54xx_l4_per_hwmod,
2445 .slave = &omap54xx_mcspi3_hwmod,
2446 .clk = "l4_root_clk_div",
2447 .user = OCP_USER_MPU | OCP_USER_SDMA,
2448 };
2449
2450 /* l4_per -> mcspi4 */
2451 static struct omap_hwmod_ocp_if omap54xx_l4_per__mcspi4 = {
2452 .master = &omap54xx_l4_per_hwmod,
2453 .slave = &omap54xx_mcspi4_hwmod,
2454 .clk = "l4_root_clk_div",
2455 .user = OCP_USER_MPU | OCP_USER_SDMA,
2456 };
2457
2458 /* l4_per -> mmc1 */
2459 static struct omap_hwmod_ocp_if omap54xx_l4_per__mmc1 = {
2460 .master = &omap54xx_l4_per_hwmod,
2461 .slave = &omap54xx_mmc1_hwmod,
2462 .clk = "l3_iclk_div",
2463 .user = OCP_USER_MPU | OCP_USER_SDMA,
2464 };
2465
2466 /* l4_per -> mmc2 */
2467 static struct omap_hwmod_ocp_if omap54xx_l4_per__mmc2 = {
2468 .master = &omap54xx_l4_per_hwmod,
2469 .slave = &omap54xx_mmc2_hwmod,
2470 .clk = "l3_iclk_div",
2471 .user = OCP_USER_MPU | OCP_USER_SDMA,
2472 };
2473
2474 /* l4_per -> mmc3 */
2475 static struct omap_hwmod_ocp_if omap54xx_l4_per__mmc3 = {
2476 .master = &omap54xx_l4_per_hwmod,
2477 .slave = &omap54xx_mmc3_hwmod,
2478 .clk = "l4_root_clk_div",
2479 .user = OCP_USER_MPU | OCP_USER_SDMA,
2480 };
2481
2482 /* l4_per -> mmc4 */
2483 static struct omap_hwmod_ocp_if omap54xx_l4_per__mmc4 = {
2484 .master = &omap54xx_l4_per_hwmod,
2485 .slave = &omap54xx_mmc4_hwmod,
2486 .clk = "l4_root_clk_div",
2487 .user = OCP_USER_MPU | OCP_USER_SDMA,
2488 };
2489
2490 /* l4_per -> mmc5 */
2491 static struct omap_hwmod_ocp_if omap54xx_l4_per__mmc5 = {
2492 .master = &omap54xx_l4_per_hwmod,
2493 .slave = &omap54xx_mmc5_hwmod,
2494 .clk = "l4_root_clk_div",
2495 .user = OCP_USER_MPU | OCP_USER_SDMA,
2496 };
2497
2498 /* l4_cfg -> mpu */
2499 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__mpu = {
2500 .master = &omap54xx_l4_cfg_hwmod,
2501 .slave = &omap54xx_mpu_hwmod,
2502 .clk = "l4_root_clk_div",
2503 .user = OCP_USER_MPU | OCP_USER_SDMA,
2504 };
2505
2506 /* l4_cfg -> spinlock */
2507 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__spinlock = {
2508 .master = &omap54xx_l4_cfg_hwmod,
2509 .slave = &omap54xx_spinlock_hwmod,
2510 .clk = "l4_root_clk_div",
2511 .user = OCP_USER_MPU | OCP_USER_SDMA,
2512 };
2513
2514 /* l4_cfg -> ocp2scp1 */
2515 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__ocp2scp1 = {
2516 .master = &omap54xx_l4_cfg_hwmod,
2517 .slave = &omap54xx_ocp2scp1_hwmod,
2518 .clk = "l4_root_clk_div",
2519 .user = OCP_USER_MPU | OCP_USER_SDMA,
2520 };
2521
2522 /* l4_wkup -> timer1 */
2523 static struct omap_hwmod_ocp_if omap54xx_l4_wkup__timer1 = {
2524 .master = &omap54xx_l4_wkup_hwmod,
2525 .slave = &omap54xx_timer1_hwmod,
2526 .clk = "wkupaon_iclk_mux",
2527 .user = OCP_USER_MPU | OCP_USER_SDMA,
2528 };
2529
2530 /* l4_per -> timer2 */
2531 static struct omap_hwmod_ocp_if omap54xx_l4_per__timer2 = {
2532 .master = &omap54xx_l4_per_hwmod,
2533 .slave = &omap54xx_timer2_hwmod,
2534 .clk = "l4_root_clk_div",
2535 .user = OCP_USER_MPU | OCP_USER_SDMA,
2536 };
2537
2538 /* l4_per -> timer3 */
2539 static struct omap_hwmod_ocp_if omap54xx_l4_per__timer3 = {
2540 .master = &omap54xx_l4_per_hwmod,
2541 .slave = &omap54xx_timer3_hwmod,
2542 .clk = "l4_root_clk_div",
2543 .user = OCP_USER_MPU | OCP_USER_SDMA,
2544 };
2545
2546 /* l4_per -> timer4 */
2547 static struct omap_hwmod_ocp_if omap54xx_l4_per__timer4 = {
2548 .master = &omap54xx_l4_per_hwmod,
2549 .slave = &omap54xx_timer4_hwmod,
2550 .clk = "l4_root_clk_div",
2551 .user = OCP_USER_MPU | OCP_USER_SDMA,
2552 };
2553
2554 /* l4_abe -> timer5 */
2555 static struct omap_hwmod_ocp_if omap54xx_l4_abe__timer5 = {
2556 .master = &omap54xx_l4_abe_hwmod,
2557 .slave = &omap54xx_timer5_hwmod,
2558 .clk = "abe_iclk",
2559 .user = OCP_USER_MPU,
2560 };
2561
2562 /* l4_abe -> timer6 */
2563 static struct omap_hwmod_ocp_if omap54xx_l4_abe__timer6 = {
2564 .master = &omap54xx_l4_abe_hwmod,
2565 .slave = &omap54xx_timer6_hwmod,
2566 .clk = "abe_iclk",
2567 .user = OCP_USER_MPU,
2568 };
2569
2570 /* l4_abe -> timer7 */
2571 static struct omap_hwmod_ocp_if omap54xx_l4_abe__timer7 = {
2572 .master = &omap54xx_l4_abe_hwmod,
2573 .slave = &omap54xx_timer7_hwmod,
2574 .clk = "abe_iclk",
2575 .user = OCP_USER_MPU,
2576 };
2577
2578 /* l4_abe -> timer8 */
2579 static struct omap_hwmod_ocp_if omap54xx_l4_abe__timer8 = {
2580 .master = &omap54xx_l4_abe_hwmod,
2581 .slave = &omap54xx_timer8_hwmod,
2582 .clk = "abe_iclk",
2583 .user = OCP_USER_MPU,
2584 };
2585
2586 /* l4_per -> timer9 */
2587 static struct omap_hwmod_ocp_if omap54xx_l4_per__timer9 = {
2588 .master = &omap54xx_l4_per_hwmod,
2589 .slave = &omap54xx_timer9_hwmod,
2590 .clk = "l4_root_clk_div",
2591 .user = OCP_USER_MPU | OCP_USER_SDMA,
2592 };
2593
2594 /* l4_per -> timer10 */
2595 static struct omap_hwmod_ocp_if omap54xx_l4_per__timer10 = {
2596 .master = &omap54xx_l4_per_hwmod,
2597 .slave = &omap54xx_timer10_hwmod,
2598 .clk = "l4_root_clk_div",
2599 .user = OCP_USER_MPU | OCP_USER_SDMA,
2600 };
2601
2602 /* l4_per -> timer11 */
2603 static struct omap_hwmod_ocp_if omap54xx_l4_per__timer11 = {
2604 .master = &omap54xx_l4_per_hwmod,
2605 .slave = &omap54xx_timer11_hwmod,
2606 .clk = "l4_root_clk_div",
2607 .user = OCP_USER_MPU | OCP_USER_SDMA,
2608 };
2609
2610 /* l4_per -> uart1 */
2611 static struct omap_hwmod_ocp_if omap54xx_l4_per__uart1 = {
2612 .master = &omap54xx_l4_per_hwmod,
2613 .slave = &omap54xx_uart1_hwmod,
2614 .clk = "l4_root_clk_div",
2615 .user = OCP_USER_MPU | OCP_USER_SDMA,
2616 };
2617
2618 /* l4_per -> uart2 */
2619 static struct omap_hwmod_ocp_if omap54xx_l4_per__uart2 = {
2620 .master = &omap54xx_l4_per_hwmod,
2621 .slave = &omap54xx_uart2_hwmod,
2622 .clk = "l4_root_clk_div",
2623 .user = OCP_USER_MPU | OCP_USER_SDMA,
2624 };
2625
2626 /* l4_per -> uart3 */
2627 static struct omap_hwmod_ocp_if omap54xx_l4_per__uart3 = {
2628 .master = &omap54xx_l4_per_hwmod,
2629 .slave = &omap54xx_uart3_hwmod,
2630 .clk = "l4_root_clk_div",
2631 .user = OCP_USER_MPU | OCP_USER_SDMA,
2632 };
2633
2634 /* l4_per -> uart4 */
2635 static struct omap_hwmod_ocp_if omap54xx_l4_per__uart4 = {
2636 .master = &omap54xx_l4_per_hwmod,
2637 .slave = &omap54xx_uart4_hwmod,
2638 .clk = "l4_root_clk_div",
2639 .user = OCP_USER_MPU | OCP_USER_SDMA,
2640 };
2641
2642 /* l4_per -> uart5 */
2643 static struct omap_hwmod_ocp_if omap54xx_l4_per__uart5 = {
2644 .master = &omap54xx_l4_per_hwmod,
2645 .slave = &omap54xx_uart5_hwmod,
2646 .clk = "l4_root_clk_div",
2647 .user = OCP_USER_MPU | OCP_USER_SDMA,
2648 };
2649
2650 /* l4_per -> uart6 */
2651 static struct omap_hwmod_ocp_if omap54xx_l4_per__uart6 = {
2652 .master = &omap54xx_l4_per_hwmod,
2653 .slave = &omap54xx_uart6_hwmod,
2654 .clk = "l4_root_clk_div",
2655 .user = OCP_USER_MPU | OCP_USER_SDMA,
2656 };
2657
2658 /* l4_cfg -> usb_host_hs */
2659 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__usb_host_hs = {
2660 .master = &omap54xx_l4_cfg_hwmod,
2661 .slave = &omap54xx_usb_host_hs_hwmod,
2662 .clk = "l3_iclk_div",
2663 .user = OCP_USER_MPU | OCP_USER_SDMA,
2664 };
2665
2666 /* l4_cfg -> usb_tll_hs */
2667 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__usb_tll_hs = {
2668 .master = &omap54xx_l4_cfg_hwmod,
2669 .slave = &omap54xx_usb_tll_hs_hwmod,
2670 .clk = "l4_root_clk_div",
2671 .user = OCP_USER_MPU | OCP_USER_SDMA,
2672 };
2673
2674 /* l4_cfg -> usb_otg_ss */
2675 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__usb_otg_ss = {
2676 .master = &omap54xx_l4_cfg_hwmod,
2677 .slave = &omap54xx_usb_otg_ss_hwmod,
2678 .clk = "dpll_core_h13x2_ck",
2679 .user = OCP_USER_MPU | OCP_USER_SDMA,
2680 };
2681
2682 /* l4_wkup -> wd_timer2 */
2683 static struct omap_hwmod_ocp_if omap54xx_l4_wkup__wd_timer2 = {
2684 .master = &omap54xx_l4_wkup_hwmod,
2685 .slave = &omap54xx_wd_timer2_hwmod,
2686 .clk = "wkupaon_iclk_mux",
2687 .user = OCP_USER_MPU | OCP_USER_SDMA,
2688 };
2689
2690 static struct omap_hwmod_ocp_if *omap54xx_hwmod_ocp_ifs[] __initdata = {
2691 &omap54xx_l3_main_1__dmm,
2692 &omap54xx_l3_main_3__l3_instr,
2693 &omap54xx_l3_main_2__l3_main_1,
2694 &omap54xx_l4_cfg__l3_main_1,
2695 &omap54xx_mpu__l3_main_1,
2696 &omap54xx_l3_main_1__l3_main_2,
2697 &omap54xx_l4_cfg__l3_main_2,
2698 &omap54xx_l3_main_1__l3_main_3,
2699 &omap54xx_l3_main_2__l3_main_3,
2700 &omap54xx_l4_cfg__l3_main_3,
2701 &omap54xx_l3_main_1__l4_abe,
2702 &omap54xx_mpu__l4_abe,
2703 &omap54xx_l3_main_1__l4_cfg,
2704 &omap54xx_l3_main_2__l4_per,
2705 &omap54xx_l3_main_1__l4_wkup,
2706 &omap54xx_mpu__mpu_private,
2707 &omap54xx_l4_wkup__counter_32k,
2708 &omap54xx_l4_cfg__dma_system,
2709 &omap54xx_l4_abe__dmic,
2710 &omap54xx_l4_cfg__mmu_dsp,
2711 &omap54xx_l3_main_2__dss,
2712 &omap54xx_l3_main_2__dss_dispc,
2713 &omap54xx_l3_main_2__dss_dsi1_a,
2714 &omap54xx_l3_main_2__dss_dsi1_c,
2715 &omap54xx_l3_main_2__dss_hdmi,
2716 &omap54xx_l3_main_2__dss_rfbi,
2717 &omap54xx_mpu__emif1,
2718 &omap54xx_mpu__emif2,
2719 &omap54xx_l4_wkup__gpio1,
2720 &omap54xx_l4_per__gpio2,
2721 &omap54xx_l4_per__gpio3,
2722 &omap54xx_l4_per__gpio4,
2723 &omap54xx_l4_per__gpio5,
2724 &omap54xx_l4_per__gpio6,
2725 &omap54xx_l4_per__gpio7,
2726 &omap54xx_l4_per__gpio8,
2727 &omap54xx_l4_per__i2c1,
2728 &omap54xx_l4_per__i2c2,
2729 &omap54xx_l4_per__i2c3,
2730 &omap54xx_l4_per__i2c4,
2731 &omap54xx_l4_per__i2c5,
2732 &omap54xx_l3_main_2__mmu_ipu,
2733 &omap54xx_l4_wkup__kbd,
2734 &omap54xx_l4_cfg__mailbox,
2735 &omap54xx_l4_abe__mcbsp1,
2736 &omap54xx_l4_abe__mcbsp2,
2737 &omap54xx_l4_abe__mcbsp3,
2738 &omap54xx_l4_abe__mcpdm,
2739 &omap54xx_l4_per__mcspi1,
2740 &omap54xx_l4_per__mcspi2,
2741 &omap54xx_l4_per__mcspi3,
2742 &omap54xx_l4_per__mcspi4,
2743 &omap54xx_l4_per__mmc1,
2744 &omap54xx_l4_per__mmc2,
2745 &omap54xx_l4_per__mmc3,
2746 &omap54xx_l4_per__mmc4,
2747 &omap54xx_l4_per__mmc5,
2748 &omap54xx_l4_cfg__mpu,
2749 &omap54xx_l4_cfg__spinlock,
2750 &omap54xx_l4_cfg__ocp2scp1,
2751 &omap54xx_l4_wkup__timer1,
2752 &omap54xx_l4_per__timer2,
2753 &omap54xx_l4_per__timer3,
2754 &omap54xx_l4_per__timer4,
2755 &omap54xx_l4_abe__timer5,
2756 &omap54xx_l4_abe__timer6,
2757 &omap54xx_l4_abe__timer7,
2758 &omap54xx_l4_abe__timer8,
2759 &omap54xx_l4_per__timer9,
2760 &omap54xx_l4_per__timer10,
2761 &omap54xx_l4_per__timer11,
2762 &omap54xx_l4_per__uart1,
2763 &omap54xx_l4_per__uart2,
2764 &omap54xx_l4_per__uart3,
2765 &omap54xx_l4_per__uart4,
2766 &omap54xx_l4_per__uart5,
2767 &omap54xx_l4_per__uart6,
2768 &omap54xx_l4_cfg__usb_host_hs,
2769 &omap54xx_l4_cfg__usb_tll_hs,
2770 &omap54xx_l4_cfg__usb_otg_ss,
2771 &omap54xx_l4_wkup__wd_timer2,
2772 &omap54xx_l4_cfg__ocp2scp3,
2773 &omap54xx_l4_cfg__sata,
2774 NULL,
2775 };
2776
2777 int __init omap54xx_hwmod_init(void)
2778 {
2779 omap_hwmod_init();
2780 return omap_hwmod_register_links(omap54xx_hwmod_ocp_ifs);
2781 }