diff options
author | Benoit Cousson <b-cousson@ti.com> | 2010-05-12 11:54:36 -0400 |
---|---|---|
committer | Kevin Hilman <khilman@deeprootsystems.com> | 2010-09-23 20:14:15 -0400 |
commit | 55d2cb0814f4285f89be8ed474a8ae7042fb5735 (patch) | |
tree | 46b07ff475043a3bdb5581b995327237c6662b29 | |
parent | 0d5e825252e184a5608c8a9827b79f591535b806 (diff) |
OMAP4: hwmod: Add initial data for OMAP4430 ES1 & ES2
The current version contains only the interconnects and the
mpu hwmods.
The remaining hwmods will be introduced by further patches on
top of this one.
- enable as well omap_hwmod.c build for OMAP4 Soc
Please not that this file uses the new naming convention for
naming HW IPs. This convention will be backported soon for previous
OMAP2 & 3 data files.
new name trm name
------------- -------------------
counter_32k synctimer_32k
l3_main l3
timerX gptimerX / dmtimerX
mmcX mmchsX / sdmmcX
dma_system sdma
smartreflex_X sr_X / sr?
usb_host_fs usbfshost
usb_otg_hs hsusbotg
usb_tll_hs usbtllhs_config
wd_timerX wdtimerX
ipu cortexm3 / ducati
dsp c6x / tesla
iva ivahd / iva2.2
kbd kbdocp / keyboard
mailbox system_mailbox
mpu cortexa9 / chiron
Signed-off-by: Benoit Cousson <b-cousson@ti.com>
Cc: Paul Walmsley <paul@pwsan.com>
Cc: Kevin Hilman <khilman@deeprootsystems.com>
Cc: Rajendra Nayak <rnayak@ti.com>
Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
-rw-r--r-- | arch/arm/mach-omap2/Makefile | 1 | ||||
-rw-r--r-- | arch/arm/mach-omap2/io.c | 7 | ||||
-rw-r--r-- | arch/arm/mach-omap2/omap_hwmod_44xx_data.c | 482 | ||||
-rw-r--r-- | arch/arm/plat-omap/Makefile | 2 | ||||
-rw-r--r-- | arch/arm/plat-omap/include/plat/omap_hwmod.h | 1 |
5 files changed, 489 insertions, 4 deletions
diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile index 88d3a1e920f5..29d40b2a4f5d 100644 --- a/arch/arm/mach-omap2/Makefile +++ b/arch/arm/mach-omap2/Makefile | |||
@@ -87,6 +87,7 @@ obj-$(CONFIG_ARCH_OMAP2430) += opp2430_data.o | |||
87 | obj-$(CONFIG_ARCH_OMAP2420) += omap_hwmod_2420_data.o | 87 | obj-$(CONFIG_ARCH_OMAP2420) += omap_hwmod_2420_data.o |
88 | obj-$(CONFIG_ARCH_OMAP2430) += omap_hwmod_2430_data.o | 88 | obj-$(CONFIG_ARCH_OMAP2430) += omap_hwmod_2430_data.o |
89 | obj-$(CONFIG_ARCH_OMAP3) += omap_hwmod_3xxx_data.o | 89 | obj-$(CONFIG_ARCH_OMAP3) += omap_hwmod_3xxx_data.o |
90 | obj-$(CONFIG_ARCH_OMAP4) += omap_hwmod_44xx_data.o | ||
90 | 91 | ||
91 | # EMU peripherals | 92 | # EMU peripherals |
92 | obj-$(CONFIG_OMAP3_EMU) += emu.o | 93 | obj-$(CONFIG_OMAP3_EMU) += emu.o |
diff --git a/arch/arm/mach-omap2/io.c b/arch/arm/mach-omap2/io.c index b9ea70bce563..490d87082fad 100644 --- a/arch/arm/mach-omap2/io.c +++ b/arch/arm/mach-omap2/io.c | |||
@@ -323,6 +323,9 @@ void __init omap2_init_common_hw(struct omap_sdrc_params *sdrc_cs0, | |||
323 | omap2430_hwmod_init(); | 323 | omap2430_hwmod_init(); |
324 | else if (cpu_is_omap34xx()) | 324 | else if (cpu_is_omap34xx()) |
325 | omap3xxx_hwmod_init(); | 325 | omap3xxx_hwmod_init(); |
326 | else if (cpu_is_omap44xx()) | ||
327 | omap44xx_hwmod_init(); | ||
328 | |||
326 | /* The OPP tables have to be registered before a clk init */ | 329 | /* The OPP tables have to be registered before a clk init */ |
327 | omap_pm_if_early_init(mpu_opps, dsp_opps, l3_opps); | 330 | omap_pm_if_early_init(mpu_opps, dsp_opps, l3_opps); |
328 | 331 | ||
@@ -342,9 +345,7 @@ void __init omap2_init_common_hw(struct omap_sdrc_params *sdrc_cs0, | |||
342 | #ifndef CONFIG_PM_RUNTIME | 345 | #ifndef CONFIG_PM_RUNTIME |
343 | skip_setup_idle = 1; | 346 | skip_setup_idle = 1; |
344 | #endif | 347 | #endif |
345 | if (cpu_is_omap24xx() || cpu_is_omap34xx()) /* FIXME: OMAP4 */ | 348 | omap_hwmod_late_init(skip_setup_idle); |
346 | omap_hwmod_late_init(skip_setup_idle); | ||
347 | |||
348 | if (cpu_is_omap24xx() || cpu_is_omap34xx()) { | 349 | if (cpu_is_omap24xx() || cpu_is_omap34xx()) { |
349 | omap2_sdrc_init(sdrc_cs0, sdrc_cs1); | 350 | omap2_sdrc_init(sdrc_cs0, sdrc_cs1); |
350 | _omap2_init_reprogram_sdrc(); | 351 | _omap2_init_reprogram_sdrc(); |
diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c new file mode 100644 index 000000000000..e20b0eebc6d9 --- /dev/null +++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c | |||
@@ -0,0 +1,482 @@ | |||
1 | /* | ||
2 | * Hardware modules present on the OMAP44xx chips | ||
3 | * | ||
4 | * Copyright (C) 2009-2010 Texas Instruments, Inc. | ||
5 | * Copyright (C) 2009-2010 Nokia Corporation | ||
6 | * | ||
7 | * Paul Walmsley | ||
8 | * Benoit Cousson | ||
9 | * | ||
10 | * This file is automatically generated from the OMAP hardware databases. | ||
11 | * We respectfully ask that any modifications to this file be coordinated | ||
12 | * with the public linux-omap@vger.kernel.org mailing list and the | ||
13 | * authors above to ensure that the autogeneration scripts are kept | ||
14 | * up-to-date with the file contents. | ||
15 | * | ||
16 | * This program is free software; you can redistribute it and/or modify | ||
17 | * it under the terms of the GNU General Public License version 2 as | ||
18 | * published by the Free Software Foundation. | ||
19 | */ | ||
20 | |||
21 | #include <linux/io.h> | ||
22 | |||
23 | #include <plat/omap_hwmod.h> | ||
24 | #include <plat/cpu.h> | ||
25 | |||
26 | #include "omap_hwmod_common_data.h" | ||
27 | |||
28 | #include "cm.h" | ||
29 | #include "prm-regbits-44xx.h" | ||
30 | |||
31 | /* Base offset for all OMAP4 interrupts external to MPUSS */ | ||
32 | #define OMAP44XX_IRQ_GIC_START 32 | ||
33 | |||
34 | /* Base offset for all OMAP4 dma requests */ | ||
35 | #define OMAP44XX_DMA_REQ_START 1 | ||
36 | |||
37 | /* Backward references (IPs with Bus Master capability) */ | ||
38 | static struct omap_hwmod omap44xx_dmm_hwmod; | ||
39 | static struct omap_hwmod omap44xx_emif_fw_hwmod; | ||
40 | static struct omap_hwmod omap44xx_l3_instr_hwmod; | ||
41 | static struct omap_hwmod omap44xx_l3_main_1_hwmod; | ||
42 | static struct omap_hwmod omap44xx_l3_main_2_hwmod; | ||
43 | static struct omap_hwmod omap44xx_l3_main_3_hwmod; | ||
44 | static struct omap_hwmod omap44xx_l4_abe_hwmod; | ||
45 | static struct omap_hwmod omap44xx_l4_cfg_hwmod; | ||
46 | static struct omap_hwmod omap44xx_l4_per_hwmod; | ||
47 | static struct omap_hwmod omap44xx_l4_wkup_hwmod; | ||
48 | static struct omap_hwmod omap44xx_mpu_hwmod; | ||
49 | static struct omap_hwmod omap44xx_mpu_private_hwmod; | ||
50 | |||
51 | /* | ||
52 | * Interconnects omap_hwmod structures | ||
53 | * hwmods that compose the global OMAP interconnect | ||
54 | */ | ||
55 | |||
56 | /* | ||
57 | * 'dmm' class | ||
58 | * instance(s): dmm | ||
59 | */ | ||
60 | static struct omap_hwmod_class omap44xx_dmm_hwmod_class = { | ||
61 | .name = "dmm", | ||
62 | }; | ||
63 | |||
64 | /* dmm interface data */ | ||
65 | /* l3_main_1 -> dmm */ | ||
66 | static struct omap_hwmod_ocp_if omap44xx_l3_main_1__dmm = { | ||
67 | .master = &omap44xx_l3_main_1_hwmod, | ||
68 | .slave = &omap44xx_dmm_hwmod, | ||
69 | .clk = "l3_div_ck", | ||
70 | .user = OCP_USER_MPU | OCP_USER_SDMA, | ||
71 | }; | ||
72 | |||
73 | /* mpu -> dmm */ | ||
74 | static struct omap_hwmod_ocp_if omap44xx_mpu__dmm = { | ||
75 | .master = &omap44xx_mpu_hwmod, | ||
76 | .slave = &omap44xx_dmm_hwmod, | ||
77 | .clk = "l3_div_ck", | ||
78 | .user = OCP_USER_MPU | OCP_USER_SDMA, | ||
79 | }; | ||
80 | |||
81 | /* dmm slave ports */ | ||
82 | static struct omap_hwmod_ocp_if *omap44xx_dmm_slaves[] = { | ||
83 | &omap44xx_l3_main_1__dmm, | ||
84 | &omap44xx_mpu__dmm, | ||
85 | }; | ||
86 | |||
87 | static struct omap_hwmod_irq_info omap44xx_dmm_irqs[] = { | ||
88 | { .irq = 113 + OMAP44XX_IRQ_GIC_START }, | ||
89 | }; | ||
90 | |||
91 | static struct omap_hwmod omap44xx_dmm_hwmod = { | ||
92 | .name = "dmm", | ||
93 | .class = &omap44xx_dmm_hwmod_class, | ||
94 | .slaves = omap44xx_dmm_slaves, | ||
95 | .slaves_cnt = ARRAY_SIZE(omap44xx_dmm_slaves), | ||
96 | .mpu_irqs = omap44xx_dmm_irqs, | ||
97 | .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_dmm_irqs), | ||
98 | .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430), | ||
99 | }; | ||
100 | |||
101 | /* | ||
102 | * 'emif_fw' class | ||
103 | * instance(s): emif_fw | ||
104 | */ | ||
105 | static struct omap_hwmod_class omap44xx_emif_fw_hwmod_class = { | ||
106 | .name = "emif_fw", | ||
107 | }; | ||
108 | |||
109 | /* emif_fw interface data */ | ||
110 | /* dmm -> emif_fw */ | ||
111 | static struct omap_hwmod_ocp_if omap44xx_dmm__emif_fw = { | ||
112 | .master = &omap44xx_dmm_hwmod, | ||
113 | .slave = &omap44xx_emif_fw_hwmod, | ||
114 | .clk = "l3_div_ck", | ||
115 | .user = OCP_USER_MPU | OCP_USER_SDMA, | ||
116 | }; | ||
117 | |||
118 | /* l4_cfg -> emif_fw */ | ||
119 | static struct omap_hwmod_ocp_if omap44xx_l4_cfg__emif_fw = { | ||
120 | .master = &omap44xx_l4_cfg_hwmod, | ||
121 | .slave = &omap44xx_emif_fw_hwmod, | ||
122 | .clk = "l4_div_ck", | ||
123 | .user = OCP_USER_MPU | OCP_USER_SDMA, | ||
124 | }; | ||
125 | |||
126 | /* emif_fw slave ports */ | ||
127 | static struct omap_hwmod_ocp_if *omap44xx_emif_fw_slaves[] = { | ||
128 | &omap44xx_dmm__emif_fw, | ||
129 | &omap44xx_l4_cfg__emif_fw, | ||
130 | }; | ||
131 | |||
132 | static struct omap_hwmod omap44xx_emif_fw_hwmod = { | ||
133 | .name = "emif_fw", | ||
134 | .class = &omap44xx_emif_fw_hwmod_class, | ||
135 | .slaves = omap44xx_emif_fw_slaves, | ||
136 | .slaves_cnt = ARRAY_SIZE(omap44xx_emif_fw_slaves), | ||
137 | .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430), | ||
138 | }; | ||
139 | |||
140 | /* | ||
141 | * 'l3' class | ||
142 | * instance(s): l3_instr, l3_main_1, l3_main_2, l3_main_3 | ||
143 | */ | ||
144 | static struct omap_hwmod_class omap44xx_l3_hwmod_class = { | ||
145 | .name = "l3", | ||
146 | }; | ||
147 | |||
148 | /* l3_instr interface data */ | ||
149 | /* l3_main_3 -> l3_instr */ | ||
150 | static struct omap_hwmod_ocp_if omap44xx_l3_main_3__l3_instr = { | ||
151 | .master = &omap44xx_l3_main_3_hwmod, | ||
152 | .slave = &omap44xx_l3_instr_hwmod, | ||
153 | .clk = "l3_div_ck", | ||
154 | .user = OCP_USER_MPU | OCP_USER_SDMA, | ||
155 | }; | ||
156 | |||
157 | /* l3_instr slave ports */ | ||
158 | static struct omap_hwmod_ocp_if *omap44xx_l3_instr_slaves[] = { | ||
159 | &omap44xx_l3_main_3__l3_instr, | ||
160 | }; | ||
161 | |||
162 | static struct omap_hwmod omap44xx_l3_instr_hwmod = { | ||
163 | .name = "l3_instr", | ||
164 | .class = &omap44xx_l3_hwmod_class, | ||
165 | .slaves = omap44xx_l3_instr_slaves, | ||
166 | .slaves_cnt = ARRAY_SIZE(omap44xx_l3_instr_slaves), | ||
167 | .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430), | ||
168 | }; | ||
169 | |||
170 | /* l3_main_2 -> l3_main_1 */ | ||
171 | static struct omap_hwmod_ocp_if omap44xx_l3_main_2__l3_main_1 = { | ||
172 | .master = &omap44xx_l3_main_2_hwmod, | ||
173 | .slave = &omap44xx_l3_main_1_hwmod, | ||
174 | .clk = "l3_div_ck", | ||
175 | .user = OCP_USER_MPU | OCP_USER_SDMA, | ||
176 | }; | ||
177 | |||
178 | /* l4_cfg -> l3_main_1 */ | ||
179 | static struct omap_hwmod_ocp_if omap44xx_l4_cfg__l3_main_1 = { | ||
180 | .master = &omap44xx_l4_cfg_hwmod, | ||
181 | .slave = &omap44xx_l3_main_1_hwmod, | ||
182 | .clk = "l4_div_ck", | ||
183 | .user = OCP_USER_MPU | OCP_USER_SDMA, | ||
184 | }; | ||
185 | |||
186 | /* mpu -> l3_main_1 */ | ||
187 | static struct omap_hwmod_ocp_if omap44xx_mpu__l3_main_1 = { | ||
188 | .master = &omap44xx_mpu_hwmod, | ||
189 | .slave = &omap44xx_l3_main_1_hwmod, | ||
190 | .clk = "l3_div_ck", | ||
191 | .user = OCP_USER_MPU | OCP_USER_SDMA, | ||
192 | }; | ||
193 | |||
194 | /* l3_main_1 slave ports */ | ||
195 | static struct omap_hwmod_ocp_if *omap44xx_l3_main_1_slaves[] = { | ||
196 | &omap44xx_l3_main_2__l3_main_1, | ||
197 | &omap44xx_l4_cfg__l3_main_1, | ||
198 | &omap44xx_mpu__l3_main_1, | ||
199 | }; | ||
200 | |||
201 | static struct omap_hwmod omap44xx_l3_main_1_hwmod = { | ||
202 | .name = "l3_main_1", | ||
203 | .class = &omap44xx_l3_hwmod_class, | ||
204 | .slaves = omap44xx_l3_main_1_slaves, | ||
205 | .slaves_cnt = ARRAY_SIZE(omap44xx_l3_main_1_slaves), | ||
206 | .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430), | ||
207 | }; | ||
208 | |||
209 | /* l3_main_2 interface data */ | ||
210 | /* l3_main_1 -> l3_main_2 */ | ||
211 | static struct omap_hwmod_ocp_if omap44xx_l3_main_1__l3_main_2 = { | ||
212 | .master = &omap44xx_l3_main_1_hwmod, | ||
213 | .slave = &omap44xx_l3_main_2_hwmod, | ||
214 | .clk = "l3_div_ck", | ||
215 | .user = OCP_USER_MPU | OCP_USER_SDMA, | ||
216 | }; | ||
217 | |||
218 | /* l4_cfg -> l3_main_2 */ | ||
219 | static struct omap_hwmod_ocp_if omap44xx_l4_cfg__l3_main_2 = { | ||
220 | .master = &omap44xx_l4_cfg_hwmod, | ||
221 | .slave = &omap44xx_l3_main_2_hwmod, | ||
222 | .clk = "l4_div_ck", | ||
223 | .user = OCP_USER_MPU | OCP_USER_SDMA, | ||
224 | }; | ||
225 | |||
226 | /* l3_main_2 slave ports */ | ||
227 | static struct omap_hwmod_ocp_if *omap44xx_l3_main_2_slaves[] = { | ||
228 | &omap44xx_l3_main_1__l3_main_2, | ||
229 | &omap44xx_l4_cfg__l3_main_2, | ||
230 | }; | ||
231 | |||
232 | static struct omap_hwmod omap44xx_l3_main_2_hwmod = { | ||
233 | .name = "l3_main_2", | ||
234 | .class = &omap44xx_l3_hwmod_class, | ||
235 | .slaves = omap44xx_l3_main_2_slaves, | ||
236 | .slaves_cnt = ARRAY_SIZE(omap44xx_l3_main_2_slaves), | ||
237 | .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430), | ||
238 | }; | ||
239 | |||
240 | /* l3_main_3 interface data */ | ||
241 | /* l3_main_1 -> l3_main_3 */ | ||
242 | static struct omap_hwmod_ocp_if omap44xx_l3_main_1__l3_main_3 = { | ||
243 | .master = &omap44xx_l3_main_1_hwmod, | ||
244 | .slave = &omap44xx_l3_main_3_hwmod, | ||
245 | .clk = "l3_div_ck", | ||
246 | .user = OCP_USER_MPU | OCP_USER_SDMA, | ||
247 | }; | ||
248 | |||
249 | /* l3_main_2 -> l3_main_3 */ | ||
250 | static struct omap_hwmod_ocp_if omap44xx_l3_main_2__l3_main_3 = { | ||
251 | .master = &omap44xx_l3_main_2_hwmod, | ||
252 | .slave = &omap44xx_l3_main_3_hwmod, | ||
253 | .clk = "l3_div_ck", | ||
254 | .user = OCP_USER_MPU | OCP_USER_SDMA, | ||
255 | }; | ||
256 | |||
257 | /* l4_cfg -> l3_main_3 */ | ||
258 | static struct omap_hwmod_ocp_if omap44xx_l4_cfg__l3_main_3 = { | ||
259 | .master = &omap44xx_l4_cfg_hwmod, | ||
260 | .slave = &omap44xx_l3_main_3_hwmod, | ||
261 | .clk = "l4_div_ck", | ||
262 | .user = OCP_USER_MPU | OCP_USER_SDMA, | ||
263 | }; | ||
264 | |||
265 | /* l3_main_3 slave ports */ | ||
266 | static struct omap_hwmod_ocp_if *omap44xx_l3_main_3_slaves[] = { | ||
267 | &omap44xx_l3_main_1__l3_main_3, | ||
268 | &omap44xx_l3_main_2__l3_main_3, | ||
269 | &omap44xx_l4_cfg__l3_main_3, | ||
270 | }; | ||
271 | |||
272 | static struct omap_hwmod omap44xx_l3_main_3_hwmod = { | ||
273 | .name = "l3_main_3", | ||
274 | .class = &omap44xx_l3_hwmod_class, | ||
275 | .slaves = omap44xx_l3_main_3_slaves, | ||
276 | .slaves_cnt = ARRAY_SIZE(omap44xx_l3_main_3_slaves), | ||
277 | .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430), | ||
278 | }; | ||
279 | |||
280 | /* | ||
281 | * 'l4' class | ||
282 | * instance(s): l4_abe, l4_cfg, l4_per, l4_wkup | ||
283 | */ | ||
284 | static struct omap_hwmod_class omap44xx_l4_hwmod_class = { | ||
285 | .name = "l4", | ||
286 | }; | ||
287 | |||
288 | /* l4_abe interface data */ | ||
289 | /* l3_main_1 -> l4_abe */ | ||
290 | static struct omap_hwmod_ocp_if omap44xx_l3_main_1__l4_abe = { | ||
291 | .master = &omap44xx_l3_main_1_hwmod, | ||
292 | .slave = &omap44xx_l4_abe_hwmod, | ||
293 | .clk = "l3_div_ck", | ||
294 | .user = OCP_USER_MPU | OCP_USER_SDMA, | ||
295 | }; | ||
296 | |||
297 | /* mpu -> l4_abe */ | ||
298 | static struct omap_hwmod_ocp_if omap44xx_mpu__l4_abe = { | ||
299 | .master = &omap44xx_mpu_hwmod, | ||
300 | .slave = &omap44xx_l4_abe_hwmod, | ||
301 | .clk = "ocp_abe_iclk", | ||
302 | .user = OCP_USER_MPU | OCP_USER_SDMA, | ||
303 | }; | ||
304 | |||
305 | /* l4_abe slave ports */ | ||
306 | static struct omap_hwmod_ocp_if *omap44xx_l4_abe_slaves[] = { | ||
307 | &omap44xx_l3_main_1__l4_abe, | ||
308 | &omap44xx_mpu__l4_abe, | ||
309 | }; | ||
310 | |||
311 | static struct omap_hwmod omap44xx_l4_abe_hwmod = { | ||
312 | .name = "l4_abe", | ||
313 | .class = &omap44xx_l4_hwmod_class, | ||
314 | .slaves = omap44xx_l4_abe_slaves, | ||
315 | .slaves_cnt = ARRAY_SIZE(omap44xx_l4_abe_slaves), | ||
316 | .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430), | ||
317 | }; | ||
318 | |||
319 | /* l4_cfg interface data */ | ||
320 | /* l3_main_1 -> l4_cfg */ | ||
321 | static struct omap_hwmod_ocp_if omap44xx_l3_main_1__l4_cfg = { | ||
322 | .master = &omap44xx_l3_main_1_hwmod, | ||
323 | .slave = &omap44xx_l4_cfg_hwmod, | ||
324 | .clk = "l3_div_ck", | ||
325 | .user = OCP_USER_MPU | OCP_USER_SDMA, | ||
326 | }; | ||
327 | |||
328 | /* l4_cfg slave ports */ | ||
329 | static struct omap_hwmod_ocp_if *omap44xx_l4_cfg_slaves[] = { | ||
330 | &omap44xx_l3_main_1__l4_cfg, | ||
331 | }; | ||
332 | |||
333 | static struct omap_hwmod omap44xx_l4_cfg_hwmod = { | ||
334 | .name = "l4_cfg", | ||
335 | .class = &omap44xx_l4_hwmod_class, | ||
336 | .slaves = omap44xx_l4_cfg_slaves, | ||
337 | .slaves_cnt = ARRAY_SIZE(omap44xx_l4_cfg_slaves), | ||
338 | .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430), | ||
339 | }; | ||
340 | |||
341 | /* l4_per interface data */ | ||
342 | /* l3_main_2 -> l4_per */ | ||
343 | static struct omap_hwmod_ocp_if omap44xx_l3_main_2__l4_per = { | ||
344 | .master = &omap44xx_l3_main_2_hwmod, | ||
345 | .slave = &omap44xx_l4_per_hwmod, | ||
346 | .clk = "l3_div_ck", | ||
347 | .user = OCP_USER_MPU | OCP_USER_SDMA, | ||
348 | }; | ||
349 | |||
350 | /* l4_per slave ports */ | ||
351 | static struct omap_hwmod_ocp_if *omap44xx_l4_per_slaves[] = { | ||
352 | &omap44xx_l3_main_2__l4_per, | ||
353 | }; | ||
354 | |||
355 | static struct omap_hwmod omap44xx_l4_per_hwmod = { | ||
356 | .name = "l4_per", | ||
357 | .class = &omap44xx_l4_hwmod_class, | ||
358 | .slaves = omap44xx_l4_per_slaves, | ||
359 | .slaves_cnt = ARRAY_SIZE(omap44xx_l4_per_slaves), | ||
360 | .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430), | ||
361 | }; | ||
362 | |||
363 | /* l4_wkup interface data */ | ||
364 | /* l4_cfg -> l4_wkup */ | ||
365 | static struct omap_hwmod_ocp_if omap44xx_l4_cfg__l4_wkup = { | ||
366 | .master = &omap44xx_l4_cfg_hwmod, | ||
367 | .slave = &omap44xx_l4_wkup_hwmod, | ||
368 | .clk = "l4_div_ck", | ||
369 | .user = OCP_USER_MPU | OCP_USER_SDMA, | ||
370 | }; | ||
371 | |||
372 | /* l4_wkup slave ports */ | ||
373 | static struct omap_hwmod_ocp_if *omap44xx_l4_wkup_slaves[] = { | ||
374 | &omap44xx_l4_cfg__l4_wkup, | ||
375 | }; | ||
376 | |||
377 | static struct omap_hwmod omap44xx_l4_wkup_hwmod = { | ||
378 | .name = "l4_wkup", | ||
379 | .class = &omap44xx_l4_hwmod_class, | ||
380 | .slaves = omap44xx_l4_wkup_slaves, | ||
381 | .slaves_cnt = ARRAY_SIZE(omap44xx_l4_wkup_slaves), | ||
382 | .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430), | ||
383 | }; | ||
384 | |||
385 | /* | ||
386 | * 'mpu_bus' class | ||
387 | * instance(s): mpu_private | ||
388 | */ | ||
389 | static struct omap_hwmod_class omap44xx_mpu_bus_hwmod_class = { | ||
390 | .name = "mpu_bus", | ||
391 | }; | ||
392 | |||
393 | /* mpu_private interface data */ | ||
394 | /* mpu -> mpu_private */ | ||
395 | static struct omap_hwmod_ocp_if omap44xx_mpu__mpu_private = { | ||
396 | .master = &omap44xx_mpu_hwmod, | ||
397 | .slave = &omap44xx_mpu_private_hwmod, | ||
398 | .clk = "l3_div_ck", | ||
399 | .user = OCP_USER_MPU | OCP_USER_SDMA, | ||
400 | }; | ||
401 | |||
402 | /* mpu_private slave ports */ | ||
403 | static struct omap_hwmod_ocp_if *omap44xx_mpu_private_slaves[] = { | ||
404 | &omap44xx_mpu__mpu_private, | ||
405 | }; | ||
406 | |||
407 | static struct omap_hwmod omap44xx_mpu_private_hwmod = { | ||
408 | .name = "mpu_private", | ||
409 | .class = &omap44xx_mpu_bus_hwmod_class, | ||
410 | .slaves = omap44xx_mpu_private_slaves, | ||
411 | .slaves_cnt = ARRAY_SIZE(omap44xx_mpu_private_slaves), | ||
412 | .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430), | ||
413 | }; | ||
414 | |||
415 | /* | ||
416 | * 'mpu' class | ||
417 | * mpu sub-system | ||
418 | */ | ||
419 | |||
420 | static struct omap_hwmod_class omap44xx_mpu_hwmod_class = { | ||
421 | .name = "mpu", | ||
422 | }; | ||
423 | |||
424 | /* mpu */ | ||
425 | static struct omap_hwmod_irq_info omap44xx_mpu_irqs[] = { | ||
426 | { .name = "pl310", .irq = 0 + OMAP44XX_IRQ_GIC_START }, | ||
427 | { .name = "cti0", .irq = 1 + OMAP44XX_IRQ_GIC_START }, | ||
428 | { .name = "cti1", .irq = 2 + OMAP44XX_IRQ_GIC_START }, | ||
429 | }; | ||
430 | |||
431 | /* mpu master ports */ | ||
432 | static struct omap_hwmod_ocp_if *omap44xx_mpu_masters[] = { | ||
433 | &omap44xx_mpu__l3_main_1, | ||
434 | &omap44xx_mpu__l4_abe, | ||
435 | &omap44xx_mpu__dmm, | ||
436 | }; | ||
437 | |||
438 | static struct omap_hwmod omap44xx_mpu_hwmod = { | ||
439 | .name = "mpu", | ||
440 | .class = &omap44xx_mpu_hwmod_class, | ||
441 | .flags = (HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET), | ||
442 | .mpu_irqs = omap44xx_mpu_irqs, | ||
443 | .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_mpu_irqs), | ||
444 | .main_clk = "dpll_mpu_m2_ck", | ||
445 | .prcm = { | ||
446 | .omap4 = { | ||
447 | .clkctrl_reg = OMAP4430_CM_MPU_MPU_CLKCTRL, | ||
448 | }, | ||
449 | }, | ||
450 | .masters = omap44xx_mpu_masters, | ||
451 | .masters_cnt = ARRAY_SIZE(omap44xx_mpu_masters), | ||
452 | .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430), | ||
453 | }; | ||
454 | |||
455 | static __initdata struct omap_hwmod *omap44xx_hwmods[] = { | ||
456 | /* dmm class */ | ||
457 | &omap44xx_dmm_hwmod, | ||
458 | /* emif_fw class */ | ||
459 | &omap44xx_emif_fw_hwmod, | ||
460 | /* l3 class */ | ||
461 | &omap44xx_l3_instr_hwmod, | ||
462 | &omap44xx_l3_main_1_hwmod, | ||
463 | &omap44xx_l3_main_2_hwmod, | ||
464 | &omap44xx_l3_main_3_hwmod, | ||
465 | /* l4 class */ | ||
466 | &omap44xx_l4_abe_hwmod, | ||
467 | &omap44xx_l4_cfg_hwmod, | ||
468 | &omap44xx_l4_per_hwmod, | ||
469 | &omap44xx_l4_wkup_hwmod, | ||
470 | /* mpu_bus class */ | ||
471 | &omap44xx_mpu_private_hwmod, | ||
472 | |||
473 | /* mpu class */ | ||
474 | &omap44xx_mpu_hwmod, | ||
475 | NULL, | ||
476 | }; | ||
477 | |||
478 | int __init omap44xx_hwmod_init(void) | ||
479 | { | ||
480 | return omap_hwmod_init(omap44xx_hwmods); | ||
481 | } | ||
482 | |||
diff --git a/arch/arm/plat-omap/Makefile b/arch/arm/plat-omap/Makefile index 9405831b746a..2a151917ef52 100644 --- a/arch/arm/plat-omap/Makefile +++ b/arch/arm/plat-omap/Makefile | |||
@@ -31,4 +31,4 @@ obj-y += $(i2c-omap-m) $(i2c-omap-y) | |||
31 | # OMAP mailbox framework | 31 | # OMAP mailbox framework |
32 | obj-$(CONFIG_OMAP_MBOX_FWK) += mailbox.o | 32 | obj-$(CONFIG_OMAP_MBOX_FWK) += mailbox.o |
33 | 33 | ||
34 | obj-$(CONFIG_OMAP_PM_NOOP) += omap-pm-noop.o \ No newline at end of file | 34 | obj-$(CONFIG_OMAP_PM_NOOP) += omap-pm-noop.o |
diff --git a/arch/arm/plat-omap/include/plat/omap_hwmod.h b/arch/arm/plat-omap/include/plat/omap_hwmod.h index a4e508dfaba2..cab4a681a121 100644 --- a/arch/arm/plat-omap/include/plat/omap_hwmod.h +++ b/arch/arm/plat-omap/include/plat/omap_hwmod.h | |||
@@ -534,5 +534,6 @@ int omap_hwmod_for_each_by_class(const char *classname, | |||
534 | extern int omap2420_hwmod_init(void); | 534 | extern int omap2420_hwmod_init(void); |
535 | extern int omap2430_hwmod_init(void); | 535 | extern int omap2430_hwmod_init(void); |
536 | extern int omap3xxx_hwmod_init(void); | 536 | extern int omap3xxx_hwmod_init(void); |
537 | extern int omap44xx_hwmod_init(void); | ||
537 | 538 | ||
538 | #endif | 539 | #endif |