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 * 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. 37 */ 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 */ 87 #define DM816X_DM_ALWON_BASE 0x1400 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) 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) 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) 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 */ 107 #define DM816X_CM_DEFAULT_OFFSET 0x500 108 #define DM816X_CM_DEFAULT_USB_CLKCTRL (0x558 - DM816X_CM_DEFAULT_OFFSET) 109 110 /* L3 Interconnect entries clocked at 125, 250 and 500MHz */ 111 static struct omap_hwmod dm81xx_alwon_l3_slow_hwmod = { 112 .name = "alwon_l3_slow", 113 .clkdm_name = "alwon_l3s_clkdm", 114 .class = &l3_hwmod_class, 115 .flags = HWMOD_NO_IDLEST, 116 }; 117 118 static struct omap_hwmod dm81xx_default_l3_slow_hwmod = { 119 .name = "default_l3_slow", 120 .clkdm_name = "default_l3_slow_clkdm", 121 .class = &l3_hwmod_class, 122 .flags = HWMOD_NO_IDLEST, 123 }; 124 125 static struct omap_hwmod dm81xx_alwon_l3_med_hwmod = { 126 .name = "l3_med", 127 .clkdm_name = "alwon_l3_med_clkdm", 128 .class = &l3_hwmod_class, 129 .flags = HWMOD_NO_IDLEST, 130 }; 131 132 static struct omap_hwmod dm81xx_alwon_l3_fast_hwmod = { 133 .name = "l3_fast", 134 .clkdm_name = "alwon_l3_fast_clkdm", 135 .class = &l3_hwmod_class, 136 .flags = HWMOD_NO_IDLEST, 137 }; 138 139 /* 140 * L4 standard peripherals, see TRM table 1-12 for devices using this. 141 * See TRM table 1-73 for devices using the 125MHz SYSCLK6 clock. 142 */ 143 static struct omap_hwmod dm81xx_l4_ls_hwmod = { 144 .name = "l4_ls", 145 .clkdm_name = "alwon_l3s_clkdm", 146 .class = &l4_hwmod_class, 147 .flags = HWMOD_NO_IDLEST, 148 }; 149 150 /* 151 * L4 high-speed peripherals. For devices using this, please see the TRM 152 * table 1-13. On dm816x, only EMAC, MDIO and SATA use this. See also TRM 153 * table 1-73 for devices using 250MHz SYSCLK5 clock. 154 */ 155 static struct omap_hwmod dm81xx_l4_hs_hwmod = { 156 .name = "l4_hs", 157 .clkdm_name = "alwon_l3_med_clkdm", 158 .class = &l4_hwmod_class, 159 .flags = HWMOD_NO_IDLEST, 160 }; 161 162 /* L3 slow -> L4 ls peripheral interface running at 125MHz */ 163 static struct omap_hwmod_ocp_if dm81xx_alwon_l3_slow__l4_ls = { 164 .master = &dm81xx_alwon_l3_slow_hwmod, 165 .slave = &dm81xx_l4_ls_hwmod, 166 .user = OCP_USER_MPU, 167 }; 168 169 /* L3 med -> L4 fast peripheral interface running at 250MHz */ 170 static struct omap_hwmod_ocp_if dm81xx_alwon_l3_slow__l4_hs = { 171 .master = &dm81xx_alwon_l3_med_hwmod, 172 .slave = &dm81xx_l4_hs_hwmod, 173 .user = OCP_USER_MPU, 174 }; 175 176 /* MPU */ 177 static struct omap_hwmod dm814x_mpu_hwmod = { 178 .name = "mpu", 179 .clkdm_name = "alwon_l3s_clkdm", 180 .class = &mpu_hwmod_class, 181 .flags = HWMOD_INIT_NO_IDLE, 182 .main_clk = "mpu_ck", 183 .prcm = { 184 .omap4 = { 185 .clkctrl_offs = DM814X_CM_ALWON_MPU_CLKCTRL, 186 .modulemode = MODULEMODE_SWCTRL, 187 }, 188 }, 189 }; 190 191 static struct omap_hwmod_ocp_if dm814x_mpu__alwon_l3_slow = { 192 .master = &dm814x_mpu_hwmod, 193 .slave = &dm81xx_alwon_l3_slow_hwmod, 194 .user = OCP_USER_MPU, 195 }; 196 197 /* L3 med peripheral interface running at 200MHz */ 198 static struct omap_hwmod_ocp_if dm814x_mpu__alwon_l3_med = { 199 .master = &dm814x_mpu_hwmod, 200 .slave = &dm81xx_alwon_l3_med_hwmod, 201 .user = OCP_USER_MPU, 202 }; 203 204 static struct omap_hwmod dm816x_mpu_hwmod = { 205 .name = "mpu", 206 .clkdm_name = "alwon_mpu_clkdm", 207 .class = &mpu_hwmod_class, 208 .flags = HWMOD_INIT_NO_IDLE, 209 .main_clk = "mpu_ck", 210 .prcm = { 211 .omap4 = { 212 .clkctrl_offs = DM816X_CM_ALWON_MPU_CLKCTRL, 213 .modulemode = MODULEMODE_SWCTRL, 214 }, 215 }, 216 }; 217 218 static struct omap_hwmod_ocp_if dm816x_mpu__alwon_l3_slow = { 219 .master = &dm816x_mpu_hwmod, 220 .slave = &dm81xx_alwon_l3_slow_hwmod, 221 .user = OCP_USER_MPU, 222 }; 223 224 /* L3 med peripheral interface running at 250MHz */ 225 static struct omap_hwmod_ocp_if dm816x_mpu__alwon_l3_med = { 226 .master = &dm816x_mpu_hwmod, 227 .slave = &dm81xx_alwon_l3_med_hwmod, 228 .user = OCP_USER_MPU, 229 }; 230 231 /* UART common */ 232 static 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 244 static struct omap_hwmod_class uart_class = { 245 .name = "uart", 246 .sysc = &uart_sysc, 247 }; 248 249 static struct omap_hwmod dm81xx_uart1_hwmod = { 250 .name = "uart1", 251 .clkdm_name = "alwon_l3s_clkdm", 252 .main_clk = "sysclk10_ck", 253 .prcm = { 254 .omap4 = { 255 .clkctrl_offs = DM81XX_CM_ALWON_UART_0_CLKCTRL, 256 .modulemode = MODULEMODE_SWCTRL, 257 }, 258 }, 259 .class = &uart_class, 260 .flags = DEBUG_TI81XXUART1_FLAGS, 261 }; 262 263 static struct omap_hwmod_ocp_if dm81xx_l4_ls__uart1 = { 264 .master = &dm81xx_l4_ls_hwmod, 265 .slave = &dm81xx_uart1_hwmod, 266 .clk = "sysclk6_ck", 267 .user = OCP_USER_MPU, 268 }; 269 270 static struct omap_hwmod dm81xx_uart2_hwmod = { 271 .name = "uart2", 272 .clkdm_name = "alwon_l3s_clkdm", 273 .main_clk = "sysclk10_ck", 274 .prcm = { 275 .omap4 = { 276 .clkctrl_offs = DM81XX_CM_ALWON_UART_1_CLKCTRL, 277 .modulemode = MODULEMODE_SWCTRL, 278 }, 279 }, 280 .class = &uart_class, 281 .flags = DEBUG_TI81XXUART2_FLAGS, 282 }; 283 284 static struct omap_hwmod_ocp_if dm81xx_l4_ls__uart2 = { 285 .master = &dm81xx_l4_ls_hwmod, 286 .slave = &dm81xx_uart2_hwmod, 287 .clk = "sysclk6_ck", 288 .user = OCP_USER_MPU, 289 }; 290 291 static struct omap_hwmod dm81xx_uart3_hwmod = { 292 .name = "uart3", 293 .clkdm_name = "alwon_l3s_clkdm", 294 .main_clk = "sysclk10_ck", 295 .prcm = { 296 .omap4 = { 297 .clkctrl_offs = DM81XX_CM_ALWON_UART_2_CLKCTRL, 298 .modulemode = MODULEMODE_SWCTRL, 299 }, 300 }, 301 .class = &uart_class, 302 .flags = DEBUG_TI81XXUART3_FLAGS, 303 }; 304 305 static struct omap_hwmod_ocp_if dm81xx_l4_ls__uart3 = { 306 .master = &dm81xx_l4_ls_hwmod, 307 .slave = &dm81xx_uart3_hwmod, 308 .clk = "sysclk6_ck", 309 .user = OCP_USER_MPU, 310 }; 311 312 static 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 321 static 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 328 static struct omap_hwmod dm81xx_wd_timer_hwmod = { 329 .name = "wd_timer", 330 .clkdm_name = "alwon_l3s_clkdm", 331 .main_clk = "sysclk18_ck", 332 .flags = HWMOD_NO_IDLEST, 333 .prcm = { 334 .omap4 = { 335 .clkctrl_offs = DM81XX_CM_ALWON_WDTIMER_CLKCTRL, 336 .modulemode = MODULEMODE_SWCTRL, 337 }, 338 }, 339 .class = &wd_timer_class, 340 }; 341 342 static struct omap_hwmod_ocp_if dm81xx_l4_ls__wd_timer1 = { 343 .master = &dm81xx_l4_ls_hwmod, 344 .slave = &dm81xx_wd_timer_hwmod, 345 .clk = "sysclk6_ck", 346 .user = OCP_USER_MPU, 347 }; 348 349 /* I2C common */ 350 static 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 361 static struct omap_hwmod_class i2c_class = { 362 .name = "i2c", 363 .sysc = &i2c_sysc, 364 }; 365 366 static struct omap_hwmod dm81xx_i2c1_hwmod = { 367 .name = "i2c1", 368 .clkdm_name = "alwon_l3s_clkdm", 369 .main_clk = "sysclk10_ck", 370 .prcm = { 371 .omap4 = { 372 .clkctrl_offs = DM81XX_CM_ALWON_I2C_0_CLKCTRL, 373 .modulemode = MODULEMODE_SWCTRL, 374 }, 375 }, 376 .class = &i2c_class, 377 }; 378 379 static struct omap_hwmod_ocp_if dm81xx_l4_ls__i2c1 = { 380 .master = &dm81xx_l4_ls_hwmod, 381 .slave = &dm81xx_i2c1_hwmod, 382 .clk = "sysclk6_ck", 383 .user = OCP_USER_MPU, 384 }; 385 386 static struct omap_hwmod dm81xx_i2c2_hwmod = { 387 .name = "i2c2", 388 .clkdm_name = "alwon_l3s_clkdm", 389 .main_clk = "sysclk10_ck", 390 .prcm = { 391 .omap4 = { 392 .clkctrl_offs = DM81XX_CM_ALWON_I2C_1_CLKCTRL, 393 .modulemode = MODULEMODE_SWCTRL, 394 }, 395 }, 396 .class = &i2c_class, 397 }; 398 399 static 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 410 static struct omap_hwmod_ocp_if dm81xx_l4_ls__i2c2 = { 411 .master = &dm81xx_l4_ls_hwmod, 412 .slave = &dm81xx_i2c2_hwmod, 413 .clk = "sysclk6_ck", 414 .user = OCP_USER_MPU, 415 }; 416 417 static struct omap_hwmod_class dm81xx_elm_hwmod_class = { 418 .name = "elm", 419 .sysc = &dm81xx_elm_sysc, 420 }; 421 422 static 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 429 static struct omap_hwmod_ocp_if dm81xx_l4_ls__elm = { 430 .master = &dm81xx_l4_ls_hwmod, 431 .slave = &dm81xx_elm_hwmod, 432 .user = OCP_USER_MPU, 433 }; 434 435 static struct omap_hwmod_class_sysconfig dm81xx_gpio_sysc = { 436 .rev_offs = 0x0000, 437 .sysc_offs = 0x0010, 438 .syss_offs = 0x0114, 439 .sysc_flags = SYSC_HAS_AUTOIDLE | SYSC_HAS_ENAWAKEUP | 440 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET | 441 SYSS_HAS_RESET_STATUS, 442 .idlemodes = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART | 443 SIDLE_SMART_WKUP, 444 .sysc_fields = &omap_hwmod_sysc_type1, 445 }; 446 447 static struct omap_hwmod_class dm81xx_gpio_hwmod_class = { 448 .name = "gpio", 449 .sysc = &dm81xx_gpio_sysc, 450 .rev = 2, 451 }; 452 453 static struct omap_gpio_dev_attr gpio_dev_attr = { 454 .bank_width = 32, 455 .dbck_flag = true, 456 }; 457 458 static struct omap_hwmod_opt_clk gpio1_opt_clks[] = { 459 { .role = "dbclk", .clk = "sysclk18_ck" }, 460 }; 461 462 static struct omap_hwmod dm81xx_gpio1_hwmod = { 463 .name = "gpio1", 464 .clkdm_name = "alwon_l3s_clkdm", 465 .class = &dm81xx_gpio_hwmod_class, 466 .main_clk = "sysclk6_ck", 467 .prcm = { 468 .omap4 = { 469 .clkctrl_offs = DM81XX_CM_ALWON_GPIO_0_CLKCTRL, 470 .modulemode = MODULEMODE_SWCTRL, 471 }, 472 }, 473 .opt_clks = gpio1_opt_clks, 474 .opt_clks_cnt = ARRAY_SIZE(gpio1_opt_clks), 475 .dev_attr = &gpio_dev_attr, 476 }; 477 478 static struct omap_hwmod_ocp_if dm81xx_l4_ls__gpio1 = { 479 .master = &dm81xx_l4_ls_hwmod, 480 .slave = &dm81xx_gpio1_hwmod, 481 .user = OCP_USER_MPU, 482 }; 483 484 static struct omap_hwmod_opt_clk gpio2_opt_clks[] = { 485 { .role = "dbclk", .clk = "sysclk18_ck" }, 486 }; 487 488 static struct omap_hwmod dm81xx_gpio2_hwmod = { 489 .name = "gpio2", 490 .clkdm_name = "alwon_l3s_clkdm", 491 .class = &dm81xx_gpio_hwmod_class, 492 .main_clk = "sysclk6_ck", 493 .prcm = { 494 .omap4 = { 495 .clkctrl_offs = DM81XX_CM_ALWON_GPIO_1_CLKCTRL, 496 .modulemode = MODULEMODE_SWCTRL, 497 }, 498 }, 499 .opt_clks = gpio2_opt_clks, 500 .opt_clks_cnt = ARRAY_SIZE(gpio2_opt_clks), 501 .dev_attr = &gpio_dev_attr, 502 }; 503 504 static struct omap_hwmod_ocp_if dm81xx_l4_ls__gpio2 = { 505 .master = &dm81xx_l4_ls_hwmod, 506 .slave = &dm81xx_gpio2_hwmod, 507 .user = OCP_USER_MPU, 508 }; 509 510 static struct omap_hwmod_class_sysconfig dm81xx_gpmc_sysc = { 511 .rev_offs = 0x0, 512 .sysc_offs = 0x10, 513 .syss_offs = 0x14, 514 .sysc_flags = SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET | 515 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS, 516 .idlemodes = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART, 517 .sysc_fields = &omap_hwmod_sysc_type1, 518 }; 519 520 static struct omap_hwmod_class dm81xx_gpmc_hwmod_class = { 521 .name = "gpmc", 522 .sysc = &dm81xx_gpmc_sysc, 523 }; 524 525 static struct omap_hwmod dm81xx_gpmc_hwmod = { 526 .name = "gpmc", 527 .clkdm_name = "alwon_l3s_clkdm", 528 .class = &dm81xx_gpmc_hwmod_class, 529 .main_clk = "sysclk6_ck", 530 /* Skip reset for CONFIG_OMAP_GPMC_DEBUG for bootloader timings */ 531 .flags = DEBUG_OMAP_GPMC_HWMOD_FLAGS, 532 .prcm = { 533 .omap4 = { 534 .clkctrl_offs = DM81XX_CM_ALWON_GPMC_CLKCTRL, 535 .modulemode = MODULEMODE_SWCTRL, 536 }, 537 }, 538 }; 539 540 static struct omap_hwmod_ocp_if dm81xx_alwon_l3_slow__gpmc = { 541 .master = &dm81xx_alwon_l3_slow_hwmod, 542 .slave = &dm81xx_gpmc_hwmod, 543 .user = OCP_USER_MPU, 544 }; 545 546 static struct omap_hwmod_class_sysconfig dm81xx_usbhsotg_sysc = { 547 .rev_offs = 0x0, 548 .sysc_offs = 0x10, 549 .sysc_flags = SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE | 550 SYSC_HAS_SOFTRESET, 551 .idlemodes = SIDLE_SMART | MSTANDBY_FORCE | MSTANDBY_SMART, 552 .sysc_fields = &omap_hwmod_sysc_type2, 553 }; 554 555 static struct omap_hwmod_class dm81xx_usbotg_class = { 556 .name = "usbotg", 557 .sysc = &dm81xx_usbhsotg_sysc, 558 }; 559 560 static struct omap_hwmod dm81xx_usbss_hwmod = { 561 .name = "usb_otg_hs", 562 .clkdm_name = "default_l3_slow_clkdm", 563 .main_clk = "sysclk6_ck", 564 .prcm = { 565 .omap4 = { 566 .clkctrl_offs = DM816X_CM_DEFAULT_USB_CLKCTRL, 567 .modulemode = MODULEMODE_SWCTRL, 568 }, 569 }, 570 .class = &dm81xx_usbotg_class, 571 }; 572 573 static struct omap_hwmod_ocp_if dm81xx_default_l3_slow__usbss = { 574 .master = &dm81xx_default_l3_slow_hwmod, 575 .slave = &dm81xx_usbss_hwmod, 576 .clk = "sysclk6_ck", 577 .user = OCP_USER_MPU, 578 }; 579 580 static struct omap_hwmod_class_sysconfig dm816x_timer_sysc = { 581 .rev_offs = 0x0000, 582 .sysc_offs = 0x0010, 583 .syss_offs = 0x0014, 584 .sysc_flags = SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET, 585 .idlemodes = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART | 586 SIDLE_SMART_WKUP, 587 .sysc_fields = &omap_hwmod_sysc_type2, 588 }; 589 590 static struct omap_hwmod_class dm816x_timer_hwmod_class = { 591 .name = "timer", 592 .sysc = &dm816x_timer_sysc, 593 }; 594 595 static struct omap_timer_capability_dev_attr capability_alwon_dev_attr = { 596 .timer_capability = OMAP_TIMER_ALWON, 597 }; 598 599 static struct omap_hwmod dm814x_timer1_hwmod = { 600 .name = "timer1", 601 .clkdm_name = "alwon_l3s_clkdm", 602 .main_clk = "timer_sys_ck", 603 .dev_attr = &capability_alwon_dev_attr, 604 .class = &dm816x_timer_hwmod_class, 605 .flags = HWMOD_NO_IDLEST, 606 }; 607 608 static struct omap_hwmod_ocp_if dm814x_l4_ls__timer1 = { 609 .master = &dm81xx_l4_ls_hwmod, 610 .slave = &dm814x_timer1_hwmod, 611 .clk = "timer_sys_ck", 612 .user = OCP_USER_MPU, 613 }; 614 615 static struct omap_hwmod dm816x_timer1_hwmod = { 616 .name = "timer1", 617 .clkdm_name = "alwon_l3s_clkdm", 618 .main_clk = "timer1_fck", 619 .prcm = { 620 .omap4 = { 621 .clkctrl_offs = DM816X_CM_ALWON_TIMER_1_CLKCTRL, 622 .modulemode = MODULEMODE_SWCTRL, 623 }, 624 }, 625 .dev_attr = &capability_alwon_dev_attr, 626 .class = &dm816x_timer_hwmod_class, 627 }; 628 629 static struct omap_hwmod_ocp_if dm816x_l4_ls__timer1 = { 630 .master = &dm81xx_l4_ls_hwmod, 631 .slave = &dm816x_timer1_hwmod, 632 .clk = "sysclk6_ck", 633 .user = OCP_USER_MPU, 634 }; 635 636 static struct omap_hwmod dm814x_timer2_hwmod = { 637 .name = "timer2", 638 .clkdm_name = "alwon_l3s_clkdm", 639 .main_clk = "timer_sys_ck", 640 .dev_attr = &capability_alwon_dev_attr, 641 .class = &dm816x_timer_hwmod_class, 642 .flags = HWMOD_NO_IDLEST, 643 }; 644 645 static struct omap_hwmod_ocp_if dm814x_l4_ls__timer2 = { 646 .master = &dm81xx_l4_ls_hwmod, 647 .slave = &dm814x_timer2_hwmod, 648 .clk = "timer_sys_ck", 649 .user = OCP_USER_MPU, 650 }; 651 652 static struct omap_hwmod dm816x_timer2_hwmod = { 653 .name = "timer2", 654 .clkdm_name = "alwon_l3s_clkdm", 655 .main_clk = "timer2_fck", 656 .prcm = { 657 .omap4 = { 658 .clkctrl_offs = DM816X_CM_ALWON_TIMER_2_CLKCTRL, 659 .modulemode = MODULEMODE_SWCTRL, 660 }, 661 }, 662 .dev_attr = &capability_alwon_dev_attr, 663 .class = &dm816x_timer_hwmod_class, 664 }; 665 666 static struct omap_hwmod_ocp_if dm816x_l4_ls__timer2 = { 667 .master = &dm81xx_l4_ls_hwmod, 668 .slave = &dm816x_timer2_hwmod, 669 .clk = "sysclk6_ck", 670 .user = OCP_USER_MPU, 671 }; 672 673 static struct omap_hwmod dm816x_timer3_hwmod = { 674 .name = "timer3", 675 .clkdm_name = "alwon_l3s_clkdm", 676 .main_clk = "timer3_fck", 677 .prcm = { 678 .omap4 = { 679 .clkctrl_offs = DM816X_CM_ALWON_TIMER_3_CLKCTRL, 680 .modulemode = MODULEMODE_SWCTRL, 681 }, 682 }, 683 .dev_attr = &capability_alwon_dev_attr, 684 .class = &dm816x_timer_hwmod_class, 685 }; 686 687 static struct omap_hwmod_ocp_if dm816x_l4_ls__timer3 = { 688 .master = &dm81xx_l4_ls_hwmod, 689 .slave = &dm816x_timer3_hwmod, 690 .clk = "sysclk6_ck", 691 .user = OCP_USER_MPU, 692 }; 693 694 static struct omap_hwmod dm816x_timer4_hwmod = { 695 .name = "timer4", 696 .clkdm_name = "alwon_l3s_clkdm", 697 .main_clk = "timer4_fck", 698 .prcm = { 699 .omap4 = { 700 .clkctrl_offs = DM816X_CM_ALWON_TIMER_4_CLKCTRL, 701 .modulemode = MODULEMODE_SWCTRL, 702 }, 703 }, 704 .dev_attr = &capability_alwon_dev_attr, 705 .class = &dm816x_timer_hwmod_class, 706 }; 707 708 static struct omap_hwmod_ocp_if dm816x_l4_ls__timer4 = { 709 .master = &dm81xx_l4_ls_hwmod, 710 .slave = &dm816x_timer4_hwmod, 711 .clk = "sysclk6_ck", 712 .user = OCP_USER_MPU, 713 }; 714 715 static struct omap_hwmod dm816x_timer5_hwmod = { 716 .name = "timer5", 717 .clkdm_name = "alwon_l3s_clkdm", 718 .main_clk = "timer5_fck", 719 .prcm = { 720 .omap4 = { 721 .clkctrl_offs = DM816X_CM_ALWON_TIMER_5_CLKCTRL, 722 .modulemode = MODULEMODE_SWCTRL, 723 }, 724 }, 725 .dev_attr = &capability_alwon_dev_attr, 726 .class = &dm816x_timer_hwmod_class, 727 }; 728 729 static struct omap_hwmod_ocp_if dm816x_l4_ls__timer5 = { 730 .master = &dm81xx_l4_ls_hwmod, 731 .slave = &dm816x_timer5_hwmod, 732 .clk = "sysclk6_ck", 733 .user = OCP_USER_MPU, 734 }; 735 736 static struct omap_hwmod dm816x_timer6_hwmod = { 737 .name = "timer6", 738 .clkdm_name = "alwon_l3s_clkdm", 739 .main_clk = "timer6_fck", 740 .prcm = { 741 .omap4 = { 742 .clkctrl_offs = DM816X_CM_ALWON_TIMER_6_CLKCTRL, 743 .modulemode = MODULEMODE_SWCTRL, 744 }, 745 }, 746 .dev_attr = &capability_alwon_dev_attr, 747 .class = &dm816x_timer_hwmod_class, 748 }; 749 750 static struct omap_hwmod_ocp_if dm816x_l4_ls__timer6 = { 751 .master = &dm81xx_l4_ls_hwmod, 752 .slave = &dm816x_timer6_hwmod, 753 .clk = "sysclk6_ck", 754 .user = OCP_USER_MPU, 755 }; 756 757 static struct omap_hwmod dm816x_timer7_hwmod = { 758 .name = "timer7", 759 .clkdm_name = "alwon_l3s_clkdm", 760 .main_clk = "timer7_fck", 761 .prcm = { 762 .omap4 = { 763 .clkctrl_offs = DM816X_CM_ALWON_TIMER_7_CLKCTRL, 764 .modulemode = MODULEMODE_SWCTRL, 765 }, 766 }, 767 .dev_attr = &capability_alwon_dev_attr, 768 .class = &dm816x_timer_hwmod_class, 769 }; 770 771 static struct omap_hwmod_ocp_if dm816x_l4_ls__timer7 = { 772 .master = &dm81xx_l4_ls_hwmod, 773 .slave = &dm816x_timer7_hwmod, 774 .clk = "sysclk6_ck", 775 .user = OCP_USER_MPU, 776 }; 777 778 /* CPSW on dm814x */ 779 static struct omap_hwmod_class_sysconfig dm814x_cpgmac_sysc = { 780 .rev_offs = 0x0, 781 .sysc_offs = 0x8, 782 .syss_offs = 0x4, 783 .sysc_flags = SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE | 784 SYSS_HAS_RESET_STATUS, 785 .idlemodes = SIDLE_FORCE | SIDLE_NO | MSTANDBY_FORCE | 786 MSTANDBY_NO, 787 .sysc_fields = &omap_hwmod_sysc_type3, 788 }; 789 790 static struct omap_hwmod_class dm814x_cpgmac0_hwmod_class = { 791 .name = "cpgmac0", 792 .sysc = &dm814x_cpgmac_sysc, 793 }; 794 795 static struct omap_hwmod dm814x_cpgmac0_hwmod = { 796 .name = "cpgmac0", 797 .class = &dm814x_cpgmac0_hwmod_class, 798 .clkdm_name = "alwon_ethernet_clkdm", 799 .flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY, 800 .main_clk = "cpsw_125mhz_gclk", 801 .prcm = { 802 .omap4 = { 803 .clkctrl_offs = DM81XX_CM_ALWON_ETHERNET_0_CLKCTRL, 804 .modulemode = MODULEMODE_SWCTRL, 805 }, 806 }, 807 }; 808 809 static struct omap_hwmod_class dm814x_mdio_hwmod_class = { 810 .name = "davinci_mdio", 811 }; 812 813 static struct omap_hwmod dm814x_mdio_hwmod = { 814 .name = "davinci_mdio", 815 .class = &dm814x_mdio_hwmod_class, 816 .clkdm_name = "alwon_ethernet_clkdm", 817 .main_clk = "cpsw_125mhz_gclk", 818 }; 819 820 static struct omap_hwmod_ocp_if dm814x_l4_hs__cpgmac0 = { 821 .master = &dm81xx_l4_hs_hwmod, 822 .slave = &dm814x_cpgmac0_hwmod, 823 .clk = "cpsw_125mhz_gclk", 824 .user = OCP_USER_MPU, 825 }; 826 827 static struct omap_hwmod_ocp_if dm814x_cpgmac0__mdio = { 828 .master = &dm814x_cpgmac0_hwmod, 829 .slave = &dm814x_mdio_hwmod, 830 .user = OCP_USER_MPU, 831 .flags = HWMOD_NO_IDLEST, 832 }; 833 834 /* EMAC Ethernet */ 835 static struct omap_hwmod_class_sysconfig dm816x_emac_sysc = { 836 .rev_offs = 0x0, 837 .sysc_offs = 0x4, 838 .sysc_flags = SYSC_HAS_SOFTRESET, 839 .sysc_fields = &omap_hwmod_sysc_type2, 840 }; 841 842 static struct omap_hwmod_class dm816x_emac_hwmod_class = { 843 .name = "emac", 844 .sysc = &dm816x_emac_sysc, 845 }; 846 847 /* 848 * On dm816x the MDIO is within EMAC0. As the MDIO driver is a separate 849 * driver probed before EMAC0, we let MDIO do the clock idling. 850 */ 851 static struct omap_hwmod dm816x_emac0_hwmod = { 852 .name = "emac0", 853 .clkdm_name = "alwon_ethernet_clkdm", 854 .class = &dm816x_emac_hwmod_class, 855 .flags = HWMOD_NO_IDLEST, 856 }; 857 858 static struct omap_hwmod_ocp_if dm81xx_l4_hs__emac0 = { 859 .master = &dm81xx_l4_hs_hwmod, 860 .slave = &dm816x_emac0_hwmod, 861 .clk = "sysclk5_ck", 862 .user = OCP_USER_MPU, 863 }; 864 865 static struct omap_hwmod_class dm81xx_mdio_hwmod_class = { 866 .name = "davinci_mdio", 867 .sysc = &dm816x_emac_sysc, 868 }; 869 870 static struct omap_hwmod dm81xx_emac0_mdio_hwmod = { 871 .name = "davinci_mdio", 872 .class = &dm81xx_mdio_hwmod_class, 873 .clkdm_name = "alwon_ethernet_clkdm", 874 .main_clk = "sysclk24_ck", 875 .flags = HWMOD_NO_IDLEST, 876 /* 877 * REVISIT: This should be moved to the emac0_hwmod 878 * once we have a better way to handle device slaves. 879 */ 880 .prcm = { 881 .omap4 = { 882 .clkctrl_offs = DM81XX_CM_ALWON_ETHERNET_0_CLKCTRL, 883 .modulemode = MODULEMODE_SWCTRL, 884 }, 885 }, 886 }; 887 888 static struct omap_hwmod_ocp_if dm81xx_emac0__mdio = { 889 .master = &dm81xx_l4_hs_hwmod, 890 .slave = &dm81xx_emac0_mdio_hwmod, 891 .user = OCP_USER_MPU, 892 }; 893 894 static struct omap_hwmod dm816x_emac1_hwmod = { 895 .name = "emac1", 896 .clkdm_name = "alwon_ethernet_clkdm", 897 .main_clk = "sysclk24_ck", 898 .flags = HWMOD_NO_IDLEST, 899 .prcm = { 900 .omap4 = { 901 .clkctrl_offs = DM816X_CM_ALWON_ETHERNET_1_CLKCTRL, 902 .modulemode = MODULEMODE_SWCTRL, 903 }, 904 }, 905 .class = &dm816x_emac_hwmod_class, 906 }; 907 908 static struct omap_hwmod_ocp_if dm816x_l4_hs__emac1 = { 909 .master = &dm81xx_l4_hs_hwmod, 910 .slave = &dm816x_emac1_hwmod, 911 .clk = "sysclk5_ck", 912 .user = OCP_USER_MPU, 913 }; 914 915 static struct omap_hwmod_class_sysconfig dm816x_mmc_sysc = { 916 .rev_offs = 0x0, 917 .sysc_offs = 0x110, 918 .syss_offs = 0x114, 919 .sysc_flags = SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE | 920 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET | 921 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS, 922 .idlemodes = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART, 923 .sysc_fields = &omap_hwmod_sysc_type1, 924 }; 925 926 static struct omap_hwmod_class dm816x_mmc_class = { 927 .name = "mmc", 928 .sysc = &dm816x_mmc_sysc, 929 }; 930 931 static struct omap_hwmod_opt_clk dm816x_mmc1_opt_clks[] = { 932 { .role = "dbck", .clk = "sysclk18_ck", }, 933 }; 934 935 static struct omap_hsmmc_dev_attr mmc1_dev_attr = { 936 .flags = OMAP_HSMMC_SUPPORTS_DUAL_VOLT, 937 }; 938 939 static struct omap_hwmod dm816x_mmc1_hwmod = { 940 .name = "mmc1", 941 .clkdm_name = "alwon_l3s_clkdm", 942 .opt_clks = dm816x_mmc1_opt_clks, 943 .opt_clks_cnt = ARRAY_SIZE(dm816x_mmc1_opt_clks), 944 .main_clk = "sysclk10_ck", 945 .prcm = { 946 .omap4 = { 947 .clkctrl_offs = DM816X_CM_ALWON_SDIO_CLKCTRL, 948 .modulemode = MODULEMODE_SWCTRL, 949 }, 950 }, 951 .dev_attr = &mmc1_dev_attr, 952 .class = &dm816x_mmc_class, 953 }; 954 955 static struct omap_hwmod_ocp_if dm816x_l4_ls__mmc1 = { 956 .master = &dm81xx_l4_ls_hwmod, 957 .slave = &dm816x_mmc1_hwmod, 958 .clk = "sysclk6_ck", 959 .user = OCP_USER_MPU, 960 .flags = OMAP_FIREWALL_L4 961 }; 962 963 static struct omap_hwmod_class_sysconfig dm816x_mcspi_sysc = { 964 .rev_offs = 0x0, 965 .sysc_offs = 0x110, 966 .syss_offs = 0x114, 967 .sysc_flags = SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE | 968 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET | 969 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS, 970 .idlemodes = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART, 971 .sysc_fields = &omap_hwmod_sysc_type1, 972 }; 973 974 static struct omap_hwmod_class dm816x_mcspi_class = { 975 .name = "mcspi", 976 .sysc = &dm816x_mcspi_sysc, 977 .rev = OMAP3_MCSPI_REV, 978 }; 979 980 static struct omap2_mcspi_dev_attr dm816x_mcspi1_dev_attr = { 981 .num_chipselect = 4, 982 }; 983 984 static struct omap_hwmod dm81xx_mcspi1_hwmod = { 985 .name = "mcspi1", 986 .clkdm_name = "alwon_l3s_clkdm", 987 .main_clk = "sysclk10_ck", 988 .prcm = { 989 .omap4 = { 990 .clkctrl_offs = DM81XX_CM_ALWON_SPI_CLKCTRL, 991 .modulemode = MODULEMODE_SWCTRL, 992 }, 993 }, 994 .class = &dm816x_mcspi_class, 995 .dev_attr = &dm816x_mcspi1_dev_attr, 996 }; 997 998 static struct omap_hwmod_ocp_if dm81xx_l4_ls__mcspi1 = { 999 .master = &dm81xx_l4_ls_hwmod, 1000 .slave = &dm81xx_mcspi1_hwmod, 1001 .clk = "sysclk6_ck", 1002 .user = OCP_USER_MPU, 1003 }; 1004 1005 static struct omap_hwmod_class_sysconfig dm81xx_mailbox_sysc = { 1006 .rev_offs = 0x000, 1007 .sysc_offs = 0x010, 1008 .syss_offs = 0x014, 1009 .sysc_flags = SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE | 1010 SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE, 1011 .idlemodes = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART, 1012 .sysc_fields = &omap_hwmod_sysc_type1, 1013 }; 1014 1015 static struct omap_hwmod_class dm81xx_mailbox_hwmod_class = { 1016 .name = "mailbox", 1017 .sysc = &dm81xx_mailbox_sysc, 1018 }; 1019 1020 static struct omap_hwmod dm81xx_mailbox_hwmod = { 1021 .name = "mailbox", 1022 .clkdm_name = "alwon_l3s_clkdm", 1023 .class = &dm81xx_mailbox_hwmod_class, 1024 .main_clk = "sysclk6_ck", 1025 .prcm = { 1026 .omap4 = { 1027 .clkctrl_offs = DM81XX_CM_ALWON_MAILBOX_CLKCTRL, 1028 .modulemode = MODULEMODE_SWCTRL, 1029 }, 1030 }, 1031 }; 1032 1033 static struct omap_hwmod_ocp_if dm81xx_l4_ls__mailbox = { 1034 .master = &dm81xx_l4_ls_hwmod, 1035 .slave = &dm81xx_mailbox_hwmod, 1036 .user = OCP_USER_MPU, 1037 }; 1038 1039 static struct omap_hwmod_class dm81xx_tpcc_hwmod_class = { 1040 .name = "tpcc", 1041 }; 1042 1043 static struct omap_hwmod dm81xx_tpcc_hwmod = { 1044 .name = "tpcc", 1045 .class = &dm81xx_tpcc_hwmod_class, 1046 .clkdm_name = "alwon_l3s_clkdm", 1047 .main_clk = "sysclk4_ck", 1048 .prcm = { 1049 .omap4 = { 1050 .clkctrl_offs = DM81XX_CM_ALWON_TPCC_CLKCTRL, 1051 .modulemode = MODULEMODE_SWCTRL, 1052 }, 1053 }, 1054 }; 1055 1056 static struct omap_hwmod_ocp_if dm81xx_alwon_l3_fast__tpcc = { 1057 .master = &dm81xx_alwon_l3_fast_hwmod, 1058 .slave = &dm81xx_tpcc_hwmod, 1059 .clk = "sysclk4_ck", 1060 .user = OCP_USER_MPU, 1061 }; 1062 1063 static struct omap_hwmod_addr_space dm81xx_tptc0_addr_space[] = { 1064 { 1065 .pa_start = 0x49800000, 1066 .pa_end = 0x49800000 + SZ_8K - 1, 1067 .flags = ADDR_TYPE_RT, 1068 }, 1069 { }, 1070 }; 1071 1072 static struct omap_hwmod_class dm81xx_tptc0_hwmod_class = { 1073 .name = "tptc0", 1074 }; 1075 1076 static struct omap_hwmod dm81xx_tptc0_hwmod = { 1077 .name = "tptc0", 1078 .class = &dm81xx_tptc0_hwmod_class, 1079 .clkdm_name = "alwon_l3s_clkdm", 1080 .main_clk = "sysclk4_ck", 1081 .prcm = { 1082 .omap4 = { 1083 .clkctrl_offs = DM81XX_CM_ALWON_TPTC0_CLKCTRL, 1084 .modulemode = MODULEMODE_SWCTRL, 1085 }, 1086 }, 1087 }; 1088 1089 static struct omap_hwmod_ocp_if dm81xx_alwon_l3_fast__tptc0 = { 1090 .master = &dm81xx_alwon_l3_fast_hwmod, 1091 .slave = &dm81xx_tptc0_hwmod, 1092 .clk = "sysclk4_ck", 1093 .addr = dm81xx_tptc0_addr_space, 1094 .user = OCP_USER_MPU, 1095 }; 1096 1097 static struct omap_hwmod_ocp_if dm81xx_tptc0__alwon_l3_fast = { 1098 .master = &dm81xx_tptc0_hwmod, 1099 .slave = &dm81xx_alwon_l3_fast_hwmod, 1100 .clk = "sysclk4_ck", 1101 .addr = dm81xx_tptc0_addr_space, 1102 .user = OCP_USER_MPU, 1103 }; 1104 1105 static struct omap_hwmod_addr_space dm81xx_tptc1_addr_space[] = { 1106 { 1107 .pa_start = 0x49900000, 1108 .pa_end = 0x49900000 + SZ_8K - 1, 1109 .flags = ADDR_TYPE_RT, 1110 }, 1111 { }, 1112 }; 1113 1114 static struct omap_hwmod_class dm81xx_tptc1_hwmod_class = { 1115 .name = "tptc1", 1116 }; 1117 1118 static struct omap_hwmod dm81xx_tptc1_hwmod = { 1119 .name = "tptc1", 1120 .class = &dm81xx_tptc1_hwmod_class, 1121 .clkdm_name = "alwon_l3s_clkdm", 1122 .main_clk = "sysclk4_ck", 1123 .prcm = { 1124 .omap4 = { 1125 .clkctrl_offs = DM81XX_CM_ALWON_TPTC1_CLKCTRL, 1126 .modulemode = MODULEMODE_SWCTRL, 1127 }, 1128 }, 1129 }; 1130 1131 static struct omap_hwmod_ocp_if dm81xx_alwon_l3_fast__tptc1 = { 1132 .master = &dm81xx_alwon_l3_fast_hwmod, 1133 .slave = &dm81xx_tptc1_hwmod, 1134 .clk = "sysclk4_ck", 1135 .addr = dm81xx_tptc1_addr_space, 1136 .user = OCP_USER_MPU, 1137 }; 1138 1139 static struct omap_hwmod_ocp_if dm81xx_tptc1__alwon_l3_fast = { 1140 .master = &dm81xx_tptc1_hwmod, 1141 .slave = &dm81xx_alwon_l3_fast_hwmod, 1142 .clk = "sysclk4_ck", 1143 .addr = dm81xx_tptc1_addr_space, 1144 .user = OCP_USER_MPU, 1145 }; 1146 1147 static struct omap_hwmod_addr_space dm81xx_tptc2_addr_space[] = { 1148 { 1149 .pa_start = 0x49a00000, 1150 .pa_end = 0x49a00000 + SZ_8K - 1, 1151 .flags = ADDR_TYPE_RT, 1152 }, 1153 { }, 1154 }; 1155 1156 static struct omap_hwmod_class dm81xx_tptc2_hwmod_class = { 1157 .name = "tptc2", 1158 }; 1159 1160 static struct omap_hwmod dm81xx_tptc2_hwmod = { 1161 .name = "tptc2", 1162 .class = &dm81xx_tptc2_hwmod_class, 1163 .clkdm_name = "alwon_l3s_clkdm", 1164 .main_clk = "sysclk4_ck", 1165 .prcm = { 1166 .omap4 = { 1167 .clkctrl_offs = DM81XX_CM_ALWON_TPTC2_CLKCTRL, 1168 .modulemode = MODULEMODE_SWCTRL, 1169 }, 1170 }, 1171 }; 1172 1173 static struct omap_hwmod_ocp_if dm81xx_alwon_l3_fast__tptc2 = { 1174 .master = &dm81xx_alwon_l3_fast_hwmod, 1175 .slave = &dm81xx_tptc2_hwmod, 1176 .clk = "sysclk4_ck", 1177 .addr = dm81xx_tptc2_addr_space, 1178 .user = OCP_USER_MPU, 1179 }; 1180 1181 static struct omap_hwmod_ocp_if dm81xx_tptc2__alwon_l3_fast = { 1182 .master = &dm81xx_tptc2_hwmod, 1183 .slave = &dm81xx_alwon_l3_fast_hwmod, 1184 .clk = "sysclk4_ck", 1185 .addr = dm81xx_tptc2_addr_space, 1186 .user = OCP_USER_MPU, 1187 }; 1188 1189 static struct omap_hwmod_addr_space dm81xx_tptc3_addr_space[] = { 1190 { 1191 .pa_start = 0x49b00000, 1192 .pa_end = 0x49b00000 + SZ_8K - 1, 1193 .flags = ADDR_TYPE_RT, 1194 }, 1195 { }, 1196 }; 1197 1198 static struct omap_hwmod_class dm81xx_tptc3_hwmod_class = { 1199 .name = "tptc3", 1200 }; 1201 1202 static struct omap_hwmod dm81xx_tptc3_hwmod = { 1203 .name = "tptc3", 1204 .class = &dm81xx_tptc3_hwmod_class, 1205 .clkdm_name = "alwon_l3s_clkdm", 1206 .main_clk = "sysclk4_ck", 1207 .prcm = { 1208 .omap4 = { 1209 .clkctrl_offs = DM81XX_CM_ALWON_TPTC3_CLKCTRL, 1210 .modulemode = MODULEMODE_SWCTRL, 1211 }, 1212 }, 1213 }; 1214 1215 static struct omap_hwmod_ocp_if dm81xx_alwon_l3_fast__tptc3 = { 1216 .master = &dm81xx_alwon_l3_fast_hwmod, 1217 .slave = &dm81xx_tptc3_hwmod, 1218 .clk = "sysclk4_ck", 1219 .addr = dm81xx_tptc3_addr_space, 1220 .user = OCP_USER_MPU, 1221 }; 1222 1223 static struct omap_hwmod_ocp_if dm81xx_tptc3__alwon_l3_fast = { 1224 .master = &dm81xx_tptc3_hwmod, 1225 .slave = &dm81xx_alwon_l3_fast_hwmod, 1226 .clk = "sysclk4_ck", 1227 .addr = dm81xx_tptc3_addr_space, 1228 .user = OCP_USER_MPU, 1229 }; 1230 1231 /* 1232 * REVISIT: Test and enable the following once clocks work: 1233 * dm81xx_l4_ls__gpio1 1234 * dm81xx_l4_ls__gpio2 1235 * dm81xx_l4_ls__mailbox 1236 * dm81xx_alwon_l3_slow__gpmc 1237 * dm81xx_default_l3_slow__usbss 1238 * 1239 * Also note that some devices share a single clkctrl_offs.. 1240 * For example, i2c1 and 3 share one, and i2c2 and 4 share one. 1241 */ 1242 static struct omap_hwmod_ocp_if *dm814x_hwmod_ocp_ifs[] __initdata = { 1243 &dm814x_mpu__alwon_l3_slow, 1244 &dm814x_mpu__alwon_l3_med, 1245 &dm81xx_alwon_l3_slow__l4_ls, 1246 &dm81xx_alwon_l3_slow__l4_hs, 1247 &dm81xx_l4_ls__uart1, 1248 &dm81xx_l4_ls__uart2, 1249 &dm81xx_l4_ls__uart3, 1250 &dm81xx_l4_ls__wd_timer1, 1251 &dm81xx_l4_ls__i2c1, 1252 &dm81xx_l4_ls__i2c2, 1253 &dm81xx_l4_ls__elm, 1254 &dm81xx_l4_ls__mcspi1, 1255 &dm81xx_alwon_l3_fast__tpcc, 1256 &dm81xx_alwon_l3_fast__tptc0, 1257 &dm81xx_alwon_l3_fast__tptc1, 1258 &dm81xx_alwon_l3_fast__tptc2, 1259 &dm81xx_alwon_l3_fast__tptc3, 1260 &dm81xx_tptc0__alwon_l3_fast, 1261 &dm81xx_tptc1__alwon_l3_fast, 1262 &dm81xx_tptc2__alwon_l3_fast, 1263 &dm81xx_tptc3__alwon_l3_fast, 1264 &dm814x_l4_ls__timer1, 1265 &dm814x_l4_ls__timer2, 1266 &dm814x_l4_hs__cpgmac0, 1267 &dm814x_cpgmac0__mdio, 1268 NULL, 1269 }; 1270 1271 int __init dm814x_hwmod_init(void) 1272 { 1273 omap_hwmod_init(); 1274 return omap_hwmod_register_links(dm814x_hwmod_ocp_ifs); 1275 } 1276 1277 static struct omap_hwmod_ocp_if *dm816x_hwmod_ocp_ifs[] __initdata = { 1278 &dm816x_mpu__alwon_l3_slow, 1279 &dm816x_mpu__alwon_l3_med, 1280 &dm81xx_alwon_l3_slow__l4_ls, 1281 &dm81xx_alwon_l3_slow__l4_hs, 1282 &dm81xx_l4_ls__uart1, 1283 &dm81xx_l4_ls__uart2, 1284 &dm81xx_l4_ls__uart3, 1285 &dm81xx_l4_ls__wd_timer1, 1286 &dm81xx_l4_ls__i2c1, 1287 &dm81xx_l4_ls__i2c2, 1288 &dm81xx_l4_ls__gpio1, 1289 &dm81xx_l4_ls__gpio2, 1290 &dm81xx_l4_ls__elm, 1291 &dm816x_l4_ls__mmc1, 1292 &dm816x_l4_ls__timer1, 1293 &dm816x_l4_ls__timer2, 1294 &dm816x_l4_ls__timer3, 1295 &dm816x_l4_ls__timer4, 1296 &dm816x_l4_ls__timer5, 1297 &dm816x_l4_ls__timer6, 1298 &dm816x_l4_ls__timer7, 1299 &dm81xx_l4_ls__mcspi1, 1300 &dm81xx_l4_ls__mailbox, 1301 &dm81xx_l4_hs__emac0, 1302 &dm81xx_emac0__mdio, 1303 &dm816x_l4_hs__emac1, 1304 &dm81xx_alwon_l3_fast__tpcc, 1305 &dm81xx_alwon_l3_fast__tptc0, 1306 &dm81xx_alwon_l3_fast__tptc1, 1307 &dm81xx_alwon_l3_fast__tptc2, 1308 &dm81xx_alwon_l3_fast__tptc3, 1309 &dm81xx_tptc0__alwon_l3_fast, 1310 &dm81xx_tptc1__alwon_l3_fast, 1311 &dm81xx_tptc2__alwon_l3_fast, 1312 &dm81xx_tptc3__alwon_l3_fast, 1313 &dm81xx_alwon_l3_slow__gpmc, 1314 &dm81xx_default_l3_slow__usbss, 1315 NULL, 1316 }; 1317 1318 int __init dm816x_hwmod_init(void) 1319 { 1320 omap_hwmod_init(); 1321 return omap_hwmod_register_links(dm816x_hwmod_ocp_ifs); 1322 } 1323