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