Linux Audio

Check our new training course

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