1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * omap_hwmod_2430_data.c - hardware modules present on the OMAP2430 chips
4  *
5  * Copyright (C) 2009-2011 Nokia Corporation
6  * Copyright (C) 2012 Texas Instruments, Inc.
7  * Paul Walmsley
8  *
9  * XXX handle crossbar/shared link difference for L3?
10  * XXX these should be marked initdata for multi-OMAP kernels
11  */
12 
13 #include <linux/platform_data/i2c-omap.h>
14 #include <linux/platform_data/hsmmc-omap.h>
15 #include <linux/omap-dma.h>
16 
17 #include "omap_hwmod.h"
18 #include "l3_2xxx.h"
19 
20 #include "soc.h"
21 #include "omap_hwmod_common_data.h"
22 #include "prm-regbits-24xx.h"
23 #include "cm-regbits-24xx.h"
24 #include "i2c.h"
25 #include "wd_timer.h"
26 
27 /*
28  * OMAP2430 hardware module integration data
29  *
30  * All of the data in this section should be autogeneratable from the
31  * TI hardware database or other technical documentation.  Data that
32  * is driver-specific or driver-kernel integration-specific belongs
33  * elsewhere.
34  */
35 
36 /*
37  * IP blocks
38  */
39 
40 /* IVA2 (IVA2) */
41 static struct omap_hwmod_rst_info omap2430_iva_resets[] = {
42 	{ .name = "logic", .rst_shift = 0 },
43 	{ .name = "mmu", .rst_shift = 1 },
44 };
45 
46 static struct omap_hwmod omap2430_iva_hwmod = {
47 	.name		= "iva",
48 	.class		= &iva_hwmod_class,
49 	.clkdm_name	= "dsp_clkdm",
50 	.rst_lines	= omap2430_iva_resets,
51 	.rst_lines_cnt	= ARRAY_SIZE(omap2430_iva_resets),
52 	.main_clk	= "dsp_fck",
53 };
54 
55 /* I2C common */
56 static struct omap_hwmod_class_sysconfig i2c_sysc = {
57 	.rev_offs	= 0x00,
58 	.sysc_offs	= 0x20,
59 	.syss_offs	= 0x10,
60 	.sysc_flags	= (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
61 			   SYSS_HAS_RESET_STATUS),
62 	.sysc_fields	= &omap_hwmod_sysc_type1,
63 };
64 
65 static struct omap_hwmod_class i2c_class = {
66 	.name		= "i2c",
67 	.sysc		= &i2c_sysc,
68 	.reset		= &omap_i2c_reset,
69 };
70 
71 /* I2C1 */
72 static struct omap_hwmod omap2430_i2c1_hwmod = {
73 	.name		= "i2c1",
74 	.flags		= HWMOD_16BIT_REG,
75 	.main_clk	= "i2chs1_fck",
76 	.prcm		= {
77 		.omap2 = {
78 			/*
79 			 * NOTE: The CM_FCLKEN* and CM_ICLKEN* for
80 			 * I2CHS IP's do not follow the usual pattern.
81 			 * prcm_reg_id alone cannot be used to program
82 			 * the iclk and fclk. Needs to be handled using
83 			 * additional flags when clk handling is moved
84 			 * to hwmod framework.
85 			 */
86 			.module_offs = CORE_MOD,
87 			.idlest_reg_id = 1,
88 			.idlest_idle_bit = OMAP2430_ST_I2CHS1_SHIFT,
89 		},
90 	},
91 	.class		= &i2c_class,
92 };
93 
94 /* I2C2 */
95 static struct omap_hwmod omap2430_i2c2_hwmod = {
96 	.name		= "i2c2",
97 	.flags		= HWMOD_16BIT_REG,
98 	.main_clk	= "i2chs2_fck",
99 	.prcm		= {
100 		.omap2 = {
101 			.module_offs = CORE_MOD,
102 			.idlest_reg_id = 1,
103 			.idlest_idle_bit = OMAP2430_ST_I2CHS2_SHIFT,
104 		},
105 	},
106 	.class		= &i2c_class,
107 };
108 
109 /* gpio5 */
110 static struct omap_hwmod omap2430_gpio5_hwmod = {
111 	.name		= "gpio5",
112 	.flags		= HWMOD_CONTROL_OPT_CLKS_IN_RESET,
113 	.main_clk	= "gpio5_fck",
114 	.prcm		= {
115 		.omap2 = {
116 			.module_offs = CORE_MOD,
117 			.idlest_reg_id = 2,
118 			.idlest_idle_bit = OMAP2430_ST_GPIO5_SHIFT,
119 		},
120 	},
121 	.class		= &omap2xxx_gpio_hwmod_class,
122 };
123 
124 /* dma attributes */
125 static struct omap_dma_dev_attr dma_dev_attr = {
126 	.dev_caps  = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY |
127 				IS_CSSA_32 | IS_CDSA_32 | IS_RW_PRIORITY,
128 	.lch_count = 32,
129 };
130 
131 static struct omap_hwmod omap2430_dma_system_hwmod = {
132 	.name		= "dma",
133 	.class		= &omap2xxx_dma_hwmod_class,
134 	.main_clk	= "core_l3_ck",
135 	.dev_attr	= &dma_dev_attr,
136 	.flags		= HWMOD_NO_IDLEST,
137 };
138 
139 /* mailbox */
140 static struct omap_hwmod omap2430_mailbox_hwmod = {
141 	.name		= "mailbox",
142 	.class		= &omap2xxx_mailbox_hwmod_class,
143 	.main_clk	= "mailboxes_ick",
144 	.prcm		= {
145 		.omap2 = {
146 			.module_offs = CORE_MOD,
147 			.idlest_reg_id = 1,
148 			.idlest_idle_bit = OMAP24XX_ST_MAILBOXES_SHIFT,
149 		},
150 	},
151 };
152 
153 /* mcspi3 */
154 static struct omap_hwmod omap2430_mcspi3_hwmod = {
155 	.name		= "mcspi3",
156 	.main_clk	= "mcspi3_fck",
157 	.prcm		= {
158 		.omap2 = {
159 			.module_offs = CORE_MOD,
160 			.idlest_reg_id = 2,
161 			.idlest_idle_bit = OMAP2430_ST_MCSPI3_SHIFT,
162 		},
163 	},
164 	.class		= &omap2xxx_mcspi_class,
165 };
166 
167 /* usbhsotg */
168 static struct omap_hwmod_class_sysconfig omap2430_usbhsotg_sysc = {
169 	.rev_offs	= 0x0400,
170 	.sysc_offs	= 0x0404,
171 	.syss_offs	= 0x0408,
172 	.sysc_flags	= (SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE|
173 			  SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
174 			  SYSC_HAS_AUTOIDLE),
175 	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
176 			  MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
177 	.sysc_fields	= &omap_hwmod_sysc_type1,
178 };
179 
180 static struct omap_hwmod_class usbotg_class = {
181 	.name = "usbotg",
182 	.sysc = &omap2430_usbhsotg_sysc,
183 };
184 
185 /* usb_otg_hs */
186 static struct omap_hwmod omap2430_usbhsotg_hwmod = {
187 	.name		= "usb_otg_hs",
188 	.main_clk	= "usbhs_ick",
189 	.prcm		= {
190 		.omap2 = {
191 			.module_offs = CORE_MOD,
192 			.idlest_reg_id = 1,
193 			.idlest_idle_bit = OMAP2430_ST_USBHS_SHIFT,
194 		},
195 	},
196 	.class		= &usbotg_class,
197 	/*
198 	 * Erratum ID: i479  idle_req / idle_ack mechanism potentially
199 	 * broken when autoidle is enabled
200 	 * workaround is to disable the autoidle bit at module level.
201 	 */
202 	.flags		= HWMOD_NO_OCP_AUTOIDLE | HWMOD_SWSUP_SIDLE
203 				| HWMOD_SWSUP_MSTANDBY,
204 };
205 
206 /*
207  * 'mcbsp' class
208  * multi channel buffered serial port controller
209  */
210 
211 static struct omap_hwmod_class_sysconfig omap2430_mcbsp_sysc = {
212 	.rev_offs	= 0x007C,
213 	.sysc_offs	= 0x008C,
214 	.sysc_flags	= (SYSC_HAS_SOFTRESET),
215 	.sysc_fields    = &omap_hwmod_sysc_type1,
216 };
217 
218 static struct omap_hwmod_class omap2430_mcbsp_hwmod_class = {
219 	.name = "mcbsp",
220 	.sysc = &omap2430_mcbsp_sysc,
221 };
222 
223 static struct omap_hwmod_opt_clk mcbsp_opt_clks[] = {
224 	{ .role = "pad_fck", .clk = "mcbsp_clks" },
225 	{ .role = "prcm_fck", .clk = "func_96m_ck" },
226 };
227 
228 /* mcbsp1 */
229 static struct omap_hwmod omap2430_mcbsp1_hwmod = {
230 	.name		= "mcbsp1",
231 	.class		= &omap2430_mcbsp_hwmod_class,
232 	.main_clk	= "mcbsp1_fck",
233 	.prcm		= {
234 		.omap2 = {
235 			.module_offs = CORE_MOD,
236 			.idlest_reg_id = 1,
237 			.idlest_idle_bit = OMAP24XX_ST_MCBSP1_SHIFT,
238 		},
239 	},
240 	.opt_clks	= mcbsp_opt_clks,
241 	.opt_clks_cnt	= ARRAY_SIZE(mcbsp_opt_clks),
242 };
243 
244 /* mcbsp2 */
245 static struct omap_hwmod omap2430_mcbsp2_hwmod = {
246 	.name		= "mcbsp2",
247 	.class		= &omap2430_mcbsp_hwmod_class,
248 	.main_clk	= "mcbsp2_fck",
249 	.prcm		= {
250 		.omap2 = {
251 			.module_offs = CORE_MOD,
252 			.idlest_reg_id = 1,
253 			.idlest_idle_bit = OMAP24XX_ST_MCBSP2_SHIFT,
254 		},
255 	},
256 	.opt_clks	= mcbsp_opt_clks,
257 	.opt_clks_cnt	= ARRAY_SIZE(mcbsp_opt_clks),
258 };
259 
260 /* mcbsp3 */
261 static struct omap_hwmod omap2430_mcbsp3_hwmod = {
262 	.name		= "mcbsp3",
263 	.class		= &omap2430_mcbsp_hwmod_class,
264 	.main_clk	= "mcbsp3_fck",
265 	.prcm		= {
266 		.omap2 = {
267 			.module_offs = CORE_MOD,
268 			.idlest_reg_id = 2,
269 			.idlest_idle_bit = OMAP2430_ST_MCBSP3_SHIFT,
270 		},
271 	},
272 	.opt_clks	= mcbsp_opt_clks,
273 	.opt_clks_cnt	= ARRAY_SIZE(mcbsp_opt_clks),
274 };
275 
276 /* mcbsp4 */
277 static struct omap_hwmod omap2430_mcbsp4_hwmod = {
278 	.name		= "mcbsp4",
279 	.class		= &omap2430_mcbsp_hwmod_class,
280 	.main_clk	= "mcbsp4_fck",
281 	.prcm		= {
282 		.omap2 = {
283 			.module_offs = CORE_MOD,
284 			.idlest_reg_id = 2,
285 			.idlest_idle_bit = OMAP2430_ST_MCBSP4_SHIFT,
286 		},
287 	},
288 	.opt_clks	= mcbsp_opt_clks,
289 	.opt_clks_cnt	= ARRAY_SIZE(mcbsp_opt_clks),
290 };
291 
292 /* mcbsp5 */
293 static struct omap_hwmod omap2430_mcbsp5_hwmod = {
294 	.name		= "mcbsp5",
295 	.class		= &omap2430_mcbsp_hwmod_class,
296 	.main_clk	= "mcbsp5_fck",
297 	.prcm		= {
298 		.omap2 = {
299 			.module_offs = CORE_MOD,
300 			.idlest_reg_id = 2,
301 			.idlest_idle_bit = OMAP2430_ST_MCBSP5_SHIFT,
302 		},
303 	},
304 	.opt_clks	= mcbsp_opt_clks,
305 	.opt_clks_cnt	= ARRAY_SIZE(mcbsp_opt_clks),
306 };
307 
308 /* MMC/SD/SDIO common */
309 static struct omap_hwmod_class_sysconfig omap2430_mmc_sysc = {
310 	.rev_offs	= 0x1fc,
311 	.sysc_offs	= 0x10,
312 	.syss_offs	= 0x14,
313 	.sysc_flags	= (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
314 			   SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
315 			   SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
316 	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
317 	.sysc_fields    = &omap_hwmod_sysc_type1,
318 };
319 
320 static struct omap_hwmod_class omap2430_mmc_class = {
321 	.name = "mmc",
322 	.sysc = &omap2430_mmc_sysc,
323 };
324 
325 /* MMC/SD/SDIO1 */
326 static struct omap_hwmod_opt_clk omap2430_mmc1_opt_clks[] = {
327 	{ .role = "dbck", .clk = "mmchsdb1_fck" },
328 };
329 
330 static struct omap_hsmmc_dev_attr mmc1_dev_attr = {
331 	.flags = OMAP_HSMMC_SUPPORTS_DUAL_VOLT,
332 };
333 
334 static struct omap_hwmod omap2430_mmc1_hwmod = {
335 	.name		= "mmc1",
336 	.flags		= HWMOD_CONTROL_OPT_CLKS_IN_RESET,
337 	.opt_clks	= omap2430_mmc1_opt_clks,
338 	.opt_clks_cnt	= ARRAY_SIZE(omap2430_mmc1_opt_clks),
339 	.main_clk	= "mmchs1_fck",
340 	.prcm		= {
341 		.omap2 = {
342 			.module_offs = CORE_MOD,
343 			.idlest_reg_id = 2,
344 			.idlest_idle_bit = OMAP2430_ST_MMCHS1_SHIFT,
345 		},
346 	},
347 	.dev_attr	= &mmc1_dev_attr,
348 	.class		= &omap2430_mmc_class,
349 };
350 
351 /* MMC/SD/SDIO2 */
352 static struct omap_hwmod_opt_clk omap2430_mmc2_opt_clks[] = {
353 	{ .role = "dbck", .clk = "mmchsdb2_fck" },
354 };
355 
356 static struct omap_hwmod omap2430_mmc2_hwmod = {
357 	.name		= "mmc2",
358 	.flags		= HWMOD_CONTROL_OPT_CLKS_IN_RESET,
359 	.opt_clks	= omap2430_mmc2_opt_clks,
360 	.opt_clks_cnt	= ARRAY_SIZE(omap2430_mmc2_opt_clks),
361 	.main_clk	= "mmchs2_fck",
362 	.prcm		= {
363 		.omap2 = {
364 			.module_offs = CORE_MOD,
365 			.idlest_reg_id = 2,
366 			.idlest_idle_bit = OMAP2430_ST_MMCHS2_SHIFT,
367 		},
368 	},
369 	.class		= &omap2430_mmc_class,
370 };
371 
372 /* HDQ1W/1-wire */
373 static struct omap_hwmod omap2430_hdq1w_hwmod = {
374 	.name		= "hdq1w",
375 	.main_clk	= "hdq_fck",
376 	.prcm		= {
377 		.omap2 = {
378 			.module_offs = CORE_MOD,
379 			.idlest_reg_id = 1,
380 			.idlest_idle_bit = OMAP24XX_ST_HDQ_SHIFT,
381 		},
382 	},
383 	.class		= &omap2_hdq1w_class,
384 };
385 
386 /*
387  * interfaces
388  */
389 
390 /* L3 -> L4_CORE interface */
391 /* l3_core -> usbhsotg  interface */
392 static struct omap_hwmod_ocp_if omap2430_usbhsotg__l3 = {
393 	.master		= &omap2430_usbhsotg_hwmod,
394 	.slave		= &omap2xxx_l3_main_hwmod,
395 	.clk		= "core_l3_ck",
396 	.user		= OCP_USER_MPU,
397 };
398 
399 /* L4 CORE -> I2C1 interface */
400 static struct omap_hwmod_ocp_if omap2430_l4_core__i2c1 = {
401 	.master		= &omap2xxx_l4_core_hwmod,
402 	.slave		= &omap2430_i2c1_hwmod,
403 	.clk		= "i2c1_ick",
404 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
405 };
406 
407 /* L4 CORE -> I2C2 interface */
408 static struct omap_hwmod_ocp_if omap2430_l4_core__i2c2 = {
409 	.master		= &omap2xxx_l4_core_hwmod,
410 	.slave		= &omap2430_i2c2_hwmod,
411 	.clk		= "i2c2_ick",
412 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
413 };
414 
415 /*  l4_core ->usbhsotg  interface */
416 static struct omap_hwmod_ocp_if omap2430_l4_core__usbhsotg = {
417 	.master		= &omap2xxx_l4_core_hwmod,
418 	.slave		= &omap2430_usbhsotg_hwmod,
419 	.clk		= "usb_l4_ick",
420 	.user		= OCP_USER_MPU,
421 };
422 
423 /* L4 CORE -> MMC1 interface */
424 static struct omap_hwmod_ocp_if omap2430_l4_core__mmc1 = {
425 	.master		= &omap2xxx_l4_core_hwmod,
426 	.slave		= &omap2430_mmc1_hwmod,
427 	.clk		= "mmchs1_ick",
428 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
429 };
430 
431 /* L4 CORE -> MMC2 interface */
432 static struct omap_hwmod_ocp_if omap2430_l4_core__mmc2 = {
433 	.master		= &omap2xxx_l4_core_hwmod,
434 	.slave		= &omap2430_mmc2_hwmod,
435 	.clk		= "mmchs2_ick",
436 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
437 };
438 
439 /* l4 core -> mcspi3 interface */
440 static struct omap_hwmod_ocp_if omap2430_l4_core__mcspi3 = {
441 	.master		= &omap2xxx_l4_core_hwmod,
442 	.slave		= &omap2430_mcspi3_hwmod,
443 	.clk		= "mcspi3_ick",
444 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
445 };
446 
447 /* IVA2 <- L3 interface */
448 static struct omap_hwmod_ocp_if omap2430_l3__iva = {
449 	.master		= &omap2xxx_l3_main_hwmod,
450 	.slave		= &omap2430_iva_hwmod,
451 	.clk		= "core_l3_ck",
452 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
453 };
454 
455 /* l4_wkup -> timer1 */
456 static struct omap_hwmod_ocp_if omap2430_l4_wkup__timer1 = {
457 	.master		= &omap2xxx_l4_wkup_hwmod,
458 	.slave		= &omap2xxx_timer1_hwmod,
459 	.clk		= "gpt1_ick",
460 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
461 };
462 
463 /* l4_wkup -> wd_timer2 */
464 static struct omap_hwmod_ocp_if omap2430_l4_wkup__wd_timer2 = {
465 	.master		= &omap2xxx_l4_wkup_hwmod,
466 	.slave		= &omap2xxx_wd_timer2_hwmod,
467 	.clk		= "mpu_wdt_ick",
468 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
469 };
470 
471 /* l4_wkup -> gpio1 */
472 static struct omap_hwmod_ocp_if omap2430_l4_wkup__gpio1 = {
473 	.master		= &omap2xxx_l4_wkup_hwmod,
474 	.slave		= &omap2xxx_gpio1_hwmod,
475 	.clk		= "gpios_ick",
476 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
477 };
478 
479 /* l4_wkup -> gpio2 */
480 static struct omap_hwmod_ocp_if omap2430_l4_wkup__gpio2 = {
481 	.master		= &omap2xxx_l4_wkup_hwmod,
482 	.slave		= &omap2xxx_gpio2_hwmod,
483 	.clk		= "gpios_ick",
484 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
485 };
486 
487 /* l4_wkup -> gpio3 */
488 static struct omap_hwmod_ocp_if omap2430_l4_wkup__gpio3 = {
489 	.master		= &omap2xxx_l4_wkup_hwmod,
490 	.slave		= &omap2xxx_gpio3_hwmod,
491 	.clk		= "gpios_ick",
492 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
493 };
494 
495 /* l4_wkup -> gpio4 */
496 static struct omap_hwmod_ocp_if omap2430_l4_wkup__gpio4 = {
497 	.master		= &omap2xxx_l4_wkup_hwmod,
498 	.slave		= &omap2xxx_gpio4_hwmod,
499 	.clk		= "gpios_ick",
500 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
501 };
502 
503 /* l4_core -> gpio5 */
504 static struct omap_hwmod_ocp_if omap2430_l4_core__gpio5 = {
505 	.master		= &omap2xxx_l4_core_hwmod,
506 	.slave		= &omap2430_gpio5_hwmod,
507 	.clk		= "gpio5_ick",
508 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
509 };
510 
511 /* dma_system -> L3 */
512 static struct omap_hwmod_ocp_if omap2430_dma_system__l3 = {
513 	.master		= &omap2430_dma_system_hwmod,
514 	.slave		= &omap2xxx_l3_main_hwmod,
515 	.clk		= "core_l3_ck",
516 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
517 };
518 
519 /* l4_core -> dma_system */
520 static struct omap_hwmod_ocp_if omap2430_l4_core__dma_system = {
521 	.master		= &omap2xxx_l4_core_hwmod,
522 	.slave		= &omap2430_dma_system_hwmod,
523 	.clk		= "sdma_ick",
524 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
525 };
526 
527 /* l4_core -> mailbox */
528 static struct omap_hwmod_ocp_if omap2430_l4_core__mailbox = {
529 	.master		= &omap2xxx_l4_core_hwmod,
530 	.slave		= &omap2430_mailbox_hwmod,
531 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
532 };
533 
534 /* l4_core -> mcbsp1 */
535 static struct omap_hwmod_ocp_if omap2430_l4_core__mcbsp1 = {
536 	.master		= &omap2xxx_l4_core_hwmod,
537 	.slave		= &omap2430_mcbsp1_hwmod,
538 	.clk		= "mcbsp1_ick",
539 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
540 };
541 
542 /* l4_core -> mcbsp2 */
543 static struct omap_hwmod_ocp_if omap2430_l4_core__mcbsp2 = {
544 	.master		= &omap2xxx_l4_core_hwmod,
545 	.slave		= &omap2430_mcbsp2_hwmod,
546 	.clk		= "mcbsp2_ick",
547 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
548 };
549 
550 /* l4_core -> mcbsp3 */
551 static struct omap_hwmod_ocp_if omap2430_l4_core__mcbsp3 = {
552 	.master		= &omap2xxx_l4_core_hwmod,
553 	.slave		= &omap2430_mcbsp3_hwmod,
554 	.clk		= "mcbsp3_ick",
555 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
556 };
557 
558 /* l4_core -> mcbsp4 */
559 static struct omap_hwmod_ocp_if omap2430_l4_core__mcbsp4 = {
560 	.master		= &omap2xxx_l4_core_hwmod,
561 	.slave		= &omap2430_mcbsp4_hwmod,
562 	.clk		= "mcbsp4_ick",
563 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
564 };
565 
566 /* l4_core -> mcbsp5 */
567 static struct omap_hwmod_ocp_if omap2430_l4_core__mcbsp5 = {
568 	.master		= &omap2xxx_l4_core_hwmod,
569 	.slave		= &omap2430_mcbsp5_hwmod,
570 	.clk		= "mcbsp5_ick",
571 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
572 };
573 
574 /* l4_core -> hdq1w */
575 static struct omap_hwmod_ocp_if omap2430_l4_core__hdq1w = {
576 	.master		= &omap2xxx_l4_core_hwmod,
577 	.slave		= &omap2430_hdq1w_hwmod,
578 	.clk		= "hdq_ick",
579 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
580 	.flags		= OMAP_FIREWALL_L4 | OCPIF_SWSUP_IDLE,
581 };
582 
583 /* l4_wkup -> 32ksync_counter */
584 static struct omap_hwmod_ocp_if omap2430_l4_wkup__counter_32k = {
585 	.master		= &omap2xxx_l4_wkup_hwmod,
586 	.slave		= &omap2xxx_counter_32k_hwmod,
587 	.clk		= "sync_32k_ick",
588 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
589 };
590 
591 static struct omap_hwmod_ocp_if omap2430_l3__gpmc = {
592 	.master		= &omap2xxx_l3_main_hwmod,
593 	.slave		= &omap2xxx_gpmc_hwmod,
594 	.clk		= "core_l3_ck",
595 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
596 };
597 
598 static struct omap_hwmod_ocp_if *omap2430_hwmod_ocp_ifs[] __initdata = {
599 	&omap2xxx_l3_main__l4_core,
600 	&omap2xxx_mpu__l3_main,
601 	&omap2xxx_dss__l3,
602 	&omap2430_usbhsotg__l3,
603 	&omap2430_l4_core__i2c1,
604 	&omap2430_l4_core__i2c2,
605 	&omap2xxx_l4_core__l4_wkup,
606 	&omap2_l4_core__uart1,
607 	&omap2_l4_core__uart2,
608 	&omap2_l4_core__uart3,
609 	&omap2430_l4_core__usbhsotg,
610 	&omap2430_l4_core__mmc1,
611 	&omap2430_l4_core__mmc2,
612 	&omap2xxx_l4_core__mcspi1,
613 	&omap2xxx_l4_core__mcspi2,
614 	&omap2430_l4_core__mcspi3,
615 	&omap2430_l3__iva,
616 	&omap2430_l4_wkup__timer1,
617 	&omap2xxx_l4_core__timer2,
618 	&omap2xxx_l4_core__timer3,
619 	&omap2xxx_l4_core__timer4,
620 	&omap2xxx_l4_core__timer5,
621 	&omap2xxx_l4_core__timer6,
622 	&omap2xxx_l4_core__timer7,
623 	&omap2xxx_l4_core__timer8,
624 	&omap2xxx_l4_core__timer9,
625 	&omap2xxx_l4_core__timer10,
626 	&omap2xxx_l4_core__timer11,
627 	&omap2xxx_l4_core__timer12,
628 	&omap2430_l4_wkup__wd_timer2,
629 	&omap2xxx_l4_core__dss,
630 	&omap2xxx_l4_core__dss_dispc,
631 	&omap2xxx_l4_core__dss_rfbi,
632 	&omap2xxx_l4_core__dss_venc,
633 	&omap2430_l4_wkup__gpio1,
634 	&omap2430_l4_wkup__gpio2,
635 	&omap2430_l4_wkup__gpio3,
636 	&omap2430_l4_wkup__gpio4,
637 	&omap2430_l4_core__gpio5,
638 	&omap2430_dma_system__l3,
639 	&omap2430_l4_core__dma_system,
640 	&omap2430_l4_core__mailbox,
641 	&omap2430_l4_core__mcbsp1,
642 	&omap2430_l4_core__mcbsp2,
643 	&omap2430_l4_core__mcbsp3,
644 	&omap2430_l4_core__mcbsp4,
645 	&omap2430_l4_core__mcbsp5,
646 	&omap2430_l4_core__hdq1w,
647 	&omap2xxx_l4_core__rng,
648 	&omap2xxx_l4_core__sham,
649 	&omap2xxx_l4_core__aes,
650 	&omap2430_l4_wkup__counter_32k,
651 	&omap2430_l3__gpmc,
652 	NULL,
653 };
654 
omap2430_hwmod_init(void)655 int __init omap2430_hwmod_init(void)
656 {
657 	omap_hwmod_init();
658 	return omap_hwmod_register_links(omap2430_hwmod_ocp_ifs);
659 }
660