blob: aafe60dc711a2f49fe56c66102ec6fe89cc5b2d5 [file] [log] [blame]
Benoit Cousson55d2cb02010-05-12 17:54:36 +02001/*
2 * Hardware modules present on the OMAP44xx chips
3 *
Benoit Coussond63bd742011-01-27 11:17:03 +00004 * Copyright (C) 2009-2011 Texas Instruments, Inc.
Benoit Cousson55d2cb02010-05-12 17:54:36 +02005 * 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>
Benoit Cousson9780a9c2010-12-07 16:26:57 -080025#include <plat/gpio.h>
Benoit Cousson531ce0d2010-12-20 18:27:19 -080026#include <plat/dma.h>
Benoit Cousson55d2cb02010-05-12 17:54:36 +020027
28#include "omap_hwmod_common_data.h"
29
Paul Walmsleyd198b512010-12-21 15:30:54 -070030#include "cm1_44xx.h"
31#include "cm2_44xx.h"
32#include "prm44xx.h"
Benoit Cousson55d2cb02010-05-12 17:54:36 +020033#include "prm-regbits-44xx.h"
Paul Walmsleyff2516f2010-12-21 15:39:15 -070034#include "wd_timer.h"
Benoit Cousson55d2cb02010-05-12 17:54:36 +020035
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) */
Benoit Cousson531ce0d2010-12-20 18:27:19 -080043static struct omap_hwmod omap44xx_dma_system_hwmod;
Benoit Cousson55d2cb02010-05-12 17:54:36 +020044static struct omap_hwmod omap44xx_dmm_hwmod;
Benoit Cousson8f25bdc2010-12-21 21:08:34 -070045static struct omap_hwmod omap44xx_dsp_hwmod;
Benoit Coussond63bd742011-01-27 11:17:03 +000046static struct omap_hwmod omap44xx_dss_hwmod;
Benoit Cousson55d2cb02010-05-12 17:54:36 +020047static struct omap_hwmod omap44xx_emif_fw_hwmod;
Benoit Cousson8f25bdc2010-12-21 21:08:34 -070048static struct omap_hwmod omap44xx_iva_hwmod;
Benoit Cousson55d2cb02010-05-12 17:54:36 +020049static 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 = {
Benoit Coussonfe134712010-12-23 22:30:32 +000070 .name = "dmm",
Benoit Cousson55d2cb02010-05-12 17:54:36 +020071};
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",
Benoit Cousson659fa822010-12-21 21:08:34 -070079 .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 },
Benoit Cousson55d2cb02010-05-12 17:54:36 +020088};
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",
Benoit Cousson659fa822010-12-21 21:08:34 -070095 .addr = omap44xx_dmm_addrs,
96 .addr_cnt = ARRAY_SIZE(omap44xx_dmm_addrs),
97 .user = OCP_USER_MPU,
Benoit Cousson55d2cb02010-05-12 17:54:36 +020098};
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 = {
Benoit Coussonfe134712010-12-23 22:30:32 +0000125 .name = "emif_fw",
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200126};
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
Benoit Cousson659fa822010-12-21 21:08:34 -0700137static 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
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200145/* 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",
Benoit Cousson659fa822010-12-21 21:08:34 -0700150 .addr = omap44xx_emif_fw_addrs,
151 .addr_cnt = ARRAY_SIZE(omap44xx_emif_fw_addrs),
152 .user = OCP_USER_MPU,
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200153};
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 = {
Benoit Coussonfe134712010-12-23 22:30:32 +0000174 .name = "l3",
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200175};
176
177/* l3_instr interface data */
Benoit Cousson8f25bdc2010-12-21 21:08:34 -0700178/* 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
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200186/* 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[] = {
Benoit Cousson8f25bdc2010-12-21 21:08:34 -0700196 &omap44xx_iva__l3_instr,
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200197 &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
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700208/* l3_main_1 interface data */
Benoit Cousson8f25bdc2010-12-21 21:08:34 -0700209/* 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
Benoit Coussond63bd742011-01-27 11:17:03 +0000217/* 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
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200225/* 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[] = {
Benoit Cousson8f25bdc2010-12-21 21:08:34 -0700251 &omap44xx_dsp__l3_main_1,
Benoit Coussond63bd742011-01-27 11:17:03 +0000252 &omap44xx_dss__l3_main_1,
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200253 &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 */
Benoit Coussond7cf5f32010-12-23 22:30:31 +0000267/* 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
Benoit Cousson8f25bdc2010-12-21 21:08:34 -0700275/* 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
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200283/* 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[] = {
Benoit Cousson531ce0d2010-12-20 18:27:19 -0800301 &omap44xx_dma_system__l3_main_2,
Benoit Cousson8f25bdc2010-12-21 21:08:34 -0700302 &omap44xx_iva__l3_main_2,
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200303 &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 = {
Benoit Coussonfe134712010-12-23 22:30:32 +0000360 .name = "l4",
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200361};
362
363/* l4_abe interface data */
Benoit Cousson8f25bdc2010-12-21 21:08:34 -0700364/* 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
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200372/* 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[] = {
Benoit Cousson8f25bdc2010-12-21 21:08:34 -0700390 &omap44xx_dsp__l4_abe,
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200391 &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
469/*
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700470 * 'mpu_bus' class
471 * instance(s): mpu_private
472 */
473static struct omap_hwmod_class omap44xx_mpu_bus_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +0000474 .name = "mpu_bus",
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700475};
476
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
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700519 * dmic
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700520 * efuse_ctrl_cust
521 * efuse_ctrl_std
522 * elm
523 * emif1
524 * emif2
525 * fdif
526 * gpmc
527 * gpu
528 * hdq1w
529 * hsi
530 * ipu
531 * iss
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700532 * kbd
533 * mailbox
534 * mcasp
535 * mcbsp1
536 * mcbsp2
537 * mcbsp3
538 * mcbsp4
539 * mcpdm
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700540 * mmc1
541 * mmc2
542 * mmc3
543 * mmc4
544 * mmc5
545 * mpu_c0
546 * mpu_c1
547 * ocmc_ram
548 * ocp2scp_usb_phy
549 * ocp_wp_noc
550 * prcm
551 * prcm_mpu
552 * prm
553 * scrm
554 * sl2if
555 * slimbus1
556 * slimbus2
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700557 * usb_host_fs
558 * usb_host_hs
559 * usb_otg_hs
560 * usb_phy_cm
561 * usb_tll_hs
562 * usim
563 */
564
565/*
Benoit Coussond7cf5f32010-12-23 22:30:31 +0000566 * 'dma' class
567 * dma controller for data exchange between memory to memory (i.e. internal or
568 * external memory) and gp peripherals to memory or memory to gp peripherals
569 */
570
571static struct omap_hwmod_class_sysconfig omap44xx_dma_sysc = {
572 .rev_offs = 0x0000,
573 .sysc_offs = 0x002c,
574 .syss_offs = 0x0028,
575 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
576 SYSC_HAS_EMUFREE | SYSC_HAS_MIDLEMODE |
577 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
578 SYSS_HAS_RESET_STATUS),
579 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
580 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
581 .sysc_fields = &omap_hwmod_sysc_type1,
582};
583
584static struct omap_hwmod_class omap44xx_dma_hwmod_class = {
585 .name = "dma",
586 .sysc = &omap44xx_dma_sysc,
587};
588
589/* dma dev_attr */
590static struct omap_dma_dev_attr dma_dev_attr = {
591 .dev_caps = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY |
592 IS_CSSA_32 | IS_CDSA_32 | IS_RW_PRIORITY,
593 .lch_count = 32,
594};
595
596/* dma_system */
597static struct omap_hwmod_irq_info omap44xx_dma_system_irqs[] = {
598 { .name = "0", .irq = 12 + OMAP44XX_IRQ_GIC_START },
599 { .name = "1", .irq = 13 + OMAP44XX_IRQ_GIC_START },
600 { .name = "2", .irq = 14 + OMAP44XX_IRQ_GIC_START },
601 { .name = "3", .irq = 15 + OMAP44XX_IRQ_GIC_START },
602};
603
604/* dma_system master ports */
605static struct omap_hwmod_ocp_if *omap44xx_dma_system_masters[] = {
606 &omap44xx_dma_system__l3_main_2,
607};
608
609static struct omap_hwmod_addr_space omap44xx_dma_system_addrs[] = {
610 {
611 .pa_start = 0x4a056000,
612 .pa_end = 0x4a0560ff,
613 .flags = ADDR_TYPE_RT
614 },
615};
616
617/* l4_cfg -> dma_system */
618static struct omap_hwmod_ocp_if omap44xx_l4_cfg__dma_system = {
619 .master = &omap44xx_l4_cfg_hwmod,
620 .slave = &omap44xx_dma_system_hwmod,
621 .clk = "l4_div_ck",
622 .addr = omap44xx_dma_system_addrs,
623 .addr_cnt = ARRAY_SIZE(omap44xx_dma_system_addrs),
624 .user = OCP_USER_MPU | OCP_USER_SDMA,
625};
626
627/* dma_system slave ports */
628static struct omap_hwmod_ocp_if *omap44xx_dma_system_slaves[] = {
629 &omap44xx_l4_cfg__dma_system,
630};
631
632static struct omap_hwmod omap44xx_dma_system_hwmod = {
633 .name = "dma_system",
634 .class = &omap44xx_dma_hwmod_class,
635 .mpu_irqs = omap44xx_dma_system_irqs,
636 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_dma_system_irqs),
637 .main_clk = "l3_div_ck",
638 .prcm = {
639 .omap4 = {
640 .clkctrl_reg = OMAP4430_CM_SDMA_SDMA_CLKCTRL,
641 },
642 },
643 .dev_attr = &dma_dev_attr,
644 .slaves = omap44xx_dma_system_slaves,
645 .slaves_cnt = ARRAY_SIZE(omap44xx_dma_system_slaves),
646 .masters = omap44xx_dma_system_masters,
647 .masters_cnt = ARRAY_SIZE(omap44xx_dma_system_masters),
648 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
649};
650
651/*
Benoit Cousson8f25bdc2010-12-21 21:08:34 -0700652 * 'dsp' class
653 * dsp sub-system
654 */
655
656static struct omap_hwmod_class omap44xx_dsp_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +0000657 .name = "dsp",
Benoit Cousson8f25bdc2010-12-21 21:08:34 -0700658};
659
660/* dsp */
661static struct omap_hwmod_irq_info omap44xx_dsp_irqs[] = {
662 { .irq = 28 + OMAP44XX_IRQ_GIC_START },
663};
664
665static struct omap_hwmod_rst_info omap44xx_dsp_resets[] = {
666 { .name = "mmu_cache", .rst_shift = 1 },
667};
668
669static struct omap_hwmod_rst_info omap44xx_dsp_c0_resets[] = {
670 { .name = "dsp", .rst_shift = 0 },
671};
672
673/* dsp -> iva */
674static struct omap_hwmod_ocp_if omap44xx_dsp__iva = {
675 .master = &omap44xx_dsp_hwmod,
676 .slave = &omap44xx_iva_hwmod,
677 .clk = "dpll_iva_m5x2_ck",
678};
679
680/* dsp master ports */
681static struct omap_hwmod_ocp_if *omap44xx_dsp_masters[] = {
682 &omap44xx_dsp__l3_main_1,
683 &omap44xx_dsp__l4_abe,
684 &omap44xx_dsp__iva,
685};
686
687/* l4_cfg -> dsp */
688static struct omap_hwmod_ocp_if omap44xx_l4_cfg__dsp = {
689 .master = &omap44xx_l4_cfg_hwmod,
690 .slave = &omap44xx_dsp_hwmod,
691 .clk = "l4_div_ck",
692 .user = OCP_USER_MPU | OCP_USER_SDMA,
693};
694
695/* dsp slave ports */
696static struct omap_hwmod_ocp_if *omap44xx_dsp_slaves[] = {
697 &omap44xx_l4_cfg__dsp,
698};
699
700/* Pseudo hwmod for reset control purpose only */
701static struct omap_hwmod omap44xx_dsp_c0_hwmod = {
702 .name = "dsp_c0",
703 .class = &omap44xx_dsp_hwmod_class,
704 .flags = HWMOD_INIT_NO_RESET,
705 .rst_lines = omap44xx_dsp_c0_resets,
706 .rst_lines_cnt = ARRAY_SIZE(omap44xx_dsp_c0_resets),
707 .prcm = {
708 .omap4 = {
709 .rstctrl_reg = OMAP4430_RM_TESLA_RSTCTRL,
710 },
711 },
712 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
713};
714
715static struct omap_hwmod omap44xx_dsp_hwmod = {
716 .name = "dsp",
717 .class = &omap44xx_dsp_hwmod_class,
718 .mpu_irqs = omap44xx_dsp_irqs,
719 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_dsp_irqs),
720 .rst_lines = omap44xx_dsp_resets,
721 .rst_lines_cnt = ARRAY_SIZE(omap44xx_dsp_resets),
722 .main_clk = "dsp_fck",
723 .prcm = {
724 .omap4 = {
725 .clkctrl_reg = OMAP4430_CM_TESLA_TESLA_CLKCTRL,
726 .rstctrl_reg = OMAP4430_RM_TESLA_RSTCTRL,
727 },
728 },
729 .slaves = omap44xx_dsp_slaves,
730 .slaves_cnt = ARRAY_SIZE(omap44xx_dsp_slaves),
731 .masters = omap44xx_dsp_masters,
732 .masters_cnt = ARRAY_SIZE(omap44xx_dsp_masters),
733 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
734};
735
736/*
Benoit Coussond63bd742011-01-27 11:17:03 +0000737 * 'dss' class
738 * display sub-system
739 */
740
741static struct omap_hwmod_class_sysconfig omap44xx_dss_sysc = {
742 .rev_offs = 0x0000,
743 .syss_offs = 0x0014,
744 .sysc_flags = SYSS_HAS_RESET_STATUS,
745};
746
747static struct omap_hwmod_class omap44xx_dss_hwmod_class = {
748 .name = "dss",
749 .sysc = &omap44xx_dss_sysc,
750};
751
752/* dss */
753/* dss master ports */
754static struct omap_hwmod_ocp_if *omap44xx_dss_masters[] = {
755 &omap44xx_dss__l3_main_1,
756};
757
758static struct omap_hwmod_addr_space omap44xx_dss_dma_addrs[] = {
759 {
760 .pa_start = 0x58000000,
761 .pa_end = 0x5800007f,
762 .flags = ADDR_TYPE_RT
763 },
764};
765
766/* l3_main_2 -> dss */
767static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss = {
768 .master = &omap44xx_l3_main_2_hwmod,
769 .slave = &omap44xx_dss_hwmod,
770 .clk = "l3_div_ck",
771 .addr = omap44xx_dss_dma_addrs,
772 .addr_cnt = ARRAY_SIZE(omap44xx_dss_dma_addrs),
773 .user = OCP_USER_SDMA,
774};
775
776static struct omap_hwmod_addr_space omap44xx_dss_addrs[] = {
777 {
778 .pa_start = 0x48040000,
779 .pa_end = 0x4804007f,
780 .flags = ADDR_TYPE_RT
781 },
782};
783
784/* l4_per -> dss */
785static struct omap_hwmod_ocp_if omap44xx_l4_per__dss = {
786 .master = &omap44xx_l4_per_hwmod,
787 .slave = &omap44xx_dss_hwmod,
788 .clk = "l4_div_ck",
789 .addr = omap44xx_dss_addrs,
790 .addr_cnt = ARRAY_SIZE(omap44xx_dss_addrs),
791 .user = OCP_USER_MPU,
792};
793
794/* dss slave ports */
795static struct omap_hwmod_ocp_if *omap44xx_dss_slaves[] = {
796 &omap44xx_l3_main_2__dss,
797 &omap44xx_l4_per__dss,
798};
799
800static struct omap_hwmod_opt_clk dss_opt_clks[] = {
801 { .role = "sys_clk", .clk = "dss_sys_clk" },
802 { .role = "tv_clk", .clk = "dss_tv_clk" },
803 { .role = "dss_clk", .clk = "dss_dss_clk" },
804 { .role = "video_clk", .clk = "dss_48mhz_clk" },
805};
806
807static struct omap_hwmod omap44xx_dss_hwmod = {
808 .name = "dss_core",
809 .class = &omap44xx_dss_hwmod_class,
810 .main_clk = "dss_fck",
811 .prcm = {
812 .omap4 = {
813 .clkctrl_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
814 },
815 },
816 .opt_clks = dss_opt_clks,
817 .opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
818 .slaves = omap44xx_dss_slaves,
819 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_slaves),
820 .masters = omap44xx_dss_masters,
821 .masters_cnt = ARRAY_SIZE(omap44xx_dss_masters),
822 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
823};
824
825/*
826 * 'dispc' class
827 * display controller
828 */
829
830static struct omap_hwmod_class_sysconfig omap44xx_dispc_sysc = {
831 .rev_offs = 0x0000,
832 .sysc_offs = 0x0010,
833 .syss_offs = 0x0014,
834 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
835 SYSC_HAS_ENAWAKEUP | SYSC_HAS_MIDLEMODE |
836 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
837 SYSS_HAS_RESET_STATUS),
838 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
839 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
840 .sysc_fields = &omap_hwmod_sysc_type1,
841};
842
843static struct omap_hwmod_class omap44xx_dispc_hwmod_class = {
844 .name = "dispc",
845 .sysc = &omap44xx_dispc_sysc,
846};
847
848/* dss_dispc */
849static struct omap_hwmod omap44xx_dss_dispc_hwmod;
850static struct omap_hwmod_irq_info omap44xx_dss_dispc_irqs[] = {
851 { .irq = 25 + OMAP44XX_IRQ_GIC_START },
852};
853
854static struct omap_hwmod_dma_info omap44xx_dss_dispc_sdma_reqs[] = {
855 { .dma_req = 5 + OMAP44XX_DMA_REQ_START },
856};
857
858static struct omap_hwmod_addr_space omap44xx_dss_dispc_dma_addrs[] = {
859 {
860 .pa_start = 0x58001000,
861 .pa_end = 0x58001fff,
862 .flags = ADDR_TYPE_RT
863 },
864};
865
866/* l3_main_2 -> dss_dispc */
867static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_dispc = {
868 .master = &omap44xx_l3_main_2_hwmod,
869 .slave = &omap44xx_dss_dispc_hwmod,
870 .clk = "l3_div_ck",
871 .addr = omap44xx_dss_dispc_dma_addrs,
872 .addr_cnt = ARRAY_SIZE(omap44xx_dss_dispc_dma_addrs),
873 .user = OCP_USER_SDMA,
874};
875
876static struct omap_hwmod_addr_space omap44xx_dss_dispc_addrs[] = {
877 {
878 .pa_start = 0x48041000,
879 .pa_end = 0x48041fff,
880 .flags = ADDR_TYPE_RT
881 },
882};
883
884/* l4_per -> dss_dispc */
885static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_dispc = {
886 .master = &omap44xx_l4_per_hwmod,
887 .slave = &omap44xx_dss_dispc_hwmod,
888 .clk = "l4_div_ck",
889 .addr = omap44xx_dss_dispc_addrs,
890 .addr_cnt = ARRAY_SIZE(omap44xx_dss_dispc_addrs),
891 .user = OCP_USER_MPU,
892};
893
894/* dss_dispc slave ports */
895static struct omap_hwmod_ocp_if *omap44xx_dss_dispc_slaves[] = {
896 &omap44xx_l3_main_2__dss_dispc,
897 &omap44xx_l4_per__dss_dispc,
898};
899
900static struct omap_hwmod omap44xx_dss_dispc_hwmod = {
901 .name = "dss_dispc",
902 .class = &omap44xx_dispc_hwmod_class,
903 .mpu_irqs = omap44xx_dss_dispc_irqs,
904 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_dss_dispc_irqs),
905 .sdma_reqs = omap44xx_dss_dispc_sdma_reqs,
906 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_dss_dispc_sdma_reqs),
907 .main_clk = "dss_fck",
908 .prcm = {
909 .omap4 = {
910 .clkctrl_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
911 },
912 },
913 .slaves = omap44xx_dss_dispc_slaves,
914 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_dispc_slaves),
915 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
916};
917
918/*
919 * 'dsi' class
920 * display serial interface controller
921 */
922
923static struct omap_hwmod_class_sysconfig omap44xx_dsi_sysc = {
924 .rev_offs = 0x0000,
925 .sysc_offs = 0x0010,
926 .syss_offs = 0x0014,
927 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
928 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
929 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
930 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
931 .sysc_fields = &omap_hwmod_sysc_type1,
932};
933
934static struct omap_hwmod_class omap44xx_dsi_hwmod_class = {
935 .name = "dsi",
936 .sysc = &omap44xx_dsi_sysc,
937};
938
939/* dss_dsi1 */
940static struct omap_hwmod omap44xx_dss_dsi1_hwmod;
941static struct omap_hwmod_irq_info omap44xx_dss_dsi1_irqs[] = {
942 { .irq = 53 + OMAP44XX_IRQ_GIC_START },
943};
944
945static struct omap_hwmod_dma_info omap44xx_dss_dsi1_sdma_reqs[] = {
946 { .dma_req = 74 + OMAP44XX_DMA_REQ_START },
947};
948
949static struct omap_hwmod_addr_space omap44xx_dss_dsi1_dma_addrs[] = {
950 {
951 .pa_start = 0x58004000,
952 .pa_end = 0x580041ff,
953 .flags = ADDR_TYPE_RT
954 },
955};
956
957/* l3_main_2 -> dss_dsi1 */
958static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_dsi1 = {
959 .master = &omap44xx_l3_main_2_hwmod,
960 .slave = &omap44xx_dss_dsi1_hwmod,
961 .clk = "l3_div_ck",
962 .addr = omap44xx_dss_dsi1_dma_addrs,
963 .addr_cnt = ARRAY_SIZE(omap44xx_dss_dsi1_dma_addrs),
964 .user = OCP_USER_SDMA,
965};
966
967static struct omap_hwmod_addr_space omap44xx_dss_dsi1_addrs[] = {
968 {
969 .pa_start = 0x48044000,
970 .pa_end = 0x480441ff,
971 .flags = ADDR_TYPE_RT
972 },
973};
974
975/* l4_per -> dss_dsi1 */
976static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_dsi1 = {
977 .master = &omap44xx_l4_per_hwmod,
978 .slave = &omap44xx_dss_dsi1_hwmod,
979 .clk = "l4_div_ck",
980 .addr = omap44xx_dss_dsi1_addrs,
981 .addr_cnt = ARRAY_SIZE(omap44xx_dss_dsi1_addrs),
982 .user = OCP_USER_MPU,
983};
984
985/* dss_dsi1 slave ports */
986static struct omap_hwmod_ocp_if *omap44xx_dss_dsi1_slaves[] = {
987 &omap44xx_l3_main_2__dss_dsi1,
988 &omap44xx_l4_per__dss_dsi1,
989};
990
991static struct omap_hwmod omap44xx_dss_dsi1_hwmod = {
992 .name = "dss_dsi1",
993 .class = &omap44xx_dsi_hwmod_class,
994 .mpu_irqs = omap44xx_dss_dsi1_irqs,
995 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_dss_dsi1_irqs),
996 .sdma_reqs = omap44xx_dss_dsi1_sdma_reqs,
997 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_dss_dsi1_sdma_reqs),
998 .main_clk = "dss_fck",
999 .prcm = {
1000 .omap4 = {
1001 .clkctrl_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
1002 },
1003 },
1004 .slaves = omap44xx_dss_dsi1_slaves,
1005 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_dsi1_slaves),
1006 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1007};
1008
1009/* dss_dsi2 */
1010static struct omap_hwmod omap44xx_dss_dsi2_hwmod;
1011static struct omap_hwmod_irq_info omap44xx_dss_dsi2_irqs[] = {
1012 { .irq = 84 + OMAP44XX_IRQ_GIC_START },
1013};
1014
1015static struct omap_hwmod_dma_info omap44xx_dss_dsi2_sdma_reqs[] = {
1016 { .dma_req = 83 + OMAP44XX_DMA_REQ_START },
1017};
1018
1019static struct omap_hwmod_addr_space omap44xx_dss_dsi2_dma_addrs[] = {
1020 {
1021 .pa_start = 0x58005000,
1022 .pa_end = 0x580051ff,
1023 .flags = ADDR_TYPE_RT
1024 },
1025};
1026
1027/* l3_main_2 -> dss_dsi2 */
1028static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_dsi2 = {
1029 .master = &omap44xx_l3_main_2_hwmod,
1030 .slave = &omap44xx_dss_dsi2_hwmod,
1031 .clk = "l3_div_ck",
1032 .addr = omap44xx_dss_dsi2_dma_addrs,
1033 .addr_cnt = ARRAY_SIZE(omap44xx_dss_dsi2_dma_addrs),
1034 .user = OCP_USER_SDMA,
1035};
1036
1037static struct omap_hwmod_addr_space omap44xx_dss_dsi2_addrs[] = {
1038 {
1039 .pa_start = 0x48045000,
1040 .pa_end = 0x480451ff,
1041 .flags = ADDR_TYPE_RT
1042 },
1043};
1044
1045/* l4_per -> dss_dsi2 */
1046static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_dsi2 = {
1047 .master = &omap44xx_l4_per_hwmod,
1048 .slave = &omap44xx_dss_dsi2_hwmod,
1049 .clk = "l4_div_ck",
1050 .addr = omap44xx_dss_dsi2_addrs,
1051 .addr_cnt = ARRAY_SIZE(omap44xx_dss_dsi2_addrs),
1052 .user = OCP_USER_MPU,
1053};
1054
1055/* dss_dsi2 slave ports */
1056static struct omap_hwmod_ocp_if *omap44xx_dss_dsi2_slaves[] = {
1057 &omap44xx_l3_main_2__dss_dsi2,
1058 &omap44xx_l4_per__dss_dsi2,
1059};
1060
1061static struct omap_hwmod omap44xx_dss_dsi2_hwmod = {
1062 .name = "dss_dsi2",
1063 .class = &omap44xx_dsi_hwmod_class,
1064 .mpu_irqs = omap44xx_dss_dsi2_irqs,
1065 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_dss_dsi2_irqs),
1066 .sdma_reqs = omap44xx_dss_dsi2_sdma_reqs,
1067 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_dss_dsi2_sdma_reqs),
1068 .main_clk = "dss_fck",
1069 .prcm = {
1070 .omap4 = {
1071 .clkctrl_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
1072 },
1073 },
1074 .slaves = omap44xx_dss_dsi2_slaves,
1075 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_dsi2_slaves),
1076 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1077};
1078
1079/*
1080 * 'hdmi' class
1081 * hdmi controller
1082 */
1083
1084static struct omap_hwmod_class_sysconfig omap44xx_hdmi_sysc = {
1085 .rev_offs = 0x0000,
1086 .sysc_offs = 0x0010,
1087 .sysc_flags = (SYSC_HAS_RESET_STATUS | SYSC_HAS_SIDLEMODE |
1088 SYSC_HAS_SOFTRESET),
1089 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1090 SIDLE_SMART_WKUP),
1091 .sysc_fields = &omap_hwmod_sysc_type2,
1092};
1093
1094static struct omap_hwmod_class omap44xx_hdmi_hwmod_class = {
1095 .name = "hdmi",
1096 .sysc = &omap44xx_hdmi_sysc,
1097};
1098
1099/* dss_hdmi */
1100static struct omap_hwmod omap44xx_dss_hdmi_hwmod;
1101static struct omap_hwmod_irq_info omap44xx_dss_hdmi_irqs[] = {
1102 { .irq = 101 + OMAP44XX_IRQ_GIC_START },
1103};
1104
1105static struct omap_hwmod_dma_info omap44xx_dss_hdmi_sdma_reqs[] = {
1106 { .dma_req = 75 + OMAP44XX_DMA_REQ_START },
1107};
1108
1109static struct omap_hwmod_addr_space omap44xx_dss_hdmi_dma_addrs[] = {
1110 {
1111 .pa_start = 0x58006000,
1112 .pa_end = 0x58006fff,
1113 .flags = ADDR_TYPE_RT
1114 },
1115};
1116
1117/* l3_main_2 -> dss_hdmi */
1118static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_hdmi = {
1119 .master = &omap44xx_l3_main_2_hwmod,
1120 .slave = &omap44xx_dss_hdmi_hwmod,
1121 .clk = "l3_div_ck",
1122 .addr = omap44xx_dss_hdmi_dma_addrs,
1123 .addr_cnt = ARRAY_SIZE(omap44xx_dss_hdmi_dma_addrs),
1124 .user = OCP_USER_SDMA,
1125};
1126
1127static struct omap_hwmod_addr_space omap44xx_dss_hdmi_addrs[] = {
1128 {
1129 .pa_start = 0x48046000,
1130 .pa_end = 0x48046fff,
1131 .flags = ADDR_TYPE_RT
1132 },
1133};
1134
1135/* l4_per -> dss_hdmi */
1136static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_hdmi = {
1137 .master = &omap44xx_l4_per_hwmod,
1138 .slave = &omap44xx_dss_hdmi_hwmod,
1139 .clk = "l4_div_ck",
1140 .addr = omap44xx_dss_hdmi_addrs,
1141 .addr_cnt = ARRAY_SIZE(omap44xx_dss_hdmi_addrs),
1142 .user = OCP_USER_MPU,
1143};
1144
1145/* dss_hdmi slave ports */
1146static struct omap_hwmod_ocp_if *omap44xx_dss_hdmi_slaves[] = {
1147 &omap44xx_l3_main_2__dss_hdmi,
1148 &omap44xx_l4_per__dss_hdmi,
1149};
1150
1151static struct omap_hwmod omap44xx_dss_hdmi_hwmod = {
1152 .name = "dss_hdmi",
1153 .class = &omap44xx_hdmi_hwmod_class,
1154 .mpu_irqs = omap44xx_dss_hdmi_irqs,
1155 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_dss_hdmi_irqs),
1156 .sdma_reqs = omap44xx_dss_hdmi_sdma_reqs,
1157 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_dss_hdmi_sdma_reqs),
1158 .main_clk = "dss_fck",
1159 .prcm = {
1160 .omap4 = {
1161 .clkctrl_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
1162 },
1163 },
1164 .slaves = omap44xx_dss_hdmi_slaves,
1165 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_hdmi_slaves),
1166 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1167};
1168
1169/*
1170 * 'rfbi' class
1171 * remote frame buffer interface
1172 */
1173
1174static struct omap_hwmod_class_sysconfig omap44xx_rfbi_sysc = {
1175 .rev_offs = 0x0000,
1176 .sysc_offs = 0x0010,
1177 .syss_offs = 0x0014,
1178 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_SIDLEMODE |
1179 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
1180 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1181 .sysc_fields = &omap_hwmod_sysc_type1,
1182};
1183
1184static struct omap_hwmod_class omap44xx_rfbi_hwmod_class = {
1185 .name = "rfbi",
1186 .sysc = &omap44xx_rfbi_sysc,
1187};
1188
1189/* dss_rfbi */
1190static struct omap_hwmod omap44xx_dss_rfbi_hwmod;
1191static struct omap_hwmod_dma_info omap44xx_dss_rfbi_sdma_reqs[] = {
1192 { .dma_req = 13 + OMAP44XX_DMA_REQ_START },
1193};
1194
1195static struct omap_hwmod_addr_space omap44xx_dss_rfbi_dma_addrs[] = {
1196 {
1197 .pa_start = 0x58002000,
1198 .pa_end = 0x580020ff,
1199 .flags = ADDR_TYPE_RT
1200 },
1201};
1202
1203/* l3_main_2 -> dss_rfbi */
1204static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_rfbi = {
1205 .master = &omap44xx_l3_main_2_hwmod,
1206 .slave = &omap44xx_dss_rfbi_hwmod,
1207 .clk = "l3_div_ck",
1208 .addr = omap44xx_dss_rfbi_dma_addrs,
1209 .addr_cnt = ARRAY_SIZE(omap44xx_dss_rfbi_dma_addrs),
1210 .user = OCP_USER_SDMA,
1211};
1212
1213static struct omap_hwmod_addr_space omap44xx_dss_rfbi_addrs[] = {
1214 {
1215 .pa_start = 0x48042000,
1216 .pa_end = 0x480420ff,
1217 .flags = ADDR_TYPE_RT
1218 },
1219};
1220
1221/* l4_per -> dss_rfbi */
1222static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_rfbi = {
1223 .master = &omap44xx_l4_per_hwmod,
1224 .slave = &omap44xx_dss_rfbi_hwmod,
1225 .clk = "l4_div_ck",
1226 .addr = omap44xx_dss_rfbi_addrs,
1227 .addr_cnt = ARRAY_SIZE(omap44xx_dss_rfbi_addrs),
1228 .user = OCP_USER_MPU,
1229};
1230
1231/* dss_rfbi slave ports */
1232static struct omap_hwmod_ocp_if *omap44xx_dss_rfbi_slaves[] = {
1233 &omap44xx_l3_main_2__dss_rfbi,
1234 &omap44xx_l4_per__dss_rfbi,
1235};
1236
1237static struct omap_hwmod omap44xx_dss_rfbi_hwmod = {
1238 .name = "dss_rfbi",
1239 .class = &omap44xx_rfbi_hwmod_class,
1240 .sdma_reqs = omap44xx_dss_rfbi_sdma_reqs,
1241 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_dss_rfbi_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_rfbi_slaves,
1249 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_rfbi_slaves),
1250 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1251};
1252
1253/*
1254 * 'venc' class
1255 * video encoder
1256 */
1257
1258static struct omap_hwmod_class omap44xx_venc_hwmod_class = {
1259 .name = "venc",
1260};
1261
1262/* dss_venc */
1263static struct omap_hwmod omap44xx_dss_venc_hwmod;
1264static struct omap_hwmod_addr_space omap44xx_dss_venc_dma_addrs[] = {
1265 {
1266 .pa_start = 0x58003000,
1267 .pa_end = 0x580030ff,
1268 .flags = ADDR_TYPE_RT
1269 },
1270};
1271
1272/* l3_main_2 -> dss_venc */
1273static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_venc = {
1274 .master = &omap44xx_l3_main_2_hwmod,
1275 .slave = &omap44xx_dss_venc_hwmod,
1276 .clk = "l3_div_ck",
1277 .addr = omap44xx_dss_venc_dma_addrs,
1278 .addr_cnt = ARRAY_SIZE(omap44xx_dss_venc_dma_addrs),
1279 .user = OCP_USER_SDMA,
1280};
1281
1282static struct omap_hwmod_addr_space omap44xx_dss_venc_addrs[] = {
1283 {
1284 .pa_start = 0x48043000,
1285 .pa_end = 0x480430ff,
1286 .flags = ADDR_TYPE_RT
1287 },
1288};
1289
1290/* l4_per -> dss_venc */
1291static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_venc = {
1292 .master = &omap44xx_l4_per_hwmod,
1293 .slave = &omap44xx_dss_venc_hwmod,
1294 .clk = "l4_div_ck",
1295 .addr = omap44xx_dss_venc_addrs,
1296 .addr_cnt = ARRAY_SIZE(omap44xx_dss_venc_addrs),
1297 .user = OCP_USER_MPU,
1298};
1299
1300/* dss_venc slave ports */
1301static struct omap_hwmod_ocp_if *omap44xx_dss_venc_slaves[] = {
1302 &omap44xx_l3_main_2__dss_venc,
1303 &omap44xx_l4_per__dss_venc,
1304};
1305
1306static struct omap_hwmod omap44xx_dss_venc_hwmod = {
1307 .name = "dss_venc",
1308 .class = &omap44xx_venc_hwmod_class,
1309 .main_clk = "dss_fck",
1310 .prcm = {
1311 .omap4 = {
1312 .clkctrl_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
1313 },
1314 },
1315 .slaves = omap44xx_dss_venc_slaves,
1316 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_venc_slaves),
1317 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1318};
1319
1320/*
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001321 * 'gpio' class
1322 * general purpose io module
1323 */
1324
1325static struct omap_hwmod_class_sysconfig omap44xx_gpio_sysc = {
1326 .rev_offs = 0x0000,
1327 .sysc_offs = 0x0010,
1328 .syss_offs = 0x0114,
Benoit Cousson0cfe8752010-12-21 21:08:33 -07001329 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_ENAWAKEUP |
1330 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
1331 SYSS_HAS_RESET_STATUS),
Benoit Cousson7cffa6b2010-12-21 21:31:28 -07001332 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1333 SIDLE_SMART_WKUP),
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001334 .sysc_fields = &omap_hwmod_sysc_type1,
1335};
1336
1337static struct omap_hwmod_class omap44xx_gpio_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +00001338 .name = "gpio",
1339 .sysc = &omap44xx_gpio_sysc,
1340 .rev = 2,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001341};
1342
1343/* gpio dev_attr */
1344static struct omap_gpio_dev_attr gpio_dev_attr = {
Benoit Coussonfe134712010-12-23 22:30:32 +00001345 .bank_width = 32,
1346 .dbck_flag = true,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001347};
1348
1349/* gpio1 */
1350static struct omap_hwmod omap44xx_gpio1_hwmod;
1351static struct omap_hwmod_irq_info omap44xx_gpio1_irqs[] = {
1352 { .irq = 29 + OMAP44XX_IRQ_GIC_START },
1353};
1354
1355static struct omap_hwmod_addr_space omap44xx_gpio1_addrs[] = {
1356 {
1357 .pa_start = 0x4a310000,
1358 .pa_end = 0x4a3101ff,
1359 .flags = ADDR_TYPE_RT
1360 },
1361};
1362
1363/* l4_wkup -> gpio1 */
1364static struct omap_hwmod_ocp_if omap44xx_l4_wkup__gpio1 = {
1365 .master = &omap44xx_l4_wkup_hwmod,
1366 .slave = &omap44xx_gpio1_hwmod,
Benoit Coussonb399bca2010-12-21 21:08:34 -07001367 .clk = "l4_wkup_clk_mux_ck",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001368 .addr = omap44xx_gpio1_addrs,
1369 .addr_cnt = ARRAY_SIZE(omap44xx_gpio1_addrs),
1370 .user = OCP_USER_MPU | OCP_USER_SDMA,
1371};
1372
1373/* gpio1 slave ports */
1374static struct omap_hwmod_ocp_if *omap44xx_gpio1_slaves[] = {
1375 &omap44xx_l4_wkup__gpio1,
1376};
1377
1378static struct omap_hwmod_opt_clk gpio1_opt_clks[] = {
Benoit Coussonb399bca2010-12-21 21:08:34 -07001379 { .role = "dbclk", .clk = "gpio1_dbclk" },
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001380};
1381
1382static struct omap_hwmod omap44xx_gpio1_hwmod = {
1383 .name = "gpio1",
1384 .class = &omap44xx_gpio_hwmod_class,
1385 .mpu_irqs = omap44xx_gpio1_irqs,
1386 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_gpio1_irqs),
1387 .main_clk = "gpio1_ick",
1388 .prcm = {
1389 .omap4 = {
1390 .clkctrl_reg = OMAP4430_CM_WKUP_GPIO1_CLKCTRL,
1391 },
1392 },
1393 .opt_clks = gpio1_opt_clks,
1394 .opt_clks_cnt = ARRAY_SIZE(gpio1_opt_clks),
1395 .dev_attr = &gpio_dev_attr,
1396 .slaves = omap44xx_gpio1_slaves,
1397 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio1_slaves),
1398 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1399};
1400
1401/* gpio2 */
1402static struct omap_hwmod omap44xx_gpio2_hwmod;
1403static struct omap_hwmod_irq_info omap44xx_gpio2_irqs[] = {
1404 { .irq = 30 + OMAP44XX_IRQ_GIC_START },
1405};
1406
1407static struct omap_hwmod_addr_space omap44xx_gpio2_addrs[] = {
1408 {
1409 .pa_start = 0x48055000,
1410 .pa_end = 0x480551ff,
1411 .flags = ADDR_TYPE_RT
1412 },
1413};
1414
1415/* l4_per -> gpio2 */
1416static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio2 = {
1417 .master = &omap44xx_l4_per_hwmod,
1418 .slave = &omap44xx_gpio2_hwmod,
Benoit Coussonb399bca2010-12-21 21:08:34 -07001419 .clk = "l4_div_ck",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001420 .addr = omap44xx_gpio2_addrs,
1421 .addr_cnt = ARRAY_SIZE(omap44xx_gpio2_addrs),
1422 .user = OCP_USER_MPU | OCP_USER_SDMA,
1423};
1424
1425/* gpio2 slave ports */
1426static struct omap_hwmod_ocp_if *omap44xx_gpio2_slaves[] = {
1427 &omap44xx_l4_per__gpio2,
1428};
1429
1430static struct omap_hwmod_opt_clk gpio2_opt_clks[] = {
Benoit Coussonb399bca2010-12-21 21:08:34 -07001431 { .role = "dbclk", .clk = "gpio2_dbclk" },
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001432};
1433
1434static struct omap_hwmod omap44xx_gpio2_hwmod = {
1435 .name = "gpio2",
1436 .class = &omap44xx_gpio_hwmod_class,
Benoit Coussonb399bca2010-12-21 21:08:34 -07001437 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001438 .mpu_irqs = omap44xx_gpio2_irqs,
1439 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_gpio2_irqs),
1440 .main_clk = "gpio2_ick",
1441 .prcm = {
1442 .omap4 = {
1443 .clkctrl_reg = OMAP4430_CM_L4PER_GPIO2_CLKCTRL,
1444 },
1445 },
1446 .opt_clks = gpio2_opt_clks,
1447 .opt_clks_cnt = ARRAY_SIZE(gpio2_opt_clks),
1448 .dev_attr = &gpio_dev_attr,
1449 .slaves = omap44xx_gpio2_slaves,
1450 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio2_slaves),
1451 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1452};
1453
1454/* gpio3 */
1455static struct omap_hwmod omap44xx_gpio3_hwmod;
1456static struct omap_hwmod_irq_info omap44xx_gpio3_irqs[] = {
1457 { .irq = 31 + OMAP44XX_IRQ_GIC_START },
1458};
1459
1460static struct omap_hwmod_addr_space omap44xx_gpio3_addrs[] = {
1461 {
1462 .pa_start = 0x48057000,
1463 .pa_end = 0x480571ff,
1464 .flags = ADDR_TYPE_RT
1465 },
1466};
1467
1468/* l4_per -> gpio3 */
1469static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio3 = {
1470 .master = &omap44xx_l4_per_hwmod,
1471 .slave = &omap44xx_gpio3_hwmod,
Benoit Coussonb399bca2010-12-21 21:08:34 -07001472 .clk = "l4_div_ck",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001473 .addr = omap44xx_gpio3_addrs,
1474 .addr_cnt = ARRAY_SIZE(omap44xx_gpio3_addrs),
1475 .user = OCP_USER_MPU | OCP_USER_SDMA,
1476};
1477
1478/* gpio3 slave ports */
1479static struct omap_hwmod_ocp_if *omap44xx_gpio3_slaves[] = {
1480 &omap44xx_l4_per__gpio3,
1481};
1482
1483static struct omap_hwmod_opt_clk gpio3_opt_clks[] = {
Benoit Coussonb399bca2010-12-21 21:08:34 -07001484 { .role = "dbclk", .clk = "gpio3_dbclk" },
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001485};
1486
1487static struct omap_hwmod omap44xx_gpio3_hwmod = {
1488 .name = "gpio3",
1489 .class = &omap44xx_gpio_hwmod_class,
Benoit Coussonb399bca2010-12-21 21:08:34 -07001490 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001491 .mpu_irqs = omap44xx_gpio3_irqs,
1492 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_gpio3_irqs),
1493 .main_clk = "gpio3_ick",
1494 .prcm = {
1495 .omap4 = {
1496 .clkctrl_reg = OMAP4430_CM_L4PER_GPIO3_CLKCTRL,
1497 },
1498 },
1499 .opt_clks = gpio3_opt_clks,
1500 .opt_clks_cnt = ARRAY_SIZE(gpio3_opt_clks),
1501 .dev_attr = &gpio_dev_attr,
1502 .slaves = omap44xx_gpio3_slaves,
1503 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio3_slaves),
1504 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1505};
1506
1507/* gpio4 */
1508static struct omap_hwmod omap44xx_gpio4_hwmod;
1509static struct omap_hwmod_irq_info omap44xx_gpio4_irqs[] = {
1510 { .irq = 32 + OMAP44XX_IRQ_GIC_START },
1511};
1512
1513static struct omap_hwmod_addr_space omap44xx_gpio4_addrs[] = {
1514 {
1515 .pa_start = 0x48059000,
1516 .pa_end = 0x480591ff,
1517 .flags = ADDR_TYPE_RT
1518 },
1519};
1520
1521/* l4_per -> gpio4 */
1522static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio4 = {
1523 .master = &omap44xx_l4_per_hwmod,
1524 .slave = &omap44xx_gpio4_hwmod,
Benoit Coussonb399bca2010-12-21 21:08:34 -07001525 .clk = "l4_div_ck",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001526 .addr = omap44xx_gpio4_addrs,
1527 .addr_cnt = ARRAY_SIZE(omap44xx_gpio4_addrs),
1528 .user = OCP_USER_MPU | OCP_USER_SDMA,
1529};
1530
1531/* gpio4 slave ports */
1532static struct omap_hwmod_ocp_if *omap44xx_gpio4_slaves[] = {
1533 &omap44xx_l4_per__gpio4,
1534};
1535
1536static struct omap_hwmod_opt_clk gpio4_opt_clks[] = {
Benoit Coussonb399bca2010-12-21 21:08:34 -07001537 { .role = "dbclk", .clk = "gpio4_dbclk" },
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001538};
1539
1540static struct omap_hwmod omap44xx_gpio4_hwmod = {
1541 .name = "gpio4",
1542 .class = &omap44xx_gpio_hwmod_class,
Benoit Coussonb399bca2010-12-21 21:08:34 -07001543 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001544 .mpu_irqs = omap44xx_gpio4_irqs,
1545 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_gpio4_irqs),
1546 .main_clk = "gpio4_ick",
1547 .prcm = {
1548 .omap4 = {
1549 .clkctrl_reg = OMAP4430_CM_L4PER_GPIO4_CLKCTRL,
1550 },
1551 },
1552 .opt_clks = gpio4_opt_clks,
1553 .opt_clks_cnt = ARRAY_SIZE(gpio4_opt_clks),
1554 .dev_attr = &gpio_dev_attr,
1555 .slaves = omap44xx_gpio4_slaves,
1556 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio4_slaves),
1557 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1558};
1559
1560/* gpio5 */
1561static struct omap_hwmod omap44xx_gpio5_hwmod;
1562static struct omap_hwmod_irq_info omap44xx_gpio5_irqs[] = {
1563 { .irq = 33 + OMAP44XX_IRQ_GIC_START },
1564};
1565
1566static struct omap_hwmod_addr_space omap44xx_gpio5_addrs[] = {
1567 {
1568 .pa_start = 0x4805b000,
1569 .pa_end = 0x4805b1ff,
1570 .flags = ADDR_TYPE_RT
1571 },
1572};
1573
1574/* l4_per -> gpio5 */
1575static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio5 = {
1576 .master = &omap44xx_l4_per_hwmod,
1577 .slave = &omap44xx_gpio5_hwmod,
Benoit Coussonb399bca2010-12-21 21:08:34 -07001578 .clk = "l4_div_ck",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001579 .addr = omap44xx_gpio5_addrs,
1580 .addr_cnt = ARRAY_SIZE(omap44xx_gpio5_addrs),
1581 .user = OCP_USER_MPU | OCP_USER_SDMA,
1582};
1583
1584/* gpio5 slave ports */
1585static struct omap_hwmod_ocp_if *omap44xx_gpio5_slaves[] = {
1586 &omap44xx_l4_per__gpio5,
1587};
1588
1589static struct omap_hwmod_opt_clk gpio5_opt_clks[] = {
Benoit Coussonb399bca2010-12-21 21:08:34 -07001590 { .role = "dbclk", .clk = "gpio5_dbclk" },
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001591};
1592
1593static struct omap_hwmod omap44xx_gpio5_hwmod = {
1594 .name = "gpio5",
1595 .class = &omap44xx_gpio_hwmod_class,
Benoit Coussonb399bca2010-12-21 21:08:34 -07001596 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001597 .mpu_irqs = omap44xx_gpio5_irqs,
1598 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_gpio5_irqs),
1599 .main_clk = "gpio5_ick",
1600 .prcm = {
1601 .omap4 = {
1602 .clkctrl_reg = OMAP4430_CM_L4PER_GPIO5_CLKCTRL,
1603 },
1604 },
1605 .opt_clks = gpio5_opt_clks,
1606 .opt_clks_cnt = ARRAY_SIZE(gpio5_opt_clks),
1607 .dev_attr = &gpio_dev_attr,
1608 .slaves = omap44xx_gpio5_slaves,
1609 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio5_slaves),
1610 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1611};
1612
1613/* gpio6 */
1614static struct omap_hwmod omap44xx_gpio6_hwmod;
1615static struct omap_hwmod_irq_info omap44xx_gpio6_irqs[] = {
1616 { .irq = 34 + OMAP44XX_IRQ_GIC_START },
1617};
1618
1619static struct omap_hwmod_addr_space omap44xx_gpio6_addrs[] = {
1620 {
1621 .pa_start = 0x4805d000,
1622 .pa_end = 0x4805d1ff,
1623 .flags = ADDR_TYPE_RT
1624 },
1625};
1626
1627/* l4_per -> gpio6 */
1628static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio6 = {
1629 .master = &omap44xx_l4_per_hwmod,
1630 .slave = &omap44xx_gpio6_hwmod,
Benoit Coussonb399bca2010-12-21 21:08:34 -07001631 .clk = "l4_div_ck",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001632 .addr = omap44xx_gpio6_addrs,
1633 .addr_cnt = ARRAY_SIZE(omap44xx_gpio6_addrs),
1634 .user = OCP_USER_MPU | OCP_USER_SDMA,
1635};
1636
1637/* gpio6 slave ports */
1638static struct omap_hwmod_ocp_if *omap44xx_gpio6_slaves[] = {
1639 &omap44xx_l4_per__gpio6,
1640};
1641
1642static struct omap_hwmod_opt_clk gpio6_opt_clks[] = {
Benoit Coussonb399bca2010-12-21 21:08:34 -07001643 { .role = "dbclk", .clk = "gpio6_dbclk" },
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001644};
1645
1646static struct omap_hwmod omap44xx_gpio6_hwmod = {
1647 .name = "gpio6",
1648 .class = &omap44xx_gpio_hwmod_class,
Benoit Coussonb399bca2010-12-21 21:08:34 -07001649 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001650 .mpu_irqs = omap44xx_gpio6_irqs,
1651 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_gpio6_irqs),
1652 .main_clk = "gpio6_ick",
1653 .prcm = {
1654 .omap4 = {
1655 .clkctrl_reg = OMAP4430_CM_L4PER_GPIO6_CLKCTRL,
1656 },
1657 },
1658 .opt_clks = gpio6_opt_clks,
1659 .opt_clks_cnt = ARRAY_SIZE(gpio6_opt_clks),
1660 .dev_attr = &gpio_dev_attr,
1661 .slaves = omap44xx_gpio6_slaves,
1662 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio6_slaves),
1663 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1664};
1665
1666/*
Benoit Coussonf7764712010-09-21 19:37:14 +05301667 * 'i2c' class
1668 * multimaster high-speed i2c controller
1669 */
1670
1671static struct omap_hwmod_class_sysconfig omap44xx_i2c_sysc = {
1672 .sysc_offs = 0x0010,
1673 .syss_offs = 0x0090,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001674 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
1675 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
Benoit Cousson0cfe8752010-12-21 21:08:33 -07001676 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
Benoit Cousson7cffa6b2010-12-21 21:31:28 -07001677 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1678 SIDLE_SMART_WKUP),
Benoit Coussonf7764712010-09-21 19:37:14 +05301679 .sysc_fields = &omap_hwmod_sysc_type1,
1680};
1681
1682static struct omap_hwmod_class omap44xx_i2c_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +00001683 .name = "i2c",
1684 .sysc = &omap44xx_i2c_sysc,
Benoit Coussonf7764712010-09-21 19:37:14 +05301685};
1686
1687/* i2c1 */
1688static struct omap_hwmod omap44xx_i2c1_hwmod;
1689static struct omap_hwmod_irq_info omap44xx_i2c1_irqs[] = {
1690 { .irq = 56 + OMAP44XX_IRQ_GIC_START },
1691};
1692
1693static struct omap_hwmod_dma_info omap44xx_i2c1_sdma_reqs[] = {
1694 { .name = "tx", .dma_req = 26 + OMAP44XX_DMA_REQ_START },
1695 { .name = "rx", .dma_req = 27 + OMAP44XX_DMA_REQ_START },
1696};
1697
1698static struct omap_hwmod_addr_space omap44xx_i2c1_addrs[] = {
1699 {
1700 .pa_start = 0x48070000,
1701 .pa_end = 0x480700ff,
1702 .flags = ADDR_TYPE_RT
1703 },
1704};
1705
1706/* l4_per -> i2c1 */
1707static struct omap_hwmod_ocp_if omap44xx_l4_per__i2c1 = {
1708 .master = &omap44xx_l4_per_hwmod,
1709 .slave = &omap44xx_i2c1_hwmod,
1710 .clk = "l4_div_ck",
1711 .addr = omap44xx_i2c1_addrs,
1712 .addr_cnt = ARRAY_SIZE(omap44xx_i2c1_addrs),
1713 .user = OCP_USER_MPU | OCP_USER_SDMA,
1714};
1715
1716/* i2c1 slave ports */
1717static struct omap_hwmod_ocp_if *omap44xx_i2c1_slaves[] = {
1718 &omap44xx_l4_per__i2c1,
1719};
1720
1721static struct omap_hwmod omap44xx_i2c1_hwmod = {
1722 .name = "i2c1",
1723 .class = &omap44xx_i2c_hwmod_class,
1724 .flags = HWMOD_INIT_NO_RESET,
1725 .mpu_irqs = omap44xx_i2c1_irqs,
1726 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_i2c1_irqs),
1727 .sdma_reqs = omap44xx_i2c1_sdma_reqs,
1728 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_i2c1_sdma_reqs),
1729 .main_clk = "i2c1_fck",
1730 .prcm = {
1731 .omap4 = {
1732 .clkctrl_reg = OMAP4430_CM_L4PER_I2C1_CLKCTRL,
1733 },
1734 },
1735 .slaves = omap44xx_i2c1_slaves,
1736 .slaves_cnt = ARRAY_SIZE(omap44xx_i2c1_slaves),
1737 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1738};
1739
1740/* i2c2 */
1741static struct omap_hwmod omap44xx_i2c2_hwmod;
1742static struct omap_hwmod_irq_info omap44xx_i2c2_irqs[] = {
1743 { .irq = 57 + OMAP44XX_IRQ_GIC_START },
1744};
1745
1746static struct omap_hwmod_dma_info omap44xx_i2c2_sdma_reqs[] = {
1747 { .name = "tx", .dma_req = 28 + OMAP44XX_DMA_REQ_START },
1748 { .name = "rx", .dma_req = 29 + OMAP44XX_DMA_REQ_START },
1749};
1750
1751static struct omap_hwmod_addr_space omap44xx_i2c2_addrs[] = {
1752 {
1753 .pa_start = 0x48072000,
1754 .pa_end = 0x480720ff,
1755 .flags = ADDR_TYPE_RT
1756 },
1757};
1758
1759/* l4_per -> i2c2 */
1760static struct omap_hwmod_ocp_if omap44xx_l4_per__i2c2 = {
1761 .master = &omap44xx_l4_per_hwmod,
1762 .slave = &omap44xx_i2c2_hwmod,
1763 .clk = "l4_div_ck",
1764 .addr = omap44xx_i2c2_addrs,
1765 .addr_cnt = ARRAY_SIZE(omap44xx_i2c2_addrs),
1766 .user = OCP_USER_MPU | OCP_USER_SDMA,
1767};
1768
1769/* i2c2 slave ports */
1770static struct omap_hwmod_ocp_if *omap44xx_i2c2_slaves[] = {
1771 &omap44xx_l4_per__i2c2,
1772};
1773
1774static struct omap_hwmod omap44xx_i2c2_hwmod = {
1775 .name = "i2c2",
1776 .class = &omap44xx_i2c_hwmod_class,
1777 .flags = HWMOD_INIT_NO_RESET,
1778 .mpu_irqs = omap44xx_i2c2_irqs,
1779 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_i2c2_irqs),
1780 .sdma_reqs = omap44xx_i2c2_sdma_reqs,
1781 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_i2c2_sdma_reqs),
1782 .main_clk = "i2c2_fck",
1783 .prcm = {
1784 .omap4 = {
1785 .clkctrl_reg = OMAP4430_CM_L4PER_I2C2_CLKCTRL,
1786 },
1787 },
1788 .slaves = omap44xx_i2c2_slaves,
1789 .slaves_cnt = ARRAY_SIZE(omap44xx_i2c2_slaves),
1790 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1791};
1792
1793/* i2c3 */
1794static struct omap_hwmod omap44xx_i2c3_hwmod;
1795static struct omap_hwmod_irq_info omap44xx_i2c3_irqs[] = {
1796 { .irq = 61 + OMAP44XX_IRQ_GIC_START },
1797};
1798
1799static struct omap_hwmod_dma_info omap44xx_i2c3_sdma_reqs[] = {
1800 { .name = "tx", .dma_req = 24 + OMAP44XX_DMA_REQ_START },
1801 { .name = "rx", .dma_req = 25 + OMAP44XX_DMA_REQ_START },
1802};
1803
1804static struct omap_hwmod_addr_space omap44xx_i2c3_addrs[] = {
1805 {
1806 .pa_start = 0x48060000,
1807 .pa_end = 0x480600ff,
1808 .flags = ADDR_TYPE_RT
1809 },
1810};
1811
1812/* l4_per -> i2c3 */
1813static struct omap_hwmod_ocp_if omap44xx_l4_per__i2c3 = {
1814 .master = &omap44xx_l4_per_hwmod,
1815 .slave = &omap44xx_i2c3_hwmod,
1816 .clk = "l4_div_ck",
1817 .addr = omap44xx_i2c3_addrs,
1818 .addr_cnt = ARRAY_SIZE(omap44xx_i2c3_addrs),
1819 .user = OCP_USER_MPU | OCP_USER_SDMA,
1820};
1821
1822/* i2c3 slave ports */
1823static struct omap_hwmod_ocp_if *omap44xx_i2c3_slaves[] = {
1824 &omap44xx_l4_per__i2c3,
1825};
1826
1827static struct omap_hwmod omap44xx_i2c3_hwmod = {
1828 .name = "i2c3",
1829 .class = &omap44xx_i2c_hwmod_class,
1830 .flags = HWMOD_INIT_NO_RESET,
1831 .mpu_irqs = omap44xx_i2c3_irqs,
1832 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_i2c3_irqs),
1833 .sdma_reqs = omap44xx_i2c3_sdma_reqs,
1834 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_i2c3_sdma_reqs),
1835 .main_clk = "i2c3_fck",
1836 .prcm = {
1837 .omap4 = {
1838 .clkctrl_reg = OMAP4430_CM_L4PER_I2C3_CLKCTRL,
1839 },
1840 },
1841 .slaves = omap44xx_i2c3_slaves,
1842 .slaves_cnt = ARRAY_SIZE(omap44xx_i2c3_slaves),
1843 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1844};
1845
1846/* i2c4 */
1847static struct omap_hwmod omap44xx_i2c4_hwmod;
1848static struct omap_hwmod_irq_info omap44xx_i2c4_irqs[] = {
1849 { .irq = 62 + OMAP44XX_IRQ_GIC_START },
1850};
1851
1852static struct omap_hwmod_dma_info omap44xx_i2c4_sdma_reqs[] = {
1853 { .name = "tx", .dma_req = 123 + OMAP44XX_DMA_REQ_START },
1854 { .name = "rx", .dma_req = 124 + OMAP44XX_DMA_REQ_START },
1855};
1856
1857static struct omap_hwmod_addr_space omap44xx_i2c4_addrs[] = {
1858 {
1859 .pa_start = 0x48350000,
1860 .pa_end = 0x483500ff,
1861 .flags = ADDR_TYPE_RT
1862 },
1863};
1864
1865/* l4_per -> i2c4 */
1866static struct omap_hwmod_ocp_if omap44xx_l4_per__i2c4 = {
1867 .master = &omap44xx_l4_per_hwmod,
1868 .slave = &omap44xx_i2c4_hwmod,
1869 .clk = "l4_div_ck",
1870 .addr = omap44xx_i2c4_addrs,
1871 .addr_cnt = ARRAY_SIZE(omap44xx_i2c4_addrs),
1872 .user = OCP_USER_MPU | OCP_USER_SDMA,
1873};
1874
1875/* i2c4 slave ports */
1876static struct omap_hwmod_ocp_if *omap44xx_i2c4_slaves[] = {
1877 &omap44xx_l4_per__i2c4,
1878};
1879
1880static struct omap_hwmod omap44xx_i2c4_hwmod = {
1881 .name = "i2c4",
1882 .class = &omap44xx_i2c_hwmod_class,
1883 .flags = HWMOD_INIT_NO_RESET,
1884 .mpu_irqs = omap44xx_i2c4_irqs,
1885 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_i2c4_irqs),
1886 .sdma_reqs = omap44xx_i2c4_sdma_reqs,
1887 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_i2c4_sdma_reqs),
1888 .main_clk = "i2c4_fck",
1889 .prcm = {
1890 .omap4 = {
1891 .clkctrl_reg = OMAP4430_CM_L4PER_I2C4_CLKCTRL,
1892 },
1893 },
1894 .slaves = omap44xx_i2c4_slaves,
1895 .slaves_cnt = ARRAY_SIZE(omap44xx_i2c4_slaves),
1896 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1897};
1898
1899/*
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07001900 * 'iva' class
1901 * multi-standard video encoder/decoder hardware accelerator
1902 */
1903
1904static struct omap_hwmod_class omap44xx_iva_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +00001905 .name = "iva",
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07001906};
1907
1908/* iva */
1909static struct omap_hwmod_irq_info omap44xx_iva_irqs[] = {
1910 { .name = "sync_1", .irq = 103 + OMAP44XX_IRQ_GIC_START },
1911 { .name = "sync_0", .irq = 104 + OMAP44XX_IRQ_GIC_START },
1912 { .name = "mailbox_0", .irq = 107 + OMAP44XX_IRQ_GIC_START },
1913};
1914
1915static struct omap_hwmod_rst_info omap44xx_iva_resets[] = {
1916 { .name = "logic", .rst_shift = 2 },
1917};
1918
1919static struct omap_hwmod_rst_info omap44xx_iva_seq0_resets[] = {
1920 { .name = "seq0", .rst_shift = 0 },
1921};
1922
1923static struct omap_hwmod_rst_info omap44xx_iva_seq1_resets[] = {
1924 { .name = "seq1", .rst_shift = 1 },
1925};
1926
1927/* iva master ports */
1928static struct omap_hwmod_ocp_if *omap44xx_iva_masters[] = {
1929 &omap44xx_iva__l3_main_2,
1930 &omap44xx_iva__l3_instr,
1931};
1932
1933static struct omap_hwmod_addr_space omap44xx_iva_addrs[] = {
1934 {
1935 .pa_start = 0x5a000000,
1936 .pa_end = 0x5a07ffff,
1937 .flags = ADDR_TYPE_RT
1938 },
1939};
1940
1941/* l3_main_2 -> iva */
1942static struct omap_hwmod_ocp_if omap44xx_l3_main_2__iva = {
1943 .master = &omap44xx_l3_main_2_hwmod,
1944 .slave = &omap44xx_iva_hwmod,
1945 .clk = "l3_div_ck",
1946 .addr = omap44xx_iva_addrs,
1947 .addr_cnt = ARRAY_SIZE(omap44xx_iva_addrs),
1948 .user = OCP_USER_MPU,
1949};
1950
1951/* iva slave ports */
1952static struct omap_hwmod_ocp_if *omap44xx_iva_slaves[] = {
1953 &omap44xx_dsp__iva,
1954 &omap44xx_l3_main_2__iva,
1955};
1956
1957/* Pseudo hwmod for reset control purpose only */
1958static struct omap_hwmod omap44xx_iva_seq0_hwmod = {
1959 .name = "iva_seq0",
1960 .class = &omap44xx_iva_hwmod_class,
1961 .flags = HWMOD_INIT_NO_RESET,
1962 .rst_lines = omap44xx_iva_seq0_resets,
1963 .rst_lines_cnt = ARRAY_SIZE(omap44xx_iva_seq0_resets),
1964 .prcm = {
1965 .omap4 = {
1966 .rstctrl_reg = OMAP4430_RM_IVAHD_RSTCTRL,
1967 },
1968 },
1969 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1970};
1971
1972/* Pseudo hwmod for reset control purpose only */
1973static struct omap_hwmod omap44xx_iva_seq1_hwmod = {
1974 .name = "iva_seq1",
1975 .class = &omap44xx_iva_hwmod_class,
1976 .flags = HWMOD_INIT_NO_RESET,
1977 .rst_lines = omap44xx_iva_seq1_resets,
1978 .rst_lines_cnt = ARRAY_SIZE(omap44xx_iva_seq1_resets),
1979 .prcm = {
1980 .omap4 = {
1981 .rstctrl_reg = OMAP4430_RM_IVAHD_RSTCTRL,
1982 },
1983 },
1984 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1985};
1986
1987static struct omap_hwmod omap44xx_iva_hwmod = {
1988 .name = "iva",
1989 .class = &omap44xx_iva_hwmod_class,
1990 .mpu_irqs = omap44xx_iva_irqs,
1991 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_iva_irqs),
1992 .rst_lines = omap44xx_iva_resets,
1993 .rst_lines_cnt = ARRAY_SIZE(omap44xx_iva_resets),
1994 .main_clk = "iva_fck",
1995 .prcm = {
1996 .omap4 = {
1997 .clkctrl_reg = OMAP4430_CM_IVAHD_IVAHD_CLKCTRL,
1998 .rstctrl_reg = OMAP4430_RM_IVAHD_RSTCTRL,
1999 },
2000 },
2001 .slaves = omap44xx_iva_slaves,
2002 .slaves_cnt = ARRAY_SIZE(omap44xx_iva_slaves),
2003 .masters = omap44xx_iva_masters,
2004 .masters_cnt = ARRAY_SIZE(omap44xx_iva_masters),
2005 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2006};
2007
2008/*
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05302009 * 'mcspi' class
2010 * multichannel serial port interface (mcspi) / master/slave synchronous serial
2011 * bus
2012 */
2013
2014static struct omap_hwmod_class_sysconfig omap44xx_mcspi_sysc = {
2015 .rev_offs = 0x0000,
2016 .sysc_offs = 0x0010,
2017 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
2018 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
2019 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2020 SIDLE_SMART_WKUP),
2021 .sysc_fields = &omap_hwmod_sysc_type2,
2022};
2023
2024static struct omap_hwmod_class omap44xx_mcspi_hwmod_class = {
2025 .name = "mcspi",
2026 .sysc = &omap44xx_mcspi_sysc,
2027};
2028
2029/* mcspi1 */
2030static struct omap_hwmod omap44xx_mcspi1_hwmod;
2031static struct omap_hwmod_irq_info omap44xx_mcspi1_irqs[] = {
2032 { .irq = 65 + OMAP44XX_IRQ_GIC_START },
2033};
2034
2035static struct omap_hwmod_dma_info omap44xx_mcspi1_sdma_reqs[] = {
2036 { .name = "tx0", .dma_req = 34 + OMAP44XX_DMA_REQ_START },
2037 { .name = "rx0", .dma_req = 35 + OMAP44XX_DMA_REQ_START },
2038 { .name = "tx1", .dma_req = 36 + OMAP44XX_DMA_REQ_START },
2039 { .name = "rx1", .dma_req = 37 + OMAP44XX_DMA_REQ_START },
2040 { .name = "tx2", .dma_req = 38 + OMAP44XX_DMA_REQ_START },
2041 { .name = "rx2", .dma_req = 39 + OMAP44XX_DMA_REQ_START },
2042 { .name = "tx3", .dma_req = 40 + OMAP44XX_DMA_REQ_START },
2043 { .name = "rx3", .dma_req = 41 + OMAP44XX_DMA_REQ_START },
2044};
2045
2046static struct omap_hwmod_addr_space omap44xx_mcspi1_addrs[] = {
2047 {
2048 .pa_start = 0x48098000,
2049 .pa_end = 0x480981ff,
2050 .flags = ADDR_TYPE_RT
2051 },
2052};
2053
2054/* l4_per -> mcspi1 */
2055static struct omap_hwmod_ocp_if omap44xx_l4_per__mcspi1 = {
2056 .master = &omap44xx_l4_per_hwmod,
2057 .slave = &omap44xx_mcspi1_hwmod,
2058 .clk = "l4_div_ck",
2059 .addr = omap44xx_mcspi1_addrs,
2060 .addr_cnt = ARRAY_SIZE(omap44xx_mcspi1_addrs),
2061 .user = OCP_USER_MPU | OCP_USER_SDMA,
2062};
2063
2064/* mcspi1 slave ports */
2065static struct omap_hwmod_ocp_if *omap44xx_mcspi1_slaves[] = {
2066 &omap44xx_l4_per__mcspi1,
2067};
2068
2069static struct omap_hwmod omap44xx_mcspi1_hwmod = {
2070 .name = "mcspi1",
2071 .class = &omap44xx_mcspi_hwmod_class,
2072 .mpu_irqs = omap44xx_mcspi1_irqs,
2073 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_mcspi1_irqs),
2074 .sdma_reqs = omap44xx_mcspi1_sdma_reqs,
2075 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_mcspi1_sdma_reqs),
2076 .main_clk = "mcspi1_fck",
2077 .prcm = {
2078 .omap4 = {
2079 .clkctrl_reg = OMAP4430_CM_L4PER_MCSPI1_CLKCTRL,
2080 },
2081 },
2082 .slaves = omap44xx_mcspi1_slaves,
2083 .slaves_cnt = ARRAY_SIZE(omap44xx_mcspi1_slaves),
2084 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2085};
2086
2087/* mcspi2 */
2088static struct omap_hwmod omap44xx_mcspi2_hwmod;
2089static struct omap_hwmod_irq_info omap44xx_mcspi2_irqs[] = {
2090 { .irq = 66 + OMAP44XX_IRQ_GIC_START },
2091};
2092
2093static struct omap_hwmod_dma_info omap44xx_mcspi2_sdma_reqs[] = {
2094 { .name = "tx0", .dma_req = 42 + OMAP44XX_DMA_REQ_START },
2095 { .name = "rx0", .dma_req = 43 + OMAP44XX_DMA_REQ_START },
2096 { .name = "tx1", .dma_req = 44 + OMAP44XX_DMA_REQ_START },
2097 { .name = "rx1", .dma_req = 45 + OMAP44XX_DMA_REQ_START },
2098};
2099
2100static struct omap_hwmod_addr_space omap44xx_mcspi2_addrs[] = {
2101 {
2102 .pa_start = 0x4809a000,
2103 .pa_end = 0x4809a1ff,
2104 .flags = ADDR_TYPE_RT
2105 },
2106};
2107
2108/* l4_per -> mcspi2 */
2109static struct omap_hwmod_ocp_if omap44xx_l4_per__mcspi2 = {
2110 .master = &omap44xx_l4_per_hwmod,
2111 .slave = &omap44xx_mcspi2_hwmod,
2112 .clk = "l4_div_ck",
2113 .addr = omap44xx_mcspi2_addrs,
2114 .addr_cnt = ARRAY_SIZE(omap44xx_mcspi2_addrs),
2115 .user = OCP_USER_MPU | OCP_USER_SDMA,
2116};
2117
2118/* mcspi2 slave ports */
2119static struct omap_hwmod_ocp_if *omap44xx_mcspi2_slaves[] = {
2120 &omap44xx_l4_per__mcspi2,
2121};
2122
2123static struct omap_hwmod omap44xx_mcspi2_hwmod = {
2124 .name = "mcspi2",
2125 .class = &omap44xx_mcspi_hwmod_class,
2126 .mpu_irqs = omap44xx_mcspi2_irqs,
2127 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_mcspi2_irqs),
2128 .sdma_reqs = omap44xx_mcspi2_sdma_reqs,
2129 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_mcspi2_sdma_reqs),
2130 .main_clk = "mcspi2_fck",
2131 .prcm = {
2132 .omap4 = {
2133 .clkctrl_reg = OMAP4430_CM_L4PER_MCSPI2_CLKCTRL,
2134 },
2135 },
2136 .slaves = omap44xx_mcspi2_slaves,
2137 .slaves_cnt = ARRAY_SIZE(omap44xx_mcspi2_slaves),
2138 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2139};
2140
2141/* mcspi3 */
2142static struct omap_hwmod omap44xx_mcspi3_hwmod;
2143static struct omap_hwmod_irq_info omap44xx_mcspi3_irqs[] = {
2144 { .irq = 91 + OMAP44XX_IRQ_GIC_START },
2145};
2146
2147static struct omap_hwmod_dma_info omap44xx_mcspi3_sdma_reqs[] = {
2148 { .name = "tx0", .dma_req = 14 + OMAP44XX_DMA_REQ_START },
2149 { .name = "rx0", .dma_req = 15 + OMAP44XX_DMA_REQ_START },
2150 { .name = "tx1", .dma_req = 22 + OMAP44XX_DMA_REQ_START },
2151 { .name = "rx1", .dma_req = 23 + OMAP44XX_DMA_REQ_START },
2152};
2153
2154static struct omap_hwmod_addr_space omap44xx_mcspi3_addrs[] = {
2155 {
2156 .pa_start = 0x480b8000,
2157 .pa_end = 0x480b81ff,
2158 .flags = ADDR_TYPE_RT
2159 },
2160};
2161
2162/* l4_per -> mcspi3 */
2163static struct omap_hwmod_ocp_if omap44xx_l4_per__mcspi3 = {
2164 .master = &omap44xx_l4_per_hwmod,
2165 .slave = &omap44xx_mcspi3_hwmod,
2166 .clk = "l4_div_ck",
2167 .addr = omap44xx_mcspi3_addrs,
2168 .addr_cnt = ARRAY_SIZE(omap44xx_mcspi3_addrs),
2169 .user = OCP_USER_MPU | OCP_USER_SDMA,
2170};
2171
2172/* mcspi3 slave ports */
2173static struct omap_hwmod_ocp_if *omap44xx_mcspi3_slaves[] = {
2174 &omap44xx_l4_per__mcspi3,
2175};
2176
2177static struct omap_hwmod omap44xx_mcspi3_hwmod = {
2178 .name = "mcspi3",
2179 .class = &omap44xx_mcspi_hwmod_class,
2180 .mpu_irqs = omap44xx_mcspi3_irqs,
2181 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_mcspi3_irqs),
2182 .sdma_reqs = omap44xx_mcspi3_sdma_reqs,
2183 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_mcspi3_sdma_reqs),
2184 .main_clk = "mcspi3_fck",
2185 .prcm = {
2186 .omap4 = {
2187 .clkctrl_reg = OMAP4430_CM_L4PER_MCSPI3_CLKCTRL,
2188 },
2189 },
2190 .slaves = omap44xx_mcspi3_slaves,
2191 .slaves_cnt = ARRAY_SIZE(omap44xx_mcspi3_slaves),
2192 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2193};
2194
2195/* mcspi4 */
2196static struct omap_hwmod omap44xx_mcspi4_hwmod;
2197static struct omap_hwmod_irq_info omap44xx_mcspi4_irqs[] = {
2198 { .irq = 48 + OMAP44XX_IRQ_GIC_START },
2199};
2200
2201static struct omap_hwmod_dma_info omap44xx_mcspi4_sdma_reqs[] = {
2202 { .name = "tx0", .dma_req = 69 + OMAP44XX_DMA_REQ_START },
2203 { .name = "rx0", .dma_req = 70 + OMAP44XX_DMA_REQ_START },
2204};
2205
2206static struct omap_hwmod_addr_space omap44xx_mcspi4_addrs[] = {
2207 {
2208 .pa_start = 0x480ba000,
2209 .pa_end = 0x480ba1ff,
2210 .flags = ADDR_TYPE_RT
2211 },
2212};
2213
2214/* l4_per -> mcspi4 */
2215static struct omap_hwmod_ocp_if omap44xx_l4_per__mcspi4 = {
2216 .master = &omap44xx_l4_per_hwmod,
2217 .slave = &omap44xx_mcspi4_hwmod,
2218 .clk = "l4_div_ck",
2219 .addr = omap44xx_mcspi4_addrs,
2220 .addr_cnt = ARRAY_SIZE(omap44xx_mcspi4_addrs),
2221 .user = OCP_USER_MPU | OCP_USER_SDMA,
2222};
2223
2224/* mcspi4 slave ports */
2225static struct omap_hwmod_ocp_if *omap44xx_mcspi4_slaves[] = {
2226 &omap44xx_l4_per__mcspi4,
2227};
2228
2229static struct omap_hwmod omap44xx_mcspi4_hwmod = {
2230 .name = "mcspi4",
2231 .class = &omap44xx_mcspi_hwmod_class,
2232 .mpu_irqs = omap44xx_mcspi4_irqs,
2233 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_mcspi4_irqs),
2234 .sdma_reqs = omap44xx_mcspi4_sdma_reqs,
2235 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_mcspi4_sdma_reqs),
2236 .main_clk = "mcspi4_fck",
2237 .prcm = {
2238 .omap4 = {
2239 .clkctrl_reg = OMAP4430_CM_L4PER_MCSPI4_CLKCTRL,
2240 },
2241 },
2242 .slaves = omap44xx_mcspi4_slaves,
2243 .slaves_cnt = ARRAY_SIZE(omap44xx_mcspi4_slaves),
2244 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2245};
2246
2247/*
Benoit Cousson55d2cb02010-05-12 17:54:36 +02002248 * 'mpu' class
2249 * mpu sub-system
2250 */
2251
2252static struct omap_hwmod_class omap44xx_mpu_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +00002253 .name = "mpu",
Benoit Cousson55d2cb02010-05-12 17:54:36 +02002254};
2255
2256/* mpu */
2257static struct omap_hwmod_irq_info omap44xx_mpu_irqs[] = {
2258 { .name = "pl310", .irq = 0 + OMAP44XX_IRQ_GIC_START },
2259 { .name = "cti0", .irq = 1 + OMAP44XX_IRQ_GIC_START },
2260 { .name = "cti1", .irq = 2 + OMAP44XX_IRQ_GIC_START },
2261};
2262
2263/* mpu master ports */
2264static struct omap_hwmod_ocp_if *omap44xx_mpu_masters[] = {
2265 &omap44xx_mpu__l3_main_1,
2266 &omap44xx_mpu__l4_abe,
2267 &omap44xx_mpu__dmm,
2268};
2269
2270static struct omap_hwmod omap44xx_mpu_hwmod = {
2271 .name = "mpu",
2272 .class = &omap44xx_mpu_hwmod_class,
2273 .flags = (HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET),
2274 .mpu_irqs = omap44xx_mpu_irqs,
2275 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_mpu_irqs),
2276 .main_clk = "dpll_mpu_m2_ck",
2277 .prcm = {
2278 .omap4 = {
2279 .clkctrl_reg = OMAP4430_CM_MPU_MPU_CLKCTRL,
2280 },
2281 },
2282 .masters = omap44xx_mpu_masters,
2283 .masters_cnt = ARRAY_SIZE(omap44xx_mpu_masters),
2284 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2285};
2286
Benoit Cousson92b18d12010-09-23 20:02:41 +05302287/*
Benoit Cousson1f6a7172010-12-23 22:30:30 +00002288 * 'smartreflex' class
2289 * smartreflex module (monitor silicon performance and outputs a measure of
2290 * performance error)
2291 */
2292
2293/* The IP is not compliant to type1 / type2 scheme */
2294static struct omap_hwmod_sysc_fields omap_hwmod_sysc_type_smartreflex = {
2295 .sidle_shift = 24,
2296 .enwkup_shift = 26,
2297};
2298
2299static struct omap_hwmod_class_sysconfig omap44xx_smartreflex_sysc = {
2300 .sysc_offs = 0x0038,
2301 .sysc_flags = (SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE),
2302 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2303 SIDLE_SMART_WKUP),
2304 .sysc_fields = &omap_hwmod_sysc_type_smartreflex,
2305};
2306
2307static struct omap_hwmod_class omap44xx_smartreflex_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +00002308 .name = "smartreflex",
2309 .sysc = &omap44xx_smartreflex_sysc,
2310 .rev = 2,
Benoit Cousson1f6a7172010-12-23 22:30:30 +00002311};
2312
2313/* smartreflex_core */
2314static struct omap_hwmod omap44xx_smartreflex_core_hwmod;
2315static struct omap_hwmod_irq_info omap44xx_smartreflex_core_irqs[] = {
2316 { .irq = 19 + OMAP44XX_IRQ_GIC_START },
2317};
2318
2319static struct omap_hwmod_addr_space omap44xx_smartreflex_core_addrs[] = {
2320 {
2321 .pa_start = 0x4a0dd000,
2322 .pa_end = 0x4a0dd03f,
2323 .flags = ADDR_TYPE_RT
2324 },
2325};
2326
2327/* l4_cfg -> smartreflex_core */
2328static struct omap_hwmod_ocp_if omap44xx_l4_cfg__smartreflex_core = {
2329 .master = &omap44xx_l4_cfg_hwmod,
2330 .slave = &omap44xx_smartreflex_core_hwmod,
2331 .clk = "l4_div_ck",
2332 .addr = omap44xx_smartreflex_core_addrs,
2333 .addr_cnt = ARRAY_SIZE(omap44xx_smartreflex_core_addrs),
2334 .user = OCP_USER_MPU | OCP_USER_SDMA,
2335};
2336
2337/* smartreflex_core slave ports */
2338static struct omap_hwmod_ocp_if *omap44xx_smartreflex_core_slaves[] = {
2339 &omap44xx_l4_cfg__smartreflex_core,
2340};
2341
2342static struct omap_hwmod omap44xx_smartreflex_core_hwmod = {
2343 .name = "smartreflex_core",
2344 .class = &omap44xx_smartreflex_hwmod_class,
2345 .mpu_irqs = omap44xx_smartreflex_core_irqs,
2346 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_smartreflex_core_irqs),
2347 .main_clk = "smartreflex_core_fck",
2348 .vdd_name = "core",
2349 .prcm = {
2350 .omap4 = {
2351 .clkctrl_reg = OMAP4430_CM_ALWON_SR_CORE_CLKCTRL,
2352 },
2353 },
2354 .slaves = omap44xx_smartreflex_core_slaves,
2355 .slaves_cnt = ARRAY_SIZE(omap44xx_smartreflex_core_slaves),
2356 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2357};
2358
2359/* smartreflex_iva */
2360static struct omap_hwmod omap44xx_smartreflex_iva_hwmod;
2361static struct omap_hwmod_irq_info omap44xx_smartreflex_iva_irqs[] = {
2362 { .irq = 102 + OMAP44XX_IRQ_GIC_START },
2363};
2364
2365static struct omap_hwmod_addr_space omap44xx_smartreflex_iva_addrs[] = {
2366 {
2367 .pa_start = 0x4a0db000,
2368 .pa_end = 0x4a0db03f,
2369 .flags = ADDR_TYPE_RT
2370 },
2371};
2372
2373/* l4_cfg -> smartreflex_iva */
2374static struct omap_hwmod_ocp_if omap44xx_l4_cfg__smartreflex_iva = {
2375 .master = &omap44xx_l4_cfg_hwmod,
2376 .slave = &omap44xx_smartreflex_iva_hwmod,
2377 .clk = "l4_div_ck",
2378 .addr = omap44xx_smartreflex_iva_addrs,
2379 .addr_cnt = ARRAY_SIZE(omap44xx_smartreflex_iva_addrs),
2380 .user = OCP_USER_MPU | OCP_USER_SDMA,
2381};
2382
2383/* smartreflex_iva slave ports */
2384static struct omap_hwmod_ocp_if *omap44xx_smartreflex_iva_slaves[] = {
2385 &omap44xx_l4_cfg__smartreflex_iva,
2386};
2387
2388static struct omap_hwmod omap44xx_smartreflex_iva_hwmod = {
2389 .name = "smartreflex_iva",
2390 .class = &omap44xx_smartreflex_hwmod_class,
2391 .mpu_irqs = omap44xx_smartreflex_iva_irqs,
2392 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_smartreflex_iva_irqs),
2393 .main_clk = "smartreflex_iva_fck",
2394 .vdd_name = "iva",
2395 .prcm = {
2396 .omap4 = {
2397 .clkctrl_reg = OMAP4430_CM_ALWON_SR_IVA_CLKCTRL,
2398 },
2399 },
2400 .slaves = omap44xx_smartreflex_iva_slaves,
2401 .slaves_cnt = ARRAY_SIZE(omap44xx_smartreflex_iva_slaves),
2402 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2403};
2404
2405/* smartreflex_mpu */
2406static struct omap_hwmod omap44xx_smartreflex_mpu_hwmod;
2407static struct omap_hwmod_irq_info omap44xx_smartreflex_mpu_irqs[] = {
2408 { .irq = 18 + OMAP44XX_IRQ_GIC_START },
2409};
2410
2411static struct omap_hwmod_addr_space omap44xx_smartreflex_mpu_addrs[] = {
2412 {
2413 .pa_start = 0x4a0d9000,
2414 .pa_end = 0x4a0d903f,
2415 .flags = ADDR_TYPE_RT
2416 },
2417};
2418
2419/* l4_cfg -> smartreflex_mpu */
2420static struct omap_hwmod_ocp_if omap44xx_l4_cfg__smartreflex_mpu = {
2421 .master = &omap44xx_l4_cfg_hwmod,
2422 .slave = &omap44xx_smartreflex_mpu_hwmod,
2423 .clk = "l4_div_ck",
2424 .addr = omap44xx_smartreflex_mpu_addrs,
2425 .addr_cnt = ARRAY_SIZE(omap44xx_smartreflex_mpu_addrs),
2426 .user = OCP_USER_MPU | OCP_USER_SDMA,
2427};
2428
2429/* smartreflex_mpu slave ports */
2430static struct omap_hwmod_ocp_if *omap44xx_smartreflex_mpu_slaves[] = {
2431 &omap44xx_l4_cfg__smartreflex_mpu,
2432};
2433
2434static struct omap_hwmod omap44xx_smartreflex_mpu_hwmod = {
2435 .name = "smartreflex_mpu",
2436 .class = &omap44xx_smartreflex_hwmod_class,
2437 .mpu_irqs = omap44xx_smartreflex_mpu_irqs,
2438 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_smartreflex_mpu_irqs),
2439 .main_clk = "smartreflex_mpu_fck",
2440 .vdd_name = "mpu",
2441 .prcm = {
2442 .omap4 = {
2443 .clkctrl_reg = OMAP4430_CM_ALWON_SR_MPU_CLKCTRL,
2444 },
2445 },
2446 .slaves = omap44xx_smartreflex_mpu_slaves,
2447 .slaves_cnt = ARRAY_SIZE(omap44xx_smartreflex_mpu_slaves),
2448 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2449};
2450
2451/*
Benoit Coussond11c2172011-02-02 12:04:36 +00002452 * 'spinlock' class
2453 * spinlock provides hardware assistance for synchronizing the processes
2454 * running on multiple processors
2455 */
2456
2457static struct omap_hwmod_class_sysconfig omap44xx_spinlock_sysc = {
2458 .rev_offs = 0x0000,
2459 .sysc_offs = 0x0010,
2460 .syss_offs = 0x0014,
2461 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
2462 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
2463 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
2464 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2465 SIDLE_SMART_WKUP),
2466 .sysc_fields = &omap_hwmod_sysc_type1,
2467};
2468
2469static struct omap_hwmod_class omap44xx_spinlock_hwmod_class = {
2470 .name = "spinlock",
2471 .sysc = &omap44xx_spinlock_sysc,
2472};
2473
2474/* spinlock */
2475static struct omap_hwmod omap44xx_spinlock_hwmod;
2476static struct omap_hwmod_addr_space omap44xx_spinlock_addrs[] = {
2477 {
2478 .pa_start = 0x4a0f6000,
2479 .pa_end = 0x4a0f6fff,
2480 .flags = ADDR_TYPE_RT
2481 },
2482};
2483
2484/* l4_cfg -> spinlock */
2485static struct omap_hwmod_ocp_if omap44xx_l4_cfg__spinlock = {
2486 .master = &omap44xx_l4_cfg_hwmod,
2487 .slave = &omap44xx_spinlock_hwmod,
2488 .clk = "l4_div_ck",
2489 .addr = omap44xx_spinlock_addrs,
2490 .addr_cnt = ARRAY_SIZE(omap44xx_spinlock_addrs),
2491 .user = OCP_USER_MPU | OCP_USER_SDMA,
2492};
2493
2494/* spinlock slave ports */
2495static struct omap_hwmod_ocp_if *omap44xx_spinlock_slaves[] = {
2496 &omap44xx_l4_cfg__spinlock,
2497};
2498
2499static struct omap_hwmod omap44xx_spinlock_hwmod = {
2500 .name = "spinlock",
2501 .class = &omap44xx_spinlock_hwmod_class,
2502 .prcm = {
2503 .omap4 = {
2504 .clkctrl_reg = OMAP4430_CM_L4CFG_HW_SEM_CLKCTRL,
2505 },
2506 },
2507 .slaves = omap44xx_spinlock_slaves,
2508 .slaves_cnt = ARRAY_SIZE(omap44xx_spinlock_slaves),
2509 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2510};
2511
2512/*
Benoit Cousson35d1a662011-02-11 11:17:14 +00002513 * 'timer' class
2514 * general purpose timer module with accurate 1ms tick
2515 * This class contains several variants: ['timer_1ms', 'timer']
2516 */
2517
2518static struct omap_hwmod_class_sysconfig omap44xx_timer_1ms_sysc = {
2519 .rev_offs = 0x0000,
2520 .sysc_offs = 0x0010,
2521 .syss_offs = 0x0014,
2522 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
2523 SYSC_HAS_EMUFREE | SYSC_HAS_ENAWAKEUP |
2524 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
2525 SYSS_HAS_RESET_STATUS),
2526 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2527 .sysc_fields = &omap_hwmod_sysc_type1,
2528};
2529
2530static struct omap_hwmod_class omap44xx_timer_1ms_hwmod_class = {
2531 .name = "timer",
2532 .sysc = &omap44xx_timer_1ms_sysc,
2533};
2534
2535static struct omap_hwmod_class_sysconfig omap44xx_timer_sysc = {
2536 .rev_offs = 0x0000,
2537 .sysc_offs = 0x0010,
2538 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
2539 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
2540 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2541 SIDLE_SMART_WKUP),
2542 .sysc_fields = &omap_hwmod_sysc_type2,
2543};
2544
2545static struct omap_hwmod_class omap44xx_timer_hwmod_class = {
2546 .name = "timer",
2547 .sysc = &omap44xx_timer_sysc,
2548};
2549
2550/* timer1 */
2551static struct omap_hwmod omap44xx_timer1_hwmod;
2552static struct omap_hwmod_irq_info omap44xx_timer1_irqs[] = {
2553 { .irq = 37 + OMAP44XX_IRQ_GIC_START },
2554};
2555
2556static struct omap_hwmod_addr_space omap44xx_timer1_addrs[] = {
2557 {
2558 .pa_start = 0x4a318000,
2559 .pa_end = 0x4a31807f,
2560 .flags = ADDR_TYPE_RT
2561 },
2562};
2563
2564/* l4_wkup -> timer1 */
2565static struct omap_hwmod_ocp_if omap44xx_l4_wkup__timer1 = {
2566 .master = &omap44xx_l4_wkup_hwmod,
2567 .slave = &omap44xx_timer1_hwmod,
2568 .clk = "l4_wkup_clk_mux_ck",
2569 .addr = omap44xx_timer1_addrs,
2570 .addr_cnt = ARRAY_SIZE(omap44xx_timer1_addrs),
2571 .user = OCP_USER_MPU | OCP_USER_SDMA,
2572};
2573
2574/* timer1 slave ports */
2575static struct omap_hwmod_ocp_if *omap44xx_timer1_slaves[] = {
2576 &omap44xx_l4_wkup__timer1,
2577};
2578
2579static struct omap_hwmod omap44xx_timer1_hwmod = {
2580 .name = "timer1",
2581 .class = &omap44xx_timer_1ms_hwmod_class,
2582 .mpu_irqs = omap44xx_timer1_irqs,
2583 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_timer1_irqs),
2584 .main_clk = "timer1_fck",
2585 .prcm = {
2586 .omap4 = {
2587 .clkctrl_reg = OMAP4430_CM_WKUP_TIMER1_CLKCTRL,
2588 },
2589 },
2590 .slaves = omap44xx_timer1_slaves,
2591 .slaves_cnt = ARRAY_SIZE(omap44xx_timer1_slaves),
2592 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2593};
2594
2595/* timer2 */
2596static struct omap_hwmod omap44xx_timer2_hwmod;
2597static struct omap_hwmod_irq_info omap44xx_timer2_irqs[] = {
2598 { .irq = 38 + OMAP44XX_IRQ_GIC_START },
2599};
2600
2601static struct omap_hwmod_addr_space omap44xx_timer2_addrs[] = {
2602 {
2603 .pa_start = 0x48032000,
2604 .pa_end = 0x4803207f,
2605 .flags = ADDR_TYPE_RT
2606 },
2607};
2608
2609/* l4_per -> timer2 */
2610static struct omap_hwmod_ocp_if omap44xx_l4_per__timer2 = {
2611 .master = &omap44xx_l4_per_hwmod,
2612 .slave = &omap44xx_timer2_hwmod,
2613 .clk = "l4_div_ck",
2614 .addr = omap44xx_timer2_addrs,
2615 .addr_cnt = ARRAY_SIZE(omap44xx_timer2_addrs),
2616 .user = OCP_USER_MPU | OCP_USER_SDMA,
2617};
2618
2619/* timer2 slave ports */
2620static struct omap_hwmod_ocp_if *omap44xx_timer2_slaves[] = {
2621 &omap44xx_l4_per__timer2,
2622};
2623
2624static struct omap_hwmod omap44xx_timer2_hwmod = {
2625 .name = "timer2",
2626 .class = &omap44xx_timer_1ms_hwmod_class,
2627 .mpu_irqs = omap44xx_timer2_irqs,
2628 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_timer2_irqs),
2629 .main_clk = "timer2_fck",
2630 .prcm = {
2631 .omap4 = {
2632 .clkctrl_reg = OMAP4430_CM_L4PER_DMTIMER2_CLKCTRL,
2633 },
2634 },
2635 .slaves = omap44xx_timer2_slaves,
2636 .slaves_cnt = ARRAY_SIZE(omap44xx_timer2_slaves),
2637 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2638};
2639
2640/* timer3 */
2641static struct omap_hwmod omap44xx_timer3_hwmod;
2642static struct omap_hwmod_irq_info omap44xx_timer3_irqs[] = {
2643 { .irq = 39 + OMAP44XX_IRQ_GIC_START },
2644};
2645
2646static struct omap_hwmod_addr_space omap44xx_timer3_addrs[] = {
2647 {
2648 .pa_start = 0x48034000,
2649 .pa_end = 0x4803407f,
2650 .flags = ADDR_TYPE_RT
2651 },
2652};
2653
2654/* l4_per -> timer3 */
2655static struct omap_hwmod_ocp_if omap44xx_l4_per__timer3 = {
2656 .master = &omap44xx_l4_per_hwmod,
2657 .slave = &omap44xx_timer3_hwmod,
2658 .clk = "l4_div_ck",
2659 .addr = omap44xx_timer3_addrs,
2660 .addr_cnt = ARRAY_SIZE(omap44xx_timer3_addrs),
2661 .user = OCP_USER_MPU | OCP_USER_SDMA,
2662};
2663
2664/* timer3 slave ports */
2665static struct omap_hwmod_ocp_if *omap44xx_timer3_slaves[] = {
2666 &omap44xx_l4_per__timer3,
2667};
2668
2669static struct omap_hwmod omap44xx_timer3_hwmod = {
2670 .name = "timer3",
2671 .class = &omap44xx_timer_hwmod_class,
2672 .mpu_irqs = omap44xx_timer3_irqs,
2673 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_timer3_irqs),
2674 .main_clk = "timer3_fck",
2675 .prcm = {
2676 .omap4 = {
2677 .clkctrl_reg = OMAP4430_CM_L4PER_DMTIMER3_CLKCTRL,
2678 },
2679 },
2680 .slaves = omap44xx_timer3_slaves,
2681 .slaves_cnt = ARRAY_SIZE(omap44xx_timer3_slaves),
2682 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2683};
2684
2685/* timer4 */
2686static struct omap_hwmod omap44xx_timer4_hwmod;
2687static struct omap_hwmod_irq_info omap44xx_timer4_irqs[] = {
2688 { .irq = 40 + OMAP44XX_IRQ_GIC_START },
2689};
2690
2691static struct omap_hwmod_addr_space omap44xx_timer4_addrs[] = {
2692 {
2693 .pa_start = 0x48036000,
2694 .pa_end = 0x4803607f,
2695 .flags = ADDR_TYPE_RT
2696 },
2697};
2698
2699/* l4_per -> timer4 */
2700static struct omap_hwmod_ocp_if omap44xx_l4_per__timer4 = {
2701 .master = &omap44xx_l4_per_hwmod,
2702 .slave = &omap44xx_timer4_hwmod,
2703 .clk = "l4_div_ck",
2704 .addr = omap44xx_timer4_addrs,
2705 .addr_cnt = ARRAY_SIZE(omap44xx_timer4_addrs),
2706 .user = OCP_USER_MPU | OCP_USER_SDMA,
2707};
2708
2709/* timer4 slave ports */
2710static struct omap_hwmod_ocp_if *omap44xx_timer4_slaves[] = {
2711 &omap44xx_l4_per__timer4,
2712};
2713
2714static struct omap_hwmod omap44xx_timer4_hwmod = {
2715 .name = "timer4",
2716 .class = &omap44xx_timer_hwmod_class,
2717 .mpu_irqs = omap44xx_timer4_irqs,
2718 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_timer4_irqs),
2719 .main_clk = "timer4_fck",
2720 .prcm = {
2721 .omap4 = {
2722 .clkctrl_reg = OMAP4430_CM_L4PER_DMTIMER4_CLKCTRL,
2723 },
2724 },
2725 .slaves = omap44xx_timer4_slaves,
2726 .slaves_cnt = ARRAY_SIZE(omap44xx_timer4_slaves),
2727 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2728};
2729
2730/* timer5 */
2731static struct omap_hwmod omap44xx_timer5_hwmod;
2732static struct omap_hwmod_irq_info omap44xx_timer5_irqs[] = {
2733 { .irq = 41 + OMAP44XX_IRQ_GIC_START },
2734};
2735
2736static struct omap_hwmod_addr_space omap44xx_timer5_addrs[] = {
2737 {
2738 .pa_start = 0x40138000,
2739 .pa_end = 0x4013807f,
2740 .flags = ADDR_TYPE_RT
2741 },
2742};
2743
2744/* l4_abe -> timer5 */
2745static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer5 = {
2746 .master = &omap44xx_l4_abe_hwmod,
2747 .slave = &omap44xx_timer5_hwmod,
2748 .clk = "ocp_abe_iclk",
2749 .addr = omap44xx_timer5_addrs,
2750 .addr_cnt = ARRAY_SIZE(omap44xx_timer5_addrs),
2751 .user = OCP_USER_MPU,
2752};
2753
2754static struct omap_hwmod_addr_space omap44xx_timer5_dma_addrs[] = {
2755 {
2756 .pa_start = 0x49038000,
2757 .pa_end = 0x4903807f,
2758 .flags = ADDR_TYPE_RT
2759 },
2760};
2761
2762/* l4_abe -> timer5 (dma) */
2763static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer5_dma = {
2764 .master = &omap44xx_l4_abe_hwmod,
2765 .slave = &omap44xx_timer5_hwmod,
2766 .clk = "ocp_abe_iclk",
2767 .addr = omap44xx_timer5_dma_addrs,
2768 .addr_cnt = ARRAY_SIZE(omap44xx_timer5_dma_addrs),
2769 .user = OCP_USER_SDMA,
2770};
2771
2772/* timer5 slave ports */
2773static struct omap_hwmod_ocp_if *omap44xx_timer5_slaves[] = {
2774 &omap44xx_l4_abe__timer5,
2775 &omap44xx_l4_abe__timer5_dma,
2776};
2777
2778static struct omap_hwmod omap44xx_timer5_hwmod = {
2779 .name = "timer5",
2780 .class = &omap44xx_timer_hwmod_class,
2781 .mpu_irqs = omap44xx_timer5_irqs,
2782 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_timer5_irqs),
2783 .main_clk = "timer5_fck",
2784 .prcm = {
2785 .omap4 = {
2786 .clkctrl_reg = OMAP4430_CM1_ABE_TIMER5_CLKCTRL,
2787 },
2788 },
2789 .slaves = omap44xx_timer5_slaves,
2790 .slaves_cnt = ARRAY_SIZE(omap44xx_timer5_slaves),
2791 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2792};
2793
2794/* timer6 */
2795static struct omap_hwmod omap44xx_timer6_hwmod;
2796static struct omap_hwmod_irq_info omap44xx_timer6_irqs[] = {
2797 { .irq = 42 + OMAP44XX_IRQ_GIC_START },
2798};
2799
2800static struct omap_hwmod_addr_space omap44xx_timer6_addrs[] = {
2801 {
2802 .pa_start = 0x4013a000,
2803 .pa_end = 0x4013a07f,
2804 .flags = ADDR_TYPE_RT
2805 },
2806};
2807
2808/* l4_abe -> timer6 */
2809static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer6 = {
2810 .master = &omap44xx_l4_abe_hwmod,
2811 .slave = &omap44xx_timer6_hwmod,
2812 .clk = "ocp_abe_iclk",
2813 .addr = omap44xx_timer6_addrs,
2814 .addr_cnt = ARRAY_SIZE(omap44xx_timer6_addrs),
2815 .user = OCP_USER_MPU,
2816};
2817
2818static struct omap_hwmod_addr_space omap44xx_timer6_dma_addrs[] = {
2819 {
2820 .pa_start = 0x4903a000,
2821 .pa_end = 0x4903a07f,
2822 .flags = ADDR_TYPE_RT
2823 },
2824};
2825
2826/* l4_abe -> timer6 (dma) */
2827static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer6_dma = {
2828 .master = &omap44xx_l4_abe_hwmod,
2829 .slave = &omap44xx_timer6_hwmod,
2830 .clk = "ocp_abe_iclk",
2831 .addr = omap44xx_timer6_dma_addrs,
2832 .addr_cnt = ARRAY_SIZE(omap44xx_timer6_dma_addrs),
2833 .user = OCP_USER_SDMA,
2834};
2835
2836/* timer6 slave ports */
2837static struct omap_hwmod_ocp_if *omap44xx_timer6_slaves[] = {
2838 &omap44xx_l4_abe__timer6,
2839 &omap44xx_l4_abe__timer6_dma,
2840};
2841
2842static struct omap_hwmod omap44xx_timer6_hwmod = {
2843 .name = "timer6",
2844 .class = &omap44xx_timer_hwmod_class,
2845 .mpu_irqs = omap44xx_timer6_irqs,
2846 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_timer6_irqs),
2847 .main_clk = "timer6_fck",
2848 .prcm = {
2849 .omap4 = {
2850 .clkctrl_reg = OMAP4430_CM1_ABE_TIMER6_CLKCTRL,
2851 },
2852 },
2853 .slaves = omap44xx_timer6_slaves,
2854 .slaves_cnt = ARRAY_SIZE(omap44xx_timer6_slaves),
2855 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2856};
2857
2858/* timer7 */
2859static struct omap_hwmod omap44xx_timer7_hwmod;
2860static struct omap_hwmod_irq_info omap44xx_timer7_irqs[] = {
2861 { .irq = 43 + OMAP44XX_IRQ_GIC_START },
2862};
2863
2864static struct omap_hwmod_addr_space omap44xx_timer7_addrs[] = {
2865 {
2866 .pa_start = 0x4013c000,
2867 .pa_end = 0x4013c07f,
2868 .flags = ADDR_TYPE_RT
2869 },
2870};
2871
2872/* l4_abe -> timer7 */
2873static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer7 = {
2874 .master = &omap44xx_l4_abe_hwmod,
2875 .slave = &omap44xx_timer7_hwmod,
2876 .clk = "ocp_abe_iclk",
2877 .addr = omap44xx_timer7_addrs,
2878 .addr_cnt = ARRAY_SIZE(omap44xx_timer7_addrs),
2879 .user = OCP_USER_MPU,
2880};
2881
2882static struct omap_hwmod_addr_space omap44xx_timer7_dma_addrs[] = {
2883 {
2884 .pa_start = 0x4903c000,
2885 .pa_end = 0x4903c07f,
2886 .flags = ADDR_TYPE_RT
2887 },
2888};
2889
2890/* l4_abe -> timer7 (dma) */
2891static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer7_dma = {
2892 .master = &omap44xx_l4_abe_hwmod,
2893 .slave = &omap44xx_timer7_hwmod,
2894 .clk = "ocp_abe_iclk",
2895 .addr = omap44xx_timer7_dma_addrs,
2896 .addr_cnt = ARRAY_SIZE(omap44xx_timer7_dma_addrs),
2897 .user = OCP_USER_SDMA,
2898};
2899
2900/* timer7 slave ports */
2901static struct omap_hwmod_ocp_if *omap44xx_timer7_slaves[] = {
2902 &omap44xx_l4_abe__timer7,
2903 &omap44xx_l4_abe__timer7_dma,
2904};
2905
2906static struct omap_hwmod omap44xx_timer7_hwmod = {
2907 .name = "timer7",
2908 .class = &omap44xx_timer_hwmod_class,
2909 .mpu_irqs = omap44xx_timer7_irqs,
2910 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_timer7_irqs),
2911 .main_clk = "timer7_fck",
2912 .prcm = {
2913 .omap4 = {
2914 .clkctrl_reg = OMAP4430_CM1_ABE_TIMER7_CLKCTRL,
2915 },
2916 },
2917 .slaves = omap44xx_timer7_slaves,
2918 .slaves_cnt = ARRAY_SIZE(omap44xx_timer7_slaves),
2919 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2920};
2921
2922/* timer8 */
2923static struct omap_hwmod omap44xx_timer8_hwmod;
2924static struct omap_hwmod_irq_info omap44xx_timer8_irqs[] = {
2925 { .irq = 44 + OMAP44XX_IRQ_GIC_START },
2926};
2927
2928static struct omap_hwmod_addr_space omap44xx_timer8_addrs[] = {
2929 {
2930 .pa_start = 0x4013e000,
2931 .pa_end = 0x4013e07f,
2932 .flags = ADDR_TYPE_RT
2933 },
2934};
2935
2936/* l4_abe -> timer8 */
2937static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer8 = {
2938 .master = &omap44xx_l4_abe_hwmod,
2939 .slave = &omap44xx_timer8_hwmod,
2940 .clk = "ocp_abe_iclk",
2941 .addr = omap44xx_timer8_addrs,
2942 .addr_cnt = ARRAY_SIZE(omap44xx_timer8_addrs),
2943 .user = OCP_USER_MPU,
2944};
2945
2946static struct omap_hwmod_addr_space omap44xx_timer8_dma_addrs[] = {
2947 {
2948 .pa_start = 0x4903e000,
2949 .pa_end = 0x4903e07f,
2950 .flags = ADDR_TYPE_RT
2951 },
2952};
2953
2954/* l4_abe -> timer8 (dma) */
2955static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer8_dma = {
2956 .master = &omap44xx_l4_abe_hwmod,
2957 .slave = &omap44xx_timer8_hwmod,
2958 .clk = "ocp_abe_iclk",
2959 .addr = omap44xx_timer8_dma_addrs,
2960 .addr_cnt = ARRAY_SIZE(omap44xx_timer8_dma_addrs),
2961 .user = OCP_USER_SDMA,
2962};
2963
2964/* timer8 slave ports */
2965static struct omap_hwmod_ocp_if *omap44xx_timer8_slaves[] = {
2966 &omap44xx_l4_abe__timer8,
2967 &omap44xx_l4_abe__timer8_dma,
2968};
2969
2970static struct omap_hwmod omap44xx_timer8_hwmod = {
2971 .name = "timer8",
2972 .class = &omap44xx_timer_hwmod_class,
2973 .mpu_irqs = omap44xx_timer8_irqs,
2974 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_timer8_irqs),
2975 .main_clk = "timer8_fck",
2976 .prcm = {
2977 .omap4 = {
2978 .clkctrl_reg = OMAP4430_CM1_ABE_TIMER8_CLKCTRL,
2979 },
2980 },
2981 .slaves = omap44xx_timer8_slaves,
2982 .slaves_cnt = ARRAY_SIZE(omap44xx_timer8_slaves),
2983 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2984};
2985
2986/* timer9 */
2987static struct omap_hwmod omap44xx_timer9_hwmod;
2988static struct omap_hwmod_irq_info omap44xx_timer9_irqs[] = {
2989 { .irq = 45 + OMAP44XX_IRQ_GIC_START },
2990};
2991
2992static struct omap_hwmod_addr_space omap44xx_timer9_addrs[] = {
2993 {
2994 .pa_start = 0x4803e000,
2995 .pa_end = 0x4803e07f,
2996 .flags = ADDR_TYPE_RT
2997 },
2998};
2999
3000/* l4_per -> timer9 */
3001static struct omap_hwmod_ocp_if omap44xx_l4_per__timer9 = {
3002 .master = &omap44xx_l4_per_hwmod,
3003 .slave = &omap44xx_timer9_hwmod,
3004 .clk = "l4_div_ck",
3005 .addr = omap44xx_timer9_addrs,
3006 .addr_cnt = ARRAY_SIZE(omap44xx_timer9_addrs),
3007 .user = OCP_USER_MPU | OCP_USER_SDMA,
3008};
3009
3010/* timer9 slave ports */
3011static struct omap_hwmod_ocp_if *omap44xx_timer9_slaves[] = {
3012 &omap44xx_l4_per__timer9,
3013};
3014
3015static struct omap_hwmod omap44xx_timer9_hwmod = {
3016 .name = "timer9",
3017 .class = &omap44xx_timer_hwmod_class,
3018 .mpu_irqs = omap44xx_timer9_irqs,
3019 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_timer9_irqs),
3020 .main_clk = "timer9_fck",
3021 .prcm = {
3022 .omap4 = {
3023 .clkctrl_reg = OMAP4430_CM_L4PER_DMTIMER9_CLKCTRL,
3024 },
3025 },
3026 .slaves = omap44xx_timer9_slaves,
3027 .slaves_cnt = ARRAY_SIZE(omap44xx_timer9_slaves),
3028 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3029};
3030
3031/* timer10 */
3032static struct omap_hwmod omap44xx_timer10_hwmod;
3033static struct omap_hwmod_irq_info omap44xx_timer10_irqs[] = {
3034 { .irq = 46 + OMAP44XX_IRQ_GIC_START },
3035};
3036
3037static struct omap_hwmod_addr_space omap44xx_timer10_addrs[] = {
3038 {
3039 .pa_start = 0x48086000,
3040 .pa_end = 0x4808607f,
3041 .flags = ADDR_TYPE_RT
3042 },
3043};
3044
3045/* l4_per -> timer10 */
3046static struct omap_hwmod_ocp_if omap44xx_l4_per__timer10 = {
3047 .master = &omap44xx_l4_per_hwmod,
3048 .slave = &omap44xx_timer10_hwmod,
3049 .clk = "l4_div_ck",
3050 .addr = omap44xx_timer10_addrs,
3051 .addr_cnt = ARRAY_SIZE(omap44xx_timer10_addrs),
3052 .user = OCP_USER_MPU | OCP_USER_SDMA,
3053};
3054
3055/* timer10 slave ports */
3056static struct omap_hwmod_ocp_if *omap44xx_timer10_slaves[] = {
3057 &omap44xx_l4_per__timer10,
3058};
3059
3060static struct omap_hwmod omap44xx_timer10_hwmod = {
3061 .name = "timer10",
3062 .class = &omap44xx_timer_1ms_hwmod_class,
3063 .mpu_irqs = omap44xx_timer10_irqs,
3064 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_timer10_irqs),
3065 .main_clk = "timer10_fck",
3066 .prcm = {
3067 .omap4 = {
3068 .clkctrl_reg = OMAP4430_CM_L4PER_DMTIMER10_CLKCTRL,
3069 },
3070 },
3071 .slaves = omap44xx_timer10_slaves,
3072 .slaves_cnt = ARRAY_SIZE(omap44xx_timer10_slaves),
3073 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3074};
3075
3076/* timer11 */
3077static struct omap_hwmod omap44xx_timer11_hwmod;
3078static struct omap_hwmod_irq_info omap44xx_timer11_irqs[] = {
3079 { .irq = 47 + OMAP44XX_IRQ_GIC_START },
3080};
3081
3082static struct omap_hwmod_addr_space omap44xx_timer11_addrs[] = {
3083 {
3084 .pa_start = 0x48088000,
3085 .pa_end = 0x4808807f,
3086 .flags = ADDR_TYPE_RT
3087 },
3088};
3089
3090/* l4_per -> timer11 */
3091static struct omap_hwmod_ocp_if omap44xx_l4_per__timer11 = {
3092 .master = &omap44xx_l4_per_hwmod,
3093 .slave = &omap44xx_timer11_hwmod,
3094 .clk = "l4_div_ck",
3095 .addr = omap44xx_timer11_addrs,
3096 .addr_cnt = ARRAY_SIZE(omap44xx_timer11_addrs),
3097 .user = OCP_USER_MPU | OCP_USER_SDMA,
3098};
3099
3100/* timer11 slave ports */
3101static struct omap_hwmod_ocp_if *omap44xx_timer11_slaves[] = {
3102 &omap44xx_l4_per__timer11,
3103};
3104
3105static struct omap_hwmod omap44xx_timer11_hwmod = {
3106 .name = "timer11",
3107 .class = &omap44xx_timer_hwmod_class,
3108 .mpu_irqs = omap44xx_timer11_irqs,
3109 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_timer11_irqs),
3110 .main_clk = "timer11_fck",
3111 .prcm = {
3112 .omap4 = {
3113 .clkctrl_reg = OMAP4430_CM_L4PER_DMTIMER11_CLKCTRL,
3114 },
3115 },
3116 .slaves = omap44xx_timer11_slaves,
3117 .slaves_cnt = ARRAY_SIZE(omap44xx_timer11_slaves),
3118 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3119};
3120
3121/*
Benoit Coussondb12ba52010-09-27 20:19:19 +05303122 * 'uart' class
3123 * universal asynchronous receiver/transmitter (uart)
3124 */
3125
3126static struct omap_hwmod_class_sysconfig omap44xx_uart_sysc = {
3127 .rev_offs = 0x0050,
3128 .sysc_offs = 0x0054,
3129 .syss_offs = 0x0058,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07003130 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_ENAWAKEUP |
Benoit Cousson0cfe8752010-12-21 21:08:33 -07003131 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
3132 SYSS_HAS_RESET_STATUS),
Benoit Cousson7cffa6b2010-12-21 21:31:28 -07003133 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
3134 SIDLE_SMART_WKUP),
Benoit Coussondb12ba52010-09-27 20:19:19 +05303135 .sysc_fields = &omap_hwmod_sysc_type1,
3136};
3137
3138static struct omap_hwmod_class omap44xx_uart_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +00003139 .name = "uart",
3140 .sysc = &omap44xx_uart_sysc,
Benoit Coussondb12ba52010-09-27 20:19:19 +05303141};
3142
3143/* uart1 */
3144static struct omap_hwmod omap44xx_uart1_hwmod;
3145static struct omap_hwmod_irq_info omap44xx_uart1_irqs[] = {
3146 { .irq = 72 + OMAP44XX_IRQ_GIC_START },
3147};
3148
3149static struct omap_hwmod_dma_info omap44xx_uart1_sdma_reqs[] = {
3150 { .name = "tx", .dma_req = 48 + OMAP44XX_DMA_REQ_START },
3151 { .name = "rx", .dma_req = 49 + OMAP44XX_DMA_REQ_START },
3152};
3153
3154static struct omap_hwmod_addr_space omap44xx_uart1_addrs[] = {
3155 {
3156 .pa_start = 0x4806a000,
3157 .pa_end = 0x4806a0ff,
3158 .flags = ADDR_TYPE_RT
3159 },
3160};
3161
3162/* l4_per -> uart1 */
3163static struct omap_hwmod_ocp_if omap44xx_l4_per__uart1 = {
3164 .master = &omap44xx_l4_per_hwmod,
3165 .slave = &omap44xx_uart1_hwmod,
3166 .clk = "l4_div_ck",
3167 .addr = omap44xx_uart1_addrs,
3168 .addr_cnt = ARRAY_SIZE(omap44xx_uart1_addrs),
3169 .user = OCP_USER_MPU | OCP_USER_SDMA,
3170};
3171
3172/* uart1 slave ports */
3173static struct omap_hwmod_ocp_if *omap44xx_uart1_slaves[] = {
3174 &omap44xx_l4_per__uart1,
3175};
3176
3177static struct omap_hwmod omap44xx_uart1_hwmod = {
3178 .name = "uart1",
3179 .class = &omap44xx_uart_hwmod_class,
3180 .mpu_irqs = omap44xx_uart1_irqs,
3181 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_uart1_irqs),
3182 .sdma_reqs = omap44xx_uart1_sdma_reqs,
3183 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_uart1_sdma_reqs),
3184 .main_clk = "uart1_fck",
3185 .prcm = {
3186 .omap4 = {
3187 .clkctrl_reg = OMAP4430_CM_L4PER_UART1_CLKCTRL,
3188 },
3189 },
3190 .slaves = omap44xx_uart1_slaves,
3191 .slaves_cnt = ARRAY_SIZE(omap44xx_uart1_slaves),
3192 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3193};
3194
3195/* uart2 */
3196static struct omap_hwmod omap44xx_uart2_hwmod;
3197static struct omap_hwmod_irq_info omap44xx_uart2_irqs[] = {
3198 { .irq = 73 + OMAP44XX_IRQ_GIC_START },
3199};
3200
3201static struct omap_hwmod_dma_info omap44xx_uart2_sdma_reqs[] = {
3202 { .name = "tx", .dma_req = 50 + OMAP44XX_DMA_REQ_START },
3203 { .name = "rx", .dma_req = 51 + OMAP44XX_DMA_REQ_START },
3204};
3205
3206static struct omap_hwmod_addr_space omap44xx_uart2_addrs[] = {
3207 {
3208 .pa_start = 0x4806c000,
3209 .pa_end = 0x4806c0ff,
3210 .flags = ADDR_TYPE_RT
3211 },
3212};
3213
3214/* l4_per -> uart2 */
3215static struct omap_hwmod_ocp_if omap44xx_l4_per__uart2 = {
3216 .master = &omap44xx_l4_per_hwmod,
3217 .slave = &omap44xx_uart2_hwmod,
3218 .clk = "l4_div_ck",
3219 .addr = omap44xx_uart2_addrs,
3220 .addr_cnt = ARRAY_SIZE(omap44xx_uart2_addrs),
3221 .user = OCP_USER_MPU | OCP_USER_SDMA,
3222};
3223
3224/* uart2 slave ports */
3225static struct omap_hwmod_ocp_if *omap44xx_uart2_slaves[] = {
3226 &omap44xx_l4_per__uart2,
3227};
3228
3229static struct omap_hwmod omap44xx_uart2_hwmod = {
3230 .name = "uart2",
3231 .class = &omap44xx_uart_hwmod_class,
3232 .mpu_irqs = omap44xx_uart2_irqs,
3233 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_uart2_irqs),
3234 .sdma_reqs = omap44xx_uart2_sdma_reqs,
3235 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_uart2_sdma_reqs),
3236 .main_clk = "uart2_fck",
3237 .prcm = {
3238 .omap4 = {
3239 .clkctrl_reg = OMAP4430_CM_L4PER_UART2_CLKCTRL,
3240 },
3241 },
3242 .slaves = omap44xx_uart2_slaves,
3243 .slaves_cnt = ARRAY_SIZE(omap44xx_uart2_slaves),
3244 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3245};
3246
3247/* uart3 */
3248static struct omap_hwmod omap44xx_uart3_hwmod;
3249static struct omap_hwmod_irq_info omap44xx_uart3_irqs[] = {
3250 { .irq = 74 + OMAP44XX_IRQ_GIC_START },
3251};
3252
3253static struct omap_hwmod_dma_info omap44xx_uart3_sdma_reqs[] = {
3254 { .name = "tx", .dma_req = 52 + OMAP44XX_DMA_REQ_START },
3255 { .name = "rx", .dma_req = 53 + OMAP44XX_DMA_REQ_START },
3256};
3257
3258static struct omap_hwmod_addr_space omap44xx_uart3_addrs[] = {
3259 {
3260 .pa_start = 0x48020000,
3261 .pa_end = 0x480200ff,
3262 .flags = ADDR_TYPE_RT
3263 },
3264};
3265
3266/* l4_per -> uart3 */
3267static struct omap_hwmod_ocp_if omap44xx_l4_per__uart3 = {
3268 .master = &omap44xx_l4_per_hwmod,
3269 .slave = &omap44xx_uart3_hwmod,
3270 .clk = "l4_div_ck",
3271 .addr = omap44xx_uart3_addrs,
3272 .addr_cnt = ARRAY_SIZE(omap44xx_uart3_addrs),
3273 .user = OCP_USER_MPU | OCP_USER_SDMA,
3274};
3275
3276/* uart3 slave ports */
3277static struct omap_hwmod_ocp_if *omap44xx_uart3_slaves[] = {
3278 &omap44xx_l4_per__uart3,
3279};
3280
3281static struct omap_hwmod omap44xx_uart3_hwmod = {
3282 .name = "uart3",
3283 .class = &omap44xx_uart_hwmod_class,
3284 .flags = (HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET),
3285 .mpu_irqs = omap44xx_uart3_irqs,
3286 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_uart3_irqs),
3287 .sdma_reqs = omap44xx_uart3_sdma_reqs,
3288 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_uart3_sdma_reqs),
3289 .main_clk = "uart3_fck",
3290 .prcm = {
3291 .omap4 = {
3292 .clkctrl_reg = OMAP4430_CM_L4PER_UART3_CLKCTRL,
3293 },
3294 },
3295 .slaves = omap44xx_uart3_slaves,
3296 .slaves_cnt = ARRAY_SIZE(omap44xx_uart3_slaves),
3297 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3298};
3299
3300/* uart4 */
3301static struct omap_hwmod omap44xx_uart4_hwmod;
3302static struct omap_hwmod_irq_info omap44xx_uart4_irqs[] = {
3303 { .irq = 70 + OMAP44XX_IRQ_GIC_START },
3304};
3305
3306static struct omap_hwmod_dma_info omap44xx_uart4_sdma_reqs[] = {
3307 { .name = "tx", .dma_req = 54 + OMAP44XX_DMA_REQ_START },
3308 { .name = "rx", .dma_req = 55 + OMAP44XX_DMA_REQ_START },
3309};
3310
3311static struct omap_hwmod_addr_space omap44xx_uart4_addrs[] = {
3312 {
3313 .pa_start = 0x4806e000,
3314 .pa_end = 0x4806e0ff,
3315 .flags = ADDR_TYPE_RT
3316 },
3317};
3318
3319/* l4_per -> uart4 */
3320static struct omap_hwmod_ocp_if omap44xx_l4_per__uart4 = {
3321 .master = &omap44xx_l4_per_hwmod,
3322 .slave = &omap44xx_uart4_hwmod,
3323 .clk = "l4_div_ck",
3324 .addr = omap44xx_uart4_addrs,
3325 .addr_cnt = ARRAY_SIZE(omap44xx_uart4_addrs),
3326 .user = OCP_USER_MPU | OCP_USER_SDMA,
3327};
3328
3329/* uart4 slave ports */
3330static struct omap_hwmod_ocp_if *omap44xx_uart4_slaves[] = {
3331 &omap44xx_l4_per__uart4,
3332};
3333
3334static struct omap_hwmod omap44xx_uart4_hwmod = {
3335 .name = "uart4",
3336 .class = &omap44xx_uart_hwmod_class,
3337 .mpu_irqs = omap44xx_uart4_irqs,
3338 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_uart4_irqs),
3339 .sdma_reqs = omap44xx_uart4_sdma_reqs,
3340 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_uart4_sdma_reqs),
3341 .main_clk = "uart4_fck",
3342 .prcm = {
3343 .omap4 = {
3344 .clkctrl_reg = OMAP4430_CM_L4PER_UART4_CLKCTRL,
3345 },
3346 },
3347 .slaves = omap44xx_uart4_slaves,
3348 .slaves_cnt = ARRAY_SIZE(omap44xx_uart4_slaves),
3349 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3350};
3351
Benoit Cousson9780a9c2010-12-07 16:26:57 -08003352/*
Benoit Cousson3b54baa2010-12-21 21:08:33 -07003353 * 'wd_timer' class
3354 * 32-bit watchdog upward counter that generates a pulse on the reset pin on
3355 * overflow condition
Benoit Cousson9780a9c2010-12-07 16:26:57 -08003356 */
3357
Benoit Cousson3b54baa2010-12-21 21:08:33 -07003358static struct omap_hwmod_class_sysconfig omap44xx_wd_timer_sysc = {
Benoit Cousson9780a9c2010-12-07 16:26:57 -08003359 .rev_offs = 0x0000,
3360 .sysc_offs = 0x0010,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07003361 .syss_offs = 0x0014,
3362 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_SIDLEMODE |
Benoit Cousson0cfe8752010-12-21 21:08:33 -07003363 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
Benoit Cousson7cffa6b2010-12-21 21:31:28 -07003364 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
3365 SIDLE_SMART_WKUP),
Benoit Cousson9780a9c2010-12-07 16:26:57 -08003366 .sysc_fields = &omap_hwmod_sysc_type1,
3367};
3368
Benoit Cousson3b54baa2010-12-21 21:08:33 -07003369static struct omap_hwmod_class omap44xx_wd_timer_hwmod_class = {
3370 .name = "wd_timer",
3371 .sysc = &omap44xx_wd_timer_sysc,
Benoit Coussonfe134712010-12-23 22:30:32 +00003372 .pre_shutdown = &omap2_wd_timer_disable,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08003373};
3374
Benoit Cousson3b54baa2010-12-21 21:08:33 -07003375/* wd_timer2 */
3376static struct omap_hwmod omap44xx_wd_timer2_hwmod;
3377static struct omap_hwmod_irq_info omap44xx_wd_timer2_irqs[] = {
3378 { .irq = 80 + OMAP44XX_IRQ_GIC_START },
Benoit Cousson9780a9c2010-12-07 16:26:57 -08003379};
3380
Benoit Cousson3b54baa2010-12-21 21:08:33 -07003381static struct omap_hwmod_addr_space omap44xx_wd_timer2_addrs[] = {
Benoit Cousson9780a9c2010-12-07 16:26:57 -08003382 {
Benoit Cousson3b54baa2010-12-21 21:08:33 -07003383 .pa_start = 0x4a314000,
3384 .pa_end = 0x4a31407f,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08003385 .flags = ADDR_TYPE_RT
3386 },
3387};
3388
Benoit Cousson3b54baa2010-12-21 21:08:33 -07003389/* l4_wkup -> wd_timer2 */
3390static struct omap_hwmod_ocp_if omap44xx_l4_wkup__wd_timer2 = {
Benoit Cousson9780a9c2010-12-07 16:26:57 -08003391 .master = &omap44xx_l4_wkup_hwmod,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07003392 .slave = &omap44xx_wd_timer2_hwmod,
3393 .clk = "l4_wkup_clk_mux_ck",
3394 .addr = omap44xx_wd_timer2_addrs,
3395 .addr_cnt = ARRAY_SIZE(omap44xx_wd_timer2_addrs),
Benoit Cousson9780a9c2010-12-07 16:26:57 -08003396 .user = OCP_USER_MPU | OCP_USER_SDMA,
3397};
3398
Benoit Cousson3b54baa2010-12-21 21:08:33 -07003399/* wd_timer2 slave ports */
3400static struct omap_hwmod_ocp_if *omap44xx_wd_timer2_slaves[] = {
3401 &omap44xx_l4_wkup__wd_timer2,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08003402};
3403
Benoit Cousson3b54baa2010-12-21 21:08:33 -07003404static struct omap_hwmod omap44xx_wd_timer2_hwmod = {
3405 .name = "wd_timer2",
3406 .class = &omap44xx_wd_timer_hwmod_class,
3407 .mpu_irqs = omap44xx_wd_timer2_irqs,
3408 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_wd_timer2_irqs),
3409 .main_clk = "wd_timer2_fck",
Benoit Cousson9780a9c2010-12-07 16:26:57 -08003410 .prcm = {
3411 .omap4 = {
Benoit Cousson3b54baa2010-12-21 21:08:33 -07003412 .clkctrl_reg = OMAP4430_CM_WKUP_WDT2_CLKCTRL,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08003413 },
3414 },
Benoit Cousson3b54baa2010-12-21 21:08:33 -07003415 .slaves = omap44xx_wd_timer2_slaves,
3416 .slaves_cnt = ARRAY_SIZE(omap44xx_wd_timer2_slaves),
Benoit Cousson9780a9c2010-12-07 16:26:57 -08003417 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3418};
3419
Benoit Cousson3b54baa2010-12-21 21:08:33 -07003420/* wd_timer3 */
3421static struct omap_hwmod omap44xx_wd_timer3_hwmod;
3422static struct omap_hwmod_irq_info omap44xx_wd_timer3_irqs[] = {
3423 { .irq = 36 + OMAP44XX_IRQ_GIC_START },
Benoit Cousson9780a9c2010-12-07 16:26:57 -08003424};
3425
Benoit Cousson3b54baa2010-12-21 21:08:33 -07003426static struct omap_hwmod_addr_space omap44xx_wd_timer3_addrs[] = {
Benoit Cousson9780a9c2010-12-07 16:26:57 -08003427 {
Benoit Cousson3b54baa2010-12-21 21:08:33 -07003428 .pa_start = 0x40130000,
3429 .pa_end = 0x4013007f,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08003430 .flags = ADDR_TYPE_RT
3431 },
3432};
3433
Benoit Cousson3b54baa2010-12-21 21:08:33 -07003434/* l4_abe -> wd_timer3 */
3435static struct omap_hwmod_ocp_if omap44xx_l4_abe__wd_timer3 = {
3436 .master = &omap44xx_l4_abe_hwmod,
3437 .slave = &omap44xx_wd_timer3_hwmod,
3438 .clk = "ocp_abe_iclk",
3439 .addr = omap44xx_wd_timer3_addrs,
3440 .addr_cnt = ARRAY_SIZE(omap44xx_wd_timer3_addrs),
3441 .user = OCP_USER_MPU,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08003442};
3443
Benoit Cousson3b54baa2010-12-21 21:08:33 -07003444static struct omap_hwmod_addr_space omap44xx_wd_timer3_dma_addrs[] = {
Benoit Cousson9780a9c2010-12-07 16:26:57 -08003445 {
Benoit Cousson3b54baa2010-12-21 21:08:33 -07003446 .pa_start = 0x49030000,
3447 .pa_end = 0x4903007f,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08003448 .flags = ADDR_TYPE_RT
3449 },
3450};
3451
Benoit Cousson3b54baa2010-12-21 21:08:33 -07003452/* l4_abe -> wd_timer3 (dma) */
3453static struct omap_hwmod_ocp_if omap44xx_l4_abe__wd_timer3_dma = {
3454 .master = &omap44xx_l4_abe_hwmod,
3455 .slave = &omap44xx_wd_timer3_hwmod,
3456 .clk = "ocp_abe_iclk",
3457 .addr = omap44xx_wd_timer3_dma_addrs,
3458 .addr_cnt = ARRAY_SIZE(omap44xx_wd_timer3_dma_addrs),
3459 .user = OCP_USER_SDMA,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08003460};
3461
Benoit Cousson3b54baa2010-12-21 21:08:33 -07003462/* wd_timer3 slave ports */
3463static struct omap_hwmod_ocp_if *omap44xx_wd_timer3_slaves[] = {
3464 &omap44xx_l4_abe__wd_timer3,
3465 &omap44xx_l4_abe__wd_timer3_dma,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08003466};
3467
Benoit Cousson3b54baa2010-12-21 21:08:33 -07003468static struct omap_hwmod omap44xx_wd_timer3_hwmod = {
3469 .name = "wd_timer3",
3470 .class = &omap44xx_wd_timer_hwmod_class,
3471 .mpu_irqs = omap44xx_wd_timer3_irqs,
3472 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_wd_timer3_irqs),
3473 .main_clk = "wd_timer3_fck",
Benoit Cousson9780a9c2010-12-07 16:26:57 -08003474 .prcm = {
3475 .omap4 = {
Benoit Cousson3b54baa2010-12-21 21:08:33 -07003476 .clkctrl_reg = OMAP4430_CM1_ABE_WDT3_CLKCTRL,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08003477 },
3478 },
Benoit Cousson3b54baa2010-12-21 21:08:33 -07003479 .slaves = omap44xx_wd_timer3_slaves,
3480 .slaves_cnt = ARRAY_SIZE(omap44xx_wd_timer3_slaves),
Benoit Cousson9780a9c2010-12-07 16:26:57 -08003481 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3482};
3483
Benoit Cousson55d2cb02010-05-12 17:54:36 +02003484static __initdata struct omap_hwmod *omap44xx_hwmods[] = {
Benoit Coussonfe134712010-12-23 22:30:32 +00003485
Benoit Cousson55d2cb02010-05-12 17:54:36 +02003486 /* dmm class */
3487 &omap44xx_dmm_hwmod,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07003488
Benoit Cousson55d2cb02010-05-12 17:54:36 +02003489 /* emif_fw class */
3490 &omap44xx_emif_fw_hwmod,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07003491
Benoit Cousson55d2cb02010-05-12 17:54:36 +02003492 /* l3 class */
3493 &omap44xx_l3_instr_hwmod,
3494 &omap44xx_l3_main_1_hwmod,
3495 &omap44xx_l3_main_2_hwmod,
3496 &omap44xx_l3_main_3_hwmod,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07003497
Benoit Cousson55d2cb02010-05-12 17:54:36 +02003498 /* l4 class */
3499 &omap44xx_l4_abe_hwmod,
3500 &omap44xx_l4_cfg_hwmod,
3501 &omap44xx_l4_per_hwmod,
3502 &omap44xx_l4_wkup_hwmod,
Benoit Cousson531ce0d2010-12-20 18:27:19 -08003503
Benoit Cousson55d2cb02010-05-12 17:54:36 +02003504 /* mpu_bus class */
3505 &omap44xx_mpu_private_hwmod,
3506
Benoit Coussond7cf5f32010-12-23 22:30:31 +00003507 /* dma class */
3508 &omap44xx_dma_system_hwmod,
3509
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07003510 /* dsp class */
3511 &omap44xx_dsp_hwmod,
3512 &omap44xx_dsp_c0_hwmod,
3513
Benoit Coussond63bd742011-01-27 11:17:03 +00003514 /* dss class */
3515 &omap44xx_dss_hwmod,
3516 &omap44xx_dss_dispc_hwmod,
3517 &omap44xx_dss_dsi1_hwmod,
3518 &omap44xx_dss_dsi2_hwmod,
3519 &omap44xx_dss_hdmi_hwmod,
3520 &omap44xx_dss_rfbi_hwmod,
3521 &omap44xx_dss_venc_hwmod,
3522
Benoit Cousson9780a9c2010-12-07 16:26:57 -08003523 /* gpio class */
3524 &omap44xx_gpio1_hwmod,
3525 &omap44xx_gpio2_hwmod,
3526 &omap44xx_gpio3_hwmod,
3527 &omap44xx_gpio4_hwmod,
3528 &omap44xx_gpio5_hwmod,
3529 &omap44xx_gpio6_hwmod,
3530
Benoit Cousson3b54baa2010-12-21 21:08:33 -07003531 /* i2c class */
3532 &omap44xx_i2c1_hwmod,
3533 &omap44xx_i2c2_hwmod,
3534 &omap44xx_i2c3_hwmod,
3535 &omap44xx_i2c4_hwmod,
3536
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07003537 /* iva class */
3538 &omap44xx_iva_hwmod,
3539 &omap44xx_iva_seq0_hwmod,
3540 &omap44xx_iva_seq1_hwmod,
3541
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303542 /* mcspi class */
3543 &omap44xx_mcspi1_hwmod,
3544 &omap44xx_mcspi2_hwmod,
3545 &omap44xx_mcspi3_hwmod,
3546 &omap44xx_mcspi4_hwmod,
3547
Benoit Cousson55d2cb02010-05-12 17:54:36 +02003548 /* mpu class */
3549 &omap44xx_mpu_hwmod,
Benoit Coussondb12ba52010-09-27 20:19:19 +05303550
Benoit Cousson1f6a7172010-12-23 22:30:30 +00003551 /* smartreflex class */
3552 &omap44xx_smartreflex_core_hwmod,
3553 &omap44xx_smartreflex_iva_hwmod,
3554 &omap44xx_smartreflex_mpu_hwmod,
3555
Benoit Coussond11c2172011-02-02 12:04:36 +00003556 /* spinlock class */
3557 &omap44xx_spinlock_hwmod,
3558
Benoit Cousson35d1a662011-02-11 11:17:14 +00003559 /* timer class */
3560 &omap44xx_timer1_hwmod,
3561 &omap44xx_timer2_hwmod,
3562 &omap44xx_timer3_hwmod,
3563 &omap44xx_timer4_hwmod,
3564 &omap44xx_timer5_hwmod,
3565 &omap44xx_timer6_hwmod,
3566 &omap44xx_timer7_hwmod,
3567 &omap44xx_timer8_hwmod,
3568 &omap44xx_timer9_hwmod,
3569 &omap44xx_timer10_hwmod,
3570 &omap44xx_timer11_hwmod,
3571
Benoit Coussondb12ba52010-09-27 20:19:19 +05303572 /* uart class */
3573 &omap44xx_uart1_hwmod,
3574 &omap44xx_uart2_hwmod,
3575 &omap44xx_uart3_hwmod,
3576 &omap44xx_uart4_hwmod,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07003577
3578 /* wd_timer class */
3579 &omap44xx_wd_timer2_hwmod,
3580 &omap44xx_wd_timer3_hwmod,
3581
Benoit Cousson55d2cb02010-05-12 17:54:36 +02003582 NULL,
3583};
3584
3585int __init omap44xx_hwmod_init(void)
3586{
3587 return omap_hwmod_init(omap44xx_hwmods);
3588}
3589