omap_hwmod_81xx_data.c (33569B)
1/* 2 * DM81xx hwmod data. 3 * 4 * Copyright (C) 2010 Texas Instruments, Inc. - https://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/types.h> 19 20#include <linux/platform_data/hsmmc-omap.h> 21 22#include "omap_hwmod_common_data.h" 23#include "cm81xx.h" 24#include "ti81xx.h" 25#include "wd_timer.h" 26 27/* 28 * DM816X hardware modules integration data 29 * 30 * Note: This is incomplete and at present, not generated from h/w database. 31 */ 32 33/* 34 * Common alwon .clkctrl_offs from dm814x TRM "Table 2-278. CM_ALWON REGISTERS" 35 * also dm816x TRM 18.7.17 CM_ALWON device register values minus 0x1400. 36 */ 37#define DM81XX_CM_ALWON_MCASP0_CLKCTRL 0x140 38#define DM81XX_CM_ALWON_MCASP1_CLKCTRL 0x144 39#define DM81XX_CM_ALWON_MCASP2_CLKCTRL 0x148 40#define DM81XX_CM_ALWON_MCBSP_CLKCTRL 0x14c 41#define DM81XX_CM_ALWON_UART_0_CLKCTRL 0x150 42#define DM81XX_CM_ALWON_UART_1_CLKCTRL 0x154 43#define DM81XX_CM_ALWON_UART_2_CLKCTRL 0x158 44#define DM81XX_CM_ALWON_GPIO_0_CLKCTRL 0x15c 45#define DM81XX_CM_ALWON_GPIO_1_CLKCTRL 0x160 46#define DM81XX_CM_ALWON_I2C_0_CLKCTRL 0x164 47#define DM81XX_CM_ALWON_I2C_1_CLKCTRL 0x168 48#define DM81XX_CM_ALWON_WDTIMER_CLKCTRL 0x18c 49#define DM81XX_CM_ALWON_SPI_CLKCTRL 0x190 50#define DM81XX_CM_ALWON_MAILBOX_CLKCTRL 0x194 51#define DM81XX_CM_ALWON_SPINBOX_CLKCTRL 0x198 52#define DM81XX_CM_ALWON_MMUDATA_CLKCTRL 0x19c 53#define DM81XX_CM_ALWON_MMUCFG_CLKCTRL 0x1a8 54#define DM81XX_CM_ALWON_CONTROL_CLKCTRL 0x1c4 55#define DM81XX_CM_ALWON_GPMC_CLKCTRL 0x1d0 56#define DM81XX_CM_ALWON_ETHERNET_0_CLKCTRL 0x1d4 57#define DM81XX_CM_ALWON_L3_CLKCTRL 0x1e4 58#define DM81XX_CM_ALWON_L4HS_CLKCTRL 0x1e8 59#define DM81XX_CM_ALWON_L4LS_CLKCTRL 0x1ec 60#define DM81XX_CM_ALWON_RTC_CLKCTRL 0x1f0 61#define DM81XX_CM_ALWON_TPCC_CLKCTRL 0x1f4 62#define DM81XX_CM_ALWON_TPTC0_CLKCTRL 0x1f8 63#define DM81XX_CM_ALWON_TPTC1_CLKCTRL 0x1fc 64#define DM81XX_CM_ALWON_TPTC2_CLKCTRL 0x200 65#define DM81XX_CM_ALWON_TPTC3_CLKCTRL 0x204 66 67/* Registers specific to dm814x */ 68#define DM814X_CM_ALWON_MCASP_3_4_5_CLKCTRL 0x16c 69#define DM814X_CM_ALWON_ATL_CLKCTRL 0x170 70#define DM814X_CM_ALWON_MLB_CLKCTRL 0x174 71#define DM814X_CM_ALWON_PATA_CLKCTRL 0x178 72#define DM814X_CM_ALWON_UART_3_CLKCTRL 0x180 73#define DM814X_CM_ALWON_UART_4_CLKCTRL 0x184 74#define DM814X_CM_ALWON_UART_5_CLKCTRL 0x188 75#define DM814X_CM_ALWON_OCM_0_CLKCTRL 0x1b4 76#define DM814X_CM_ALWON_VCP_CLKCTRL 0x1b8 77#define DM814X_CM_ALWON_MPU_CLKCTRL 0x1dc 78#define DM814X_CM_ALWON_DEBUGSS_CLKCTRL 0x1e0 79#define DM814X_CM_ALWON_DCAN_0_1_CLKCTRL 0x218 80#define DM814X_CM_ALWON_MMCHS_0_CLKCTRL 0x21c 81#define DM814X_CM_ALWON_MMCHS_1_CLKCTRL 0x220 82#define DM814X_CM_ALWON_MMCHS_2_CLKCTRL 0x224 83#define DM814X_CM_ALWON_CUST_EFUSE_CLKCTRL 0x228 84 85/* Registers specific to dm816x */ 86#define DM816X_DM_ALWON_BASE 0x1400 87#define DM816X_CM_ALWON_TIMER_1_CLKCTRL (0x1570 - DM816X_DM_ALWON_BASE) 88#define DM816X_CM_ALWON_TIMER_2_CLKCTRL (0x1574 - DM816X_DM_ALWON_BASE) 89#define DM816X_CM_ALWON_TIMER_3_CLKCTRL (0x1578 - DM816X_DM_ALWON_BASE) 90#define DM816X_CM_ALWON_TIMER_4_CLKCTRL (0x157c - DM816X_DM_ALWON_BASE) 91#define DM816X_CM_ALWON_TIMER_5_CLKCTRL (0x1580 - DM816X_DM_ALWON_BASE) 92#define DM816X_CM_ALWON_TIMER_6_CLKCTRL (0x1584 - DM816X_DM_ALWON_BASE) 93#define DM816X_CM_ALWON_TIMER_7_CLKCTRL (0x1588 - DM816X_DM_ALWON_BASE) 94#define DM816X_CM_ALWON_SDIO_CLKCTRL (0x15b0 - DM816X_DM_ALWON_BASE) 95#define DM816X_CM_ALWON_OCMC_0_CLKCTRL (0x15b4 - DM816X_DM_ALWON_BASE) 96#define DM816X_CM_ALWON_OCMC_1_CLKCTRL (0x15b8 - DM816X_DM_ALWON_BASE) 97#define DM816X_CM_ALWON_ETHERNET_1_CLKCTRL (0x15d8 - DM816X_DM_ALWON_BASE) 98#define DM816X_CM_ALWON_MPU_CLKCTRL (0x15dc - DM816X_DM_ALWON_BASE) 99#define DM816X_CM_ALWON_SR_0_CLKCTRL (0x1608 - DM816X_DM_ALWON_BASE) 100#define DM816X_CM_ALWON_SR_1_CLKCTRL (0x160c - DM816X_DM_ALWON_BASE) 101 102/* 103 * The default .clkctrl_offs field is offset from CM_DEFAULT, that's 104 * TRM 18.7.6 CM_DEFAULT device register values minus 0x500 105 */ 106#define DM81XX_CM_DEFAULT_OFFSET 0x500 107#define DM81XX_CM_DEFAULT_USB_CLKCTRL (0x558 - DM81XX_CM_DEFAULT_OFFSET) 108#define DM81XX_CM_DEFAULT_SATA_CLKCTRL (0x560 - DM81XX_CM_DEFAULT_OFFSET) 109 110/* L3 Interconnect entries clocked at 125, 250 and 500MHz */ 111static 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 118static 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 125static 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/* 133 * L4 standard peripherals, see TRM table 1-12 for devices using this. 134 * See TRM table 1-73 for devices using the 125MHz SYSCLK6 clock. 135 */ 136static struct omap_hwmod dm81xx_l4_ls_hwmod = { 137 .name = "l4_ls", 138 .clkdm_name = "alwon_l3s_clkdm", 139 .class = &l4_hwmod_class, 140 .flags = HWMOD_NO_IDLEST, 141}; 142 143/* 144 * L4 high-speed peripherals. For devices using this, please see the TRM 145 * table 1-13. On dm816x, only EMAC, MDIO and SATA use this. See also TRM 146 * table 1-73 for devices using 250MHz SYSCLK5 clock. 147 */ 148static struct omap_hwmod dm81xx_l4_hs_hwmod = { 149 .name = "l4_hs", 150 .clkdm_name = "alwon_l3_med_clkdm", 151 .class = &l4_hwmod_class, 152 .flags = HWMOD_NO_IDLEST, 153}; 154 155/* L3 slow -> L4 ls peripheral interface running at 125MHz */ 156static struct omap_hwmod_ocp_if dm81xx_alwon_l3_slow__l4_ls = { 157 .master = &dm81xx_alwon_l3_slow_hwmod, 158 .slave = &dm81xx_l4_ls_hwmod, 159 .user = OCP_USER_MPU, 160}; 161 162/* L3 med -> L4 fast peripheral interface running at 250MHz */ 163static struct omap_hwmod_ocp_if dm81xx_alwon_l3_slow__l4_hs = { 164 .master = &dm81xx_alwon_l3_med_hwmod, 165 .slave = &dm81xx_l4_hs_hwmod, 166 .user = OCP_USER_MPU, 167}; 168 169/* MPU */ 170static struct omap_hwmod dm814x_mpu_hwmod = { 171 .name = "mpu", 172 .clkdm_name = "alwon_l3s_clkdm", 173 .class = &mpu_hwmod_class, 174 .flags = HWMOD_INIT_NO_IDLE, 175 .main_clk = "mpu_ck", 176 .prcm = { 177 .omap4 = { 178 .clkctrl_offs = DM814X_CM_ALWON_MPU_CLKCTRL, 179 .modulemode = MODULEMODE_SWCTRL, 180 }, 181 }, 182}; 183 184static struct omap_hwmod_ocp_if dm814x_mpu__alwon_l3_slow = { 185 .master = &dm814x_mpu_hwmod, 186 .slave = &dm81xx_alwon_l3_slow_hwmod, 187 .user = OCP_USER_MPU, 188}; 189 190/* L3 med peripheral interface running at 200MHz */ 191static struct omap_hwmod_ocp_if dm814x_mpu__alwon_l3_med = { 192 .master = &dm814x_mpu_hwmod, 193 .slave = &dm81xx_alwon_l3_med_hwmod, 194 .user = OCP_USER_MPU, 195}; 196 197static struct omap_hwmod dm816x_mpu_hwmod = { 198 .name = "mpu", 199 .clkdm_name = "alwon_mpu_clkdm", 200 .class = &mpu_hwmod_class, 201 .flags = HWMOD_INIT_NO_IDLE, 202 .main_clk = "mpu_ck", 203 .prcm = { 204 .omap4 = { 205 .clkctrl_offs = DM816X_CM_ALWON_MPU_CLKCTRL, 206 .modulemode = MODULEMODE_SWCTRL, 207 }, 208 }, 209}; 210 211static struct omap_hwmod_ocp_if dm816x_mpu__alwon_l3_slow = { 212 .master = &dm816x_mpu_hwmod, 213 .slave = &dm81xx_alwon_l3_slow_hwmod, 214 .user = OCP_USER_MPU, 215}; 216 217/* L3 med peripheral interface running at 250MHz */ 218static struct omap_hwmod_ocp_if dm816x_mpu__alwon_l3_med = { 219 .master = &dm816x_mpu_hwmod, 220 .slave = &dm81xx_alwon_l3_med_hwmod, 221 .user = OCP_USER_MPU, 222}; 223 224/* RTC */ 225static struct omap_hwmod_class_sysconfig ti81xx_rtc_sysc = { 226 .rev_offs = 0x74, 227 .sysc_offs = 0x78, 228 .sysc_flags = SYSC_HAS_SIDLEMODE, 229 .idlemodes = SIDLE_FORCE | SIDLE_NO | 230 SIDLE_SMART | SIDLE_SMART_WKUP, 231 .sysc_fields = &omap_hwmod_sysc_type3, 232}; 233 234static struct omap_hwmod_class ti81xx_rtc_hwmod_class = { 235 .name = "rtc", 236 .sysc = &ti81xx_rtc_sysc, 237}; 238 239static struct omap_hwmod ti81xx_rtc_hwmod = { 240 .name = "rtc", 241 .class = &ti81xx_rtc_hwmod_class, 242 .clkdm_name = "alwon_l3s_clkdm", 243 .flags = HWMOD_NO_IDLEST, 244 .main_clk = "sysclk18_ck", 245 .prcm = { 246 .omap4 = { 247 .clkctrl_offs = DM81XX_CM_ALWON_RTC_CLKCTRL, 248 .modulemode = MODULEMODE_SWCTRL, 249 }, 250 }, 251}; 252 253static struct omap_hwmod_ocp_if ti81xx_l4_ls__rtc = { 254 .master = &dm81xx_l4_ls_hwmod, 255 .slave = &ti81xx_rtc_hwmod, 256 .clk = "sysclk6_ck", 257 .user = OCP_USER_MPU, 258}; 259 260/* UART common */ 261static struct omap_hwmod_class_sysconfig uart_sysc = { 262 .rev_offs = 0x50, 263 .sysc_offs = 0x54, 264 .syss_offs = 0x58, 265 .sysc_flags = SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE | 266 SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE | 267 SYSS_HAS_RESET_STATUS, 268 .idlemodes = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART | 269 MSTANDBY_SMART_WKUP, 270 .sysc_fields = &omap_hwmod_sysc_type1, 271}; 272 273static struct omap_hwmod_class uart_class = { 274 .name = "uart", 275 .sysc = &uart_sysc, 276}; 277 278static struct omap_hwmod dm81xx_uart1_hwmod = { 279 .name = "uart1", 280 .clkdm_name = "alwon_l3s_clkdm", 281 .main_clk = "sysclk10_ck", 282 .prcm = { 283 .omap4 = { 284 .clkctrl_offs = DM81XX_CM_ALWON_UART_0_CLKCTRL, 285 .modulemode = MODULEMODE_SWCTRL, 286 }, 287 }, 288 .class = &uart_class, 289 .flags = DEBUG_TI81XXUART1_FLAGS, 290}; 291 292static struct omap_hwmod_ocp_if dm81xx_l4_ls__uart1 = { 293 .master = &dm81xx_l4_ls_hwmod, 294 .slave = &dm81xx_uart1_hwmod, 295 .clk = "sysclk6_ck", 296 .user = OCP_USER_MPU, 297}; 298 299static struct omap_hwmod dm81xx_uart2_hwmod = { 300 .name = "uart2", 301 .clkdm_name = "alwon_l3s_clkdm", 302 .main_clk = "sysclk10_ck", 303 .prcm = { 304 .omap4 = { 305 .clkctrl_offs = DM81XX_CM_ALWON_UART_1_CLKCTRL, 306 .modulemode = MODULEMODE_SWCTRL, 307 }, 308 }, 309 .class = &uart_class, 310 .flags = DEBUG_TI81XXUART2_FLAGS, 311}; 312 313static struct omap_hwmod_ocp_if dm81xx_l4_ls__uart2 = { 314 .master = &dm81xx_l4_ls_hwmod, 315 .slave = &dm81xx_uart2_hwmod, 316 .clk = "sysclk6_ck", 317 .user = OCP_USER_MPU, 318}; 319 320static struct omap_hwmod dm81xx_uart3_hwmod = { 321 .name = "uart3", 322 .clkdm_name = "alwon_l3s_clkdm", 323 .main_clk = "sysclk10_ck", 324 .prcm = { 325 .omap4 = { 326 .clkctrl_offs = DM81XX_CM_ALWON_UART_2_CLKCTRL, 327 .modulemode = MODULEMODE_SWCTRL, 328 }, 329 }, 330 .class = &uart_class, 331 .flags = DEBUG_TI81XXUART3_FLAGS, 332}; 333 334static struct omap_hwmod_ocp_if dm81xx_l4_ls__uart3 = { 335 .master = &dm81xx_l4_ls_hwmod, 336 .slave = &dm81xx_uart3_hwmod, 337 .clk = "sysclk6_ck", 338 .user = OCP_USER_MPU, 339}; 340 341static struct omap_hwmod_class_sysconfig wd_timer_sysc = { 342 .rev_offs = 0x0, 343 .sysc_offs = 0x10, 344 .syss_offs = 0x14, 345 .sysc_flags = SYSC_HAS_EMUFREE | SYSC_HAS_SOFTRESET | 346 SYSS_HAS_RESET_STATUS, 347 .sysc_fields = &omap_hwmod_sysc_type1, 348}; 349 350static struct omap_hwmod_class wd_timer_class = { 351 .name = "wd_timer", 352 .sysc = &wd_timer_sysc, 353 .pre_shutdown = &omap2_wd_timer_disable, 354 .reset = &omap2_wd_timer_reset, 355}; 356 357static struct omap_hwmod dm81xx_wd_timer_hwmod = { 358 .name = "wd_timer", 359 .clkdm_name = "alwon_l3s_clkdm", 360 .main_clk = "sysclk18_ck", 361 .flags = HWMOD_NO_IDLEST, 362 .prcm = { 363 .omap4 = { 364 .clkctrl_offs = DM81XX_CM_ALWON_WDTIMER_CLKCTRL, 365 .modulemode = MODULEMODE_SWCTRL, 366 }, 367 }, 368 .class = &wd_timer_class, 369}; 370 371static struct omap_hwmod_ocp_if dm81xx_l4_ls__wd_timer1 = { 372 .master = &dm81xx_l4_ls_hwmod, 373 .slave = &dm81xx_wd_timer_hwmod, 374 .clk = "sysclk6_ck", 375 .user = OCP_USER_MPU, 376}; 377 378/* I2C common */ 379static struct omap_hwmod_class_sysconfig i2c_sysc = { 380 .rev_offs = 0x0, 381 .sysc_offs = 0x10, 382 .syss_offs = 0x90, 383 .sysc_flags = SYSC_HAS_SIDLEMODE | 384 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET | 385 SYSC_HAS_AUTOIDLE, 386 .idlemodes = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART, 387 .sysc_fields = &omap_hwmod_sysc_type1, 388}; 389 390static struct omap_hwmod_class i2c_class = { 391 .name = "i2c", 392 .sysc = &i2c_sysc, 393}; 394 395static struct omap_hwmod dm81xx_i2c1_hwmod = { 396 .name = "i2c1", 397 .clkdm_name = "alwon_l3s_clkdm", 398 .main_clk = "sysclk10_ck", 399 .prcm = { 400 .omap4 = { 401 .clkctrl_offs = DM81XX_CM_ALWON_I2C_0_CLKCTRL, 402 .modulemode = MODULEMODE_SWCTRL, 403 }, 404 }, 405 .class = &i2c_class, 406}; 407 408static struct omap_hwmod_ocp_if dm81xx_l4_ls__i2c1 = { 409 .master = &dm81xx_l4_ls_hwmod, 410 .slave = &dm81xx_i2c1_hwmod, 411 .clk = "sysclk6_ck", 412 .user = OCP_USER_MPU, 413}; 414 415static struct omap_hwmod dm81xx_i2c2_hwmod = { 416 .name = "i2c2", 417 .clkdm_name = "alwon_l3s_clkdm", 418 .main_clk = "sysclk10_ck", 419 .prcm = { 420 .omap4 = { 421 .clkctrl_offs = DM81XX_CM_ALWON_I2C_1_CLKCTRL, 422 .modulemode = MODULEMODE_SWCTRL, 423 }, 424 }, 425 .class = &i2c_class, 426}; 427 428static struct omap_hwmod_ocp_if dm81xx_l4_ls__i2c2 = { 429 .master = &dm81xx_l4_ls_hwmod, 430 .slave = &dm81xx_i2c2_hwmod, 431 .clk = "sysclk6_ck", 432 .user = OCP_USER_MPU, 433}; 434 435static struct omap_hwmod_class_sysconfig dm81xx_elm_sysc = { 436 .rev_offs = 0x0000, 437 .sysc_offs = 0x0010, 438 .syss_offs = 0x0014, 439 .sysc_flags = SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE | 440 SYSC_HAS_SOFTRESET | 441 SYSS_HAS_RESET_STATUS, 442 .idlemodes = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART, 443 .sysc_fields = &omap_hwmod_sysc_type1, 444}; 445 446static struct omap_hwmod_class dm81xx_elm_hwmod_class = { 447 .name = "elm", 448 .sysc = &dm81xx_elm_sysc, 449}; 450 451static struct omap_hwmod dm81xx_elm_hwmod = { 452 .name = "elm", 453 .clkdm_name = "alwon_l3s_clkdm", 454 .class = &dm81xx_elm_hwmod_class, 455 .main_clk = "sysclk6_ck", 456}; 457 458static struct omap_hwmod_ocp_if dm81xx_l4_ls__elm = { 459 .master = &dm81xx_l4_ls_hwmod, 460 .slave = &dm81xx_elm_hwmod, 461 .clk = "sysclk6_ck", 462 .user = OCP_USER_MPU, 463}; 464 465static struct omap_hwmod_class_sysconfig dm81xx_gpio_sysc = { 466 .rev_offs = 0x0000, 467 .sysc_offs = 0x0010, 468 .syss_offs = 0x0114, 469 .sysc_flags = SYSC_HAS_AUTOIDLE | SYSC_HAS_ENAWAKEUP | 470 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET | 471 SYSS_HAS_RESET_STATUS, 472 .idlemodes = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART | 473 SIDLE_SMART_WKUP, 474 .sysc_fields = &omap_hwmod_sysc_type1, 475}; 476 477static struct omap_hwmod_class dm81xx_gpio_hwmod_class = { 478 .name = "gpio", 479 .sysc = &dm81xx_gpio_sysc, 480}; 481 482static struct omap_hwmod_opt_clk gpio1_opt_clks[] = { 483 { .role = "dbclk", .clk = "sysclk18_ck" }, 484}; 485 486static struct omap_hwmod dm81xx_gpio1_hwmod = { 487 .name = "gpio1", 488 .clkdm_name = "alwon_l3s_clkdm", 489 .class = &dm81xx_gpio_hwmod_class, 490 .main_clk = "sysclk6_ck", 491 .prcm = { 492 .omap4 = { 493 .clkctrl_offs = DM81XX_CM_ALWON_GPIO_0_CLKCTRL, 494 .modulemode = MODULEMODE_SWCTRL, 495 }, 496 }, 497 .opt_clks = gpio1_opt_clks, 498 .opt_clks_cnt = ARRAY_SIZE(gpio1_opt_clks), 499}; 500 501static struct omap_hwmod_ocp_if dm81xx_l4_ls__gpio1 = { 502 .master = &dm81xx_l4_ls_hwmod, 503 .slave = &dm81xx_gpio1_hwmod, 504 .clk = "sysclk6_ck", 505 .user = OCP_USER_MPU, 506}; 507 508static struct omap_hwmod_opt_clk gpio2_opt_clks[] = { 509 { .role = "dbclk", .clk = "sysclk18_ck" }, 510}; 511 512static struct omap_hwmod dm81xx_gpio2_hwmod = { 513 .name = "gpio2", 514 .clkdm_name = "alwon_l3s_clkdm", 515 .class = &dm81xx_gpio_hwmod_class, 516 .main_clk = "sysclk6_ck", 517 .prcm = { 518 .omap4 = { 519 .clkctrl_offs = DM81XX_CM_ALWON_GPIO_1_CLKCTRL, 520 .modulemode = MODULEMODE_SWCTRL, 521 }, 522 }, 523 .opt_clks = gpio2_opt_clks, 524 .opt_clks_cnt = ARRAY_SIZE(gpio2_opt_clks), 525}; 526 527static struct omap_hwmod_ocp_if dm81xx_l4_ls__gpio2 = { 528 .master = &dm81xx_l4_ls_hwmod, 529 .slave = &dm81xx_gpio2_hwmod, 530 .clk = "sysclk6_ck", 531 .user = OCP_USER_MPU, 532}; 533 534static struct omap_hwmod_opt_clk gpio3_opt_clks[] = { 535 { .role = "dbclk", .clk = "sysclk18_ck" }, 536}; 537 538static struct omap_hwmod dm81xx_gpio3_hwmod = { 539 .name = "gpio3", 540 .clkdm_name = "alwon_l3s_clkdm", 541 .class = &dm81xx_gpio_hwmod_class, 542 .main_clk = "sysclk6_ck", 543 .prcm = { 544 .omap4 = { 545 .clkctrl_offs = DM81XX_CM_ALWON_GPIO_1_CLKCTRL, 546 .modulemode = MODULEMODE_SWCTRL, 547 }, 548 }, 549 .opt_clks = gpio3_opt_clks, 550 .opt_clks_cnt = ARRAY_SIZE(gpio3_opt_clks), 551}; 552 553static struct omap_hwmod_ocp_if dm81xx_l4_ls__gpio3 = { 554 .master = &dm81xx_l4_ls_hwmod, 555 .slave = &dm81xx_gpio3_hwmod, 556 .clk = "sysclk6_ck", 557 .user = OCP_USER_MPU, 558}; 559 560static struct omap_hwmod_opt_clk gpio4_opt_clks[] = { 561 { .role = "dbclk", .clk = "sysclk18_ck" }, 562}; 563 564static struct omap_hwmod dm81xx_gpio4_hwmod = { 565 .name = "gpio4", 566 .clkdm_name = "alwon_l3s_clkdm", 567 .class = &dm81xx_gpio_hwmod_class, 568 .main_clk = "sysclk6_ck", 569 .prcm = { 570 .omap4 = { 571 .clkctrl_offs = DM81XX_CM_ALWON_GPIO_1_CLKCTRL, 572 .modulemode = MODULEMODE_SWCTRL, 573 }, 574 }, 575 .opt_clks = gpio4_opt_clks, 576 .opt_clks_cnt = ARRAY_SIZE(gpio4_opt_clks), 577}; 578 579static struct omap_hwmod_ocp_if dm81xx_l4_ls__gpio4 = { 580 .master = &dm81xx_l4_ls_hwmod, 581 .slave = &dm81xx_gpio4_hwmod, 582 .clk = "sysclk6_ck", 583 .user = OCP_USER_MPU, 584}; 585 586static struct omap_hwmod_class_sysconfig dm81xx_gpmc_sysc = { 587 .rev_offs = 0x0, 588 .sysc_offs = 0x10, 589 .syss_offs = 0x14, 590 .sysc_flags = SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET | 591 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS, 592 .idlemodes = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART, 593 .sysc_fields = &omap_hwmod_sysc_type1, 594}; 595 596static struct omap_hwmod_class dm81xx_gpmc_hwmod_class = { 597 .name = "gpmc", 598 .sysc = &dm81xx_gpmc_sysc, 599}; 600 601static struct omap_hwmod dm81xx_gpmc_hwmod = { 602 .name = "gpmc", 603 .clkdm_name = "alwon_l3s_clkdm", 604 .class = &dm81xx_gpmc_hwmod_class, 605 .main_clk = "sysclk6_ck", 606 /* Skip reset for CONFIG_OMAP_GPMC_DEBUG for bootloader timings */ 607 .flags = DEBUG_OMAP_GPMC_HWMOD_FLAGS, 608 .prcm = { 609 .omap4 = { 610 .clkctrl_offs = DM81XX_CM_ALWON_GPMC_CLKCTRL, 611 .modulemode = MODULEMODE_SWCTRL, 612 }, 613 }, 614}; 615 616static struct omap_hwmod_ocp_if dm81xx_alwon_l3_slow__gpmc = { 617 .master = &dm81xx_alwon_l3_slow_hwmod, 618 .slave = &dm81xx_gpmc_hwmod, 619 .user = OCP_USER_MPU, 620}; 621 622/* USB needs udelay 1 after reset at least on hp t410, use 2 for margin */ 623static struct omap_hwmod_class_sysconfig dm81xx_usbhsotg_sysc = { 624 .rev_offs = 0x0, 625 .sysc_offs = 0x10, 626 .srst_udelay = 2, 627 .sysc_flags = SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE | 628 SYSC_HAS_SOFTRESET, 629 .idlemodes = SIDLE_SMART | MSTANDBY_FORCE | MSTANDBY_SMART, 630 .sysc_fields = &omap_hwmod_sysc_type2, 631}; 632 633static struct omap_hwmod_class dm81xx_usbotg_class = { 634 .name = "usbotg", 635 .sysc = &dm81xx_usbhsotg_sysc, 636}; 637 638static struct omap_hwmod dm814x_usbss_hwmod = { 639 .name = "usb_otg_hs", 640 .clkdm_name = "default_l3_slow_clkdm", 641 .main_clk = "pll260dcoclkldo", /* 481c5260.adpll.dcoclkldo */ 642 .prcm = { 643 .omap4 = { 644 .clkctrl_offs = DM81XX_CM_DEFAULT_USB_CLKCTRL, 645 .modulemode = MODULEMODE_SWCTRL, 646 }, 647 }, 648 .class = &dm81xx_usbotg_class, 649}; 650 651static struct omap_hwmod_ocp_if dm814x_default_l3_slow__usbss = { 652 .master = &dm81xx_default_l3_slow_hwmod, 653 .slave = &dm814x_usbss_hwmod, 654 .clk = "sysclk6_ck", 655 .user = OCP_USER_MPU, 656}; 657 658static struct omap_hwmod dm816x_usbss_hwmod = { 659 .name = "usb_otg_hs", 660 .clkdm_name = "default_l3_slow_clkdm", 661 .main_clk = "sysclk6_ck", 662 .prcm = { 663 .omap4 = { 664 .clkctrl_offs = DM81XX_CM_DEFAULT_USB_CLKCTRL, 665 .modulemode = MODULEMODE_SWCTRL, 666 }, 667 }, 668 .class = &dm81xx_usbotg_class, 669}; 670 671static struct omap_hwmod_ocp_if dm816x_default_l3_slow__usbss = { 672 .master = &dm81xx_default_l3_slow_hwmod, 673 .slave = &dm816x_usbss_hwmod, 674 .clk = "sysclk6_ck", 675 .user = OCP_USER_MPU, 676}; 677 678static struct omap_hwmod_class_sysconfig dm816x_timer_sysc = { 679 .rev_offs = 0x0000, 680 .sysc_offs = 0x0010, 681 .syss_offs = 0x0014, 682 .sysc_flags = SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET, 683 .idlemodes = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART | 684 SIDLE_SMART_WKUP, 685 .sysc_fields = &omap_hwmod_sysc_type2, 686}; 687 688static struct omap_hwmod_class dm816x_timer_hwmod_class = { 689 .name = "timer", 690 .sysc = &dm816x_timer_sysc, 691}; 692 693static struct omap_hwmod dm816x_timer3_hwmod = { 694 .name = "timer3", 695 .clkdm_name = "alwon_l3s_clkdm", 696 .main_clk = "timer3_fck", 697 .prcm = { 698 .omap4 = { 699 .clkctrl_offs = DM816X_CM_ALWON_TIMER_3_CLKCTRL, 700 .modulemode = MODULEMODE_SWCTRL, 701 }, 702 }, 703 .class = &dm816x_timer_hwmod_class, 704}; 705 706static struct omap_hwmod_ocp_if dm816x_l4_ls__timer3 = { 707 .master = &dm81xx_l4_ls_hwmod, 708 .slave = &dm816x_timer3_hwmod, 709 .clk = "sysclk6_ck", 710 .user = OCP_USER_MPU, 711}; 712 713static struct omap_hwmod dm816x_timer4_hwmod = { 714 .name = "timer4", 715 .clkdm_name = "alwon_l3s_clkdm", 716 .main_clk = "timer4_fck", 717 .prcm = { 718 .omap4 = { 719 .clkctrl_offs = DM816X_CM_ALWON_TIMER_4_CLKCTRL, 720 .modulemode = MODULEMODE_SWCTRL, 721 }, 722 }, 723 .class = &dm816x_timer_hwmod_class, 724}; 725 726static struct omap_hwmod_ocp_if dm816x_l4_ls__timer4 = { 727 .master = &dm81xx_l4_ls_hwmod, 728 .slave = &dm816x_timer4_hwmod, 729 .clk = "sysclk6_ck", 730 .user = OCP_USER_MPU, 731}; 732 733static struct omap_hwmod dm816x_timer5_hwmod = { 734 .name = "timer5", 735 .clkdm_name = "alwon_l3s_clkdm", 736 .main_clk = "timer5_fck", 737 .prcm = { 738 .omap4 = { 739 .clkctrl_offs = DM816X_CM_ALWON_TIMER_5_CLKCTRL, 740 .modulemode = MODULEMODE_SWCTRL, 741 }, 742 }, 743 .class = &dm816x_timer_hwmod_class, 744}; 745 746static struct omap_hwmod_ocp_if dm816x_l4_ls__timer5 = { 747 .master = &dm81xx_l4_ls_hwmod, 748 .slave = &dm816x_timer5_hwmod, 749 .clk = "sysclk6_ck", 750 .user = OCP_USER_MPU, 751}; 752 753static struct omap_hwmod dm816x_timer6_hwmod = { 754 .name = "timer6", 755 .clkdm_name = "alwon_l3s_clkdm", 756 .main_clk = "timer6_fck", 757 .prcm = { 758 .omap4 = { 759 .clkctrl_offs = DM816X_CM_ALWON_TIMER_6_CLKCTRL, 760 .modulemode = MODULEMODE_SWCTRL, 761 }, 762 }, 763 .class = &dm816x_timer_hwmod_class, 764}; 765 766static struct omap_hwmod_ocp_if dm816x_l4_ls__timer6 = { 767 .master = &dm81xx_l4_ls_hwmod, 768 .slave = &dm816x_timer6_hwmod, 769 .clk = "sysclk6_ck", 770 .user = OCP_USER_MPU, 771}; 772 773static struct omap_hwmod dm816x_timer7_hwmod = { 774 .name = "timer7", 775 .clkdm_name = "alwon_l3s_clkdm", 776 .main_clk = "timer7_fck", 777 .prcm = { 778 .omap4 = { 779 .clkctrl_offs = DM816X_CM_ALWON_TIMER_7_CLKCTRL, 780 .modulemode = MODULEMODE_SWCTRL, 781 }, 782 }, 783 .class = &dm816x_timer_hwmod_class, 784}; 785 786static struct omap_hwmod_ocp_if dm816x_l4_ls__timer7 = { 787 .master = &dm81xx_l4_ls_hwmod, 788 .slave = &dm816x_timer7_hwmod, 789 .clk = "sysclk6_ck", 790 .user = OCP_USER_MPU, 791}; 792 793/* EMAC Ethernet */ 794static struct omap_hwmod_class_sysconfig dm816x_emac_sysc = { 795 .rev_offs = 0x0, 796 .sysc_offs = 0x4, 797 .sysc_flags = SYSC_HAS_SOFTRESET, 798 .sysc_fields = &omap_hwmod_sysc_type2, 799}; 800 801static struct omap_hwmod_class dm816x_emac_hwmod_class = { 802 .name = "emac", 803 .sysc = &dm816x_emac_sysc, 804}; 805 806/* 807 * On dm816x the MDIO is within EMAC0. As the MDIO driver is a separate 808 * driver probed before EMAC0, we let MDIO do the clock idling. 809 */ 810static struct omap_hwmod dm816x_emac0_hwmod = { 811 .name = "emac0", 812 .clkdm_name = "alwon_ethernet_clkdm", 813 .class = &dm816x_emac_hwmod_class, 814 .flags = HWMOD_NO_IDLEST, 815}; 816 817static struct omap_hwmod_ocp_if dm81xx_l4_hs__emac0 = { 818 .master = &dm81xx_l4_hs_hwmod, 819 .slave = &dm816x_emac0_hwmod, 820 .clk = "sysclk5_ck", 821 .user = OCP_USER_MPU, 822}; 823 824static struct omap_hwmod_class dm81xx_mdio_hwmod_class = { 825 .name = "davinci_mdio", 826 .sysc = &dm816x_emac_sysc, 827}; 828 829static struct omap_hwmod dm81xx_emac0_mdio_hwmod = { 830 .name = "davinci_mdio", 831 .class = &dm81xx_mdio_hwmod_class, 832 .clkdm_name = "alwon_ethernet_clkdm", 833 .main_clk = "sysclk24_ck", 834 .flags = HWMOD_NO_IDLEST, 835 /* 836 * REVISIT: This should be moved to the emac0_hwmod 837 * once we have a better way to handle device slaves. 838 */ 839 .prcm = { 840 .omap4 = { 841 .clkctrl_offs = DM81XX_CM_ALWON_ETHERNET_0_CLKCTRL, 842 .modulemode = MODULEMODE_SWCTRL, 843 }, 844 }, 845}; 846 847static struct omap_hwmod_ocp_if dm81xx_emac0__mdio = { 848 .master = &dm81xx_l4_hs_hwmod, 849 .slave = &dm81xx_emac0_mdio_hwmod, 850 .user = OCP_USER_MPU, 851}; 852 853static struct omap_hwmod dm816x_emac1_hwmod = { 854 .name = "emac1", 855 .clkdm_name = "alwon_ethernet_clkdm", 856 .main_clk = "sysclk24_ck", 857 .flags = HWMOD_NO_IDLEST, 858 .prcm = { 859 .omap4 = { 860 .clkctrl_offs = DM816X_CM_ALWON_ETHERNET_1_CLKCTRL, 861 .modulemode = MODULEMODE_SWCTRL, 862 }, 863 }, 864 .class = &dm816x_emac_hwmod_class, 865}; 866 867static struct omap_hwmod_ocp_if dm816x_l4_hs__emac1 = { 868 .master = &dm81xx_l4_hs_hwmod, 869 .slave = &dm816x_emac1_hwmod, 870 .clk = "sysclk5_ck", 871 .user = OCP_USER_MPU, 872}; 873 874static struct omap_hwmod_class_sysconfig dm81xx_sata_sysc = { 875 .rev_offs = 0x00fc, 876 .sysc_offs = 0x1100, 877 .sysc_flags = SYSC_HAS_SIDLEMODE, 878 .idlemodes = SIDLE_FORCE, 879 .sysc_fields = &omap_hwmod_sysc_type3, 880}; 881 882static struct omap_hwmod_class dm81xx_sata_hwmod_class = { 883 .name = "sata", 884 .sysc = &dm81xx_sata_sysc, 885}; 886 887static struct omap_hwmod dm81xx_sata_hwmod = { 888 .name = "sata", 889 .clkdm_name = "default_clkdm", 890 .flags = HWMOD_NO_IDLEST, 891 .prcm = { 892 .omap4 = { 893 .clkctrl_offs = DM81XX_CM_DEFAULT_SATA_CLKCTRL, 894 .modulemode = MODULEMODE_SWCTRL, 895 }, 896 }, 897 .class = &dm81xx_sata_hwmod_class, 898}; 899 900static struct omap_hwmod_ocp_if dm81xx_l4_hs__sata = { 901 .master = &dm81xx_l4_hs_hwmod, 902 .slave = &dm81xx_sata_hwmod, 903 .clk = "sysclk5_ck", 904 .user = OCP_USER_MPU, 905}; 906 907static struct omap_hwmod_class_sysconfig dm81xx_mmc_sysc = { 908 .rev_offs = 0x0, 909 .sysc_offs = 0x110, 910 .syss_offs = 0x114, 911 .sysc_flags = SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE | 912 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET | 913 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS, 914 .idlemodes = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART, 915 .sysc_fields = &omap_hwmod_sysc_type1, 916}; 917 918static struct omap_hwmod_class dm81xx_mmc_class = { 919 .name = "mmc", 920 .sysc = &dm81xx_mmc_sysc, 921}; 922 923static struct omap_hwmod_opt_clk dm81xx_mmc_opt_clks[] = { 924 { .role = "dbck", .clk = "sysclk18_ck", }, 925}; 926 927static struct omap_hsmmc_dev_attr mmc_dev_attr = { 928}; 929 930static struct omap_hwmod dm814x_mmc1_hwmod = { 931 .name = "mmc1", 932 .clkdm_name = "alwon_l3s_clkdm", 933 .opt_clks = dm81xx_mmc_opt_clks, 934 .opt_clks_cnt = ARRAY_SIZE(dm81xx_mmc_opt_clks), 935 .main_clk = "sysclk8_ck", 936 .prcm = { 937 .omap4 = { 938 .clkctrl_offs = DM814X_CM_ALWON_MMCHS_0_CLKCTRL, 939 .modulemode = MODULEMODE_SWCTRL, 940 }, 941 }, 942 .dev_attr = &mmc_dev_attr, 943 .class = &dm81xx_mmc_class, 944}; 945 946static struct omap_hwmod_ocp_if dm814x_l4_ls__mmc1 = { 947 .master = &dm81xx_l4_ls_hwmod, 948 .slave = &dm814x_mmc1_hwmod, 949 .clk = "sysclk6_ck", 950 .user = OCP_USER_MPU, 951 .flags = OMAP_FIREWALL_L4 952}; 953 954static struct omap_hwmod dm814x_mmc2_hwmod = { 955 .name = "mmc2", 956 .clkdm_name = "alwon_l3s_clkdm", 957 .opt_clks = dm81xx_mmc_opt_clks, 958 .opt_clks_cnt = ARRAY_SIZE(dm81xx_mmc_opt_clks), 959 .main_clk = "sysclk8_ck", 960 .prcm = { 961 .omap4 = { 962 .clkctrl_offs = DM814X_CM_ALWON_MMCHS_1_CLKCTRL, 963 .modulemode = MODULEMODE_SWCTRL, 964 }, 965 }, 966 .dev_attr = &mmc_dev_attr, 967 .class = &dm81xx_mmc_class, 968}; 969 970static struct omap_hwmod_ocp_if dm814x_l4_ls__mmc2 = { 971 .master = &dm81xx_l4_ls_hwmod, 972 .slave = &dm814x_mmc2_hwmod, 973 .clk = "sysclk6_ck", 974 .user = OCP_USER_MPU, 975 .flags = OMAP_FIREWALL_L4 976}; 977 978static struct omap_hwmod dm814x_mmc3_hwmod = { 979 .name = "mmc3", 980 .clkdm_name = "alwon_l3_med_clkdm", 981 .opt_clks = dm81xx_mmc_opt_clks, 982 .opt_clks_cnt = ARRAY_SIZE(dm81xx_mmc_opt_clks), 983 .main_clk = "sysclk8_ck", 984 .prcm = { 985 .omap4 = { 986 .clkctrl_offs = DM814X_CM_ALWON_MMCHS_2_CLKCTRL, 987 .modulemode = MODULEMODE_SWCTRL, 988 }, 989 }, 990 .dev_attr = &mmc_dev_attr, 991 .class = &dm81xx_mmc_class, 992}; 993 994static struct omap_hwmod_ocp_if dm814x_alwon_l3_med__mmc3 = { 995 .master = &dm81xx_alwon_l3_med_hwmod, 996 .slave = &dm814x_mmc3_hwmod, 997 .clk = "sysclk4_ck", 998 .user = OCP_USER_MPU, 999}; 1000 1001static struct omap_hwmod dm816x_mmc1_hwmod = { 1002 .name = "mmc1", 1003 .clkdm_name = "alwon_l3s_clkdm", 1004 .opt_clks = dm81xx_mmc_opt_clks, 1005 .opt_clks_cnt = ARRAY_SIZE(dm81xx_mmc_opt_clks), 1006 .main_clk = "sysclk10_ck", 1007 .prcm = { 1008 .omap4 = { 1009 .clkctrl_offs = DM816X_CM_ALWON_SDIO_CLKCTRL, 1010 .modulemode = MODULEMODE_SWCTRL, 1011 }, 1012 }, 1013 .dev_attr = &mmc_dev_attr, 1014 .class = &dm81xx_mmc_class, 1015}; 1016 1017static struct omap_hwmod_ocp_if dm816x_l4_ls__mmc1 = { 1018 .master = &dm81xx_l4_ls_hwmod, 1019 .slave = &dm816x_mmc1_hwmod, 1020 .clk = "sysclk6_ck", 1021 .user = OCP_USER_MPU, 1022 .flags = OMAP_FIREWALL_L4 1023}; 1024 1025static struct omap_hwmod_class_sysconfig dm816x_mcspi_sysc = { 1026 .rev_offs = 0x0, 1027 .sysc_offs = 0x110, 1028 .syss_offs = 0x114, 1029 .sysc_flags = SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE | 1030 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET | 1031 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS, 1032 .idlemodes = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART, 1033 .sysc_fields = &omap_hwmod_sysc_type1, 1034}; 1035 1036static struct omap_hwmod_class dm816x_mcspi_class = { 1037 .name = "mcspi", 1038 .sysc = &dm816x_mcspi_sysc, 1039}; 1040 1041static struct omap_hwmod dm81xx_mcspi1_hwmod = { 1042 .name = "mcspi1", 1043 .clkdm_name = "alwon_l3s_clkdm", 1044 .main_clk = "sysclk10_ck", 1045 .prcm = { 1046 .omap4 = { 1047 .clkctrl_offs = DM81XX_CM_ALWON_SPI_CLKCTRL, 1048 .modulemode = MODULEMODE_SWCTRL, 1049 }, 1050 }, 1051 .class = &dm816x_mcspi_class, 1052}; 1053 1054static struct omap_hwmod dm81xx_mcspi2_hwmod = { 1055 .name = "mcspi2", 1056 .clkdm_name = "alwon_l3s_clkdm", 1057 .main_clk = "sysclk10_ck", 1058 .prcm = { 1059 .omap4 = { 1060 .clkctrl_offs = DM81XX_CM_ALWON_SPI_CLKCTRL, 1061 .modulemode = MODULEMODE_SWCTRL, 1062 }, 1063 }, 1064 .class = &dm816x_mcspi_class, 1065}; 1066 1067static struct omap_hwmod dm81xx_mcspi3_hwmod = { 1068 .name = "mcspi3", 1069 .clkdm_name = "alwon_l3s_clkdm", 1070 .main_clk = "sysclk10_ck", 1071 .prcm = { 1072 .omap4 = { 1073 .clkctrl_offs = DM81XX_CM_ALWON_SPI_CLKCTRL, 1074 .modulemode = MODULEMODE_SWCTRL, 1075 }, 1076 }, 1077 .class = &dm816x_mcspi_class, 1078}; 1079 1080static struct omap_hwmod dm81xx_mcspi4_hwmod = { 1081 .name = "mcspi4", 1082 .clkdm_name = "alwon_l3s_clkdm", 1083 .main_clk = "sysclk10_ck", 1084 .prcm = { 1085 .omap4 = { 1086 .clkctrl_offs = DM81XX_CM_ALWON_SPI_CLKCTRL, 1087 .modulemode = MODULEMODE_SWCTRL, 1088 }, 1089 }, 1090 .class = &dm816x_mcspi_class, 1091}; 1092 1093static struct omap_hwmod_ocp_if dm81xx_l4_ls__mcspi1 = { 1094 .master = &dm81xx_l4_ls_hwmod, 1095 .slave = &dm81xx_mcspi1_hwmod, 1096 .clk = "sysclk6_ck", 1097 .user = OCP_USER_MPU, 1098}; 1099 1100static struct omap_hwmod_ocp_if dm81xx_l4_ls__mcspi2 = { 1101 .master = &dm81xx_l4_ls_hwmod, 1102 .slave = &dm81xx_mcspi2_hwmod, 1103 .clk = "sysclk6_ck", 1104 .user = OCP_USER_MPU, 1105}; 1106 1107static struct omap_hwmod_ocp_if dm81xx_l4_ls__mcspi3 = { 1108 .master = &dm81xx_l4_ls_hwmod, 1109 .slave = &dm81xx_mcspi3_hwmod, 1110 .clk = "sysclk6_ck", 1111 .user = OCP_USER_MPU, 1112}; 1113 1114static struct omap_hwmod_ocp_if dm81xx_l4_ls__mcspi4 = { 1115 .master = &dm81xx_l4_ls_hwmod, 1116 .slave = &dm81xx_mcspi4_hwmod, 1117 .clk = "sysclk6_ck", 1118 .user = OCP_USER_MPU, 1119}; 1120 1121static struct omap_hwmod_class_sysconfig dm81xx_mailbox_sysc = { 1122 .rev_offs = 0x000, 1123 .sysc_offs = 0x010, 1124 .syss_offs = 0x014, 1125 .sysc_flags = SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE | 1126 SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE, 1127 .idlemodes = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART, 1128 .sysc_fields = &omap_hwmod_sysc_type1, 1129}; 1130 1131static struct omap_hwmod_class dm81xx_mailbox_hwmod_class = { 1132 .name = "mailbox", 1133 .sysc = &dm81xx_mailbox_sysc, 1134}; 1135 1136static struct omap_hwmod dm81xx_mailbox_hwmod = { 1137 .name = "mailbox", 1138 .clkdm_name = "alwon_l3s_clkdm", 1139 .class = &dm81xx_mailbox_hwmod_class, 1140 .main_clk = "sysclk6_ck", 1141 .prcm = { 1142 .omap4 = { 1143 .clkctrl_offs = DM81XX_CM_ALWON_MAILBOX_CLKCTRL, 1144 .modulemode = MODULEMODE_SWCTRL, 1145 }, 1146 }, 1147}; 1148 1149static struct omap_hwmod_ocp_if dm81xx_l4_ls__mailbox = { 1150 .master = &dm81xx_l4_ls_hwmod, 1151 .slave = &dm81xx_mailbox_hwmod, 1152 .clk = "sysclk6_ck", 1153 .user = OCP_USER_MPU, 1154}; 1155 1156static struct omap_hwmod_class_sysconfig dm81xx_spinbox_sysc = { 1157 .rev_offs = 0x000, 1158 .sysc_offs = 0x010, 1159 .syss_offs = 0x014, 1160 .sysc_flags = SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE | 1161 SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE, 1162 .idlemodes = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART, 1163 .sysc_fields = &omap_hwmod_sysc_type1, 1164}; 1165 1166static struct omap_hwmod_class dm81xx_spinbox_hwmod_class = { 1167 .name = "spinbox", 1168 .sysc = &dm81xx_spinbox_sysc, 1169}; 1170 1171static struct omap_hwmod dm81xx_spinbox_hwmod = { 1172 .name = "spinbox", 1173 .clkdm_name = "alwon_l3s_clkdm", 1174 .class = &dm81xx_spinbox_hwmod_class, 1175 .main_clk = "sysclk6_ck", 1176 .prcm = { 1177 .omap4 = { 1178 .clkctrl_offs = DM81XX_CM_ALWON_SPINBOX_CLKCTRL, 1179 .modulemode = MODULEMODE_SWCTRL, 1180 }, 1181 }, 1182}; 1183 1184static struct omap_hwmod_ocp_if dm81xx_l4_ls__spinbox = { 1185 .master = &dm81xx_l4_ls_hwmod, 1186 .slave = &dm81xx_spinbox_hwmod, 1187 .clk = "sysclk6_ck", 1188 .user = OCP_USER_MPU, 1189}; 1190 1191/* 1192 * REVISIT: Test and enable the following once clocks work: 1193 * dm81xx_l4_ls__mailbox 1194 * 1195 * Also note that some devices share a single clkctrl_offs.. 1196 * For example, i2c1 and 3 share one, and i2c2 and 4 share one. 1197 */ 1198static struct omap_hwmod_ocp_if *dm814x_hwmod_ocp_ifs[] __initdata = { 1199 &dm814x_mpu__alwon_l3_slow, 1200 &dm814x_mpu__alwon_l3_med, 1201 &dm81xx_alwon_l3_slow__l4_ls, 1202 &dm81xx_alwon_l3_slow__l4_hs, 1203 &dm81xx_l4_ls__uart1, 1204 &dm81xx_l4_ls__uart2, 1205 &dm81xx_l4_ls__uart3, 1206 &dm81xx_l4_ls__wd_timer1, 1207 &dm81xx_l4_ls__i2c1, 1208 &dm81xx_l4_ls__i2c2, 1209 &dm81xx_l4_ls__gpio1, 1210 &dm81xx_l4_ls__gpio2, 1211 &dm81xx_l4_ls__gpio3, 1212 &dm81xx_l4_ls__gpio4, 1213 &dm81xx_l4_ls__elm, 1214 &dm81xx_l4_ls__mcspi1, 1215 &dm81xx_l4_ls__mcspi2, 1216 &dm81xx_l4_ls__mcspi3, 1217 &dm81xx_l4_ls__mcspi4, 1218 &dm814x_l4_ls__mmc1, 1219 &dm814x_l4_ls__mmc2, 1220 &ti81xx_l4_ls__rtc, 1221 &dm81xx_alwon_l3_slow__gpmc, 1222 &dm814x_default_l3_slow__usbss, 1223 &dm814x_alwon_l3_med__mmc3, 1224 NULL, 1225}; 1226 1227int __init dm814x_hwmod_init(void) 1228{ 1229 omap_hwmod_init(); 1230 return omap_hwmod_register_links(dm814x_hwmod_ocp_ifs); 1231} 1232 1233static struct omap_hwmod_ocp_if *dm816x_hwmod_ocp_ifs[] __initdata = { 1234 &dm816x_mpu__alwon_l3_slow, 1235 &dm816x_mpu__alwon_l3_med, 1236 &dm81xx_alwon_l3_slow__l4_ls, 1237 &dm81xx_alwon_l3_slow__l4_hs, 1238 &dm81xx_l4_ls__uart1, 1239 &dm81xx_l4_ls__uart2, 1240 &dm81xx_l4_ls__uart3, 1241 &dm81xx_l4_ls__wd_timer1, 1242 &dm81xx_l4_ls__i2c1, 1243 &dm81xx_l4_ls__i2c2, 1244 &dm81xx_l4_ls__gpio1, 1245 &dm81xx_l4_ls__gpio2, 1246 &dm81xx_l4_ls__elm, 1247 &ti81xx_l4_ls__rtc, 1248 &dm816x_l4_ls__mmc1, 1249 &dm816x_l4_ls__timer3, 1250 &dm816x_l4_ls__timer4, 1251 &dm816x_l4_ls__timer5, 1252 &dm816x_l4_ls__timer6, 1253 &dm816x_l4_ls__timer7, 1254 &dm81xx_l4_ls__mcspi1, 1255 &dm81xx_l4_ls__mailbox, 1256 &dm81xx_l4_ls__spinbox, 1257 &dm81xx_l4_hs__emac0, 1258 &dm81xx_emac0__mdio, 1259 &dm816x_l4_hs__emac1, 1260 &dm81xx_l4_hs__sata, 1261 &dm81xx_alwon_l3_slow__gpmc, 1262 &dm816x_default_l3_slow__usbss, 1263 NULL, 1264}; 1265 1266int __init dm816x_hwmod_init(void) 1267{ 1268 omap_hwmod_init(); 1269 return omap_hwmod_register_links(dm816x_hwmod_ocp_ifs); 1270}