1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * omap_hwmod_2xxx_ipblock_data.c - common IP block data for OMAP2xxx 4 * 5 * Copyright (C) 2011 Nokia Corporation 6 * Paul Walmsley 7 */ 8 9 #include <linux/types.h> 10 11 #include "omap_hwmod.h" 12 #include "omap_hwmod_common_data.h" 13 #include "cm-regbits-24xx.h" 14 #include "prm-regbits-24xx.h" 15 #include "wd_timer.h" 16 17 /* 18 * 'dispc' class 19 * display controller 20 */ 21 22 static struct omap_hwmod_class_sysconfig omap2_dispc_sysc = { 23 .rev_offs = 0x0000, 24 .sysc_offs = 0x0010, 25 .syss_offs = 0x0014, 26 .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE | 27 SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE), 28 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART | 29 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART), 30 .sysc_fields = &omap_hwmod_sysc_type1, 31 }; 32 33 struct omap_hwmod_class omap2_dispc_hwmod_class = { 34 .name = "dispc", 35 .sysc = &omap2_dispc_sysc, 36 }; 37 38 /* OMAP2xxx Timer Common */ 39 static struct omap_hwmod_class_sysconfig omap2xxx_timer_sysc = { 40 .rev_offs = 0x0000, 41 .sysc_offs = 0x0010, 42 .syss_offs = 0x0014, 43 .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_CLOCKACTIVITY | 44 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET | 45 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS), 46 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART), 47 .sysc_fields = &omap_hwmod_sysc_type1, 48 }; 49 50 struct omap_hwmod_class omap2xxx_timer_hwmod_class = { 51 .name = "timer", 52 .sysc = &omap2xxx_timer_sysc, 53 }; 54 55 /* 56 * 'wd_timer' class 57 * 32-bit watchdog upward counter that generates a pulse on the reset pin on 58 * overflow condition 59 */ 60 61 static struct omap_hwmod_class_sysconfig omap2xxx_wd_timer_sysc = { 62 .rev_offs = 0x0000, 63 .sysc_offs = 0x0010, 64 .syss_offs = 0x0014, 65 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_SOFTRESET | 66 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS), 67 .sysc_fields = &omap_hwmod_sysc_type1, 68 }; 69 70 struct omap_hwmod_class omap2xxx_wd_timer_hwmod_class = { 71 .name = "wd_timer", 72 .sysc = &omap2xxx_wd_timer_sysc, 73 .pre_shutdown = &omap2_wd_timer_disable, 74 .reset = &omap2_wd_timer_reset, 75 }; 76 77 /* 78 * 'gpio' class 79 * general purpose io module 80 */ 81 static struct omap_hwmod_class_sysconfig omap2xxx_gpio_sysc = { 82 .rev_offs = 0x0000, 83 .sysc_offs = 0x0010, 84 .syss_offs = 0x0014, 85 .sysc_flags = (SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE | 86 SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE | 87 SYSS_HAS_RESET_STATUS), 88 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART), 89 .sysc_fields = &omap_hwmod_sysc_type1, 90 }; 91 92 struct omap_hwmod_class omap2xxx_gpio_hwmod_class = { 93 .name = "gpio", 94 .sysc = &omap2xxx_gpio_sysc, 95 }; 96 97 /* 98 * 'mailbox' class 99 * mailbox module allowing communication between the on-chip processors 100 * using a queued mailbox-interrupt mechanism. 101 */ 102 103 static struct omap_hwmod_class_sysconfig omap2xxx_mailbox_sysc = { 104 .rev_offs = 0x000, 105 .sysc_offs = 0x010, 106 .syss_offs = 0x014, 107 .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE | 108 SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE), 109 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART), 110 .sysc_fields = &omap_hwmod_sysc_type1, 111 }; 112 113 struct omap_hwmod_class omap2xxx_mailbox_hwmod_class = { 114 .name = "mailbox", 115 .sysc = &omap2xxx_mailbox_sysc, 116 }; 117 118 /* 119 * 'mcspi' class 120 * multichannel serial port interface (mcspi) / master/slave synchronous serial 121 * bus 122 */ 123 124 static struct omap_hwmod_class_sysconfig omap2xxx_mcspi_sysc = { 125 .rev_offs = 0x0000, 126 .sysc_offs = 0x0010, 127 .syss_offs = 0x0014, 128 .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE | 129 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET | 130 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS), 131 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART), 132 .sysc_fields = &omap_hwmod_sysc_type1, 133 }; 134 135 struct omap_hwmod_class omap2xxx_mcspi_class = { 136 .name = "mcspi", 137 .sysc = &omap2xxx_mcspi_sysc, 138 }; 139 140 /* 141 * 'gpmc' class 142 * general purpose memory controller 143 */ 144 145 static struct omap_hwmod_class_sysconfig omap2xxx_gpmc_sysc = { 146 .rev_offs = 0x0000, 147 .sysc_offs = 0x0010, 148 .syss_offs = 0x0014, 149 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_SIDLEMODE | 150 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS), 151 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART), 152 .sysc_fields = &omap_hwmod_sysc_type1, 153 }; 154 155 static struct omap_hwmod_class omap2xxx_gpmc_hwmod_class = { 156 .name = "gpmc", 157 .sysc = &omap2xxx_gpmc_sysc, 158 }; 159 160 /* 161 * IP blocks 162 */ 163 164 /* L3 */ 165 struct omap_hwmod omap2xxx_l3_main_hwmod = { 166 .name = "l3_main", 167 .class = &l3_hwmod_class, 168 .flags = HWMOD_NO_IDLEST, 169 }; 170 171 /* L4 CORE */ 172 struct omap_hwmod omap2xxx_l4_core_hwmod = { 173 .name = "l4_core", 174 .class = &l4_hwmod_class, 175 .flags = HWMOD_NO_IDLEST, 176 }; 177 178 /* L4 WKUP */ 179 struct omap_hwmod omap2xxx_l4_wkup_hwmod = { 180 .name = "l4_wkup", 181 .class = &l4_hwmod_class, 182 .flags = HWMOD_NO_IDLEST, 183 }; 184 185 /* MPU */ 186 struct omap_hwmod omap2xxx_mpu_hwmod = { 187 .name = "mpu", 188 .class = &mpu_hwmod_class, 189 .main_clk = "mpu_ck", 190 }; 191 192 /* IVA2 */ 193 struct omap_hwmod omap2xxx_iva_hwmod = { 194 .name = "iva", 195 .class = &iva_hwmod_class, 196 }; 197 198 /* timer1 */ 199 struct omap_hwmod omap2xxx_timer1_hwmod = { 200 .name = "timer1", 201 .main_clk = "gpt1_fck", 202 .prcm = { 203 .omap2 = { 204 .module_offs = WKUP_MOD, 205 .idlest_reg_id = 1, 206 .idlest_idle_bit = OMAP24XX_ST_GPT1_SHIFT, 207 }, 208 }, 209 .class = &omap2xxx_timer_hwmod_class, 210 .flags = HWMOD_SET_DEFAULT_CLOCKACT, 211 }; 212 213 /* timer2 */ 214 struct omap_hwmod omap2xxx_timer2_hwmod = { 215 .name = "timer2", 216 .main_clk = "gpt2_fck", 217 .prcm = { 218 .omap2 = { 219 .module_offs = CORE_MOD, 220 .idlest_reg_id = 1, 221 .idlest_idle_bit = OMAP24XX_ST_GPT2_SHIFT, 222 }, 223 }, 224 .class = &omap2xxx_timer_hwmod_class, 225 .flags = HWMOD_SET_DEFAULT_CLOCKACT, 226 }; 227 228 /* timer3 */ 229 struct omap_hwmod omap2xxx_timer3_hwmod = { 230 .name = "timer3", 231 .main_clk = "gpt3_fck", 232 .prcm = { 233 .omap2 = { 234 .module_offs = CORE_MOD, 235 .idlest_reg_id = 1, 236 .idlest_idle_bit = OMAP24XX_ST_GPT3_SHIFT, 237 }, 238 }, 239 .class = &omap2xxx_timer_hwmod_class, 240 .flags = HWMOD_SET_DEFAULT_CLOCKACT, 241 }; 242 243 /* timer4 */ 244 struct omap_hwmod omap2xxx_timer4_hwmod = { 245 .name = "timer4", 246 .main_clk = "gpt4_fck", 247 .prcm = { 248 .omap2 = { 249 .module_offs = CORE_MOD, 250 .idlest_reg_id = 1, 251 .idlest_idle_bit = OMAP24XX_ST_GPT4_SHIFT, 252 }, 253 }, 254 .class = &omap2xxx_timer_hwmod_class, 255 .flags = HWMOD_SET_DEFAULT_CLOCKACT, 256 }; 257 258 /* timer5 */ 259 struct omap_hwmod omap2xxx_timer5_hwmod = { 260 .name = "timer5", 261 .main_clk = "gpt5_fck", 262 .prcm = { 263 .omap2 = { 264 .module_offs = CORE_MOD, 265 .idlest_reg_id = 1, 266 .idlest_idle_bit = OMAP24XX_ST_GPT5_SHIFT, 267 }, 268 }, 269 .class = &omap2xxx_timer_hwmod_class, 270 .flags = HWMOD_SET_DEFAULT_CLOCKACT, 271 }; 272 273 /* timer6 */ 274 struct omap_hwmod omap2xxx_timer6_hwmod = { 275 .name = "timer6", 276 .main_clk = "gpt6_fck", 277 .prcm = { 278 .omap2 = { 279 .module_offs = CORE_MOD, 280 .idlest_reg_id = 1, 281 .idlest_idle_bit = OMAP24XX_ST_GPT6_SHIFT, 282 }, 283 }, 284 .class = &omap2xxx_timer_hwmod_class, 285 .flags = HWMOD_SET_DEFAULT_CLOCKACT, 286 }; 287 288 /* timer7 */ 289 struct omap_hwmod omap2xxx_timer7_hwmod = { 290 .name = "timer7", 291 .main_clk = "gpt7_fck", 292 .prcm = { 293 .omap2 = { 294 .module_offs = CORE_MOD, 295 .idlest_reg_id = 1, 296 .idlest_idle_bit = OMAP24XX_ST_GPT7_SHIFT, 297 }, 298 }, 299 .class = &omap2xxx_timer_hwmod_class, 300 .flags = HWMOD_SET_DEFAULT_CLOCKACT, 301 }; 302 303 /* timer8 */ 304 struct omap_hwmod omap2xxx_timer8_hwmod = { 305 .name = "timer8", 306 .main_clk = "gpt8_fck", 307 .prcm = { 308 .omap2 = { 309 .module_offs = CORE_MOD, 310 .idlest_reg_id = 1, 311 .idlest_idle_bit = OMAP24XX_ST_GPT8_SHIFT, 312 }, 313 }, 314 .class = &omap2xxx_timer_hwmod_class, 315 .flags = HWMOD_SET_DEFAULT_CLOCKACT, 316 }; 317 318 /* timer9 */ 319 struct omap_hwmod omap2xxx_timer9_hwmod = { 320 .name = "timer9", 321 .main_clk = "gpt9_fck", 322 .prcm = { 323 .omap2 = { 324 .module_offs = CORE_MOD, 325 .idlest_reg_id = 1, 326 .idlest_idle_bit = OMAP24XX_ST_GPT9_SHIFT, 327 }, 328 }, 329 .class = &omap2xxx_timer_hwmod_class, 330 .flags = HWMOD_SET_DEFAULT_CLOCKACT, 331 }; 332 333 /* timer10 */ 334 struct omap_hwmod omap2xxx_timer10_hwmod = { 335 .name = "timer10", 336 .main_clk = "gpt10_fck", 337 .prcm = { 338 .omap2 = { 339 .module_offs = CORE_MOD, 340 .idlest_reg_id = 1, 341 .idlest_idle_bit = OMAP24XX_ST_GPT10_SHIFT, 342 }, 343 }, 344 .class = &omap2xxx_timer_hwmod_class, 345 .flags = HWMOD_SET_DEFAULT_CLOCKACT, 346 }; 347 348 /* timer11 */ 349 struct omap_hwmod omap2xxx_timer11_hwmod = { 350 .name = "timer11", 351 .main_clk = "gpt11_fck", 352 .prcm = { 353 .omap2 = { 354 .module_offs = CORE_MOD, 355 .idlest_reg_id = 1, 356 .idlest_idle_bit = OMAP24XX_ST_GPT11_SHIFT, 357 }, 358 }, 359 .class = &omap2xxx_timer_hwmod_class, 360 .flags = HWMOD_SET_DEFAULT_CLOCKACT, 361 }; 362 363 /* timer12 */ 364 struct omap_hwmod omap2xxx_timer12_hwmod = { 365 .name = "timer12", 366 .main_clk = "gpt12_fck", 367 .prcm = { 368 .omap2 = { 369 .module_offs = CORE_MOD, 370 .idlest_reg_id = 1, 371 .idlest_idle_bit = OMAP24XX_ST_GPT12_SHIFT, 372 }, 373 }, 374 .class = &omap2xxx_timer_hwmod_class, 375 .flags = HWMOD_SET_DEFAULT_CLOCKACT, 376 }; 377 378 /* wd_timer2 */ 379 struct omap_hwmod omap2xxx_wd_timer2_hwmod = { 380 .name = "wd_timer2", 381 .class = &omap2xxx_wd_timer_hwmod_class, 382 .main_clk = "mpu_wdt_fck", 383 .prcm = { 384 .omap2 = { 385 .module_offs = WKUP_MOD, 386 .idlest_reg_id = 1, 387 .idlest_idle_bit = OMAP24XX_ST_MPU_WDT_SHIFT, 388 }, 389 }, 390 }; 391 392 /* UART1 */ 393 394 struct omap_hwmod omap2xxx_uart1_hwmod = { 395 .name = "uart1", 396 .main_clk = "uart1_fck", 397 .flags = DEBUG_OMAP2UART1_FLAGS | HWMOD_SWSUP_SIDLE_ACT, 398 .prcm = { 399 .omap2 = { 400 .module_offs = CORE_MOD, 401 .idlest_reg_id = 1, 402 .idlest_idle_bit = OMAP24XX_EN_UART1_SHIFT, 403 }, 404 }, 405 .class = &omap2_uart_class, 406 }; 407 408 /* UART2 */ 409 410 struct omap_hwmod omap2xxx_uart2_hwmod = { 411 .name = "uart2", 412 .main_clk = "uart2_fck", 413 .flags = DEBUG_OMAP2UART2_FLAGS | HWMOD_SWSUP_SIDLE_ACT, 414 .prcm = { 415 .omap2 = { 416 .module_offs = CORE_MOD, 417 .idlest_reg_id = 1, 418 .idlest_idle_bit = OMAP24XX_EN_UART2_SHIFT, 419 }, 420 }, 421 .class = &omap2_uart_class, 422 }; 423 424 /* UART3 */ 425 426 struct omap_hwmod omap2xxx_uart3_hwmod = { 427 .name = "uart3", 428 .main_clk = "uart3_fck", 429 .flags = DEBUG_OMAP2UART3_FLAGS | HWMOD_SWSUP_SIDLE_ACT, 430 .prcm = { 431 .omap2 = { 432 .module_offs = CORE_MOD, 433 .idlest_reg_id = 2, 434 .idlest_idle_bit = OMAP24XX_EN_UART3_SHIFT, 435 }, 436 }, 437 .class = &omap2_uart_class, 438 }; 439 440 /* dss */ 441 442 static struct omap_hwmod_opt_clk dss_opt_clks[] = { 443 /* 444 * The DSS HW needs all DSS clocks enabled during reset. The dss_core 445 * driver does not use these clocks. 446 */ 447 { .role = "tv_clk", .clk = "dss_54m_fck" }, 448 { .role = "sys_clk", .clk = "dss2_fck" }, 449 }; 450 451 struct omap_hwmod omap2xxx_dss_core_hwmod = { 452 .name = "dss_core", 453 .class = &omap2_dss_hwmod_class, 454 .main_clk = "dss1_fck", /* instead of dss_fck */ 455 .prcm = { 456 .omap2 = { 457 .module_offs = CORE_MOD, 458 .idlest_reg_id = 1, 459 }, 460 }, 461 .opt_clks = dss_opt_clks, 462 .opt_clks_cnt = ARRAY_SIZE(dss_opt_clks), 463 .flags = HWMOD_NO_IDLEST | HWMOD_CONTROL_OPT_CLKS_IN_RESET, 464 }; 465 466 struct omap_hwmod omap2xxx_dss_dispc_hwmod = { 467 .name = "dss_dispc", 468 .class = &omap2_dispc_hwmod_class, 469 .main_clk = "dss1_fck", 470 .prcm = { 471 .omap2 = { 472 .module_offs = CORE_MOD, 473 .idlest_reg_id = 1, 474 }, 475 }, 476 .flags = HWMOD_NO_IDLEST, 477 .dev_attr = &omap2_3_dss_dispc_dev_attr, 478 }; 479 480 static struct omap_hwmod_opt_clk dss_rfbi_opt_clks[] = { 481 { .role = "ick", .clk = "dss_ick" }, 482 }; 483 484 struct omap_hwmod omap2xxx_dss_rfbi_hwmod = { 485 .name = "dss_rfbi", 486 .class = &omap2_rfbi_hwmod_class, 487 .main_clk = "dss1_fck", 488 .prcm = { 489 .omap2 = { 490 .module_offs = CORE_MOD, 491 }, 492 }, 493 .opt_clks = dss_rfbi_opt_clks, 494 .opt_clks_cnt = ARRAY_SIZE(dss_rfbi_opt_clks), 495 .flags = HWMOD_NO_IDLEST, 496 }; 497 498 struct omap_hwmod omap2xxx_dss_venc_hwmod = { 499 .name = "dss_venc", 500 .class = &omap2_venc_hwmod_class, 501 .main_clk = "dss_54m_fck", 502 .prcm = { 503 .omap2 = { 504 .module_offs = CORE_MOD, 505 }, 506 }, 507 .flags = HWMOD_NO_IDLEST, 508 }; 509 510 /* gpio1 */ 511 struct omap_hwmod omap2xxx_gpio1_hwmod = { 512 .name = "gpio1", 513 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET, 514 .main_clk = "gpios_fck", 515 .prcm = { 516 .omap2 = { 517 .module_offs = WKUP_MOD, 518 .idlest_reg_id = 1, 519 .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT, 520 }, 521 }, 522 .class = &omap2xxx_gpio_hwmod_class, 523 }; 524 525 /* gpio2 */ 526 struct omap_hwmod omap2xxx_gpio2_hwmod = { 527 .name = "gpio2", 528 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET, 529 .main_clk = "gpios_fck", 530 .prcm = { 531 .omap2 = { 532 .module_offs = WKUP_MOD, 533 .idlest_reg_id = 1, 534 .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT, 535 }, 536 }, 537 .class = &omap2xxx_gpio_hwmod_class, 538 }; 539 540 /* gpio3 */ 541 struct omap_hwmod omap2xxx_gpio3_hwmod = { 542 .name = "gpio3", 543 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET, 544 .main_clk = "gpios_fck", 545 .prcm = { 546 .omap2 = { 547 .module_offs = WKUP_MOD, 548 .idlest_reg_id = 1, 549 .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT, 550 }, 551 }, 552 .class = &omap2xxx_gpio_hwmod_class, 553 }; 554 555 /* gpio4 */ 556 struct omap_hwmod omap2xxx_gpio4_hwmod = { 557 .name = "gpio4", 558 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET, 559 .main_clk = "gpios_fck", 560 .prcm = { 561 .omap2 = { 562 .module_offs = WKUP_MOD, 563 .idlest_reg_id = 1, 564 .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT, 565 }, 566 }, 567 .class = &omap2xxx_gpio_hwmod_class, 568 }; 569 570 /* mcspi1 */ 571 struct omap_hwmod omap2xxx_mcspi1_hwmod = { 572 .name = "mcspi1", 573 .main_clk = "mcspi1_fck", 574 .prcm = { 575 .omap2 = { 576 .module_offs = CORE_MOD, 577 .idlest_reg_id = 1, 578 .idlest_idle_bit = OMAP24XX_ST_MCSPI1_SHIFT, 579 }, 580 }, 581 .class = &omap2xxx_mcspi_class, 582 }; 583 584 /* mcspi2 */ 585 struct omap_hwmod omap2xxx_mcspi2_hwmod = { 586 .name = "mcspi2", 587 .main_clk = "mcspi2_fck", 588 .prcm = { 589 .omap2 = { 590 .module_offs = CORE_MOD, 591 .idlest_reg_id = 1, 592 .idlest_idle_bit = OMAP24XX_ST_MCSPI2_SHIFT, 593 }, 594 }, 595 .class = &omap2xxx_mcspi_class, 596 }; 597 598 static struct omap_hwmod_class omap2xxx_counter_hwmod_class = { 599 .name = "counter", 600 }; 601 602 struct omap_hwmod omap2xxx_counter_32k_hwmod = { 603 .name = "counter_32k", 604 .main_clk = "func_32k_ck", 605 .prcm = { 606 .omap2 = { 607 .module_offs = WKUP_MOD, 608 .idlest_reg_id = 1, 609 .idlest_idle_bit = OMAP24XX_ST_32KSYNC_SHIFT, 610 }, 611 }, 612 .class = &omap2xxx_counter_hwmod_class, 613 }; 614 615 /* gpmc */ 616 struct omap_hwmod omap2xxx_gpmc_hwmod = { 617 .name = "gpmc", 618 .class = &omap2xxx_gpmc_hwmod_class, 619 .main_clk = "gpmc_fck", 620 /* Skip reset for CONFIG_OMAP_GPMC_DEBUG for bootloader timings */ 621 .flags = HWMOD_NO_IDLEST | DEBUG_OMAP_GPMC_HWMOD_FLAGS, 622 .prcm = { 623 .omap2 = { 624 .module_offs = CORE_MOD, 625 }, 626 }, 627 }; 628 629 /* RNG */ 630 631 static struct omap_hwmod_class_sysconfig omap2_rng_sysc = { 632 .rev_offs = 0x3c, 633 .sysc_offs = 0x40, 634 .syss_offs = 0x44, 635 .sysc_flags = (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE | 636 SYSS_HAS_RESET_STATUS), 637 .sysc_fields = &omap_hwmod_sysc_type1, 638 }; 639 640 static struct omap_hwmod_class omap2_rng_hwmod_class = { 641 .name = "rng", 642 .sysc = &omap2_rng_sysc, 643 }; 644 645 struct omap_hwmod omap2xxx_rng_hwmod = { 646 .name = "rng", 647 .main_clk = "l4_ck", 648 .prcm = { 649 .omap2 = { 650 .module_offs = CORE_MOD, 651 .idlest_reg_id = 4, 652 .idlest_idle_bit = OMAP24XX_ST_RNG_SHIFT, 653 }, 654 }, 655 /* 656 * XXX The first read from the SYSSTATUS register of the RNG 657 * after the SYSCONFIG SOFTRESET bit is set triggers an 658 * imprecise external abort. It's unclear why this happens. 659 * Until this is analyzed, skip the IP block reset. 660 */ 661 .flags = HWMOD_INIT_NO_RESET, 662 .class = &omap2_rng_hwmod_class, 663 }; 664 665 /* SHAM */ 666 667 static struct omap_hwmod_class_sysconfig omap2_sham_sysc = { 668 .rev_offs = 0x5c, 669 .sysc_offs = 0x60, 670 .syss_offs = 0x64, 671 .sysc_flags = (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE | 672 SYSS_HAS_RESET_STATUS), 673 .sysc_fields = &omap_hwmod_sysc_type1, 674 }; 675 676 static struct omap_hwmod_class omap2xxx_sham_class = { 677 .name = "sham", 678 .sysc = &omap2_sham_sysc, 679 }; 680 681 struct omap_hwmod omap2xxx_sham_hwmod = { 682 .name = "sham", 683 .main_clk = "l4_ck", 684 .prcm = { 685 .omap2 = { 686 .module_offs = CORE_MOD, 687 .idlest_reg_id = 4, 688 .idlest_idle_bit = OMAP24XX_ST_SHA_SHIFT, 689 }, 690 }, 691 .class = &omap2xxx_sham_class, 692 }; 693 694 /* AES */ 695 696 static struct omap_hwmod_class_sysconfig omap2_aes_sysc = { 697 .rev_offs = 0x44, 698 .sysc_offs = 0x48, 699 .syss_offs = 0x4c, 700 .sysc_flags = (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE | 701 SYSS_HAS_RESET_STATUS), 702 .sysc_fields = &omap_hwmod_sysc_type1, 703 }; 704 705 static struct omap_hwmod_class omap2xxx_aes_class = { 706 .name = "aes", 707 .sysc = &omap2_aes_sysc, 708 }; 709 710 struct omap_hwmod omap2xxx_aes_hwmod = { 711 .name = "aes", 712 .main_clk = "l4_ck", 713 .prcm = { 714 .omap2 = { 715 .module_offs = CORE_MOD, 716 .idlest_reg_id = 4, 717 .idlest_idle_bit = OMAP24XX_ST_AES_SHIFT, 718 }, 719 }, 720 .class = &omap2xxx_aes_class, 721 }; 722