1 /*
2  * DM81xx hwmod data.
3  *
4  * Copyright (C) 2010 Texas Instruments, Inc. - http://www.ti.com/
5  * Copyright (C) 2013 SKTB SKiT, http://www.skitlab.ru/
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License as
9  * published by the Free Software Foundation version 2.
10  *
11  * This program is distributed "as is" WITHOUT ANY WARRANTY of any
12  * kind, whether express or implied; without even the implied warranty
13  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  */
17 
18 #include <linux/types.h>
19 
20 #include <linux/platform_data/hsmmc-omap.h>
21 
22 #include "omap_hwmod_common_data.h"
23 #include "cm81xx.h"
24 #include "ti81xx.h"
25 #include "wd_timer.h"
26 
27 /*
28  * DM816X hardware modules integration data
29  *
30  * Note: This is incomplete and at present, not generated from h/w database.
31  */
32 
33 /*
34  * Common alwon .clkctrl_offs from dm814x TRM "Table 2-278. CM_ALWON REGISTERS"
35  * also dm816x TRM 18.7.17 CM_ALWON device register values minus 0x1400.
36  */
37 #define DM81XX_CM_ALWON_MCASP0_CLKCTRL		0x140
38 #define DM81XX_CM_ALWON_MCASP1_CLKCTRL		0x144
39 #define DM81XX_CM_ALWON_MCASP2_CLKCTRL		0x148
40 #define DM81XX_CM_ALWON_MCBSP_CLKCTRL		0x14c
41 #define DM81XX_CM_ALWON_UART_0_CLKCTRL		0x150
42 #define DM81XX_CM_ALWON_UART_1_CLKCTRL		0x154
43 #define DM81XX_CM_ALWON_UART_2_CLKCTRL		0x158
44 #define DM81XX_CM_ALWON_GPIO_0_CLKCTRL		0x15c
45 #define DM81XX_CM_ALWON_GPIO_1_CLKCTRL		0x160
46 #define DM81XX_CM_ALWON_I2C_0_CLKCTRL		0x164
47 #define DM81XX_CM_ALWON_I2C_1_CLKCTRL		0x168
48 #define DM81XX_CM_ALWON_WDTIMER_CLKCTRL		0x18c
49 #define DM81XX_CM_ALWON_SPI_CLKCTRL		0x190
50 #define DM81XX_CM_ALWON_MAILBOX_CLKCTRL		0x194
51 #define DM81XX_CM_ALWON_SPINBOX_CLKCTRL		0x198
52 #define DM81XX_CM_ALWON_MMUDATA_CLKCTRL		0x19c
53 #define DM81XX_CM_ALWON_MMUCFG_CLKCTRL		0x1a8
54 #define DM81XX_CM_ALWON_CONTROL_CLKCTRL		0x1c4
55 #define DM81XX_CM_ALWON_GPMC_CLKCTRL		0x1d0
56 #define DM81XX_CM_ALWON_ETHERNET_0_CLKCTRL	0x1d4
57 #define DM81XX_CM_ALWON_L3_CLKCTRL		0x1e4
58 #define DM81XX_CM_ALWON_L4HS_CLKCTRL		0x1e8
59 #define DM81XX_CM_ALWON_L4LS_CLKCTRL		0x1ec
60 #define DM81XX_CM_ALWON_RTC_CLKCTRL		0x1f0
61 #define DM81XX_CM_ALWON_TPCC_CLKCTRL		0x1f4
62 #define DM81XX_CM_ALWON_TPTC0_CLKCTRL		0x1f8
63 #define DM81XX_CM_ALWON_TPTC1_CLKCTRL		0x1fc
64 #define DM81XX_CM_ALWON_TPTC2_CLKCTRL		0x200
65 #define DM81XX_CM_ALWON_TPTC3_CLKCTRL		0x204
66 
67 /* Registers specific to dm814x */
68 #define DM814X_CM_ALWON_MCASP_3_4_5_CLKCTRL	0x16c
69 #define DM814X_CM_ALWON_ATL_CLKCTRL		0x170
70 #define DM814X_CM_ALWON_MLB_CLKCTRL		0x174
71 #define DM814X_CM_ALWON_PATA_CLKCTRL		0x178
72 #define DM814X_CM_ALWON_UART_3_CLKCTRL		0x180
73 #define DM814X_CM_ALWON_UART_4_CLKCTRL		0x184
74 #define DM814X_CM_ALWON_UART_5_CLKCTRL		0x188
75 #define DM814X_CM_ALWON_OCM_0_CLKCTRL		0x1b4
76 #define DM814X_CM_ALWON_VCP_CLKCTRL		0x1b8
77 #define DM814X_CM_ALWON_MPU_CLKCTRL		0x1dc
78 #define DM814X_CM_ALWON_DEBUGSS_CLKCTRL		0x1e0
79 #define DM814X_CM_ALWON_DCAN_0_1_CLKCTRL	0x218
80 #define DM814X_CM_ALWON_MMCHS_0_CLKCTRL		0x21c
81 #define DM814X_CM_ALWON_MMCHS_1_CLKCTRL		0x220
82 #define DM814X_CM_ALWON_MMCHS_2_CLKCTRL		0x224
83 #define DM814X_CM_ALWON_CUST_EFUSE_CLKCTRL	0x228
84 
85 /* Registers specific to dm816x */
86 #define DM816X_DM_ALWON_BASE		0x1400
87 #define DM816X_CM_ALWON_TIMER_1_CLKCTRL	(0x1570 - DM816X_DM_ALWON_BASE)
88 #define DM816X_CM_ALWON_TIMER_2_CLKCTRL	(0x1574 - DM816X_DM_ALWON_BASE)
89 #define DM816X_CM_ALWON_TIMER_3_CLKCTRL	(0x1578 - DM816X_DM_ALWON_BASE)
90 #define DM816X_CM_ALWON_TIMER_4_CLKCTRL	(0x157c - DM816X_DM_ALWON_BASE)
91 #define DM816X_CM_ALWON_TIMER_5_CLKCTRL	(0x1580 - DM816X_DM_ALWON_BASE)
92 #define DM816X_CM_ALWON_TIMER_6_CLKCTRL	(0x1584 - DM816X_DM_ALWON_BASE)
93 #define DM816X_CM_ALWON_TIMER_7_CLKCTRL	(0x1588 - DM816X_DM_ALWON_BASE)
94 #define DM816X_CM_ALWON_SDIO_CLKCTRL	(0x15b0 - DM816X_DM_ALWON_BASE)
95 #define DM816X_CM_ALWON_OCMC_0_CLKCTRL	(0x15b4 - DM816X_DM_ALWON_BASE)
96 #define DM816X_CM_ALWON_OCMC_1_CLKCTRL	(0x15b8 - DM816X_DM_ALWON_BASE)
97 #define DM816X_CM_ALWON_ETHERNET_1_CLKCTRL (0x15d8 - DM816X_DM_ALWON_BASE)
98 #define DM816X_CM_ALWON_MPU_CLKCTRL	(0x15dc - DM816X_DM_ALWON_BASE)
99 #define DM816X_CM_ALWON_SR_0_CLKCTRL	(0x1608 - DM816X_DM_ALWON_BASE)
100 #define DM816X_CM_ALWON_SR_1_CLKCTRL	(0x160c - DM816X_DM_ALWON_BASE)
101 
102 /*
103  * The default .clkctrl_offs field is offset from CM_DEFAULT, that's
104  * TRM 18.7.6 CM_DEFAULT device register values minus 0x500
105  */
106 #define DM81XX_CM_DEFAULT_OFFSET	0x500
107 #define DM81XX_CM_DEFAULT_USB_CLKCTRL	(0x558 - DM81XX_CM_DEFAULT_OFFSET)
108 #define DM81XX_CM_DEFAULT_SATA_CLKCTRL	(0x560 - DM81XX_CM_DEFAULT_OFFSET)
109 
110 /* L3 Interconnect entries clocked at 125, 250 and 500MHz */
111 static struct omap_hwmod dm81xx_alwon_l3_slow_hwmod = {
112 	.name		= "alwon_l3_slow",
113 	.clkdm_name	= "alwon_l3s_clkdm",
114 	.class		= &l3_hwmod_class,
115 	.flags		= HWMOD_NO_IDLEST,
116 };
117 
118 static struct omap_hwmod dm81xx_default_l3_slow_hwmod = {
119 	.name		= "default_l3_slow",
120 	.clkdm_name	= "default_l3_slow_clkdm",
121 	.class		= &l3_hwmod_class,
122 	.flags		= HWMOD_NO_IDLEST,
123 };
124 
125 static struct omap_hwmod dm81xx_alwon_l3_med_hwmod = {
126 	.name		= "l3_med",
127 	.clkdm_name	= "alwon_l3_med_clkdm",
128 	.class		= &l3_hwmod_class,
129 	.flags		= HWMOD_NO_IDLEST,
130 };
131 
132 static struct omap_hwmod dm81xx_alwon_l3_fast_hwmod = {
133 	.name		= "l3_fast",
134 	.clkdm_name	= "alwon_l3_fast_clkdm",
135 	.class		= &l3_hwmod_class,
136 	.flags		= HWMOD_NO_IDLEST,
137 };
138 
139 /*
140  * L4 standard peripherals, see TRM table 1-12 for devices using this.
141  * See TRM table 1-73 for devices using the 125MHz SYSCLK6 clock.
142  */
143 static struct omap_hwmod dm81xx_l4_ls_hwmod = {
144 	.name		= "l4_ls",
145 	.clkdm_name	= "alwon_l3s_clkdm",
146 	.class		= &l4_hwmod_class,
147 	.flags		= HWMOD_NO_IDLEST,
148 };
149 
150 /*
151  * L4 high-speed peripherals. For devices using this, please see the TRM
152  * table 1-13. On dm816x, only EMAC, MDIO and SATA use this. See also TRM
153  * table 1-73 for devices using 250MHz SYSCLK5 clock.
154  */
155 static struct omap_hwmod dm81xx_l4_hs_hwmod = {
156 	.name		= "l4_hs",
157 	.clkdm_name	= "alwon_l3_med_clkdm",
158 	.class		= &l4_hwmod_class,
159 	.flags		= HWMOD_NO_IDLEST,
160 };
161 
162 /* L3 slow -> L4 ls peripheral interface running at 125MHz */
163 static struct omap_hwmod_ocp_if dm81xx_alwon_l3_slow__l4_ls = {
164 	.master	= &dm81xx_alwon_l3_slow_hwmod,
165 	.slave	= &dm81xx_l4_ls_hwmod,
166 	.user	= OCP_USER_MPU,
167 };
168 
169 /* L3 med -> L4 fast peripheral interface running at 250MHz */
170 static struct omap_hwmod_ocp_if dm81xx_alwon_l3_slow__l4_hs = {
171 	.master	= &dm81xx_alwon_l3_med_hwmod,
172 	.slave	= &dm81xx_l4_hs_hwmod,
173 	.user	= OCP_USER_MPU,
174 };
175 
176 /* MPU */
177 static struct omap_hwmod dm814x_mpu_hwmod = {
178 	.name		= "mpu",
179 	.clkdm_name	= "alwon_l3s_clkdm",
180 	.class		= &mpu_hwmod_class,
181 	.flags		= HWMOD_INIT_NO_IDLE,
182 	.main_clk	= "mpu_ck",
183 	.prcm		= {
184 		.omap4 = {
185 			.clkctrl_offs = DM814X_CM_ALWON_MPU_CLKCTRL,
186 			.modulemode = MODULEMODE_SWCTRL,
187 		},
188 	},
189 };
190 
191 static struct omap_hwmod_ocp_if dm814x_mpu__alwon_l3_slow = {
192 	.master		= &dm814x_mpu_hwmod,
193 	.slave		= &dm81xx_alwon_l3_slow_hwmod,
194 	.user		= OCP_USER_MPU,
195 };
196 
197 /* L3 med peripheral interface running at 200MHz */
198 static struct omap_hwmod_ocp_if dm814x_mpu__alwon_l3_med = {
199 	.master	= &dm814x_mpu_hwmod,
200 	.slave	= &dm81xx_alwon_l3_med_hwmod,
201 	.user	= OCP_USER_MPU,
202 };
203 
204 static struct omap_hwmod dm816x_mpu_hwmod = {
205 	.name		= "mpu",
206 	.clkdm_name	= "alwon_mpu_clkdm",
207 	.class		= &mpu_hwmod_class,
208 	.flags		= HWMOD_INIT_NO_IDLE,
209 	.main_clk	= "mpu_ck",
210 	.prcm		= {
211 		.omap4 = {
212 			.clkctrl_offs = DM816X_CM_ALWON_MPU_CLKCTRL,
213 			.modulemode = MODULEMODE_SWCTRL,
214 		},
215 	},
216 };
217 
218 static struct omap_hwmod_ocp_if dm816x_mpu__alwon_l3_slow = {
219 	.master		= &dm816x_mpu_hwmod,
220 	.slave		= &dm81xx_alwon_l3_slow_hwmod,
221 	.user		= OCP_USER_MPU,
222 };
223 
224 /* L3 med peripheral interface running at 250MHz */
225 static struct omap_hwmod_ocp_if dm816x_mpu__alwon_l3_med = {
226 	.master	= &dm816x_mpu_hwmod,
227 	.slave	= &dm81xx_alwon_l3_med_hwmod,
228 	.user	= OCP_USER_MPU,
229 };
230 
231 /* RTC */
232 static struct omap_hwmod_class_sysconfig ti81xx_rtc_sysc = {
233 	.rev_offs	= 0x74,
234 	.sysc_offs	= 0x78,
235 	.sysc_flags	= SYSC_HAS_SIDLEMODE,
236 	.idlemodes	= SIDLE_FORCE | SIDLE_NO |
237 			  SIDLE_SMART | SIDLE_SMART_WKUP,
238 	.sysc_fields	= &omap_hwmod_sysc_type3,
239 };
240 
241 static struct omap_hwmod_class ti81xx_rtc_hwmod_class = {
242 	.name		= "rtc",
243 	.sysc		= &ti81xx_rtc_sysc,
244 };
245 
246 static struct omap_hwmod ti81xx_rtc_hwmod = {
247 	.name		= "rtc",
248 	.class		= &ti81xx_rtc_hwmod_class,
249 	.clkdm_name	= "alwon_l3s_clkdm",
250 	.flags		= HWMOD_NO_IDLEST,
251 	.main_clk	= "sysclk18_ck",
252 	.prcm		= {
253 		.omap4	= {
254 			.clkctrl_offs = DM81XX_CM_ALWON_RTC_CLKCTRL,
255 			.modulemode = MODULEMODE_SWCTRL,
256 		},
257 	},
258 };
259 
260 static struct omap_hwmod_ocp_if ti81xx_l4_ls__rtc = {
261 	.master		= &dm81xx_l4_ls_hwmod,
262 	.slave		= &ti81xx_rtc_hwmod,
263 	.clk		= "sysclk6_ck",
264 	.user		= OCP_USER_MPU,
265 };
266 
267 /* UART common */
268 static struct omap_hwmod_class_sysconfig uart_sysc = {
269 	.rev_offs	= 0x50,
270 	.sysc_offs	= 0x54,
271 	.syss_offs	= 0x58,
272 	.sysc_flags	= SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
273 				SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
274 				SYSS_HAS_RESET_STATUS,
275 	.idlemodes	= SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
276 				MSTANDBY_SMART_WKUP,
277 	.sysc_fields	= &omap_hwmod_sysc_type1,
278 };
279 
280 static struct omap_hwmod_class uart_class = {
281 	.name = "uart",
282 	.sysc = &uart_sysc,
283 };
284 
285 static struct omap_hwmod dm81xx_uart1_hwmod = {
286 	.name		= "uart1",
287 	.clkdm_name	= "alwon_l3s_clkdm",
288 	.main_clk	= "sysclk10_ck",
289 	.prcm		= {
290 		.omap4 = {
291 			.clkctrl_offs = DM81XX_CM_ALWON_UART_0_CLKCTRL,
292 			.modulemode = MODULEMODE_SWCTRL,
293 		},
294 	},
295 	.class		= &uart_class,
296 	.flags		= DEBUG_TI81XXUART1_FLAGS,
297 };
298 
299 static struct omap_hwmod_ocp_if dm81xx_l4_ls__uart1 = {
300 	.master		= &dm81xx_l4_ls_hwmod,
301 	.slave		= &dm81xx_uart1_hwmod,
302 	.clk		= "sysclk6_ck",
303 	.user		= OCP_USER_MPU,
304 };
305 
306 static struct omap_hwmod dm81xx_uart2_hwmod = {
307 	.name		= "uart2",
308 	.clkdm_name	= "alwon_l3s_clkdm",
309 	.main_clk	= "sysclk10_ck",
310 	.prcm		= {
311 		.omap4 = {
312 			.clkctrl_offs = DM81XX_CM_ALWON_UART_1_CLKCTRL,
313 			.modulemode = MODULEMODE_SWCTRL,
314 		},
315 	},
316 	.class		= &uart_class,
317 	.flags		= DEBUG_TI81XXUART2_FLAGS,
318 };
319 
320 static struct omap_hwmod_ocp_if dm81xx_l4_ls__uart2 = {
321 	.master		= &dm81xx_l4_ls_hwmod,
322 	.slave		= &dm81xx_uart2_hwmod,
323 	.clk		= "sysclk6_ck",
324 	.user		= OCP_USER_MPU,
325 };
326 
327 static struct omap_hwmod dm81xx_uart3_hwmod = {
328 	.name		= "uart3",
329 	.clkdm_name	= "alwon_l3s_clkdm",
330 	.main_clk	= "sysclk10_ck",
331 	.prcm		= {
332 		.omap4 = {
333 			.clkctrl_offs = DM81XX_CM_ALWON_UART_2_CLKCTRL,
334 			.modulemode = MODULEMODE_SWCTRL,
335 		},
336 	},
337 	.class		= &uart_class,
338 	.flags		= DEBUG_TI81XXUART3_FLAGS,
339 };
340 
341 static struct omap_hwmod_ocp_if dm81xx_l4_ls__uart3 = {
342 	.master		= &dm81xx_l4_ls_hwmod,
343 	.slave		= &dm81xx_uart3_hwmod,
344 	.clk		= "sysclk6_ck",
345 	.user		= OCP_USER_MPU,
346 };
347 
348 static struct omap_hwmod_class_sysconfig wd_timer_sysc = {
349 	.rev_offs	= 0x0,
350 	.sysc_offs	= 0x10,
351 	.syss_offs	= 0x14,
352 	.sysc_flags	= SYSC_HAS_EMUFREE | SYSC_HAS_SOFTRESET |
353 				SYSS_HAS_RESET_STATUS,
354 	.sysc_fields	= &omap_hwmod_sysc_type1,
355 };
356 
357 static struct omap_hwmod_class wd_timer_class = {
358 	.name		= "wd_timer",
359 	.sysc		= &wd_timer_sysc,
360 	.pre_shutdown	= &omap2_wd_timer_disable,
361 	.reset		= &omap2_wd_timer_reset,
362 };
363 
364 static struct omap_hwmod dm81xx_wd_timer_hwmod = {
365 	.name		= "wd_timer",
366 	.clkdm_name	= "alwon_l3s_clkdm",
367 	.main_clk	= "sysclk18_ck",
368 	.flags		= HWMOD_NO_IDLEST,
369 	.prcm		= {
370 		.omap4 = {
371 			.clkctrl_offs = DM81XX_CM_ALWON_WDTIMER_CLKCTRL,
372 			.modulemode = MODULEMODE_SWCTRL,
373 		},
374 	},
375 	.class		= &wd_timer_class,
376 };
377 
378 static struct omap_hwmod_ocp_if dm81xx_l4_ls__wd_timer1 = {
379 	.master		= &dm81xx_l4_ls_hwmod,
380 	.slave		= &dm81xx_wd_timer_hwmod,
381 	.clk		= "sysclk6_ck",
382 	.user		= OCP_USER_MPU,
383 };
384 
385 /* I2C common */
386 static struct omap_hwmod_class_sysconfig i2c_sysc = {
387 	.rev_offs	= 0x0,
388 	.sysc_offs	= 0x10,
389 	.syss_offs	= 0x90,
390 	.sysc_flags	= SYSC_HAS_SIDLEMODE |
391 				SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
392 				SYSC_HAS_AUTOIDLE,
393 	.idlemodes	= SIDLE_FORCE | SIDLE_NO | SIDLE_SMART,
394 	.sysc_fields	= &omap_hwmod_sysc_type1,
395 };
396 
397 static struct omap_hwmod_class i2c_class = {
398 	.name = "i2c",
399 	.sysc = &i2c_sysc,
400 };
401 
402 static struct omap_hwmod dm81xx_i2c1_hwmod = {
403 	.name		= "i2c1",
404 	.clkdm_name	= "alwon_l3s_clkdm",
405 	.main_clk	= "sysclk10_ck",
406 	.prcm		= {
407 		.omap4 = {
408 			.clkctrl_offs = DM81XX_CM_ALWON_I2C_0_CLKCTRL,
409 			.modulemode = MODULEMODE_SWCTRL,
410 		},
411 	},
412 	.class		= &i2c_class,
413 };
414 
415 static struct omap_hwmod_ocp_if dm81xx_l4_ls__i2c1 = {
416 	.master		= &dm81xx_l4_ls_hwmod,
417 	.slave		= &dm81xx_i2c1_hwmod,
418 	.clk		= "sysclk6_ck",
419 	.user		= OCP_USER_MPU,
420 };
421 
422 static struct omap_hwmod dm81xx_i2c2_hwmod = {
423 	.name		= "i2c2",
424 	.clkdm_name	= "alwon_l3s_clkdm",
425 	.main_clk	= "sysclk10_ck",
426 	.prcm		= {
427 		.omap4 = {
428 			.clkctrl_offs = DM81XX_CM_ALWON_I2C_1_CLKCTRL,
429 			.modulemode = MODULEMODE_SWCTRL,
430 		},
431 	},
432 	.class		= &i2c_class,
433 };
434 
435 static struct omap_hwmod_ocp_if dm81xx_l4_ls__i2c2 = {
436 	.master		= &dm81xx_l4_ls_hwmod,
437 	.slave		= &dm81xx_i2c2_hwmod,
438 	.clk		= "sysclk6_ck",
439 	.user		= OCP_USER_MPU,
440 };
441 
442 static struct omap_hwmod_class_sysconfig dm81xx_elm_sysc = {
443 	.rev_offs	= 0x0000,
444 	.sysc_offs	= 0x0010,
445 	.syss_offs	= 0x0014,
446 	.sysc_flags	= SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
447 				SYSC_HAS_SOFTRESET |
448 				SYSS_HAS_RESET_STATUS,
449 	.idlemodes	= SIDLE_FORCE | SIDLE_NO | SIDLE_SMART,
450 	.sysc_fields	= &omap_hwmod_sysc_type1,
451 };
452 
453 static struct omap_hwmod_class dm81xx_elm_hwmod_class = {
454 	.name = "elm",
455 	.sysc = &dm81xx_elm_sysc,
456 };
457 
458 static struct omap_hwmod dm81xx_elm_hwmod = {
459 	.name		= "elm",
460 	.clkdm_name	= "alwon_l3s_clkdm",
461 	.class		= &dm81xx_elm_hwmod_class,
462 	.main_clk	= "sysclk6_ck",
463 };
464 
465 static struct omap_hwmod_ocp_if dm81xx_l4_ls__elm = {
466 	.master		= &dm81xx_l4_ls_hwmod,
467 	.slave		= &dm81xx_elm_hwmod,
468 	.clk		= "sysclk6_ck",
469 	.user		= OCP_USER_MPU,
470 };
471 
472 static struct omap_hwmod_class_sysconfig dm81xx_gpio_sysc = {
473 	.rev_offs	= 0x0000,
474 	.sysc_offs	= 0x0010,
475 	.syss_offs	= 0x0114,
476 	.sysc_flags	= SYSC_HAS_AUTOIDLE | SYSC_HAS_ENAWAKEUP |
477 				SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
478 				SYSS_HAS_RESET_STATUS,
479 	.idlemodes	= SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
480 				SIDLE_SMART_WKUP,
481 	.sysc_fields	= &omap_hwmod_sysc_type1,
482 };
483 
484 static struct omap_hwmod_class dm81xx_gpio_hwmod_class = {
485 	.name	= "gpio",
486 	.sysc	= &dm81xx_gpio_sysc,
487 };
488 
489 static struct omap_hwmod_opt_clk gpio1_opt_clks[] = {
490 	{ .role = "dbclk", .clk = "sysclk18_ck" },
491 };
492 
493 static struct omap_hwmod dm81xx_gpio1_hwmod = {
494 	.name		= "gpio1",
495 	.clkdm_name	= "alwon_l3s_clkdm",
496 	.class		= &dm81xx_gpio_hwmod_class,
497 	.main_clk	= "sysclk6_ck",
498 	.prcm = {
499 		.omap4 = {
500 			.clkctrl_offs = DM81XX_CM_ALWON_GPIO_0_CLKCTRL,
501 			.modulemode = MODULEMODE_SWCTRL,
502 		},
503 	},
504 	.opt_clks	= gpio1_opt_clks,
505 	.opt_clks_cnt	= ARRAY_SIZE(gpio1_opt_clks),
506 };
507 
508 static struct omap_hwmod_ocp_if dm81xx_l4_ls__gpio1 = {
509 	.master		= &dm81xx_l4_ls_hwmod,
510 	.slave		= &dm81xx_gpio1_hwmod,
511 	.clk		= "sysclk6_ck",
512 	.user		= OCP_USER_MPU,
513 };
514 
515 static struct omap_hwmod_opt_clk gpio2_opt_clks[] = {
516 	{ .role = "dbclk", .clk = "sysclk18_ck" },
517 };
518 
519 static struct omap_hwmod dm81xx_gpio2_hwmod = {
520 	.name		= "gpio2",
521 	.clkdm_name	= "alwon_l3s_clkdm",
522 	.class		= &dm81xx_gpio_hwmod_class,
523 	.main_clk	= "sysclk6_ck",
524 	.prcm = {
525 		.omap4 = {
526 			.clkctrl_offs = DM81XX_CM_ALWON_GPIO_1_CLKCTRL,
527 			.modulemode = MODULEMODE_SWCTRL,
528 		},
529 	},
530 	.opt_clks	= gpio2_opt_clks,
531 	.opt_clks_cnt	= ARRAY_SIZE(gpio2_opt_clks),
532 };
533 
534 static struct omap_hwmod_ocp_if dm81xx_l4_ls__gpio2 = {
535 	.master		= &dm81xx_l4_ls_hwmod,
536 	.slave		= &dm81xx_gpio2_hwmod,
537 	.clk		= "sysclk6_ck",
538 	.user		= OCP_USER_MPU,
539 };
540 
541 static struct omap_hwmod_opt_clk gpio3_opt_clks[] = {
542 	{ .role = "dbclk", .clk = "sysclk18_ck" },
543 };
544 
545 static struct omap_hwmod dm81xx_gpio3_hwmod = {
546 	.name		= "gpio3",
547 	.clkdm_name	= "alwon_l3s_clkdm",
548 	.class		= &dm81xx_gpio_hwmod_class,
549 	.main_clk	= "sysclk6_ck",
550 	.prcm = {
551 		.omap4 = {
552 			.clkctrl_offs = DM81XX_CM_ALWON_GPIO_1_CLKCTRL,
553 			.modulemode = MODULEMODE_SWCTRL,
554 		},
555 	},
556 	.opt_clks	= gpio3_opt_clks,
557 	.opt_clks_cnt	= ARRAY_SIZE(gpio3_opt_clks),
558 };
559 
560 static struct omap_hwmod_ocp_if dm81xx_l4_ls__gpio3 = {
561 	.master		= &dm81xx_l4_ls_hwmod,
562 	.slave		= &dm81xx_gpio3_hwmod,
563 	.clk		= "sysclk6_ck",
564 	.user		= OCP_USER_MPU,
565 };
566 
567 static struct omap_hwmod_opt_clk gpio4_opt_clks[] = {
568 	{ .role = "dbclk", .clk = "sysclk18_ck" },
569 };
570 
571 static struct omap_hwmod dm81xx_gpio4_hwmod = {
572 	.name		= "gpio4",
573 	.clkdm_name	= "alwon_l3s_clkdm",
574 	.class		= &dm81xx_gpio_hwmod_class,
575 	.main_clk	= "sysclk6_ck",
576 	.prcm = {
577 		.omap4 = {
578 			.clkctrl_offs = DM81XX_CM_ALWON_GPIO_1_CLKCTRL,
579 			.modulemode = MODULEMODE_SWCTRL,
580 		},
581 	},
582 	.opt_clks	= gpio4_opt_clks,
583 	.opt_clks_cnt	= ARRAY_SIZE(gpio4_opt_clks),
584 };
585 
586 static struct omap_hwmod_ocp_if dm81xx_l4_ls__gpio4 = {
587 	.master		= &dm81xx_l4_ls_hwmod,
588 	.slave		= &dm81xx_gpio4_hwmod,
589 	.clk		= "sysclk6_ck",
590 	.user		= OCP_USER_MPU,
591 };
592 
593 static struct omap_hwmod_class_sysconfig dm81xx_gpmc_sysc = {
594 	.rev_offs	= 0x0,
595 	.sysc_offs	= 0x10,
596 	.syss_offs	= 0x14,
597 	.sysc_flags	= SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
598 				SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS,
599 	.idlemodes	= SIDLE_FORCE | SIDLE_NO | SIDLE_SMART,
600 	.sysc_fields	= &omap_hwmod_sysc_type1,
601 };
602 
603 static struct omap_hwmod_class dm81xx_gpmc_hwmod_class = {
604 	.name	= "gpmc",
605 	.sysc	= &dm81xx_gpmc_sysc,
606 };
607 
608 static struct omap_hwmod dm81xx_gpmc_hwmod = {
609 	.name		= "gpmc",
610 	.clkdm_name	= "alwon_l3s_clkdm",
611 	.class		= &dm81xx_gpmc_hwmod_class,
612 	.main_clk	= "sysclk6_ck",
613 	/* Skip reset for CONFIG_OMAP_GPMC_DEBUG for bootloader timings */
614 	.flags		= DEBUG_OMAP_GPMC_HWMOD_FLAGS,
615 	.prcm = {
616 		.omap4 = {
617 			.clkctrl_offs = DM81XX_CM_ALWON_GPMC_CLKCTRL,
618 			.modulemode = MODULEMODE_SWCTRL,
619 		},
620 	},
621 };
622 
623 static struct omap_hwmod_ocp_if dm81xx_alwon_l3_slow__gpmc = {
624 	.master		= &dm81xx_alwon_l3_slow_hwmod,
625 	.slave		= &dm81xx_gpmc_hwmod,
626 	.user		= OCP_USER_MPU,
627 };
628 
629 /* USB needs udelay 1 after reset at least on hp t410, use 2 for margin */
630 static struct omap_hwmod_class_sysconfig dm81xx_usbhsotg_sysc = {
631 	.rev_offs	= 0x0,
632 	.sysc_offs	= 0x10,
633 	.srst_udelay	= 2,
634 	.sysc_flags	= SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE |
635 				SYSC_HAS_SOFTRESET,
636 	.idlemodes	= SIDLE_SMART | MSTANDBY_FORCE | MSTANDBY_SMART,
637 	.sysc_fields	= &omap_hwmod_sysc_type2,
638 };
639 
640 static struct omap_hwmod_class dm81xx_usbotg_class = {
641 	.name = "usbotg",
642 	.sysc = &dm81xx_usbhsotg_sysc,
643 };
644 
645 static struct omap_hwmod dm814x_usbss_hwmod = {
646 	.name		= "usb_otg_hs",
647 	.clkdm_name	= "default_l3_slow_clkdm",
648 	.main_clk	= "pll260dcoclkldo",	/* 481c5260.adpll.dcoclkldo */
649 	.prcm		= {
650 		.omap4 = {
651 			.clkctrl_offs = DM81XX_CM_DEFAULT_USB_CLKCTRL,
652 			.modulemode = MODULEMODE_SWCTRL,
653 		},
654 	},
655 	.class		= &dm81xx_usbotg_class,
656 };
657 
658 static struct omap_hwmod_ocp_if dm814x_default_l3_slow__usbss = {
659 	.master		= &dm81xx_default_l3_slow_hwmod,
660 	.slave		= &dm814x_usbss_hwmod,
661 	.clk		= "sysclk6_ck",
662 	.user		= OCP_USER_MPU,
663 };
664 
665 static struct omap_hwmod dm816x_usbss_hwmod = {
666 	.name		= "usb_otg_hs",
667 	.clkdm_name	= "default_l3_slow_clkdm",
668 	.main_clk	= "sysclk6_ck",
669 	.prcm		= {
670 		.omap4 = {
671 			.clkctrl_offs = DM81XX_CM_DEFAULT_USB_CLKCTRL,
672 			.modulemode = MODULEMODE_SWCTRL,
673 		},
674 	},
675 	.class		= &dm81xx_usbotg_class,
676 };
677 
678 static struct omap_hwmod_ocp_if dm816x_default_l3_slow__usbss = {
679 	.master		= &dm81xx_default_l3_slow_hwmod,
680 	.slave		= &dm816x_usbss_hwmod,
681 	.clk		= "sysclk6_ck",
682 	.user		= OCP_USER_MPU,
683 };
684 
685 static struct omap_hwmod_class_sysconfig dm816x_timer_sysc = {
686 	.rev_offs	= 0x0000,
687 	.sysc_offs	= 0x0010,
688 	.syss_offs	= 0x0014,
689 	.sysc_flags	= SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET,
690 	.idlemodes	= SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
691 				SIDLE_SMART_WKUP,
692 	.sysc_fields	= &omap_hwmod_sysc_type2,
693 };
694 
695 static struct omap_hwmod_class dm816x_timer_hwmod_class = {
696 	.name = "timer",
697 	.sysc = &dm816x_timer_sysc,
698 };
699 
700 static struct omap_hwmod dm814x_timer1_hwmod = {
701 	.name		= "timer1",
702 	.clkdm_name	= "alwon_l3s_clkdm",
703 	.main_clk	= "timer1_fck",
704 	.class		= &dm816x_timer_hwmod_class,
705 	.flags		= HWMOD_NO_IDLEST,
706 };
707 
708 static struct omap_hwmod_ocp_if dm814x_l4_ls__timer1 = {
709 	.master		= &dm81xx_l4_ls_hwmod,
710 	.slave		= &dm814x_timer1_hwmod,
711 	.clk		= "sysclk6_ck",
712 	.user		= OCP_USER_MPU,
713 };
714 
715 static struct omap_hwmod dm816x_timer1_hwmod = {
716 	.name		= "timer1",
717 	.clkdm_name	= "alwon_l3s_clkdm",
718 	.main_clk	= "timer1_fck",
719 	.prcm		= {
720 		.omap4 = {
721 			.clkctrl_offs = DM816X_CM_ALWON_TIMER_1_CLKCTRL,
722 			.modulemode = MODULEMODE_SWCTRL,
723 		},
724 	},
725 	.class		= &dm816x_timer_hwmod_class,
726 };
727 
728 static struct omap_hwmod_ocp_if dm816x_l4_ls__timer1 = {
729 	.master		= &dm81xx_l4_ls_hwmod,
730 	.slave		= &dm816x_timer1_hwmod,
731 	.clk		= "sysclk6_ck",
732 	.user		= OCP_USER_MPU,
733 };
734 
735 static struct omap_hwmod dm814x_timer2_hwmod = {
736 	.name		= "timer2",
737 	.clkdm_name	= "alwon_l3s_clkdm",
738 	.main_clk	= "timer2_fck",
739 	.class		= &dm816x_timer_hwmod_class,
740 	.flags		= HWMOD_NO_IDLEST,
741 };
742 
743 static struct omap_hwmod_ocp_if dm814x_l4_ls__timer2 = {
744 	.master		= &dm81xx_l4_ls_hwmod,
745 	.slave		= &dm814x_timer2_hwmod,
746 	.clk		= "sysclk6_ck",
747 	.user		= OCP_USER_MPU,
748 };
749 
750 static struct omap_hwmod dm816x_timer2_hwmod = {
751 	.name		= "timer2",
752 	.clkdm_name	= "alwon_l3s_clkdm",
753 	.main_clk	= "timer2_fck",
754 	.prcm		= {
755 		.omap4 = {
756 			.clkctrl_offs = DM816X_CM_ALWON_TIMER_2_CLKCTRL,
757 			.modulemode = MODULEMODE_SWCTRL,
758 		},
759 	},
760 	.class		= &dm816x_timer_hwmod_class,
761 };
762 
763 static struct omap_hwmod_ocp_if dm816x_l4_ls__timer2 = {
764 	.master		= &dm81xx_l4_ls_hwmod,
765 	.slave		= &dm816x_timer2_hwmod,
766 	.clk		= "sysclk6_ck",
767 	.user		= OCP_USER_MPU,
768 };
769 
770 static struct omap_hwmod dm816x_timer3_hwmod = {
771 	.name		= "timer3",
772 	.clkdm_name	= "alwon_l3s_clkdm",
773 	.main_clk	= "timer3_fck",
774 	.prcm		= {
775 		.omap4 = {
776 			.clkctrl_offs = DM816X_CM_ALWON_TIMER_3_CLKCTRL,
777 			.modulemode = MODULEMODE_SWCTRL,
778 		},
779 	},
780 	.class		= &dm816x_timer_hwmod_class,
781 };
782 
783 static struct omap_hwmod_ocp_if dm816x_l4_ls__timer3 = {
784 	.master		= &dm81xx_l4_ls_hwmod,
785 	.slave		= &dm816x_timer3_hwmod,
786 	.clk		= "sysclk6_ck",
787 	.user		= OCP_USER_MPU,
788 };
789 
790 static struct omap_hwmod dm816x_timer4_hwmod = {
791 	.name		= "timer4",
792 	.clkdm_name	= "alwon_l3s_clkdm",
793 	.main_clk	= "timer4_fck",
794 	.prcm		= {
795 		.omap4 = {
796 			.clkctrl_offs = DM816X_CM_ALWON_TIMER_4_CLKCTRL,
797 			.modulemode = MODULEMODE_SWCTRL,
798 		},
799 	},
800 	.class		= &dm816x_timer_hwmod_class,
801 };
802 
803 static struct omap_hwmod_ocp_if dm816x_l4_ls__timer4 = {
804 	.master		= &dm81xx_l4_ls_hwmod,
805 	.slave		= &dm816x_timer4_hwmod,
806 	.clk		= "sysclk6_ck",
807 	.user		= OCP_USER_MPU,
808 };
809 
810 static struct omap_hwmod dm816x_timer5_hwmod = {
811 	.name		= "timer5",
812 	.clkdm_name	= "alwon_l3s_clkdm",
813 	.main_clk	= "timer5_fck",
814 	.prcm		= {
815 		.omap4 = {
816 			.clkctrl_offs = DM816X_CM_ALWON_TIMER_5_CLKCTRL,
817 			.modulemode = MODULEMODE_SWCTRL,
818 		},
819 	},
820 	.class		= &dm816x_timer_hwmod_class,
821 };
822 
823 static struct omap_hwmod_ocp_if dm816x_l4_ls__timer5 = {
824 	.master		= &dm81xx_l4_ls_hwmod,
825 	.slave		= &dm816x_timer5_hwmod,
826 	.clk		= "sysclk6_ck",
827 	.user		= OCP_USER_MPU,
828 };
829 
830 static struct omap_hwmod dm816x_timer6_hwmod = {
831 	.name		= "timer6",
832 	.clkdm_name	= "alwon_l3s_clkdm",
833 	.main_clk	= "timer6_fck",
834 	.prcm		= {
835 		.omap4 = {
836 			.clkctrl_offs = DM816X_CM_ALWON_TIMER_6_CLKCTRL,
837 			.modulemode = MODULEMODE_SWCTRL,
838 		},
839 	},
840 	.class		= &dm816x_timer_hwmod_class,
841 };
842 
843 static struct omap_hwmod_ocp_if dm816x_l4_ls__timer6 = {
844 	.master		= &dm81xx_l4_ls_hwmod,
845 	.slave		= &dm816x_timer6_hwmod,
846 	.clk		= "sysclk6_ck",
847 	.user		= OCP_USER_MPU,
848 };
849 
850 static struct omap_hwmod dm816x_timer7_hwmod = {
851 	.name		= "timer7",
852 	.clkdm_name	= "alwon_l3s_clkdm",
853 	.main_clk	= "timer7_fck",
854 	.prcm		= {
855 		.omap4 = {
856 			.clkctrl_offs = DM816X_CM_ALWON_TIMER_7_CLKCTRL,
857 			.modulemode = MODULEMODE_SWCTRL,
858 		},
859 	},
860 	.class		= &dm816x_timer_hwmod_class,
861 };
862 
863 static struct omap_hwmod_ocp_if dm816x_l4_ls__timer7 = {
864 	.master		= &dm81xx_l4_ls_hwmod,
865 	.slave		= &dm816x_timer7_hwmod,
866 	.clk		= "sysclk6_ck",
867 	.user		= OCP_USER_MPU,
868 };
869 
870 /* CPSW on dm814x */
871 static struct omap_hwmod_class_sysconfig dm814x_cpgmac_sysc = {
872 	.rev_offs	= 0x0,
873 	.sysc_offs	= 0x8,
874 	.syss_offs	= 0x4,
875 	.sysc_flags	= SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE |
876 			  SYSS_HAS_RESET_STATUS,
877 	.idlemodes	= SIDLE_FORCE | SIDLE_NO | MSTANDBY_FORCE |
878 			  MSTANDBY_NO,
879 	.sysc_fields	= &omap_hwmod_sysc_type3,
880 };
881 
882 static struct omap_hwmod_class dm814x_cpgmac0_hwmod_class = {
883 	.name		= "cpgmac0",
884 	.sysc		= &dm814x_cpgmac_sysc,
885 };
886 
887 static struct omap_hwmod dm814x_cpgmac0_hwmod = {
888 	.name		= "cpgmac0",
889 	.class		= &dm814x_cpgmac0_hwmod_class,
890 	.clkdm_name	= "alwon_ethernet_clkdm",
891 	.flags		= HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY,
892 	.main_clk	= "cpsw_125mhz_gclk",
893 	.prcm		= {
894 		.omap4	= {
895 			.clkctrl_offs = DM81XX_CM_ALWON_ETHERNET_0_CLKCTRL,
896 			.modulemode = MODULEMODE_SWCTRL,
897 		},
898 	},
899 };
900 
901 static struct omap_hwmod_class dm814x_mdio_hwmod_class = {
902 	.name		= "davinci_mdio",
903 };
904 
905 static struct omap_hwmod dm814x_mdio_hwmod = {
906 	.name		= "davinci_mdio",
907 	.class		= &dm814x_mdio_hwmod_class,
908 	.clkdm_name	= "alwon_ethernet_clkdm",
909 	.main_clk	= "cpsw_125mhz_gclk",
910 };
911 
912 static struct omap_hwmod_ocp_if dm814x_l4_hs__cpgmac0 = {
913 	.master		= &dm81xx_l4_hs_hwmod,
914 	.slave		= &dm814x_cpgmac0_hwmod,
915 	.clk		= "cpsw_125mhz_gclk",
916 	.user		= OCP_USER_MPU,
917 };
918 
919 static struct omap_hwmod_ocp_if dm814x_cpgmac0__mdio = {
920 	.master		= &dm814x_cpgmac0_hwmod,
921 	.slave		= &dm814x_mdio_hwmod,
922 	.user		= OCP_USER_MPU,
923 	.flags		= HWMOD_NO_IDLEST,
924 };
925 
926 /* EMAC Ethernet */
927 static struct omap_hwmod_class_sysconfig dm816x_emac_sysc = {
928 	.rev_offs	= 0x0,
929 	.sysc_offs	= 0x4,
930 	.sysc_flags	= SYSC_HAS_SOFTRESET,
931 	.sysc_fields	= &omap_hwmod_sysc_type2,
932 };
933 
934 static struct omap_hwmod_class dm816x_emac_hwmod_class = {
935 	.name		= "emac",
936 	.sysc		= &dm816x_emac_sysc,
937 };
938 
939 /*
940  * On dm816x the MDIO is within EMAC0. As the MDIO driver is a separate
941  * driver probed before EMAC0, we let MDIO do the clock idling.
942  */
943 static struct omap_hwmod dm816x_emac0_hwmod = {
944 	.name		= "emac0",
945 	.clkdm_name	= "alwon_ethernet_clkdm",
946 	.class		= &dm816x_emac_hwmod_class,
947 	.flags		= HWMOD_NO_IDLEST,
948 };
949 
950 static struct omap_hwmod_ocp_if dm81xx_l4_hs__emac0 = {
951 	.master		= &dm81xx_l4_hs_hwmod,
952 	.slave		= &dm816x_emac0_hwmod,
953 	.clk		= "sysclk5_ck",
954 	.user		= OCP_USER_MPU,
955 };
956 
957 static struct omap_hwmod_class dm81xx_mdio_hwmod_class = {
958 	.name		= "davinci_mdio",
959 	.sysc		= &dm816x_emac_sysc,
960 };
961 
962 static struct omap_hwmod dm81xx_emac0_mdio_hwmod = {
963 	.name		= "davinci_mdio",
964 	.class		= &dm81xx_mdio_hwmod_class,
965 	.clkdm_name	= "alwon_ethernet_clkdm",
966 	.main_clk	= "sysclk24_ck",
967 	.flags		= HWMOD_NO_IDLEST,
968 	/*
969 	 * REVISIT: This should be moved to the emac0_hwmod
970 	 * once we have a better way to handle device slaves.
971 	 */
972 	.prcm		= {
973 		.omap4 = {
974 			.clkctrl_offs = DM81XX_CM_ALWON_ETHERNET_0_CLKCTRL,
975 			.modulemode = MODULEMODE_SWCTRL,
976 		},
977 	},
978 };
979 
980 static struct omap_hwmod_ocp_if dm81xx_emac0__mdio = {
981 	.master		= &dm81xx_l4_hs_hwmod,
982 	.slave		= &dm81xx_emac0_mdio_hwmod,
983 	.user		= OCP_USER_MPU,
984 };
985 
986 static struct omap_hwmod dm816x_emac1_hwmod = {
987 	.name		= "emac1",
988 	.clkdm_name	= "alwon_ethernet_clkdm",
989 	.main_clk	= "sysclk24_ck",
990 	.flags		= HWMOD_NO_IDLEST,
991 	.prcm		= {
992 		.omap4 = {
993 			.clkctrl_offs = DM816X_CM_ALWON_ETHERNET_1_CLKCTRL,
994 			.modulemode = MODULEMODE_SWCTRL,
995 		},
996 	},
997 	.class		= &dm816x_emac_hwmod_class,
998 };
999 
1000 static struct omap_hwmod_ocp_if dm816x_l4_hs__emac1 = {
1001 	.master		= &dm81xx_l4_hs_hwmod,
1002 	.slave		= &dm816x_emac1_hwmod,
1003 	.clk		= "sysclk5_ck",
1004 	.user		= OCP_USER_MPU,
1005 };
1006 
1007 static struct omap_hwmod_class_sysconfig dm81xx_sata_sysc = {
1008 	.rev_offs	= 0x00fc,
1009 	.sysc_offs	= 0x1100,
1010 	.sysc_flags	= SYSC_HAS_SIDLEMODE,
1011 	.idlemodes	= SIDLE_FORCE,
1012 	.sysc_fields	= &omap_hwmod_sysc_type3,
1013 };
1014 
1015 static struct omap_hwmod_class dm81xx_sata_hwmod_class = {
1016 	.name	= "sata",
1017 	.sysc	= &dm81xx_sata_sysc,
1018 };
1019 
1020 static struct omap_hwmod dm81xx_sata_hwmod = {
1021 	.name		= "sata",
1022 	.clkdm_name	= "default_clkdm",
1023 	.flags		= HWMOD_NO_IDLEST,
1024 	.prcm = {
1025 		.omap4 = {
1026 			.clkctrl_offs = DM81XX_CM_DEFAULT_SATA_CLKCTRL,
1027 			.modulemode   = MODULEMODE_SWCTRL,
1028 		},
1029 	},
1030 	.class		= &dm81xx_sata_hwmod_class,
1031 };
1032 
1033 static struct omap_hwmod_ocp_if dm81xx_l4_hs__sata = {
1034 	.master		= &dm81xx_l4_hs_hwmod,
1035 	.slave		= &dm81xx_sata_hwmod,
1036 	.clk		= "sysclk5_ck",
1037 	.user		= OCP_USER_MPU,
1038 };
1039 
1040 static struct omap_hwmod_class_sysconfig dm81xx_mmc_sysc = {
1041 	.rev_offs	= 0x0,
1042 	.sysc_offs	= 0x110,
1043 	.syss_offs	= 0x114,
1044 	.sysc_flags	= SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
1045 				SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
1046 				SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS,
1047 	.idlemodes	= SIDLE_FORCE | SIDLE_NO | SIDLE_SMART,
1048 	.sysc_fields	= &omap_hwmod_sysc_type1,
1049 };
1050 
1051 static struct omap_hwmod_class dm81xx_mmc_class = {
1052 	.name = "mmc",
1053 	.sysc = &dm81xx_mmc_sysc,
1054 };
1055 
1056 static struct omap_hwmod_opt_clk dm81xx_mmc_opt_clks[] = {
1057 	{ .role = "dbck", .clk = "sysclk18_ck", },
1058 };
1059 
1060 static struct omap_hsmmc_dev_attr mmc_dev_attr = {
1061 };
1062 
1063 static struct omap_hwmod dm814x_mmc1_hwmod = {
1064 	.name		= "mmc1",
1065 	.clkdm_name	= "alwon_l3s_clkdm",
1066 	.opt_clks	= dm81xx_mmc_opt_clks,
1067 	.opt_clks_cnt	= ARRAY_SIZE(dm81xx_mmc_opt_clks),
1068 	.main_clk	= "sysclk8_ck",
1069 	.prcm		= {
1070 		.omap4 = {
1071 			.clkctrl_offs = DM814X_CM_ALWON_MMCHS_0_CLKCTRL,
1072 			.modulemode = MODULEMODE_SWCTRL,
1073 		},
1074 	},
1075 	.dev_attr	= &mmc_dev_attr,
1076 	.class		= &dm81xx_mmc_class,
1077 };
1078 
1079 static struct omap_hwmod_ocp_if dm814x_l4_ls__mmc1 = {
1080 	.master		= &dm81xx_l4_ls_hwmod,
1081 	.slave		= &dm814x_mmc1_hwmod,
1082 	.clk		= "sysclk6_ck",
1083 	.user		= OCP_USER_MPU,
1084 	.flags		= OMAP_FIREWALL_L4
1085 };
1086 
1087 static struct omap_hwmod dm814x_mmc2_hwmod = {
1088 	.name		= "mmc2",
1089 	.clkdm_name	= "alwon_l3s_clkdm",
1090 	.opt_clks	= dm81xx_mmc_opt_clks,
1091 	.opt_clks_cnt	= ARRAY_SIZE(dm81xx_mmc_opt_clks),
1092 	.main_clk	= "sysclk8_ck",
1093 	.prcm		= {
1094 		.omap4 = {
1095 			.clkctrl_offs = DM814X_CM_ALWON_MMCHS_1_CLKCTRL,
1096 			.modulemode = MODULEMODE_SWCTRL,
1097 		},
1098 	},
1099 	.dev_attr	= &mmc_dev_attr,
1100 	.class		= &dm81xx_mmc_class,
1101 };
1102 
1103 static struct omap_hwmod_ocp_if dm814x_l4_ls__mmc2 = {
1104 	.master		= &dm81xx_l4_ls_hwmod,
1105 	.slave		= &dm814x_mmc2_hwmod,
1106 	.clk		= "sysclk6_ck",
1107 	.user		= OCP_USER_MPU,
1108 	.flags		= OMAP_FIREWALL_L4
1109 };
1110 
1111 static struct omap_hwmod dm814x_mmc3_hwmod = {
1112 	.name		= "mmc3",
1113 	.clkdm_name	= "alwon_l3_med_clkdm",
1114 	.opt_clks	= dm81xx_mmc_opt_clks,
1115 	.opt_clks_cnt	= ARRAY_SIZE(dm81xx_mmc_opt_clks),
1116 	.main_clk	= "sysclk8_ck",
1117 	.prcm		= {
1118 		.omap4 = {
1119 			.clkctrl_offs = DM814X_CM_ALWON_MMCHS_2_CLKCTRL,
1120 			.modulemode = MODULEMODE_SWCTRL,
1121 		},
1122 	},
1123 	.dev_attr	= &mmc_dev_attr,
1124 	.class		= &dm81xx_mmc_class,
1125 };
1126 
1127 static struct omap_hwmod_ocp_if dm814x_alwon_l3_med__mmc3 = {
1128 	.master		= &dm81xx_alwon_l3_med_hwmod,
1129 	.slave		= &dm814x_mmc3_hwmod,
1130 	.clk		= "sysclk4_ck",
1131 	.user		= OCP_USER_MPU,
1132 };
1133 
1134 static struct omap_hwmod dm816x_mmc1_hwmod = {
1135 	.name		= "mmc1",
1136 	.clkdm_name	= "alwon_l3s_clkdm",
1137 	.opt_clks	= dm81xx_mmc_opt_clks,
1138 	.opt_clks_cnt	= ARRAY_SIZE(dm81xx_mmc_opt_clks),
1139 	.main_clk	= "sysclk10_ck",
1140 	.prcm		= {
1141 		.omap4 = {
1142 			.clkctrl_offs = DM816X_CM_ALWON_SDIO_CLKCTRL,
1143 			.modulemode = MODULEMODE_SWCTRL,
1144 		},
1145 	},
1146 	.dev_attr	= &mmc_dev_attr,
1147 	.class		= &dm81xx_mmc_class,
1148 };
1149 
1150 static struct omap_hwmod_ocp_if dm816x_l4_ls__mmc1 = {
1151 	.master		= &dm81xx_l4_ls_hwmod,
1152 	.slave		= &dm816x_mmc1_hwmod,
1153 	.clk		= "sysclk6_ck",
1154 	.user		= OCP_USER_MPU,
1155 	.flags		= OMAP_FIREWALL_L4
1156 };
1157 
1158 static struct omap_hwmod_class_sysconfig dm816x_mcspi_sysc = {
1159 	.rev_offs	= 0x0,
1160 	.sysc_offs	= 0x110,
1161 	.syss_offs	= 0x114,
1162 	.sysc_flags	= SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
1163 				SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
1164 				SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS,
1165 	.idlemodes	= SIDLE_FORCE | SIDLE_NO | SIDLE_SMART,
1166 	.sysc_fields	= &omap_hwmod_sysc_type1,
1167 };
1168 
1169 static struct omap_hwmod_class dm816x_mcspi_class = {
1170 	.name = "mcspi",
1171 	.sysc = &dm816x_mcspi_sysc,
1172 };
1173 
1174 static struct omap_hwmod dm81xx_mcspi1_hwmod = {
1175 	.name		= "mcspi1",
1176 	.clkdm_name	= "alwon_l3s_clkdm",
1177 	.main_clk	= "sysclk10_ck",
1178 	.prcm		= {
1179 		.omap4 = {
1180 			.clkctrl_offs = DM81XX_CM_ALWON_SPI_CLKCTRL,
1181 			.modulemode = MODULEMODE_SWCTRL,
1182 		},
1183 	},
1184 	.class		= &dm816x_mcspi_class,
1185 };
1186 
1187 static struct omap_hwmod dm81xx_mcspi2_hwmod = {
1188 	.name		= "mcspi2",
1189 	.clkdm_name	= "alwon_l3s_clkdm",
1190 	.main_clk	= "sysclk10_ck",
1191 	.prcm		= {
1192 		.omap4 = {
1193 			.clkctrl_offs = DM81XX_CM_ALWON_SPI_CLKCTRL,
1194 			.modulemode = MODULEMODE_SWCTRL,
1195 		},
1196 	},
1197 	.class		= &dm816x_mcspi_class,
1198 };
1199 
1200 static struct omap_hwmod dm81xx_mcspi3_hwmod = {
1201 	.name		= "mcspi3",
1202 	.clkdm_name	= "alwon_l3s_clkdm",
1203 	.main_clk	= "sysclk10_ck",
1204 	.prcm		= {
1205 		.omap4 = {
1206 			.clkctrl_offs = DM81XX_CM_ALWON_SPI_CLKCTRL,
1207 			.modulemode = MODULEMODE_SWCTRL,
1208 		},
1209 	},
1210 	.class		= &dm816x_mcspi_class,
1211 };
1212 
1213 static struct omap_hwmod dm81xx_mcspi4_hwmod = {
1214 	.name		= "mcspi4",
1215 	.clkdm_name	= "alwon_l3s_clkdm",
1216 	.main_clk	= "sysclk10_ck",
1217 	.prcm		= {
1218 		.omap4 = {
1219 			.clkctrl_offs = DM81XX_CM_ALWON_SPI_CLKCTRL,
1220 			.modulemode = MODULEMODE_SWCTRL,
1221 		},
1222 	},
1223 	.class		= &dm816x_mcspi_class,
1224 };
1225 
1226 static struct omap_hwmod_ocp_if dm81xx_l4_ls__mcspi1 = {
1227 	.master		= &dm81xx_l4_ls_hwmod,
1228 	.slave		= &dm81xx_mcspi1_hwmod,
1229 	.clk		= "sysclk6_ck",
1230 	.user		= OCP_USER_MPU,
1231 };
1232 
1233 static struct omap_hwmod_ocp_if dm81xx_l4_ls__mcspi2 = {
1234 	.master		= &dm81xx_l4_ls_hwmod,
1235 	.slave		= &dm81xx_mcspi2_hwmod,
1236 	.clk		= "sysclk6_ck",
1237 	.user		= OCP_USER_MPU,
1238 };
1239 
1240 static struct omap_hwmod_ocp_if dm81xx_l4_ls__mcspi3 = {
1241 	.master		= &dm81xx_l4_ls_hwmod,
1242 	.slave		= &dm81xx_mcspi3_hwmod,
1243 	.clk		= "sysclk6_ck",
1244 	.user		= OCP_USER_MPU,
1245 };
1246 
1247 static struct omap_hwmod_ocp_if dm81xx_l4_ls__mcspi4 = {
1248 	.master		= &dm81xx_l4_ls_hwmod,
1249 	.slave		= &dm81xx_mcspi4_hwmod,
1250 	.clk		= "sysclk6_ck",
1251 	.user		= OCP_USER_MPU,
1252 };
1253 
1254 static struct omap_hwmod_class_sysconfig dm81xx_mailbox_sysc = {
1255 	.rev_offs	= 0x000,
1256 	.sysc_offs	= 0x010,
1257 	.syss_offs	= 0x014,
1258 	.sysc_flags	= SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
1259 				SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE,
1260 	.idlemodes	= SIDLE_FORCE | SIDLE_NO | SIDLE_SMART,
1261 	.sysc_fields	= &omap_hwmod_sysc_type1,
1262 };
1263 
1264 static struct omap_hwmod_class dm81xx_mailbox_hwmod_class = {
1265 	.name = "mailbox",
1266 	.sysc = &dm81xx_mailbox_sysc,
1267 };
1268 
1269 static struct omap_hwmod dm81xx_mailbox_hwmod = {
1270 	.name		= "mailbox",
1271 	.clkdm_name	= "alwon_l3s_clkdm",
1272 	.class		= &dm81xx_mailbox_hwmod_class,
1273 	.main_clk	= "sysclk6_ck",
1274 	.prcm		= {
1275 		.omap4 = {
1276 			.clkctrl_offs = DM81XX_CM_ALWON_MAILBOX_CLKCTRL,
1277 			.modulemode = MODULEMODE_SWCTRL,
1278 		},
1279 	},
1280 };
1281 
1282 static struct omap_hwmod_ocp_if dm81xx_l4_ls__mailbox = {
1283 	.master		= &dm81xx_l4_ls_hwmod,
1284 	.slave		= &dm81xx_mailbox_hwmod,
1285 	.clk		= "sysclk6_ck",
1286 	.user		= OCP_USER_MPU,
1287 };
1288 
1289 static struct omap_hwmod_class_sysconfig dm81xx_spinbox_sysc = {
1290 	.rev_offs	= 0x000,
1291 	.sysc_offs	= 0x010,
1292 	.syss_offs	= 0x014,
1293 	.sysc_flags	= SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
1294 				SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE,
1295 	.idlemodes	= SIDLE_FORCE | SIDLE_NO | SIDLE_SMART,
1296 	.sysc_fields	= &omap_hwmod_sysc_type1,
1297 };
1298 
1299 static struct omap_hwmod_class dm81xx_spinbox_hwmod_class = {
1300 	.name = "spinbox",
1301 	.sysc = &dm81xx_spinbox_sysc,
1302 };
1303 
1304 static struct omap_hwmod dm81xx_spinbox_hwmod = {
1305 	.name		= "spinbox",
1306 	.clkdm_name	= "alwon_l3s_clkdm",
1307 	.class		= &dm81xx_spinbox_hwmod_class,
1308 	.main_clk	= "sysclk6_ck",
1309 	.prcm		= {
1310 		.omap4 = {
1311 			.clkctrl_offs = DM81XX_CM_ALWON_SPINBOX_CLKCTRL,
1312 			.modulemode = MODULEMODE_SWCTRL,
1313 		},
1314 	},
1315 };
1316 
1317 static struct omap_hwmod_ocp_if dm81xx_l4_ls__spinbox = {
1318 	.master		= &dm81xx_l4_ls_hwmod,
1319 	.slave		= &dm81xx_spinbox_hwmod,
1320 	.clk		= "sysclk6_ck",
1321 	.user		= OCP_USER_MPU,
1322 };
1323 
1324 static struct omap_hwmod_class dm81xx_tpcc_hwmod_class = {
1325 	.name		= "tpcc",
1326 };
1327 
1328 static struct omap_hwmod dm81xx_tpcc_hwmod = {
1329 	.name		= "tpcc",
1330 	.class		= &dm81xx_tpcc_hwmod_class,
1331 	.clkdm_name	= "alwon_l3s_clkdm",
1332 	.main_clk	= "sysclk4_ck",
1333 	.prcm		= {
1334 		.omap4	= {
1335 			.clkctrl_offs	= DM81XX_CM_ALWON_TPCC_CLKCTRL,
1336 			.modulemode	= MODULEMODE_SWCTRL,
1337 		},
1338 	},
1339 };
1340 
1341 static struct omap_hwmod_ocp_if dm81xx_alwon_l3_fast__tpcc = {
1342 	.master		= &dm81xx_alwon_l3_fast_hwmod,
1343 	.slave		= &dm81xx_tpcc_hwmod,
1344 	.clk		= "sysclk4_ck",
1345 	.user		= OCP_USER_MPU,
1346 };
1347 
1348 static struct omap_hwmod_class dm81xx_tptc0_hwmod_class = {
1349 	.name		= "tptc0",
1350 };
1351 
1352 static struct omap_hwmod dm81xx_tptc0_hwmod = {
1353 	.name		= "tptc0",
1354 	.class		= &dm81xx_tptc0_hwmod_class,
1355 	.clkdm_name	= "alwon_l3s_clkdm",
1356 	.main_clk	= "sysclk4_ck",
1357 	.prcm		= {
1358 		.omap4	= {
1359 			.clkctrl_offs	= DM81XX_CM_ALWON_TPTC0_CLKCTRL,
1360 			.modulemode	= MODULEMODE_SWCTRL,
1361 		},
1362 	},
1363 };
1364 
1365 static struct omap_hwmod_ocp_if dm81xx_alwon_l3_fast__tptc0 = {
1366 	.master		= &dm81xx_alwon_l3_fast_hwmod,
1367 	.slave		= &dm81xx_tptc0_hwmod,
1368 	.clk		= "sysclk4_ck",
1369 	.user		= OCP_USER_MPU,
1370 };
1371 
1372 static struct omap_hwmod_ocp_if dm81xx_tptc0__alwon_l3_fast = {
1373 	.master		= &dm81xx_tptc0_hwmod,
1374 	.slave		= &dm81xx_alwon_l3_fast_hwmod,
1375 	.clk		= "sysclk4_ck",
1376 	.user		= OCP_USER_MPU,
1377 };
1378 
1379 static struct omap_hwmod_class dm81xx_tptc1_hwmod_class = {
1380 	.name		= "tptc1",
1381 };
1382 
1383 static struct omap_hwmod dm81xx_tptc1_hwmod = {
1384 	.name		= "tptc1",
1385 	.class		= &dm81xx_tptc1_hwmod_class,
1386 	.clkdm_name	= "alwon_l3s_clkdm",
1387 	.main_clk	= "sysclk4_ck",
1388 	.prcm		= {
1389 		.omap4	= {
1390 			.clkctrl_offs	= DM81XX_CM_ALWON_TPTC1_CLKCTRL,
1391 			.modulemode	= MODULEMODE_SWCTRL,
1392 		},
1393 	},
1394 };
1395 
1396 static struct omap_hwmod_ocp_if dm81xx_alwon_l3_fast__tptc1 = {
1397 	.master		= &dm81xx_alwon_l3_fast_hwmod,
1398 	.slave		= &dm81xx_tptc1_hwmod,
1399 	.clk		= "sysclk4_ck",
1400 	.user		= OCP_USER_MPU,
1401 };
1402 
1403 static struct omap_hwmod_ocp_if dm81xx_tptc1__alwon_l3_fast = {
1404 	.master		= &dm81xx_tptc1_hwmod,
1405 	.slave		= &dm81xx_alwon_l3_fast_hwmod,
1406 	.clk		= "sysclk4_ck",
1407 	.user		= OCP_USER_MPU,
1408 };
1409 
1410 static struct omap_hwmod_class dm81xx_tptc2_hwmod_class = {
1411 	.name		= "tptc2",
1412 };
1413 
1414 static struct omap_hwmod dm81xx_tptc2_hwmod = {
1415 	.name		= "tptc2",
1416 	.class		= &dm81xx_tptc2_hwmod_class,
1417 	.clkdm_name	= "alwon_l3s_clkdm",
1418 	.main_clk	= "sysclk4_ck",
1419 	.prcm		= {
1420 		.omap4	= {
1421 			.clkctrl_offs	= DM81XX_CM_ALWON_TPTC2_CLKCTRL,
1422 			.modulemode	= MODULEMODE_SWCTRL,
1423 		},
1424 	},
1425 };
1426 
1427 static struct omap_hwmod_ocp_if dm81xx_alwon_l3_fast__tptc2 = {
1428 	.master		= &dm81xx_alwon_l3_fast_hwmod,
1429 	.slave		= &dm81xx_tptc2_hwmod,
1430 	.clk		= "sysclk4_ck",
1431 	.user		= OCP_USER_MPU,
1432 };
1433 
1434 static struct omap_hwmod_ocp_if dm81xx_tptc2__alwon_l3_fast = {
1435 	.master		= &dm81xx_tptc2_hwmod,
1436 	.slave		= &dm81xx_alwon_l3_fast_hwmod,
1437 	.clk		= "sysclk4_ck",
1438 	.user		= OCP_USER_MPU,
1439 };
1440 
1441 static struct omap_hwmod_class dm81xx_tptc3_hwmod_class = {
1442 	.name		= "tptc3",
1443 };
1444 
1445 static struct omap_hwmod dm81xx_tptc3_hwmod = {
1446 	.name		= "tptc3",
1447 	.class		= &dm81xx_tptc3_hwmod_class,
1448 	.clkdm_name	= "alwon_l3s_clkdm",
1449 	.main_clk	= "sysclk4_ck",
1450 	.prcm		= {
1451 		.omap4	= {
1452 			.clkctrl_offs	= DM81XX_CM_ALWON_TPTC3_CLKCTRL,
1453 			.modulemode	= MODULEMODE_SWCTRL,
1454 		},
1455 	},
1456 };
1457 
1458 static struct omap_hwmod_ocp_if dm81xx_alwon_l3_fast__tptc3 = {
1459 	.master		= &dm81xx_alwon_l3_fast_hwmod,
1460 	.slave		= &dm81xx_tptc3_hwmod,
1461 	.clk		= "sysclk4_ck",
1462 	.user		= OCP_USER_MPU,
1463 };
1464 
1465 static struct omap_hwmod_ocp_if dm81xx_tptc3__alwon_l3_fast = {
1466 	.master		= &dm81xx_tptc3_hwmod,
1467 	.slave		= &dm81xx_alwon_l3_fast_hwmod,
1468 	.clk		= "sysclk4_ck",
1469 	.user		= OCP_USER_MPU,
1470 };
1471 
1472 /*
1473  * REVISIT: Test and enable the following once clocks work:
1474  * dm81xx_l4_ls__mailbox
1475  *
1476  * Also note that some devices share a single clkctrl_offs..
1477  * For example, i2c1 and 3 share one, and i2c2 and 4 share one.
1478  */
1479 static struct omap_hwmod_ocp_if *dm814x_hwmod_ocp_ifs[] __initdata = {
1480 	&dm814x_mpu__alwon_l3_slow,
1481 	&dm814x_mpu__alwon_l3_med,
1482 	&dm81xx_alwon_l3_slow__l4_ls,
1483 	&dm81xx_alwon_l3_slow__l4_hs,
1484 	&dm81xx_l4_ls__uart1,
1485 	&dm81xx_l4_ls__uart2,
1486 	&dm81xx_l4_ls__uart3,
1487 	&dm81xx_l4_ls__wd_timer1,
1488 	&dm81xx_l4_ls__i2c1,
1489 	&dm81xx_l4_ls__i2c2,
1490 	&dm81xx_l4_ls__gpio1,
1491 	&dm81xx_l4_ls__gpio2,
1492 	&dm81xx_l4_ls__gpio3,
1493 	&dm81xx_l4_ls__gpio4,
1494 	&dm81xx_l4_ls__elm,
1495 	&dm81xx_l4_ls__mcspi1,
1496 	&dm81xx_l4_ls__mcspi2,
1497 	&dm81xx_l4_ls__mcspi3,
1498 	&dm81xx_l4_ls__mcspi4,
1499 	&dm814x_l4_ls__mmc1,
1500 	&dm814x_l4_ls__mmc2,
1501 	&ti81xx_l4_ls__rtc,
1502 	&dm81xx_alwon_l3_fast__tpcc,
1503 	&dm81xx_alwon_l3_fast__tptc0,
1504 	&dm81xx_alwon_l3_fast__tptc1,
1505 	&dm81xx_alwon_l3_fast__tptc2,
1506 	&dm81xx_alwon_l3_fast__tptc3,
1507 	&dm81xx_tptc0__alwon_l3_fast,
1508 	&dm81xx_tptc1__alwon_l3_fast,
1509 	&dm81xx_tptc2__alwon_l3_fast,
1510 	&dm81xx_tptc3__alwon_l3_fast,
1511 	&dm814x_l4_ls__timer1,
1512 	&dm814x_l4_ls__timer2,
1513 	&dm814x_l4_hs__cpgmac0,
1514 	&dm814x_cpgmac0__mdio,
1515 	&dm81xx_alwon_l3_slow__gpmc,
1516 	&dm814x_default_l3_slow__usbss,
1517 	&dm814x_alwon_l3_med__mmc3,
1518 	NULL,
1519 };
1520 
1521 int __init dm814x_hwmod_init(void)
1522 {
1523 	omap_hwmod_init();
1524 	return omap_hwmod_register_links(dm814x_hwmod_ocp_ifs);
1525 }
1526 
1527 static struct omap_hwmod_ocp_if *dm816x_hwmod_ocp_ifs[] __initdata = {
1528 	&dm816x_mpu__alwon_l3_slow,
1529 	&dm816x_mpu__alwon_l3_med,
1530 	&dm81xx_alwon_l3_slow__l4_ls,
1531 	&dm81xx_alwon_l3_slow__l4_hs,
1532 	&dm81xx_l4_ls__uart1,
1533 	&dm81xx_l4_ls__uart2,
1534 	&dm81xx_l4_ls__uart3,
1535 	&dm81xx_l4_ls__wd_timer1,
1536 	&dm81xx_l4_ls__i2c1,
1537 	&dm81xx_l4_ls__i2c2,
1538 	&dm81xx_l4_ls__gpio1,
1539 	&dm81xx_l4_ls__gpio2,
1540 	&dm81xx_l4_ls__elm,
1541 	&ti81xx_l4_ls__rtc,
1542 	&dm816x_l4_ls__mmc1,
1543 	&dm816x_l4_ls__timer1,
1544 	&dm816x_l4_ls__timer2,
1545 	&dm816x_l4_ls__timer3,
1546 	&dm816x_l4_ls__timer4,
1547 	&dm816x_l4_ls__timer5,
1548 	&dm816x_l4_ls__timer6,
1549 	&dm816x_l4_ls__timer7,
1550 	&dm81xx_l4_ls__mcspi1,
1551 	&dm81xx_l4_ls__mailbox,
1552 	&dm81xx_l4_ls__spinbox,
1553 	&dm81xx_l4_hs__emac0,
1554 	&dm81xx_emac0__mdio,
1555 	&dm816x_l4_hs__emac1,
1556 	&dm81xx_l4_hs__sata,
1557 	&dm81xx_alwon_l3_fast__tpcc,
1558 	&dm81xx_alwon_l3_fast__tptc0,
1559 	&dm81xx_alwon_l3_fast__tptc1,
1560 	&dm81xx_alwon_l3_fast__tptc2,
1561 	&dm81xx_alwon_l3_fast__tptc3,
1562 	&dm81xx_tptc0__alwon_l3_fast,
1563 	&dm81xx_tptc1__alwon_l3_fast,
1564 	&dm81xx_tptc2__alwon_l3_fast,
1565 	&dm81xx_tptc3__alwon_l3_fast,
1566 	&dm81xx_alwon_l3_slow__gpmc,
1567 	&dm816x_default_l3_slow__usbss,
1568 	NULL,
1569 };
1570 
1571 int __init dm816x_hwmod_init(void)
1572 {
1573 	omap_hwmod_init();
1574 	return omap_hwmod_register_links(dm816x_hwmod_ocp_ifs);
1575 }
1576