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