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