]> git.proxmox.com Git - mirror_ubuntu-eoan-kernel.git/blame - arch/arm/mach-omap2/omap_hwmod_44xx_data.c
OMAP4: hwmod data: Add McBSP
[mirror_ubuntu-eoan-kernel.git] / arch / arm / mach-omap2 / omap_hwmod_44xx_data.c
CommitLineData
55d2cb08
BC
1/*
2 * Hardware modules present on the OMAP44xx chips
3 *
d63bd74f 4 * Copyright (C) 2009-2011 Texas Instruments, Inc.
55d2cb08
BC
5 * Copyright (C) 2009-2010 Nokia Corporation
6 *
7 * Paul Walmsley
8 * Benoit Cousson
9 *
10 * This file is automatically generated from the OMAP hardware databases.
11 * We respectfully ask that any modifications to this file be coordinated
12 * with the public linux-omap@vger.kernel.org mailing list and the
13 * authors above to ensure that the autogeneration scripts are kept
14 * up-to-date with the file contents.
15 *
16 * This program is free software; you can redistribute it and/or modify
17 * it under the terms of the GNU General Public License version 2 as
18 * published by the Free Software Foundation.
19 */
20
21#include <linux/io.h>
22
23#include <plat/omap_hwmod.h>
24#include <plat/cpu.h>
9780a9cf 25#include <plat/gpio.h>
531ce0d5 26#include <plat/dma.h>
55d2cb08
BC
27
28#include "omap_hwmod_common_data.h"
29
d198b514
PW
30#include "cm1_44xx.h"
31#include "cm2_44xx.h"
32#include "prm44xx.h"
55d2cb08 33#include "prm-regbits-44xx.h"
ff2516fb 34#include "wd_timer.h"
55d2cb08
BC
35
36/* Base offset for all OMAP4 interrupts external to MPUSS */
37#define OMAP44XX_IRQ_GIC_START 32
38
39/* Base offset for all OMAP4 dma requests */
40#define OMAP44XX_DMA_REQ_START 1
41
42/* Backward references (IPs with Bus Master capability) */
531ce0d5 43static struct omap_hwmod omap44xx_dma_system_hwmod;
55d2cb08 44static struct omap_hwmod omap44xx_dmm_hwmod;
8f25bdc5 45static struct omap_hwmod omap44xx_dsp_hwmod;
d63bd74f 46static struct omap_hwmod omap44xx_dss_hwmod;
55d2cb08 47static struct omap_hwmod omap44xx_emif_fw_hwmod;
8f25bdc5 48static struct omap_hwmod omap44xx_iva_hwmod;
55d2cb08
BC
49static struct omap_hwmod omap44xx_l3_instr_hwmod;
50static struct omap_hwmod omap44xx_l3_main_1_hwmod;
51static struct omap_hwmod omap44xx_l3_main_2_hwmod;
52static struct omap_hwmod omap44xx_l3_main_3_hwmod;
53static struct omap_hwmod omap44xx_l4_abe_hwmod;
54static struct omap_hwmod omap44xx_l4_cfg_hwmod;
55static struct omap_hwmod omap44xx_l4_per_hwmod;
56static struct omap_hwmod omap44xx_l4_wkup_hwmod;
57static struct omap_hwmod omap44xx_mpu_hwmod;
58static struct omap_hwmod omap44xx_mpu_private_hwmod;
59
60/*
61 * Interconnects omap_hwmod structures
62 * hwmods that compose the global OMAP interconnect
63 */
64
65/*
66 * 'dmm' class
67 * instance(s): dmm
68 */
69static struct omap_hwmod_class omap44xx_dmm_hwmod_class = {
fe13471c 70 .name = "dmm",
55d2cb08
BC
71};
72
73/* dmm interface data */
74/* l3_main_1 -> dmm */
75static struct omap_hwmod_ocp_if omap44xx_l3_main_1__dmm = {
76 .master = &omap44xx_l3_main_1_hwmod,
77 .slave = &omap44xx_dmm_hwmod,
78 .clk = "l3_div_ck",
659fa822
BC
79 .user = OCP_USER_SDMA,
80};
81
82static struct omap_hwmod_addr_space omap44xx_dmm_addrs[] = {
83 {
84 .pa_start = 0x4e000000,
85 .pa_end = 0x4e0007ff,
86 .flags = ADDR_TYPE_RT
87 },
55d2cb08
BC
88};
89
90/* mpu -> dmm */
91static struct omap_hwmod_ocp_if omap44xx_mpu__dmm = {
92 .master = &omap44xx_mpu_hwmod,
93 .slave = &omap44xx_dmm_hwmod,
94 .clk = "l3_div_ck",
659fa822
BC
95 .addr = omap44xx_dmm_addrs,
96 .addr_cnt = ARRAY_SIZE(omap44xx_dmm_addrs),
97 .user = OCP_USER_MPU,
55d2cb08
BC
98};
99
100/* dmm slave ports */
101static struct omap_hwmod_ocp_if *omap44xx_dmm_slaves[] = {
102 &omap44xx_l3_main_1__dmm,
103 &omap44xx_mpu__dmm,
104};
105
106static struct omap_hwmod_irq_info omap44xx_dmm_irqs[] = {
107 { .irq = 113 + OMAP44XX_IRQ_GIC_START },
108};
109
110static struct omap_hwmod omap44xx_dmm_hwmod = {
111 .name = "dmm",
112 .class = &omap44xx_dmm_hwmod_class,
113 .slaves = omap44xx_dmm_slaves,
114 .slaves_cnt = ARRAY_SIZE(omap44xx_dmm_slaves),
115 .mpu_irqs = omap44xx_dmm_irqs,
116 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_dmm_irqs),
117 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
118};
119
120/*
121 * 'emif_fw' class
122 * instance(s): emif_fw
123 */
124static struct omap_hwmod_class omap44xx_emif_fw_hwmod_class = {
fe13471c 125 .name = "emif_fw",
55d2cb08
BC
126};
127
128/* emif_fw interface data */
129/* dmm -> emif_fw */
130static struct omap_hwmod_ocp_if omap44xx_dmm__emif_fw = {
131 .master = &omap44xx_dmm_hwmod,
132 .slave = &omap44xx_emif_fw_hwmod,
133 .clk = "l3_div_ck",
134 .user = OCP_USER_MPU | OCP_USER_SDMA,
135};
136
659fa822
BC
137static struct omap_hwmod_addr_space omap44xx_emif_fw_addrs[] = {
138 {
139 .pa_start = 0x4a20c000,
140 .pa_end = 0x4a20c0ff,
141 .flags = ADDR_TYPE_RT
142 },
143};
144
55d2cb08
BC
145/* l4_cfg -> emif_fw */
146static struct omap_hwmod_ocp_if omap44xx_l4_cfg__emif_fw = {
147 .master = &omap44xx_l4_cfg_hwmod,
148 .slave = &omap44xx_emif_fw_hwmod,
149 .clk = "l4_div_ck",
659fa822
BC
150 .addr = omap44xx_emif_fw_addrs,
151 .addr_cnt = ARRAY_SIZE(omap44xx_emif_fw_addrs),
152 .user = OCP_USER_MPU,
55d2cb08
BC
153};
154
155/* emif_fw slave ports */
156static struct omap_hwmod_ocp_if *omap44xx_emif_fw_slaves[] = {
157 &omap44xx_dmm__emif_fw,
158 &omap44xx_l4_cfg__emif_fw,
159};
160
161static struct omap_hwmod omap44xx_emif_fw_hwmod = {
162 .name = "emif_fw",
163 .class = &omap44xx_emif_fw_hwmod_class,
164 .slaves = omap44xx_emif_fw_slaves,
165 .slaves_cnt = ARRAY_SIZE(omap44xx_emif_fw_slaves),
166 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
167};
168
169/*
170 * 'l3' class
171 * instance(s): l3_instr, l3_main_1, l3_main_2, l3_main_3
172 */
173static struct omap_hwmod_class omap44xx_l3_hwmod_class = {
fe13471c 174 .name = "l3",
55d2cb08
BC
175};
176
177/* l3_instr interface data */
8f25bdc5
BC
178/* iva -> l3_instr */
179static struct omap_hwmod_ocp_if omap44xx_iva__l3_instr = {
180 .master = &omap44xx_iva_hwmod,
181 .slave = &omap44xx_l3_instr_hwmod,
182 .clk = "l3_div_ck",
183 .user = OCP_USER_MPU | OCP_USER_SDMA,
184};
185
55d2cb08
BC
186/* l3_main_3 -> l3_instr */
187static struct omap_hwmod_ocp_if omap44xx_l3_main_3__l3_instr = {
188 .master = &omap44xx_l3_main_3_hwmod,
189 .slave = &omap44xx_l3_instr_hwmod,
190 .clk = "l3_div_ck",
191 .user = OCP_USER_MPU | OCP_USER_SDMA,
192};
193
194/* l3_instr slave ports */
195static struct omap_hwmod_ocp_if *omap44xx_l3_instr_slaves[] = {
8f25bdc5 196 &omap44xx_iva__l3_instr,
55d2cb08
BC
197 &omap44xx_l3_main_3__l3_instr,
198};
199
200static struct omap_hwmod omap44xx_l3_instr_hwmod = {
201 .name = "l3_instr",
202 .class = &omap44xx_l3_hwmod_class,
203 .slaves = omap44xx_l3_instr_slaves,
204 .slaves_cnt = ARRAY_SIZE(omap44xx_l3_instr_slaves),
205 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
206};
207
3b54baad 208/* l3_main_1 interface data */
8f25bdc5
BC
209/* dsp -> l3_main_1 */
210static struct omap_hwmod_ocp_if omap44xx_dsp__l3_main_1 = {
211 .master = &omap44xx_dsp_hwmod,
212 .slave = &omap44xx_l3_main_1_hwmod,
213 .clk = "l3_div_ck",
214 .user = OCP_USER_MPU | OCP_USER_SDMA,
215};
216
d63bd74f
BC
217/* dss -> l3_main_1 */
218static struct omap_hwmod_ocp_if omap44xx_dss__l3_main_1 = {
219 .master = &omap44xx_dss_hwmod,
220 .slave = &omap44xx_l3_main_1_hwmod,
221 .clk = "l3_div_ck",
222 .user = OCP_USER_MPU | OCP_USER_SDMA,
223};
224
55d2cb08
BC
225/* l3_main_2 -> l3_main_1 */
226static struct omap_hwmod_ocp_if omap44xx_l3_main_2__l3_main_1 = {
227 .master = &omap44xx_l3_main_2_hwmod,
228 .slave = &omap44xx_l3_main_1_hwmod,
229 .clk = "l3_div_ck",
230 .user = OCP_USER_MPU | OCP_USER_SDMA,
231};
232
233/* l4_cfg -> l3_main_1 */
234static struct omap_hwmod_ocp_if omap44xx_l4_cfg__l3_main_1 = {
235 .master = &omap44xx_l4_cfg_hwmod,
236 .slave = &omap44xx_l3_main_1_hwmod,
237 .clk = "l4_div_ck",
238 .user = OCP_USER_MPU | OCP_USER_SDMA,
239};
240
241/* mpu -> l3_main_1 */
242static struct omap_hwmod_ocp_if omap44xx_mpu__l3_main_1 = {
243 .master = &omap44xx_mpu_hwmod,
244 .slave = &omap44xx_l3_main_1_hwmod,
245 .clk = "l3_div_ck",
246 .user = OCP_USER_MPU | OCP_USER_SDMA,
247};
248
249/* l3_main_1 slave ports */
250static struct omap_hwmod_ocp_if *omap44xx_l3_main_1_slaves[] = {
8f25bdc5 251 &omap44xx_dsp__l3_main_1,
d63bd74f 252 &omap44xx_dss__l3_main_1,
55d2cb08
BC
253 &omap44xx_l3_main_2__l3_main_1,
254 &omap44xx_l4_cfg__l3_main_1,
255 &omap44xx_mpu__l3_main_1,
256};
257
258static struct omap_hwmod omap44xx_l3_main_1_hwmod = {
259 .name = "l3_main_1",
260 .class = &omap44xx_l3_hwmod_class,
261 .slaves = omap44xx_l3_main_1_slaves,
262 .slaves_cnt = ARRAY_SIZE(omap44xx_l3_main_1_slaves),
263 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
264};
265
266/* l3_main_2 interface data */
d7cf5f33
BC
267/* dma_system -> l3_main_2 */
268static struct omap_hwmod_ocp_if omap44xx_dma_system__l3_main_2 = {
269 .master = &omap44xx_dma_system_hwmod,
270 .slave = &omap44xx_l3_main_2_hwmod,
271 .clk = "l3_div_ck",
272 .user = OCP_USER_MPU | OCP_USER_SDMA,
273};
274
8f25bdc5
BC
275/* iva -> l3_main_2 */
276static struct omap_hwmod_ocp_if omap44xx_iva__l3_main_2 = {
277 .master = &omap44xx_iva_hwmod,
278 .slave = &omap44xx_l3_main_2_hwmod,
279 .clk = "l3_div_ck",
280 .user = OCP_USER_MPU | OCP_USER_SDMA,
281};
282
55d2cb08
BC
283/* l3_main_1 -> l3_main_2 */
284static struct omap_hwmod_ocp_if omap44xx_l3_main_1__l3_main_2 = {
285 .master = &omap44xx_l3_main_1_hwmod,
286 .slave = &omap44xx_l3_main_2_hwmod,
287 .clk = "l3_div_ck",
288 .user = OCP_USER_MPU | OCP_USER_SDMA,
289};
290
291/* l4_cfg -> l3_main_2 */
292static struct omap_hwmod_ocp_if omap44xx_l4_cfg__l3_main_2 = {
293 .master = &omap44xx_l4_cfg_hwmod,
294 .slave = &omap44xx_l3_main_2_hwmod,
295 .clk = "l4_div_ck",
296 .user = OCP_USER_MPU | OCP_USER_SDMA,
297};
298
299/* l3_main_2 slave ports */
300static struct omap_hwmod_ocp_if *omap44xx_l3_main_2_slaves[] = {
531ce0d5 301 &omap44xx_dma_system__l3_main_2,
8f25bdc5 302 &omap44xx_iva__l3_main_2,
55d2cb08
BC
303 &omap44xx_l3_main_1__l3_main_2,
304 &omap44xx_l4_cfg__l3_main_2,
305};
306
307static struct omap_hwmod omap44xx_l3_main_2_hwmod = {
308 .name = "l3_main_2",
309 .class = &omap44xx_l3_hwmod_class,
310 .slaves = omap44xx_l3_main_2_slaves,
311 .slaves_cnt = ARRAY_SIZE(omap44xx_l3_main_2_slaves),
312 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
313};
314
315/* l3_main_3 interface data */
316/* l3_main_1 -> l3_main_3 */
317static struct omap_hwmod_ocp_if omap44xx_l3_main_1__l3_main_3 = {
318 .master = &omap44xx_l3_main_1_hwmod,
319 .slave = &omap44xx_l3_main_3_hwmod,
320 .clk = "l3_div_ck",
321 .user = OCP_USER_MPU | OCP_USER_SDMA,
322};
323
324/* l3_main_2 -> l3_main_3 */
325static struct omap_hwmod_ocp_if omap44xx_l3_main_2__l3_main_3 = {
326 .master = &omap44xx_l3_main_2_hwmod,
327 .slave = &omap44xx_l3_main_3_hwmod,
328 .clk = "l3_div_ck",
329 .user = OCP_USER_MPU | OCP_USER_SDMA,
330};
331
332/* l4_cfg -> l3_main_3 */
333static struct omap_hwmod_ocp_if omap44xx_l4_cfg__l3_main_3 = {
334 .master = &omap44xx_l4_cfg_hwmod,
335 .slave = &omap44xx_l3_main_3_hwmod,
336 .clk = "l4_div_ck",
337 .user = OCP_USER_MPU | OCP_USER_SDMA,
338};
339
340/* l3_main_3 slave ports */
341static struct omap_hwmod_ocp_if *omap44xx_l3_main_3_slaves[] = {
342 &omap44xx_l3_main_1__l3_main_3,
343 &omap44xx_l3_main_2__l3_main_3,
344 &omap44xx_l4_cfg__l3_main_3,
345};
346
347static struct omap_hwmod omap44xx_l3_main_3_hwmod = {
348 .name = "l3_main_3",
349 .class = &omap44xx_l3_hwmod_class,
350 .slaves = omap44xx_l3_main_3_slaves,
351 .slaves_cnt = ARRAY_SIZE(omap44xx_l3_main_3_slaves),
352 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
353};
354
355/*
356 * 'l4' class
357 * instance(s): l4_abe, l4_cfg, l4_per, l4_wkup
358 */
359static struct omap_hwmod_class omap44xx_l4_hwmod_class = {
fe13471c 360 .name = "l4",
55d2cb08
BC
361};
362
363/* l4_abe interface data */
8f25bdc5
BC
364/* dsp -> l4_abe */
365static struct omap_hwmod_ocp_if omap44xx_dsp__l4_abe = {
366 .master = &omap44xx_dsp_hwmod,
367 .slave = &omap44xx_l4_abe_hwmod,
368 .clk = "ocp_abe_iclk",
369 .user = OCP_USER_MPU | OCP_USER_SDMA,
370};
371
55d2cb08
BC
372/* l3_main_1 -> l4_abe */
373static struct omap_hwmod_ocp_if omap44xx_l3_main_1__l4_abe = {
374 .master = &omap44xx_l3_main_1_hwmod,
375 .slave = &omap44xx_l4_abe_hwmod,
376 .clk = "l3_div_ck",
377 .user = OCP_USER_MPU | OCP_USER_SDMA,
378};
379
380/* mpu -> l4_abe */
381static struct omap_hwmod_ocp_if omap44xx_mpu__l4_abe = {
382 .master = &omap44xx_mpu_hwmod,
383 .slave = &omap44xx_l4_abe_hwmod,
384 .clk = "ocp_abe_iclk",
385 .user = OCP_USER_MPU | OCP_USER_SDMA,
386};
387
388/* l4_abe slave ports */
389static struct omap_hwmod_ocp_if *omap44xx_l4_abe_slaves[] = {
8f25bdc5 390 &omap44xx_dsp__l4_abe,
55d2cb08
BC
391 &omap44xx_l3_main_1__l4_abe,
392 &omap44xx_mpu__l4_abe,
393};
394
395static struct omap_hwmod omap44xx_l4_abe_hwmod = {
396 .name = "l4_abe",
397 .class = &omap44xx_l4_hwmod_class,
398 .slaves = omap44xx_l4_abe_slaves,
399 .slaves_cnt = ARRAY_SIZE(omap44xx_l4_abe_slaves),
400 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
401};
402
403/* l4_cfg interface data */
404/* l3_main_1 -> l4_cfg */
405static struct omap_hwmod_ocp_if omap44xx_l3_main_1__l4_cfg = {
406 .master = &omap44xx_l3_main_1_hwmod,
407 .slave = &omap44xx_l4_cfg_hwmod,
408 .clk = "l3_div_ck",
409 .user = OCP_USER_MPU | OCP_USER_SDMA,
410};
411
412/* l4_cfg slave ports */
413static struct omap_hwmod_ocp_if *omap44xx_l4_cfg_slaves[] = {
414 &omap44xx_l3_main_1__l4_cfg,
415};
416
417static struct omap_hwmod omap44xx_l4_cfg_hwmod = {
418 .name = "l4_cfg",
419 .class = &omap44xx_l4_hwmod_class,
420 .slaves = omap44xx_l4_cfg_slaves,
421 .slaves_cnt = ARRAY_SIZE(omap44xx_l4_cfg_slaves),
422 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
423};
424
425/* l4_per interface data */
426/* l3_main_2 -> l4_per */
427static struct omap_hwmod_ocp_if omap44xx_l3_main_2__l4_per = {
428 .master = &omap44xx_l3_main_2_hwmod,
429 .slave = &omap44xx_l4_per_hwmod,
430 .clk = "l3_div_ck",
431 .user = OCP_USER_MPU | OCP_USER_SDMA,
432};
433
434/* l4_per slave ports */
435static struct omap_hwmod_ocp_if *omap44xx_l4_per_slaves[] = {
436 &omap44xx_l3_main_2__l4_per,
437};
438
439static struct omap_hwmod omap44xx_l4_per_hwmod = {
440 .name = "l4_per",
441 .class = &omap44xx_l4_hwmod_class,
442 .slaves = omap44xx_l4_per_slaves,
443 .slaves_cnt = ARRAY_SIZE(omap44xx_l4_per_slaves),
444 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
445};
446
447/* l4_wkup interface data */
448/* l4_cfg -> l4_wkup */
449static struct omap_hwmod_ocp_if omap44xx_l4_cfg__l4_wkup = {
450 .master = &omap44xx_l4_cfg_hwmod,
451 .slave = &omap44xx_l4_wkup_hwmod,
452 .clk = "l4_div_ck",
453 .user = OCP_USER_MPU | OCP_USER_SDMA,
454};
455
456/* l4_wkup slave ports */
457static struct omap_hwmod_ocp_if *omap44xx_l4_wkup_slaves[] = {
458 &omap44xx_l4_cfg__l4_wkup,
459};
460
461static struct omap_hwmod omap44xx_l4_wkup_hwmod = {
462 .name = "l4_wkup",
463 .class = &omap44xx_l4_hwmod_class,
464 .slaves = omap44xx_l4_wkup_slaves,
465 .slaves_cnt = ARRAY_SIZE(omap44xx_l4_wkup_slaves),
466 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
467};
468
f776471f 469/*
3b54baad
BC
470 * 'mpu_bus' class
471 * instance(s): mpu_private
f776471f 472 */
3b54baad 473static struct omap_hwmod_class omap44xx_mpu_bus_hwmod_class = {
fe13471c 474 .name = "mpu_bus",
3b54baad 475};
f776471f 476
3b54baad
BC
477/* mpu_private interface data */
478/* mpu -> mpu_private */
479static struct omap_hwmod_ocp_if omap44xx_mpu__mpu_private = {
480 .master = &omap44xx_mpu_hwmod,
481 .slave = &omap44xx_mpu_private_hwmod,
482 .clk = "l3_div_ck",
483 .user = OCP_USER_MPU | OCP_USER_SDMA,
484};
485
486/* mpu_private slave ports */
487static struct omap_hwmod_ocp_if *omap44xx_mpu_private_slaves[] = {
488 &omap44xx_mpu__mpu_private,
489};
490
491static struct omap_hwmod omap44xx_mpu_private_hwmod = {
492 .name = "mpu_private",
493 .class = &omap44xx_mpu_bus_hwmod_class,
494 .slaves = omap44xx_mpu_private_slaves,
495 .slaves_cnt = ARRAY_SIZE(omap44xx_mpu_private_slaves),
496 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
497};
498
499/*
500 * Modules omap_hwmod structures
501 *
502 * The following IPs are excluded for the moment because:
503 * - They do not need an explicit SW control using omap_hwmod API.
504 * - They still need to be validated with the driver
505 * properly adapted to omap_hwmod / omap_device
506 *
507 * aess
508 * bandgap
509 * c2c
510 * c2c_target_fw
511 * cm_core
512 * cm_core_aon
513 * counter_32k
514 * ctrl_module_core
515 * ctrl_module_pad_core
516 * ctrl_module_pad_wkup
517 * ctrl_module_wkup
518 * debugss
3b54baad
BC
519 * efuse_ctrl_cust
520 * efuse_ctrl_std
521 * elm
522 * emif1
523 * emif2
524 * fdif
525 * gpmc
526 * gpu
527 * hdq1w
528 * hsi
529 * ipu
530 * iss
3b54baad 531 * kbd
3b54baad 532 * mcasp
3b54baad 533 * mcpdm
3b54baad
BC
534 * mmc1
535 * mmc2
536 * mmc3
537 * mmc4
538 * mmc5
539 * mpu_c0
540 * mpu_c1
541 * ocmc_ram
542 * ocp2scp_usb_phy
543 * ocp_wp_noc
544 * prcm
545 * prcm_mpu
546 * prm
547 * scrm
548 * sl2if
549 * slimbus1
550 * slimbus2
3b54baad
BC
551 * usb_host_fs
552 * usb_host_hs
553 * usb_otg_hs
554 * usb_phy_cm
555 * usb_tll_hs
556 * usim
557 */
558
d7cf5f33
BC
559/*
560 * 'dma' class
561 * dma controller for data exchange between memory to memory (i.e. internal or
562 * external memory) and gp peripherals to memory or memory to gp peripherals
563 */
564
565static struct omap_hwmod_class_sysconfig omap44xx_dma_sysc = {
566 .rev_offs = 0x0000,
567 .sysc_offs = 0x002c,
568 .syss_offs = 0x0028,
569 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
570 SYSC_HAS_EMUFREE | SYSC_HAS_MIDLEMODE |
571 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
572 SYSS_HAS_RESET_STATUS),
573 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
574 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
575 .sysc_fields = &omap_hwmod_sysc_type1,
576};
577
578static struct omap_hwmod_class omap44xx_dma_hwmod_class = {
579 .name = "dma",
580 .sysc = &omap44xx_dma_sysc,
581};
582
583/* dma dev_attr */
584static struct omap_dma_dev_attr dma_dev_attr = {
585 .dev_caps = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY |
586 IS_CSSA_32 | IS_CDSA_32 | IS_RW_PRIORITY,
587 .lch_count = 32,
588};
589
590/* dma_system */
591static struct omap_hwmod_irq_info omap44xx_dma_system_irqs[] = {
592 { .name = "0", .irq = 12 + OMAP44XX_IRQ_GIC_START },
593 { .name = "1", .irq = 13 + OMAP44XX_IRQ_GIC_START },
594 { .name = "2", .irq = 14 + OMAP44XX_IRQ_GIC_START },
595 { .name = "3", .irq = 15 + OMAP44XX_IRQ_GIC_START },
596};
597
598/* dma_system master ports */
599static struct omap_hwmod_ocp_if *omap44xx_dma_system_masters[] = {
600 &omap44xx_dma_system__l3_main_2,
601};
602
603static struct omap_hwmod_addr_space omap44xx_dma_system_addrs[] = {
604 {
605 .pa_start = 0x4a056000,
606 .pa_end = 0x4a0560ff,
607 .flags = ADDR_TYPE_RT
608 },
609};
610
611/* l4_cfg -> dma_system */
612static struct omap_hwmod_ocp_if omap44xx_l4_cfg__dma_system = {
613 .master = &omap44xx_l4_cfg_hwmod,
614 .slave = &omap44xx_dma_system_hwmod,
615 .clk = "l4_div_ck",
616 .addr = omap44xx_dma_system_addrs,
617 .addr_cnt = ARRAY_SIZE(omap44xx_dma_system_addrs),
618 .user = OCP_USER_MPU | OCP_USER_SDMA,
619};
620
621/* dma_system slave ports */
622static struct omap_hwmod_ocp_if *omap44xx_dma_system_slaves[] = {
623 &omap44xx_l4_cfg__dma_system,
624};
625
626static struct omap_hwmod omap44xx_dma_system_hwmod = {
627 .name = "dma_system",
628 .class = &omap44xx_dma_hwmod_class,
629 .mpu_irqs = omap44xx_dma_system_irqs,
630 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_dma_system_irqs),
631 .main_clk = "l3_div_ck",
632 .prcm = {
633 .omap4 = {
634 .clkctrl_reg = OMAP4430_CM_SDMA_SDMA_CLKCTRL,
635 },
636 },
637 .dev_attr = &dma_dev_attr,
638 .slaves = omap44xx_dma_system_slaves,
639 .slaves_cnt = ARRAY_SIZE(omap44xx_dma_system_slaves),
640 .masters = omap44xx_dma_system_masters,
641 .masters_cnt = ARRAY_SIZE(omap44xx_dma_system_masters),
642 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
643};
644
8ca476da
BC
645/*
646 * 'dmic' class
647 * digital microphone controller
648 */
649
650static struct omap_hwmod_class_sysconfig omap44xx_dmic_sysc = {
651 .rev_offs = 0x0000,
652 .sysc_offs = 0x0010,
653 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
654 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
655 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
656 SIDLE_SMART_WKUP),
657 .sysc_fields = &omap_hwmod_sysc_type2,
658};
659
660static struct omap_hwmod_class omap44xx_dmic_hwmod_class = {
661 .name = "dmic",
662 .sysc = &omap44xx_dmic_sysc,
663};
664
665/* dmic */
666static struct omap_hwmod omap44xx_dmic_hwmod;
667static struct omap_hwmod_irq_info omap44xx_dmic_irqs[] = {
668 { .irq = 114 + OMAP44XX_IRQ_GIC_START },
669};
670
671static struct omap_hwmod_dma_info omap44xx_dmic_sdma_reqs[] = {
672 { .dma_req = 66 + OMAP44XX_DMA_REQ_START },
673};
674
675static struct omap_hwmod_addr_space omap44xx_dmic_addrs[] = {
676 {
677 .pa_start = 0x4012e000,
678 .pa_end = 0x4012e07f,
679 .flags = ADDR_TYPE_RT
680 },
681};
682
683/* l4_abe -> dmic */
684static struct omap_hwmod_ocp_if omap44xx_l4_abe__dmic = {
685 .master = &omap44xx_l4_abe_hwmod,
686 .slave = &omap44xx_dmic_hwmod,
687 .clk = "ocp_abe_iclk",
688 .addr = omap44xx_dmic_addrs,
689 .addr_cnt = ARRAY_SIZE(omap44xx_dmic_addrs),
690 .user = OCP_USER_MPU,
691};
692
693static struct omap_hwmod_addr_space omap44xx_dmic_dma_addrs[] = {
694 {
695 .pa_start = 0x4902e000,
696 .pa_end = 0x4902e07f,
697 .flags = ADDR_TYPE_RT
698 },
699};
700
701/* l4_abe -> dmic (dma) */
702static struct omap_hwmod_ocp_if omap44xx_l4_abe__dmic_dma = {
703 .master = &omap44xx_l4_abe_hwmod,
704 .slave = &omap44xx_dmic_hwmod,
705 .clk = "ocp_abe_iclk",
706 .addr = omap44xx_dmic_dma_addrs,
707 .addr_cnt = ARRAY_SIZE(omap44xx_dmic_dma_addrs),
708 .user = OCP_USER_SDMA,
709};
710
711/* dmic slave ports */
712static struct omap_hwmod_ocp_if *omap44xx_dmic_slaves[] = {
713 &omap44xx_l4_abe__dmic,
714 &omap44xx_l4_abe__dmic_dma,
715};
716
717static struct omap_hwmod omap44xx_dmic_hwmod = {
718 .name = "dmic",
719 .class = &omap44xx_dmic_hwmod_class,
720 .mpu_irqs = omap44xx_dmic_irqs,
721 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_dmic_irqs),
722 .sdma_reqs = omap44xx_dmic_sdma_reqs,
723 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_dmic_sdma_reqs),
724 .main_clk = "dmic_fck",
725 .prcm = {
726 .omap4 = {
727 .clkctrl_reg = OMAP4430_CM1_ABE_DMIC_CLKCTRL,
728 },
729 },
730 .slaves = omap44xx_dmic_slaves,
731 .slaves_cnt = ARRAY_SIZE(omap44xx_dmic_slaves),
732 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
733};
734
8f25bdc5
BC
735/*
736 * 'dsp' class
737 * dsp sub-system
738 */
739
740static struct omap_hwmod_class omap44xx_dsp_hwmod_class = {
fe13471c 741 .name = "dsp",
8f25bdc5
BC
742};
743
744/* dsp */
745static struct omap_hwmod_irq_info omap44xx_dsp_irqs[] = {
746 { .irq = 28 + OMAP44XX_IRQ_GIC_START },
747};
748
749static struct omap_hwmod_rst_info omap44xx_dsp_resets[] = {
750 { .name = "mmu_cache", .rst_shift = 1 },
751};
752
753static struct omap_hwmod_rst_info omap44xx_dsp_c0_resets[] = {
754 { .name = "dsp", .rst_shift = 0 },
755};
756
757/* dsp -> iva */
758static struct omap_hwmod_ocp_if omap44xx_dsp__iva = {
759 .master = &omap44xx_dsp_hwmod,
760 .slave = &omap44xx_iva_hwmod,
761 .clk = "dpll_iva_m5x2_ck",
762};
763
764/* dsp master ports */
765static struct omap_hwmod_ocp_if *omap44xx_dsp_masters[] = {
766 &omap44xx_dsp__l3_main_1,
767 &omap44xx_dsp__l4_abe,
768 &omap44xx_dsp__iva,
769};
770
771/* l4_cfg -> dsp */
772static struct omap_hwmod_ocp_if omap44xx_l4_cfg__dsp = {
773 .master = &omap44xx_l4_cfg_hwmod,
774 .slave = &omap44xx_dsp_hwmod,
775 .clk = "l4_div_ck",
776 .user = OCP_USER_MPU | OCP_USER_SDMA,
777};
778
779/* dsp slave ports */
780static struct omap_hwmod_ocp_if *omap44xx_dsp_slaves[] = {
781 &omap44xx_l4_cfg__dsp,
782};
783
784/* Pseudo hwmod for reset control purpose only */
785static struct omap_hwmod omap44xx_dsp_c0_hwmod = {
786 .name = "dsp_c0",
787 .class = &omap44xx_dsp_hwmod_class,
788 .flags = HWMOD_INIT_NO_RESET,
789 .rst_lines = omap44xx_dsp_c0_resets,
790 .rst_lines_cnt = ARRAY_SIZE(omap44xx_dsp_c0_resets),
791 .prcm = {
792 .omap4 = {
793 .rstctrl_reg = OMAP4430_RM_TESLA_RSTCTRL,
794 },
795 },
796 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
797};
798
799static struct omap_hwmod omap44xx_dsp_hwmod = {
800 .name = "dsp",
801 .class = &omap44xx_dsp_hwmod_class,
802 .mpu_irqs = omap44xx_dsp_irqs,
803 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_dsp_irqs),
804 .rst_lines = omap44xx_dsp_resets,
805 .rst_lines_cnt = ARRAY_SIZE(omap44xx_dsp_resets),
806 .main_clk = "dsp_fck",
807 .prcm = {
808 .omap4 = {
809 .clkctrl_reg = OMAP4430_CM_TESLA_TESLA_CLKCTRL,
810 .rstctrl_reg = OMAP4430_RM_TESLA_RSTCTRL,
811 },
812 },
813 .slaves = omap44xx_dsp_slaves,
814 .slaves_cnt = ARRAY_SIZE(omap44xx_dsp_slaves),
815 .masters = omap44xx_dsp_masters,
816 .masters_cnt = ARRAY_SIZE(omap44xx_dsp_masters),
817 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
818};
819
d63bd74f
BC
820/*
821 * 'dss' class
822 * display sub-system
823 */
824
825static struct omap_hwmod_class_sysconfig omap44xx_dss_sysc = {
826 .rev_offs = 0x0000,
827 .syss_offs = 0x0014,
828 .sysc_flags = SYSS_HAS_RESET_STATUS,
829};
830
831static struct omap_hwmod_class omap44xx_dss_hwmod_class = {
832 .name = "dss",
833 .sysc = &omap44xx_dss_sysc,
834};
835
836/* dss */
837/* dss master ports */
838static struct omap_hwmod_ocp_if *omap44xx_dss_masters[] = {
839 &omap44xx_dss__l3_main_1,
840};
841
842static struct omap_hwmod_addr_space omap44xx_dss_dma_addrs[] = {
843 {
844 .pa_start = 0x58000000,
845 .pa_end = 0x5800007f,
846 .flags = ADDR_TYPE_RT
847 },
848};
849
850/* l3_main_2 -> dss */
851static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss = {
852 .master = &omap44xx_l3_main_2_hwmod,
853 .slave = &omap44xx_dss_hwmod,
854 .clk = "l3_div_ck",
855 .addr = omap44xx_dss_dma_addrs,
856 .addr_cnt = ARRAY_SIZE(omap44xx_dss_dma_addrs),
857 .user = OCP_USER_SDMA,
858};
859
860static struct omap_hwmod_addr_space omap44xx_dss_addrs[] = {
861 {
862 .pa_start = 0x48040000,
863 .pa_end = 0x4804007f,
864 .flags = ADDR_TYPE_RT
865 },
866};
867
868/* l4_per -> dss */
869static struct omap_hwmod_ocp_if omap44xx_l4_per__dss = {
870 .master = &omap44xx_l4_per_hwmod,
871 .slave = &omap44xx_dss_hwmod,
872 .clk = "l4_div_ck",
873 .addr = omap44xx_dss_addrs,
874 .addr_cnt = ARRAY_SIZE(omap44xx_dss_addrs),
875 .user = OCP_USER_MPU,
876};
877
878/* dss slave ports */
879static struct omap_hwmod_ocp_if *omap44xx_dss_slaves[] = {
880 &omap44xx_l3_main_2__dss,
881 &omap44xx_l4_per__dss,
882};
883
884static struct omap_hwmod_opt_clk dss_opt_clks[] = {
885 { .role = "sys_clk", .clk = "dss_sys_clk" },
886 { .role = "tv_clk", .clk = "dss_tv_clk" },
887 { .role = "dss_clk", .clk = "dss_dss_clk" },
888 { .role = "video_clk", .clk = "dss_48mhz_clk" },
889};
890
891static struct omap_hwmod omap44xx_dss_hwmod = {
892 .name = "dss_core",
893 .class = &omap44xx_dss_hwmod_class,
894 .main_clk = "dss_fck",
895 .prcm = {
896 .omap4 = {
897 .clkctrl_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
898 },
899 },
900 .opt_clks = dss_opt_clks,
901 .opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
902 .slaves = omap44xx_dss_slaves,
903 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_slaves),
904 .masters = omap44xx_dss_masters,
905 .masters_cnt = ARRAY_SIZE(omap44xx_dss_masters),
906 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
907};
908
909/*
910 * 'dispc' class
911 * display controller
912 */
913
914static struct omap_hwmod_class_sysconfig omap44xx_dispc_sysc = {
915 .rev_offs = 0x0000,
916 .sysc_offs = 0x0010,
917 .syss_offs = 0x0014,
918 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
919 SYSC_HAS_ENAWAKEUP | SYSC_HAS_MIDLEMODE |
920 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
921 SYSS_HAS_RESET_STATUS),
922 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
923 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
924 .sysc_fields = &omap_hwmod_sysc_type1,
925};
926
927static struct omap_hwmod_class omap44xx_dispc_hwmod_class = {
928 .name = "dispc",
929 .sysc = &omap44xx_dispc_sysc,
930};
931
932/* dss_dispc */
933static struct omap_hwmod omap44xx_dss_dispc_hwmod;
934static struct omap_hwmod_irq_info omap44xx_dss_dispc_irqs[] = {
935 { .irq = 25 + OMAP44XX_IRQ_GIC_START },
936};
937
938static struct omap_hwmod_dma_info omap44xx_dss_dispc_sdma_reqs[] = {
939 { .dma_req = 5 + OMAP44XX_DMA_REQ_START },
940};
941
942static struct omap_hwmod_addr_space omap44xx_dss_dispc_dma_addrs[] = {
943 {
944 .pa_start = 0x58001000,
945 .pa_end = 0x58001fff,
946 .flags = ADDR_TYPE_RT
947 },
948};
949
950/* l3_main_2 -> dss_dispc */
951static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_dispc = {
952 .master = &omap44xx_l3_main_2_hwmod,
953 .slave = &omap44xx_dss_dispc_hwmod,
954 .clk = "l3_div_ck",
955 .addr = omap44xx_dss_dispc_dma_addrs,
956 .addr_cnt = ARRAY_SIZE(omap44xx_dss_dispc_dma_addrs),
957 .user = OCP_USER_SDMA,
958};
959
960static struct omap_hwmod_addr_space omap44xx_dss_dispc_addrs[] = {
961 {
962 .pa_start = 0x48041000,
963 .pa_end = 0x48041fff,
964 .flags = ADDR_TYPE_RT
965 },
966};
967
968/* l4_per -> dss_dispc */
969static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_dispc = {
970 .master = &omap44xx_l4_per_hwmod,
971 .slave = &omap44xx_dss_dispc_hwmod,
972 .clk = "l4_div_ck",
973 .addr = omap44xx_dss_dispc_addrs,
974 .addr_cnt = ARRAY_SIZE(omap44xx_dss_dispc_addrs),
975 .user = OCP_USER_MPU,
976};
977
978/* dss_dispc slave ports */
979static struct omap_hwmod_ocp_if *omap44xx_dss_dispc_slaves[] = {
980 &omap44xx_l3_main_2__dss_dispc,
981 &omap44xx_l4_per__dss_dispc,
982};
983
984static struct omap_hwmod omap44xx_dss_dispc_hwmod = {
985 .name = "dss_dispc",
986 .class = &omap44xx_dispc_hwmod_class,
987 .mpu_irqs = omap44xx_dss_dispc_irqs,
988 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_dss_dispc_irqs),
989 .sdma_reqs = omap44xx_dss_dispc_sdma_reqs,
990 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_dss_dispc_sdma_reqs),
991 .main_clk = "dss_fck",
992 .prcm = {
993 .omap4 = {
994 .clkctrl_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
995 },
996 },
997 .slaves = omap44xx_dss_dispc_slaves,
998 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_dispc_slaves),
999 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1000};
1001
1002/*
1003 * 'dsi' class
1004 * display serial interface controller
1005 */
1006
1007static struct omap_hwmod_class_sysconfig omap44xx_dsi_sysc = {
1008 .rev_offs = 0x0000,
1009 .sysc_offs = 0x0010,
1010 .syss_offs = 0x0014,
1011 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
1012 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
1013 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
1014 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1015 .sysc_fields = &omap_hwmod_sysc_type1,
1016};
1017
1018static struct omap_hwmod_class omap44xx_dsi_hwmod_class = {
1019 .name = "dsi",
1020 .sysc = &omap44xx_dsi_sysc,
1021};
1022
1023/* dss_dsi1 */
1024static struct omap_hwmod omap44xx_dss_dsi1_hwmod;
1025static struct omap_hwmod_irq_info omap44xx_dss_dsi1_irqs[] = {
1026 { .irq = 53 + OMAP44XX_IRQ_GIC_START },
1027};
1028
1029static struct omap_hwmod_dma_info omap44xx_dss_dsi1_sdma_reqs[] = {
1030 { .dma_req = 74 + OMAP44XX_DMA_REQ_START },
1031};
1032
1033static struct omap_hwmod_addr_space omap44xx_dss_dsi1_dma_addrs[] = {
1034 {
1035 .pa_start = 0x58004000,
1036 .pa_end = 0x580041ff,
1037 .flags = ADDR_TYPE_RT
1038 },
1039};
1040
1041/* l3_main_2 -> dss_dsi1 */
1042static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_dsi1 = {
1043 .master = &omap44xx_l3_main_2_hwmod,
1044 .slave = &omap44xx_dss_dsi1_hwmod,
1045 .clk = "l3_div_ck",
1046 .addr = omap44xx_dss_dsi1_dma_addrs,
1047 .addr_cnt = ARRAY_SIZE(omap44xx_dss_dsi1_dma_addrs),
1048 .user = OCP_USER_SDMA,
1049};
1050
1051static struct omap_hwmod_addr_space omap44xx_dss_dsi1_addrs[] = {
1052 {
1053 .pa_start = 0x48044000,
1054 .pa_end = 0x480441ff,
1055 .flags = ADDR_TYPE_RT
1056 },
1057};
1058
1059/* l4_per -> dss_dsi1 */
1060static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_dsi1 = {
1061 .master = &omap44xx_l4_per_hwmod,
1062 .slave = &omap44xx_dss_dsi1_hwmod,
1063 .clk = "l4_div_ck",
1064 .addr = omap44xx_dss_dsi1_addrs,
1065 .addr_cnt = ARRAY_SIZE(omap44xx_dss_dsi1_addrs),
1066 .user = OCP_USER_MPU,
1067};
1068
1069/* dss_dsi1 slave ports */
1070static struct omap_hwmod_ocp_if *omap44xx_dss_dsi1_slaves[] = {
1071 &omap44xx_l3_main_2__dss_dsi1,
1072 &omap44xx_l4_per__dss_dsi1,
1073};
1074
1075static struct omap_hwmod omap44xx_dss_dsi1_hwmod = {
1076 .name = "dss_dsi1",
1077 .class = &omap44xx_dsi_hwmod_class,
1078 .mpu_irqs = omap44xx_dss_dsi1_irqs,
1079 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_dss_dsi1_irqs),
1080 .sdma_reqs = omap44xx_dss_dsi1_sdma_reqs,
1081 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_dss_dsi1_sdma_reqs),
1082 .main_clk = "dss_fck",
1083 .prcm = {
1084 .omap4 = {
1085 .clkctrl_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
1086 },
1087 },
1088 .slaves = omap44xx_dss_dsi1_slaves,
1089 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_dsi1_slaves),
1090 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1091};
1092
1093/* dss_dsi2 */
1094static struct omap_hwmod omap44xx_dss_dsi2_hwmod;
1095static struct omap_hwmod_irq_info omap44xx_dss_dsi2_irqs[] = {
1096 { .irq = 84 + OMAP44XX_IRQ_GIC_START },
1097};
1098
1099static struct omap_hwmod_dma_info omap44xx_dss_dsi2_sdma_reqs[] = {
1100 { .dma_req = 83 + OMAP44XX_DMA_REQ_START },
1101};
1102
1103static struct omap_hwmod_addr_space omap44xx_dss_dsi2_dma_addrs[] = {
1104 {
1105 .pa_start = 0x58005000,
1106 .pa_end = 0x580051ff,
1107 .flags = ADDR_TYPE_RT
1108 },
1109};
1110
1111/* l3_main_2 -> dss_dsi2 */
1112static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_dsi2 = {
1113 .master = &omap44xx_l3_main_2_hwmod,
1114 .slave = &omap44xx_dss_dsi2_hwmod,
1115 .clk = "l3_div_ck",
1116 .addr = omap44xx_dss_dsi2_dma_addrs,
1117 .addr_cnt = ARRAY_SIZE(omap44xx_dss_dsi2_dma_addrs),
1118 .user = OCP_USER_SDMA,
1119};
1120
1121static struct omap_hwmod_addr_space omap44xx_dss_dsi2_addrs[] = {
1122 {
1123 .pa_start = 0x48045000,
1124 .pa_end = 0x480451ff,
1125 .flags = ADDR_TYPE_RT
1126 },
1127};
1128
1129/* l4_per -> dss_dsi2 */
1130static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_dsi2 = {
1131 .master = &omap44xx_l4_per_hwmod,
1132 .slave = &omap44xx_dss_dsi2_hwmod,
1133 .clk = "l4_div_ck",
1134 .addr = omap44xx_dss_dsi2_addrs,
1135 .addr_cnt = ARRAY_SIZE(omap44xx_dss_dsi2_addrs),
1136 .user = OCP_USER_MPU,
1137};
1138
1139/* dss_dsi2 slave ports */
1140static struct omap_hwmod_ocp_if *omap44xx_dss_dsi2_slaves[] = {
1141 &omap44xx_l3_main_2__dss_dsi2,
1142 &omap44xx_l4_per__dss_dsi2,
1143};
1144
1145static struct omap_hwmod omap44xx_dss_dsi2_hwmod = {
1146 .name = "dss_dsi2",
1147 .class = &omap44xx_dsi_hwmod_class,
1148 .mpu_irqs = omap44xx_dss_dsi2_irqs,
1149 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_dss_dsi2_irqs),
1150 .sdma_reqs = omap44xx_dss_dsi2_sdma_reqs,
1151 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_dss_dsi2_sdma_reqs),
1152 .main_clk = "dss_fck",
1153 .prcm = {
1154 .omap4 = {
1155 .clkctrl_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
1156 },
1157 },
1158 .slaves = omap44xx_dss_dsi2_slaves,
1159 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_dsi2_slaves),
1160 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1161};
1162
1163/*
1164 * 'hdmi' class
1165 * hdmi controller
1166 */
1167
1168static struct omap_hwmod_class_sysconfig omap44xx_hdmi_sysc = {
1169 .rev_offs = 0x0000,
1170 .sysc_offs = 0x0010,
1171 .sysc_flags = (SYSC_HAS_RESET_STATUS | SYSC_HAS_SIDLEMODE |
1172 SYSC_HAS_SOFTRESET),
1173 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1174 SIDLE_SMART_WKUP),
1175 .sysc_fields = &omap_hwmod_sysc_type2,
1176};
1177
1178static struct omap_hwmod_class omap44xx_hdmi_hwmod_class = {
1179 .name = "hdmi",
1180 .sysc = &omap44xx_hdmi_sysc,
1181};
1182
1183/* dss_hdmi */
1184static struct omap_hwmod omap44xx_dss_hdmi_hwmod;
1185static struct omap_hwmod_irq_info omap44xx_dss_hdmi_irqs[] = {
1186 { .irq = 101 + OMAP44XX_IRQ_GIC_START },
1187};
1188
1189static struct omap_hwmod_dma_info omap44xx_dss_hdmi_sdma_reqs[] = {
1190 { .dma_req = 75 + OMAP44XX_DMA_REQ_START },
1191};
1192
1193static struct omap_hwmod_addr_space omap44xx_dss_hdmi_dma_addrs[] = {
1194 {
1195 .pa_start = 0x58006000,
1196 .pa_end = 0x58006fff,
1197 .flags = ADDR_TYPE_RT
1198 },
1199};
1200
1201/* l3_main_2 -> dss_hdmi */
1202static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_hdmi = {
1203 .master = &omap44xx_l3_main_2_hwmod,
1204 .slave = &omap44xx_dss_hdmi_hwmod,
1205 .clk = "l3_div_ck",
1206 .addr = omap44xx_dss_hdmi_dma_addrs,
1207 .addr_cnt = ARRAY_SIZE(omap44xx_dss_hdmi_dma_addrs),
1208 .user = OCP_USER_SDMA,
1209};
1210
1211static struct omap_hwmod_addr_space omap44xx_dss_hdmi_addrs[] = {
1212 {
1213 .pa_start = 0x48046000,
1214 .pa_end = 0x48046fff,
1215 .flags = ADDR_TYPE_RT
1216 },
1217};
1218
1219/* l4_per -> dss_hdmi */
1220static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_hdmi = {
1221 .master = &omap44xx_l4_per_hwmod,
1222 .slave = &omap44xx_dss_hdmi_hwmod,
1223 .clk = "l4_div_ck",
1224 .addr = omap44xx_dss_hdmi_addrs,
1225 .addr_cnt = ARRAY_SIZE(omap44xx_dss_hdmi_addrs),
1226 .user = OCP_USER_MPU,
1227};
1228
1229/* dss_hdmi slave ports */
1230static struct omap_hwmod_ocp_if *omap44xx_dss_hdmi_slaves[] = {
1231 &omap44xx_l3_main_2__dss_hdmi,
1232 &omap44xx_l4_per__dss_hdmi,
1233};
1234
1235static struct omap_hwmod omap44xx_dss_hdmi_hwmod = {
1236 .name = "dss_hdmi",
1237 .class = &omap44xx_hdmi_hwmod_class,
1238 .mpu_irqs = omap44xx_dss_hdmi_irqs,
1239 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_dss_hdmi_irqs),
1240 .sdma_reqs = omap44xx_dss_hdmi_sdma_reqs,
1241 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_dss_hdmi_sdma_reqs),
1242 .main_clk = "dss_fck",
1243 .prcm = {
1244 .omap4 = {
1245 .clkctrl_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
1246 },
1247 },
1248 .slaves = omap44xx_dss_hdmi_slaves,
1249 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_hdmi_slaves),
1250 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1251};
1252
1253/*
1254 * 'rfbi' class
1255 * remote frame buffer interface
1256 */
1257
1258static struct omap_hwmod_class_sysconfig omap44xx_rfbi_sysc = {
1259 .rev_offs = 0x0000,
1260 .sysc_offs = 0x0010,
1261 .syss_offs = 0x0014,
1262 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_SIDLEMODE |
1263 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
1264 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1265 .sysc_fields = &omap_hwmod_sysc_type1,
1266};
1267
1268static struct omap_hwmod_class omap44xx_rfbi_hwmod_class = {
1269 .name = "rfbi",
1270 .sysc = &omap44xx_rfbi_sysc,
1271};
1272
1273/* dss_rfbi */
1274static struct omap_hwmod omap44xx_dss_rfbi_hwmod;
1275static struct omap_hwmod_dma_info omap44xx_dss_rfbi_sdma_reqs[] = {
1276 { .dma_req = 13 + OMAP44XX_DMA_REQ_START },
1277};
1278
1279static struct omap_hwmod_addr_space omap44xx_dss_rfbi_dma_addrs[] = {
1280 {
1281 .pa_start = 0x58002000,
1282 .pa_end = 0x580020ff,
1283 .flags = ADDR_TYPE_RT
1284 },
1285};
1286
1287/* l3_main_2 -> dss_rfbi */
1288static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_rfbi = {
1289 .master = &omap44xx_l3_main_2_hwmod,
1290 .slave = &omap44xx_dss_rfbi_hwmod,
1291 .clk = "l3_div_ck",
1292 .addr = omap44xx_dss_rfbi_dma_addrs,
1293 .addr_cnt = ARRAY_SIZE(omap44xx_dss_rfbi_dma_addrs),
1294 .user = OCP_USER_SDMA,
1295};
1296
1297static struct omap_hwmod_addr_space omap44xx_dss_rfbi_addrs[] = {
1298 {
1299 .pa_start = 0x48042000,
1300 .pa_end = 0x480420ff,
1301 .flags = ADDR_TYPE_RT
1302 },
1303};
1304
1305/* l4_per -> dss_rfbi */
1306static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_rfbi = {
1307 .master = &omap44xx_l4_per_hwmod,
1308 .slave = &omap44xx_dss_rfbi_hwmod,
1309 .clk = "l4_div_ck",
1310 .addr = omap44xx_dss_rfbi_addrs,
1311 .addr_cnt = ARRAY_SIZE(omap44xx_dss_rfbi_addrs),
1312 .user = OCP_USER_MPU,
1313};
1314
1315/* dss_rfbi slave ports */
1316static struct omap_hwmod_ocp_if *omap44xx_dss_rfbi_slaves[] = {
1317 &omap44xx_l3_main_2__dss_rfbi,
1318 &omap44xx_l4_per__dss_rfbi,
1319};
1320
1321static struct omap_hwmod omap44xx_dss_rfbi_hwmod = {
1322 .name = "dss_rfbi",
1323 .class = &omap44xx_rfbi_hwmod_class,
1324 .sdma_reqs = omap44xx_dss_rfbi_sdma_reqs,
1325 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_dss_rfbi_sdma_reqs),
1326 .main_clk = "dss_fck",
1327 .prcm = {
1328 .omap4 = {
1329 .clkctrl_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
1330 },
1331 },
1332 .slaves = omap44xx_dss_rfbi_slaves,
1333 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_rfbi_slaves),
1334 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1335};
1336
1337/*
1338 * 'venc' class
1339 * video encoder
1340 */
1341
1342static struct omap_hwmod_class omap44xx_venc_hwmod_class = {
1343 .name = "venc",
1344};
1345
1346/* dss_venc */
1347static struct omap_hwmod omap44xx_dss_venc_hwmod;
1348static struct omap_hwmod_addr_space omap44xx_dss_venc_dma_addrs[] = {
1349 {
1350 .pa_start = 0x58003000,
1351 .pa_end = 0x580030ff,
1352 .flags = ADDR_TYPE_RT
1353 },
1354};
1355
1356/* l3_main_2 -> dss_venc */
1357static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_venc = {
1358 .master = &omap44xx_l3_main_2_hwmod,
1359 .slave = &omap44xx_dss_venc_hwmod,
1360 .clk = "l3_div_ck",
1361 .addr = omap44xx_dss_venc_dma_addrs,
1362 .addr_cnt = ARRAY_SIZE(omap44xx_dss_venc_dma_addrs),
1363 .user = OCP_USER_SDMA,
1364};
1365
1366static struct omap_hwmod_addr_space omap44xx_dss_venc_addrs[] = {
1367 {
1368 .pa_start = 0x48043000,
1369 .pa_end = 0x480430ff,
1370 .flags = ADDR_TYPE_RT
1371 },
1372};
1373
1374/* l4_per -> dss_venc */
1375static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_venc = {
1376 .master = &omap44xx_l4_per_hwmod,
1377 .slave = &omap44xx_dss_venc_hwmod,
1378 .clk = "l4_div_ck",
1379 .addr = omap44xx_dss_venc_addrs,
1380 .addr_cnt = ARRAY_SIZE(omap44xx_dss_venc_addrs),
1381 .user = OCP_USER_MPU,
1382};
1383
1384/* dss_venc slave ports */
1385static struct omap_hwmod_ocp_if *omap44xx_dss_venc_slaves[] = {
1386 &omap44xx_l3_main_2__dss_venc,
1387 &omap44xx_l4_per__dss_venc,
1388};
1389
1390static struct omap_hwmod omap44xx_dss_venc_hwmod = {
1391 .name = "dss_venc",
1392 .class = &omap44xx_venc_hwmod_class,
1393 .main_clk = "dss_fck",
1394 .prcm = {
1395 .omap4 = {
1396 .clkctrl_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
1397 },
1398 },
1399 .slaves = omap44xx_dss_venc_slaves,
1400 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_venc_slaves),
1401 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1402};
1403
3b54baad
BC
1404/*
1405 * 'gpio' class
1406 * general purpose io module
1407 */
1408
1409static struct omap_hwmod_class_sysconfig omap44xx_gpio_sysc = {
1410 .rev_offs = 0x0000,
f776471f 1411 .sysc_offs = 0x0010,
3b54baad 1412 .syss_offs = 0x0114,
0cfe8751
BC
1413 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_ENAWAKEUP |
1414 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
1415 SYSS_HAS_RESET_STATUS),
7cffa6b8
BC
1416 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1417 SIDLE_SMART_WKUP),
f776471f
BC
1418 .sysc_fields = &omap_hwmod_sysc_type1,
1419};
1420
3b54baad 1421static struct omap_hwmod_class omap44xx_gpio_hwmod_class = {
fe13471c
BC
1422 .name = "gpio",
1423 .sysc = &omap44xx_gpio_sysc,
1424 .rev = 2,
f776471f
BC
1425};
1426
3b54baad
BC
1427/* gpio dev_attr */
1428static struct omap_gpio_dev_attr gpio_dev_attr = {
fe13471c
BC
1429 .bank_width = 32,
1430 .dbck_flag = true,
f776471f
BC
1431};
1432
3b54baad
BC
1433/* gpio1 */
1434static struct omap_hwmod omap44xx_gpio1_hwmod;
1435static struct omap_hwmod_irq_info omap44xx_gpio1_irqs[] = {
1436 { .irq = 29 + OMAP44XX_IRQ_GIC_START },
f776471f
BC
1437};
1438
3b54baad 1439static struct omap_hwmod_addr_space omap44xx_gpio1_addrs[] = {
f776471f 1440 {
3b54baad
BC
1441 .pa_start = 0x4a310000,
1442 .pa_end = 0x4a3101ff,
f776471f
BC
1443 .flags = ADDR_TYPE_RT
1444 },
1445};
1446
3b54baad
BC
1447/* l4_wkup -> gpio1 */
1448static struct omap_hwmod_ocp_if omap44xx_l4_wkup__gpio1 = {
1449 .master = &omap44xx_l4_wkup_hwmod,
1450 .slave = &omap44xx_gpio1_hwmod,
b399bca8 1451 .clk = "l4_wkup_clk_mux_ck",
3b54baad
BC
1452 .addr = omap44xx_gpio1_addrs,
1453 .addr_cnt = ARRAY_SIZE(omap44xx_gpio1_addrs),
f776471f
BC
1454 .user = OCP_USER_MPU | OCP_USER_SDMA,
1455};
1456
3b54baad
BC
1457/* gpio1 slave ports */
1458static struct omap_hwmod_ocp_if *omap44xx_gpio1_slaves[] = {
1459 &omap44xx_l4_wkup__gpio1,
f776471f
BC
1460};
1461
3b54baad 1462static struct omap_hwmod_opt_clk gpio1_opt_clks[] = {
b399bca8 1463 { .role = "dbclk", .clk = "gpio1_dbclk" },
3b54baad
BC
1464};
1465
1466static struct omap_hwmod omap44xx_gpio1_hwmod = {
1467 .name = "gpio1",
1468 .class = &omap44xx_gpio_hwmod_class,
1469 .mpu_irqs = omap44xx_gpio1_irqs,
1470 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_gpio1_irqs),
1471 .main_clk = "gpio1_ick",
f776471f
BC
1472 .prcm = {
1473 .omap4 = {
3b54baad 1474 .clkctrl_reg = OMAP4430_CM_WKUP_GPIO1_CLKCTRL,
f776471f
BC
1475 },
1476 },
3b54baad
BC
1477 .opt_clks = gpio1_opt_clks,
1478 .opt_clks_cnt = ARRAY_SIZE(gpio1_opt_clks),
1479 .dev_attr = &gpio_dev_attr,
1480 .slaves = omap44xx_gpio1_slaves,
1481 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio1_slaves),
f776471f
BC
1482 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1483};
1484
3b54baad
BC
1485/* gpio2 */
1486static struct omap_hwmod omap44xx_gpio2_hwmod;
1487static struct omap_hwmod_irq_info omap44xx_gpio2_irqs[] = {
1488 { .irq = 30 + OMAP44XX_IRQ_GIC_START },
f776471f
BC
1489};
1490
3b54baad 1491static struct omap_hwmod_addr_space omap44xx_gpio2_addrs[] = {
f776471f 1492 {
3b54baad
BC
1493 .pa_start = 0x48055000,
1494 .pa_end = 0x480551ff,
f776471f
BC
1495 .flags = ADDR_TYPE_RT
1496 },
1497};
1498
3b54baad
BC
1499/* l4_per -> gpio2 */
1500static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio2 = {
f776471f 1501 .master = &omap44xx_l4_per_hwmod,
3b54baad 1502 .slave = &omap44xx_gpio2_hwmod,
b399bca8 1503 .clk = "l4_div_ck",
3b54baad
BC
1504 .addr = omap44xx_gpio2_addrs,
1505 .addr_cnt = ARRAY_SIZE(omap44xx_gpio2_addrs),
f776471f
BC
1506 .user = OCP_USER_MPU | OCP_USER_SDMA,
1507};
1508
3b54baad
BC
1509/* gpio2 slave ports */
1510static struct omap_hwmod_ocp_if *omap44xx_gpio2_slaves[] = {
1511 &omap44xx_l4_per__gpio2,
f776471f
BC
1512};
1513
3b54baad 1514static struct omap_hwmod_opt_clk gpio2_opt_clks[] = {
b399bca8 1515 { .role = "dbclk", .clk = "gpio2_dbclk" },
3b54baad
BC
1516};
1517
1518static struct omap_hwmod omap44xx_gpio2_hwmod = {
1519 .name = "gpio2",
1520 .class = &omap44xx_gpio_hwmod_class,
b399bca8 1521 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
3b54baad
BC
1522 .mpu_irqs = omap44xx_gpio2_irqs,
1523 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_gpio2_irqs),
1524 .main_clk = "gpio2_ick",
f776471f
BC
1525 .prcm = {
1526 .omap4 = {
3b54baad 1527 .clkctrl_reg = OMAP4430_CM_L4PER_GPIO2_CLKCTRL,
f776471f
BC
1528 },
1529 },
3b54baad
BC
1530 .opt_clks = gpio2_opt_clks,
1531 .opt_clks_cnt = ARRAY_SIZE(gpio2_opt_clks),
1532 .dev_attr = &gpio_dev_attr,
1533 .slaves = omap44xx_gpio2_slaves,
1534 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio2_slaves),
f776471f
BC
1535 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1536};
1537
3b54baad
BC
1538/* gpio3 */
1539static struct omap_hwmod omap44xx_gpio3_hwmod;
1540static struct omap_hwmod_irq_info omap44xx_gpio3_irqs[] = {
1541 { .irq = 31 + OMAP44XX_IRQ_GIC_START },
f776471f
BC
1542};
1543
3b54baad 1544static struct omap_hwmod_addr_space omap44xx_gpio3_addrs[] = {
f776471f 1545 {
3b54baad
BC
1546 .pa_start = 0x48057000,
1547 .pa_end = 0x480571ff,
f776471f
BC
1548 .flags = ADDR_TYPE_RT
1549 },
1550};
1551
3b54baad
BC
1552/* l4_per -> gpio3 */
1553static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio3 = {
f776471f 1554 .master = &omap44xx_l4_per_hwmod,
3b54baad 1555 .slave = &omap44xx_gpio3_hwmod,
b399bca8 1556 .clk = "l4_div_ck",
3b54baad
BC
1557 .addr = omap44xx_gpio3_addrs,
1558 .addr_cnt = ARRAY_SIZE(omap44xx_gpio3_addrs),
f776471f
BC
1559 .user = OCP_USER_MPU | OCP_USER_SDMA,
1560};
1561
3b54baad
BC
1562/* gpio3 slave ports */
1563static struct omap_hwmod_ocp_if *omap44xx_gpio3_slaves[] = {
1564 &omap44xx_l4_per__gpio3,
f776471f
BC
1565};
1566
3b54baad 1567static struct omap_hwmod_opt_clk gpio3_opt_clks[] = {
b399bca8 1568 { .role = "dbclk", .clk = "gpio3_dbclk" },
3b54baad
BC
1569};
1570
1571static struct omap_hwmod omap44xx_gpio3_hwmod = {
1572 .name = "gpio3",
1573 .class = &omap44xx_gpio_hwmod_class,
b399bca8 1574 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
3b54baad
BC
1575 .mpu_irqs = omap44xx_gpio3_irqs,
1576 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_gpio3_irqs),
1577 .main_clk = "gpio3_ick",
f776471f
BC
1578 .prcm = {
1579 .omap4 = {
3b54baad 1580 .clkctrl_reg = OMAP4430_CM_L4PER_GPIO3_CLKCTRL,
f776471f
BC
1581 },
1582 },
3b54baad
BC
1583 .opt_clks = gpio3_opt_clks,
1584 .opt_clks_cnt = ARRAY_SIZE(gpio3_opt_clks),
1585 .dev_attr = &gpio_dev_attr,
1586 .slaves = omap44xx_gpio3_slaves,
1587 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio3_slaves),
f776471f
BC
1588 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1589};
1590
3b54baad
BC
1591/* gpio4 */
1592static struct omap_hwmod omap44xx_gpio4_hwmod;
1593static struct omap_hwmod_irq_info omap44xx_gpio4_irqs[] = {
1594 { .irq = 32 + OMAP44XX_IRQ_GIC_START },
f776471f
BC
1595};
1596
3b54baad 1597static struct omap_hwmod_addr_space omap44xx_gpio4_addrs[] = {
f776471f 1598 {
3b54baad
BC
1599 .pa_start = 0x48059000,
1600 .pa_end = 0x480591ff,
f776471f
BC
1601 .flags = ADDR_TYPE_RT
1602 },
1603};
1604
3b54baad
BC
1605/* l4_per -> gpio4 */
1606static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio4 = {
f776471f 1607 .master = &omap44xx_l4_per_hwmod,
3b54baad 1608 .slave = &omap44xx_gpio4_hwmod,
b399bca8 1609 .clk = "l4_div_ck",
3b54baad
BC
1610 .addr = omap44xx_gpio4_addrs,
1611 .addr_cnt = ARRAY_SIZE(omap44xx_gpio4_addrs),
f776471f
BC
1612 .user = OCP_USER_MPU | OCP_USER_SDMA,
1613};
1614
3b54baad
BC
1615/* gpio4 slave ports */
1616static struct omap_hwmod_ocp_if *omap44xx_gpio4_slaves[] = {
1617 &omap44xx_l4_per__gpio4,
f776471f
BC
1618};
1619
3b54baad 1620static struct omap_hwmod_opt_clk gpio4_opt_clks[] = {
b399bca8 1621 { .role = "dbclk", .clk = "gpio4_dbclk" },
3b54baad
BC
1622};
1623
1624static struct omap_hwmod omap44xx_gpio4_hwmod = {
1625 .name = "gpio4",
1626 .class = &omap44xx_gpio_hwmod_class,
b399bca8 1627 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
3b54baad
BC
1628 .mpu_irqs = omap44xx_gpio4_irqs,
1629 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_gpio4_irqs),
1630 .main_clk = "gpio4_ick",
f776471f
BC
1631 .prcm = {
1632 .omap4 = {
3b54baad 1633 .clkctrl_reg = OMAP4430_CM_L4PER_GPIO4_CLKCTRL,
f776471f
BC
1634 },
1635 },
3b54baad
BC
1636 .opt_clks = gpio4_opt_clks,
1637 .opt_clks_cnt = ARRAY_SIZE(gpio4_opt_clks),
1638 .dev_attr = &gpio_dev_attr,
1639 .slaves = omap44xx_gpio4_slaves,
1640 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio4_slaves),
f776471f
BC
1641 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1642};
1643
3b54baad
BC
1644/* gpio5 */
1645static struct omap_hwmod omap44xx_gpio5_hwmod;
1646static struct omap_hwmod_irq_info omap44xx_gpio5_irqs[] = {
1647 { .irq = 33 + OMAP44XX_IRQ_GIC_START },
55d2cb08
BC
1648};
1649
3b54baad
BC
1650static struct omap_hwmod_addr_space omap44xx_gpio5_addrs[] = {
1651 {
1652 .pa_start = 0x4805b000,
1653 .pa_end = 0x4805b1ff,
1654 .flags = ADDR_TYPE_RT
1655 },
55d2cb08
BC
1656};
1657
3b54baad
BC
1658/* l4_per -> gpio5 */
1659static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio5 = {
1660 .master = &omap44xx_l4_per_hwmod,
1661 .slave = &omap44xx_gpio5_hwmod,
b399bca8 1662 .clk = "l4_div_ck",
3b54baad
BC
1663 .addr = omap44xx_gpio5_addrs,
1664 .addr_cnt = ARRAY_SIZE(omap44xx_gpio5_addrs),
1665 .user = OCP_USER_MPU | OCP_USER_SDMA,
55d2cb08
BC
1666};
1667
3b54baad
BC
1668/* gpio5 slave ports */
1669static struct omap_hwmod_ocp_if *omap44xx_gpio5_slaves[] = {
1670 &omap44xx_l4_per__gpio5,
55d2cb08
BC
1671};
1672
3b54baad 1673static struct omap_hwmod_opt_clk gpio5_opt_clks[] = {
b399bca8 1674 { .role = "dbclk", .clk = "gpio5_dbclk" },
55d2cb08
BC
1675};
1676
3b54baad
BC
1677static struct omap_hwmod omap44xx_gpio5_hwmod = {
1678 .name = "gpio5",
1679 .class = &omap44xx_gpio_hwmod_class,
b399bca8 1680 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
3b54baad
BC
1681 .mpu_irqs = omap44xx_gpio5_irqs,
1682 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_gpio5_irqs),
1683 .main_clk = "gpio5_ick",
55d2cb08
BC
1684 .prcm = {
1685 .omap4 = {
3b54baad 1686 .clkctrl_reg = OMAP4430_CM_L4PER_GPIO5_CLKCTRL,
55d2cb08
BC
1687 },
1688 },
3b54baad
BC
1689 .opt_clks = gpio5_opt_clks,
1690 .opt_clks_cnt = ARRAY_SIZE(gpio5_opt_clks),
1691 .dev_attr = &gpio_dev_attr,
1692 .slaves = omap44xx_gpio5_slaves,
1693 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio5_slaves),
55d2cb08
BC
1694 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1695};
1696
3b54baad
BC
1697/* gpio6 */
1698static struct omap_hwmod omap44xx_gpio6_hwmod;
1699static struct omap_hwmod_irq_info omap44xx_gpio6_irqs[] = {
1700 { .irq = 34 + OMAP44XX_IRQ_GIC_START },
92b18d1c
BC
1701};
1702
3b54baad 1703static struct omap_hwmod_addr_space omap44xx_gpio6_addrs[] = {
92b18d1c 1704 {
3b54baad
BC
1705 .pa_start = 0x4805d000,
1706 .pa_end = 0x4805d1ff,
92b18d1c
BC
1707 .flags = ADDR_TYPE_RT
1708 },
1709};
1710
3b54baad
BC
1711/* l4_per -> gpio6 */
1712static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio6 = {
1713 .master = &omap44xx_l4_per_hwmod,
1714 .slave = &omap44xx_gpio6_hwmod,
b399bca8 1715 .clk = "l4_div_ck",
3b54baad
BC
1716 .addr = omap44xx_gpio6_addrs,
1717 .addr_cnt = ARRAY_SIZE(omap44xx_gpio6_addrs),
1718 .user = OCP_USER_MPU | OCP_USER_SDMA,
db12ba53
BC
1719};
1720
3b54baad
BC
1721/* gpio6 slave ports */
1722static struct omap_hwmod_ocp_if *omap44xx_gpio6_slaves[] = {
1723 &omap44xx_l4_per__gpio6,
db12ba53
BC
1724};
1725
3b54baad 1726static struct omap_hwmod_opt_clk gpio6_opt_clks[] = {
b399bca8 1727 { .role = "dbclk", .clk = "gpio6_dbclk" },
db12ba53
BC
1728};
1729
3b54baad
BC
1730static struct omap_hwmod omap44xx_gpio6_hwmod = {
1731 .name = "gpio6",
1732 .class = &omap44xx_gpio_hwmod_class,
b399bca8 1733 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
3b54baad
BC
1734 .mpu_irqs = omap44xx_gpio6_irqs,
1735 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_gpio6_irqs),
1736 .main_clk = "gpio6_ick",
1737 .prcm = {
1738 .omap4 = {
1739 .clkctrl_reg = OMAP4430_CM_L4PER_GPIO6_CLKCTRL,
1740 },
db12ba53 1741 },
3b54baad
BC
1742 .opt_clks = gpio6_opt_clks,
1743 .opt_clks_cnt = ARRAY_SIZE(gpio6_opt_clks),
1744 .dev_attr = &gpio_dev_attr,
1745 .slaves = omap44xx_gpio6_slaves,
1746 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio6_slaves),
1747 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
db12ba53
BC
1748};
1749
3b54baad
BC
1750/*
1751 * 'i2c' class
1752 * multimaster high-speed i2c controller
1753 */
db12ba53 1754
3b54baad
BC
1755static struct omap_hwmod_class_sysconfig omap44xx_i2c_sysc = {
1756 .sysc_offs = 0x0010,
1757 .syss_offs = 0x0090,
1758 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
1759 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
0cfe8751 1760 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
7cffa6b8
BC
1761 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1762 SIDLE_SMART_WKUP),
3b54baad 1763 .sysc_fields = &omap_hwmod_sysc_type1,
db12ba53
BC
1764};
1765
3b54baad 1766static struct omap_hwmod_class omap44xx_i2c_hwmod_class = {
fe13471c
BC
1767 .name = "i2c",
1768 .sysc = &omap44xx_i2c_sysc,
db12ba53
BC
1769};
1770
3b54baad
BC
1771/* i2c1 */
1772static struct omap_hwmod omap44xx_i2c1_hwmod;
1773static struct omap_hwmod_irq_info omap44xx_i2c1_irqs[] = {
1774 { .irq = 56 + OMAP44XX_IRQ_GIC_START },
db12ba53
BC
1775};
1776
3b54baad
BC
1777static struct omap_hwmod_dma_info omap44xx_i2c1_sdma_reqs[] = {
1778 { .name = "tx", .dma_req = 26 + OMAP44XX_DMA_REQ_START },
1779 { .name = "rx", .dma_req = 27 + OMAP44XX_DMA_REQ_START },
db12ba53
BC
1780};
1781
3b54baad 1782static struct omap_hwmod_addr_space omap44xx_i2c1_addrs[] = {
db12ba53 1783 {
3b54baad
BC
1784 .pa_start = 0x48070000,
1785 .pa_end = 0x480700ff,
db12ba53
BC
1786 .flags = ADDR_TYPE_RT
1787 },
1788};
1789
3b54baad
BC
1790/* l4_per -> i2c1 */
1791static struct omap_hwmod_ocp_if omap44xx_l4_per__i2c1 = {
1792 .master = &omap44xx_l4_per_hwmod,
1793 .slave = &omap44xx_i2c1_hwmod,
1794 .clk = "l4_div_ck",
1795 .addr = omap44xx_i2c1_addrs,
1796 .addr_cnt = ARRAY_SIZE(omap44xx_i2c1_addrs),
92b18d1c
BC
1797 .user = OCP_USER_MPU | OCP_USER_SDMA,
1798};
1799
3b54baad
BC
1800/* i2c1 slave ports */
1801static struct omap_hwmod_ocp_if *omap44xx_i2c1_slaves[] = {
1802 &omap44xx_l4_per__i2c1,
92b18d1c
BC
1803};
1804
3b54baad
BC
1805static struct omap_hwmod omap44xx_i2c1_hwmod = {
1806 .name = "i2c1",
1807 .class = &omap44xx_i2c_hwmod_class,
1808 .flags = HWMOD_INIT_NO_RESET,
1809 .mpu_irqs = omap44xx_i2c1_irqs,
1810 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_i2c1_irqs),
1811 .sdma_reqs = omap44xx_i2c1_sdma_reqs,
1812 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_i2c1_sdma_reqs),
1813 .main_clk = "i2c1_fck",
92b18d1c
BC
1814 .prcm = {
1815 .omap4 = {
3b54baad 1816 .clkctrl_reg = OMAP4430_CM_L4PER_I2C1_CLKCTRL,
92b18d1c
BC
1817 },
1818 },
3b54baad
BC
1819 .slaves = omap44xx_i2c1_slaves,
1820 .slaves_cnt = ARRAY_SIZE(omap44xx_i2c1_slaves),
92b18d1c
BC
1821 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1822};
1823
3b54baad
BC
1824/* i2c2 */
1825static struct omap_hwmod omap44xx_i2c2_hwmod;
1826static struct omap_hwmod_irq_info omap44xx_i2c2_irqs[] = {
1827 { .irq = 57 + OMAP44XX_IRQ_GIC_START },
92b18d1c
BC
1828};
1829
3b54baad
BC
1830static struct omap_hwmod_dma_info omap44xx_i2c2_sdma_reqs[] = {
1831 { .name = "tx", .dma_req = 28 + OMAP44XX_DMA_REQ_START },
1832 { .name = "rx", .dma_req = 29 + OMAP44XX_DMA_REQ_START },
1833};
1834
1835static struct omap_hwmod_addr_space omap44xx_i2c2_addrs[] = {
92b18d1c 1836 {
3b54baad
BC
1837 .pa_start = 0x48072000,
1838 .pa_end = 0x480720ff,
92b18d1c
BC
1839 .flags = ADDR_TYPE_RT
1840 },
1841};
1842
3b54baad
BC
1843/* l4_per -> i2c2 */
1844static struct omap_hwmod_ocp_if omap44xx_l4_per__i2c2 = {
db12ba53 1845 .master = &omap44xx_l4_per_hwmod,
3b54baad 1846 .slave = &omap44xx_i2c2_hwmod,
db12ba53 1847 .clk = "l4_div_ck",
3b54baad
BC
1848 .addr = omap44xx_i2c2_addrs,
1849 .addr_cnt = ARRAY_SIZE(omap44xx_i2c2_addrs),
db12ba53
BC
1850 .user = OCP_USER_MPU | OCP_USER_SDMA,
1851};
1852
3b54baad
BC
1853/* i2c2 slave ports */
1854static struct omap_hwmod_ocp_if *omap44xx_i2c2_slaves[] = {
1855 &omap44xx_l4_per__i2c2,
db12ba53
BC
1856};
1857
3b54baad
BC
1858static struct omap_hwmod omap44xx_i2c2_hwmod = {
1859 .name = "i2c2",
1860 .class = &omap44xx_i2c_hwmod_class,
1861 .flags = HWMOD_INIT_NO_RESET,
1862 .mpu_irqs = omap44xx_i2c2_irqs,
1863 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_i2c2_irqs),
1864 .sdma_reqs = omap44xx_i2c2_sdma_reqs,
1865 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_i2c2_sdma_reqs),
1866 .main_clk = "i2c2_fck",
db12ba53
BC
1867 .prcm = {
1868 .omap4 = {
3b54baad 1869 .clkctrl_reg = OMAP4430_CM_L4PER_I2C2_CLKCTRL,
db12ba53
BC
1870 },
1871 },
3b54baad
BC
1872 .slaves = omap44xx_i2c2_slaves,
1873 .slaves_cnt = ARRAY_SIZE(omap44xx_i2c2_slaves),
db12ba53
BC
1874 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1875};
1876
3b54baad
BC
1877/* i2c3 */
1878static struct omap_hwmod omap44xx_i2c3_hwmod;
1879static struct omap_hwmod_irq_info omap44xx_i2c3_irqs[] = {
1880 { .irq = 61 + OMAP44XX_IRQ_GIC_START },
db12ba53
BC
1881};
1882
3b54baad
BC
1883static struct omap_hwmod_dma_info omap44xx_i2c3_sdma_reqs[] = {
1884 { .name = "tx", .dma_req = 24 + OMAP44XX_DMA_REQ_START },
1885 { .name = "rx", .dma_req = 25 + OMAP44XX_DMA_REQ_START },
92b18d1c
BC
1886};
1887
3b54baad 1888static struct omap_hwmod_addr_space omap44xx_i2c3_addrs[] = {
92b18d1c 1889 {
3b54baad
BC
1890 .pa_start = 0x48060000,
1891 .pa_end = 0x480600ff,
92b18d1c
BC
1892 .flags = ADDR_TYPE_RT
1893 },
1894};
1895
3b54baad
BC
1896/* l4_per -> i2c3 */
1897static struct omap_hwmod_ocp_if omap44xx_l4_per__i2c3 = {
db12ba53 1898 .master = &omap44xx_l4_per_hwmod,
3b54baad 1899 .slave = &omap44xx_i2c3_hwmod,
db12ba53 1900 .clk = "l4_div_ck",
3b54baad
BC
1901 .addr = omap44xx_i2c3_addrs,
1902 .addr_cnt = ARRAY_SIZE(omap44xx_i2c3_addrs),
db12ba53
BC
1903 .user = OCP_USER_MPU | OCP_USER_SDMA,
1904};
1905
3b54baad
BC
1906/* i2c3 slave ports */
1907static struct omap_hwmod_ocp_if *omap44xx_i2c3_slaves[] = {
1908 &omap44xx_l4_per__i2c3,
db12ba53
BC
1909};
1910
3b54baad
BC
1911static struct omap_hwmod omap44xx_i2c3_hwmod = {
1912 .name = "i2c3",
1913 .class = &omap44xx_i2c_hwmod_class,
1914 .flags = HWMOD_INIT_NO_RESET,
1915 .mpu_irqs = omap44xx_i2c3_irqs,
1916 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_i2c3_irqs),
1917 .sdma_reqs = omap44xx_i2c3_sdma_reqs,
1918 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_i2c3_sdma_reqs),
1919 .main_clk = "i2c3_fck",
db12ba53
BC
1920 .prcm = {
1921 .omap4 = {
3b54baad 1922 .clkctrl_reg = OMAP4430_CM_L4PER_I2C3_CLKCTRL,
db12ba53
BC
1923 },
1924 },
3b54baad
BC
1925 .slaves = omap44xx_i2c3_slaves,
1926 .slaves_cnt = ARRAY_SIZE(omap44xx_i2c3_slaves),
db12ba53
BC
1927 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1928};
1929
3b54baad
BC
1930/* i2c4 */
1931static struct omap_hwmod omap44xx_i2c4_hwmod;
1932static struct omap_hwmod_irq_info omap44xx_i2c4_irqs[] = {
1933 { .irq = 62 + OMAP44XX_IRQ_GIC_START },
db12ba53
BC
1934};
1935
3b54baad
BC
1936static struct omap_hwmod_dma_info omap44xx_i2c4_sdma_reqs[] = {
1937 { .name = "tx", .dma_req = 123 + OMAP44XX_DMA_REQ_START },
1938 { .name = "rx", .dma_req = 124 + OMAP44XX_DMA_REQ_START },
db12ba53
BC
1939};
1940
3b54baad 1941static struct omap_hwmod_addr_space omap44xx_i2c4_addrs[] = {
db12ba53 1942 {
3b54baad
BC
1943 .pa_start = 0x48350000,
1944 .pa_end = 0x483500ff,
db12ba53
BC
1945 .flags = ADDR_TYPE_RT
1946 },
1947};
1948
3b54baad
BC
1949/* l4_per -> i2c4 */
1950static struct omap_hwmod_ocp_if omap44xx_l4_per__i2c4 = {
1951 .master = &omap44xx_l4_per_hwmod,
1952 .slave = &omap44xx_i2c4_hwmod,
1953 .clk = "l4_div_ck",
1954 .addr = omap44xx_i2c4_addrs,
1955 .addr_cnt = ARRAY_SIZE(omap44xx_i2c4_addrs),
1956 .user = OCP_USER_MPU | OCP_USER_SDMA,
92b18d1c
BC
1957};
1958
3b54baad
BC
1959/* i2c4 slave ports */
1960static struct omap_hwmod_ocp_if *omap44xx_i2c4_slaves[] = {
1961 &omap44xx_l4_per__i2c4,
92b18d1c
BC
1962};
1963
3b54baad
BC
1964static struct omap_hwmod omap44xx_i2c4_hwmod = {
1965 .name = "i2c4",
1966 .class = &omap44xx_i2c_hwmod_class,
1967 .flags = HWMOD_INIT_NO_RESET,
1968 .mpu_irqs = omap44xx_i2c4_irqs,
1969 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_i2c4_irqs),
1970 .sdma_reqs = omap44xx_i2c4_sdma_reqs,
1971 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_i2c4_sdma_reqs),
1972 .main_clk = "i2c4_fck",
92b18d1c
BC
1973 .prcm = {
1974 .omap4 = {
3b54baad 1975 .clkctrl_reg = OMAP4430_CM_L4PER_I2C4_CLKCTRL,
92b18d1c
BC
1976 },
1977 },
3b54baad
BC
1978 .slaves = omap44xx_i2c4_slaves,
1979 .slaves_cnt = ARRAY_SIZE(omap44xx_i2c4_slaves),
92b18d1c
BC
1980 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1981};
1982
8f25bdc5
BC
1983/*
1984 * 'iva' class
1985 * multi-standard video encoder/decoder hardware accelerator
1986 */
1987
1988static struct omap_hwmod_class omap44xx_iva_hwmod_class = {
fe13471c 1989 .name = "iva",
8f25bdc5
BC
1990};
1991
1992/* iva */
1993static struct omap_hwmod_irq_info omap44xx_iva_irqs[] = {
1994 { .name = "sync_1", .irq = 103 + OMAP44XX_IRQ_GIC_START },
1995 { .name = "sync_0", .irq = 104 + OMAP44XX_IRQ_GIC_START },
1996 { .name = "mailbox_0", .irq = 107 + OMAP44XX_IRQ_GIC_START },
1997};
1998
1999static struct omap_hwmod_rst_info omap44xx_iva_resets[] = {
2000 { .name = "logic", .rst_shift = 2 },
2001};
2002
2003static struct omap_hwmod_rst_info omap44xx_iva_seq0_resets[] = {
2004 { .name = "seq0", .rst_shift = 0 },
2005};
2006
2007static struct omap_hwmod_rst_info omap44xx_iva_seq1_resets[] = {
2008 { .name = "seq1", .rst_shift = 1 },
2009};
2010
2011/* iva master ports */
2012static struct omap_hwmod_ocp_if *omap44xx_iva_masters[] = {
2013 &omap44xx_iva__l3_main_2,
2014 &omap44xx_iva__l3_instr,
2015};
2016
2017static struct omap_hwmod_addr_space omap44xx_iva_addrs[] = {
2018 {
2019 .pa_start = 0x5a000000,
2020 .pa_end = 0x5a07ffff,
2021 .flags = ADDR_TYPE_RT
2022 },
2023};
2024
2025/* l3_main_2 -> iva */
2026static struct omap_hwmod_ocp_if omap44xx_l3_main_2__iva = {
2027 .master = &omap44xx_l3_main_2_hwmod,
2028 .slave = &omap44xx_iva_hwmod,
2029 .clk = "l3_div_ck",
2030 .addr = omap44xx_iva_addrs,
2031 .addr_cnt = ARRAY_SIZE(omap44xx_iva_addrs),
2032 .user = OCP_USER_MPU,
2033};
2034
2035/* iva slave ports */
2036static struct omap_hwmod_ocp_if *omap44xx_iva_slaves[] = {
2037 &omap44xx_dsp__iva,
2038 &omap44xx_l3_main_2__iva,
2039};
2040
2041/* Pseudo hwmod for reset control purpose only */
2042static struct omap_hwmod omap44xx_iva_seq0_hwmod = {
2043 .name = "iva_seq0",
2044 .class = &omap44xx_iva_hwmod_class,
2045 .flags = HWMOD_INIT_NO_RESET,
2046 .rst_lines = omap44xx_iva_seq0_resets,
2047 .rst_lines_cnt = ARRAY_SIZE(omap44xx_iva_seq0_resets),
2048 .prcm = {
2049 .omap4 = {
2050 .rstctrl_reg = OMAP4430_RM_IVAHD_RSTCTRL,
2051 },
2052 },
2053 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2054};
2055
2056/* Pseudo hwmod for reset control purpose only */
2057static struct omap_hwmod omap44xx_iva_seq1_hwmod = {
2058 .name = "iva_seq1",
2059 .class = &omap44xx_iva_hwmod_class,
2060 .flags = HWMOD_INIT_NO_RESET,
2061 .rst_lines = omap44xx_iva_seq1_resets,
2062 .rst_lines_cnt = ARRAY_SIZE(omap44xx_iva_seq1_resets),
2063 .prcm = {
2064 .omap4 = {
2065 .rstctrl_reg = OMAP4430_RM_IVAHD_RSTCTRL,
2066 },
2067 },
2068 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2069};
2070
2071static struct omap_hwmod omap44xx_iva_hwmod = {
2072 .name = "iva",
2073 .class = &omap44xx_iva_hwmod_class,
2074 .mpu_irqs = omap44xx_iva_irqs,
2075 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_iva_irqs),
2076 .rst_lines = omap44xx_iva_resets,
2077 .rst_lines_cnt = ARRAY_SIZE(omap44xx_iva_resets),
2078 .main_clk = "iva_fck",
2079 .prcm = {
2080 .omap4 = {
2081 .clkctrl_reg = OMAP4430_CM_IVAHD_IVAHD_CLKCTRL,
2082 .rstctrl_reg = OMAP4430_RM_IVAHD_RSTCTRL,
2083 },
2084 },
2085 .slaves = omap44xx_iva_slaves,
2086 .slaves_cnt = ARRAY_SIZE(omap44xx_iva_slaves),
2087 .masters = omap44xx_iva_masters,
2088 .masters_cnt = ARRAY_SIZE(omap44xx_iva_masters),
2089 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2090};
2091
ec5df927
BC
2092/*
2093 * 'mailbox' class
2094 * mailbox module allowing communication between the on-chip processors using a
2095 * queued mailbox-interrupt mechanism.
2096 */
2097
2098static struct omap_hwmod_class_sysconfig omap44xx_mailbox_sysc = {
2099 .rev_offs = 0x0000,
2100 .sysc_offs = 0x0010,
2101 .sysc_flags = (SYSC_HAS_RESET_STATUS | SYSC_HAS_SIDLEMODE |
2102 SYSC_HAS_SOFTRESET),
2103 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2104 .sysc_fields = &omap_hwmod_sysc_type2,
2105};
2106
2107static struct omap_hwmod_class omap44xx_mailbox_hwmod_class = {
2108 .name = "mailbox",
2109 .sysc = &omap44xx_mailbox_sysc,
2110};
2111
2112/* mailbox */
2113static struct omap_hwmod omap44xx_mailbox_hwmod;
2114static struct omap_hwmod_irq_info omap44xx_mailbox_irqs[] = {
2115 { .irq = 26 + OMAP44XX_IRQ_GIC_START },
2116};
2117
2118static struct omap_hwmod_addr_space omap44xx_mailbox_addrs[] = {
2119 {
2120 .pa_start = 0x4a0f4000,
2121 .pa_end = 0x4a0f41ff,
2122 .flags = ADDR_TYPE_RT
2123 },
2124};
2125
2126/* l4_cfg -> mailbox */
2127static struct omap_hwmod_ocp_if omap44xx_l4_cfg__mailbox = {
2128 .master = &omap44xx_l4_cfg_hwmod,
2129 .slave = &omap44xx_mailbox_hwmod,
2130 .clk = "l4_div_ck",
2131 .addr = omap44xx_mailbox_addrs,
2132 .addr_cnt = ARRAY_SIZE(omap44xx_mailbox_addrs),
2133 .user = OCP_USER_MPU | OCP_USER_SDMA,
2134};
2135
2136/* mailbox slave ports */
2137static struct omap_hwmod_ocp_if *omap44xx_mailbox_slaves[] = {
2138 &omap44xx_l4_cfg__mailbox,
2139};
2140
2141static struct omap_hwmod omap44xx_mailbox_hwmod = {
2142 .name = "mailbox",
2143 .class = &omap44xx_mailbox_hwmod_class,
2144 .mpu_irqs = omap44xx_mailbox_irqs,
2145 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_mailbox_irqs),
2146 .prcm = {
2147 .omap4 = {
2148 .clkctrl_reg = OMAP4430_CM_L4CFG_MAILBOX_CLKCTRL,
2149 },
2150 },
2151 .slaves = omap44xx_mailbox_slaves,
2152 .slaves_cnt = ARRAY_SIZE(omap44xx_mailbox_slaves),
2153 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2154};
2155
4ddff493
BC
2156/*
2157 * 'mcbsp' class
2158 * multi channel buffered serial port controller
2159 */
2160
2161static struct omap_hwmod_class_sysconfig omap44xx_mcbsp_sysc = {
2162 .sysc_offs = 0x008c,
2163 .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_ENAWAKEUP |
2164 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
2165 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2166 .sysc_fields = &omap_hwmod_sysc_type1,
2167};
2168
2169static struct omap_hwmod_class omap44xx_mcbsp_hwmod_class = {
2170 .name = "mcbsp",
2171 .sysc = &omap44xx_mcbsp_sysc,
2172};
2173
2174/* mcbsp1 */
2175static struct omap_hwmod omap44xx_mcbsp1_hwmod;
2176static struct omap_hwmod_irq_info omap44xx_mcbsp1_irqs[] = {
2177 { .irq = 17 + OMAP44XX_IRQ_GIC_START },
2178};
2179
2180static struct omap_hwmod_dma_info omap44xx_mcbsp1_sdma_reqs[] = {
2181 { .name = "tx", .dma_req = 32 + OMAP44XX_DMA_REQ_START },
2182 { .name = "rx", .dma_req = 33 + OMAP44XX_DMA_REQ_START },
2183};
2184
2185static struct omap_hwmod_addr_space omap44xx_mcbsp1_addrs[] = {
2186 {
2187 .pa_start = 0x40122000,
2188 .pa_end = 0x401220ff,
2189 .flags = ADDR_TYPE_RT
2190 },
2191};
2192
2193/* l4_abe -> mcbsp1 */
2194static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp1 = {
2195 .master = &omap44xx_l4_abe_hwmod,
2196 .slave = &omap44xx_mcbsp1_hwmod,
2197 .clk = "ocp_abe_iclk",
2198 .addr = omap44xx_mcbsp1_addrs,
2199 .addr_cnt = ARRAY_SIZE(omap44xx_mcbsp1_addrs),
2200 .user = OCP_USER_MPU,
2201};
2202
2203static struct omap_hwmod_addr_space omap44xx_mcbsp1_dma_addrs[] = {
2204 {
2205 .pa_start = 0x49022000,
2206 .pa_end = 0x490220ff,
2207 .flags = ADDR_TYPE_RT
2208 },
2209};
2210
2211/* l4_abe -> mcbsp1 (dma) */
2212static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp1_dma = {
2213 .master = &omap44xx_l4_abe_hwmod,
2214 .slave = &omap44xx_mcbsp1_hwmod,
2215 .clk = "ocp_abe_iclk",
2216 .addr = omap44xx_mcbsp1_dma_addrs,
2217 .addr_cnt = ARRAY_SIZE(omap44xx_mcbsp1_dma_addrs),
2218 .user = OCP_USER_SDMA,
2219};
2220
2221/* mcbsp1 slave ports */
2222static struct omap_hwmod_ocp_if *omap44xx_mcbsp1_slaves[] = {
2223 &omap44xx_l4_abe__mcbsp1,
2224 &omap44xx_l4_abe__mcbsp1_dma,
2225};
2226
2227static struct omap_hwmod omap44xx_mcbsp1_hwmod = {
2228 .name = "mcbsp1",
2229 .class = &omap44xx_mcbsp_hwmod_class,
2230 .mpu_irqs = omap44xx_mcbsp1_irqs,
2231 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_mcbsp1_irqs),
2232 .sdma_reqs = omap44xx_mcbsp1_sdma_reqs,
2233 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_mcbsp1_sdma_reqs),
2234 .main_clk = "mcbsp1_fck",
2235 .prcm = {
2236 .omap4 = {
2237 .clkctrl_reg = OMAP4430_CM1_ABE_MCBSP1_CLKCTRL,
2238 },
2239 },
2240 .slaves = omap44xx_mcbsp1_slaves,
2241 .slaves_cnt = ARRAY_SIZE(omap44xx_mcbsp1_slaves),
2242 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2243};
2244
2245/* mcbsp2 */
2246static struct omap_hwmod omap44xx_mcbsp2_hwmod;
2247static struct omap_hwmod_irq_info omap44xx_mcbsp2_irqs[] = {
2248 { .irq = 22 + OMAP44XX_IRQ_GIC_START },
2249};
2250
2251static struct omap_hwmod_dma_info omap44xx_mcbsp2_sdma_reqs[] = {
2252 { .name = "tx", .dma_req = 16 + OMAP44XX_DMA_REQ_START },
2253 { .name = "rx", .dma_req = 17 + OMAP44XX_DMA_REQ_START },
2254};
2255
2256static struct omap_hwmod_addr_space omap44xx_mcbsp2_addrs[] = {
2257 {
2258 .pa_start = 0x40124000,
2259 .pa_end = 0x401240ff,
2260 .flags = ADDR_TYPE_RT
2261 },
2262};
2263
2264/* l4_abe -> mcbsp2 */
2265static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp2 = {
2266 .master = &omap44xx_l4_abe_hwmod,
2267 .slave = &omap44xx_mcbsp2_hwmod,
2268 .clk = "ocp_abe_iclk",
2269 .addr = omap44xx_mcbsp2_addrs,
2270 .addr_cnt = ARRAY_SIZE(omap44xx_mcbsp2_addrs),
2271 .user = OCP_USER_MPU,
2272};
2273
2274static struct omap_hwmod_addr_space omap44xx_mcbsp2_dma_addrs[] = {
2275 {
2276 .pa_start = 0x49024000,
2277 .pa_end = 0x490240ff,
2278 .flags = ADDR_TYPE_RT
2279 },
2280};
2281
2282/* l4_abe -> mcbsp2 (dma) */
2283static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp2_dma = {
2284 .master = &omap44xx_l4_abe_hwmod,
2285 .slave = &omap44xx_mcbsp2_hwmod,
2286 .clk = "ocp_abe_iclk",
2287 .addr = omap44xx_mcbsp2_dma_addrs,
2288 .addr_cnt = ARRAY_SIZE(omap44xx_mcbsp2_dma_addrs),
2289 .user = OCP_USER_SDMA,
2290};
2291
2292/* mcbsp2 slave ports */
2293static struct omap_hwmod_ocp_if *omap44xx_mcbsp2_slaves[] = {
2294 &omap44xx_l4_abe__mcbsp2,
2295 &omap44xx_l4_abe__mcbsp2_dma,
2296};
2297
2298static struct omap_hwmod omap44xx_mcbsp2_hwmod = {
2299 .name = "mcbsp2",
2300 .class = &omap44xx_mcbsp_hwmod_class,
2301 .mpu_irqs = omap44xx_mcbsp2_irqs,
2302 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_mcbsp2_irqs),
2303 .sdma_reqs = omap44xx_mcbsp2_sdma_reqs,
2304 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_mcbsp2_sdma_reqs),
2305 .main_clk = "mcbsp2_fck",
2306 .prcm = {
2307 .omap4 = {
2308 .clkctrl_reg = OMAP4430_CM1_ABE_MCBSP2_CLKCTRL,
2309 },
2310 },
2311 .slaves = omap44xx_mcbsp2_slaves,
2312 .slaves_cnt = ARRAY_SIZE(omap44xx_mcbsp2_slaves),
2313 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2314};
2315
2316/* mcbsp3 */
2317static struct omap_hwmod omap44xx_mcbsp3_hwmod;
2318static struct omap_hwmod_irq_info omap44xx_mcbsp3_irqs[] = {
2319 { .irq = 23 + OMAP44XX_IRQ_GIC_START },
2320};
2321
2322static struct omap_hwmod_dma_info omap44xx_mcbsp3_sdma_reqs[] = {
2323 { .name = "tx", .dma_req = 18 + OMAP44XX_DMA_REQ_START },
2324 { .name = "rx", .dma_req = 19 + OMAP44XX_DMA_REQ_START },
2325};
2326
2327static struct omap_hwmod_addr_space omap44xx_mcbsp3_addrs[] = {
2328 {
2329 .pa_start = 0x40126000,
2330 .pa_end = 0x401260ff,
2331 .flags = ADDR_TYPE_RT
2332 },
2333};
2334
2335/* l4_abe -> mcbsp3 */
2336static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp3 = {
2337 .master = &omap44xx_l4_abe_hwmod,
2338 .slave = &omap44xx_mcbsp3_hwmod,
2339 .clk = "ocp_abe_iclk",
2340 .addr = omap44xx_mcbsp3_addrs,
2341 .addr_cnt = ARRAY_SIZE(omap44xx_mcbsp3_addrs),
2342 .user = OCP_USER_MPU,
2343};
2344
2345static struct omap_hwmod_addr_space omap44xx_mcbsp3_dma_addrs[] = {
2346 {
2347 .pa_start = 0x49026000,
2348 .pa_end = 0x490260ff,
2349 .flags = ADDR_TYPE_RT
2350 },
2351};
2352
2353/* l4_abe -> mcbsp3 (dma) */
2354static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp3_dma = {
2355 .master = &omap44xx_l4_abe_hwmod,
2356 .slave = &omap44xx_mcbsp3_hwmod,
2357 .clk = "ocp_abe_iclk",
2358 .addr = omap44xx_mcbsp3_dma_addrs,
2359 .addr_cnt = ARRAY_SIZE(omap44xx_mcbsp3_dma_addrs),
2360 .user = OCP_USER_SDMA,
2361};
2362
2363/* mcbsp3 slave ports */
2364static struct omap_hwmod_ocp_if *omap44xx_mcbsp3_slaves[] = {
2365 &omap44xx_l4_abe__mcbsp3,
2366 &omap44xx_l4_abe__mcbsp3_dma,
2367};
2368
2369static struct omap_hwmod omap44xx_mcbsp3_hwmod = {
2370 .name = "mcbsp3",
2371 .class = &omap44xx_mcbsp_hwmod_class,
2372 .mpu_irqs = omap44xx_mcbsp3_irqs,
2373 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_mcbsp3_irqs),
2374 .sdma_reqs = omap44xx_mcbsp3_sdma_reqs,
2375 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_mcbsp3_sdma_reqs),
2376 .main_clk = "mcbsp3_fck",
2377 .prcm = {
2378 .omap4 = {
2379 .clkctrl_reg = OMAP4430_CM1_ABE_MCBSP3_CLKCTRL,
2380 },
2381 },
2382 .slaves = omap44xx_mcbsp3_slaves,
2383 .slaves_cnt = ARRAY_SIZE(omap44xx_mcbsp3_slaves),
2384 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2385};
2386
2387/* mcbsp4 */
2388static struct omap_hwmod omap44xx_mcbsp4_hwmod;
2389static struct omap_hwmod_irq_info omap44xx_mcbsp4_irqs[] = {
2390 { .irq = 16 + OMAP44XX_IRQ_GIC_START },
2391};
2392
2393static struct omap_hwmod_dma_info omap44xx_mcbsp4_sdma_reqs[] = {
2394 { .name = "tx", .dma_req = 30 + OMAP44XX_DMA_REQ_START },
2395 { .name = "rx", .dma_req = 31 + OMAP44XX_DMA_REQ_START },
2396};
2397
2398static struct omap_hwmod_addr_space omap44xx_mcbsp4_addrs[] = {
2399 {
2400 .pa_start = 0x48096000,
2401 .pa_end = 0x480960ff,
2402 .flags = ADDR_TYPE_RT
2403 },
2404};
2405
2406/* l4_per -> mcbsp4 */
2407static struct omap_hwmod_ocp_if omap44xx_l4_per__mcbsp4 = {
2408 .master = &omap44xx_l4_per_hwmod,
2409 .slave = &omap44xx_mcbsp4_hwmod,
2410 .clk = "l4_div_ck",
2411 .addr = omap44xx_mcbsp4_addrs,
2412 .addr_cnt = ARRAY_SIZE(omap44xx_mcbsp4_addrs),
2413 .user = OCP_USER_MPU | OCP_USER_SDMA,
2414};
2415
2416/* mcbsp4 slave ports */
2417static struct omap_hwmod_ocp_if *omap44xx_mcbsp4_slaves[] = {
2418 &omap44xx_l4_per__mcbsp4,
2419};
2420
2421static struct omap_hwmod omap44xx_mcbsp4_hwmod = {
2422 .name = "mcbsp4",
2423 .class = &omap44xx_mcbsp_hwmod_class,
2424 .mpu_irqs = omap44xx_mcbsp4_irqs,
2425 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_mcbsp4_irqs),
2426 .sdma_reqs = omap44xx_mcbsp4_sdma_reqs,
2427 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_mcbsp4_sdma_reqs),
2428 .main_clk = "mcbsp4_fck",
2429 .prcm = {
2430 .omap4 = {
2431 .clkctrl_reg = OMAP4430_CM_L4PER_MCBSP4_CLKCTRL,
2432 },
2433 },
2434 .slaves = omap44xx_mcbsp4_slaves,
2435 .slaves_cnt = ARRAY_SIZE(omap44xx_mcbsp4_slaves),
2436 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2437};
2438
9bcbd7f0
BC
2439/*
2440 * 'mcspi' class
2441 * multichannel serial port interface (mcspi) / master/slave synchronous serial
2442 * bus
2443 */
2444
2445static struct omap_hwmod_class_sysconfig omap44xx_mcspi_sysc = {
2446 .rev_offs = 0x0000,
2447 .sysc_offs = 0x0010,
2448 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
2449 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
2450 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2451 SIDLE_SMART_WKUP),
2452 .sysc_fields = &omap_hwmod_sysc_type2,
2453};
2454
2455static struct omap_hwmod_class omap44xx_mcspi_hwmod_class = {
2456 .name = "mcspi",
2457 .sysc = &omap44xx_mcspi_sysc,
2458};
2459
2460/* mcspi1 */
2461static struct omap_hwmod omap44xx_mcspi1_hwmod;
2462static struct omap_hwmod_irq_info omap44xx_mcspi1_irqs[] = {
2463 { .irq = 65 + OMAP44XX_IRQ_GIC_START },
2464};
2465
2466static struct omap_hwmod_dma_info omap44xx_mcspi1_sdma_reqs[] = {
2467 { .name = "tx0", .dma_req = 34 + OMAP44XX_DMA_REQ_START },
2468 { .name = "rx0", .dma_req = 35 + OMAP44XX_DMA_REQ_START },
2469 { .name = "tx1", .dma_req = 36 + OMAP44XX_DMA_REQ_START },
2470 { .name = "rx1", .dma_req = 37 + OMAP44XX_DMA_REQ_START },
2471 { .name = "tx2", .dma_req = 38 + OMAP44XX_DMA_REQ_START },
2472 { .name = "rx2", .dma_req = 39 + OMAP44XX_DMA_REQ_START },
2473 { .name = "tx3", .dma_req = 40 + OMAP44XX_DMA_REQ_START },
2474 { .name = "rx3", .dma_req = 41 + OMAP44XX_DMA_REQ_START },
2475};
2476
2477static struct omap_hwmod_addr_space omap44xx_mcspi1_addrs[] = {
2478 {
2479 .pa_start = 0x48098000,
2480 .pa_end = 0x480981ff,
2481 .flags = ADDR_TYPE_RT
2482 },
2483};
2484
2485/* l4_per -> mcspi1 */
2486static struct omap_hwmod_ocp_if omap44xx_l4_per__mcspi1 = {
2487 .master = &omap44xx_l4_per_hwmod,
2488 .slave = &omap44xx_mcspi1_hwmod,
2489 .clk = "l4_div_ck",
2490 .addr = omap44xx_mcspi1_addrs,
2491 .addr_cnt = ARRAY_SIZE(omap44xx_mcspi1_addrs),
2492 .user = OCP_USER_MPU | OCP_USER_SDMA,
2493};
2494
2495/* mcspi1 slave ports */
2496static struct omap_hwmod_ocp_if *omap44xx_mcspi1_slaves[] = {
2497 &omap44xx_l4_per__mcspi1,
2498};
2499
2500static struct omap_hwmod omap44xx_mcspi1_hwmod = {
2501 .name = "mcspi1",
2502 .class = &omap44xx_mcspi_hwmod_class,
2503 .mpu_irqs = omap44xx_mcspi1_irqs,
2504 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_mcspi1_irqs),
2505 .sdma_reqs = omap44xx_mcspi1_sdma_reqs,
2506 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_mcspi1_sdma_reqs),
2507 .main_clk = "mcspi1_fck",
2508 .prcm = {
2509 .omap4 = {
2510 .clkctrl_reg = OMAP4430_CM_L4PER_MCSPI1_CLKCTRL,
2511 },
2512 },
2513 .slaves = omap44xx_mcspi1_slaves,
2514 .slaves_cnt = ARRAY_SIZE(omap44xx_mcspi1_slaves),
2515 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2516};
2517
2518/* mcspi2 */
2519static struct omap_hwmod omap44xx_mcspi2_hwmod;
2520static struct omap_hwmod_irq_info omap44xx_mcspi2_irqs[] = {
2521 { .irq = 66 + OMAP44XX_IRQ_GIC_START },
2522};
2523
2524static struct omap_hwmod_dma_info omap44xx_mcspi2_sdma_reqs[] = {
2525 { .name = "tx0", .dma_req = 42 + OMAP44XX_DMA_REQ_START },
2526 { .name = "rx0", .dma_req = 43 + OMAP44XX_DMA_REQ_START },
2527 { .name = "tx1", .dma_req = 44 + OMAP44XX_DMA_REQ_START },
2528 { .name = "rx1", .dma_req = 45 + OMAP44XX_DMA_REQ_START },
2529};
2530
2531static struct omap_hwmod_addr_space omap44xx_mcspi2_addrs[] = {
2532 {
2533 .pa_start = 0x4809a000,
2534 .pa_end = 0x4809a1ff,
2535 .flags = ADDR_TYPE_RT
2536 },
2537};
2538
2539/* l4_per -> mcspi2 */
2540static struct omap_hwmod_ocp_if omap44xx_l4_per__mcspi2 = {
2541 .master = &omap44xx_l4_per_hwmod,
2542 .slave = &omap44xx_mcspi2_hwmod,
2543 .clk = "l4_div_ck",
2544 .addr = omap44xx_mcspi2_addrs,
2545 .addr_cnt = ARRAY_SIZE(omap44xx_mcspi2_addrs),
2546 .user = OCP_USER_MPU | OCP_USER_SDMA,
2547};
2548
2549/* mcspi2 slave ports */
2550static struct omap_hwmod_ocp_if *omap44xx_mcspi2_slaves[] = {
2551 &omap44xx_l4_per__mcspi2,
2552};
2553
2554static struct omap_hwmod omap44xx_mcspi2_hwmod = {
2555 .name = "mcspi2",
2556 .class = &omap44xx_mcspi_hwmod_class,
2557 .mpu_irqs = omap44xx_mcspi2_irqs,
2558 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_mcspi2_irqs),
2559 .sdma_reqs = omap44xx_mcspi2_sdma_reqs,
2560 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_mcspi2_sdma_reqs),
2561 .main_clk = "mcspi2_fck",
2562 .prcm = {
2563 .omap4 = {
2564 .clkctrl_reg = OMAP4430_CM_L4PER_MCSPI2_CLKCTRL,
2565 },
2566 },
2567 .slaves = omap44xx_mcspi2_slaves,
2568 .slaves_cnt = ARRAY_SIZE(omap44xx_mcspi2_slaves),
2569 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2570};
2571
2572/* mcspi3 */
2573static struct omap_hwmod omap44xx_mcspi3_hwmod;
2574static struct omap_hwmod_irq_info omap44xx_mcspi3_irqs[] = {
2575 { .irq = 91 + OMAP44XX_IRQ_GIC_START },
2576};
2577
2578static struct omap_hwmod_dma_info omap44xx_mcspi3_sdma_reqs[] = {
2579 { .name = "tx0", .dma_req = 14 + OMAP44XX_DMA_REQ_START },
2580 { .name = "rx0", .dma_req = 15 + OMAP44XX_DMA_REQ_START },
2581 { .name = "tx1", .dma_req = 22 + OMAP44XX_DMA_REQ_START },
2582 { .name = "rx1", .dma_req = 23 + OMAP44XX_DMA_REQ_START },
2583};
2584
2585static struct omap_hwmod_addr_space omap44xx_mcspi3_addrs[] = {
2586 {
2587 .pa_start = 0x480b8000,
2588 .pa_end = 0x480b81ff,
2589 .flags = ADDR_TYPE_RT
2590 },
2591};
2592
2593/* l4_per -> mcspi3 */
2594static struct omap_hwmod_ocp_if omap44xx_l4_per__mcspi3 = {
2595 .master = &omap44xx_l4_per_hwmod,
2596 .slave = &omap44xx_mcspi3_hwmod,
2597 .clk = "l4_div_ck",
2598 .addr = omap44xx_mcspi3_addrs,
2599 .addr_cnt = ARRAY_SIZE(omap44xx_mcspi3_addrs),
2600 .user = OCP_USER_MPU | OCP_USER_SDMA,
2601};
2602
2603/* mcspi3 slave ports */
2604static struct omap_hwmod_ocp_if *omap44xx_mcspi3_slaves[] = {
2605 &omap44xx_l4_per__mcspi3,
2606};
2607
2608static struct omap_hwmod omap44xx_mcspi3_hwmod = {
2609 .name = "mcspi3",
2610 .class = &omap44xx_mcspi_hwmod_class,
2611 .mpu_irqs = omap44xx_mcspi3_irqs,
2612 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_mcspi3_irqs),
2613 .sdma_reqs = omap44xx_mcspi3_sdma_reqs,
2614 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_mcspi3_sdma_reqs),
2615 .main_clk = "mcspi3_fck",
2616 .prcm = {
2617 .omap4 = {
2618 .clkctrl_reg = OMAP4430_CM_L4PER_MCSPI3_CLKCTRL,
2619 },
2620 },
2621 .slaves = omap44xx_mcspi3_slaves,
2622 .slaves_cnt = ARRAY_SIZE(omap44xx_mcspi3_slaves),
2623 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2624};
2625
2626/* mcspi4 */
2627static struct omap_hwmod omap44xx_mcspi4_hwmod;
2628static struct omap_hwmod_irq_info omap44xx_mcspi4_irqs[] = {
2629 { .irq = 48 + OMAP44XX_IRQ_GIC_START },
2630};
2631
2632static struct omap_hwmod_dma_info omap44xx_mcspi4_sdma_reqs[] = {
2633 { .name = "tx0", .dma_req = 69 + OMAP44XX_DMA_REQ_START },
2634 { .name = "rx0", .dma_req = 70 + OMAP44XX_DMA_REQ_START },
2635};
2636
2637static struct omap_hwmod_addr_space omap44xx_mcspi4_addrs[] = {
2638 {
2639 .pa_start = 0x480ba000,
2640 .pa_end = 0x480ba1ff,
2641 .flags = ADDR_TYPE_RT
2642 },
2643};
2644
2645/* l4_per -> mcspi4 */
2646static struct omap_hwmod_ocp_if omap44xx_l4_per__mcspi4 = {
2647 .master = &omap44xx_l4_per_hwmod,
2648 .slave = &omap44xx_mcspi4_hwmod,
2649 .clk = "l4_div_ck",
2650 .addr = omap44xx_mcspi4_addrs,
2651 .addr_cnt = ARRAY_SIZE(omap44xx_mcspi4_addrs),
2652 .user = OCP_USER_MPU | OCP_USER_SDMA,
2653};
2654
2655/* mcspi4 slave ports */
2656static struct omap_hwmod_ocp_if *omap44xx_mcspi4_slaves[] = {
2657 &omap44xx_l4_per__mcspi4,
2658};
2659
2660static struct omap_hwmod omap44xx_mcspi4_hwmod = {
2661 .name = "mcspi4",
2662 .class = &omap44xx_mcspi_hwmod_class,
2663 .mpu_irqs = omap44xx_mcspi4_irqs,
2664 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_mcspi4_irqs),
2665 .sdma_reqs = omap44xx_mcspi4_sdma_reqs,
2666 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_mcspi4_sdma_reqs),
2667 .main_clk = "mcspi4_fck",
2668 .prcm = {
2669 .omap4 = {
2670 .clkctrl_reg = OMAP4430_CM_L4PER_MCSPI4_CLKCTRL,
2671 },
2672 },
2673 .slaves = omap44xx_mcspi4_slaves,
2674 .slaves_cnt = ARRAY_SIZE(omap44xx_mcspi4_slaves),
2675 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2676};
2677
3b54baad
BC
2678/*
2679 * 'mpu' class
2680 * mpu sub-system
2681 */
2682
2683static struct omap_hwmod_class omap44xx_mpu_hwmod_class = {
fe13471c 2684 .name = "mpu",
db12ba53
BC
2685};
2686
3b54baad
BC
2687/* mpu */
2688static struct omap_hwmod_irq_info omap44xx_mpu_irqs[] = {
2689 { .name = "pl310", .irq = 0 + OMAP44XX_IRQ_GIC_START },
2690 { .name = "cti0", .irq = 1 + OMAP44XX_IRQ_GIC_START },
2691 { .name = "cti1", .irq = 2 + OMAP44XX_IRQ_GIC_START },
db12ba53
BC
2692};
2693
3b54baad
BC
2694/* mpu master ports */
2695static struct omap_hwmod_ocp_if *omap44xx_mpu_masters[] = {
2696 &omap44xx_mpu__l3_main_1,
2697 &omap44xx_mpu__l4_abe,
2698 &omap44xx_mpu__dmm,
2699};
2700
2701static struct omap_hwmod omap44xx_mpu_hwmod = {
2702 .name = "mpu",
2703 .class = &omap44xx_mpu_hwmod_class,
2704 .flags = (HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET),
2705 .mpu_irqs = omap44xx_mpu_irqs,
2706 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_mpu_irqs),
2707 .main_clk = "dpll_mpu_m2_ck",
db12ba53
BC
2708 .prcm = {
2709 .omap4 = {
3b54baad 2710 .clkctrl_reg = OMAP4430_CM_MPU_MPU_CLKCTRL,
db12ba53
BC
2711 },
2712 },
3b54baad
BC
2713 .masters = omap44xx_mpu_masters,
2714 .masters_cnt = ARRAY_SIZE(omap44xx_mpu_masters),
db12ba53
BC
2715 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2716};
2717
1f6a717f
BC
2718/*
2719 * 'smartreflex' class
2720 * smartreflex module (monitor silicon performance and outputs a measure of
2721 * performance error)
2722 */
2723
2724/* The IP is not compliant to type1 / type2 scheme */
2725static struct omap_hwmod_sysc_fields omap_hwmod_sysc_type_smartreflex = {
2726 .sidle_shift = 24,
2727 .enwkup_shift = 26,
2728};
2729
2730static struct omap_hwmod_class_sysconfig omap44xx_smartreflex_sysc = {
2731 .sysc_offs = 0x0038,
2732 .sysc_flags = (SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE),
2733 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2734 SIDLE_SMART_WKUP),
2735 .sysc_fields = &omap_hwmod_sysc_type_smartreflex,
2736};
2737
2738static struct omap_hwmod_class omap44xx_smartreflex_hwmod_class = {
fe13471c
BC
2739 .name = "smartreflex",
2740 .sysc = &omap44xx_smartreflex_sysc,
2741 .rev = 2,
1f6a717f
BC
2742};
2743
2744/* smartreflex_core */
2745static struct omap_hwmod omap44xx_smartreflex_core_hwmod;
2746static struct omap_hwmod_irq_info omap44xx_smartreflex_core_irqs[] = {
2747 { .irq = 19 + OMAP44XX_IRQ_GIC_START },
2748};
2749
2750static struct omap_hwmod_addr_space omap44xx_smartreflex_core_addrs[] = {
2751 {
2752 .pa_start = 0x4a0dd000,
2753 .pa_end = 0x4a0dd03f,
2754 .flags = ADDR_TYPE_RT
2755 },
2756};
2757
2758/* l4_cfg -> smartreflex_core */
2759static struct omap_hwmod_ocp_if omap44xx_l4_cfg__smartreflex_core = {
2760 .master = &omap44xx_l4_cfg_hwmod,
2761 .slave = &omap44xx_smartreflex_core_hwmod,
2762 .clk = "l4_div_ck",
2763 .addr = omap44xx_smartreflex_core_addrs,
2764 .addr_cnt = ARRAY_SIZE(omap44xx_smartreflex_core_addrs),
2765 .user = OCP_USER_MPU | OCP_USER_SDMA,
2766};
2767
2768/* smartreflex_core slave ports */
2769static struct omap_hwmod_ocp_if *omap44xx_smartreflex_core_slaves[] = {
2770 &omap44xx_l4_cfg__smartreflex_core,
2771};
2772
2773static struct omap_hwmod omap44xx_smartreflex_core_hwmod = {
2774 .name = "smartreflex_core",
2775 .class = &omap44xx_smartreflex_hwmod_class,
2776 .mpu_irqs = omap44xx_smartreflex_core_irqs,
2777 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_smartreflex_core_irqs),
2778 .main_clk = "smartreflex_core_fck",
2779 .vdd_name = "core",
2780 .prcm = {
2781 .omap4 = {
2782 .clkctrl_reg = OMAP4430_CM_ALWON_SR_CORE_CLKCTRL,
2783 },
2784 },
2785 .slaves = omap44xx_smartreflex_core_slaves,
2786 .slaves_cnt = ARRAY_SIZE(omap44xx_smartreflex_core_slaves),
2787 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2788};
2789
2790/* smartreflex_iva */
2791static struct omap_hwmod omap44xx_smartreflex_iva_hwmod;
2792static struct omap_hwmod_irq_info omap44xx_smartreflex_iva_irqs[] = {
2793 { .irq = 102 + OMAP44XX_IRQ_GIC_START },
2794};
2795
2796static struct omap_hwmod_addr_space omap44xx_smartreflex_iva_addrs[] = {
2797 {
2798 .pa_start = 0x4a0db000,
2799 .pa_end = 0x4a0db03f,
2800 .flags = ADDR_TYPE_RT
2801 },
2802};
2803
2804/* l4_cfg -> smartreflex_iva */
2805static struct omap_hwmod_ocp_if omap44xx_l4_cfg__smartreflex_iva = {
2806 .master = &omap44xx_l4_cfg_hwmod,
2807 .slave = &omap44xx_smartreflex_iva_hwmod,
2808 .clk = "l4_div_ck",
2809 .addr = omap44xx_smartreflex_iva_addrs,
2810 .addr_cnt = ARRAY_SIZE(omap44xx_smartreflex_iva_addrs),
2811 .user = OCP_USER_MPU | OCP_USER_SDMA,
2812};
2813
2814/* smartreflex_iva slave ports */
2815static struct omap_hwmod_ocp_if *omap44xx_smartreflex_iva_slaves[] = {
2816 &omap44xx_l4_cfg__smartreflex_iva,
2817};
2818
2819static struct omap_hwmod omap44xx_smartreflex_iva_hwmod = {
2820 .name = "smartreflex_iva",
2821 .class = &omap44xx_smartreflex_hwmod_class,
2822 .mpu_irqs = omap44xx_smartreflex_iva_irqs,
2823 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_smartreflex_iva_irqs),
2824 .main_clk = "smartreflex_iva_fck",
2825 .vdd_name = "iva",
2826 .prcm = {
2827 .omap4 = {
2828 .clkctrl_reg = OMAP4430_CM_ALWON_SR_IVA_CLKCTRL,
2829 },
2830 },
2831 .slaves = omap44xx_smartreflex_iva_slaves,
2832 .slaves_cnt = ARRAY_SIZE(omap44xx_smartreflex_iva_slaves),
2833 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2834};
2835
2836/* smartreflex_mpu */
2837static struct omap_hwmod omap44xx_smartreflex_mpu_hwmod;
2838static struct omap_hwmod_irq_info omap44xx_smartreflex_mpu_irqs[] = {
2839 { .irq = 18 + OMAP44XX_IRQ_GIC_START },
2840};
2841
2842static struct omap_hwmod_addr_space omap44xx_smartreflex_mpu_addrs[] = {
2843 {
2844 .pa_start = 0x4a0d9000,
2845 .pa_end = 0x4a0d903f,
2846 .flags = ADDR_TYPE_RT
2847 },
2848};
2849
2850/* l4_cfg -> smartreflex_mpu */
2851static struct omap_hwmod_ocp_if omap44xx_l4_cfg__smartreflex_mpu = {
2852 .master = &omap44xx_l4_cfg_hwmod,
2853 .slave = &omap44xx_smartreflex_mpu_hwmod,
2854 .clk = "l4_div_ck",
2855 .addr = omap44xx_smartreflex_mpu_addrs,
2856 .addr_cnt = ARRAY_SIZE(omap44xx_smartreflex_mpu_addrs),
2857 .user = OCP_USER_MPU | OCP_USER_SDMA,
2858};
2859
2860/* smartreflex_mpu slave ports */
2861static struct omap_hwmod_ocp_if *omap44xx_smartreflex_mpu_slaves[] = {
2862 &omap44xx_l4_cfg__smartreflex_mpu,
2863};
2864
2865static struct omap_hwmod omap44xx_smartreflex_mpu_hwmod = {
2866 .name = "smartreflex_mpu",
2867 .class = &omap44xx_smartreflex_hwmod_class,
2868 .mpu_irqs = omap44xx_smartreflex_mpu_irqs,
2869 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_smartreflex_mpu_irqs),
2870 .main_clk = "smartreflex_mpu_fck",
2871 .vdd_name = "mpu",
2872 .prcm = {
2873 .omap4 = {
2874 .clkctrl_reg = OMAP4430_CM_ALWON_SR_MPU_CLKCTRL,
2875 },
2876 },
2877 .slaves = omap44xx_smartreflex_mpu_slaves,
2878 .slaves_cnt = ARRAY_SIZE(omap44xx_smartreflex_mpu_slaves),
2879 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2880};
2881
d11c217f
BC
2882/*
2883 * 'spinlock' class
2884 * spinlock provides hardware assistance for synchronizing the processes
2885 * running on multiple processors
2886 */
2887
2888static struct omap_hwmod_class_sysconfig omap44xx_spinlock_sysc = {
2889 .rev_offs = 0x0000,
2890 .sysc_offs = 0x0010,
2891 .syss_offs = 0x0014,
2892 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
2893 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
2894 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
2895 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2896 SIDLE_SMART_WKUP),
2897 .sysc_fields = &omap_hwmod_sysc_type1,
2898};
2899
2900static struct omap_hwmod_class omap44xx_spinlock_hwmod_class = {
2901 .name = "spinlock",
2902 .sysc = &omap44xx_spinlock_sysc,
2903};
2904
2905/* spinlock */
2906static struct omap_hwmod omap44xx_spinlock_hwmod;
2907static struct omap_hwmod_addr_space omap44xx_spinlock_addrs[] = {
2908 {
2909 .pa_start = 0x4a0f6000,
2910 .pa_end = 0x4a0f6fff,
2911 .flags = ADDR_TYPE_RT
2912 },
2913};
2914
2915/* l4_cfg -> spinlock */
2916static struct omap_hwmod_ocp_if omap44xx_l4_cfg__spinlock = {
2917 .master = &omap44xx_l4_cfg_hwmod,
2918 .slave = &omap44xx_spinlock_hwmod,
2919 .clk = "l4_div_ck",
2920 .addr = omap44xx_spinlock_addrs,
2921 .addr_cnt = ARRAY_SIZE(omap44xx_spinlock_addrs),
2922 .user = OCP_USER_MPU | OCP_USER_SDMA,
2923};
2924
2925/* spinlock slave ports */
2926static struct omap_hwmod_ocp_if *omap44xx_spinlock_slaves[] = {
2927 &omap44xx_l4_cfg__spinlock,
2928};
2929
2930static struct omap_hwmod omap44xx_spinlock_hwmod = {
2931 .name = "spinlock",
2932 .class = &omap44xx_spinlock_hwmod_class,
2933 .prcm = {
2934 .omap4 = {
2935 .clkctrl_reg = OMAP4430_CM_L4CFG_HW_SEM_CLKCTRL,
2936 },
2937 },
2938 .slaves = omap44xx_spinlock_slaves,
2939 .slaves_cnt = ARRAY_SIZE(omap44xx_spinlock_slaves),
2940 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2941};
2942
35d1a66a
BC
2943/*
2944 * 'timer' class
2945 * general purpose timer module with accurate 1ms tick
2946 * This class contains several variants: ['timer_1ms', 'timer']
2947 */
2948
2949static struct omap_hwmod_class_sysconfig omap44xx_timer_1ms_sysc = {
2950 .rev_offs = 0x0000,
2951 .sysc_offs = 0x0010,
2952 .syss_offs = 0x0014,
2953 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
2954 SYSC_HAS_EMUFREE | SYSC_HAS_ENAWAKEUP |
2955 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
2956 SYSS_HAS_RESET_STATUS),
2957 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2958 .sysc_fields = &omap_hwmod_sysc_type1,
2959};
2960
2961static struct omap_hwmod_class omap44xx_timer_1ms_hwmod_class = {
2962 .name = "timer",
2963 .sysc = &omap44xx_timer_1ms_sysc,
2964};
2965
2966static struct omap_hwmod_class_sysconfig omap44xx_timer_sysc = {
2967 .rev_offs = 0x0000,
2968 .sysc_offs = 0x0010,
2969 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
2970 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
2971 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2972 SIDLE_SMART_WKUP),
2973 .sysc_fields = &omap_hwmod_sysc_type2,
2974};
2975
2976static struct omap_hwmod_class omap44xx_timer_hwmod_class = {
2977 .name = "timer",
2978 .sysc = &omap44xx_timer_sysc,
2979};
2980
2981/* timer1 */
2982static struct omap_hwmod omap44xx_timer1_hwmod;
2983static struct omap_hwmod_irq_info omap44xx_timer1_irqs[] = {
2984 { .irq = 37 + OMAP44XX_IRQ_GIC_START },
2985};
2986
2987static struct omap_hwmod_addr_space omap44xx_timer1_addrs[] = {
2988 {
2989 .pa_start = 0x4a318000,
2990 .pa_end = 0x4a31807f,
2991 .flags = ADDR_TYPE_RT
2992 },
2993};
2994
2995/* l4_wkup -> timer1 */
2996static struct omap_hwmod_ocp_if omap44xx_l4_wkup__timer1 = {
2997 .master = &omap44xx_l4_wkup_hwmod,
2998 .slave = &omap44xx_timer1_hwmod,
2999 .clk = "l4_wkup_clk_mux_ck",
3000 .addr = omap44xx_timer1_addrs,
3001 .addr_cnt = ARRAY_SIZE(omap44xx_timer1_addrs),
3002 .user = OCP_USER_MPU | OCP_USER_SDMA,
3003};
3004
3005/* timer1 slave ports */
3006static struct omap_hwmod_ocp_if *omap44xx_timer1_slaves[] = {
3007 &omap44xx_l4_wkup__timer1,
3008};
3009
3010static struct omap_hwmod omap44xx_timer1_hwmod = {
3011 .name = "timer1",
3012 .class = &omap44xx_timer_1ms_hwmod_class,
3013 .mpu_irqs = omap44xx_timer1_irqs,
3014 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_timer1_irqs),
3015 .main_clk = "timer1_fck",
3016 .prcm = {
3017 .omap4 = {
3018 .clkctrl_reg = OMAP4430_CM_WKUP_TIMER1_CLKCTRL,
3019 },
3020 },
3021 .slaves = omap44xx_timer1_slaves,
3022 .slaves_cnt = ARRAY_SIZE(omap44xx_timer1_slaves),
3023 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3024};
3025
3026/* timer2 */
3027static struct omap_hwmod omap44xx_timer2_hwmod;
3028static struct omap_hwmod_irq_info omap44xx_timer2_irqs[] = {
3029 { .irq = 38 + OMAP44XX_IRQ_GIC_START },
3030};
3031
3032static struct omap_hwmod_addr_space omap44xx_timer2_addrs[] = {
3033 {
3034 .pa_start = 0x48032000,
3035 .pa_end = 0x4803207f,
3036 .flags = ADDR_TYPE_RT
3037 },
3038};
3039
3040/* l4_per -> timer2 */
3041static struct omap_hwmod_ocp_if omap44xx_l4_per__timer2 = {
3042 .master = &omap44xx_l4_per_hwmod,
3043 .slave = &omap44xx_timer2_hwmod,
3044 .clk = "l4_div_ck",
3045 .addr = omap44xx_timer2_addrs,
3046 .addr_cnt = ARRAY_SIZE(omap44xx_timer2_addrs),
3047 .user = OCP_USER_MPU | OCP_USER_SDMA,
3048};
3049
3050/* timer2 slave ports */
3051static struct omap_hwmod_ocp_if *omap44xx_timer2_slaves[] = {
3052 &omap44xx_l4_per__timer2,
3053};
3054
3055static struct omap_hwmod omap44xx_timer2_hwmod = {
3056 .name = "timer2",
3057 .class = &omap44xx_timer_1ms_hwmod_class,
3058 .mpu_irqs = omap44xx_timer2_irqs,
3059 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_timer2_irqs),
3060 .main_clk = "timer2_fck",
3061 .prcm = {
3062 .omap4 = {
3063 .clkctrl_reg = OMAP4430_CM_L4PER_DMTIMER2_CLKCTRL,
3064 },
3065 },
3066 .slaves = omap44xx_timer2_slaves,
3067 .slaves_cnt = ARRAY_SIZE(omap44xx_timer2_slaves),
3068 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3069};
3070
3071/* timer3 */
3072static struct omap_hwmod omap44xx_timer3_hwmod;
3073static struct omap_hwmod_irq_info omap44xx_timer3_irqs[] = {
3074 { .irq = 39 + OMAP44XX_IRQ_GIC_START },
3075};
3076
3077static struct omap_hwmod_addr_space omap44xx_timer3_addrs[] = {
3078 {
3079 .pa_start = 0x48034000,
3080 .pa_end = 0x4803407f,
3081 .flags = ADDR_TYPE_RT
3082 },
3083};
3084
3085/* l4_per -> timer3 */
3086static struct omap_hwmod_ocp_if omap44xx_l4_per__timer3 = {
3087 .master = &omap44xx_l4_per_hwmod,
3088 .slave = &omap44xx_timer3_hwmod,
3089 .clk = "l4_div_ck",
3090 .addr = omap44xx_timer3_addrs,
3091 .addr_cnt = ARRAY_SIZE(omap44xx_timer3_addrs),
3092 .user = OCP_USER_MPU | OCP_USER_SDMA,
3093};
3094
3095/* timer3 slave ports */
3096static struct omap_hwmod_ocp_if *omap44xx_timer3_slaves[] = {
3097 &omap44xx_l4_per__timer3,
3098};
3099
3100static struct omap_hwmod omap44xx_timer3_hwmod = {
3101 .name = "timer3",
3102 .class = &omap44xx_timer_hwmod_class,
3103 .mpu_irqs = omap44xx_timer3_irqs,
3104 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_timer3_irqs),
3105 .main_clk = "timer3_fck",
3106 .prcm = {
3107 .omap4 = {
3108 .clkctrl_reg = OMAP4430_CM_L4PER_DMTIMER3_CLKCTRL,
3109 },
3110 },
3111 .slaves = omap44xx_timer3_slaves,
3112 .slaves_cnt = ARRAY_SIZE(omap44xx_timer3_slaves),
3113 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3114};
3115
3116/* timer4 */
3117static struct omap_hwmod omap44xx_timer4_hwmod;
3118static struct omap_hwmod_irq_info omap44xx_timer4_irqs[] = {
3119 { .irq = 40 + OMAP44XX_IRQ_GIC_START },
3120};
3121
3122static struct omap_hwmod_addr_space omap44xx_timer4_addrs[] = {
3123 {
3124 .pa_start = 0x48036000,
3125 .pa_end = 0x4803607f,
3126 .flags = ADDR_TYPE_RT
3127 },
3128};
3129
3130/* l4_per -> timer4 */
3131static struct omap_hwmod_ocp_if omap44xx_l4_per__timer4 = {
3132 .master = &omap44xx_l4_per_hwmod,
3133 .slave = &omap44xx_timer4_hwmod,
3134 .clk = "l4_div_ck",
3135 .addr = omap44xx_timer4_addrs,
3136 .addr_cnt = ARRAY_SIZE(omap44xx_timer4_addrs),
3137 .user = OCP_USER_MPU | OCP_USER_SDMA,
3138};
3139
3140/* timer4 slave ports */
3141static struct omap_hwmod_ocp_if *omap44xx_timer4_slaves[] = {
3142 &omap44xx_l4_per__timer4,
3143};
3144
3145static struct omap_hwmod omap44xx_timer4_hwmod = {
3146 .name = "timer4",
3147 .class = &omap44xx_timer_hwmod_class,
3148 .mpu_irqs = omap44xx_timer4_irqs,
3149 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_timer4_irqs),
3150 .main_clk = "timer4_fck",
3151 .prcm = {
3152 .omap4 = {
3153 .clkctrl_reg = OMAP4430_CM_L4PER_DMTIMER4_CLKCTRL,
3154 },
3155 },
3156 .slaves = omap44xx_timer4_slaves,
3157 .slaves_cnt = ARRAY_SIZE(omap44xx_timer4_slaves),
3158 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3159};
3160
3161/* timer5 */
3162static struct omap_hwmod omap44xx_timer5_hwmod;
3163static struct omap_hwmod_irq_info omap44xx_timer5_irqs[] = {
3164 { .irq = 41 + OMAP44XX_IRQ_GIC_START },
3165};
3166
3167static struct omap_hwmod_addr_space omap44xx_timer5_addrs[] = {
3168 {
3169 .pa_start = 0x40138000,
3170 .pa_end = 0x4013807f,
3171 .flags = ADDR_TYPE_RT
3172 },
3173};
3174
3175/* l4_abe -> timer5 */
3176static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer5 = {
3177 .master = &omap44xx_l4_abe_hwmod,
3178 .slave = &omap44xx_timer5_hwmod,
3179 .clk = "ocp_abe_iclk",
3180 .addr = omap44xx_timer5_addrs,
3181 .addr_cnt = ARRAY_SIZE(omap44xx_timer5_addrs),
3182 .user = OCP_USER_MPU,
3183};
3184
3185static struct omap_hwmod_addr_space omap44xx_timer5_dma_addrs[] = {
3186 {
3187 .pa_start = 0x49038000,
3188 .pa_end = 0x4903807f,
3189 .flags = ADDR_TYPE_RT
3190 },
3191};
3192
3193/* l4_abe -> timer5 (dma) */
3194static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer5_dma = {
3195 .master = &omap44xx_l4_abe_hwmod,
3196 .slave = &omap44xx_timer5_hwmod,
3197 .clk = "ocp_abe_iclk",
3198 .addr = omap44xx_timer5_dma_addrs,
3199 .addr_cnt = ARRAY_SIZE(omap44xx_timer5_dma_addrs),
3200 .user = OCP_USER_SDMA,
3201};
3202
3203/* timer5 slave ports */
3204static struct omap_hwmod_ocp_if *omap44xx_timer5_slaves[] = {
3205 &omap44xx_l4_abe__timer5,
3206 &omap44xx_l4_abe__timer5_dma,
3207};
3208
3209static struct omap_hwmod omap44xx_timer5_hwmod = {
3210 .name = "timer5",
3211 .class = &omap44xx_timer_hwmod_class,
3212 .mpu_irqs = omap44xx_timer5_irqs,
3213 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_timer5_irqs),
3214 .main_clk = "timer5_fck",
3215 .prcm = {
3216 .omap4 = {
3217 .clkctrl_reg = OMAP4430_CM1_ABE_TIMER5_CLKCTRL,
3218 },
3219 },
3220 .slaves = omap44xx_timer5_slaves,
3221 .slaves_cnt = ARRAY_SIZE(omap44xx_timer5_slaves),
3222 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3223};
3224
3225/* timer6 */
3226static struct omap_hwmod omap44xx_timer6_hwmod;
3227static struct omap_hwmod_irq_info omap44xx_timer6_irqs[] = {
3228 { .irq = 42 + OMAP44XX_IRQ_GIC_START },
3229};
3230
3231static struct omap_hwmod_addr_space omap44xx_timer6_addrs[] = {
3232 {
3233 .pa_start = 0x4013a000,
3234 .pa_end = 0x4013a07f,
3235 .flags = ADDR_TYPE_RT
3236 },
3237};
3238
3239/* l4_abe -> timer6 */
3240static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer6 = {
3241 .master = &omap44xx_l4_abe_hwmod,
3242 .slave = &omap44xx_timer6_hwmod,
3243 .clk = "ocp_abe_iclk",
3244 .addr = omap44xx_timer6_addrs,
3245 .addr_cnt = ARRAY_SIZE(omap44xx_timer6_addrs),
3246 .user = OCP_USER_MPU,
3247};
3248
3249static struct omap_hwmod_addr_space omap44xx_timer6_dma_addrs[] = {
3250 {
3251 .pa_start = 0x4903a000,
3252 .pa_end = 0x4903a07f,
3253 .flags = ADDR_TYPE_RT
3254 },
3255};
3256
3257/* l4_abe -> timer6 (dma) */
3258static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer6_dma = {
3259 .master = &omap44xx_l4_abe_hwmod,
3260 .slave = &omap44xx_timer6_hwmod,
3261 .clk = "ocp_abe_iclk",
3262 .addr = omap44xx_timer6_dma_addrs,
3263 .addr_cnt = ARRAY_SIZE(omap44xx_timer6_dma_addrs),
3264 .user = OCP_USER_SDMA,
3265};
3266
3267/* timer6 slave ports */
3268static struct omap_hwmod_ocp_if *omap44xx_timer6_slaves[] = {
3269 &omap44xx_l4_abe__timer6,
3270 &omap44xx_l4_abe__timer6_dma,
3271};
3272
3273static struct omap_hwmod omap44xx_timer6_hwmod = {
3274 .name = "timer6",
3275 .class = &omap44xx_timer_hwmod_class,
3276 .mpu_irqs = omap44xx_timer6_irqs,
3277 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_timer6_irqs),
3278 .main_clk = "timer6_fck",
3279 .prcm = {
3280 .omap4 = {
3281 .clkctrl_reg = OMAP4430_CM1_ABE_TIMER6_CLKCTRL,
3282 },
3283 },
3284 .slaves = omap44xx_timer6_slaves,
3285 .slaves_cnt = ARRAY_SIZE(omap44xx_timer6_slaves),
3286 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3287};
3288
3289/* timer7 */
3290static struct omap_hwmod omap44xx_timer7_hwmod;
3291static struct omap_hwmod_irq_info omap44xx_timer7_irqs[] = {
3292 { .irq = 43 + OMAP44XX_IRQ_GIC_START },
3293};
3294
3295static struct omap_hwmod_addr_space omap44xx_timer7_addrs[] = {
3296 {
3297 .pa_start = 0x4013c000,
3298 .pa_end = 0x4013c07f,
3299 .flags = ADDR_TYPE_RT
3300 },
3301};
3302
3303/* l4_abe -> timer7 */
3304static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer7 = {
3305 .master = &omap44xx_l4_abe_hwmod,
3306 .slave = &omap44xx_timer7_hwmod,
3307 .clk = "ocp_abe_iclk",
3308 .addr = omap44xx_timer7_addrs,
3309 .addr_cnt = ARRAY_SIZE(omap44xx_timer7_addrs),
3310 .user = OCP_USER_MPU,
3311};
3312
3313static struct omap_hwmod_addr_space omap44xx_timer7_dma_addrs[] = {
3314 {
3315 .pa_start = 0x4903c000,
3316 .pa_end = 0x4903c07f,
3317 .flags = ADDR_TYPE_RT
3318 },
3319};
3320
3321/* l4_abe -> timer7 (dma) */
3322static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer7_dma = {
3323 .master = &omap44xx_l4_abe_hwmod,
3324 .slave = &omap44xx_timer7_hwmod,
3325 .clk = "ocp_abe_iclk",
3326 .addr = omap44xx_timer7_dma_addrs,
3327 .addr_cnt = ARRAY_SIZE(omap44xx_timer7_dma_addrs),
3328 .user = OCP_USER_SDMA,
3329};
3330
3331/* timer7 slave ports */
3332static struct omap_hwmod_ocp_if *omap44xx_timer7_slaves[] = {
3333 &omap44xx_l4_abe__timer7,
3334 &omap44xx_l4_abe__timer7_dma,
3335};
3336
3337static struct omap_hwmod omap44xx_timer7_hwmod = {
3338 .name = "timer7",
3339 .class = &omap44xx_timer_hwmod_class,
3340 .mpu_irqs = omap44xx_timer7_irqs,
3341 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_timer7_irqs),
3342 .main_clk = "timer7_fck",
3343 .prcm = {
3344 .omap4 = {
3345 .clkctrl_reg = OMAP4430_CM1_ABE_TIMER7_CLKCTRL,
3346 },
3347 },
3348 .slaves = omap44xx_timer7_slaves,
3349 .slaves_cnt = ARRAY_SIZE(omap44xx_timer7_slaves),
3350 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3351};
3352
3353/* timer8 */
3354static struct omap_hwmod omap44xx_timer8_hwmod;
3355static struct omap_hwmod_irq_info omap44xx_timer8_irqs[] = {
3356 { .irq = 44 + OMAP44XX_IRQ_GIC_START },
3357};
3358
3359static struct omap_hwmod_addr_space omap44xx_timer8_addrs[] = {
3360 {
3361 .pa_start = 0x4013e000,
3362 .pa_end = 0x4013e07f,
3363 .flags = ADDR_TYPE_RT
3364 },
3365};
3366
3367/* l4_abe -> timer8 */
3368static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer8 = {
3369 .master = &omap44xx_l4_abe_hwmod,
3370 .slave = &omap44xx_timer8_hwmod,
3371 .clk = "ocp_abe_iclk",
3372 .addr = omap44xx_timer8_addrs,
3373 .addr_cnt = ARRAY_SIZE(omap44xx_timer8_addrs),
3374 .user = OCP_USER_MPU,
3375};
3376
3377static struct omap_hwmod_addr_space omap44xx_timer8_dma_addrs[] = {
3378 {
3379 .pa_start = 0x4903e000,
3380 .pa_end = 0x4903e07f,
3381 .flags = ADDR_TYPE_RT
3382 },
3383};
3384
3385/* l4_abe -> timer8 (dma) */
3386static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer8_dma = {
3387 .master = &omap44xx_l4_abe_hwmod,
3388 .slave = &omap44xx_timer8_hwmod,
3389 .clk = "ocp_abe_iclk",
3390 .addr = omap44xx_timer8_dma_addrs,
3391 .addr_cnt = ARRAY_SIZE(omap44xx_timer8_dma_addrs),
3392 .user = OCP_USER_SDMA,
3393};
3394
3395/* timer8 slave ports */
3396static struct omap_hwmod_ocp_if *omap44xx_timer8_slaves[] = {
3397 &omap44xx_l4_abe__timer8,
3398 &omap44xx_l4_abe__timer8_dma,
3399};
3400
3401static struct omap_hwmod omap44xx_timer8_hwmod = {
3402 .name = "timer8",
3403 .class = &omap44xx_timer_hwmod_class,
3404 .mpu_irqs = omap44xx_timer8_irqs,
3405 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_timer8_irqs),
3406 .main_clk = "timer8_fck",
3407 .prcm = {
3408 .omap4 = {
3409 .clkctrl_reg = OMAP4430_CM1_ABE_TIMER8_CLKCTRL,
3410 },
3411 },
3412 .slaves = omap44xx_timer8_slaves,
3413 .slaves_cnt = ARRAY_SIZE(omap44xx_timer8_slaves),
3414 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3415};
3416
3417/* timer9 */
3418static struct omap_hwmod omap44xx_timer9_hwmod;
3419static struct omap_hwmod_irq_info omap44xx_timer9_irqs[] = {
3420 { .irq = 45 + OMAP44XX_IRQ_GIC_START },
3421};
3422
3423static struct omap_hwmod_addr_space omap44xx_timer9_addrs[] = {
3424 {
3425 .pa_start = 0x4803e000,
3426 .pa_end = 0x4803e07f,
3427 .flags = ADDR_TYPE_RT
3428 },
3429};
3430
3431/* l4_per -> timer9 */
3432static struct omap_hwmod_ocp_if omap44xx_l4_per__timer9 = {
3433 .master = &omap44xx_l4_per_hwmod,
3434 .slave = &omap44xx_timer9_hwmod,
3435 .clk = "l4_div_ck",
3436 .addr = omap44xx_timer9_addrs,
3437 .addr_cnt = ARRAY_SIZE(omap44xx_timer9_addrs),
3438 .user = OCP_USER_MPU | OCP_USER_SDMA,
3439};
3440
3441/* timer9 slave ports */
3442static struct omap_hwmod_ocp_if *omap44xx_timer9_slaves[] = {
3443 &omap44xx_l4_per__timer9,
3444};
3445
3446static struct omap_hwmod omap44xx_timer9_hwmod = {
3447 .name = "timer9",
3448 .class = &omap44xx_timer_hwmod_class,
3449 .mpu_irqs = omap44xx_timer9_irqs,
3450 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_timer9_irqs),
3451 .main_clk = "timer9_fck",
3452 .prcm = {
3453 .omap4 = {
3454 .clkctrl_reg = OMAP4430_CM_L4PER_DMTIMER9_CLKCTRL,
3455 },
3456 },
3457 .slaves = omap44xx_timer9_slaves,
3458 .slaves_cnt = ARRAY_SIZE(omap44xx_timer9_slaves),
3459 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3460};
3461
3462/* timer10 */
3463static struct omap_hwmod omap44xx_timer10_hwmod;
3464static struct omap_hwmod_irq_info omap44xx_timer10_irqs[] = {
3465 { .irq = 46 + OMAP44XX_IRQ_GIC_START },
3466};
3467
3468static struct omap_hwmod_addr_space omap44xx_timer10_addrs[] = {
3469 {
3470 .pa_start = 0x48086000,
3471 .pa_end = 0x4808607f,
3472 .flags = ADDR_TYPE_RT
3473 },
3474};
3475
3476/* l4_per -> timer10 */
3477static struct omap_hwmod_ocp_if omap44xx_l4_per__timer10 = {
3478 .master = &omap44xx_l4_per_hwmod,
3479 .slave = &omap44xx_timer10_hwmod,
3480 .clk = "l4_div_ck",
3481 .addr = omap44xx_timer10_addrs,
3482 .addr_cnt = ARRAY_SIZE(omap44xx_timer10_addrs),
3483 .user = OCP_USER_MPU | OCP_USER_SDMA,
3484};
3485
3486/* timer10 slave ports */
3487static struct omap_hwmod_ocp_if *omap44xx_timer10_slaves[] = {
3488 &omap44xx_l4_per__timer10,
3489};
3490
3491static struct omap_hwmod omap44xx_timer10_hwmod = {
3492 .name = "timer10",
3493 .class = &omap44xx_timer_1ms_hwmod_class,
3494 .mpu_irqs = omap44xx_timer10_irqs,
3495 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_timer10_irqs),
3496 .main_clk = "timer10_fck",
3497 .prcm = {
3498 .omap4 = {
3499 .clkctrl_reg = OMAP4430_CM_L4PER_DMTIMER10_CLKCTRL,
3500 },
3501 },
3502 .slaves = omap44xx_timer10_slaves,
3503 .slaves_cnt = ARRAY_SIZE(omap44xx_timer10_slaves),
3504 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3505};
3506
3507/* timer11 */
3508static struct omap_hwmod omap44xx_timer11_hwmod;
3509static struct omap_hwmod_irq_info omap44xx_timer11_irqs[] = {
3510 { .irq = 47 + OMAP44XX_IRQ_GIC_START },
3511};
3512
3513static struct omap_hwmod_addr_space omap44xx_timer11_addrs[] = {
3514 {
3515 .pa_start = 0x48088000,
3516 .pa_end = 0x4808807f,
3517 .flags = ADDR_TYPE_RT
3518 },
3519};
3520
3521/* l4_per -> timer11 */
3522static struct omap_hwmod_ocp_if omap44xx_l4_per__timer11 = {
3523 .master = &omap44xx_l4_per_hwmod,
3524 .slave = &omap44xx_timer11_hwmod,
3525 .clk = "l4_div_ck",
3526 .addr = omap44xx_timer11_addrs,
3527 .addr_cnt = ARRAY_SIZE(omap44xx_timer11_addrs),
3528 .user = OCP_USER_MPU | OCP_USER_SDMA,
3529};
3530
3531/* timer11 slave ports */
3532static struct omap_hwmod_ocp_if *omap44xx_timer11_slaves[] = {
3533 &omap44xx_l4_per__timer11,
3534};
3535
3536static struct omap_hwmod omap44xx_timer11_hwmod = {
3537 .name = "timer11",
3538 .class = &omap44xx_timer_hwmod_class,
3539 .mpu_irqs = omap44xx_timer11_irqs,
3540 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_timer11_irqs),
3541 .main_clk = "timer11_fck",
3542 .prcm = {
3543 .omap4 = {
3544 .clkctrl_reg = OMAP4430_CM_L4PER_DMTIMER11_CLKCTRL,
3545 },
3546 },
3547 .slaves = omap44xx_timer11_slaves,
3548 .slaves_cnt = ARRAY_SIZE(omap44xx_timer11_slaves),
3549 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3550};
3551
9780a9cf 3552/*
3b54baad
BC
3553 * 'uart' class
3554 * universal asynchronous receiver/transmitter (uart)
9780a9cf
BC
3555 */
3556
3b54baad
BC
3557static struct omap_hwmod_class_sysconfig omap44xx_uart_sysc = {
3558 .rev_offs = 0x0050,
3559 .sysc_offs = 0x0054,
3560 .syss_offs = 0x0058,
3561 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_ENAWAKEUP |
0cfe8751
BC
3562 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
3563 SYSS_HAS_RESET_STATUS),
7cffa6b8
BC
3564 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
3565 SIDLE_SMART_WKUP),
9780a9cf
BC
3566 .sysc_fields = &omap_hwmod_sysc_type1,
3567};
3568
3b54baad 3569static struct omap_hwmod_class omap44xx_uart_hwmod_class = {
fe13471c
BC
3570 .name = "uart",
3571 .sysc = &omap44xx_uart_sysc,
9780a9cf
BC
3572};
3573
3b54baad
BC
3574/* uart1 */
3575static struct omap_hwmod omap44xx_uart1_hwmod;
3576static struct omap_hwmod_irq_info omap44xx_uart1_irqs[] = {
3577 { .irq = 72 + OMAP44XX_IRQ_GIC_START },
9780a9cf
BC
3578};
3579
3b54baad
BC
3580static struct omap_hwmod_dma_info omap44xx_uart1_sdma_reqs[] = {
3581 { .name = "tx", .dma_req = 48 + OMAP44XX_DMA_REQ_START },
3582 { .name = "rx", .dma_req = 49 + OMAP44XX_DMA_REQ_START },
9780a9cf
BC
3583};
3584
3b54baad 3585static struct omap_hwmod_addr_space omap44xx_uart1_addrs[] = {
9780a9cf 3586 {
3b54baad
BC
3587 .pa_start = 0x4806a000,
3588 .pa_end = 0x4806a0ff,
9780a9cf
BC
3589 .flags = ADDR_TYPE_RT
3590 },
3591};
3592
3b54baad
BC
3593/* l4_per -> uart1 */
3594static struct omap_hwmod_ocp_if omap44xx_l4_per__uart1 = {
3595 .master = &omap44xx_l4_per_hwmod,
3596 .slave = &omap44xx_uart1_hwmod,
3597 .clk = "l4_div_ck",
3598 .addr = omap44xx_uart1_addrs,
3599 .addr_cnt = ARRAY_SIZE(omap44xx_uart1_addrs),
9780a9cf
BC
3600 .user = OCP_USER_MPU | OCP_USER_SDMA,
3601};
3602
3b54baad
BC
3603/* uart1 slave ports */
3604static struct omap_hwmod_ocp_if *omap44xx_uart1_slaves[] = {
3605 &omap44xx_l4_per__uart1,
9780a9cf
BC
3606};
3607
3b54baad
BC
3608static struct omap_hwmod omap44xx_uart1_hwmod = {
3609 .name = "uart1",
3610 .class = &omap44xx_uart_hwmod_class,
3611 .mpu_irqs = omap44xx_uart1_irqs,
3612 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_uart1_irqs),
3613 .sdma_reqs = omap44xx_uart1_sdma_reqs,
3614 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_uart1_sdma_reqs),
3615 .main_clk = "uart1_fck",
9780a9cf
BC
3616 .prcm = {
3617 .omap4 = {
3b54baad 3618 .clkctrl_reg = OMAP4430_CM_L4PER_UART1_CLKCTRL,
9780a9cf
BC
3619 },
3620 },
3b54baad
BC
3621 .slaves = omap44xx_uart1_slaves,
3622 .slaves_cnt = ARRAY_SIZE(omap44xx_uart1_slaves),
9780a9cf
BC
3623 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3624};
3625
3b54baad
BC
3626/* uart2 */
3627static struct omap_hwmod omap44xx_uart2_hwmod;
3628static struct omap_hwmod_irq_info omap44xx_uart2_irqs[] = {
3629 { .irq = 73 + OMAP44XX_IRQ_GIC_START },
9780a9cf
BC
3630};
3631
3b54baad
BC
3632static struct omap_hwmod_dma_info omap44xx_uart2_sdma_reqs[] = {
3633 { .name = "tx", .dma_req = 50 + OMAP44XX_DMA_REQ_START },
3634 { .name = "rx", .dma_req = 51 + OMAP44XX_DMA_REQ_START },
3635};
3636
3637static struct omap_hwmod_addr_space omap44xx_uart2_addrs[] = {
9780a9cf 3638 {
3b54baad
BC
3639 .pa_start = 0x4806c000,
3640 .pa_end = 0x4806c0ff,
9780a9cf
BC
3641 .flags = ADDR_TYPE_RT
3642 },
3643};
3644
3b54baad
BC
3645/* l4_per -> uart2 */
3646static struct omap_hwmod_ocp_if omap44xx_l4_per__uart2 = {
9780a9cf 3647 .master = &omap44xx_l4_per_hwmod,
3b54baad
BC
3648 .slave = &omap44xx_uart2_hwmod,
3649 .clk = "l4_div_ck",
3650 .addr = omap44xx_uart2_addrs,
3651 .addr_cnt = ARRAY_SIZE(omap44xx_uart2_addrs),
9780a9cf
BC
3652 .user = OCP_USER_MPU | OCP_USER_SDMA,
3653};
3654
3b54baad
BC
3655/* uart2 slave ports */
3656static struct omap_hwmod_ocp_if *omap44xx_uart2_slaves[] = {
3657 &omap44xx_l4_per__uart2,
9780a9cf
BC
3658};
3659
3b54baad
BC
3660static struct omap_hwmod omap44xx_uart2_hwmod = {
3661 .name = "uart2",
3662 .class = &omap44xx_uart_hwmod_class,
3663 .mpu_irqs = omap44xx_uart2_irqs,
3664 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_uart2_irqs),
3665 .sdma_reqs = omap44xx_uart2_sdma_reqs,
3666 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_uart2_sdma_reqs),
3667 .main_clk = "uart2_fck",
9780a9cf
BC
3668 .prcm = {
3669 .omap4 = {
3b54baad 3670 .clkctrl_reg = OMAP4430_CM_L4PER_UART2_CLKCTRL,
9780a9cf
BC
3671 },
3672 },
3b54baad
BC
3673 .slaves = omap44xx_uart2_slaves,
3674 .slaves_cnt = ARRAY_SIZE(omap44xx_uart2_slaves),
9780a9cf
BC
3675 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3676};
3677
3b54baad
BC
3678/* uart3 */
3679static struct omap_hwmod omap44xx_uart3_hwmod;
3680static struct omap_hwmod_irq_info omap44xx_uart3_irqs[] = {
3681 { .irq = 74 + OMAP44XX_IRQ_GIC_START },
9780a9cf
BC
3682};
3683
3b54baad
BC
3684static struct omap_hwmod_dma_info omap44xx_uart3_sdma_reqs[] = {
3685 { .name = "tx", .dma_req = 52 + OMAP44XX_DMA_REQ_START },
3686 { .name = "rx", .dma_req = 53 + OMAP44XX_DMA_REQ_START },
3687};
3688
3689static struct omap_hwmod_addr_space omap44xx_uart3_addrs[] = {
9780a9cf 3690 {
3b54baad
BC
3691 .pa_start = 0x48020000,
3692 .pa_end = 0x480200ff,
9780a9cf
BC
3693 .flags = ADDR_TYPE_RT
3694 },
3695};
3696
3b54baad
BC
3697/* l4_per -> uart3 */
3698static struct omap_hwmod_ocp_if omap44xx_l4_per__uart3 = {
9780a9cf 3699 .master = &omap44xx_l4_per_hwmod,
3b54baad
BC
3700 .slave = &omap44xx_uart3_hwmod,
3701 .clk = "l4_div_ck",
3702 .addr = omap44xx_uart3_addrs,
3703 .addr_cnt = ARRAY_SIZE(omap44xx_uart3_addrs),
9780a9cf
BC
3704 .user = OCP_USER_MPU | OCP_USER_SDMA,
3705};
3706
3b54baad
BC
3707/* uart3 slave ports */
3708static struct omap_hwmod_ocp_if *omap44xx_uart3_slaves[] = {
3709 &omap44xx_l4_per__uart3,
3710};
3711
3712static struct omap_hwmod omap44xx_uart3_hwmod = {
3713 .name = "uart3",
3714 .class = &omap44xx_uart_hwmod_class,
3715 .flags = (HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET),
3716 .mpu_irqs = omap44xx_uart3_irqs,
3717 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_uart3_irqs),
3718 .sdma_reqs = omap44xx_uart3_sdma_reqs,
3719 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_uart3_sdma_reqs),
3720 .main_clk = "uart3_fck",
9780a9cf
BC
3721 .prcm = {
3722 .omap4 = {
3b54baad 3723 .clkctrl_reg = OMAP4430_CM_L4PER_UART3_CLKCTRL,
9780a9cf
BC
3724 },
3725 },
3b54baad
BC
3726 .slaves = omap44xx_uart3_slaves,
3727 .slaves_cnt = ARRAY_SIZE(omap44xx_uart3_slaves),
9780a9cf
BC
3728 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3729};
3730
3b54baad
BC
3731/* uart4 */
3732static struct omap_hwmod omap44xx_uart4_hwmod;
3733static struct omap_hwmod_irq_info omap44xx_uart4_irqs[] = {
3734 { .irq = 70 + OMAP44XX_IRQ_GIC_START },
9780a9cf
BC
3735};
3736
3b54baad
BC
3737static struct omap_hwmod_dma_info omap44xx_uart4_sdma_reqs[] = {
3738 { .name = "tx", .dma_req = 54 + OMAP44XX_DMA_REQ_START },
3739 { .name = "rx", .dma_req = 55 + OMAP44XX_DMA_REQ_START },
3740};
3741
3742static struct omap_hwmod_addr_space omap44xx_uart4_addrs[] = {
9780a9cf 3743 {
3b54baad
BC
3744 .pa_start = 0x4806e000,
3745 .pa_end = 0x4806e0ff,
9780a9cf
BC
3746 .flags = ADDR_TYPE_RT
3747 },
3748};
3749
3b54baad
BC
3750/* l4_per -> uart4 */
3751static struct omap_hwmod_ocp_if omap44xx_l4_per__uart4 = {
9780a9cf 3752 .master = &omap44xx_l4_per_hwmod,
3b54baad
BC
3753 .slave = &omap44xx_uart4_hwmod,
3754 .clk = "l4_div_ck",
3755 .addr = omap44xx_uart4_addrs,
3756 .addr_cnt = ARRAY_SIZE(omap44xx_uart4_addrs),
9780a9cf
BC
3757 .user = OCP_USER_MPU | OCP_USER_SDMA,
3758};
3759
3b54baad
BC
3760/* uart4 slave ports */
3761static struct omap_hwmod_ocp_if *omap44xx_uart4_slaves[] = {
3762 &omap44xx_l4_per__uart4,
9780a9cf
BC
3763};
3764
3b54baad
BC
3765static struct omap_hwmod omap44xx_uart4_hwmod = {
3766 .name = "uart4",
3767 .class = &omap44xx_uart_hwmod_class,
3768 .mpu_irqs = omap44xx_uart4_irqs,
3769 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_uart4_irqs),
3770 .sdma_reqs = omap44xx_uart4_sdma_reqs,
3771 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_uart4_sdma_reqs),
3772 .main_clk = "uart4_fck",
9780a9cf
BC
3773 .prcm = {
3774 .omap4 = {
3b54baad 3775 .clkctrl_reg = OMAP4430_CM_L4PER_UART4_CLKCTRL,
9780a9cf
BC
3776 },
3777 },
3b54baad
BC
3778 .slaves = omap44xx_uart4_slaves,
3779 .slaves_cnt = ARRAY_SIZE(omap44xx_uart4_slaves),
9780a9cf
BC
3780 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3781};
3782
3b54baad
BC
3783/*
3784 * 'wd_timer' class
3785 * 32-bit watchdog upward counter that generates a pulse on the reset pin on
3786 * overflow condition
3787 */
3788
3789static struct omap_hwmod_class_sysconfig omap44xx_wd_timer_sysc = {
3790 .rev_offs = 0x0000,
3791 .sysc_offs = 0x0010,
3792 .syss_offs = 0x0014,
3793 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_SIDLEMODE |
0cfe8751 3794 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
7cffa6b8
BC
3795 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
3796 SIDLE_SMART_WKUP),
3b54baad 3797 .sysc_fields = &omap_hwmod_sysc_type1,
9780a9cf
BC
3798};
3799
3b54baad
BC
3800static struct omap_hwmod_class omap44xx_wd_timer_hwmod_class = {
3801 .name = "wd_timer",
3802 .sysc = &omap44xx_wd_timer_sysc,
fe13471c 3803 .pre_shutdown = &omap2_wd_timer_disable,
3b54baad
BC
3804};
3805
3806/* wd_timer2 */
3807static struct omap_hwmod omap44xx_wd_timer2_hwmod;
3808static struct omap_hwmod_irq_info omap44xx_wd_timer2_irqs[] = {
3809 { .irq = 80 + OMAP44XX_IRQ_GIC_START },
3810};
3811
3812static struct omap_hwmod_addr_space omap44xx_wd_timer2_addrs[] = {
9780a9cf 3813 {
3b54baad
BC
3814 .pa_start = 0x4a314000,
3815 .pa_end = 0x4a31407f,
9780a9cf
BC
3816 .flags = ADDR_TYPE_RT
3817 },
3818};
3819
3b54baad
BC
3820/* l4_wkup -> wd_timer2 */
3821static struct omap_hwmod_ocp_if omap44xx_l4_wkup__wd_timer2 = {
3822 .master = &omap44xx_l4_wkup_hwmod,
3823 .slave = &omap44xx_wd_timer2_hwmod,
3824 .clk = "l4_wkup_clk_mux_ck",
3825 .addr = omap44xx_wd_timer2_addrs,
3826 .addr_cnt = ARRAY_SIZE(omap44xx_wd_timer2_addrs),
9780a9cf
BC
3827 .user = OCP_USER_MPU | OCP_USER_SDMA,
3828};
3829
3b54baad
BC
3830/* wd_timer2 slave ports */
3831static struct omap_hwmod_ocp_if *omap44xx_wd_timer2_slaves[] = {
3832 &omap44xx_l4_wkup__wd_timer2,
9780a9cf
BC
3833};
3834
3b54baad
BC
3835static struct omap_hwmod omap44xx_wd_timer2_hwmod = {
3836 .name = "wd_timer2",
3837 .class = &omap44xx_wd_timer_hwmod_class,
3838 .mpu_irqs = omap44xx_wd_timer2_irqs,
3839 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_wd_timer2_irqs),
3840 .main_clk = "wd_timer2_fck",
9780a9cf
BC
3841 .prcm = {
3842 .omap4 = {
3b54baad 3843 .clkctrl_reg = OMAP4430_CM_WKUP_WDT2_CLKCTRL,
9780a9cf
BC
3844 },
3845 },
3b54baad
BC
3846 .slaves = omap44xx_wd_timer2_slaves,
3847 .slaves_cnt = ARRAY_SIZE(omap44xx_wd_timer2_slaves),
9780a9cf
BC
3848 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3849};
3850
3b54baad
BC
3851/* wd_timer3 */
3852static struct omap_hwmod omap44xx_wd_timer3_hwmod;
3853static struct omap_hwmod_irq_info omap44xx_wd_timer3_irqs[] = {
3854 { .irq = 36 + OMAP44XX_IRQ_GIC_START },
9780a9cf
BC
3855};
3856
3b54baad 3857static struct omap_hwmod_addr_space omap44xx_wd_timer3_addrs[] = {
9780a9cf 3858 {
3b54baad
BC
3859 .pa_start = 0x40130000,
3860 .pa_end = 0x4013007f,
9780a9cf
BC
3861 .flags = ADDR_TYPE_RT
3862 },
3863};
3864
3b54baad
BC
3865/* l4_abe -> wd_timer3 */
3866static struct omap_hwmod_ocp_if omap44xx_l4_abe__wd_timer3 = {
3867 .master = &omap44xx_l4_abe_hwmod,
3868 .slave = &omap44xx_wd_timer3_hwmod,
3869 .clk = "ocp_abe_iclk",
3870 .addr = omap44xx_wd_timer3_addrs,
3871 .addr_cnt = ARRAY_SIZE(omap44xx_wd_timer3_addrs),
3872 .user = OCP_USER_MPU,
9780a9cf
BC
3873};
3874
3b54baad
BC
3875static struct omap_hwmod_addr_space omap44xx_wd_timer3_dma_addrs[] = {
3876 {
3877 .pa_start = 0x49030000,
3878 .pa_end = 0x4903007f,
3879 .flags = ADDR_TYPE_RT
3880 },
9780a9cf
BC
3881};
3882
3b54baad
BC
3883/* l4_abe -> wd_timer3 (dma) */
3884static struct omap_hwmod_ocp_if omap44xx_l4_abe__wd_timer3_dma = {
3885 .master = &omap44xx_l4_abe_hwmod,
3886 .slave = &omap44xx_wd_timer3_hwmod,
3887 .clk = "ocp_abe_iclk",
3888 .addr = omap44xx_wd_timer3_dma_addrs,
3889 .addr_cnt = ARRAY_SIZE(omap44xx_wd_timer3_dma_addrs),
3890 .user = OCP_USER_SDMA,
9780a9cf
BC
3891};
3892
3b54baad
BC
3893/* wd_timer3 slave ports */
3894static struct omap_hwmod_ocp_if *omap44xx_wd_timer3_slaves[] = {
3895 &omap44xx_l4_abe__wd_timer3,
3896 &omap44xx_l4_abe__wd_timer3_dma,
3897};
3898
3899static struct omap_hwmod omap44xx_wd_timer3_hwmod = {
3900 .name = "wd_timer3",
3901 .class = &omap44xx_wd_timer_hwmod_class,
3902 .mpu_irqs = omap44xx_wd_timer3_irqs,
3903 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_wd_timer3_irqs),
3904 .main_clk = "wd_timer3_fck",
9780a9cf
BC
3905 .prcm = {
3906 .omap4 = {
3b54baad 3907 .clkctrl_reg = OMAP4430_CM1_ABE_WDT3_CLKCTRL,
9780a9cf
BC
3908 },
3909 },
3b54baad
BC
3910 .slaves = omap44xx_wd_timer3_slaves,
3911 .slaves_cnt = ARRAY_SIZE(omap44xx_wd_timer3_slaves),
9780a9cf
BC
3912 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3913};
531ce0d5 3914
55d2cb08 3915static __initdata struct omap_hwmod *omap44xx_hwmods[] = {
fe13471c 3916
55d2cb08
BC
3917 /* dmm class */
3918 &omap44xx_dmm_hwmod,
3b54baad 3919
55d2cb08
BC
3920 /* emif_fw class */
3921 &omap44xx_emif_fw_hwmod,
3b54baad 3922
55d2cb08
BC
3923 /* l3 class */
3924 &omap44xx_l3_instr_hwmod,
3925 &omap44xx_l3_main_1_hwmod,
3926 &omap44xx_l3_main_2_hwmod,
3927 &omap44xx_l3_main_3_hwmod,
3b54baad 3928
55d2cb08
BC
3929 /* l4 class */
3930 &omap44xx_l4_abe_hwmod,
3931 &omap44xx_l4_cfg_hwmod,
3932 &omap44xx_l4_per_hwmod,
3933 &omap44xx_l4_wkup_hwmod,
531ce0d5 3934
55d2cb08
BC
3935 /* mpu_bus class */
3936 &omap44xx_mpu_private_hwmod,
3937
d7cf5f33
BC
3938 /* dma class */
3939 &omap44xx_dma_system_hwmod,
3940
8ca476da
BC
3941 /* dmic class */
3942 &omap44xx_dmic_hwmod,
3943
8f25bdc5
BC
3944 /* dsp class */
3945 &omap44xx_dsp_hwmod,
3946 &omap44xx_dsp_c0_hwmod,
3947
d63bd74f
BC
3948 /* dss class */
3949 &omap44xx_dss_hwmod,
3950 &omap44xx_dss_dispc_hwmod,
3951 &omap44xx_dss_dsi1_hwmod,
3952 &omap44xx_dss_dsi2_hwmod,
3953 &omap44xx_dss_hdmi_hwmod,
3954 &omap44xx_dss_rfbi_hwmod,
3955 &omap44xx_dss_venc_hwmod,
3956
9780a9cf
BC
3957 /* gpio class */
3958 &omap44xx_gpio1_hwmod,
3959 &omap44xx_gpio2_hwmod,
3960 &omap44xx_gpio3_hwmod,
3961 &omap44xx_gpio4_hwmod,
3962 &omap44xx_gpio5_hwmod,
3963 &omap44xx_gpio6_hwmod,
3964
3b54baad
BC
3965 /* i2c class */
3966 &omap44xx_i2c1_hwmod,
3967 &omap44xx_i2c2_hwmod,
3968 &omap44xx_i2c3_hwmod,
3969 &omap44xx_i2c4_hwmod,
3970
8f25bdc5
BC
3971 /* iva class */
3972 &omap44xx_iva_hwmod,
3973 &omap44xx_iva_seq0_hwmod,
3974 &omap44xx_iva_seq1_hwmod,
3975
ec5df927
BC
3976 /* mailbox class */
3977 &omap44xx_mailbox_hwmod,
3978
4ddff493
BC
3979 /* mcbsp class */
3980 &omap44xx_mcbsp1_hwmod,
3981 &omap44xx_mcbsp2_hwmod,
3982 &omap44xx_mcbsp3_hwmod,
3983 &omap44xx_mcbsp4_hwmod,
3984
9bcbd7f0
BC
3985 /* mcspi class */
3986 &omap44xx_mcspi1_hwmod,
3987 &omap44xx_mcspi2_hwmod,
3988 &omap44xx_mcspi3_hwmod,
3989 &omap44xx_mcspi4_hwmod,
3990
55d2cb08
BC
3991 /* mpu class */
3992 &omap44xx_mpu_hwmod,
db12ba53 3993
1f6a717f
BC
3994 /* smartreflex class */
3995 &omap44xx_smartreflex_core_hwmod,
3996 &omap44xx_smartreflex_iva_hwmod,
3997 &omap44xx_smartreflex_mpu_hwmod,
3998
d11c217f
BC
3999 /* spinlock class */
4000 &omap44xx_spinlock_hwmod,
4001
35d1a66a
BC
4002 /* timer class */
4003 &omap44xx_timer1_hwmod,
4004 &omap44xx_timer2_hwmod,
4005 &omap44xx_timer3_hwmod,
4006 &omap44xx_timer4_hwmod,
4007 &omap44xx_timer5_hwmod,
4008 &omap44xx_timer6_hwmod,
4009 &omap44xx_timer7_hwmod,
4010 &omap44xx_timer8_hwmod,
4011 &omap44xx_timer9_hwmod,
4012 &omap44xx_timer10_hwmod,
4013 &omap44xx_timer11_hwmod,
4014
db12ba53
BC
4015 /* uart class */
4016 &omap44xx_uart1_hwmod,
4017 &omap44xx_uart2_hwmod,
4018 &omap44xx_uart3_hwmod,
4019 &omap44xx_uart4_hwmod,
3b54baad
BC
4020
4021 /* wd_timer class */
4022 &omap44xx_wd_timer2_hwmod,
4023 &omap44xx_wd_timer3_hwmod,
4024
55d2cb08
BC
4025 NULL,
4026};
4027
4028int __init omap44xx_hwmod_init(void)
4029{
4030 return omap_hwmod_init(omap44xx_hwmods);
4031}
4032