linux/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
<<
>>
Prefs
   1/*
   2 * Hardware modules present on the OMAP44xx chips
   3 *
   4 * Copyright (C) 2009-2012 Texas Instruments, Inc.
   5 * Copyright (C) 2009-2010 Nokia Corporation
   6 *
   7 * Paul Walmsley
   8 * Benoit Cousson
   9 *
  10 * This file is automatically generated from the OMAP hardware databases.
  11 * We respectfully ask that any modifications to this file be coordinated
  12 * with the public linux-omap@vger.kernel.org mailing list and the
  13 * authors above to ensure that the autogeneration scripts are kept
  14 * up-to-date with the file contents.
  15 * Note that this file is currently not in sync with autogeneration scripts.
  16 * The above note to be removed, once it is synced up.
  17 *
  18 * This program is free software; you can redistribute it and/or modify
  19 * it under the terms of the GNU General Public License version 2 as
  20 * published by the Free Software Foundation.
  21 */
  22
  23#include <linux/io.h>
  24#include <linux/platform_data/hsmmc-omap.h>
  25#include <linux/power/smartreflex.h>
  26#include <linux/platform_data/i2c-omap.h>
  27
  28#include <linux/omap-dma.h>
  29
  30#include "omap_hwmod.h"
  31#include "omap_hwmod_common_data.h"
  32#include "cm1_44xx.h"
  33#include "cm2_44xx.h"
  34#include "prm44xx.h"
  35#include "prm-regbits-44xx.h"
  36#include "i2c.h"
  37#include "wd_timer.h"
  38
  39/* Base offset for all OMAP4 interrupts external to MPUSS */
  40#define OMAP44XX_IRQ_GIC_START  32
  41
  42/* Base offset for all OMAP4 dma requests */
  43#define OMAP44XX_DMA_REQ_START  1
  44
  45/*
  46 * IP blocks
  47 */
  48
  49/*
  50 * 'dmm' class
  51 * instance(s): dmm
  52 */
  53static struct omap_hwmod_class omap44xx_dmm_hwmod_class = {
  54        .name   = "dmm",
  55};
  56
  57/* dmm */
  58static struct omap_hwmod omap44xx_dmm_hwmod = {
  59        .name           = "dmm",
  60        .class          = &omap44xx_dmm_hwmod_class,
  61        .clkdm_name     = "l3_emif_clkdm",
  62        .prcm = {
  63                .omap4 = {
  64                        .clkctrl_offs = OMAP4_CM_MEMIF_DMM_CLKCTRL_OFFSET,
  65                        .context_offs = OMAP4_RM_MEMIF_DMM_CONTEXT_OFFSET,
  66                },
  67        },
  68};
  69
  70/*
  71 * 'l3' class
  72 * instance(s): l3_instr, l3_main_1, l3_main_2, l3_main_3
  73 */
  74static struct omap_hwmod_class omap44xx_l3_hwmod_class = {
  75        .name   = "l3",
  76};
  77
  78/* l3_instr */
  79static struct omap_hwmod omap44xx_l3_instr_hwmod = {
  80        .name           = "l3_instr",
  81        .class          = &omap44xx_l3_hwmod_class,
  82        .clkdm_name     = "l3_instr_clkdm",
  83        .prcm = {
  84                .omap4 = {
  85                        .clkctrl_offs = OMAP4_CM_L3INSTR_L3_INSTR_CLKCTRL_OFFSET,
  86                        .context_offs = OMAP4_RM_L3INSTR_L3_INSTR_CONTEXT_OFFSET,
  87                        .modulemode   = MODULEMODE_HWCTRL,
  88                },
  89        },
  90};
  91
  92/* l3_main_1 */
  93static struct omap_hwmod omap44xx_l3_main_1_hwmod = {
  94        .name           = "l3_main_1",
  95        .class          = &omap44xx_l3_hwmod_class,
  96        .clkdm_name     = "l3_1_clkdm",
  97        .prcm = {
  98                .omap4 = {
  99                        .clkctrl_offs = OMAP4_CM_L3_1_L3_1_CLKCTRL_OFFSET,
 100                        .context_offs = OMAP4_RM_L3_1_L3_1_CONTEXT_OFFSET,
 101                },
 102        },
 103};
 104
 105/* l3_main_2 */
 106static struct omap_hwmod omap44xx_l3_main_2_hwmod = {
 107        .name           = "l3_main_2",
 108        .class          = &omap44xx_l3_hwmod_class,
 109        .clkdm_name     = "l3_2_clkdm",
 110        .prcm = {
 111                .omap4 = {
 112                        .clkctrl_offs = OMAP4_CM_L3_2_L3_2_CLKCTRL_OFFSET,
 113                        .context_offs = OMAP4_RM_L3_2_L3_2_CONTEXT_OFFSET,
 114                },
 115        },
 116};
 117
 118/* l3_main_3 */
 119static struct omap_hwmod omap44xx_l3_main_3_hwmod = {
 120        .name           = "l3_main_3",
 121        .class          = &omap44xx_l3_hwmod_class,
 122        .clkdm_name     = "l3_instr_clkdm",
 123        .prcm = {
 124                .omap4 = {
 125                        .clkctrl_offs = OMAP4_CM_L3INSTR_L3_3_CLKCTRL_OFFSET,
 126                        .context_offs = OMAP4_RM_L3INSTR_L3_3_CONTEXT_OFFSET,
 127                        .modulemode   = MODULEMODE_HWCTRL,
 128                },
 129        },
 130};
 131
 132/*
 133 * 'l4' class
 134 * instance(s): l4_abe, l4_cfg, l4_per, l4_wkup
 135 */
 136static struct omap_hwmod_class omap44xx_l4_hwmod_class = {
 137        .name   = "l4",
 138};
 139
 140/* l4_abe */
 141static struct omap_hwmod omap44xx_l4_abe_hwmod = {
 142        .name           = "l4_abe",
 143        .class          = &omap44xx_l4_hwmod_class,
 144        .clkdm_name     = "abe_clkdm",
 145        .prcm = {
 146                .omap4 = {
 147                        .clkctrl_offs = OMAP4_CM1_ABE_L4ABE_CLKCTRL_OFFSET,
 148                        .context_offs = OMAP4_RM_ABE_AESS_CONTEXT_OFFSET,
 149                        .lostcontext_mask = OMAP4430_LOSTMEM_AESSMEM_MASK,
 150                        .flags        = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
 151                },
 152        },
 153};
 154
 155/* l4_cfg */
 156static struct omap_hwmod omap44xx_l4_cfg_hwmod = {
 157        .name           = "l4_cfg",
 158        .class          = &omap44xx_l4_hwmod_class,
 159        .clkdm_name     = "l4_cfg_clkdm",
 160        .prcm = {
 161                .omap4 = {
 162                        .clkctrl_offs = OMAP4_CM_L4CFG_L4_CFG_CLKCTRL_OFFSET,
 163                        .context_offs = OMAP4_RM_L4CFG_L4_CFG_CONTEXT_OFFSET,
 164                },
 165        },
 166};
 167
 168/* l4_per */
 169static struct omap_hwmod omap44xx_l4_per_hwmod = {
 170        .name           = "l4_per",
 171        .class          = &omap44xx_l4_hwmod_class,
 172        .clkdm_name     = "l4_per_clkdm",
 173        .prcm = {
 174                .omap4 = {
 175                        .clkctrl_offs = OMAP4_CM_L4PER_L4PER_CLKCTRL_OFFSET,
 176                        .context_offs = OMAP4_RM_L4PER_L4_PER_CONTEXT_OFFSET,
 177                },
 178        },
 179};
 180
 181/* l4_wkup */
 182static struct omap_hwmod omap44xx_l4_wkup_hwmod = {
 183        .name           = "l4_wkup",
 184        .class          = &omap44xx_l4_hwmod_class,
 185        .clkdm_name     = "l4_wkup_clkdm",
 186        .prcm = {
 187                .omap4 = {
 188                        .clkctrl_offs = OMAP4_CM_WKUP_L4WKUP_CLKCTRL_OFFSET,
 189                        .context_offs = OMAP4_RM_WKUP_L4WKUP_CONTEXT_OFFSET,
 190                },
 191        },
 192};
 193
 194/*
 195 * 'mpu_bus' class
 196 * instance(s): mpu_private
 197 */
 198static struct omap_hwmod_class omap44xx_mpu_bus_hwmod_class = {
 199        .name   = "mpu_bus",
 200};
 201
 202/* mpu_private */
 203static struct omap_hwmod omap44xx_mpu_private_hwmod = {
 204        .name           = "mpu_private",
 205        .class          = &omap44xx_mpu_bus_hwmod_class,
 206        .clkdm_name     = "mpuss_clkdm",
 207        .prcm = {
 208                .omap4 = {
 209                        .flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
 210                },
 211        },
 212};
 213
 214/*
 215 * 'ocp_wp_noc' class
 216 * instance(s): ocp_wp_noc
 217 */
 218static struct omap_hwmod_class omap44xx_ocp_wp_noc_hwmod_class = {
 219        .name   = "ocp_wp_noc",
 220};
 221
 222/* ocp_wp_noc */
 223static struct omap_hwmod omap44xx_ocp_wp_noc_hwmod = {
 224        .name           = "ocp_wp_noc",
 225        .class          = &omap44xx_ocp_wp_noc_hwmod_class,
 226        .clkdm_name     = "l3_instr_clkdm",
 227        .prcm = {
 228                .omap4 = {
 229                        .clkctrl_offs = OMAP4_CM_L3INSTR_OCP_WP1_CLKCTRL_OFFSET,
 230                        .context_offs = OMAP4_RM_L3INSTR_OCP_WP1_CONTEXT_OFFSET,
 231                        .modulemode   = MODULEMODE_HWCTRL,
 232                },
 233        },
 234};
 235
 236/*
 237 * Modules omap_hwmod structures
 238 *
 239 * The following IPs are excluded for the moment because:
 240 * - They do not need an explicit SW control using omap_hwmod API.
 241 * - They still need to be validated with the driver
 242 *   properly adapted to omap_hwmod / omap_device
 243 *
 244 * usim
 245 */
 246
 247/*
 248 * 'aess' class
 249 * audio engine sub system
 250 */
 251
 252static struct omap_hwmod_class_sysconfig omap44xx_aess_sysc = {
 253        .rev_offs       = 0x0000,
 254        .sysc_offs      = 0x0010,
 255        .sysc_flags     = (SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE),
 256        .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
 257                           MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART |
 258                           MSTANDBY_SMART_WKUP),
 259        .sysc_fields    = &omap_hwmod_sysc_type2,
 260};
 261
 262static struct omap_hwmod_class omap44xx_aess_hwmod_class = {
 263        .name   = "aess",
 264        .sysc   = &omap44xx_aess_sysc,
 265        .enable_preprogram = omap_hwmod_aess_preprogram,
 266};
 267
 268/* aess */
 269static struct omap_hwmod omap44xx_aess_hwmod = {
 270        .name           = "aess",
 271        .class          = &omap44xx_aess_hwmod_class,
 272        .clkdm_name     = "abe_clkdm",
 273        .main_clk       = "aess_fclk",
 274        .prcm = {
 275                .omap4 = {
 276                        .clkctrl_offs = OMAP4_CM1_ABE_AESS_CLKCTRL_OFFSET,
 277                        .context_offs = OMAP4_RM_ABE_AESS_CONTEXT_OFFSET,
 278                        .lostcontext_mask = OMAP4430_LOSTCONTEXT_DFF_MASK,
 279                        .modulemode   = MODULEMODE_SWCTRL,
 280                },
 281        },
 282};
 283
 284/*
 285 * 'c2c' class
 286 * chip 2 chip interface used to plug the ape soc (omap) with an external modem
 287 * soc
 288 */
 289
 290static struct omap_hwmod_class omap44xx_c2c_hwmod_class = {
 291        .name   = "c2c",
 292};
 293
 294/* c2c */
 295static struct omap_hwmod omap44xx_c2c_hwmod = {
 296        .name           = "c2c",
 297        .class          = &omap44xx_c2c_hwmod_class,
 298        .clkdm_name     = "d2d_clkdm",
 299        .prcm = {
 300                .omap4 = {
 301                        .clkctrl_offs = OMAP4_CM_D2D_SAD2D_CLKCTRL_OFFSET,
 302                        .context_offs = OMAP4_RM_D2D_SAD2D_CONTEXT_OFFSET,
 303                },
 304        },
 305};
 306
 307/*
 308 * 'counter' class
 309 * 32-bit ordinary counter, clocked by the falling edge of the 32 khz clock
 310 */
 311
 312static struct omap_hwmod_class_sysconfig omap44xx_counter_sysc = {
 313        .rev_offs       = 0x0000,
 314        .sysc_offs      = 0x0004,
 315        .sysc_flags     = SYSC_HAS_SIDLEMODE,
 316        .idlemodes      = (SIDLE_FORCE | SIDLE_NO),
 317        .sysc_fields    = &omap_hwmod_sysc_type1,
 318};
 319
 320static struct omap_hwmod_class omap44xx_counter_hwmod_class = {
 321        .name   = "counter",
 322        .sysc   = &omap44xx_counter_sysc,
 323};
 324
 325/* counter_32k */
 326static struct omap_hwmod omap44xx_counter_32k_hwmod = {
 327        .name           = "counter_32k",
 328        .class          = &omap44xx_counter_hwmod_class,
 329        .clkdm_name     = "l4_wkup_clkdm",
 330        .flags          = HWMOD_SWSUP_SIDLE,
 331        .main_clk       = "sys_32k_ck",
 332        .prcm = {
 333                .omap4 = {
 334                        .clkctrl_offs = OMAP4_CM_WKUP_SYNCTIMER_CLKCTRL_OFFSET,
 335                        .context_offs = OMAP4_RM_WKUP_SYNCTIMER_CONTEXT_OFFSET,
 336                },
 337        },
 338};
 339
 340/*
 341 * 'ctrl_module' class
 342 * attila core control module + core pad control module + wkup pad control
 343 * module + attila wkup control module
 344 */
 345
 346static struct omap_hwmod_class_sysconfig omap44xx_ctrl_module_sysc = {
 347        .rev_offs       = 0x0000,
 348        .sysc_offs      = 0x0010,
 349        .sysc_flags     = SYSC_HAS_SIDLEMODE,
 350        .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
 351                           SIDLE_SMART_WKUP),
 352        .sysc_fields    = &omap_hwmod_sysc_type2,
 353};
 354
 355static struct omap_hwmod_class omap44xx_ctrl_module_hwmod_class = {
 356        .name   = "ctrl_module",
 357        .sysc   = &omap44xx_ctrl_module_sysc,
 358};
 359
 360/* ctrl_module_core */
 361static struct omap_hwmod omap44xx_ctrl_module_core_hwmod = {
 362        .name           = "ctrl_module_core",
 363        .class          = &omap44xx_ctrl_module_hwmod_class,
 364        .clkdm_name     = "l4_cfg_clkdm",
 365        .prcm = {
 366                .omap4 = {
 367                        .flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
 368                },
 369        },
 370};
 371
 372/* ctrl_module_pad_core */
 373static struct omap_hwmod omap44xx_ctrl_module_pad_core_hwmod = {
 374        .name           = "ctrl_module_pad_core",
 375        .class          = &omap44xx_ctrl_module_hwmod_class,
 376        .clkdm_name     = "l4_cfg_clkdm",
 377        .prcm = {
 378                .omap4 = {
 379                        .flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
 380                },
 381        },
 382};
 383
 384/* ctrl_module_wkup */
 385static struct omap_hwmod omap44xx_ctrl_module_wkup_hwmod = {
 386        .name           = "ctrl_module_wkup",
 387        .class          = &omap44xx_ctrl_module_hwmod_class,
 388        .clkdm_name     = "l4_wkup_clkdm",
 389        .prcm = {
 390                .omap4 = {
 391                        .flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
 392                },
 393        },
 394};
 395
 396/* ctrl_module_pad_wkup */
 397static struct omap_hwmod omap44xx_ctrl_module_pad_wkup_hwmod = {
 398        .name           = "ctrl_module_pad_wkup",
 399        .class          = &omap44xx_ctrl_module_hwmod_class,
 400        .clkdm_name     = "l4_wkup_clkdm",
 401        .prcm = {
 402                .omap4 = {
 403                        .flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
 404                },
 405        },
 406};
 407
 408/*
 409 * 'debugss' class
 410 * debug and emulation sub system
 411 */
 412
 413static struct omap_hwmod_class omap44xx_debugss_hwmod_class = {
 414        .name   = "debugss",
 415};
 416
 417/* debugss */
 418static struct omap_hwmod omap44xx_debugss_hwmod = {
 419        .name           = "debugss",
 420        .class          = &omap44xx_debugss_hwmod_class,
 421        .clkdm_name     = "emu_sys_clkdm",
 422        .main_clk       = "trace_clk_div_ck",
 423        .prcm = {
 424                .omap4 = {
 425                        .clkctrl_offs = OMAP4_CM_EMU_DEBUGSS_CLKCTRL_OFFSET,
 426                        .context_offs = OMAP4_RM_EMU_DEBUGSS_CONTEXT_OFFSET,
 427                },
 428        },
 429};
 430
 431/*
 432 * 'dma' class
 433 * dma controller for data exchange between memory to memory (i.e. internal or
 434 * external memory) and gp peripherals to memory or memory to gp peripherals
 435 */
 436
 437static struct omap_hwmod_class_sysconfig omap44xx_dma_sysc = {
 438        .rev_offs       = 0x0000,
 439        .sysc_offs      = 0x002c,
 440        .syss_offs      = 0x0028,
 441        .sysc_flags     = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
 442                           SYSC_HAS_EMUFREE | SYSC_HAS_MIDLEMODE |
 443                           SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
 444                           SYSS_HAS_RESET_STATUS),
 445        .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
 446                           MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
 447        .sysc_fields    = &omap_hwmod_sysc_type1,
 448};
 449
 450static struct omap_hwmod_class omap44xx_dma_hwmod_class = {
 451        .name   = "dma",
 452        .sysc   = &omap44xx_dma_sysc,
 453};
 454
 455/* dma dev_attr */
 456static struct omap_dma_dev_attr dma_dev_attr = {
 457        .dev_caps       = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY |
 458                          IS_CSSA_32 | IS_CDSA_32 | IS_RW_PRIORITY,
 459        .lch_count      = 32,
 460};
 461
 462/* dma_system */
 463static struct omap_hwmod omap44xx_dma_system_hwmod = {
 464        .name           = "dma_system",
 465        .class          = &omap44xx_dma_hwmod_class,
 466        .clkdm_name     = "l3_dma_clkdm",
 467        .main_clk       = "l3_div_ck",
 468        .prcm = {
 469                .omap4 = {
 470                        .clkctrl_offs = OMAP4_CM_SDMA_SDMA_CLKCTRL_OFFSET,
 471                        .context_offs = OMAP4_RM_SDMA_SDMA_CONTEXT_OFFSET,
 472                },
 473        },
 474        .dev_attr       = &dma_dev_attr,
 475};
 476
 477/*
 478 * 'dmic' class
 479 * digital microphone controller
 480 */
 481
 482static struct omap_hwmod_class_sysconfig omap44xx_dmic_sysc = {
 483        .rev_offs       = 0x0000,
 484        .sysc_offs      = 0x0010,
 485        .sysc_flags     = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
 486                           SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
 487        .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
 488                           SIDLE_SMART_WKUP),
 489        .sysc_fields    = &omap_hwmod_sysc_type2,
 490};
 491
 492static struct omap_hwmod_class omap44xx_dmic_hwmod_class = {
 493        .name   = "dmic",
 494        .sysc   = &omap44xx_dmic_sysc,
 495};
 496
 497/* dmic */
 498static struct omap_hwmod omap44xx_dmic_hwmod = {
 499        .name           = "dmic",
 500        .class          = &omap44xx_dmic_hwmod_class,
 501        .clkdm_name     = "abe_clkdm",
 502        .main_clk       = "func_dmic_abe_gfclk",
 503        .prcm = {
 504                .omap4 = {
 505                        .clkctrl_offs = OMAP4_CM1_ABE_DMIC_CLKCTRL_OFFSET,
 506                        .context_offs = OMAP4_RM_ABE_DMIC_CONTEXT_OFFSET,
 507                        .modulemode   = MODULEMODE_SWCTRL,
 508                },
 509        },
 510};
 511
 512/*
 513 * 'dsp' class
 514 * dsp sub-system
 515 */
 516
 517static struct omap_hwmod_class omap44xx_dsp_hwmod_class = {
 518        .name   = "dsp",
 519};
 520
 521/* dsp */
 522static struct omap_hwmod_rst_info omap44xx_dsp_resets[] = {
 523        { .name = "dsp", .rst_shift = 0 },
 524};
 525
 526static struct omap_hwmod omap44xx_dsp_hwmod = {
 527        .name           = "dsp",
 528        .class          = &omap44xx_dsp_hwmod_class,
 529        .clkdm_name     = "tesla_clkdm",
 530        .rst_lines      = omap44xx_dsp_resets,
 531        .rst_lines_cnt  = ARRAY_SIZE(omap44xx_dsp_resets),
 532        .main_clk       = "dpll_iva_m4x2_ck",
 533        .prcm = {
 534                .omap4 = {
 535                        .clkctrl_offs = OMAP4_CM_TESLA_TESLA_CLKCTRL_OFFSET,
 536                        .rstctrl_offs = OMAP4_RM_TESLA_RSTCTRL_OFFSET,
 537                        .context_offs = OMAP4_RM_TESLA_TESLA_CONTEXT_OFFSET,
 538                        .modulemode   = MODULEMODE_HWCTRL,
 539                },
 540        },
 541};
 542
 543/*
 544 * 'dss' class
 545 * display sub-system
 546 */
 547
 548static struct omap_hwmod_class_sysconfig omap44xx_dss_sysc = {
 549        .rev_offs       = 0x0000,
 550        .syss_offs      = 0x0014,
 551        .sysc_flags     = SYSS_HAS_RESET_STATUS,
 552};
 553
 554static struct omap_hwmod_class omap44xx_dss_hwmod_class = {
 555        .name   = "dss",
 556        .sysc   = &omap44xx_dss_sysc,
 557        .reset  = omap_dss_reset,
 558};
 559
 560/* dss */
 561static struct omap_hwmod_opt_clk dss_opt_clks[] = {
 562        { .role = "sys_clk", .clk = "dss_sys_clk" },
 563        { .role = "tv_clk", .clk = "dss_tv_clk" },
 564        { .role = "hdmi_clk", .clk = "dss_48mhz_clk" },
 565};
 566
 567static struct omap_hwmod omap44xx_dss_hwmod = {
 568        .name           = "dss_core",
 569        .flags          = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
 570        .class          = &omap44xx_dss_hwmod_class,
 571        .clkdm_name     = "l3_dss_clkdm",
 572        .main_clk       = "dss_dss_clk",
 573        .prcm = {
 574                .omap4 = {
 575                        .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
 576                        .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
 577                        .modulemode   = MODULEMODE_SWCTRL,
 578                },
 579        },
 580        .opt_clks       = dss_opt_clks,
 581        .opt_clks_cnt   = ARRAY_SIZE(dss_opt_clks),
 582};
 583
 584/*
 585 * 'dispc' class
 586 * display controller
 587 */
 588
 589static struct omap_hwmod_class_sysconfig omap44xx_dispc_sysc = {
 590        .rev_offs       = 0x0000,
 591        .sysc_offs      = 0x0010,
 592        .syss_offs      = 0x0014,
 593        .sysc_flags     = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
 594                           SYSC_HAS_ENAWAKEUP | SYSC_HAS_MIDLEMODE |
 595                           SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
 596                           SYSS_HAS_RESET_STATUS),
 597        .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
 598                           MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
 599        .sysc_fields    = &omap_hwmod_sysc_type1,
 600};
 601
 602static struct omap_hwmod_class omap44xx_dispc_hwmod_class = {
 603        .name   = "dispc",
 604        .sysc   = &omap44xx_dispc_sysc,
 605};
 606
 607/* dss_dispc */
 608static struct omap_dss_dispc_dev_attr omap44xx_dss_dispc_dev_attr = {
 609        .manager_count          = 3,
 610        .has_framedonetv_irq    = 1
 611};
 612
 613static struct omap_hwmod omap44xx_dss_dispc_hwmod = {
 614        .name           = "dss_dispc",
 615        .class          = &omap44xx_dispc_hwmod_class,
 616        .clkdm_name     = "l3_dss_clkdm",
 617        .main_clk       = "dss_dss_clk",
 618        .prcm = {
 619                .omap4 = {
 620                        .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
 621                        .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
 622                },
 623        },
 624        .dev_attr       = &omap44xx_dss_dispc_dev_attr,
 625        .parent_hwmod   = &omap44xx_dss_hwmod,
 626};
 627
 628/*
 629 * 'dsi' class
 630 * display serial interface controller
 631 */
 632
 633static struct omap_hwmod_class_sysconfig omap44xx_dsi_sysc = {
 634        .rev_offs       = 0x0000,
 635        .sysc_offs      = 0x0010,
 636        .syss_offs      = 0x0014,
 637        .sysc_flags     = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
 638                           SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
 639                           SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
 640        .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
 641        .sysc_fields    = &omap_hwmod_sysc_type1,
 642};
 643
 644static struct omap_hwmod_class omap44xx_dsi_hwmod_class = {
 645        .name   = "dsi",
 646        .sysc   = &omap44xx_dsi_sysc,
 647};
 648
 649/* dss_dsi1 */
 650static struct omap_hwmod_opt_clk dss_dsi1_opt_clks[] = {
 651        { .role = "sys_clk", .clk = "dss_sys_clk" },
 652};
 653
 654static struct omap_hwmod omap44xx_dss_dsi1_hwmod = {
 655        .name           = "dss_dsi1",
 656        .class          = &omap44xx_dsi_hwmod_class,
 657        .clkdm_name     = "l3_dss_clkdm",
 658        .main_clk       = "dss_dss_clk",
 659        .prcm = {
 660                .omap4 = {
 661                        .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
 662                        .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
 663                },
 664        },
 665        .opt_clks       = dss_dsi1_opt_clks,
 666        .opt_clks_cnt   = ARRAY_SIZE(dss_dsi1_opt_clks),
 667        .parent_hwmod   = &omap44xx_dss_hwmod,
 668};
 669
 670/* dss_dsi2 */
 671static struct omap_hwmod_opt_clk dss_dsi2_opt_clks[] = {
 672        { .role = "sys_clk", .clk = "dss_sys_clk" },
 673};
 674
 675static struct omap_hwmod omap44xx_dss_dsi2_hwmod = {
 676        .name           = "dss_dsi2",
 677        .class          = &omap44xx_dsi_hwmod_class,
 678        .clkdm_name     = "l3_dss_clkdm",
 679        .main_clk       = "dss_dss_clk",
 680        .prcm = {
 681                .omap4 = {
 682                        .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
 683                        .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
 684                },
 685        },
 686        .opt_clks       = dss_dsi2_opt_clks,
 687        .opt_clks_cnt   = ARRAY_SIZE(dss_dsi2_opt_clks),
 688        .parent_hwmod   = &omap44xx_dss_hwmod,
 689};
 690
 691/*
 692 * 'hdmi' class
 693 * hdmi controller
 694 */
 695
 696static struct omap_hwmod_class_sysconfig omap44xx_hdmi_sysc = {
 697        .rev_offs       = 0x0000,
 698        .sysc_offs      = 0x0010,
 699        .sysc_flags     = (SYSC_HAS_RESET_STATUS | SYSC_HAS_SIDLEMODE |
 700                           SYSC_HAS_SOFTRESET),
 701        .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
 702                           SIDLE_SMART_WKUP),
 703        .sysc_fields    = &omap_hwmod_sysc_type2,
 704};
 705
 706static struct omap_hwmod_class omap44xx_hdmi_hwmod_class = {
 707        .name   = "hdmi",
 708        .sysc   = &omap44xx_hdmi_sysc,
 709};
 710
 711/* dss_hdmi */
 712static struct omap_hwmod_opt_clk dss_hdmi_opt_clks[] = {
 713        { .role = "sys_clk", .clk = "dss_sys_clk" },
 714        { .role = "hdmi_clk", .clk = "dss_48mhz_clk" },
 715};
 716
 717static struct omap_hwmod omap44xx_dss_hdmi_hwmod = {
 718        .name           = "dss_hdmi",
 719        .class          = &omap44xx_hdmi_hwmod_class,
 720        .clkdm_name     = "l3_dss_clkdm",
 721        /*
 722         * HDMI audio requires to use no-idle mode. Hence,
 723         * set idle mode by software.
 724         */
 725        .flags          = HWMOD_SWSUP_SIDLE | HWMOD_OPT_CLKS_NEEDED,
 726        .main_clk       = "dss_48mhz_clk",
 727        .prcm = {
 728                .omap4 = {
 729                        .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
 730                        .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
 731                },
 732        },
 733        .opt_clks       = dss_hdmi_opt_clks,
 734        .opt_clks_cnt   = ARRAY_SIZE(dss_hdmi_opt_clks),
 735        .parent_hwmod   = &omap44xx_dss_hwmod,
 736};
 737
 738/*
 739 * 'rfbi' class
 740 * remote frame buffer interface
 741 */
 742
 743static struct omap_hwmod_class_sysconfig omap44xx_rfbi_sysc = {
 744        .rev_offs       = 0x0000,
 745        .sysc_offs      = 0x0010,
 746        .syss_offs      = 0x0014,
 747        .sysc_flags     = (SYSC_HAS_AUTOIDLE | SYSC_HAS_SIDLEMODE |
 748                           SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
 749        .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
 750        .sysc_fields    = &omap_hwmod_sysc_type1,
 751};
 752
 753static struct omap_hwmod_class omap44xx_rfbi_hwmod_class = {
 754        .name   = "rfbi",
 755        .sysc   = &omap44xx_rfbi_sysc,
 756};
 757
 758/* dss_rfbi */
 759static struct omap_hwmod_opt_clk dss_rfbi_opt_clks[] = {
 760        { .role = "ick", .clk = "l3_div_ck" },
 761};
 762
 763static struct omap_hwmod omap44xx_dss_rfbi_hwmod = {
 764        .name           = "dss_rfbi",
 765        .class          = &omap44xx_rfbi_hwmod_class,
 766        .clkdm_name     = "l3_dss_clkdm",
 767        .main_clk       = "dss_dss_clk",
 768        .prcm = {
 769                .omap4 = {
 770                        .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
 771                        .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
 772                },
 773        },
 774        .opt_clks       = dss_rfbi_opt_clks,
 775        .opt_clks_cnt   = ARRAY_SIZE(dss_rfbi_opt_clks),
 776        .parent_hwmod   = &omap44xx_dss_hwmod,
 777};
 778
 779/*
 780 * 'venc' class
 781 * video encoder
 782 */
 783
 784static struct omap_hwmod_class omap44xx_venc_hwmod_class = {
 785        .name   = "venc",
 786};
 787
 788/* dss_venc */
 789static struct omap_hwmod_opt_clk dss_venc_opt_clks[] = {
 790        { .role = "tv_clk", .clk = "dss_tv_clk" },
 791};
 792
 793static struct omap_hwmod omap44xx_dss_venc_hwmod = {
 794        .name           = "dss_venc",
 795        .class          = &omap44xx_venc_hwmod_class,
 796        .clkdm_name     = "l3_dss_clkdm",
 797        .main_clk       = "dss_tv_clk",
 798        .flags          = HWMOD_OPT_CLKS_NEEDED,
 799        .prcm = {
 800                .omap4 = {
 801                        .clkctrl_offs = OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET,
 802                        .context_offs = OMAP4_RM_DSS_DSS_CONTEXT_OFFSET,
 803                },
 804        },
 805        .parent_hwmod   = &omap44xx_dss_hwmod,
 806        .opt_clks       = dss_venc_opt_clks,
 807        .opt_clks_cnt   = ARRAY_SIZE(dss_venc_opt_clks),
 808};
 809
 810/* sha0 HIB2 (the 'P' (public) device) */
 811static struct omap_hwmod_class_sysconfig omap44xx_sha0_sysc = {
 812        .rev_offs       = 0x100,
 813        .sysc_offs      = 0x110,
 814        .syss_offs      = 0x114,
 815        .sysc_flags     = SYSS_HAS_RESET_STATUS,
 816};
 817
 818static struct omap_hwmod_class omap44xx_sha0_hwmod_class = {
 819        .name           = "sham",
 820        .sysc           = &omap44xx_sha0_sysc,
 821};
 822
 823struct omap_hwmod omap44xx_sha0_hwmod = {
 824        .name           = "sham",
 825        .class          = &omap44xx_sha0_hwmod_class,
 826        .clkdm_name     = "l4_secure_clkdm",
 827        .main_clk       = "l3_div_ck",
 828        .prcm           = {
 829                .omap4 = {
 830                        .clkctrl_offs = OMAP4_CM_L4SEC_SHA2MD51_CLKCTRL_OFFSET,
 831                        .context_offs = OMAP4_RM_L4SEC_SHA2MD51_CONTEXT_OFFSET,
 832                        .modulemode   = MODULEMODE_SWCTRL,
 833                },
 834        },
 835};
 836
 837/*
 838 * 'elm' class
 839 * bch error location module
 840 */
 841
 842static struct omap_hwmod_class_sysconfig omap44xx_elm_sysc = {
 843        .rev_offs       = 0x0000,
 844        .sysc_offs      = 0x0010,
 845        .syss_offs      = 0x0014,
 846        .sysc_flags     = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
 847                           SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
 848                           SYSS_HAS_RESET_STATUS),
 849        .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
 850        .sysc_fields    = &omap_hwmod_sysc_type1,
 851};
 852
 853static struct omap_hwmod_class omap44xx_elm_hwmod_class = {
 854        .name   = "elm",
 855        .sysc   = &omap44xx_elm_sysc,
 856};
 857
 858/* elm */
 859static struct omap_hwmod omap44xx_elm_hwmod = {
 860        .name           = "elm",
 861        .class          = &omap44xx_elm_hwmod_class,
 862        .clkdm_name     = "l4_per_clkdm",
 863        .prcm = {
 864                .omap4 = {
 865                        .clkctrl_offs = OMAP4_CM_L4PER_ELM_CLKCTRL_OFFSET,
 866                        .context_offs = OMAP4_RM_L4PER_ELM_CONTEXT_OFFSET,
 867                },
 868        },
 869};
 870
 871/*
 872 * 'emif' class
 873 * external memory interface no1
 874 */
 875
 876static struct omap_hwmod_class_sysconfig omap44xx_emif_sysc = {
 877        .rev_offs       = 0x0000,
 878};
 879
 880static struct omap_hwmod_class omap44xx_emif_hwmod_class = {
 881        .name   = "emif",
 882        .sysc   = &omap44xx_emif_sysc,
 883};
 884
 885/* emif1 */
 886static struct omap_hwmod omap44xx_emif1_hwmod = {
 887        .name           = "emif1",
 888        .class          = &omap44xx_emif_hwmod_class,
 889        .clkdm_name     = "l3_emif_clkdm",
 890        .flags          = HWMOD_INIT_NO_IDLE,
 891        .main_clk       = "ddrphy_ck",
 892        .prcm = {
 893                .omap4 = {
 894                        .clkctrl_offs = OMAP4_CM_MEMIF_EMIF_1_CLKCTRL_OFFSET,
 895                        .context_offs = OMAP4_RM_MEMIF_EMIF_1_CONTEXT_OFFSET,
 896                        .modulemode   = MODULEMODE_HWCTRL,
 897                },
 898        },
 899};
 900
 901/* emif2 */
 902static struct omap_hwmod omap44xx_emif2_hwmod = {
 903        .name           = "emif2",
 904        .class          = &omap44xx_emif_hwmod_class,
 905        .clkdm_name     = "l3_emif_clkdm",
 906        .flags          = HWMOD_INIT_NO_IDLE,
 907        .main_clk       = "ddrphy_ck",
 908        .prcm = {
 909                .omap4 = {
 910                        .clkctrl_offs = OMAP4_CM_MEMIF_EMIF_2_CLKCTRL_OFFSET,
 911                        .context_offs = OMAP4_RM_MEMIF_EMIF_2_CONTEXT_OFFSET,
 912                        .modulemode   = MODULEMODE_HWCTRL,
 913                },
 914        },
 915};
 916
 917/*
 918    Crypto modules AES0/1 belong to:
 919        PD_L4_PER power domain
 920        CD_L4_SEC clock domain
 921        On the L3, the AES modules are mapped to
 922        L3_CLK2: Peripherals and multimedia sub clock domain
 923*/
 924static struct omap_hwmod_class_sysconfig omap44xx_aes_sysc = {
 925        .rev_offs       = 0x80,
 926        .sysc_offs      = 0x84,
 927        .syss_offs      = 0x88,
 928        .sysc_flags     = SYSS_HAS_RESET_STATUS,
 929};
 930
 931static struct omap_hwmod_class omap44xx_aes_hwmod_class = {
 932        .name           = "aes",
 933        .sysc           = &omap44xx_aes_sysc,
 934};
 935
 936static struct omap_hwmod omap44xx_aes1_hwmod = {
 937        .name           = "aes1",
 938        .class          = &omap44xx_aes_hwmod_class,
 939        .clkdm_name     = "l4_secure_clkdm",
 940        .main_clk       = "l3_div_ck",
 941        .prcm           = {
 942                .omap4  = {
 943                        .context_offs   = OMAP4_RM_L4SEC_AES1_CONTEXT_OFFSET,
 944                        .clkctrl_offs   = OMAP4_CM_L4SEC_AES1_CLKCTRL_OFFSET,
 945                        .modulemode     = MODULEMODE_SWCTRL,
 946                },
 947        },
 948};
 949
 950static struct omap_hwmod_ocp_if omap44xx_l3_main_2__aes1 = {
 951        .master         = &omap44xx_l4_per_hwmod,
 952        .slave          = &omap44xx_aes1_hwmod,
 953        .clk            = "l3_div_ck",
 954        .user           = OCP_USER_MPU | OCP_USER_SDMA,
 955};
 956
 957static struct omap_hwmod omap44xx_aes2_hwmod = {
 958        .name           = "aes2",
 959        .class          = &omap44xx_aes_hwmod_class,
 960        .clkdm_name     = "l4_secure_clkdm",
 961        .main_clk       = "l3_div_ck",
 962        .prcm           = {
 963                .omap4  = {
 964                        .context_offs   = OMAP4_RM_L4SEC_AES2_CONTEXT_OFFSET,
 965                        .clkctrl_offs   = OMAP4_CM_L4SEC_AES2_CLKCTRL_OFFSET,
 966                        .modulemode     = MODULEMODE_SWCTRL,
 967                },
 968        },
 969};
 970
 971static struct omap_hwmod_ocp_if omap44xx_l3_main_2__aes2 = {
 972        .master         = &omap44xx_l4_per_hwmod,
 973        .slave          = &omap44xx_aes2_hwmod,
 974        .clk            = "l3_div_ck",
 975        .user           = OCP_USER_MPU | OCP_USER_SDMA,
 976};
 977
 978/*
 979 * 'des' class for DES3DES module
 980 */
 981static struct omap_hwmod_class_sysconfig omap44xx_des_sysc = {
 982        .rev_offs       = 0x30,
 983        .sysc_offs      = 0x34,
 984        .syss_offs      = 0x38,
 985        .sysc_flags     = SYSS_HAS_RESET_STATUS,
 986};
 987
 988static struct omap_hwmod_class omap44xx_des_hwmod_class = {
 989        .name           = "des",
 990        .sysc           = &omap44xx_des_sysc,
 991};
 992
 993static struct omap_hwmod omap44xx_des_hwmod = {
 994        .name           = "des",
 995        .class          = &omap44xx_des_hwmod_class,
 996        .clkdm_name     = "l4_secure_clkdm",
 997        .main_clk       = "l3_div_ck",
 998        .prcm           = {
 999                .omap4  = {
1000                        .context_offs   = OMAP4_RM_L4SEC_DES3DES_CONTEXT_OFFSET,
1001                        .clkctrl_offs   = OMAP4_CM_L4SEC_DES3DES_CLKCTRL_OFFSET,
1002                        .modulemode     = MODULEMODE_SWCTRL,
1003                },
1004        },
1005};
1006
1007struct omap_hwmod_ocp_if omap44xx_l3_main_2__des = {
1008        .master         = &omap44xx_l3_main_2_hwmod,
1009        .slave          = &omap44xx_des_hwmod,
1010        .clk            = "l3_div_ck",
1011        .user           = OCP_USER_MPU | OCP_USER_SDMA,
1012};
1013
1014/*
1015 * 'fdif' class
1016 * face detection hw accelerator module
1017 */
1018
1019static struct omap_hwmod_class_sysconfig omap44xx_fdif_sysc = {
1020        .rev_offs       = 0x0000,
1021        .sysc_offs      = 0x0010,
1022        /*
1023         * FDIF needs 100 OCP clk cycles delay after a softreset before
1024         * accessing sysconfig again.
1025         * The lowest frequency at the moment for L3 bus is 100 MHz, so
1026         * 1usec delay is needed. Add an x2 margin to be safe (2 usecs).
1027         *
1028         * TODO: Indicate errata when available.
1029         */
1030        .srst_udelay    = 2,
1031        .sysc_flags     = (SYSC_HAS_MIDLEMODE | SYSC_HAS_RESET_STATUS |
1032                           SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
1033        .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1034                           MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
1035        .sysc_fields    = &omap_hwmod_sysc_type2,
1036};
1037
1038static struct omap_hwmod_class omap44xx_fdif_hwmod_class = {
1039        .name   = "fdif",
1040        .sysc   = &omap44xx_fdif_sysc,
1041};
1042
1043/* fdif */
1044static struct omap_hwmod omap44xx_fdif_hwmod = {
1045        .name           = "fdif",
1046        .class          = &omap44xx_fdif_hwmod_class,
1047        .clkdm_name     = "iss_clkdm",
1048        .main_clk       = "fdif_fck",
1049        .prcm = {
1050                .omap4 = {
1051                        .clkctrl_offs = OMAP4_CM_CAM_FDIF_CLKCTRL_OFFSET,
1052                        .context_offs = OMAP4_RM_CAM_FDIF_CONTEXT_OFFSET,
1053                        .modulemode   = MODULEMODE_SWCTRL,
1054                },
1055        },
1056};
1057
1058/*
1059 * 'gpio' class
1060 * general purpose io module
1061 */
1062
1063static struct omap_hwmod_class_sysconfig omap44xx_gpio_sysc = {
1064        .rev_offs       = 0x0000,
1065        .sysc_offs      = 0x0010,
1066        .syss_offs      = 0x0114,
1067        .sysc_flags     = (SYSC_HAS_AUTOIDLE | SYSC_HAS_ENAWAKEUP |
1068                           SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
1069                           SYSS_HAS_RESET_STATUS),
1070        .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1071                           SIDLE_SMART_WKUP),
1072        .sysc_fields    = &omap_hwmod_sysc_type1,
1073};
1074
1075static struct omap_hwmod_class omap44xx_gpio_hwmod_class = {
1076        .name   = "gpio",
1077        .sysc   = &omap44xx_gpio_sysc,
1078        .rev    = 2,
1079};
1080
1081/* gpio1 */
1082static struct omap_hwmod_opt_clk gpio1_opt_clks[] = {
1083        { .role = "dbclk", .clk = "gpio1_dbclk" },
1084};
1085
1086static struct omap_hwmod omap44xx_gpio1_hwmod = {
1087        .name           = "gpio1",
1088        .class          = &omap44xx_gpio_hwmod_class,
1089        .clkdm_name     = "l4_wkup_clkdm",
1090        .main_clk       = "l4_wkup_clk_mux_ck",
1091        .prcm = {
1092                .omap4 = {
1093                        .clkctrl_offs = OMAP4_CM_WKUP_GPIO1_CLKCTRL_OFFSET,
1094                        .context_offs = OMAP4_RM_WKUP_GPIO1_CONTEXT_OFFSET,
1095                        .modulemode   = MODULEMODE_HWCTRL,
1096                },
1097        },
1098        .opt_clks       = gpio1_opt_clks,
1099        .opt_clks_cnt   = ARRAY_SIZE(gpio1_opt_clks),
1100};
1101
1102/* gpio2 */
1103static struct omap_hwmod_opt_clk gpio2_opt_clks[] = {
1104        { .role = "dbclk", .clk = "gpio2_dbclk" },
1105};
1106
1107static struct omap_hwmod omap44xx_gpio2_hwmod = {
1108        .name           = "gpio2",
1109        .class          = &omap44xx_gpio_hwmod_class,
1110        .clkdm_name     = "l4_per_clkdm",
1111        .flags          = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
1112        .main_clk       = "l4_div_ck",
1113        .prcm = {
1114                .omap4 = {
1115                        .clkctrl_offs = OMAP4_CM_L4PER_GPIO2_CLKCTRL_OFFSET,
1116                        .context_offs = OMAP4_RM_L4PER_GPIO2_CONTEXT_OFFSET,
1117                        .modulemode   = MODULEMODE_HWCTRL,
1118                },
1119        },
1120        .opt_clks       = gpio2_opt_clks,
1121        .opt_clks_cnt   = ARRAY_SIZE(gpio2_opt_clks),
1122};
1123
1124/* gpio3 */
1125static struct omap_hwmod_opt_clk gpio3_opt_clks[] = {
1126        { .role = "dbclk", .clk = "gpio3_dbclk" },
1127};
1128
1129static struct omap_hwmod omap44xx_gpio3_hwmod = {
1130        .name           = "gpio3",
1131        .class          = &omap44xx_gpio_hwmod_class,
1132        .clkdm_name     = "l4_per_clkdm",
1133        .flags          = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
1134        .main_clk       = "l4_div_ck",
1135        .prcm = {
1136                .omap4 = {
1137                        .clkctrl_offs = OMAP4_CM_L4PER_GPIO3_CLKCTRL_OFFSET,
1138                        .context_offs = OMAP4_RM_L4PER_GPIO3_CONTEXT_OFFSET,
1139                        .modulemode   = MODULEMODE_HWCTRL,
1140                },
1141        },
1142        .opt_clks       = gpio3_opt_clks,
1143        .opt_clks_cnt   = ARRAY_SIZE(gpio3_opt_clks),
1144};
1145
1146/* gpio4 */
1147static struct omap_hwmod_opt_clk gpio4_opt_clks[] = {
1148        { .role = "dbclk", .clk = "gpio4_dbclk" },
1149};
1150
1151static struct omap_hwmod omap44xx_gpio4_hwmod = {
1152        .name           = "gpio4",
1153        .class          = &omap44xx_gpio_hwmod_class,
1154        .clkdm_name     = "l4_per_clkdm",
1155        .flags          = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
1156        .main_clk       = "l4_div_ck",
1157        .prcm = {
1158                .omap4 = {
1159                        .clkctrl_offs = OMAP4_CM_L4PER_GPIO4_CLKCTRL_OFFSET,
1160                        .context_offs = OMAP4_RM_L4PER_GPIO4_CONTEXT_OFFSET,
1161                        .modulemode   = MODULEMODE_HWCTRL,
1162                },
1163        },
1164        .opt_clks       = gpio4_opt_clks,
1165        .opt_clks_cnt   = ARRAY_SIZE(gpio4_opt_clks),
1166};
1167
1168/* gpio5 */
1169static struct omap_hwmod_opt_clk gpio5_opt_clks[] = {
1170        { .role = "dbclk", .clk = "gpio5_dbclk" },
1171};
1172
1173static struct omap_hwmod omap44xx_gpio5_hwmod = {
1174        .name           = "gpio5",
1175        .class          = &omap44xx_gpio_hwmod_class,
1176        .clkdm_name     = "l4_per_clkdm",
1177        .flags          = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
1178        .main_clk       = "l4_div_ck",
1179        .prcm = {
1180                .omap4 = {
1181                        .clkctrl_offs = OMAP4_CM_L4PER_GPIO5_CLKCTRL_OFFSET,
1182                        .context_offs = OMAP4_RM_L4PER_GPIO5_CONTEXT_OFFSET,
1183                        .modulemode   = MODULEMODE_HWCTRL,
1184                },
1185        },
1186        .opt_clks       = gpio5_opt_clks,
1187        .opt_clks_cnt   = ARRAY_SIZE(gpio5_opt_clks),
1188};
1189
1190/* gpio6 */
1191static struct omap_hwmod_opt_clk gpio6_opt_clks[] = {
1192        { .role = "dbclk", .clk = "gpio6_dbclk" },
1193};
1194
1195static struct omap_hwmod omap44xx_gpio6_hwmod = {
1196        .name           = "gpio6",
1197        .class          = &omap44xx_gpio_hwmod_class,
1198        .clkdm_name     = "l4_per_clkdm",
1199        .flags          = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
1200        .main_clk       = "l4_div_ck",
1201        .prcm = {
1202                .omap4 = {
1203                        .clkctrl_offs = OMAP4_CM_L4PER_GPIO6_CLKCTRL_OFFSET,
1204                        .context_offs = OMAP4_RM_L4PER_GPIO6_CONTEXT_OFFSET,
1205                        .modulemode   = MODULEMODE_HWCTRL,
1206                },
1207        },
1208        .opt_clks       = gpio6_opt_clks,
1209        .opt_clks_cnt   = ARRAY_SIZE(gpio6_opt_clks),
1210};
1211
1212/*
1213 * 'gpmc' class
1214 * general purpose memory controller
1215 */
1216
1217static struct omap_hwmod_class_sysconfig omap44xx_gpmc_sysc = {
1218        .rev_offs       = 0x0000,
1219        .sysc_offs      = 0x0010,
1220        .syss_offs      = 0x0014,
1221        .sysc_flags     = (SYSC_HAS_AUTOIDLE | SYSC_HAS_SIDLEMODE |
1222                           SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
1223        .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1224        .sysc_fields    = &omap_hwmod_sysc_type1,
1225};
1226
1227static struct omap_hwmod_class omap44xx_gpmc_hwmod_class = {
1228        .name   = "gpmc",
1229        .sysc   = &omap44xx_gpmc_sysc,
1230};
1231
1232/* gpmc */
1233static struct omap_hwmod omap44xx_gpmc_hwmod = {
1234        .name           = "gpmc",
1235        .class          = &omap44xx_gpmc_hwmod_class,
1236        .clkdm_name     = "l3_2_clkdm",
1237        /* Skip reset for CONFIG_OMAP_GPMC_DEBUG for bootloader timings */
1238        .flags          = DEBUG_OMAP_GPMC_HWMOD_FLAGS,
1239        .prcm = {
1240                .omap4 = {
1241                        .clkctrl_offs = OMAP4_CM_L3_2_GPMC_CLKCTRL_OFFSET,
1242                        .context_offs = OMAP4_RM_L3_2_GPMC_CONTEXT_OFFSET,
1243                        .modulemode   = MODULEMODE_HWCTRL,
1244                },
1245        },
1246};
1247
1248/*
1249 * 'gpu' class
1250 * 2d/3d graphics accelerator
1251 */
1252
1253static struct omap_hwmod_class_sysconfig omap44xx_gpu_sysc = {
1254        .rev_offs       = 0x1fc00,
1255        .sysc_offs      = 0x1fc10,
1256        .sysc_flags     = (SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE),
1257        .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1258                           SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
1259                           MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
1260        .sysc_fields    = &omap_hwmod_sysc_type2,
1261};
1262
1263static struct omap_hwmod_class omap44xx_gpu_hwmod_class = {
1264        .name   = "gpu",
1265        .sysc   = &omap44xx_gpu_sysc,
1266};
1267
1268/* gpu */
1269static struct omap_hwmod omap44xx_gpu_hwmod = {
1270        .name           = "gpu",
1271        .class          = &omap44xx_gpu_hwmod_class,
1272        .clkdm_name     = "l3_gfx_clkdm",
1273        .main_clk       = "sgx_clk_mux",
1274        .prcm = {
1275                .omap4 = {
1276                        .clkctrl_offs = OMAP4_CM_GFX_GFX_CLKCTRL_OFFSET,
1277                        .context_offs = OMAP4_RM_GFX_GFX_CONTEXT_OFFSET,
1278                        .modulemode   = MODULEMODE_SWCTRL,
1279                },
1280        },
1281};
1282
1283/*
1284 * 'hdq1w' class
1285 * hdq / 1-wire serial interface controller
1286 */
1287
1288static struct omap_hwmod_class_sysconfig omap44xx_hdq1w_sysc = {
1289        .rev_offs       = 0x0000,
1290        .sysc_offs      = 0x0014,
1291        .syss_offs      = 0x0018,
1292        .sysc_flags     = (SYSC_HAS_AUTOIDLE | SYSC_HAS_SOFTRESET |
1293                           SYSS_HAS_RESET_STATUS),
1294        .sysc_fields    = &omap_hwmod_sysc_type1,
1295};
1296
1297static struct omap_hwmod_class omap44xx_hdq1w_hwmod_class = {
1298        .name   = "hdq1w",
1299        .sysc   = &omap44xx_hdq1w_sysc,
1300};
1301
1302/* hdq1w */
1303static struct omap_hwmod omap44xx_hdq1w_hwmod = {
1304        .name           = "hdq1w",
1305        .class          = &omap44xx_hdq1w_hwmod_class,
1306        .clkdm_name     = "l4_per_clkdm",
1307        .flags          = HWMOD_INIT_NO_RESET, /* XXX temporary */
1308        .main_clk       = "func_12m_fclk",
1309        .prcm = {
1310                .omap4 = {
1311                        .clkctrl_offs = OMAP4_CM_L4PER_HDQ1W_CLKCTRL_OFFSET,
1312                        .context_offs = OMAP4_RM_L4PER_HDQ1W_CONTEXT_OFFSET,
1313                        .modulemode   = MODULEMODE_SWCTRL,
1314                },
1315        },
1316};
1317
1318/*
1319 * 'hsi' class
1320 * mipi high-speed synchronous serial interface (multichannel and full-duplex
1321 * serial if)
1322 */
1323
1324static struct omap_hwmod_class_sysconfig omap44xx_hsi_sysc = {
1325        .rev_offs       = 0x0000,
1326        .sysc_offs      = 0x0010,
1327        .syss_offs      = 0x0014,
1328        .sysc_flags     = (SYSC_HAS_AUTOIDLE | SYSC_HAS_EMUFREE |
1329                           SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE |
1330                           SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
1331        .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1332                           SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
1333                           MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
1334        .sysc_fields    = &omap_hwmod_sysc_type1,
1335};
1336
1337static struct omap_hwmod_class omap44xx_hsi_hwmod_class = {
1338        .name   = "hsi",
1339        .sysc   = &omap44xx_hsi_sysc,
1340};
1341
1342/* hsi */
1343static struct omap_hwmod omap44xx_hsi_hwmod = {
1344        .name           = "hsi",
1345        .class          = &omap44xx_hsi_hwmod_class,
1346        .clkdm_name     = "l3_init_clkdm",
1347        .main_clk       = "hsi_fck",
1348        .prcm = {
1349                .omap4 = {
1350                        .clkctrl_offs = OMAP4_CM_L3INIT_HSI_CLKCTRL_OFFSET,
1351                        .context_offs = OMAP4_RM_L3INIT_HSI_CONTEXT_OFFSET,
1352                        .modulemode   = MODULEMODE_HWCTRL,
1353                },
1354        },
1355};
1356
1357/*
1358 * 'i2c' class
1359 * multimaster high-speed i2c controller
1360 */
1361
1362static struct omap_hwmod_class_sysconfig omap44xx_i2c_sysc = {
1363        .rev_offs       = 0,
1364        .sysc_offs      = 0x0010,
1365        .syss_offs      = 0x0090,
1366        .sysc_flags     = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
1367                           SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
1368                           SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
1369        .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1370                           SIDLE_SMART_WKUP),
1371        .sysc_fields    = &omap_hwmod_sysc_type1,
1372};
1373
1374static struct omap_hwmod_class omap44xx_i2c_hwmod_class = {
1375        .name   = "i2c",
1376        .sysc   = &omap44xx_i2c_sysc,
1377        .rev    = OMAP_I2C_IP_VERSION_2,
1378        .reset  = &omap_i2c_reset,
1379};
1380
1381/* i2c1 */
1382static struct omap_hwmod omap44xx_i2c1_hwmod = {
1383        .name           = "i2c1",
1384        .class          = &omap44xx_i2c_hwmod_class,
1385        .clkdm_name     = "l4_per_clkdm",
1386        .flags          = HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
1387        .main_clk       = "func_96m_fclk",
1388        .prcm = {
1389                .omap4 = {
1390                        .clkctrl_offs = OMAP4_CM_L4PER_I2C1_CLKCTRL_OFFSET,
1391                        .context_offs = OMAP4_RM_L4PER_I2C1_CONTEXT_OFFSET,
1392                        .modulemode   = MODULEMODE_SWCTRL,
1393                },
1394        },
1395};
1396
1397/* i2c2 */
1398static struct omap_hwmod omap44xx_i2c2_hwmod = {
1399        .name           = "i2c2",
1400        .class          = &omap44xx_i2c_hwmod_class,
1401        .clkdm_name     = "l4_per_clkdm",
1402        .flags          = HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
1403        .main_clk       = "func_96m_fclk",
1404        .prcm = {
1405                .omap4 = {
1406                        .clkctrl_offs = OMAP4_CM_L4PER_I2C2_CLKCTRL_OFFSET,
1407                        .context_offs = OMAP4_RM_L4PER_I2C2_CONTEXT_OFFSET,
1408                        .modulemode   = MODULEMODE_SWCTRL,
1409                },
1410        },
1411};
1412
1413/* i2c3 */
1414static struct omap_hwmod omap44xx_i2c3_hwmod = {
1415        .name           = "i2c3",
1416        .class          = &omap44xx_i2c_hwmod_class,
1417        .clkdm_name     = "l4_per_clkdm",
1418        .flags          = HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
1419        .main_clk       = "func_96m_fclk",
1420        .prcm = {
1421                .omap4 = {
1422                        .clkctrl_offs = OMAP4_CM_L4PER_I2C3_CLKCTRL_OFFSET,
1423                        .context_offs = OMAP4_RM_L4PER_I2C3_CONTEXT_OFFSET,
1424                        .modulemode   = MODULEMODE_SWCTRL,
1425                },
1426        },
1427};
1428
1429/* i2c4 */
1430static struct omap_hwmod omap44xx_i2c4_hwmod = {
1431        .name           = "i2c4",
1432        .class          = &omap44xx_i2c_hwmod_class,
1433        .clkdm_name     = "l4_per_clkdm",
1434        .flags          = HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
1435        .main_clk       = "func_96m_fclk",
1436        .prcm = {
1437                .omap4 = {
1438                        .clkctrl_offs = OMAP4_CM_L4PER_I2C4_CLKCTRL_OFFSET,
1439                        .context_offs = OMAP4_RM_L4PER_I2C4_CONTEXT_OFFSET,
1440                        .modulemode   = MODULEMODE_SWCTRL,
1441                },
1442        },
1443};
1444
1445/*
1446 * 'ipu' class
1447 * imaging processor unit
1448 */
1449
1450static struct omap_hwmod_class omap44xx_ipu_hwmod_class = {
1451        .name   = "ipu",
1452};
1453
1454/* ipu */
1455static struct omap_hwmod_rst_info omap44xx_ipu_resets[] = {
1456        { .name = "cpu0", .rst_shift = 0 },
1457        { .name = "cpu1", .rst_shift = 1 },
1458};
1459
1460static struct omap_hwmod omap44xx_ipu_hwmod = {
1461        .name           = "ipu",
1462        .class          = &omap44xx_ipu_hwmod_class,
1463        .clkdm_name     = "ducati_clkdm",
1464        .rst_lines      = omap44xx_ipu_resets,
1465        .rst_lines_cnt  = ARRAY_SIZE(omap44xx_ipu_resets),
1466        .main_clk       = "ducati_clk_mux_ck",
1467        .prcm = {
1468                .omap4 = {
1469                        .clkctrl_offs = OMAP4_CM_DUCATI_DUCATI_CLKCTRL_OFFSET,
1470                        .rstctrl_offs = OMAP4_RM_DUCATI_RSTCTRL_OFFSET,
1471                        .context_offs = OMAP4_RM_DUCATI_DUCATI_CONTEXT_OFFSET,
1472                        .modulemode   = MODULEMODE_HWCTRL,
1473                },
1474        },
1475};
1476
1477/*
1478 * 'iss' class
1479 * external images sensor pixel data processor
1480 */
1481
1482static struct omap_hwmod_class_sysconfig omap44xx_iss_sysc = {
1483        .rev_offs       = 0x0000,
1484        .sysc_offs      = 0x0010,
1485        /*
1486         * ISS needs 100 OCP clk cycles delay after a softreset before
1487         * accessing sysconfig again.
1488         * The lowest frequency at the moment for L3 bus is 100 MHz, so
1489         * 1usec delay is needed. Add an x2 margin to be safe (2 usecs).
1490         *
1491         * TODO: Indicate errata when available.
1492         */
1493        .srst_udelay    = 2,
1494        .sysc_flags     = (SYSC_HAS_MIDLEMODE | SYSC_HAS_RESET_STATUS |
1495                           SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
1496        .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1497                           SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
1498                           MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
1499        .sysc_fields    = &omap_hwmod_sysc_type2,
1500};
1501
1502static struct omap_hwmod_class omap44xx_iss_hwmod_class = {
1503        .name   = "iss",
1504        .sysc   = &omap44xx_iss_sysc,
1505};
1506
1507/* iss */
1508static struct omap_hwmod_opt_clk iss_opt_clks[] = {
1509        { .role = "ctrlclk", .clk = "iss_ctrlclk" },
1510};
1511
1512static struct omap_hwmod omap44xx_iss_hwmod = {
1513        .name           = "iss",
1514        .class          = &omap44xx_iss_hwmod_class,
1515        .clkdm_name     = "iss_clkdm",
1516        .main_clk       = "ducati_clk_mux_ck",
1517        .prcm = {
1518                .omap4 = {
1519                        .clkctrl_offs = OMAP4_CM_CAM_ISS_CLKCTRL_OFFSET,
1520                        .context_offs = OMAP4_RM_CAM_ISS_CONTEXT_OFFSET,
1521                        .modulemode   = MODULEMODE_SWCTRL,
1522                },
1523        },
1524        .opt_clks       = iss_opt_clks,
1525        .opt_clks_cnt   = ARRAY_SIZE(iss_opt_clks),
1526};
1527
1528/*
1529 * 'iva' class
1530 * multi-standard video encoder/decoder hardware accelerator
1531 */
1532
1533static struct omap_hwmod_class omap44xx_iva_hwmod_class = {
1534        .name   = "iva",
1535};
1536
1537/* iva */
1538static struct omap_hwmod_rst_info omap44xx_iva_resets[] = {
1539        { .name = "seq0", .rst_shift = 0 },
1540        { .name = "seq1", .rst_shift = 1 },
1541        { .name = "logic", .rst_shift = 2 },
1542};
1543
1544static struct omap_hwmod omap44xx_iva_hwmod = {
1545        .name           = "iva",
1546        .class          = &omap44xx_iva_hwmod_class,
1547        .clkdm_name     = "ivahd_clkdm",
1548        .rst_lines      = omap44xx_iva_resets,
1549        .rst_lines_cnt  = ARRAY_SIZE(omap44xx_iva_resets),
1550        .main_clk       = "dpll_iva_m5x2_ck",
1551        .prcm = {
1552                .omap4 = {
1553                        .clkctrl_offs = OMAP4_CM_IVAHD_IVAHD_CLKCTRL_OFFSET,
1554                        .rstctrl_offs = OMAP4_RM_IVAHD_RSTCTRL_OFFSET,
1555                        .context_offs = OMAP4_RM_IVAHD_IVAHD_CONTEXT_OFFSET,
1556                        .modulemode   = MODULEMODE_HWCTRL,
1557                },
1558        },
1559};
1560
1561/*
1562 * 'kbd' class
1563 * keyboard controller
1564 */
1565
1566static struct omap_hwmod_class_sysconfig omap44xx_kbd_sysc = {
1567        .rev_offs       = 0x0000,
1568        .sysc_offs      = 0x0010,
1569        .syss_offs      = 0x0014,
1570        .sysc_flags     = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
1571                           SYSC_HAS_EMUFREE | SYSC_HAS_ENAWAKEUP |
1572                           SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
1573                           SYSS_HAS_RESET_STATUS),
1574        .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1575        .sysc_fields    = &omap_hwmod_sysc_type1,
1576};
1577
1578static struct omap_hwmod_class omap44xx_kbd_hwmod_class = {
1579        .name   = "kbd",
1580        .sysc   = &omap44xx_kbd_sysc,
1581};
1582
1583/* kbd */
1584static struct omap_hwmod omap44xx_kbd_hwmod = {
1585        .name           = "kbd",
1586        .class          = &omap44xx_kbd_hwmod_class,
1587        .clkdm_name     = "l4_wkup_clkdm",
1588        .main_clk       = "sys_32k_ck",
1589        .prcm = {
1590                .omap4 = {
1591                        .clkctrl_offs = OMAP4_CM_WKUP_KEYBOARD_CLKCTRL_OFFSET,
1592                        .context_offs = OMAP4_RM_WKUP_KEYBOARD_CONTEXT_OFFSET,
1593                        .modulemode   = MODULEMODE_SWCTRL,
1594                },
1595        },
1596};
1597
1598/*
1599 * 'mailbox' class
1600 * mailbox module allowing communication between the on-chip processors using a
1601 * queued mailbox-interrupt mechanism.
1602 */
1603
1604static struct omap_hwmod_class_sysconfig omap44xx_mailbox_sysc = {
1605        .rev_offs       = 0x0000,
1606        .sysc_offs      = 0x0010,
1607        .sysc_flags     = (SYSC_HAS_RESET_STATUS | SYSC_HAS_SIDLEMODE |
1608                           SYSC_HAS_SOFTRESET),
1609        .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1610        .sysc_fields    = &omap_hwmod_sysc_type2,
1611};
1612
1613static struct omap_hwmod_class omap44xx_mailbox_hwmod_class = {
1614        .name   = "mailbox",
1615        .sysc   = &omap44xx_mailbox_sysc,
1616};
1617
1618/* mailbox */
1619static struct omap_hwmod omap44xx_mailbox_hwmod = {
1620        .name           = "mailbox",
1621        .class          = &omap44xx_mailbox_hwmod_class,
1622        .clkdm_name     = "l4_cfg_clkdm",
1623        .prcm = {
1624                .omap4 = {
1625                        .clkctrl_offs = OMAP4_CM_L4CFG_MAILBOX_CLKCTRL_OFFSET,
1626                        .context_offs = OMAP4_RM_L4CFG_MAILBOX_CONTEXT_OFFSET,
1627                },
1628        },
1629};
1630
1631/*
1632 * 'mcasp' class
1633 * multi-channel audio serial port controller
1634 */
1635
1636/* The IP is not compliant to type1 / type2 scheme */
1637static struct omap_hwmod_class_sysconfig omap44xx_mcasp_sysc = {
1638        .rev_offs       = 0,
1639        .sysc_offs      = 0x0004,
1640        .sysc_flags     = SYSC_HAS_SIDLEMODE,
1641        .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1642                           SIDLE_SMART_WKUP),
1643        .sysc_fields    = &omap_hwmod_sysc_type_mcasp,
1644};
1645
1646static struct omap_hwmod_class omap44xx_mcasp_hwmod_class = {
1647        .name   = "mcasp",
1648        .sysc   = &omap44xx_mcasp_sysc,
1649};
1650
1651/* mcasp */
1652static struct omap_hwmod omap44xx_mcasp_hwmod = {
1653        .name           = "mcasp",
1654        .class          = &omap44xx_mcasp_hwmod_class,
1655        .clkdm_name     = "abe_clkdm",
1656        .main_clk       = "func_mcasp_abe_gfclk",
1657        .prcm = {
1658                .omap4 = {
1659                        .clkctrl_offs = OMAP4_CM1_ABE_MCASP_CLKCTRL_OFFSET,
1660                        .context_offs = OMAP4_RM_ABE_MCASP_CONTEXT_OFFSET,
1661                        .modulemode   = MODULEMODE_SWCTRL,
1662                },
1663        },
1664};
1665
1666/*
1667 * 'mcbsp' class
1668 * multi channel buffered serial port controller
1669 */
1670
1671static struct omap_hwmod_class_sysconfig omap44xx_mcbsp_sysc = {
1672        .rev_offs       = -ENODEV,
1673        .sysc_offs      = 0x008c,
1674        .sysc_flags     = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_ENAWAKEUP |
1675                           SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
1676        .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1677        .sysc_fields    = &omap_hwmod_sysc_type1,
1678};
1679
1680static struct omap_hwmod_class omap44xx_mcbsp_hwmod_class = {
1681        .name   = "mcbsp",
1682        .sysc   = &omap44xx_mcbsp_sysc,
1683};
1684
1685/* mcbsp1 */
1686static struct omap_hwmod_opt_clk mcbsp1_opt_clks[] = {
1687        { .role = "pad_fck", .clk = "pad_clks_ck" },
1688        { .role = "prcm_fck", .clk = "mcbsp1_sync_mux_ck" },
1689};
1690
1691static struct omap_hwmod omap44xx_mcbsp1_hwmod = {
1692        .name           = "mcbsp1",
1693        .class          = &omap44xx_mcbsp_hwmod_class,
1694        .clkdm_name     = "abe_clkdm",
1695        .main_clk       = "func_mcbsp1_gfclk",
1696        .prcm = {
1697                .omap4 = {
1698                        .clkctrl_offs = OMAP4_CM1_ABE_MCBSP1_CLKCTRL_OFFSET,
1699                        .context_offs = OMAP4_RM_ABE_MCBSP1_CONTEXT_OFFSET,
1700                        .modulemode   = MODULEMODE_SWCTRL,
1701                },
1702        },
1703        .opt_clks       = mcbsp1_opt_clks,
1704        .opt_clks_cnt   = ARRAY_SIZE(mcbsp1_opt_clks),
1705};
1706
1707/* mcbsp2 */
1708static struct omap_hwmod_opt_clk mcbsp2_opt_clks[] = {
1709        { .role = "pad_fck", .clk = "pad_clks_ck" },
1710        { .role = "prcm_fck", .clk = "mcbsp2_sync_mux_ck" },
1711};
1712
1713static struct omap_hwmod omap44xx_mcbsp2_hwmod = {
1714        .name           = "mcbsp2",
1715        .class          = &omap44xx_mcbsp_hwmod_class,
1716        .clkdm_name     = "abe_clkdm",
1717        .main_clk       = "func_mcbsp2_gfclk",
1718        .prcm = {
1719                .omap4 = {
1720                        .clkctrl_offs = OMAP4_CM1_ABE_MCBSP2_CLKCTRL_OFFSET,
1721                        .context_offs = OMAP4_RM_ABE_MCBSP2_CONTEXT_OFFSET,
1722                        .modulemode   = MODULEMODE_SWCTRL,
1723                },
1724        },
1725        .opt_clks       = mcbsp2_opt_clks,
1726        .opt_clks_cnt   = ARRAY_SIZE(mcbsp2_opt_clks),
1727};
1728
1729/* mcbsp3 */
1730static struct omap_hwmod_opt_clk mcbsp3_opt_clks[] = {
1731        { .role = "pad_fck", .clk = "pad_clks_ck" },
1732        { .role = "prcm_fck", .clk = "mcbsp3_sync_mux_ck" },
1733};
1734
1735static struct omap_hwmod omap44xx_mcbsp3_hwmod = {
1736        .name           = "mcbsp3",
1737        .class          = &omap44xx_mcbsp_hwmod_class,
1738        .clkdm_name     = "abe_clkdm",
1739        .main_clk       = "func_mcbsp3_gfclk",
1740        .prcm = {
1741                .omap4 = {
1742                        .clkctrl_offs = OMAP4_CM1_ABE_MCBSP3_CLKCTRL_OFFSET,
1743                        .context_offs = OMAP4_RM_ABE_MCBSP3_CONTEXT_OFFSET,
1744                        .modulemode   = MODULEMODE_SWCTRL,
1745                },
1746        },
1747        .opt_clks       = mcbsp3_opt_clks,
1748        .opt_clks_cnt   = ARRAY_SIZE(mcbsp3_opt_clks),
1749};
1750
1751/* mcbsp4 */
1752static struct omap_hwmod_opt_clk mcbsp4_opt_clks[] = {
1753        { .role = "pad_fck", .clk = "pad_clks_ck" },
1754        { .role = "prcm_fck", .clk = "mcbsp4_sync_mux_ck" },
1755};
1756
1757static struct omap_hwmod omap44xx_mcbsp4_hwmod = {
1758        .name           = "mcbsp4",
1759        .class          = &omap44xx_mcbsp_hwmod_class,
1760        .clkdm_name     = "l4_per_clkdm",
1761        .main_clk       = "per_mcbsp4_gfclk",
1762        .prcm = {
1763                .omap4 = {
1764                        .clkctrl_offs = OMAP4_CM_L4PER_MCBSP4_CLKCTRL_OFFSET,
1765                        .context_offs = OMAP4_RM_L4PER_MCBSP4_CONTEXT_OFFSET,
1766                        .modulemode   = MODULEMODE_SWCTRL,
1767                },
1768        },
1769        .opt_clks       = mcbsp4_opt_clks,
1770        .opt_clks_cnt   = ARRAY_SIZE(mcbsp4_opt_clks),
1771};
1772
1773/*
1774 * 'mcpdm' class
1775 * multi channel pdm controller (proprietary interface with phoenix power
1776 * ic)
1777 */
1778
1779static struct omap_hwmod_class_sysconfig omap44xx_mcpdm_sysc = {
1780        .rev_offs       = 0x0000,
1781        .sysc_offs      = 0x0010,
1782        .sysc_flags     = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
1783                           SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
1784        .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1785                           SIDLE_SMART_WKUP),
1786        .sysc_fields    = &omap_hwmod_sysc_type2,
1787};
1788
1789static struct omap_hwmod_class omap44xx_mcpdm_hwmod_class = {
1790        .name   = "mcpdm",
1791        .sysc   = &omap44xx_mcpdm_sysc,
1792};
1793
1794/* mcpdm */
1795static struct omap_hwmod omap44xx_mcpdm_hwmod = {
1796        .name           = "mcpdm",
1797        .class          = &omap44xx_mcpdm_hwmod_class,
1798        .clkdm_name     = "abe_clkdm",
1799        /*
1800         * It's suspected that the McPDM requires an off-chip main
1801         * functional clock, controlled via I2C.  This IP block is
1802         * currently reset very early during boot, before I2C is
1803         * available, so it doesn't seem that we have any choice in
1804         * the kernel other than to avoid resetting it.
1805         *
1806         * Also, McPDM needs to be configured to NO_IDLE mode when it
1807         * is in used otherwise vital clocks will be gated which
1808         * results 'slow motion' audio playback.
1809         */
1810        .flags          = HWMOD_EXT_OPT_MAIN_CLK | HWMOD_SWSUP_SIDLE,
1811        .main_clk       = "pad_clks_ck",
1812        .prcm = {
1813                .omap4 = {
1814                        .clkctrl_offs = OMAP4_CM1_ABE_PDM_CLKCTRL_OFFSET,
1815                        .context_offs = OMAP4_RM_ABE_PDM_CONTEXT_OFFSET,
1816                        .modulemode   = MODULEMODE_SWCTRL,
1817                },
1818        },
1819};
1820
1821/*
1822 * 'mcspi' class
1823 * multichannel serial port interface (mcspi) / master/slave synchronous serial
1824 * bus
1825 */
1826
1827static struct omap_hwmod_class_sysconfig omap44xx_mcspi_sysc = {
1828        .rev_offs       = 0x0000,
1829        .sysc_offs      = 0x0010,
1830        .sysc_flags     = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
1831                           SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
1832        .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1833                           SIDLE_SMART_WKUP),
1834        .sysc_fields    = &omap_hwmod_sysc_type2,
1835};
1836
1837static struct omap_hwmod_class omap44xx_mcspi_hwmod_class = {
1838        .name   = "mcspi",
1839        .sysc   = &omap44xx_mcspi_sysc,
1840};
1841
1842/* mcspi1 */
1843static struct omap_hwmod omap44xx_mcspi1_hwmod = {
1844        .name           = "mcspi1",
1845        .class          = &omap44xx_mcspi_hwmod_class,
1846        .clkdm_name     = "l4_per_clkdm",
1847        .main_clk       = "func_48m_fclk",
1848        .prcm = {
1849                .omap4 = {
1850                        .clkctrl_offs = OMAP4_CM_L4PER_MCSPI1_CLKCTRL_OFFSET,
1851                        .context_offs = OMAP4_RM_L4PER_MCSPI1_CONTEXT_OFFSET,
1852                        .modulemode   = MODULEMODE_SWCTRL,
1853                },
1854        },
1855};
1856
1857/* mcspi2 */
1858static struct omap_hwmod omap44xx_mcspi2_hwmod = {
1859        .name           = "mcspi2",
1860        .class          = &omap44xx_mcspi_hwmod_class,
1861        .clkdm_name     = "l4_per_clkdm",
1862        .main_clk       = "func_48m_fclk",
1863        .prcm = {
1864                .omap4 = {
1865                        .clkctrl_offs = OMAP4_CM_L4PER_MCSPI2_CLKCTRL_OFFSET,
1866                        .context_offs = OMAP4_RM_L4PER_MCSPI2_CONTEXT_OFFSET,
1867                        .modulemode   = MODULEMODE_SWCTRL,
1868                },
1869        },
1870};
1871
1872/* mcspi3 */
1873static struct omap_hwmod omap44xx_mcspi3_hwmod = {
1874        .name           = "mcspi3",
1875        .class          = &omap44xx_mcspi_hwmod_class,
1876        .clkdm_name     = "l4_per_clkdm",
1877        .main_clk       = "func_48m_fclk",
1878        .prcm = {
1879                .omap4 = {
1880                        .clkctrl_offs = OMAP4_CM_L4PER_MCSPI3_CLKCTRL_OFFSET,
1881                        .context_offs = OMAP4_RM_L4PER_MCSPI3_CONTEXT_OFFSET,
1882                        .modulemode   = MODULEMODE_SWCTRL,
1883                },
1884        },
1885};
1886
1887/* mcspi4 */
1888static struct omap_hwmod omap44xx_mcspi4_hwmod = {
1889        .name           = "mcspi4",
1890        .class          = &omap44xx_mcspi_hwmod_class,
1891        .clkdm_name     = "l4_per_clkdm",
1892        .main_clk       = "func_48m_fclk",
1893        .prcm = {
1894                .omap4 = {
1895                        .clkctrl_offs = OMAP4_CM_L4PER_MCSPI4_CLKCTRL_OFFSET,
1896                        .context_offs = OMAP4_RM_L4PER_MCSPI4_CONTEXT_OFFSET,
1897                        .modulemode   = MODULEMODE_SWCTRL,
1898                },
1899        },
1900};
1901
1902/*
1903 * 'mmc' class
1904 * multimedia card high-speed/sd/sdio (mmc/sd/sdio) host controller
1905 */
1906
1907static struct omap_hwmod_class_sysconfig omap44xx_mmc_sysc = {
1908        .rev_offs       = 0x0000,
1909        .sysc_offs      = 0x0010,
1910        .sysc_flags     = (SYSC_HAS_EMUFREE | SYSC_HAS_MIDLEMODE |
1911                           SYSC_HAS_RESET_STATUS | SYSC_HAS_SIDLEMODE |
1912                           SYSC_HAS_SOFTRESET),
1913        .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1914                           SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
1915                           MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
1916        .sysc_fields    = &omap_hwmod_sysc_type2,
1917};
1918
1919static struct omap_hwmod_class omap44xx_mmc_hwmod_class = {
1920        .name   = "mmc",
1921        .sysc   = &omap44xx_mmc_sysc,
1922};
1923
1924/* mmc1 */
1925static struct omap_hsmmc_dev_attr mmc1_dev_attr = {
1926        .flags  = OMAP_HSMMC_SUPPORTS_DUAL_VOLT,
1927};
1928
1929static struct omap_hwmod omap44xx_mmc1_hwmod = {
1930        .name           = "mmc1",
1931        .class          = &omap44xx_mmc_hwmod_class,
1932        .clkdm_name     = "l3_init_clkdm",
1933        .main_clk       = "hsmmc1_fclk",
1934        .prcm = {
1935                .omap4 = {
1936                        .clkctrl_offs = OMAP4_CM_L3INIT_MMC1_CLKCTRL_OFFSET,
1937                        .context_offs = OMAP4_RM_L3INIT_MMC1_CONTEXT_OFFSET,
1938                        .modulemode   = MODULEMODE_SWCTRL,
1939                },
1940        },
1941        .dev_attr       = &mmc1_dev_attr,
1942};
1943
1944/* mmc2 */
1945static struct omap_hwmod omap44xx_mmc2_hwmod = {
1946        .name           = "mmc2",
1947        .class          = &omap44xx_mmc_hwmod_class,
1948        .clkdm_name     = "l3_init_clkdm",
1949        .main_clk       = "hsmmc2_fclk",
1950        .prcm = {
1951                .omap4 = {
1952                        .clkctrl_offs = OMAP4_CM_L3INIT_MMC2_CLKCTRL_OFFSET,
1953                        .context_offs = OMAP4_RM_L3INIT_MMC2_CONTEXT_OFFSET,
1954                        .modulemode   = MODULEMODE_SWCTRL,
1955                },
1956        },
1957};
1958
1959/* mmc3 */
1960static struct omap_hwmod omap44xx_mmc3_hwmod = {
1961        .name           = "mmc3",
1962        .class          = &omap44xx_mmc_hwmod_class,
1963        .clkdm_name     = "l4_per_clkdm",
1964        .main_clk       = "func_48m_fclk",
1965        .prcm = {
1966                .omap4 = {
1967                        .clkctrl_offs = OMAP4_CM_L4PER_MMCSD3_CLKCTRL_OFFSET,
1968                        .context_offs = OMAP4_RM_L4PER_MMCSD3_CONTEXT_OFFSET,
1969                        .modulemode   = MODULEMODE_SWCTRL,
1970                },
1971        },
1972};
1973
1974/* mmc4 */
1975static struct omap_hwmod omap44xx_mmc4_hwmod = {
1976        .name           = "mmc4",
1977        .class          = &omap44xx_mmc_hwmod_class,
1978        .clkdm_name     = "l4_per_clkdm",
1979        .main_clk       = "func_48m_fclk",
1980        .prcm = {
1981                .omap4 = {
1982                        .clkctrl_offs = OMAP4_CM_L4PER_MMCSD4_CLKCTRL_OFFSET,
1983                        .context_offs = OMAP4_RM_L4PER_MMCSD4_CONTEXT_OFFSET,
1984                        .modulemode   = MODULEMODE_SWCTRL,
1985                },
1986        },
1987};
1988
1989/* mmc5 */
1990static struct omap_hwmod omap44xx_mmc5_hwmod = {
1991        .name           = "mmc5",
1992        .class          = &omap44xx_mmc_hwmod_class,
1993        .clkdm_name     = "l4_per_clkdm",
1994        .main_clk       = "func_48m_fclk",
1995        .prcm = {
1996                .omap4 = {
1997                        .clkctrl_offs = OMAP4_CM_L4PER_MMCSD5_CLKCTRL_OFFSET,
1998                        .context_offs = OMAP4_RM_L4PER_MMCSD5_CONTEXT_OFFSET,
1999                        .modulemode   = MODULEMODE_SWCTRL,
2000                },
2001        },
2002};
2003
2004/*
2005 * 'mmu' class
2006 * The memory management unit performs virtual to physical address translation
2007 * for its requestors.
2008 */
2009
2010static struct omap_hwmod_class_sysconfig mmu_sysc = {
2011        .rev_offs       = 0x000,
2012        .sysc_offs      = 0x010,
2013        .syss_offs      = 0x014,
2014        .sysc_flags     = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
2015                           SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
2016        .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2017        .sysc_fields    = &omap_hwmod_sysc_type1,
2018};
2019
2020static struct omap_hwmod_class omap44xx_mmu_hwmod_class = {
2021        .name = "mmu",
2022        .sysc = &mmu_sysc,
2023};
2024
2025/* mmu ipu */
2026
2027static struct omap_hwmod omap44xx_mmu_ipu_hwmod;
2028static struct omap_hwmod_rst_info omap44xx_mmu_ipu_resets[] = {
2029        { .name = "mmu_cache", .rst_shift = 2 },
2030};
2031
2032/* l3_main_2 -> mmu_ipu */
2033static struct omap_hwmod_ocp_if omap44xx_l3_main_2__mmu_ipu = {
2034        .master         = &omap44xx_l3_main_2_hwmod,
2035        .slave          = &omap44xx_mmu_ipu_hwmod,
2036        .clk            = "l3_div_ck",
2037        .user           = OCP_USER_MPU | OCP_USER_SDMA,
2038};
2039
2040static struct omap_hwmod omap44xx_mmu_ipu_hwmod = {
2041        .name           = "mmu_ipu",
2042        .class          = &omap44xx_mmu_hwmod_class,
2043        .clkdm_name     = "ducati_clkdm",
2044        .rst_lines      = omap44xx_mmu_ipu_resets,
2045        .rst_lines_cnt  = ARRAY_SIZE(omap44xx_mmu_ipu_resets),
2046        .main_clk       = "ducati_clk_mux_ck",
2047        .prcm = {
2048                .omap4 = {
2049                        .clkctrl_offs = OMAP4_CM_DUCATI_DUCATI_CLKCTRL_OFFSET,
2050                        .rstctrl_offs = OMAP4_RM_DUCATI_RSTCTRL_OFFSET,
2051                        .context_offs = OMAP4_RM_DUCATI_DUCATI_CONTEXT_OFFSET,
2052                        .modulemode   = MODULEMODE_HWCTRL,
2053                },
2054        },
2055};
2056
2057/* mmu dsp */
2058
2059static struct omap_hwmod omap44xx_mmu_dsp_hwmod;
2060static struct omap_hwmod_rst_info omap44xx_mmu_dsp_resets[] = {
2061        { .name = "mmu_cache", .rst_shift = 1 },
2062};
2063
2064/* l4_cfg -> dsp */
2065static struct omap_hwmod_ocp_if omap44xx_l4_cfg__mmu_dsp = {
2066        .master         = &omap44xx_l4_cfg_hwmod,
2067        .slave          = &omap44xx_mmu_dsp_hwmod,
2068        .clk            = "l4_div_ck",
2069        .user           = OCP_USER_MPU | OCP_USER_SDMA,
2070};
2071
2072static struct omap_hwmod omap44xx_mmu_dsp_hwmod = {
2073        .name           = "mmu_dsp",
2074        .class          = &omap44xx_mmu_hwmod_class,
2075        .clkdm_name     = "tesla_clkdm",
2076        .rst_lines      = omap44xx_mmu_dsp_resets,
2077        .rst_lines_cnt  = ARRAY_SIZE(omap44xx_mmu_dsp_resets),
2078        .main_clk       = "dpll_iva_m4x2_ck",
2079        .prcm = {
2080                .omap4 = {
2081                        .clkctrl_offs = OMAP4_CM_TESLA_TESLA_CLKCTRL_OFFSET,
2082                        .rstctrl_offs = OMAP4_RM_TESLA_RSTCTRL_OFFSET,
2083                        .context_offs = OMAP4_RM_TESLA_TESLA_CONTEXT_OFFSET,
2084                        .modulemode   = MODULEMODE_HWCTRL,
2085                },
2086        },
2087};
2088
2089/*
2090 * 'mpu' class
2091 * mpu sub-system
2092 */
2093
2094static struct omap_hwmod_class omap44xx_mpu_hwmod_class = {
2095        .name   = "mpu",
2096};
2097
2098/* mpu */
2099static struct omap_hwmod omap44xx_mpu_hwmod = {
2100        .name           = "mpu",
2101        .class          = &omap44xx_mpu_hwmod_class,
2102        .clkdm_name     = "mpuss_clkdm",
2103        .flags          = HWMOD_INIT_NO_IDLE,
2104        .main_clk       = "dpll_mpu_m2_ck",
2105        .prcm = {
2106                .omap4 = {
2107                        .clkctrl_offs = OMAP4_CM_MPU_MPU_CLKCTRL_OFFSET,
2108                        .context_offs = OMAP4_RM_MPU_MPU_CONTEXT_OFFSET,
2109                },
2110        },
2111};
2112
2113/*
2114 * 'ocmc_ram' class
2115 * top-level core on-chip ram
2116 */
2117
2118static struct omap_hwmod_class omap44xx_ocmc_ram_hwmod_class = {
2119        .name   = "ocmc_ram",
2120};
2121
2122/* ocmc_ram */
2123static struct omap_hwmod omap44xx_ocmc_ram_hwmod = {
2124        .name           = "ocmc_ram",
2125        .class          = &omap44xx_ocmc_ram_hwmod_class,
2126        .clkdm_name     = "l3_2_clkdm",
2127        .prcm = {
2128                .omap4 = {
2129                        .clkctrl_offs = OMAP4_CM_L3_2_OCMC_RAM_CLKCTRL_OFFSET,
2130                        .context_offs = OMAP4_RM_L3_2_OCMC_RAM_CONTEXT_OFFSET,
2131                },
2132        },
2133};
2134
2135/*
2136 * 'ocp2scp' class
2137 * bridge to transform ocp interface protocol to scp (serial control port)
2138 * protocol
2139 */
2140
2141static struct omap_hwmod_class_sysconfig omap44xx_ocp2scp_sysc = {
2142        .rev_offs       = 0x0000,
2143        .sysc_offs      = 0x0010,
2144        .syss_offs      = 0x0014,
2145        .sysc_flags     = (SYSC_HAS_AUTOIDLE | SYSC_HAS_SIDLEMODE |
2146                           SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
2147        .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2148        .sysc_fields    = &omap_hwmod_sysc_type1,
2149};
2150
2151static struct omap_hwmod_class omap44xx_ocp2scp_hwmod_class = {
2152        .name   = "ocp2scp",
2153        .sysc   = &omap44xx_ocp2scp_sysc,
2154};
2155
2156/* ocp2scp_usb_phy */
2157static struct omap_hwmod omap44xx_ocp2scp_usb_phy_hwmod = {
2158        .name           = "ocp2scp_usb_phy",
2159        .class          = &omap44xx_ocp2scp_hwmod_class,
2160        .clkdm_name     = "l3_init_clkdm",
2161        /*
2162         * ocp2scp_usb_phy_phy_48m is provided by the OMAP4 PRCM IP
2163         * block as an "optional clock," and normally should never be
2164         * specified as the main_clk for an OMAP IP block.  However it
2165         * turns out that this clock is actually the main clock for
2166         * the ocp2scp_usb_phy IP block:
2167         * http://lists.infradead.org/pipermail/linux-arm-kernel/2012-September/119943.html
2168         * So listing ocp2scp_usb_phy_phy_48m as a main_clk here seems
2169         * to be the best workaround.
2170         */
2171        .main_clk       = "ocp2scp_usb_phy_phy_48m",
2172        .prcm = {
2173                .omap4 = {
2174                        .clkctrl_offs = OMAP4_CM_L3INIT_USBPHYOCP2SCP_CLKCTRL_OFFSET,
2175                        .context_offs = OMAP4_RM_L3INIT_USBPHYOCP2SCP_CONTEXT_OFFSET,
2176                        .modulemode   = MODULEMODE_HWCTRL,
2177                },
2178        },
2179};
2180
2181/*
2182 * 'prcm' class
2183 * power and reset manager (part of the prcm infrastructure) + clock manager 2
2184 * + clock manager 1 (in always on power domain) + local prm in mpu
2185 */
2186
2187static struct omap_hwmod_class omap44xx_prcm_hwmod_class = {
2188        .name   = "prcm",
2189};
2190
2191/* prcm_mpu */
2192static struct omap_hwmod omap44xx_prcm_mpu_hwmod = {
2193        .name           = "prcm_mpu",
2194        .class          = &omap44xx_prcm_hwmod_class,
2195        .clkdm_name     = "l4_wkup_clkdm",
2196        .flags          = HWMOD_NO_IDLEST,
2197        .prcm = {
2198                .omap4 = {
2199                        .flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
2200                },
2201        },
2202};
2203
2204/* cm_core_aon */
2205static struct omap_hwmod omap44xx_cm_core_aon_hwmod = {
2206        .name           = "cm_core_aon",
2207        .class          = &omap44xx_prcm_hwmod_class,
2208        .flags          = HWMOD_NO_IDLEST,
2209        .prcm = {
2210                .omap4 = {
2211                        .flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
2212                },
2213        },
2214};
2215
2216/* cm_core */
2217static struct omap_hwmod omap44xx_cm_core_hwmod = {
2218        .name           = "cm_core",
2219        .class          = &omap44xx_prcm_hwmod_class,
2220        .flags          = HWMOD_NO_IDLEST,
2221        .prcm = {
2222                .omap4 = {
2223                        .flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
2224                },
2225        },
2226};
2227
2228/* prm */
2229static struct omap_hwmod_rst_info omap44xx_prm_resets[] = {
2230        { .name = "rst_global_warm_sw", .rst_shift = 0 },
2231        { .name = "rst_global_cold_sw", .rst_shift = 1 },
2232};
2233
2234static struct omap_hwmod omap44xx_prm_hwmod = {
2235        .name           = "prm",
2236        .class          = &omap44xx_prcm_hwmod_class,
2237        .rst_lines      = omap44xx_prm_resets,
2238        .rst_lines_cnt  = ARRAY_SIZE(omap44xx_prm_resets),
2239};
2240
2241/*
2242 * 'scrm' class
2243 * system clock and reset manager
2244 */
2245
2246static struct omap_hwmod_class omap44xx_scrm_hwmod_class = {
2247        .name   = "scrm",
2248};
2249
2250/* scrm */
2251static struct omap_hwmod omap44xx_scrm_hwmod = {
2252        .name           = "scrm",
2253        .class          = &omap44xx_scrm_hwmod_class,
2254        .clkdm_name     = "l4_wkup_clkdm",
2255        .prcm = {
2256                .omap4 = {
2257                        .flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
2258                },
2259        },
2260};
2261
2262/*
2263 * 'sl2if' class
2264 * shared level 2 memory interface
2265 */
2266
2267static struct omap_hwmod_class omap44xx_sl2if_hwmod_class = {
2268        .name   = "sl2if",
2269};
2270
2271/* sl2if */
2272static struct omap_hwmod omap44xx_sl2if_hwmod = {
2273        .name           = "sl2if",
2274        .class          = &omap44xx_sl2if_hwmod_class,
2275        .clkdm_name     = "ivahd_clkdm",
2276        .prcm = {
2277                .omap4 = {
2278                        .clkctrl_offs = OMAP4_CM_IVAHD_SL2_CLKCTRL_OFFSET,
2279                        .context_offs = OMAP4_RM_IVAHD_SL2_CONTEXT_OFFSET,
2280                        .modulemode   = MODULEMODE_HWCTRL,
2281                },
2282        },
2283};
2284
2285/*
2286 * 'slimbus' class
2287 * bidirectional, multi-drop, multi-channel two-line serial interface between
2288 * the device and external components
2289 */
2290
2291static struct omap_hwmod_class_sysconfig omap44xx_slimbus_sysc = {
2292        .rev_offs       = 0x0000,
2293        .sysc_offs      = 0x0010,
2294        .sysc_flags     = (SYSC_HAS_RESET_STATUS | SYSC_HAS_SIDLEMODE |
2295                           SYSC_HAS_SOFTRESET),
2296        .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2297                           SIDLE_SMART_WKUP),
2298        .sysc_fields    = &omap_hwmod_sysc_type2,
2299};
2300
2301static struct omap_hwmod_class omap44xx_slimbus_hwmod_class = {
2302        .name   = "slimbus",
2303        .sysc   = &omap44xx_slimbus_sysc,
2304};
2305
2306/* slimbus1 */
2307static struct omap_hwmod_opt_clk slimbus1_opt_clks[] = {
2308        { .role = "fclk_1", .clk = "slimbus1_fclk_1" },
2309        { .role = "fclk_0", .clk = "slimbus1_fclk_0" },
2310        { .role = "fclk_2", .clk = "slimbus1_fclk_2" },
2311        { .role = "slimbus_clk", .clk = "slimbus1_slimbus_clk" },
2312};
2313
2314static struct omap_hwmod omap44xx_slimbus1_hwmod = {
2315        .name           = "slimbus1",
2316        .class          = &omap44xx_slimbus_hwmod_class,
2317        .clkdm_name     = "abe_clkdm",
2318        .prcm = {
2319                .omap4 = {
2320                        .clkctrl_offs = OMAP4_CM1_ABE_SLIMBUS_CLKCTRL_OFFSET,
2321                        .context_offs = OMAP4_RM_ABE_SLIMBUS_CONTEXT_OFFSET,
2322                        .modulemode   = MODULEMODE_SWCTRL,
2323                },
2324        },
2325        .opt_clks       = slimbus1_opt_clks,
2326        .opt_clks_cnt   = ARRAY_SIZE(slimbus1_opt_clks),
2327};
2328
2329/* slimbus2 */
2330static struct omap_hwmod_opt_clk slimbus2_opt_clks[] = {
2331        { .role = "fclk_1", .clk = "slimbus2_fclk_1" },
2332        { .role = "fclk_0", .clk = "slimbus2_fclk_0" },
2333        { .role = "slimbus_clk", .clk = "slimbus2_slimbus_clk" },
2334};
2335
2336static struct omap_hwmod omap44xx_slimbus2_hwmod = {
2337        .name           = "slimbus2",
2338        .class          = &omap44xx_slimbus_hwmod_class,
2339        .clkdm_name     = "l4_per_clkdm",
2340        .prcm = {
2341                .omap4 = {
2342                        .clkctrl_offs = OMAP4_CM_L4PER_SLIMBUS2_CLKCTRL_OFFSET,
2343                        .context_offs = OMAP4_RM_L4PER_SLIMBUS2_CONTEXT_OFFSET,
2344                        .modulemode   = MODULEMODE_SWCTRL,
2345                },
2346        },
2347        .opt_clks       = slimbus2_opt_clks,
2348        .opt_clks_cnt   = ARRAY_SIZE(slimbus2_opt_clks),
2349};
2350
2351/*
2352 * 'smartreflex' class
2353 * smartreflex module (monitor silicon performance and outputs a measure of
2354 * performance error)
2355 */
2356
2357/* The IP is not compliant to type1 / type2 scheme */
2358static struct omap_hwmod_class_sysconfig omap44xx_smartreflex_sysc = {
2359        .rev_offs       = -ENODEV,
2360        .sysc_offs      = 0x0038,
2361        .sysc_flags     = (SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE),
2362        .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2363                           SIDLE_SMART_WKUP),
2364        .sysc_fields    = &omap36xx_sr_sysc_fields,
2365};
2366
2367static struct omap_hwmod_class omap44xx_smartreflex_hwmod_class = {
2368        .name   = "smartreflex",
2369        .sysc   = &omap44xx_smartreflex_sysc,
2370        .rev    = 2,
2371};
2372
2373/* smartreflex_core */
2374static struct omap_smartreflex_dev_attr smartreflex_core_dev_attr = {
2375        .sensor_voltdm_name   = "core",
2376};
2377
2378static struct omap_hwmod omap44xx_smartreflex_core_hwmod = {
2379        .name           = "smartreflex_core",
2380        .class          = &omap44xx_smartreflex_hwmod_class,
2381        .clkdm_name     = "l4_ao_clkdm",
2382
2383        .main_clk       = "smartreflex_core_fck",
2384        .prcm = {
2385                .omap4 = {
2386                        .clkctrl_offs = OMAP4_CM_ALWON_SR_CORE_CLKCTRL_OFFSET,
2387                        .context_offs = OMAP4_RM_ALWON_SR_CORE_CONTEXT_OFFSET,
2388                        .modulemode   = MODULEMODE_SWCTRL,
2389                },
2390        },
2391        .dev_attr       = &smartreflex_core_dev_attr,
2392};
2393
2394/* smartreflex_iva */
2395static struct omap_smartreflex_dev_attr smartreflex_iva_dev_attr = {
2396        .sensor_voltdm_name     = "iva",
2397};
2398
2399static struct omap_hwmod omap44xx_smartreflex_iva_hwmod = {
2400        .name           = "smartreflex_iva",
2401        .class          = &omap44xx_smartreflex_hwmod_class,
2402        .clkdm_name     = "l4_ao_clkdm",
2403        .main_clk       = "smartreflex_iva_fck",
2404        .prcm = {
2405                .omap4 = {
2406                        .clkctrl_offs = OMAP4_CM_ALWON_SR_IVA_CLKCTRL_OFFSET,
2407                        .context_offs = OMAP4_RM_ALWON_SR_IVA_CONTEXT_OFFSET,
2408                        .modulemode   = MODULEMODE_SWCTRL,
2409                },
2410        },
2411        .dev_attr       = &smartreflex_iva_dev_attr,
2412};
2413
2414/* smartreflex_mpu */
2415static struct omap_smartreflex_dev_attr smartreflex_mpu_dev_attr = {
2416        .sensor_voltdm_name     = "mpu",
2417};
2418
2419static struct omap_hwmod omap44xx_smartreflex_mpu_hwmod = {
2420        .name           = "smartreflex_mpu",
2421        .class          = &omap44xx_smartreflex_hwmod_class,
2422        .clkdm_name     = "l4_ao_clkdm",
2423        .main_clk       = "smartreflex_mpu_fck",
2424        .prcm = {
2425                .omap4 = {
2426                        .clkctrl_offs = OMAP4_CM_ALWON_SR_MPU_CLKCTRL_OFFSET,
2427                        .context_offs = OMAP4_RM_ALWON_SR_MPU_CONTEXT_OFFSET,
2428                        .modulemode   = MODULEMODE_SWCTRL,
2429                },
2430        },
2431        .dev_attr       = &smartreflex_mpu_dev_attr,
2432};
2433
2434/*
2435 * 'spinlock' class
2436 * spinlock provides hardware assistance for synchronizing the processes
2437 * running on multiple processors
2438 */
2439
2440static struct omap_hwmod_class_sysconfig omap44xx_spinlock_sysc = {
2441        .rev_offs       = 0x0000,
2442        .sysc_offs      = 0x0010,
2443        .syss_offs      = 0x0014,
2444        .sysc_flags     = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
2445                           SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
2446                           SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
2447        .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2448        .sysc_fields    = &omap_hwmod_sysc_type1,
2449};
2450
2451static struct omap_hwmod_class omap44xx_spinlock_hwmod_class = {
2452        .name   = "spinlock",
2453        .sysc   = &omap44xx_spinlock_sysc,
2454};
2455
2456/* spinlock */
2457static struct omap_hwmod omap44xx_spinlock_hwmod = {
2458        .name           = "spinlock",
2459        .class          = &omap44xx_spinlock_hwmod_class,
2460        .clkdm_name     = "l4_cfg_clkdm",
2461        .prcm = {
2462                .omap4 = {
2463                        .clkctrl_offs = OMAP4_CM_L4CFG_HW_SEM_CLKCTRL_OFFSET,
2464                        .context_offs = OMAP4_RM_L4CFG_HW_SEM_CONTEXT_OFFSET,
2465                },
2466        },
2467};
2468
2469/*
2470 * 'timer' class
2471 * general purpose timer module with accurate 1ms tick
2472 * This class contains several variants: ['timer_1ms', 'timer']
2473 */
2474
2475static struct omap_hwmod_class_sysconfig omap44xx_timer_1ms_sysc = {
2476        .rev_offs       = 0x0000,
2477        .sysc_offs      = 0x0010,
2478        .syss_offs      = 0x0014,
2479        .sysc_flags     = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
2480                           SYSC_HAS_EMUFREE | SYSC_HAS_ENAWAKEUP |
2481                           SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
2482                           SYSS_HAS_RESET_STATUS),
2483        .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2484        .sysc_fields    = &omap_hwmod_sysc_type1,
2485};
2486
2487static struct omap_hwmod_class omap44xx_timer_1ms_hwmod_class = {
2488        .name   = "timer",
2489        .sysc   = &omap44xx_timer_1ms_sysc,
2490};
2491
2492static struct omap_hwmod_class_sysconfig omap44xx_timer_sysc = {
2493        .rev_offs       = 0x0000,
2494        .sysc_offs      = 0x0010,
2495        .sysc_flags     = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
2496                           SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
2497        .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2498                           SIDLE_SMART_WKUP),
2499        .sysc_fields    = &omap_hwmod_sysc_type2,
2500};
2501
2502static struct omap_hwmod_class omap44xx_timer_hwmod_class = {
2503        .name   = "timer",
2504        .sysc   = &omap44xx_timer_sysc,
2505};
2506
2507/* timer1 */
2508static struct omap_hwmod omap44xx_timer1_hwmod = {
2509        .name           = "timer1",
2510        .class          = &omap44xx_timer_1ms_hwmod_class,
2511        .clkdm_name     = "l4_wkup_clkdm",
2512        .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
2513        .main_clk       = "dmt1_clk_mux",
2514        .prcm = {
2515                .omap4 = {
2516                        .clkctrl_offs = OMAP4_CM_WKUP_TIMER1_CLKCTRL_OFFSET,
2517                        .context_offs = OMAP4_RM_WKUP_TIMER1_CONTEXT_OFFSET,
2518                        .modulemode   = MODULEMODE_SWCTRL,
2519                },
2520        },
2521};
2522
2523/* timer2 */
2524static struct omap_hwmod omap44xx_timer2_hwmod = {
2525        .name           = "timer2",
2526        .class          = &omap44xx_timer_1ms_hwmod_class,
2527        .clkdm_name     = "l4_per_clkdm",
2528        .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
2529        .main_clk       = "cm2_dm2_mux",
2530        .prcm = {
2531                .omap4 = {
2532                        .clkctrl_offs = OMAP4_CM_L4PER_DMTIMER2_CLKCTRL_OFFSET,
2533                        .context_offs = OMAP4_RM_L4PER_DMTIMER2_CONTEXT_OFFSET,
2534                        .modulemode   = MODULEMODE_SWCTRL,
2535                },
2536        },
2537};
2538
2539/* timer3 */
2540static struct omap_hwmod omap44xx_timer3_hwmod = {
2541        .name           = "timer3",
2542        .class          = &omap44xx_timer_hwmod_class,
2543        .clkdm_name     = "l4_per_clkdm",
2544        .main_clk       = "cm2_dm3_mux",
2545        .prcm = {
2546                .omap4 = {
2547                        .clkctrl_offs = OMAP4_CM_L4PER_DMTIMER3_CLKCTRL_OFFSET,
2548                        .context_offs = OMAP4_RM_L4PER_DMTIMER3_CONTEXT_OFFSET,
2549                        .modulemode   = MODULEMODE_SWCTRL,
2550                },
2551        },
2552};
2553
2554/* timer4 */
2555static struct omap_hwmod omap44xx_timer4_hwmod = {
2556        .name           = "timer4",
2557        .class          = &omap44xx_timer_hwmod_class,
2558        .clkdm_name     = "l4_per_clkdm",
2559        .main_clk       = "cm2_dm4_mux",
2560        .prcm = {
2561                .omap4 = {
2562                        .clkctrl_offs = OMAP4_CM_L4PER_DMTIMER4_CLKCTRL_OFFSET,
2563                        .context_offs = OMAP4_RM_L4PER_DMTIMER4_CONTEXT_OFFSET,
2564                        .modulemode   = MODULEMODE_SWCTRL,
2565                },
2566        },
2567};
2568
2569/* timer5 */
2570static struct omap_hwmod omap44xx_timer5_hwmod = {
2571        .name           = "timer5",
2572        .class          = &omap44xx_timer_hwmod_class,
2573        .clkdm_name     = "abe_clkdm",
2574        .main_clk       = "timer5_sync_mux",
2575        .prcm = {
2576                .omap4 = {
2577                        .clkctrl_offs = OMAP4_CM1_ABE_TIMER5_CLKCTRL_OFFSET,
2578                        .context_offs = OMAP4_RM_ABE_TIMER5_CONTEXT_OFFSET,
2579                        .modulemode   = MODULEMODE_SWCTRL,
2580                },
2581        },
2582};
2583
2584/* timer6 */
2585static struct omap_hwmod omap44xx_timer6_hwmod = {
2586        .name           = "timer6",
2587        .class          = &omap44xx_timer_hwmod_class,
2588        .clkdm_name     = "abe_clkdm",
2589        .main_clk       = "timer6_sync_mux",
2590        .prcm = {
2591                .omap4 = {
2592                        .clkctrl_offs = OMAP4_CM1_ABE_TIMER6_CLKCTRL_OFFSET,
2593                        .context_offs = OMAP4_RM_ABE_TIMER6_CONTEXT_OFFSET,
2594                        .modulemode   = MODULEMODE_SWCTRL,
2595                },
2596        },
2597};
2598
2599/* timer7 */
2600static struct omap_hwmod omap44xx_timer7_hwmod = {
2601        .name           = "timer7",
2602        .class          = &omap44xx_timer_hwmod_class,
2603        .clkdm_name     = "abe_clkdm",
2604        .main_clk       = "timer7_sync_mux",
2605        .prcm = {
2606                .omap4 = {
2607                        .clkctrl_offs = OMAP4_CM1_ABE_TIMER7_CLKCTRL_OFFSET,
2608                        .context_offs = OMAP4_RM_ABE_TIMER7_CONTEXT_OFFSET,
2609                        .modulemode   = MODULEMODE_SWCTRL,
2610                },
2611        },
2612};
2613
2614/* timer8 */
2615static struct omap_hwmod omap44xx_timer8_hwmod = {
2616        .name           = "timer8",
2617        .class          = &omap44xx_timer_hwmod_class,
2618        .clkdm_name     = "abe_clkdm",
2619        .main_clk       = "timer8_sync_mux",
2620        .prcm = {
2621                .omap4 = {
2622                        .clkctrl_offs = OMAP4_CM1_ABE_TIMER8_CLKCTRL_OFFSET,
2623                        .context_offs = OMAP4_RM_ABE_TIMER8_CONTEXT_OFFSET,
2624                        .modulemode   = MODULEMODE_SWCTRL,
2625                },
2626        },
2627};
2628
2629/* timer9 */
2630static struct omap_hwmod omap44xx_timer9_hwmod = {
2631        .name           = "timer9",
2632        .class          = &omap44xx_timer_hwmod_class,
2633        .clkdm_name     = "l4_per_clkdm",
2634        .main_clk       = "cm2_dm9_mux",
2635        .prcm = {
2636                .omap4 = {
2637                        .clkctrl_offs = OMAP4_CM_L4PER_DMTIMER9_CLKCTRL_OFFSET,
2638                        .context_offs = OMAP4_RM_L4PER_DMTIMER9_CONTEXT_OFFSET,
2639                        .modulemode   = MODULEMODE_SWCTRL,
2640                },
2641        },
2642};
2643
2644/* timer10 */
2645static struct omap_hwmod omap44xx_timer10_hwmod = {
2646        .name           = "timer10",
2647        .class          = &omap44xx_timer_1ms_hwmod_class,
2648        .clkdm_name     = "l4_per_clkdm",
2649        .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
2650        .main_clk       = "cm2_dm10_mux",
2651        .prcm = {
2652                .omap4 = {
2653                        .clkctrl_offs = OMAP4_CM_L4PER_DMTIMER10_CLKCTRL_OFFSET,
2654                        .context_offs = OMAP4_RM_L4PER_DMTIMER10_CONTEXT_OFFSET,
2655                        .modulemode   = MODULEMODE_SWCTRL,
2656                },
2657        },
2658};
2659
2660/* timer11 */
2661static struct omap_hwmod omap44xx_timer11_hwmod = {
2662        .name           = "timer11",
2663        .class          = &omap44xx_timer_hwmod_class,
2664        .clkdm_name     = "l4_per_clkdm",
2665        .main_clk       = "cm2_dm11_mux",
2666        .prcm = {
2667                .omap4 = {
2668                        .clkctrl_offs = OMAP4_CM_L4PER_DMTIMER11_CLKCTRL_OFFSET,
2669                        .context_offs = OMAP4_RM_L4PER_DMTIMER11_CONTEXT_OFFSET,
2670                        .modulemode   = MODULEMODE_SWCTRL,
2671                },
2672        },
2673};
2674
2675/*
2676 * 'uart' class
2677 * universal asynchronous receiver/transmitter (uart)
2678 */
2679
2680static struct omap_hwmod_class_sysconfig omap44xx_uart_sysc = {
2681        .rev_offs       = 0x0050,
2682        .sysc_offs      = 0x0054,
2683        .syss_offs      = 0x0058,
2684        .sysc_flags     = (SYSC_HAS_AUTOIDLE | SYSC_HAS_ENAWAKEUP |
2685                           SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
2686                           SYSS_HAS_RESET_STATUS),
2687        .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2688                           SIDLE_SMART_WKUP),
2689        .sysc_fields    = &omap_hwmod_sysc_type1,
2690};
2691
2692static struct omap_hwmod_class omap44xx_uart_hwmod_class = {
2693        .name   = "uart",
2694        .sysc   = &omap44xx_uart_sysc,
2695};
2696
2697/* uart1 */
2698static struct omap_hwmod omap44xx_uart1_hwmod = {
2699        .name           = "uart1",
2700        .class          = &omap44xx_uart_hwmod_class,
2701        .clkdm_name     = "l4_per_clkdm",
2702        .flags          = HWMOD_SWSUP_SIDLE_ACT,
2703        .main_clk       = "func_48m_fclk",
2704        .prcm = {
2705                .omap4 = {
2706                        .clkctrl_offs = OMAP4_CM_L4PER_UART1_CLKCTRL_OFFSET,
2707                        .context_offs = OMAP4_RM_L4PER_UART1_CONTEXT_OFFSET,
2708                        .modulemode   = MODULEMODE_SWCTRL,
2709                },
2710        },
2711};
2712
2713/* uart2 */
2714static struct omap_hwmod omap44xx_uart2_hwmod = {
2715        .name           = "uart2",
2716        .class          = &omap44xx_uart_hwmod_class,
2717        .clkdm_name     = "l4_per_clkdm",
2718        .flags          = HWMOD_SWSUP_SIDLE_ACT,
2719        .main_clk       = "func_48m_fclk",
2720        .prcm = {
2721                .omap4 = {
2722                        .clkctrl_offs = OMAP4_CM_L4PER_UART2_CLKCTRL_OFFSET,
2723                        .context_offs = OMAP4_RM_L4PER_UART2_CONTEXT_OFFSET,
2724                        .modulemode   = MODULEMODE_SWCTRL,
2725                },
2726        },
2727};
2728
2729/* uart3 */
2730static struct omap_hwmod omap44xx_uart3_hwmod = {
2731        .name           = "uart3",
2732        .class          = &omap44xx_uart_hwmod_class,
2733        .clkdm_name     = "l4_per_clkdm",
2734        .flags          = DEBUG_OMAP4UART3_FLAGS | HWMOD_SWSUP_SIDLE_ACT,
2735        .main_clk       = "func_48m_fclk",
2736        .prcm = {
2737                .omap4 = {
2738                        .clkctrl_offs = OMAP4_CM_L4PER_UART3_CLKCTRL_OFFSET,
2739                        .context_offs = OMAP4_RM_L4PER_UART3_CONTEXT_OFFSET,
2740                        .modulemode   = MODULEMODE_SWCTRL,
2741                },
2742        },
2743};
2744
2745/* uart4 */
2746static struct omap_hwmod omap44xx_uart4_hwmod = {
2747        .name           = "uart4",
2748        .class          = &omap44xx_uart_hwmod_class,
2749        .clkdm_name     = "l4_per_clkdm",
2750        .flags          = DEBUG_OMAP4UART4_FLAGS | HWMOD_SWSUP_SIDLE_ACT,
2751        .main_clk       = "func_48m_fclk",
2752        .prcm = {
2753                .omap4 = {
2754                        .clkctrl_offs = OMAP4_CM_L4PER_UART4_CLKCTRL_OFFSET,
2755                        .context_offs = OMAP4_RM_L4PER_UART4_CONTEXT_OFFSET,
2756                        .modulemode   = MODULEMODE_SWCTRL,
2757                },
2758        },
2759};
2760
2761/*
2762 * 'usb_host_fs' class
2763 * full-speed usb host controller
2764 */
2765
2766/* The IP is not compliant to type1 / type2 scheme */
2767static struct omap_hwmod_class_sysconfig omap44xx_usb_host_fs_sysc = {
2768        .rev_offs       = 0x0000,
2769        .sysc_offs      = 0x0210,
2770        .sysc_flags     = (SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE |
2771                           SYSC_HAS_SOFTRESET),
2772        .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2773                           SIDLE_SMART_WKUP),
2774        .sysc_fields    = &omap_hwmod_sysc_type_usb_host_fs,
2775};
2776
2777static struct omap_hwmod_class omap44xx_usb_host_fs_hwmod_class = {
2778        .name   = "usb_host_fs",
2779        .sysc   = &omap44xx_usb_host_fs_sysc,
2780};
2781
2782/* usb_host_fs */
2783static struct omap_hwmod omap44xx_usb_host_fs_hwmod = {
2784        .name           = "usb_host_fs",
2785        .class          = &omap44xx_usb_host_fs_hwmod_class,
2786        .clkdm_name     = "l3_init_clkdm",
2787        .main_clk       = "usb_host_fs_fck",
2788        .prcm = {
2789                .omap4 = {
2790                        .clkctrl_offs = OMAP4_CM_L3INIT_USB_HOST_FS_CLKCTRL_OFFSET,
2791                        .context_offs = OMAP4_RM_L3INIT_USB_HOST_FS_CONTEXT_OFFSET,
2792                        .modulemode   = MODULEMODE_SWCTRL,
2793                },
2794        },
2795};
2796
2797/*
2798 * 'usb_host_hs' class
2799 * high-speed multi-port usb host controller
2800 */
2801
2802static struct omap_hwmod_class_sysconfig omap44xx_usb_host_hs_sysc = {
2803        .rev_offs       = 0x0000,
2804        .sysc_offs      = 0x0010,
2805        .syss_offs      = 0x0014,
2806        .sysc_flags     = (SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE |
2807                           SYSC_HAS_SOFTRESET | SYSC_HAS_RESET_STATUS),
2808        .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2809                           SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
2810                           MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
2811        .sysc_fields    = &omap_hwmod_sysc_type2,
2812};
2813
2814static struct omap_hwmod_class omap44xx_usb_host_hs_hwmod_class = {
2815        .name   = "usb_host_hs",
2816        .sysc   = &omap44xx_usb_host_hs_sysc,
2817};
2818
2819/* usb_host_hs */
2820static struct omap_hwmod omap44xx_usb_host_hs_hwmod = {
2821        .name           = "usb_host_hs",
2822        .class          = &omap44xx_usb_host_hs_hwmod_class,
2823        .clkdm_name     = "l3_init_clkdm",
2824        .main_clk       = "usb_host_hs_fck",
2825        .prcm = {
2826                .omap4 = {
2827                        .clkctrl_offs = OMAP4_CM_L3INIT_USB_HOST_CLKCTRL_OFFSET,
2828                        .context_offs = OMAP4_RM_L3INIT_USB_HOST_CONTEXT_OFFSET,
2829                        .modulemode   = MODULEMODE_SWCTRL,
2830                },
2831        },
2832
2833        /*
2834         * Errata: USBHOST Configured In Smart-Idle Can Lead To a Deadlock
2835         * id: i660
2836         *
2837         * Description:
2838         * In the following configuration :
2839         * - USBHOST module is set to smart-idle mode
2840         * - PRCM asserts idle_req to the USBHOST module ( This typically
2841         *   happens when the system is going to a low power mode : all ports
2842         *   have been suspended, the master part of the USBHOST module has
2843         *   entered the standby state, and SW has cut the functional clocks)
2844         * - an USBHOST interrupt occurs before the module is able to answer
2845         *   idle_ack, typically a remote wakeup IRQ.
2846         * Then the USB HOST module will enter a deadlock situation where it
2847         * is no more accessible nor functional.
2848         *
2849         * Workaround:
2850         * Don't use smart idle; use only force idle, hence HWMOD_SWSUP_SIDLE
2851         */
2852
2853        /*
2854         * Errata: USB host EHCI may stall when entering smart-standby mode
2855         * Id: i571
2856         *
2857         * Description:
2858         * When the USBHOST module is set to smart-standby mode, and when it is
2859         * ready to enter the standby state (i.e. all ports are suspended and
2860         * all attached devices are in suspend mode), then it can wrongly assert
2861         * the Mstandby signal too early while there are still some residual OCP
2862         * transactions ongoing. If this condition occurs, the internal state
2863         * machine may go to an undefined state and the USB link may be stuck
2864         * upon the next resume.
2865         *
2866         * Workaround:
2867         * Don't use smart standby; use only force standby,
2868         * hence HWMOD_SWSUP_MSTANDBY
2869         */
2870
2871        .flags          = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY,
2872};
2873
2874/*
2875 * 'usb_otg_hs' class
2876 * high-speed on-the-go universal serial bus (usb_otg_hs) controller
2877 */
2878
2879static struct omap_hwmod_class_sysconfig omap44xx_usb_otg_hs_sysc = {
2880        .rev_offs       = 0x0400,
2881        .sysc_offs      = 0x0404,
2882        .syss_offs      = 0x0408,
2883        .sysc_flags     = (SYSC_HAS_AUTOIDLE | SYSC_HAS_ENAWAKEUP |
2884                           SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE |
2885                           SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
2886        .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2887                           SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
2888                           MSTANDBY_SMART),
2889        .sysc_fields    = &omap_hwmod_sysc_type1,
2890};
2891
2892static struct omap_hwmod_class omap44xx_usb_otg_hs_hwmod_class = {
2893        .name   = "usb_otg_hs",
2894        .sysc   = &omap44xx_usb_otg_hs_sysc,
2895};
2896
2897/* usb_otg_hs */
2898static struct omap_hwmod_opt_clk usb_otg_hs_opt_clks[] = {
2899        { .role = "xclk", .clk = "usb_otg_hs_xclk" },
2900};
2901
2902static struct omap_hwmod omap44xx_usb_otg_hs_hwmod = {
2903        .name           = "usb_otg_hs",
2904        .class          = &omap44xx_usb_otg_hs_hwmod_class,
2905        .clkdm_name     = "l3_init_clkdm",
2906        .flags          = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY,
2907        .main_clk       = "usb_otg_hs_ick",
2908        .prcm = {
2909                .omap4 = {
2910                        .clkctrl_offs = OMAP4_CM_L3INIT_USB_OTG_CLKCTRL_OFFSET,
2911                        .context_offs = OMAP4_RM_L3INIT_USB_OTG_CONTEXT_OFFSET,
2912                        .modulemode   = MODULEMODE_HWCTRL,
2913                },
2914        },
2915        .opt_clks       = usb_otg_hs_opt_clks,
2916        .opt_clks_cnt   = ARRAY_SIZE(usb_otg_hs_opt_clks),
2917};
2918
2919/*
2920 * 'usb_tll_hs' class
2921 * usb_tll_hs module is the adapter on the usb_host_hs ports
2922 */
2923
2924static struct omap_hwmod_class_sysconfig omap44xx_usb_tll_hs_sysc = {
2925        .rev_offs       = 0x0000,
2926        .sysc_offs      = 0x0010,
2927        .syss_offs      = 0x0014,
2928        .sysc_flags     = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
2929                           SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
2930                           SYSC_HAS_AUTOIDLE),
2931        .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2932        .sysc_fields    = &omap_hwmod_sysc_type1,
2933};
2934
2935static struct omap_hwmod_class omap44xx_usb_tll_hs_hwmod_class = {
2936        .name   = "usb_tll_hs",
2937        .sysc   = &omap44xx_usb_tll_hs_sysc,
2938};
2939
2940static struct omap_hwmod omap44xx_usb_tll_hs_hwmod = {
2941        .name           = "usb_tll_hs",
2942        .class          = &omap44xx_usb_tll_hs_hwmod_class,
2943        .clkdm_name     = "l3_init_clkdm",
2944        .main_clk       = "usb_tll_hs_ick",
2945        .prcm = {
2946                .omap4 = {
2947                        .clkctrl_offs = OMAP4_CM_L3INIT_USB_TLL_CLKCTRL_OFFSET,
2948                        .context_offs = OMAP4_RM_L3INIT_USB_TLL_CONTEXT_OFFSET,
2949                        .modulemode   = MODULEMODE_HWCTRL,
2950                },
2951        },
2952};
2953
2954/*
2955 * 'wd_timer' class
2956 * 32-bit watchdog upward counter that generates a pulse on the reset pin on
2957 * overflow condition
2958 */
2959
2960static struct omap_hwmod_class_sysconfig omap44xx_wd_timer_sysc = {
2961        .rev_offs       = 0x0000,
2962        .sysc_offs      = 0x0010,
2963        .syss_offs      = 0x0014,
2964        .sysc_flags     = (SYSC_HAS_EMUFREE | SYSC_HAS_SIDLEMODE |
2965                           SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
2966        .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2967                           SIDLE_SMART_WKUP),
2968        .sysc_fields    = &omap_hwmod_sysc_type1,
2969};
2970
2971static struct omap_hwmod_class omap44xx_wd_timer_hwmod_class = {
2972        .name           = "wd_timer",
2973        .sysc           = &omap44xx_wd_timer_sysc,
2974        .pre_shutdown   = &omap2_wd_timer_disable,
2975        .reset          = &omap2_wd_timer_reset,
2976};
2977
2978/* wd_timer2 */
2979static struct omap_hwmod omap44xx_wd_timer2_hwmod = {
2980        .name           = "wd_timer2",
2981        .class          = &omap44xx_wd_timer_hwmod_class,
2982        .clkdm_name     = "l4_wkup_clkdm",
2983        .main_clk       = "sys_32k_ck",
2984        .prcm = {
2985                .omap4 = {
2986                        .clkctrl_offs = OMAP4_CM_WKUP_WDT2_CLKCTRL_OFFSET,
2987                        .context_offs = OMAP4_RM_WKUP_WDT2_CONTEXT_OFFSET,
2988                        .modulemode   = MODULEMODE_SWCTRL,
2989                },
2990        },
2991};
2992
2993/* wd_timer3 */
2994static struct omap_hwmod omap44xx_wd_timer3_hwmod = {
2995        .name           = "wd_timer3",
2996        .class          = &omap44xx_wd_timer_hwmod_class,
2997        .clkdm_name     = "abe_clkdm",
2998        .main_clk       = "sys_32k_ck",
2999        .prcm = {
3000                .omap4 = {
3001                        .clkctrl_offs = OMAP4_CM1_ABE_WDT3_CLKCTRL_OFFSET,
3002                        .context_offs = OMAP4_RM_ABE_WDT3_CONTEXT_OFFSET,
3003                        .modulemode   = MODULEMODE_SWCTRL,
3004                },
3005        },
3006};
3007
3008
3009/*
3010 * interfaces
3011 */
3012
3013/* l3_main_1 -> dmm */
3014static struct omap_hwmod_ocp_if omap44xx_l3_main_1__dmm = {
3015        .master         = &omap44xx_l3_main_1_hwmod,
3016        .slave          = &omap44xx_dmm_hwmod,
3017        .clk            = "l3_div_ck",
3018        .user           = OCP_USER_SDMA,
3019};
3020
3021/* mpu -> dmm */
3022static struct omap_hwmod_ocp_if omap44xx_mpu__dmm = {
3023        .master         = &omap44xx_mpu_hwmod,
3024        .slave          = &omap44xx_dmm_hwmod,
3025        .clk            = "l3_div_ck",
3026        .user           = OCP_USER_MPU,
3027};
3028
3029/* iva -> l3_instr */
3030static struct omap_hwmod_ocp_if omap44xx_iva__l3_instr = {
3031        .master         = &omap44xx_iva_hwmod,
3032        .slave          = &omap44xx_l3_instr_hwmod,
3033        .clk            = "l3_div_ck",
3034        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3035};
3036
3037/* l3_main_3 -> l3_instr */
3038static struct omap_hwmod_ocp_if omap44xx_l3_main_3__l3_instr = {
3039        .master         = &omap44xx_l3_main_3_hwmod,
3040        .slave          = &omap44xx_l3_instr_hwmod,
3041        .clk            = "l3_div_ck",
3042        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3043};
3044
3045/* ocp_wp_noc -> l3_instr */
3046static struct omap_hwmod_ocp_if omap44xx_ocp_wp_noc__l3_instr = {
3047        .master         = &omap44xx_ocp_wp_noc_hwmod,
3048        .slave          = &omap44xx_l3_instr_hwmod,
3049        .clk            = "l3_div_ck",
3050        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3051};
3052
3053/* dsp -> l3_main_1 */
3054static struct omap_hwmod_ocp_if omap44xx_dsp__l3_main_1 = {
3055        .master         = &omap44xx_dsp_hwmod,
3056        .slave          = &omap44xx_l3_main_1_hwmod,
3057        .clk            = "l3_div_ck",
3058        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3059};
3060
3061/* dss -> l3_main_1 */
3062static struct omap_hwmod_ocp_if omap44xx_dss__l3_main_1 = {
3063        .master         = &omap44xx_dss_hwmod,
3064        .slave          = &omap44xx_l3_main_1_hwmod,
3065        .clk            = "l3_div_ck",
3066        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3067};
3068
3069/* l3_main_2 -> l3_main_1 */
3070static struct omap_hwmod_ocp_if omap44xx_l3_main_2__l3_main_1 = {
3071        .master         = &omap44xx_l3_main_2_hwmod,
3072        .slave          = &omap44xx_l3_main_1_hwmod,
3073        .clk            = "l3_div_ck",
3074        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3075};
3076
3077/* l4_cfg -> l3_main_1 */
3078static struct omap_hwmod_ocp_if omap44xx_l4_cfg__l3_main_1 = {
3079        .master         = &omap44xx_l4_cfg_hwmod,
3080        .slave          = &omap44xx_l3_main_1_hwmod,
3081        .clk            = "l4_div_ck",
3082        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3083};
3084
3085/* mmc1 -> l3_main_1 */
3086static struct omap_hwmod_ocp_if omap44xx_mmc1__l3_main_1 = {
3087        .master         = &omap44xx_mmc1_hwmod,
3088        .slave          = &omap44xx_l3_main_1_hwmod,
3089        .clk            = "l3_div_ck",
3090        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3091};
3092
3093/* mmc2 -> l3_main_1 */
3094static struct omap_hwmod_ocp_if omap44xx_mmc2__l3_main_1 = {
3095        .master         = &omap44xx_mmc2_hwmod,
3096        .slave          = &omap44xx_l3_main_1_hwmod,
3097        .clk            = "l3_div_ck",
3098        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3099};
3100
3101/* mpu -> l3_main_1 */
3102static struct omap_hwmod_ocp_if omap44xx_mpu__l3_main_1 = {
3103        .master         = &omap44xx_mpu_hwmod,
3104        .slave          = &omap44xx_l3_main_1_hwmod,
3105        .clk            = "l3_div_ck",
3106        .user           = OCP_USER_MPU,
3107};
3108
3109/* debugss -> l3_main_2 */
3110static struct omap_hwmod_ocp_if omap44xx_debugss__l3_main_2 = {
3111        .master         = &omap44xx_debugss_hwmod,
3112        .slave          = &omap44xx_l3_main_2_hwmod,
3113        .clk            = "dbgclk_mux_ck",
3114        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3115};
3116
3117/* dma_system -> l3_main_2 */
3118static struct omap_hwmod_ocp_if omap44xx_dma_system__l3_main_2 = {
3119        .master         = &omap44xx_dma_system_hwmod,
3120        .slave          = &omap44xx_l3_main_2_hwmod,
3121        .clk            = "l3_div_ck",
3122        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3123};
3124
3125/* fdif -> l3_main_2 */
3126static struct omap_hwmod_ocp_if omap44xx_fdif__l3_main_2 = {
3127        .master         = &omap44xx_fdif_hwmod,
3128        .slave          = &omap44xx_l3_main_2_hwmod,
3129        .clk            = "l3_div_ck",
3130        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3131};
3132
3133/* gpu -> l3_main_2 */
3134static struct omap_hwmod_ocp_if omap44xx_gpu__l3_main_2 = {
3135        .master         = &omap44xx_gpu_hwmod,
3136        .slave          = &omap44xx_l3_main_2_hwmod,
3137        .clk            = "l3_div_ck",
3138        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3139};
3140
3141/* hsi -> l3_main_2 */
3142static struct omap_hwmod_ocp_if omap44xx_hsi__l3_main_2 = {
3143        .master         = &omap44xx_hsi_hwmod,
3144        .slave          = &omap44xx_l3_main_2_hwmod,
3145        .clk            = "l3_div_ck",
3146        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3147};
3148
3149/* ipu -> l3_main_2 */
3150static struct omap_hwmod_ocp_if omap44xx_ipu__l3_main_2 = {
3151        .master         = &omap44xx_ipu_hwmod,
3152        .slave          = &omap44xx_l3_main_2_hwmod,
3153        .clk            = "l3_div_ck",
3154        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3155};
3156
3157/* iss -> l3_main_2 */
3158static struct omap_hwmod_ocp_if omap44xx_iss__l3_main_2 = {
3159        .master         = &omap44xx_iss_hwmod,
3160        .slave          = &omap44xx_l3_main_2_hwmod,
3161        .clk            = "l3_div_ck",
3162        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3163};
3164
3165/* iva -> l3_main_2 */
3166static struct omap_hwmod_ocp_if omap44xx_iva__l3_main_2 = {
3167        .master         = &omap44xx_iva_hwmod,
3168        .slave          = &omap44xx_l3_main_2_hwmod,
3169        .clk            = "l3_div_ck",
3170        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3171};
3172
3173/* l3_main_1 -> l3_main_2 */
3174static struct omap_hwmod_ocp_if omap44xx_l3_main_1__l3_main_2 = {
3175        .master         = &omap44xx_l3_main_1_hwmod,
3176        .slave          = &omap44xx_l3_main_2_hwmod,
3177        .clk            = "l3_div_ck",
3178        .user           = OCP_USER_MPU,
3179};
3180
3181/* l4_cfg -> l3_main_2 */
3182static struct omap_hwmod_ocp_if omap44xx_l4_cfg__l3_main_2 = {
3183        .master         = &omap44xx_l4_cfg_hwmod,
3184        .slave          = &omap44xx_l3_main_2_hwmod,
3185        .clk            = "l4_div_ck",
3186        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3187};
3188
3189/* usb_host_fs -> l3_main_2 */
3190static struct omap_hwmod_ocp_if __maybe_unused omap44xx_usb_host_fs__l3_main_2 = {
3191        .master         = &omap44xx_usb_host_fs_hwmod,
3192        .slave          = &omap44xx_l3_main_2_hwmod,
3193        .clk            = "l3_div_ck",
3194        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3195};
3196
3197/* usb_host_hs -> l3_main_2 */
3198static struct omap_hwmod_ocp_if omap44xx_usb_host_hs__l3_main_2 = {
3199        .master         = &omap44xx_usb_host_hs_hwmod,
3200        .slave          = &omap44xx_l3_main_2_hwmod,
3201        .clk            = "l3_div_ck",
3202        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3203};
3204
3205/* usb_otg_hs -> l3_main_2 */
3206static struct omap_hwmod_ocp_if omap44xx_usb_otg_hs__l3_main_2 = {
3207        .master         = &omap44xx_usb_otg_hs_hwmod,
3208        .slave          = &omap44xx_l3_main_2_hwmod,
3209        .clk            = "l3_div_ck",
3210        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3211};
3212
3213/* l3_main_1 -> l3_main_3 */
3214static struct omap_hwmod_ocp_if omap44xx_l3_main_1__l3_main_3 = {
3215        .master         = &omap44xx_l3_main_1_hwmod,
3216        .slave          = &omap44xx_l3_main_3_hwmod,
3217        .clk            = "l3_div_ck",
3218        .user           = OCP_USER_MPU,
3219};
3220
3221/* l3_main_2 -> l3_main_3 */
3222static struct omap_hwmod_ocp_if omap44xx_l3_main_2__l3_main_3 = {
3223        .master         = &omap44xx_l3_main_2_hwmod,
3224        .slave          = &omap44xx_l3_main_3_hwmod,
3225        .clk            = "l3_div_ck",
3226        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3227};
3228
3229/* l4_cfg -> l3_main_3 */
3230static struct omap_hwmod_ocp_if omap44xx_l4_cfg__l3_main_3 = {
3231        .master         = &omap44xx_l4_cfg_hwmod,
3232        .slave          = &omap44xx_l3_main_3_hwmod,
3233        .clk            = "l4_div_ck",
3234        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3235};
3236
3237/* aess -> l4_abe */
3238static struct omap_hwmod_ocp_if __maybe_unused omap44xx_aess__l4_abe = {
3239        .master         = &omap44xx_aess_hwmod,
3240        .slave          = &omap44xx_l4_abe_hwmod,
3241        .clk            = "ocp_abe_iclk",
3242        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3243};
3244
3245/* dsp -> l4_abe */
3246static struct omap_hwmod_ocp_if omap44xx_dsp__l4_abe = {
3247        .master         = &omap44xx_dsp_hwmod,
3248        .slave          = &omap44xx_l4_abe_hwmod,
3249        .clk            = "ocp_abe_iclk",
3250        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3251};
3252
3253/* l3_main_1 -> l4_abe */
3254static struct omap_hwmod_ocp_if omap44xx_l3_main_1__l4_abe = {
3255        .master         = &omap44xx_l3_main_1_hwmod,
3256        .slave          = &omap44xx_l4_abe_hwmod,
3257        .clk            = "l3_div_ck",
3258        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3259};
3260
3261/* mpu -> l4_abe */
3262static struct omap_hwmod_ocp_if omap44xx_mpu__l4_abe = {
3263        .master         = &omap44xx_mpu_hwmod,
3264        .slave          = &omap44xx_l4_abe_hwmod,
3265        .clk            = "ocp_abe_iclk",
3266        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3267};
3268
3269/* l3_main_1 -> l4_cfg */
3270static struct omap_hwmod_ocp_if omap44xx_l3_main_1__l4_cfg = {
3271        .master         = &omap44xx_l3_main_1_hwmod,
3272        .slave          = &omap44xx_l4_cfg_hwmod,
3273        .clk            = "l3_div_ck",
3274        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3275};
3276
3277/* l3_main_2 -> l4_per */
3278static struct omap_hwmod_ocp_if omap44xx_l3_main_2__l4_per = {
3279        .master         = &omap44xx_l3_main_2_hwmod,
3280        .slave          = &omap44xx_l4_per_hwmod,
3281        .clk            = "l3_div_ck",
3282        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3283};
3284
3285/* l4_cfg -> l4_wkup */
3286static struct omap_hwmod_ocp_if omap44xx_l4_cfg__l4_wkup = {
3287        .master         = &omap44xx_l4_cfg_hwmod,
3288        .slave          = &omap44xx_l4_wkup_hwmod,
3289        .clk            = "l4_div_ck",
3290        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3291};
3292
3293/* mpu -> mpu_private */
3294static struct omap_hwmod_ocp_if omap44xx_mpu__mpu_private = {
3295        .master         = &omap44xx_mpu_hwmod,
3296        .slave          = &omap44xx_mpu_private_hwmod,
3297        .clk            = "l3_div_ck",
3298        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3299};
3300
3301/* l4_cfg -> ocp_wp_noc */
3302static struct omap_hwmod_ocp_if omap44xx_l4_cfg__ocp_wp_noc = {
3303        .master         = &omap44xx_l4_cfg_hwmod,
3304        .slave          = &omap44xx_ocp_wp_noc_hwmod,
3305        .clk            = "l4_div_ck",
3306        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3307};
3308
3309/* l4_abe -> aess */
3310static struct omap_hwmod_ocp_if __maybe_unused omap44xx_l4_abe__aess = {
3311        .master         = &omap44xx_l4_abe_hwmod,
3312        .slave          = &omap44xx_aess_hwmod,
3313        .clk            = "ocp_abe_iclk",
3314        .user           = OCP_USER_MPU,
3315};
3316
3317/* l4_abe -> aess (dma) */
3318static struct omap_hwmod_ocp_if __maybe_unused omap44xx_l4_abe__aess_dma = {
3319        .master         = &omap44xx_l4_abe_hwmod,
3320        .slave          = &omap44xx_aess_hwmod,
3321        .clk            = "ocp_abe_iclk",
3322        .user           = OCP_USER_SDMA,
3323};
3324
3325/* l3_main_2 -> c2c */
3326static struct omap_hwmod_ocp_if omap44xx_l3_main_2__c2c = {
3327        .master         = &omap44xx_l3_main_2_hwmod,
3328        .slave          = &omap44xx_c2c_hwmod,
3329        .clk            = "l3_div_ck",
3330        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3331};
3332
3333/* l4_wkup -> counter_32k */
3334static struct omap_hwmod_ocp_if omap44xx_l4_wkup__counter_32k = {
3335        .master         = &omap44xx_l4_wkup_hwmod,
3336        .slave          = &omap44xx_counter_32k_hwmod,
3337        .clk            = "l4_wkup_clk_mux_ck",
3338        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3339};
3340
3341/* l4_cfg -> ctrl_module_core */
3342static struct omap_hwmod_ocp_if omap44xx_l4_cfg__ctrl_module_core = {
3343        .master         = &omap44xx_l4_cfg_hwmod,
3344        .slave          = &omap44xx_ctrl_module_core_hwmod,
3345        .clk            = "l4_div_ck",
3346        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3347};
3348
3349/* l4_cfg -> ctrl_module_pad_core */
3350static struct omap_hwmod_ocp_if omap44xx_l4_cfg__ctrl_module_pad_core = {
3351        .master         = &omap44xx_l4_cfg_hwmod,
3352        .slave          = &omap44xx_ctrl_module_pad_core_hwmod,
3353        .clk            = "l4_div_ck",
3354        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3355};
3356
3357/* l4_wkup -> ctrl_module_wkup */
3358static struct omap_hwmod_ocp_if omap44xx_l4_wkup__ctrl_module_wkup = {
3359        .master         = &omap44xx_l4_wkup_hwmod,
3360        .slave          = &omap44xx_ctrl_module_wkup_hwmod,
3361        .clk            = "l4_wkup_clk_mux_ck",
3362        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3363};
3364
3365/* l4_wkup -> ctrl_module_pad_wkup */
3366static struct omap_hwmod_ocp_if omap44xx_l4_wkup__ctrl_module_pad_wkup = {
3367        .master         = &omap44xx_l4_wkup_hwmod,
3368        .slave          = &omap44xx_ctrl_module_pad_wkup_hwmod,
3369        .clk            = "l4_wkup_clk_mux_ck",
3370        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3371};
3372
3373/* l3_instr -> debugss */
3374static struct omap_hwmod_ocp_if omap44xx_l3_instr__debugss = {
3375        .master         = &omap44xx_l3_instr_hwmod,
3376        .slave          = &omap44xx_debugss_hwmod,
3377        .clk            = "l3_div_ck",
3378        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3379};
3380
3381/* l4_cfg -> dma_system */
3382static struct omap_hwmod_ocp_if omap44xx_l4_cfg__dma_system = {
3383        .master         = &omap44xx_l4_cfg_hwmod,
3384        .slave          = &omap44xx_dma_system_hwmod,
3385        .clk            = "l4_div_ck",
3386        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3387};
3388
3389/* l4_abe -> dmic */
3390static struct omap_hwmod_ocp_if omap44xx_l4_abe__dmic = {
3391        .master         = &omap44xx_l4_abe_hwmod,
3392        .slave          = &omap44xx_dmic_hwmod,
3393        .clk            = "ocp_abe_iclk",
3394        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3395};
3396
3397/* dsp -> iva */
3398static struct omap_hwmod_ocp_if omap44xx_dsp__iva = {
3399        .master         = &omap44xx_dsp_hwmod,
3400        .slave          = &omap44xx_iva_hwmod,
3401        .clk            = "dpll_iva_m5x2_ck",
3402        .user           = OCP_USER_DSP,
3403};
3404
3405/* dsp -> sl2if */
3406static struct omap_hwmod_ocp_if __maybe_unused omap44xx_dsp__sl2if = {
3407        .master         = &omap44xx_dsp_hwmod,
3408        .slave          = &omap44xx_sl2if_hwmod,
3409        .clk            = "dpll_iva_m5x2_ck",
3410        .user           = OCP_USER_DSP,
3411};
3412
3413/* l4_cfg -> dsp */
3414static struct omap_hwmod_ocp_if omap44xx_l4_cfg__dsp = {
3415        .master         = &omap44xx_l4_cfg_hwmod,
3416        .slave          = &omap44xx_dsp_hwmod,
3417        .clk            = "l4_div_ck",
3418        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3419};
3420
3421/* l3_main_2 -> dss */
3422static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss = {
3423        .master         = &omap44xx_l3_main_2_hwmod,
3424        .slave          = &omap44xx_dss_hwmod,
3425        .clk            = "l3_div_ck",
3426        .user           = OCP_USER_SDMA,
3427};
3428
3429/* l4_per -> dss */
3430static struct omap_hwmod_ocp_if omap44xx_l4_per__dss = {
3431        .master         = &omap44xx_l4_per_hwmod,
3432        .slave          = &omap44xx_dss_hwmod,
3433        .clk            = "l4_div_ck",
3434        .user           = OCP_USER_MPU,
3435};
3436
3437/* l3_main_2 -> dss_dispc */
3438static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_dispc = {
3439        .master         = &omap44xx_l3_main_2_hwmod,
3440        .slave          = &omap44xx_dss_dispc_hwmod,
3441        .clk            = "l3_div_ck",
3442        .user           = OCP_USER_SDMA,
3443};
3444
3445/* l4_per -> dss_dispc */
3446static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_dispc = {
3447        .master         = &omap44xx_l4_per_hwmod,
3448        .slave          = &omap44xx_dss_dispc_hwmod,
3449        .clk            = "l4_div_ck",
3450        .user           = OCP_USER_MPU,
3451};
3452
3453/* l3_main_2 -> dss_dsi1 */
3454static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_dsi1 = {
3455        .master         = &omap44xx_l3_main_2_hwmod,
3456        .slave          = &omap44xx_dss_dsi1_hwmod,
3457        .clk            = "l3_div_ck",
3458        .user           = OCP_USER_SDMA,
3459};
3460
3461/* l4_per -> dss_dsi1 */
3462static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_dsi1 = {
3463        .master         = &omap44xx_l4_per_hwmod,
3464        .slave          = &omap44xx_dss_dsi1_hwmod,
3465        .clk            = "l4_div_ck",
3466        .user           = OCP_USER_MPU,
3467};
3468
3469/* l3_main_2 -> dss_dsi2 */
3470static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_dsi2 = {
3471        .master         = &omap44xx_l3_main_2_hwmod,
3472        .slave          = &omap44xx_dss_dsi2_hwmod,
3473        .clk            = "l3_div_ck",
3474        .user           = OCP_USER_SDMA,
3475};
3476
3477/* l4_per -> dss_dsi2 */
3478static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_dsi2 = {
3479        .master         = &omap44xx_l4_per_hwmod,
3480        .slave          = &omap44xx_dss_dsi2_hwmod,
3481        .clk            = "l4_div_ck",
3482        .user           = OCP_USER_MPU,
3483};
3484
3485/* l3_main_2 -> dss_hdmi */
3486static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_hdmi = {
3487        .master         = &omap44xx_l3_main_2_hwmod,
3488        .slave          = &omap44xx_dss_hdmi_hwmod,
3489        .clk            = "l3_div_ck",
3490        .user           = OCP_USER_SDMA,
3491};
3492
3493/* l4_per -> dss_hdmi */
3494static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_hdmi = {
3495        .master         = &omap44xx_l4_per_hwmod,
3496        .slave          = &omap44xx_dss_hdmi_hwmod,
3497        .clk            = "l4_div_ck",
3498        .user           = OCP_USER_MPU,
3499};
3500
3501/* l3_main_2 -> dss_rfbi */
3502static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_rfbi = {
3503        .master         = &omap44xx_l3_main_2_hwmod,
3504        .slave          = &omap44xx_dss_rfbi_hwmod,
3505        .clk            = "l3_div_ck",
3506        .user           = OCP_USER_SDMA,
3507};
3508
3509/* l4_per -> dss_rfbi */
3510static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_rfbi = {
3511        .master         = &omap44xx_l4_per_hwmod,
3512        .slave          = &omap44xx_dss_rfbi_hwmod,
3513        .clk            = "l4_div_ck",
3514        .user           = OCP_USER_MPU,
3515};
3516
3517/* l3_main_2 -> dss_venc */
3518static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_venc = {
3519        .master         = &omap44xx_l3_main_2_hwmod,
3520        .slave          = &omap44xx_dss_venc_hwmod,
3521        .clk            = "l3_div_ck",
3522        .user           = OCP_USER_SDMA,
3523};
3524
3525/* l4_per -> dss_venc */
3526static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_venc = {
3527        .master         = &omap44xx_l4_per_hwmod,
3528        .slave          = &omap44xx_dss_venc_hwmod,
3529        .clk            = "l4_div_ck",
3530        .user           = OCP_USER_MPU,
3531};
3532
3533/* l3_main_2 -> sham */
3534static struct omap_hwmod_ocp_if omap44xx_l3_main_2__sha0 = {
3535        .master         = &omap44xx_l3_main_2_hwmod,
3536        .slave          = &omap44xx_sha0_hwmod,
3537        .clk            = "l3_div_ck",
3538        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3539};
3540
3541/* l4_per -> elm */
3542static struct omap_hwmod_ocp_if omap44xx_l4_per__elm = {
3543        .master         = &omap44xx_l4_per_hwmod,
3544        .slave          = &omap44xx_elm_hwmod,
3545        .clk            = "l4_div_ck",
3546        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3547};
3548
3549/* l4_cfg -> fdif */
3550static struct omap_hwmod_ocp_if omap44xx_l4_cfg__fdif = {
3551        .master         = &omap44xx_l4_cfg_hwmod,
3552        .slave          = &omap44xx_fdif_hwmod,
3553        .clk            = "l4_div_ck",
3554        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3555};
3556
3557/* l4_wkup -> gpio1 */
3558static struct omap_hwmod_ocp_if omap44xx_l4_wkup__gpio1 = {
3559        .master         = &omap44xx_l4_wkup_hwmod,
3560        .slave          = &omap44xx_gpio1_hwmod,
3561        .clk            = "l4_wkup_clk_mux_ck",
3562        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3563};
3564
3565/* l4_per -> gpio2 */
3566static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio2 = {
3567        .master         = &omap44xx_l4_per_hwmod,
3568        .slave          = &omap44xx_gpio2_hwmod,
3569        .clk            = "l4_div_ck",
3570        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3571};
3572
3573/* l4_per -> gpio3 */
3574static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio3 = {
3575        .master         = &omap44xx_l4_per_hwmod,
3576        .slave          = &omap44xx_gpio3_hwmod,
3577        .clk            = "l4_div_ck",
3578        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3579};
3580
3581/* l4_per -> gpio4 */
3582static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio4 = {
3583        .master         = &omap44xx_l4_per_hwmod,
3584        .slave          = &omap44xx_gpio4_hwmod,
3585        .clk            = "l4_div_ck",
3586        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3587};
3588
3589/* l4_per -> gpio5 */
3590static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio5 = {
3591        .master         = &omap44xx_l4_per_hwmod,
3592        .slave          = &omap44xx_gpio5_hwmod,
3593        .clk            = "l4_div_ck",
3594        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3595};
3596
3597/* l4_per -> gpio6 */
3598static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio6 = {
3599        .master         = &omap44xx_l4_per_hwmod,
3600        .slave          = &omap44xx_gpio6_hwmod,
3601        .clk            = "l4_div_ck",
3602        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3603};
3604
3605/* l3_main_2 -> gpmc */
3606static struct omap_hwmod_ocp_if omap44xx_l3_main_2__gpmc = {
3607        .master         = &omap44xx_l3_main_2_hwmod,
3608        .slave          = &omap44xx_gpmc_hwmod,
3609        .clk            = "l3_div_ck",
3610        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3611};
3612
3613/* l3_main_2 -> gpu */
3614static struct omap_hwmod_ocp_if omap44xx_l3_main_2__gpu = {
3615        .master         = &omap44xx_l3_main_2_hwmod,
3616        .slave          = &omap44xx_gpu_hwmod,
3617        .clk            = "l3_div_ck",
3618        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3619};
3620
3621/* l4_per -> hdq1w */
3622static struct omap_hwmod_ocp_if omap44xx_l4_per__hdq1w = {
3623        .master         = &omap44xx_l4_per_hwmod,
3624        .slave          = &omap44xx_hdq1w_hwmod,
3625        .clk            = "l4_div_ck",
3626        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3627};
3628
3629/* l4_cfg -> hsi */
3630static struct omap_hwmod_ocp_if omap44xx_l4_cfg__hsi = {
3631        .master         = &omap44xx_l4_cfg_hwmod,
3632        .slave          = &omap44xx_hsi_hwmod,
3633        .clk            = "l4_div_ck",
3634        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3635};
3636
3637/* l4_per -> i2c1 */
3638static struct omap_hwmod_ocp_if omap44xx_l4_per__i2c1 = {
3639        .master         = &omap44xx_l4_per_hwmod,
3640        .slave          = &omap44xx_i2c1_hwmod,
3641        .clk            = "l4_div_ck",
3642        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3643};
3644
3645/* l4_per -> i2c2 */
3646static struct omap_hwmod_ocp_if omap44xx_l4_per__i2c2 = {
3647        .master         = &omap44xx_l4_per_hwmod,
3648        .slave          = &omap44xx_i2c2_hwmod,
3649        .clk            = "l4_div_ck",
3650        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3651};
3652
3653/* l4_per -> i2c3 */
3654static struct omap_hwmod_ocp_if omap44xx_l4_per__i2c3 = {
3655        .master         = &omap44xx_l4_per_hwmod,
3656        .slave          = &omap44xx_i2c3_hwmod,
3657        .clk            = "l4_div_ck",
3658        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3659};
3660
3661/* l4_per -> i2c4 */
3662static struct omap_hwmod_ocp_if omap44xx_l4_per__i2c4 = {
3663        .master         = &omap44xx_l4_per_hwmod,
3664        .slave          = &omap44xx_i2c4_hwmod,
3665        .clk            = "l4_div_ck",
3666        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3667};
3668
3669/* l3_main_2 -> ipu */
3670static struct omap_hwmod_ocp_if omap44xx_l3_main_2__ipu = {
3671        .master         = &omap44xx_l3_main_2_hwmod,
3672        .slave          = &omap44xx_ipu_hwmod,
3673        .clk            = "l3_div_ck",
3674        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3675};
3676
3677/* l3_main_2 -> iss */
3678static struct omap_hwmod_ocp_if omap44xx_l3_main_2__iss = {
3679        .master         = &omap44xx_l3_main_2_hwmod,
3680        .slave          = &omap44xx_iss_hwmod,
3681        .clk            = "l3_div_ck",
3682        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3683};
3684
3685/* iva -> sl2if */
3686static struct omap_hwmod_ocp_if __maybe_unused omap44xx_iva__sl2if = {
3687        .master         = &omap44xx_iva_hwmod,
3688        .slave          = &omap44xx_sl2if_hwmod,
3689        .clk            = "dpll_iva_m5x2_ck",
3690        .user           = OCP_USER_IVA,
3691};
3692
3693/* l3_main_2 -> iva */
3694static struct omap_hwmod_ocp_if omap44xx_l3_main_2__iva = {
3695        .master         = &omap44xx_l3_main_2_hwmod,
3696        .slave          = &omap44xx_iva_hwmod,
3697        .clk            = "l3_div_ck",
3698        .user           = OCP_USER_MPU,
3699};
3700
3701/* l4_wkup -> kbd */
3702static struct omap_hwmod_ocp_if omap44xx_l4_wkup__kbd = {
3703        .master         = &omap44xx_l4_wkup_hwmod,
3704        .slave          = &omap44xx_kbd_hwmod,
3705        .clk            = "l4_wkup_clk_mux_ck",
3706        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3707};
3708
3709/* l4_cfg -> mailbox */
3710static struct omap_hwmod_ocp_if omap44xx_l4_cfg__mailbox = {
3711        .master         = &omap44xx_l4_cfg_hwmod,
3712        .slave          = &omap44xx_mailbox_hwmod,
3713        .clk            = "l4_div_ck",
3714        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3715};
3716
3717/* l4_abe -> mcasp */
3718static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcasp = {
3719        .master         = &omap44xx_l4_abe_hwmod,
3720        .slave          = &omap44xx_mcasp_hwmod,
3721        .clk            = "ocp_abe_iclk",
3722        .user           = OCP_USER_MPU,
3723};
3724
3725/* l4_abe -> mcasp (dma) */
3726static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcasp_dma = {
3727        .master         = &omap44xx_l4_abe_hwmod,
3728        .slave          = &omap44xx_mcasp_hwmod,
3729        .clk            = "ocp_abe_iclk",
3730        .user           = OCP_USER_SDMA,
3731};
3732
3733/* l4_abe -> mcbsp1 */
3734static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp1 = {
3735        .master         = &omap44xx_l4_abe_hwmod,
3736        .slave          = &omap44xx_mcbsp1_hwmod,
3737        .clk            = "ocp_abe_iclk",
3738        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3739};
3740
3741/* l4_abe -> mcbsp2 */
3742static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp2 = {
3743        .master         = &omap44xx_l4_abe_hwmod,
3744        .slave          = &omap44xx_mcbsp2_hwmod,
3745        .clk            = "ocp_abe_iclk",
3746        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3747};
3748
3749/* l4_abe -> mcbsp3 */
3750static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp3 = {
3751        .master         = &omap44xx_l4_abe_hwmod,
3752        .slave          = &omap44xx_mcbsp3_hwmod,
3753        .clk            = "ocp_abe_iclk",
3754        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3755};
3756
3757/* l4_per -> mcbsp4 */
3758static struct omap_hwmod_ocp_if omap44xx_l4_per__mcbsp4 = {
3759        .master         = &omap44xx_l4_per_hwmod,
3760        .slave          = &omap44xx_mcbsp4_hwmod,
3761        .clk            = "l4_div_ck",
3762        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3763};
3764
3765/* l4_abe -> mcpdm */
3766static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcpdm = {
3767        .master         = &omap44xx_l4_abe_hwmod,
3768        .slave          = &omap44xx_mcpdm_hwmod,
3769        .clk            = "ocp_abe_iclk",
3770        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3771};
3772
3773/* l4_per -> mcspi1 */
3774static struct omap_hwmod_ocp_if omap44xx_l4_per__mcspi1 = {
3775        .master         = &omap44xx_l4_per_hwmod,
3776        .slave          = &omap44xx_mcspi1_hwmod,
3777        .clk            = "l4_div_ck",
3778        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3779};
3780
3781/* l4_per -> mcspi2 */
3782static struct omap_hwmod_ocp_if omap44xx_l4_per__mcspi2 = {
3783        .master         = &omap44xx_l4_per_hwmod,
3784        .slave          = &omap44xx_mcspi2_hwmod,
3785        .clk            = "l4_div_ck",
3786        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3787};
3788
3789/* l4_per -> mcspi3 */
3790static struct omap_hwmod_ocp_if omap44xx_l4_per__mcspi3 = {
3791        .master         = &omap44xx_l4_per_hwmod,
3792        .slave          = &omap44xx_mcspi3_hwmod,
3793        .clk            = "l4_div_ck",
3794        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3795};
3796
3797/* l4_per -> mcspi4 */
3798static struct omap_hwmod_ocp_if omap44xx_l4_per__mcspi4 = {
3799        .master         = &omap44xx_l4_per_hwmod,
3800        .slave          = &omap44xx_mcspi4_hwmod,
3801        .clk            = "l4_div_ck",
3802        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3803};
3804
3805/* l4_per -> mmc1 */
3806static struct omap_hwmod_ocp_if omap44xx_l4_per__mmc1 = {
3807        .master         = &omap44xx_l4_per_hwmod,
3808        .slave          = &omap44xx_mmc1_hwmod,
3809        .clk            = "l4_div_ck",
3810        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3811};
3812
3813/* l4_per -> mmc2 */
3814static struct omap_hwmod_ocp_if omap44xx_l4_per__mmc2 = {
3815        .master         = &omap44xx_l4_per_hwmod,
3816        .slave          = &omap44xx_mmc2_hwmod,
3817        .clk            = "l4_div_ck",
3818        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3819};
3820
3821/* l4_per -> mmc3 */
3822static struct omap_hwmod_ocp_if omap44xx_l4_per__mmc3 = {
3823        .master         = &omap44xx_l4_per_hwmod,
3824        .slave          = &omap44xx_mmc3_hwmod,
3825        .clk            = "l4_div_ck",
3826        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3827};
3828
3829/* l4_per -> mmc4 */
3830static struct omap_hwmod_ocp_if omap44xx_l4_per__mmc4 = {
3831        .master         = &omap44xx_l4_per_hwmod,
3832        .slave          = &omap44xx_mmc4_hwmod,
3833        .clk            = "l4_div_ck",
3834        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3835};
3836
3837/* l4_per -> mmc5 */
3838static struct omap_hwmod_ocp_if omap44xx_l4_per__mmc5 = {
3839        .master         = &omap44xx_l4_per_hwmod,
3840        .slave          = &omap44xx_mmc5_hwmod,
3841        .clk            = "l4_div_ck",
3842        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3843};
3844
3845/* l3_main_2 -> ocmc_ram */
3846static struct omap_hwmod_ocp_if omap44xx_l3_main_2__ocmc_ram = {
3847        .master         = &omap44xx_l3_main_2_hwmod,
3848        .slave          = &omap44xx_ocmc_ram_hwmod,
3849        .clk            = "l3_div_ck",
3850        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3851};
3852
3853/* l4_cfg -> ocp2scp_usb_phy */
3854static struct omap_hwmod_ocp_if omap44xx_l4_cfg__ocp2scp_usb_phy = {
3855        .master         = &omap44xx_l4_cfg_hwmod,
3856        .slave          = &omap44xx_ocp2scp_usb_phy_hwmod,
3857        .clk            = "l4_div_ck",
3858        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3859};
3860
3861/* mpu_private -> prcm_mpu */
3862static struct omap_hwmod_ocp_if omap44xx_mpu_private__prcm_mpu = {
3863        .master         = &omap44xx_mpu_private_hwmod,
3864        .slave          = &omap44xx_prcm_mpu_hwmod,
3865        .clk            = "l3_div_ck",
3866        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3867};
3868
3869/* l4_wkup -> cm_core_aon */
3870static struct omap_hwmod_ocp_if omap44xx_l4_wkup__cm_core_aon = {
3871        .master         = &omap44xx_l4_wkup_hwmod,
3872        .slave          = &omap44xx_cm_core_aon_hwmod,
3873        .clk            = "l4_wkup_clk_mux_ck",
3874        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3875};
3876
3877/* l4_cfg -> cm_core */
3878static struct omap_hwmod_ocp_if omap44xx_l4_cfg__cm_core = {
3879        .master         = &omap44xx_l4_cfg_hwmod,
3880        .slave          = &omap44xx_cm_core_hwmod,
3881        .clk            = "l4_div_ck",
3882        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3883};
3884
3885/* l4_wkup -> prm */
3886static struct omap_hwmod_ocp_if omap44xx_l4_wkup__prm = {
3887        .master         = &omap44xx_l4_wkup_hwmod,
3888        .slave          = &omap44xx_prm_hwmod,
3889        .clk            = "l4_wkup_clk_mux_ck",
3890        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3891};
3892
3893/* l4_wkup -> scrm */
3894static struct omap_hwmod_ocp_if omap44xx_l4_wkup__scrm = {
3895        .master         = &omap44xx_l4_wkup_hwmod,
3896        .slave          = &omap44xx_scrm_hwmod,
3897        .clk            = "l4_wkup_clk_mux_ck",
3898        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3899};
3900
3901/* l3_main_2 -> sl2if */
3902static struct omap_hwmod_ocp_if __maybe_unused omap44xx_l3_main_2__sl2if = {
3903        .master         = &omap44xx_l3_main_2_hwmod,
3904        .slave          = &omap44xx_sl2if_hwmod,
3905        .clk            = "l3_div_ck",
3906        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3907};
3908
3909/* l4_abe -> slimbus1 */
3910static struct omap_hwmod_ocp_if omap44xx_l4_abe__slimbus1 = {
3911        .master         = &omap44xx_l4_abe_hwmod,
3912        .slave          = &omap44xx_slimbus1_hwmod,
3913        .clk            = "ocp_abe_iclk",
3914        .user           = OCP_USER_MPU,
3915};
3916
3917/* l4_abe -> slimbus1 (dma) */
3918static struct omap_hwmod_ocp_if omap44xx_l4_abe__slimbus1_dma = {
3919        .master         = &omap44xx_l4_abe_hwmod,
3920        .slave          = &omap44xx_slimbus1_hwmod,
3921        .clk            = "ocp_abe_iclk",
3922        .user           = OCP_USER_SDMA,
3923};
3924
3925/* l4_per -> slimbus2 */
3926static struct omap_hwmod_ocp_if omap44xx_l4_per__slimbus2 = {
3927        .master         = &omap44xx_l4_per_hwmod,
3928        .slave          = &omap44xx_slimbus2_hwmod,
3929        .clk            = "l4_div_ck",
3930        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3931};
3932
3933/* l4_cfg -> smartreflex_core */
3934static struct omap_hwmod_ocp_if omap44xx_l4_cfg__smartreflex_core = {
3935        .master         = &omap44xx_l4_cfg_hwmod,
3936        .slave          = &omap44xx_smartreflex_core_hwmod,
3937        .clk            = "l4_div_ck",
3938        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3939};
3940
3941/* l4_cfg -> smartreflex_iva */
3942static struct omap_hwmod_ocp_if omap44xx_l4_cfg__smartreflex_iva = {
3943        .master         = &omap44xx_l4_cfg_hwmod,
3944        .slave          = &omap44xx_smartreflex_iva_hwmod,
3945        .clk            = "l4_div_ck",
3946        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3947};
3948
3949/* l4_cfg -> smartreflex_mpu */
3950static struct omap_hwmod_ocp_if omap44xx_l4_cfg__smartreflex_mpu = {
3951        .master         = &omap44xx_l4_cfg_hwmod,
3952        .slave          = &omap44xx_smartreflex_mpu_hwmod,
3953        .clk            = "l4_div_ck",
3954        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3955};
3956
3957/* l4_cfg -> spinlock */
3958static struct omap_hwmod_ocp_if omap44xx_l4_cfg__spinlock = {
3959        .master         = &omap44xx_l4_cfg_hwmod,
3960        .slave          = &omap44xx_spinlock_hwmod,
3961        .clk            = "l4_div_ck",
3962        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3963};
3964
3965/* l4_wkup -> timer1 */
3966static struct omap_hwmod_ocp_if omap44xx_l4_wkup__timer1 = {
3967        .master         = &omap44xx_l4_wkup_hwmod,
3968        .slave          = &omap44xx_timer1_hwmod,
3969        .clk            = "l4_wkup_clk_mux_ck",
3970        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3971};
3972
3973/* l4_per -> timer2 */
3974static struct omap_hwmod_ocp_if omap44xx_l4_per__timer2 = {
3975        .master         = &omap44xx_l4_per_hwmod,
3976        .slave          = &omap44xx_timer2_hwmod,
3977        .clk            = "l4_div_ck",
3978        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3979};
3980
3981/* l4_per -> timer3 */
3982static struct omap_hwmod_ocp_if omap44xx_l4_per__timer3 = {
3983        .master         = &omap44xx_l4_per_hwmod,
3984        .slave          = &omap44xx_timer3_hwmod,
3985        .clk            = "l4_div_ck",
3986        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3987};
3988
3989/* l4_per -> timer4 */
3990static struct omap_hwmod_ocp_if omap44xx_l4_per__timer4 = {
3991        .master         = &omap44xx_l4_per_hwmod,
3992        .slave          = &omap44xx_timer4_hwmod,
3993        .clk            = "l4_div_ck",
3994        .user           = OCP_USER_MPU | OCP_USER_SDMA,
3995};
3996
3997/* l4_abe -> timer5 */
3998static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer5 = {
3999        .master         = &omap44xx_l4_abe_hwmod,
4000        .slave          = &omap44xx_timer5_hwmod,
4001        .clk            = "ocp_abe_iclk",
4002        .user           = OCP_USER_MPU | OCP_USER_SDMA,
4003};
4004
4005/* l4_abe -> timer6 */
4006static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer6 = {
4007        .master         = &omap44xx_l4_abe_hwmod,
4008        .slave          = &omap44xx_timer6_hwmod,
4009        .clk            = "ocp_abe_iclk",
4010        .user           = OCP_USER_MPU | OCP_USER_SDMA,
4011};
4012
4013/* l4_abe -> timer7 */
4014static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer7 = {
4015        .master         = &omap44xx_l4_abe_hwmod,
4016        .slave          = &omap44xx_timer7_hwmod,
4017        .clk            = "ocp_abe_iclk",
4018        .user           = OCP_USER_MPU | OCP_USER_SDMA,
4019};
4020
4021/* l4_abe -> timer8 */
4022static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer8 = {
4023        .master         = &omap44xx_l4_abe_hwmod,
4024        .slave          = &omap44xx_timer8_hwmod,
4025        .clk            = "ocp_abe_iclk",
4026        .user           = OCP_USER_MPU | OCP_USER_SDMA,
4027};
4028
4029/* l4_per -> timer9 */
4030static struct omap_hwmod_ocp_if omap44xx_l4_per__timer9 = {
4031        .master         = &omap44xx_l4_per_hwmod,
4032        .slave          = &omap44xx_timer9_hwmod,
4033        .clk            = "l4_div_ck",
4034        .user           = OCP_USER_MPU | OCP_USER_SDMA,
4035};
4036
4037/* l4_per -> timer10 */
4038static struct omap_hwmod_ocp_if omap44xx_l4_per__timer10 = {
4039        .master         = &omap44xx_l4_per_hwmod,
4040        .slave          = &omap44xx_timer10_hwmod,
4041        .clk            = "l4_div_ck",
4042        .user           = OCP_USER_MPU | OCP_USER_SDMA,
4043};
4044
4045/* l4_per -> timer11 */
4046static struct omap_hwmod_ocp_if omap44xx_l4_per__timer11 = {
4047        .master         = &omap44xx_l4_per_hwmod,
4048        .slave          = &omap44xx_timer11_hwmod,
4049        .clk            = "l4_div_ck",
4050        .user           = OCP_USER_MPU | OCP_USER_SDMA,
4051};
4052
4053/* l4_per -> uart1 */
4054static struct omap_hwmod_ocp_if omap44xx_l4_per__uart1 = {
4055        .master         = &omap44xx_l4_per_hwmod,
4056        .slave          = &omap44xx_uart1_hwmod,
4057        .clk            = "l4_div_ck",
4058        .user           = OCP_USER_MPU | OCP_USER_SDMA,
4059};
4060
4061/* l4_per -> uart2 */
4062static struct omap_hwmod_ocp_if omap44xx_l4_per__uart2 = {
4063        .master         = &omap44xx_l4_per_hwmod,
4064        .slave          = &omap44xx_uart2_hwmod,
4065        .clk            = "l4_div_ck",
4066        .user           = OCP_USER_MPU | OCP_USER_SDMA,
4067};
4068
4069/* l4_per -> uart3 */
4070static struct omap_hwmod_ocp_if omap44xx_l4_per__uart3 = {
4071        .master         = &omap44xx_l4_per_hwmod,
4072        .slave          = &omap44xx_uart3_hwmod,
4073        .clk            = "l4_div_ck",
4074        .user           = OCP_USER_MPU | OCP_USER_SDMA,
4075};
4076
4077/* l4_per -> uart4 */
4078static struct omap_hwmod_ocp_if omap44xx_l4_per__uart4 = {
4079        .master         = &omap44xx_l4_per_hwmod,
4080        .slave          = &omap44xx_uart4_hwmod,
4081        .clk            = "l4_div_ck",
4082        .user           = OCP_USER_MPU | OCP_USER_SDMA,
4083};
4084
4085/* l4_cfg -> usb_host_fs */
4086static struct omap_hwmod_ocp_if __maybe_unused omap44xx_l4_cfg__usb_host_fs = {
4087        .master         = &omap44xx_l4_cfg_hwmod,
4088        .slave          = &omap44xx_usb_host_fs_hwmod,
4089        .clk            = "l4_div_ck",
4090        .user           = OCP_USER_MPU | OCP_USER_SDMA,
4091};
4092
4093/* l4_cfg -> usb_host_hs */
4094static struct omap_hwmod_ocp_if omap44xx_l4_cfg__usb_host_hs = {
4095        .master         = &omap44xx_l4_cfg_hwmod,
4096        .slave          = &omap44xx_usb_host_hs_hwmod,
4097        .clk            = "l4_div_ck",
4098        .user           = OCP_USER_MPU | OCP_USER_SDMA,
4099};
4100
4101/* l4_cfg -> usb_otg_hs */
4102static struct omap_hwmod_ocp_if omap44xx_l4_cfg__usb_otg_hs = {
4103        .master         = &omap44xx_l4_cfg_hwmod,
4104        .slave          = &omap44xx_usb_otg_hs_hwmod,
4105        .clk            = "l4_div_ck",
4106        .user           = OCP_USER_MPU | OCP_USER_SDMA,
4107};
4108
4109/* l4_cfg -> usb_tll_hs */
4110static struct omap_hwmod_ocp_if omap44xx_l4_cfg__usb_tll_hs = {
4111        .master         = &omap44xx_l4_cfg_hwmod,
4112        .slave          = &omap44xx_usb_tll_hs_hwmod,
4113        .clk            = "l4_div_ck",
4114        .user           = OCP_USER_MPU | OCP_USER_SDMA,
4115};
4116
4117/* l4_wkup -> wd_timer2 */
4118static struct omap_hwmod_ocp_if omap44xx_l4_wkup__wd_timer2 = {
4119        .master         = &omap44xx_l4_wkup_hwmod,
4120        .slave          = &omap44xx_wd_timer2_hwmod,
4121        .clk            = "l4_wkup_clk_mux_ck",
4122        .user           = OCP_USER_MPU | OCP_USER_SDMA,
4123};
4124
4125/* l4_abe -> wd_timer3 */
4126static struct omap_hwmod_ocp_if omap44xx_l4_abe__wd_timer3 = {
4127        .master         = &omap44xx_l4_abe_hwmod,
4128        .slave          = &omap44xx_wd_timer3_hwmod,
4129        .clk            = "ocp_abe_iclk",
4130        .user           = OCP_USER_MPU,
4131};
4132
4133/* l4_abe -> wd_timer3 (dma) */
4134static struct omap_hwmod_ocp_if omap44xx_l4_abe__wd_timer3_dma = {
4135        .master         = &omap44xx_l4_abe_hwmod,
4136        .slave          = &omap44xx_wd_timer3_hwmod,
4137        .clk            = "ocp_abe_iclk",
4138        .user           = OCP_USER_SDMA,
4139};
4140
4141/* mpu -> emif1 */
4142static struct omap_hwmod_ocp_if omap44xx_mpu__emif1 = {
4143        .master         = &omap44xx_mpu_hwmod,
4144        .slave          = &omap44xx_emif1_hwmod,
4145        .clk            = "l3_div_ck",
4146        .user           = OCP_USER_MPU | OCP_USER_SDMA,
4147};
4148
4149/* mpu -> emif2 */
4150static struct omap_hwmod_ocp_if omap44xx_mpu__emif2 = {
4151        .master         = &omap44xx_mpu_hwmod,
4152        .slave          = &omap44xx_emif2_hwmod,
4153        .clk            = "l3_div_ck",
4154        .user           = OCP_USER_MPU | OCP_USER_SDMA,
4155};
4156
4157static struct omap_hwmod_ocp_if *omap44xx_hwmod_ocp_ifs[] __initdata = {
4158        &omap44xx_l3_main_1__dmm,
4159        &omap44xx_mpu__dmm,
4160        &omap44xx_iva__l3_instr,
4161        &omap44xx_l3_main_3__l3_instr,
4162        &omap44xx_ocp_wp_noc__l3_instr,
4163        &omap44xx_dsp__l3_main_1,
4164        &omap44xx_dss__l3_main_1,
4165        &omap44xx_l3_main_2__l3_main_1,
4166        &omap44xx_l4_cfg__l3_main_1,
4167        &omap44xx_mmc1__l3_main_1,
4168        &omap44xx_mmc2__l3_main_1,
4169        &omap44xx_mpu__l3_main_1,
4170        &omap44xx_debugss__l3_main_2,
4171        &omap44xx_dma_system__l3_main_2,
4172        &omap44xx_fdif__l3_main_2,
4173        &omap44xx_gpu__l3_main_2,
4174        &omap44xx_hsi__l3_main_2,
4175        &omap44xx_ipu__l3_main_2,
4176        &omap44xx_iss__l3_main_2,
4177        &omap44xx_iva__l3_main_2,
4178        &omap44xx_l3_main_1__l3_main_2,
4179        &omap44xx_l4_cfg__l3_main_2,
4180        /* &omap44xx_usb_host_fs__l3_main_2, */
4181        &omap44xx_usb_host_hs__l3_main_2,
4182        &omap44xx_usb_otg_hs__l3_main_2,
4183        &omap44xx_l3_main_1__l3_main_3,
4184        &omap44xx_l3_main_2__l3_main_3,
4185        &omap44xx_l4_cfg__l3_main_3,
4186        &omap44xx_aess__l4_abe,
4187        &omap44xx_dsp__l4_abe,
4188        &omap44xx_l3_main_1__l4_abe,
4189        &omap44xx_mpu__l4_abe,
4190        &omap44xx_l3_main_1__l4_cfg,
4191        &omap44xx_l3_main_2__l4_per,
4192        &omap44xx_l4_cfg__l4_wkup,
4193        &omap44xx_mpu__mpu_private,
4194        &omap44xx_l4_cfg__ocp_wp_noc,
4195        &omap44xx_l4_abe__aess,
4196        &omap44xx_l4_abe__aess_dma,
4197        &omap44xx_l3_main_2__c2c,
4198        &omap44xx_l4_wkup__counter_32k,
4199        &omap44xx_l4_cfg__ctrl_module_core,
4200        &omap44xx_l4_cfg__ctrl_module_pad_core,
4201        &omap44xx_l4_wkup__ctrl_module_wkup,
4202        &omap44xx_l4_wkup__ctrl_module_pad_wkup,
4203        &omap44xx_l3_instr__debugss,
4204        &omap44xx_l4_cfg__dma_system,
4205        &omap44xx_l4_abe__dmic,
4206        &omap44xx_dsp__iva,
4207        /* &omap44xx_dsp__sl2if, */
4208        &omap44xx_l4_cfg__dsp,
4209        &omap44xx_l3_main_2__dss,
4210        &omap44xx_l4_per__dss,
4211        &omap44xx_l3_main_2__dss_dispc,
4212        &omap44xx_l4_per__dss_dispc,
4213        &omap44xx_l3_main_2__dss_dsi1,
4214        &omap44xx_l4_per__dss_dsi1,
4215        &omap44xx_l3_main_2__dss_dsi2,
4216        &omap44xx_l4_per__dss_dsi2,
4217        &omap44xx_l3_main_2__dss_hdmi,
4218        &omap44xx_l4_per__dss_hdmi,
4219        &omap44xx_l3_main_2__dss_rfbi,
4220        &omap44xx_l4_per__dss_rfbi,
4221        &omap44xx_l3_main_2__dss_venc,
4222        &omap44xx_l4_per__dss_venc,
4223        &omap44xx_l4_per__elm,
4224        &omap44xx_l4_cfg__fdif,
4225        &omap44xx_l4_wkup__gpio1,
4226        &omap44xx_l4_per__gpio2,
4227        &omap44xx_l4_per__gpio3,
4228        &omap44xx_l4_per__gpio4,
4229        &omap44xx_l4_per__gpio5,
4230        &omap44xx_l4_per__gpio6,
4231        &omap44xx_l3_main_2__gpmc,
4232        &omap44xx_l3_main_2__gpu,
4233        &omap44xx_l4_per__hdq1w,
4234        &omap44xx_l4_cfg__hsi,
4235        &omap44xx_l4_per__i2c1,
4236        &omap44xx_l4_per__i2c2,
4237        &omap44xx_l4_per__i2c3,
4238        &omap44xx_l4_per__i2c4,
4239        &omap44xx_l3_main_2__ipu,
4240        &omap44xx_l3_main_2__iss,
4241        /* &omap44xx_iva__sl2if, */
4242        &omap44xx_l3_main_2__iva,
4243        &omap44xx_l4_wkup__kbd,
4244        &omap44xx_l4_cfg__mailbox,
4245        &omap44xx_l4_abe__mcasp,
4246        &omap44xx_l4_abe__mcasp_dma,
4247        &omap44xx_l4_abe__mcbsp1,
4248        &omap44xx_l4_abe__mcbsp2,
4249        &omap44xx_l4_abe__mcbsp3,
4250        &omap44xx_l4_per__mcbsp4,
4251        &omap44xx_l4_abe__mcpdm,
4252        &omap44xx_l4_per__mcspi1,
4253        &omap44xx_l4_per__mcspi2,
4254        &omap44xx_l4_per__mcspi3,
4255        &omap44xx_l4_per__mcspi4,
4256        &omap44xx_l4_per__mmc1,
4257        &omap44xx_l4_per__mmc2,
4258        &omap44xx_l4_per__mmc3,
4259        &omap44xx_l4_per__mmc4,
4260        &omap44xx_l4_per__mmc5,
4261        &omap44xx_l3_main_2__mmu_ipu,
4262        &omap44xx_l4_cfg__mmu_dsp,
4263        &omap44xx_l3_main_2__ocmc_ram,
4264        &omap44xx_l4_cfg__ocp2scp_usb_phy,
4265        &omap44xx_mpu_private__prcm_mpu,
4266        &omap44xx_l4_wkup__cm_core_aon,
4267        &omap44xx_l4_cfg__cm_core,
4268        &omap44xx_l4_wkup__prm,
4269        &omap44xx_l4_wkup__scrm,
4270        /* &omap44xx_l3_main_2__sl2if, */
4271        &omap44xx_l4_abe__slimbus1,
4272        &omap44xx_l4_abe__slimbus1_dma,
4273        &omap44xx_l4_per__slimbus2,
4274        &omap44xx_l4_cfg__smartreflex_core,
4275        &omap44xx_l4_cfg__smartreflex_iva,
4276        &omap44xx_l4_cfg__smartreflex_mpu,
4277        &omap44xx_l4_cfg__spinlock,
4278        &omap44xx_l4_wkup__timer1,
4279        &omap44xx_l4_per__timer2,
4280        &omap44xx_l4_per__timer3,
4281        &omap44xx_l4_per__timer4,
4282        &omap44xx_l4_abe__timer5,
4283        &omap44xx_l4_abe__timer6,
4284        &omap44xx_l4_abe__timer7,
4285        &omap44xx_l4_abe__timer8,
4286        &omap44xx_l4_per__timer9,
4287        &omap44xx_l4_per__timer10,
4288        &omap44xx_l4_per__timer11,
4289        &omap44xx_l4_per__uart1,
4290        &omap44xx_l4_per__uart2,
4291        &omap44xx_l4_per__uart3,
4292        &omap44xx_l4_per__uart4,
4293        /* &omap44xx_l4_cfg__usb_host_fs, */
4294        &omap44xx_l4_cfg__usb_host_hs,
4295        &omap44xx_l4_cfg__usb_otg_hs,
4296        &omap44xx_l4_cfg__usb_tll_hs,
4297        &omap44xx_l4_wkup__wd_timer2,
4298        &omap44xx_l4_abe__wd_timer3,
4299        &omap44xx_l4_abe__wd_timer3_dma,
4300        &omap44xx_mpu__emif1,
4301        &omap44xx_mpu__emif2,
4302        &omap44xx_l3_main_2__aes1,
4303        &omap44xx_l3_main_2__aes2,
4304        &omap44xx_l3_main_2__des,
4305        &omap44xx_l3_main_2__sha0,
4306        NULL,
4307};
4308
4309int __init omap44xx_hwmod_init(void)
4310{
4311        omap_hwmod_init();
4312        return omap_hwmod_register_links(omap44xx_hwmod_ocp_ifs);
4313}
4314
4315