blob: d68ef2ce6f1c86ffd49481686b0fa71b02b63602 [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 Coussond0f06312011-07-10 05:56:30 -0600127 .prcm = {
128 .omap4 = {
129 .clkctrl_offs = OMAP4_CM_MEMIF_DMM_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -0600130 .context_offs = OMAP4_RM_MEMIF_DMM_CONTEXT_OFFSET,
Benoit Coussond0f06312011-07-10 05:56:30 -0600131 },
132 },
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200133 .slaves = omap44xx_dmm_slaves,
134 .slaves_cnt = ARRAY_SIZE(omap44xx_dmm_slaves),
Benoit Coussona5322c62011-07-10 05:56:29 -0600135 .mpu_irqs = omap44xx_dmm_irqs,
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200136 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
137};
138
139/*
140 * 'emif_fw' class
141 * instance(s): emif_fw
142 */
143static struct omap_hwmod_class omap44xx_emif_fw_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +0000144 .name = "emif_fw",
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200145};
146
Benoit Cousson7e69ed92011-07-09 19:14:28 -0600147/* emif_fw */
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200148/* dmm -> emif_fw */
149static struct omap_hwmod_ocp_if omap44xx_dmm__emif_fw = {
150 .master = &omap44xx_dmm_hwmod,
151 .slave = &omap44xx_emif_fw_hwmod,
152 .clk = "l3_div_ck",
153 .user = OCP_USER_MPU | OCP_USER_SDMA,
154};
155
Benoit Cousson659fa822010-12-21 21:08:34 -0700156static struct omap_hwmod_addr_space omap44xx_emif_fw_addrs[] = {
157 {
158 .pa_start = 0x4a20c000,
159 .pa_end = 0x4a20c0ff,
160 .flags = ADDR_TYPE_RT
161 },
Paul Walmsley78183f32011-07-09 19:14:05 -0600162 { }
Benoit Cousson659fa822010-12-21 21:08:34 -0700163};
164
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200165/* l4_cfg -> emif_fw */
166static struct omap_hwmod_ocp_if omap44xx_l4_cfg__emif_fw = {
167 .master = &omap44xx_l4_cfg_hwmod,
168 .slave = &omap44xx_emif_fw_hwmod,
169 .clk = "l4_div_ck",
Benoit Cousson659fa822010-12-21 21:08:34 -0700170 .addr = omap44xx_emif_fw_addrs,
Benoit Cousson659fa822010-12-21 21:08:34 -0700171 .user = OCP_USER_MPU,
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200172};
173
174/* emif_fw slave ports */
175static struct omap_hwmod_ocp_if *omap44xx_emif_fw_slaves[] = {
176 &omap44xx_dmm__emif_fw,
177 &omap44xx_l4_cfg__emif_fw,
178};
179
180static struct omap_hwmod omap44xx_emif_fw_hwmod = {
181 .name = "emif_fw",
182 .class = &omap44xx_emif_fw_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600183 .clkdm_name = "l3_emif_clkdm",
Benoit Coussond0f06312011-07-10 05:56:30 -0600184 .prcm = {
185 .omap4 = {
186 .clkctrl_offs = OMAP4_CM_MEMIF_EMIF_FW_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -0600187 .context_offs = OMAP4_RM_MEMIF_EMIF_FW_CONTEXT_OFFSET,
Benoit Coussond0f06312011-07-10 05:56:30 -0600188 },
189 },
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200190 .slaves = omap44xx_emif_fw_slaves,
191 .slaves_cnt = ARRAY_SIZE(omap44xx_emif_fw_slaves),
192 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
193};
194
195/*
196 * 'l3' class
197 * instance(s): l3_instr, l3_main_1, l3_main_2, l3_main_3
198 */
199static struct omap_hwmod_class omap44xx_l3_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +0000200 .name = "l3",
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200201};
202
Benoit Cousson7e69ed92011-07-09 19:14:28 -0600203/* l3_instr */
Benoit Cousson8f25bdc2010-12-21 21:08:34 -0700204/* iva -> l3_instr */
205static struct omap_hwmod_ocp_if omap44xx_iva__l3_instr = {
206 .master = &omap44xx_iva_hwmod,
207 .slave = &omap44xx_l3_instr_hwmod,
208 .clk = "l3_div_ck",
209 .user = OCP_USER_MPU | OCP_USER_SDMA,
210};
211
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200212/* l3_main_3 -> l3_instr */
213static struct omap_hwmod_ocp_if omap44xx_l3_main_3__l3_instr = {
214 .master = &omap44xx_l3_main_3_hwmod,
215 .slave = &omap44xx_l3_instr_hwmod,
216 .clk = "l3_div_ck",
217 .user = OCP_USER_MPU | OCP_USER_SDMA,
218};
219
220/* l3_instr slave ports */
221static struct omap_hwmod_ocp_if *omap44xx_l3_instr_slaves[] = {
Benoit Cousson8f25bdc2010-12-21 21:08:34 -0700222 &omap44xx_iva__l3_instr,
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200223 &omap44xx_l3_main_3__l3_instr,
224};
225
226static struct omap_hwmod omap44xx_l3_instr_hwmod = {
227 .name = "l3_instr",
228 .class = &omap44xx_l3_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600229 .clkdm_name = "l3_instr_clkdm",
Benoit Coussond0f06312011-07-10 05:56:30 -0600230 .prcm = {
231 .omap4 = {
232 .clkctrl_offs = OMAP4_CM_L3INSTR_L3_INSTR_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -0600233 .context_offs = OMAP4_RM_L3INSTR_L3_INSTR_CONTEXT_OFFSET,
Benoit Coussond0f06312011-07-10 05:56:30 -0600234 },
235 },
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200236 .slaves = omap44xx_l3_instr_slaves,
237 .slaves_cnt = ARRAY_SIZE(omap44xx_l3_instr_slaves),
238 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
239};
240
Benoit Cousson7e69ed92011-07-09 19:14:28 -0600241/* l3_main_1 */
Benoit Cousson9b4021b2011-07-09 19:14:27 -0600242static struct omap_hwmod_irq_info omap44xx_l3_main_1_irqs[] = {
243 { .name = "dbg_err", .irq = 9 + OMAP44XX_IRQ_GIC_START },
244 { .name = "app_err", .irq = 10 + OMAP44XX_IRQ_GIC_START },
245 { .irq = -1 }
246};
247
Benoit Cousson8f25bdc2010-12-21 21:08:34 -0700248/* dsp -> l3_main_1 */
249static struct omap_hwmod_ocp_if omap44xx_dsp__l3_main_1 = {
250 .master = &omap44xx_dsp_hwmod,
251 .slave = &omap44xx_l3_main_1_hwmod,
252 .clk = "l3_div_ck",
253 .user = OCP_USER_MPU | OCP_USER_SDMA,
254};
255
Benoit Coussond63bd742011-01-27 11:17:03 +0000256/* dss -> l3_main_1 */
257static struct omap_hwmod_ocp_if omap44xx_dss__l3_main_1 = {
258 .master = &omap44xx_dss_hwmod,
259 .slave = &omap44xx_l3_main_1_hwmod,
260 .clk = "l3_div_ck",
261 .user = OCP_USER_MPU | OCP_USER_SDMA,
262};
263
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200264/* l3_main_2 -> l3_main_1 */
265static struct omap_hwmod_ocp_if omap44xx_l3_main_2__l3_main_1 = {
266 .master = &omap44xx_l3_main_2_hwmod,
267 .slave = &omap44xx_l3_main_1_hwmod,
268 .clk = "l3_div_ck",
269 .user = OCP_USER_MPU | OCP_USER_SDMA,
270};
271
272/* l4_cfg -> l3_main_1 */
273static struct omap_hwmod_ocp_if omap44xx_l4_cfg__l3_main_1 = {
274 .master = &omap44xx_l4_cfg_hwmod,
275 .slave = &omap44xx_l3_main_1_hwmod,
276 .clk = "l4_div_ck",
277 .user = OCP_USER_MPU | OCP_USER_SDMA,
278};
279
Benoit Cousson407a6882011-02-15 22:39:48 +0100280/* mmc1 -> l3_main_1 */
281static struct omap_hwmod_ocp_if omap44xx_mmc1__l3_main_1 = {
282 .master = &omap44xx_mmc1_hwmod,
283 .slave = &omap44xx_l3_main_1_hwmod,
284 .clk = "l3_div_ck",
285 .user = OCP_USER_MPU | OCP_USER_SDMA,
286};
287
288/* mmc2 -> l3_main_1 */
289static struct omap_hwmod_ocp_if omap44xx_mmc2__l3_main_1 = {
290 .master = &omap44xx_mmc2_hwmod,
291 .slave = &omap44xx_l3_main_1_hwmod,
292 .clk = "l3_div_ck",
293 .user = OCP_USER_MPU | OCP_USER_SDMA,
294};
295
sricharanc4645232011-02-07 21:12:11 +0530296static struct omap_hwmod_addr_space omap44xx_l3_main_1_addrs[] = {
297 {
298 .pa_start = 0x44000000,
299 .pa_end = 0x44000fff,
Benoit Cousson9b4021b2011-07-09 19:14:27 -0600300 .flags = ADDR_TYPE_RT
sricharanc4645232011-02-07 21:12:11 +0530301 },
Paul Walmsley78183f32011-07-09 19:14:05 -0600302 { }
sricharanc4645232011-02-07 21:12:11 +0530303};
304
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200305/* mpu -> l3_main_1 */
306static struct omap_hwmod_ocp_if omap44xx_mpu__l3_main_1 = {
307 .master = &omap44xx_mpu_hwmod,
308 .slave = &omap44xx_l3_main_1_hwmod,
309 .clk = "l3_div_ck",
sricharanc4645232011-02-07 21:12:11 +0530310 .addr = omap44xx_l3_main_1_addrs,
Benoit Cousson9b4021b2011-07-09 19:14:27 -0600311 .user = OCP_USER_MPU,
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200312};
313
314/* l3_main_1 slave ports */
315static struct omap_hwmod_ocp_if *omap44xx_l3_main_1_slaves[] = {
Benoit Cousson8f25bdc2010-12-21 21:08:34 -0700316 &omap44xx_dsp__l3_main_1,
Benoit Coussond63bd742011-01-27 11:17:03 +0000317 &omap44xx_dss__l3_main_1,
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200318 &omap44xx_l3_main_2__l3_main_1,
319 &omap44xx_l4_cfg__l3_main_1,
Benoit Cousson407a6882011-02-15 22:39:48 +0100320 &omap44xx_mmc1__l3_main_1,
321 &omap44xx_mmc2__l3_main_1,
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200322 &omap44xx_mpu__l3_main_1,
323};
324
325static struct omap_hwmod omap44xx_l3_main_1_hwmod = {
326 .name = "l3_main_1",
327 .class = &omap44xx_l3_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600328 .clkdm_name = "l3_1_clkdm",
Benoit Cousson7e69ed92011-07-09 19:14:28 -0600329 .mpu_irqs = omap44xx_l3_main_1_irqs,
Benoit Coussond0f06312011-07-10 05:56:30 -0600330 .prcm = {
331 .omap4 = {
332 .clkctrl_offs = OMAP4_CM_L3_1_L3_1_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -0600333 .context_offs = OMAP4_RM_L3_1_L3_1_CONTEXT_OFFSET,
Benoit Coussond0f06312011-07-10 05:56:30 -0600334 },
335 },
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200336 .slaves = omap44xx_l3_main_1_slaves,
337 .slaves_cnt = ARRAY_SIZE(omap44xx_l3_main_1_slaves),
338 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
339};
340
Benoit Cousson7e69ed92011-07-09 19:14:28 -0600341/* l3_main_2 */
Benoit Coussond7cf5f32010-12-23 22:30:31 +0000342/* dma_system -> l3_main_2 */
343static struct omap_hwmod_ocp_if omap44xx_dma_system__l3_main_2 = {
344 .master = &omap44xx_dma_system_hwmod,
345 .slave = &omap44xx_l3_main_2_hwmod,
346 .clk = "l3_div_ck",
347 .user = OCP_USER_MPU | OCP_USER_SDMA,
348};
349
Benoit Cousson407a6882011-02-15 22:39:48 +0100350/* hsi -> l3_main_2 */
351static struct omap_hwmod_ocp_if omap44xx_hsi__l3_main_2 = {
352 .master = &omap44xx_hsi_hwmod,
353 .slave = &omap44xx_l3_main_2_hwmod,
354 .clk = "l3_div_ck",
355 .user = OCP_USER_MPU | OCP_USER_SDMA,
356};
357
358/* ipu -> l3_main_2 */
359static struct omap_hwmod_ocp_if omap44xx_ipu__l3_main_2 = {
360 .master = &omap44xx_ipu_hwmod,
361 .slave = &omap44xx_l3_main_2_hwmod,
362 .clk = "l3_div_ck",
363 .user = OCP_USER_MPU | OCP_USER_SDMA,
364};
365
366/* iss -> l3_main_2 */
367static struct omap_hwmod_ocp_if omap44xx_iss__l3_main_2 = {
368 .master = &omap44xx_iss_hwmod,
369 .slave = &omap44xx_l3_main_2_hwmod,
370 .clk = "l3_div_ck",
371 .user = OCP_USER_MPU | OCP_USER_SDMA,
372};
373
Benoit Cousson8f25bdc2010-12-21 21:08:34 -0700374/* iva -> l3_main_2 */
375static struct omap_hwmod_ocp_if omap44xx_iva__l3_main_2 = {
376 .master = &omap44xx_iva_hwmod,
377 .slave = &omap44xx_l3_main_2_hwmod,
378 .clk = "l3_div_ck",
379 .user = OCP_USER_MPU | OCP_USER_SDMA,
380};
381
sricharanc4645232011-02-07 21:12:11 +0530382static struct omap_hwmod_addr_space omap44xx_l3_main_2_addrs[] = {
383 {
384 .pa_start = 0x44800000,
385 .pa_end = 0x44801fff,
Benoit Cousson9b4021b2011-07-09 19:14:27 -0600386 .flags = ADDR_TYPE_RT
sricharanc4645232011-02-07 21:12:11 +0530387 },
Paul Walmsley78183f32011-07-09 19:14:05 -0600388 { }
sricharanc4645232011-02-07 21:12:11 +0530389};
390
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200391/* l3_main_1 -> l3_main_2 */
392static struct omap_hwmod_ocp_if omap44xx_l3_main_1__l3_main_2 = {
393 .master = &omap44xx_l3_main_1_hwmod,
394 .slave = &omap44xx_l3_main_2_hwmod,
395 .clk = "l3_div_ck",
sricharanc4645232011-02-07 21:12:11 +0530396 .addr = omap44xx_l3_main_2_addrs,
Benoit Cousson9b4021b2011-07-09 19:14:27 -0600397 .user = OCP_USER_MPU,
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200398};
399
400/* l4_cfg -> l3_main_2 */
401static struct omap_hwmod_ocp_if omap44xx_l4_cfg__l3_main_2 = {
402 .master = &omap44xx_l4_cfg_hwmod,
403 .slave = &omap44xx_l3_main_2_hwmod,
404 .clk = "l4_div_ck",
405 .user = OCP_USER_MPU | OCP_USER_SDMA,
406};
407
Benoit Cousson5844c4e2011-02-17 12:41:05 +0000408/* usb_otg_hs -> l3_main_2 */
409static struct omap_hwmod_ocp_if omap44xx_usb_otg_hs__l3_main_2 = {
410 .master = &omap44xx_usb_otg_hs_hwmod,
411 .slave = &omap44xx_l3_main_2_hwmod,
412 .clk = "l3_div_ck",
413 .user = OCP_USER_MPU | OCP_USER_SDMA,
414};
415
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200416/* l3_main_2 slave ports */
417static struct omap_hwmod_ocp_if *omap44xx_l3_main_2_slaves[] = {
Benoit Cousson531ce0d2010-12-20 18:27:19 -0800418 &omap44xx_dma_system__l3_main_2,
Benoit Cousson407a6882011-02-15 22:39:48 +0100419 &omap44xx_hsi__l3_main_2,
420 &omap44xx_ipu__l3_main_2,
421 &omap44xx_iss__l3_main_2,
Benoit Cousson8f25bdc2010-12-21 21:08:34 -0700422 &omap44xx_iva__l3_main_2,
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200423 &omap44xx_l3_main_1__l3_main_2,
424 &omap44xx_l4_cfg__l3_main_2,
Benoit Cousson5844c4e2011-02-17 12:41:05 +0000425 &omap44xx_usb_otg_hs__l3_main_2,
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200426};
427
428static struct omap_hwmod omap44xx_l3_main_2_hwmod = {
429 .name = "l3_main_2",
430 .class = &omap44xx_l3_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600431 .clkdm_name = "l3_2_clkdm",
Benoit Coussond0f06312011-07-10 05:56:30 -0600432 .prcm = {
433 .omap4 = {
434 .clkctrl_offs = OMAP4_CM_L3_2_L3_2_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -0600435 .context_offs = OMAP4_RM_L3_2_L3_2_CONTEXT_OFFSET,
Benoit Coussond0f06312011-07-10 05:56:30 -0600436 },
437 },
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200438 .slaves = omap44xx_l3_main_2_slaves,
439 .slaves_cnt = ARRAY_SIZE(omap44xx_l3_main_2_slaves),
440 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
441};
442
Benoit Cousson7e69ed92011-07-09 19:14:28 -0600443/* l3_main_3 */
sricharanc4645232011-02-07 21:12:11 +0530444static struct omap_hwmod_addr_space omap44xx_l3_main_3_addrs[] = {
445 {
446 .pa_start = 0x45000000,
447 .pa_end = 0x45000fff,
Benoit Cousson9b4021b2011-07-09 19:14:27 -0600448 .flags = ADDR_TYPE_RT
sricharanc4645232011-02-07 21:12:11 +0530449 },
Paul Walmsley78183f32011-07-09 19:14:05 -0600450 { }
sricharanc4645232011-02-07 21:12:11 +0530451};
452
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200453/* l3_main_1 -> l3_main_3 */
454static struct omap_hwmod_ocp_if omap44xx_l3_main_1__l3_main_3 = {
455 .master = &omap44xx_l3_main_1_hwmod,
456 .slave = &omap44xx_l3_main_3_hwmod,
457 .clk = "l3_div_ck",
sricharanc4645232011-02-07 21:12:11 +0530458 .addr = omap44xx_l3_main_3_addrs,
Benoit Cousson9b4021b2011-07-09 19:14:27 -0600459 .user = OCP_USER_MPU,
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200460};
461
462/* l3_main_2 -> l3_main_3 */
463static struct omap_hwmod_ocp_if omap44xx_l3_main_2__l3_main_3 = {
464 .master = &omap44xx_l3_main_2_hwmod,
465 .slave = &omap44xx_l3_main_3_hwmod,
466 .clk = "l3_div_ck",
467 .user = OCP_USER_MPU | OCP_USER_SDMA,
468};
469
470/* l4_cfg -> l3_main_3 */
471static struct omap_hwmod_ocp_if omap44xx_l4_cfg__l3_main_3 = {
472 .master = &omap44xx_l4_cfg_hwmod,
473 .slave = &omap44xx_l3_main_3_hwmod,
474 .clk = "l4_div_ck",
475 .user = OCP_USER_MPU | OCP_USER_SDMA,
476};
477
478/* l3_main_3 slave ports */
479static struct omap_hwmod_ocp_if *omap44xx_l3_main_3_slaves[] = {
480 &omap44xx_l3_main_1__l3_main_3,
481 &omap44xx_l3_main_2__l3_main_3,
482 &omap44xx_l4_cfg__l3_main_3,
483};
484
485static struct omap_hwmod omap44xx_l3_main_3_hwmod = {
486 .name = "l3_main_3",
487 .class = &omap44xx_l3_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600488 .clkdm_name = "l3_instr_clkdm",
Benoit Coussond0f06312011-07-10 05:56:30 -0600489 .prcm = {
490 .omap4 = {
491 .clkctrl_offs = OMAP4_CM_L3INSTR_L3_3_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -0600492 .context_offs = OMAP4_RM_L3INSTR_L3_3_CONTEXT_OFFSET,
Benoit Coussond0f06312011-07-10 05:56:30 -0600493 },
494 },
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200495 .slaves = omap44xx_l3_main_3_slaves,
496 .slaves_cnt = ARRAY_SIZE(omap44xx_l3_main_3_slaves),
497 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
498};
499
500/*
501 * 'l4' class
502 * instance(s): l4_abe, l4_cfg, l4_per, l4_wkup
503 */
504static struct omap_hwmod_class omap44xx_l4_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +0000505 .name = "l4",
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200506};
507
Benoit Cousson7e69ed92011-07-09 19:14:28 -0600508/* l4_abe */
Benoit Cousson407a6882011-02-15 22:39:48 +0100509/* aess -> l4_abe */
510static struct omap_hwmod_ocp_if omap44xx_aess__l4_abe = {
511 .master = &omap44xx_aess_hwmod,
512 .slave = &omap44xx_l4_abe_hwmod,
513 .clk = "ocp_abe_iclk",
514 .user = OCP_USER_MPU | OCP_USER_SDMA,
515};
516
Benoit Cousson8f25bdc2010-12-21 21:08:34 -0700517/* dsp -> l4_abe */
518static struct omap_hwmod_ocp_if omap44xx_dsp__l4_abe = {
519 .master = &omap44xx_dsp_hwmod,
520 .slave = &omap44xx_l4_abe_hwmod,
521 .clk = "ocp_abe_iclk",
522 .user = OCP_USER_MPU | OCP_USER_SDMA,
523};
524
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200525/* l3_main_1 -> l4_abe */
526static struct omap_hwmod_ocp_if omap44xx_l3_main_1__l4_abe = {
527 .master = &omap44xx_l3_main_1_hwmod,
528 .slave = &omap44xx_l4_abe_hwmod,
529 .clk = "l3_div_ck",
530 .user = OCP_USER_MPU | OCP_USER_SDMA,
531};
532
533/* mpu -> l4_abe */
534static struct omap_hwmod_ocp_if omap44xx_mpu__l4_abe = {
535 .master = &omap44xx_mpu_hwmod,
536 .slave = &omap44xx_l4_abe_hwmod,
537 .clk = "ocp_abe_iclk",
538 .user = OCP_USER_MPU | OCP_USER_SDMA,
539};
540
541/* l4_abe slave ports */
542static struct omap_hwmod_ocp_if *omap44xx_l4_abe_slaves[] = {
Benoit Cousson407a6882011-02-15 22:39:48 +0100543 &omap44xx_aess__l4_abe,
Benoit Cousson8f25bdc2010-12-21 21:08:34 -0700544 &omap44xx_dsp__l4_abe,
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200545 &omap44xx_l3_main_1__l4_abe,
546 &omap44xx_mpu__l4_abe,
547};
548
549static struct omap_hwmod omap44xx_l4_abe_hwmod = {
550 .name = "l4_abe",
551 .class = &omap44xx_l4_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600552 .clkdm_name = "abe_clkdm",
Benoit Coussond0f06312011-07-10 05:56:30 -0600553 .prcm = {
554 .omap4 = {
555 .clkctrl_offs = OMAP4_CM1_ABE_L4ABE_CLKCTRL_OFFSET,
556 },
557 },
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200558 .slaves = omap44xx_l4_abe_slaves,
559 .slaves_cnt = ARRAY_SIZE(omap44xx_l4_abe_slaves),
560 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
561};
562
Benoit Cousson7e69ed92011-07-09 19:14:28 -0600563/* l4_cfg */
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200564/* l3_main_1 -> l4_cfg */
565static struct omap_hwmod_ocp_if omap44xx_l3_main_1__l4_cfg = {
566 .master = &omap44xx_l3_main_1_hwmod,
567 .slave = &omap44xx_l4_cfg_hwmod,
568 .clk = "l3_div_ck",
569 .user = OCP_USER_MPU | OCP_USER_SDMA,
570};
571
572/* l4_cfg slave ports */
573static struct omap_hwmod_ocp_if *omap44xx_l4_cfg_slaves[] = {
574 &omap44xx_l3_main_1__l4_cfg,
575};
576
577static struct omap_hwmod omap44xx_l4_cfg_hwmod = {
578 .name = "l4_cfg",
579 .class = &omap44xx_l4_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600580 .clkdm_name = "l4_cfg_clkdm",
Benoit Coussond0f06312011-07-10 05:56:30 -0600581 .prcm = {
582 .omap4 = {
583 .clkctrl_offs = OMAP4_CM_L4CFG_L4_CFG_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -0600584 .context_offs = OMAP4_RM_L4CFG_L4_CFG_CONTEXT_OFFSET,
Benoit Coussond0f06312011-07-10 05:56:30 -0600585 },
586 },
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200587 .slaves = omap44xx_l4_cfg_slaves,
588 .slaves_cnt = ARRAY_SIZE(omap44xx_l4_cfg_slaves),
589 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
590};
591
Benoit Cousson7e69ed92011-07-09 19:14:28 -0600592/* l4_per */
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200593/* l3_main_2 -> l4_per */
594static struct omap_hwmod_ocp_if omap44xx_l3_main_2__l4_per = {
595 .master = &omap44xx_l3_main_2_hwmod,
596 .slave = &omap44xx_l4_per_hwmod,
597 .clk = "l3_div_ck",
598 .user = OCP_USER_MPU | OCP_USER_SDMA,
599};
600
601/* l4_per slave ports */
602static struct omap_hwmod_ocp_if *omap44xx_l4_per_slaves[] = {
603 &omap44xx_l3_main_2__l4_per,
604};
605
606static struct omap_hwmod omap44xx_l4_per_hwmod = {
607 .name = "l4_per",
608 .class = &omap44xx_l4_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600609 .clkdm_name = "l4_per_clkdm",
Benoit Coussond0f06312011-07-10 05:56:30 -0600610 .prcm = {
611 .omap4 = {
612 .clkctrl_offs = OMAP4_CM_L4PER_L4PER_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -0600613 .context_offs = OMAP4_RM_L4PER_L4_PER_CONTEXT_OFFSET,
Benoit Coussond0f06312011-07-10 05:56:30 -0600614 },
615 },
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200616 .slaves = omap44xx_l4_per_slaves,
617 .slaves_cnt = ARRAY_SIZE(omap44xx_l4_per_slaves),
618 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
619};
620
Benoit Cousson7e69ed92011-07-09 19:14:28 -0600621/* l4_wkup */
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200622/* l4_cfg -> l4_wkup */
623static struct omap_hwmod_ocp_if omap44xx_l4_cfg__l4_wkup = {
624 .master = &omap44xx_l4_cfg_hwmod,
625 .slave = &omap44xx_l4_wkup_hwmod,
626 .clk = "l4_div_ck",
627 .user = OCP_USER_MPU | OCP_USER_SDMA,
628};
629
630/* l4_wkup slave ports */
631static struct omap_hwmod_ocp_if *omap44xx_l4_wkup_slaves[] = {
632 &omap44xx_l4_cfg__l4_wkup,
633};
634
635static struct omap_hwmod omap44xx_l4_wkup_hwmod = {
636 .name = "l4_wkup",
637 .class = &omap44xx_l4_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600638 .clkdm_name = "l4_wkup_clkdm",
Benoit Coussond0f06312011-07-10 05:56:30 -0600639 .prcm = {
640 .omap4 = {
641 .clkctrl_offs = OMAP4_CM_WKUP_L4WKUP_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -0600642 .context_offs = OMAP4_RM_WKUP_L4WKUP_CONTEXT_OFFSET,
Benoit Coussond0f06312011-07-10 05:56:30 -0600643 },
644 },
Benoit Cousson55d2cb02010-05-12 17:54:36 +0200645 .slaves = omap44xx_l4_wkup_slaves,
646 .slaves_cnt = ARRAY_SIZE(omap44xx_l4_wkup_slaves),
647 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
648};
649
650/*
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700651 * 'mpu_bus' class
652 * instance(s): mpu_private
653 */
654static struct omap_hwmod_class omap44xx_mpu_bus_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +0000655 .name = "mpu_bus",
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700656};
657
Benoit Cousson7e69ed92011-07-09 19:14:28 -0600658/* mpu_private */
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700659/* mpu -> mpu_private */
660static struct omap_hwmod_ocp_if omap44xx_mpu__mpu_private = {
661 .master = &omap44xx_mpu_hwmod,
662 .slave = &omap44xx_mpu_private_hwmod,
663 .clk = "l3_div_ck",
664 .user = OCP_USER_MPU | OCP_USER_SDMA,
665};
666
667/* mpu_private slave ports */
668static struct omap_hwmod_ocp_if *omap44xx_mpu_private_slaves[] = {
669 &omap44xx_mpu__mpu_private,
670};
671
672static struct omap_hwmod omap44xx_mpu_private_hwmod = {
673 .name = "mpu_private",
674 .class = &omap44xx_mpu_bus_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600675 .clkdm_name = "mpuss_clkdm",
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700676 .slaves = omap44xx_mpu_private_slaves,
677 .slaves_cnt = ARRAY_SIZE(omap44xx_mpu_private_slaves),
678 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
679};
680
681/*
682 * Modules omap_hwmod structures
683 *
684 * The following IPs are excluded for the moment because:
685 * - They do not need an explicit SW control using omap_hwmod API.
686 * - They still need to be validated with the driver
687 * properly adapted to omap_hwmod / omap_device
688 *
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700689 * c2c
690 * c2c_target_fw
691 * cm_core
692 * cm_core_aon
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700693 * ctrl_module_core
694 * ctrl_module_pad_core
695 * ctrl_module_pad_wkup
696 * ctrl_module_wkup
697 * debugss
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700698 * efuse_ctrl_cust
699 * efuse_ctrl_std
700 * elm
701 * emif1
702 * emif2
703 * fdif
704 * gpmc
705 * gpu
706 * hdq1w
Benoit Cousson00fe6102011-07-09 19:14:28 -0600707 * mcasp
708 * mpu_c0
709 * mpu_c1
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700710 * ocmc_ram
711 * ocp2scp_usb_phy
712 * ocp_wp_noc
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700713 * prcm_mpu
714 * prm
715 * scrm
716 * sl2if
717 * slimbus1
718 * slimbus2
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700719 * usb_host_fs
720 * usb_host_hs
Benoit Cousson3b54baa2010-12-21 21:08:33 -0700721 * usb_phy_cm
722 * usb_tll_hs
723 * usim
724 */
725
726/*
Benoit Cousson407a6882011-02-15 22:39:48 +0100727 * 'aess' class
728 * audio engine sub system
729 */
730
731static struct omap_hwmod_class_sysconfig omap44xx_aess_sysc = {
732 .rev_offs = 0x0000,
733 .sysc_offs = 0x0010,
734 .sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE),
735 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
Benoit Coussonc614ebf2011-07-01 22:54:01 +0200736 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART |
737 MSTANDBY_SMART_WKUP),
Benoit Cousson407a6882011-02-15 22:39:48 +0100738 .sysc_fields = &omap_hwmod_sysc_type2,
739};
740
741static struct omap_hwmod_class omap44xx_aess_hwmod_class = {
742 .name = "aess",
743 .sysc = &omap44xx_aess_sysc,
744};
745
746/* aess */
747static struct omap_hwmod_irq_info omap44xx_aess_irqs[] = {
748 { .irq = 99 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -0600749 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +0100750};
751
752static struct omap_hwmod_dma_info omap44xx_aess_sdma_reqs[] = {
753 { .name = "fifo0", .dma_req = 100 + OMAP44XX_DMA_REQ_START },
754 { .name = "fifo1", .dma_req = 101 + OMAP44XX_DMA_REQ_START },
755 { .name = "fifo2", .dma_req = 102 + OMAP44XX_DMA_REQ_START },
756 { .name = "fifo3", .dma_req = 103 + OMAP44XX_DMA_REQ_START },
757 { .name = "fifo4", .dma_req = 104 + OMAP44XX_DMA_REQ_START },
758 { .name = "fifo5", .dma_req = 105 + OMAP44XX_DMA_REQ_START },
759 { .name = "fifo6", .dma_req = 106 + OMAP44XX_DMA_REQ_START },
760 { .name = "fifo7", .dma_req = 107 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -0600761 { .dma_req = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +0100762};
763
764/* aess master ports */
765static struct omap_hwmod_ocp_if *omap44xx_aess_masters[] = {
766 &omap44xx_aess__l4_abe,
767};
768
769static struct omap_hwmod_addr_space omap44xx_aess_addrs[] = {
770 {
771 .pa_start = 0x401f1000,
772 .pa_end = 0x401f13ff,
773 .flags = ADDR_TYPE_RT
774 },
Paul Walmsley78183f32011-07-09 19:14:05 -0600775 { }
Benoit Cousson407a6882011-02-15 22:39:48 +0100776};
777
778/* l4_abe -> aess */
779static struct omap_hwmod_ocp_if omap44xx_l4_abe__aess = {
780 .master = &omap44xx_l4_abe_hwmod,
781 .slave = &omap44xx_aess_hwmod,
782 .clk = "ocp_abe_iclk",
783 .addr = omap44xx_aess_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +0100784 .user = OCP_USER_MPU,
785};
786
787static struct omap_hwmod_addr_space omap44xx_aess_dma_addrs[] = {
788 {
789 .pa_start = 0x490f1000,
790 .pa_end = 0x490f13ff,
791 .flags = ADDR_TYPE_RT
792 },
Paul Walmsley78183f32011-07-09 19:14:05 -0600793 { }
Benoit Cousson407a6882011-02-15 22:39:48 +0100794};
795
796/* l4_abe -> aess (dma) */
797static struct omap_hwmod_ocp_if omap44xx_l4_abe__aess_dma = {
798 .master = &omap44xx_l4_abe_hwmod,
799 .slave = &omap44xx_aess_hwmod,
800 .clk = "ocp_abe_iclk",
801 .addr = omap44xx_aess_dma_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +0100802 .user = OCP_USER_SDMA,
803};
804
805/* aess slave ports */
806static struct omap_hwmod_ocp_if *omap44xx_aess_slaves[] = {
807 &omap44xx_l4_abe__aess,
808 &omap44xx_l4_abe__aess_dma,
809};
810
811static struct omap_hwmod omap44xx_aess_hwmod = {
812 .name = "aess",
813 .class = &omap44xx_aess_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600814 .clkdm_name = "abe_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +0100815 .mpu_irqs = omap44xx_aess_irqs,
Benoit Cousson407a6882011-02-15 22:39:48 +0100816 .sdma_reqs = omap44xx_aess_sdma_reqs,
Benoit Cousson407a6882011-02-15 22:39:48 +0100817 .main_clk = "aess_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -0600818 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +0100819 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -0600820 .clkctrl_offs = OMAP4_CM1_ABE_AESS_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -0600821 .context_offs = OMAP4_RM_ABE_AESS_CONTEXT_OFFSET,
Benoit Cousson407a6882011-02-15 22:39:48 +0100822 },
823 },
824 .slaves = omap44xx_aess_slaves,
825 .slaves_cnt = ARRAY_SIZE(omap44xx_aess_slaves),
826 .masters = omap44xx_aess_masters,
827 .masters_cnt = ARRAY_SIZE(omap44xx_aess_masters),
828 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
829};
830
831/*
832 * 'bandgap' class
833 * bangap reference for ldo regulators
834 */
835
836static struct omap_hwmod_class omap44xx_bandgap_hwmod_class = {
837 .name = "bandgap",
838};
839
840/* bandgap */
841static struct omap_hwmod_opt_clk bandgap_opt_clks[] = {
842 { .role = "fclk", .clk = "bandgap_fclk" },
843};
844
845static struct omap_hwmod omap44xx_bandgap_hwmod = {
846 .name = "bandgap",
847 .class = &omap44xx_bandgap_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600848 .clkdm_name = "l4_wkup_clkdm",
Benoit Cousson00fe6102011-07-09 19:14:28 -0600849 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +0100850 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -0600851 .clkctrl_offs = OMAP4_CM_WKUP_BANDGAP_CLKCTRL_OFFSET,
Benoit Cousson407a6882011-02-15 22:39:48 +0100852 },
853 },
854 .opt_clks = bandgap_opt_clks,
855 .opt_clks_cnt = ARRAY_SIZE(bandgap_opt_clks),
856 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
857};
858
859/*
860 * 'counter' class
861 * 32-bit ordinary counter, clocked by the falling edge of the 32 khz clock
862 */
863
864static struct omap_hwmod_class_sysconfig omap44xx_counter_sysc = {
865 .rev_offs = 0x0000,
866 .sysc_offs = 0x0004,
867 .sysc_flags = SYSC_HAS_SIDLEMODE,
868 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
869 SIDLE_SMART_WKUP),
870 .sysc_fields = &omap_hwmod_sysc_type1,
871};
872
873static struct omap_hwmod_class omap44xx_counter_hwmod_class = {
874 .name = "counter",
875 .sysc = &omap44xx_counter_sysc,
876};
877
878/* counter_32k */
879static struct omap_hwmod omap44xx_counter_32k_hwmod;
880static struct omap_hwmod_addr_space omap44xx_counter_32k_addrs[] = {
881 {
882 .pa_start = 0x4a304000,
883 .pa_end = 0x4a30401f,
884 .flags = ADDR_TYPE_RT
885 },
Paul Walmsley78183f32011-07-09 19:14:05 -0600886 { }
Benoit Cousson407a6882011-02-15 22:39:48 +0100887};
888
889/* l4_wkup -> counter_32k */
890static struct omap_hwmod_ocp_if omap44xx_l4_wkup__counter_32k = {
891 .master = &omap44xx_l4_wkup_hwmod,
892 .slave = &omap44xx_counter_32k_hwmod,
893 .clk = "l4_wkup_clk_mux_ck",
894 .addr = omap44xx_counter_32k_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +0100895 .user = OCP_USER_MPU | OCP_USER_SDMA,
896};
897
898/* counter_32k slave ports */
899static struct omap_hwmod_ocp_if *omap44xx_counter_32k_slaves[] = {
900 &omap44xx_l4_wkup__counter_32k,
901};
902
903static struct omap_hwmod omap44xx_counter_32k_hwmod = {
904 .name = "counter_32k",
905 .class = &omap44xx_counter_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600906 .clkdm_name = "l4_wkup_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +0100907 .flags = HWMOD_SWSUP_SIDLE,
908 .main_clk = "sys_32k_ck",
Benoit Cousson00fe6102011-07-09 19:14:28 -0600909 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +0100910 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -0600911 .clkctrl_offs = OMAP4_CM_WKUP_SYNCTIMER_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -0600912 .context_offs = OMAP4_RM_WKUP_SYNCTIMER_CONTEXT_OFFSET,
Benoit Cousson407a6882011-02-15 22:39:48 +0100913 },
914 },
915 .slaves = omap44xx_counter_32k_slaves,
916 .slaves_cnt = ARRAY_SIZE(omap44xx_counter_32k_slaves),
917 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
918};
919
920/*
Benoit Coussond7cf5f32010-12-23 22:30:31 +0000921 * 'dma' class
922 * dma controller for data exchange between memory to memory (i.e. internal or
923 * external memory) and gp peripherals to memory or memory to gp peripherals
924 */
925
926static struct omap_hwmod_class_sysconfig omap44xx_dma_sysc = {
927 .rev_offs = 0x0000,
928 .sysc_offs = 0x002c,
929 .syss_offs = 0x0028,
930 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
931 SYSC_HAS_EMUFREE | SYSC_HAS_MIDLEMODE |
932 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
933 SYSS_HAS_RESET_STATUS),
934 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
935 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
936 .sysc_fields = &omap_hwmod_sysc_type1,
937};
938
939static struct omap_hwmod_class omap44xx_dma_hwmod_class = {
940 .name = "dma",
941 .sysc = &omap44xx_dma_sysc,
942};
943
944/* dma dev_attr */
945static struct omap_dma_dev_attr dma_dev_attr = {
946 .dev_caps = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY |
947 IS_CSSA_32 | IS_CDSA_32 | IS_RW_PRIORITY,
948 .lch_count = 32,
949};
950
951/* dma_system */
952static struct omap_hwmod_irq_info omap44xx_dma_system_irqs[] = {
953 { .name = "0", .irq = 12 + OMAP44XX_IRQ_GIC_START },
954 { .name = "1", .irq = 13 + OMAP44XX_IRQ_GIC_START },
955 { .name = "2", .irq = 14 + OMAP44XX_IRQ_GIC_START },
956 { .name = "3", .irq = 15 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -0600957 { .irq = -1 }
Benoit Coussond7cf5f32010-12-23 22:30:31 +0000958};
959
960/* dma_system master ports */
961static struct omap_hwmod_ocp_if *omap44xx_dma_system_masters[] = {
962 &omap44xx_dma_system__l3_main_2,
963};
964
965static struct omap_hwmod_addr_space omap44xx_dma_system_addrs[] = {
966 {
967 .pa_start = 0x4a056000,
Benoit Cousson1286eeb2011-04-19 10:15:36 -0600968 .pa_end = 0x4a056fff,
Benoit Coussond7cf5f32010-12-23 22:30:31 +0000969 .flags = ADDR_TYPE_RT
970 },
Paul Walmsley78183f32011-07-09 19:14:05 -0600971 { }
Benoit Coussond7cf5f32010-12-23 22:30:31 +0000972};
973
974/* l4_cfg -> dma_system */
975static struct omap_hwmod_ocp_if omap44xx_l4_cfg__dma_system = {
976 .master = &omap44xx_l4_cfg_hwmod,
977 .slave = &omap44xx_dma_system_hwmod,
978 .clk = "l4_div_ck",
979 .addr = omap44xx_dma_system_addrs,
Benoit Coussond7cf5f32010-12-23 22:30:31 +0000980 .user = OCP_USER_MPU | OCP_USER_SDMA,
981};
982
983/* dma_system slave ports */
984static struct omap_hwmod_ocp_if *omap44xx_dma_system_slaves[] = {
985 &omap44xx_l4_cfg__dma_system,
986};
987
988static struct omap_hwmod omap44xx_dma_system_hwmod = {
989 .name = "dma_system",
990 .class = &omap44xx_dma_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -0600991 .clkdm_name = "l3_dma_clkdm",
Benoit Coussond7cf5f32010-12-23 22:30:31 +0000992 .mpu_irqs = omap44xx_dma_system_irqs,
Benoit Coussond7cf5f32010-12-23 22:30:31 +0000993 .main_clk = "l3_div_ck",
994 .prcm = {
995 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -0600996 .clkctrl_offs = OMAP4_CM_SDMA_SDMA_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -0600997 .context_offs = OMAP4_RM_SDMA_SDMA_CONTEXT_OFFSET,
Benoit Coussond7cf5f32010-12-23 22:30:31 +0000998 },
999 },
1000 .dev_attr = &dma_dev_attr,
1001 .slaves = omap44xx_dma_system_slaves,
1002 .slaves_cnt = ARRAY_SIZE(omap44xx_dma_system_slaves),
1003 .masters = omap44xx_dma_system_masters,
1004 .masters_cnt = ARRAY_SIZE(omap44xx_dma_system_masters),
1005 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1006};
1007
1008/*
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001009 * 'dmic' class
1010 * digital microphone controller
1011 */
1012
1013static struct omap_hwmod_class_sysconfig omap44xx_dmic_sysc = {
1014 .rev_offs = 0x0000,
1015 .sysc_offs = 0x0010,
1016 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
1017 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
1018 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1019 SIDLE_SMART_WKUP),
1020 .sysc_fields = &omap_hwmod_sysc_type2,
1021};
1022
1023static struct omap_hwmod_class omap44xx_dmic_hwmod_class = {
1024 .name = "dmic",
1025 .sysc = &omap44xx_dmic_sysc,
1026};
1027
1028/* dmic */
1029static struct omap_hwmod omap44xx_dmic_hwmod;
1030static struct omap_hwmod_irq_info omap44xx_dmic_irqs[] = {
1031 { .irq = 114 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06001032 { .irq = -1 }
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001033};
1034
1035static struct omap_hwmod_dma_info omap44xx_dmic_sdma_reqs[] = {
1036 { .dma_req = 66 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06001037 { .dma_req = -1 }
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001038};
1039
1040static struct omap_hwmod_addr_space omap44xx_dmic_addrs[] = {
1041 {
1042 .pa_start = 0x4012e000,
1043 .pa_end = 0x4012e07f,
1044 .flags = ADDR_TYPE_RT
1045 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001046 { }
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001047};
1048
1049/* l4_abe -> dmic */
1050static struct omap_hwmod_ocp_if omap44xx_l4_abe__dmic = {
1051 .master = &omap44xx_l4_abe_hwmod,
1052 .slave = &omap44xx_dmic_hwmod,
1053 .clk = "ocp_abe_iclk",
1054 .addr = omap44xx_dmic_addrs,
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001055 .user = OCP_USER_MPU,
1056};
1057
1058static struct omap_hwmod_addr_space omap44xx_dmic_dma_addrs[] = {
1059 {
1060 .pa_start = 0x4902e000,
1061 .pa_end = 0x4902e07f,
1062 .flags = ADDR_TYPE_RT
1063 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001064 { }
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001065};
1066
1067/* l4_abe -> dmic (dma) */
1068static struct omap_hwmod_ocp_if omap44xx_l4_abe__dmic_dma = {
1069 .master = &omap44xx_l4_abe_hwmod,
1070 .slave = &omap44xx_dmic_hwmod,
1071 .clk = "ocp_abe_iclk",
1072 .addr = omap44xx_dmic_dma_addrs,
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001073 .user = OCP_USER_SDMA,
1074};
1075
1076/* dmic slave ports */
1077static struct omap_hwmod_ocp_if *omap44xx_dmic_slaves[] = {
1078 &omap44xx_l4_abe__dmic,
1079 &omap44xx_l4_abe__dmic_dma,
1080};
1081
1082static struct omap_hwmod omap44xx_dmic_hwmod = {
1083 .name = "dmic",
1084 .class = &omap44xx_dmic_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001085 .clkdm_name = "abe_clkdm",
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001086 .mpu_irqs = omap44xx_dmic_irqs,
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001087 .sdma_reqs = omap44xx_dmic_sdma_reqs,
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001088 .main_clk = "dmic_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06001089 .prcm = {
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001090 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06001091 .clkctrl_offs = OMAP4_CM1_ABE_DMIC_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06001092 .context_offs = OMAP4_RM_ABE_DMIC_CONTEXT_OFFSET,
Benoit Cousson8ca476d2011-01-25 22:01:00 +00001093 },
1094 },
1095 .slaves = omap44xx_dmic_slaves,
1096 .slaves_cnt = ARRAY_SIZE(omap44xx_dmic_slaves),
1097 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1098};
1099
1100/*
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07001101 * 'dsp' class
1102 * dsp sub-system
1103 */
1104
1105static struct omap_hwmod_class omap44xx_dsp_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +00001106 .name = "dsp",
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07001107};
1108
1109/* dsp */
1110static struct omap_hwmod_irq_info omap44xx_dsp_irqs[] = {
1111 { .irq = 28 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06001112 { .irq = -1 }
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07001113};
1114
1115static struct omap_hwmod_rst_info omap44xx_dsp_resets[] = {
1116 { .name = "mmu_cache", .rst_shift = 1 },
1117};
1118
1119static struct omap_hwmod_rst_info omap44xx_dsp_c0_resets[] = {
1120 { .name = "dsp", .rst_shift = 0 },
1121};
1122
1123/* dsp -> iva */
1124static struct omap_hwmod_ocp_if omap44xx_dsp__iva = {
1125 .master = &omap44xx_dsp_hwmod,
1126 .slave = &omap44xx_iva_hwmod,
1127 .clk = "dpll_iva_m5x2_ck",
1128};
1129
1130/* dsp master ports */
1131static struct omap_hwmod_ocp_if *omap44xx_dsp_masters[] = {
1132 &omap44xx_dsp__l3_main_1,
1133 &omap44xx_dsp__l4_abe,
1134 &omap44xx_dsp__iva,
1135};
1136
1137/* l4_cfg -> dsp */
1138static struct omap_hwmod_ocp_if omap44xx_l4_cfg__dsp = {
1139 .master = &omap44xx_l4_cfg_hwmod,
1140 .slave = &omap44xx_dsp_hwmod,
1141 .clk = "l4_div_ck",
1142 .user = OCP_USER_MPU | OCP_USER_SDMA,
1143};
1144
1145/* dsp slave ports */
1146static struct omap_hwmod_ocp_if *omap44xx_dsp_slaves[] = {
1147 &omap44xx_l4_cfg__dsp,
1148};
1149
1150/* Pseudo hwmod for reset control purpose only */
1151static struct omap_hwmod omap44xx_dsp_c0_hwmod = {
1152 .name = "dsp_c0",
1153 .class = &omap44xx_dsp_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001154 .clkdm_name = "tesla_clkdm",
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07001155 .flags = HWMOD_INIT_NO_RESET,
1156 .rst_lines = omap44xx_dsp_c0_resets,
1157 .rst_lines_cnt = ARRAY_SIZE(omap44xx_dsp_c0_resets),
1158 .prcm = {
1159 .omap4 = {
Benoit Coussoneaac3292011-07-10 05:56:31 -06001160 .rstctrl_offs = OMAP4_RM_TESLA_RSTCTRL_OFFSET,
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07001161 },
1162 },
1163 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1164};
1165
1166static struct omap_hwmod omap44xx_dsp_hwmod = {
1167 .name = "dsp",
1168 .class = &omap44xx_dsp_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001169 .clkdm_name = "tesla_clkdm",
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07001170 .mpu_irqs = omap44xx_dsp_irqs,
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07001171 .rst_lines = omap44xx_dsp_resets,
1172 .rst_lines_cnt = ARRAY_SIZE(omap44xx_dsp_resets),
1173 .main_clk = "dsp_fck",
1174 .prcm = {
1175 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06001176 .clkctrl_offs = OMAP4_CM_TESLA_TESLA_CLKCTRL_OFFSET,
Benoit Coussoneaac3292011-07-10 05:56:31 -06001177 .rstctrl_offs = OMAP4_RM_TESLA_RSTCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06001178 .context_offs = OMAP4_RM_TESLA_TESLA_CONTEXT_OFFSET,
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07001179 },
1180 },
1181 .slaves = omap44xx_dsp_slaves,
1182 .slaves_cnt = ARRAY_SIZE(omap44xx_dsp_slaves),
1183 .masters = omap44xx_dsp_masters,
1184 .masters_cnt = ARRAY_SIZE(omap44xx_dsp_masters),
1185 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1186};
1187
1188/*
Benoit Coussond63bd742011-01-27 11:17:03 +00001189 * 'dss' class
1190 * display sub-system
1191 */
1192
1193static struct omap_hwmod_class_sysconfig omap44xx_dss_sysc = {
1194 .rev_offs = 0x0000,
1195 .syss_offs = 0x0014,
1196 .sysc_flags = SYSS_HAS_RESET_STATUS,
1197};
1198
1199static struct omap_hwmod_class omap44xx_dss_hwmod_class = {
1200 .name = "dss",
1201 .sysc = &omap44xx_dss_sysc,
1202};
1203
1204/* dss */
1205/* dss master ports */
1206static struct omap_hwmod_ocp_if *omap44xx_dss_masters[] = {
1207 &omap44xx_dss__l3_main_1,
1208};
1209
1210static struct omap_hwmod_addr_space omap44xx_dss_dma_addrs[] = {
1211 {
1212 .pa_start = 0x58000000,
1213 .pa_end = 0x5800007f,
1214 .flags = ADDR_TYPE_RT
1215 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001216 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001217};
1218
1219/* l3_main_2 -> dss */
1220static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss = {
1221 .master = &omap44xx_l3_main_2_hwmod,
1222 .slave = &omap44xx_dss_hwmod,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001223 .clk = "dss_fck",
Benoit Coussond63bd742011-01-27 11:17:03 +00001224 .addr = omap44xx_dss_dma_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001225 .user = OCP_USER_SDMA,
1226};
1227
1228static struct omap_hwmod_addr_space omap44xx_dss_addrs[] = {
1229 {
1230 .pa_start = 0x48040000,
1231 .pa_end = 0x4804007f,
1232 .flags = ADDR_TYPE_RT
1233 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001234 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001235};
1236
1237/* l4_per -> dss */
1238static struct omap_hwmod_ocp_if omap44xx_l4_per__dss = {
1239 .master = &omap44xx_l4_per_hwmod,
1240 .slave = &omap44xx_dss_hwmod,
1241 .clk = "l4_div_ck",
1242 .addr = omap44xx_dss_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001243 .user = OCP_USER_MPU,
1244};
1245
1246/* dss slave ports */
1247static struct omap_hwmod_ocp_if *omap44xx_dss_slaves[] = {
1248 &omap44xx_l3_main_2__dss,
1249 &omap44xx_l4_per__dss,
1250};
1251
1252static struct omap_hwmod_opt_clk dss_opt_clks[] = {
1253 { .role = "sys_clk", .clk = "dss_sys_clk" },
1254 { .role = "tv_clk", .clk = "dss_tv_clk" },
1255 { .role = "dss_clk", .clk = "dss_dss_clk" },
1256 { .role = "video_clk", .clk = "dss_48mhz_clk" },
1257};
1258
1259static struct omap_hwmod omap44xx_dss_hwmod = {
1260 .name = "dss_core",
1261 .class = &omap44xx_dss_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001262 .clkdm_name = "l3_dss_clkdm",
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001263 .main_clk = "dss_dss_clk",
Benoit Coussond63bd742011-01-27 11:17:03 +00001264 .prcm = {
1265 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06001266 .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06001267 .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
Benoit Coussond63bd742011-01-27 11:17:03 +00001268 },
1269 },
1270 .opt_clks = dss_opt_clks,
1271 .opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
1272 .slaves = omap44xx_dss_slaves,
1273 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_slaves),
1274 .masters = omap44xx_dss_masters,
1275 .masters_cnt = ARRAY_SIZE(omap44xx_dss_masters),
1276 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1277};
1278
1279/*
1280 * 'dispc' class
1281 * display controller
1282 */
1283
1284static struct omap_hwmod_class_sysconfig omap44xx_dispc_sysc = {
1285 .rev_offs = 0x0000,
1286 .sysc_offs = 0x0010,
1287 .syss_offs = 0x0014,
1288 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
1289 SYSC_HAS_ENAWAKEUP | SYSC_HAS_MIDLEMODE |
1290 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
1291 SYSS_HAS_RESET_STATUS),
1292 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1293 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
1294 .sysc_fields = &omap_hwmod_sysc_type1,
1295};
1296
1297static struct omap_hwmod_class omap44xx_dispc_hwmod_class = {
1298 .name = "dispc",
1299 .sysc = &omap44xx_dispc_sysc,
1300};
1301
1302/* dss_dispc */
1303static struct omap_hwmod omap44xx_dss_dispc_hwmod;
1304static struct omap_hwmod_irq_info omap44xx_dss_dispc_irqs[] = {
1305 { .irq = 25 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06001306 { .irq = -1 }
Benoit Coussond63bd742011-01-27 11:17:03 +00001307};
1308
1309static struct omap_hwmod_dma_info omap44xx_dss_dispc_sdma_reqs[] = {
1310 { .dma_req = 5 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06001311 { .dma_req = -1 }
Benoit Coussond63bd742011-01-27 11:17:03 +00001312};
1313
1314static struct omap_hwmod_addr_space omap44xx_dss_dispc_dma_addrs[] = {
1315 {
1316 .pa_start = 0x58001000,
1317 .pa_end = 0x58001fff,
1318 .flags = ADDR_TYPE_RT
1319 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001320 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001321};
1322
1323/* l3_main_2 -> dss_dispc */
1324static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_dispc = {
1325 .master = &omap44xx_l3_main_2_hwmod,
1326 .slave = &omap44xx_dss_dispc_hwmod,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001327 .clk = "dss_fck",
Benoit Coussond63bd742011-01-27 11:17:03 +00001328 .addr = omap44xx_dss_dispc_dma_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001329 .user = OCP_USER_SDMA,
1330};
1331
1332static struct omap_hwmod_addr_space omap44xx_dss_dispc_addrs[] = {
1333 {
1334 .pa_start = 0x48041000,
1335 .pa_end = 0x48041fff,
1336 .flags = ADDR_TYPE_RT
1337 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001338 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001339};
1340
1341/* l4_per -> dss_dispc */
1342static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_dispc = {
1343 .master = &omap44xx_l4_per_hwmod,
1344 .slave = &omap44xx_dss_dispc_hwmod,
1345 .clk = "l4_div_ck",
1346 .addr = omap44xx_dss_dispc_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001347 .user = OCP_USER_MPU,
1348};
1349
1350/* dss_dispc slave ports */
1351static struct omap_hwmod_ocp_if *omap44xx_dss_dispc_slaves[] = {
1352 &omap44xx_l3_main_2__dss_dispc,
1353 &omap44xx_l4_per__dss_dispc,
1354};
1355
Tomi Valkeinen3a23aaf2011-07-09 20:39:44 -06001356static struct omap_hwmod_opt_clk dss_dispc_opt_clks[] = {
1357 { .role = "sys_clk", .clk = "dss_sys_clk" },
1358 { .role = "tv_clk", .clk = "dss_tv_clk" },
1359 { .role = "hdmi_clk", .clk = "dss_48mhz_clk" },
1360};
1361
Benoit Coussond63bd742011-01-27 11:17:03 +00001362static struct omap_hwmod omap44xx_dss_dispc_hwmod = {
1363 .name = "dss_dispc",
1364 .class = &omap44xx_dispc_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001365 .clkdm_name = "l3_dss_clkdm",
Benoit Coussond63bd742011-01-27 11:17:03 +00001366 .mpu_irqs = omap44xx_dss_dispc_irqs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001367 .sdma_reqs = omap44xx_dss_dispc_sdma_reqs,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001368 .main_clk = "dss_dss_clk",
Benoit Coussond63bd742011-01-27 11:17:03 +00001369 .prcm = {
1370 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06001371 .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06001372 .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
Benoit Coussond63bd742011-01-27 11:17:03 +00001373 },
1374 },
Tomi Valkeinen3a23aaf2011-07-09 20:39:44 -06001375 .opt_clks = dss_dispc_opt_clks,
1376 .opt_clks_cnt = ARRAY_SIZE(dss_dispc_opt_clks),
Benoit Coussond63bd742011-01-27 11:17:03 +00001377 .slaves = omap44xx_dss_dispc_slaves,
1378 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_dispc_slaves),
1379 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1380};
1381
1382/*
1383 * 'dsi' class
1384 * display serial interface controller
1385 */
1386
1387static struct omap_hwmod_class_sysconfig omap44xx_dsi_sysc = {
1388 .rev_offs = 0x0000,
1389 .sysc_offs = 0x0010,
1390 .syss_offs = 0x0014,
1391 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
1392 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
1393 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
1394 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1395 .sysc_fields = &omap_hwmod_sysc_type1,
1396};
1397
1398static struct omap_hwmod_class omap44xx_dsi_hwmod_class = {
1399 .name = "dsi",
1400 .sysc = &omap44xx_dsi_sysc,
1401};
1402
1403/* dss_dsi1 */
1404static struct omap_hwmod omap44xx_dss_dsi1_hwmod;
1405static struct omap_hwmod_irq_info omap44xx_dss_dsi1_irqs[] = {
1406 { .irq = 53 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06001407 { .irq = -1 }
Benoit Coussond63bd742011-01-27 11:17:03 +00001408};
1409
1410static struct omap_hwmod_dma_info omap44xx_dss_dsi1_sdma_reqs[] = {
1411 { .dma_req = 74 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06001412 { .dma_req = -1 }
Benoit Coussond63bd742011-01-27 11:17:03 +00001413};
1414
1415static struct omap_hwmod_addr_space omap44xx_dss_dsi1_dma_addrs[] = {
1416 {
1417 .pa_start = 0x58004000,
1418 .pa_end = 0x580041ff,
1419 .flags = ADDR_TYPE_RT
1420 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001421 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001422};
1423
1424/* l3_main_2 -> dss_dsi1 */
1425static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_dsi1 = {
1426 .master = &omap44xx_l3_main_2_hwmod,
1427 .slave = &omap44xx_dss_dsi1_hwmod,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001428 .clk = "dss_fck",
Benoit Coussond63bd742011-01-27 11:17:03 +00001429 .addr = omap44xx_dss_dsi1_dma_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001430 .user = OCP_USER_SDMA,
1431};
1432
1433static struct omap_hwmod_addr_space omap44xx_dss_dsi1_addrs[] = {
1434 {
1435 .pa_start = 0x48044000,
1436 .pa_end = 0x480441ff,
1437 .flags = ADDR_TYPE_RT
1438 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001439 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001440};
1441
1442/* l4_per -> dss_dsi1 */
1443static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_dsi1 = {
1444 .master = &omap44xx_l4_per_hwmod,
1445 .slave = &omap44xx_dss_dsi1_hwmod,
1446 .clk = "l4_div_ck",
1447 .addr = omap44xx_dss_dsi1_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001448 .user = OCP_USER_MPU,
1449};
1450
1451/* dss_dsi1 slave ports */
1452static struct omap_hwmod_ocp_if *omap44xx_dss_dsi1_slaves[] = {
1453 &omap44xx_l3_main_2__dss_dsi1,
1454 &omap44xx_l4_per__dss_dsi1,
1455};
1456
Tomi Valkeinen3a23aaf2011-07-09 20:39:44 -06001457static struct omap_hwmod_opt_clk dss_dsi1_opt_clks[] = {
1458 { .role = "sys_clk", .clk = "dss_sys_clk" },
1459};
1460
Benoit Coussond63bd742011-01-27 11:17:03 +00001461static struct omap_hwmod omap44xx_dss_dsi1_hwmod = {
1462 .name = "dss_dsi1",
1463 .class = &omap44xx_dsi_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001464 .clkdm_name = "l3_dss_clkdm",
Benoit Coussond63bd742011-01-27 11:17:03 +00001465 .mpu_irqs = omap44xx_dss_dsi1_irqs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001466 .sdma_reqs = omap44xx_dss_dsi1_sdma_reqs,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001467 .main_clk = "dss_dss_clk",
Benoit Coussond63bd742011-01-27 11:17:03 +00001468 .prcm = {
1469 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06001470 .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06001471 .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
Benoit Coussond63bd742011-01-27 11:17:03 +00001472 },
1473 },
Tomi Valkeinen3a23aaf2011-07-09 20:39:44 -06001474 .opt_clks = dss_dsi1_opt_clks,
1475 .opt_clks_cnt = ARRAY_SIZE(dss_dsi1_opt_clks),
Benoit Coussond63bd742011-01-27 11:17:03 +00001476 .slaves = omap44xx_dss_dsi1_slaves,
1477 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_dsi1_slaves),
1478 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1479};
1480
1481/* dss_dsi2 */
1482static struct omap_hwmod omap44xx_dss_dsi2_hwmod;
1483static struct omap_hwmod_irq_info omap44xx_dss_dsi2_irqs[] = {
1484 { .irq = 84 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06001485 { .irq = -1 }
Benoit Coussond63bd742011-01-27 11:17:03 +00001486};
1487
1488static struct omap_hwmod_dma_info omap44xx_dss_dsi2_sdma_reqs[] = {
1489 { .dma_req = 83 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06001490 { .dma_req = -1 }
Benoit Coussond63bd742011-01-27 11:17:03 +00001491};
1492
1493static struct omap_hwmod_addr_space omap44xx_dss_dsi2_dma_addrs[] = {
1494 {
1495 .pa_start = 0x58005000,
1496 .pa_end = 0x580051ff,
1497 .flags = ADDR_TYPE_RT
1498 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001499 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001500};
1501
1502/* l3_main_2 -> dss_dsi2 */
1503static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_dsi2 = {
1504 .master = &omap44xx_l3_main_2_hwmod,
1505 .slave = &omap44xx_dss_dsi2_hwmod,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001506 .clk = "dss_fck",
Benoit Coussond63bd742011-01-27 11:17:03 +00001507 .addr = omap44xx_dss_dsi2_dma_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001508 .user = OCP_USER_SDMA,
1509};
1510
1511static struct omap_hwmod_addr_space omap44xx_dss_dsi2_addrs[] = {
1512 {
1513 .pa_start = 0x48045000,
1514 .pa_end = 0x480451ff,
1515 .flags = ADDR_TYPE_RT
1516 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001517 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001518};
1519
1520/* l4_per -> dss_dsi2 */
1521static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_dsi2 = {
1522 .master = &omap44xx_l4_per_hwmod,
1523 .slave = &omap44xx_dss_dsi2_hwmod,
1524 .clk = "l4_div_ck",
1525 .addr = omap44xx_dss_dsi2_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001526 .user = OCP_USER_MPU,
1527};
1528
1529/* dss_dsi2 slave ports */
1530static struct omap_hwmod_ocp_if *omap44xx_dss_dsi2_slaves[] = {
1531 &omap44xx_l3_main_2__dss_dsi2,
1532 &omap44xx_l4_per__dss_dsi2,
1533};
1534
Tomi Valkeinen3a23aaf2011-07-09 20:39:44 -06001535static struct omap_hwmod_opt_clk dss_dsi2_opt_clks[] = {
1536 { .role = "sys_clk", .clk = "dss_sys_clk" },
1537};
1538
Benoit Coussond63bd742011-01-27 11:17:03 +00001539static struct omap_hwmod omap44xx_dss_dsi2_hwmod = {
1540 .name = "dss_dsi2",
1541 .class = &omap44xx_dsi_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001542 .clkdm_name = "l3_dss_clkdm",
Benoit Coussond63bd742011-01-27 11:17:03 +00001543 .mpu_irqs = omap44xx_dss_dsi2_irqs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001544 .sdma_reqs = omap44xx_dss_dsi2_sdma_reqs,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001545 .main_clk = "dss_dss_clk",
Benoit Coussond63bd742011-01-27 11:17:03 +00001546 .prcm = {
1547 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06001548 .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06001549 .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
Benoit Coussond63bd742011-01-27 11:17:03 +00001550 },
1551 },
Tomi Valkeinen3a23aaf2011-07-09 20:39:44 -06001552 .opt_clks = dss_dsi2_opt_clks,
1553 .opt_clks_cnt = ARRAY_SIZE(dss_dsi2_opt_clks),
Benoit Coussond63bd742011-01-27 11:17:03 +00001554 .slaves = omap44xx_dss_dsi2_slaves,
1555 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_dsi2_slaves),
1556 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1557};
1558
1559/*
1560 * 'hdmi' class
1561 * hdmi controller
1562 */
1563
1564static struct omap_hwmod_class_sysconfig omap44xx_hdmi_sysc = {
1565 .rev_offs = 0x0000,
1566 .sysc_offs = 0x0010,
1567 .sysc_flags = (SYSC_HAS_RESET_STATUS | SYSC_HAS_SIDLEMODE |
1568 SYSC_HAS_SOFTRESET),
1569 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1570 SIDLE_SMART_WKUP),
1571 .sysc_fields = &omap_hwmod_sysc_type2,
1572};
1573
1574static struct omap_hwmod_class omap44xx_hdmi_hwmod_class = {
1575 .name = "hdmi",
1576 .sysc = &omap44xx_hdmi_sysc,
1577};
1578
1579/* dss_hdmi */
1580static struct omap_hwmod omap44xx_dss_hdmi_hwmod;
1581static struct omap_hwmod_irq_info omap44xx_dss_hdmi_irqs[] = {
1582 { .irq = 101 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06001583 { .irq = -1 }
Benoit Coussond63bd742011-01-27 11:17:03 +00001584};
1585
1586static struct omap_hwmod_dma_info omap44xx_dss_hdmi_sdma_reqs[] = {
1587 { .dma_req = 75 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06001588 { .dma_req = -1 }
Benoit Coussond63bd742011-01-27 11:17:03 +00001589};
1590
1591static struct omap_hwmod_addr_space omap44xx_dss_hdmi_dma_addrs[] = {
1592 {
1593 .pa_start = 0x58006000,
1594 .pa_end = 0x58006fff,
1595 .flags = ADDR_TYPE_RT
1596 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001597 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001598};
1599
1600/* l3_main_2 -> dss_hdmi */
1601static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_hdmi = {
1602 .master = &omap44xx_l3_main_2_hwmod,
1603 .slave = &omap44xx_dss_hdmi_hwmod,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001604 .clk = "dss_fck",
Benoit Coussond63bd742011-01-27 11:17:03 +00001605 .addr = omap44xx_dss_hdmi_dma_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001606 .user = OCP_USER_SDMA,
1607};
1608
1609static struct omap_hwmod_addr_space omap44xx_dss_hdmi_addrs[] = {
1610 {
1611 .pa_start = 0x48046000,
1612 .pa_end = 0x48046fff,
1613 .flags = ADDR_TYPE_RT
1614 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001615 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001616};
1617
1618/* l4_per -> dss_hdmi */
1619static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_hdmi = {
1620 .master = &omap44xx_l4_per_hwmod,
1621 .slave = &omap44xx_dss_hdmi_hwmod,
1622 .clk = "l4_div_ck",
1623 .addr = omap44xx_dss_hdmi_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001624 .user = OCP_USER_MPU,
1625};
1626
1627/* dss_hdmi slave ports */
1628static struct omap_hwmod_ocp_if *omap44xx_dss_hdmi_slaves[] = {
1629 &omap44xx_l3_main_2__dss_hdmi,
1630 &omap44xx_l4_per__dss_hdmi,
1631};
1632
Tomi Valkeinen3a23aaf2011-07-09 20:39:44 -06001633static struct omap_hwmod_opt_clk dss_hdmi_opt_clks[] = {
1634 { .role = "sys_clk", .clk = "dss_sys_clk" },
1635};
1636
Benoit Coussond63bd742011-01-27 11:17:03 +00001637static struct omap_hwmod omap44xx_dss_hdmi_hwmod = {
1638 .name = "dss_hdmi",
1639 .class = &omap44xx_hdmi_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001640 .clkdm_name = "l3_dss_clkdm",
Benoit Coussond63bd742011-01-27 11:17:03 +00001641 .mpu_irqs = omap44xx_dss_hdmi_irqs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001642 .sdma_reqs = omap44xx_dss_hdmi_sdma_reqs,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001643 .main_clk = "dss_dss_clk",
Benoit Coussond63bd742011-01-27 11:17:03 +00001644 .prcm = {
1645 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06001646 .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06001647 .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
Benoit Coussond63bd742011-01-27 11:17:03 +00001648 },
1649 },
Tomi Valkeinen3a23aaf2011-07-09 20:39:44 -06001650 .opt_clks = dss_hdmi_opt_clks,
1651 .opt_clks_cnt = ARRAY_SIZE(dss_hdmi_opt_clks),
Benoit Coussond63bd742011-01-27 11:17:03 +00001652 .slaves = omap44xx_dss_hdmi_slaves,
1653 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_hdmi_slaves),
1654 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1655};
1656
1657/*
1658 * 'rfbi' class
1659 * remote frame buffer interface
1660 */
1661
1662static struct omap_hwmod_class_sysconfig omap44xx_rfbi_sysc = {
1663 .rev_offs = 0x0000,
1664 .sysc_offs = 0x0010,
1665 .syss_offs = 0x0014,
1666 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_SIDLEMODE |
1667 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
1668 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1669 .sysc_fields = &omap_hwmod_sysc_type1,
1670};
1671
1672static struct omap_hwmod_class omap44xx_rfbi_hwmod_class = {
1673 .name = "rfbi",
1674 .sysc = &omap44xx_rfbi_sysc,
1675};
1676
1677/* dss_rfbi */
1678static struct omap_hwmod omap44xx_dss_rfbi_hwmod;
1679static struct omap_hwmod_dma_info omap44xx_dss_rfbi_sdma_reqs[] = {
1680 { .dma_req = 13 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06001681 { .dma_req = -1 }
Benoit Coussond63bd742011-01-27 11:17:03 +00001682};
1683
1684static struct omap_hwmod_addr_space omap44xx_dss_rfbi_dma_addrs[] = {
1685 {
1686 .pa_start = 0x58002000,
1687 .pa_end = 0x580020ff,
1688 .flags = ADDR_TYPE_RT
1689 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001690 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001691};
1692
1693/* l3_main_2 -> dss_rfbi */
1694static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_rfbi = {
1695 .master = &omap44xx_l3_main_2_hwmod,
1696 .slave = &omap44xx_dss_rfbi_hwmod,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001697 .clk = "dss_fck",
Benoit Coussond63bd742011-01-27 11:17:03 +00001698 .addr = omap44xx_dss_rfbi_dma_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001699 .user = OCP_USER_SDMA,
1700};
1701
1702static struct omap_hwmod_addr_space omap44xx_dss_rfbi_addrs[] = {
1703 {
1704 .pa_start = 0x48042000,
1705 .pa_end = 0x480420ff,
1706 .flags = ADDR_TYPE_RT
1707 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001708 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001709};
1710
1711/* l4_per -> dss_rfbi */
1712static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_rfbi = {
1713 .master = &omap44xx_l4_per_hwmod,
1714 .slave = &omap44xx_dss_rfbi_hwmod,
1715 .clk = "l4_div_ck",
1716 .addr = omap44xx_dss_rfbi_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001717 .user = OCP_USER_MPU,
1718};
1719
1720/* dss_rfbi slave ports */
1721static struct omap_hwmod_ocp_if *omap44xx_dss_rfbi_slaves[] = {
1722 &omap44xx_l3_main_2__dss_rfbi,
1723 &omap44xx_l4_per__dss_rfbi,
1724};
1725
Tomi Valkeinen3a23aaf2011-07-09 20:39:44 -06001726static struct omap_hwmod_opt_clk dss_rfbi_opt_clks[] = {
1727 { .role = "ick", .clk = "dss_fck" },
1728};
1729
Benoit Coussond63bd742011-01-27 11:17:03 +00001730static struct omap_hwmod omap44xx_dss_rfbi_hwmod = {
1731 .name = "dss_rfbi",
1732 .class = &omap44xx_rfbi_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001733 .clkdm_name = "l3_dss_clkdm",
Benoit Coussond63bd742011-01-27 11:17:03 +00001734 .sdma_reqs = omap44xx_dss_rfbi_sdma_reqs,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001735 .main_clk = "dss_dss_clk",
Benoit Coussond63bd742011-01-27 11:17:03 +00001736 .prcm = {
1737 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06001738 .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06001739 .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
Benoit Coussond63bd742011-01-27 11:17:03 +00001740 },
1741 },
Tomi Valkeinen3a23aaf2011-07-09 20:39:44 -06001742 .opt_clks = dss_rfbi_opt_clks,
1743 .opt_clks_cnt = ARRAY_SIZE(dss_rfbi_opt_clks),
Benoit Coussond63bd742011-01-27 11:17:03 +00001744 .slaves = omap44xx_dss_rfbi_slaves,
1745 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_rfbi_slaves),
1746 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1747};
1748
1749/*
1750 * 'venc' class
1751 * video encoder
1752 */
1753
1754static struct omap_hwmod_class omap44xx_venc_hwmod_class = {
1755 .name = "venc",
1756};
1757
1758/* dss_venc */
1759static struct omap_hwmod omap44xx_dss_venc_hwmod;
1760static struct omap_hwmod_addr_space omap44xx_dss_venc_dma_addrs[] = {
1761 {
1762 .pa_start = 0x58003000,
1763 .pa_end = 0x580030ff,
1764 .flags = ADDR_TYPE_RT
1765 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001766 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001767};
1768
1769/* l3_main_2 -> dss_venc */
1770static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_venc = {
1771 .master = &omap44xx_l3_main_2_hwmod,
1772 .slave = &omap44xx_dss_venc_hwmod,
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001773 .clk = "dss_fck",
Benoit Coussond63bd742011-01-27 11:17:03 +00001774 .addr = omap44xx_dss_venc_dma_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001775 .user = OCP_USER_SDMA,
1776};
1777
1778static struct omap_hwmod_addr_space omap44xx_dss_venc_addrs[] = {
1779 {
1780 .pa_start = 0x48043000,
1781 .pa_end = 0x480430ff,
1782 .flags = ADDR_TYPE_RT
1783 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001784 { }
Benoit Coussond63bd742011-01-27 11:17:03 +00001785};
1786
1787/* l4_per -> dss_venc */
1788static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_venc = {
1789 .master = &omap44xx_l4_per_hwmod,
1790 .slave = &omap44xx_dss_venc_hwmod,
1791 .clk = "l4_div_ck",
1792 .addr = omap44xx_dss_venc_addrs,
Benoit Coussond63bd742011-01-27 11:17:03 +00001793 .user = OCP_USER_MPU,
1794};
1795
1796/* dss_venc slave ports */
1797static struct omap_hwmod_ocp_if *omap44xx_dss_venc_slaves[] = {
1798 &omap44xx_l3_main_2__dss_venc,
1799 &omap44xx_l4_per__dss_venc,
1800};
1801
1802static struct omap_hwmod omap44xx_dss_venc_hwmod = {
1803 .name = "dss_venc",
1804 .class = &omap44xx_venc_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001805 .clkdm_name = "l3_dss_clkdm",
Tomi Valkeinenda7cdfa2011-07-09 20:39:45 -06001806 .main_clk = "dss_dss_clk",
Benoit Coussond63bd742011-01-27 11:17:03 +00001807 .prcm = {
1808 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06001809 .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06001810 .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
Benoit Coussond63bd742011-01-27 11:17:03 +00001811 },
1812 },
1813 .slaves = omap44xx_dss_venc_slaves,
1814 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_venc_slaves),
1815 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1816};
1817
1818/*
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001819 * 'gpio' class
1820 * general purpose io module
1821 */
1822
1823static struct omap_hwmod_class_sysconfig omap44xx_gpio_sysc = {
1824 .rev_offs = 0x0000,
1825 .sysc_offs = 0x0010,
1826 .syss_offs = 0x0114,
Benoit Cousson0cfe8752010-12-21 21:08:33 -07001827 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_ENAWAKEUP |
1828 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
1829 SYSS_HAS_RESET_STATUS),
Benoit Cousson7cffa6b2010-12-21 21:31:28 -07001830 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1831 SIDLE_SMART_WKUP),
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001832 .sysc_fields = &omap_hwmod_sysc_type1,
1833};
1834
1835static struct omap_hwmod_class omap44xx_gpio_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +00001836 .name = "gpio",
1837 .sysc = &omap44xx_gpio_sysc,
1838 .rev = 2,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001839};
1840
1841/* gpio dev_attr */
1842static struct omap_gpio_dev_attr gpio_dev_attr = {
Benoit Coussonfe134712010-12-23 22:30:32 +00001843 .bank_width = 32,
1844 .dbck_flag = true,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001845};
1846
1847/* gpio1 */
1848static struct omap_hwmod omap44xx_gpio1_hwmod;
1849static struct omap_hwmod_irq_info omap44xx_gpio1_irqs[] = {
1850 { .irq = 29 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06001851 { .irq = -1 }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001852};
1853
1854static struct omap_hwmod_addr_space omap44xx_gpio1_addrs[] = {
1855 {
1856 .pa_start = 0x4a310000,
1857 .pa_end = 0x4a3101ff,
1858 .flags = ADDR_TYPE_RT
1859 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001860 { }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001861};
1862
1863/* l4_wkup -> gpio1 */
1864static struct omap_hwmod_ocp_if omap44xx_l4_wkup__gpio1 = {
1865 .master = &omap44xx_l4_wkup_hwmod,
1866 .slave = &omap44xx_gpio1_hwmod,
Benoit Coussonb399bca2010-12-21 21:08:34 -07001867 .clk = "l4_wkup_clk_mux_ck",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001868 .addr = omap44xx_gpio1_addrs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001869 .user = OCP_USER_MPU | OCP_USER_SDMA,
1870};
1871
1872/* gpio1 slave ports */
1873static struct omap_hwmod_ocp_if *omap44xx_gpio1_slaves[] = {
1874 &omap44xx_l4_wkup__gpio1,
1875};
1876
1877static struct omap_hwmod_opt_clk gpio1_opt_clks[] = {
Benoit Coussonb399bca2010-12-21 21:08:34 -07001878 { .role = "dbclk", .clk = "gpio1_dbclk" },
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001879};
1880
1881static struct omap_hwmod omap44xx_gpio1_hwmod = {
1882 .name = "gpio1",
1883 .class = &omap44xx_gpio_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001884 .clkdm_name = "l4_wkup_clkdm",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001885 .mpu_irqs = omap44xx_gpio1_irqs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001886 .main_clk = "gpio1_ick",
1887 .prcm = {
1888 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06001889 .clkctrl_offs = OMAP4_CM_WKUP_GPIO1_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06001890 .context_offs = OMAP4_RM_WKUP_GPIO1_CONTEXT_OFFSET,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001891 },
1892 },
1893 .opt_clks = gpio1_opt_clks,
1894 .opt_clks_cnt = ARRAY_SIZE(gpio1_opt_clks),
1895 .dev_attr = &gpio_dev_attr,
1896 .slaves = omap44xx_gpio1_slaves,
1897 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio1_slaves),
1898 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1899};
1900
1901/* gpio2 */
1902static struct omap_hwmod omap44xx_gpio2_hwmod;
1903static struct omap_hwmod_irq_info omap44xx_gpio2_irqs[] = {
1904 { .irq = 30 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06001905 { .irq = -1 }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001906};
1907
1908static struct omap_hwmod_addr_space omap44xx_gpio2_addrs[] = {
1909 {
1910 .pa_start = 0x48055000,
1911 .pa_end = 0x480551ff,
1912 .flags = ADDR_TYPE_RT
1913 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001914 { }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001915};
1916
1917/* l4_per -> gpio2 */
1918static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio2 = {
1919 .master = &omap44xx_l4_per_hwmod,
1920 .slave = &omap44xx_gpio2_hwmod,
Benoit Coussonb399bca2010-12-21 21:08:34 -07001921 .clk = "l4_div_ck",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001922 .addr = omap44xx_gpio2_addrs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001923 .user = OCP_USER_MPU | OCP_USER_SDMA,
1924};
1925
1926/* gpio2 slave ports */
1927static struct omap_hwmod_ocp_if *omap44xx_gpio2_slaves[] = {
1928 &omap44xx_l4_per__gpio2,
1929};
1930
1931static struct omap_hwmod_opt_clk gpio2_opt_clks[] = {
Benoit Coussonb399bca2010-12-21 21:08:34 -07001932 { .role = "dbclk", .clk = "gpio2_dbclk" },
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001933};
1934
1935static struct omap_hwmod omap44xx_gpio2_hwmod = {
1936 .name = "gpio2",
1937 .class = &omap44xx_gpio_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001938 .clkdm_name = "l4_per_clkdm",
Benoit Coussonb399bca2010-12-21 21:08:34 -07001939 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001940 .mpu_irqs = omap44xx_gpio2_irqs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001941 .main_clk = "gpio2_ick",
1942 .prcm = {
1943 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06001944 .clkctrl_offs = OMAP4_CM_L4PER_GPIO2_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06001945 .context_offs = OMAP4_RM_L4PER_GPIO2_CONTEXT_OFFSET,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001946 },
1947 },
1948 .opt_clks = gpio2_opt_clks,
1949 .opt_clks_cnt = ARRAY_SIZE(gpio2_opt_clks),
1950 .dev_attr = &gpio_dev_attr,
1951 .slaves = omap44xx_gpio2_slaves,
1952 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio2_slaves),
1953 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1954};
1955
1956/* gpio3 */
1957static struct omap_hwmod omap44xx_gpio3_hwmod;
1958static struct omap_hwmod_irq_info omap44xx_gpio3_irqs[] = {
1959 { .irq = 31 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06001960 { .irq = -1 }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001961};
1962
1963static struct omap_hwmod_addr_space omap44xx_gpio3_addrs[] = {
1964 {
1965 .pa_start = 0x48057000,
1966 .pa_end = 0x480571ff,
1967 .flags = ADDR_TYPE_RT
1968 },
Paul Walmsley78183f32011-07-09 19:14:05 -06001969 { }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001970};
1971
1972/* l4_per -> gpio3 */
1973static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio3 = {
1974 .master = &omap44xx_l4_per_hwmod,
1975 .slave = &omap44xx_gpio3_hwmod,
Benoit Coussonb399bca2010-12-21 21:08:34 -07001976 .clk = "l4_div_ck",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001977 .addr = omap44xx_gpio3_addrs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001978 .user = OCP_USER_MPU | OCP_USER_SDMA,
1979};
1980
1981/* gpio3 slave ports */
1982static struct omap_hwmod_ocp_if *omap44xx_gpio3_slaves[] = {
1983 &omap44xx_l4_per__gpio3,
1984};
1985
1986static struct omap_hwmod_opt_clk gpio3_opt_clks[] = {
Benoit Coussonb399bca2010-12-21 21:08:34 -07001987 { .role = "dbclk", .clk = "gpio3_dbclk" },
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001988};
1989
1990static struct omap_hwmod omap44xx_gpio3_hwmod = {
1991 .name = "gpio3",
1992 .class = &omap44xx_gpio_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06001993 .clkdm_name = "l4_per_clkdm",
Benoit Coussonb399bca2010-12-21 21:08:34 -07001994 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001995 .mpu_irqs = omap44xx_gpio3_irqs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07001996 .main_clk = "gpio3_ick",
1997 .prcm = {
1998 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06001999 .clkctrl_offs = OMAP4_CM_L4PER_GPIO3_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06002000 .context_offs = OMAP4_RM_L4PER_GPIO3_CONTEXT_OFFSET,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002001 },
2002 },
2003 .opt_clks = gpio3_opt_clks,
2004 .opt_clks_cnt = ARRAY_SIZE(gpio3_opt_clks),
2005 .dev_attr = &gpio_dev_attr,
2006 .slaves = omap44xx_gpio3_slaves,
2007 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio3_slaves),
2008 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2009};
2010
2011/* gpio4 */
2012static struct omap_hwmod omap44xx_gpio4_hwmod;
2013static struct omap_hwmod_irq_info omap44xx_gpio4_irqs[] = {
2014 { .irq = 32 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002015 { .irq = -1 }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002016};
2017
2018static struct omap_hwmod_addr_space omap44xx_gpio4_addrs[] = {
2019 {
2020 .pa_start = 0x48059000,
2021 .pa_end = 0x480591ff,
2022 .flags = ADDR_TYPE_RT
2023 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002024 { }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002025};
2026
2027/* l4_per -> gpio4 */
2028static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio4 = {
2029 .master = &omap44xx_l4_per_hwmod,
2030 .slave = &omap44xx_gpio4_hwmod,
Benoit Coussonb399bca2010-12-21 21:08:34 -07002031 .clk = "l4_div_ck",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002032 .addr = omap44xx_gpio4_addrs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002033 .user = OCP_USER_MPU | OCP_USER_SDMA,
2034};
2035
2036/* gpio4 slave ports */
2037static struct omap_hwmod_ocp_if *omap44xx_gpio4_slaves[] = {
2038 &omap44xx_l4_per__gpio4,
2039};
2040
2041static struct omap_hwmod_opt_clk gpio4_opt_clks[] = {
Benoit Coussonb399bca2010-12-21 21:08:34 -07002042 { .role = "dbclk", .clk = "gpio4_dbclk" },
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002043};
2044
2045static struct omap_hwmod omap44xx_gpio4_hwmod = {
2046 .name = "gpio4",
2047 .class = &omap44xx_gpio_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002048 .clkdm_name = "l4_per_clkdm",
Benoit Coussonb399bca2010-12-21 21:08:34 -07002049 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002050 .mpu_irqs = omap44xx_gpio4_irqs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002051 .main_clk = "gpio4_ick",
2052 .prcm = {
2053 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06002054 .clkctrl_offs = OMAP4_CM_L4PER_GPIO4_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06002055 .context_offs = OMAP4_RM_L4PER_GPIO4_CONTEXT_OFFSET,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002056 },
2057 },
2058 .opt_clks = gpio4_opt_clks,
2059 .opt_clks_cnt = ARRAY_SIZE(gpio4_opt_clks),
2060 .dev_attr = &gpio_dev_attr,
2061 .slaves = omap44xx_gpio4_slaves,
2062 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio4_slaves),
2063 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2064};
2065
2066/* gpio5 */
2067static struct omap_hwmod omap44xx_gpio5_hwmod;
2068static struct omap_hwmod_irq_info omap44xx_gpio5_irqs[] = {
2069 { .irq = 33 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002070 { .irq = -1 }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002071};
2072
2073static struct omap_hwmod_addr_space omap44xx_gpio5_addrs[] = {
2074 {
2075 .pa_start = 0x4805b000,
2076 .pa_end = 0x4805b1ff,
2077 .flags = ADDR_TYPE_RT
2078 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002079 { }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002080};
2081
2082/* l4_per -> gpio5 */
2083static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio5 = {
2084 .master = &omap44xx_l4_per_hwmod,
2085 .slave = &omap44xx_gpio5_hwmod,
Benoit Coussonb399bca2010-12-21 21:08:34 -07002086 .clk = "l4_div_ck",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002087 .addr = omap44xx_gpio5_addrs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002088 .user = OCP_USER_MPU | OCP_USER_SDMA,
2089};
2090
2091/* gpio5 slave ports */
2092static struct omap_hwmod_ocp_if *omap44xx_gpio5_slaves[] = {
2093 &omap44xx_l4_per__gpio5,
2094};
2095
2096static struct omap_hwmod_opt_clk gpio5_opt_clks[] = {
Benoit Coussonb399bca2010-12-21 21:08:34 -07002097 { .role = "dbclk", .clk = "gpio5_dbclk" },
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002098};
2099
2100static struct omap_hwmod omap44xx_gpio5_hwmod = {
2101 .name = "gpio5",
2102 .class = &omap44xx_gpio_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002103 .clkdm_name = "l4_per_clkdm",
Benoit Coussonb399bca2010-12-21 21:08:34 -07002104 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002105 .mpu_irqs = omap44xx_gpio5_irqs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002106 .main_clk = "gpio5_ick",
2107 .prcm = {
2108 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06002109 .clkctrl_offs = OMAP4_CM_L4PER_GPIO5_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06002110 .context_offs = OMAP4_RM_L4PER_GPIO5_CONTEXT_OFFSET,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002111 },
2112 },
2113 .opt_clks = gpio5_opt_clks,
2114 .opt_clks_cnt = ARRAY_SIZE(gpio5_opt_clks),
2115 .dev_attr = &gpio_dev_attr,
2116 .slaves = omap44xx_gpio5_slaves,
2117 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio5_slaves),
2118 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2119};
2120
2121/* gpio6 */
2122static struct omap_hwmod omap44xx_gpio6_hwmod;
2123static struct omap_hwmod_irq_info omap44xx_gpio6_irqs[] = {
2124 { .irq = 34 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002125 { .irq = -1 }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002126};
2127
2128static struct omap_hwmod_addr_space omap44xx_gpio6_addrs[] = {
2129 {
2130 .pa_start = 0x4805d000,
2131 .pa_end = 0x4805d1ff,
2132 .flags = ADDR_TYPE_RT
2133 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002134 { }
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002135};
2136
2137/* l4_per -> gpio6 */
2138static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio6 = {
2139 .master = &omap44xx_l4_per_hwmod,
2140 .slave = &omap44xx_gpio6_hwmod,
Benoit Coussonb399bca2010-12-21 21:08:34 -07002141 .clk = "l4_div_ck",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002142 .addr = omap44xx_gpio6_addrs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002143 .user = OCP_USER_MPU | OCP_USER_SDMA,
2144};
2145
2146/* gpio6 slave ports */
2147static struct omap_hwmod_ocp_if *omap44xx_gpio6_slaves[] = {
2148 &omap44xx_l4_per__gpio6,
2149};
2150
2151static struct omap_hwmod_opt_clk gpio6_opt_clks[] = {
Benoit Coussonb399bca2010-12-21 21:08:34 -07002152 { .role = "dbclk", .clk = "gpio6_dbclk" },
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002153};
2154
2155static struct omap_hwmod omap44xx_gpio6_hwmod = {
2156 .name = "gpio6",
2157 .class = &omap44xx_gpio_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002158 .clkdm_name = "l4_per_clkdm",
Benoit Coussonb399bca2010-12-21 21:08:34 -07002159 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002160 .mpu_irqs = omap44xx_gpio6_irqs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002161 .main_clk = "gpio6_ick",
2162 .prcm = {
2163 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06002164 .clkctrl_offs = OMAP4_CM_L4PER_GPIO6_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06002165 .context_offs = OMAP4_RM_L4PER_GPIO6_CONTEXT_OFFSET,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002166 },
2167 },
2168 .opt_clks = gpio6_opt_clks,
2169 .opt_clks_cnt = ARRAY_SIZE(gpio6_opt_clks),
2170 .dev_attr = &gpio_dev_attr,
2171 .slaves = omap44xx_gpio6_slaves,
2172 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio6_slaves),
2173 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2174};
2175
2176/*
Benoit Cousson407a6882011-02-15 22:39:48 +01002177 * 'hsi' class
2178 * mipi high-speed synchronous serial interface (multichannel and full-duplex
2179 * serial if)
2180 */
2181
2182static struct omap_hwmod_class_sysconfig omap44xx_hsi_sysc = {
2183 .rev_offs = 0x0000,
2184 .sysc_offs = 0x0010,
2185 .syss_offs = 0x0014,
2186 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_EMUFREE |
2187 SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE |
2188 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
2189 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2190 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
Benoit Coussonc614ebf2011-07-01 22:54:01 +02002191 MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
Benoit Cousson407a6882011-02-15 22:39:48 +01002192 .sysc_fields = &omap_hwmod_sysc_type1,
2193};
2194
2195static struct omap_hwmod_class omap44xx_hsi_hwmod_class = {
2196 .name = "hsi",
2197 .sysc = &omap44xx_hsi_sysc,
2198};
2199
2200/* hsi */
2201static struct omap_hwmod_irq_info omap44xx_hsi_irqs[] = {
2202 { .name = "mpu_p1", .irq = 67 + OMAP44XX_IRQ_GIC_START },
2203 { .name = "mpu_p2", .irq = 68 + OMAP44XX_IRQ_GIC_START },
2204 { .name = "mpu_dma", .irq = 71 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002205 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01002206};
2207
2208/* hsi master ports */
2209static struct omap_hwmod_ocp_if *omap44xx_hsi_masters[] = {
2210 &omap44xx_hsi__l3_main_2,
2211};
2212
2213static struct omap_hwmod_addr_space omap44xx_hsi_addrs[] = {
2214 {
2215 .pa_start = 0x4a058000,
2216 .pa_end = 0x4a05bfff,
2217 .flags = ADDR_TYPE_RT
2218 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002219 { }
Benoit Cousson407a6882011-02-15 22:39:48 +01002220};
2221
2222/* l4_cfg -> hsi */
2223static struct omap_hwmod_ocp_if omap44xx_l4_cfg__hsi = {
2224 .master = &omap44xx_l4_cfg_hwmod,
2225 .slave = &omap44xx_hsi_hwmod,
2226 .clk = "l4_div_ck",
2227 .addr = omap44xx_hsi_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +01002228 .user = OCP_USER_MPU | OCP_USER_SDMA,
2229};
2230
2231/* hsi slave ports */
2232static struct omap_hwmod_ocp_if *omap44xx_hsi_slaves[] = {
2233 &omap44xx_l4_cfg__hsi,
2234};
2235
2236static struct omap_hwmod omap44xx_hsi_hwmod = {
2237 .name = "hsi",
2238 .class = &omap44xx_hsi_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002239 .clkdm_name = "l3_init_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01002240 .mpu_irqs = omap44xx_hsi_irqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01002241 .main_clk = "hsi_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06002242 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01002243 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06002244 .clkctrl_offs = OMAP4_CM_L3INIT_HSI_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06002245 .context_offs = OMAP4_RM_L3INIT_HSI_CONTEXT_OFFSET,
Benoit Cousson407a6882011-02-15 22:39:48 +01002246 },
2247 },
2248 .slaves = omap44xx_hsi_slaves,
2249 .slaves_cnt = ARRAY_SIZE(omap44xx_hsi_slaves),
2250 .masters = omap44xx_hsi_masters,
2251 .masters_cnt = ARRAY_SIZE(omap44xx_hsi_masters),
2252 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2253};
2254
2255/*
Benoit Coussonf7764712010-09-21 19:37:14 +05302256 * 'i2c' class
2257 * multimaster high-speed i2c controller
2258 */
2259
2260static struct omap_hwmod_class_sysconfig omap44xx_i2c_sysc = {
2261 .sysc_offs = 0x0010,
2262 .syss_offs = 0x0090,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07002263 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
2264 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
Benoit Cousson0cfe8752010-12-21 21:08:33 -07002265 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
Benoit Cousson7cffa6b2010-12-21 21:31:28 -07002266 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2267 SIDLE_SMART_WKUP),
Benoit Coussonf7764712010-09-21 19:37:14 +05302268 .sysc_fields = &omap_hwmod_sysc_type1,
2269};
2270
2271static struct omap_hwmod_class omap44xx_i2c_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +00002272 .name = "i2c",
2273 .sysc = &omap44xx_i2c_sysc,
Andy Greendb791a72011-07-10 05:27:15 -06002274 .rev = OMAP_I2C_IP_VERSION_2,
Avinash.H.M6d3c55f2011-07-10 05:27:16 -06002275 .reset = &omap_i2c_reset,
Benoit Coussonf7764712010-09-21 19:37:14 +05302276};
2277
Andy Green4d4441a2011-07-10 05:27:16 -06002278static struct omap_i2c_dev_attr i2c_dev_attr = {
2279 .flags = OMAP_I2C_FLAG_BUS_SHIFT_NONE,
2280};
2281
Benoit Coussonf7764712010-09-21 19:37:14 +05302282/* i2c1 */
2283static struct omap_hwmod omap44xx_i2c1_hwmod;
2284static struct omap_hwmod_irq_info omap44xx_i2c1_irqs[] = {
2285 { .irq = 56 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002286 { .irq = -1 }
Benoit Coussonf7764712010-09-21 19:37:14 +05302287};
2288
2289static struct omap_hwmod_dma_info omap44xx_i2c1_sdma_reqs[] = {
2290 { .name = "tx", .dma_req = 26 + OMAP44XX_DMA_REQ_START },
2291 { .name = "rx", .dma_req = 27 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06002292 { .dma_req = -1 }
Benoit Coussonf7764712010-09-21 19:37:14 +05302293};
2294
2295static struct omap_hwmod_addr_space omap44xx_i2c1_addrs[] = {
2296 {
2297 .pa_start = 0x48070000,
2298 .pa_end = 0x480700ff,
2299 .flags = ADDR_TYPE_RT
2300 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002301 { }
Benoit Coussonf7764712010-09-21 19:37:14 +05302302};
2303
2304/* l4_per -> i2c1 */
2305static struct omap_hwmod_ocp_if omap44xx_l4_per__i2c1 = {
2306 .master = &omap44xx_l4_per_hwmod,
2307 .slave = &omap44xx_i2c1_hwmod,
2308 .clk = "l4_div_ck",
2309 .addr = omap44xx_i2c1_addrs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302310 .user = OCP_USER_MPU | OCP_USER_SDMA,
2311};
2312
2313/* i2c1 slave ports */
2314static struct omap_hwmod_ocp_if *omap44xx_i2c1_slaves[] = {
2315 &omap44xx_l4_per__i2c1,
2316};
2317
2318static struct omap_hwmod omap44xx_i2c1_hwmod = {
2319 .name = "i2c1",
2320 .class = &omap44xx_i2c_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002321 .clkdm_name = "l4_per_clkdm",
Avinash.H.M6d3c55f2011-07-10 05:27:16 -06002322 .flags = HWMOD_16BIT_REG,
Benoit Coussonf7764712010-09-21 19:37:14 +05302323 .mpu_irqs = omap44xx_i2c1_irqs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302324 .sdma_reqs = omap44xx_i2c1_sdma_reqs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302325 .main_clk = "i2c1_fck",
2326 .prcm = {
2327 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06002328 .clkctrl_offs = OMAP4_CM_L4PER_I2C1_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06002329 .context_offs = OMAP4_RM_L4PER_I2C1_CONTEXT_OFFSET,
Benoit Coussonf7764712010-09-21 19:37:14 +05302330 },
2331 },
2332 .slaves = omap44xx_i2c1_slaves,
2333 .slaves_cnt = ARRAY_SIZE(omap44xx_i2c1_slaves),
Andy Green4d4441a2011-07-10 05:27:16 -06002334 .dev_attr = &i2c_dev_attr,
Benoit Coussonf7764712010-09-21 19:37:14 +05302335 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2336};
2337
2338/* i2c2 */
2339static struct omap_hwmod omap44xx_i2c2_hwmod;
2340static struct omap_hwmod_irq_info omap44xx_i2c2_irqs[] = {
2341 { .irq = 57 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002342 { .irq = -1 }
Benoit Coussonf7764712010-09-21 19:37:14 +05302343};
2344
2345static struct omap_hwmod_dma_info omap44xx_i2c2_sdma_reqs[] = {
2346 { .name = "tx", .dma_req = 28 + OMAP44XX_DMA_REQ_START },
2347 { .name = "rx", .dma_req = 29 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06002348 { .dma_req = -1 }
Benoit Coussonf7764712010-09-21 19:37:14 +05302349};
2350
2351static struct omap_hwmod_addr_space omap44xx_i2c2_addrs[] = {
2352 {
2353 .pa_start = 0x48072000,
2354 .pa_end = 0x480720ff,
2355 .flags = ADDR_TYPE_RT
2356 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002357 { }
Benoit Coussonf7764712010-09-21 19:37:14 +05302358};
2359
2360/* l4_per -> i2c2 */
2361static struct omap_hwmod_ocp_if omap44xx_l4_per__i2c2 = {
2362 .master = &omap44xx_l4_per_hwmod,
2363 .slave = &omap44xx_i2c2_hwmod,
2364 .clk = "l4_div_ck",
2365 .addr = omap44xx_i2c2_addrs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302366 .user = OCP_USER_MPU | OCP_USER_SDMA,
2367};
2368
2369/* i2c2 slave ports */
2370static struct omap_hwmod_ocp_if *omap44xx_i2c2_slaves[] = {
2371 &omap44xx_l4_per__i2c2,
2372};
2373
2374static struct omap_hwmod omap44xx_i2c2_hwmod = {
2375 .name = "i2c2",
2376 .class = &omap44xx_i2c_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002377 .clkdm_name = "l4_per_clkdm",
Avinash.H.M6d3c55f2011-07-10 05:27:16 -06002378 .flags = HWMOD_16BIT_REG,
Benoit Coussonf7764712010-09-21 19:37:14 +05302379 .mpu_irqs = omap44xx_i2c2_irqs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302380 .sdma_reqs = omap44xx_i2c2_sdma_reqs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302381 .main_clk = "i2c2_fck",
2382 .prcm = {
2383 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06002384 .clkctrl_offs = OMAP4_CM_L4PER_I2C2_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06002385 .context_offs = OMAP4_RM_L4PER_I2C2_CONTEXT_OFFSET,
Benoit Coussonf7764712010-09-21 19:37:14 +05302386 },
2387 },
2388 .slaves = omap44xx_i2c2_slaves,
2389 .slaves_cnt = ARRAY_SIZE(omap44xx_i2c2_slaves),
Andy Green4d4441a2011-07-10 05:27:16 -06002390 .dev_attr = &i2c_dev_attr,
Benoit Coussonf7764712010-09-21 19:37:14 +05302391 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2392};
2393
2394/* i2c3 */
2395static struct omap_hwmod omap44xx_i2c3_hwmod;
2396static struct omap_hwmod_irq_info omap44xx_i2c3_irqs[] = {
2397 { .irq = 61 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002398 { .irq = -1 }
Benoit Coussonf7764712010-09-21 19:37:14 +05302399};
2400
2401static struct omap_hwmod_dma_info omap44xx_i2c3_sdma_reqs[] = {
2402 { .name = "tx", .dma_req = 24 + OMAP44XX_DMA_REQ_START },
2403 { .name = "rx", .dma_req = 25 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06002404 { .dma_req = -1 }
Benoit Coussonf7764712010-09-21 19:37:14 +05302405};
2406
2407static struct omap_hwmod_addr_space omap44xx_i2c3_addrs[] = {
2408 {
2409 .pa_start = 0x48060000,
2410 .pa_end = 0x480600ff,
2411 .flags = ADDR_TYPE_RT
2412 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002413 { }
Benoit Coussonf7764712010-09-21 19:37:14 +05302414};
2415
2416/* l4_per -> i2c3 */
2417static struct omap_hwmod_ocp_if omap44xx_l4_per__i2c3 = {
2418 .master = &omap44xx_l4_per_hwmod,
2419 .slave = &omap44xx_i2c3_hwmod,
2420 .clk = "l4_div_ck",
2421 .addr = omap44xx_i2c3_addrs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302422 .user = OCP_USER_MPU | OCP_USER_SDMA,
2423};
2424
2425/* i2c3 slave ports */
2426static struct omap_hwmod_ocp_if *omap44xx_i2c3_slaves[] = {
2427 &omap44xx_l4_per__i2c3,
2428};
2429
2430static struct omap_hwmod omap44xx_i2c3_hwmod = {
2431 .name = "i2c3",
2432 .class = &omap44xx_i2c_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002433 .clkdm_name = "l4_per_clkdm",
Avinash.H.M6d3c55f2011-07-10 05:27:16 -06002434 .flags = HWMOD_16BIT_REG,
Benoit Coussonf7764712010-09-21 19:37:14 +05302435 .mpu_irqs = omap44xx_i2c3_irqs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302436 .sdma_reqs = omap44xx_i2c3_sdma_reqs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302437 .main_clk = "i2c3_fck",
2438 .prcm = {
2439 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06002440 .clkctrl_offs = OMAP4_CM_L4PER_I2C3_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06002441 .context_offs = OMAP4_RM_L4PER_I2C3_CONTEXT_OFFSET,
Benoit Coussonf7764712010-09-21 19:37:14 +05302442 },
2443 },
2444 .slaves = omap44xx_i2c3_slaves,
2445 .slaves_cnt = ARRAY_SIZE(omap44xx_i2c3_slaves),
Andy Green4d4441a2011-07-10 05:27:16 -06002446 .dev_attr = &i2c_dev_attr,
Benoit Coussonf7764712010-09-21 19:37:14 +05302447 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2448};
2449
2450/* i2c4 */
2451static struct omap_hwmod omap44xx_i2c4_hwmod;
2452static struct omap_hwmod_irq_info omap44xx_i2c4_irqs[] = {
2453 { .irq = 62 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002454 { .irq = -1 }
Benoit Coussonf7764712010-09-21 19:37:14 +05302455};
2456
2457static struct omap_hwmod_dma_info omap44xx_i2c4_sdma_reqs[] = {
2458 { .name = "tx", .dma_req = 123 + OMAP44XX_DMA_REQ_START },
2459 { .name = "rx", .dma_req = 124 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06002460 { .dma_req = -1 }
Benoit Coussonf7764712010-09-21 19:37:14 +05302461};
2462
2463static struct omap_hwmod_addr_space omap44xx_i2c4_addrs[] = {
2464 {
2465 .pa_start = 0x48350000,
2466 .pa_end = 0x483500ff,
2467 .flags = ADDR_TYPE_RT
2468 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002469 { }
Benoit Coussonf7764712010-09-21 19:37:14 +05302470};
2471
2472/* l4_per -> i2c4 */
2473static struct omap_hwmod_ocp_if omap44xx_l4_per__i2c4 = {
2474 .master = &omap44xx_l4_per_hwmod,
2475 .slave = &omap44xx_i2c4_hwmod,
2476 .clk = "l4_div_ck",
2477 .addr = omap44xx_i2c4_addrs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302478 .user = OCP_USER_MPU | OCP_USER_SDMA,
2479};
2480
2481/* i2c4 slave ports */
2482static struct omap_hwmod_ocp_if *omap44xx_i2c4_slaves[] = {
2483 &omap44xx_l4_per__i2c4,
2484};
2485
2486static struct omap_hwmod omap44xx_i2c4_hwmod = {
2487 .name = "i2c4",
2488 .class = &omap44xx_i2c_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002489 .clkdm_name = "l4_per_clkdm",
Avinash.H.M6d3c55f2011-07-10 05:27:16 -06002490 .flags = HWMOD_16BIT_REG,
Benoit Coussonf7764712010-09-21 19:37:14 +05302491 .mpu_irqs = omap44xx_i2c4_irqs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302492 .sdma_reqs = omap44xx_i2c4_sdma_reqs,
Benoit Coussonf7764712010-09-21 19:37:14 +05302493 .main_clk = "i2c4_fck",
2494 .prcm = {
2495 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06002496 .clkctrl_offs = OMAP4_CM_L4PER_I2C4_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06002497 .context_offs = OMAP4_RM_L4PER_I2C4_CONTEXT_OFFSET,
Benoit Coussonf7764712010-09-21 19:37:14 +05302498 },
2499 },
2500 .slaves = omap44xx_i2c4_slaves,
2501 .slaves_cnt = ARRAY_SIZE(omap44xx_i2c4_slaves),
Andy Green4d4441a2011-07-10 05:27:16 -06002502 .dev_attr = &i2c_dev_attr,
Benoit Coussonf7764712010-09-21 19:37:14 +05302503 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2504};
2505
2506/*
Benoit Cousson407a6882011-02-15 22:39:48 +01002507 * 'ipu' class
2508 * imaging processor unit
2509 */
2510
2511static struct omap_hwmod_class omap44xx_ipu_hwmod_class = {
2512 .name = "ipu",
2513};
2514
2515/* ipu */
2516static struct omap_hwmod_irq_info omap44xx_ipu_irqs[] = {
2517 { .irq = 100 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002518 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01002519};
2520
2521static struct omap_hwmod_rst_info omap44xx_ipu_c0_resets[] = {
2522 { .name = "cpu0", .rst_shift = 0 },
2523};
2524
2525static struct omap_hwmod_rst_info omap44xx_ipu_c1_resets[] = {
2526 { .name = "cpu1", .rst_shift = 1 },
2527};
2528
2529static struct omap_hwmod_rst_info omap44xx_ipu_resets[] = {
2530 { .name = "mmu_cache", .rst_shift = 2 },
2531};
2532
2533/* ipu master ports */
2534static struct omap_hwmod_ocp_if *omap44xx_ipu_masters[] = {
2535 &omap44xx_ipu__l3_main_2,
2536};
2537
2538/* l3_main_2 -> ipu */
2539static struct omap_hwmod_ocp_if omap44xx_l3_main_2__ipu = {
2540 .master = &omap44xx_l3_main_2_hwmod,
2541 .slave = &omap44xx_ipu_hwmod,
2542 .clk = "l3_div_ck",
2543 .user = OCP_USER_MPU | OCP_USER_SDMA,
2544};
2545
2546/* ipu slave ports */
2547static struct omap_hwmod_ocp_if *omap44xx_ipu_slaves[] = {
2548 &omap44xx_l3_main_2__ipu,
2549};
2550
2551/* Pseudo hwmod for reset control purpose only */
2552static struct omap_hwmod omap44xx_ipu_c0_hwmod = {
2553 .name = "ipu_c0",
2554 .class = &omap44xx_ipu_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002555 .clkdm_name = "ducati_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01002556 .flags = HWMOD_INIT_NO_RESET,
2557 .rst_lines = omap44xx_ipu_c0_resets,
2558 .rst_lines_cnt = ARRAY_SIZE(omap44xx_ipu_c0_resets),
Benoit Cousson00fe6102011-07-09 19:14:28 -06002559 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01002560 .omap4 = {
Benoit Coussoneaac3292011-07-10 05:56:31 -06002561 .rstctrl_offs = OMAP4_RM_DUCATI_RSTCTRL_OFFSET,
Benoit Cousson407a6882011-02-15 22:39:48 +01002562 },
2563 },
2564 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2565};
2566
2567/* Pseudo hwmod for reset control purpose only */
2568static struct omap_hwmod omap44xx_ipu_c1_hwmod = {
2569 .name = "ipu_c1",
2570 .class = &omap44xx_ipu_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002571 .clkdm_name = "ducati_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01002572 .flags = HWMOD_INIT_NO_RESET,
2573 .rst_lines = omap44xx_ipu_c1_resets,
2574 .rst_lines_cnt = ARRAY_SIZE(omap44xx_ipu_c1_resets),
Benoit Cousson00fe6102011-07-09 19:14:28 -06002575 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01002576 .omap4 = {
Benoit Coussoneaac3292011-07-10 05:56:31 -06002577 .rstctrl_offs = OMAP4_RM_DUCATI_RSTCTRL_OFFSET,
Benoit Cousson407a6882011-02-15 22:39:48 +01002578 },
2579 },
2580 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2581};
2582
2583static struct omap_hwmod omap44xx_ipu_hwmod = {
2584 .name = "ipu",
2585 .class = &omap44xx_ipu_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002586 .clkdm_name = "ducati_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01002587 .mpu_irqs = omap44xx_ipu_irqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01002588 .rst_lines = omap44xx_ipu_resets,
2589 .rst_lines_cnt = ARRAY_SIZE(omap44xx_ipu_resets),
2590 .main_clk = "ipu_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06002591 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01002592 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06002593 .clkctrl_offs = OMAP4_CM_DUCATI_DUCATI_CLKCTRL_OFFSET,
Benoit Coussoneaac3292011-07-10 05:56:31 -06002594 .rstctrl_offs = OMAP4_RM_DUCATI_RSTCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06002595 .context_offs = OMAP4_RM_DUCATI_DUCATI_CONTEXT_OFFSET,
Benoit Cousson407a6882011-02-15 22:39:48 +01002596 },
2597 },
2598 .slaves = omap44xx_ipu_slaves,
2599 .slaves_cnt = ARRAY_SIZE(omap44xx_ipu_slaves),
2600 .masters = omap44xx_ipu_masters,
2601 .masters_cnt = ARRAY_SIZE(omap44xx_ipu_masters),
2602 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2603};
2604
2605/*
2606 * 'iss' class
2607 * external images sensor pixel data processor
2608 */
2609
2610static struct omap_hwmod_class_sysconfig omap44xx_iss_sysc = {
2611 .rev_offs = 0x0000,
2612 .sysc_offs = 0x0010,
2613 .sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_RESET_STATUS |
2614 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
2615 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2616 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
Benoit Coussonc614ebf2011-07-01 22:54:01 +02002617 MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
Benoit Cousson407a6882011-02-15 22:39:48 +01002618 .sysc_fields = &omap_hwmod_sysc_type2,
2619};
2620
2621static struct omap_hwmod_class omap44xx_iss_hwmod_class = {
2622 .name = "iss",
2623 .sysc = &omap44xx_iss_sysc,
2624};
2625
2626/* iss */
2627static struct omap_hwmod_irq_info omap44xx_iss_irqs[] = {
2628 { .irq = 24 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002629 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01002630};
2631
2632static struct omap_hwmod_dma_info omap44xx_iss_sdma_reqs[] = {
2633 { .name = "1", .dma_req = 8 + OMAP44XX_DMA_REQ_START },
2634 { .name = "2", .dma_req = 9 + OMAP44XX_DMA_REQ_START },
2635 { .name = "3", .dma_req = 11 + OMAP44XX_DMA_REQ_START },
2636 { .name = "4", .dma_req = 12 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06002637 { .dma_req = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01002638};
2639
2640/* iss master ports */
2641static struct omap_hwmod_ocp_if *omap44xx_iss_masters[] = {
2642 &omap44xx_iss__l3_main_2,
2643};
2644
2645static struct omap_hwmod_addr_space omap44xx_iss_addrs[] = {
2646 {
2647 .pa_start = 0x52000000,
2648 .pa_end = 0x520000ff,
2649 .flags = ADDR_TYPE_RT
2650 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002651 { }
Benoit Cousson407a6882011-02-15 22:39:48 +01002652};
2653
2654/* l3_main_2 -> iss */
2655static struct omap_hwmod_ocp_if omap44xx_l3_main_2__iss = {
2656 .master = &omap44xx_l3_main_2_hwmod,
2657 .slave = &omap44xx_iss_hwmod,
2658 .clk = "l3_div_ck",
2659 .addr = omap44xx_iss_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +01002660 .user = OCP_USER_MPU | OCP_USER_SDMA,
2661};
2662
2663/* iss slave ports */
2664static struct omap_hwmod_ocp_if *omap44xx_iss_slaves[] = {
2665 &omap44xx_l3_main_2__iss,
2666};
2667
2668static struct omap_hwmod_opt_clk iss_opt_clks[] = {
2669 { .role = "ctrlclk", .clk = "iss_ctrlclk" },
2670};
2671
2672static struct omap_hwmod omap44xx_iss_hwmod = {
2673 .name = "iss",
2674 .class = &omap44xx_iss_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002675 .clkdm_name = "iss_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01002676 .mpu_irqs = omap44xx_iss_irqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01002677 .sdma_reqs = omap44xx_iss_sdma_reqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01002678 .main_clk = "iss_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06002679 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01002680 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06002681 .clkctrl_offs = OMAP4_CM_CAM_ISS_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06002682 .context_offs = OMAP4_RM_CAM_ISS_CONTEXT_OFFSET,
Benoit Cousson407a6882011-02-15 22:39:48 +01002683 },
2684 },
2685 .opt_clks = iss_opt_clks,
2686 .opt_clks_cnt = ARRAY_SIZE(iss_opt_clks),
2687 .slaves = omap44xx_iss_slaves,
2688 .slaves_cnt = ARRAY_SIZE(omap44xx_iss_slaves),
2689 .masters = omap44xx_iss_masters,
2690 .masters_cnt = ARRAY_SIZE(omap44xx_iss_masters),
2691 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2692};
2693
2694/*
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002695 * 'iva' class
2696 * multi-standard video encoder/decoder hardware accelerator
2697 */
2698
2699static struct omap_hwmod_class omap44xx_iva_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +00002700 .name = "iva",
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002701};
2702
2703/* iva */
2704static struct omap_hwmod_irq_info omap44xx_iva_irqs[] = {
2705 { .name = "sync_1", .irq = 103 + OMAP44XX_IRQ_GIC_START },
2706 { .name = "sync_0", .irq = 104 + OMAP44XX_IRQ_GIC_START },
2707 { .name = "mailbox_0", .irq = 107 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002708 { .irq = -1 }
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002709};
2710
2711static struct omap_hwmod_rst_info omap44xx_iva_resets[] = {
2712 { .name = "logic", .rst_shift = 2 },
2713};
2714
2715static struct omap_hwmod_rst_info omap44xx_iva_seq0_resets[] = {
2716 { .name = "seq0", .rst_shift = 0 },
2717};
2718
2719static struct omap_hwmod_rst_info omap44xx_iva_seq1_resets[] = {
2720 { .name = "seq1", .rst_shift = 1 },
2721};
2722
2723/* iva master ports */
2724static struct omap_hwmod_ocp_if *omap44xx_iva_masters[] = {
2725 &omap44xx_iva__l3_main_2,
2726 &omap44xx_iva__l3_instr,
2727};
2728
2729static struct omap_hwmod_addr_space omap44xx_iva_addrs[] = {
2730 {
2731 .pa_start = 0x5a000000,
2732 .pa_end = 0x5a07ffff,
2733 .flags = ADDR_TYPE_RT
2734 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002735 { }
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002736};
2737
2738/* l3_main_2 -> iva */
2739static struct omap_hwmod_ocp_if omap44xx_l3_main_2__iva = {
2740 .master = &omap44xx_l3_main_2_hwmod,
2741 .slave = &omap44xx_iva_hwmod,
2742 .clk = "l3_div_ck",
2743 .addr = omap44xx_iva_addrs,
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002744 .user = OCP_USER_MPU,
2745};
2746
2747/* iva slave ports */
2748static struct omap_hwmod_ocp_if *omap44xx_iva_slaves[] = {
2749 &omap44xx_dsp__iva,
2750 &omap44xx_l3_main_2__iva,
2751};
2752
2753/* Pseudo hwmod for reset control purpose only */
2754static struct omap_hwmod omap44xx_iva_seq0_hwmod = {
2755 .name = "iva_seq0",
2756 .class = &omap44xx_iva_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002757 .clkdm_name = "ivahd_clkdm",
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002758 .flags = HWMOD_INIT_NO_RESET,
2759 .rst_lines = omap44xx_iva_seq0_resets,
2760 .rst_lines_cnt = ARRAY_SIZE(omap44xx_iva_seq0_resets),
2761 .prcm = {
2762 .omap4 = {
Benoit Coussoneaac3292011-07-10 05:56:31 -06002763 .rstctrl_offs = OMAP4_RM_IVAHD_RSTCTRL_OFFSET,
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002764 },
2765 },
2766 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2767};
2768
2769/* Pseudo hwmod for reset control purpose only */
2770static struct omap_hwmod omap44xx_iva_seq1_hwmod = {
2771 .name = "iva_seq1",
2772 .class = &omap44xx_iva_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002773 .clkdm_name = "ivahd_clkdm",
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002774 .flags = HWMOD_INIT_NO_RESET,
2775 .rst_lines = omap44xx_iva_seq1_resets,
2776 .rst_lines_cnt = ARRAY_SIZE(omap44xx_iva_seq1_resets),
2777 .prcm = {
2778 .omap4 = {
Benoit Coussoneaac3292011-07-10 05:56:31 -06002779 .rstctrl_offs = OMAP4_RM_IVAHD_RSTCTRL_OFFSET,
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002780 },
2781 },
2782 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2783};
2784
2785static struct omap_hwmod omap44xx_iva_hwmod = {
2786 .name = "iva",
2787 .class = &omap44xx_iva_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002788 .clkdm_name = "ivahd_clkdm",
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002789 .mpu_irqs = omap44xx_iva_irqs,
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002790 .rst_lines = omap44xx_iva_resets,
2791 .rst_lines_cnt = ARRAY_SIZE(omap44xx_iva_resets),
2792 .main_clk = "iva_fck",
2793 .prcm = {
2794 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06002795 .clkctrl_offs = OMAP4_CM_IVAHD_IVAHD_CLKCTRL_OFFSET,
Benoit Coussoneaac3292011-07-10 05:56:31 -06002796 .rstctrl_offs = OMAP4_RM_IVAHD_RSTCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06002797 .context_offs = OMAP4_RM_IVAHD_IVAHD_CONTEXT_OFFSET,
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07002798 },
2799 },
2800 .slaves = omap44xx_iva_slaves,
2801 .slaves_cnt = ARRAY_SIZE(omap44xx_iva_slaves),
2802 .masters = omap44xx_iva_masters,
2803 .masters_cnt = ARRAY_SIZE(omap44xx_iva_masters),
2804 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2805};
2806
2807/*
Benoit Cousson407a6882011-02-15 22:39:48 +01002808 * 'kbd' class
2809 * keyboard controller
2810 */
2811
2812static struct omap_hwmod_class_sysconfig omap44xx_kbd_sysc = {
2813 .rev_offs = 0x0000,
2814 .sysc_offs = 0x0010,
2815 .syss_offs = 0x0014,
2816 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
2817 SYSC_HAS_EMUFREE | SYSC_HAS_ENAWAKEUP |
2818 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
2819 SYSS_HAS_RESET_STATUS),
2820 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2821 .sysc_fields = &omap_hwmod_sysc_type1,
2822};
2823
2824static struct omap_hwmod_class omap44xx_kbd_hwmod_class = {
2825 .name = "kbd",
2826 .sysc = &omap44xx_kbd_sysc,
2827};
2828
2829/* kbd */
2830static struct omap_hwmod omap44xx_kbd_hwmod;
2831static struct omap_hwmod_irq_info omap44xx_kbd_irqs[] = {
2832 { .irq = 120 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002833 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01002834};
2835
2836static struct omap_hwmod_addr_space omap44xx_kbd_addrs[] = {
2837 {
2838 .pa_start = 0x4a31c000,
2839 .pa_end = 0x4a31c07f,
2840 .flags = ADDR_TYPE_RT
2841 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002842 { }
Benoit Cousson407a6882011-02-15 22:39:48 +01002843};
2844
2845/* l4_wkup -> kbd */
2846static struct omap_hwmod_ocp_if omap44xx_l4_wkup__kbd = {
2847 .master = &omap44xx_l4_wkup_hwmod,
2848 .slave = &omap44xx_kbd_hwmod,
2849 .clk = "l4_wkup_clk_mux_ck",
2850 .addr = omap44xx_kbd_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +01002851 .user = OCP_USER_MPU | OCP_USER_SDMA,
2852};
2853
2854/* kbd slave ports */
2855static struct omap_hwmod_ocp_if *omap44xx_kbd_slaves[] = {
2856 &omap44xx_l4_wkup__kbd,
2857};
2858
2859static struct omap_hwmod omap44xx_kbd_hwmod = {
2860 .name = "kbd",
2861 .class = &omap44xx_kbd_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002862 .clkdm_name = "l4_wkup_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01002863 .mpu_irqs = omap44xx_kbd_irqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01002864 .main_clk = "kbd_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06002865 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01002866 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06002867 .clkctrl_offs = OMAP4_CM_WKUP_KEYBOARD_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06002868 .context_offs = OMAP4_RM_WKUP_KEYBOARD_CONTEXT_OFFSET,
Benoit Cousson407a6882011-02-15 22:39:48 +01002869 },
2870 },
2871 .slaves = omap44xx_kbd_slaves,
2872 .slaves_cnt = ARRAY_SIZE(omap44xx_kbd_slaves),
2873 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2874};
2875
2876/*
Benoit Coussonec5df922011-02-02 19:27:21 +00002877 * 'mailbox' class
2878 * mailbox module allowing communication between the on-chip processors using a
2879 * queued mailbox-interrupt mechanism.
2880 */
2881
2882static struct omap_hwmod_class_sysconfig omap44xx_mailbox_sysc = {
2883 .rev_offs = 0x0000,
2884 .sysc_offs = 0x0010,
2885 .sysc_flags = (SYSC_HAS_RESET_STATUS | SYSC_HAS_SIDLEMODE |
2886 SYSC_HAS_SOFTRESET),
2887 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2888 .sysc_fields = &omap_hwmod_sysc_type2,
2889};
2890
2891static struct omap_hwmod_class omap44xx_mailbox_hwmod_class = {
2892 .name = "mailbox",
2893 .sysc = &omap44xx_mailbox_sysc,
2894};
2895
2896/* mailbox */
2897static struct omap_hwmod omap44xx_mailbox_hwmod;
2898static struct omap_hwmod_irq_info omap44xx_mailbox_irqs[] = {
2899 { .irq = 26 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002900 { .irq = -1 }
Benoit Coussonec5df922011-02-02 19:27:21 +00002901};
2902
2903static struct omap_hwmod_addr_space omap44xx_mailbox_addrs[] = {
2904 {
2905 .pa_start = 0x4a0f4000,
2906 .pa_end = 0x4a0f41ff,
2907 .flags = ADDR_TYPE_RT
2908 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002909 { }
Benoit Coussonec5df922011-02-02 19:27:21 +00002910};
2911
2912/* l4_cfg -> mailbox */
2913static struct omap_hwmod_ocp_if omap44xx_l4_cfg__mailbox = {
2914 .master = &omap44xx_l4_cfg_hwmod,
2915 .slave = &omap44xx_mailbox_hwmod,
2916 .clk = "l4_div_ck",
2917 .addr = omap44xx_mailbox_addrs,
Benoit Coussonec5df922011-02-02 19:27:21 +00002918 .user = OCP_USER_MPU | OCP_USER_SDMA,
2919};
2920
2921/* mailbox slave ports */
2922static struct omap_hwmod_ocp_if *omap44xx_mailbox_slaves[] = {
2923 &omap44xx_l4_cfg__mailbox,
2924};
2925
2926static struct omap_hwmod omap44xx_mailbox_hwmod = {
2927 .name = "mailbox",
2928 .class = &omap44xx_mailbox_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06002929 .clkdm_name = "l4_cfg_clkdm",
Benoit Coussonec5df922011-02-02 19:27:21 +00002930 .mpu_irqs = omap44xx_mailbox_irqs,
Benoit Cousson00fe6102011-07-09 19:14:28 -06002931 .prcm = {
Benoit Coussonec5df922011-02-02 19:27:21 +00002932 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06002933 .clkctrl_offs = OMAP4_CM_L4CFG_MAILBOX_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06002934 .context_offs = OMAP4_RM_L4CFG_MAILBOX_CONTEXT_OFFSET,
Benoit Coussonec5df922011-02-02 19:27:21 +00002935 },
2936 },
2937 .slaves = omap44xx_mailbox_slaves,
2938 .slaves_cnt = ARRAY_SIZE(omap44xx_mailbox_slaves),
2939 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2940};
2941
2942/*
Benoit Cousson4ddff492011-01-31 14:50:30 +00002943 * 'mcbsp' class
2944 * multi channel buffered serial port controller
2945 */
2946
2947static struct omap_hwmod_class_sysconfig omap44xx_mcbsp_sysc = {
2948 .sysc_offs = 0x008c,
2949 .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_ENAWAKEUP |
2950 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
2951 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2952 .sysc_fields = &omap_hwmod_sysc_type1,
2953};
2954
2955static struct omap_hwmod_class omap44xx_mcbsp_hwmod_class = {
2956 .name = "mcbsp",
2957 .sysc = &omap44xx_mcbsp_sysc,
Kishon Vijay Abraham Icb7e9de2011-02-24 15:16:50 +05302958 .rev = MCBSP_CONFIG_TYPE4,
Benoit Cousson4ddff492011-01-31 14:50:30 +00002959};
2960
2961/* mcbsp1 */
2962static struct omap_hwmod omap44xx_mcbsp1_hwmod;
2963static struct omap_hwmod_irq_info omap44xx_mcbsp1_irqs[] = {
2964 { .irq = 17 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06002965 { .irq = -1 }
Benoit Cousson4ddff492011-01-31 14:50:30 +00002966};
2967
2968static struct omap_hwmod_dma_info omap44xx_mcbsp1_sdma_reqs[] = {
2969 { .name = "tx", .dma_req = 32 + OMAP44XX_DMA_REQ_START },
2970 { .name = "rx", .dma_req = 33 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06002971 { .dma_req = -1 }
Benoit Cousson4ddff492011-01-31 14:50:30 +00002972};
2973
2974static struct omap_hwmod_addr_space omap44xx_mcbsp1_addrs[] = {
2975 {
Kishon Vijay Abraham Icb7e9de2011-02-24 15:16:50 +05302976 .name = "mpu",
Benoit Cousson4ddff492011-01-31 14:50:30 +00002977 .pa_start = 0x40122000,
2978 .pa_end = 0x401220ff,
2979 .flags = ADDR_TYPE_RT
2980 },
Paul Walmsley78183f32011-07-09 19:14:05 -06002981 { }
Benoit Cousson4ddff492011-01-31 14:50:30 +00002982};
2983
2984/* l4_abe -> mcbsp1 */
2985static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp1 = {
2986 .master = &omap44xx_l4_abe_hwmod,
2987 .slave = &omap44xx_mcbsp1_hwmod,
2988 .clk = "ocp_abe_iclk",
2989 .addr = omap44xx_mcbsp1_addrs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00002990 .user = OCP_USER_MPU,
2991};
2992
2993static struct omap_hwmod_addr_space omap44xx_mcbsp1_dma_addrs[] = {
2994 {
Kishon Vijay Abraham Icb7e9de2011-02-24 15:16:50 +05302995 .name = "dma",
Benoit Cousson4ddff492011-01-31 14:50:30 +00002996 .pa_start = 0x49022000,
2997 .pa_end = 0x490220ff,
2998 .flags = ADDR_TYPE_RT
2999 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003000 { }
Benoit Cousson4ddff492011-01-31 14:50:30 +00003001};
3002
3003/* l4_abe -> mcbsp1 (dma) */
3004static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp1_dma = {
3005 .master = &omap44xx_l4_abe_hwmod,
3006 .slave = &omap44xx_mcbsp1_hwmod,
3007 .clk = "ocp_abe_iclk",
3008 .addr = omap44xx_mcbsp1_dma_addrs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003009 .user = OCP_USER_SDMA,
3010};
3011
3012/* mcbsp1 slave ports */
3013static struct omap_hwmod_ocp_if *omap44xx_mcbsp1_slaves[] = {
3014 &omap44xx_l4_abe__mcbsp1,
3015 &omap44xx_l4_abe__mcbsp1_dma,
3016};
3017
3018static struct omap_hwmod omap44xx_mcbsp1_hwmod = {
3019 .name = "mcbsp1",
3020 .class = &omap44xx_mcbsp_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003021 .clkdm_name = "abe_clkdm",
Benoit Cousson4ddff492011-01-31 14:50:30 +00003022 .mpu_irqs = omap44xx_mcbsp1_irqs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003023 .sdma_reqs = omap44xx_mcbsp1_sdma_reqs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003024 .main_clk = "mcbsp1_fck",
3025 .prcm = {
3026 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003027 .clkctrl_offs = OMAP4_CM1_ABE_MCBSP1_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003028 .context_offs = OMAP4_RM_ABE_MCBSP1_CONTEXT_OFFSET,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003029 },
3030 },
3031 .slaves = omap44xx_mcbsp1_slaves,
3032 .slaves_cnt = ARRAY_SIZE(omap44xx_mcbsp1_slaves),
3033 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3034};
3035
3036/* mcbsp2 */
3037static struct omap_hwmod omap44xx_mcbsp2_hwmod;
3038static struct omap_hwmod_irq_info omap44xx_mcbsp2_irqs[] = {
3039 { .irq = 22 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003040 { .irq = -1 }
Benoit Cousson4ddff492011-01-31 14:50:30 +00003041};
3042
3043static struct omap_hwmod_dma_info omap44xx_mcbsp2_sdma_reqs[] = {
3044 { .name = "tx", .dma_req = 16 + OMAP44XX_DMA_REQ_START },
3045 { .name = "rx", .dma_req = 17 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003046 { .dma_req = -1 }
Benoit Cousson4ddff492011-01-31 14:50:30 +00003047};
3048
3049static struct omap_hwmod_addr_space omap44xx_mcbsp2_addrs[] = {
3050 {
Kishon Vijay Abraham Icb7e9de2011-02-24 15:16:50 +05303051 .name = "mpu",
Benoit Cousson4ddff492011-01-31 14:50:30 +00003052 .pa_start = 0x40124000,
3053 .pa_end = 0x401240ff,
3054 .flags = ADDR_TYPE_RT
3055 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003056 { }
Benoit Cousson4ddff492011-01-31 14:50:30 +00003057};
3058
3059/* l4_abe -> mcbsp2 */
3060static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp2 = {
3061 .master = &omap44xx_l4_abe_hwmod,
3062 .slave = &omap44xx_mcbsp2_hwmod,
3063 .clk = "ocp_abe_iclk",
3064 .addr = omap44xx_mcbsp2_addrs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003065 .user = OCP_USER_MPU,
3066};
3067
3068static struct omap_hwmod_addr_space omap44xx_mcbsp2_dma_addrs[] = {
3069 {
Kishon Vijay Abraham Icb7e9de2011-02-24 15:16:50 +05303070 .name = "dma",
Benoit Cousson4ddff492011-01-31 14:50:30 +00003071 .pa_start = 0x49024000,
3072 .pa_end = 0x490240ff,
3073 .flags = ADDR_TYPE_RT
3074 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003075 { }
Benoit Cousson4ddff492011-01-31 14:50:30 +00003076};
3077
3078/* l4_abe -> mcbsp2 (dma) */
3079static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp2_dma = {
3080 .master = &omap44xx_l4_abe_hwmod,
3081 .slave = &omap44xx_mcbsp2_hwmod,
3082 .clk = "ocp_abe_iclk",
3083 .addr = omap44xx_mcbsp2_dma_addrs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003084 .user = OCP_USER_SDMA,
3085};
3086
3087/* mcbsp2 slave ports */
3088static struct omap_hwmod_ocp_if *omap44xx_mcbsp2_slaves[] = {
3089 &omap44xx_l4_abe__mcbsp2,
3090 &omap44xx_l4_abe__mcbsp2_dma,
3091};
3092
3093static struct omap_hwmod omap44xx_mcbsp2_hwmod = {
3094 .name = "mcbsp2",
3095 .class = &omap44xx_mcbsp_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003096 .clkdm_name = "abe_clkdm",
Benoit Cousson4ddff492011-01-31 14:50:30 +00003097 .mpu_irqs = omap44xx_mcbsp2_irqs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003098 .sdma_reqs = omap44xx_mcbsp2_sdma_reqs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003099 .main_clk = "mcbsp2_fck",
3100 .prcm = {
3101 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003102 .clkctrl_offs = OMAP4_CM1_ABE_MCBSP2_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003103 .context_offs = OMAP4_RM_ABE_MCBSP2_CONTEXT_OFFSET,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003104 },
3105 },
3106 .slaves = omap44xx_mcbsp2_slaves,
3107 .slaves_cnt = ARRAY_SIZE(omap44xx_mcbsp2_slaves),
3108 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3109};
3110
3111/* mcbsp3 */
3112static struct omap_hwmod omap44xx_mcbsp3_hwmod;
3113static struct omap_hwmod_irq_info omap44xx_mcbsp3_irqs[] = {
3114 { .irq = 23 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003115 { .irq = -1 }
Benoit Cousson4ddff492011-01-31 14:50:30 +00003116};
3117
3118static struct omap_hwmod_dma_info omap44xx_mcbsp3_sdma_reqs[] = {
3119 { .name = "tx", .dma_req = 18 + OMAP44XX_DMA_REQ_START },
3120 { .name = "rx", .dma_req = 19 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003121 { .dma_req = -1 }
Benoit Cousson4ddff492011-01-31 14:50:30 +00003122};
3123
3124static struct omap_hwmod_addr_space omap44xx_mcbsp3_addrs[] = {
3125 {
Kishon Vijay Abraham Icb7e9de2011-02-24 15:16:50 +05303126 .name = "mpu",
Benoit Cousson4ddff492011-01-31 14:50:30 +00003127 .pa_start = 0x40126000,
3128 .pa_end = 0x401260ff,
3129 .flags = ADDR_TYPE_RT
3130 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003131 { }
Benoit Cousson4ddff492011-01-31 14:50:30 +00003132};
3133
3134/* l4_abe -> mcbsp3 */
3135static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp3 = {
3136 .master = &omap44xx_l4_abe_hwmod,
3137 .slave = &omap44xx_mcbsp3_hwmod,
3138 .clk = "ocp_abe_iclk",
3139 .addr = omap44xx_mcbsp3_addrs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003140 .user = OCP_USER_MPU,
3141};
3142
3143static struct omap_hwmod_addr_space omap44xx_mcbsp3_dma_addrs[] = {
3144 {
Kishon Vijay Abraham Icb7e9de2011-02-24 15:16:50 +05303145 .name = "dma",
Benoit Cousson4ddff492011-01-31 14:50:30 +00003146 .pa_start = 0x49026000,
3147 .pa_end = 0x490260ff,
3148 .flags = ADDR_TYPE_RT
3149 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003150 { }
Benoit Cousson4ddff492011-01-31 14:50:30 +00003151};
3152
3153/* l4_abe -> mcbsp3 (dma) */
3154static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp3_dma = {
3155 .master = &omap44xx_l4_abe_hwmod,
3156 .slave = &omap44xx_mcbsp3_hwmod,
3157 .clk = "ocp_abe_iclk",
3158 .addr = omap44xx_mcbsp3_dma_addrs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003159 .user = OCP_USER_SDMA,
3160};
3161
3162/* mcbsp3 slave ports */
3163static struct omap_hwmod_ocp_if *omap44xx_mcbsp3_slaves[] = {
3164 &omap44xx_l4_abe__mcbsp3,
3165 &omap44xx_l4_abe__mcbsp3_dma,
3166};
3167
3168static struct omap_hwmod omap44xx_mcbsp3_hwmod = {
3169 .name = "mcbsp3",
3170 .class = &omap44xx_mcbsp_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003171 .clkdm_name = "abe_clkdm",
Benoit Cousson4ddff492011-01-31 14:50:30 +00003172 .mpu_irqs = omap44xx_mcbsp3_irqs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003173 .sdma_reqs = omap44xx_mcbsp3_sdma_reqs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003174 .main_clk = "mcbsp3_fck",
3175 .prcm = {
3176 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003177 .clkctrl_offs = OMAP4_CM1_ABE_MCBSP3_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003178 .context_offs = OMAP4_RM_ABE_MCBSP3_CONTEXT_OFFSET,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003179 },
3180 },
3181 .slaves = omap44xx_mcbsp3_slaves,
3182 .slaves_cnt = ARRAY_SIZE(omap44xx_mcbsp3_slaves),
3183 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3184};
3185
3186/* mcbsp4 */
3187static struct omap_hwmod omap44xx_mcbsp4_hwmod;
3188static struct omap_hwmod_irq_info omap44xx_mcbsp4_irqs[] = {
3189 { .irq = 16 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003190 { .irq = -1 }
Benoit Cousson4ddff492011-01-31 14:50:30 +00003191};
3192
3193static struct omap_hwmod_dma_info omap44xx_mcbsp4_sdma_reqs[] = {
3194 { .name = "tx", .dma_req = 30 + OMAP44XX_DMA_REQ_START },
3195 { .name = "rx", .dma_req = 31 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003196 { .dma_req = -1 }
Benoit Cousson4ddff492011-01-31 14:50:30 +00003197};
3198
3199static struct omap_hwmod_addr_space omap44xx_mcbsp4_addrs[] = {
3200 {
3201 .pa_start = 0x48096000,
3202 .pa_end = 0x480960ff,
3203 .flags = ADDR_TYPE_RT
3204 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003205 { }
Benoit Cousson4ddff492011-01-31 14:50:30 +00003206};
3207
3208/* l4_per -> mcbsp4 */
3209static struct omap_hwmod_ocp_if omap44xx_l4_per__mcbsp4 = {
3210 .master = &omap44xx_l4_per_hwmod,
3211 .slave = &omap44xx_mcbsp4_hwmod,
3212 .clk = "l4_div_ck",
3213 .addr = omap44xx_mcbsp4_addrs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003214 .user = OCP_USER_MPU | OCP_USER_SDMA,
3215};
3216
3217/* mcbsp4 slave ports */
3218static struct omap_hwmod_ocp_if *omap44xx_mcbsp4_slaves[] = {
3219 &omap44xx_l4_per__mcbsp4,
3220};
3221
3222static struct omap_hwmod omap44xx_mcbsp4_hwmod = {
3223 .name = "mcbsp4",
3224 .class = &omap44xx_mcbsp_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003225 .clkdm_name = "l4_per_clkdm",
Benoit Cousson4ddff492011-01-31 14:50:30 +00003226 .mpu_irqs = omap44xx_mcbsp4_irqs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003227 .sdma_reqs = omap44xx_mcbsp4_sdma_reqs,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003228 .main_clk = "mcbsp4_fck",
3229 .prcm = {
3230 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003231 .clkctrl_offs = OMAP4_CM_L4PER_MCBSP4_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003232 .context_offs = OMAP4_RM_L4PER_MCBSP4_CONTEXT_OFFSET,
Benoit Cousson4ddff492011-01-31 14:50:30 +00003233 },
3234 },
3235 .slaves = omap44xx_mcbsp4_slaves,
3236 .slaves_cnt = ARRAY_SIZE(omap44xx_mcbsp4_slaves),
3237 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3238};
3239
3240/*
Benoit Cousson407a6882011-02-15 22:39:48 +01003241 * 'mcpdm' class
3242 * multi channel pdm controller (proprietary interface with phoenix power
3243 * ic)
3244 */
3245
3246static struct omap_hwmod_class_sysconfig omap44xx_mcpdm_sysc = {
3247 .rev_offs = 0x0000,
3248 .sysc_offs = 0x0010,
3249 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
3250 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
3251 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
3252 SIDLE_SMART_WKUP),
3253 .sysc_fields = &omap_hwmod_sysc_type2,
3254};
3255
3256static struct omap_hwmod_class omap44xx_mcpdm_hwmod_class = {
3257 .name = "mcpdm",
3258 .sysc = &omap44xx_mcpdm_sysc,
3259};
3260
3261/* mcpdm */
3262static struct omap_hwmod omap44xx_mcpdm_hwmod;
3263static struct omap_hwmod_irq_info omap44xx_mcpdm_irqs[] = {
3264 { .irq = 112 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003265 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003266};
3267
3268static struct omap_hwmod_dma_info omap44xx_mcpdm_sdma_reqs[] = {
3269 { .name = "up_link", .dma_req = 64 + OMAP44XX_DMA_REQ_START },
3270 { .name = "dn_link", .dma_req = 65 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003271 { .dma_req = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003272};
3273
3274static struct omap_hwmod_addr_space omap44xx_mcpdm_addrs[] = {
3275 {
3276 .pa_start = 0x40132000,
3277 .pa_end = 0x4013207f,
3278 .flags = ADDR_TYPE_RT
3279 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003280 { }
Benoit Cousson407a6882011-02-15 22:39:48 +01003281};
3282
3283/* l4_abe -> mcpdm */
3284static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcpdm = {
3285 .master = &omap44xx_l4_abe_hwmod,
3286 .slave = &omap44xx_mcpdm_hwmod,
3287 .clk = "ocp_abe_iclk",
3288 .addr = omap44xx_mcpdm_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003289 .user = OCP_USER_MPU,
3290};
3291
3292static struct omap_hwmod_addr_space omap44xx_mcpdm_dma_addrs[] = {
3293 {
3294 .pa_start = 0x49032000,
3295 .pa_end = 0x4903207f,
3296 .flags = ADDR_TYPE_RT
3297 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003298 { }
Benoit Cousson407a6882011-02-15 22:39:48 +01003299};
3300
3301/* l4_abe -> mcpdm (dma) */
3302static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcpdm_dma = {
3303 .master = &omap44xx_l4_abe_hwmod,
3304 .slave = &omap44xx_mcpdm_hwmod,
3305 .clk = "ocp_abe_iclk",
3306 .addr = omap44xx_mcpdm_dma_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003307 .user = OCP_USER_SDMA,
3308};
3309
3310/* mcpdm slave ports */
3311static struct omap_hwmod_ocp_if *omap44xx_mcpdm_slaves[] = {
3312 &omap44xx_l4_abe__mcpdm,
3313 &omap44xx_l4_abe__mcpdm_dma,
3314};
3315
3316static struct omap_hwmod omap44xx_mcpdm_hwmod = {
3317 .name = "mcpdm",
3318 .class = &omap44xx_mcpdm_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003319 .clkdm_name = "abe_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01003320 .mpu_irqs = omap44xx_mcpdm_irqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003321 .sdma_reqs = omap44xx_mcpdm_sdma_reqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003322 .main_clk = "mcpdm_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06003323 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01003324 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003325 .clkctrl_offs = OMAP4_CM1_ABE_PDM_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003326 .context_offs = OMAP4_RM_ABE_PDM_CONTEXT_OFFSET,
Benoit Cousson407a6882011-02-15 22:39:48 +01003327 },
3328 },
3329 .slaves = omap44xx_mcpdm_slaves,
3330 .slaves_cnt = ARRAY_SIZE(omap44xx_mcpdm_slaves),
3331 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3332};
3333
3334/*
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303335 * 'mcspi' class
3336 * multichannel serial port interface (mcspi) / master/slave synchronous serial
3337 * bus
3338 */
3339
3340static struct omap_hwmod_class_sysconfig omap44xx_mcspi_sysc = {
3341 .rev_offs = 0x0000,
3342 .sysc_offs = 0x0010,
3343 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
3344 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
3345 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
3346 SIDLE_SMART_WKUP),
3347 .sysc_fields = &omap_hwmod_sysc_type2,
3348};
3349
3350static struct omap_hwmod_class omap44xx_mcspi_hwmod_class = {
3351 .name = "mcspi",
3352 .sysc = &omap44xx_mcspi_sysc,
Benoit Cousson905a74d2011-02-18 14:01:06 +01003353 .rev = OMAP4_MCSPI_REV,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303354};
3355
3356/* mcspi1 */
3357static struct omap_hwmod omap44xx_mcspi1_hwmod;
3358static struct omap_hwmod_irq_info omap44xx_mcspi1_irqs[] = {
3359 { .irq = 65 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003360 { .irq = -1 }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303361};
3362
3363static struct omap_hwmod_dma_info omap44xx_mcspi1_sdma_reqs[] = {
3364 { .name = "tx0", .dma_req = 34 + OMAP44XX_DMA_REQ_START },
3365 { .name = "rx0", .dma_req = 35 + OMAP44XX_DMA_REQ_START },
3366 { .name = "tx1", .dma_req = 36 + OMAP44XX_DMA_REQ_START },
3367 { .name = "rx1", .dma_req = 37 + OMAP44XX_DMA_REQ_START },
3368 { .name = "tx2", .dma_req = 38 + OMAP44XX_DMA_REQ_START },
3369 { .name = "rx2", .dma_req = 39 + OMAP44XX_DMA_REQ_START },
3370 { .name = "tx3", .dma_req = 40 + OMAP44XX_DMA_REQ_START },
3371 { .name = "rx3", .dma_req = 41 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003372 { .dma_req = -1 }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303373};
3374
3375static struct omap_hwmod_addr_space omap44xx_mcspi1_addrs[] = {
3376 {
3377 .pa_start = 0x48098000,
3378 .pa_end = 0x480981ff,
3379 .flags = ADDR_TYPE_RT
3380 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003381 { }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303382};
3383
3384/* l4_per -> mcspi1 */
3385static struct omap_hwmod_ocp_if omap44xx_l4_per__mcspi1 = {
3386 .master = &omap44xx_l4_per_hwmod,
3387 .slave = &omap44xx_mcspi1_hwmod,
3388 .clk = "l4_div_ck",
3389 .addr = omap44xx_mcspi1_addrs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303390 .user = OCP_USER_MPU | OCP_USER_SDMA,
3391};
3392
3393/* mcspi1 slave ports */
3394static struct omap_hwmod_ocp_if *omap44xx_mcspi1_slaves[] = {
3395 &omap44xx_l4_per__mcspi1,
3396};
3397
Benoit Cousson905a74d2011-02-18 14:01:06 +01003398/* mcspi1 dev_attr */
3399static struct omap2_mcspi_dev_attr mcspi1_dev_attr = {
3400 .num_chipselect = 4,
3401};
3402
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303403static struct omap_hwmod omap44xx_mcspi1_hwmod = {
3404 .name = "mcspi1",
3405 .class = &omap44xx_mcspi_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003406 .clkdm_name = "l4_per_clkdm",
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303407 .mpu_irqs = omap44xx_mcspi1_irqs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303408 .sdma_reqs = omap44xx_mcspi1_sdma_reqs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303409 .main_clk = "mcspi1_fck",
3410 .prcm = {
3411 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003412 .clkctrl_offs = OMAP4_CM_L4PER_MCSPI1_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003413 .context_offs = OMAP4_RM_L4PER_MCSPI1_CONTEXT_OFFSET,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303414 },
3415 },
Benoit Cousson905a74d2011-02-18 14:01:06 +01003416 .dev_attr = &mcspi1_dev_attr,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303417 .slaves = omap44xx_mcspi1_slaves,
3418 .slaves_cnt = ARRAY_SIZE(omap44xx_mcspi1_slaves),
3419 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3420};
3421
3422/* mcspi2 */
3423static struct omap_hwmod omap44xx_mcspi2_hwmod;
3424static struct omap_hwmod_irq_info omap44xx_mcspi2_irqs[] = {
3425 { .irq = 66 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003426 { .irq = -1 }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303427};
3428
3429static struct omap_hwmod_dma_info omap44xx_mcspi2_sdma_reqs[] = {
3430 { .name = "tx0", .dma_req = 42 + OMAP44XX_DMA_REQ_START },
3431 { .name = "rx0", .dma_req = 43 + OMAP44XX_DMA_REQ_START },
3432 { .name = "tx1", .dma_req = 44 + OMAP44XX_DMA_REQ_START },
3433 { .name = "rx1", .dma_req = 45 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003434 { .dma_req = -1 }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303435};
3436
3437static struct omap_hwmod_addr_space omap44xx_mcspi2_addrs[] = {
3438 {
3439 .pa_start = 0x4809a000,
3440 .pa_end = 0x4809a1ff,
3441 .flags = ADDR_TYPE_RT
3442 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003443 { }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303444};
3445
3446/* l4_per -> mcspi2 */
3447static struct omap_hwmod_ocp_if omap44xx_l4_per__mcspi2 = {
3448 .master = &omap44xx_l4_per_hwmod,
3449 .slave = &omap44xx_mcspi2_hwmod,
3450 .clk = "l4_div_ck",
3451 .addr = omap44xx_mcspi2_addrs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303452 .user = OCP_USER_MPU | OCP_USER_SDMA,
3453};
3454
3455/* mcspi2 slave ports */
3456static struct omap_hwmod_ocp_if *omap44xx_mcspi2_slaves[] = {
3457 &omap44xx_l4_per__mcspi2,
3458};
3459
Benoit Cousson905a74d2011-02-18 14:01:06 +01003460/* mcspi2 dev_attr */
3461static struct omap2_mcspi_dev_attr mcspi2_dev_attr = {
3462 .num_chipselect = 2,
3463};
3464
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303465static struct omap_hwmod omap44xx_mcspi2_hwmod = {
3466 .name = "mcspi2",
3467 .class = &omap44xx_mcspi_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003468 .clkdm_name = "l4_per_clkdm",
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303469 .mpu_irqs = omap44xx_mcspi2_irqs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303470 .sdma_reqs = omap44xx_mcspi2_sdma_reqs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303471 .main_clk = "mcspi2_fck",
3472 .prcm = {
3473 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003474 .clkctrl_offs = OMAP4_CM_L4PER_MCSPI2_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003475 .context_offs = OMAP4_RM_L4PER_MCSPI2_CONTEXT_OFFSET,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303476 },
3477 },
Benoit Cousson905a74d2011-02-18 14:01:06 +01003478 .dev_attr = &mcspi2_dev_attr,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303479 .slaves = omap44xx_mcspi2_slaves,
3480 .slaves_cnt = ARRAY_SIZE(omap44xx_mcspi2_slaves),
3481 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3482};
3483
3484/* mcspi3 */
3485static struct omap_hwmod omap44xx_mcspi3_hwmod;
3486static struct omap_hwmod_irq_info omap44xx_mcspi3_irqs[] = {
3487 { .irq = 91 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003488 { .irq = -1 }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303489};
3490
3491static struct omap_hwmod_dma_info omap44xx_mcspi3_sdma_reqs[] = {
3492 { .name = "tx0", .dma_req = 14 + OMAP44XX_DMA_REQ_START },
3493 { .name = "rx0", .dma_req = 15 + OMAP44XX_DMA_REQ_START },
3494 { .name = "tx1", .dma_req = 22 + OMAP44XX_DMA_REQ_START },
3495 { .name = "rx1", .dma_req = 23 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003496 { .dma_req = -1 }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303497};
3498
3499static struct omap_hwmod_addr_space omap44xx_mcspi3_addrs[] = {
3500 {
3501 .pa_start = 0x480b8000,
3502 .pa_end = 0x480b81ff,
3503 .flags = ADDR_TYPE_RT
3504 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003505 { }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303506};
3507
3508/* l4_per -> mcspi3 */
3509static struct omap_hwmod_ocp_if omap44xx_l4_per__mcspi3 = {
3510 .master = &omap44xx_l4_per_hwmod,
3511 .slave = &omap44xx_mcspi3_hwmod,
3512 .clk = "l4_div_ck",
3513 .addr = omap44xx_mcspi3_addrs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303514 .user = OCP_USER_MPU | OCP_USER_SDMA,
3515};
3516
3517/* mcspi3 slave ports */
3518static struct omap_hwmod_ocp_if *omap44xx_mcspi3_slaves[] = {
3519 &omap44xx_l4_per__mcspi3,
3520};
3521
Benoit Cousson905a74d2011-02-18 14:01:06 +01003522/* mcspi3 dev_attr */
3523static struct omap2_mcspi_dev_attr mcspi3_dev_attr = {
3524 .num_chipselect = 2,
3525};
3526
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303527static struct omap_hwmod omap44xx_mcspi3_hwmod = {
3528 .name = "mcspi3",
3529 .class = &omap44xx_mcspi_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003530 .clkdm_name = "l4_per_clkdm",
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303531 .mpu_irqs = omap44xx_mcspi3_irqs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303532 .sdma_reqs = omap44xx_mcspi3_sdma_reqs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303533 .main_clk = "mcspi3_fck",
3534 .prcm = {
3535 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003536 .clkctrl_offs = OMAP4_CM_L4PER_MCSPI3_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003537 .context_offs = OMAP4_RM_L4PER_MCSPI3_CONTEXT_OFFSET,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303538 },
3539 },
Benoit Cousson905a74d2011-02-18 14:01:06 +01003540 .dev_attr = &mcspi3_dev_attr,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303541 .slaves = omap44xx_mcspi3_slaves,
3542 .slaves_cnt = ARRAY_SIZE(omap44xx_mcspi3_slaves),
3543 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3544};
3545
3546/* mcspi4 */
3547static struct omap_hwmod omap44xx_mcspi4_hwmod;
3548static struct omap_hwmod_irq_info omap44xx_mcspi4_irqs[] = {
3549 { .irq = 48 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003550 { .irq = -1 }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303551};
3552
3553static struct omap_hwmod_dma_info omap44xx_mcspi4_sdma_reqs[] = {
3554 { .name = "tx0", .dma_req = 69 + OMAP44XX_DMA_REQ_START },
3555 { .name = "rx0", .dma_req = 70 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003556 { .dma_req = -1 }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303557};
3558
3559static struct omap_hwmod_addr_space omap44xx_mcspi4_addrs[] = {
3560 {
3561 .pa_start = 0x480ba000,
3562 .pa_end = 0x480ba1ff,
3563 .flags = ADDR_TYPE_RT
3564 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003565 { }
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303566};
3567
3568/* l4_per -> mcspi4 */
3569static struct omap_hwmod_ocp_if omap44xx_l4_per__mcspi4 = {
3570 .master = &omap44xx_l4_per_hwmod,
3571 .slave = &omap44xx_mcspi4_hwmod,
3572 .clk = "l4_div_ck",
3573 .addr = omap44xx_mcspi4_addrs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303574 .user = OCP_USER_MPU | OCP_USER_SDMA,
3575};
3576
3577/* mcspi4 slave ports */
3578static struct omap_hwmod_ocp_if *omap44xx_mcspi4_slaves[] = {
3579 &omap44xx_l4_per__mcspi4,
3580};
3581
Benoit Cousson905a74d2011-02-18 14:01:06 +01003582/* mcspi4 dev_attr */
3583static struct omap2_mcspi_dev_attr mcspi4_dev_attr = {
3584 .num_chipselect = 1,
3585};
3586
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303587static struct omap_hwmod omap44xx_mcspi4_hwmod = {
3588 .name = "mcspi4",
3589 .class = &omap44xx_mcspi_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003590 .clkdm_name = "l4_per_clkdm",
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303591 .mpu_irqs = omap44xx_mcspi4_irqs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303592 .sdma_reqs = omap44xx_mcspi4_sdma_reqs,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303593 .main_clk = "mcspi4_fck",
3594 .prcm = {
3595 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003596 .clkctrl_offs = OMAP4_CM_L4PER_MCSPI4_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003597 .context_offs = OMAP4_RM_L4PER_MCSPI4_CONTEXT_OFFSET,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303598 },
3599 },
Benoit Cousson905a74d2011-02-18 14:01:06 +01003600 .dev_attr = &mcspi4_dev_attr,
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05303601 .slaves = omap44xx_mcspi4_slaves,
3602 .slaves_cnt = ARRAY_SIZE(omap44xx_mcspi4_slaves),
3603 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3604};
3605
3606/*
Benoit Cousson407a6882011-02-15 22:39:48 +01003607 * 'mmc' class
3608 * multimedia card high-speed/sd/sdio (mmc/sd/sdio) host controller
3609 */
3610
3611static struct omap_hwmod_class_sysconfig omap44xx_mmc_sysc = {
3612 .rev_offs = 0x0000,
3613 .sysc_offs = 0x0010,
3614 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_MIDLEMODE |
3615 SYSC_HAS_RESET_STATUS | SYSC_HAS_SIDLEMODE |
3616 SYSC_HAS_SOFTRESET),
3617 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
3618 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
Benoit Coussonc614ebf2011-07-01 22:54:01 +02003619 MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
Benoit Cousson407a6882011-02-15 22:39:48 +01003620 .sysc_fields = &omap_hwmod_sysc_type2,
3621};
3622
3623static struct omap_hwmod_class omap44xx_mmc_hwmod_class = {
3624 .name = "mmc",
3625 .sysc = &omap44xx_mmc_sysc,
3626};
3627
3628/* mmc1 */
3629static struct omap_hwmod_irq_info omap44xx_mmc1_irqs[] = {
3630 { .irq = 83 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003631 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003632};
3633
3634static struct omap_hwmod_dma_info omap44xx_mmc1_sdma_reqs[] = {
3635 { .name = "tx", .dma_req = 60 + OMAP44XX_DMA_REQ_START },
3636 { .name = "rx", .dma_req = 61 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003637 { .dma_req = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003638};
3639
3640/* mmc1 master ports */
3641static struct omap_hwmod_ocp_if *omap44xx_mmc1_masters[] = {
3642 &omap44xx_mmc1__l3_main_1,
3643};
3644
3645static struct omap_hwmod_addr_space omap44xx_mmc1_addrs[] = {
3646 {
3647 .pa_start = 0x4809c000,
3648 .pa_end = 0x4809c3ff,
3649 .flags = ADDR_TYPE_RT
3650 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003651 { }
Benoit Cousson407a6882011-02-15 22:39:48 +01003652};
3653
3654/* l4_per -> mmc1 */
3655static struct omap_hwmod_ocp_if omap44xx_l4_per__mmc1 = {
3656 .master = &omap44xx_l4_per_hwmod,
3657 .slave = &omap44xx_mmc1_hwmod,
3658 .clk = "l4_div_ck",
3659 .addr = omap44xx_mmc1_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003660 .user = OCP_USER_MPU | OCP_USER_SDMA,
3661};
3662
3663/* mmc1 slave ports */
3664static struct omap_hwmod_ocp_if *omap44xx_mmc1_slaves[] = {
3665 &omap44xx_l4_per__mmc1,
3666};
3667
Kishore Kadiyala6ab89462011-03-01 13:12:56 -08003668/* mmc1 dev_attr */
3669static struct omap_mmc_dev_attr mmc1_dev_attr = {
3670 .flags = OMAP_HSMMC_SUPPORTS_DUAL_VOLT,
3671};
3672
Benoit Cousson407a6882011-02-15 22:39:48 +01003673static struct omap_hwmod omap44xx_mmc1_hwmod = {
3674 .name = "mmc1",
3675 .class = &omap44xx_mmc_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003676 .clkdm_name = "l3_init_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01003677 .mpu_irqs = omap44xx_mmc1_irqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003678 .sdma_reqs = omap44xx_mmc1_sdma_reqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003679 .main_clk = "mmc1_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06003680 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01003681 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003682 .clkctrl_offs = OMAP4_CM_L3INIT_MMC1_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003683 .context_offs = OMAP4_RM_L3INIT_MMC1_CONTEXT_OFFSET,
Benoit Cousson407a6882011-02-15 22:39:48 +01003684 },
3685 },
Kishore Kadiyala6ab89462011-03-01 13:12:56 -08003686 .dev_attr = &mmc1_dev_attr,
Benoit Cousson407a6882011-02-15 22:39:48 +01003687 .slaves = omap44xx_mmc1_slaves,
3688 .slaves_cnt = ARRAY_SIZE(omap44xx_mmc1_slaves),
3689 .masters = omap44xx_mmc1_masters,
3690 .masters_cnt = ARRAY_SIZE(omap44xx_mmc1_masters),
3691 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3692};
3693
3694/* mmc2 */
3695static struct omap_hwmod_irq_info omap44xx_mmc2_irqs[] = {
3696 { .irq = 86 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003697 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003698};
3699
3700static struct omap_hwmod_dma_info omap44xx_mmc2_sdma_reqs[] = {
3701 { .name = "tx", .dma_req = 46 + OMAP44XX_DMA_REQ_START },
3702 { .name = "rx", .dma_req = 47 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003703 { .dma_req = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003704};
3705
3706/* mmc2 master ports */
3707static struct omap_hwmod_ocp_if *omap44xx_mmc2_masters[] = {
3708 &omap44xx_mmc2__l3_main_1,
3709};
3710
3711static struct omap_hwmod_addr_space omap44xx_mmc2_addrs[] = {
3712 {
3713 .pa_start = 0x480b4000,
3714 .pa_end = 0x480b43ff,
3715 .flags = ADDR_TYPE_RT
3716 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003717 { }
Benoit Cousson407a6882011-02-15 22:39:48 +01003718};
3719
3720/* l4_per -> mmc2 */
3721static struct omap_hwmod_ocp_if omap44xx_l4_per__mmc2 = {
3722 .master = &omap44xx_l4_per_hwmod,
3723 .slave = &omap44xx_mmc2_hwmod,
3724 .clk = "l4_div_ck",
3725 .addr = omap44xx_mmc2_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003726 .user = OCP_USER_MPU | OCP_USER_SDMA,
3727};
3728
3729/* mmc2 slave ports */
3730static struct omap_hwmod_ocp_if *omap44xx_mmc2_slaves[] = {
3731 &omap44xx_l4_per__mmc2,
3732};
3733
3734static struct omap_hwmod omap44xx_mmc2_hwmod = {
3735 .name = "mmc2",
3736 .class = &omap44xx_mmc_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003737 .clkdm_name = "l3_init_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01003738 .mpu_irqs = omap44xx_mmc2_irqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003739 .sdma_reqs = omap44xx_mmc2_sdma_reqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003740 .main_clk = "mmc2_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06003741 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01003742 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003743 .clkctrl_offs = OMAP4_CM_L3INIT_MMC2_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003744 .context_offs = OMAP4_RM_L3INIT_MMC2_CONTEXT_OFFSET,
Benoit Cousson407a6882011-02-15 22:39:48 +01003745 },
3746 },
3747 .slaves = omap44xx_mmc2_slaves,
3748 .slaves_cnt = ARRAY_SIZE(omap44xx_mmc2_slaves),
3749 .masters = omap44xx_mmc2_masters,
3750 .masters_cnt = ARRAY_SIZE(omap44xx_mmc2_masters),
3751 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3752};
3753
3754/* mmc3 */
3755static struct omap_hwmod omap44xx_mmc3_hwmod;
3756static struct omap_hwmod_irq_info omap44xx_mmc3_irqs[] = {
3757 { .irq = 94 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003758 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003759};
3760
3761static struct omap_hwmod_dma_info omap44xx_mmc3_sdma_reqs[] = {
3762 { .name = "tx", .dma_req = 76 + OMAP44XX_DMA_REQ_START },
3763 { .name = "rx", .dma_req = 77 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003764 { .dma_req = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003765};
3766
3767static struct omap_hwmod_addr_space omap44xx_mmc3_addrs[] = {
3768 {
3769 .pa_start = 0x480ad000,
3770 .pa_end = 0x480ad3ff,
3771 .flags = ADDR_TYPE_RT
3772 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003773 { }
Benoit Cousson407a6882011-02-15 22:39:48 +01003774};
3775
3776/* l4_per -> mmc3 */
3777static struct omap_hwmod_ocp_if omap44xx_l4_per__mmc3 = {
3778 .master = &omap44xx_l4_per_hwmod,
3779 .slave = &omap44xx_mmc3_hwmod,
3780 .clk = "l4_div_ck",
3781 .addr = omap44xx_mmc3_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003782 .user = OCP_USER_MPU | OCP_USER_SDMA,
3783};
3784
3785/* mmc3 slave ports */
3786static struct omap_hwmod_ocp_if *omap44xx_mmc3_slaves[] = {
3787 &omap44xx_l4_per__mmc3,
3788};
3789
3790static struct omap_hwmod omap44xx_mmc3_hwmod = {
3791 .name = "mmc3",
3792 .class = &omap44xx_mmc_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003793 .clkdm_name = "l4_per_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01003794 .mpu_irqs = omap44xx_mmc3_irqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003795 .sdma_reqs = omap44xx_mmc3_sdma_reqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003796 .main_clk = "mmc3_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06003797 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01003798 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003799 .clkctrl_offs = OMAP4_CM_L4PER_MMCSD3_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003800 .context_offs = OMAP4_RM_L4PER_MMCSD3_CONTEXT_OFFSET,
Benoit Cousson407a6882011-02-15 22:39:48 +01003801 },
3802 },
3803 .slaves = omap44xx_mmc3_slaves,
3804 .slaves_cnt = ARRAY_SIZE(omap44xx_mmc3_slaves),
3805 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3806};
3807
3808/* mmc4 */
3809static struct omap_hwmod omap44xx_mmc4_hwmod;
3810static struct omap_hwmod_irq_info omap44xx_mmc4_irqs[] = {
3811 { .irq = 96 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003812 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003813};
3814
3815static struct omap_hwmod_dma_info omap44xx_mmc4_sdma_reqs[] = {
3816 { .name = "tx", .dma_req = 56 + OMAP44XX_DMA_REQ_START },
3817 { .name = "rx", .dma_req = 57 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003818 { .dma_req = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003819};
3820
3821static struct omap_hwmod_addr_space omap44xx_mmc4_addrs[] = {
3822 {
3823 .pa_start = 0x480d1000,
3824 .pa_end = 0x480d13ff,
3825 .flags = ADDR_TYPE_RT
3826 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003827 { }
Benoit Cousson407a6882011-02-15 22:39:48 +01003828};
3829
3830/* l4_per -> mmc4 */
3831static struct omap_hwmod_ocp_if omap44xx_l4_per__mmc4 = {
3832 .master = &omap44xx_l4_per_hwmod,
3833 .slave = &omap44xx_mmc4_hwmod,
3834 .clk = "l4_div_ck",
3835 .addr = omap44xx_mmc4_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003836 .user = OCP_USER_MPU | OCP_USER_SDMA,
3837};
3838
3839/* mmc4 slave ports */
3840static struct omap_hwmod_ocp_if *omap44xx_mmc4_slaves[] = {
3841 &omap44xx_l4_per__mmc4,
3842};
3843
3844static struct omap_hwmod omap44xx_mmc4_hwmod = {
3845 .name = "mmc4",
3846 .class = &omap44xx_mmc_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003847 .clkdm_name = "l4_per_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01003848 .mpu_irqs = omap44xx_mmc4_irqs,
Paul Walmsley212738a2011-07-09 19:14:06 -06003849
Benoit Cousson407a6882011-02-15 22:39:48 +01003850 .sdma_reqs = omap44xx_mmc4_sdma_reqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003851 .main_clk = "mmc4_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06003852 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01003853 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003854 .clkctrl_offs = OMAP4_CM_L4PER_MMCSD4_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003855 .context_offs = OMAP4_RM_L4PER_MMCSD4_CONTEXT_OFFSET,
Benoit Cousson407a6882011-02-15 22:39:48 +01003856 },
3857 },
3858 .slaves = omap44xx_mmc4_slaves,
3859 .slaves_cnt = ARRAY_SIZE(omap44xx_mmc4_slaves),
3860 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3861};
3862
3863/* mmc5 */
3864static struct omap_hwmod omap44xx_mmc5_hwmod;
3865static struct omap_hwmod_irq_info omap44xx_mmc5_irqs[] = {
3866 { .irq = 59 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003867 { .irq = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003868};
3869
3870static struct omap_hwmod_dma_info omap44xx_mmc5_sdma_reqs[] = {
3871 { .name = "tx", .dma_req = 58 + OMAP44XX_DMA_REQ_START },
3872 { .name = "rx", .dma_req = 59 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06003873 { .dma_req = -1 }
Benoit Cousson407a6882011-02-15 22:39:48 +01003874};
3875
3876static struct omap_hwmod_addr_space omap44xx_mmc5_addrs[] = {
3877 {
3878 .pa_start = 0x480d5000,
3879 .pa_end = 0x480d53ff,
3880 .flags = ADDR_TYPE_RT
3881 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003882 { }
Benoit Cousson407a6882011-02-15 22:39:48 +01003883};
3884
3885/* l4_per -> mmc5 */
3886static struct omap_hwmod_ocp_if omap44xx_l4_per__mmc5 = {
3887 .master = &omap44xx_l4_per_hwmod,
3888 .slave = &omap44xx_mmc5_hwmod,
3889 .clk = "l4_div_ck",
3890 .addr = omap44xx_mmc5_addrs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003891 .user = OCP_USER_MPU | OCP_USER_SDMA,
3892};
3893
3894/* mmc5 slave ports */
3895static struct omap_hwmod_ocp_if *omap44xx_mmc5_slaves[] = {
3896 &omap44xx_l4_per__mmc5,
3897};
3898
3899static struct omap_hwmod omap44xx_mmc5_hwmod = {
3900 .name = "mmc5",
3901 .class = &omap44xx_mmc_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003902 .clkdm_name = "l4_per_clkdm",
Benoit Cousson407a6882011-02-15 22:39:48 +01003903 .mpu_irqs = omap44xx_mmc5_irqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003904 .sdma_reqs = omap44xx_mmc5_sdma_reqs,
Benoit Cousson407a6882011-02-15 22:39:48 +01003905 .main_clk = "mmc5_fck",
Benoit Cousson00fe6102011-07-09 19:14:28 -06003906 .prcm = {
Benoit Cousson407a6882011-02-15 22:39:48 +01003907 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003908 .clkctrl_offs = OMAP4_CM_L4PER_MMCSD5_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003909 .context_offs = OMAP4_RM_L4PER_MMCSD5_CONTEXT_OFFSET,
Benoit Cousson407a6882011-02-15 22:39:48 +01003910 },
3911 },
3912 .slaves = omap44xx_mmc5_slaves,
3913 .slaves_cnt = ARRAY_SIZE(omap44xx_mmc5_slaves),
3914 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3915};
3916
3917/*
Benoit Cousson55d2cb02010-05-12 17:54:36 +02003918 * 'mpu' class
3919 * mpu sub-system
3920 */
3921
3922static struct omap_hwmod_class omap44xx_mpu_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +00003923 .name = "mpu",
Benoit Cousson55d2cb02010-05-12 17:54:36 +02003924};
3925
3926/* mpu */
3927static struct omap_hwmod_irq_info omap44xx_mpu_irqs[] = {
3928 { .name = "pl310", .irq = 0 + OMAP44XX_IRQ_GIC_START },
3929 { .name = "cti0", .irq = 1 + OMAP44XX_IRQ_GIC_START },
3930 { .name = "cti1", .irq = 2 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003931 { .irq = -1 }
Benoit Cousson55d2cb02010-05-12 17:54:36 +02003932};
3933
3934/* mpu master ports */
3935static struct omap_hwmod_ocp_if *omap44xx_mpu_masters[] = {
3936 &omap44xx_mpu__l3_main_1,
3937 &omap44xx_mpu__l4_abe,
3938 &omap44xx_mpu__dmm,
3939};
3940
3941static struct omap_hwmod omap44xx_mpu_hwmod = {
3942 .name = "mpu",
3943 .class = &omap44xx_mpu_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06003944 .clkdm_name = "mpuss_clkdm",
Benoit Cousson7ecc53732011-07-09 19:14:28 -06003945 .flags = HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET,
Benoit Cousson55d2cb02010-05-12 17:54:36 +02003946 .mpu_irqs = omap44xx_mpu_irqs,
Benoit Cousson55d2cb02010-05-12 17:54:36 +02003947 .main_clk = "dpll_mpu_m2_ck",
3948 .prcm = {
3949 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06003950 .clkctrl_offs = OMAP4_CM_MPU_MPU_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06003951 .context_offs = OMAP4_RM_MPU_MPU_CONTEXT_OFFSET,
Benoit Cousson55d2cb02010-05-12 17:54:36 +02003952 },
3953 },
3954 .masters = omap44xx_mpu_masters,
3955 .masters_cnt = ARRAY_SIZE(omap44xx_mpu_masters),
3956 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3957};
3958
Benoit Cousson92b18d12010-09-23 20:02:41 +05303959/*
Benoit Cousson1f6a7172010-12-23 22:30:30 +00003960 * 'smartreflex' class
3961 * smartreflex module (monitor silicon performance and outputs a measure of
3962 * performance error)
3963 */
3964
3965/* The IP is not compliant to type1 / type2 scheme */
3966static struct omap_hwmod_sysc_fields omap_hwmod_sysc_type_smartreflex = {
3967 .sidle_shift = 24,
3968 .enwkup_shift = 26,
3969};
3970
3971static struct omap_hwmod_class_sysconfig omap44xx_smartreflex_sysc = {
3972 .sysc_offs = 0x0038,
3973 .sysc_flags = (SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE),
3974 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
3975 SIDLE_SMART_WKUP),
3976 .sysc_fields = &omap_hwmod_sysc_type_smartreflex,
3977};
3978
3979static struct omap_hwmod_class omap44xx_smartreflex_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +00003980 .name = "smartreflex",
3981 .sysc = &omap44xx_smartreflex_sysc,
3982 .rev = 2,
Benoit Cousson1f6a7172010-12-23 22:30:30 +00003983};
3984
3985/* smartreflex_core */
3986static struct omap_hwmod omap44xx_smartreflex_core_hwmod;
3987static struct omap_hwmod_irq_info omap44xx_smartreflex_core_irqs[] = {
3988 { .irq = 19 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06003989 { .irq = -1 }
Benoit Cousson1f6a7172010-12-23 22:30:30 +00003990};
3991
3992static struct omap_hwmod_addr_space omap44xx_smartreflex_core_addrs[] = {
3993 {
3994 .pa_start = 0x4a0dd000,
3995 .pa_end = 0x4a0dd03f,
3996 .flags = ADDR_TYPE_RT
3997 },
Paul Walmsley78183f32011-07-09 19:14:05 -06003998 { }
Benoit Cousson1f6a7172010-12-23 22:30:30 +00003999};
4000
4001/* l4_cfg -> smartreflex_core */
4002static struct omap_hwmod_ocp_if omap44xx_l4_cfg__smartreflex_core = {
4003 .master = &omap44xx_l4_cfg_hwmod,
4004 .slave = &omap44xx_smartreflex_core_hwmod,
4005 .clk = "l4_div_ck",
4006 .addr = omap44xx_smartreflex_core_addrs,
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004007 .user = OCP_USER_MPU | OCP_USER_SDMA,
4008};
4009
4010/* smartreflex_core slave ports */
4011static struct omap_hwmod_ocp_if *omap44xx_smartreflex_core_slaves[] = {
4012 &omap44xx_l4_cfg__smartreflex_core,
4013};
4014
4015static struct omap_hwmod omap44xx_smartreflex_core_hwmod = {
4016 .name = "smartreflex_core",
4017 .class = &omap44xx_smartreflex_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004018 .clkdm_name = "l4_ao_clkdm",
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004019 .mpu_irqs = omap44xx_smartreflex_core_irqs,
Paul Walmsley212738a2011-07-09 19:14:06 -06004020
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004021 .main_clk = "smartreflex_core_fck",
4022 .vdd_name = "core",
4023 .prcm = {
4024 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004025 .clkctrl_offs = OMAP4_CM_ALWON_SR_CORE_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004026 .context_offs = OMAP4_RM_ALWON_SR_CORE_CONTEXT_OFFSET,
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004027 },
4028 },
4029 .slaves = omap44xx_smartreflex_core_slaves,
4030 .slaves_cnt = ARRAY_SIZE(omap44xx_smartreflex_core_slaves),
4031 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4032};
4033
4034/* smartreflex_iva */
4035static struct omap_hwmod omap44xx_smartreflex_iva_hwmod;
4036static struct omap_hwmod_irq_info omap44xx_smartreflex_iva_irqs[] = {
4037 { .irq = 102 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004038 { .irq = -1 }
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004039};
4040
4041static struct omap_hwmod_addr_space omap44xx_smartreflex_iva_addrs[] = {
4042 {
4043 .pa_start = 0x4a0db000,
4044 .pa_end = 0x4a0db03f,
4045 .flags = ADDR_TYPE_RT
4046 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004047 { }
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004048};
4049
4050/* l4_cfg -> smartreflex_iva */
4051static struct omap_hwmod_ocp_if omap44xx_l4_cfg__smartreflex_iva = {
4052 .master = &omap44xx_l4_cfg_hwmod,
4053 .slave = &omap44xx_smartreflex_iva_hwmod,
4054 .clk = "l4_div_ck",
4055 .addr = omap44xx_smartreflex_iva_addrs,
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004056 .user = OCP_USER_MPU | OCP_USER_SDMA,
4057};
4058
4059/* smartreflex_iva slave ports */
4060static struct omap_hwmod_ocp_if *omap44xx_smartreflex_iva_slaves[] = {
4061 &omap44xx_l4_cfg__smartreflex_iva,
4062};
4063
4064static struct omap_hwmod omap44xx_smartreflex_iva_hwmod = {
4065 .name = "smartreflex_iva",
4066 .class = &omap44xx_smartreflex_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004067 .clkdm_name = "l4_ao_clkdm",
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004068 .mpu_irqs = omap44xx_smartreflex_iva_irqs,
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004069 .main_clk = "smartreflex_iva_fck",
4070 .vdd_name = "iva",
4071 .prcm = {
4072 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004073 .clkctrl_offs = OMAP4_CM_ALWON_SR_IVA_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004074 .context_offs = OMAP4_RM_ALWON_SR_IVA_CONTEXT_OFFSET,
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004075 },
4076 },
4077 .slaves = omap44xx_smartreflex_iva_slaves,
4078 .slaves_cnt = ARRAY_SIZE(omap44xx_smartreflex_iva_slaves),
4079 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4080};
4081
4082/* smartreflex_mpu */
4083static struct omap_hwmod omap44xx_smartreflex_mpu_hwmod;
4084static struct omap_hwmod_irq_info omap44xx_smartreflex_mpu_irqs[] = {
4085 { .irq = 18 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004086 { .irq = -1 }
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004087};
4088
4089static struct omap_hwmod_addr_space omap44xx_smartreflex_mpu_addrs[] = {
4090 {
4091 .pa_start = 0x4a0d9000,
4092 .pa_end = 0x4a0d903f,
4093 .flags = ADDR_TYPE_RT
4094 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004095 { }
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004096};
4097
4098/* l4_cfg -> smartreflex_mpu */
4099static struct omap_hwmod_ocp_if omap44xx_l4_cfg__smartreflex_mpu = {
4100 .master = &omap44xx_l4_cfg_hwmod,
4101 .slave = &omap44xx_smartreflex_mpu_hwmod,
4102 .clk = "l4_div_ck",
4103 .addr = omap44xx_smartreflex_mpu_addrs,
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004104 .user = OCP_USER_MPU | OCP_USER_SDMA,
4105};
4106
4107/* smartreflex_mpu slave ports */
4108static struct omap_hwmod_ocp_if *omap44xx_smartreflex_mpu_slaves[] = {
4109 &omap44xx_l4_cfg__smartreflex_mpu,
4110};
4111
4112static struct omap_hwmod omap44xx_smartreflex_mpu_hwmod = {
4113 .name = "smartreflex_mpu",
4114 .class = &omap44xx_smartreflex_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004115 .clkdm_name = "l4_ao_clkdm",
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004116 .mpu_irqs = omap44xx_smartreflex_mpu_irqs,
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004117 .main_clk = "smartreflex_mpu_fck",
4118 .vdd_name = "mpu",
4119 .prcm = {
4120 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004121 .clkctrl_offs = OMAP4_CM_ALWON_SR_MPU_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004122 .context_offs = OMAP4_RM_ALWON_SR_MPU_CONTEXT_OFFSET,
Benoit Cousson1f6a7172010-12-23 22:30:30 +00004123 },
4124 },
4125 .slaves = omap44xx_smartreflex_mpu_slaves,
4126 .slaves_cnt = ARRAY_SIZE(omap44xx_smartreflex_mpu_slaves),
4127 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4128};
4129
4130/*
Benoit Coussond11c2172011-02-02 12:04:36 +00004131 * 'spinlock' class
4132 * spinlock provides hardware assistance for synchronizing the processes
4133 * running on multiple processors
4134 */
4135
4136static struct omap_hwmod_class_sysconfig omap44xx_spinlock_sysc = {
4137 .rev_offs = 0x0000,
4138 .sysc_offs = 0x0010,
4139 .syss_offs = 0x0014,
4140 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
4141 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
4142 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
4143 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
4144 SIDLE_SMART_WKUP),
4145 .sysc_fields = &omap_hwmod_sysc_type1,
4146};
4147
4148static struct omap_hwmod_class omap44xx_spinlock_hwmod_class = {
4149 .name = "spinlock",
4150 .sysc = &omap44xx_spinlock_sysc,
4151};
4152
4153/* spinlock */
4154static struct omap_hwmod omap44xx_spinlock_hwmod;
4155static struct omap_hwmod_addr_space omap44xx_spinlock_addrs[] = {
4156 {
4157 .pa_start = 0x4a0f6000,
4158 .pa_end = 0x4a0f6fff,
4159 .flags = ADDR_TYPE_RT
4160 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004161 { }
Benoit Coussond11c2172011-02-02 12:04:36 +00004162};
4163
4164/* l4_cfg -> spinlock */
4165static struct omap_hwmod_ocp_if omap44xx_l4_cfg__spinlock = {
4166 .master = &omap44xx_l4_cfg_hwmod,
4167 .slave = &omap44xx_spinlock_hwmod,
4168 .clk = "l4_div_ck",
4169 .addr = omap44xx_spinlock_addrs,
Benoit Coussond11c2172011-02-02 12:04:36 +00004170 .user = OCP_USER_MPU | OCP_USER_SDMA,
4171};
4172
4173/* spinlock slave ports */
4174static struct omap_hwmod_ocp_if *omap44xx_spinlock_slaves[] = {
4175 &omap44xx_l4_cfg__spinlock,
4176};
4177
4178static struct omap_hwmod omap44xx_spinlock_hwmod = {
4179 .name = "spinlock",
4180 .class = &omap44xx_spinlock_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004181 .clkdm_name = "l4_cfg_clkdm",
Benoit Coussond11c2172011-02-02 12:04:36 +00004182 .prcm = {
4183 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004184 .clkctrl_offs = OMAP4_CM_L4CFG_HW_SEM_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004185 .context_offs = OMAP4_RM_L4CFG_HW_SEM_CONTEXT_OFFSET,
Benoit Coussond11c2172011-02-02 12:04:36 +00004186 },
4187 },
4188 .slaves = omap44xx_spinlock_slaves,
4189 .slaves_cnt = ARRAY_SIZE(omap44xx_spinlock_slaves),
4190 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4191};
4192
4193/*
Benoit Cousson35d1a662011-02-11 11:17:14 +00004194 * 'timer' class
4195 * general purpose timer module with accurate 1ms tick
4196 * This class contains several variants: ['timer_1ms', 'timer']
4197 */
4198
4199static struct omap_hwmod_class_sysconfig omap44xx_timer_1ms_sysc = {
4200 .rev_offs = 0x0000,
4201 .sysc_offs = 0x0010,
4202 .syss_offs = 0x0014,
4203 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
4204 SYSC_HAS_EMUFREE | SYSC_HAS_ENAWAKEUP |
4205 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
4206 SYSS_HAS_RESET_STATUS),
4207 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
4208 .sysc_fields = &omap_hwmod_sysc_type1,
4209};
4210
4211static struct omap_hwmod_class omap44xx_timer_1ms_hwmod_class = {
4212 .name = "timer",
4213 .sysc = &omap44xx_timer_1ms_sysc,
4214};
4215
4216static struct omap_hwmod_class_sysconfig omap44xx_timer_sysc = {
4217 .rev_offs = 0x0000,
4218 .sysc_offs = 0x0010,
4219 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
4220 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
4221 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
4222 SIDLE_SMART_WKUP),
4223 .sysc_fields = &omap_hwmod_sysc_type2,
4224};
4225
4226static struct omap_hwmod_class omap44xx_timer_hwmod_class = {
4227 .name = "timer",
4228 .sysc = &omap44xx_timer_sysc,
4229};
4230
4231/* timer1 */
4232static struct omap_hwmod omap44xx_timer1_hwmod;
4233static struct omap_hwmod_irq_info omap44xx_timer1_irqs[] = {
4234 { .irq = 37 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004235 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004236};
4237
4238static struct omap_hwmod_addr_space omap44xx_timer1_addrs[] = {
4239 {
4240 .pa_start = 0x4a318000,
4241 .pa_end = 0x4a31807f,
4242 .flags = ADDR_TYPE_RT
4243 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004244 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004245};
4246
4247/* l4_wkup -> timer1 */
4248static struct omap_hwmod_ocp_if omap44xx_l4_wkup__timer1 = {
4249 .master = &omap44xx_l4_wkup_hwmod,
4250 .slave = &omap44xx_timer1_hwmod,
4251 .clk = "l4_wkup_clk_mux_ck",
4252 .addr = omap44xx_timer1_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004253 .user = OCP_USER_MPU | OCP_USER_SDMA,
4254};
4255
4256/* timer1 slave ports */
4257static struct omap_hwmod_ocp_if *omap44xx_timer1_slaves[] = {
4258 &omap44xx_l4_wkup__timer1,
4259};
4260
4261static struct omap_hwmod omap44xx_timer1_hwmod = {
4262 .name = "timer1",
4263 .class = &omap44xx_timer_1ms_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004264 .clkdm_name = "l4_wkup_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004265 .mpu_irqs = omap44xx_timer1_irqs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004266 .main_clk = "timer1_fck",
4267 .prcm = {
4268 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004269 .clkctrl_offs = OMAP4_CM_WKUP_TIMER1_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004270 .context_offs = OMAP4_RM_WKUP_TIMER1_CONTEXT_OFFSET,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004271 },
4272 },
4273 .slaves = omap44xx_timer1_slaves,
4274 .slaves_cnt = ARRAY_SIZE(omap44xx_timer1_slaves),
4275 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4276};
4277
4278/* timer2 */
4279static struct omap_hwmod omap44xx_timer2_hwmod;
4280static struct omap_hwmod_irq_info omap44xx_timer2_irqs[] = {
4281 { .irq = 38 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004282 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004283};
4284
4285static struct omap_hwmod_addr_space omap44xx_timer2_addrs[] = {
4286 {
4287 .pa_start = 0x48032000,
4288 .pa_end = 0x4803207f,
4289 .flags = ADDR_TYPE_RT
4290 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004291 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004292};
4293
4294/* l4_per -> timer2 */
4295static struct omap_hwmod_ocp_if omap44xx_l4_per__timer2 = {
4296 .master = &omap44xx_l4_per_hwmod,
4297 .slave = &omap44xx_timer2_hwmod,
4298 .clk = "l4_div_ck",
4299 .addr = omap44xx_timer2_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004300 .user = OCP_USER_MPU | OCP_USER_SDMA,
4301};
4302
4303/* timer2 slave ports */
4304static struct omap_hwmod_ocp_if *omap44xx_timer2_slaves[] = {
4305 &omap44xx_l4_per__timer2,
4306};
4307
4308static struct omap_hwmod omap44xx_timer2_hwmod = {
4309 .name = "timer2",
4310 .class = &omap44xx_timer_1ms_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004311 .clkdm_name = "l4_per_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004312 .mpu_irqs = omap44xx_timer2_irqs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004313 .main_clk = "timer2_fck",
4314 .prcm = {
4315 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004316 .clkctrl_offs = OMAP4_CM_L4PER_DMTIMER2_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004317 .context_offs = OMAP4_RM_L4PER_DMTIMER2_CONTEXT_OFFSET,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004318 },
4319 },
4320 .slaves = omap44xx_timer2_slaves,
4321 .slaves_cnt = ARRAY_SIZE(omap44xx_timer2_slaves),
4322 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4323};
4324
4325/* timer3 */
4326static struct omap_hwmod omap44xx_timer3_hwmod;
4327static struct omap_hwmod_irq_info omap44xx_timer3_irqs[] = {
4328 { .irq = 39 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004329 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004330};
4331
4332static struct omap_hwmod_addr_space omap44xx_timer3_addrs[] = {
4333 {
4334 .pa_start = 0x48034000,
4335 .pa_end = 0x4803407f,
4336 .flags = ADDR_TYPE_RT
4337 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004338 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004339};
4340
4341/* l4_per -> timer3 */
4342static struct omap_hwmod_ocp_if omap44xx_l4_per__timer3 = {
4343 .master = &omap44xx_l4_per_hwmod,
4344 .slave = &omap44xx_timer3_hwmod,
4345 .clk = "l4_div_ck",
4346 .addr = omap44xx_timer3_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004347 .user = OCP_USER_MPU | OCP_USER_SDMA,
4348};
4349
4350/* timer3 slave ports */
4351static struct omap_hwmod_ocp_if *omap44xx_timer3_slaves[] = {
4352 &omap44xx_l4_per__timer3,
4353};
4354
4355static struct omap_hwmod omap44xx_timer3_hwmod = {
4356 .name = "timer3",
4357 .class = &omap44xx_timer_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004358 .clkdm_name = "l4_per_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004359 .mpu_irqs = omap44xx_timer3_irqs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004360 .main_clk = "timer3_fck",
4361 .prcm = {
4362 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004363 .clkctrl_offs = OMAP4_CM_L4PER_DMTIMER3_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004364 .context_offs = OMAP4_RM_L4PER_DMTIMER3_CONTEXT_OFFSET,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004365 },
4366 },
4367 .slaves = omap44xx_timer3_slaves,
4368 .slaves_cnt = ARRAY_SIZE(omap44xx_timer3_slaves),
4369 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4370};
4371
4372/* timer4 */
4373static struct omap_hwmod omap44xx_timer4_hwmod;
4374static struct omap_hwmod_irq_info omap44xx_timer4_irqs[] = {
4375 { .irq = 40 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004376 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004377};
4378
4379static struct omap_hwmod_addr_space omap44xx_timer4_addrs[] = {
4380 {
4381 .pa_start = 0x48036000,
4382 .pa_end = 0x4803607f,
4383 .flags = ADDR_TYPE_RT
4384 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004385 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004386};
4387
4388/* l4_per -> timer4 */
4389static struct omap_hwmod_ocp_if omap44xx_l4_per__timer4 = {
4390 .master = &omap44xx_l4_per_hwmod,
4391 .slave = &omap44xx_timer4_hwmod,
4392 .clk = "l4_div_ck",
4393 .addr = omap44xx_timer4_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004394 .user = OCP_USER_MPU | OCP_USER_SDMA,
4395};
4396
4397/* timer4 slave ports */
4398static struct omap_hwmod_ocp_if *omap44xx_timer4_slaves[] = {
4399 &omap44xx_l4_per__timer4,
4400};
4401
4402static struct omap_hwmod omap44xx_timer4_hwmod = {
4403 .name = "timer4",
4404 .class = &omap44xx_timer_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004405 .clkdm_name = "l4_per_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004406 .mpu_irqs = omap44xx_timer4_irqs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004407 .main_clk = "timer4_fck",
4408 .prcm = {
4409 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004410 .clkctrl_offs = OMAP4_CM_L4PER_DMTIMER4_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004411 .context_offs = OMAP4_RM_L4PER_DMTIMER4_CONTEXT_OFFSET,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004412 },
4413 },
4414 .slaves = omap44xx_timer4_slaves,
4415 .slaves_cnt = ARRAY_SIZE(omap44xx_timer4_slaves),
4416 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4417};
4418
4419/* timer5 */
4420static struct omap_hwmod omap44xx_timer5_hwmod;
4421static struct omap_hwmod_irq_info omap44xx_timer5_irqs[] = {
4422 { .irq = 41 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004423 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004424};
4425
4426static struct omap_hwmod_addr_space omap44xx_timer5_addrs[] = {
4427 {
4428 .pa_start = 0x40138000,
4429 .pa_end = 0x4013807f,
4430 .flags = ADDR_TYPE_RT
4431 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004432 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004433};
4434
4435/* l4_abe -> timer5 */
4436static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer5 = {
4437 .master = &omap44xx_l4_abe_hwmod,
4438 .slave = &omap44xx_timer5_hwmod,
4439 .clk = "ocp_abe_iclk",
4440 .addr = omap44xx_timer5_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004441 .user = OCP_USER_MPU,
4442};
4443
4444static struct omap_hwmod_addr_space omap44xx_timer5_dma_addrs[] = {
4445 {
4446 .pa_start = 0x49038000,
4447 .pa_end = 0x4903807f,
4448 .flags = ADDR_TYPE_RT
4449 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004450 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004451};
4452
4453/* l4_abe -> timer5 (dma) */
4454static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer5_dma = {
4455 .master = &omap44xx_l4_abe_hwmod,
4456 .slave = &omap44xx_timer5_hwmod,
4457 .clk = "ocp_abe_iclk",
4458 .addr = omap44xx_timer5_dma_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004459 .user = OCP_USER_SDMA,
4460};
4461
4462/* timer5 slave ports */
4463static struct omap_hwmod_ocp_if *omap44xx_timer5_slaves[] = {
4464 &omap44xx_l4_abe__timer5,
4465 &omap44xx_l4_abe__timer5_dma,
4466};
4467
4468static struct omap_hwmod omap44xx_timer5_hwmod = {
4469 .name = "timer5",
4470 .class = &omap44xx_timer_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004471 .clkdm_name = "abe_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004472 .mpu_irqs = omap44xx_timer5_irqs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004473 .main_clk = "timer5_fck",
4474 .prcm = {
4475 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004476 .clkctrl_offs = OMAP4_CM1_ABE_TIMER5_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004477 .context_offs = OMAP4_RM_ABE_TIMER5_CONTEXT_OFFSET,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004478 },
4479 },
4480 .slaves = omap44xx_timer5_slaves,
4481 .slaves_cnt = ARRAY_SIZE(omap44xx_timer5_slaves),
4482 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4483};
4484
4485/* timer6 */
4486static struct omap_hwmod omap44xx_timer6_hwmod;
4487static struct omap_hwmod_irq_info omap44xx_timer6_irqs[] = {
4488 { .irq = 42 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004489 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004490};
4491
4492static struct omap_hwmod_addr_space omap44xx_timer6_addrs[] = {
4493 {
4494 .pa_start = 0x4013a000,
4495 .pa_end = 0x4013a07f,
4496 .flags = ADDR_TYPE_RT
4497 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004498 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004499};
4500
4501/* l4_abe -> timer6 */
4502static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer6 = {
4503 .master = &omap44xx_l4_abe_hwmod,
4504 .slave = &omap44xx_timer6_hwmod,
4505 .clk = "ocp_abe_iclk",
4506 .addr = omap44xx_timer6_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004507 .user = OCP_USER_MPU,
4508};
4509
4510static struct omap_hwmod_addr_space omap44xx_timer6_dma_addrs[] = {
4511 {
4512 .pa_start = 0x4903a000,
4513 .pa_end = 0x4903a07f,
4514 .flags = ADDR_TYPE_RT
4515 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004516 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004517};
4518
4519/* l4_abe -> timer6 (dma) */
4520static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer6_dma = {
4521 .master = &omap44xx_l4_abe_hwmod,
4522 .slave = &omap44xx_timer6_hwmod,
4523 .clk = "ocp_abe_iclk",
4524 .addr = omap44xx_timer6_dma_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004525 .user = OCP_USER_SDMA,
4526};
4527
4528/* timer6 slave ports */
4529static struct omap_hwmod_ocp_if *omap44xx_timer6_slaves[] = {
4530 &omap44xx_l4_abe__timer6,
4531 &omap44xx_l4_abe__timer6_dma,
4532};
4533
4534static struct omap_hwmod omap44xx_timer6_hwmod = {
4535 .name = "timer6",
4536 .class = &omap44xx_timer_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004537 .clkdm_name = "abe_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004538 .mpu_irqs = omap44xx_timer6_irqs,
Paul Walmsley212738a2011-07-09 19:14:06 -06004539
Benoit Cousson35d1a662011-02-11 11:17:14 +00004540 .main_clk = "timer6_fck",
4541 .prcm = {
4542 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004543 .clkctrl_offs = OMAP4_CM1_ABE_TIMER6_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004544 .context_offs = OMAP4_RM_ABE_TIMER6_CONTEXT_OFFSET,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004545 },
4546 },
4547 .slaves = omap44xx_timer6_slaves,
4548 .slaves_cnt = ARRAY_SIZE(omap44xx_timer6_slaves),
4549 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4550};
4551
4552/* timer7 */
4553static struct omap_hwmod omap44xx_timer7_hwmod;
4554static struct omap_hwmod_irq_info omap44xx_timer7_irqs[] = {
4555 { .irq = 43 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004556 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004557};
4558
4559static struct omap_hwmod_addr_space omap44xx_timer7_addrs[] = {
4560 {
4561 .pa_start = 0x4013c000,
4562 .pa_end = 0x4013c07f,
4563 .flags = ADDR_TYPE_RT
4564 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004565 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004566};
4567
4568/* l4_abe -> timer7 */
4569static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer7 = {
4570 .master = &omap44xx_l4_abe_hwmod,
4571 .slave = &omap44xx_timer7_hwmod,
4572 .clk = "ocp_abe_iclk",
4573 .addr = omap44xx_timer7_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004574 .user = OCP_USER_MPU,
4575};
4576
4577static struct omap_hwmod_addr_space omap44xx_timer7_dma_addrs[] = {
4578 {
4579 .pa_start = 0x4903c000,
4580 .pa_end = 0x4903c07f,
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_abe -> timer7 (dma) */
4587static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer7_dma = {
4588 .master = &omap44xx_l4_abe_hwmod,
4589 .slave = &omap44xx_timer7_hwmod,
4590 .clk = "ocp_abe_iclk",
4591 .addr = omap44xx_timer7_dma_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004592 .user = OCP_USER_SDMA,
4593};
4594
4595/* timer7 slave ports */
4596static struct omap_hwmod_ocp_if *omap44xx_timer7_slaves[] = {
4597 &omap44xx_l4_abe__timer7,
4598 &omap44xx_l4_abe__timer7_dma,
4599};
4600
4601static struct omap_hwmod omap44xx_timer7_hwmod = {
4602 .name = "timer7",
4603 .class = &omap44xx_timer_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004604 .clkdm_name = "abe_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004605 .mpu_irqs = omap44xx_timer7_irqs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004606 .main_clk = "timer7_fck",
4607 .prcm = {
4608 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004609 .clkctrl_offs = OMAP4_CM1_ABE_TIMER7_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004610 .context_offs = OMAP4_RM_ABE_TIMER7_CONTEXT_OFFSET,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004611 },
4612 },
4613 .slaves = omap44xx_timer7_slaves,
4614 .slaves_cnt = ARRAY_SIZE(omap44xx_timer7_slaves),
4615 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4616};
4617
4618/* timer8 */
4619static struct omap_hwmod omap44xx_timer8_hwmod;
4620static struct omap_hwmod_irq_info omap44xx_timer8_irqs[] = {
4621 { .irq = 44 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004622 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004623};
4624
4625static struct omap_hwmod_addr_space omap44xx_timer8_addrs[] = {
4626 {
4627 .pa_start = 0x4013e000,
4628 .pa_end = 0x4013e07f,
4629 .flags = ADDR_TYPE_RT
4630 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004631 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004632};
4633
4634/* l4_abe -> timer8 */
4635static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer8 = {
4636 .master = &omap44xx_l4_abe_hwmod,
4637 .slave = &omap44xx_timer8_hwmod,
4638 .clk = "ocp_abe_iclk",
4639 .addr = omap44xx_timer8_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004640 .user = OCP_USER_MPU,
4641};
4642
4643static struct omap_hwmod_addr_space omap44xx_timer8_dma_addrs[] = {
4644 {
4645 .pa_start = 0x4903e000,
4646 .pa_end = 0x4903e07f,
4647 .flags = ADDR_TYPE_RT
4648 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004649 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004650};
4651
4652/* l4_abe -> timer8 (dma) */
4653static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer8_dma = {
4654 .master = &omap44xx_l4_abe_hwmod,
4655 .slave = &omap44xx_timer8_hwmod,
4656 .clk = "ocp_abe_iclk",
4657 .addr = omap44xx_timer8_dma_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004658 .user = OCP_USER_SDMA,
4659};
4660
4661/* timer8 slave ports */
4662static struct omap_hwmod_ocp_if *omap44xx_timer8_slaves[] = {
4663 &omap44xx_l4_abe__timer8,
4664 &omap44xx_l4_abe__timer8_dma,
4665};
4666
4667static struct omap_hwmod omap44xx_timer8_hwmod = {
4668 .name = "timer8",
4669 .class = &omap44xx_timer_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004670 .clkdm_name = "abe_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004671 .mpu_irqs = omap44xx_timer8_irqs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004672 .main_clk = "timer8_fck",
4673 .prcm = {
4674 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004675 .clkctrl_offs = OMAP4_CM1_ABE_TIMER8_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004676 .context_offs = OMAP4_RM_ABE_TIMER8_CONTEXT_OFFSET,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004677 },
4678 },
4679 .slaves = omap44xx_timer8_slaves,
4680 .slaves_cnt = ARRAY_SIZE(omap44xx_timer8_slaves),
4681 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4682};
4683
4684/* timer9 */
4685static struct omap_hwmod omap44xx_timer9_hwmod;
4686static struct omap_hwmod_irq_info omap44xx_timer9_irqs[] = {
4687 { .irq = 45 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004688 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004689};
4690
4691static struct omap_hwmod_addr_space omap44xx_timer9_addrs[] = {
4692 {
4693 .pa_start = 0x4803e000,
4694 .pa_end = 0x4803e07f,
4695 .flags = ADDR_TYPE_RT
4696 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004697 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004698};
4699
4700/* l4_per -> timer9 */
4701static struct omap_hwmod_ocp_if omap44xx_l4_per__timer9 = {
4702 .master = &omap44xx_l4_per_hwmod,
4703 .slave = &omap44xx_timer9_hwmod,
4704 .clk = "l4_div_ck",
4705 .addr = omap44xx_timer9_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004706 .user = OCP_USER_MPU | OCP_USER_SDMA,
4707};
4708
4709/* timer9 slave ports */
4710static struct omap_hwmod_ocp_if *omap44xx_timer9_slaves[] = {
4711 &omap44xx_l4_per__timer9,
4712};
4713
4714static struct omap_hwmod omap44xx_timer9_hwmod = {
4715 .name = "timer9",
4716 .class = &omap44xx_timer_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004717 .clkdm_name = "l4_per_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004718 .mpu_irqs = omap44xx_timer9_irqs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004719 .main_clk = "timer9_fck",
4720 .prcm = {
4721 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004722 .clkctrl_offs = OMAP4_CM_L4PER_DMTIMER9_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004723 .context_offs = OMAP4_RM_L4PER_DMTIMER9_CONTEXT_OFFSET,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004724 },
4725 },
4726 .slaves = omap44xx_timer9_slaves,
4727 .slaves_cnt = ARRAY_SIZE(omap44xx_timer9_slaves),
4728 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4729};
4730
4731/* timer10 */
4732static struct omap_hwmod omap44xx_timer10_hwmod;
4733static struct omap_hwmod_irq_info omap44xx_timer10_irqs[] = {
4734 { .irq = 46 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004735 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004736};
4737
4738static struct omap_hwmod_addr_space omap44xx_timer10_addrs[] = {
4739 {
4740 .pa_start = 0x48086000,
4741 .pa_end = 0x4808607f,
4742 .flags = ADDR_TYPE_RT
4743 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004744 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004745};
4746
4747/* l4_per -> timer10 */
4748static struct omap_hwmod_ocp_if omap44xx_l4_per__timer10 = {
4749 .master = &omap44xx_l4_per_hwmod,
4750 .slave = &omap44xx_timer10_hwmod,
4751 .clk = "l4_div_ck",
4752 .addr = omap44xx_timer10_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004753 .user = OCP_USER_MPU | OCP_USER_SDMA,
4754};
4755
4756/* timer10 slave ports */
4757static struct omap_hwmod_ocp_if *omap44xx_timer10_slaves[] = {
4758 &omap44xx_l4_per__timer10,
4759};
4760
4761static struct omap_hwmod omap44xx_timer10_hwmod = {
4762 .name = "timer10",
4763 .class = &omap44xx_timer_1ms_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004764 .clkdm_name = "l4_per_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004765 .mpu_irqs = omap44xx_timer10_irqs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004766 .main_clk = "timer10_fck",
4767 .prcm = {
4768 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004769 .clkctrl_offs = OMAP4_CM_L4PER_DMTIMER10_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004770 .context_offs = OMAP4_RM_L4PER_DMTIMER10_CONTEXT_OFFSET,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004771 },
4772 },
4773 .slaves = omap44xx_timer10_slaves,
4774 .slaves_cnt = ARRAY_SIZE(omap44xx_timer10_slaves),
4775 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4776};
4777
4778/* timer11 */
4779static struct omap_hwmod omap44xx_timer11_hwmod;
4780static struct omap_hwmod_irq_info omap44xx_timer11_irqs[] = {
4781 { .irq = 47 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004782 { .irq = -1 }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004783};
4784
4785static struct omap_hwmod_addr_space omap44xx_timer11_addrs[] = {
4786 {
4787 .pa_start = 0x48088000,
4788 .pa_end = 0x4808807f,
4789 .flags = ADDR_TYPE_RT
4790 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004791 { }
Benoit Cousson35d1a662011-02-11 11:17:14 +00004792};
4793
4794/* l4_per -> timer11 */
4795static struct omap_hwmod_ocp_if omap44xx_l4_per__timer11 = {
4796 .master = &omap44xx_l4_per_hwmod,
4797 .slave = &omap44xx_timer11_hwmod,
4798 .clk = "l4_div_ck",
4799 .addr = omap44xx_timer11_addrs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004800 .user = OCP_USER_MPU | OCP_USER_SDMA,
4801};
4802
4803/* timer11 slave ports */
4804static struct omap_hwmod_ocp_if *omap44xx_timer11_slaves[] = {
4805 &omap44xx_l4_per__timer11,
4806};
4807
4808static struct omap_hwmod omap44xx_timer11_hwmod = {
4809 .name = "timer11",
4810 .class = &omap44xx_timer_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004811 .clkdm_name = "l4_per_clkdm",
Benoit Cousson35d1a662011-02-11 11:17:14 +00004812 .mpu_irqs = omap44xx_timer11_irqs,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004813 .main_clk = "timer11_fck",
4814 .prcm = {
4815 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004816 .clkctrl_offs = OMAP4_CM_L4PER_DMTIMER11_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004817 .context_offs = OMAP4_RM_L4PER_DMTIMER11_CONTEXT_OFFSET,
Benoit Cousson35d1a662011-02-11 11:17:14 +00004818 },
4819 },
4820 .slaves = omap44xx_timer11_slaves,
4821 .slaves_cnt = ARRAY_SIZE(omap44xx_timer11_slaves),
4822 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4823};
4824
4825/*
Benoit Coussondb12ba52010-09-27 20:19:19 +05304826 * 'uart' class
4827 * universal asynchronous receiver/transmitter (uart)
4828 */
4829
4830static struct omap_hwmod_class_sysconfig omap44xx_uart_sysc = {
4831 .rev_offs = 0x0050,
4832 .sysc_offs = 0x0054,
4833 .syss_offs = 0x0058,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07004834 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_ENAWAKEUP |
Benoit Cousson0cfe8752010-12-21 21:08:33 -07004835 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
4836 SYSS_HAS_RESET_STATUS),
Benoit Cousson7cffa6b2010-12-21 21:31:28 -07004837 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
4838 SIDLE_SMART_WKUP),
Benoit Coussondb12ba52010-09-27 20:19:19 +05304839 .sysc_fields = &omap_hwmod_sysc_type1,
4840};
4841
4842static struct omap_hwmod_class omap44xx_uart_hwmod_class = {
Benoit Coussonfe134712010-12-23 22:30:32 +00004843 .name = "uart",
4844 .sysc = &omap44xx_uart_sysc,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304845};
4846
4847/* uart1 */
4848static struct omap_hwmod omap44xx_uart1_hwmod;
4849static struct omap_hwmod_irq_info omap44xx_uart1_irqs[] = {
4850 { .irq = 72 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004851 { .irq = -1 }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304852};
4853
4854static struct omap_hwmod_dma_info omap44xx_uart1_sdma_reqs[] = {
4855 { .name = "tx", .dma_req = 48 + OMAP44XX_DMA_REQ_START },
4856 { .name = "rx", .dma_req = 49 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06004857 { .dma_req = -1 }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304858};
4859
4860static struct omap_hwmod_addr_space omap44xx_uart1_addrs[] = {
4861 {
4862 .pa_start = 0x4806a000,
4863 .pa_end = 0x4806a0ff,
4864 .flags = ADDR_TYPE_RT
4865 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004866 { }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304867};
4868
4869/* l4_per -> uart1 */
4870static struct omap_hwmod_ocp_if omap44xx_l4_per__uart1 = {
4871 .master = &omap44xx_l4_per_hwmod,
4872 .slave = &omap44xx_uart1_hwmod,
4873 .clk = "l4_div_ck",
4874 .addr = omap44xx_uart1_addrs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304875 .user = OCP_USER_MPU | OCP_USER_SDMA,
4876};
4877
4878/* uart1 slave ports */
4879static struct omap_hwmod_ocp_if *omap44xx_uart1_slaves[] = {
4880 &omap44xx_l4_per__uart1,
4881};
4882
4883static struct omap_hwmod omap44xx_uart1_hwmod = {
4884 .name = "uart1",
4885 .class = &omap44xx_uart_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004886 .clkdm_name = "l4_per_clkdm",
Benoit Coussondb12ba52010-09-27 20:19:19 +05304887 .mpu_irqs = omap44xx_uart1_irqs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304888 .sdma_reqs = omap44xx_uart1_sdma_reqs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304889 .main_clk = "uart1_fck",
4890 .prcm = {
4891 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004892 .clkctrl_offs = OMAP4_CM_L4PER_UART1_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004893 .context_offs = OMAP4_RM_L4PER_UART1_CONTEXT_OFFSET,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304894 },
4895 },
4896 .slaves = omap44xx_uart1_slaves,
4897 .slaves_cnt = ARRAY_SIZE(omap44xx_uart1_slaves),
4898 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4899};
4900
4901/* uart2 */
4902static struct omap_hwmod omap44xx_uart2_hwmod;
4903static struct omap_hwmod_irq_info omap44xx_uart2_irqs[] = {
4904 { .irq = 73 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004905 { .irq = -1 }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304906};
4907
4908static struct omap_hwmod_dma_info omap44xx_uart2_sdma_reqs[] = {
4909 { .name = "tx", .dma_req = 50 + OMAP44XX_DMA_REQ_START },
4910 { .name = "rx", .dma_req = 51 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06004911 { .dma_req = -1 }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304912};
4913
4914static struct omap_hwmod_addr_space omap44xx_uart2_addrs[] = {
4915 {
4916 .pa_start = 0x4806c000,
4917 .pa_end = 0x4806c0ff,
4918 .flags = ADDR_TYPE_RT
4919 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004920 { }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304921};
4922
4923/* l4_per -> uart2 */
4924static struct omap_hwmod_ocp_if omap44xx_l4_per__uart2 = {
4925 .master = &omap44xx_l4_per_hwmod,
4926 .slave = &omap44xx_uart2_hwmod,
4927 .clk = "l4_div_ck",
4928 .addr = omap44xx_uart2_addrs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304929 .user = OCP_USER_MPU | OCP_USER_SDMA,
4930};
4931
4932/* uart2 slave ports */
4933static struct omap_hwmod_ocp_if *omap44xx_uart2_slaves[] = {
4934 &omap44xx_l4_per__uart2,
4935};
4936
4937static struct omap_hwmod omap44xx_uart2_hwmod = {
4938 .name = "uart2",
4939 .class = &omap44xx_uart_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004940 .clkdm_name = "l4_per_clkdm",
Benoit Coussondb12ba52010-09-27 20:19:19 +05304941 .mpu_irqs = omap44xx_uart2_irqs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304942 .sdma_reqs = omap44xx_uart2_sdma_reqs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304943 .main_clk = "uart2_fck",
4944 .prcm = {
4945 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06004946 .clkctrl_offs = OMAP4_CM_L4PER_UART2_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06004947 .context_offs = OMAP4_RM_L4PER_UART2_CONTEXT_OFFSET,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304948 },
4949 },
4950 .slaves = omap44xx_uart2_slaves,
4951 .slaves_cnt = ARRAY_SIZE(omap44xx_uart2_slaves),
4952 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4953};
4954
4955/* uart3 */
4956static struct omap_hwmod omap44xx_uart3_hwmod;
4957static struct omap_hwmod_irq_info omap44xx_uart3_irqs[] = {
4958 { .irq = 74 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06004959 { .irq = -1 }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304960};
4961
4962static struct omap_hwmod_dma_info omap44xx_uart3_sdma_reqs[] = {
4963 { .name = "tx", .dma_req = 52 + OMAP44XX_DMA_REQ_START },
4964 { .name = "rx", .dma_req = 53 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06004965 { .dma_req = -1 }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304966};
4967
4968static struct omap_hwmod_addr_space omap44xx_uart3_addrs[] = {
4969 {
4970 .pa_start = 0x48020000,
4971 .pa_end = 0x480200ff,
4972 .flags = ADDR_TYPE_RT
4973 },
Paul Walmsley78183f32011-07-09 19:14:05 -06004974 { }
Benoit Coussondb12ba52010-09-27 20:19:19 +05304975};
4976
4977/* l4_per -> uart3 */
4978static struct omap_hwmod_ocp_if omap44xx_l4_per__uart3 = {
4979 .master = &omap44xx_l4_per_hwmod,
4980 .slave = &omap44xx_uart3_hwmod,
4981 .clk = "l4_div_ck",
4982 .addr = omap44xx_uart3_addrs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304983 .user = OCP_USER_MPU | OCP_USER_SDMA,
4984};
4985
4986/* uart3 slave ports */
4987static struct omap_hwmod_ocp_if *omap44xx_uart3_slaves[] = {
4988 &omap44xx_l4_per__uart3,
4989};
4990
4991static struct omap_hwmod omap44xx_uart3_hwmod = {
4992 .name = "uart3",
4993 .class = &omap44xx_uart_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06004994 .clkdm_name = "l4_per_clkdm",
Benoit Cousson7ecc53732011-07-09 19:14:28 -06004995 .flags = HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304996 .mpu_irqs = omap44xx_uart3_irqs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304997 .sdma_reqs = omap44xx_uart3_sdma_reqs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05304998 .main_clk = "uart3_fck",
4999 .prcm = {
5000 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06005001 .clkctrl_offs = OMAP4_CM_L4PER_UART3_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06005002 .context_offs = OMAP4_RM_L4PER_UART3_CONTEXT_OFFSET,
Benoit Coussondb12ba52010-09-27 20:19:19 +05305003 },
5004 },
5005 .slaves = omap44xx_uart3_slaves,
5006 .slaves_cnt = ARRAY_SIZE(omap44xx_uart3_slaves),
5007 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
5008};
5009
5010/* uart4 */
5011static struct omap_hwmod omap44xx_uart4_hwmod;
5012static struct omap_hwmod_irq_info omap44xx_uart4_irqs[] = {
5013 { .irq = 70 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06005014 { .irq = -1 }
Benoit Coussondb12ba52010-09-27 20:19:19 +05305015};
5016
5017static struct omap_hwmod_dma_info omap44xx_uart4_sdma_reqs[] = {
5018 { .name = "tx", .dma_req = 54 + OMAP44XX_DMA_REQ_START },
5019 { .name = "rx", .dma_req = 55 + OMAP44XX_DMA_REQ_START },
Paul Walmsleybc614952011-07-09 19:14:07 -06005020 { .dma_req = -1 }
Benoit Coussondb12ba52010-09-27 20:19:19 +05305021};
5022
5023static struct omap_hwmod_addr_space omap44xx_uart4_addrs[] = {
5024 {
5025 .pa_start = 0x4806e000,
5026 .pa_end = 0x4806e0ff,
5027 .flags = ADDR_TYPE_RT
5028 },
Paul Walmsley78183f32011-07-09 19:14:05 -06005029 { }
Benoit Coussondb12ba52010-09-27 20:19:19 +05305030};
5031
5032/* l4_per -> uart4 */
5033static struct omap_hwmod_ocp_if omap44xx_l4_per__uart4 = {
5034 .master = &omap44xx_l4_per_hwmod,
5035 .slave = &omap44xx_uart4_hwmod,
5036 .clk = "l4_div_ck",
5037 .addr = omap44xx_uart4_addrs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05305038 .user = OCP_USER_MPU | OCP_USER_SDMA,
5039};
5040
5041/* uart4 slave ports */
5042static struct omap_hwmod_ocp_if *omap44xx_uart4_slaves[] = {
5043 &omap44xx_l4_per__uart4,
5044};
5045
5046static struct omap_hwmod omap44xx_uart4_hwmod = {
5047 .name = "uart4",
5048 .class = &omap44xx_uart_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06005049 .clkdm_name = "l4_per_clkdm",
Benoit Coussondb12ba52010-09-27 20:19:19 +05305050 .mpu_irqs = omap44xx_uart4_irqs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05305051 .sdma_reqs = omap44xx_uart4_sdma_reqs,
Benoit Coussondb12ba52010-09-27 20:19:19 +05305052 .main_clk = "uart4_fck",
5053 .prcm = {
5054 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06005055 .clkctrl_offs = OMAP4_CM_L4PER_UART4_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06005056 .context_offs = OMAP4_RM_L4PER_UART4_CONTEXT_OFFSET,
Benoit Coussondb12ba52010-09-27 20:19:19 +05305057 },
5058 },
5059 .slaves = omap44xx_uart4_slaves,
5060 .slaves_cnt = ARRAY_SIZE(omap44xx_uart4_slaves),
5061 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
5062};
5063
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005064/*
Benoit Cousson5844c4e2011-02-17 12:41:05 +00005065 * 'usb_otg_hs' class
5066 * high-speed on-the-go universal serial bus (usb_otg_hs) controller
5067 */
5068
5069static struct omap_hwmod_class_sysconfig omap44xx_usb_otg_hs_sysc = {
5070 .rev_offs = 0x0400,
5071 .sysc_offs = 0x0404,
5072 .syss_offs = 0x0408,
5073 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_ENAWAKEUP |
5074 SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE |
5075 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
5076 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
5077 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
5078 MSTANDBY_SMART),
5079 .sysc_fields = &omap_hwmod_sysc_type1,
5080};
5081
5082static struct omap_hwmod_class omap44xx_usb_otg_hs_hwmod_class = {
Benoit Cousson00fe6102011-07-09 19:14:28 -06005083 .name = "usb_otg_hs",
5084 .sysc = &omap44xx_usb_otg_hs_sysc,
Benoit Cousson5844c4e2011-02-17 12:41:05 +00005085};
5086
5087/* usb_otg_hs */
5088static struct omap_hwmod_irq_info omap44xx_usb_otg_hs_irqs[] = {
5089 { .name = "mc", .irq = 92 + OMAP44XX_IRQ_GIC_START },
5090 { .name = "dma", .irq = 93 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06005091 { .irq = -1 }
Benoit Cousson5844c4e2011-02-17 12:41:05 +00005092};
5093
5094/* usb_otg_hs master ports */
5095static struct omap_hwmod_ocp_if *omap44xx_usb_otg_hs_masters[] = {
5096 &omap44xx_usb_otg_hs__l3_main_2,
5097};
5098
5099static struct omap_hwmod_addr_space omap44xx_usb_otg_hs_addrs[] = {
5100 {
5101 .pa_start = 0x4a0ab000,
5102 .pa_end = 0x4a0ab003,
5103 .flags = ADDR_TYPE_RT
5104 },
Paul Walmsley78183f32011-07-09 19:14:05 -06005105 { }
Benoit Cousson5844c4e2011-02-17 12:41:05 +00005106};
5107
5108/* l4_cfg -> usb_otg_hs */
5109static struct omap_hwmod_ocp_if omap44xx_l4_cfg__usb_otg_hs = {
5110 .master = &omap44xx_l4_cfg_hwmod,
5111 .slave = &omap44xx_usb_otg_hs_hwmod,
5112 .clk = "l4_div_ck",
5113 .addr = omap44xx_usb_otg_hs_addrs,
Benoit Cousson5844c4e2011-02-17 12:41:05 +00005114 .user = OCP_USER_MPU | OCP_USER_SDMA,
5115};
5116
5117/* usb_otg_hs slave ports */
5118static struct omap_hwmod_ocp_if *omap44xx_usb_otg_hs_slaves[] = {
5119 &omap44xx_l4_cfg__usb_otg_hs,
5120};
5121
5122static struct omap_hwmod_opt_clk usb_otg_hs_opt_clks[] = {
5123 { .role = "xclk", .clk = "usb_otg_hs_xclk" },
5124};
5125
5126static struct omap_hwmod omap44xx_usb_otg_hs_hwmod = {
5127 .name = "usb_otg_hs",
5128 .class = &omap44xx_usb_otg_hs_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06005129 .clkdm_name = "l3_init_clkdm",
Benoit Cousson5844c4e2011-02-17 12:41:05 +00005130 .flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY,
5131 .mpu_irqs = omap44xx_usb_otg_hs_irqs,
Benoit Cousson5844c4e2011-02-17 12:41:05 +00005132 .main_clk = "usb_otg_hs_ick",
5133 .prcm = {
5134 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06005135 .clkctrl_offs = OMAP4_CM_L3INIT_USB_OTG_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06005136 .context_offs = OMAP4_RM_L3INIT_USB_OTG_CONTEXT_OFFSET,
Benoit Cousson5844c4e2011-02-17 12:41:05 +00005137 },
5138 },
5139 .opt_clks = usb_otg_hs_opt_clks,
Benoit Cousson00fe6102011-07-09 19:14:28 -06005140 .opt_clks_cnt = ARRAY_SIZE(usb_otg_hs_opt_clks),
Benoit Cousson5844c4e2011-02-17 12:41:05 +00005141 .slaves = omap44xx_usb_otg_hs_slaves,
5142 .slaves_cnt = ARRAY_SIZE(omap44xx_usb_otg_hs_slaves),
5143 .masters = omap44xx_usb_otg_hs_masters,
5144 .masters_cnt = ARRAY_SIZE(omap44xx_usb_otg_hs_masters),
5145 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
5146};
5147
5148/*
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005149 * 'wd_timer' class
5150 * 32-bit watchdog upward counter that generates a pulse on the reset pin on
5151 * overflow condition
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005152 */
5153
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005154static struct omap_hwmod_class_sysconfig omap44xx_wd_timer_sysc = {
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005155 .rev_offs = 0x0000,
5156 .sysc_offs = 0x0010,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005157 .syss_offs = 0x0014,
5158 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_SIDLEMODE |
Benoit Cousson0cfe8752010-12-21 21:08:33 -07005159 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
Benoit Cousson7cffa6b2010-12-21 21:31:28 -07005160 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
5161 SIDLE_SMART_WKUP),
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005162 .sysc_fields = &omap_hwmod_sysc_type1,
5163};
5164
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005165static struct omap_hwmod_class omap44xx_wd_timer_hwmod_class = {
5166 .name = "wd_timer",
5167 .sysc = &omap44xx_wd_timer_sysc,
Benoit Coussonfe134712010-12-23 22:30:32 +00005168 .pre_shutdown = &omap2_wd_timer_disable,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005169};
5170
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005171/* wd_timer2 */
5172static struct omap_hwmod omap44xx_wd_timer2_hwmod;
5173static struct omap_hwmod_irq_info omap44xx_wd_timer2_irqs[] = {
5174 { .irq = 80 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06005175 { .irq = -1 }
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005176};
5177
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005178static struct omap_hwmod_addr_space omap44xx_wd_timer2_addrs[] = {
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005179 {
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005180 .pa_start = 0x4a314000,
5181 .pa_end = 0x4a31407f,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005182 .flags = ADDR_TYPE_RT
5183 },
Paul Walmsley78183f32011-07-09 19:14:05 -06005184 { }
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005185};
5186
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005187/* l4_wkup -> wd_timer2 */
5188static struct omap_hwmod_ocp_if omap44xx_l4_wkup__wd_timer2 = {
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005189 .master = &omap44xx_l4_wkup_hwmod,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005190 .slave = &omap44xx_wd_timer2_hwmod,
5191 .clk = "l4_wkup_clk_mux_ck",
5192 .addr = omap44xx_wd_timer2_addrs,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005193 .user = OCP_USER_MPU | OCP_USER_SDMA,
5194};
5195
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005196/* wd_timer2 slave ports */
5197static struct omap_hwmod_ocp_if *omap44xx_wd_timer2_slaves[] = {
5198 &omap44xx_l4_wkup__wd_timer2,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005199};
5200
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005201static struct omap_hwmod omap44xx_wd_timer2_hwmod = {
5202 .name = "wd_timer2",
5203 .class = &omap44xx_wd_timer_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06005204 .clkdm_name = "l4_wkup_clkdm",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005205 .mpu_irqs = omap44xx_wd_timer2_irqs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005206 .main_clk = "wd_timer2_fck",
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005207 .prcm = {
5208 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06005209 .clkctrl_offs = OMAP4_CM_WKUP_WDT2_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06005210 .context_offs = OMAP4_RM_WKUP_WDT2_CONTEXT_OFFSET,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005211 },
5212 },
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005213 .slaves = omap44xx_wd_timer2_slaves,
5214 .slaves_cnt = ARRAY_SIZE(omap44xx_wd_timer2_slaves),
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005215 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
5216};
5217
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005218/* wd_timer3 */
5219static struct omap_hwmod omap44xx_wd_timer3_hwmod;
5220static struct omap_hwmod_irq_info omap44xx_wd_timer3_irqs[] = {
5221 { .irq = 36 + OMAP44XX_IRQ_GIC_START },
Paul Walmsley212738a2011-07-09 19:14:06 -06005222 { .irq = -1 }
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005223};
5224
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005225static struct omap_hwmod_addr_space omap44xx_wd_timer3_addrs[] = {
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005226 {
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005227 .pa_start = 0x40130000,
5228 .pa_end = 0x4013007f,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005229 .flags = ADDR_TYPE_RT
5230 },
Paul Walmsley78183f32011-07-09 19:14:05 -06005231 { }
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005232};
5233
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005234/* l4_abe -> wd_timer3 */
5235static struct omap_hwmod_ocp_if omap44xx_l4_abe__wd_timer3 = {
5236 .master = &omap44xx_l4_abe_hwmod,
5237 .slave = &omap44xx_wd_timer3_hwmod,
5238 .clk = "ocp_abe_iclk",
5239 .addr = omap44xx_wd_timer3_addrs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005240 .user = OCP_USER_MPU,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005241};
5242
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005243static struct omap_hwmod_addr_space omap44xx_wd_timer3_dma_addrs[] = {
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005244 {
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005245 .pa_start = 0x49030000,
5246 .pa_end = 0x4903007f,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005247 .flags = ADDR_TYPE_RT
5248 },
Paul Walmsley78183f32011-07-09 19:14:05 -06005249 { }
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005250};
5251
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005252/* l4_abe -> wd_timer3 (dma) */
5253static struct omap_hwmod_ocp_if omap44xx_l4_abe__wd_timer3_dma = {
5254 .master = &omap44xx_l4_abe_hwmod,
5255 .slave = &omap44xx_wd_timer3_hwmod,
5256 .clk = "ocp_abe_iclk",
5257 .addr = omap44xx_wd_timer3_dma_addrs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005258 .user = OCP_USER_SDMA,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005259};
5260
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005261/* wd_timer3 slave ports */
5262static struct omap_hwmod_ocp_if *omap44xx_wd_timer3_slaves[] = {
5263 &omap44xx_l4_abe__wd_timer3,
5264 &omap44xx_l4_abe__wd_timer3_dma,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005265};
5266
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005267static struct omap_hwmod omap44xx_wd_timer3_hwmod = {
5268 .name = "wd_timer3",
5269 .class = &omap44xx_wd_timer_hwmod_class,
Benoit Coussona5322c62011-07-10 05:56:29 -06005270 .clkdm_name = "abe_clkdm",
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005271 .mpu_irqs = omap44xx_wd_timer3_irqs,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005272 .main_clk = "wd_timer3_fck",
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005273 .prcm = {
5274 .omap4 = {
Benoit Coussond0f06312011-07-10 05:56:30 -06005275 .clkctrl_offs = OMAP4_CM1_ABE_WDT3_CLKCTRL_OFFSET,
Benoit Cousson27bb00b2011-07-10 05:56:32 -06005276 .context_offs = OMAP4_RM_ABE_WDT3_CONTEXT_OFFSET,
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005277 },
5278 },
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005279 .slaves = omap44xx_wd_timer3_slaves,
5280 .slaves_cnt = ARRAY_SIZE(omap44xx_wd_timer3_slaves),
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005281 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
5282};
5283
Benoit Cousson55d2cb02010-05-12 17:54:36 +02005284static __initdata struct omap_hwmod *omap44xx_hwmods[] = {
Benoit Coussonfe134712010-12-23 22:30:32 +00005285
Benoit Cousson55d2cb02010-05-12 17:54:36 +02005286 /* dmm class */
5287 &omap44xx_dmm_hwmod,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005288
Benoit Cousson55d2cb02010-05-12 17:54:36 +02005289 /* emif_fw class */
5290 &omap44xx_emif_fw_hwmod,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005291
Benoit Cousson55d2cb02010-05-12 17:54:36 +02005292 /* l3 class */
5293 &omap44xx_l3_instr_hwmod,
5294 &omap44xx_l3_main_1_hwmod,
5295 &omap44xx_l3_main_2_hwmod,
5296 &omap44xx_l3_main_3_hwmod,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005297
Benoit Cousson55d2cb02010-05-12 17:54:36 +02005298 /* l4 class */
5299 &omap44xx_l4_abe_hwmod,
5300 &omap44xx_l4_cfg_hwmod,
5301 &omap44xx_l4_per_hwmod,
5302 &omap44xx_l4_wkup_hwmod,
Benoit Cousson531ce0d2010-12-20 18:27:19 -08005303
Benoit Cousson55d2cb02010-05-12 17:54:36 +02005304 /* mpu_bus class */
5305 &omap44xx_mpu_private_hwmod,
5306
Benoit Cousson407a6882011-02-15 22:39:48 +01005307 /* aess class */
5308/* &omap44xx_aess_hwmod, */
5309
5310 /* bandgap class */
5311 &omap44xx_bandgap_hwmod,
5312
5313 /* counter class */
5314/* &omap44xx_counter_32k_hwmod, */
5315
Benoit Coussond7cf5f32010-12-23 22:30:31 +00005316 /* dma class */
5317 &omap44xx_dma_system_hwmod,
5318
Benoit Cousson8ca476d2011-01-25 22:01:00 +00005319 /* dmic class */
5320 &omap44xx_dmic_hwmod,
5321
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07005322 /* dsp class */
5323 &omap44xx_dsp_hwmod,
5324 &omap44xx_dsp_c0_hwmod,
5325
Benoit Coussond63bd742011-01-27 11:17:03 +00005326 /* dss class */
5327 &omap44xx_dss_hwmod,
5328 &omap44xx_dss_dispc_hwmod,
5329 &omap44xx_dss_dsi1_hwmod,
5330 &omap44xx_dss_dsi2_hwmod,
5331 &omap44xx_dss_hdmi_hwmod,
5332 &omap44xx_dss_rfbi_hwmod,
5333 &omap44xx_dss_venc_hwmod,
5334
Benoit Cousson9780a9c2010-12-07 16:26:57 -08005335 /* gpio class */
5336 &omap44xx_gpio1_hwmod,
5337 &omap44xx_gpio2_hwmod,
5338 &omap44xx_gpio3_hwmod,
5339 &omap44xx_gpio4_hwmod,
5340 &omap44xx_gpio5_hwmod,
5341 &omap44xx_gpio6_hwmod,
5342
Benoit Cousson407a6882011-02-15 22:39:48 +01005343 /* hsi class */
5344/* &omap44xx_hsi_hwmod, */
5345
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005346 /* i2c class */
5347 &omap44xx_i2c1_hwmod,
5348 &omap44xx_i2c2_hwmod,
5349 &omap44xx_i2c3_hwmod,
5350 &omap44xx_i2c4_hwmod,
5351
Benoit Cousson407a6882011-02-15 22:39:48 +01005352 /* ipu class */
5353 &omap44xx_ipu_hwmod,
5354 &omap44xx_ipu_c0_hwmod,
5355 &omap44xx_ipu_c1_hwmod,
5356
5357 /* iss class */
5358/* &omap44xx_iss_hwmod, */
5359
Benoit Cousson8f25bdc2010-12-21 21:08:34 -07005360 /* iva class */
5361 &omap44xx_iva_hwmod,
5362 &omap44xx_iva_seq0_hwmod,
5363 &omap44xx_iva_seq1_hwmod,
5364
Benoit Cousson407a6882011-02-15 22:39:48 +01005365 /* kbd class */
Shubhrajyoti D4998b2452011-05-04 14:57:44 -07005366 &omap44xx_kbd_hwmod,
Benoit Cousson407a6882011-02-15 22:39:48 +01005367
Benoit Coussonec5df922011-02-02 19:27:21 +00005368 /* mailbox class */
5369 &omap44xx_mailbox_hwmod,
5370
Benoit Cousson4ddff492011-01-31 14:50:30 +00005371 /* mcbsp class */
5372 &omap44xx_mcbsp1_hwmod,
5373 &omap44xx_mcbsp2_hwmod,
5374 &omap44xx_mcbsp3_hwmod,
5375 &omap44xx_mcbsp4_hwmod,
5376
Benoit Cousson407a6882011-02-15 22:39:48 +01005377 /* mcpdm class */
5378/* &omap44xx_mcpdm_hwmod, */
5379
Benoit Cousson9bcbd7f2011-02-02 17:52:13 +05305380 /* mcspi class */
5381 &omap44xx_mcspi1_hwmod,
5382 &omap44xx_mcspi2_hwmod,
5383 &omap44xx_mcspi3_hwmod,
5384 &omap44xx_mcspi4_hwmod,
5385
Benoit Cousson407a6882011-02-15 22:39:48 +01005386 /* mmc class */
Anand Gadiyar17203bd2011-03-01 13:12:56 -08005387 &omap44xx_mmc1_hwmod,
5388 &omap44xx_mmc2_hwmod,
5389 &omap44xx_mmc3_hwmod,
5390 &omap44xx_mmc4_hwmod,
5391 &omap44xx_mmc5_hwmod,
Benoit Cousson407a6882011-02-15 22:39:48 +01005392
Benoit Cousson55d2cb02010-05-12 17:54:36 +02005393 /* mpu class */
5394 &omap44xx_mpu_hwmod,
Benoit Coussondb12ba52010-09-27 20:19:19 +05305395
Benoit Cousson1f6a7172010-12-23 22:30:30 +00005396 /* smartreflex class */
5397 &omap44xx_smartreflex_core_hwmod,
5398 &omap44xx_smartreflex_iva_hwmod,
5399 &omap44xx_smartreflex_mpu_hwmod,
5400
Benoit Coussond11c2172011-02-02 12:04:36 +00005401 /* spinlock class */
5402 &omap44xx_spinlock_hwmod,
5403
Benoit Cousson35d1a662011-02-11 11:17:14 +00005404 /* timer class */
5405 &omap44xx_timer1_hwmod,
5406 &omap44xx_timer2_hwmod,
5407 &omap44xx_timer3_hwmod,
5408 &omap44xx_timer4_hwmod,
5409 &omap44xx_timer5_hwmod,
5410 &omap44xx_timer6_hwmod,
5411 &omap44xx_timer7_hwmod,
5412 &omap44xx_timer8_hwmod,
5413 &omap44xx_timer9_hwmod,
5414 &omap44xx_timer10_hwmod,
5415 &omap44xx_timer11_hwmod,
5416
Benoit Coussondb12ba52010-09-27 20:19:19 +05305417 /* uart class */
5418 &omap44xx_uart1_hwmod,
5419 &omap44xx_uart2_hwmod,
5420 &omap44xx_uart3_hwmod,
5421 &omap44xx_uart4_hwmod,
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005422
Benoit Cousson5844c4e2011-02-17 12:41:05 +00005423 /* usb_otg_hs class */
5424 &omap44xx_usb_otg_hs_hwmod,
5425
Benoit Cousson3b54baa2010-12-21 21:08:33 -07005426 /* wd_timer class */
5427 &omap44xx_wd_timer2_hwmod,
5428 &omap44xx_wd_timer3_hwmod,
5429
Benoit Cousson55d2cb02010-05-12 17:54:36 +02005430 NULL,
5431};
5432
5433int __init omap44xx_hwmod_init(void)
5434{
Paul Walmsley550c8092011-02-28 11:58:14 -07005435 return omap_hwmod_register(omap44xx_hwmods);
Benoit Cousson55d2cb02010-05-12 17:54:36 +02005436}
5437