blob: c72cd84b07ece729775e2ef6002b664256c0ed02 [file] [log] [blame]
Benoit Cousson08e48302013-05-29 12:38:10 -04001/*
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>
Andreas Fenkart551434382014-11-08 15:33:09 +010021#include <linux/platform_data/hsmmc-omap.h>
Benoit Cousson08e48302013-05-29 12:38:10 -040022#include <linux/power/smartreflex.h>
Benoit Cousson08e48302013-05-29 12:38:10 -040023#include <linux/i2c-omap.h>
24
25#include <linux/omap-dma.h>
Benoit Cousson08e48302013-05-29 12:38:10 -040026
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"
Benoit Cousson08e48302013-05-29 12:38:10 -040032#include "i2c.h"
Benoit Cousson08e48302013-05-29 12:38:10 -040033#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 */
50static struct omap_hwmod_class omap54xx_dmm_hwmod_class = {
51 .name = "dmm",
52};
53
54/* dmm */
55static 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 */
71static struct omap_hwmod_class omap54xx_l3_hwmod_class = {
72 .name = "l3",
73};
74
75/* l3_instr */
76static 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 */
90static 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 */
103static 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 */
116static 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 */
133static struct omap_hwmod_class omap54xx_l4_hwmod_class = {
134 .name = "l4",
135};
136
137/* l4_abe */
138static 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 */
151static 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 */
164static 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 */
177static 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 */
193static struct omap_hwmod_class omap54xx_mpu_bus_hwmod_class = {
194 .name = "mpu_bus",
195};
196
197/* mpu_private */
198static 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
214static 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
222static struct omap_hwmod_class omap54xx_counter_hwmod_class = {
223 .name = "counter",
224 .sysc = &omap54xx_counter_sysc,
225};
226
227/* counter_32k */
228static 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
248static 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
261static struct omap_hwmod_class omap54xx_dma_hwmod_class = {
262 .name = "dma",
263 .sysc = &omap54xx_dma_sysc,
264};
265
266/* dma dev_attr */
267static 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 */
Benoit Cousson08e48302013-05-29 12:38:10 -0400274static struct omap_hwmod omap54xx_dma_system_hwmod = {
275 .name = "dma_system",
276 .class = &omap54xx_dma_hwmod_class,
277 .clkdm_name = "dma_clkdm",
Benoit Cousson08e48302013-05-29 12:38:10 -0400278 .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
293static 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
303static struct omap_hwmod_class omap54xx_dmic_hwmod_class = {
304 .name = "dmic",
305 .sysc = &omap54xx_dmic_sysc,
306};
307
308/* dmic */
309static 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/*
Archit Taneja43348072014-05-14 12:26:10 -0600324 * 'dss' class
325 * display sub-system
326 */
327static 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
333static 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 */
340static 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
346static 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
368static 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
381static struct omap_hwmod_class omap54xx_dispc_hwmod_class = {
382 .name = "dispc",
383 .sysc = &omap54xx_dispc_sysc,
384};
385
386/* dss_dispc */
387static struct omap_hwmod_opt_clk dss_dispc_opt_clks[] = {
388 { .role = "sys_clk", .clk = "dss_sys_clk" },
389};
390
391/* dss_dispc dev_attr */
392static struct omap_dss_dispc_dev_attr dss_dispc_dev_attr = {
393 .has_framedonetv_irq = 1,
394 .manager_count = 4,
395};
396
397static 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,
Tomi Valkeinen9ed69652014-10-09 17:03:15 +0300411 .parent_hwmod = &omap54xx_dss_hwmod,
Archit Taneja43348072014-05-14 12:26:10 -0600412};
413
414/*
415 * 'dsi1' class
416 * display serial interface controller
417 */
418
419static 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
430static struct omap_hwmod_class omap54xx_dsi1_hwmod_class = {
431 .name = "dsi1",
432 .sysc = &omap54xx_dsi1_sysc,
433};
434
435/* dss_dsi1_a */
436static struct omap_hwmod_opt_clk dss_dsi1_a_opt_clks[] = {
437 { .role = "sys_clk", .clk = "dss_sys_clk" },
438};
439
440static 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),
Tomi Valkeinen9ed69652014-10-09 17:03:15 +0300453 .parent_hwmod = &omap54xx_dss_hwmod,
Archit Taneja43348072014-05-14 12:26:10 -0600454};
455
456/* dss_dsi1_c */
457static struct omap_hwmod_opt_clk dss_dsi1_c_opt_clks[] = {
458 { .role = "sys_clk", .clk = "dss_sys_clk" },
459};
460
461static 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),
Tomi Valkeinen9ed69652014-10-09 17:03:15 +0300474 .parent_hwmod = &omap54xx_dss_hwmod,
Archit Taneja43348072014-05-14 12:26:10 -0600475};
476
477/*
478 * 'hdmi' class
479 * hdmi controller
480 */
481
482static 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
492static struct omap_hwmod_class omap54xx_hdmi_hwmod_class = {
493 .name = "hdmi",
494 .sysc = &omap54xx_hdmi_sysc,
495};
496
497static struct omap_hwmod_opt_clk dss_hdmi_opt_clks[] = {
498 { .role = "sys_clk", .clk = "dss_sys_clk" },
499};
500
501static 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),
Tomi Valkeinen9ed69652014-10-09 17:03:15 +0300514 .parent_hwmod = &omap54xx_dss_hwmod,
Archit Taneja43348072014-05-14 12:26:10 -0600515};
516
517/*
518 * 'rfbi' class
519 * remote frame buffer interface
520 */
521
522static 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
532static struct omap_hwmod_class omap54xx_rfbi_hwmod_class = {
533 .name = "rfbi",
534 .sysc = &omap54xx_rfbi_sysc,
535};
536
537/* dss_rfbi */
538static struct omap_hwmod_opt_clk dss_rfbi_opt_clks[] = {
539 { .role = "ick", .clk = "l3_iclk_div" },
540};
541
542static 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),
Tomi Valkeinen9ed69652014-10-09 17:03:15 +0300554 .parent_hwmod = &omap54xx_dss_hwmod,
Archit Taneja43348072014-05-14 12:26:10 -0600555};
556
557/*
Benoit Cousson08e48302013-05-29 12:38:10 -0400558 * 'emif' class
559 * external memory interface no1 (wrapper)
560 */
561
562static struct omap_hwmod_class_sysconfig omap54xx_emif_sysc = {
563 .rev_offs = 0x0000,
564};
565
566static struct omap_hwmod_class omap54xx_emif_hwmod_class = {
567 .name = "emif",
568 .sysc = &omap54xx_emif_sysc,
569};
570
571/* emif1 */
572static struct omap_hwmod omap54xx_emif1_hwmod = {
573 .name = "emif1",
574 .class = &omap54xx_emif_hwmod_class,
575 .clkdm_name = "emif_clkdm",
Rajendra Nayakb2eb0002013-08-20 13:02:44 +0530576 .flags = HWMOD_INIT_NO_IDLE,
Benoit Cousson08e48302013-05-29 12:38:10 -0400577 .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 */
588static struct omap_hwmod omap54xx_emif2_hwmod = {
589 .name = "emif2",
590 .class = &omap54xx_emif_hwmod_class,
591 .clkdm_name = "emif_clkdm",
Rajendra Nayakb2eb0002013-08-20 13:02:44 +0530592 .flags = HWMOD_INIT_NO_IDLE,
Benoit Cousson08e48302013-05-29 12:38:10 -0400593 .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
608static 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
620static struct omap_hwmod_class omap54xx_gpio_hwmod_class = {
621 .name = "gpio",
622 .sysc = &omap54xx_gpio_sysc,
623 .rev = 2,
624};
625
Benoit Cousson08e48302013-05-29 12:38:10 -0400626/* gpio1 */
627static struct omap_hwmod_opt_clk gpio1_opt_clks[] = {
628 { .role = "dbclk", .clk = "gpio1_dbclk" },
629};
630
631static 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),
Benoit Cousson08e48302013-05-29 12:38:10 -0400645};
646
647/* gpio2 */
648static struct omap_hwmod_opt_clk gpio2_opt_clks[] = {
649 { .role = "dbclk", .clk = "gpio2_dbclk" },
650};
651
652static 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),
Benoit Cousson08e48302013-05-29 12:38:10 -0400667};
668
669/* gpio3 */
670static struct omap_hwmod_opt_clk gpio3_opt_clks[] = {
671 { .role = "dbclk", .clk = "gpio3_dbclk" },
672};
673
674static 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),
Benoit Cousson08e48302013-05-29 12:38:10 -0400689};
690
691/* gpio4 */
692static struct omap_hwmod_opt_clk gpio4_opt_clks[] = {
693 { .role = "dbclk", .clk = "gpio4_dbclk" },
694};
695
696static 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),
Benoit Cousson08e48302013-05-29 12:38:10 -0400711};
712
713/* gpio5 */
714static struct omap_hwmod_opt_clk gpio5_opt_clks[] = {
715 { .role = "dbclk", .clk = "gpio5_dbclk" },
716};
717
718static 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),
Benoit Cousson08e48302013-05-29 12:38:10 -0400733};
734
735/* gpio6 */
736static struct omap_hwmod_opt_clk gpio6_opt_clks[] = {
737 { .role = "dbclk", .clk = "gpio6_dbclk" },
738};
739
740static 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),
Benoit Cousson08e48302013-05-29 12:38:10 -0400755};
756
757/* gpio7 */
758static struct omap_hwmod_opt_clk gpio7_opt_clks[] = {
759 { .role = "dbclk", .clk = "gpio7_dbclk" },
760};
761
762static 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),
Benoit Cousson08e48302013-05-29 12:38:10 -0400777};
778
779/* gpio8 */
780static struct omap_hwmod_opt_clk gpio8_opt_clks[] = {
781 { .role = "dbclk", .clk = "gpio8_dbclk" },
782};
783
784static 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),
Benoit Cousson08e48302013-05-29 12:38:10 -0400799};
800
801/*
802 * 'i2c' class
803 * multimaster high-speed i2c controller
804 */
805
806static 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),
Benoit Cousson08e48302013-05-29 12:38:10 -0400814 .sysc_fields = &omap_hwmod_sysc_type1,
815};
816
817static 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
Benoit Cousson08e48302013-05-29 12:38:10 -0400824/* i2c1 */
825static 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 },
Benoit Cousson08e48302013-05-29 12:38:10 -0400838};
839
840/* i2c2 */
841static 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 },
Benoit Cousson08e48302013-05-29 12:38:10 -0400854};
855
856/* i2c3 */
857static 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 },
Benoit Cousson08e48302013-05-29 12:38:10 -0400870};
871
872/* i2c4 */
873static 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 },
Benoit Cousson08e48302013-05-29 12:38:10 -0400886};
887
888/* i2c5 */
889static 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 },
Benoit Cousson08e48302013-05-29 12:38:10 -0400902};
903
904/*
905 * 'kbd' class
906 * keyboard controller
907 */
908
909static 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
918static struct omap_hwmod_class omap54xx_kbd_hwmod_class = {
919 .name = "kbd",
920 .sysc = &omap54xx_kbd_sysc,
921};
922
923/* kbd */
924static 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/*
Suman Anna03ab3492013-08-06 16:40:28 -0500939 * 'mailbox' class
940 * mailbox module allowing communication between the on-chip processors using a
941 * queued mailbox-interrupt mechanism.
942 */
943
944static 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
953static struct omap_hwmod_class omap54xx_mailbox_hwmod_class = {
954 .name = "mailbox",
955 .sysc = &omap54xx_mailbox_sysc,
956};
957
958/* mailbox */
959static 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/*
Benoit Cousson08e48302013-05-29 12:38:10 -0400972 * 'mcbsp' class
973 * multi channel buffered serial port controller
974 */
975
976static 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
984static struct omap_hwmod_class omap54xx_mcbsp_hwmod_class = {
985 .name = "mcbsp",
986 .sysc = &omap54xx_mcbsp_sysc,
Benoit Cousson08e48302013-05-29 12:38:10 -0400987};
988
989/* mcbsp1 */
990static 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
995static 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 */
1012static 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
1017static 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 */
1034static 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
1039static 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
1061static 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
1071static struct omap_hwmod_class omap54xx_mcpdm_hwmod_class = {
1072 .name = "mcpdm",
1073 .sysc = &omap54xx_mcpdm_sysc,
1074};
1075
1076/* mcpdm */
1077static 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
Peter Ujfalusi0f9e19a2014-05-09 11:10:05 +03001093 .flags = HWMOD_EXT_OPT_MAIN_CLK | HWMOD_SWSUP_SIDLE,
Benoit Cousson08e48302013-05-29 12:38:10 -04001094 .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
1110static 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
1120static struct omap_hwmod_class omap54xx_mcspi_hwmod_class = {
1121 .name = "mcspi",
1122 .sysc = &omap54xx_mcspi_sysc,
Benoit Cousson08e48302013-05-29 12:38:10 -04001123};
1124
1125/* mcspi1 */
Benoit Cousson08e48302013-05-29 12:38:10 -04001126static 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 },
Benoit Cousson08e48302013-05-29 12:38:10 -04001138};
1139
1140/* mcspi2 */
Benoit Cousson08e48302013-05-29 12:38:10 -04001141static 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 },
Benoit Cousson08e48302013-05-29 12:38:10 -04001153};
1154
1155/* mcspi3 */
Benoit Cousson08e48302013-05-29 12:38:10 -04001156static 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 },
Benoit Cousson08e48302013-05-29 12:38:10 -04001168};
1169
1170/* mcspi4 */
Benoit Cousson08e48302013-05-29 12:38:10 -04001171static 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 },
Benoit Cousson08e48302013-05-29 12:38:10 -04001183};
1184
1185/*
1186 * 'mmc' class
1187 * multimedia card high-speed/sd/sdio (mmc/sd/sdio) host controller
1188 */
1189
1190static 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
1202static struct omap_hwmod_class omap54xx_mmc_hwmod_class = {
1203 .name = "mmc",
1204 .sysc = &omap54xx_mmc_sysc,
1205};
1206
1207/* mmc1 */
1208static struct omap_hwmod_opt_clk mmc1_opt_clks[] = {
1209 { .role = "32khz_clk", .clk = "mmc1_32khz_clk" },
1210};
1211
1212/* mmc1 dev_attr */
Andreas Fenkart551434382014-11-08 15:33:09 +01001213static struct omap_hsmmc_dev_attr mmc1_dev_attr = {
Benoit Cousson08e48302013-05-29 12:38:10 -04001214 .flags = OMAP_HSMMC_SUPPORTS_DUAL_VOLT,
1215};
1216
1217static 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 */
1235static 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 */
1250static 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 */
1265static 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 */
1280static 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/*
Suman Anna1528ed02014-03-05 18:24:14 -06001295 * 'mmu' class
1296 * The memory management unit performs virtual to physical address translation
1297 * for its requestors.
1298 */
1299
1300static 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
1311static struct omap_hwmod_class omap54xx_mmu_hwmod_class = {
1312 .name = "mmu",
1313 .sysc = &omap54xx_mmu_sysc,
1314};
1315
1316static struct omap_hwmod_rst_info omap54xx_mmu_dsp_resets[] = {
1317 { .name = "mmu_cache", .rst_shift = 1 },
1318};
1319
1320static 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 */
1338static struct omap_hwmod_rst_info omap54xx_mmu_ipu_resets[] = {
1339 { .name = "mmu_cache", .rst_shift = 2 },
1340};
1341
1342static 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/*
Benoit Cousson08e48302013-05-29 12:38:10 -04001360 * 'mpu' class
1361 * mpu sub-system
1362 */
1363
1364static struct omap_hwmod_class omap54xx_mpu_hwmod_class = {
1365 .name = "mpu",
1366};
1367
1368/* mpu */
1369static struct omap_hwmod omap54xx_mpu_hwmod = {
1370 .name = "mpu",
1371 .class = &omap54xx_mpu_hwmod_class,
1372 .clkdm_name = "mpu_clkdm",
Rajendra Nayakb2eb0002013-08-20 13:02:44 +05301373 .flags = HWMOD_INIT_NO_IDLE,
Benoit Cousson08e48302013-05-29 12:38:10 -04001374 .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/*
Suman Anna325529d2013-09-17 14:31:03 -05001384 * 'spinlock' class
1385 * spinlock provides hardware assistance for synchronizing the processes
1386 * running on multiple processors
1387 */
1388
1389static 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
1400static struct omap_hwmod_class omap54xx_spinlock_hwmod_class = {
1401 .name = "spinlock",
1402 .sysc = &omap54xx_spinlock_sysc,
1403};
1404
1405/* spinlock */
1406static 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/*
Benoit Cousson254f57a2013-10-11 15:29:55 -07001419 * 'ocp2scp' class
1420 * bridge to transform ocp interface protocol to scp (serial control port)
1421 * protocol
1422 */
1423
1424static 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
1434static struct omap_hwmod_class omap54xx_ocp2scp_hwmod_class = {
1435 .name = "ocp2scp",
1436 .sysc = &omap54xx_ocp2scp_sysc,
1437};
1438
1439/* ocp2scp1 */
1440static 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/*
Benoit Cousson08e48302013-05-29 12:38:10 -04001455 * 'timer' class
1456 * general purpose timer module with accurate 1ms tick
1457 * This class contains several variants: ['timer_1ms', 'timer']
1458 */
1459
1460static 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,
Benoit Cousson08e48302013-05-29 12:38:10 -04001468};
1469
1470static struct omap_hwmod_class omap54xx_timer_1ms_hwmod_class = {
1471 .name = "timer",
1472 .sysc = &omap54xx_timer_1ms_sysc,
1473};
1474
1475static 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
1485static struct omap_hwmod_class omap54xx_timer_hwmod_class = {
1486 .name = "timer",
1487 .sysc = &omap54xx_timer_sysc,
1488};
1489
1490/* timer1 */
1491static 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 */
1507static 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 */
1523static 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 */
1538static 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 */
1553static 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 */
1568static 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 */
1583static 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 */
1598static 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 */
1613static 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 */
1628static 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 */
1644static 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
1663static 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
1675static struct omap_hwmod_class omap54xx_uart_hwmod_class = {
1676 .name = "uart",
1677 .sysc = &omap54xx_uart_sysc,
1678};
1679
1680/* uart1 */
1681static struct omap_hwmod omap54xx_uart1_hwmod = {
1682 .name = "uart1",
1683 .class = &omap54xx_uart_hwmod_class,
1684 .clkdm_name = "l4per_clkdm",
Vignesh Rbd5e444b2017-01-18 17:18:07 +05301685 .flags = HWMOD_SWSUP_SIDLE_ACT,
Benoit Cousson08e48302013-05-29 12:38:10 -04001686 .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 */
1697static struct omap_hwmod omap54xx_uart2_hwmod = {
1698 .name = "uart2",
1699 .class = &omap54xx_uart_hwmod_class,
1700 .clkdm_name = "l4per_clkdm",
Vignesh Rbd5e444b2017-01-18 17:18:07 +05301701 .flags = HWMOD_SWSUP_SIDLE_ACT,
Benoit Cousson08e48302013-05-29 12:38:10 -04001702 .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 */
1713static struct omap_hwmod omap54xx_uart3_hwmod = {
1714 .name = "uart3",
1715 .class = &omap54xx_uart_hwmod_class,
1716 .clkdm_name = "l4per_clkdm",
Vignesh Rbd5e444b2017-01-18 17:18:07 +05301717 .flags = DEBUG_OMAP4UART3_FLAGS | HWMOD_SWSUP_SIDLE_ACT,
Benoit Cousson08e48302013-05-29 12:38:10 -04001718 .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 */
1729static struct omap_hwmod omap54xx_uart4_hwmod = {
1730 .name = "uart4",
1731 .class = &omap54xx_uart_hwmod_class,
1732 .clkdm_name = "l4per_clkdm",
Vignesh Rbd5e444b2017-01-18 17:18:07 +05301733 .flags = DEBUG_OMAP4UART4_FLAGS | HWMOD_SWSUP_SIDLE_ACT,
Benoit Cousson08e48302013-05-29 12:38:10 -04001734 .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 */
1745static struct omap_hwmod omap54xx_uart5_hwmod = {
1746 .name = "uart5",
1747 .class = &omap54xx_uart_hwmod_class,
1748 .clkdm_name = "l4per_clkdm",
Vignesh Rbd5e444b2017-01-18 17:18:07 +05301749 .flags = HWMOD_SWSUP_SIDLE_ACT,
Benoit Cousson08e48302013-05-29 12:38:10 -04001750 .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 */
1761static struct omap_hwmod omap54xx_uart6_hwmod = {
1762 .name = "uart6",
1763 .class = &omap54xx_uart_hwmod_class,
1764 .clkdm_name = "l4per_clkdm",
Vignesh Rbd5e444b2017-01-18 17:18:07 +05301765 .flags = HWMOD_SWSUP_SIDLE_ACT,
Benoit Cousson08e48302013-05-29 12:38:10 -04001766 .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/*
Roger Quadrose01478b2013-10-08 23:46:50 -06001777 * 'usb_host_hs' class
1778 * high-speed multi-port usb host controller
1779 */
1780
1781static 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 |
Javier Martinez Canillas10b294b2015-10-20 01:29:40 -06001785 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
Roger Quadrose01478b2013-10-08 23:46:50 -06001786 .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
1792static struct omap_hwmod_class omap54xx_usb_host_hs_hwmod_class = {
1793 .name = "usb_host_hs",
1794 .sysc = &omap54xx_usb_host_hs_sysc,
1795};
1796
1797static 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
Roger Quadrosb483a4a2013-12-03 16:25:46 +02001839 .flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY,
Roger Quadrose01478b2013-10-08 23:46:50 -06001840 .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
1855static 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
1866static struct omap_hwmod_class omap54xx_usb_tll_hs_hwmod_class = {
1867 .name = "usb_tll_hs",
1868 .sysc = &omap54xx_usb_tll_hs_sysc,
1869};
1870
1871static 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/*
Benoit Cousson08e48302013-05-29 12:38:10 -04001886 * 'usb_otg_ss' class
1887 * 2.0 super speed (usb_otg_ss) controller
1888 */
1889
1890static 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
1901static 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 */
1907static struct omap_hwmod_opt_clk usb_otg_ss_opt_clks[] = {
1908 { .role = "refclk960m", .clk = "usb_otg_ss_refclk960m" },
1909};
1910
1911static 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
1934static 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
1945static 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 */
1952static 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
Keshava Munegowdabf32c4a2014-06-15 16:02:18 -06001966/*
1967 * 'ocp2scp' class
1968 * bridge to transform ocp interface protocol to scp (serial control port)
1969 * protocol
1970 */
1971/* ocp2scp3 */
1972static struct omap_hwmod omap54xx_ocp2scp3_hwmod;
1973/* l4_cfg -> ocp2scp3 */
1974static 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
1981static 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
1999static 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
2008static struct omap_hwmod_class omap54xx_sata_hwmod_class = {
2009 .name = "sata",
2010 .sysc = &omap54xx_sata_sysc,
2011};
2012
2013/* sata */
2014static 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 */
2031static 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};
Benoit Cousson08e48302013-05-29 12:38:10 -04002037
2038/*
2039 * Interfaces
2040 */
2041
2042/* l3_main_1 -> dmm */
2043static 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 */
2051static 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 */
2059static 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 */
2067static 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
Suman Anna1528ed02014-03-05 18:24:14 -06002074/* l4_cfg -> mmu_dsp */
2075static 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
Benoit Cousson08e48302013-05-29 12:38:10 -04002082/* mpu -> l3_main_1 */
2083static 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 */
2091static 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 */
2099static 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
Suman Anna1528ed02014-03-05 18:24:14 -06002106/* l3_main_2 -> mmu_ipu */
2107static 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
Benoit Cousson08e48302013-05-29 12:38:10 -04002114/* l3_main_1 -> l3_main_3 */
2115static 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 */
2123static 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 */
2131static 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 */
2139static 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 */
2147static 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 */
2155static 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 */
2163static 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 */
2171static 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 */
2179static 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 */
2187static 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
Benoit Cousson08e48302013-05-29 12:38:10 -04002194/* l4_cfg -> dma_system */
2195static 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",
Benoit Cousson08e48302013-05-29 12:38:10 -04002199 .user = OCP_USER_MPU | OCP_USER_SDMA,
2200};
2201
2202/* l4_abe -> dmic */
2203static 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
Archit Taneja43348072014-05-14 12:26:10 -06002210/* l3_main_2 -> dss */
2211static 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 */
2219static 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 */
2227static 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 */
2235static 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 */
2243static 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 */
2251static 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
Benoit Cousson08e48302013-05-29 12:38:10 -04002258/* mpu -> emif1 */
2259static 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 */
2267static 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 */
2275static 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 */
2283static 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 */
2291static 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 */
2299static 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 */
2307static 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 */
2315static 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 */
2323static 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 */
2331static 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 */
2339static 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 */
2347static 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 */
2355static 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 */
2363static 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 */
2371static 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 */
2379static 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
Suman Anna03ab3492013-08-06 16:40:28 -05002386/* l4_cfg -> mailbox */
2387static 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
Benoit Cousson08e48302013-05-29 12:38:10 -04002394/* l4_abe -> mcbsp1 */
2395static 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 */
2403static 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 */
2411static 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 */
2419static 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 */
2427static 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 */
2435static 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 */
2443static 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 */
2451static 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 */
2459static 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 */
2467static 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 */
2475static 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 */
2483static 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 */
2491static 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 */
2499static 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
Suman Anna325529d2013-09-17 14:31:03 -05002506/* l4_cfg -> spinlock */
2507static 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
Benoit Cousson254f57a2013-10-11 15:29:55 -07002514/* l4_cfg -> ocp2scp1 */
2515static 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
Benoit Cousson08e48302013-05-29 12:38:10 -04002522/* l4_wkup -> timer1 */
2523static 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 */
2531static 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 */
2539static 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 */
2547static 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 */
2555static 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 */
2563static 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 */
2571static 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 */
2579static 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 */
2587static 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 */
2595static 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 */
2603static 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 */
2611static 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 */
2619static 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 */
2627static 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 */
2635static 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 */
2643static 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 */
2651static 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
Roger Quadrose01478b2013-10-08 23:46:50 -06002658/* l4_cfg -> usb_host_hs */
2659static 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 */
2667static 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
Benoit Cousson08e48302013-05-29 12:38:10 -04002674/* l4_cfg -> usb_otg_ss */
2675static 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 */
2683static 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
2690static 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,
Suman Anna1528ed02014-03-05 18:24:14 -06002710 &omap54xx_l4_cfg__mmu_dsp,
Archit Taneja43348072014-05-14 12:26:10 -06002711 &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,
Benoit Cousson08e48302013-05-29 12:38:10 -04002717 &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,
Suman Anna1528ed02014-03-05 18:24:14 -06002732 &omap54xx_l3_main_2__mmu_ipu,
Benoit Cousson08e48302013-05-29 12:38:10 -04002733 &omap54xx_l4_wkup__kbd,
Suman Anna03ab3492013-08-06 16:40:28 -05002734 &omap54xx_l4_cfg__mailbox,
Benoit Cousson08e48302013-05-29 12:38:10 -04002735 &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,
Suman Anna325529d2013-09-17 14:31:03 -05002749 &omap54xx_l4_cfg__spinlock,
Benoit Cousson254f57a2013-10-11 15:29:55 -07002750 &omap54xx_l4_cfg__ocp2scp1,
Benoit Cousson08e48302013-05-29 12:38:10 -04002751 &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,
Roger Quadrose01478b2013-10-08 23:46:50 -06002768 &omap54xx_l4_cfg__usb_host_hs,
2769 &omap54xx_l4_cfg__usb_tll_hs,
Benoit Cousson08e48302013-05-29 12:38:10 -04002770 &omap54xx_l4_cfg__usb_otg_ss,
2771 &omap54xx_l4_wkup__wd_timer2,
Keshava Munegowdabf32c4a2014-06-15 16:02:18 -06002772 &omap54xx_l4_cfg__ocp2scp3,
2773 &omap54xx_l4_cfg__sata,
Benoit Cousson08e48302013-05-29 12:38:10 -04002774 NULL,
2775};
2776
2777int __init omap54xx_hwmod_init(void)
2778{
2779 omap_hwmod_init();
2780 return omap_hwmod_register_links(omap54xx_hwmod_ocp_ifs);
2781}