]> git.ipfire.org Git - thirdparty/kernel/linux.git/blob - arch/arm/mach-omap2/omap_hwmod_54xx_data.c
Merge tag 'xfs-4.18-merge-10' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux
[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 .rev_offs = 0,
808 .sysc_offs = 0x0010,
809 .syss_offs = 0x0090,
810 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
811 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
812 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
813 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
814 SIDLE_SMART_WKUP),
815 .sysc_fields = &omap_hwmod_sysc_type1,
816 };
817
818 static struct omap_hwmod_class omap54xx_i2c_hwmod_class = {
819 .name = "i2c",
820 .sysc = &omap54xx_i2c_sysc,
821 .reset = &omap_i2c_reset,
822 .rev = OMAP_I2C_IP_VERSION_2,
823 };
824
825 /* i2c1 */
826 static struct omap_hwmod omap54xx_i2c1_hwmod = {
827 .name = "i2c1",
828 .class = &omap54xx_i2c_hwmod_class,
829 .clkdm_name = "l4per_clkdm",
830 .flags = HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
831 .main_clk = "func_96m_fclk",
832 .prcm = {
833 .omap4 = {
834 .clkctrl_offs = OMAP54XX_CM_L4PER_I2C1_CLKCTRL_OFFSET,
835 .context_offs = OMAP54XX_RM_L4PER_I2C1_CONTEXT_OFFSET,
836 .modulemode = MODULEMODE_SWCTRL,
837 },
838 },
839 };
840
841 /* i2c2 */
842 static struct omap_hwmod omap54xx_i2c2_hwmod = {
843 .name = "i2c2",
844 .class = &omap54xx_i2c_hwmod_class,
845 .clkdm_name = "l4per_clkdm",
846 .flags = HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
847 .main_clk = "func_96m_fclk",
848 .prcm = {
849 .omap4 = {
850 .clkctrl_offs = OMAP54XX_CM_L4PER_I2C2_CLKCTRL_OFFSET,
851 .context_offs = OMAP54XX_RM_L4PER_I2C2_CONTEXT_OFFSET,
852 .modulemode = MODULEMODE_SWCTRL,
853 },
854 },
855 };
856
857 /* i2c3 */
858 static struct omap_hwmod omap54xx_i2c3_hwmod = {
859 .name = "i2c3",
860 .class = &omap54xx_i2c_hwmod_class,
861 .clkdm_name = "l4per_clkdm",
862 .flags = HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
863 .main_clk = "func_96m_fclk",
864 .prcm = {
865 .omap4 = {
866 .clkctrl_offs = OMAP54XX_CM_L4PER_I2C3_CLKCTRL_OFFSET,
867 .context_offs = OMAP54XX_RM_L4PER_I2C3_CONTEXT_OFFSET,
868 .modulemode = MODULEMODE_SWCTRL,
869 },
870 },
871 };
872
873 /* i2c4 */
874 static struct omap_hwmod omap54xx_i2c4_hwmod = {
875 .name = "i2c4",
876 .class = &omap54xx_i2c_hwmod_class,
877 .clkdm_name = "l4per_clkdm",
878 .flags = HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
879 .main_clk = "func_96m_fclk",
880 .prcm = {
881 .omap4 = {
882 .clkctrl_offs = OMAP54XX_CM_L4PER_I2C4_CLKCTRL_OFFSET,
883 .context_offs = OMAP54XX_RM_L4PER_I2C4_CONTEXT_OFFSET,
884 .modulemode = MODULEMODE_SWCTRL,
885 },
886 },
887 };
888
889 /* i2c5 */
890 static struct omap_hwmod omap54xx_i2c5_hwmod = {
891 .name = "i2c5",
892 .class = &omap54xx_i2c_hwmod_class,
893 .clkdm_name = "l4per_clkdm",
894 .flags = HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
895 .main_clk = "func_96m_fclk",
896 .prcm = {
897 .omap4 = {
898 .clkctrl_offs = OMAP54XX_CM_L4PER_I2C5_CLKCTRL_OFFSET,
899 .context_offs = OMAP54XX_RM_L4PER_I2C5_CONTEXT_OFFSET,
900 .modulemode = MODULEMODE_SWCTRL,
901 },
902 },
903 };
904
905 /*
906 * 'kbd' class
907 * keyboard controller
908 */
909
910 static struct omap_hwmod_class_sysconfig omap54xx_kbd_sysc = {
911 .rev_offs = 0x0000,
912 .sysc_offs = 0x0010,
913 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_SIDLEMODE |
914 SYSC_HAS_SOFTRESET),
915 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
916 .sysc_fields = &omap_hwmod_sysc_type1,
917 };
918
919 static struct omap_hwmod_class omap54xx_kbd_hwmod_class = {
920 .name = "kbd",
921 .sysc = &omap54xx_kbd_sysc,
922 };
923
924 /* kbd */
925 static struct omap_hwmod omap54xx_kbd_hwmod = {
926 .name = "kbd",
927 .class = &omap54xx_kbd_hwmod_class,
928 .clkdm_name = "wkupaon_clkdm",
929 .main_clk = "sys_32k_ck",
930 .prcm = {
931 .omap4 = {
932 .clkctrl_offs = OMAP54XX_CM_WKUPAON_KBD_CLKCTRL_OFFSET,
933 .context_offs = OMAP54XX_RM_WKUPAON_KBD_CONTEXT_OFFSET,
934 .modulemode = MODULEMODE_SWCTRL,
935 },
936 },
937 };
938
939 /*
940 * 'mailbox' class
941 * mailbox module allowing communication between the on-chip processors using a
942 * queued mailbox-interrupt mechanism.
943 */
944
945 static struct omap_hwmod_class_sysconfig omap54xx_mailbox_sysc = {
946 .rev_offs = 0x0000,
947 .sysc_offs = 0x0010,
948 .sysc_flags = (SYSC_HAS_RESET_STATUS | SYSC_HAS_SIDLEMODE |
949 SYSC_HAS_SOFTRESET),
950 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
951 .sysc_fields = &omap_hwmod_sysc_type2,
952 };
953
954 static struct omap_hwmod_class omap54xx_mailbox_hwmod_class = {
955 .name = "mailbox",
956 .sysc = &omap54xx_mailbox_sysc,
957 };
958
959 /* mailbox */
960 static struct omap_hwmod omap54xx_mailbox_hwmod = {
961 .name = "mailbox",
962 .class = &omap54xx_mailbox_hwmod_class,
963 .clkdm_name = "l4cfg_clkdm",
964 .prcm = {
965 .omap4 = {
966 .clkctrl_offs = OMAP54XX_CM_L4CFG_MAILBOX_CLKCTRL_OFFSET,
967 .context_offs = OMAP54XX_RM_L4CFG_MAILBOX_CONTEXT_OFFSET,
968 },
969 },
970 };
971
972 /*
973 * 'mcbsp' class
974 * multi channel buffered serial port controller
975 */
976
977 static struct omap_hwmod_class_sysconfig omap54xx_mcbsp_sysc = {
978 .rev_offs = -ENODEV,
979 .sysc_offs = 0x008c,
980 .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_ENAWAKEUP |
981 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
982 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
983 .sysc_fields = &omap_hwmod_sysc_type1,
984 };
985
986 static struct omap_hwmod_class omap54xx_mcbsp_hwmod_class = {
987 .name = "mcbsp",
988 .sysc = &omap54xx_mcbsp_sysc,
989 };
990
991 /* mcbsp1 */
992 static struct omap_hwmod_opt_clk mcbsp1_opt_clks[] = {
993 { .role = "pad_fck", .clk = "pad_clks_ck" },
994 { .role = "prcm_fck", .clk = "mcbsp1_sync_mux_ck" },
995 };
996
997 static struct omap_hwmod omap54xx_mcbsp1_hwmod = {
998 .name = "mcbsp1",
999 .class = &omap54xx_mcbsp_hwmod_class,
1000 .clkdm_name = "abe_clkdm",
1001 .main_clk = "mcbsp1_gfclk",
1002 .prcm = {
1003 .omap4 = {
1004 .clkctrl_offs = OMAP54XX_CM_ABE_MCBSP1_CLKCTRL_OFFSET,
1005 .context_offs = OMAP54XX_RM_ABE_MCBSP1_CONTEXT_OFFSET,
1006 .modulemode = MODULEMODE_SWCTRL,
1007 },
1008 },
1009 .opt_clks = mcbsp1_opt_clks,
1010 .opt_clks_cnt = ARRAY_SIZE(mcbsp1_opt_clks),
1011 };
1012
1013 /* mcbsp2 */
1014 static struct omap_hwmod_opt_clk mcbsp2_opt_clks[] = {
1015 { .role = "pad_fck", .clk = "pad_clks_ck" },
1016 { .role = "prcm_fck", .clk = "mcbsp2_sync_mux_ck" },
1017 };
1018
1019 static struct omap_hwmod omap54xx_mcbsp2_hwmod = {
1020 .name = "mcbsp2",
1021 .class = &omap54xx_mcbsp_hwmod_class,
1022 .clkdm_name = "abe_clkdm",
1023 .main_clk = "mcbsp2_gfclk",
1024 .prcm = {
1025 .omap4 = {
1026 .clkctrl_offs = OMAP54XX_CM_ABE_MCBSP2_CLKCTRL_OFFSET,
1027 .context_offs = OMAP54XX_RM_ABE_MCBSP2_CONTEXT_OFFSET,
1028 .modulemode = MODULEMODE_SWCTRL,
1029 },
1030 },
1031 .opt_clks = mcbsp2_opt_clks,
1032 .opt_clks_cnt = ARRAY_SIZE(mcbsp2_opt_clks),
1033 };
1034
1035 /* mcbsp3 */
1036 static struct omap_hwmod_opt_clk mcbsp3_opt_clks[] = {
1037 { .role = "pad_fck", .clk = "pad_clks_ck" },
1038 { .role = "prcm_fck", .clk = "mcbsp3_sync_mux_ck" },
1039 };
1040
1041 static struct omap_hwmod omap54xx_mcbsp3_hwmod = {
1042 .name = "mcbsp3",
1043 .class = &omap54xx_mcbsp_hwmod_class,
1044 .clkdm_name = "abe_clkdm",
1045 .main_clk = "mcbsp3_gfclk",
1046 .prcm = {
1047 .omap4 = {
1048 .clkctrl_offs = OMAP54XX_CM_ABE_MCBSP3_CLKCTRL_OFFSET,
1049 .context_offs = OMAP54XX_RM_ABE_MCBSP3_CONTEXT_OFFSET,
1050 .modulemode = MODULEMODE_SWCTRL,
1051 },
1052 },
1053 .opt_clks = mcbsp3_opt_clks,
1054 .opt_clks_cnt = ARRAY_SIZE(mcbsp3_opt_clks),
1055 };
1056
1057 /*
1058 * 'mcpdm' class
1059 * multi channel pdm controller (proprietary interface with phoenix power
1060 * ic)
1061 */
1062
1063 static struct omap_hwmod_class_sysconfig omap54xx_mcpdm_sysc = {
1064 .rev_offs = 0x0000,
1065 .sysc_offs = 0x0010,
1066 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
1067 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
1068 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1069 SIDLE_SMART_WKUP),
1070 .sysc_fields = &omap_hwmod_sysc_type2,
1071 };
1072
1073 static struct omap_hwmod_class omap54xx_mcpdm_hwmod_class = {
1074 .name = "mcpdm",
1075 .sysc = &omap54xx_mcpdm_sysc,
1076 };
1077
1078 /* mcpdm */
1079 static struct omap_hwmod omap54xx_mcpdm_hwmod = {
1080 .name = "mcpdm",
1081 .class = &omap54xx_mcpdm_hwmod_class,
1082 .clkdm_name = "abe_clkdm",
1083 /*
1084 * It's suspected that the McPDM requires an off-chip main
1085 * functional clock, controlled via I2C. This IP block is
1086 * currently reset very early during boot, before I2C is
1087 * available, so it doesn't seem that we have any choice in
1088 * the kernel other than to avoid resetting it. XXX This is
1089 * really a hardware issue workaround: every IP block should
1090 * be able to source its main functional clock from either
1091 * on-chip or off-chip sources. McPDM seems to be the only
1092 * current exception.
1093 */
1094
1095 .flags = HWMOD_EXT_OPT_MAIN_CLK | HWMOD_SWSUP_SIDLE,
1096 .main_clk = "pad_clks_ck",
1097 .prcm = {
1098 .omap4 = {
1099 .clkctrl_offs = OMAP54XX_CM_ABE_MCPDM_CLKCTRL_OFFSET,
1100 .context_offs = OMAP54XX_RM_ABE_MCPDM_CONTEXT_OFFSET,
1101 .modulemode = MODULEMODE_SWCTRL,
1102 },
1103 },
1104 };
1105
1106 /*
1107 * 'mcspi' class
1108 * multichannel serial port interface (mcspi) / master/slave synchronous serial
1109 * bus
1110 */
1111
1112 static struct omap_hwmod_class_sysconfig omap54xx_mcspi_sysc = {
1113 .rev_offs = 0x0000,
1114 .sysc_offs = 0x0010,
1115 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
1116 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
1117 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1118 SIDLE_SMART_WKUP),
1119 .sysc_fields = &omap_hwmod_sysc_type2,
1120 };
1121
1122 static struct omap_hwmod_class omap54xx_mcspi_hwmod_class = {
1123 .name = "mcspi",
1124 .sysc = &omap54xx_mcspi_sysc,
1125 };
1126
1127 /* mcspi1 */
1128 static struct omap_hwmod omap54xx_mcspi1_hwmod = {
1129 .name = "mcspi1",
1130 .class = &omap54xx_mcspi_hwmod_class,
1131 .clkdm_name = "l4per_clkdm",
1132 .main_clk = "func_48m_fclk",
1133 .prcm = {
1134 .omap4 = {
1135 .clkctrl_offs = OMAP54XX_CM_L4PER_MCSPI1_CLKCTRL_OFFSET,
1136 .context_offs = OMAP54XX_RM_L4PER_MCSPI1_CONTEXT_OFFSET,
1137 .modulemode = MODULEMODE_SWCTRL,
1138 },
1139 },
1140 };
1141
1142 /* mcspi2 */
1143 static struct omap_hwmod omap54xx_mcspi2_hwmod = {
1144 .name = "mcspi2",
1145 .class = &omap54xx_mcspi_hwmod_class,
1146 .clkdm_name = "l4per_clkdm",
1147 .main_clk = "func_48m_fclk",
1148 .prcm = {
1149 .omap4 = {
1150 .clkctrl_offs = OMAP54XX_CM_L4PER_MCSPI2_CLKCTRL_OFFSET,
1151 .context_offs = OMAP54XX_RM_L4PER_MCSPI2_CONTEXT_OFFSET,
1152 .modulemode = MODULEMODE_SWCTRL,
1153 },
1154 },
1155 };
1156
1157 /* mcspi3 */
1158 static struct omap_hwmod omap54xx_mcspi3_hwmod = {
1159 .name = "mcspi3",
1160 .class = &omap54xx_mcspi_hwmod_class,
1161 .clkdm_name = "l4per_clkdm",
1162 .main_clk = "func_48m_fclk",
1163 .prcm = {
1164 .omap4 = {
1165 .clkctrl_offs = OMAP54XX_CM_L4PER_MCSPI3_CLKCTRL_OFFSET,
1166 .context_offs = OMAP54XX_RM_L4PER_MCSPI3_CONTEXT_OFFSET,
1167 .modulemode = MODULEMODE_SWCTRL,
1168 },
1169 },
1170 };
1171
1172 /* mcspi4 */
1173 static struct omap_hwmod omap54xx_mcspi4_hwmod = {
1174 .name = "mcspi4",
1175 .class = &omap54xx_mcspi_hwmod_class,
1176 .clkdm_name = "l4per_clkdm",
1177 .main_clk = "func_48m_fclk",
1178 .prcm = {
1179 .omap4 = {
1180 .clkctrl_offs = OMAP54XX_CM_L4PER_MCSPI4_CLKCTRL_OFFSET,
1181 .context_offs = OMAP54XX_RM_L4PER_MCSPI4_CONTEXT_OFFSET,
1182 .modulemode = MODULEMODE_SWCTRL,
1183 },
1184 },
1185 };
1186
1187 /*
1188 * 'mmc' class
1189 * multimedia card high-speed/sd/sdio (mmc/sd/sdio) host controller
1190 */
1191
1192 static struct omap_hwmod_class_sysconfig omap54xx_mmc_sysc = {
1193 .rev_offs = 0x0000,
1194 .sysc_offs = 0x0010,
1195 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_MIDLEMODE |
1196 SYSC_HAS_RESET_STATUS | SYSC_HAS_SIDLEMODE |
1197 SYSC_HAS_SOFTRESET),
1198 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1199 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
1200 MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
1201 .sysc_fields = &omap_hwmod_sysc_type2,
1202 };
1203
1204 static struct omap_hwmod_class omap54xx_mmc_hwmod_class = {
1205 .name = "mmc",
1206 .sysc = &omap54xx_mmc_sysc,
1207 };
1208
1209 /* mmc1 */
1210 static struct omap_hwmod_opt_clk mmc1_opt_clks[] = {
1211 { .role = "32khz_clk", .clk = "mmc1_32khz_clk" },
1212 };
1213
1214 /* mmc1 dev_attr */
1215 static struct omap_hsmmc_dev_attr mmc1_dev_attr = {
1216 .flags = OMAP_HSMMC_SUPPORTS_DUAL_VOLT,
1217 };
1218
1219 static struct omap_hwmod omap54xx_mmc1_hwmod = {
1220 .name = "mmc1",
1221 .class = &omap54xx_mmc_hwmod_class,
1222 .clkdm_name = "l3init_clkdm",
1223 .main_clk = "mmc1_fclk",
1224 .prcm = {
1225 .omap4 = {
1226 .clkctrl_offs = OMAP54XX_CM_L3INIT_MMC1_CLKCTRL_OFFSET,
1227 .context_offs = OMAP54XX_RM_L3INIT_MMC1_CONTEXT_OFFSET,
1228 .modulemode = MODULEMODE_SWCTRL,
1229 },
1230 },
1231 .opt_clks = mmc1_opt_clks,
1232 .opt_clks_cnt = ARRAY_SIZE(mmc1_opt_clks),
1233 .dev_attr = &mmc1_dev_attr,
1234 };
1235
1236 /* mmc2 */
1237 static struct omap_hwmod omap54xx_mmc2_hwmod = {
1238 .name = "mmc2",
1239 .class = &omap54xx_mmc_hwmod_class,
1240 .clkdm_name = "l3init_clkdm",
1241 .main_clk = "mmc2_fclk",
1242 .prcm = {
1243 .omap4 = {
1244 .clkctrl_offs = OMAP54XX_CM_L3INIT_MMC2_CLKCTRL_OFFSET,
1245 .context_offs = OMAP54XX_RM_L3INIT_MMC2_CONTEXT_OFFSET,
1246 .modulemode = MODULEMODE_SWCTRL,
1247 },
1248 },
1249 };
1250
1251 /* mmc3 */
1252 static struct omap_hwmod omap54xx_mmc3_hwmod = {
1253 .name = "mmc3",
1254 .class = &omap54xx_mmc_hwmod_class,
1255 .clkdm_name = "l4per_clkdm",
1256 .main_clk = "func_48m_fclk",
1257 .prcm = {
1258 .omap4 = {
1259 .clkctrl_offs = OMAP54XX_CM_L4PER_MMC3_CLKCTRL_OFFSET,
1260 .context_offs = OMAP54XX_RM_L4PER_MMC3_CONTEXT_OFFSET,
1261 .modulemode = MODULEMODE_SWCTRL,
1262 },
1263 },
1264 };
1265
1266 /* mmc4 */
1267 static struct omap_hwmod omap54xx_mmc4_hwmod = {
1268 .name = "mmc4",
1269 .class = &omap54xx_mmc_hwmod_class,
1270 .clkdm_name = "l4per_clkdm",
1271 .main_clk = "func_48m_fclk",
1272 .prcm = {
1273 .omap4 = {
1274 .clkctrl_offs = OMAP54XX_CM_L4PER_MMC4_CLKCTRL_OFFSET,
1275 .context_offs = OMAP54XX_RM_L4PER_MMC4_CONTEXT_OFFSET,
1276 .modulemode = MODULEMODE_SWCTRL,
1277 },
1278 },
1279 };
1280
1281 /* mmc5 */
1282 static struct omap_hwmod omap54xx_mmc5_hwmod = {
1283 .name = "mmc5",
1284 .class = &omap54xx_mmc_hwmod_class,
1285 .clkdm_name = "l4per_clkdm",
1286 .main_clk = "func_96m_fclk",
1287 .prcm = {
1288 .omap4 = {
1289 .clkctrl_offs = OMAP54XX_CM_L4PER_MMC5_CLKCTRL_OFFSET,
1290 .context_offs = OMAP54XX_RM_L4PER_MMC5_CONTEXT_OFFSET,
1291 .modulemode = MODULEMODE_SWCTRL,
1292 },
1293 },
1294 };
1295
1296 /*
1297 * 'mmu' class
1298 * The memory management unit performs virtual to physical address translation
1299 * for its requestors.
1300 */
1301
1302 static struct omap_hwmod_class_sysconfig omap54xx_mmu_sysc = {
1303 .rev_offs = 0x0000,
1304 .sysc_offs = 0x0010,
1305 .syss_offs = 0x0014,
1306 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
1307 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
1308 SYSS_HAS_RESET_STATUS),
1309 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1310 .sysc_fields = &omap_hwmod_sysc_type1,
1311 };
1312
1313 static struct omap_hwmod_class omap54xx_mmu_hwmod_class = {
1314 .name = "mmu",
1315 .sysc = &omap54xx_mmu_sysc,
1316 };
1317
1318 static struct omap_hwmod_rst_info omap54xx_mmu_dsp_resets[] = {
1319 { .name = "mmu_cache", .rst_shift = 1 },
1320 };
1321
1322 static struct omap_hwmod omap54xx_mmu_dsp_hwmod = {
1323 .name = "mmu_dsp",
1324 .class = &omap54xx_mmu_hwmod_class,
1325 .clkdm_name = "dsp_clkdm",
1326 .rst_lines = omap54xx_mmu_dsp_resets,
1327 .rst_lines_cnt = ARRAY_SIZE(omap54xx_mmu_dsp_resets),
1328 .main_clk = "dpll_iva_h11x2_ck",
1329 .prcm = {
1330 .omap4 = {
1331 .clkctrl_offs = OMAP54XX_CM_DSP_DSP_CLKCTRL_OFFSET,
1332 .rstctrl_offs = OMAP54XX_RM_DSP_RSTCTRL_OFFSET,
1333 .context_offs = OMAP54XX_RM_DSP_DSP_CONTEXT_OFFSET,
1334 .modulemode = MODULEMODE_HWCTRL,
1335 },
1336 },
1337 };
1338
1339 /* mmu ipu */
1340 static struct omap_hwmod_rst_info omap54xx_mmu_ipu_resets[] = {
1341 { .name = "mmu_cache", .rst_shift = 2 },
1342 };
1343
1344 static struct omap_hwmod omap54xx_mmu_ipu_hwmod = {
1345 .name = "mmu_ipu",
1346 .class = &omap54xx_mmu_hwmod_class,
1347 .clkdm_name = "ipu_clkdm",
1348 .rst_lines = omap54xx_mmu_ipu_resets,
1349 .rst_lines_cnt = ARRAY_SIZE(omap54xx_mmu_ipu_resets),
1350 .main_clk = "dpll_core_h22x2_ck",
1351 .prcm = {
1352 .omap4 = {
1353 .clkctrl_offs = OMAP54XX_CM_IPU_IPU_CLKCTRL_OFFSET,
1354 .rstctrl_offs = OMAP54XX_RM_IPU_RSTCTRL_OFFSET,
1355 .context_offs = OMAP54XX_RM_IPU_IPU_CONTEXT_OFFSET,
1356 .modulemode = MODULEMODE_HWCTRL,
1357 },
1358 },
1359 };
1360
1361 /*
1362 * 'mpu' class
1363 * mpu sub-system
1364 */
1365
1366 static struct omap_hwmod_class omap54xx_mpu_hwmod_class = {
1367 .name = "mpu",
1368 };
1369
1370 /* mpu */
1371 static struct omap_hwmod omap54xx_mpu_hwmod = {
1372 .name = "mpu",
1373 .class = &omap54xx_mpu_hwmod_class,
1374 .clkdm_name = "mpu_clkdm",
1375 .flags = HWMOD_INIT_NO_IDLE,
1376 .main_clk = "dpll_mpu_m2_ck",
1377 .prcm = {
1378 .omap4 = {
1379 .clkctrl_offs = OMAP54XX_CM_MPU_MPU_CLKCTRL_OFFSET,
1380 .context_offs = OMAP54XX_RM_MPU_MPU_CONTEXT_OFFSET,
1381 },
1382 },
1383 };
1384
1385 /*
1386 * 'spinlock' class
1387 * spinlock provides hardware assistance for synchronizing the processes
1388 * running on multiple processors
1389 */
1390
1391 static struct omap_hwmod_class_sysconfig omap54xx_spinlock_sysc = {
1392 .rev_offs = 0x0000,
1393 .sysc_offs = 0x0010,
1394 .syss_offs = 0x0014,
1395 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
1396 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
1397 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
1398 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1399 .sysc_fields = &omap_hwmod_sysc_type1,
1400 };
1401
1402 static struct omap_hwmod_class omap54xx_spinlock_hwmod_class = {
1403 .name = "spinlock",
1404 .sysc = &omap54xx_spinlock_sysc,
1405 };
1406
1407 /* spinlock */
1408 static struct omap_hwmod omap54xx_spinlock_hwmod = {
1409 .name = "spinlock",
1410 .class = &omap54xx_spinlock_hwmod_class,
1411 .clkdm_name = "l4cfg_clkdm",
1412 .prcm = {
1413 .omap4 = {
1414 .clkctrl_offs = OMAP54XX_CM_L4CFG_SPINLOCK_CLKCTRL_OFFSET,
1415 .context_offs = OMAP54XX_RM_L4CFG_SPINLOCK_CONTEXT_OFFSET,
1416 },
1417 },
1418 };
1419
1420 /*
1421 * 'ocp2scp' class
1422 * bridge to transform ocp interface protocol to scp (serial control port)
1423 * protocol
1424 */
1425
1426 static struct omap_hwmod_class_sysconfig omap54xx_ocp2scp_sysc = {
1427 .rev_offs = 0x0000,
1428 .sysc_offs = 0x0010,
1429 .syss_offs = 0x0014,
1430 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_SIDLEMODE |
1431 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
1432 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1433 .sysc_fields = &omap_hwmod_sysc_type1,
1434 };
1435
1436 static struct omap_hwmod_class omap54xx_ocp2scp_hwmod_class = {
1437 .name = "ocp2scp",
1438 .sysc = &omap54xx_ocp2scp_sysc,
1439 };
1440
1441 /* ocp2scp1 */
1442 static struct omap_hwmod omap54xx_ocp2scp1_hwmod = {
1443 .name = "ocp2scp1",
1444 .class = &omap54xx_ocp2scp_hwmod_class,
1445 .clkdm_name = "l3init_clkdm",
1446 .main_clk = "l4_root_clk_div",
1447 .prcm = {
1448 .omap4 = {
1449 .clkctrl_offs = OMAP54XX_CM_L3INIT_OCP2SCP1_CLKCTRL_OFFSET,
1450 .context_offs = OMAP54XX_RM_L3INIT_OCP2SCP1_CONTEXT_OFFSET,
1451 .modulemode = MODULEMODE_HWCTRL,
1452 },
1453 },
1454 };
1455
1456 /*
1457 * 'timer' class
1458 * general purpose timer module with accurate 1ms tick
1459 * This class contains several variants: ['timer_1ms', 'timer']
1460 */
1461
1462 static struct omap_hwmod_class_sysconfig omap54xx_timer_1ms_sysc = {
1463 .rev_offs = 0x0000,
1464 .sysc_offs = 0x0010,
1465 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
1466 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
1467 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1468 SIDLE_SMART_WKUP),
1469 .sysc_fields = &omap_hwmod_sysc_type2,
1470 };
1471
1472 static struct omap_hwmod_class omap54xx_timer_1ms_hwmod_class = {
1473 .name = "timer",
1474 .sysc = &omap54xx_timer_1ms_sysc,
1475 };
1476
1477 static struct omap_hwmod_class_sysconfig omap54xx_timer_sysc = {
1478 .rev_offs = 0x0000,
1479 .sysc_offs = 0x0010,
1480 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
1481 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
1482 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1483 SIDLE_SMART_WKUP),
1484 .sysc_fields = &omap_hwmod_sysc_type2,
1485 };
1486
1487 static struct omap_hwmod_class omap54xx_timer_hwmod_class = {
1488 .name = "timer",
1489 .sysc = &omap54xx_timer_sysc,
1490 };
1491
1492 /* timer1 */
1493 static struct omap_hwmod omap54xx_timer1_hwmod = {
1494 .name = "timer1",
1495 .class = &omap54xx_timer_1ms_hwmod_class,
1496 .clkdm_name = "wkupaon_clkdm",
1497 .main_clk = "timer1_gfclk_mux",
1498 .flags = HWMOD_SET_DEFAULT_CLOCKACT,
1499 .prcm = {
1500 .omap4 = {
1501 .clkctrl_offs = OMAP54XX_CM_WKUPAON_TIMER1_CLKCTRL_OFFSET,
1502 .context_offs = OMAP54XX_RM_WKUPAON_TIMER1_CONTEXT_OFFSET,
1503 .modulemode = MODULEMODE_SWCTRL,
1504 },
1505 },
1506 };
1507
1508 /* timer2 */
1509 static struct omap_hwmod omap54xx_timer2_hwmod = {
1510 .name = "timer2",
1511 .class = &omap54xx_timer_1ms_hwmod_class,
1512 .clkdm_name = "l4per_clkdm",
1513 .main_clk = "timer2_gfclk_mux",
1514 .flags = HWMOD_SET_DEFAULT_CLOCKACT,
1515 .prcm = {
1516 .omap4 = {
1517 .clkctrl_offs = OMAP54XX_CM_L4PER_TIMER2_CLKCTRL_OFFSET,
1518 .context_offs = OMAP54XX_RM_L4PER_TIMER2_CONTEXT_OFFSET,
1519 .modulemode = MODULEMODE_SWCTRL,
1520 },
1521 },
1522 };
1523
1524 /* timer3 */
1525 static struct omap_hwmod omap54xx_timer3_hwmod = {
1526 .name = "timer3",
1527 .class = &omap54xx_timer_hwmod_class,
1528 .clkdm_name = "l4per_clkdm",
1529 .main_clk = "timer3_gfclk_mux",
1530 .prcm = {
1531 .omap4 = {
1532 .clkctrl_offs = OMAP54XX_CM_L4PER_TIMER3_CLKCTRL_OFFSET,
1533 .context_offs = OMAP54XX_RM_L4PER_TIMER3_CONTEXT_OFFSET,
1534 .modulemode = MODULEMODE_SWCTRL,
1535 },
1536 },
1537 };
1538
1539 /* timer4 */
1540 static struct omap_hwmod omap54xx_timer4_hwmod = {
1541 .name = "timer4",
1542 .class = &omap54xx_timer_hwmod_class,
1543 .clkdm_name = "l4per_clkdm",
1544 .main_clk = "timer4_gfclk_mux",
1545 .prcm = {
1546 .omap4 = {
1547 .clkctrl_offs = OMAP54XX_CM_L4PER_TIMER4_CLKCTRL_OFFSET,
1548 .context_offs = OMAP54XX_RM_L4PER_TIMER4_CONTEXT_OFFSET,
1549 .modulemode = MODULEMODE_SWCTRL,
1550 },
1551 },
1552 };
1553
1554 /* timer5 */
1555 static struct omap_hwmod omap54xx_timer5_hwmod = {
1556 .name = "timer5",
1557 .class = &omap54xx_timer_hwmod_class,
1558 .clkdm_name = "abe_clkdm",
1559 .main_clk = "timer5_gfclk_mux",
1560 .prcm = {
1561 .omap4 = {
1562 .clkctrl_offs = OMAP54XX_CM_ABE_TIMER5_CLKCTRL_OFFSET,
1563 .context_offs = OMAP54XX_RM_ABE_TIMER5_CONTEXT_OFFSET,
1564 .modulemode = MODULEMODE_SWCTRL,
1565 },
1566 },
1567 };
1568
1569 /* timer6 */
1570 static struct omap_hwmod omap54xx_timer6_hwmod = {
1571 .name = "timer6",
1572 .class = &omap54xx_timer_hwmod_class,
1573 .clkdm_name = "abe_clkdm",
1574 .main_clk = "timer6_gfclk_mux",
1575 .prcm = {
1576 .omap4 = {
1577 .clkctrl_offs = OMAP54XX_CM_ABE_TIMER6_CLKCTRL_OFFSET,
1578 .context_offs = OMAP54XX_RM_ABE_TIMER6_CONTEXT_OFFSET,
1579 .modulemode = MODULEMODE_SWCTRL,
1580 },
1581 },
1582 };
1583
1584 /* timer7 */
1585 static struct omap_hwmod omap54xx_timer7_hwmod = {
1586 .name = "timer7",
1587 .class = &omap54xx_timer_hwmod_class,
1588 .clkdm_name = "abe_clkdm",
1589 .main_clk = "timer7_gfclk_mux",
1590 .prcm = {
1591 .omap4 = {
1592 .clkctrl_offs = OMAP54XX_CM_ABE_TIMER7_CLKCTRL_OFFSET,
1593 .context_offs = OMAP54XX_RM_ABE_TIMER7_CONTEXT_OFFSET,
1594 .modulemode = MODULEMODE_SWCTRL,
1595 },
1596 },
1597 };
1598
1599 /* timer8 */
1600 static struct omap_hwmod omap54xx_timer8_hwmod = {
1601 .name = "timer8",
1602 .class = &omap54xx_timer_hwmod_class,
1603 .clkdm_name = "abe_clkdm",
1604 .main_clk = "timer8_gfclk_mux",
1605 .prcm = {
1606 .omap4 = {
1607 .clkctrl_offs = OMAP54XX_CM_ABE_TIMER8_CLKCTRL_OFFSET,
1608 .context_offs = OMAP54XX_RM_ABE_TIMER8_CONTEXT_OFFSET,
1609 .modulemode = MODULEMODE_SWCTRL,
1610 },
1611 },
1612 };
1613
1614 /* timer9 */
1615 static struct omap_hwmod omap54xx_timer9_hwmod = {
1616 .name = "timer9",
1617 .class = &omap54xx_timer_hwmod_class,
1618 .clkdm_name = "l4per_clkdm",
1619 .main_clk = "timer9_gfclk_mux",
1620 .prcm = {
1621 .omap4 = {
1622 .clkctrl_offs = OMAP54XX_CM_L4PER_TIMER9_CLKCTRL_OFFSET,
1623 .context_offs = OMAP54XX_RM_L4PER_TIMER9_CONTEXT_OFFSET,
1624 .modulemode = MODULEMODE_SWCTRL,
1625 },
1626 },
1627 };
1628
1629 /* timer10 */
1630 static struct omap_hwmod omap54xx_timer10_hwmod = {
1631 .name = "timer10",
1632 .class = &omap54xx_timer_1ms_hwmod_class,
1633 .clkdm_name = "l4per_clkdm",
1634 .main_clk = "timer10_gfclk_mux",
1635 .flags = HWMOD_SET_DEFAULT_CLOCKACT,
1636 .prcm = {
1637 .omap4 = {
1638 .clkctrl_offs = OMAP54XX_CM_L4PER_TIMER10_CLKCTRL_OFFSET,
1639 .context_offs = OMAP54XX_RM_L4PER_TIMER10_CONTEXT_OFFSET,
1640 .modulemode = MODULEMODE_SWCTRL,
1641 },
1642 },
1643 };
1644
1645 /* timer11 */
1646 static struct omap_hwmod omap54xx_timer11_hwmod = {
1647 .name = "timer11",
1648 .class = &omap54xx_timer_hwmod_class,
1649 .clkdm_name = "l4per_clkdm",
1650 .main_clk = "timer11_gfclk_mux",
1651 .prcm = {
1652 .omap4 = {
1653 .clkctrl_offs = OMAP54XX_CM_L4PER_TIMER11_CLKCTRL_OFFSET,
1654 .context_offs = OMAP54XX_RM_L4PER_TIMER11_CONTEXT_OFFSET,
1655 .modulemode = MODULEMODE_SWCTRL,
1656 },
1657 },
1658 };
1659
1660 /*
1661 * 'uart' class
1662 * universal asynchronous receiver/transmitter (uart)
1663 */
1664
1665 static struct omap_hwmod_class_sysconfig omap54xx_uart_sysc = {
1666 .rev_offs = 0x0050,
1667 .sysc_offs = 0x0054,
1668 .syss_offs = 0x0058,
1669 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_ENAWAKEUP |
1670 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
1671 SYSS_HAS_RESET_STATUS),
1672 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1673 SIDLE_SMART_WKUP),
1674 .sysc_fields = &omap_hwmod_sysc_type1,
1675 };
1676
1677 static struct omap_hwmod_class omap54xx_uart_hwmod_class = {
1678 .name = "uart",
1679 .sysc = &omap54xx_uart_sysc,
1680 };
1681
1682 /* uart1 */
1683 static struct omap_hwmod omap54xx_uart1_hwmod = {
1684 .name = "uart1",
1685 .class = &omap54xx_uart_hwmod_class,
1686 .clkdm_name = "l4per_clkdm",
1687 .flags = HWMOD_SWSUP_SIDLE_ACT,
1688 .main_clk = "func_48m_fclk",
1689 .prcm = {
1690 .omap4 = {
1691 .clkctrl_offs = OMAP54XX_CM_L4PER_UART1_CLKCTRL_OFFSET,
1692 .context_offs = OMAP54XX_RM_L4PER_UART1_CONTEXT_OFFSET,
1693 .modulemode = MODULEMODE_SWCTRL,
1694 },
1695 },
1696 };
1697
1698 /* uart2 */
1699 static struct omap_hwmod omap54xx_uart2_hwmod = {
1700 .name = "uart2",
1701 .class = &omap54xx_uart_hwmod_class,
1702 .clkdm_name = "l4per_clkdm",
1703 .flags = HWMOD_SWSUP_SIDLE_ACT,
1704 .main_clk = "func_48m_fclk",
1705 .prcm = {
1706 .omap4 = {
1707 .clkctrl_offs = OMAP54XX_CM_L4PER_UART2_CLKCTRL_OFFSET,
1708 .context_offs = OMAP54XX_RM_L4PER_UART2_CONTEXT_OFFSET,
1709 .modulemode = MODULEMODE_SWCTRL,
1710 },
1711 },
1712 };
1713
1714 /* uart3 */
1715 static struct omap_hwmod omap54xx_uart3_hwmod = {
1716 .name = "uart3",
1717 .class = &omap54xx_uart_hwmod_class,
1718 .clkdm_name = "l4per_clkdm",
1719 .flags = DEBUG_OMAP4UART3_FLAGS | HWMOD_SWSUP_SIDLE_ACT,
1720 .main_clk = "func_48m_fclk",
1721 .prcm = {
1722 .omap4 = {
1723 .clkctrl_offs = OMAP54XX_CM_L4PER_UART3_CLKCTRL_OFFSET,
1724 .context_offs = OMAP54XX_RM_L4PER_UART3_CONTEXT_OFFSET,
1725 .modulemode = MODULEMODE_SWCTRL,
1726 },
1727 },
1728 };
1729
1730 /* uart4 */
1731 static struct omap_hwmod omap54xx_uart4_hwmod = {
1732 .name = "uart4",
1733 .class = &omap54xx_uart_hwmod_class,
1734 .clkdm_name = "l4per_clkdm",
1735 .flags = DEBUG_OMAP4UART4_FLAGS | HWMOD_SWSUP_SIDLE_ACT,
1736 .main_clk = "func_48m_fclk",
1737 .prcm = {
1738 .omap4 = {
1739 .clkctrl_offs = OMAP54XX_CM_L4PER_UART4_CLKCTRL_OFFSET,
1740 .context_offs = OMAP54XX_RM_L4PER_UART4_CONTEXT_OFFSET,
1741 .modulemode = MODULEMODE_SWCTRL,
1742 },
1743 },
1744 };
1745
1746 /* uart5 */
1747 static struct omap_hwmod omap54xx_uart5_hwmod = {
1748 .name = "uart5",
1749 .class = &omap54xx_uart_hwmod_class,
1750 .clkdm_name = "l4per_clkdm",
1751 .flags = HWMOD_SWSUP_SIDLE_ACT,
1752 .main_clk = "func_48m_fclk",
1753 .prcm = {
1754 .omap4 = {
1755 .clkctrl_offs = OMAP54XX_CM_L4PER_UART5_CLKCTRL_OFFSET,
1756 .context_offs = OMAP54XX_RM_L4PER_UART5_CONTEXT_OFFSET,
1757 .modulemode = MODULEMODE_SWCTRL,
1758 },
1759 },
1760 };
1761
1762 /* uart6 */
1763 static struct omap_hwmod omap54xx_uart6_hwmod = {
1764 .name = "uart6",
1765 .class = &omap54xx_uart_hwmod_class,
1766 .clkdm_name = "l4per_clkdm",
1767 .flags = HWMOD_SWSUP_SIDLE_ACT,
1768 .main_clk = "func_48m_fclk",
1769 .prcm = {
1770 .omap4 = {
1771 .clkctrl_offs = OMAP54XX_CM_L4PER_UART6_CLKCTRL_OFFSET,
1772 .context_offs = OMAP54XX_RM_L4PER_UART6_CONTEXT_OFFSET,
1773 .modulemode = MODULEMODE_SWCTRL,
1774 },
1775 },
1776 };
1777
1778 /*
1779 * 'usb_host_hs' class
1780 * high-speed multi-port usb host controller
1781 */
1782
1783 static struct omap_hwmod_class_sysconfig omap54xx_usb_host_hs_sysc = {
1784 .rev_offs = 0x0000,
1785 .sysc_offs = 0x0010,
1786 .sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_RESET_STATUS |
1787 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
1788 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1789 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
1790 MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
1791 .sysc_fields = &omap_hwmod_sysc_type2,
1792 };
1793
1794 static struct omap_hwmod_class omap54xx_usb_host_hs_hwmod_class = {
1795 .name = "usb_host_hs",
1796 .sysc = &omap54xx_usb_host_hs_sysc,
1797 };
1798
1799 static struct omap_hwmod omap54xx_usb_host_hs_hwmod = {
1800 .name = "usb_host_hs",
1801 .class = &omap54xx_usb_host_hs_hwmod_class,
1802 .clkdm_name = "l3init_clkdm",
1803 /*
1804 * Errata: USBHOST Configured In Smart-Idle Can Lead To a Deadlock
1805 * id: i660
1806 *
1807 * Description:
1808 * In the following configuration :
1809 * - USBHOST module is set to smart-idle mode
1810 * - PRCM asserts idle_req to the USBHOST module ( This typically
1811 * happens when the system is going to a low power mode : all ports
1812 * have been suspended, the master part of the USBHOST module has
1813 * entered the standby state, and SW has cut the functional clocks)
1814 * - an USBHOST interrupt occurs before the module is able to answer
1815 * idle_ack, typically a remote wakeup IRQ.
1816 * Then the USB HOST module will enter a deadlock situation where it
1817 * is no more accessible nor functional.
1818 *
1819 * Workaround:
1820 * Don't use smart idle; use only force idle, hence HWMOD_SWSUP_SIDLE
1821 */
1822
1823 /*
1824 * Errata: USB host EHCI may stall when entering smart-standby mode
1825 * Id: i571
1826 *
1827 * Description:
1828 * When the USBHOST module is set to smart-standby mode, and when it is
1829 * ready to enter the standby state (i.e. all ports are suspended and
1830 * all attached devices are in suspend mode), then it can wrongly assert
1831 * the Mstandby signal too early while there are still some residual OCP
1832 * transactions ongoing. If this condition occurs, the internal state
1833 * machine may go to an undefined state and the USB link may be stuck
1834 * upon the next resume.
1835 *
1836 * Workaround:
1837 * Don't use smart standby; use only force standby,
1838 * hence HWMOD_SWSUP_MSTANDBY
1839 */
1840
1841 .flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY,
1842 .main_clk = "l3init_60m_fclk",
1843 .prcm = {
1844 .omap4 = {
1845 .clkctrl_offs = OMAP54XX_CM_L3INIT_USB_HOST_HS_CLKCTRL_OFFSET,
1846 .context_offs = OMAP54XX_RM_L3INIT_USB_HOST_HS_CONTEXT_OFFSET,
1847 .modulemode = MODULEMODE_SWCTRL,
1848 },
1849 },
1850 };
1851
1852 /*
1853 * 'usb_tll_hs' class
1854 * usb_tll_hs module is the adapter on the usb_host_hs ports
1855 */
1856
1857 static struct omap_hwmod_class_sysconfig omap54xx_usb_tll_hs_sysc = {
1858 .rev_offs = 0x0000,
1859 .sysc_offs = 0x0010,
1860 .syss_offs = 0x0014,
1861 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
1862 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
1863 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
1864 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1865 .sysc_fields = &omap_hwmod_sysc_type1,
1866 };
1867
1868 static struct omap_hwmod_class omap54xx_usb_tll_hs_hwmod_class = {
1869 .name = "usb_tll_hs",
1870 .sysc = &omap54xx_usb_tll_hs_sysc,
1871 };
1872
1873 static struct omap_hwmod omap54xx_usb_tll_hs_hwmod = {
1874 .name = "usb_tll_hs",
1875 .class = &omap54xx_usb_tll_hs_hwmod_class,
1876 .clkdm_name = "l3init_clkdm",
1877 .main_clk = "l4_root_clk_div",
1878 .prcm = {
1879 .omap4 = {
1880 .clkctrl_offs = OMAP54XX_CM_L3INIT_USB_TLL_HS_CLKCTRL_OFFSET,
1881 .context_offs = OMAP54XX_RM_L3INIT_USB_TLL_HS_CONTEXT_OFFSET,
1882 .modulemode = MODULEMODE_HWCTRL,
1883 },
1884 },
1885 };
1886
1887 /*
1888 * 'usb_otg_ss' class
1889 * 2.0 super speed (usb_otg_ss) controller
1890 */
1891
1892 static struct omap_hwmod_class_sysconfig omap54xx_usb_otg_ss_sysc = {
1893 .rev_offs = 0x0000,
1894 .sysc_offs = 0x0010,
1895 .sysc_flags = (SYSC_HAS_DMADISABLE | SYSC_HAS_MIDLEMODE |
1896 SYSC_HAS_SIDLEMODE),
1897 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1898 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
1899 MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
1900 .sysc_fields = &omap_hwmod_sysc_type2,
1901 };
1902
1903 static struct omap_hwmod_class omap54xx_usb_otg_ss_hwmod_class = {
1904 .name = "usb_otg_ss",
1905 .sysc = &omap54xx_usb_otg_ss_sysc,
1906 };
1907
1908 /* usb_otg_ss */
1909 static struct omap_hwmod_opt_clk usb_otg_ss_opt_clks[] = {
1910 { .role = "refclk960m", .clk = "usb_otg_ss_refclk960m" },
1911 };
1912
1913 static struct omap_hwmod omap54xx_usb_otg_ss_hwmod = {
1914 .name = "usb_otg_ss",
1915 .class = &omap54xx_usb_otg_ss_hwmod_class,
1916 .clkdm_name = "l3init_clkdm",
1917 .flags = HWMOD_SWSUP_SIDLE,
1918 .main_clk = "dpll_core_h13x2_ck",
1919 .prcm = {
1920 .omap4 = {
1921 .clkctrl_offs = OMAP54XX_CM_L3INIT_USB_OTG_SS_CLKCTRL_OFFSET,
1922 .context_offs = OMAP54XX_RM_L3INIT_USB_OTG_SS_CONTEXT_OFFSET,
1923 .modulemode = MODULEMODE_HWCTRL,
1924 },
1925 },
1926 .opt_clks = usb_otg_ss_opt_clks,
1927 .opt_clks_cnt = ARRAY_SIZE(usb_otg_ss_opt_clks),
1928 };
1929
1930 /*
1931 * 'wd_timer' class
1932 * 32-bit watchdog upward counter that generates a pulse on the reset pin on
1933 * overflow condition
1934 */
1935
1936 static struct omap_hwmod_class_sysconfig omap54xx_wd_timer_sysc = {
1937 .rev_offs = 0x0000,
1938 .sysc_offs = 0x0010,
1939 .syss_offs = 0x0014,
1940 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_SIDLEMODE |
1941 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
1942 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1943 SIDLE_SMART_WKUP),
1944 .sysc_fields = &omap_hwmod_sysc_type1,
1945 };
1946
1947 static struct omap_hwmod_class omap54xx_wd_timer_hwmod_class = {
1948 .name = "wd_timer",
1949 .sysc = &omap54xx_wd_timer_sysc,
1950 .pre_shutdown = &omap2_wd_timer_disable,
1951 };
1952
1953 /* wd_timer2 */
1954 static struct omap_hwmod omap54xx_wd_timer2_hwmod = {
1955 .name = "wd_timer2",
1956 .class = &omap54xx_wd_timer_hwmod_class,
1957 .clkdm_name = "wkupaon_clkdm",
1958 .main_clk = "sys_32k_ck",
1959 .prcm = {
1960 .omap4 = {
1961 .clkctrl_offs = OMAP54XX_CM_WKUPAON_WD_TIMER2_CLKCTRL_OFFSET,
1962 .context_offs = OMAP54XX_RM_WKUPAON_WD_TIMER2_CONTEXT_OFFSET,
1963 .modulemode = MODULEMODE_SWCTRL,
1964 },
1965 },
1966 };
1967
1968 /*
1969 * 'ocp2scp' class
1970 * bridge to transform ocp interface protocol to scp (serial control port)
1971 * protocol
1972 */
1973 /* ocp2scp3 */
1974 static struct omap_hwmod omap54xx_ocp2scp3_hwmod;
1975 /* l4_cfg -> ocp2scp3 */
1976 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__ocp2scp3 = {
1977 .master = &omap54xx_l4_cfg_hwmod,
1978 .slave = &omap54xx_ocp2scp3_hwmod,
1979 .clk = "l4_root_clk_div",
1980 .user = OCP_USER_MPU | OCP_USER_SDMA,
1981 };
1982
1983 static struct omap_hwmod omap54xx_ocp2scp3_hwmod = {
1984 .name = "ocp2scp3",
1985 .class = &omap54xx_ocp2scp_hwmod_class,
1986 .clkdm_name = "l3init_clkdm",
1987 .prcm = {
1988 .omap4 = {
1989 .clkctrl_offs = OMAP54XX_CM_L3INIT_OCP2SCP3_CLKCTRL_OFFSET,
1990 .context_offs = OMAP54XX_RM_L3INIT_OCP2SCP3_CONTEXT_OFFSET,
1991 .modulemode = MODULEMODE_HWCTRL,
1992 },
1993 },
1994 };
1995
1996 /*
1997 * 'sata' class
1998 * sata: serial ata interface gen2 compliant ( 1 rx/ 1 tx)
1999 */
2000
2001 static struct omap_hwmod_class_sysconfig omap54xx_sata_sysc = {
2002 .rev_offs = 0x00fc,
2003 .sysc_offs = 0x0000,
2004 .sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE),
2005 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2006 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
2007 MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
2008 .sysc_fields = &omap_hwmod_sysc_type2,
2009 };
2010
2011 static struct omap_hwmod_class omap54xx_sata_hwmod_class = {
2012 .name = "sata",
2013 .sysc = &omap54xx_sata_sysc,
2014 };
2015
2016 /* sata */
2017 static struct omap_hwmod omap54xx_sata_hwmod = {
2018 .name = "sata",
2019 .class = &omap54xx_sata_hwmod_class,
2020 .clkdm_name = "l3init_clkdm",
2021 .flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY,
2022 .main_clk = "func_48m_fclk",
2023 .mpu_rt_idx = 1,
2024 .prcm = {
2025 .omap4 = {
2026 .clkctrl_offs = OMAP54XX_CM_L3INIT_SATA_CLKCTRL_OFFSET,
2027 .context_offs = OMAP54XX_RM_L3INIT_SATA_CONTEXT_OFFSET,
2028 .modulemode = MODULEMODE_SWCTRL,
2029 },
2030 },
2031 };
2032
2033 /* l4_cfg -> sata */
2034 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__sata = {
2035 .master = &omap54xx_l4_cfg_hwmod,
2036 .slave = &omap54xx_sata_hwmod,
2037 .clk = "l3_iclk_div",
2038 .user = OCP_USER_MPU | OCP_USER_SDMA,
2039 };
2040
2041 /*
2042 * Interfaces
2043 */
2044
2045 /* l3_main_1 -> dmm */
2046 static struct omap_hwmod_ocp_if omap54xx_l3_main_1__dmm = {
2047 .master = &omap54xx_l3_main_1_hwmod,
2048 .slave = &omap54xx_dmm_hwmod,
2049 .clk = "l3_iclk_div",
2050 .user = OCP_USER_SDMA,
2051 };
2052
2053 /* l3_main_3 -> l3_instr */
2054 static struct omap_hwmod_ocp_if omap54xx_l3_main_3__l3_instr = {
2055 .master = &omap54xx_l3_main_3_hwmod,
2056 .slave = &omap54xx_l3_instr_hwmod,
2057 .clk = "l3_iclk_div",
2058 .user = OCP_USER_MPU | OCP_USER_SDMA,
2059 };
2060
2061 /* l3_main_2 -> l3_main_1 */
2062 static struct omap_hwmod_ocp_if omap54xx_l3_main_2__l3_main_1 = {
2063 .master = &omap54xx_l3_main_2_hwmod,
2064 .slave = &omap54xx_l3_main_1_hwmod,
2065 .clk = "l3_iclk_div",
2066 .user = OCP_USER_MPU | OCP_USER_SDMA,
2067 };
2068
2069 /* l4_cfg -> l3_main_1 */
2070 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__l3_main_1 = {
2071 .master = &omap54xx_l4_cfg_hwmod,
2072 .slave = &omap54xx_l3_main_1_hwmod,
2073 .clk = "l3_iclk_div",
2074 .user = OCP_USER_MPU | OCP_USER_SDMA,
2075 };
2076
2077 /* l4_cfg -> mmu_dsp */
2078 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__mmu_dsp = {
2079 .master = &omap54xx_l4_cfg_hwmod,
2080 .slave = &omap54xx_mmu_dsp_hwmod,
2081 .clk = "l4_root_clk_div",
2082 .user = OCP_USER_MPU | OCP_USER_SDMA,
2083 };
2084
2085 /* mpu -> l3_main_1 */
2086 static struct omap_hwmod_ocp_if omap54xx_mpu__l3_main_1 = {
2087 .master = &omap54xx_mpu_hwmod,
2088 .slave = &omap54xx_l3_main_1_hwmod,
2089 .clk = "l3_iclk_div",
2090 .user = OCP_USER_MPU,
2091 };
2092
2093 /* l3_main_1 -> l3_main_2 */
2094 static struct omap_hwmod_ocp_if omap54xx_l3_main_1__l3_main_2 = {
2095 .master = &omap54xx_l3_main_1_hwmod,
2096 .slave = &omap54xx_l3_main_2_hwmod,
2097 .clk = "l3_iclk_div",
2098 .user = OCP_USER_MPU,
2099 };
2100
2101 /* l4_cfg -> l3_main_2 */
2102 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__l3_main_2 = {
2103 .master = &omap54xx_l4_cfg_hwmod,
2104 .slave = &omap54xx_l3_main_2_hwmod,
2105 .clk = "l3_iclk_div",
2106 .user = OCP_USER_MPU | OCP_USER_SDMA,
2107 };
2108
2109 /* l3_main_2 -> mmu_ipu */
2110 static struct omap_hwmod_ocp_if omap54xx_l3_main_2__mmu_ipu = {
2111 .master = &omap54xx_l3_main_2_hwmod,
2112 .slave = &omap54xx_mmu_ipu_hwmod,
2113 .clk = "l3_iclk_div",
2114 .user = OCP_USER_MPU | OCP_USER_SDMA,
2115 };
2116
2117 /* l3_main_1 -> l3_main_3 */
2118 static struct omap_hwmod_ocp_if omap54xx_l3_main_1__l3_main_3 = {
2119 .master = &omap54xx_l3_main_1_hwmod,
2120 .slave = &omap54xx_l3_main_3_hwmod,
2121 .clk = "l3_iclk_div",
2122 .user = OCP_USER_MPU,
2123 };
2124
2125 /* l3_main_2 -> l3_main_3 */
2126 static struct omap_hwmod_ocp_if omap54xx_l3_main_2__l3_main_3 = {
2127 .master = &omap54xx_l3_main_2_hwmod,
2128 .slave = &omap54xx_l3_main_3_hwmod,
2129 .clk = "l3_iclk_div",
2130 .user = OCP_USER_MPU | OCP_USER_SDMA,
2131 };
2132
2133 /* l4_cfg -> l3_main_3 */
2134 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__l3_main_3 = {
2135 .master = &omap54xx_l4_cfg_hwmod,
2136 .slave = &omap54xx_l3_main_3_hwmod,
2137 .clk = "l3_iclk_div",
2138 .user = OCP_USER_MPU | OCP_USER_SDMA,
2139 };
2140
2141 /* l3_main_1 -> l4_abe */
2142 static struct omap_hwmod_ocp_if omap54xx_l3_main_1__l4_abe = {
2143 .master = &omap54xx_l3_main_1_hwmod,
2144 .slave = &omap54xx_l4_abe_hwmod,
2145 .clk = "abe_iclk",
2146 .user = OCP_USER_MPU | OCP_USER_SDMA,
2147 };
2148
2149 /* mpu -> l4_abe */
2150 static struct omap_hwmod_ocp_if omap54xx_mpu__l4_abe = {
2151 .master = &omap54xx_mpu_hwmod,
2152 .slave = &omap54xx_l4_abe_hwmod,
2153 .clk = "abe_iclk",
2154 .user = OCP_USER_MPU | OCP_USER_SDMA,
2155 };
2156
2157 /* l3_main_1 -> l4_cfg */
2158 static struct omap_hwmod_ocp_if omap54xx_l3_main_1__l4_cfg = {
2159 .master = &omap54xx_l3_main_1_hwmod,
2160 .slave = &omap54xx_l4_cfg_hwmod,
2161 .clk = "l4_root_clk_div",
2162 .user = OCP_USER_MPU | OCP_USER_SDMA,
2163 };
2164
2165 /* l3_main_2 -> l4_per */
2166 static struct omap_hwmod_ocp_if omap54xx_l3_main_2__l4_per = {
2167 .master = &omap54xx_l3_main_2_hwmod,
2168 .slave = &omap54xx_l4_per_hwmod,
2169 .clk = "l4_root_clk_div",
2170 .user = OCP_USER_MPU | OCP_USER_SDMA,
2171 };
2172
2173 /* l3_main_1 -> l4_wkup */
2174 static struct omap_hwmod_ocp_if omap54xx_l3_main_1__l4_wkup = {
2175 .master = &omap54xx_l3_main_1_hwmod,
2176 .slave = &omap54xx_l4_wkup_hwmod,
2177 .clk = "wkupaon_iclk_mux",
2178 .user = OCP_USER_MPU | OCP_USER_SDMA,
2179 };
2180
2181 /* mpu -> mpu_private */
2182 static struct omap_hwmod_ocp_if omap54xx_mpu__mpu_private = {
2183 .master = &omap54xx_mpu_hwmod,
2184 .slave = &omap54xx_mpu_private_hwmod,
2185 .clk = "l3_iclk_div",
2186 .user = OCP_USER_MPU | OCP_USER_SDMA,
2187 };
2188
2189 /* l4_wkup -> counter_32k */
2190 static struct omap_hwmod_ocp_if omap54xx_l4_wkup__counter_32k = {
2191 .master = &omap54xx_l4_wkup_hwmod,
2192 .slave = &omap54xx_counter_32k_hwmod,
2193 .clk = "wkupaon_iclk_mux",
2194 .user = OCP_USER_MPU | OCP_USER_SDMA,
2195 };
2196
2197 /* l4_cfg -> dma_system */
2198 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__dma_system = {
2199 .master = &omap54xx_l4_cfg_hwmod,
2200 .slave = &omap54xx_dma_system_hwmod,
2201 .clk = "l4_root_clk_div",
2202 .user = OCP_USER_MPU | OCP_USER_SDMA,
2203 };
2204
2205 /* l4_abe -> dmic */
2206 static struct omap_hwmod_ocp_if omap54xx_l4_abe__dmic = {
2207 .master = &omap54xx_l4_abe_hwmod,
2208 .slave = &omap54xx_dmic_hwmod,
2209 .clk = "abe_iclk",
2210 .user = OCP_USER_MPU,
2211 };
2212
2213 /* l3_main_2 -> dss */
2214 static struct omap_hwmod_ocp_if omap54xx_l3_main_2__dss = {
2215 .master = &omap54xx_l3_main_2_hwmod,
2216 .slave = &omap54xx_dss_hwmod,
2217 .clk = "l3_iclk_div",
2218 .user = OCP_USER_MPU | OCP_USER_SDMA,
2219 };
2220
2221 /* l3_main_2 -> dss_dispc */
2222 static struct omap_hwmod_ocp_if omap54xx_l3_main_2__dss_dispc = {
2223 .master = &omap54xx_l3_main_2_hwmod,
2224 .slave = &omap54xx_dss_dispc_hwmod,
2225 .clk = "l3_iclk_div",
2226 .user = OCP_USER_MPU | OCP_USER_SDMA,
2227 };
2228
2229 /* l3_main_2 -> dss_dsi1_a */
2230 static struct omap_hwmod_ocp_if omap54xx_l3_main_2__dss_dsi1_a = {
2231 .master = &omap54xx_l3_main_2_hwmod,
2232 .slave = &omap54xx_dss_dsi1_a_hwmod,
2233 .clk = "l3_iclk_div",
2234 .user = OCP_USER_MPU | OCP_USER_SDMA,
2235 };
2236
2237 /* l3_main_2 -> dss_dsi1_c */
2238 static struct omap_hwmod_ocp_if omap54xx_l3_main_2__dss_dsi1_c = {
2239 .master = &omap54xx_l3_main_2_hwmod,
2240 .slave = &omap54xx_dss_dsi1_c_hwmod,
2241 .clk = "l3_iclk_div",
2242 .user = OCP_USER_MPU | OCP_USER_SDMA,
2243 };
2244
2245 /* l3_main_2 -> dss_hdmi */
2246 static struct omap_hwmod_ocp_if omap54xx_l3_main_2__dss_hdmi = {
2247 .master = &omap54xx_l3_main_2_hwmod,
2248 .slave = &omap54xx_dss_hdmi_hwmod,
2249 .clk = "l3_iclk_div",
2250 .user = OCP_USER_MPU | OCP_USER_SDMA,
2251 };
2252
2253 /* l3_main_2 -> dss_rfbi */
2254 static struct omap_hwmod_ocp_if omap54xx_l3_main_2__dss_rfbi = {
2255 .master = &omap54xx_l3_main_2_hwmod,
2256 .slave = &omap54xx_dss_rfbi_hwmod,
2257 .clk = "l3_iclk_div",
2258 .user = OCP_USER_MPU | OCP_USER_SDMA,
2259 };
2260
2261 /* mpu -> emif1 */
2262 static struct omap_hwmod_ocp_if omap54xx_mpu__emif1 = {
2263 .master = &omap54xx_mpu_hwmod,
2264 .slave = &omap54xx_emif1_hwmod,
2265 .clk = "dpll_core_h11x2_ck",
2266 .user = OCP_USER_MPU | OCP_USER_SDMA,
2267 };
2268
2269 /* mpu -> emif2 */
2270 static struct omap_hwmod_ocp_if omap54xx_mpu__emif2 = {
2271 .master = &omap54xx_mpu_hwmod,
2272 .slave = &omap54xx_emif2_hwmod,
2273 .clk = "dpll_core_h11x2_ck",
2274 .user = OCP_USER_MPU | OCP_USER_SDMA,
2275 };
2276
2277 /* l4_wkup -> gpio1 */
2278 static struct omap_hwmod_ocp_if omap54xx_l4_wkup__gpio1 = {
2279 .master = &omap54xx_l4_wkup_hwmod,
2280 .slave = &omap54xx_gpio1_hwmod,
2281 .clk = "wkupaon_iclk_mux",
2282 .user = OCP_USER_MPU | OCP_USER_SDMA,
2283 };
2284
2285 /* l4_per -> gpio2 */
2286 static struct omap_hwmod_ocp_if omap54xx_l4_per__gpio2 = {
2287 .master = &omap54xx_l4_per_hwmod,
2288 .slave = &omap54xx_gpio2_hwmod,
2289 .clk = "l4_root_clk_div",
2290 .user = OCP_USER_MPU | OCP_USER_SDMA,
2291 };
2292
2293 /* l4_per -> gpio3 */
2294 static struct omap_hwmod_ocp_if omap54xx_l4_per__gpio3 = {
2295 .master = &omap54xx_l4_per_hwmod,
2296 .slave = &omap54xx_gpio3_hwmod,
2297 .clk = "l4_root_clk_div",
2298 .user = OCP_USER_MPU | OCP_USER_SDMA,
2299 };
2300
2301 /* l4_per -> gpio4 */
2302 static struct omap_hwmod_ocp_if omap54xx_l4_per__gpio4 = {
2303 .master = &omap54xx_l4_per_hwmod,
2304 .slave = &omap54xx_gpio4_hwmod,
2305 .clk = "l4_root_clk_div",
2306 .user = OCP_USER_MPU | OCP_USER_SDMA,
2307 };
2308
2309 /* l4_per -> gpio5 */
2310 static struct omap_hwmod_ocp_if omap54xx_l4_per__gpio5 = {
2311 .master = &omap54xx_l4_per_hwmod,
2312 .slave = &omap54xx_gpio5_hwmod,
2313 .clk = "l4_root_clk_div",
2314 .user = OCP_USER_MPU | OCP_USER_SDMA,
2315 };
2316
2317 /* l4_per -> gpio6 */
2318 static struct omap_hwmod_ocp_if omap54xx_l4_per__gpio6 = {
2319 .master = &omap54xx_l4_per_hwmod,
2320 .slave = &omap54xx_gpio6_hwmod,
2321 .clk = "l4_root_clk_div",
2322 .user = OCP_USER_MPU | OCP_USER_SDMA,
2323 };
2324
2325 /* l4_per -> gpio7 */
2326 static struct omap_hwmod_ocp_if omap54xx_l4_per__gpio7 = {
2327 .master = &omap54xx_l4_per_hwmod,
2328 .slave = &omap54xx_gpio7_hwmod,
2329 .clk = "l4_root_clk_div",
2330 .user = OCP_USER_MPU | OCP_USER_SDMA,
2331 };
2332
2333 /* l4_per -> gpio8 */
2334 static struct omap_hwmod_ocp_if omap54xx_l4_per__gpio8 = {
2335 .master = &omap54xx_l4_per_hwmod,
2336 .slave = &omap54xx_gpio8_hwmod,
2337 .clk = "l4_root_clk_div",
2338 .user = OCP_USER_MPU | OCP_USER_SDMA,
2339 };
2340
2341 /* l4_per -> i2c1 */
2342 static struct omap_hwmod_ocp_if omap54xx_l4_per__i2c1 = {
2343 .master = &omap54xx_l4_per_hwmod,
2344 .slave = &omap54xx_i2c1_hwmod,
2345 .clk = "l4_root_clk_div",
2346 .user = OCP_USER_MPU | OCP_USER_SDMA,
2347 };
2348
2349 /* l4_per -> i2c2 */
2350 static struct omap_hwmod_ocp_if omap54xx_l4_per__i2c2 = {
2351 .master = &omap54xx_l4_per_hwmod,
2352 .slave = &omap54xx_i2c2_hwmod,
2353 .clk = "l4_root_clk_div",
2354 .user = OCP_USER_MPU | OCP_USER_SDMA,
2355 };
2356
2357 /* l4_per -> i2c3 */
2358 static struct omap_hwmod_ocp_if omap54xx_l4_per__i2c3 = {
2359 .master = &omap54xx_l4_per_hwmod,
2360 .slave = &omap54xx_i2c3_hwmod,
2361 .clk = "l4_root_clk_div",
2362 .user = OCP_USER_MPU | OCP_USER_SDMA,
2363 };
2364
2365 /* l4_per -> i2c4 */
2366 static struct omap_hwmod_ocp_if omap54xx_l4_per__i2c4 = {
2367 .master = &omap54xx_l4_per_hwmod,
2368 .slave = &omap54xx_i2c4_hwmod,
2369 .clk = "l4_root_clk_div",
2370 .user = OCP_USER_MPU | OCP_USER_SDMA,
2371 };
2372
2373 /* l4_per -> i2c5 */
2374 static struct omap_hwmod_ocp_if omap54xx_l4_per__i2c5 = {
2375 .master = &omap54xx_l4_per_hwmod,
2376 .slave = &omap54xx_i2c5_hwmod,
2377 .clk = "l4_root_clk_div",
2378 .user = OCP_USER_MPU | OCP_USER_SDMA,
2379 };
2380
2381 /* l4_wkup -> kbd */
2382 static struct omap_hwmod_ocp_if omap54xx_l4_wkup__kbd = {
2383 .master = &omap54xx_l4_wkup_hwmod,
2384 .slave = &omap54xx_kbd_hwmod,
2385 .clk = "wkupaon_iclk_mux",
2386 .user = OCP_USER_MPU | OCP_USER_SDMA,
2387 };
2388
2389 /* l4_cfg -> mailbox */
2390 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__mailbox = {
2391 .master = &omap54xx_l4_cfg_hwmod,
2392 .slave = &omap54xx_mailbox_hwmod,
2393 .clk = "l4_root_clk_div",
2394 .user = OCP_USER_MPU | OCP_USER_SDMA,
2395 };
2396
2397 /* l4_abe -> mcbsp1 */
2398 static struct omap_hwmod_ocp_if omap54xx_l4_abe__mcbsp1 = {
2399 .master = &omap54xx_l4_abe_hwmod,
2400 .slave = &omap54xx_mcbsp1_hwmod,
2401 .clk = "abe_iclk",
2402 .user = OCP_USER_MPU,
2403 };
2404
2405 /* l4_abe -> mcbsp2 */
2406 static struct omap_hwmod_ocp_if omap54xx_l4_abe__mcbsp2 = {
2407 .master = &omap54xx_l4_abe_hwmod,
2408 .slave = &omap54xx_mcbsp2_hwmod,
2409 .clk = "abe_iclk",
2410 .user = OCP_USER_MPU,
2411 };
2412
2413 /* l4_abe -> mcbsp3 */
2414 static struct omap_hwmod_ocp_if omap54xx_l4_abe__mcbsp3 = {
2415 .master = &omap54xx_l4_abe_hwmod,
2416 .slave = &omap54xx_mcbsp3_hwmod,
2417 .clk = "abe_iclk",
2418 .user = OCP_USER_MPU,
2419 };
2420
2421 /* l4_abe -> mcpdm */
2422 static struct omap_hwmod_ocp_if omap54xx_l4_abe__mcpdm = {
2423 .master = &omap54xx_l4_abe_hwmod,
2424 .slave = &omap54xx_mcpdm_hwmod,
2425 .clk = "abe_iclk",
2426 .user = OCP_USER_MPU,
2427 };
2428
2429 /* l4_per -> mcspi1 */
2430 static struct omap_hwmod_ocp_if omap54xx_l4_per__mcspi1 = {
2431 .master = &omap54xx_l4_per_hwmod,
2432 .slave = &omap54xx_mcspi1_hwmod,
2433 .clk = "l4_root_clk_div",
2434 .user = OCP_USER_MPU | OCP_USER_SDMA,
2435 };
2436
2437 /* l4_per -> mcspi2 */
2438 static struct omap_hwmod_ocp_if omap54xx_l4_per__mcspi2 = {
2439 .master = &omap54xx_l4_per_hwmod,
2440 .slave = &omap54xx_mcspi2_hwmod,
2441 .clk = "l4_root_clk_div",
2442 .user = OCP_USER_MPU | OCP_USER_SDMA,
2443 };
2444
2445 /* l4_per -> mcspi3 */
2446 static struct omap_hwmod_ocp_if omap54xx_l4_per__mcspi3 = {
2447 .master = &omap54xx_l4_per_hwmod,
2448 .slave = &omap54xx_mcspi3_hwmod,
2449 .clk = "l4_root_clk_div",
2450 .user = OCP_USER_MPU | OCP_USER_SDMA,
2451 };
2452
2453 /* l4_per -> mcspi4 */
2454 static struct omap_hwmod_ocp_if omap54xx_l4_per__mcspi4 = {
2455 .master = &omap54xx_l4_per_hwmod,
2456 .slave = &omap54xx_mcspi4_hwmod,
2457 .clk = "l4_root_clk_div",
2458 .user = OCP_USER_MPU | OCP_USER_SDMA,
2459 };
2460
2461 /* l4_per -> mmc1 */
2462 static struct omap_hwmod_ocp_if omap54xx_l4_per__mmc1 = {
2463 .master = &omap54xx_l4_per_hwmod,
2464 .slave = &omap54xx_mmc1_hwmod,
2465 .clk = "l3_iclk_div",
2466 .user = OCP_USER_MPU | OCP_USER_SDMA,
2467 };
2468
2469 /* l4_per -> mmc2 */
2470 static struct omap_hwmod_ocp_if omap54xx_l4_per__mmc2 = {
2471 .master = &omap54xx_l4_per_hwmod,
2472 .slave = &omap54xx_mmc2_hwmod,
2473 .clk = "l3_iclk_div",
2474 .user = OCP_USER_MPU | OCP_USER_SDMA,
2475 };
2476
2477 /* l4_per -> mmc3 */
2478 static struct omap_hwmod_ocp_if omap54xx_l4_per__mmc3 = {
2479 .master = &omap54xx_l4_per_hwmod,
2480 .slave = &omap54xx_mmc3_hwmod,
2481 .clk = "l4_root_clk_div",
2482 .user = OCP_USER_MPU | OCP_USER_SDMA,
2483 };
2484
2485 /* l4_per -> mmc4 */
2486 static struct omap_hwmod_ocp_if omap54xx_l4_per__mmc4 = {
2487 .master = &omap54xx_l4_per_hwmod,
2488 .slave = &omap54xx_mmc4_hwmod,
2489 .clk = "l4_root_clk_div",
2490 .user = OCP_USER_MPU | OCP_USER_SDMA,
2491 };
2492
2493 /* l4_per -> mmc5 */
2494 static struct omap_hwmod_ocp_if omap54xx_l4_per__mmc5 = {
2495 .master = &omap54xx_l4_per_hwmod,
2496 .slave = &omap54xx_mmc5_hwmod,
2497 .clk = "l4_root_clk_div",
2498 .user = OCP_USER_MPU | OCP_USER_SDMA,
2499 };
2500
2501 /* l4_cfg -> mpu */
2502 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__mpu = {
2503 .master = &omap54xx_l4_cfg_hwmod,
2504 .slave = &omap54xx_mpu_hwmod,
2505 .clk = "l4_root_clk_div",
2506 .user = OCP_USER_MPU | OCP_USER_SDMA,
2507 };
2508
2509 /* l4_cfg -> spinlock */
2510 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__spinlock = {
2511 .master = &omap54xx_l4_cfg_hwmod,
2512 .slave = &omap54xx_spinlock_hwmod,
2513 .clk = "l4_root_clk_div",
2514 .user = OCP_USER_MPU | OCP_USER_SDMA,
2515 };
2516
2517 /* l4_cfg -> ocp2scp1 */
2518 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__ocp2scp1 = {
2519 .master = &omap54xx_l4_cfg_hwmod,
2520 .slave = &omap54xx_ocp2scp1_hwmod,
2521 .clk = "l4_root_clk_div",
2522 .user = OCP_USER_MPU | OCP_USER_SDMA,
2523 };
2524
2525 /* l4_wkup -> timer1 */
2526 static struct omap_hwmod_ocp_if omap54xx_l4_wkup__timer1 = {
2527 .master = &omap54xx_l4_wkup_hwmod,
2528 .slave = &omap54xx_timer1_hwmod,
2529 .clk = "wkupaon_iclk_mux",
2530 .user = OCP_USER_MPU | OCP_USER_SDMA,
2531 };
2532
2533 /* l4_per -> timer2 */
2534 static struct omap_hwmod_ocp_if omap54xx_l4_per__timer2 = {
2535 .master = &omap54xx_l4_per_hwmod,
2536 .slave = &omap54xx_timer2_hwmod,
2537 .clk = "l4_root_clk_div",
2538 .user = OCP_USER_MPU | OCP_USER_SDMA,
2539 };
2540
2541 /* l4_per -> timer3 */
2542 static struct omap_hwmod_ocp_if omap54xx_l4_per__timer3 = {
2543 .master = &omap54xx_l4_per_hwmod,
2544 .slave = &omap54xx_timer3_hwmod,
2545 .clk = "l4_root_clk_div",
2546 .user = OCP_USER_MPU | OCP_USER_SDMA,
2547 };
2548
2549 /* l4_per -> timer4 */
2550 static struct omap_hwmod_ocp_if omap54xx_l4_per__timer4 = {
2551 .master = &omap54xx_l4_per_hwmod,
2552 .slave = &omap54xx_timer4_hwmod,
2553 .clk = "l4_root_clk_div",
2554 .user = OCP_USER_MPU | OCP_USER_SDMA,
2555 };
2556
2557 /* l4_abe -> timer5 */
2558 static struct omap_hwmod_ocp_if omap54xx_l4_abe__timer5 = {
2559 .master = &omap54xx_l4_abe_hwmod,
2560 .slave = &omap54xx_timer5_hwmod,
2561 .clk = "abe_iclk",
2562 .user = OCP_USER_MPU,
2563 };
2564
2565 /* l4_abe -> timer6 */
2566 static struct omap_hwmod_ocp_if omap54xx_l4_abe__timer6 = {
2567 .master = &omap54xx_l4_abe_hwmod,
2568 .slave = &omap54xx_timer6_hwmod,
2569 .clk = "abe_iclk",
2570 .user = OCP_USER_MPU,
2571 };
2572
2573 /* l4_abe -> timer7 */
2574 static struct omap_hwmod_ocp_if omap54xx_l4_abe__timer7 = {
2575 .master = &omap54xx_l4_abe_hwmod,
2576 .slave = &omap54xx_timer7_hwmod,
2577 .clk = "abe_iclk",
2578 .user = OCP_USER_MPU,
2579 };
2580
2581 /* l4_abe -> timer8 */
2582 static struct omap_hwmod_ocp_if omap54xx_l4_abe__timer8 = {
2583 .master = &omap54xx_l4_abe_hwmod,
2584 .slave = &omap54xx_timer8_hwmod,
2585 .clk = "abe_iclk",
2586 .user = OCP_USER_MPU,
2587 };
2588
2589 /* l4_per -> timer9 */
2590 static struct omap_hwmod_ocp_if omap54xx_l4_per__timer9 = {
2591 .master = &omap54xx_l4_per_hwmod,
2592 .slave = &omap54xx_timer9_hwmod,
2593 .clk = "l4_root_clk_div",
2594 .user = OCP_USER_MPU | OCP_USER_SDMA,
2595 };
2596
2597 /* l4_per -> timer10 */
2598 static struct omap_hwmod_ocp_if omap54xx_l4_per__timer10 = {
2599 .master = &omap54xx_l4_per_hwmod,
2600 .slave = &omap54xx_timer10_hwmod,
2601 .clk = "l4_root_clk_div",
2602 .user = OCP_USER_MPU | OCP_USER_SDMA,
2603 };
2604
2605 /* l4_per -> timer11 */
2606 static struct omap_hwmod_ocp_if omap54xx_l4_per__timer11 = {
2607 .master = &omap54xx_l4_per_hwmod,
2608 .slave = &omap54xx_timer11_hwmod,
2609 .clk = "l4_root_clk_div",
2610 .user = OCP_USER_MPU | OCP_USER_SDMA,
2611 };
2612
2613 /* l4_per -> uart1 */
2614 static struct omap_hwmod_ocp_if omap54xx_l4_per__uart1 = {
2615 .master = &omap54xx_l4_per_hwmod,
2616 .slave = &omap54xx_uart1_hwmod,
2617 .clk = "l4_root_clk_div",
2618 .user = OCP_USER_MPU | OCP_USER_SDMA,
2619 };
2620
2621 /* l4_per -> uart2 */
2622 static struct omap_hwmod_ocp_if omap54xx_l4_per__uart2 = {
2623 .master = &omap54xx_l4_per_hwmod,
2624 .slave = &omap54xx_uart2_hwmod,
2625 .clk = "l4_root_clk_div",
2626 .user = OCP_USER_MPU | OCP_USER_SDMA,
2627 };
2628
2629 /* l4_per -> uart3 */
2630 static struct omap_hwmod_ocp_if omap54xx_l4_per__uart3 = {
2631 .master = &omap54xx_l4_per_hwmod,
2632 .slave = &omap54xx_uart3_hwmod,
2633 .clk = "l4_root_clk_div",
2634 .user = OCP_USER_MPU | OCP_USER_SDMA,
2635 };
2636
2637 /* l4_per -> uart4 */
2638 static struct omap_hwmod_ocp_if omap54xx_l4_per__uart4 = {
2639 .master = &omap54xx_l4_per_hwmod,
2640 .slave = &omap54xx_uart4_hwmod,
2641 .clk = "l4_root_clk_div",
2642 .user = OCP_USER_MPU | OCP_USER_SDMA,
2643 };
2644
2645 /* l4_per -> uart5 */
2646 static struct omap_hwmod_ocp_if omap54xx_l4_per__uart5 = {
2647 .master = &omap54xx_l4_per_hwmod,
2648 .slave = &omap54xx_uart5_hwmod,
2649 .clk = "l4_root_clk_div",
2650 .user = OCP_USER_MPU | OCP_USER_SDMA,
2651 };
2652
2653 /* l4_per -> uart6 */
2654 static struct omap_hwmod_ocp_if omap54xx_l4_per__uart6 = {
2655 .master = &omap54xx_l4_per_hwmod,
2656 .slave = &omap54xx_uart6_hwmod,
2657 .clk = "l4_root_clk_div",
2658 .user = OCP_USER_MPU | OCP_USER_SDMA,
2659 };
2660
2661 /* l4_cfg -> usb_host_hs */
2662 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__usb_host_hs = {
2663 .master = &omap54xx_l4_cfg_hwmod,
2664 .slave = &omap54xx_usb_host_hs_hwmod,
2665 .clk = "l3_iclk_div",
2666 .user = OCP_USER_MPU | OCP_USER_SDMA,
2667 };
2668
2669 /* l4_cfg -> usb_tll_hs */
2670 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__usb_tll_hs = {
2671 .master = &omap54xx_l4_cfg_hwmod,
2672 .slave = &omap54xx_usb_tll_hs_hwmod,
2673 .clk = "l4_root_clk_div",
2674 .user = OCP_USER_MPU | OCP_USER_SDMA,
2675 };
2676
2677 /* l4_cfg -> usb_otg_ss */
2678 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__usb_otg_ss = {
2679 .master = &omap54xx_l4_cfg_hwmod,
2680 .slave = &omap54xx_usb_otg_ss_hwmod,
2681 .clk = "dpll_core_h13x2_ck",
2682 .user = OCP_USER_MPU | OCP_USER_SDMA,
2683 };
2684
2685 /* l4_wkup -> wd_timer2 */
2686 static struct omap_hwmod_ocp_if omap54xx_l4_wkup__wd_timer2 = {
2687 .master = &omap54xx_l4_wkup_hwmod,
2688 .slave = &omap54xx_wd_timer2_hwmod,
2689 .clk = "wkupaon_iclk_mux",
2690 .user = OCP_USER_MPU | OCP_USER_SDMA,
2691 };
2692
2693 static struct omap_hwmod_ocp_if *omap54xx_hwmod_ocp_ifs[] __initdata = {
2694 &omap54xx_l3_main_1__dmm,
2695 &omap54xx_l3_main_3__l3_instr,
2696 &omap54xx_l3_main_2__l3_main_1,
2697 &omap54xx_l4_cfg__l3_main_1,
2698 &omap54xx_mpu__l3_main_1,
2699 &omap54xx_l3_main_1__l3_main_2,
2700 &omap54xx_l4_cfg__l3_main_2,
2701 &omap54xx_l3_main_1__l3_main_3,
2702 &omap54xx_l3_main_2__l3_main_3,
2703 &omap54xx_l4_cfg__l3_main_3,
2704 &omap54xx_l3_main_1__l4_abe,
2705 &omap54xx_mpu__l4_abe,
2706 &omap54xx_l3_main_1__l4_cfg,
2707 &omap54xx_l3_main_2__l4_per,
2708 &omap54xx_l3_main_1__l4_wkup,
2709 &omap54xx_mpu__mpu_private,
2710 &omap54xx_l4_wkup__counter_32k,
2711 &omap54xx_l4_cfg__dma_system,
2712 &omap54xx_l4_abe__dmic,
2713 &omap54xx_l4_cfg__mmu_dsp,
2714 &omap54xx_l3_main_2__dss,
2715 &omap54xx_l3_main_2__dss_dispc,
2716 &omap54xx_l3_main_2__dss_dsi1_a,
2717 &omap54xx_l3_main_2__dss_dsi1_c,
2718 &omap54xx_l3_main_2__dss_hdmi,
2719 &omap54xx_l3_main_2__dss_rfbi,
2720 &omap54xx_mpu__emif1,
2721 &omap54xx_mpu__emif2,
2722 &omap54xx_l4_wkup__gpio1,
2723 &omap54xx_l4_per__gpio2,
2724 &omap54xx_l4_per__gpio3,
2725 &omap54xx_l4_per__gpio4,
2726 &omap54xx_l4_per__gpio5,
2727 &omap54xx_l4_per__gpio6,
2728 &omap54xx_l4_per__gpio7,
2729 &omap54xx_l4_per__gpio8,
2730 &omap54xx_l4_per__i2c1,
2731 &omap54xx_l4_per__i2c2,
2732 &omap54xx_l4_per__i2c3,
2733 &omap54xx_l4_per__i2c4,
2734 &omap54xx_l4_per__i2c5,
2735 &omap54xx_l3_main_2__mmu_ipu,
2736 &omap54xx_l4_wkup__kbd,
2737 &omap54xx_l4_cfg__mailbox,
2738 &omap54xx_l4_abe__mcbsp1,
2739 &omap54xx_l4_abe__mcbsp2,
2740 &omap54xx_l4_abe__mcbsp3,
2741 &omap54xx_l4_abe__mcpdm,
2742 &omap54xx_l4_per__mcspi1,
2743 &omap54xx_l4_per__mcspi2,
2744 &omap54xx_l4_per__mcspi3,
2745 &omap54xx_l4_per__mcspi4,
2746 &omap54xx_l4_per__mmc1,
2747 &omap54xx_l4_per__mmc2,
2748 &omap54xx_l4_per__mmc3,
2749 &omap54xx_l4_per__mmc4,
2750 &omap54xx_l4_per__mmc5,
2751 &omap54xx_l4_cfg__mpu,
2752 &omap54xx_l4_cfg__spinlock,
2753 &omap54xx_l4_cfg__ocp2scp1,
2754 &omap54xx_l4_wkup__timer1,
2755 &omap54xx_l4_per__timer2,
2756 &omap54xx_l4_per__timer3,
2757 &omap54xx_l4_per__timer4,
2758 &omap54xx_l4_abe__timer5,
2759 &omap54xx_l4_abe__timer6,
2760 &omap54xx_l4_abe__timer7,
2761 &omap54xx_l4_abe__timer8,
2762 &omap54xx_l4_per__timer9,
2763 &omap54xx_l4_per__timer10,
2764 &omap54xx_l4_per__timer11,
2765 &omap54xx_l4_per__uart1,
2766 &omap54xx_l4_per__uart2,
2767 &omap54xx_l4_per__uart3,
2768 &omap54xx_l4_per__uart4,
2769 &omap54xx_l4_per__uart5,
2770 &omap54xx_l4_per__uart6,
2771 &omap54xx_l4_cfg__usb_host_hs,
2772 &omap54xx_l4_cfg__usb_tll_hs,
2773 &omap54xx_l4_cfg__usb_otg_ss,
2774 &omap54xx_l4_wkup__wd_timer2,
2775 &omap54xx_l4_cfg__ocp2scp3,
2776 &omap54xx_l4_cfg__sata,
2777 NULL,
2778 };
2779
2780 int __init omap54xx_hwmod_init(void)
2781 {
2782 omap_hwmod_init();
2783 return omap_hwmod_register_links(omap54xx_hwmod_ocp_ifs);
2784 }