blob: becae45db6dbe8814cca8117a124ce3f1b66cc85 [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>
Avinash.H.M6d3c55f2011-07-10 05:27:16 -060025#include <plat/i2c.h>
Benoit Cousson9780a9c2010-12-07 16:26:57 -080026#include <plat/gpio.h>
Benoit Cousson531ce0d2010-12-20 18:27:19 -080027#include <plat/dma.h>
Benoit Cousson905a74d2011-02-18 14:01:06 +010028#include <plat/mcspi.h>
Kishon Vijay Abraham Icb7e9de2011-02-24 15:16:50 +053029#include <plat/mcbsp.h>
Kishore Kadiyala6ab89462011-03-01 13:12:56 -080030#include <plat/mmc.h>
Andy Green4d4441a2011-07-10 05:27:16 -060031#include <plat/i2c.h>
Benoit Cousson55d2cb02010-05-12 17:54:36 +020032
33#include "omap_hwmod_common_data.h"
34
Paul Walmsleyd198b512010-12-21 15:30:54 -070035#include "cm1_44xx.h"
36#include "cm2_44xx.h"
37#include "prm44xx.h"
Benoit Cousson55d2cb02010-05-12 17:54:36 +020038#include "prm-regbits-44xx.h"
Paul Walmsleyff2516f2010-12-21 15:39:15 -070039#include "wd_timer.h"
Benoit Cousson55d2cb02010-05-12 17:54:36 +020040
41/* Base offset for all OMAP4 interrupts external to MPUSS */
42#define OMAP44XX_IRQ_GIC_START 32
43
44/* Base offset for all OMAP4 dma requests */
45#define OMAP44XX_DMA_REQ_START 1
46
47/* Backward references (IPs with Bus Master capability) */
Benoit Cousson407a6882011-02-15 22:39:48 +010048static struct omap_hwmod omap44xx_aess_hwmod;
Benoit Cousson531ce0d2010-12-20 18:27:19 -080049static struct omap_hwmod omap44xx_dma_system_hwmod;
Benoit Cousson55d2cb02010-05-12 17:54:36 +020050static struct omap_hwmod omap44xx_dmm_hwmod;
Benoit Cousson8f25bdc2010-12-21 21:08:34 -070051static struct omap_hwmod omap44xx_dsp_hwmod;
Benoit Coussond63bd742011-01-27 11:17:03 +000052static struct omap_hwmod omap44xx_dss_hwmod;
Benoit Cousson55d2cb02010-05-12 17:54:36 +020053static struct omap_hwmod omap44xx_emif_fw_hwmod;
Benoit Cousson407a6882011-02-15 22:39:48 +010054static struct omap_hwmod omap44xx_hsi_hwmod;
55static struct omap_hwmod omap44xx_ipu_hwmod;
56static struct omap_hwmod omap44xx_iss_hwmod;
Benoit Cousson8f25bdc2010-12-21 21:08:34 -070057static struct omap_hwmod omap44xx_iva_hwmod;
Benoit Cousson55d2cb02010-05-12 17:54:36 +020058static struct omap_hwmod omap44xx_l3_instr_hwmod;
59static struct omap_hwmod omap44xx_l3_main_1_hwmod;
60static struct omap_hwmod omap44xx_l3_main_2_hwmod;
61static struct omap_hwmod omap44xx_l3_main_3_hwmod;
62static struct omap_hwmod omap44xx_l4_abe_hwmod;
63static struct omap_hwmod omap44xx_l4_cfg_hwmod;
64static struct omap_hwmod omap44xx_l4_per_hwmod;
65static struct omap_hwmod omap44xx_l4_wkup_hwmod;
Benoit Cousson407a6882011-02-15 22:39:48 +010066static struct omap_hwmod omap44xx_mmc1_hwmod;
67static struct omap_hwmod omap44xx_mmc2_hwmod;
Benoit Cousson55d2cb02010-05-12 17:54:36 +020068static struct omap_hwmod omap44xx_mpu_hwmod;
69static struct omap_hwmod omap44xx_mpu_private_hwmod;
Benoit Cousson5844c4e2011-02-17 12:41:05 +000070static struct omap_hwmod omap44xx_usb_otg_hs_hwmod;
Benoit Cousson55d2cb02010-05-12 17:54:36 +020071
72/*
73 * Interconnects omap_hwmod structures
74 * hwmods that compose the global OMAP interconnect
75 */
76
77/*
78 * 'dmm' class
79 * instance(s): dmm
80 */
81static struct omap_hwmod_class omap44xx_dmm_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +000082 .name = "dmm",
Benoit Cousson55d2cb02010-05-12 17:54:36 +020083};
84
Benoit Cousson7e69ed92011-07-09 19:14:28 -060085/* dmm */
86static struct omap_hwmod_irq_info omap44xx_dmm_irqs[] = {
87 { .irq = 113 + OMAP44XX_IRQ_GIC_START },
88 { .irq = -1 }
89};
90
Benoit Cousson55d2cb02010-05-12 17:54:36 +020091/* l3_main_1 -> dmm */
92static struct omap_hwmod_ocp_if omap44xx_l3_main_1__dmm = {
93 .master = &omap44xx_l3_main_1_hwmod,
94 .slave = &omap44xx_dmm_hwmod,
95 .clk = "l3_div_ck",
Benoit Cousson659fa822010-12-21 21:08:34 -070096 .user = OCP_USER_SDMA,
97};
98
99static struct omap_hwmod_addr_space omap44xx_dmm_addrs[] = {
100 {
101 .pa_start = 0x4e000000,
102 .pa_end = 0x4e0007ff,
103 .flags = ADDR_TYPE_RT
104 },
Paul Walmsley78183f32011-07-09 19:14:05 -0600105 { }
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200106};
107
108/* mpu -> dmm */
109static struct omap_hwmod_ocp_if omap44xx_mpu__dmm = {
110 .master = &omap44xx_mpu_hwmod,
111 .slave = &omap44xx_dmm_hwmod,
112 .clk = "l3_div_ck",
Benoit Cousson659fa822010-12-21 21:08:34 -0700113 .addr = omap44xx_dmm_addrs,
Benoit Cousson659fa822010-12-21 21:08:34 -0700114 .user = OCP_USER_MPU,
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200115};
116
117/* dmm slave ports */
118static struct omap_hwmod_ocp_if *omap44xx_dmm_slaves[] = {
119 &omap44xx_l3_main_1__dmm,
120 &omap44xx_mpu__dmm,
121};
122
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200123static struct omap_hwmod omap44xx_dmm_hwmod = {
124 .name = "dmm",
125 .class = &omap44xx_dmm_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600126 .clkdm_name = "l3_emif_clkdm",
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200127 .slaves = omap44xx_dmm_slaves,
128 .slaves_cnt = ARRAY_SIZE(omap44xx_dmm_slaves),
Benoit Coussona5322c62011-07-10 05:56:29 -0600129 .mpu_irqs = omap44xx_dmm_irqs,
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200130 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
131};
132
133/*
134 * 'emif_fw' class
135 * instance(s): emif_fw
136 */
137static struct omap_hwmod_class omap44xx_emif_fw_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +0000138 .name = "emif_fw",
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200139};
140
Benoit Cousson7e69ed92011-07-09 19:14:28 -0600141/* emif_fw */
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200142/* dmm -> emif_fw */
143static struct omap_hwmod_ocp_if omap44xx_dmm__emif_fw = {
144 .master = &omap44xx_dmm_hwmod,
145 .slave = &omap44xx_emif_fw_hwmod,
146 .clk = "l3_div_ck",
147 .user = OCP_USER_MPU | OCP_USER_SDMA,
148};
149
Benoit Cousson659fa822010-12-21 21:08:34 -0700150static struct omap_hwmod_addr_space omap44xx_emif_fw_addrs[] = {
151 {
152 .pa_start = 0x4a20c000,
153 .pa_end = 0x4a20c0ff,
154 .flags = ADDR_TYPE_RT
155 },
Paul Walmsley78183f32011-07-09 19:14:05 -0600156 { }
Benoit Cousson659fa822010-12-21 21:08:34 -0700157};
158
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200159/* l4_cfg -> emif_fw */
160static struct omap_hwmod_ocp_if omap44xx_l4_cfg__emif_fw = {
161 .master = &omap44xx_l4_cfg_hwmod,
162 .slave = &omap44xx_emif_fw_hwmod,
163 .clk = "l4_div_ck",
Benoit Cousson659fa822010-12-21 21:08:34 -0700164 .addr = omap44xx_emif_fw_addrs,
Benoit Cousson659fa822010-12-21 21:08:34 -0700165 .user = OCP_USER_MPU,
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200166};
167
168/* emif_fw slave ports */
169static struct omap_hwmod_ocp_if *omap44xx_emif_fw_slaves[] = {
170 &omap44xx_dmm__emif_fw,
171 &omap44xx_l4_cfg__emif_fw,
172};
173
174static struct omap_hwmod omap44xx_emif_fw_hwmod = {
175 .name = "emif_fw",
176 .class = &omap44xx_emif_fw_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600177 .clkdm_name = "l3_emif_clkdm",
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200178 .slaves = omap44xx_emif_fw_slaves,
179 .slaves_cnt = ARRAY_SIZE(omap44xx_emif_fw_slaves),
180 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
181};
182
183/*
184 * 'l3' class
185 * instance(s): l3_instr, l3_main_1, l3_main_2, l3_main_3
186 */
187static struct omap_hwmod_class omap44xx_l3_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +0000188 .name = "l3",
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200189};
190
Benoit Cousson7e69ed92011-07-09 19:14:28 -0600191/* l3_instr */
Benoit Cousson8f25bdc2010-12-21 21:08:34 -0700192/* iva -> l3_instr */
193static struct omap_hwmod_ocp_if omap44xx_iva__l3_instr = {
194 .master = &omap44xx_iva_hwmod,
195 .slave = &omap44xx_l3_instr_hwmod,
196 .clk = "l3_div_ck",
197 .user = OCP_USER_MPU | OCP_USER_SDMA,
198};
199
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200200/* l3_main_3 -> l3_instr */
201static struct omap_hwmod_ocp_if omap44xx_l3_main_3__l3_instr = {
202 .master = &omap44xx_l3_main_3_hwmod,
203 .slave = &omap44xx_l3_instr_hwmod,
204 .clk = "l3_div_ck",
205 .user = OCP_USER_MPU | OCP_USER_SDMA,
206};
207
208/* l3_instr slave ports */
209static struct omap_hwmod_ocp_if *omap44xx_l3_instr_slaves[] = {
Benoit Cousson8f25bdc2010-12-21 21:08:34 -0700210 &omap44xx_iva__l3_instr,
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200211 &omap44xx_l3_main_3__l3_instr,
212};
213
214static struct omap_hwmod omap44xx_l3_instr_hwmod = {
215 .name = "l3_instr",
216 .class = &omap44xx_l3_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600217 .clkdm_name = "l3_instr_clkdm",
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200218 .slaves = omap44xx_l3_instr_slaves,
219 .slaves_cnt = ARRAY_SIZE(omap44xx_l3_instr_slaves),
220 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
221};
222
Benoit Cousson7e69ed92011-07-09 19:14:28 -0600223/* l3_main_1 */
Benoit Cousson9b4021b2011-07-09 19:14:27 -0600224static struct omap_hwmod_irq_info omap44xx_l3_main_1_irqs[] = {
225 { .name = "dbg_err", .irq = 9 + OMAP44XX_IRQ_GIC_START },
226 { .name = "app_err", .irq = 10 + OMAP44XX_IRQ_GIC_START },
227 { .irq = -1 }
228};
229
Benoit Cousson8f25bdc2010-12-21 21:08:34 -0700230/* dsp -> l3_main_1 */
231static struct omap_hwmod_ocp_if omap44xx_dsp__l3_main_1 = {
232 .master = &omap44xx_dsp_hwmod,
233 .slave = &omap44xx_l3_main_1_hwmod,
234 .clk = "l3_div_ck",
235 .user = OCP_USER_MPU | OCP_USER_SDMA,
236};
237
Benoit Coussond63bd742011-01-27 11:17:03 +0000238/* dss -> l3_main_1 */
239static struct omap_hwmod_ocp_if omap44xx_dss__l3_main_1 = {
240 .master = &omap44xx_dss_hwmod,
241 .slave = &omap44xx_l3_main_1_hwmod,
242 .clk = "l3_div_ck",
243 .user = OCP_USER_MPU | OCP_USER_SDMA,
244};
245
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200246/* l3_main_2 -> l3_main_1 */
247static struct omap_hwmod_ocp_if omap44xx_l3_main_2__l3_main_1 = {
248 .master = &omap44xx_l3_main_2_hwmod,
249 .slave = &omap44xx_l3_main_1_hwmod,
250 .clk = "l3_div_ck",
251 .user = OCP_USER_MPU | OCP_USER_SDMA,
252};
253
254/* l4_cfg -> l3_main_1 */
255static struct omap_hwmod_ocp_if omap44xx_l4_cfg__l3_main_1 = {
256 .master = &omap44xx_l4_cfg_hwmod,
257 .slave = &omap44xx_l3_main_1_hwmod,
258 .clk = "l4_div_ck",
259 .user = OCP_USER_MPU | OCP_USER_SDMA,
260};
261
Benoit Cousson407a6882011-02-15 22:39:48 +0100262/* mmc1 -> l3_main_1 */
263static struct omap_hwmod_ocp_if omap44xx_mmc1__l3_main_1 = {
264 .master = &omap44xx_mmc1_hwmod,
265 .slave = &omap44xx_l3_main_1_hwmod,
266 .clk = "l3_div_ck",
267 .user = OCP_USER_MPU | OCP_USER_SDMA,
268};
269
270/* mmc2 -> l3_main_1 */
271static struct omap_hwmod_ocp_if omap44xx_mmc2__l3_main_1 = {
272 .master = &omap44xx_mmc2_hwmod,
273 .slave = &omap44xx_l3_main_1_hwmod,
274 .clk = "l3_div_ck",
275 .user = OCP_USER_MPU | OCP_USER_SDMA,
276};
277
sricharanc4645232011-02-07 21:12:11 +0530278static struct omap_hwmod_addr_space omap44xx_l3_main_1_addrs[] = {
279 {
280 .pa_start = 0x44000000,
281 .pa_end = 0x44000fff,
Benoit Cousson9b4021b2011-07-09 19:14:27 -0600282 .flags = ADDR_TYPE_RT
sricharanc4645232011-02-07 21:12:11 +0530283 },
Paul Walmsley78183f32011-07-09 19:14:05 -0600284 { }
sricharanc4645232011-02-07 21:12:11 +0530285};
286
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200287/* mpu -> l3_main_1 */
288static struct omap_hwmod_ocp_if omap44xx_mpu__l3_main_1 = {
289 .master = &omap44xx_mpu_hwmod,
290 .slave = &omap44xx_l3_main_1_hwmod,
291 .clk = "l3_div_ck",
sricharanc4645232011-02-07 21:12:11 +0530292 .addr = omap44xx_l3_main_1_addrs,
Benoit Cousson9b4021b2011-07-09 19:14:27 -0600293 .user = OCP_USER_MPU,
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200294};
295
296/* l3_main_1 slave ports */
297static struct omap_hwmod_ocp_if *omap44xx_l3_main_1_slaves[] = {
Benoit Cousson8f25bdc2010-12-21 21:08:34 -0700298 &omap44xx_dsp__l3_main_1,
Benoit Coussond63bd742011-01-27 11:17:03 +0000299 &omap44xx_dss__l3_main_1,
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200300 &omap44xx_l3_main_2__l3_main_1,
301 &omap44xx_l4_cfg__l3_main_1,
Benoit Cousson407a6882011-02-15 22:39:48 +0100302 &omap44xx_mmc1__l3_main_1,
303 &omap44xx_mmc2__l3_main_1,
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200304 &omap44xx_mpu__l3_main_1,
305};
306
307static struct omap_hwmod omap44xx_l3_main_1_hwmod = {
308 .name = "l3_main_1",
309 .class = &omap44xx_l3_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600310 .clkdm_name = "l3_1_clkdm",
Benoit Cousson7e69ed92011-07-09 19:14:28 -0600311 .mpu_irqs = omap44xx_l3_main_1_irqs,
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200312 .slaves = omap44xx_l3_main_1_slaves,
313 .slaves_cnt = ARRAY_SIZE(omap44xx_l3_main_1_slaves),
314 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
315};
316
Benoit Cousson7e69ed92011-07-09 19:14:28 -0600317/* l3_main_2 */
Benoit Coussond7cf5f32010-12-23 22:30:31 +0000318/* dma_system -> l3_main_2 */
319static struct omap_hwmod_ocp_if omap44xx_dma_system__l3_main_2 = {
320 .master = &omap44xx_dma_system_hwmod,
321 .slave = &omap44xx_l3_main_2_hwmod,
322 .clk = "l3_div_ck",
323 .user = OCP_USER_MPU | OCP_USER_SDMA,
324};
325
Benoit Cousson407a6882011-02-15 22:39:48 +0100326/* hsi -> l3_main_2 */
327static struct omap_hwmod_ocp_if omap44xx_hsi__l3_main_2 = {
328 .master = &omap44xx_hsi_hwmod,
329 .slave = &omap44xx_l3_main_2_hwmod,
330 .clk = "l3_div_ck",
331 .user = OCP_USER_MPU | OCP_USER_SDMA,
332};
333
334/* ipu -> l3_main_2 */
335static struct omap_hwmod_ocp_if omap44xx_ipu__l3_main_2 = {
336 .master = &omap44xx_ipu_hwmod,
337 .slave = &omap44xx_l3_main_2_hwmod,
338 .clk = "l3_div_ck",
339 .user = OCP_USER_MPU | OCP_USER_SDMA,
340};
341
342/* iss -> l3_main_2 */
343static struct omap_hwmod_ocp_if omap44xx_iss__l3_main_2 = {
344 .master = &omap44xx_iss_hwmod,
345 .slave = &omap44xx_l3_main_2_hwmod,
346 .clk = "l3_div_ck",
347 .user = OCP_USER_MPU | OCP_USER_SDMA,
348};
349
Benoit Cousson8f25bdc2010-12-21 21:08:34 -0700350/* iva -> l3_main_2 */
351static struct omap_hwmod_ocp_if omap44xx_iva__l3_main_2 = {
352 .master = &omap44xx_iva_hwmod,
353 .slave = &omap44xx_l3_main_2_hwmod,
354 .clk = "l3_div_ck",
355 .user = OCP_USER_MPU | OCP_USER_SDMA,
356};
357
sricharanc4645232011-02-07 21:12:11 +0530358static struct omap_hwmod_addr_space omap44xx_l3_main_2_addrs[] = {
359 {
360 .pa_start = 0x44800000,
361 .pa_end = 0x44801fff,
Benoit Cousson9b4021b2011-07-09 19:14:27 -0600362 .flags = ADDR_TYPE_RT
sricharanc4645232011-02-07 21:12:11 +0530363 },
Paul Walmsley78183f32011-07-09 19:14:05 -0600364 { }
sricharanc4645232011-02-07 21:12:11 +0530365};
366
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200367/* l3_main_1 -> l3_main_2 */
368static struct omap_hwmod_ocp_if omap44xx_l3_main_1__l3_main_2 = {
369 .master = &omap44xx_l3_main_1_hwmod,
370 .slave = &omap44xx_l3_main_2_hwmod,
371 .clk = "l3_div_ck",
sricharanc4645232011-02-07 21:12:11 +0530372 .addr = omap44xx_l3_main_2_addrs,
Benoit Cousson9b4021b2011-07-09 19:14:27 -0600373 .user = OCP_USER_MPU,
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200374};
375
376/* l4_cfg -> l3_main_2 */
377static struct omap_hwmod_ocp_if omap44xx_l4_cfg__l3_main_2 = {
378 .master = &omap44xx_l4_cfg_hwmod,
379 .slave = &omap44xx_l3_main_2_hwmod,
380 .clk = "l4_div_ck",
381 .user = OCP_USER_MPU | OCP_USER_SDMA,
382};
383
Benoit Cousson5844c4e2011-02-17 12:41:05 +0000384/* usb_otg_hs -> l3_main_2 */
385static struct omap_hwmod_ocp_if omap44xx_usb_otg_hs__l3_main_2 = {
386 .master = &omap44xx_usb_otg_hs_hwmod,
387 .slave = &omap44xx_l3_main_2_hwmod,
388 .clk = "l3_div_ck",
389 .user = OCP_USER_MPU | OCP_USER_SDMA,
390};
391
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200392/* l3_main_2 slave ports */
393static struct omap_hwmod_ocp_if *omap44xx_l3_main_2_slaves[] = {
Benoit Cousson531ce0d2010-12-20 18:27:19 -0800394 &omap44xx_dma_system__l3_main_2,
Benoit Cousson407a6882011-02-15 22:39:48 +0100395 &omap44xx_hsi__l3_main_2,
396 &omap44xx_ipu__l3_main_2,
397 &omap44xx_iss__l3_main_2,
Benoit Cousson8f25bdc2010-12-21 21:08:34 -0700398 &omap44xx_iva__l3_main_2,
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200399 &omap44xx_l3_main_1__l3_main_2,
400 &omap44xx_l4_cfg__l3_main_2,
Benoit Cousson5844c4e2011-02-17 12:41:05 +0000401 &omap44xx_usb_otg_hs__l3_main_2,
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200402};
403
404static struct omap_hwmod omap44xx_l3_main_2_hwmod = {
405 .name = "l3_main_2",
406 .class = &omap44xx_l3_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600407 .clkdm_name = "l3_2_clkdm",
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200408 .slaves = omap44xx_l3_main_2_slaves,
409 .slaves_cnt = ARRAY_SIZE(omap44xx_l3_main_2_slaves),
410 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
411};
412
Benoit Cousson7e69ed92011-07-09 19:14:28 -0600413/* l3_main_3 */
sricharanc4645232011-02-07 21:12:11 +0530414static struct omap_hwmod_addr_space omap44xx_l3_main_3_addrs[] = {
415 {
416 .pa_start = 0x45000000,
417 .pa_end = 0x45000fff,
Benoit Cousson9b4021b2011-07-09 19:14:27 -0600418 .flags = ADDR_TYPE_RT
sricharanc4645232011-02-07 21:12:11 +0530419 },
Paul Walmsley78183f32011-07-09 19:14:05 -0600420 { }
sricharanc4645232011-02-07 21:12:11 +0530421};
422
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200423/* l3_main_1 -> l3_main_3 */
424static struct omap_hwmod_ocp_if omap44xx_l3_main_1__l3_main_3 = {
425 .master = &omap44xx_l3_main_1_hwmod,
426 .slave = &omap44xx_l3_main_3_hwmod,
427 .clk = "l3_div_ck",
sricharanc4645232011-02-07 21:12:11 +0530428 .addr = omap44xx_l3_main_3_addrs,
Benoit Cousson9b4021b2011-07-09 19:14:27 -0600429 .user = OCP_USER_MPU,
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200430};
431
432/* l3_main_2 -> l3_main_3 */
433static struct omap_hwmod_ocp_if omap44xx_l3_main_2__l3_main_3 = {
434 .master = &omap44xx_l3_main_2_hwmod,
435 .slave = &omap44xx_l3_main_3_hwmod,
436 .clk = "l3_div_ck",
437 .user = OCP_USER_MPU | OCP_USER_SDMA,
438};
439
440/* l4_cfg -> l3_main_3 */
441static struct omap_hwmod_ocp_if omap44xx_l4_cfg__l3_main_3 = {
442 .master = &omap44xx_l4_cfg_hwmod,
443 .slave = &omap44xx_l3_main_3_hwmod,
444 .clk = "l4_div_ck",
445 .user = OCP_USER_MPU | OCP_USER_SDMA,
446};
447
448/* l3_main_3 slave ports */
449static struct omap_hwmod_ocp_if *omap44xx_l3_main_3_slaves[] = {
450 &omap44xx_l3_main_1__l3_main_3,
451 &omap44xx_l3_main_2__l3_main_3,
452 &omap44xx_l4_cfg__l3_main_3,
453};
454
455static struct omap_hwmod omap44xx_l3_main_3_hwmod = {
456 .name = "l3_main_3",
457 .class = &omap44xx_l3_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600458 .clkdm_name = "l3_instr_clkdm",
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200459 .slaves = omap44xx_l3_main_3_slaves,
460 .slaves_cnt = ARRAY_SIZE(omap44xx_l3_main_3_slaves),
461 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
462};
463
464/*
465 * 'l4' class
466 * instance(s): l4_abe, l4_cfg, l4_per, l4_wkup
467 */
468static struct omap_hwmod_class omap44xx_l4_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +0000469 .name = "l4",
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200470};
471
Benoit Cousson7e69ed92011-07-09 19:14:28 -0600472/* l4_abe */
Benoit Cousson407a6882011-02-15 22:39:48 +0100473/* aess -> l4_abe */
474static struct omap_hwmod_ocp_if omap44xx_aess__l4_abe = {
475 .master = &omap44xx_aess_hwmod,
476 .slave = &omap44xx_l4_abe_hwmod,
477 .clk = "ocp_abe_iclk",
478 .user = OCP_USER_MPU | OCP_USER_SDMA,
479};
480
Benoit Cousson8f25bdc2010-12-21 21:08:34 -0700481/* dsp -> l4_abe */
482static struct omap_hwmod_ocp_if omap44xx_dsp__l4_abe = {
483 .master = &omap44xx_dsp_hwmod,
484 .slave = &omap44xx_l4_abe_hwmod,
485 .clk = "ocp_abe_iclk",
486 .user = OCP_USER_MPU | OCP_USER_SDMA,
487};
488
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200489/* l3_main_1 -> l4_abe */
490static struct omap_hwmod_ocp_if omap44xx_l3_main_1__l4_abe = {
491 .master = &omap44xx_l3_main_1_hwmod,
492 .slave = &omap44xx_l4_abe_hwmod,
493 .clk = "l3_div_ck",
494 .user = OCP_USER_MPU | OCP_USER_SDMA,
495};
496
497/* mpu -> l4_abe */
498static struct omap_hwmod_ocp_if omap44xx_mpu__l4_abe = {
499 .master = &omap44xx_mpu_hwmod,
500 .slave = &omap44xx_l4_abe_hwmod,
501 .clk = "ocp_abe_iclk",
502 .user = OCP_USER_MPU | OCP_USER_SDMA,
503};
504
505/* l4_abe slave ports */
506static struct omap_hwmod_ocp_if *omap44xx_l4_abe_slaves[] = {
Benoit Cousson407a6882011-02-15 22:39:48 +0100507 &omap44xx_aess__l4_abe,
Benoit Cousson8f25bdc2010-12-21 21:08:34 -0700508 &omap44xx_dsp__l4_abe,
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200509 &omap44xx_l3_main_1__l4_abe,
510 &omap44xx_mpu__l4_abe,
511};
512
513static struct omap_hwmod omap44xx_l4_abe_hwmod = {
514 .name = "l4_abe",
515 .class = &omap44xx_l4_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600516 .clkdm_name = "abe_clkdm",
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200517 .slaves = omap44xx_l4_abe_slaves,
518 .slaves_cnt = ARRAY_SIZE(omap44xx_l4_abe_slaves),
519 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
520};
521
Benoit Cousson7e69ed92011-07-09 19:14:28 -0600522/* l4_cfg */
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200523/* l3_main_1 -> l4_cfg */
524static struct omap_hwmod_ocp_if omap44xx_l3_main_1__l4_cfg = {
525 .master = &omap44xx_l3_main_1_hwmod,
526 .slave = &omap44xx_l4_cfg_hwmod,
527 .clk = "l3_div_ck",
528 .user = OCP_USER_MPU | OCP_USER_SDMA,
529};
530
531/* l4_cfg slave ports */
532static struct omap_hwmod_ocp_if *omap44xx_l4_cfg_slaves[] = {
533 &omap44xx_l3_main_1__l4_cfg,
534};
535
536static struct omap_hwmod omap44xx_l4_cfg_hwmod = {
537 .name = "l4_cfg",
538 .class = &omap44xx_l4_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600539 .clkdm_name = "l4_cfg_clkdm",
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200540 .slaves = omap44xx_l4_cfg_slaves,
541 .slaves_cnt = ARRAY_SIZE(omap44xx_l4_cfg_slaves),
542 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
543};
544
Benoit Cousson7e69ed92011-07-09 19:14:28 -0600545/* l4_per */
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200546/* l3_main_2 -> l4_per */
547static struct omap_hwmod_ocp_if omap44xx_l3_main_2__l4_per = {
548 .master = &omap44xx_l3_main_2_hwmod,
549 .slave = &omap44xx_l4_per_hwmod,
550 .clk = "l3_div_ck",
551 .user = OCP_USER_MPU | OCP_USER_SDMA,
552};
553
554/* l4_per slave ports */
555static struct omap_hwmod_ocp_if *omap44xx_l4_per_slaves[] = {
556 &omap44xx_l3_main_2__l4_per,
557};
558
559static struct omap_hwmod omap44xx_l4_per_hwmod = {
560 .name = "l4_per",
561 .class = &omap44xx_l4_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600562 .clkdm_name = "l4_per_clkdm",
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200563 .slaves = omap44xx_l4_per_slaves,
564 .slaves_cnt = ARRAY_SIZE(omap44xx_l4_per_slaves),
565 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
566};
567
Benoit Cousson7e69ed92011-07-09 19:14:28 -0600568/* l4_wkup */
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200569/* l4_cfg -> l4_wkup */
570static struct omap_hwmod_ocp_if omap44xx_l4_cfg__l4_wkup = {
571 .master = &omap44xx_l4_cfg_hwmod,
572 .slave = &omap44xx_l4_wkup_hwmod,
573 .clk = "l4_div_ck",
574 .user = OCP_USER_MPU | OCP_USER_SDMA,
575};
576
577/* l4_wkup slave ports */
578static struct omap_hwmod_ocp_if *omap44xx_l4_wkup_slaves[] = {
579 &omap44xx_l4_cfg__l4_wkup,
580};
581
582static struct omap_hwmod omap44xx_l4_wkup_hwmod = {
583 .name = "l4_wkup",
584 .class = &omap44xx_l4_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600585 .clkdm_name = "l4_wkup_clkdm",
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200586 .slaves = omap44xx_l4_wkup_slaves,
587 .slaves_cnt = ARRAY_SIZE(omap44xx_l4_wkup_slaves),
588 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
589};
590
591/*
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700592 * 'mpu_bus' class
593 * instance(s): mpu_private
594 */
595static struct omap_hwmod_class omap44xx_mpu_bus_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +0000596 .name = "mpu_bus",
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700597};
598
Benoit Cousson7e69ed92011-07-09 19:14:28 -0600599/* mpu_private */
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700600/* mpu -> mpu_private */
601static struct omap_hwmod_ocp_if omap44xx_mpu__mpu_private = {
602 .master = &omap44xx_mpu_hwmod,
603 .slave = &omap44xx_mpu_private_hwmod,
604 .clk = "l3_div_ck",
605 .user = OCP_USER_MPU | OCP_USER_SDMA,
606};
607
608/* mpu_private slave ports */
609static struct omap_hwmod_ocp_if *omap44xx_mpu_private_slaves[] = {
610 &omap44xx_mpu__mpu_private,
611};
612
613static struct omap_hwmod omap44xx_mpu_private_hwmod = {
614 .name = "mpu_private",
615 .class = &omap44xx_mpu_bus_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600616 .clkdm_name = "mpuss_clkdm",
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700617 .slaves = omap44xx_mpu_private_slaves,
618 .slaves_cnt = ARRAY_SIZE(omap44xx_mpu_private_slaves),
619 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
620};
621
622/*
623 * Modules omap_hwmod structures
624 *
625 * The following IPs are excluded for the moment because:
626 * - They do not need an explicit SW control using omap_hwmod API.
627 * - They still need to be validated with the driver
628 * properly adapted to omap_hwmod / omap_device
629 *
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700630 * c2c
631 * c2c_target_fw
632 * cm_core
633 * cm_core_aon
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700634 * ctrl_module_core
635 * ctrl_module_pad_core
636 * ctrl_module_pad_wkup
637 * ctrl_module_wkup
638 * debugss
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700639 * efuse_ctrl_cust
640 * efuse_ctrl_std
641 * elm
642 * emif1
643 * emif2
644 * fdif
645 * gpmc
646 * gpu
647 * hdq1w
Benoit Cousson00fe6102011-07-09 19:14:28 -0600648 * mcasp
649 * mpu_c0
650 * mpu_c1
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700651 * ocmc_ram
652 * ocp2scp_usb_phy
653 * ocp_wp_noc
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700654 * prcm_mpu
655 * prm
656 * scrm
657 * sl2if
658 * slimbus1
659 * slimbus2
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700660 * usb_host_fs
661 * usb_host_hs
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700662 * usb_phy_cm
663 * usb_tll_hs
664 * usim
665 */
666
667/*
Benoit Cousson407a6882011-02-15 22:39:48 +0100668 * 'aess' class
669 * audio engine sub system
670 */
671
672static struct omap_hwmod_class_sysconfig omap44xx_aess_sysc = {
673 .rev_offs = 0x0000,
674 .sysc_offs = 0x0010,
675 .sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE),
676 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
Benoit Coussonc614ebf2011-07-01 22:54:01 +0200677 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART |
678 MSTANDBY_SMART_WKUP),
Benoit Cousson407a6882011-02-15 22:39:48 +0100679 .sysc_fields = &omap_hwmod_sysc_type2,
680};
681
682static struct omap_hwmod_class omap44xx_aess_hwmod_class = {
683 .name = "aess",
684 .sysc = &omap44xx_aess_sysc,
685};
686
687/* aess */
688static struct omap_hwmod_irq_info omap44xx_aess_irqs[] = {
689 { .irq = 99 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -0600690 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +0100691};
692
693static struct omap_hwmod_dma_info omap44xx_aess_sdma_reqs[] = {
694 { .name = "fifo0", .dma_req = 100 + OMAP44XX_DMA_REQ_START },
695 { .name = "fifo1", .dma_req = 101 + OMAP44XX_DMA_REQ_START },
696 { .name = "fifo2", .dma_req = 102 + OMAP44XX_DMA_REQ_START },
697 { .name = "fifo3", .dma_req = 103 + OMAP44XX_DMA_REQ_START },
698 { .name = "fifo4", .dma_req = 104 + OMAP44XX_DMA_REQ_START },
699 { .name = "fifo5", .dma_req = 105 + OMAP44XX_DMA_REQ_START },
700 { .name = "fifo6", .dma_req = 106 + OMAP44XX_DMA_REQ_START },
701 { .name = "fifo7", .dma_req = 107 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -0600702 { .dma_req = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +0100703};
704
705/* aess master ports */
706static struct omap_hwmod_ocp_if *omap44xx_aess_masters[] = {
707 &omap44xx_aess__l4_abe,
708};
709
710static struct omap_hwmod_addr_space omap44xx_aess_addrs[] = {
711 {
712 .pa_start = 0x401f1000,
713 .pa_end = 0x401f13ff,
714 .flags = ADDR_TYPE_RT
715 },
Paul Walmsley78183f32011-07-09 19:14:05 -0600716 { }
Benoit Cousson407a6882011-02-15 22:39:48 +0100717};
718
719/* l4_abe -> aess */
720static struct omap_hwmod_ocp_if omap44xx_l4_abe__aess = {
721 .master = &omap44xx_l4_abe_hwmod,
722 .slave = &omap44xx_aess_hwmod,
723 .clk = "ocp_abe_iclk",
724 .addr = omap44xx_aess_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +0100725 .user = OCP_USER_MPU,
726};
727
728static struct omap_hwmod_addr_space omap44xx_aess_dma_addrs[] = {
729 {
730 .pa_start = 0x490f1000,
731 .pa_end = 0x490f13ff,
732 .flags = ADDR_TYPE_RT
733 },
Paul Walmsley78183f32011-07-09 19:14:05 -0600734 { }
Benoit Cousson407a6882011-02-15 22:39:48 +0100735};
736
737/* l4_abe -> aess (dma) */
738static struct omap_hwmod_ocp_if omap44xx_l4_abe__aess_dma = {
739 .master = &omap44xx_l4_abe_hwmod,
740 .slave = &omap44xx_aess_hwmod,
741 .clk = "ocp_abe_iclk",
742 .addr = omap44xx_aess_dma_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +0100743 .user = OCP_USER_SDMA,
744};
745
746/* aess slave ports */
747static struct omap_hwmod_ocp_if *omap44xx_aess_slaves[] = {
748 &omap44xx_l4_abe__aess,
749 &omap44xx_l4_abe__aess_dma,
750};
751
752static struct omap_hwmod omap44xx_aess_hwmod = {
753 .name = "aess",
754 .class = &omap44xx_aess_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600755 .clkdm_name = "abe_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +0100756 .mpu_irqs = omap44xx_aess_irqs,
Benoit Cousson407a6882011-02-15 22:39:48 +0100757 .sdma_reqs = omap44xx_aess_sdma_reqs,
Benoit Cousson407a6882011-02-15 22:39:48 +0100758 .main_clk = "aess_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -0600759 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +0100760 .omap4 = {
761 .clkctrl_reg = OMAP4430_CM1_ABE_AESS_CLKCTRL,
762 },
763 },
764 .slaves = omap44xx_aess_slaves,
765 .slaves_cnt = ARRAY_SIZE(omap44xx_aess_slaves),
766 .masters = omap44xx_aess_masters,
767 .masters_cnt = ARRAY_SIZE(omap44xx_aess_masters),
768 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
769};
770
771/*
772 * 'bandgap' class
773 * bangap reference for ldo regulators
774 */
775
776static struct omap_hwmod_class omap44xx_bandgap_hwmod_class = {
777 .name = "bandgap",
778};
779
780/* bandgap */
781static struct omap_hwmod_opt_clk bandgap_opt_clks[] = {
782 { .role = "fclk", .clk = "bandgap_fclk" },
783};
784
785static struct omap_hwmod omap44xx_bandgap_hwmod = {
786 .name = "bandgap",
787 .class = &omap44xx_bandgap_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600788 .clkdm_name = "l4_wkup_clkdm",
Benoit Cousson00fe6102011-07-09 19:14:28 -0600789 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +0100790 .omap4 = {
791 .clkctrl_reg = OMAP4430_CM_WKUP_BANDGAP_CLKCTRL,
792 },
793 },
794 .opt_clks = bandgap_opt_clks,
795 .opt_clks_cnt = ARRAY_SIZE(bandgap_opt_clks),
796 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
797};
798
799/*
800 * 'counter' class
801 * 32-bit ordinary counter, clocked by the falling edge of the 32 khz clock
802 */
803
804static struct omap_hwmod_class_sysconfig omap44xx_counter_sysc = {
805 .rev_offs = 0x0000,
806 .sysc_offs = 0x0004,
807 .sysc_flags = SYSC_HAS_SIDLEMODE,
808 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
809 SIDLE_SMART_WKUP),
810 .sysc_fields = &omap_hwmod_sysc_type1,
811};
812
813static struct omap_hwmod_class omap44xx_counter_hwmod_class = {
814 .name = "counter",
815 .sysc = &omap44xx_counter_sysc,
816};
817
818/* counter_32k */
819static struct omap_hwmod omap44xx_counter_32k_hwmod;
820static struct omap_hwmod_addr_space omap44xx_counter_32k_addrs[] = {
821 {
822 .pa_start = 0x4a304000,
823 .pa_end = 0x4a30401f,
824 .flags = ADDR_TYPE_RT
825 },
Paul Walmsley78183f32011-07-09 19:14:05 -0600826 { }
Benoit Cousson407a6882011-02-15 22:39:48 +0100827};
828
829/* l4_wkup -> counter_32k */
830static struct omap_hwmod_ocp_if omap44xx_l4_wkup__counter_32k = {
831 .master = &omap44xx_l4_wkup_hwmod,
832 .slave = &omap44xx_counter_32k_hwmod,
833 .clk = "l4_wkup_clk_mux_ck",
834 .addr = omap44xx_counter_32k_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +0100835 .user = OCP_USER_MPU | OCP_USER_SDMA,
836};
837
838/* counter_32k slave ports */
839static struct omap_hwmod_ocp_if *omap44xx_counter_32k_slaves[] = {
840 &omap44xx_l4_wkup__counter_32k,
841};
842
843static struct omap_hwmod omap44xx_counter_32k_hwmod = {
844 .name = "counter_32k",
845 .class = &omap44xx_counter_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600846 .clkdm_name = "l4_wkup_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +0100847 .flags = HWMOD_SWSUP_SIDLE,
848 .main_clk = "sys_32k_ck",
Benoit Cousson00fe6102011-07-09 19:14:28 -0600849 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +0100850 .omap4 = {
851 .clkctrl_reg = OMAP4430_CM_WKUP_SYNCTIMER_CLKCTRL,
852 },
853 },
854 .slaves = omap44xx_counter_32k_slaves,
855 .slaves_cnt = ARRAY_SIZE(omap44xx_counter_32k_slaves),
856 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
857};
858
859/*
Benoit Coussond7cf5f32010-12-23 22:30:31 +0000860 * 'dma' class
861 * dma controller for data exchange between memory to memory (i.e. internal or
862 * external memory) and gp peripherals to memory or memory to gp peripherals
863 */
864
865static struct omap_hwmod_class_sysconfig omap44xx_dma_sysc = {
866 .rev_offs = 0x0000,
867 .sysc_offs = 0x002c,
868 .syss_offs = 0x0028,
869 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
870 SYSC_HAS_EMUFREE | SYSC_HAS_MIDLEMODE |
871 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
872 SYSS_HAS_RESET_STATUS),
873 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
874 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
875 .sysc_fields = &omap_hwmod_sysc_type1,
876};
877
878static struct omap_hwmod_class omap44xx_dma_hwmod_class = {
879 .name = "dma",
880 .sysc = &omap44xx_dma_sysc,
881};
882
883/* dma dev_attr */
884static struct omap_dma_dev_attr dma_dev_attr = {
885 .dev_caps = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY |
886 IS_CSSA_32 | IS_CDSA_32 | IS_RW_PRIORITY,
887 .lch_count = 32,
888};
889
890/* dma_system */
891static struct omap_hwmod_irq_info omap44xx_dma_system_irqs[] = {
892 { .name = "0", .irq = 12 + OMAP44XX_IRQ_GIC_START },
893 { .name = "1", .irq = 13 + OMAP44XX_IRQ_GIC_START },
894 { .name = "2", .irq = 14 + OMAP44XX_IRQ_GIC_START },
895 { .name = "3", .irq = 15 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -0600896 { .irq = -1 }
Benoit Coussond7cf5f32010-12-23 22:30:31 +0000897};
898
899/* dma_system master ports */
900static struct omap_hwmod_ocp_if *omap44xx_dma_system_masters[] = {
901 &omap44xx_dma_system__l3_main_2,
902};
903
904static struct omap_hwmod_addr_space omap44xx_dma_system_addrs[] = {
905 {
906 .pa_start = 0x4a056000,
Benoit Cousson1286eeb2011-04-19 10:15:36 -0600907 .pa_end = 0x4a056fff,
Benoit Coussond7cf5f32010-12-23 22:30:31 +0000908 .flags = ADDR_TYPE_RT
909 },
Paul Walmsley78183f32011-07-09 19:14:05 -0600910 { }
Benoit Coussond7cf5f32010-12-23 22:30:31 +0000911};
912
913/* l4_cfg -> dma_system */
914static struct omap_hwmod_ocp_if omap44xx_l4_cfg__dma_system = {
915 .master = &omap44xx_l4_cfg_hwmod,
916 .slave = &omap44xx_dma_system_hwmod,
917 .clk = "l4_div_ck",
918 .addr = omap44xx_dma_system_addrs,
Benoit Coussond7cf5f32010-12-23 22:30:31 +0000919 .user = OCP_USER_MPU | OCP_USER_SDMA,
920};
921
922/* dma_system slave ports */
923static struct omap_hwmod_ocp_if *omap44xx_dma_system_slaves[] = {
924 &omap44xx_l4_cfg__dma_system,
925};
926
927static struct omap_hwmod omap44xx_dma_system_hwmod = {
928 .name = "dma_system",
929 .class = &omap44xx_dma_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600930 .clkdm_name = "l3_dma_clkdm",
Benoit Coussond7cf5f32010-12-23 22:30:31 +0000931 .mpu_irqs = omap44xx_dma_system_irqs,
Benoit Coussond7cf5f32010-12-23 22:30:31 +0000932 .main_clk = "l3_div_ck",
933 .prcm = {
934 .omap4 = {
935 .clkctrl_reg = OMAP4430_CM_SDMA_SDMA_CLKCTRL,
936 },
937 },
938 .dev_attr = &dma_dev_attr,
939 .slaves = omap44xx_dma_system_slaves,
940 .slaves_cnt = ARRAY_SIZE(omap44xx_dma_system_slaves),
941 .masters = omap44xx_dma_system_masters,
942 .masters_cnt = ARRAY_SIZE(omap44xx_dma_system_masters),
943 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
944};
945
946/*
Benoit Cousson8ca476d2011-01-25 22:01:00 +0000947 * 'dmic' class
948 * digital microphone controller
949 */
950
951static struct omap_hwmod_class_sysconfig omap44xx_dmic_sysc = {
952 .rev_offs = 0x0000,
953 .sysc_offs = 0x0010,
954 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
955 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
956 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
957 SIDLE_SMART_WKUP),
958 .sysc_fields = &omap_hwmod_sysc_type2,
959};
960
961static struct omap_hwmod_class omap44xx_dmic_hwmod_class = {
962 .name = "dmic",
963 .sysc = &omap44xx_dmic_sysc,
964};
965
966/* dmic */
967static struct omap_hwmod omap44xx_dmic_hwmod;
968static struct omap_hwmod_irq_info omap44xx_dmic_irqs[] = {
969 { .irq = 114 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -0600970 { .irq = -1 }
Benoit Cousson8ca476d2011-01-25 22:01:00 +0000971};
972
973static struct omap_hwmod_dma_info omap44xx_dmic_sdma_reqs[] = {
974 { .dma_req = 66 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -0600975 { .dma_req = -1 }
Benoit Cousson8ca476d2011-01-25 22:01:00 +0000976};
977
978static struct omap_hwmod_addr_space omap44xx_dmic_addrs[] = {
979 {
980 .pa_start = 0x4012e000,
981 .pa_end = 0x4012e07f,
982 .flags = ADDR_TYPE_RT
983 },
Paul Walmsley78183f32011-07-09 19:14:05 -0600984 { }
Benoit Cousson8ca476d2011-01-25 22:01:00 +0000985};
986
987/* l4_abe -> dmic */
988static struct omap_hwmod_ocp_if omap44xx_l4_abe__dmic = {
989 .master = &omap44xx_l4_abe_hwmod,
990 .slave = &omap44xx_dmic_hwmod,
991 .clk = "ocp_abe_iclk",
992 .addr = omap44xx_dmic_addrs,
Benoit Cousson8ca476d2011-01-25 22:01:00 +0000993 .user = OCP_USER_MPU,
994};
995
996static struct omap_hwmod_addr_space omap44xx_dmic_dma_addrs[] = {
997 {
998 .pa_start = 0x4902e000,
999 .pa_end = 0x4902e07f,
1000 .flags = ADDR_TYPE_RT
1001 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001002 { }
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001003};
1004
1005/* l4_abe -> dmic (dma) */
1006static struct omap_hwmod_ocp_if omap44xx_l4_abe__dmic_dma = {
1007 .master = &omap44xx_l4_abe_hwmod,
1008 .slave = &omap44xx_dmic_hwmod,
1009 .clk = "ocp_abe_iclk",
1010 .addr = omap44xx_dmic_dma_addrs,
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001011 .user = OCP_USER_SDMA,
1012};
1013
1014/* dmic slave ports */
1015static struct omap_hwmod_ocp_if *omap44xx_dmic_slaves[] = {
1016 &omap44xx_l4_abe__dmic,
1017 &omap44xx_l4_abe__dmic_dma,
1018};
1019
1020static struct omap_hwmod omap44xx_dmic_hwmod = {
1021 .name = "dmic",
1022 .class = &omap44xx_dmic_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001023 .clkdm_name = "abe_clkdm",
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001024 .mpu_irqs = omap44xx_dmic_irqs,
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001025 .sdma_reqs = omap44xx_dmic_sdma_reqs,
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001026 .main_clk = "dmic_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06001027 .prcm = {
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001028 .omap4 = {
1029 .clkctrl_reg = OMAP4430_CM1_ABE_DMIC_CLKCTRL,
1030 },
1031 },
1032 .slaves = omap44xx_dmic_slaves,
1033 .slaves_cnt = ARRAY_SIZE(omap44xx_dmic_slaves),
1034 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1035};
1036
1037/*
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07001038 * 'dsp' class
1039 * dsp sub-system
1040 */
1041
1042static struct omap_hwmod_class omap44xx_dsp_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +00001043 .name = "dsp",
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07001044};
1045
1046/* dsp */
1047static struct omap_hwmod_irq_info omap44xx_dsp_irqs[] = {
1048 { .irq = 28 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06001049 { .irq = -1 }
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07001050};
1051
1052static struct omap_hwmod_rst_info omap44xx_dsp_resets[] = {
1053 { .name = "mmu_cache", .rst_shift = 1 },
1054};
1055
1056static struct omap_hwmod_rst_info omap44xx_dsp_c0_resets[] = {
1057 { .name = "dsp", .rst_shift = 0 },
1058};
1059
1060/* dsp -> iva */
1061static struct omap_hwmod_ocp_if omap44xx_dsp__iva = {
1062 .master = &omap44xx_dsp_hwmod,
1063 .slave = &omap44xx_iva_hwmod,
1064 .clk = "dpll_iva_m5x2_ck",
1065};
1066
1067/* dsp master ports */
1068static struct omap_hwmod_ocp_if *omap44xx_dsp_masters[] = {
1069 &omap44xx_dsp__l3_main_1,
1070 &omap44xx_dsp__l4_abe,
1071 &omap44xx_dsp__iva,
1072};
1073
1074/* l4_cfg -> dsp */
1075static struct omap_hwmod_ocp_if omap44xx_l4_cfg__dsp = {
1076 .master = &omap44xx_l4_cfg_hwmod,
1077 .slave = &omap44xx_dsp_hwmod,
1078 .clk = "l4_div_ck",
1079 .user = OCP_USER_MPU | OCP_USER_SDMA,
1080};
1081
1082/* dsp slave ports */
1083static struct omap_hwmod_ocp_if *omap44xx_dsp_slaves[] = {
1084 &omap44xx_l4_cfg__dsp,
1085};
1086
1087/* Pseudo hwmod for reset control purpose only */
1088static struct omap_hwmod omap44xx_dsp_c0_hwmod = {
1089 .name = "dsp_c0",
1090 .class = &omap44xx_dsp_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001091 .clkdm_name = "tesla_clkdm",
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07001092 .flags = HWMOD_INIT_NO_RESET,
1093 .rst_lines = omap44xx_dsp_c0_resets,
1094 .rst_lines_cnt = ARRAY_SIZE(omap44xx_dsp_c0_resets),
1095 .prcm = {
1096 .omap4 = {
1097 .rstctrl_reg = OMAP4430_RM_TESLA_RSTCTRL,
1098 },
1099 },
1100 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1101};
1102
1103static struct omap_hwmod omap44xx_dsp_hwmod = {
1104 .name = "dsp",
1105 .class = &omap44xx_dsp_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001106 .clkdm_name = "tesla_clkdm",
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07001107 .mpu_irqs = omap44xx_dsp_irqs,
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07001108 .rst_lines = omap44xx_dsp_resets,
1109 .rst_lines_cnt = ARRAY_SIZE(omap44xx_dsp_resets),
1110 .main_clk = "dsp_fck",
1111 .prcm = {
1112 .omap4 = {
1113 .clkctrl_reg = OMAP4430_CM_TESLA_TESLA_CLKCTRL,
1114 .rstctrl_reg = OMAP4430_RM_TESLA_RSTCTRL,
1115 },
1116 },
1117 .slaves = omap44xx_dsp_slaves,
1118 .slaves_cnt = ARRAY_SIZE(omap44xx_dsp_slaves),
1119 .masters = omap44xx_dsp_masters,
1120 .masters_cnt = ARRAY_SIZE(omap44xx_dsp_masters),
1121 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1122};
1123
1124/*
Benoit Coussond63bd742011-01-27 11:17:03 +00001125 * 'dss' class
1126 * display sub-system
1127 */
1128
1129static struct omap_hwmod_class_sysconfig omap44xx_dss_sysc = {
1130 .rev_offs = 0x0000,
1131 .syss_offs = 0x0014,
1132 .sysc_flags = SYSS_HAS_RESET_STATUS,
1133};
1134
1135static struct omap_hwmod_class omap44xx_dss_hwmod_class = {
1136 .name = "dss",
1137 .sysc = &omap44xx_dss_sysc,
1138};
1139
1140/* dss */
1141/* dss master ports */
1142static struct omap_hwmod_ocp_if *omap44xx_dss_masters[] = {
1143 &omap44xx_dss__l3_main_1,
1144};
1145
1146static struct omap_hwmod_addr_space omap44xx_dss_dma_addrs[] = {
1147 {
1148 .pa_start = 0x58000000,
1149 .pa_end = 0x5800007f,
1150 .flags = ADDR_TYPE_RT
1151 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001152 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001153};
1154
1155/* l3_main_2 -> dss */
1156static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss = {
1157 .master = &omap44xx_l3_main_2_hwmod,
1158 .slave = &omap44xx_dss_hwmod,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001159 .clk = "dss_fck",
Benoit Coussond63bd742011-01-27 11:17:03 +00001160 .addr = omap44xx_dss_dma_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001161 .user = OCP_USER_SDMA,
1162};
1163
1164static struct omap_hwmod_addr_space omap44xx_dss_addrs[] = {
1165 {
1166 .pa_start = 0x48040000,
1167 .pa_end = 0x4804007f,
1168 .flags = ADDR_TYPE_RT
1169 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001170 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001171};
1172
1173/* l4_per -> dss */
1174static struct omap_hwmod_ocp_if omap44xx_l4_per__dss = {
1175 .master = &omap44xx_l4_per_hwmod,
1176 .slave = &omap44xx_dss_hwmod,
1177 .clk = "l4_div_ck",
1178 .addr = omap44xx_dss_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001179 .user = OCP_USER_MPU,
1180};
1181
1182/* dss slave ports */
1183static struct omap_hwmod_ocp_if *omap44xx_dss_slaves[] = {
1184 &omap44xx_l3_main_2__dss,
1185 &omap44xx_l4_per__dss,
1186};
1187
1188static struct omap_hwmod_opt_clk dss_opt_clks[] = {
1189 { .role = "sys_clk", .clk = "dss_sys_clk" },
1190 { .role = "tv_clk", .clk = "dss_tv_clk" },
1191 { .role = "dss_clk", .clk = "dss_dss_clk" },
1192 { .role = "video_clk", .clk = "dss_48mhz_clk" },
1193};
1194
1195static struct omap_hwmod omap44xx_dss_hwmod = {
1196 .name = "dss_core",
1197 .class = &omap44xx_dss_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001198 .clkdm_name = "l3_dss_clkdm",
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001199 .main_clk = "dss_dss_clk",
Benoit Coussond63bd742011-01-27 11:17:03 +00001200 .prcm = {
1201 .omap4 = {
1202 .clkctrl_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
1203 },
1204 },
1205 .opt_clks = dss_opt_clks,
1206 .opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
1207 .slaves = omap44xx_dss_slaves,
1208 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_slaves),
1209 .masters = omap44xx_dss_masters,
1210 .masters_cnt = ARRAY_SIZE(omap44xx_dss_masters),
1211 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1212};
1213
1214/*
1215 * 'dispc' class
1216 * display controller
1217 */
1218
1219static struct omap_hwmod_class_sysconfig omap44xx_dispc_sysc = {
1220 .rev_offs = 0x0000,
1221 .sysc_offs = 0x0010,
1222 .syss_offs = 0x0014,
1223 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
1224 SYSC_HAS_ENAWAKEUP | SYSC_HAS_MIDLEMODE |
1225 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
1226 SYSS_HAS_RESET_STATUS),
1227 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1228 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
1229 .sysc_fields = &omap_hwmod_sysc_type1,
1230};
1231
1232static struct omap_hwmod_class omap44xx_dispc_hwmod_class = {
1233 .name = "dispc",
1234 .sysc = &omap44xx_dispc_sysc,
1235};
1236
1237/* dss_dispc */
1238static struct omap_hwmod omap44xx_dss_dispc_hwmod;
1239static struct omap_hwmod_irq_info omap44xx_dss_dispc_irqs[] = {
1240 { .irq = 25 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06001241 { .irq = -1 }
Benoit Coussond63bd742011-01-27 11:17:03 +00001242};
1243
1244static struct omap_hwmod_dma_info omap44xx_dss_dispc_sdma_reqs[] = {
1245 { .dma_req = 5 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06001246 { .dma_req = -1 }
Benoit Coussond63bd742011-01-27 11:17:03 +00001247};
1248
1249static struct omap_hwmod_addr_space omap44xx_dss_dispc_dma_addrs[] = {
1250 {
1251 .pa_start = 0x58001000,
1252 .pa_end = 0x58001fff,
1253 .flags = ADDR_TYPE_RT
1254 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001255 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001256};
1257
1258/* l3_main_2 -> dss_dispc */
1259static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_dispc = {
1260 .master = &omap44xx_l3_main_2_hwmod,
1261 .slave = &omap44xx_dss_dispc_hwmod,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001262 .clk = "dss_fck",
Benoit Coussond63bd742011-01-27 11:17:03 +00001263 .addr = omap44xx_dss_dispc_dma_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001264 .user = OCP_USER_SDMA,
1265};
1266
1267static struct omap_hwmod_addr_space omap44xx_dss_dispc_addrs[] = {
1268 {
1269 .pa_start = 0x48041000,
1270 .pa_end = 0x48041fff,
1271 .flags = ADDR_TYPE_RT
1272 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001273 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001274};
1275
1276/* l4_per -> dss_dispc */
1277static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_dispc = {
1278 .master = &omap44xx_l4_per_hwmod,
1279 .slave = &omap44xx_dss_dispc_hwmod,
1280 .clk = "l4_div_ck",
1281 .addr = omap44xx_dss_dispc_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001282 .user = OCP_USER_MPU,
1283};
1284
1285/* dss_dispc slave ports */
1286static struct omap_hwmod_ocp_if *omap44xx_dss_dispc_slaves[] = {
1287 &omap44xx_l3_main_2__dss_dispc,
1288 &omap44xx_l4_per__dss_dispc,
1289};
1290
Tomi Valkeinen3a23aaf2011-07-09 20:39:44 -06001291static struct omap_hwmod_opt_clk dss_dispc_opt_clks[] = {
1292 { .role = "sys_clk", .clk = "dss_sys_clk" },
1293 { .role = "tv_clk", .clk = "dss_tv_clk" },
1294 { .role = "hdmi_clk", .clk = "dss_48mhz_clk" },
1295};
1296
Benoit Coussond63bd742011-01-27 11:17:03 +00001297static struct omap_hwmod omap44xx_dss_dispc_hwmod = {
1298 .name = "dss_dispc",
1299 .class = &omap44xx_dispc_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001300 .clkdm_name = "l3_dss_clkdm",
Benoit Coussond63bd742011-01-27 11:17:03 +00001301 .mpu_irqs = omap44xx_dss_dispc_irqs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001302 .sdma_reqs = omap44xx_dss_dispc_sdma_reqs,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001303 .main_clk = "dss_dss_clk",
Benoit Coussond63bd742011-01-27 11:17:03 +00001304 .prcm = {
1305 .omap4 = {
1306 .clkctrl_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
1307 },
1308 },
Tomi Valkeinen3a23aaf2011-07-09 20:39:44 -06001309 .opt_clks = dss_dispc_opt_clks,
1310 .opt_clks_cnt = ARRAY_SIZE(dss_dispc_opt_clks),
Benoit Coussond63bd742011-01-27 11:17:03 +00001311 .slaves = omap44xx_dss_dispc_slaves,
1312 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_dispc_slaves),
1313 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1314};
1315
1316/*
1317 * 'dsi' class
1318 * display serial interface controller
1319 */
1320
1321static struct omap_hwmod_class_sysconfig omap44xx_dsi_sysc = {
1322 .rev_offs = 0x0000,
1323 .sysc_offs = 0x0010,
1324 .syss_offs = 0x0014,
1325 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
1326 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
1327 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
1328 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1329 .sysc_fields = &omap_hwmod_sysc_type1,
1330};
1331
1332static struct omap_hwmod_class omap44xx_dsi_hwmod_class = {
1333 .name = "dsi",
1334 .sysc = &omap44xx_dsi_sysc,
1335};
1336
1337/* dss_dsi1 */
1338static struct omap_hwmod omap44xx_dss_dsi1_hwmod;
1339static struct omap_hwmod_irq_info omap44xx_dss_dsi1_irqs[] = {
1340 { .irq = 53 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06001341 { .irq = -1 }
Benoit Coussond63bd742011-01-27 11:17:03 +00001342};
1343
1344static struct omap_hwmod_dma_info omap44xx_dss_dsi1_sdma_reqs[] = {
1345 { .dma_req = 74 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06001346 { .dma_req = -1 }
Benoit Coussond63bd742011-01-27 11:17:03 +00001347};
1348
1349static struct omap_hwmod_addr_space omap44xx_dss_dsi1_dma_addrs[] = {
1350 {
1351 .pa_start = 0x58004000,
1352 .pa_end = 0x580041ff,
1353 .flags = ADDR_TYPE_RT
1354 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001355 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001356};
1357
1358/* l3_main_2 -> dss_dsi1 */
1359static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_dsi1 = {
1360 .master = &omap44xx_l3_main_2_hwmod,
1361 .slave = &omap44xx_dss_dsi1_hwmod,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001362 .clk = "dss_fck",
Benoit Coussond63bd742011-01-27 11:17:03 +00001363 .addr = omap44xx_dss_dsi1_dma_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001364 .user = OCP_USER_SDMA,
1365};
1366
1367static struct omap_hwmod_addr_space omap44xx_dss_dsi1_addrs[] = {
1368 {
1369 .pa_start = 0x48044000,
1370 .pa_end = 0x480441ff,
1371 .flags = ADDR_TYPE_RT
1372 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001373 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001374};
1375
1376/* l4_per -> dss_dsi1 */
1377static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_dsi1 = {
1378 .master = &omap44xx_l4_per_hwmod,
1379 .slave = &omap44xx_dss_dsi1_hwmod,
1380 .clk = "l4_div_ck",
1381 .addr = omap44xx_dss_dsi1_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001382 .user = OCP_USER_MPU,
1383};
1384
1385/* dss_dsi1 slave ports */
1386static struct omap_hwmod_ocp_if *omap44xx_dss_dsi1_slaves[] = {
1387 &omap44xx_l3_main_2__dss_dsi1,
1388 &omap44xx_l4_per__dss_dsi1,
1389};
1390
Tomi Valkeinen3a23aaf2011-07-09 20:39:44 -06001391static struct omap_hwmod_opt_clk dss_dsi1_opt_clks[] = {
1392 { .role = "sys_clk", .clk = "dss_sys_clk" },
1393};
1394
Benoit Coussond63bd742011-01-27 11:17:03 +00001395static struct omap_hwmod omap44xx_dss_dsi1_hwmod = {
1396 .name = "dss_dsi1",
1397 .class = &omap44xx_dsi_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001398 .clkdm_name = "l3_dss_clkdm",
Benoit Coussond63bd742011-01-27 11:17:03 +00001399 .mpu_irqs = omap44xx_dss_dsi1_irqs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001400 .sdma_reqs = omap44xx_dss_dsi1_sdma_reqs,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001401 .main_clk = "dss_dss_clk",
Benoit Coussond63bd742011-01-27 11:17:03 +00001402 .prcm = {
1403 .omap4 = {
1404 .clkctrl_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
1405 },
1406 },
Tomi Valkeinen3a23aaf2011-07-09 20:39:44 -06001407 .opt_clks = dss_dsi1_opt_clks,
1408 .opt_clks_cnt = ARRAY_SIZE(dss_dsi1_opt_clks),
Benoit Coussond63bd742011-01-27 11:17:03 +00001409 .slaves = omap44xx_dss_dsi1_slaves,
1410 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_dsi1_slaves),
1411 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1412};
1413
1414/* dss_dsi2 */
1415static struct omap_hwmod omap44xx_dss_dsi2_hwmod;
1416static struct omap_hwmod_irq_info omap44xx_dss_dsi2_irqs[] = {
1417 { .irq = 84 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06001418 { .irq = -1 }
Benoit Coussond63bd742011-01-27 11:17:03 +00001419};
1420
1421static struct omap_hwmod_dma_info omap44xx_dss_dsi2_sdma_reqs[] = {
1422 { .dma_req = 83 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06001423 { .dma_req = -1 }
Benoit Coussond63bd742011-01-27 11:17:03 +00001424};
1425
1426static struct omap_hwmod_addr_space omap44xx_dss_dsi2_dma_addrs[] = {
1427 {
1428 .pa_start = 0x58005000,
1429 .pa_end = 0x580051ff,
1430 .flags = ADDR_TYPE_RT
1431 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001432 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001433};
1434
1435/* l3_main_2 -> dss_dsi2 */
1436static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_dsi2 = {
1437 .master = &omap44xx_l3_main_2_hwmod,
1438 .slave = &omap44xx_dss_dsi2_hwmod,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001439 .clk = "dss_fck",
Benoit Coussond63bd742011-01-27 11:17:03 +00001440 .addr = omap44xx_dss_dsi2_dma_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001441 .user = OCP_USER_SDMA,
1442};
1443
1444static struct omap_hwmod_addr_space omap44xx_dss_dsi2_addrs[] = {
1445 {
1446 .pa_start = 0x48045000,
1447 .pa_end = 0x480451ff,
1448 .flags = ADDR_TYPE_RT
1449 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001450 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001451};
1452
1453/* l4_per -> dss_dsi2 */
1454static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_dsi2 = {
1455 .master = &omap44xx_l4_per_hwmod,
1456 .slave = &omap44xx_dss_dsi2_hwmod,
1457 .clk = "l4_div_ck",
1458 .addr = omap44xx_dss_dsi2_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001459 .user = OCP_USER_MPU,
1460};
1461
1462/* dss_dsi2 slave ports */
1463static struct omap_hwmod_ocp_if *omap44xx_dss_dsi2_slaves[] = {
1464 &omap44xx_l3_main_2__dss_dsi2,
1465 &omap44xx_l4_per__dss_dsi2,
1466};
1467
Tomi Valkeinen3a23aaf2011-07-09 20:39:44 -06001468static struct omap_hwmod_opt_clk dss_dsi2_opt_clks[] = {
1469 { .role = "sys_clk", .clk = "dss_sys_clk" },
1470};
1471
Benoit Coussond63bd742011-01-27 11:17:03 +00001472static struct omap_hwmod omap44xx_dss_dsi2_hwmod = {
1473 .name = "dss_dsi2",
1474 .class = &omap44xx_dsi_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001475 .clkdm_name = "l3_dss_clkdm",
Benoit Coussond63bd742011-01-27 11:17:03 +00001476 .mpu_irqs = omap44xx_dss_dsi2_irqs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001477 .sdma_reqs = omap44xx_dss_dsi2_sdma_reqs,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001478 .main_clk = "dss_dss_clk",
Benoit Coussond63bd742011-01-27 11:17:03 +00001479 .prcm = {
1480 .omap4 = {
1481 .clkctrl_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
1482 },
1483 },
Tomi Valkeinen3a23aaf2011-07-09 20:39:44 -06001484 .opt_clks = dss_dsi2_opt_clks,
1485 .opt_clks_cnt = ARRAY_SIZE(dss_dsi2_opt_clks),
Benoit Coussond63bd742011-01-27 11:17:03 +00001486 .slaves = omap44xx_dss_dsi2_slaves,
1487 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_dsi2_slaves),
1488 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1489};
1490
1491/*
1492 * 'hdmi' class
1493 * hdmi controller
1494 */
1495
1496static struct omap_hwmod_class_sysconfig omap44xx_hdmi_sysc = {
1497 .rev_offs = 0x0000,
1498 .sysc_offs = 0x0010,
1499 .sysc_flags = (SYSC_HAS_RESET_STATUS | SYSC_HAS_SIDLEMODE |
1500 SYSC_HAS_SOFTRESET),
1501 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1502 SIDLE_SMART_WKUP),
1503 .sysc_fields = &omap_hwmod_sysc_type2,
1504};
1505
1506static struct omap_hwmod_class omap44xx_hdmi_hwmod_class = {
1507 .name = "hdmi",
1508 .sysc = &omap44xx_hdmi_sysc,
1509};
1510
1511/* dss_hdmi */
1512static struct omap_hwmod omap44xx_dss_hdmi_hwmod;
1513static struct omap_hwmod_irq_info omap44xx_dss_hdmi_irqs[] = {
1514 { .irq = 101 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06001515 { .irq = -1 }
Benoit Coussond63bd742011-01-27 11:17:03 +00001516};
1517
1518static struct omap_hwmod_dma_info omap44xx_dss_hdmi_sdma_reqs[] = {
1519 { .dma_req = 75 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06001520 { .dma_req = -1 }
Benoit Coussond63bd742011-01-27 11:17:03 +00001521};
1522
1523static struct omap_hwmod_addr_space omap44xx_dss_hdmi_dma_addrs[] = {
1524 {
1525 .pa_start = 0x58006000,
1526 .pa_end = 0x58006fff,
1527 .flags = ADDR_TYPE_RT
1528 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001529 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001530};
1531
1532/* l3_main_2 -> dss_hdmi */
1533static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_hdmi = {
1534 .master = &omap44xx_l3_main_2_hwmod,
1535 .slave = &omap44xx_dss_hdmi_hwmod,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001536 .clk = "dss_fck",
Benoit Coussond63bd742011-01-27 11:17:03 +00001537 .addr = omap44xx_dss_hdmi_dma_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001538 .user = OCP_USER_SDMA,
1539};
1540
1541static struct omap_hwmod_addr_space omap44xx_dss_hdmi_addrs[] = {
1542 {
1543 .pa_start = 0x48046000,
1544 .pa_end = 0x48046fff,
1545 .flags = ADDR_TYPE_RT
1546 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001547 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001548};
1549
1550/* l4_per -> dss_hdmi */
1551static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_hdmi = {
1552 .master = &omap44xx_l4_per_hwmod,
1553 .slave = &omap44xx_dss_hdmi_hwmod,
1554 .clk = "l4_div_ck",
1555 .addr = omap44xx_dss_hdmi_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001556 .user = OCP_USER_MPU,
1557};
1558
1559/* dss_hdmi slave ports */
1560static struct omap_hwmod_ocp_if *omap44xx_dss_hdmi_slaves[] = {
1561 &omap44xx_l3_main_2__dss_hdmi,
1562 &omap44xx_l4_per__dss_hdmi,
1563};
1564
Tomi Valkeinen3a23aaf2011-07-09 20:39:44 -06001565static struct omap_hwmod_opt_clk dss_hdmi_opt_clks[] = {
1566 { .role = "sys_clk", .clk = "dss_sys_clk" },
1567};
1568
Benoit Coussond63bd742011-01-27 11:17:03 +00001569static struct omap_hwmod omap44xx_dss_hdmi_hwmod = {
1570 .name = "dss_hdmi",
1571 .class = &omap44xx_hdmi_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001572 .clkdm_name = "l3_dss_clkdm",
Benoit Coussond63bd742011-01-27 11:17:03 +00001573 .mpu_irqs = omap44xx_dss_hdmi_irqs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001574 .sdma_reqs = omap44xx_dss_hdmi_sdma_reqs,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001575 .main_clk = "dss_dss_clk",
Benoit Coussond63bd742011-01-27 11:17:03 +00001576 .prcm = {
1577 .omap4 = {
1578 .clkctrl_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
1579 },
1580 },
Tomi Valkeinen3a23aaf2011-07-09 20:39:44 -06001581 .opt_clks = dss_hdmi_opt_clks,
1582 .opt_clks_cnt = ARRAY_SIZE(dss_hdmi_opt_clks),
Benoit Coussond63bd742011-01-27 11:17:03 +00001583 .slaves = omap44xx_dss_hdmi_slaves,
1584 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_hdmi_slaves),
1585 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1586};
1587
1588/*
1589 * 'rfbi' class
1590 * remote frame buffer interface
1591 */
1592
1593static struct omap_hwmod_class_sysconfig omap44xx_rfbi_sysc = {
1594 .rev_offs = 0x0000,
1595 .sysc_offs = 0x0010,
1596 .syss_offs = 0x0014,
1597 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_SIDLEMODE |
1598 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
1599 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1600 .sysc_fields = &omap_hwmod_sysc_type1,
1601};
1602
1603static struct omap_hwmod_class omap44xx_rfbi_hwmod_class = {
1604 .name = "rfbi",
1605 .sysc = &omap44xx_rfbi_sysc,
1606};
1607
1608/* dss_rfbi */
1609static struct omap_hwmod omap44xx_dss_rfbi_hwmod;
1610static struct omap_hwmod_dma_info omap44xx_dss_rfbi_sdma_reqs[] = {
1611 { .dma_req = 13 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06001612 { .dma_req = -1 }
Benoit Coussond63bd742011-01-27 11:17:03 +00001613};
1614
1615static struct omap_hwmod_addr_space omap44xx_dss_rfbi_dma_addrs[] = {
1616 {
1617 .pa_start = 0x58002000,
1618 .pa_end = 0x580020ff,
1619 .flags = ADDR_TYPE_RT
1620 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001621 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001622};
1623
1624/* l3_main_2 -> dss_rfbi */
1625static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_rfbi = {
1626 .master = &omap44xx_l3_main_2_hwmod,
1627 .slave = &omap44xx_dss_rfbi_hwmod,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001628 .clk = "dss_fck",
Benoit Coussond63bd742011-01-27 11:17:03 +00001629 .addr = omap44xx_dss_rfbi_dma_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001630 .user = OCP_USER_SDMA,
1631};
1632
1633static struct omap_hwmod_addr_space omap44xx_dss_rfbi_addrs[] = {
1634 {
1635 .pa_start = 0x48042000,
1636 .pa_end = 0x480420ff,
1637 .flags = ADDR_TYPE_RT
1638 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001639 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001640};
1641
1642/* l4_per -> dss_rfbi */
1643static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_rfbi = {
1644 .master = &omap44xx_l4_per_hwmod,
1645 .slave = &omap44xx_dss_rfbi_hwmod,
1646 .clk = "l4_div_ck",
1647 .addr = omap44xx_dss_rfbi_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001648 .user = OCP_USER_MPU,
1649};
1650
1651/* dss_rfbi slave ports */
1652static struct omap_hwmod_ocp_if *omap44xx_dss_rfbi_slaves[] = {
1653 &omap44xx_l3_main_2__dss_rfbi,
1654 &omap44xx_l4_per__dss_rfbi,
1655};
1656
Tomi Valkeinen3a23aaf2011-07-09 20:39:44 -06001657static struct omap_hwmod_opt_clk dss_rfbi_opt_clks[] = {
1658 { .role = "ick", .clk = "dss_fck" },
1659};
1660
Benoit Coussond63bd742011-01-27 11:17:03 +00001661static struct omap_hwmod omap44xx_dss_rfbi_hwmod = {
1662 .name = "dss_rfbi",
1663 .class = &omap44xx_rfbi_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001664 .clkdm_name = "l3_dss_clkdm",
Benoit Coussond63bd742011-01-27 11:17:03 +00001665 .sdma_reqs = omap44xx_dss_rfbi_sdma_reqs,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001666 .main_clk = "dss_dss_clk",
Benoit Coussond63bd742011-01-27 11:17:03 +00001667 .prcm = {
1668 .omap4 = {
1669 .clkctrl_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
1670 },
1671 },
Tomi Valkeinen3a23aaf2011-07-09 20:39:44 -06001672 .opt_clks = dss_rfbi_opt_clks,
1673 .opt_clks_cnt = ARRAY_SIZE(dss_rfbi_opt_clks),
Benoit Coussond63bd742011-01-27 11:17:03 +00001674 .slaves = omap44xx_dss_rfbi_slaves,
1675 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_rfbi_slaves),
1676 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1677};
1678
1679/*
1680 * 'venc' class
1681 * video encoder
1682 */
1683
1684static struct omap_hwmod_class omap44xx_venc_hwmod_class = {
1685 .name = "venc",
1686};
1687
1688/* dss_venc */
1689static struct omap_hwmod omap44xx_dss_venc_hwmod;
1690static struct omap_hwmod_addr_space omap44xx_dss_venc_dma_addrs[] = {
1691 {
1692 .pa_start = 0x58003000,
1693 .pa_end = 0x580030ff,
1694 .flags = ADDR_TYPE_RT
1695 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001696 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001697};
1698
1699/* l3_main_2 -> dss_venc */
1700static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_venc = {
1701 .master = &omap44xx_l3_main_2_hwmod,
1702 .slave = &omap44xx_dss_venc_hwmod,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001703 .clk = "dss_fck",
Benoit Coussond63bd742011-01-27 11:17:03 +00001704 .addr = omap44xx_dss_venc_dma_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001705 .user = OCP_USER_SDMA,
1706};
1707
1708static struct omap_hwmod_addr_space omap44xx_dss_venc_addrs[] = {
1709 {
1710 .pa_start = 0x48043000,
1711 .pa_end = 0x480430ff,
1712 .flags = ADDR_TYPE_RT
1713 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001714 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001715};
1716
1717/* l4_per -> dss_venc */
1718static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_venc = {
1719 .master = &omap44xx_l4_per_hwmod,
1720 .slave = &omap44xx_dss_venc_hwmod,
1721 .clk = "l4_div_ck",
1722 .addr = omap44xx_dss_venc_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001723 .user = OCP_USER_MPU,
1724};
1725
1726/* dss_venc slave ports */
1727static struct omap_hwmod_ocp_if *omap44xx_dss_venc_slaves[] = {
1728 &omap44xx_l3_main_2__dss_venc,
1729 &omap44xx_l4_per__dss_venc,
1730};
1731
1732static struct omap_hwmod omap44xx_dss_venc_hwmod = {
1733 .name = "dss_venc",
1734 .class = &omap44xx_venc_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001735 .clkdm_name = "l3_dss_clkdm",
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001736 .main_clk = "dss_dss_clk",
Benoit Coussond63bd742011-01-27 11:17:03 +00001737 .prcm = {
1738 .omap4 = {
1739 .clkctrl_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
1740 },
1741 },
1742 .slaves = omap44xx_dss_venc_slaves,
1743 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_venc_slaves),
1744 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1745};
1746
1747/*
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001748 * 'gpio' class
1749 * general purpose io module
1750 */
1751
1752static struct omap_hwmod_class_sysconfig omap44xx_gpio_sysc = {
1753 .rev_offs = 0x0000,
1754 .sysc_offs = 0x0010,
1755 .syss_offs = 0x0114,
Benoit Cousson0cfe8752010-12-21 21:08:33 -07001756 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_ENAWAKEUP |
1757 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
1758 SYSS_HAS_RESET_STATUS),
Benoit Cousson7cffa6b2010-12-21 21:31:28 -07001759 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1760 SIDLE_SMART_WKUP),
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001761 .sysc_fields = &omap_hwmod_sysc_type1,
1762};
1763
1764static struct omap_hwmod_class omap44xx_gpio_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +00001765 .name = "gpio",
1766 .sysc = &omap44xx_gpio_sysc,
1767 .rev = 2,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001768};
1769
1770/* gpio dev_attr */
1771static struct omap_gpio_dev_attr gpio_dev_attr = {
Benoit Coussonfe134712010-12-23 22:30:32 +00001772 .bank_width = 32,
1773 .dbck_flag = true,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001774};
1775
1776/* gpio1 */
1777static struct omap_hwmod omap44xx_gpio1_hwmod;
1778static struct omap_hwmod_irq_info omap44xx_gpio1_irqs[] = {
1779 { .irq = 29 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06001780 { .irq = -1 }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001781};
1782
1783static struct omap_hwmod_addr_space omap44xx_gpio1_addrs[] = {
1784 {
1785 .pa_start = 0x4a310000,
1786 .pa_end = 0x4a3101ff,
1787 .flags = ADDR_TYPE_RT
1788 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001789 { }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001790};
1791
1792/* l4_wkup -> gpio1 */
1793static struct omap_hwmod_ocp_if omap44xx_l4_wkup__gpio1 = {
1794 .master = &omap44xx_l4_wkup_hwmod,
1795 .slave = &omap44xx_gpio1_hwmod,
Benoit Coussonb399bca2010-12-21 21:08:34 -07001796 .clk = "l4_wkup_clk_mux_ck",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001797 .addr = omap44xx_gpio1_addrs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001798 .user = OCP_USER_MPU | OCP_USER_SDMA,
1799};
1800
1801/* gpio1 slave ports */
1802static struct omap_hwmod_ocp_if *omap44xx_gpio1_slaves[] = {
1803 &omap44xx_l4_wkup__gpio1,
1804};
1805
1806static struct omap_hwmod_opt_clk gpio1_opt_clks[] = {
Benoit Coussonb399bca2010-12-21 21:08:34 -07001807 { .role = "dbclk", .clk = "gpio1_dbclk" },
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001808};
1809
1810static struct omap_hwmod omap44xx_gpio1_hwmod = {
1811 .name = "gpio1",
1812 .class = &omap44xx_gpio_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001813 .clkdm_name = "l4_wkup_clkdm",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001814 .mpu_irqs = omap44xx_gpio1_irqs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001815 .main_clk = "gpio1_ick",
1816 .prcm = {
1817 .omap4 = {
1818 .clkctrl_reg = OMAP4430_CM_WKUP_GPIO1_CLKCTRL,
1819 },
1820 },
1821 .opt_clks = gpio1_opt_clks,
1822 .opt_clks_cnt = ARRAY_SIZE(gpio1_opt_clks),
1823 .dev_attr = &gpio_dev_attr,
1824 .slaves = omap44xx_gpio1_slaves,
1825 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio1_slaves),
1826 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1827};
1828
1829/* gpio2 */
1830static struct omap_hwmod omap44xx_gpio2_hwmod;
1831static struct omap_hwmod_irq_info omap44xx_gpio2_irqs[] = {
1832 { .irq = 30 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06001833 { .irq = -1 }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001834};
1835
1836static struct omap_hwmod_addr_space omap44xx_gpio2_addrs[] = {
1837 {
1838 .pa_start = 0x48055000,
1839 .pa_end = 0x480551ff,
1840 .flags = ADDR_TYPE_RT
1841 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001842 { }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001843};
1844
1845/* l4_per -> gpio2 */
1846static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio2 = {
1847 .master = &omap44xx_l4_per_hwmod,
1848 .slave = &omap44xx_gpio2_hwmod,
Benoit Coussonb399bca2010-12-21 21:08:34 -07001849 .clk = "l4_div_ck",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001850 .addr = omap44xx_gpio2_addrs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001851 .user = OCP_USER_MPU | OCP_USER_SDMA,
1852};
1853
1854/* gpio2 slave ports */
1855static struct omap_hwmod_ocp_if *omap44xx_gpio2_slaves[] = {
1856 &omap44xx_l4_per__gpio2,
1857};
1858
1859static struct omap_hwmod_opt_clk gpio2_opt_clks[] = {
Benoit Coussonb399bca2010-12-21 21:08:34 -07001860 { .role = "dbclk", .clk = "gpio2_dbclk" },
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001861};
1862
1863static struct omap_hwmod omap44xx_gpio2_hwmod = {
1864 .name = "gpio2",
1865 .class = &omap44xx_gpio_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001866 .clkdm_name = "l4_per_clkdm",
Benoit Coussonb399bca2010-12-21 21:08:34 -07001867 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001868 .mpu_irqs = omap44xx_gpio2_irqs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001869 .main_clk = "gpio2_ick",
1870 .prcm = {
1871 .omap4 = {
1872 .clkctrl_reg = OMAP4430_CM_L4PER_GPIO2_CLKCTRL,
1873 },
1874 },
1875 .opt_clks = gpio2_opt_clks,
1876 .opt_clks_cnt = ARRAY_SIZE(gpio2_opt_clks),
1877 .dev_attr = &gpio_dev_attr,
1878 .slaves = omap44xx_gpio2_slaves,
1879 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio2_slaves),
1880 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1881};
1882
1883/* gpio3 */
1884static struct omap_hwmod omap44xx_gpio3_hwmod;
1885static struct omap_hwmod_irq_info omap44xx_gpio3_irqs[] = {
1886 { .irq = 31 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06001887 { .irq = -1 }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001888};
1889
1890static struct omap_hwmod_addr_space omap44xx_gpio3_addrs[] = {
1891 {
1892 .pa_start = 0x48057000,
1893 .pa_end = 0x480571ff,
1894 .flags = ADDR_TYPE_RT
1895 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001896 { }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001897};
1898
1899/* l4_per -> gpio3 */
1900static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio3 = {
1901 .master = &omap44xx_l4_per_hwmod,
1902 .slave = &omap44xx_gpio3_hwmod,
Benoit Coussonb399bca2010-12-21 21:08:34 -07001903 .clk = "l4_div_ck",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001904 .addr = omap44xx_gpio3_addrs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001905 .user = OCP_USER_MPU | OCP_USER_SDMA,
1906};
1907
1908/* gpio3 slave ports */
1909static struct omap_hwmod_ocp_if *omap44xx_gpio3_slaves[] = {
1910 &omap44xx_l4_per__gpio3,
1911};
1912
1913static struct omap_hwmod_opt_clk gpio3_opt_clks[] = {
Benoit Coussonb399bca2010-12-21 21:08:34 -07001914 { .role = "dbclk", .clk = "gpio3_dbclk" },
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001915};
1916
1917static struct omap_hwmod omap44xx_gpio3_hwmod = {
1918 .name = "gpio3",
1919 .class = &omap44xx_gpio_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001920 .clkdm_name = "l4_per_clkdm",
Benoit Coussonb399bca2010-12-21 21:08:34 -07001921 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001922 .mpu_irqs = omap44xx_gpio3_irqs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001923 .main_clk = "gpio3_ick",
1924 .prcm = {
1925 .omap4 = {
1926 .clkctrl_reg = OMAP4430_CM_L4PER_GPIO3_CLKCTRL,
1927 },
1928 },
1929 .opt_clks = gpio3_opt_clks,
1930 .opt_clks_cnt = ARRAY_SIZE(gpio3_opt_clks),
1931 .dev_attr = &gpio_dev_attr,
1932 .slaves = omap44xx_gpio3_slaves,
1933 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio3_slaves),
1934 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1935};
1936
1937/* gpio4 */
1938static struct omap_hwmod omap44xx_gpio4_hwmod;
1939static struct omap_hwmod_irq_info omap44xx_gpio4_irqs[] = {
1940 { .irq = 32 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06001941 { .irq = -1 }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001942};
1943
1944static struct omap_hwmod_addr_space omap44xx_gpio4_addrs[] = {
1945 {
1946 .pa_start = 0x48059000,
1947 .pa_end = 0x480591ff,
1948 .flags = ADDR_TYPE_RT
1949 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001950 { }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001951};
1952
1953/* l4_per -> gpio4 */
1954static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio4 = {
1955 .master = &omap44xx_l4_per_hwmod,
1956 .slave = &omap44xx_gpio4_hwmod,
Benoit Coussonb399bca2010-12-21 21:08:34 -07001957 .clk = "l4_div_ck",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001958 .addr = omap44xx_gpio4_addrs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001959 .user = OCP_USER_MPU | OCP_USER_SDMA,
1960};
1961
1962/* gpio4 slave ports */
1963static struct omap_hwmod_ocp_if *omap44xx_gpio4_slaves[] = {
1964 &omap44xx_l4_per__gpio4,
1965};
1966
1967static struct omap_hwmod_opt_clk gpio4_opt_clks[] = {
Benoit Coussonb399bca2010-12-21 21:08:34 -07001968 { .role = "dbclk", .clk = "gpio4_dbclk" },
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001969};
1970
1971static struct omap_hwmod omap44xx_gpio4_hwmod = {
1972 .name = "gpio4",
1973 .class = &omap44xx_gpio_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001974 .clkdm_name = "l4_per_clkdm",
Benoit Coussonb399bca2010-12-21 21:08:34 -07001975 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001976 .mpu_irqs = omap44xx_gpio4_irqs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001977 .main_clk = "gpio4_ick",
1978 .prcm = {
1979 .omap4 = {
1980 .clkctrl_reg = OMAP4430_CM_L4PER_GPIO4_CLKCTRL,
1981 },
1982 },
1983 .opt_clks = gpio4_opt_clks,
1984 .opt_clks_cnt = ARRAY_SIZE(gpio4_opt_clks),
1985 .dev_attr = &gpio_dev_attr,
1986 .slaves = omap44xx_gpio4_slaves,
1987 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio4_slaves),
1988 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1989};
1990
1991/* gpio5 */
1992static struct omap_hwmod omap44xx_gpio5_hwmod;
1993static struct omap_hwmod_irq_info omap44xx_gpio5_irqs[] = {
1994 { .irq = 33 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06001995 { .irq = -1 }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001996};
1997
1998static struct omap_hwmod_addr_space omap44xx_gpio5_addrs[] = {
1999 {
2000 .pa_start = 0x4805b000,
2001 .pa_end = 0x4805b1ff,
2002 .flags = ADDR_TYPE_RT
2003 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002004 { }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002005};
2006
2007/* l4_per -> gpio5 */
2008static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio5 = {
2009 .master = &omap44xx_l4_per_hwmod,
2010 .slave = &omap44xx_gpio5_hwmod,
Benoit Coussonb399bca2010-12-21 21:08:34 -07002011 .clk = "l4_div_ck",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002012 .addr = omap44xx_gpio5_addrs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002013 .user = OCP_USER_MPU | OCP_USER_SDMA,
2014};
2015
2016/* gpio5 slave ports */
2017static struct omap_hwmod_ocp_if *omap44xx_gpio5_slaves[] = {
2018 &omap44xx_l4_per__gpio5,
2019};
2020
2021static struct omap_hwmod_opt_clk gpio5_opt_clks[] = {
Benoit Coussonb399bca2010-12-21 21:08:34 -07002022 { .role = "dbclk", .clk = "gpio5_dbclk" },
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002023};
2024
2025static struct omap_hwmod omap44xx_gpio5_hwmod = {
2026 .name = "gpio5",
2027 .class = &omap44xx_gpio_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002028 .clkdm_name = "l4_per_clkdm",
Benoit Coussonb399bca2010-12-21 21:08:34 -07002029 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002030 .mpu_irqs = omap44xx_gpio5_irqs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002031 .main_clk = "gpio5_ick",
2032 .prcm = {
2033 .omap4 = {
2034 .clkctrl_reg = OMAP4430_CM_L4PER_GPIO5_CLKCTRL,
2035 },
2036 },
2037 .opt_clks = gpio5_opt_clks,
2038 .opt_clks_cnt = ARRAY_SIZE(gpio5_opt_clks),
2039 .dev_attr = &gpio_dev_attr,
2040 .slaves = omap44xx_gpio5_slaves,
2041 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio5_slaves),
2042 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2043};
2044
2045/* gpio6 */
2046static struct omap_hwmod omap44xx_gpio6_hwmod;
2047static struct omap_hwmod_irq_info omap44xx_gpio6_irqs[] = {
2048 { .irq = 34 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002049 { .irq = -1 }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002050};
2051
2052static struct omap_hwmod_addr_space omap44xx_gpio6_addrs[] = {
2053 {
2054 .pa_start = 0x4805d000,
2055 .pa_end = 0x4805d1ff,
2056 .flags = ADDR_TYPE_RT
2057 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002058 { }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002059};
2060
2061/* l4_per -> gpio6 */
2062static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio6 = {
2063 .master = &omap44xx_l4_per_hwmod,
2064 .slave = &omap44xx_gpio6_hwmod,
Benoit Coussonb399bca2010-12-21 21:08:34 -07002065 .clk = "l4_div_ck",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002066 .addr = omap44xx_gpio6_addrs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002067 .user = OCP_USER_MPU | OCP_USER_SDMA,
2068};
2069
2070/* gpio6 slave ports */
2071static struct omap_hwmod_ocp_if *omap44xx_gpio6_slaves[] = {
2072 &omap44xx_l4_per__gpio6,
2073};
2074
2075static struct omap_hwmod_opt_clk gpio6_opt_clks[] = {
Benoit Coussonb399bca2010-12-21 21:08:34 -07002076 { .role = "dbclk", .clk = "gpio6_dbclk" },
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002077};
2078
2079static struct omap_hwmod omap44xx_gpio6_hwmod = {
2080 .name = "gpio6",
2081 .class = &omap44xx_gpio_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002082 .clkdm_name = "l4_per_clkdm",
Benoit Coussonb399bca2010-12-21 21:08:34 -07002083 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002084 .mpu_irqs = omap44xx_gpio6_irqs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002085 .main_clk = "gpio6_ick",
2086 .prcm = {
2087 .omap4 = {
2088 .clkctrl_reg = OMAP4430_CM_L4PER_GPIO6_CLKCTRL,
2089 },
2090 },
2091 .opt_clks = gpio6_opt_clks,
2092 .opt_clks_cnt = ARRAY_SIZE(gpio6_opt_clks),
2093 .dev_attr = &gpio_dev_attr,
2094 .slaves = omap44xx_gpio6_slaves,
2095 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio6_slaves),
2096 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2097};
2098
2099/*
Benoit Cousson407a6882011-02-15 22:39:48 +01002100 * 'hsi' class
2101 * mipi high-speed synchronous serial interface (multichannel and full-duplex
2102 * serial if)
2103 */
2104
2105static struct omap_hwmod_class_sysconfig omap44xx_hsi_sysc = {
2106 .rev_offs = 0x0000,
2107 .sysc_offs = 0x0010,
2108 .syss_offs = 0x0014,
2109 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_EMUFREE |
2110 SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE |
2111 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
2112 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2113 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
Benoit Coussonc614ebf2011-07-01 22:54:01 +02002114 MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
Benoit Cousson407a6882011-02-15 22:39:48 +01002115 .sysc_fields = &omap_hwmod_sysc_type1,
2116};
2117
2118static struct omap_hwmod_class omap44xx_hsi_hwmod_class = {
2119 .name = "hsi",
2120 .sysc = &omap44xx_hsi_sysc,
2121};
2122
2123/* hsi */
2124static struct omap_hwmod_irq_info omap44xx_hsi_irqs[] = {
2125 { .name = "mpu_p1", .irq = 67 + OMAP44XX_IRQ_GIC_START },
2126 { .name = "mpu_p2", .irq = 68 + OMAP44XX_IRQ_GIC_START },
2127 { .name = "mpu_dma", .irq = 71 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002128 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01002129};
2130
2131/* hsi master ports */
2132static struct omap_hwmod_ocp_if *omap44xx_hsi_masters[] = {
2133 &omap44xx_hsi__l3_main_2,
2134};
2135
2136static struct omap_hwmod_addr_space omap44xx_hsi_addrs[] = {
2137 {
2138 .pa_start = 0x4a058000,
2139 .pa_end = 0x4a05bfff,
2140 .flags = ADDR_TYPE_RT
2141 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002142 { }
Benoit Cousson407a6882011-02-15 22:39:48 +01002143};
2144
2145/* l4_cfg -> hsi */
2146static struct omap_hwmod_ocp_if omap44xx_l4_cfg__hsi = {
2147 .master = &omap44xx_l4_cfg_hwmod,
2148 .slave = &omap44xx_hsi_hwmod,
2149 .clk = "l4_div_ck",
2150 .addr = omap44xx_hsi_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +01002151 .user = OCP_USER_MPU | OCP_USER_SDMA,
2152};
2153
2154/* hsi slave ports */
2155static struct omap_hwmod_ocp_if *omap44xx_hsi_slaves[] = {
2156 &omap44xx_l4_cfg__hsi,
2157};
2158
2159static struct omap_hwmod omap44xx_hsi_hwmod = {
2160 .name = "hsi",
2161 .class = &omap44xx_hsi_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002162 .clkdm_name = "l3_init_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01002163 .mpu_irqs = omap44xx_hsi_irqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01002164 .main_clk = "hsi_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06002165 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01002166 .omap4 = {
2167 .clkctrl_reg = OMAP4430_CM_L3INIT_HSI_CLKCTRL,
2168 },
2169 },
2170 .slaves = omap44xx_hsi_slaves,
2171 .slaves_cnt = ARRAY_SIZE(omap44xx_hsi_slaves),
2172 .masters = omap44xx_hsi_masters,
2173 .masters_cnt = ARRAY_SIZE(omap44xx_hsi_masters),
2174 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2175};
2176
2177/*
Benoit Coussonf7764712010-09-21 19:37:14 +05302178 * 'i2c' class
2179 * multimaster high-speed i2c controller
2180 */
2181
2182static struct omap_hwmod_class_sysconfig omap44xx_i2c_sysc = {
2183 .sysc_offs = 0x0010,
2184 .syss_offs = 0x0090,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002185 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
2186 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
Benoit Cousson0cfe8752010-12-21 21:08:33 -07002187 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
Benoit Cousson7cffa6b2010-12-21 21:31:28 -07002188 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2189 SIDLE_SMART_WKUP),
Benoit Coussonf7764712010-09-21 19:37:14 +05302190 .sysc_fields = &omap_hwmod_sysc_type1,
2191};
2192
2193static struct omap_hwmod_class omap44xx_i2c_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +00002194 .name = "i2c",
2195 .sysc = &omap44xx_i2c_sysc,
Andy Greendb791a72011-07-10 05:27:15 -06002196 .rev = OMAP_I2C_IP_VERSION_2,
Avinash.H.M6d3c55f2011-07-10 05:27:16 -06002197 .reset = &omap_i2c_reset,
Benoit Coussonf7764712010-09-21 19:37:14 +05302198};
2199
Andy Green4d4441a2011-07-10 05:27:16 -06002200static struct omap_i2c_dev_attr i2c_dev_attr = {
2201 .flags = OMAP_I2C_FLAG_BUS_SHIFT_NONE,
2202};
2203
Benoit Coussonf7764712010-09-21 19:37:14 +05302204/* i2c1 */
2205static struct omap_hwmod omap44xx_i2c1_hwmod;
2206static struct omap_hwmod_irq_info omap44xx_i2c1_irqs[] = {
2207 { .irq = 56 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002208 { .irq = -1 }
Benoit Coussonf7764712010-09-21 19:37:14 +05302209};
2210
2211static struct omap_hwmod_dma_info omap44xx_i2c1_sdma_reqs[] = {
2212 { .name = "tx", .dma_req = 26 + OMAP44XX_DMA_REQ_START },
2213 { .name = "rx", .dma_req = 27 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06002214 { .dma_req = -1 }
Benoit Coussonf7764712010-09-21 19:37:14 +05302215};
2216
2217static struct omap_hwmod_addr_space omap44xx_i2c1_addrs[] = {
2218 {
2219 .pa_start = 0x48070000,
2220 .pa_end = 0x480700ff,
2221 .flags = ADDR_TYPE_RT
2222 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002223 { }
Benoit Coussonf7764712010-09-21 19:37:14 +05302224};
2225
2226/* l4_per -> i2c1 */
2227static struct omap_hwmod_ocp_if omap44xx_l4_per__i2c1 = {
2228 .master = &omap44xx_l4_per_hwmod,
2229 .slave = &omap44xx_i2c1_hwmod,
2230 .clk = "l4_div_ck",
2231 .addr = omap44xx_i2c1_addrs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302232 .user = OCP_USER_MPU | OCP_USER_SDMA,
2233};
2234
2235/* i2c1 slave ports */
2236static struct omap_hwmod_ocp_if *omap44xx_i2c1_slaves[] = {
2237 &omap44xx_l4_per__i2c1,
2238};
2239
2240static struct omap_hwmod omap44xx_i2c1_hwmod = {
2241 .name = "i2c1",
2242 .class = &omap44xx_i2c_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002243 .clkdm_name = "l4_per_clkdm",
Avinash.H.M6d3c55f2011-07-10 05:27:16 -06002244 .flags = HWMOD_16BIT_REG,
Benoit Coussonf7764712010-09-21 19:37:14 +05302245 .mpu_irqs = omap44xx_i2c1_irqs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302246 .sdma_reqs = omap44xx_i2c1_sdma_reqs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302247 .main_clk = "i2c1_fck",
2248 .prcm = {
2249 .omap4 = {
2250 .clkctrl_reg = OMAP4430_CM_L4PER_I2C1_CLKCTRL,
2251 },
2252 },
2253 .slaves = omap44xx_i2c1_slaves,
2254 .slaves_cnt = ARRAY_SIZE(omap44xx_i2c1_slaves),
Andy Green4d4441a2011-07-10 05:27:16 -06002255 .dev_attr = &i2c_dev_attr,
Benoit Coussonf7764712010-09-21 19:37:14 +05302256 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2257};
2258
2259/* i2c2 */
2260static struct omap_hwmod omap44xx_i2c2_hwmod;
2261static struct omap_hwmod_irq_info omap44xx_i2c2_irqs[] = {
2262 { .irq = 57 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002263 { .irq = -1 }
Benoit Coussonf7764712010-09-21 19:37:14 +05302264};
2265
2266static struct omap_hwmod_dma_info omap44xx_i2c2_sdma_reqs[] = {
2267 { .name = "tx", .dma_req = 28 + OMAP44XX_DMA_REQ_START },
2268 { .name = "rx", .dma_req = 29 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06002269 { .dma_req = -1 }
Benoit Coussonf7764712010-09-21 19:37:14 +05302270};
2271
2272static struct omap_hwmod_addr_space omap44xx_i2c2_addrs[] = {
2273 {
2274 .pa_start = 0x48072000,
2275 .pa_end = 0x480720ff,
2276 .flags = ADDR_TYPE_RT
2277 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002278 { }
Benoit Coussonf7764712010-09-21 19:37:14 +05302279};
2280
2281/* l4_per -> i2c2 */
2282static struct omap_hwmod_ocp_if omap44xx_l4_per__i2c2 = {
2283 .master = &omap44xx_l4_per_hwmod,
2284 .slave = &omap44xx_i2c2_hwmod,
2285 .clk = "l4_div_ck",
2286 .addr = omap44xx_i2c2_addrs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302287 .user = OCP_USER_MPU | OCP_USER_SDMA,
2288};
2289
2290/* i2c2 slave ports */
2291static struct omap_hwmod_ocp_if *omap44xx_i2c2_slaves[] = {
2292 &omap44xx_l4_per__i2c2,
2293};
2294
2295static struct omap_hwmod omap44xx_i2c2_hwmod = {
2296 .name = "i2c2",
2297 .class = &omap44xx_i2c_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002298 .clkdm_name = "l4_per_clkdm",
Avinash.H.M6d3c55f2011-07-10 05:27:16 -06002299 .flags = HWMOD_16BIT_REG,
Benoit Coussonf7764712010-09-21 19:37:14 +05302300 .mpu_irqs = omap44xx_i2c2_irqs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302301 .sdma_reqs = omap44xx_i2c2_sdma_reqs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302302 .main_clk = "i2c2_fck",
2303 .prcm = {
2304 .omap4 = {
2305 .clkctrl_reg = OMAP4430_CM_L4PER_I2C2_CLKCTRL,
2306 },
2307 },
2308 .slaves = omap44xx_i2c2_slaves,
2309 .slaves_cnt = ARRAY_SIZE(omap44xx_i2c2_slaves),
Andy Green4d4441a2011-07-10 05:27:16 -06002310 .dev_attr = &i2c_dev_attr,
Benoit Coussonf7764712010-09-21 19:37:14 +05302311 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2312};
2313
2314/* i2c3 */
2315static struct omap_hwmod omap44xx_i2c3_hwmod;
2316static struct omap_hwmod_irq_info omap44xx_i2c3_irqs[] = {
2317 { .irq = 61 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002318 { .irq = -1 }
Benoit Coussonf7764712010-09-21 19:37:14 +05302319};
2320
2321static struct omap_hwmod_dma_info omap44xx_i2c3_sdma_reqs[] = {
2322 { .name = "tx", .dma_req = 24 + OMAP44XX_DMA_REQ_START },
2323 { .name = "rx", .dma_req = 25 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06002324 { .dma_req = -1 }
Benoit Coussonf7764712010-09-21 19:37:14 +05302325};
2326
2327static struct omap_hwmod_addr_space omap44xx_i2c3_addrs[] = {
2328 {
2329 .pa_start = 0x48060000,
2330 .pa_end = 0x480600ff,
2331 .flags = ADDR_TYPE_RT
2332 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002333 { }
Benoit Coussonf7764712010-09-21 19:37:14 +05302334};
2335
2336/* l4_per -> i2c3 */
2337static struct omap_hwmod_ocp_if omap44xx_l4_per__i2c3 = {
2338 .master = &omap44xx_l4_per_hwmod,
2339 .slave = &omap44xx_i2c3_hwmod,
2340 .clk = "l4_div_ck",
2341 .addr = omap44xx_i2c3_addrs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302342 .user = OCP_USER_MPU | OCP_USER_SDMA,
2343};
2344
2345/* i2c3 slave ports */
2346static struct omap_hwmod_ocp_if *omap44xx_i2c3_slaves[] = {
2347 &omap44xx_l4_per__i2c3,
2348};
2349
2350static struct omap_hwmod omap44xx_i2c3_hwmod = {
2351 .name = "i2c3",
2352 .class = &omap44xx_i2c_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002353 .clkdm_name = "l4_per_clkdm",
Avinash.H.M6d3c55f2011-07-10 05:27:16 -06002354 .flags = HWMOD_16BIT_REG,
Benoit Coussonf7764712010-09-21 19:37:14 +05302355 .mpu_irqs = omap44xx_i2c3_irqs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302356 .sdma_reqs = omap44xx_i2c3_sdma_reqs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302357 .main_clk = "i2c3_fck",
2358 .prcm = {
2359 .omap4 = {
2360 .clkctrl_reg = OMAP4430_CM_L4PER_I2C3_CLKCTRL,
2361 },
2362 },
2363 .slaves = omap44xx_i2c3_slaves,
2364 .slaves_cnt = ARRAY_SIZE(omap44xx_i2c3_slaves),
Andy Green4d4441a2011-07-10 05:27:16 -06002365 .dev_attr = &i2c_dev_attr,
Benoit Coussonf7764712010-09-21 19:37:14 +05302366 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2367};
2368
2369/* i2c4 */
2370static struct omap_hwmod omap44xx_i2c4_hwmod;
2371static struct omap_hwmod_irq_info omap44xx_i2c4_irqs[] = {
2372 { .irq = 62 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002373 { .irq = -1 }
Benoit Coussonf7764712010-09-21 19:37:14 +05302374};
2375
2376static struct omap_hwmod_dma_info omap44xx_i2c4_sdma_reqs[] = {
2377 { .name = "tx", .dma_req = 123 + OMAP44XX_DMA_REQ_START },
2378 { .name = "rx", .dma_req = 124 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06002379 { .dma_req = -1 }
Benoit Coussonf7764712010-09-21 19:37:14 +05302380};
2381
2382static struct omap_hwmod_addr_space omap44xx_i2c4_addrs[] = {
2383 {
2384 .pa_start = 0x48350000,
2385 .pa_end = 0x483500ff,
2386 .flags = ADDR_TYPE_RT
2387 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002388 { }
Benoit Coussonf7764712010-09-21 19:37:14 +05302389};
2390
2391/* l4_per -> i2c4 */
2392static struct omap_hwmod_ocp_if omap44xx_l4_per__i2c4 = {
2393 .master = &omap44xx_l4_per_hwmod,
2394 .slave = &omap44xx_i2c4_hwmod,
2395 .clk = "l4_div_ck",
2396 .addr = omap44xx_i2c4_addrs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302397 .user = OCP_USER_MPU | OCP_USER_SDMA,
2398};
2399
2400/* i2c4 slave ports */
2401static struct omap_hwmod_ocp_if *omap44xx_i2c4_slaves[] = {
2402 &omap44xx_l4_per__i2c4,
2403};
2404
2405static struct omap_hwmod omap44xx_i2c4_hwmod = {
2406 .name = "i2c4",
2407 .class = &omap44xx_i2c_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002408 .clkdm_name = "l4_per_clkdm",
Avinash.H.M6d3c55f2011-07-10 05:27:16 -06002409 .flags = HWMOD_16BIT_REG,
Benoit Coussonf7764712010-09-21 19:37:14 +05302410 .mpu_irqs = omap44xx_i2c4_irqs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302411 .sdma_reqs = omap44xx_i2c4_sdma_reqs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302412 .main_clk = "i2c4_fck",
2413 .prcm = {
2414 .omap4 = {
2415 .clkctrl_reg = OMAP4430_CM_L4PER_I2C4_CLKCTRL,
2416 },
2417 },
2418 .slaves = omap44xx_i2c4_slaves,
2419 .slaves_cnt = ARRAY_SIZE(omap44xx_i2c4_slaves),
Andy Green4d4441a2011-07-10 05:27:16 -06002420 .dev_attr = &i2c_dev_attr,
Benoit Coussonf7764712010-09-21 19:37:14 +05302421 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2422};
2423
2424/*
Benoit Cousson407a6882011-02-15 22:39:48 +01002425 * 'ipu' class
2426 * imaging processor unit
2427 */
2428
2429static struct omap_hwmod_class omap44xx_ipu_hwmod_class = {
2430 .name = "ipu",
2431};
2432
2433/* ipu */
2434static struct omap_hwmod_irq_info omap44xx_ipu_irqs[] = {
2435 { .irq = 100 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002436 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01002437};
2438
2439static struct omap_hwmod_rst_info omap44xx_ipu_c0_resets[] = {
2440 { .name = "cpu0", .rst_shift = 0 },
2441};
2442
2443static struct omap_hwmod_rst_info omap44xx_ipu_c1_resets[] = {
2444 { .name = "cpu1", .rst_shift = 1 },
2445};
2446
2447static struct omap_hwmod_rst_info omap44xx_ipu_resets[] = {
2448 { .name = "mmu_cache", .rst_shift = 2 },
2449};
2450
2451/* ipu master ports */
2452static struct omap_hwmod_ocp_if *omap44xx_ipu_masters[] = {
2453 &omap44xx_ipu__l3_main_2,
2454};
2455
2456/* l3_main_2 -> ipu */
2457static struct omap_hwmod_ocp_if omap44xx_l3_main_2__ipu = {
2458 .master = &omap44xx_l3_main_2_hwmod,
2459 .slave = &omap44xx_ipu_hwmod,
2460 .clk = "l3_div_ck",
2461 .user = OCP_USER_MPU | OCP_USER_SDMA,
2462};
2463
2464/* ipu slave ports */
2465static struct omap_hwmod_ocp_if *omap44xx_ipu_slaves[] = {
2466 &omap44xx_l3_main_2__ipu,
2467};
2468
2469/* Pseudo hwmod for reset control purpose only */
2470static struct omap_hwmod omap44xx_ipu_c0_hwmod = {
2471 .name = "ipu_c0",
2472 .class = &omap44xx_ipu_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002473 .clkdm_name = "ducati_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01002474 .flags = HWMOD_INIT_NO_RESET,
2475 .rst_lines = omap44xx_ipu_c0_resets,
2476 .rst_lines_cnt = ARRAY_SIZE(omap44xx_ipu_c0_resets),
Benoit Cousson00fe6102011-07-09 19:14:28 -06002477 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01002478 .omap4 = {
2479 .rstctrl_reg = OMAP4430_RM_DUCATI_RSTCTRL,
2480 },
2481 },
2482 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2483};
2484
2485/* Pseudo hwmod for reset control purpose only */
2486static struct omap_hwmod omap44xx_ipu_c1_hwmod = {
2487 .name = "ipu_c1",
2488 .class = &omap44xx_ipu_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002489 .clkdm_name = "ducati_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01002490 .flags = HWMOD_INIT_NO_RESET,
2491 .rst_lines = omap44xx_ipu_c1_resets,
2492 .rst_lines_cnt = ARRAY_SIZE(omap44xx_ipu_c1_resets),
Benoit Cousson00fe6102011-07-09 19:14:28 -06002493 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01002494 .omap4 = {
2495 .rstctrl_reg = OMAP4430_RM_DUCATI_RSTCTRL,
2496 },
2497 },
2498 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2499};
2500
2501static struct omap_hwmod omap44xx_ipu_hwmod = {
2502 .name = "ipu",
2503 .class = &omap44xx_ipu_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002504 .clkdm_name = "ducati_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01002505 .mpu_irqs = omap44xx_ipu_irqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01002506 .rst_lines = omap44xx_ipu_resets,
2507 .rst_lines_cnt = ARRAY_SIZE(omap44xx_ipu_resets),
2508 .main_clk = "ipu_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06002509 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01002510 .omap4 = {
2511 .clkctrl_reg = OMAP4430_CM_DUCATI_DUCATI_CLKCTRL,
2512 .rstctrl_reg = OMAP4430_RM_DUCATI_RSTCTRL,
2513 },
2514 },
2515 .slaves = omap44xx_ipu_slaves,
2516 .slaves_cnt = ARRAY_SIZE(omap44xx_ipu_slaves),
2517 .masters = omap44xx_ipu_masters,
2518 .masters_cnt = ARRAY_SIZE(omap44xx_ipu_masters),
2519 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2520};
2521
2522/*
2523 * 'iss' class
2524 * external images sensor pixel data processor
2525 */
2526
2527static struct omap_hwmod_class_sysconfig omap44xx_iss_sysc = {
2528 .rev_offs = 0x0000,
2529 .sysc_offs = 0x0010,
2530 .sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_RESET_STATUS |
2531 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
2532 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2533 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
Benoit Coussonc614ebf2011-07-01 22:54:01 +02002534 MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
Benoit Cousson407a6882011-02-15 22:39:48 +01002535 .sysc_fields = &omap_hwmod_sysc_type2,
2536};
2537
2538static struct omap_hwmod_class omap44xx_iss_hwmod_class = {
2539 .name = "iss",
2540 .sysc = &omap44xx_iss_sysc,
2541};
2542
2543/* iss */
2544static struct omap_hwmod_irq_info omap44xx_iss_irqs[] = {
2545 { .irq = 24 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002546 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01002547};
2548
2549static struct omap_hwmod_dma_info omap44xx_iss_sdma_reqs[] = {
2550 { .name = "1", .dma_req = 8 + OMAP44XX_DMA_REQ_START },
2551 { .name = "2", .dma_req = 9 + OMAP44XX_DMA_REQ_START },
2552 { .name = "3", .dma_req = 11 + OMAP44XX_DMA_REQ_START },
2553 { .name = "4", .dma_req = 12 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06002554 { .dma_req = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01002555};
2556
2557/* iss master ports */
2558static struct omap_hwmod_ocp_if *omap44xx_iss_masters[] = {
2559 &omap44xx_iss__l3_main_2,
2560};
2561
2562static struct omap_hwmod_addr_space omap44xx_iss_addrs[] = {
2563 {
2564 .pa_start = 0x52000000,
2565 .pa_end = 0x520000ff,
2566 .flags = ADDR_TYPE_RT
2567 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002568 { }
Benoit Cousson407a6882011-02-15 22:39:48 +01002569};
2570
2571/* l3_main_2 -> iss */
2572static struct omap_hwmod_ocp_if omap44xx_l3_main_2__iss = {
2573 .master = &omap44xx_l3_main_2_hwmod,
2574 .slave = &omap44xx_iss_hwmod,
2575 .clk = "l3_div_ck",
2576 .addr = omap44xx_iss_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +01002577 .user = OCP_USER_MPU | OCP_USER_SDMA,
2578};
2579
2580/* iss slave ports */
2581static struct omap_hwmod_ocp_if *omap44xx_iss_slaves[] = {
2582 &omap44xx_l3_main_2__iss,
2583};
2584
2585static struct omap_hwmod_opt_clk iss_opt_clks[] = {
2586 { .role = "ctrlclk", .clk = "iss_ctrlclk" },
2587};
2588
2589static struct omap_hwmod omap44xx_iss_hwmod = {
2590 .name = "iss",
2591 .class = &omap44xx_iss_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002592 .clkdm_name = "iss_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01002593 .mpu_irqs = omap44xx_iss_irqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01002594 .sdma_reqs = omap44xx_iss_sdma_reqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01002595 .main_clk = "iss_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06002596 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01002597 .omap4 = {
2598 .clkctrl_reg = OMAP4430_CM_CAM_ISS_CLKCTRL,
2599 },
2600 },
2601 .opt_clks = iss_opt_clks,
2602 .opt_clks_cnt = ARRAY_SIZE(iss_opt_clks),
2603 .slaves = omap44xx_iss_slaves,
2604 .slaves_cnt = ARRAY_SIZE(omap44xx_iss_slaves),
2605 .masters = omap44xx_iss_masters,
2606 .masters_cnt = ARRAY_SIZE(omap44xx_iss_masters),
2607 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2608};
2609
2610/*
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002611 * 'iva' class
2612 * multi-standard video encoder/decoder hardware accelerator
2613 */
2614
2615static struct omap_hwmod_class omap44xx_iva_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +00002616 .name = "iva",
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002617};
2618
2619/* iva */
2620static struct omap_hwmod_irq_info omap44xx_iva_irqs[] = {
2621 { .name = "sync_1", .irq = 103 + OMAP44XX_IRQ_GIC_START },
2622 { .name = "sync_0", .irq = 104 + OMAP44XX_IRQ_GIC_START },
2623 { .name = "mailbox_0", .irq = 107 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002624 { .irq = -1 }
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002625};
2626
2627static struct omap_hwmod_rst_info omap44xx_iva_resets[] = {
2628 { .name = "logic", .rst_shift = 2 },
2629};
2630
2631static struct omap_hwmod_rst_info omap44xx_iva_seq0_resets[] = {
2632 { .name = "seq0", .rst_shift = 0 },
2633};
2634
2635static struct omap_hwmod_rst_info omap44xx_iva_seq1_resets[] = {
2636 { .name = "seq1", .rst_shift = 1 },
2637};
2638
2639/* iva master ports */
2640static struct omap_hwmod_ocp_if *omap44xx_iva_masters[] = {
2641 &omap44xx_iva__l3_main_2,
2642 &omap44xx_iva__l3_instr,
2643};
2644
2645static struct omap_hwmod_addr_space omap44xx_iva_addrs[] = {
2646 {
2647 .pa_start = 0x5a000000,
2648 .pa_end = 0x5a07ffff,
2649 .flags = ADDR_TYPE_RT
2650 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002651 { }
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002652};
2653
2654/* l3_main_2 -> iva */
2655static struct omap_hwmod_ocp_if omap44xx_l3_main_2__iva = {
2656 .master = &omap44xx_l3_main_2_hwmod,
2657 .slave = &omap44xx_iva_hwmod,
2658 .clk = "l3_div_ck",
2659 .addr = omap44xx_iva_addrs,
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002660 .user = OCP_USER_MPU,
2661};
2662
2663/* iva slave ports */
2664static struct omap_hwmod_ocp_if *omap44xx_iva_slaves[] = {
2665 &omap44xx_dsp__iva,
2666 &omap44xx_l3_main_2__iva,
2667};
2668
2669/* Pseudo hwmod for reset control purpose only */
2670static struct omap_hwmod omap44xx_iva_seq0_hwmod = {
2671 .name = "iva_seq0",
2672 .class = &omap44xx_iva_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002673 .clkdm_name = "ivahd_clkdm",
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002674 .flags = HWMOD_INIT_NO_RESET,
2675 .rst_lines = omap44xx_iva_seq0_resets,
2676 .rst_lines_cnt = ARRAY_SIZE(omap44xx_iva_seq0_resets),
2677 .prcm = {
2678 .omap4 = {
2679 .rstctrl_reg = OMAP4430_RM_IVAHD_RSTCTRL,
2680 },
2681 },
2682 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2683};
2684
2685/* Pseudo hwmod for reset control purpose only */
2686static struct omap_hwmod omap44xx_iva_seq1_hwmod = {
2687 .name = "iva_seq1",
2688 .class = &omap44xx_iva_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002689 .clkdm_name = "ivahd_clkdm",
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002690 .flags = HWMOD_INIT_NO_RESET,
2691 .rst_lines = omap44xx_iva_seq1_resets,
2692 .rst_lines_cnt = ARRAY_SIZE(omap44xx_iva_seq1_resets),
2693 .prcm = {
2694 .omap4 = {
2695 .rstctrl_reg = OMAP4430_RM_IVAHD_RSTCTRL,
2696 },
2697 },
2698 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2699};
2700
2701static struct omap_hwmod omap44xx_iva_hwmod = {
2702 .name = "iva",
2703 .class = &omap44xx_iva_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002704 .clkdm_name = "ivahd_clkdm",
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002705 .mpu_irqs = omap44xx_iva_irqs,
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002706 .rst_lines = omap44xx_iva_resets,
2707 .rst_lines_cnt = ARRAY_SIZE(omap44xx_iva_resets),
2708 .main_clk = "iva_fck",
2709 .prcm = {
2710 .omap4 = {
2711 .clkctrl_reg = OMAP4430_CM_IVAHD_IVAHD_CLKCTRL,
2712 .rstctrl_reg = OMAP4430_RM_IVAHD_RSTCTRL,
2713 },
2714 },
2715 .slaves = omap44xx_iva_slaves,
2716 .slaves_cnt = ARRAY_SIZE(omap44xx_iva_slaves),
2717 .masters = omap44xx_iva_masters,
2718 .masters_cnt = ARRAY_SIZE(omap44xx_iva_masters),
2719 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2720};
2721
2722/*
Benoit Cousson407a6882011-02-15 22:39:48 +01002723 * 'kbd' class
2724 * keyboard controller
2725 */
2726
2727static struct omap_hwmod_class_sysconfig omap44xx_kbd_sysc = {
2728 .rev_offs = 0x0000,
2729 .sysc_offs = 0x0010,
2730 .syss_offs = 0x0014,
2731 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
2732 SYSC_HAS_EMUFREE | SYSC_HAS_ENAWAKEUP |
2733 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
2734 SYSS_HAS_RESET_STATUS),
2735 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2736 .sysc_fields = &omap_hwmod_sysc_type1,
2737};
2738
2739static struct omap_hwmod_class omap44xx_kbd_hwmod_class = {
2740 .name = "kbd",
2741 .sysc = &omap44xx_kbd_sysc,
2742};
2743
2744/* kbd */
2745static struct omap_hwmod omap44xx_kbd_hwmod;
2746static struct omap_hwmod_irq_info omap44xx_kbd_irqs[] = {
2747 { .irq = 120 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002748 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01002749};
2750
2751static struct omap_hwmod_addr_space omap44xx_kbd_addrs[] = {
2752 {
2753 .pa_start = 0x4a31c000,
2754 .pa_end = 0x4a31c07f,
2755 .flags = ADDR_TYPE_RT
2756 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002757 { }
Benoit Cousson407a6882011-02-15 22:39:48 +01002758};
2759
2760/* l4_wkup -> kbd */
2761static struct omap_hwmod_ocp_if omap44xx_l4_wkup__kbd = {
2762 .master = &omap44xx_l4_wkup_hwmod,
2763 .slave = &omap44xx_kbd_hwmod,
2764 .clk = "l4_wkup_clk_mux_ck",
2765 .addr = omap44xx_kbd_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +01002766 .user = OCP_USER_MPU | OCP_USER_SDMA,
2767};
2768
2769/* kbd slave ports */
2770static struct omap_hwmod_ocp_if *omap44xx_kbd_slaves[] = {
2771 &omap44xx_l4_wkup__kbd,
2772};
2773
2774static struct omap_hwmod omap44xx_kbd_hwmod = {
2775 .name = "kbd",
2776 .class = &omap44xx_kbd_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002777 .clkdm_name = "l4_wkup_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01002778 .mpu_irqs = omap44xx_kbd_irqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01002779 .main_clk = "kbd_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06002780 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01002781 .omap4 = {
2782 .clkctrl_reg = OMAP4430_CM_WKUP_KEYBOARD_CLKCTRL,
2783 },
2784 },
2785 .slaves = omap44xx_kbd_slaves,
2786 .slaves_cnt = ARRAY_SIZE(omap44xx_kbd_slaves),
2787 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2788};
2789
2790/*
Benoit Coussonec5df922011-02-02 19:27:21 +00002791 * 'mailbox' class
2792 * mailbox module allowing communication between the on-chip processors using a
2793 * queued mailbox-interrupt mechanism.
2794 */
2795
2796static struct omap_hwmod_class_sysconfig omap44xx_mailbox_sysc = {
2797 .rev_offs = 0x0000,
2798 .sysc_offs = 0x0010,
2799 .sysc_flags = (SYSC_HAS_RESET_STATUS | SYSC_HAS_SIDLEMODE |
2800 SYSC_HAS_SOFTRESET),
2801 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2802 .sysc_fields = &omap_hwmod_sysc_type2,
2803};
2804
2805static struct omap_hwmod_class omap44xx_mailbox_hwmod_class = {
2806 .name = "mailbox",
2807 .sysc = &omap44xx_mailbox_sysc,
2808};
2809
2810/* mailbox */
2811static struct omap_hwmod omap44xx_mailbox_hwmod;
2812static struct omap_hwmod_irq_info omap44xx_mailbox_irqs[] = {
2813 { .irq = 26 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002814 { .irq = -1 }
Benoit Coussonec5df922011-02-02 19:27:21 +00002815};
2816
2817static struct omap_hwmod_addr_space omap44xx_mailbox_addrs[] = {
2818 {
2819 .pa_start = 0x4a0f4000,
2820 .pa_end = 0x4a0f41ff,
2821 .flags = ADDR_TYPE_RT
2822 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002823 { }
Benoit Coussonec5df922011-02-02 19:27:21 +00002824};
2825
2826/* l4_cfg -> mailbox */
2827static struct omap_hwmod_ocp_if omap44xx_l4_cfg__mailbox = {
2828 .master = &omap44xx_l4_cfg_hwmod,
2829 .slave = &omap44xx_mailbox_hwmod,
2830 .clk = "l4_div_ck",
2831 .addr = omap44xx_mailbox_addrs,
Benoit Coussonec5df922011-02-02 19:27:21 +00002832 .user = OCP_USER_MPU | OCP_USER_SDMA,
2833};
2834
2835/* mailbox slave ports */
2836static struct omap_hwmod_ocp_if *omap44xx_mailbox_slaves[] = {
2837 &omap44xx_l4_cfg__mailbox,
2838};
2839
2840static struct omap_hwmod omap44xx_mailbox_hwmod = {
2841 .name = "mailbox",
2842 .class = &omap44xx_mailbox_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002843 .clkdm_name = "l4_cfg_clkdm",
Benoit Coussonec5df922011-02-02 19:27:21 +00002844 .mpu_irqs = omap44xx_mailbox_irqs,
Benoit Cousson00fe6102011-07-09 19:14:28 -06002845 .prcm = {
Benoit Coussonec5df922011-02-02 19:27:21 +00002846 .omap4 = {
2847 .clkctrl_reg = OMAP4430_CM_L4CFG_MAILBOX_CLKCTRL,
2848 },
2849 },
2850 .slaves = omap44xx_mailbox_slaves,
2851 .slaves_cnt = ARRAY_SIZE(omap44xx_mailbox_slaves),
2852 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2853};
2854
2855/*
Benoit Cousson4ddff492011-01-31 14:50:30 +00002856 * 'mcbsp' class
2857 * multi channel buffered serial port controller
2858 */
2859
2860static struct omap_hwmod_class_sysconfig omap44xx_mcbsp_sysc = {
2861 .sysc_offs = 0x008c,
2862 .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_ENAWAKEUP |
2863 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
2864 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2865 .sysc_fields = &omap_hwmod_sysc_type1,
2866};
2867
2868static struct omap_hwmod_class omap44xx_mcbsp_hwmod_class = {
2869 .name = "mcbsp",
2870 .sysc = &omap44xx_mcbsp_sysc,
Kishon Vijay Abraham Icb7e9de2011-02-24 15:16:50 +05302871 .rev = MCBSP_CONFIG_TYPE4,
Benoit Cousson4ddff492011-01-31 14:50:30 +00002872};
2873
2874/* mcbsp1 */
2875static struct omap_hwmod omap44xx_mcbsp1_hwmod;
2876static struct omap_hwmod_irq_info omap44xx_mcbsp1_irqs[] = {
2877 { .irq = 17 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002878 { .irq = -1 }
Benoit Cousson4ddff492011-01-31 14:50:30 +00002879};
2880
2881static struct omap_hwmod_dma_info omap44xx_mcbsp1_sdma_reqs[] = {
2882 { .name = "tx", .dma_req = 32 + OMAP44XX_DMA_REQ_START },
2883 { .name = "rx", .dma_req = 33 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06002884 { .dma_req = -1 }
Benoit Cousson4ddff492011-01-31 14:50:30 +00002885};
2886
2887static struct omap_hwmod_addr_space omap44xx_mcbsp1_addrs[] = {
2888 {
Kishon Vijay Abraham Icb7e9de2011-02-24 15:16:50 +05302889 .name = "mpu",
Benoit Cousson4ddff492011-01-31 14:50:30 +00002890 .pa_start = 0x40122000,
2891 .pa_end = 0x401220ff,
2892 .flags = ADDR_TYPE_RT
2893 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002894 { }
Benoit Cousson4ddff492011-01-31 14:50:30 +00002895};
2896
2897/* l4_abe -> mcbsp1 */
2898static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp1 = {
2899 .master = &omap44xx_l4_abe_hwmod,
2900 .slave = &omap44xx_mcbsp1_hwmod,
2901 .clk = "ocp_abe_iclk",
2902 .addr = omap44xx_mcbsp1_addrs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00002903 .user = OCP_USER_MPU,
2904};
2905
2906static struct omap_hwmod_addr_space omap44xx_mcbsp1_dma_addrs[] = {
2907 {
Kishon Vijay Abraham Icb7e9de2011-02-24 15:16:50 +05302908 .name = "dma",
Benoit Cousson4ddff492011-01-31 14:50:30 +00002909 .pa_start = 0x49022000,
2910 .pa_end = 0x490220ff,
2911 .flags = ADDR_TYPE_RT
2912 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002913 { }
Benoit Cousson4ddff492011-01-31 14:50:30 +00002914};
2915
2916/* l4_abe -> mcbsp1 (dma) */
2917static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp1_dma = {
2918 .master = &omap44xx_l4_abe_hwmod,
2919 .slave = &omap44xx_mcbsp1_hwmod,
2920 .clk = "ocp_abe_iclk",
2921 .addr = omap44xx_mcbsp1_dma_addrs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00002922 .user = OCP_USER_SDMA,
2923};
2924
2925/* mcbsp1 slave ports */
2926static struct omap_hwmod_ocp_if *omap44xx_mcbsp1_slaves[] = {
2927 &omap44xx_l4_abe__mcbsp1,
2928 &omap44xx_l4_abe__mcbsp1_dma,
2929};
2930
2931static struct omap_hwmod omap44xx_mcbsp1_hwmod = {
2932 .name = "mcbsp1",
2933 .class = &omap44xx_mcbsp_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002934 .clkdm_name = "abe_clkdm",
Benoit Cousson4ddff492011-01-31 14:50:30 +00002935 .mpu_irqs = omap44xx_mcbsp1_irqs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00002936 .sdma_reqs = omap44xx_mcbsp1_sdma_reqs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00002937 .main_clk = "mcbsp1_fck",
2938 .prcm = {
2939 .omap4 = {
2940 .clkctrl_reg = OMAP4430_CM1_ABE_MCBSP1_CLKCTRL,
2941 },
2942 },
2943 .slaves = omap44xx_mcbsp1_slaves,
2944 .slaves_cnt = ARRAY_SIZE(omap44xx_mcbsp1_slaves),
2945 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2946};
2947
2948/* mcbsp2 */
2949static struct omap_hwmod omap44xx_mcbsp2_hwmod;
2950static struct omap_hwmod_irq_info omap44xx_mcbsp2_irqs[] = {
2951 { .irq = 22 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002952 { .irq = -1 }
Benoit Cousson4ddff492011-01-31 14:50:30 +00002953};
2954
2955static struct omap_hwmod_dma_info omap44xx_mcbsp2_sdma_reqs[] = {
2956 { .name = "tx", .dma_req = 16 + OMAP44XX_DMA_REQ_START },
2957 { .name = "rx", .dma_req = 17 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06002958 { .dma_req = -1 }
Benoit Cousson4ddff492011-01-31 14:50:30 +00002959};
2960
2961static struct omap_hwmod_addr_space omap44xx_mcbsp2_addrs[] = {
2962 {
Kishon Vijay Abraham Icb7e9de2011-02-24 15:16:50 +05302963 .name = "mpu",
Benoit Cousson4ddff492011-01-31 14:50:30 +00002964 .pa_start = 0x40124000,
2965 .pa_end = 0x401240ff,
2966 .flags = ADDR_TYPE_RT
2967 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002968 { }
Benoit Cousson4ddff492011-01-31 14:50:30 +00002969};
2970
2971/* l4_abe -> mcbsp2 */
2972static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp2 = {
2973 .master = &omap44xx_l4_abe_hwmod,
2974 .slave = &omap44xx_mcbsp2_hwmod,
2975 .clk = "ocp_abe_iclk",
2976 .addr = omap44xx_mcbsp2_addrs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00002977 .user = OCP_USER_MPU,
2978};
2979
2980static struct omap_hwmod_addr_space omap44xx_mcbsp2_dma_addrs[] = {
2981 {
Kishon Vijay Abraham Icb7e9de2011-02-24 15:16:50 +05302982 .name = "dma",
Benoit Cousson4ddff492011-01-31 14:50:30 +00002983 .pa_start = 0x49024000,
2984 .pa_end = 0x490240ff,
2985 .flags = ADDR_TYPE_RT
2986 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002987 { }
Benoit Cousson4ddff492011-01-31 14:50:30 +00002988};
2989
2990/* l4_abe -> mcbsp2 (dma) */
2991static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp2_dma = {
2992 .master = &omap44xx_l4_abe_hwmod,
2993 .slave = &omap44xx_mcbsp2_hwmod,
2994 .clk = "ocp_abe_iclk",
2995 .addr = omap44xx_mcbsp2_dma_addrs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00002996 .user = OCP_USER_SDMA,
2997};
2998
2999/* mcbsp2 slave ports */
3000static struct omap_hwmod_ocp_if *omap44xx_mcbsp2_slaves[] = {
3001 &omap44xx_l4_abe__mcbsp2,
3002 &omap44xx_l4_abe__mcbsp2_dma,
3003};
3004
3005static struct omap_hwmod omap44xx_mcbsp2_hwmod = {
3006 .name = "mcbsp2",
3007 .class = &omap44xx_mcbsp_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003008 .clkdm_name = "abe_clkdm",
Benoit Cousson4ddff492011-01-31 14:50:30 +00003009 .mpu_irqs = omap44xx_mcbsp2_irqs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003010 .sdma_reqs = omap44xx_mcbsp2_sdma_reqs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003011 .main_clk = "mcbsp2_fck",
3012 .prcm = {
3013 .omap4 = {
3014 .clkctrl_reg = OMAP4430_CM1_ABE_MCBSP2_CLKCTRL,
3015 },
3016 },
3017 .slaves = omap44xx_mcbsp2_slaves,
3018 .slaves_cnt = ARRAY_SIZE(omap44xx_mcbsp2_slaves),
3019 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3020};
3021
3022/* mcbsp3 */
3023static struct omap_hwmod omap44xx_mcbsp3_hwmod;
3024static struct omap_hwmod_irq_info omap44xx_mcbsp3_irqs[] = {
3025 { .irq = 23 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003026 { .irq = -1 }
Benoit Cousson4ddff492011-01-31 14:50:30 +00003027};
3028
3029static struct omap_hwmod_dma_info omap44xx_mcbsp3_sdma_reqs[] = {
3030 { .name = "tx", .dma_req = 18 + OMAP44XX_DMA_REQ_START },
3031 { .name = "rx", .dma_req = 19 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003032 { .dma_req = -1 }
Benoit Cousson4ddff492011-01-31 14:50:30 +00003033};
3034
3035static struct omap_hwmod_addr_space omap44xx_mcbsp3_addrs[] = {
3036 {
Kishon Vijay Abraham Icb7e9de2011-02-24 15:16:50 +05303037 .name = "mpu",
Benoit Cousson4ddff492011-01-31 14:50:30 +00003038 .pa_start = 0x40126000,
3039 .pa_end = 0x401260ff,
3040 .flags = ADDR_TYPE_RT
3041 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003042 { }
Benoit Cousson4ddff492011-01-31 14:50:30 +00003043};
3044
3045/* l4_abe -> mcbsp3 */
3046static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp3 = {
3047 .master = &omap44xx_l4_abe_hwmod,
3048 .slave = &omap44xx_mcbsp3_hwmod,
3049 .clk = "ocp_abe_iclk",
3050 .addr = omap44xx_mcbsp3_addrs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003051 .user = OCP_USER_MPU,
3052};
3053
3054static struct omap_hwmod_addr_space omap44xx_mcbsp3_dma_addrs[] = {
3055 {
Kishon Vijay Abraham Icb7e9de2011-02-24 15:16:50 +05303056 .name = "dma",
Benoit Cousson4ddff492011-01-31 14:50:30 +00003057 .pa_start = 0x49026000,
3058 .pa_end = 0x490260ff,
3059 .flags = ADDR_TYPE_RT
3060 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003061 { }
Benoit Cousson4ddff492011-01-31 14:50:30 +00003062};
3063
3064/* l4_abe -> mcbsp3 (dma) */
3065static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp3_dma = {
3066 .master = &omap44xx_l4_abe_hwmod,
3067 .slave = &omap44xx_mcbsp3_hwmod,
3068 .clk = "ocp_abe_iclk",
3069 .addr = omap44xx_mcbsp3_dma_addrs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003070 .user = OCP_USER_SDMA,
3071};
3072
3073/* mcbsp3 slave ports */
3074static struct omap_hwmod_ocp_if *omap44xx_mcbsp3_slaves[] = {
3075 &omap44xx_l4_abe__mcbsp3,
3076 &omap44xx_l4_abe__mcbsp3_dma,
3077};
3078
3079static struct omap_hwmod omap44xx_mcbsp3_hwmod = {
3080 .name = "mcbsp3",
3081 .class = &omap44xx_mcbsp_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003082 .clkdm_name = "abe_clkdm",
Benoit Cousson4ddff492011-01-31 14:50:30 +00003083 .mpu_irqs = omap44xx_mcbsp3_irqs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003084 .sdma_reqs = omap44xx_mcbsp3_sdma_reqs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003085 .main_clk = "mcbsp3_fck",
3086 .prcm = {
3087 .omap4 = {
3088 .clkctrl_reg = OMAP4430_CM1_ABE_MCBSP3_CLKCTRL,
3089 },
3090 },
3091 .slaves = omap44xx_mcbsp3_slaves,
3092 .slaves_cnt = ARRAY_SIZE(omap44xx_mcbsp3_slaves),
3093 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3094};
3095
3096/* mcbsp4 */
3097static struct omap_hwmod omap44xx_mcbsp4_hwmod;
3098static struct omap_hwmod_irq_info omap44xx_mcbsp4_irqs[] = {
3099 { .irq = 16 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003100 { .irq = -1 }
Benoit Cousson4ddff492011-01-31 14:50:30 +00003101};
3102
3103static struct omap_hwmod_dma_info omap44xx_mcbsp4_sdma_reqs[] = {
3104 { .name = "tx", .dma_req = 30 + OMAP44XX_DMA_REQ_START },
3105 { .name = "rx", .dma_req = 31 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003106 { .dma_req = -1 }
Benoit Cousson4ddff492011-01-31 14:50:30 +00003107};
3108
3109static struct omap_hwmod_addr_space omap44xx_mcbsp4_addrs[] = {
3110 {
3111 .pa_start = 0x48096000,
3112 .pa_end = 0x480960ff,
3113 .flags = ADDR_TYPE_RT
3114 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003115 { }
Benoit Cousson4ddff492011-01-31 14:50:30 +00003116};
3117
3118/* l4_per -> mcbsp4 */
3119static struct omap_hwmod_ocp_if omap44xx_l4_per__mcbsp4 = {
3120 .master = &omap44xx_l4_per_hwmod,
3121 .slave = &omap44xx_mcbsp4_hwmod,
3122 .clk = "l4_div_ck",
3123 .addr = omap44xx_mcbsp4_addrs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003124 .user = OCP_USER_MPU | OCP_USER_SDMA,
3125};
3126
3127/* mcbsp4 slave ports */
3128static struct omap_hwmod_ocp_if *omap44xx_mcbsp4_slaves[] = {
3129 &omap44xx_l4_per__mcbsp4,
3130};
3131
3132static struct omap_hwmod omap44xx_mcbsp4_hwmod = {
3133 .name = "mcbsp4",
3134 .class = &omap44xx_mcbsp_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003135 .clkdm_name = "l4_per_clkdm",
Benoit Cousson4ddff492011-01-31 14:50:30 +00003136 .mpu_irqs = omap44xx_mcbsp4_irqs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003137 .sdma_reqs = omap44xx_mcbsp4_sdma_reqs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003138 .main_clk = "mcbsp4_fck",
3139 .prcm = {
3140 .omap4 = {
3141 .clkctrl_reg = OMAP4430_CM_L4PER_MCBSP4_CLKCTRL,
3142 },
3143 },
3144 .slaves = omap44xx_mcbsp4_slaves,
3145 .slaves_cnt = ARRAY_SIZE(omap44xx_mcbsp4_slaves),
3146 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3147};
3148
3149/*
Benoit Cousson407a6882011-02-15 22:39:48 +01003150 * 'mcpdm' class
3151 * multi channel pdm controller (proprietary interface with phoenix power
3152 * ic)
3153 */
3154
3155static struct omap_hwmod_class_sysconfig omap44xx_mcpdm_sysc = {
3156 .rev_offs = 0x0000,
3157 .sysc_offs = 0x0010,
3158 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
3159 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
3160 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
3161 SIDLE_SMART_WKUP),
3162 .sysc_fields = &omap_hwmod_sysc_type2,
3163};
3164
3165static struct omap_hwmod_class omap44xx_mcpdm_hwmod_class = {
3166 .name = "mcpdm",
3167 .sysc = &omap44xx_mcpdm_sysc,
3168};
3169
3170/* mcpdm */
3171static struct omap_hwmod omap44xx_mcpdm_hwmod;
3172static struct omap_hwmod_irq_info omap44xx_mcpdm_irqs[] = {
3173 { .irq = 112 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003174 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003175};
3176
3177static struct omap_hwmod_dma_info omap44xx_mcpdm_sdma_reqs[] = {
3178 { .name = "up_link", .dma_req = 64 + OMAP44XX_DMA_REQ_START },
3179 { .name = "dn_link", .dma_req = 65 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003180 { .dma_req = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003181};
3182
3183static struct omap_hwmod_addr_space omap44xx_mcpdm_addrs[] = {
3184 {
3185 .pa_start = 0x40132000,
3186 .pa_end = 0x4013207f,
3187 .flags = ADDR_TYPE_RT
3188 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003189 { }
Benoit Cousson407a6882011-02-15 22:39:48 +01003190};
3191
3192/* l4_abe -> mcpdm */
3193static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcpdm = {
3194 .master = &omap44xx_l4_abe_hwmod,
3195 .slave = &omap44xx_mcpdm_hwmod,
3196 .clk = "ocp_abe_iclk",
3197 .addr = omap44xx_mcpdm_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003198 .user = OCP_USER_MPU,
3199};
3200
3201static struct omap_hwmod_addr_space omap44xx_mcpdm_dma_addrs[] = {
3202 {
3203 .pa_start = 0x49032000,
3204 .pa_end = 0x4903207f,
3205 .flags = ADDR_TYPE_RT
3206 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003207 { }
Benoit Cousson407a6882011-02-15 22:39:48 +01003208};
3209
3210/* l4_abe -> mcpdm (dma) */
3211static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcpdm_dma = {
3212 .master = &omap44xx_l4_abe_hwmod,
3213 .slave = &omap44xx_mcpdm_hwmod,
3214 .clk = "ocp_abe_iclk",
3215 .addr = omap44xx_mcpdm_dma_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003216 .user = OCP_USER_SDMA,
3217};
3218
3219/* mcpdm slave ports */
3220static struct omap_hwmod_ocp_if *omap44xx_mcpdm_slaves[] = {
3221 &omap44xx_l4_abe__mcpdm,
3222 &omap44xx_l4_abe__mcpdm_dma,
3223};
3224
3225static struct omap_hwmod omap44xx_mcpdm_hwmod = {
3226 .name = "mcpdm",
3227 .class = &omap44xx_mcpdm_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003228 .clkdm_name = "abe_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01003229 .mpu_irqs = omap44xx_mcpdm_irqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003230 .sdma_reqs = omap44xx_mcpdm_sdma_reqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003231 .main_clk = "mcpdm_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06003232 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01003233 .omap4 = {
3234 .clkctrl_reg = OMAP4430_CM1_ABE_PDM_CLKCTRL,
3235 },
3236 },
3237 .slaves = omap44xx_mcpdm_slaves,
3238 .slaves_cnt = ARRAY_SIZE(omap44xx_mcpdm_slaves),
3239 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3240};
3241
3242/*
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303243 * 'mcspi' class
3244 * multichannel serial port interface (mcspi) / master/slave synchronous serial
3245 * bus
3246 */
3247
3248static struct omap_hwmod_class_sysconfig omap44xx_mcspi_sysc = {
3249 .rev_offs = 0x0000,
3250 .sysc_offs = 0x0010,
3251 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
3252 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
3253 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
3254 SIDLE_SMART_WKUP),
3255 .sysc_fields = &omap_hwmod_sysc_type2,
3256};
3257
3258static struct omap_hwmod_class omap44xx_mcspi_hwmod_class = {
3259 .name = "mcspi",
3260 .sysc = &omap44xx_mcspi_sysc,
Benoit Cousson905a74d2011-02-18 14:01:06 +01003261 .rev = OMAP4_MCSPI_REV,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303262};
3263
3264/* mcspi1 */
3265static struct omap_hwmod omap44xx_mcspi1_hwmod;
3266static struct omap_hwmod_irq_info omap44xx_mcspi1_irqs[] = {
3267 { .irq = 65 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003268 { .irq = -1 }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303269};
3270
3271static struct omap_hwmod_dma_info omap44xx_mcspi1_sdma_reqs[] = {
3272 { .name = "tx0", .dma_req = 34 + OMAP44XX_DMA_REQ_START },
3273 { .name = "rx0", .dma_req = 35 + OMAP44XX_DMA_REQ_START },
3274 { .name = "tx1", .dma_req = 36 + OMAP44XX_DMA_REQ_START },
3275 { .name = "rx1", .dma_req = 37 + OMAP44XX_DMA_REQ_START },
3276 { .name = "tx2", .dma_req = 38 + OMAP44XX_DMA_REQ_START },
3277 { .name = "rx2", .dma_req = 39 + OMAP44XX_DMA_REQ_START },
3278 { .name = "tx3", .dma_req = 40 + OMAP44XX_DMA_REQ_START },
3279 { .name = "rx3", .dma_req = 41 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003280 { .dma_req = -1 }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303281};
3282
3283static struct omap_hwmod_addr_space omap44xx_mcspi1_addrs[] = {
3284 {
3285 .pa_start = 0x48098000,
3286 .pa_end = 0x480981ff,
3287 .flags = ADDR_TYPE_RT
3288 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003289 { }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303290};
3291
3292/* l4_per -> mcspi1 */
3293static struct omap_hwmod_ocp_if omap44xx_l4_per__mcspi1 = {
3294 .master = &omap44xx_l4_per_hwmod,
3295 .slave = &omap44xx_mcspi1_hwmod,
3296 .clk = "l4_div_ck",
3297 .addr = omap44xx_mcspi1_addrs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303298 .user = OCP_USER_MPU | OCP_USER_SDMA,
3299};
3300
3301/* mcspi1 slave ports */
3302static struct omap_hwmod_ocp_if *omap44xx_mcspi1_slaves[] = {
3303 &omap44xx_l4_per__mcspi1,
3304};
3305
Benoit Cousson905a74d2011-02-18 14:01:06 +01003306/* mcspi1 dev_attr */
3307static struct omap2_mcspi_dev_attr mcspi1_dev_attr = {
3308 .num_chipselect = 4,
3309};
3310
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303311static struct omap_hwmod omap44xx_mcspi1_hwmod = {
3312 .name = "mcspi1",
3313 .class = &omap44xx_mcspi_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003314 .clkdm_name = "l4_per_clkdm",
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303315 .mpu_irqs = omap44xx_mcspi1_irqs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303316 .sdma_reqs = omap44xx_mcspi1_sdma_reqs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303317 .main_clk = "mcspi1_fck",
3318 .prcm = {
3319 .omap4 = {
3320 .clkctrl_reg = OMAP4430_CM_L4PER_MCSPI1_CLKCTRL,
3321 },
3322 },
Benoit Cousson905a74d2011-02-18 14:01:06 +01003323 .dev_attr = &mcspi1_dev_attr,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303324 .slaves = omap44xx_mcspi1_slaves,
3325 .slaves_cnt = ARRAY_SIZE(omap44xx_mcspi1_slaves),
3326 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3327};
3328
3329/* mcspi2 */
3330static struct omap_hwmod omap44xx_mcspi2_hwmod;
3331static struct omap_hwmod_irq_info omap44xx_mcspi2_irqs[] = {
3332 { .irq = 66 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003333 { .irq = -1 }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303334};
3335
3336static struct omap_hwmod_dma_info omap44xx_mcspi2_sdma_reqs[] = {
3337 { .name = "tx0", .dma_req = 42 + OMAP44XX_DMA_REQ_START },
3338 { .name = "rx0", .dma_req = 43 + OMAP44XX_DMA_REQ_START },
3339 { .name = "tx1", .dma_req = 44 + OMAP44XX_DMA_REQ_START },
3340 { .name = "rx1", .dma_req = 45 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003341 { .dma_req = -1 }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303342};
3343
3344static struct omap_hwmod_addr_space omap44xx_mcspi2_addrs[] = {
3345 {
3346 .pa_start = 0x4809a000,
3347 .pa_end = 0x4809a1ff,
3348 .flags = ADDR_TYPE_RT
3349 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003350 { }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303351};
3352
3353/* l4_per -> mcspi2 */
3354static struct omap_hwmod_ocp_if omap44xx_l4_per__mcspi2 = {
3355 .master = &omap44xx_l4_per_hwmod,
3356 .slave = &omap44xx_mcspi2_hwmod,
3357 .clk = "l4_div_ck",
3358 .addr = omap44xx_mcspi2_addrs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303359 .user = OCP_USER_MPU | OCP_USER_SDMA,
3360};
3361
3362/* mcspi2 slave ports */
3363static struct omap_hwmod_ocp_if *omap44xx_mcspi2_slaves[] = {
3364 &omap44xx_l4_per__mcspi2,
3365};
3366
Benoit Cousson905a74d2011-02-18 14:01:06 +01003367/* mcspi2 dev_attr */
3368static struct omap2_mcspi_dev_attr mcspi2_dev_attr = {
3369 .num_chipselect = 2,
3370};
3371
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303372static struct omap_hwmod omap44xx_mcspi2_hwmod = {
3373 .name = "mcspi2",
3374 .class = &omap44xx_mcspi_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003375 .clkdm_name = "l4_per_clkdm",
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303376 .mpu_irqs = omap44xx_mcspi2_irqs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303377 .sdma_reqs = omap44xx_mcspi2_sdma_reqs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303378 .main_clk = "mcspi2_fck",
3379 .prcm = {
3380 .omap4 = {
3381 .clkctrl_reg = OMAP4430_CM_L4PER_MCSPI2_CLKCTRL,
3382 },
3383 },
Benoit Cousson905a74d2011-02-18 14:01:06 +01003384 .dev_attr = &mcspi2_dev_attr,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303385 .slaves = omap44xx_mcspi2_slaves,
3386 .slaves_cnt = ARRAY_SIZE(omap44xx_mcspi2_slaves),
3387 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3388};
3389
3390/* mcspi3 */
3391static struct omap_hwmod omap44xx_mcspi3_hwmod;
3392static struct omap_hwmod_irq_info omap44xx_mcspi3_irqs[] = {
3393 { .irq = 91 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003394 { .irq = -1 }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303395};
3396
3397static struct omap_hwmod_dma_info omap44xx_mcspi3_sdma_reqs[] = {
3398 { .name = "tx0", .dma_req = 14 + OMAP44XX_DMA_REQ_START },
3399 { .name = "rx0", .dma_req = 15 + OMAP44XX_DMA_REQ_START },
3400 { .name = "tx1", .dma_req = 22 + OMAP44XX_DMA_REQ_START },
3401 { .name = "rx1", .dma_req = 23 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003402 { .dma_req = -1 }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303403};
3404
3405static struct omap_hwmod_addr_space omap44xx_mcspi3_addrs[] = {
3406 {
3407 .pa_start = 0x480b8000,
3408 .pa_end = 0x480b81ff,
3409 .flags = ADDR_TYPE_RT
3410 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003411 { }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303412};
3413
3414/* l4_per -> mcspi3 */
3415static struct omap_hwmod_ocp_if omap44xx_l4_per__mcspi3 = {
3416 .master = &omap44xx_l4_per_hwmod,
3417 .slave = &omap44xx_mcspi3_hwmod,
3418 .clk = "l4_div_ck",
3419 .addr = omap44xx_mcspi3_addrs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303420 .user = OCP_USER_MPU | OCP_USER_SDMA,
3421};
3422
3423/* mcspi3 slave ports */
3424static struct omap_hwmod_ocp_if *omap44xx_mcspi3_slaves[] = {
3425 &omap44xx_l4_per__mcspi3,
3426};
3427
Benoit Cousson905a74d2011-02-18 14:01:06 +01003428/* mcspi3 dev_attr */
3429static struct omap2_mcspi_dev_attr mcspi3_dev_attr = {
3430 .num_chipselect = 2,
3431};
3432
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303433static struct omap_hwmod omap44xx_mcspi3_hwmod = {
3434 .name = "mcspi3",
3435 .class = &omap44xx_mcspi_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003436 .clkdm_name = "l4_per_clkdm",
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303437 .mpu_irqs = omap44xx_mcspi3_irqs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303438 .sdma_reqs = omap44xx_mcspi3_sdma_reqs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303439 .main_clk = "mcspi3_fck",
3440 .prcm = {
3441 .omap4 = {
3442 .clkctrl_reg = OMAP4430_CM_L4PER_MCSPI3_CLKCTRL,
3443 },
3444 },
Benoit Cousson905a74d2011-02-18 14:01:06 +01003445 .dev_attr = &mcspi3_dev_attr,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303446 .slaves = omap44xx_mcspi3_slaves,
3447 .slaves_cnt = ARRAY_SIZE(omap44xx_mcspi3_slaves),
3448 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3449};
3450
3451/* mcspi4 */
3452static struct omap_hwmod omap44xx_mcspi4_hwmod;
3453static struct omap_hwmod_irq_info omap44xx_mcspi4_irqs[] = {
3454 { .irq = 48 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003455 { .irq = -1 }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303456};
3457
3458static struct omap_hwmod_dma_info omap44xx_mcspi4_sdma_reqs[] = {
3459 { .name = "tx0", .dma_req = 69 + OMAP44XX_DMA_REQ_START },
3460 { .name = "rx0", .dma_req = 70 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003461 { .dma_req = -1 }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303462};
3463
3464static struct omap_hwmod_addr_space omap44xx_mcspi4_addrs[] = {
3465 {
3466 .pa_start = 0x480ba000,
3467 .pa_end = 0x480ba1ff,
3468 .flags = ADDR_TYPE_RT
3469 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003470 { }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303471};
3472
3473/* l4_per -> mcspi4 */
3474static struct omap_hwmod_ocp_if omap44xx_l4_per__mcspi4 = {
3475 .master = &omap44xx_l4_per_hwmod,
3476 .slave = &omap44xx_mcspi4_hwmod,
3477 .clk = "l4_div_ck",
3478 .addr = omap44xx_mcspi4_addrs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303479 .user = OCP_USER_MPU | OCP_USER_SDMA,
3480};
3481
3482/* mcspi4 slave ports */
3483static struct omap_hwmod_ocp_if *omap44xx_mcspi4_slaves[] = {
3484 &omap44xx_l4_per__mcspi4,
3485};
3486
Benoit Cousson905a74d2011-02-18 14:01:06 +01003487/* mcspi4 dev_attr */
3488static struct omap2_mcspi_dev_attr mcspi4_dev_attr = {
3489 .num_chipselect = 1,
3490};
3491
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303492static struct omap_hwmod omap44xx_mcspi4_hwmod = {
3493 .name = "mcspi4",
3494 .class = &omap44xx_mcspi_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003495 .clkdm_name = "l4_per_clkdm",
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303496 .mpu_irqs = omap44xx_mcspi4_irqs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303497 .sdma_reqs = omap44xx_mcspi4_sdma_reqs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303498 .main_clk = "mcspi4_fck",
3499 .prcm = {
3500 .omap4 = {
3501 .clkctrl_reg = OMAP4430_CM_L4PER_MCSPI4_CLKCTRL,
3502 },
3503 },
Benoit Cousson905a74d2011-02-18 14:01:06 +01003504 .dev_attr = &mcspi4_dev_attr,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303505 .slaves = omap44xx_mcspi4_slaves,
3506 .slaves_cnt = ARRAY_SIZE(omap44xx_mcspi4_slaves),
3507 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3508};
3509
3510/*
Benoit Cousson407a6882011-02-15 22:39:48 +01003511 * 'mmc' class
3512 * multimedia card high-speed/sd/sdio (mmc/sd/sdio) host controller
3513 */
3514
3515static struct omap_hwmod_class_sysconfig omap44xx_mmc_sysc = {
3516 .rev_offs = 0x0000,
3517 .sysc_offs = 0x0010,
3518 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_MIDLEMODE |
3519 SYSC_HAS_RESET_STATUS | SYSC_HAS_SIDLEMODE |
3520 SYSC_HAS_SOFTRESET),
3521 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
3522 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
Benoit Coussonc614ebf2011-07-01 22:54:01 +02003523 MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
Benoit Cousson407a6882011-02-15 22:39:48 +01003524 .sysc_fields = &omap_hwmod_sysc_type2,
3525};
3526
3527static struct omap_hwmod_class omap44xx_mmc_hwmod_class = {
3528 .name = "mmc",
3529 .sysc = &omap44xx_mmc_sysc,
3530};
3531
3532/* mmc1 */
3533static struct omap_hwmod_irq_info omap44xx_mmc1_irqs[] = {
3534 { .irq = 83 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003535 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003536};
3537
3538static struct omap_hwmod_dma_info omap44xx_mmc1_sdma_reqs[] = {
3539 { .name = "tx", .dma_req = 60 + OMAP44XX_DMA_REQ_START },
3540 { .name = "rx", .dma_req = 61 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003541 { .dma_req = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003542};
3543
3544/* mmc1 master ports */
3545static struct omap_hwmod_ocp_if *omap44xx_mmc1_masters[] = {
3546 &omap44xx_mmc1__l3_main_1,
3547};
3548
3549static struct omap_hwmod_addr_space omap44xx_mmc1_addrs[] = {
3550 {
3551 .pa_start = 0x4809c000,
3552 .pa_end = 0x4809c3ff,
3553 .flags = ADDR_TYPE_RT
3554 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003555 { }
Benoit Cousson407a6882011-02-15 22:39:48 +01003556};
3557
3558/* l4_per -> mmc1 */
3559static struct omap_hwmod_ocp_if omap44xx_l4_per__mmc1 = {
3560 .master = &omap44xx_l4_per_hwmod,
3561 .slave = &omap44xx_mmc1_hwmod,
3562 .clk = "l4_div_ck",
3563 .addr = omap44xx_mmc1_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003564 .user = OCP_USER_MPU | OCP_USER_SDMA,
3565};
3566
3567/* mmc1 slave ports */
3568static struct omap_hwmod_ocp_if *omap44xx_mmc1_slaves[] = {
3569 &omap44xx_l4_per__mmc1,
3570};
3571
Kishore Kadiyala6ab89462011-03-01 13:12:56 -08003572/* mmc1 dev_attr */
3573static struct omap_mmc_dev_attr mmc1_dev_attr = {
3574 .flags = OMAP_HSMMC_SUPPORTS_DUAL_VOLT,
3575};
3576
Benoit Cousson407a6882011-02-15 22:39:48 +01003577static struct omap_hwmod omap44xx_mmc1_hwmod = {
3578 .name = "mmc1",
3579 .class = &omap44xx_mmc_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003580 .clkdm_name = "l3_init_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01003581 .mpu_irqs = omap44xx_mmc1_irqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003582 .sdma_reqs = omap44xx_mmc1_sdma_reqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003583 .main_clk = "mmc1_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06003584 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01003585 .omap4 = {
3586 .clkctrl_reg = OMAP4430_CM_L3INIT_MMC1_CLKCTRL,
3587 },
3588 },
Kishore Kadiyala6ab89462011-03-01 13:12:56 -08003589 .dev_attr = &mmc1_dev_attr,
Benoit Cousson407a6882011-02-15 22:39:48 +01003590 .slaves = omap44xx_mmc1_slaves,
3591 .slaves_cnt = ARRAY_SIZE(omap44xx_mmc1_slaves),
3592 .masters = omap44xx_mmc1_masters,
3593 .masters_cnt = ARRAY_SIZE(omap44xx_mmc1_masters),
3594 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3595};
3596
3597/* mmc2 */
3598static struct omap_hwmod_irq_info omap44xx_mmc2_irqs[] = {
3599 { .irq = 86 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003600 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003601};
3602
3603static struct omap_hwmod_dma_info omap44xx_mmc2_sdma_reqs[] = {
3604 { .name = "tx", .dma_req = 46 + OMAP44XX_DMA_REQ_START },
3605 { .name = "rx", .dma_req = 47 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003606 { .dma_req = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003607};
3608
3609/* mmc2 master ports */
3610static struct omap_hwmod_ocp_if *omap44xx_mmc2_masters[] = {
3611 &omap44xx_mmc2__l3_main_1,
3612};
3613
3614static struct omap_hwmod_addr_space omap44xx_mmc2_addrs[] = {
3615 {
3616 .pa_start = 0x480b4000,
3617 .pa_end = 0x480b43ff,
3618 .flags = ADDR_TYPE_RT
3619 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003620 { }
Benoit Cousson407a6882011-02-15 22:39:48 +01003621};
3622
3623/* l4_per -> mmc2 */
3624static struct omap_hwmod_ocp_if omap44xx_l4_per__mmc2 = {
3625 .master = &omap44xx_l4_per_hwmod,
3626 .slave = &omap44xx_mmc2_hwmod,
3627 .clk = "l4_div_ck",
3628 .addr = omap44xx_mmc2_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003629 .user = OCP_USER_MPU | OCP_USER_SDMA,
3630};
3631
3632/* mmc2 slave ports */
3633static struct omap_hwmod_ocp_if *omap44xx_mmc2_slaves[] = {
3634 &omap44xx_l4_per__mmc2,
3635};
3636
3637static struct omap_hwmod omap44xx_mmc2_hwmod = {
3638 .name = "mmc2",
3639 .class = &omap44xx_mmc_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003640 .clkdm_name = "l3_init_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01003641 .mpu_irqs = omap44xx_mmc2_irqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003642 .sdma_reqs = omap44xx_mmc2_sdma_reqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003643 .main_clk = "mmc2_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06003644 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01003645 .omap4 = {
3646 .clkctrl_reg = OMAP4430_CM_L3INIT_MMC2_CLKCTRL,
3647 },
3648 },
3649 .slaves = omap44xx_mmc2_slaves,
3650 .slaves_cnt = ARRAY_SIZE(omap44xx_mmc2_slaves),
3651 .masters = omap44xx_mmc2_masters,
3652 .masters_cnt = ARRAY_SIZE(omap44xx_mmc2_masters),
3653 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3654};
3655
3656/* mmc3 */
3657static struct omap_hwmod omap44xx_mmc3_hwmod;
3658static struct omap_hwmod_irq_info omap44xx_mmc3_irqs[] = {
3659 { .irq = 94 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003660 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003661};
3662
3663static struct omap_hwmod_dma_info omap44xx_mmc3_sdma_reqs[] = {
3664 { .name = "tx", .dma_req = 76 + OMAP44XX_DMA_REQ_START },
3665 { .name = "rx", .dma_req = 77 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003666 { .dma_req = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003667};
3668
3669static struct omap_hwmod_addr_space omap44xx_mmc3_addrs[] = {
3670 {
3671 .pa_start = 0x480ad000,
3672 .pa_end = 0x480ad3ff,
3673 .flags = ADDR_TYPE_RT
3674 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003675 { }
Benoit Cousson407a6882011-02-15 22:39:48 +01003676};
3677
3678/* l4_per -> mmc3 */
3679static struct omap_hwmod_ocp_if omap44xx_l4_per__mmc3 = {
3680 .master = &omap44xx_l4_per_hwmod,
3681 .slave = &omap44xx_mmc3_hwmod,
3682 .clk = "l4_div_ck",
3683 .addr = omap44xx_mmc3_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003684 .user = OCP_USER_MPU | OCP_USER_SDMA,
3685};
3686
3687/* mmc3 slave ports */
3688static struct omap_hwmod_ocp_if *omap44xx_mmc3_slaves[] = {
3689 &omap44xx_l4_per__mmc3,
3690};
3691
3692static struct omap_hwmod omap44xx_mmc3_hwmod = {
3693 .name = "mmc3",
3694 .class = &omap44xx_mmc_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003695 .clkdm_name = "l4_per_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01003696 .mpu_irqs = omap44xx_mmc3_irqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003697 .sdma_reqs = omap44xx_mmc3_sdma_reqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003698 .main_clk = "mmc3_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06003699 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01003700 .omap4 = {
3701 .clkctrl_reg = OMAP4430_CM_L4PER_MMCSD3_CLKCTRL,
3702 },
3703 },
3704 .slaves = omap44xx_mmc3_slaves,
3705 .slaves_cnt = ARRAY_SIZE(omap44xx_mmc3_slaves),
3706 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3707};
3708
3709/* mmc4 */
3710static struct omap_hwmod omap44xx_mmc4_hwmod;
3711static struct omap_hwmod_irq_info omap44xx_mmc4_irqs[] = {
3712 { .irq = 96 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003713 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003714};
3715
3716static struct omap_hwmod_dma_info omap44xx_mmc4_sdma_reqs[] = {
3717 { .name = "tx", .dma_req = 56 + OMAP44XX_DMA_REQ_START },
3718 { .name = "rx", .dma_req = 57 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003719 { .dma_req = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003720};
3721
3722static struct omap_hwmod_addr_space omap44xx_mmc4_addrs[] = {
3723 {
3724 .pa_start = 0x480d1000,
3725 .pa_end = 0x480d13ff,
3726 .flags = ADDR_TYPE_RT
3727 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003728 { }
Benoit Cousson407a6882011-02-15 22:39:48 +01003729};
3730
3731/* l4_per -> mmc4 */
3732static struct omap_hwmod_ocp_if omap44xx_l4_per__mmc4 = {
3733 .master = &omap44xx_l4_per_hwmod,
3734 .slave = &omap44xx_mmc4_hwmod,
3735 .clk = "l4_div_ck",
3736 .addr = omap44xx_mmc4_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003737 .user = OCP_USER_MPU | OCP_USER_SDMA,
3738};
3739
3740/* mmc4 slave ports */
3741static struct omap_hwmod_ocp_if *omap44xx_mmc4_slaves[] = {
3742 &omap44xx_l4_per__mmc4,
3743};
3744
3745static struct omap_hwmod omap44xx_mmc4_hwmod = {
3746 .name = "mmc4",
3747 .class = &omap44xx_mmc_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003748 .clkdm_name = "l4_per_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01003749 .mpu_irqs = omap44xx_mmc4_irqs,
Paul Walmsley212738a2011-07-09 19:14:06 -06003750
Benoit Cousson407a6882011-02-15 22:39:48 +01003751 .sdma_reqs = omap44xx_mmc4_sdma_reqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003752 .main_clk = "mmc4_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06003753 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01003754 .omap4 = {
3755 .clkctrl_reg = OMAP4430_CM_L4PER_MMCSD4_CLKCTRL,
3756 },
3757 },
3758 .slaves = omap44xx_mmc4_slaves,
3759 .slaves_cnt = ARRAY_SIZE(omap44xx_mmc4_slaves),
3760 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3761};
3762
3763/* mmc5 */
3764static struct omap_hwmod omap44xx_mmc5_hwmod;
3765static struct omap_hwmod_irq_info omap44xx_mmc5_irqs[] = {
3766 { .irq = 59 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003767 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003768};
3769
3770static struct omap_hwmod_dma_info omap44xx_mmc5_sdma_reqs[] = {
3771 { .name = "tx", .dma_req = 58 + OMAP44XX_DMA_REQ_START },
3772 { .name = "rx", .dma_req = 59 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003773 { .dma_req = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003774};
3775
3776static struct omap_hwmod_addr_space omap44xx_mmc5_addrs[] = {
3777 {
3778 .pa_start = 0x480d5000,
3779 .pa_end = 0x480d53ff,
3780 .flags = ADDR_TYPE_RT
3781 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003782 { }
Benoit Cousson407a6882011-02-15 22:39:48 +01003783};
3784
3785/* l4_per -> mmc5 */
3786static struct omap_hwmod_ocp_if omap44xx_l4_per__mmc5 = {
3787 .master = &omap44xx_l4_per_hwmod,
3788 .slave = &omap44xx_mmc5_hwmod,
3789 .clk = "l4_div_ck",
3790 .addr = omap44xx_mmc5_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003791 .user = OCP_USER_MPU | OCP_USER_SDMA,
3792};
3793
3794/* mmc5 slave ports */
3795static struct omap_hwmod_ocp_if *omap44xx_mmc5_slaves[] = {
3796 &omap44xx_l4_per__mmc5,
3797};
3798
3799static struct omap_hwmod omap44xx_mmc5_hwmod = {
3800 .name = "mmc5",
3801 .class = &omap44xx_mmc_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003802 .clkdm_name = "l4_per_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01003803 .mpu_irqs = omap44xx_mmc5_irqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003804 .sdma_reqs = omap44xx_mmc5_sdma_reqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003805 .main_clk = "mmc5_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06003806 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01003807 .omap4 = {
3808 .clkctrl_reg = OMAP4430_CM_L4PER_MMCSD5_CLKCTRL,
3809 },
3810 },
3811 .slaves = omap44xx_mmc5_slaves,
3812 .slaves_cnt = ARRAY_SIZE(omap44xx_mmc5_slaves),
3813 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3814};
3815
3816/*
Benoit Cousson55d2cb02010-05-12 17:54:36 +02003817 * 'mpu' class
3818 * mpu sub-system
3819 */
3820
3821static struct omap_hwmod_class omap44xx_mpu_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +00003822 .name = "mpu",
Benoit Cousson55d2cb02010-05-12 17:54:36 +02003823};
3824
3825/* mpu */
3826static struct omap_hwmod_irq_info omap44xx_mpu_irqs[] = {
3827 { .name = "pl310", .irq = 0 + OMAP44XX_IRQ_GIC_START },
3828 { .name = "cti0", .irq = 1 + OMAP44XX_IRQ_GIC_START },
3829 { .name = "cti1", .irq = 2 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003830 { .irq = -1 }
Benoit Cousson55d2cb02010-05-12 17:54:36 +02003831};
3832
3833/* mpu master ports */
3834static struct omap_hwmod_ocp_if *omap44xx_mpu_masters[] = {
3835 &omap44xx_mpu__l3_main_1,
3836 &omap44xx_mpu__l4_abe,
3837 &omap44xx_mpu__dmm,
3838};
3839
3840static struct omap_hwmod omap44xx_mpu_hwmod = {
3841 .name = "mpu",
3842 .class = &omap44xx_mpu_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003843 .clkdm_name = "mpuss_clkdm",
Benoit Cousson7ecc53732011-07-09 19:14:28 -06003844 .flags = HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET,
Benoit Cousson55d2cb02010-05-12 17:54:36 +02003845 .mpu_irqs = omap44xx_mpu_irqs,
Benoit Cousson55d2cb02010-05-12 17:54:36 +02003846 .main_clk = "dpll_mpu_m2_ck",
3847 .prcm = {
3848 .omap4 = {
3849 .clkctrl_reg = OMAP4430_CM_MPU_MPU_CLKCTRL,
3850 },
3851 },
3852 .masters = omap44xx_mpu_masters,
3853 .masters_cnt = ARRAY_SIZE(omap44xx_mpu_masters),
3854 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3855};
3856
Benoit Cousson92b18d12010-09-23 20:02:41 +05303857/*
Benoit Cousson1f6a7172010-12-23 22:30:30 +00003858 * 'smartreflex' class
3859 * smartreflex module (monitor silicon performance and outputs a measure of
3860 * performance error)
3861 */
3862
3863/* The IP is not compliant to type1 / type2 scheme */
3864static struct omap_hwmod_sysc_fields omap_hwmod_sysc_type_smartreflex = {
3865 .sidle_shift = 24,
3866 .enwkup_shift = 26,
3867};
3868
3869static struct omap_hwmod_class_sysconfig omap44xx_smartreflex_sysc = {
3870 .sysc_offs = 0x0038,
3871 .sysc_flags = (SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE),
3872 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
3873 SIDLE_SMART_WKUP),
3874 .sysc_fields = &omap_hwmod_sysc_type_smartreflex,
3875};
3876
3877static struct omap_hwmod_class omap44xx_smartreflex_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +00003878 .name = "smartreflex",
3879 .sysc = &omap44xx_smartreflex_sysc,
3880 .rev = 2,
Benoit Cousson1f6a7172010-12-23 22:30:30 +00003881};
3882
3883/* smartreflex_core */
3884static struct omap_hwmod omap44xx_smartreflex_core_hwmod;
3885static struct omap_hwmod_irq_info omap44xx_smartreflex_core_irqs[] = {
3886 { .irq = 19 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003887 { .irq = -1 }
Benoit Cousson1f6a7172010-12-23 22:30:30 +00003888};
3889
3890static struct omap_hwmod_addr_space omap44xx_smartreflex_core_addrs[] = {
3891 {
3892 .pa_start = 0x4a0dd000,
3893 .pa_end = 0x4a0dd03f,
3894 .flags = ADDR_TYPE_RT
3895 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003896 { }
Benoit Cousson1f6a7172010-12-23 22:30:30 +00003897};
3898
3899/* l4_cfg -> smartreflex_core */
3900static struct omap_hwmod_ocp_if omap44xx_l4_cfg__smartreflex_core = {
3901 .master = &omap44xx_l4_cfg_hwmod,
3902 .slave = &omap44xx_smartreflex_core_hwmod,
3903 .clk = "l4_div_ck",
3904 .addr = omap44xx_smartreflex_core_addrs,
Benoit Cousson1f6a7172010-12-23 22:30:30 +00003905 .user = OCP_USER_MPU | OCP_USER_SDMA,
3906};
3907
3908/* smartreflex_core slave ports */
3909static struct omap_hwmod_ocp_if *omap44xx_smartreflex_core_slaves[] = {
3910 &omap44xx_l4_cfg__smartreflex_core,
3911};
3912
3913static struct omap_hwmod omap44xx_smartreflex_core_hwmod = {
3914 .name = "smartreflex_core",
3915 .class = &omap44xx_smartreflex_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003916 .clkdm_name = "l4_ao_clkdm",
Benoit Cousson1f6a7172010-12-23 22:30:30 +00003917 .mpu_irqs = omap44xx_smartreflex_core_irqs,
Paul Walmsley212738a2011-07-09 19:14:06 -06003918
Benoit Cousson1f6a7172010-12-23 22:30:30 +00003919 .main_clk = "smartreflex_core_fck",
3920 .vdd_name = "core",
3921 .prcm = {
3922 .omap4 = {
3923 .clkctrl_reg = OMAP4430_CM_ALWON_SR_CORE_CLKCTRL,
3924 },
3925 },
3926 .slaves = omap44xx_smartreflex_core_slaves,
3927 .slaves_cnt = ARRAY_SIZE(omap44xx_smartreflex_core_slaves),
3928 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3929};
3930
3931/* smartreflex_iva */
3932static struct omap_hwmod omap44xx_smartreflex_iva_hwmod;
3933static struct omap_hwmod_irq_info omap44xx_smartreflex_iva_irqs[] = {
3934 { .irq = 102 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003935 { .irq = -1 }
Benoit Cousson1f6a7172010-12-23 22:30:30 +00003936};
3937
3938static struct omap_hwmod_addr_space omap44xx_smartreflex_iva_addrs[] = {
3939 {
3940 .pa_start = 0x4a0db000,
3941 .pa_end = 0x4a0db03f,
3942 .flags = ADDR_TYPE_RT
3943 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003944 { }
Benoit Cousson1f6a7172010-12-23 22:30:30 +00003945};
3946
3947/* l4_cfg -> smartreflex_iva */
3948static struct omap_hwmod_ocp_if omap44xx_l4_cfg__smartreflex_iva = {
3949 .master = &omap44xx_l4_cfg_hwmod,
3950 .slave = &omap44xx_smartreflex_iva_hwmod,
3951 .clk = "l4_div_ck",
3952 .addr = omap44xx_smartreflex_iva_addrs,
Benoit Cousson1f6a7172010-12-23 22:30:30 +00003953 .user = OCP_USER_MPU | OCP_USER_SDMA,
3954};
3955
3956/* smartreflex_iva slave ports */
3957static struct omap_hwmod_ocp_if *omap44xx_smartreflex_iva_slaves[] = {
3958 &omap44xx_l4_cfg__smartreflex_iva,
3959};
3960
3961static struct omap_hwmod omap44xx_smartreflex_iva_hwmod = {
3962 .name = "smartreflex_iva",
3963 .class = &omap44xx_smartreflex_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003964 .clkdm_name = "l4_ao_clkdm",
Benoit Cousson1f6a7172010-12-23 22:30:30 +00003965 .mpu_irqs = omap44xx_smartreflex_iva_irqs,
Benoit Cousson1f6a7172010-12-23 22:30:30 +00003966 .main_clk = "smartreflex_iva_fck",
3967 .vdd_name = "iva",
3968 .prcm = {
3969 .omap4 = {
3970 .clkctrl_reg = OMAP4430_CM_ALWON_SR_IVA_CLKCTRL,
3971 },
3972 },
3973 .slaves = omap44xx_smartreflex_iva_slaves,
3974 .slaves_cnt = ARRAY_SIZE(omap44xx_smartreflex_iva_slaves),
3975 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3976};
3977
3978/* smartreflex_mpu */
3979static struct omap_hwmod omap44xx_smartreflex_mpu_hwmod;
3980static struct omap_hwmod_irq_info omap44xx_smartreflex_mpu_irqs[] = {
3981 { .irq = 18 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003982 { .irq = -1 }
Benoit Cousson1f6a7172010-12-23 22:30:30 +00003983};
3984
3985static struct omap_hwmod_addr_space omap44xx_smartreflex_mpu_addrs[] = {
3986 {
3987 .pa_start = 0x4a0d9000,
3988 .pa_end = 0x4a0d903f,
3989 .flags = ADDR_TYPE_RT
3990 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003991 { }
Benoit Cousson1f6a7172010-12-23 22:30:30 +00003992};
3993
3994/* l4_cfg -> smartreflex_mpu */
3995static struct omap_hwmod_ocp_if omap44xx_l4_cfg__smartreflex_mpu = {
3996 .master = &omap44xx_l4_cfg_hwmod,
3997 .slave = &omap44xx_smartreflex_mpu_hwmod,
3998 .clk = "l4_div_ck",
3999 .addr = omap44xx_smartreflex_mpu_addrs,
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004000 .user = OCP_USER_MPU | OCP_USER_SDMA,
4001};
4002
4003/* smartreflex_mpu slave ports */
4004static struct omap_hwmod_ocp_if *omap44xx_smartreflex_mpu_slaves[] = {
4005 &omap44xx_l4_cfg__smartreflex_mpu,
4006};
4007
4008static struct omap_hwmod omap44xx_smartreflex_mpu_hwmod = {
4009 .name = "smartreflex_mpu",
4010 .class = &omap44xx_smartreflex_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004011 .clkdm_name = "l4_ao_clkdm",
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004012 .mpu_irqs = omap44xx_smartreflex_mpu_irqs,
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004013 .main_clk = "smartreflex_mpu_fck",
4014 .vdd_name = "mpu",
4015 .prcm = {
4016 .omap4 = {
4017 .clkctrl_reg = OMAP4430_CM_ALWON_SR_MPU_CLKCTRL,
4018 },
4019 },
4020 .slaves = omap44xx_smartreflex_mpu_slaves,
4021 .slaves_cnt = ARRAY_SIZE(omap44xx_smartreflex_mpu_slaves),
4022 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4023};
4024
4025/*
Benoit Coussond11c2172011-02-02 12:04:36 +00004026 * 'spinlock' class
4027 * spinlock provides hardware assistance for synchronizing the processes
4028 * running on multiple processors
4029 */
4030
4031static struct omap_hwmod_class_sysconfig omap44xx_spinlock_sysc = {
4032 .rev_offs = 0x0000,
4033 .sysc_offs = 0x0010,
4034 .syss_offs = 0x0014,
4035 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
4036 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
4037 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
4038 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
4039 SIDLE_SMART_WKUP),
4040 .sysc_fields = &omap_hwmod_sysc_type1,
4041};
4042
4043static struct omap_hwmod_class omap44xx_spinlock_hwmod_class = {
4044 .name = "spinlock",
4045 .sysc = &omap44xx_spinlock_sysc,
4046};
4047
4048/* spinlock */
4049static struct omap_hwmod omap44xx_spinlock_hwmod;
4050static struct omap_hwmod_addr_space omap44xx_spinlock_addrs[] = {
4051 {
4052 .pa_start = 0x4a0f6000,
4053 .pa_end = 0x4a0f6fff,
4054 .flags = ADDR_TYPE_RT
4055 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004056 { }
Benoit Coussond11c2172011-02-02 12:04:36 +00004057};
4058
4059/* l4_cfg -> spinlock */
4060static struct omap_hwmod_ocp_if omap44xx_l4_cfg__spinlock = {
4061 .master = &omap44xx_l4_cfg_hwmod,
4062 .slave = &omap44xx_spinlock_hwmod,
4063 .clk = "l4_div_ck",
4064 .addr = omap44xx_spinlock_addrs,
Benoit Coussond11c2172011-02-02 12:04:36 +00004065 .user = OCP_USER_MPU | OCP_USER_SDMA,
4066};
4067
4068/* spinlock slave ports */
4069static struct omap_hwmod_ocp_if *omap44xx_spinlock_slaves[] = {
4070 &omap44xx_l4_cfg__spinlock,
4071};
4072
4073static struct omap_hwmod omap44xx_spinlock_hwmod = {
4074 .name = "spinlock",
4075 .class = &omap44xx_spinlock_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004076 .clkdm_name = "l4_cfg_clkdm",
Benoit Coussond11c2172011-02-02 12:04:36 +00004077 .prcm = {
4078 .omap4 = {
4079 .clkctrl_reg = OMAP4430_CM_L4CFG_HW_SEM_CLKCTRL,
4080 },
4081 },
4082 .slaves = omap44xx_spinlock_slaves,
4083 .slaves_cnt = ARRAY_SIZE(omap44xx_spinlock_slaves),
4084 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4085};
4086
4087/*
Benoit Cousson35d1a662011-02-11 11:17:14 +00004088 * 'timer' class
4089 * general purpose timer module with accurate 1ms tick
4090 * This class contains several variants: ['timer_1ms', 'timer']
4091 */
4092
4093static struct omap_hwmod_class_sysconfig omap44xx_timer_1ms_sysc = {
4094 .rev_offs = 0x0000,
4095 .sysc_offs = 0x0010,
4096 .syss_offs = 0x0014,
4097 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
4098 SYSC_HAS_EMUFREE | SYSC_HAS_ENAWAKEUP |
4099 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
4100 SYSS_HAS_RESET_STATUS),
4101 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
4102 .sysc_fields = &omap_hwmod_sysc_type1,
4103};
4104
4105static struct omap_hwmod_class omap44xx_timer_1ms_hwmod_class = {
4106 .name = "timer",
4107 .sysc = &omap44xx_timer_1ms_sysc,
4108};
4109
4110static struct omap_hwmod_class_sysconfig omap44xx_timer_sysc = {
4111 .rev_offs = 0x0000,
4112 .sysc_offs = 0x0010,
4113 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
4114 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
4115 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
4116 SIDLE_SMART_WKUP),
4117 .sysc_fields = &omap_hwmod_sysc_type2,
4118};
4119
4120static struct omap_hwmod_class omap44xx_timer_hwmod_class = {
4121 .name = "timer",
4122 .sysc = &omap44xx_timer_sysc,
4123};
4124
4125/* timer1 */
4126static struct omap_hwmod omap44xx_timer1_hwmod;
4127static struct omap_hwmod_irq_info omap44xx_timer1_irqs[] = {
4128 { .irq = 37 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004129 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004130};
4131
4132static struct omap_hwmod_addr_space omap44xx_timer1_addrs[] = {
4133 {
4134 .pa_start = 0x4a318000,
4135 .pa_end = 0x4a31807f,
4136 .flags = ADDR_TYPE_RT
4137 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004138 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004139};
4140
4141/* l4_wkup -> timer1 */
4142static struct omap_hwmod_ocp_if omap44xx_l4_wkup__timer1 = {
4143 .master = &omap44xx_l4_wkup_hwmod,
4144 .slave = &omap44xx_timer1_hwmod,
4145 .clk = "l4_wkup_clk_mux_ck",
4146 .addr = omap44xx_timer1_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004147 .user = OCP_USER_MPU | OCP_USER_SDMA,
4148};
4149
4150/* timer1 slave ports */
4151static struct omap_hwmod_ocp_if *omap44xx_timer1_slaves[] = {
4152 &omap44xx_l4_wkup__timer1,
4153};
4154
4155static struct omap_hwmod omap44xx_timer1_hwmod = {
4156 .name = "timer1",
4157 .class = &omap44xx_timer_1ms_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004158 .clkdm_name = "l4_wkup_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004159 .mpu_irqs = omap44xx_timer1_irqs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004160 .main_clk = "timer1_fck",
4161 .prcm = {
4162 .omap4 = {
4163 .clkctrl_reg = OMAP4430_CM_WKUP_TIMER1_CLKCTRL,
4164 },
4165 },
4166 .slaves = omap44xx_timer1_slaves,
4167 .slaves_cnt = ARRAY_SIZE(omap44xx_timer1_slaves),
4168 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4169};
4170
4171/* timer2 */
4172static struct omap_hwmod omap44xx_timer2_hwmod;
4173static struct omap_hwmod_irq_info omap44xx_timer2_irqs[] = {
4174 { .irq = 38 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004175 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004176};
4177
4178static struct omap_hwmod_addr_space omap44xx_timer2_addrs[] = {
4179 {
4180 .pa_start = 0x48032000,
4181 .pa_end = 0x4803207f,
4182 .flags = ADDR_TYPE_RT
4183 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004184 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004185};
4186
4187/* l4_per -> timer2 */
4188static struct omap_hwmod_ocp_if omap44xx_l4_per__timer2 = {
4189 .master = &omap44xx_l4_per_hwmod,
4190 .slave = &omap44xx_timer2_hwmod,
4191 .clk = "l4_div_ck",
4192 .addr = omap44xx_timer2_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004193 .user = OCP_USER_MPU | OCP_USER_SDMA,
4194};
4195
4196/* timer2 slave ports */
4197static struct omap_hwmod_ocp_if *omap44xx_timer2_slaves[] = {
4198 &omap44xx_l4_per__timer2,
4199};
4200
4201static struct omap_hwmod omap44xx_timer2_hwmod = {
4202 .name = "timer2",
4203 .class = &omap44xx_timer_1ms_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004204 .clkdm_name = "l4_per_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004205 .mpu_irqs = omap44xx_timer2_irqs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004206 .main_clk = "timer2_fck",
4207 .prcm = {
4208 .omap4 = {
4209 .clkctrl_reg = OMAP4430_CM_L4PER_DMTIMER2_CLKCTRL,
4210 },
4211 },
4212 .slaves = omap44xx_timer2_slaves,
4213 .slaves_cnt = ARRAY_SIZE(omap44xx_timer2_slaves),
4214 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4215};
4216
4217/* timer3 */
4218static struct omap_hwmod omap44xx_timer3_hwmod;
4219static struct omap_hwmod_irq_info omap44xx_timer3_irqs[] = {
4220 { .irq = 39 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004221 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004222};
4223
4224static struct omap_hwmod_addr_space omap44xx_timer3_addrs[] = {
4225 {
4226 .pa_start = 0x48034000,
4227 .pa_end = 0x4803407f,
4228 .flags = ADDR_TYPE_RT
4229 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004230 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004231};
4232
4233/* l4_per -> timer3 */
4234static struct omap_hwmod_ocp_if omap44xx_l4_per__timer3 = {
4235 .master = &omap44xx_l4_per_hwmod,
4236 .slave = &omap44xx_timer3_hwmod,
4237 .clk = "l4_div_ck",
4238 .addr = omap44xx_timer3_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004239 .user = OCP_USER_MPU | OCP_USER_SDMA,
4240};
4241
4242/* timer3 slave ports */
4243static struct omap_hwmod_ocp_if *omap44xx_timer3_slaves[] = {
4244 &omap44xx_l4_per__timer3,
4245};
4246
4247static struct omap_hwmod omap44xx_timer3_hwmod = {
4248 .name = "timer3",
4249 .class = &omap44xx_timer_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004250 .clkdm_name = "l4_per_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004251 .mpu_irqs = omap44xx_timer3_irqs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004252 .main_clk = "timer3_fck",
4253 .prcm = {
4254 .omap4 = {
4255 .clkctrl_reg = OMAP4430_CM_L4PER_DMTIMER3_CLKCTRL,
4256 },
4257 },
4258 .slaves = omap44xx_timer3_slaves,
4259 .slaves_cnt = ARRAY_SIZE(omap44xx_timer3_slaves),
4260 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4261};
4262
4263/* timer4 */
4264static struct omap_hwmod omap44xx_timer4_hwmod;
4265static struct omap_hwmod_irq_info omap44xx_timer4_irqs[] = {
4266 { .irq = 40 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004267 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004268};
4269
4270static struct omap_hwmod_addr_space omap44xx_timer4_addrs[] = {
4271 {
4272 .pa_start = 0x48036000,
4273 .pa_end = 0x4803607f,
4274 .flags = ADDR_TYPE_RT
4275 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004276 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004277};
4278
4279/* l4_per -> timer4 */
4280static struct omap_hwmod_ocp_if omap44xx_l4_per__timer4 = {
4281 .master = &omap44xx_l4_per_hwmod,
4282 .slave = &omap44xx_timer4_hwmod,
4283 .clk = "l4_div_ck",
4284 .addr = omap44xx_timer4_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004285 .user = OCP_USER_MPU | OCP_USER_SDMA,
4286};
4287
4288/* timer4 slave ports */
4289static struct omap_hwmod_ocp_if *omap44xx_timer4_slaves[] = {
4290 &omap44xx_l4_per__timer4,
4291};
4292
4293static struct omap_hwmod omap44xx_timer4_hwmod = {
4294 .name = "timer4",
4295 .class = &omap44xx_timer_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004296 .clkdm_name = "l4_per_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004297 .mpu_irqs = omap44xx_timer4_irqs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004298 .main_clk = "timer4_fck",
4299 .prcm = {
4300 .omap4 = {
4301 .clkctrl_reg = OMAP4430_CM_L4PER_DMTIMER4_CLKCTRL,
4302 },
4303 },
4304 .slaves = omap44xx_timer4_slaves,
4305 .slaves_cnt = ARRAY_SIZE(omap44xx_timer4_slaves),
4306 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4307};
4308
4309/* timer5 */
4310static struct omap_hwmod omap44xx_timer5_hwmod;
4311static struct omap_hwmod_irq_info omap44xx_timer5_irqs[] = {
4312 { .irq = 41 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004313 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004314};
4315
4316static struct omap_hwmod_addr_space omap44xx_timer5_addrs[] = {
4317 {
4318 .pa_start = 0x40138000,
4319 .pa_end = 0x4013807f,
4320 .flags = ADDR_TYPE_RT
4321 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004322 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004323};
4324
4325/* l4_abe -> timer5 */
4326static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer5 = {
4327 .master = &omap44xx_l4_abe_hwmod,
4328 .slave = &omap44xx_timer5_hwmod,
4329 .clk = "ocp_abe_iclk",
4330 .addr = omap44xx_timer5_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004331 .user = OCP_USER_MPU,
4332};
4333
4334static struct omap_hwmod_addr_space omap44xx_timer5_dma_addrs[] = {
4335 {
4336 .pa_start = 0x49038000,
4337 .pa_end = 0x4903807f,
4338 .flags = ADDR_TYPE_RT
4339 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004340 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004341};
4342
4343/* l4_abe -> timer5 (dma) */
4344static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer5_dma = {
4345 .master = &omap44xx_l4_abe_hwmod,
4346 .slave = &omap44xx_timer5_hwmod,
4347 .clk = "ocp_abe_iclk",
4348 .addr = omap44xx_timer5_dma_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004349 .user = OCP_USER_SDMA,
4350};
4351
4352/* timer5 slave ports */
4353static struct omap_hwmod_ocp_if *omap44xx_timer5_slaves[] = {
4354 &omap44xx_l4_abe__timer5,
4355 &omap44xx_l4_abe__timer5_dma,
4356};
4357
4358static struct omap_hwmod omap44xx_timer5_hwmod = {
4359 .name = "timer5",
4360 .class = &omap44xx_timer_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004361 .clkdm_name = "abe_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004362 .mpu_irqs = omap44xx_timer5_irqs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004363 .main_clk = "timer5_fck",
4364 .prcm = {
4365 .omap4 = {
4366 .clkctrl_reg = OMAP4430_CM1_ABE_TIMER5_CLKCTRL,
4367 },
4368 },
4369 .slaves = omap44xx_timer5_slaves,
4370 .slaves_cnt = ARRAY_SIZE(omap44xx_timer5_slaves),
4371 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4372};
4373
4374/* timer6 */
4375static struct omap_hwmod omap44xx_timer6_hwmod;
4376static struct omap_hwmod_irq_info omap44xx_timer6_irqs[] = {
4377 { .irq = 42 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004378 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004379};
4380
4381static struct omap_hwmod_addr_space omap44xx_timer6_addrs[] = {
4382 {
4383 .pa_start = 0x4013a000,
4384 .pa_end = 0x4013a07f,
4385 .flags = ADDR_TYPE_RT
4386 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004387 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004388};
4389
4390/* l4_abe -> timer6 */
4391static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer6 = {
4392 .master = &omap44xx_l4_abe_hwmod,
4393 .slave = &omap44xx_timer6_hwmod,
4394 .clk = "ocp_abe_iclk",
4395 .addr = omap44xx_timer6_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004396 .user = OCP_USER_MPU,
4397};
4398
4399static struct omap_hwmod_addr_space omap44xx_timer6_dma_addrs[] = {
4400 {
4401 .pa_start = 0x4903a000,
4402 .pa_end = 0x4903a07f,
4403 .flags = ADDR_TYPE_RT
4404 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004405 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004406};
4407
4408/* l4_abe -> timer6 (dma) */
4409static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer6_dma = {
4410 .master = &omap44xx_l4_abe_hwmod,
4411 .slave = &omap44xx_timer6_hwmod,
4412 .clk = "ocp_abe_iclk",
4413 .addr = omap44xx_timer6_dma_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004414 .user = OCP_USER_SDMA,
4415};
4416
4417/* timer6 slave ports */
4418static struct omap_hwmod_ocp_if *omap44xx_timer6_slaves[] = {
4419 &omap44xx_l4_abe__timer6,
4420 &omap44xx_l4_abe__timer6_dma,
4421};
4422
4423static struct omap_hwmod omap44xx_timer6_hwmod = {
4424 .name = "timer6",
4425 .class = &omap44xx_timer_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004426 .clkdm_name = "abe_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004427 .mpu_irqs = omap44xx_timer6_irqs,
Paul Walmsley212738a2011-07-09 19:14:06 -06004428
Benoit Cousson35d1a662011-02-11 11:17:14 +00004429 .main_clk = "timer6_fck",
4430 .prcm = {
4431 .omap4 = {
4432 .clkctrl_reg = OMAP4430_CM1_ABE_TIMER6_CLKCTRL,
4433 },
4434 },
4435 .slaves = omap44xx_timer6_slaves,
4436 .slaves_cnt = ARRAY_SIZE(omap44xx_timer6_slaves),
4437 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4438};
4439
4440/* timer7 */
4441static struct omap_hwmod omap44xx_timer7_hwmod;
4442static struct omap_hwmod_irq_info omap44xx_timer7_irqs[] = {
4443 { .irq = 43 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004444 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004445};
4446
4447static struct omap_hwmod_addr_space omap44xx_timer7_addrs[] = {
4448 {
4449 .pa_start = 0x4013c000,
4450 .pa_end = 0x4013c07f,
4451 .flags = ADDR_TYPE_RT
4452 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004453 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004454};
4455
4456/* l4_abe -> timer7 */
4457static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer7 = {
4458 .master = &omap44xx_l4_abe_hwmod,
4459 .slave = &omap44xx_timer7_hwmod,
4460 .clk = "ocp_abe_iclk",
4461 .addr = omap44xx_timer7_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004462 .user = OCP_USER_MPU,
4463};
4464
4465static struct omap_hwmod_addr_space omap44xx_timer7_dma_addrs[] = {
4466 {
4467 .pa_start = 0x4903c000,
4468 .pa_end = 0x4903c07f,
4469 .flags = ADDR_TYPE_RT
4470 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004471 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004472};
4473
4474/* l4_abe -> timer7 (dma) */
4475static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer7_dma = {
4476 .master = &omap44xx_l4_abe_hwmod,
4477 .slave = &omap44xx_timer7_hwmod,
4478 .clk = "ocp_abe_iclk",
4479 .addr = omap44xx_timer7_dma_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004480 .user = OCP_USER_SDMA,
4481};
4482
4483/* timer7 slave ports */
4484static struct omap_hwmod_ocp_if *omap44xx_timer7_slaves[] = {
4485 &omap44xx_l4_abe__timer7,
4486 &omap44xx_l4_abe__timer7_dma,
4487};
4488
4489static struct omap_hwmod omap44xx_timer7_hwmod = {
4490 .name = "timer7",
4491 .class = &omap44xx_timer_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004492 .clkdm_name = "abe_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004493 .mpu_irqs = omap44xx_timer7_irqs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004494 .main_clk = "timer7_fck",
4495 .prcm = {
4496 .omap4 = {
4497 .clkctrl_reg = OMAP4430_CM1_ABE_TIMER7_CLKCTRL,
4498 },
4499 },
4500 .slaves = omap44xx_timer7_slaves,
4501 .slaves_cnt = ARRAY_SIZE(omap44xx_timer7_slaves),
4502 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4503};
4504
4505/* timer8 */
4506static struct omap_hwmod omap44xx_timer8_hwmod;
4507static struct omap_hwmod_irq_info omap44xx_timer8_irqs[] = {
4508 { .irq = 44 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004509 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004510};
4511
4512static struct omap_hwmod_addr_space omap44xx_timer8_addrs[] = {
4513 {
4514 .pa_start = 0x4013e000,
4515 .pa_end = 0x4013e07f,
4516 .flags = ADDR_TYPE_RT
4517 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004518 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004519};
4520
4521/* l4_abe -> timer8 */
4522static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer8 = {
4523 .master = &omap44xx_l4_abe_hwmod,
4524 .slave = &omap44xx_timer8_hwmod,
4525 .clk = "ocp_abe_iclk",
4526 .addr = omap44xx_timer8_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004527 .user = OCP_USER_MPU,
4528};
4529
4530static struct omap_hwmod_addr_space omap44xx_timer8_dma_addrs[] = {
4531 {
4532 .pa_start = 0x4903e000,
4533 .pa_end = 0x4903e07f,
4534 .flags = ADDR_TYPE_RT
4535 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004536 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004537};
4538
4539/* l4_abe -> timer8 (dma) */
4540static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer8_dma = {
4541 .master = &omap44xx_l4_abe_hwmod,
4542 .slave = &omap44xx_timer8_hwmod,
4543 .clk = "ocp_abe_iclk",
4544 .addr = omap44xx_timer8_dma_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004545 .user = OCP_USER_SDMA,
4546};
4547
4548/* timer8 slave ports */
4549static struct omap_hwmod_ocp_if *omap44xx_timer8_slaves[] = {
4550 &omap44xx_l4_abe__timer8,
4551 &omap44xx_l4_abe__timer8_dma,
4552};
4553
4554static struct omap_hwmod omap44xx_timer8_hwmod = {
4555 .name = "timer8",
4556 .class = &omap44xx_timer_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004557 .clkdm_name = "abe_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004558 .mpu_irqs = omap44xx_timer8_irqs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004559 .main_clk = "timer8_fck",
4560 .prcm = {
4561 .omap4 = {
4562 .clkctrl_reg = OMAP4430_CM1_ABE_TIMER8_CLKCTRL,
4563 },
4564 },
4565 .slaves = omap44xx_timer8_slaves,
4566 .slaves_cnt = ARRAY_SIZE(omap44xx_timer8_slaves),
4567 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4568};
4569
4570/* timer9 */
4571static struct omap_hwmod omap44xx_timer9_hwmod;
4572static struct omap_hwmod_irq_info omap44xx_timer9_irqs[] = {
4573 { .irq = 45 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004574 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004575};
4576
4577static struct omap_hwmod_addr_space omap44xx_timer9_addrs[] = {
4578 {
4579 .pa_start = 0x4803e000,
4580 .pa_end = 0x4803e07f,
4581 .flags = ADDR_TYPE_RT
4582 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004583 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004584};
4585
4586/* l4_per -> timer9 */
4587static struct omap_hwmod_ocp_if omap44xx_l4_per__timer9 = {
4588 .master = &omap44xx_l4_per_hwmod,
4589 .slave = &omap44xx_timer9_hwmod,
4590 .clk = "l4_div_ck",
4591 .addr = omap44xx_timer9_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004592 .user = OCP_USER_MPU | OCP_USER_SDMA,
4593};
4594
4595/* timer9 slave ports */
4596static struct omap_hwmod_ocp_if *omap44xx_timer9_slaves[] = {
4597 &omap44xx_l4_per__timer9,
4598};
4599
4600static struct omap_hwmod omap44xx_timer9_hwmod = {
4601 .name = "timer9",
4602 .class = &omap44xx_timer_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004603 .clkdm_name = "l4_per_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004604 .mpu_irqs = omap44xx_timer9_irqs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004605 .main_clk = "timer9_fck",
4606 .prcm = {
4607 .omap4 = {
4608 .clkctrl_reg = OMAP4430_CM_L4PER_DMTIMER9_CLKCTRL,
4609 },
4610 },
4611 .slaves = omap44xx_timer9_slaves,
4612 .slaves_cnt = ARRAY_SIZE(omap44xx_timer9_slaves),
4613 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4614};
4615
4616/* timer10 */
4617static struct omap_hwmod omap44xx_timer10_hwmod;
4618static struct omap_hwmod_irq_info omap44xx_timer10_irqs[] = {
4619 { .irq = 46 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004620 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004621};
4622
4623static struct omap_hwmod_addr_space omap44xx_timer10_addrs[] = {
4624 {
4625 .pa_start = 0x48086000,
4626 .pa_end = 0x4808607f,
4627 .flags = ADDR_TYPE_RT
4628 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004629 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004630};
4631
4632/* l4_per -> timer10 */
4633static struct omap_hwmod_ocp_if omap44xx_l4_per__timer10 = {
4634 .master = &omap44xx_l4_per_hwmod,
4635 .slave = &omap44xx_timer10_hwmod,
4636 .clk = "l4_div_ck",
4637 .addr = omap44xx_timer10_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004638 .user = OCP_USER_MPU | OCP_USER_SDMA,
4639};
4640
4641/* timer10 slave ports */
4642static struct omap_hwmod_ocp_if *omap44xx_timer10_slaves[] = {
4643 &omap44xx_l4_per__timer10,
4644};
4645
4646static struct omap_hwmod omap44xx_timer10_hwmod = {
4647 .name = "timer10",
4648 .class = &omap44xx_timer_1ms_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004649 .clkdm_name = "l4_per_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004650 .mpu_irqs = omap44xx_timer10_irqs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004651 .main_clk = "timer10_fck",
4652 .prcm = {
4653 .omap4 = {
4654 .clkctrl_reg = OMAP4430_CM_L4PER_DMTIMER10_CLKCTRL,
4655 },
4656 },
4657 .slaves = omap44xx_timer10_slaves,
4658 .slaves_cnt = ARRAY_SIZE(omap44xx_timer10_slaves),
4659 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4660};
4661
4662/* timer11 */
4663static struct omap_hwmod omap44xx_timer11_hwmod;
4664static struct omap_hwmod_irq_info omap44xx_timer11_irqs[] = {
4665 { .irq = 47 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004666 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004667};
4668
4669static struct omap_hwmod_addr_space omap44xx_timer11_addrs[] = {
4670 {
4671 .pa_start = 0x48088000,
4672 .pa_end = 0x4808807f,
4673 .flags = ADDR_TYPE_RT
4674 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004675 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004676};
4677
4678/* l4_per -> timer11 */
4679static struct omap_hwmod_ocp_if omap44xx_l4_per__timer11 = {
4680 .master = &omap44xx_l4_per_hwmod,
4681 .slave = &omap44xx_timer11_hwmod,
4682 .clk = "l4_div_ck",
4683 .addr = omap44xx_timer11_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004684 .user = OCP_USER_MPU | OCP_USER_SDMA,
4685};
4686
4687/* timer11 slave ports */
4688static struct omap_hwmod_ocp_if *omap44xx_timer11_slaves[] = {
4689 &omap44xx_l4_per__timer11,
4690};
4691
4692static struct omap_hwmod omap44xx_timer11_hwmod = {
4693 .name = "timer11",
4694 .class = &omap44xx_timer_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004695 .clkdm_name = "l4_per_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004696 .mpu_irqs = omap44xx_timer11_irqs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004697 .main_clk = "timer11_fck",
4698 .prcm = {
4699 .omap4 = {
4700 .clkctrl_reg = OMAP4430_CM_L4PER_DMTIMER11_CLKCTRL,
4701 },
4702 },
4703 .slaves = omap44xx_timer11_slaves,
4704 .slaves_cnt = ARRAY_SIZE(omap44xx_timer11_slaves),
4705 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4706};
4707
4708/*
Benoit Coussondb12ba52010-09-27 20:19:19 +05304709 * 'uart' class
4710 * universal asynchronous receiver/transmitter (uart)
4711 */
4712
4713static struct omap_hwmod_class_sysconfig omap44xx_uart_sysc = {
4714 .rev_offs = 0x0050,
4715 .sysc_offs = 0x0054,
4716 .syss_offs = 0x0058,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07004717 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_ENAWAKEUP |
Benoit Cousson0cfe8752010-12-21 21:08:33 -07004718 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
4719 SYSS_HAS_RESET_STATUS),
Benoit Cousson7cffa6b2010-12-21 21:31:28 -07004720 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
4721 SIDLE_SMART_WKUP),
Benoit Coussondb12ba52010-09-27 20:19:19 +05304722 .sysc_fields = &omap_hwmod_sysc_type1,
4723};
4724
4725static struct omap_hwmod_class omap44xx_uart_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +00004726 .name = "uart",
4727 .sysc = &omap44xx_uart_sysc,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304728};
4729
4730/* uart1 */
4731static struct omap_hwmod omap44xx_uart1_hwmod;
4732static struct omap_hwmod_irq_info omap44xx_uart1_irqs[] = {
4733 { .irq = 72 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004734 { .irq = -1 }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304735};
4736
4737static struct omap_hwmod_dma_info omap44xx_uart1_sdma_reqs[] = {
4738 { .name = "tx", .dma_req = 48 + OMAP44XX_DMA_REQ_START },
4739 { .name = "rx", .dma_req = 49 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06004740 { .dma_req = -1 }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304741};
4742
4743static struct omap_hwmod_addr_space omap44xx_uart1_addrs[] = {
4744 {
4745 .pa_start = 0x4806a000,
4746 .pa_end = 0x4806a0ff,
4747 .flags = ADDR_TYPE_RT
4748 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004749 { }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304750};
4751
4752/* l4_per -> uart1 */
4753static struct omap_hwmod_ocp_if omap44xx_l4_per__uart1 = {
4754 .master = &omap44xx_l4_per_hwmod,
4755 .slave = &omap44xx_uart1_hwmod,
4756 .clk = "l4_div_ck",
4757 .addr = omap44xx_uart1_addrs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304758 .user = OCP_USER_MPU | OCP_USER_SDMA,
4759};
4760
4761/* uart1 slave ports */
4762static struct omap_hwmod_ocp_if *omap44xx_uart1_slaves[] = {
4763 &omap44xx_l4_per__uart1,
4764};
4765
4766static struct omap_hwmod omap44xx_uart1_hwmod = {
4767 .name = "uart1",
4768 .class = &omap44xx_uart_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004769 .clkdm_name = "l4_per_clkdm",
Benoit Coussondb12ba52010-09-27 20:19:19 +05304770 .mpu_irqs = omap44xx_uart1_irqs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304771 .sdma_reqs = omap44xx_uart1_sdma_reqs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304772 .main_clk = "uart1_fck",
4773 .prcm = {
4774 .omap4 = {
4775 .clkctrl_reg = OMAP4430_CM_L4PER_UART1_CLKCTRL,
4776 },
4777 },
4778 .slaves = omap44xx_uart1_slaves,
4779 .slaves_cnt = ARRAY_SIZE(omap44xx_uart1_slaves),
4780 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4781};
4782
4783/* uart2 */
4784static struct omap_hwmod omap44xx_uart2_hwmod;
4785static struct omap_hwmod_irq_info omap44xx_uart2_irqs[] = {
4786 { .irq = 73 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004787 { .irq = -1 }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304788};
4789
4790static struct omap_hwmod_dma_info omap44xx_uart2_sdma_reqs[] = {
4791 { .name = "tx", .dma_req = 50 + OMAP44XX_DMA_REQ_START },
4792 { .name = "rx", .dma_req = 51 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06004793 { .dma_req = -1 }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304794};
4795
4796static struct omap_hwmod_addr_space omap44xx_uart2_addrs[] = {
4797 {
4798 .pa_start = 0x4806c000,
4799 .pa_end = 0x4806c0ff,
4800 .flags = ADDR_TYPE_RT
4801 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004802 { }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304803};
4804
4805/* l4_per -> uart2 */
4806static struct omap_hwmod_ocp_if omap44xx_l4_per__uart2 = {
4807 .master = &omap44xx_l4_per_hwmod,
4808 .slave = &omap44xx_uart2_hwmod,
4809 .clk = "l4_div_ck",
4810 .addr = omap44xx_uart2_addrs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304811 .user = OCP_USER_MPU | OCP_USER_SDMA,
4812};
4813
4814/* uart2 slave ports */
4815static struct omap_hwmod_ocp_if *omap44xx_uart2_slaves[] = {
4816 &omap44xx_l4_per__uart2,
4817};
4818
4819static struct omap_hwmod omap44xx_uart2_hwmod = {
4820 .name = "uart2",
4821 .class = &omap44xx_uart_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004822 .clkdm_name = "l4_per_clkdm",
Benoit Coussondb12ba52010-09-27 20:19:19 +05304823 .mpu_irqs = omap44xx_uart2_irqs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304824 .sdma_reqs = omap44xx_uart2_sdma_reqs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304825 .main_clk = "uart2_fck",
4826 .prcm = {
4827 .omap4 = {
4828 .clkctrl_reg = OMAP4430_CM_L4PER_UART2_CLKCTRL,
4829 },
4830 },
4831 .slaves = omap44xx_uart2_slaves,
4832 .slaves_cnt = ARRAY_SIZE(omap44xx_uart2_slaves),
4833 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4834};
4835
4836/* uart3 */
4837static struct omap_hwmod omap44xx_uart3_hwmod;
4838static struct omap_hwmod_irq_info omap44xx_uart3_irqs[] = {
4839 { .irq = 74 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004840 { .irq = -1 }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304841};
4842
4843static struct omap_hwmod_dma_info omap44xx_uart3_sdma_reqs[] = {
4844 { .name = "tx", .dma_req = 52 + OMAP44XX_DMA_REQ_START },
4845 { .name = "rx", .dma_req = 53 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06004846 { .dma_req = -1 }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304847};
4848
4849static struct omap_hwmod_addr_space omap44xx_uart3_addrs[] = {
4850 {
4851 .pa_start = 0x48020000,
4852 .pa_end = 0x480200ff,
4853 .flags = ADDR_TYPE_RT
4854 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004855 { }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304856};
4857
4858/* l4_per -> uart3 */
4859static struct omap_hwmod_ocp_if omap44xx_l4_per__uart3 = {
4860 .master = &omap44xx_l4_per_hwmod,
4861 .slave = &omap44xx_uart3_hwmod,
4862 .clk = "l4_div_ck",
4863 .addr = omap44xx_uart3_addrs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304864 .user = OCP_USER_MPU | OCP_USER_SDMA,
4865};
4866
4867/* uart3 slave ports */
4868static struct omap_hwmod_ocp_if *omap44xx_uart3_slaves[] = {
4869 &omap44xx_l4_per__uart3,
4870};
4871
4872static struct omap_hwmod omap44xx_uart3_hwmod = {
4873 .name = "uart3",
4874 .class = &omap44xx_uart_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004875 .clkdm_name = "l4_per_clkdm",
Benoit Cousson7ecc53732011-07-09 19:14:28 -06004876 .flags = HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304877 .mpu_irqs = omap44xx_uart3_irqs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304878 .sdma_reqs = omap44xx_uart3_sdma_reqs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304879 .main_clk = "uart3_fck",
4880 .prcm = {
4881 .omap4 = {
4882 .clkctrl_reg = OMAP4430_CM_L4PER_UART3_CLKCTRL,
4883 },
4884 },
4885 .slaves = omap44xx_uart3_slaves,
4886 .slaves_cnt = ARRAY_SIZE(omap44xx_uart3_slaves),
4887 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4888};
4889
4890/* uart4 */
4891static struct omap_hwmod omap44xx_uart4_hwmod;
4892static struct omap_hwmod_irq_info omap44xx_uart4_irqs[] = {
4893 { .irq = 70 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004894 { .irq = -1 }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304895};
4896
4897static struct omap_hwmod_dma_info omap44xx_uart4_sdma_reqs[] = {
4898 { .name = "tx", .dma_req = 54 + OMAP44XX_DMA_REQ_START },
4899 { .name = "rx", .dma_req = 55 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06004900 { .dma_req = -1 }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304901};
4902
4903static struct omap_hwmod_addr_space omap44xx_uart4_addrs[] = {
4904 {
4905 .pa_start = 0x4806e000,
4906 .pa_end = 0x4806e0ff,
4907 .flags = ADDR_TYPE_RT
4908 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004909 { }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304910};
4911
4912/* l4_per -> uart4 */
4913static struct omap_hwmod_ocp_if omap44xx_l4_per__uart4 = {
4914 .master = &omap44xx_l4_per_hwmod,
4915 .slave = &omap44xx_uart4_hwmod,
4916 .clk = "l4_div_ck",
4917 .addr = omap44xx_uart4_addrs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304918 .user = OCP_USER_MPU | OCP_USER_SDMA,
4919};
4920
4921/* uart4 slave ports */
4922static struct omap_hwmod_ocp_if *omap44xx_uart4_slaves[] = {
4923 &omap44xx_l4_per__uart4,
4924};
4925
4926static struct omap_hwmod omap44xx_uart4_hwmod = {
4927 .name = "uart4",
4928 .class = &omap44xx_uart_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004929 .clkdm_name = "l4_per_clkdm",
Benoit Coussondb12ba52010-09-27 20:19:19 +05304930 .mpu_irqs = omap44xx_uart4_irqs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304931 .sdma_reqs = omap44xx_uart4_sdma_reqs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304932 .main_clk = "uart4_fck",
4933 .prcm = {
4934 .omap4 = {
4935 .clkctrl_reg = OMAP4430_CM_L4PER_UART4_CLKCTRL,
4936 },
4937 },
4938 .slaves = omap44xx_uart4_slaves,
4939 .slaves_cnt = ARRAY_SIZE(omap44xx_uart4_slaves),
4940 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4941};
4942
Benoit Cousson9780a9c2010-12-07 16:26:57 -08004943/*
Benoit Cousson5844c4e2011-02-17 12:41:05 +00004944 * 'usb_otg_hs' class
4945 * high-speed on-the-go universal serial bus (usb_otg_hs) controller
4946 */
4947
4948static struct omap_hwmod_class_sysconfig omap44xx_usb_otg_hs_sysc = {
4949 .rev_offs = 0x0400,
4950 .sysc_offs = 0x0404,
4951 .syss_offs = 0x0408,
4952 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_ENAWAKEUP |
4953 SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE |
4954 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
4955 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
4956 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
4957 MSTANDBY_SMART),
4958 .sysc_fields = &omap_hwmod_sysc_type1,
4959};
4960
4961static struct omap_hwmod_class omap44xx_usb_otg_hs_hwmod_class = {
Benoit Cousson00fe6102011-07-09 19:14:28 -06004962 .name = "usb_otg_hs",
4963 .sysc = &omap44xx_usb_otg_hs_sysc,
Benoit Cousson5844c4e2011-02-17 12:41:05 +00004964};
4965
4966/* usb_otg_hs */
4967static struct omap_hwmod_irq_info omap44xx_usb_otg_hs_irqs[] = {
4968 { .name = "mc", .irq = 92 + OMAP44XX_IRQ_GIC_START },
4969 { .name = "dma", .irq = 93 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004970 { .irq = -1 }
Benoit Cousson5844c4e2011-02-17 12:41:05 +00004971};
4972
4973/* usb_otg_hs master ports */
4974static struct omap_hwmod_ocp_if *omap44xx_usb_otg_hs_masters[] = {
4975 &omap44xx_usb_otg_hs__l3_main_2,
4976};
4977
4978static struct omap_hwmod_addr_space omap44xx_usb_otg_hs_addrs[] = {
4979 {
4980 .pa_start = 0x4a0ab000,
4981 .pa_end = 0x4a0ab003,
4982 .flags = ADDR_TYPE_RT
4983 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004984 { }
Benoit Cousson5844c4e2011-02-17 12:41:05 +00004985};
4986
4987/* l4_cfg -> usb_otg_hs */
4988static struct omap_hwmod_ocp_if omap44xx_l4_cfg__usb_otg_hs = {
4989 .master = &omap44xx_l4_cfg_hwmod,
4990 .slave = &omap44xx_usb_otg_hs_hwmod,
4991 .clk = "l4_div_ck",
4992 .addr = omap44xx_usb_otg_hs_addrs,
Benoit Cousson5844c4e2011-02-17 12:41:05 +00004993 .user = OCP_USER_MPU | OCP_USER_SDMA,
4994};
4995
4996/* usb_otg_hs slave ports */
4997static struct omap_hwmod_ocp_if *omap44xx_usb_otg_hs_slaves[] = {
4998 &omap44xx_l4_cfg__usb_otg_hs,
4999};
5000
5001static struct omap_hwmod_opt_clk usb_otg_hs_opt_clks[] = {
5002 { .role = "xclk", .clk = "usb_otg_hs_xclk" },
5003};
5004
5005static struct omap_hwmod omap44xx_usb_otg_hs_hwmod = {
5006 .name = "usb_otg_hs",
5007 .class = &omap44xx_usb_otg_hs_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06005008 .clkdm_name = "l3_init_clkdm",
Benoit Cousson5844c4e2011-02-17 12:41:05 +00005009 .flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY,
5010 .mpu_irqs = omap44xx_usb_otg_hs_irqs,
Benoit Cousson5844c4e2011-02-17 12:41:05 +00005011 .main_clk = "usb_otg_hs_ick",
5012 .prcm = {
5013 .omap4 = {
5014 .clkctrl_reg = OMAP4430_CM_L3INIT_USB_OTG_CLKCTRL,
5015 },
5016 },
5017 .opt_clks = usb_otg_hs_opt_clks,
Benoit Cousson00fe6102011-07-09 19:14:28 -06005018 .opt_clks_cnt = ARRAY_SIZE(usb_otg_hs_opt_clks),
Benoit Cousson5844c4e2011-02-17 12:41:05 +00005019 .slaves = omap44xx_usb_otg_hs_slaves,
5020 .slaves_cnt = ARRAY_SIZE(omap44xx_usb_otg_hs_slaves),
5021 .masters = omap44xx_usb_otg_hs_masters,
5022 .masters_cnt = ARRAY_SIZE(omap44xx_usb_otg_hs_masters),
5023 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
5024};
5025
5026/*
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005027 * 'wd_timer' class
5028 * 32-bit watchdog upward counter that generates a pulse on the reset pin on
5029 * overflow condition
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005030 */
5031
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005032static struct omap_hwmod_class_sysconfig omap44xx_wd_timer_sysc = {
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005033 .rev_offs = 0x0000,
5034 .sysc_offs = 0x0010,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005035 .syss_offs = 0x0014,
5036 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_SIDLEMODE |
Benoit Cousson0cfe8752010-12-21 21:08:33 -07005037 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
Benoit Cousson7cffa6b2010-12-21 21:31:28 -07005038 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
5039 SIDLE_SMART_WKUP),
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005040 .sysc_fields = &omap_hwmod_sysc_type1,
5041};
5042
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005043static struct omap_hwmod_class omap44xx_wd_timer_hwmod_class = {
5044 .name = "wd_timer",
5045 .sysc = &omap44xx_wd_timer_sysc,
Benoit Coussonfe134712010-12-23 22:30:32 +00005046 .pre_shutdown = &omap2_wd_timer_disable,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005047};
5048
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005049/* wd_timer2 */
5050static struct omap_hwmod omap44xx_wd_timer2_hwmod;
5051static struct omap_hwmod_irq_info omap44xx_wd_timer2_irqs[] = {
5052 { .irq = 80 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06005053 { .irq = -1 }
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005054};
5055
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005056static struct omap_hwmod_addr_space omap44xx_wd_timer2_addrs[] = {
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005057 {
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005058 .pa_start = 0x4a314000,
5059 .pa_end = 0x4a31407f,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005060 .flags = ADDR_TYPE_RT
5061 },
Paul Walmsley78183f32011-07-09 19:14:05 -06005062 { }
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005063};
5064
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005065/* l4_wkup -> wd_timer2 */
5066static struct omap_hwmod_ocp_if omap44xx_l4_wkup__wd_timer2 = {
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005067 .master = &omap44xx_l4_wkup_hwmod,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005068 .slave = &omap44xx_wd_timer2_hwmod,
5069 .clk = "l4_wkup_clk_mux_ck",
5070 .addr = omap44xx_wd_timer2_addrs,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005071 .user = OCP_USER_MPU | OCP_USER_SDMA,
5072};
5073
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005074/* wd_timer2 slave ports */
5075static struct omap_hwmod_ocp_if *omap44xx_wd_timer2_slaves[] = {
5076 &omap44xx_l4_wkup__wd_timer2,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005077};
5078
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005079static struct omap_hwmod omap44xx_wd_timer2_hwmod = {
5080 .name = "wd_timer2",
5081 .class = &omap44xx_wd_timer_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06005082 .clkdm_name = "l4_wkup_clkdm",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005083 .mpu_irqs = omap44xx_wd_timer2_irqs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005084 .main_clk = "wd_timer2_fck",
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005085 .prcm = {
5086 .omap4 = {
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005087 .clkctrl_reg = OMAP4430_CM_WKUP_WDT2_CLKCTRL,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005088 },
5089 },
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005090 .slaves = omap44xx_wd_timer2_slaves,
5091 .slaves_cnt = ARRAY_SIZE(omap44xx_wd_timer2_slaves),
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005092 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
5093};
5094
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005095/* wd_timer3 */
5096static struct omap_hwmod omap44xx_wd_timer3_hwmod;
5097static struct omap_hwmod_irq_info omap44xx_wd_timer3_irqs[] = {
5098 { .irq = 36 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06005099 { .irq = -1 }
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005100};
5101
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005102static struct omap_hwmod_addr_space omap44xx_wd_timer3_addrs[] = {
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005103 {
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005104 .pa_start = 0x40130000,
5105 .pa_end = 0x4013007f,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005106 .flags = ADDR_TYPE_RT
5107 },
Paul Walmsley78183f32011-07-09 19:14:05 -06005108 { }
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005109};
5110
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005111/* l4_abe -> wd_timer3 */
5112static struct omap_hwmod_ocp_if omap44xx_l4_abe__wd_timer3 = {
5113 .master = &omap44xx_l4_abe_hwmod,
5114 .slave = &omap44xx_wd_timer3_hwmod,
5115 .clk = "ocp_abe_iclk",
5116 .addr = omap44xx_wd_timer3_addrs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005117 .user = OCP_USER_MPU,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005118};
5119
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005120static struct omap_hwmod_addr_space omap44xx_wd_timer3_dma_addrs[] = {
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005121 {
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005122 .pa_start = 0x49030000,
5123 .pa_end = 0x4903007f,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005124 .flags = ADDR_TYPE_RT
5125 },
Paul Walmsley78183f32011-07-09 19:14:05 -06005126 { }
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005127};
5128
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005129/* l4_abe -> wd_timer3 (dma) */
5130static struct omap_hwmod_ocp_if omap44xx_l4_abe__wd_timer3_dma = {
5131 .master = &omap44xx_l4_abe_hwmod,
5132 .slave = &omap44xx_wd_timer3_hwmod,
5133 .clk = "ocp_abe_iclk",
5134 .addr = omap44xx_wd_timer3_dma_addrs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005135 .user = OCP_USER_SDMA,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005136};
5137
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005138/* wd_timer3 slave ports */
5139static struct omap_hwmod_ocp_if *omap44xx_wd_timer3_slaves[] = {
5140 &omap44xx_l4_abe__wd_timer3,
5141 &omap44xx_l4_abe__wd_timer3_dma,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005142};
5143
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005144static struct omap_hwmod omap44xx_wd_timer3_hwmod = {
5145 .name = "wd_timer3",
5146 .class = &omap44xx_wd_timer_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06005147 .clkdm_name = "abe_clkdm",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005148 .mpu_irqs = omap44xx_wd_timer3_irqs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005149 .main_clk = "wd_timer3_fck",
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005150 .prcm = {
5151 .omap4 = {
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005152 .clkctrl_reg = OMAP4430_CM1_ABE_WDT3_CLKCTRL,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005153 },
5154 },
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005155 .slaves = omap44xx_wd_timer3_slaves,
5156 .slaves_cnt = ARRAY_SIZE(omap44xx_wd_timer3_slaves),
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005157 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
5158};
5159
Benoit Cousson55d2cb02010-05-12 17:54:36 +02005160static __initdata struct omap_hwmod *omap44xx_hwmods[] = {
Benoit Coussonfe134712010-12-23 22:30:32 +00005161
Benoit Cousson55d2cb02010-05-12 17:54:36 +02005162 /* dmm class */
5163 &omap44xx_dmm_hwmod,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005164
Benoit Cousson55d2cb02010-05-12 17:54:36 +02005165 /* emif_fw class */
5166 &omap44xx_emif_fw_hwmod,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005167
Benoit Cousson55d2cb02010-05-12 17:54:36 +02005168 /* l3 class */
5169 &omap44xx_l3_instr_hwmod,
5170 &omap44xx_l3_main_1_hwmod,
5171 &omap44xx_l3_main_2_hwmod,
5172 &omap44xx_l3_main_3_hwmod,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005173
Benoit Cousson55d2cb02010-05-12 17:54:36 +02005174 /* l4 class */
5175 &omap44xx_l4_abe_hwmod,
5176 &omap44xx_l4_cfg_hwmod,
5177 &omap44xx_l4_per_hwmod,
5178 &omap44xx_l4_wkup_hwmod,
Benoit Cousson531ce0d2010-12-20 18:27:19 -08005179
Benoit Cousson55d2cb02010-05-12 17:54:36 +02005180 /* mpu_bus class */
5181 &omap44xx_mpu_private_hwmod,
5182
Benoit Cousson407a6882011-02-15 22:39:48 +01005183 /* aess class */
5184/* &omap44xx_aess_hwmod, */
5185
5186 /* bandgap class */
5187 &omap44xx_bandgap_hwmod,
5188
5189 /* counter class */
5190/* &omap44xx_counter_32k_hwmod, */
5191
Benoit Coussond7cf5f32010-12-23 22:30:31 +00005192 /* dma class */
5193 &omap44xx_dma_system_hwmod,
5194
Benoit Cousson8ca476d2011-01-25 22:01:00 +00005195 /* dmic class */
5196 &omap44xx_dmic_hwmod,
5197
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07005198 /* dsp class */
5199 &omap44xx_dsp_hwmod,
5200 &omap44xx_dsp_c0_hwmod,
5201
Benoit Coussond63bd742011-01-27 11:17:03 +00005202 /* dss class */
5203 &omap44xx_dss_hwmod,
5204 &omap44xx_dss_dispc_hwmod,
5205 &omap44xx_dss_dsi1_hwmod,
5206 &omap44xx_dss_dsi2_hwmod,
5207 &omap44xx_dss_hdmi_hwmod,
5208 &omap44xx_dss_rfbi_hwmod,
5209 &omap44xx_dss_venc_hwmod,
5210
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005211 /* gpio class */
5212 &omap44xx_gpio1_hwmod,
5213 &omap44xx_gpio2_hwmod,
5214 &omap44xx_gpio3_hwmod,
5215 &omap44xx_gpio4_hwmod,
5216 &omap44xx_gpio5_hwmod,
5217 &omap44xx_gpio6_hwmod,
5218
Benoit Cousson407a6882011-02-15 22:39:48 +01005219 /* hsi class */
5220/* &omap44xx_hsi_hwmod, */
5221
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005222 /* i2c class */
5223 &omap44xx_i2c1_hwmod,
5224 &omap44xx_i2c2_hwmod,
5225 &omap44xx_i2c3_hwmod,
5226 &omap44xx_i2c4_hwmod,
5227
Benoit Cousson407a6882011-02-15 22:39:48 +01005228 /* ipu class */
5229 &omap44xx_ipu_hwmod,
5230 &omap44xx_ipu_c0_hwmod,
5231 &omap44xx_ipu_c1_hwmod,
5232
5233 /* iss class */
5234/* &omap44xx_iss_hwmod, */
5235
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07005236 /* iva class */
5237 &omap44xx_iva_hwmod,
5238 &omap44xx_iva_seq0_hwmod,
5239 &omap44xx_iva_seq1_hwmod,
5240
Benoit Cousson407a6882011-02-15 22:39:48 +01005241 /* kbd class */
Shubhrajyoti D4998b2452011-05-04 14:57:44 -07005242 &omap44xx_kbd_hwmod,
Benoit Cousson407a6882011-02-15 22:39:48 +01005243
Benoit Coussonec5df922011-02-02 19:27:21 +00005244 /* mailbox class */
5245 &omap44xx_mailbox_hwmod,
5246
Benoit Cousson4ddff492011-01-31 14:50:30 +00005247 /* mcbsp class */
5248 &omap44xx_mcbsp1_hwmod,
5249 &omap44xx_mcbsp2_hwmod,
5250 &omap44xx_mcbsp3_hwmod,
5251 &omap44xx_mcbsp4_hwmod,
5252
Benoit Cousson407a6882011-02-15 22:39:48 +01005253 /* mcpdm class */
5254/* &omap44xx_mcpdm_hwmod, */
5255
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05305256 /* mcspi class */
5257 &omap44xx_mcspi1_hwmod,
5258 &omap44xx_mcspi2_hwmod,
5259 &omap44xx_mcspi3_hwmod,
5260 &omap44xx_mcspi4_hwmod,
5261
Benoit Cousson407a6882011-02-15 22:39:48 +01005262 /* mmc class */
Anand Gadiyar17203bd2011-03-01 13:12:56 -08005263 &omap44xx_mmc1_hwmod,
5264 &omap44xx_mmc2_hwmod,
5265 &omap44xx_mmc3_hwmod,
5266 &omap44xx_mmc4_hwmod,
5267 &omap44xx_mmc5_hwmod,
Benoit Cousson407a6882011-02-15 22:39:48 +01005268
Benoit Cousson55d2cb02010-05-12 17:54:36 +02005269 /* mpu class */
5270 &omap44xx_mpu_hwmod,
Benoit Coussondb12ba52010-09-27 20:19:19 +05305271
Benoit Cousson1f6a7172010-12-23 22:30:30 +00005272 /* smartreflex class */
5273 &omap44xx_smartreflex_core_hwmod,
5274 &omap44xx_smartreflex_iva_hwmod,
5275 &omap44xx_smartreflex_mpu_hwmod,
5276
Benoit Coussond11c2172011-02-02 12:04:36 +00005277 /* spinlock class */
5278 &omap44xx_spinlock_hwmod,
5279
Benoit Cousson35d1a662011-02-11 11:17:14 +00005280 /* timer class */
5281 &omap44xx_timer1_hwmod,
5282 &omap44xx_timer2_hwmod,
5283 &omap44xx_timer3_hwmod,
5284 &omap44xx_timer4_hwmod,
5285 &omap44xx_timer5_hwmod,
5286 &omap44xx_timer6_hwmod,
5287 &omap44xx_timer7_hwmod,
5288 &omap44xx_timer8_hwmod,
5289 &omap44xx_timer9_hwmod,
5290 &omap44xx_timer10_hwmod,
5291 &omap44xx_timer11_hwmod,
5292
Benoit Coussondb12ba52010-09-27 20:19:19 +05305293 /* uart class */
5294 &omap44xx_uart1_hwmod,
5295 &omap44xx_uart2_hwmod,
5296 &omap44xx_uart3_hwmod,
5297 &omap44xx_uart4_hwmod,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005298
Benoit Cousson5844c4e2011-02-17 12:41:05 +00005299 /* usb_otg_hs class */
5300 &omap44xx_usb_otg_hs_hwmod,
5301
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005302 /* wd_timer class */
5303 &omap44xx_wd_timer2_hwmod,
5304 &omap44xx_wd_timer3_hwmod,
5305
Benoit Cousson55d2cb02010-05-12 17:54:36 +02005306 NULL,
5307};
5308
5309int __init omap44xx_hwmod_init(void)
5310{
Paul Walmsley550c8092011-02-28 11:58:14 -07005311 return omap_hwmod_register(omap44xx_hwmods);
Benoit Cousson55d2cb02010-05-12 17:54:36 +02005312}
5313