Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux...
[firefly-linux-kernel-4.4.55.git] / arch / arm / mach-omap2 / omap_hwmod_81xx_data.c
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/platform_data/gpio-omap.h>
19 #include <linux/platform_data/hsmmc-omap.h>
20 #include <linux/platform_data/spi-omap2-mcspi.h>
21 #include <plat/dmtimer.h>
22
23 #include "omap_hwmod_common_data.h"
24 #include "cm81xx.h"
25 #include "ti81xx.h"
26 #include "wd_timer.h"
27
28 /*
29  * DM816X hardware modules integration data
30  *
31  * Note: This is incomplete and at present, not generated from h/w database.
32  */
33
34 /*
35  * The alwon .clkctrl_offs field is offset from the CM_ALWON, that's
36  * TRM 18.7.17 CM_ALWON device register values minus 0x1400.
37  */
38 #define DM816X_DM_ALWON_BASE            0x1400
39 #define DM816X_CM_ALWON_MCASP0_CLKCTRL  (0x1540 - DM816X_DM_ALWON_BASE)
40 #define DM816X_CM_ALWON_MCASP1_CLKCTRL  (0x1544 - DM816X_DM_ALWON_BASE)
41 #define DM816X_CM_ALWON_MCASP2_CLKCTRL  (0x1548 - DM816X_DM_ALWON_BASE)
42 #define DM816X_CM_ALWON_MCBSP_CLKCTRL   (0x154c - DM816X_DM_ALWON_BASE)
43 #define DM816X_CM_ALWON_UART_0_CLKCTRL  (0x1550 - DM816X_DM_ALWON_BASE)
44 #define DM816X_CM_ALWON_UART_1_CLKCTRL  (0x1554 - DM816X_DM_ALWON_BASE)
45 #define DM816X_CM_ALWON_UART_2_CLKCTRL  (0x1558 - DM816X_DM_ALWON_BASE)
46 #define DM816X_CM_ALWON_GPIO_0_CLKCTRL  (0x155c - DM816X_DM_ALWON_BASE)
47 #define DM816X_CM_ALWON_GPIO_1_CLKCTRL  (0x1560 - DM816X_DM_ALWON_BASE)
48 #define DM816X_CM_ALWON_I2C_0_CLKCTRL   (0x1564 - DM816X_DM_ALWON_BASE)
49 #define DM816X_CM_ALWON_I2C_1_CLKCTRL   (0x1568 - DM816X_DM_ALWON_BASE)
50 #define DM816X_CM_ALWON_TIMER_1_CLKCTRL (0x1570 - DM816X_DM_ALWON_BASE)
51 #define DM816X_CM_ALWON_TIMER_2_CLKCTRL (0x1574 - DM816X_DM_ALWON_BASE)
52 #define DM816X_CM_ALWON_TIMER_3_CLKCTRL (0x1578 - DM816X_DM_ALWON_BASE)
53 #define DM816X_CM_ALWON_TIMER_4_CLKCTRL (0x157c - DM816X_DM_ALWON_BASE)
54 #define DM816X_CM_ALWON_TIMER_5_CLKCTRL (0x1580 - DM816X_DM_ALWON_BASE)
55 #define DM816X_CM_ALWON_TIMER_6_CLKCTRL (0x1584 - DM816X_DM_ALWON_BASE)
56 #define DM816X_CM_ALWON_TIMER_7_CLKCTRL (0x1588 - DM816X_DM_ALWON_BASE)
57 #define DM816X_CM_ALWON_WDTIMER_CLKCTRL (0x158c - DM816X_DM_ALWON_BASE)
58 #define DM816X_CM_ALWON_SPI_CLKCTRL     (0x1590 - DM816X_DM_ALWON_BASE)
59 #define DM816X_CM_ALWON_MAILBOX_CLKCTRL (0x1594 - DM816X_DM_ALWON_BASE)
60 #define DM816X_CM_ALWON_SPINBOX_CLKCTRL (0x1598 - DM816X_DM_ALWON_BASE)
61 #define DM816X_CM_ALWON_MMUDATA_CLKCTRL (0x159c - DM816X_DM_ALWON_BASE)
62 #define DM816X_CM_ALWON_MMUCFG_CLKCTRL  (0x15a8 - DM816X_DM_ALWON_BASE)
63 #define DM816X_CM_ALWON_SDIO_CLKCTRL    (0x15b0 - DM816X_DM_ALWON_BASE)
64 #define DM816X_CM_ALWON_OCMC_0_CLKCTRL  (0x15b4 - DM816X_DM_ALWON_BASE)
65 #define DM816X_CM_ALWON_OCMC_1_CLKCTRL  (0x15b8 - DM816X_DM_ALWON_BASE)
66 #define DM816X_CM_ALWON_CONTRL_CLKCTRL  (0x15c4 - DM816X_DM_ALWON_BASE)
67 #define DM816X_CM_ALWON_GPMC_CLKCTRL    (0x15d0 - DM816X_DM_ALWON_BASE)
68 #define DM816X_CM_ALWON_ETHERNET_0_CLKCTRL (0x15d4 - DM816X_DM_ALWON_BASE)
69 #define DM816X_CM_ALWON_ETHERNET_1_CLKCTRL (0x15d8 - DM816X_DM_ALWON_BASE)
70 #define DM816X_CM_ALWON_MPU_CLKCTRL     (0x15dc - DM816X_DM_ALWON_BASE)
71 #define DM816X_CM_ALWON_L3_CLKCTRL      (0x15e4 - DM816X_DM_ALWON_BASE)
72 #define DM816X_CM_ALWON_L4HS_CLKCTRL    (0x15e8 - DM816X_DM_ALWON_BASE)
73 #define DM816X_CM_ALWON_L4LS_CLKCTRL    (0x15ec - DM816X_DM_ALWON_BASE)
74 #define DM816X_CM_ALWON_RTC_CLKCTRL     (0x15f0 - DM816X_DM_ALWON_BASE)
75 #define DM816X_CM_ALWON_TPCC_CLKCTRL    (0x15f4 - DM816X_DM_ALWON_BASE)
76 #define DM816X_CM_ALWON_TPTC0_CLKCTRL   (0x15f8 - DM816X_DM_ALWON_BASE)
77 #define DM816X_CM_ALWON_TPTC1_CLKCTRL   (0x15fc - DM816X_DM_ALWON_BASE)
78 #define DM816X_CM_ALWON_TPTC2_CLKCTRL   (0x1600 - DM816X_DM_ALWON_BASE)
79 #define DM816X_CM_ALWON_TPTC3_CLKCTRL   (0x1604 - DM816X_DM_ALWON_BASE)
80 #define DM816X_CM_ALWON_SR_0_CLKCTRL    (0x1608 - DM816X_DM_ALWON_BASE)
81 #define DM816X_CM_ALWON_SR_1_CLKCTRL    (0x160c - DM816X_DM_ALWON_BASE)
82
83 /*
84  * The default .clkctrl_offs field is offset from CM_DEFAULT, that's
85  * TRM 18.7.6 CM_DEFAULT device register values minus 0x500
86  */
87 #define DM816X_CM_DEFAULT_OFFSET        0x500
88 #define DM816X_CM_DEFAULT_USB_CLKCTRL   (0x558 - DM816X_CM_DEFAULT_OFFSET)
89
90 /* L3 Interconnect entries clocked at 125, 250 and 500MHz */
91 static struct omap_hwmod dm816x_alwon_l3_slow_hwmod = {
92         .name           = "alwon_l3_slow",
93         .clkdm_name     = "alwon_l3s_clkdm",
94         .class          = &l3_hwmod_class,
95         .flags          = HWMOD_NO_IDLEST,
96 };
97
98 static struct omap_hwmod dm816x_default_l3_slow_hwmod = {
99         .name           = "default_l3_slow",
100         .clkdm_name     = "default_l3_slow_clkdm",
101         .class          = &l3_hwmod_class,
102         .flags          = HWMOD_NO_IDLEST,
103 };
104
105 static struct omap_hwmod dm816x_alwon_l3_med_hwmod = {
106         .name           = "l3_med",
107         .clkdm_name     = "alwon_l3_med_clkdm",
108         .class          = &l3_hwmod_class,
109         .flags          = HWMOD_NO_IDLEST,
110 };
111
112 static struct omap_hwmod dm816x_alwon_l3_fast_hwmod = {
113         .name           = "l3_fast",
114         .clkdm_name     = "alwon_l3_fast_clkdm",
115         .class          = &l3_hwmod_class,
116         .flags          = HWMOD_NO_IDLEST,
117 };
118
119 /*
120  * L4 standard peripherals, see TRM table 1-12 for devices using this.
121  * See TRM table 1-73 for devices using the 125MHz SYSCLK6 clock.
122  */
123 static struct omap_hwmod dm816x_l4_ls_hwmod = {
124         .name           = "l4_ls",
125         .clkdm_name     = "alwon_l3s_clkdm",
126         .class          = &l4_hwmod_class,
127 };
128
129 /*
130  * L4 high-speed peripherals. For devices using this, please see the TRM
131  * table 1-13. On dm816x, only EMAC, MDIO and SATA use this. See also TRM
132  * table 1-73 for devices using 250MHz SYSCLK5 clock.
133  */
134 static struct omap_hwmod dm816x_l4_hs_hwmod = {
135         .name           = "l4_hs",
136         .clkdm_name     = "alwon_l3_med_clkdm",
137         .class          = &l4_hwmod_class,
138 };
139
140 /* L3 slow -> L4 ls peripheral interface running at 125MHz */
141 static struct omap_hwmod_ocp_if dm816x_alwon_l3_slow__l4_ls = {
142         .master = &dm816x_alwon_l3_slow_hwmod,
143         .slave  = &dm816x_l4_ls_hwmod,
144         .user   = OCP_USER_MPU,
145 };
146
147 /* L3 med -> L4 fast peripheral interface running at 250MHz */
148 static struct omap_hwmod_ocp_if dm816x_alwon_l3_slow__l4_hs = {
149         .master = &dm816x_alwon_l3_med_hwmod,
150         .slave  = &dm816x_l4_hs_hwmod,
151         .user   = OCP_USER_MPU,
152 };
153
154 /* MPU */
155 static struct omap_hwmod dm816x_mpu_hwmod = {
156         .name           = "mpu",
157         .clkdm_name     = "alwon_mpu_clkdm",
158         .class          = &mpu_hwmod_class,
159         .flags          = HWMOD_INIT_NO_IDLE,
160         .main_clk       = "mpu_ck",
161         .prcm           = {
162                 .omap4 = {
163                         .clkctrl_offs = DM816X_CM_ALWON_MPU_CLKCTRL,
164                         .modulemode = MODULEMODE_SWCTRL,
165                 },
166         },
167 };
168
169 static struct omap_hwmod_ocp_if dm816x_mpu__alwon_l3_slow = {
170         .master         = &dm816x_mpu_hwmod,
171         .slave          = &dm816x_alwon_l3_slow_hwmod,
172         .user           = OCP_USER_MPU,
173 };
174
175 /* L3 med peripheral interface running at 250MHz */
176 static struct omap_hwmod_ocp_if dm816x_mpu__alwon_l3_med = {
177         .master = &dm816x_mpu_hwmod,
178         .slave  = &dm816x_alwon_l3_med_hwmod,
179         .user   = OCP_USER_MPU,
180 };
181
182 /* UART common */
183 static struct omap_hwmod_class_sysconfig uart_sysc = {
184         .rev_offs       = 0x50,
185         .sysc_offs      = 0x54,
186         .syss_offs      = 0x58,
187         .sysc_flags     = SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
188                                 SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
189                                 SYSS_HAS_RESET_STATUS,
190         .idlemodes      = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
191                                 MSTANDBY_SMART_WKUP,
192         .sysc_fields    = &omap_hwmod_sysc_type1,
193 };
194
195 static struct omap_hwmod_class uart_class = {
196         .name = "uart",
197         .sysc = &uart_sysc,
198 };
199
200 static struct omap_hwmod dm816x_uart1_hwmod = {
201         .name           = "uart1",
202         .clkdm_name     = "alwon_l3s_clkdm",
203         .main_clk       = "sysclk10_ck",
204         .prcm           = {
205                 .omap4 = {
206                         .clkctrl_offs = DM816X_CM_ALWON_UART_0_CLKCTRL,
207                         .modulemode = MODULEMODE_SWCTRL,
208                 },
209         },
210         .class          = &uart_class,
211         .flags          = DEBUG_TI81XXUART1_FLAGS,
212 };
213
214 static struct omap_hwmod_ocp_if dm816x_l4_ls__uart1 = {
215         .master         = &dm816x_l4_ls_hwmod,
216         .slave          = &dm816x_uart1_hwmod,
217         .clk            = "sysclk6_ck",
218         .user           = OCP_USER_MPU,
219 };
220
221 static struct omap_hwmod dm816x_uart2_hwmod = {
222         .name           = "uart2",
223         .clkdm_name     = "alwon_l3s_clkdm",
224         .main_clk       = "sysclk10_ck",
225         .prcm           = {
226                 .omap4 = {
227                         .clkctrl_offs = DM816X_CM_ALWON_UART_1_CLKCTRL,
228                         .modulemode = MODULEMODE_SWCTRL,
229                 },
230         },
231         .class          = &uart_class,
232         .flags          = DEBUG_TI81XXUART2_FLAGS,
233 };
234
235 static struct omap_hwmod_ocp_if dm816x_l4_ls__uart2 = {
236         .master         = &dm816x_l4_ls_hwmod,
237         .slave          = &dm816x_uart2_hwmod,
238         .clk            = "sysclk6_ck",
239         .user           = OCP_USER_MPU,
240 };
241
242 static struct omap_hwmod dm816x_uart3_hwmod = {
243         .name           = "uart3",
244         .clkdm_name     = "alwon_l3s_clkdm",
245         .main_clk       = "sysclk10_ck",
246         .prcm           = {
247                 .omap4 = {
248                         .clkctrl_offs = DM816X_CM_ALWON_UART_2_CLKCTRL,
249                         .modulemode = MODULEMODE_SWCTRL,
250                 },
251         },
252         .class          = &uart_class,
253         .flags          = DEBUG_TI81XXUART3_FLAGS,
254 };
255
256 static struct omap_hwmod_ocp_if dm816x_l4_ls__uart3 = {
257         .master         = &dm816x_l4_ls_hwmod,
258         .slave          = &dm816x_uart3_hwmod,
259         .clk            = "sysclk6_ck",
260         .user           = OCP_USER_MPU,
261 };
262
263 static struct omap_hwmod_class_sysconfig wd_timer_sysc = {
264         .rev_offs       = 0x0,
265         .sysc_offs      = 0x10,
266         .syss_offs      = 0x14,
267         .sysc_flags     = SYSC_HAS_EMUFREE | SYSC_HAS_SOFTRESET |
268                                 SYSS_HAS_RESET_STATUS,
269         .sysc_fields    = &omap_hwmod_sysc_type1,
270 };
271
272 static struct omap_hwmod_class wd_timer_class = {
273         .name           = "wd_timer",
274         .sysc           = &wd_timer_sysc,
275         .pre_shutdown   = &omap2_wd_timer_disable,
276         .reset          = &omap2_wd_timer_reset,
277 };
278
279 static struct omap_hwmod dm816x_wd_timer_hwmod = {
280         .name           = "wd_timer",
281         .clkdm_name     = "alwon_l3s_clkdm",
282         .main_clk       = "sysclk18_ck",
283         .flags          = HWMOD_NO_IDLEST,
284         .prcm           = {
285                 .omap4 = {
286                         .clkctrl_offs = DM816X_CM_ALWON_WDTIMER_CLKCTRL,
287                         .modulemode = MODULEMODE_SWCTRL,
288                 },
289         },
290         .class          = &wd_timer_class,
291 };
292
293 static struct omap_hwmod_ocp_if dm816x_l4_ls__wd_timer1 = {
294         .master         = &dm816x_l4_ls_hwmod,
295         .slave          = &dm816x_wd_timer_hwmod,
296         .clk            = "sysclk6_ck",
297         .user           = OCP_USER_MPU,
298 };
299
300 /* I2C common */
301 static struct omap_hwmod_class_sysconfig i2c_sysc = {
302         .rev_offs       = 0x0,
303         .sysc_offs      = 0x10,
304         .syss_offs      = 0x90,
305         .sysc_flags     = SYSC_HAS_SIDLEMODE |
306                                 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
307                                 SYSC_HAS_AUTOIDLE,
308         .idlemodes      = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART,
309         .sysc_fields    = &omap_hwmod_sysc_type1,
310 };
311
312 static struct omap_hwmod_class i2c_class = {
313         .name = "i2c",
314         .sysc = &i2c_sysc,
315 };
316
317 static struct omap_hwmod dm81xx_i2c1_hwmod = {
318         .name           = "i2c1",
319         .clkdm_name     = "alwon_l3s_clkdm",
320         .main_clk       = "sysclk10_ck",
321         .prcm           = {
322                 .omap4 = {
323                         .clkctrl_offs = DM816X_CM_ALWON_I2C_0_CLKCTRL,
324                         .modulemode = MODULEMODE_SWCTRL,
325                 },
326         },
327         .class          = &i2c_class,
328 };
329
330 static struct omap_hwmod_ocp_if dm816x_l4_ls__i2c1 = {
331         .master         = &dm816x_l4_ls_hwmod,
332         .slave          = &dm81xx_i2c1_hwmod,
333         .clk            = "sysclk6_ck",
334         .user           = OCP_USER_MPU,
335 };
336
337 static struct omap_hwmod dm816x_i2c2_hwmod = {
338         .name           = "i2c2",
339         .clkdm_name     = "alwon_l3s_clkdm",
340         .main_clk       = "sysclk10_ck",
341         .prcm           = {
342                 .omap4 = {
343                         .clkctrl_offs = DM816X_CM_ALWON_I2C_1_CLKCTRL,
344                         .modulemode = MODULEMODE_SWCTRL,
345                 },
346         },
347         .class          = &i2c_class,
348 };
349
350 static struct omap_hwmod_class_sysconfig dm81xx_elm_sysc = {
351         .rev_offs       = 0x0000,
352         .sysc_offs      = 0x0010,
353         .syss_offs      = 0x0014,
354         .sysc_flags     = SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
355                                 SYSC_HAS_SOFTRESET |
356                                 SYSS_HAS_RESET_STATUS,
357         .idlemodes      = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART,
358         .sysc_fields    = &omap_hwmod_sysc_type1,
359 };
360
361 static struct omap_hwmod_ocp_if dm816x_l4_ls__i2c2 = {
362         .master         = &dm816x_l4_ls_hwmod,
363         .slave          = &dm816x_i2c2_hwmod,
364         .clk            = "sysclk6_ck",
365         .user           = OCP_USER_MPU,
366 };
367
368 static struct omap_hwmod_class dm81xx_elm_hwmod_class = {
369         .name = "elm",
370         .sysc = &dm81xx_elm_sysc,
371 };
372
373 static struct omap_hwmod dm81xx_elm_hwmod = {
374         .name           = "elm",
375         .clkdm_name     = "alwon_l3s_clkdm",
376         .class          = &dm81xx_elm_hwmod_class,
377         .main_clk       = "sysclk6_ck",
378 };
379
380 static struct omap_hwmod_ocp_if dm81xx_l4_ls__elm = {
381         .master         = &dm816x_l4_ls_hwmod,
382         .slave          = &dm81xx_elm_hwmod,
383         .user           = OCP_USER_MPU,
384 };
385
386 static struct omap_hwmod_class_sysconfig dm81xx_gpio_sysc = {
387         .rev_offs       = 0x0000,
388         .sysc_offs      = 0x0010,
389         .syss_offs      = 0x0114,
390         .sysc_flags     = SYSC_HAS_AUTOIDLE | SYSC_HAS_ENAWAKEUP |
391                                 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
392                                 SYSS_HAS_RESET_STATUS,
393         .idlemodes      = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
394                                 SIDLE_SMART_WKUP,
395         .sysc_fields    = &omap_hwmod_sysc_type1,
396 };
397
398 static struct omap_hwmod_class dm81xx_gpio_hwmod_class = {
399         .name   = "gpio",
400         .sysc   = &dm81xx_gpio_sysc,
401         .rev    = 2,
402 };
403
404 static struct omap_gpio_dev_attr gpio_dev_attr = {
405         .bank_width     = 32,
406         .dbck_flag      = true,
407 };
408
409 static struct omap_hwmod_opt_clk gpio1_opt_clks[] = {
410         { .role = "dbclk", .clk = "sysclk18_ck" },
411 };
412
413 static struct omap_hwmod dm81xx_gpio1_hwmod = {
414         .name           = "gpio1",
415         .clkdm_name     = "alwon_l3s_clkdm",
416         .class          = &dm81xx_gpio_hwmod_class,
417         .main_clk       = "sysclk6_ck",
418         .prcm = {
419                 .omap4 = {
420                         .clkctrl_offs = DM816X_CM_ALWON_GPIO_0_CLKCTRL,
421                         .modulemode = MODULEMODE_SWCTRL,
422                 },
423         },
424         .opt_clks       = gpio1_opt_clks,
425         .opt_clks_cnt   = ARRAY_SIZE(gpio1_opt_clks),
426         .dev_attr       = &gpio_dev_attr,
427 };
428
429 static struct omap_hwmod_ocp_if dm81xx_l4_ls__gpio1 = {
430         .master         = &dm816x_l4_ls_hwmod,
431         .slave          = &dm81xx_gpio1_hwmod,
432         .user           = OCP_USER_MPU,
433 };
434
435 static struct omap_hwmod_opt_clk gpio2_opt_clks[] = {
436         { .role = "dbclk", .clk = "sysclk18_ck" },
437 };
438
439 static struct omap_hwmod dm81xx_gpio2_hwmod = {
440         .name           = "gpio2",
441         .clkdm_name     = "alwon_l3s_clkdm",
442         .class          = &dm81xx_gpio_hwmod_class,
443         .main_clk       = "sysclk6_ck",
444         .prcm = {
445                 .omap4 = {
446                         .clkctrl_offs = DM816X_CM_ALWON_GPIO_1_CLKCTRL,
447                         .modulemode = MODULEMODE_SWCTRL,
448                 },
449         },
450         .opt_clks       = gpio2_opt_clks,
451         .opt_clks_cnt   = ARRAY_SIZE(gpio2_opt_clks),
452         .dev_attr       = &gpio_dev_attr,
453 };
454
455 static struct omap_hwmod_ocp_if dm81xx_l4_ls__gpio2 = {
456         .master         = &dm816x_l4_ls_hwmod,
457         .slave          = &dm81xx_gpio2_hwmod,
458         .user           = OCP_USER_MPU,
459 };
460
461 static struct omap_hwmod_class_sysconfig dm81xx_gpmc_sysc = {
462         .rev_offs       = 0x0,
463         .sysc_offs      = 0x10,
464         .syss_offs      = 0x14,
465         .sysc_flags     = SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
466                                 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS,
467         .idlemodes      = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART,
468         .sysc_fields    = &omap_hwmod_sysc_type1,
469 };
470
471 static struct omap_hwmod_class dm81xx_gpmc_hwmod_class = {
472         .name   = "gpmc",
473         .sysc   = &dm81xx_gpmc_sysc,
474 };
475
476 static struct omap_hwmod dm81xx_gpmc_hwmod = {
477         .name           = "gpmc",
478         .clkdm_name     = "alwon_l3s_clkdm",
479         .class          = &dm81xx_gpmc_hwmod_class,
480         .main_clk       = "sysclk6_ck",
481         /* Skip reset for CONFIG_OMAP_GPMC_DEBUG for bootloader timings */
482         .flags          = DEBUG_OMAP_GPMC_HWMOD_FLAGS,
483         .prcm = {
484                 .omap4 = {
485                         .clkctrl_offs = DM816X_CM_ALWON_GPMC_CLKCTRL,
486                         .modulemode = MODULEMODE_SWCTRL,
487                 },
488         },
489 };
490
491 struct omap_hwmod_ocp_if dm81xx_alwon_l3_slow__gpmc = {
492         .master         = &dm816x_alwon_l3_slow_hwmod,
493         .slave          = &dm81xx_gpmc_hwmod,
494         .user           = OCP_USER_MPU,
495 };
496
497 static struct omap_hwmod_class_sysconfig dm81xx_usbhsotg_sysc = {
498         .rev_offs       = 0x0,
499         .sysc_offs      = 0x10,
500         .sysc_flags     = SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE |
501                                 SYSC_HAS_SOFTRESET,
502         .idlemodes      = SIDLE_SMART | MSTANDBY_FORCE | MSTANDBY_SMART,
503         .sysc_fields    = &omap_hwmod_sysc_type2,
504 };
505
506 static struct omap_hwmod_class dm81xx_usbotg_class = {
507         .name = "usbotg",
508         .sysc = &dm81xx_usbhsotg_sysc,
509 };
510
511 static struct omap_hwmod dm81xx_usbss_hwmod = {
512         .name           = "usb_otg_hs",
513         .clkdm_name     = "default_l3_slow_clkdm",
514         .main_clk       = "sysclk6_ck",
515         .prcm           = {
516                 .omap4 = {
517                         .clkctrl_offs = DM816X_CM_DEFAULT_USB_CLKCTRL,
518                         .modulemode = MODULEMODE_SWCTRL,
519                 },
520         },
521         .class          = &dm81xx_usbotg_class,
522 };
523
524 static struct omap_hwmod_ocp_if dm81xx_default_l3_slow__usbss = {
525         .master         = &dm816x_default_l3_slow_hwmod,
526         .slave          = &dm81xx_usbss_hwmod,
527         .clk            = "sysclk6_ck",
528         .user           = OCP_USER_MPU,
529 };
530
531 static struct omap_hwmod_class_sysconfig dm816x_timer_sysc = {
532         .rev_offs       = 0x0000,
533         .sysc_offs      = 0x0010,
534         .syss_offs      = 0x0014,
535         .sysc_flags     = SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET,
536         .idlemodes      = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
537                                 SIDLE_SMART_WKUP,
538         .sysc_fields    = &omap_hwmod_sysc_type2,
539 };
540
541 static struct omap_hwmod_class dm816x_timer_hwmod_class = {
542         .name = "timer",
543         .sysc = &dm816x_timer_sysc,
544 };
545
546 static struct omap_timer_capability_dev_attr capability_alwon_dev_attr = {
547         .timer_capability       = OMAP_TIMER_ALWON,
548 };
549
550 static struct omap_hwmod dm816x_timer1_hwmod = {
551         .name           = "timer1",
552         .clkdm_name     = "alwon_l3s_clkdm",
553         .main_clk       = "timer1_fck",
554         .prcm           = {
555                 .omap4 = {
556                         .clkctrl_offs = DM816X_CM_ALWON_TIMER_1_CLKCTRL,
557                         .modulemode = MODULEMODE_SWCTRL,
558                 },
559         },
560         .dev_attr       = &capability_alwon_dev_attr,
561         .class          = &dm816x_timer_hwmod_class,
562 };
563
564 static struct omap_hwmod_ocp_if dm816x_l4_ls__timer1 = {
565         .master         = &dm816x_l4_ls_hwmod,
566         .slave          = &dm816x_timer1_hwmod,
567         .clk            = "sysclk6_ck",
568         .user           = OCP_USER_MPU,
569 };
570
571 static struct omap_hwmod dm816x_timer2_hwmod = {
572         .name           = "timer2",
573         .clkdm_name     = "alwon_l3s_clkdm",
574         .main_clk       = "timer2_fck",
575         .prcm           = {
576                 .omap4 = {
577                         .clkctrl_offs = DM816X_CM_ALWON_TIMER_2_CLKCTRL,
578                         .modulemode = MODULEMODE_SWCTRL,
579                 },
580         },
581         .dev_attr       = &capability_alwon_dev_attr,
582         .class          = &dm816x_timer_hwmod_class,
583 };
584
585 static struct omap_hwmod_ocp_if dm816x_l4_ls__timer2 = {
586         .master         = &dm816x_l4_ls_hwmod,
587         .slave          = &dm816x_timer2_hwmod,
588         .clk            = "sysclk6_ck",
589         .user           = OCP_USER_MPU,
590 };
591
592 static struct omap_hwmod dm816x_timer3_hwmod = {
593         .name           = "timer3",
594         .clkdm_name     = "alwon_l3s_clkdm",
595         .main_clk       = "timer3_fck",
596         .prcm           = {
597                 .omap4 = {
598                         .clkctrl_offs = DM816X_CM_ALWON_TIMER_3_CLKCTRL,
599                         .modulemode = MODULEMODE_SWCTRL,
600                 },
601         },
602         .dev_attr       = &capability_alwon_dev_attr,
603         .class          = &dm816x_timer_hwmod_class,
604 };
605
606 static struct omap_hwmod_ocp_if dm816x_l4_ls__timer3 = {
607         .master         = &dm816x_l4_ls_hwmod,
608         .slave          = &dm816x_timer3_hwmod,
609         .clk            = "sysclk6_ck",
610         .user           = OCP_USER_MPU,
611 };
612
613 static struct omap_hwmod dm816x_timer4_hwmod = {
614         .name           = "timer4",
615         .clkdm_name     = "alwon_l3s_clkdm",
616         .main_clk       = "timer4_fck",
617         .prcm           = {
618                 .omap4 = {
619                         .clkctrl_offs = DM816X_CM_ALWON_TIMER_4_CLKCTRL,
620                         .modulemode = MODULEMODE_SWCTRL,
621                 },
622         },
623         .dev_attr       = &capability_alwon_dev_attr,
624         .class          = &dm816x_timer_hwmod_class,
625 };
626
627 static struct omap_hwmod_ocp_if dm816x_l4_ls__timer4 = {
628         .master         = &dm816x_l4_ls_hwmod,
629         .slave          = &dm816x_timer4_hwmod,
630         .clk            = "sysclk6_ck",
631         .user           = OCP_USER_MPU,
632 };
633
634 static struct omap_hwmod dm816x_timer5_hwmod = {
635         .name           = "timer5",
636         .clkdm_name     = "alwon_l3s_clkdm",
637         .main_clk       = "timer5_fck",
638         .prcm           = {
639                 .omap4 = {
640                         .clkctrl_offs = DM816X_CM_ALWON_TIMER_5_CLKCTRL,
641                         .modulemode = MODULEMODE_SWCTRL,
642                 },
643         },
644         .dev_attr       = &capability_alwon_dev_attr,
645         .class          = &dm816x_timer_hwmod_class,
646 };
647
648 static struct omap_hwmod_ocp_if dm816x_l4_ls__timer5 = {
649         .master         = &dm816x_l4_ls_hwmod,
650         .slave          = &dm816x_timer5_hwmod,
651         .clk            = "sysclk6_ck",
652         .user           = OCP_USER_MPU,
653 };
654
655 static struct omap_hwmod dm816x_timer6_hwmod = {
656         .name           = "timer6",
657         .clkdm_name     = "alwon_l3s_clkdm",
658         .main_clk       = "timer6_fck",
659         .prcm           = {
660                 .omap4 = {
661                         .clkctrl_offs = DM816X_CM_ALWON_TIMER_6_CLKCTRL,
662                         .modulemode = MODULEMODE_SWCTRL,
663                 },
664         },
665         .dev_attr       = &capability_alwon_dev_attr,
666         .class          = &dm816x_timer_hwmod_class,
667 };
668
669 static struct omap_hwmod_ocp_if dm816x_l4_ls__timer6 = {
670         .master         = &dm816x_l4_ls_hwmod,
671         .slave          = &dm816x_timer6_hwmod,
672         .clk            = "sysclk6_ck",
673         .user           = OCP_USER_MPU,
674 };
675
676 static struct omap_hwmod dm816x_timer7_hwmod = {
677         .name           = "timer7",
678         .clkdm_name     = "alwon_l3s_clkdm",
679         .main_clk       = "timer7_fck",
680         .prcm           = {
681                 .omap4 = {
682                         .clkctrl_offs = DM816X_CM_ALWON_TIMER_7_CLKCTRL,
683                         .modulemode = MODULEMODE_SWCTRL,
684                 },
685         },
686         .dev_attr       = &capability_alwon_dev_attr,
687         .class          = &dm816x_timer_hwmod_class,
688 };
689
690 static struct omap_hwmod_ocp_if dm816x_l4_ls__timer7 = {
691         .master         = &dm816x_l4_ls_hwmod,
692         .slave          = &dm816x_timer7_hwmod,
693         .clk            = "sysclk6_ck",
694         .user           = OCP_USER_MPU,
695 };
696
697 /* EMAC Ethernet */
698 static struct omap_hwmod_class_sysconfig dm816x_emac_sysc = {
699         .rev_offs       = 0x0,
700         .sysc_offs      = 0x4,
701         .sysc_flags     = SYSC_HAS_SOFTRESET,
702         .sysc_fields    = &omap_hwmod_sysc_type2,
703 };
704
705 static struct omap_hwmod_class dm816x_emac_hwmod_class = {
706         .name           = "emac",
707         .sysc           = &dm816x_emac_sysc,
708 };
709
710 /*
711  * On dm816x the MDIO is within EMAC0. As the MDIO driver is a separate
712  * driver probed before EMAC0, we let MDIO do the clock idling.
713  */
714 static struct omap_hwmod dm816x_emac0_hwmod = {
715         .name           = "emac0",
716         .clkdm_name     = "alwon_ethernet_clkdm",
717         .class          = &dm816x_emac_hwmod_class,
718 };
719
720 static struct omap_hwmod_ocp_if dm816x_l4_hs__emac0 = {
721         .master         = &dm816x_l4_hs_hwmod,
722         .slave          = &dm816x_emac0_hwmod,
723         .clk            = "sysclk5_ck",
724         .user           = OCP_USER_MPU,
725 };
726
727 static struct omap_hwmod_class dm816x_mdio_hwmod_class = {
728         .name           = "davinci_mdio",
729         .sysc           = &dm816x_emac_sysc,
730 };
731
732 struct omap_hwmod dm816x_emac0_mdio_hwmod = {
733         .name           = "davinci_mdio",
734         .class          = &dm816x_mdio_hwmod_class,
735         .clkdm_name     = "alwon_ethernet_clkdm",
736         .main_clk       = "sysclk24_ck",
737         .flags          = HWMOD_NO_IDLEST,
738         /*
739          * REVISIT: This should be moved to the emac0_hwmod
740          * once we have a better way to handle device slaves.
741          */
742         .prcm           = {
743                 .omap4 = {
744                         .clkctrl_offs = DM816X_CM_ALWON_ETHERNET_0_CLKCTRL,
745                         .modulemode = MODULEMODE_SWCTRL,
746                 },
747         },
748 };
749
750 struct omap_hwmod_ocp_if dm816x_emac0__mdio = {
751         .master         = &dm816x_l4_hs_hwmod,
752         .slave          = &dm816x_emac0_mdio_hwmod,
753         .user           = OCP_USER_MPU,
754 };
755
756 static struct omap_hwmod dm816x_emac1_hwmod = {
757         .name           = "emac1",
758         .clkdm_name     = "alwon_ethernet_clkdm",
759         .main_clk       = "sysclk24_ck",
760         .flags          = HWMOD_NO_IDLEST,
761         .prcm           = {
762                 .omap4 = {
763                         .clkctrl_offs = DM816X_CM_ALWON_ETHERNET_1_CLKCTRL,
764                         .modulemode = MODULEMODE_SWCTRL,
765                 },
766         },
767         .class          = &dm816x_emac_hwmod_class,
768 };
769
770 static struct omap_hwmod_ocp_if dm816x_l4_hs__emac1 = {
771         .master         = &dm816x_l4_hs_hwmod,
772         .slave          = &dm816x_emac1_hwmod,
773         .clk            = "sysclk5_ck",
774         .user           = OCP_USER_MPU,
775 };
776
777 static struct omap_hwmod_class_sysconfig dm816x_mmc_sysc = {
778         .rev_offs       = 0x0,
779         .sysc_offs      = 0x110,
780         .syss_offs      = 0x114,
781         .sysc_flags     = SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
782                                 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
783                                 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS,
784         .idlemodes      = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART,
785         .sysc_fields    = &omap_hwmod_sysc_type1,
786 };
787
788 static struct omap_hwmod_class dm816x_mmc_class = {
789         .name = "mmc",
790         .sysc = &dm816x_mmc_sysc,
791 };
792
793 static struct omap_hwmod_opt_clk dm816x_mmc1_opt_clks[] = {
794         { .role = "dbck", .clk = "sysclk18_ck", },
795 };
796
797 static struct omap_hsmmc_dev_attr mmc1_dev_attr = {
798         .flags = OMAP_HSMMC_SUPPORTS_DUAL_VOLT,
799 };
800
801 static struct omap_hwmod dm816x_mmc1_hwmod = {
802         .name           = "mmc1",
803         .clkdm_name     = "alwon_l3s_clkdm",
804         .opt_clks       = dm816x_mmc1_opt_clks,
805         .opt_clks_cnt   = ARRAY_SIZE(dm816x_mmc1_opt_clks),
806         .main_clk       = "sysclk10_ck",
807         .prcm           = {
808                 .omap4 = {
809                         .clkctrl_offs = DM816X_CM_ALWON_SDIO_CLKCTRL,
810                         .modulemode = MODULEMODE_SWCTRL,
811                 },
812         },
813         .dev_attr       = &mmc1_dev_attr,
814         .class          = &dm816x_mmc_class,
815 };
816
817 static struct omap_hwmod_ocp_if dm816x_l4_ls__mmc1 = {
818         .master         = &dm816x_l4_ls_hwmod,
819         .slave          = &dm816x_mmc1_hwmod,
820         .clk            = "sysclk6_ck",
821         .user           = OCP_USER_MPU,
822         .flags          = OMAP_FIREWALL_L4
823 };
824
825 static struct omap_hwmod_class_sysconfig dm816x_mcspi_sysc = {
826         .rev_offs       = 0x0,
827         .sysc_offs      = 0x110,
828         .syss_offs      = 0x114,
829         .sysc_flags     = SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
830                                 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
831                                 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS,
832         .idlemodes      = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART,
833         .sysc_fields    = &omap_hwmod_sysc_type1,
834 };
835
836 static struct omap_hwmod_class dm816x_mcspi_class = {
837         .name = "mcspi",
838         .sysc = &dm816x_mcspi_sysc,
839         .rev = OMAP3_MCSPI_REV,
840 };
841
842 static struct omap2_mcspi_dev_attr dm816x_mcspi1_dev_attr = {
843         .num_chipselect = 4,
844 };
845
846 static struct omap_hwmod dm816x_mcspi1_hwmod = {
847         .name           = "mcspi1",
848         .clkdm_name     = "alwon_l3s_clkdm",
849         .main_clk       = "sysclk10_ck",
850         .prcm           = {
851                 .omap4 = {
852                         .clkctrl_offs = DM816X_CM_ALWON_SPI_CLKCTRL,
853                         .modulemode = MODULEMODE_SWCTRL,
854                 },
855         },
856         .class          = &dm816x_mcspi_class,
857         .dev_attr       = &dm816x_mcspi1_dev_attr,
858 };
859
860 static struct omap_hwmod_ocp_if dm816x_l4_ls__mcspi1 = {
861         .master         = &dm816x_l4_ls_hwmod,
862         .slave          = &dm816x_mcspi1_hwmod,
863         .clk            = "sysclk6_ck",
864         .user           = OCP_USER_MPU,
865 };
866
867 static struct omap_hwmod_class_sysconfig dm816x_mailbox_sysc = {
868         .rev_offs       = 0x000,
869         .sysc_offs      = 0x010,
870         .syss_offs      = 0x014,
871         .sysc_flags     = SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
872                                 SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE,
873         .idlemodes      = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART,
874         .sysc_fields    = &omap_hwmod_sysc_type1,
875 };
876
877 static struct omap_hwmod_class dm816x_mailbox_hwmod_class = {
878         .name = "mailbox",
879         .sysc = &dm816x_mailbox_sysc,
880 };
881
882 static struct omap_hwmod dm816x_mailbox_hwmod = {
883         .name           = "mailbox",
884         .clkdm_name     = "alwon_l3s_clkdm",
885         .class          = &dm816x_mailbox_hwmod_class,
886         .main_clk       = "sysclk6_ck",
887         .prcm           = {
888                 .omap4 = {
889                         .clkctrl_offs = DM816X_CM_ALWON_MAILBOX_CLKCTRL,
890                         .modulemode = MODULEMODE_SWCTRL,
891                 },
892         },
893 };
894
895 static struct omap_hwmod_ocp_if dm816x_l4_ls__mailbox = {
896         .master         = &dm816x_l4_ls_hwmod,
897         .slave          = &dm816x_mailbox_hwmod,
898         .user           = OCP_USER_MPU,
899 };
900
901 static struct omap_hwmod_class dm816x_tpcc_hwmod_class = {
902         .name           = "tpcc",
903 };
904
905 struct omap_hwmod dm816x_tpcc_hwmod = {
906         .name           = "tpcc",
907         .class          = &dm816x_tpcc_hwmod_class,
908         .clkdm_name     = "alwon_l3s_clkdm",
909         .main_clk       = "sysclk4_ck",
910         .prcm           = {
911                 .omap4  = {
912                         .clkctrl_offs   = DM816X_CM_ALWON_TPCC_CLKCTRL,
913                         .modulemode     = MODULEMODE_SWCTRL,
914                 },
915         },
916 };
917
918 struct omap_hwmod_ocp_if dm816x_alwon_l3_fast__tpcc = {
919         .master         = &dm816x_alwon_l3_fast_hwmod,
920         .slave          = &dm816x_tpcc_hwmod,
921         .clk            = "sysclk4_ck",
922         .user           = OCP_USER_MPU,
923 };
924
925 static struct omap_hwmod_addr_space dm816x_tptc0_addr_space[] = {
926         {
927                 .pa_start       = 0x49800000,
928                 .pa_end         = 0x49800000 + SZ_8K - 1,
929                 .flags          = ADDR_TYPE_RT,
930         },
931         { },
932 };
933
934 static struct omap_hwmod_class dm816x_tptc0_hwmod_class = {
935         .name           = "tptc0",
936 };
937
938 struct omap_hwmod dm816x_tptc0_hwmod = {
939         .name           = "tptc0",
940         .class          = &dm816x_tptc0_hwmod_class,
941         .clkdm_name     = "alwon_l3s_clkdm",
942         .main_clk       = "sysclk4_ck",
943         .prcm           = {
944                 .omap4  = {
945                         .clkctrl_offs   = DM816X_CM_ALWON_TPTC0_CLKCTRL,
946                         .modulemode     = MODULEMODE_SWCTRL,
947                 },
948         },
949 };
950
951 struct omap_hwmod_ocp_if dm816x_alwon_l3_fast__tptc0 = {
952         .master         = &dm816x_alwon_l3_fast_hwmod,
953         .slave          = &dm816x_tptc0_hwmod,
954         .clk            = "sysclk4_ck",
955         .addr           = dm816x_tptc0_addr_space,
956         .user           = OCP_USER_MPU,
957 };
958
959 struct omap_hwmod_ocp_if dm816x_tptc0__alwon_l3_fast = {
960         .master         = &dm816x_tptc0_hwmod,
961         .slave          = &dm816x_alwon_l3_fast_hwmod,
962         .clk            = "sysclk4_ck",
963         .addr           = dm816x_tptc0_addr_space,
964         .user           = OCP_USER_MPU,
965 };
966
967 static struct omap_hwmod_addr_space dm816x_tptc1_addr_space[] = {
968         {
969                 .pa_start       = 0x49900000,
970                 .pa_end         = 0x49900000 + SZ_8K - 1,
971                 .flags          = ADDR_TYPE_RT,
972         },
973         { },
974 };
975
976 static struct omap_hwmod_class dm816x_tptc1_hwmod_class = {
977         .name           = "tptc1",
978 };
979
980 struct omap_hwmod dm816x_tptc1_hwmod = {
981         .name           = "tptc1",
982         .class          = &dm816x_tptc1_hwmod_class,
983         .clkdm_name     = "alwon_l3s_clkdm",
984         .main_clk       = "sysclk4_ck",
985         .prcm           = {
986                 .omap4  = {
987                         .clkctrl_offs   = DM816X_CM_ALWON_TPTC1_CLKCTRL,
988                         .modulemode     = MODULEMODE_SWCTRL,
989                 },
990         },
991 };
992
993 struct omap_hwmod_ocp_if dm816x_alwon_l3_fast__tptc1 = {
994         .master         = &dm816x_alwon_l3_fast_hwmod,
995         .slave          = &dm816x_tptc1_hwmod,
996         .clk            = "sysclk4_ck",
997         .addr           = dm816x_tptc1_addr_space,
998         .user           = OCP_USER_MPU,
999 };
1000
1001 struct omap_hwmod_ocp_if dm816x_tptc1__alwon_l3_fast = {
1002         .master         = &dm816x_tptc1_hwmod,
1003         .slave          = &dm816x_alwon_l3_fast_hwmod,
1004         .clk            = "sysclk4_ck",
1005         .addr           = dm816x_tptc1_addr_space,
1006         .user           = OCP_USER_MPU,
1007 };
1008
1009 static struct omap_hwmod_addr_space dm816x_tptc2_addr_space[] = {
1010         {
1011                 .pa_start       = 0x49a00000,
1012                 .pa_end         = 0x49a00000 + SZ_8K - 1,
1013                 .flags          = ADDR_TYPE_RT,
1014         },
1015         { },
1016 };
1017
1018 static struct omap_hwmod_class dm816x_tptc2_hwmod_class = {
1019         .name           = "tptc2",
1020 };
1021
1022 struct omap_hwmod dm816x_tptc2_hwmod = {
1023         .name           = "tptc2",
1024         .class          = &dm816x_tptc2_hwmod_class,
1025         .clkdm_name     = "alwon_l3s_clkdm",
1026         .main_clk       = "sysclk4_ck",
1027         .prcm           = {
1028                 .omap4  = {
1029                         .clkctrl_offs   = DM816X_CM_ALWON_TPTC2_CLKCTRL,
1030                         .modulemode     = MODULEMODE_SWCTRL,
1031                 },
1032         },
1033 };
1034
1035 struct omap_hwmod_ocp_if dm816x_alwon_l3_fast__tptc2 = {
1036         .master         = &dm816x_alwon_l3_fast_hwmod,
1037         .slave          = &dm816x_tptc2_hwmod,
1038         .clk            = "sysclk4_ck",
1039         .addr           = dm816x_tptc2_addr_space,
1040         .user           = OCP_USER_MPU,
1041 };
1042
1043 struct omap_hwmod_ocp_if dm816x_tptc2__alwon_l3_fast = {
1044         .master         = &dm816x_tptc2_hwmod,
1045         .slave          = &dm816x_alwon_l3_fast_hwmod,
1046         .clk            = "sysclk4_ck",
1047         .addr           = dm816x_tptc2_addr_space,
1048         .user           = OCP_USER_MPU,
1049 };
1050
1051 static struct omap_hwmod_addr_space dm816x_tptc3_addr_space[] = {
1052         {
1053                 .pa_start       = 0x49b00000,
1054                 .pa_end         = 0x49b00000 + SZ_8K - 1,
1055                 .flags          = ADDR_TYPE_RT,
1056         },
1057         { },
1058 };
1059
1060 static struct omap_hwmod_class dm816x_tptc3_hwmod_class = {
1061         .name           = "tptc3",
1062 };
1063
1064 struct omap_hwmod dm816x_tptc3_hwmod = {
1065         .name           = "tptc3",
1066         .class          = &dm816x_tptc3_hwmod_class,
1067         .clkdm_name     = "alwon_l3s_clkdm",
1068         .main_clk       = "sysclk4_ck",
1069         .prcm           = {
1070                 .omap4  = {
1071                         .clkctrl_offs   = DM816X_CM_ALWON_TPTC3_CLKCTRL,
1072                         .modulemode     = MODULEMODE_SWCTRL,
1073                 },
1074         },
1075 };
1076
1077 struct omap_hwmod_ocp_if dm816x_alwon_l3_fast__tptc3 = {
1078         .master         = &dm816x_alwon_l3_fast_hwmod,
1079         .slave          = &dm816x_tptc3_hwmod,
1080         .clk            = "sysclk4_ck",
1081         .addr           = dm816x_tptc3_addr_space,
1082         .user           = OCP_USER_MPU,
1083 };
1084
1085 struct omap_hwmod_ocp_if dm816x_tptc3__alwon_l3_fast = {
1086         .master         = &dm816x_tptc3_hwmod,
1087         .slave          = &dm816x_alwon_l3_fast_hwmod,
1088         .clk            = "sysclk4_ck",
1089         .addr           = dm816x_tptc3_addr_space,
1090         .user           = OCP_USER_MPU,
1091 };
1092
1093 static struct omap_hwmod_ocp_if *dm816x_hwmod_ocp_ifs[] __initdata = {
1094         &dm816x_mpu__alwon_l3_slow,
1095         &dm816x_mpu__alwon_l3_med,
1096         &dm816x_alwon_l3_slow__l4_ls,
1097         &dm816x_alwon_l3_slow__l4_hs,
1098         &dm816x_l4_ls__uart1,
1099         &dm816x_l4_ls__uart2,
1100         &dm816x_l4_ls__uart3,
1101         &dm816x_l4_ls__wd_timer1,
1102         &dm816x_l4_ls__i2c1,
1103         &dm816x_l4_ls__i2c2,
1104         &dm81xx_l4_ls__gpio1,
1105         &dm81xx_l4_ls__gpio2,
1106         &dm81xx_l4_ls__elm,
1107         &dm816x_l4_ls__mmc1,
1108         &dm816x_l4_ls__timer1,
1109         &dm816x_l4_ls__timer2,
1110         &dm816x_l4_ls__timer3,
1111         &dm816x_l4_ls__timer4,
1112         &dm816x_l4_ls__timer5,
1113         &dm816x_l4_ls__timer6,
1114         &dm816x_l4_ls__timer7,
1115         &dm816x_l4_ls__mcspi1,
1116         &dm816x_l4_ls__mailbox,
1117         &dm816x_l4_hs__emac0,
1118         &dm816x_emac0__mdio,
1119         &dm816x_l4_hs__emac1,
1120         &dm816x_alwon_l3_fast__tpcc,
1121         &dm816x_alwon_l3_fast__tptc0,
1122         &dm816x_alwon_l3_fast__tptc1,
1123         &dm816x_alwon_l3_fast__tptc2,
1124         &dm816x_alwon_l3_fast__tptc3,
1125         &dm816x_tptc0__alwon_l3_fast,
1126         &dm816x_tptc1__alwon_l3_fast,
1127         &dm816x_tptc2__alwon_l3_fast,
1128         &dm816x_tptc3__alwon_l3_fast,
1129         &dm81xx_alwon_l3_slow__gpmc,
1130         &dm81xx_default_l3_slow__usbss,
1131         NULL,
1132 };
1133
1134 int __init ti81xx_hwmod_init(void)
1135 {
1136         omap_hwmod_init();
1137         return omap_hwmod_register_links(dm816x_hwmod_ocp_ifs);
1138 }