blob: 743a2a2183a07dae9ce8e09b817a7ef8cf651cbc [file] [log] [blame]
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001/*
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/*
Tony Lindgren7e1b11d2015-07-16 01:55:58 -070035 * 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.
Tony Lindgren4d38bd12015-01-26 09:26:32 -080037 */
Tony Lindgren7e1b11d2015-07-16 01:55:58 -070038#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 */
Tony Lindgren4d38bd12015-01-26 09:26:32 -080087#define DM816X_DM_ALWON_BASE 0x1400
Tony Lindgren4d38bd12015-01-26 09:26:32 -080088#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)
Tony Lindgren4d38bd12015-01-26 09:26:32 -080095#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)
Tony Lindgren4d38bd12015-01-26 09:26:32 -080098#define DM816X_CM_ALWON_ETHERNET_1_CLKCTRL (0x15d8 - DM816X_DM_ALWON_BASE)
99#define DM816X_CM_ALWON_MPU_CLKCTRL (0x15dc - DM816X_DM_ALWON_BASE)
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800100#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 */
Tony Lindgrenf53850b2015-12-22 15:40:01 -0800107#define DM81XX_CM_DEFAULT_OFFSET 0x500
108#define DM81XX_CM_DEFAULT_USB_CLKCTRL (0x558 - DM81XX_CM_DEFAULT_OFFSET)
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800109
110/* L3 Interconnect entries clocked at 125, 250 and 500MHz */
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700111static struct omap_hwmod dm81xx_alwon_l3_slow_hwmod = {
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800112 .name = "alwon_l3_slow",
113 .clkdm_name = "alwon_l3s_clkdm",
114 .class = &l3_hwmod_class,
115 .flags = HWMOD_NO_IDLEST,
116};
117
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700118static struct omap_hwmod dm81xx_default_l3_slow_hwmod = {
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800119 .name = "default_l3_slow",
120 .clkdm_name = "default_l3_slow_clkdm",
121 .class = &l3_hwmod_class,
122 .flags = HWMOD_NO_IDLEST,
123};
124
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700125static struct omap_hwmod dm81xx_alwon_l3_med_hwmod = {
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800126 .name = "l3_med",
127 .clkdm_name = "alwon_l3_med_clkdm",
128 .class = &l3_hwmod_class,
129 .flags = HWMOD_NO_IDLEST,
130};
131
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700132static struct omap_hwmod dm81xx_alwon_l3_fast_hwmod = {
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800133 .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 */
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700143static struct omap_hwmod dm81xx_l4_ls_hwmod = {
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800144 .name = "l4_ls",
145 .clkdm_name = "alwon_l3s_clkdm",
146 .class = &l4_hwmod_class,
Neil Armstrong29f5b342015-11-13 17:29:53 +0100147 .flags = HWMOD_NO_IDLEST,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800148};
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 */
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700155static struct omap_hwmod dm81xx_l4_hs_hwmod = {
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800156 .name = "l4_hs",
157 .clkdm_name = "alwon_l3_med_clkdm",
158 .class = &l4_hwmod_class,
Neil Armstrong29f5b342015-11-13 17:29:53 +0100159 .flags = HWMOD_NO_IDLEST,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800160};
161
162/* L3 slow -> L4 ls peripheral interface running at 125MHz */
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700163static struct omap_hwmod_ocp_if dm81xx_alwon_l3_slow__l4_ls = {
164 .master = &dm81xx_alwon_l3_slow_hwmod,
165 .slave = &dm81xx_l4_ls_hwmod,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800166 .user = OCP_USER_MPU,
167};
168
169/* L3 med -> L4 fast peripheral interface running at 250MHz */
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700170static struct omap_hwmod_ocp_if dm81xx_alwon_l3_slow__l4_hs = {
171 .master = &dm81xx_alwon_l3_med_hwmod,
172 .slave = &dm81xx_l4_hs_hwmod,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800173 .user = OCP_USER_MPU,
174};
175
176/* MPU */
Tony Lindgren0f3ccb22015-07-16 01:55:58 -0700177static 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
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800204static 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,
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700220 .slave = &dm81xx_alwon_l3_slow_hwmod,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800221 .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,
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700227 .slave = &dm81xx_alwon_l3_med_hwmod,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800228 .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
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700249static struct omap_hwmod dm81xx_uart1_hwmod = {
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800250 .name = "uart1",
251 .clkdm_name = "alwon_l3s_clkdm",
252 .main_clk = "sysclk10_ck",
253 .prcm = {
254 .omap4 = {
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700255 .clkctrl_offs = DM81XX_CM_ALWON_UART_0_CLKCTRL,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800256 .modulemode = MODULEMODE_SWCTRL,
257 },
258 },
259 .class = &uart_class,
260 .flags = DEBUG_TI81XXUART1_FLAGS,
261};
262
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700263static struct omap_hwmod_ocp_if dm81xx_l4_ls__uart1 = {
264 .master = &dm81xx_l4_ls_hwmod,
265 .slave = &dm81xx_uart1_hwmod,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800266 .clk = "sysclk6_ck",
267 .user = OCP_USER_MPU,
268};
269
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700270static struct omap_hwmod dm81xx_uart2_hwmod = {
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800271 .name = "uart2",
272 .clkdm_name = "alwon_l3s_clkdm",
273 .main_clk = "sysclk10_ck",
274 .prcm = {
275 .omap4 = {
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700276 .clkctrl_offs = DM81XX_CM_ALWON_UART_1_CLKCTRL,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800277 .modulemode = MODULEMODE_SWCTRL,
278 },
279 },
280 .class = &uart_class,
281 .flags = DEBUG_TI81XXUART2_FLAGS,
282};
283
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700284static struct omap_hwmod_ocp_if dm81xx_l4_ls__uart2 = {
285 .master = &dm81xx_l4_ls_hwmod,
286 .slave = &dm81xx_uart2_hwmod,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800287 .clk = "sysclk6_ck",
288 .user = OCP_USER_MPU,
289};
290
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700291static struct omap_hwmod dm81xx_uart3_hwmod = {
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800292 .name = "uart3",
293 .clkdm_name = "alwon_l3s_clkdm",
294 .main_clk = "sysclk10_ck",
295 .prcm = {
296 .omap4 = {
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700297 .clkctrl_offs = DM81XX_CM_ALWON_UART_2_CLKCTRL,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800298 .modulemode = MODULEMODE_SWCTRL,
299 },
300 },
301 .class = &uart_class,
302 .flags = DEBUG_TI81XXUART3_FLAGS,
303};
304
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700305static struct omap_hwmod_ocp_if dm81xx_l4_ls__uart3 = {
306 .master = &dm81xx_l4_ls_hwmod,
307 .slave = &dm81xx_uart3_hwmod,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800308 .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
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700328static struct omap_hwmod dm81xx_wd_timer_hwmod = {
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800329 .name = "wd_timer",
330 .clkdm_name = "alwon_l3s_clkdm",
331 .main_clk = "sysclk18_ck",
332 .flags = HWMOD_NO_IDLEST,
333 .prcm = {
334 .omap4 = {
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700335 .clkctrl_offs = DM81XX_CM_ALWON_WDTIMER_CLKCTRL,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800336 .modulemode = MODULEMODE_SWCTRL,
337 },
338 },
339 .class = &wd_timer_class,
340};
341
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700342static struct omap_hwmod_ocp_if dm81xx_l4_ls__wd_timer1 = {
343 .master = &dm81xx_l4_ls_hwmod,
344 .slave = &dm81xx_wd_timer_hwmod,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800345 .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 = {
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700372 .clkctrl_offs = DM81XX_CM_ALWON_I2C_0_CLKCTRL,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800373 .modulemode = MODULEMODE_SWCTRL,
374 },
375 },
376 .class = &i2c_class,
377};
378
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700379static struct omap_hwmod_ocp_if dm81xx_l4_ls__i2c1 = {
380 .master = &dm81xx_l4_ls_hwmod,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800381 .slave = &dm81xx_i2c1_hwmod,
382 .clk = "sysclk6_ck",
383 .user = OCP_USER_MPU,
384};
385
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700386static struct omap_hwmod dm81xx_i2c2_hwmod = {
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800387 .name = "i2c2",
388 .clkdm_name = "alwon_l3s_clkdm",
389 .main_clk = "sysclk10_ck",
390 .prcm = {
391 .omap4 = {
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700392 .clkctrl_offs = DM81XX_CM_ALWON_I2C_1_CLKCTRL,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800393 .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
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700410static struct omap_hwmod_ocp_if dm81xx_l4_ls__i2c2 = {
411 .master = &dm81xx_l4_ls_hwmod,
412 .slave = &dm81xx_i2c2_hwmod,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800413 .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 = {
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700430 .master = &dm81xx_l4_ls_hwmod,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800431 .slave = &dm81xx_elm_hwmod,
Tony Lindgren4f5395f2016-02-26 11:03:07 -0800432 .clk = "sysclk6_ck",
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800433 .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 = {
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700470 .clkctrl_offs = DM81XX_CM_ALWON_GPIO_0_CLKCTRL,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800471 .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 = {
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700480 .master = &dm81xx_l4_ls_hwmod,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800481 .slave = &dm81xx_gpio1_hwmod,
Tony Lindgren4f5395f2016-02-26 11:03:07 -0800482 .clk = "sysclk6_ck",
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800483 .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 = {
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700497 .clkctrl_offs = DM81XX_CM_ALWON_GPIO_1_CLKCTRL,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800498 .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 = {
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700507 .master = &dm81xx_l4_ls_hwmod,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800508 .slave = &dm81xx_gpio2_hwmod,
Tony Lindgren4f5395f2016-02-26 11:03:07 -0800509 .clk = "sysclk6_ck",
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800510 .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",
Tony Lindgren63aa9452015-06-01 19:22:10 -0600533 /* Skip reset for CONFIG_OMAP_GPMC_DEBUG for bootloader timings */
534 .flags = DEBUG_OMAP_GPMC_HWMOD_FLAGS,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800535 .prcm = {
536 .omap4 = {
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700537 .clkctrl_offs = DM81XX_CM_ALWON_GPMC_CLKCTRL,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800538 .modulemode = MODULEMODE_SWCTRL,
539 },
540 },
541};
542
Sekhar Norif734a9b2015-07-11 20:29:15 +0530543static struct omap_hwmod_ocp_if dm81xx_alwon_l3_slow__gpmc = {
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700544 .master = &dm81xx_alwon_l3_slow_hwmod,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800545 .slave = &dm81xx_gpmc_hwmod,
546 .user = OCP_USER_MPU,
547};
548
Tony Lindgrenebf24412016-03-02 07:29:29 -0800549/* USB needs udelay 1 after reset at least on hp t410, use 2 for margin */
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800550static struct omap_hwmod_class_sysconfig dm81xx_usbhsotg_sysc = {
551 .rev_offs = 0x0,
552 .sysc_offs = 0x10,
Tony Lindgrenebf24412016-03-02 07:29:29 -0800553 .srst_udelay = 2,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800554 .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
Tony Lindgrenf53850b2015-12-22 15:40:01 -0800565static struct omap_hwmod dm814x_usbss_hwmod = {
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800566 .name = "usb_otg_hs",
567 .clkdm_name = "default_l3_slow_clkdm",
Tony Lindgrenf53850b2015-12-22 15:40:01 -0800568 .main_clk = "pll260dcoclkldo", /* 481c5260.adpll.dcoclkldo */
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800569 .prcm = {
570 .omap4 = {
Tony Lindgrenf53850b2015-12-22 15:40:01 -0800571 .clkctrl_offs = DM81XX_CM_DEFAULT_USB_CLKCTRL,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800572 .modulemode = MODULEMODE_SWCTRL,
573 },
574 },
575 .class = &dm81xx_usbotg_class,
576};
577
Tony Lindgrenf53850b2015-12-22 15:40:01 -0800578static struct omap_hwmod_ocp_if dm814x_default_l3_slow__usbss = {
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700579 .master = &dm81xx_default_l3_slow_hwmod,
Tony Lindgrenf53850b2015-12-22 15:40:01 -0800580 .slave = &dm814x_usbss_hwmod,
581 .clk = "sysclk6_ck",
582 .user = OCP_USER_MPU,
583};
584
585static struct omap_hwmod dm816x_usbss_hwmod = {
586 .name = "usb_otg_hs",
587 .clkdm_name = "default_l3_slow_clkdm",
588 .main_clk = "sysclk6_ck",
589 .prcm = {
590 .omap4 = {
591 .clkctrl_offs = DM81XX_CM_DEFAULT_USB_CLKCTRL,
592 .modulemode = MODULEMODE_SWCTRL,
593 },
594 },
595 .class = &dm81xx_usbotg_class,
596};
597
598static struct omap_hwmod_ocp_if dm816x_default_l3_slow__usbss = {
599 .master = &dm81xx_default_l3_slow_hwmod,
600 .slave = &dm816x_usbss_hwmod,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800601 .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
Tony Lindgren0f3ccb22015-07-16 01:55:58 -0700624static struct omap_hwmod dm814x_timer1_hwmod = {
625 .name = "timer1",
626 .clkdm_name = "alwon_l3s_clkdm",
Tony Lindgrencb4db032015-12-03 12:02:31 -0800627 .main_clk = "timer1_fck",
Tony Lindgren0f3ccb22015-07-16 01:55:58 -0700628 .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,
Tony Lindgren4f5395f2016-02-26 11:03:07 -0800636 .clk = "sysclk6_ck",
Tony Lindgren0f3ccb22015-07-16 01:55:58 -0700637 .user = OCP_USER_MPU,
638};
639
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800640static 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 = {
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700655 .master = &dm81xx_l4_ls_hwmod,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800656 .slave = &dm816x_timer1_hwmod,
657 .clk = "sysclk6_ck",
658 .user = OCP_USER_MPU,
659};
660
Tony Lindgren0f3ccb22015-07-16 01:55:58 -0700661static struct omap_hwmod dm814x_timer2_hwmod = {
662 .name = "timer2",
663 .clkdm_name = "alwon_l3s_clkdm",
Tony Lindgrencb4db032015-12-03 12:02:31 -0800664 .main_clk = "timer2_fck",
Tony Lindgren0f3ccb22015-07-16 01:55:58 -0700665 .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,
Tony Lindgren4f5395f2016-02-26 11:03:07 -0800673 .clk = "sysclk6_ck",
Tony Lindgren0f3ccb22015-07-16 01:55:58 -0700674 .user = OCP_USER_MPU,
675};
676
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800677static 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 = {
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700692 .master = &dm81xx_l4_ls_hwmod,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800693 .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 = {
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700713 .master = &dm81xx_l4_ls_hwmod,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800714 .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 = {
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700734 .master = &dm81xx_l4_ls_hwmod,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800735 .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 = {
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700755 .master = &dm81xx_l4_ls_hwmod,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800756 .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 = {
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700776 .master = &dm81xx_l4_ls_hwmod,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800777 .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 = {
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700797 .master = &dm81xx_l4_ls_hwmod,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800798 .slave = &dm816x_timer7_hwmod,
799 .clk = "sysclk6_ck",
800 .user = OCP_USER_MPU,
801};
802
Tony Lindgren0f3ccb22015-07-16 01:55:58 -0700803/* 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
Tony Lindgren24da7412015-07-23 21:59:18 -0700820static struct omap_hwmod dm814x_cpgmac0_hwmod = {
Tony Lindgren0f3ccb22015-07-16 01:55:58 -0700821 .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
Tony Lindgren24da7412015-07-23 21:59:18 -0700838static struct omap_hwmod dm814x_mdio_hwmod = {
Tony Lindgren0f3ccb22015-07-16 01:55:58 -0700839 .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
Tony Lindgren24da7412015-07-23 21:59:18 -0700852static struct omap_hwmod_ocp_if dm814x_cpgmac0__mdio = {
Tony Lindgren0f3ccb22015-07-16 01:55:58 -0700853 .master = &dm814x_cpgmac0_hwmod,
854 .slave = &dm814x_mdio_hwmod,
855 .user = OCP_USER_MPU,
856 .flags = HWMOD_NO_IDLEST,
857};
858
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800859/* 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,
Neil Armstrong29f5b342015-11-13 17:29:53 +0100880 .flags = HWMOD_NO_IDLEST,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800881};
882
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700883static struct omap_hwmod_ocp_if dm81xx_l4_hs__emac0 = {
884 .master = &dm81xx_l4_hs_hwmod,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800885 .slave = &dm816x_emac0_hwmod,
886 .clk = "sysclk5_ck",
887 .user = OCP_USER_MPU,
888};
889
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700890static struct omap_hwmod_class dm81xx_mdio_hwmod_class = {
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800891 .name = "davinci_mdio",
892 .sysc = &dm816x_emac_sysc,
893};
894
Tony Lindgren24da7412015-07-23 21:59:18 -0700895static struct omap_hwmod dm81xx_emac0_mdio_hwmod = {
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800896 .name = "davinci_mdio",
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700897 .class = &dm81xx_mdio_hwmod_class,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800898 .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 = {
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700907 .clkctrl_offs = DM81XX_CM_ALWON_ETHERNET_0_CLKCTRL,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800908 .modulemode = MODULEMODE_SWCTRL,
909 },
910 },
911};
912
Tony Lindgren24da7412015-07-23 21:59:18 -0700913static struct omap_hwmod_ocp_if dm81xx_emac0__mdio = {
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700914 .master = &dm81xx_l4_hs_hwmod,
915 .slave = &dm81xx_emac0_mdio_hwmod,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800916 .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 = {
Tony Lindgren7e1b11d2015-07-16 01:55:58 -0700934 .master = &dm81xx_l4_hs_hwmod,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800935 .slave = &dm816x_emac1_hwmod,
936 .clk = "sysclk5_ck",
937 .user = OCP_USER_MPU,
938};
939
Tony Lindgrenc757fda2015-12-22 15:39:41 -0800940static struct omap_hwmod_class_sysconfig dm81xx_mmc_sysc = {
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800941 .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
Tony Lindgrenc757fda2015-12-22 15:39:41 -0800951static struct omap_hwmod_class dm81xx_mmc_class = {
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800952 .name = "mmc",
Tony Lindgrenc757fda2015-12-22 15:39:41 -0800953 .sysc = &dm81xx_mmc_sysc,
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800954};
955
Tony Lindgrenc757fda2015-12-22 15:39:41 -0800956static struct omap_hwmod_opt_clk dm81xx_mmc_opt_clks[] = {
Tony Lindgren4d38bd12015-01-26 09:26:32 -0800957 { .role = "dbck", .clk = "sysclk18_ck", },
958};
959
Tony Lindgrenc757fda2015-12-22 15:39:41 -0800960static 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,
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001032};
1033
1034static struct omap_hwmod dm816x_mmc1_hwmod = {
1035 .name = "mmc1",
1036 .clkdm_name = "alwon_l3s_clkdm",
Tony Lindgrenc757fda2015-12-22 15:39:41 -08001037 .opt_clks = dm81xx_mmc_opt_clks,
1038 .opt_clks_cnt = ARRAY_SIZE(dm81xx_mmc_opt_clks),
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001039 .main_clk = "sysclk10_ck",
1040 .prcm = {
1041 .omap4 = {
1042 .clkctrl_offs = DM816X_CM_ALWON_SDIO_CLKCTRL,
1043 .modulemode = MODULEMODE_SWCTRL,
1044 },
1045 },
Tony Lindgrenc757fda2015-12-22 15:39:41 -08001046 .dev_attr = &mmc_dev_attr,
1047 .class = &dm81xx_mmc_class,
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001048};
1049
1050static struct omap_hwmod_ocp_if dm816x_l4_ls__mmc1 = {
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001051 .master = &dm81xx_l4_ls_hwmod,
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001052 .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
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001079static struct omap_hwmod dm81xx_mcspi1_hwmod = {
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001080 .name = "mcspi1",
1081 .clkdm_name = "alwon_l3s_clkdm",
1082 .main_clk = "sysclk10_ck",
1083 .prcm = {
1084 .omap4 = {
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001085 .clkctrl_offs = DM81XX_CM_ALWON_SPI_CLKCTRL,
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001086 .modulemode = MODULEMODE_SWCTRL,
1087 },
1088 },
1089 .class = &dm816x_mcspi_class,
1090 .dev_attr = &dm816x_mcspi1_dev_attr,
1091};
1092
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001093static struct omap_hwmod_ocp_if dm81xx_l4_ls__mcspi1 = {
1094 .master = &dm81xx_l4_ls_hwmod,
1095 .slave = &dm81xx_mcspi1_hwmod,
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001096 .clk = "sysclk6_ck",
1097 .user = OCP_USER_MPU,
1098};
1099
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001100static struct omap_hwmod_class_sysconfig dm81xx_mailbox_sysc = {
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001101 .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
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001110static struct omap_hwmod_class dm81xx_mailbox_hwmod_class = {
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001111 .name = "mailbox",
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001112 .sysc = &dm81xx_mailbox_sysc,
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001113};
1114
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001115static struct omap_hwmod dm81xx_mailbox_hwmod = {
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001116 .name = "mailbox",
1117 .clkdm_name = "alwon_l3s_clkdm",
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001118 .class = &dm81xx_mailbox_hwmod_class,
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001119 .main_clk = "sysclk6_ck",
1120 .prcm = {
1121 .omap4 = {
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001122 .clkctrl_offs = DM81XX_CM_ALWON_MAILBOX_CLKCTRL,
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001123 .modulemode = MODULEMODE_SWCTRL,
1124 },
1125 },
1126};
1127
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001128static struct omap_hwmod_ocp_if dm81xx_l4_ls__mailbox = {
1129 .master = &dm81xx_l4_ls_hwmod,
1130 .slave = &dm81xx_mailbox_hwmod,
Tony Lindgren4f5395f2016-02-26 11:03:07 -08001131 .clk = "sysclk6_ck",
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001132 .user = OCP_USER_MPU,
1133};
1134
Neil Armstrong15395692015-10-22 11:18:59 +02001135static 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,
Tony Lindgren4f5395f2016-02-26 11:03:07 -08001166 .clk = "sysclk6_ck",
Neil Armstrong15395692015-10-22 11:18:59 +02001167 .user = OCP_USER_MPU,
1168};
1169
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001170static struct omap_hwmod_class dm81xx_tpcc_hwmod_class = {
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001171 .name = "tpcc",
1172};
1173
Tony Lindgren24da7412015-07-23 21:59:18 -07001174static struct omap_hwmod dm81xx_tpcc_hwmod = {
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001175 .name = "tpcc",
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001176 .class = &dm81xx_tpcc_hwmod_class,
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001177 .clkdm_name = "alwon_l3s_clkdm",
1178 .main_clk = "sysclk4_ck",
1179 .prcm = {
1180 .omap4 = {
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001181 .clkctrl_offs = DM81XX_CM_ALWON_TPCC_CLKCTRL,
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001182 .modulemode = MODULEMODE_SWCTRL,
1183 },
1184 },
1185};
1186
Tony Lindgren24da7412015-07-23 21:59:18 -07001187static struct omap_hwmod_ocp_if dm81xx_alwon_l3_fast__tpcc = {
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001188 .master = &dm81xx_alwon_l3_fast_hwmod,
1189 .slave = &dm81xx_tpcc_hwmod,
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001190 .clk = "sysclk4_ck",
1191 .user = OCP_USER_MPU,
1192};
1193
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001194static struct omap_hwmod_addr_space dm81xx_tptc0_addr_space[] = {
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001195 {
1196 .pa_start = 0x49800000,
1197 .pa_end = 0x49800000 + SZ_8K - 1,
1198 .flags = ADDR_TYPE_RT,
1199 },
1200 { },
1201};
1202
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001203static struct omap_hwmod_class dm81xx_tptc0_hwmod_class = {
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001204 .name = "tptc0",
1205};
1206
Tony Lindgren24da7412015-07-23 21:59:18 -07001207static struct omap_hwmod dm81xx_tptc0_hwmod = {
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001208 .name = "tptc0",
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001209 .class = &dm81xx_tptc0_hwmod_class,
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001210 .clkdm_name = "alwon_l3s_clkdm",
1211 .main_clk = "sysclk4_ck",
1212 .prcm = {
1213 .omap4 = {
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001214 .clkctrl_offs = DM81XX_CM_ALWON_TPTC0_CLKCTRL,
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001215 .modulemode = MODULEMODE_SWCTRL,
1216 },
1217 },
1218};
1219
Tony Lindgren24da7412015-07-23 21:59:18 -07001220static struct omap_hwmod_ocp_if dm81xx_alwon_l3_fast__tptc0 = {
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001221 .master = &dm81xx_alwon_l3_fast_hwmod,
1222 .slave = &dm81xx_tptc0_hwmod,
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001223 .clk = "sysclk4_ck",
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001224 .addr = dm81xx_tptc0_addr_space,
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001225 .user = OCP_USER_MPU,
1226};
1227
Tony Lindgren24da7412015-07-23 21:59:18 -07001228static struct omap_hwmod_ocp_if dm81xx_tptc0__alwon_l3_fast = {
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001229 .master = &dm81xx_tptc0_hwmod,
1230 .slave = &dm81xx_alwon_l3_fast_hwmod,
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001231 .clk = "sysclk4_ck",
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001232 .addr = dm81xx_tptc0_addr_space,
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001233 .user = OCP_USER_MPU,
1234};
1235
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001236static struct omap_hwmod_addr_space dm81xx_tptc1_addr_space[] = {
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001237 {
1238 .pa_start = 0x49900000,
1239 .pa_end = 0x49900000 + SZ_8K - 1,
1240 .flags = ADDR_TYPE_RT,
1241 },
1242 { },
1243};
1244
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001245static struct omap_hwmod_class dm81xx_tptc1_hwmod_class = {
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001246 .name = "tptc1",
1247};
1248
Tony Lindgren24da7412015-07-23 21:59:18 -07001249static struct omap_hwmod dm81xx_tptc1_hwmod = {
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001250 .name = "tptc1",
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001251 .class = &dm81xx_tptc1_hwmod_class,
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001252 .clkdm_name = "alwon_l3s_clkdm",
1253 .main_clk = "sysclk4_ck",
1254 .prcm = {
1255 .omap4 = {
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001256 .clkctrl_offs = DM81XX_CM_ALWON_TPTC1_CLKCTRL,
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001257 .modulemode = MODULEMODE_SWCTRL,
1258 },
1259 },
1260};
1261
Tony Lindgren24da7412015-07-23 21:59:18 -07001262static struct omap_hwmod_ocp_if dm81xx_alwon_l3_fast__tptc1 = {
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001263 .master = &dm81xx_alwon_l3_fast_hwmod,
1264 .slave = &dm81xx_tptc1_hwmod,
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001265 .clk = "sysclk4_ck",
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001266 .addr = dm81xx_tptc1_addr_space,
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001267 .user = OCP_USER_MPU,
1268};
1269
Tony Lindgren24da7412015-07-23 21:59:18 -07001270static struct omap_hwmod_ocp_if dm81xx_tptc1__alwon_l3_fast = {
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001271 .master = &dm81xx_tptc1_hwmod,
1272 .slave = &dm81xx_alwon_l3_fast_hwmod,
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001273 .clk = "sysclk4_ck",
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001274 .addr = dm81xx_tptc1_addr_space,
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001275 .user = OCP_USER_MPU,
1276};
1277
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001278static struct omap_hwmod_addr_space dm81xx_tptc2_addr_space[] = {
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001279 {
1280 .pa_start = 0x49a00000,
1281 .pa_end = 0x49a00000 + SZ_8K - 1,
1282 .flags = ADDR_TYPE_RT,
1283 },
1284 { },
1285};
1286
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001287static struct omap_hwmod_class dm81xx_tptc2_hwmod_class = {
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001288 .name = "tptc2",
1289};
1290
Tony Lindgren24da7412015-07-23 21:59:18 -07001291static struct omap_hwmod dm81xx_tptc2_hwmod = {
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001292 .name = "tptc2",
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001293 .class = &dm81xx_tptc2_hwmod_class,
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001294 .clkdm_name = "alwon_l3s_clkdm",
1295 .main_clk = "sysclk4_ck",
1296 .prcm = {
1297 .omap4 = {
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001298 .clkctrl_offs = DM81XX_CM_ALWON_TPTC2_CLKCTRL,
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001299 .modulemode = MODULEMODE_SWCTRL,
1300 },
1301 },
1302};
1303
Tony Lindgren24da7412015-07-23 21:59:18 -07001304static struct omap_hwmod_ocp_if dm81xx_alwon_l3_fast__tptc2 = {
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001305 .master = &dm81xx_alwon_l3_fast_hwmod,
1306 .slave = &dm81xx_tptc2_hwmod,
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001307 .clk = "sysclk4_ck",
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001308 .addr = dm81xx_tptc2_addr_space,
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001309 .user = OCP_USER_MPU,
1310};
1311
Tony Lindgren24da7412015-07-23 21:59:18 -07001312static struct omap_hwmod_ocp_if dm81xx_tptc2__alwon_l3_fast = {
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001313 .master = &dm81xx_tptc2_hwmod,
1314 .slave = &dm81xx_alwon_l3_fast_hwmod,
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001315 .clk = "sysclk4_ck",
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001316 .addr = dm81xx_tptc2_addr_space,
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001317 .user = OCP_USER_MPU,
1318};
1319
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001320static struct omap_hwmod_addr_space dm81xx_tptc3_addr_space[] = {
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001321 {
1322 .pa_start = 0x49b00000,
1323 .pa_end = 0x49b00000 + SZ_8K - 1,
1324 .flags = ADDR_TYPE_RT,
1325 },
1326 { },
1327};
1328
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001329static struct omap_hwmod_class dm81xx_tptc3_hwmod_class = {
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001330 .name = "tptc3",
1331};
1332
Tony Lindgren24da7412015-07-23 21:59:18 -07001333static struct omap_hwmod dm81xx_tptc3_hwmod = {
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001334 .name = "tptc3",
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001335 .class = &dm81xx_tptc3_hwmod_class,
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001336 .clkdm_name = "alwon_l3s_clkdm",
1337 .main_clk = "sysclk4_ck",
1338 .prcm = {
1339 .omap4 = {
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001340 .clkctrl_offs = DM81XX_CM_ALWON_TPTC3_CLKCTRL,
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001341 .modulemode = MODULEMODE_SWCTRL,
1342 },
1343 },
1344};
1345
Tony Lindgren24da7412015-07-23 21:59:18 -07001346static struct omap_hwmod_ocp_if dm81xx_alwon_l3_fast__tptc3 = {
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001347 .master = &dm81xx_alwon_l3_fast_hwmod,
1348 .slave = &dm81xx_tptc3_hwmod,
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001349 .clk = "sysclk4_ck",
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001350 .addr = dm81xx_tptc3_addr_space,
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001351 .user = OCP_USER_MPU,
1352};
1353
Tony Lindgren24da7412015-07-23 21:59:18 -07001354static struct omap_hwmod_ocp_if dm81xx_tptc3__alwon_l3_fast = {
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001355 .master = &dm81xx_tptc3_hwmod,
1356 .slave = &dm81xx_alwon_l3_fast_hwmod,
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001357 .clk = "sysclk4_ck",
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001358 .addr = dm81xx_tptc3_addr_space,
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001359 .user = OCP_USER_MPU,
1360};
1361
Tony Lindgren0f3ccb22015-07-16 01:55:58 -07001362/*
1363 * REVISIT: Test and enable the following once clocks work:
Tony Lindgren0f3ccb22015-07-16 01:55:58 -07001364 * dm81xx_l4_ls__mailbox
Tony Lindgren0f3ccb22015-07-16 01:55:58 -07001365 *
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,
Tony Lindgren3022b292015-12-03 12:02:32 -08001380 &dm81xx_l4_ls__gpio1,
1381 &dm81xx_l4_ls__gpio2,
Tony Lindgren0f3ccb22015-07-16 01:55:58 -07001382 &dm81xx_l4_ls__elm,
1383 &dm81xx_l4_ls__mcspi1,
Tony Lindgrenc757fda2015-12-22 15:39:41 -08001384 &dm814x_l4_ls__mmc1,
1385 &dm814x_l4_ls__mmc2,
Tony Lindgren0f3ccb22015-07-16 01:55:58 -07001386 &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,
Tony Lindgrenf53850b2015-12-22 15:40:01 -08001399 &dm81xx_alwon_l3_slow__gpmc,
1400 &dm814x_default_l3_slow__usbss,
Tony Lindgrenc757fda2015-12-22 15:39:41 -08001401 &dm814x_alwon_l3_med__mmc3,
Tony Lindgren0f3ccb22015-07-16 01:55:58 -07001402 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
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001411static struct omap_hwmod_ocp_if *dm816x_hwmod_ocp_ifs[] __initdata = {
1412 &dm816x_mpu__alwon_l3_slow,
1413 &dm816x_mpu__alwon_l3_med,
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001414 &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,
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001422 &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,
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001433 &dm81xx_l4_ls__mcspi1,
1434 &dm81xx_l4_ls__mailbox,
Neil Armstrong15395692015-10-22 11:18:59 +02001435 &dm81xx_l4_ls__spinbox,
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001436 &dm81xx_l4_hs__emac0,
1437 &dm81xx_emac0__mdio,
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001438 &dm816x_l4_hs__emac1,
Tony Lindgren7e1b11d2015-07-16 01:55:58 -07001439 &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,
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001448 &dm81xx_alwon_l3_slow__gpmc,
Tony Lindgrenf53850b2015-12-22 15:40:01 -08001449 &dm816x_default_l3_slow__usbss,
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001450 NULL,
1451};
1452
Tony Lindgren0f3ccb22015-07-16 01:55:58 -07001453int __init dm816x_hwmod_init(void)
Tony Lindgren4d38bd12015-01-26 09:26:32 -08001454{
1455 omap_hwmod_init();
1456 return omap_hwmod_register_links(dm816x_hwmod_ocp_ifs);
1457}