Linux Audio

Check our new training course

Loading...
v6.13.7
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * omap_hwmod_3xxx_data.c - hardware modules present on the OMAP3xxx chips
   4 *
   5 * Copyright (C) 2009-2011 Nokia Corporation
   6 * Copyright (C) 2012 Texas Instruments, Inc.
   7 * Paul Walmsley
   8 *
 
 
 
 
   9 * The data in this file should be completely autogeneratable from
  10 * the TI hardware database or other technical documentation.
  11 *
  12 * XXX these should be marked initdata for multi-OMAP kernels
  13 */
 
 
 
 
 
 
 
 
 
 
 
 
 
  14
  15#include <linux/platform_data/i2c-omap.h>
  16#include <linux/power/smartreflex.h>
  17#include <linux/platform_data/hsmmc-omap.h>
  18
  19#include "l3_3xxx.h"
  20#include "l4_3xxx.h"
  21
  22#include "soc.h"
  23#include "omap_hwmod.h"
  24#include "omap_hwmod_common_data.h"
 
  25#include "prm-regbits-34xx.h"
  26#include "cm-regbits-34xx.h"
  27
  28#include "i2c.h"
  29#include "wd_timer.h"
 
  30
  31/*
  32 * OMAP3xxx hardware module integration data
  33 *
  34 * All of the data in this section should be autogeneratable from the
  35 * TI hardware database or other technical documentation.  Data that
  36 * is driver-specific or driver-kernel integration-specific belongs
  37 * elsewhere.
  38 */
  39
  40#define AM35XX_IPSS_USBOTGSS_BASE      0x5C040000
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  41
  42/*
  43 * IP blocks
  44 */
 
 
 
  45
  46/* L3 */
 
 
 
 
 
  47
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  48static struct omap_hwmod omap3xxx_l3_main_hwmod = {
  49	.name		= "l3_main",
  50	.class		= &l3_hwmod_class,
 
 
 
 
 
 
  51	.flags		= HWMOD_NO_IDLEST,
  52};
  53
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  54/* L4 CORE */
  55static struct omap_hwmod omap3xxx_l4_core_hwmod = {
  56	.name		= "l4_core",
  57	.class		= &l4_hwmod_class,
 
 
 
  58	.flags		= HWMOD_NO_IDLEST,
  59};
  60
 
 
 
 
 
  61/* L4 PER */
  62static struct omap_hwmod omap3xxx_l4_per_hwmod = {
  63	.name		= "l4_per",
  64	.class		= &l4_hwmod_class,
 
 
 
  65	.flags		= HWMOD_NO_IDLEST,
  66};
  67
 
 
 
 
 
  68/* L4 WKUP */
  69static struct omap_hwmod omap3xxx_l4_wkup_hwmod = {
  70	.name		= "l4_wkup",
  71	.class		= &l4_hwmod_class,
 
 
 
  72	.flags		= HWMOD_NO_IDLEST,
  73};
  74
  75/* L4 SEC */
  76static struct omap_hwmod omap3xxx_l4_sec_hwmod = {
  77	.name		= "l4_sec",
  78	.class		= &l4_hwmod_class,
  79	.flags		= HWMOD_NO_IDLEST,
  80};
  81
  82/* MPU */
  83
  84static struct omap_hwmod omap3xxx_mpu_hwmod = {
  85	.name		= "mpu",
  86	.class		= &mpu_hwmod_class,
  87	.main_clk	= "arm_fck",
 
 
 
  88};
  89
  90/* IVA2 (IVA2) */
  91static struct omap_hwmod_rst_info omap3xxx_iva_resets[] = {
  92	{ .name = "logic", .rst_shift = 0, .st_shift = 8 },
  93	{ .name = "seq0", .rst_shift = 1, .st_shift = 9 },
  94	{ .name = "seq1", .rst_shift = 2, .st_shift = 10 },
 
 
 
 
 
  95};
  96
  97static struct omap_hwmod omap3xxx_iva_hwmod = {
  98	.name		= "iva",
  99	.class		= &iva_hwmod_class,
 100	.clkdm_name	= "iva2_clkdm",
 101	.rst_lines	= omap3xxx_iva_resets,
 102	.rst_lines_cnt	= ARRAY_SIZE(omap3xxx_iva_resets),
 103	.main_clk	= "iva2_ck",
 104	.prcm = {
 105		.omap2 = {
 106			.module_offs = OMAP3430_IVA2_MOD,
 107			.idlest_reg_id = 1,
 108			.idlest_idle_bit = OMAP3430_ST_IVA2_SHIFT,
 109		},
 110	},
 111};
 112
 113/*
 114 * 'debugss' class
 115 * debug and emulation sub system
 116 */
 117
 118static struct omap_hwmod_class omap3xxx_debugss_hwmod_class = {
 119	.name	= "debugss",
 
 
 
 
 120};
 121
 122/* debugss */
 123static struct omap_hwmod omap3xxx_debugss_hwmod = {
 124	.name		= "debugss",
 125	.class		= &omap3xxx_debugss_hwmod_class,
 126	.clkdm_name	= "emu_clkdm",
 127	.main_clk	= "emu_src_ck",
 128	.flags		= HWMOD_NO_IDLEST,
 
 
 
 
 
 
 
 
 
 129};
 130
 131/* timer class */
 132static struct omap_hwmod_class_sysconfig omap3xxx_timer_sysc = {
 133	.rev_offs	= 0x0000,
 134	.sysc_offs	= 0x0010,
 135	.syss_offs	= 0x0014,
 136	.sysc_flags	= (SYSC_HAS_SIDLEMODE | SYSC_HAS_CLOCKACTIVITY |
 137			   SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
 138			   SYSC_HAS_EMUFREE | SYSC_HAS_AUTOIDLE |
 139			   SYSS_HAS_RESET_STATUS),
 140	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
 141	.sysc_fields	= &omap_hwmod_sysc_type1,
 142};
 143
 144static struct omap_hwmod_class omap3xxx_timer_hwmod_class = {
 145	.name = "timer",
 146	.sysc = &omap3xxx_timer_sysc,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 147};
 148
 149/* timer3 */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 150static struct omap_hwmod omap3xxx_timer3_hwmod = {
 151	.name		= "timer3",
 
 152	.main_clk	= "gpt3_fck",
 153	.prcm		= {
 154		.omap2 = {
 
 
 155			.module_offs = OMAP3430_PER_MOD,
 156			.idlest_reg_id = 1,
 157			.idlest_idle_bit = OMAP3430_ST_GPT3_SHIFT,
 158		},
 159	},
 
 
 160	.class		= &omap3xxx_timer_hwmod_class,
 161	.flags		= HWMOD_SET_DEFAULT_CLOCKACT,
 162};
 163
 164/* timer4 */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 165static struct omap_hwmod omap3xxx_timer4_hwmod = {
 166	.name		= "timer4",
 
 167	.main_clk	= "gpt4_fck",
 168	.prcm		= {
 169		.omap2 = {
 
 
 170			.module_offs = OMAP3430_PER_MOD,
 171			.idlest_reg_id = 1,
 172			.idlest_idle_bit = OMAP3430_ST_GPT4_SHIFT,
 173		},
 174	},
 
 
 175	.class		= &omap3xxx_timer_hwmod_class,
 176	.flags		= HWMOD_SET_DEFAULT_CLOCKACT,
 177};
 178
 179/* timer5 */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 180static struct omap_hwmod omap3xxx_timer5_hwmod = {
 181	.name		= "timer5",
 
 182	.main_clk	= "gpt5_fck",
 183	.prcm		= {
 184		.omap2 = {
 
 
 185			.module_offs = OMAP3430_PER_MOD,
 186			.idlest_reg_id = 1,
 187			.idlest_idle_bit = OMAP3430_ST_GPT5_SHIFT,
 188		},
 189	},
 
 
 190	.class		= &omap3xxx_timer_hwmod_class,
 191	.flags		= HWMOD_SET_DEFAULT_CLOCKACT,
 192};
 193
 194/* timer6 */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 195static struct omap_hwmod omap3xxx_timer6_hwmod = {
 196	.name		= "timer6",
 
 197	.main_clk	= "gpt6_fck",
 198	.prcm		= {
 199		.omap2 = {
 
 
 200			.module_offs = OMAP3430_PER_MOD,
 201			.idlest_reg_id = 1,
 202			.idlest_idle_bit = OMAP3430_ST_GPT6_SHIFT,
 203		},
 204	},
 
 
 205	.class		= &omap3xxx_timer_hwmod_class,
 206	.flags		= HWMOD_SET_DEFAULT_CLOCKACT,
 207};
 208
 209/* timer7 */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 210static struct omap_hwmod omap3xxx_timer7_hwmod = {
 211	.name		= "timer7",
 
 212	.main_clk	= "gpt7_fck",
 213	.prcm		= {
 214		.omap2 = {
 
 
 215			.module_offs = OMAP3430_PER_MOD,
 216			.idlest_reg_id = 1,
 217			.idlest_idle_bit = OMAP3430_ST_GPT7_SHIFT,
 218		},
 219	},
 
 
 220	.class		= &omap3xxx_timer_hwmod_class,
 221	.flags		= HWMOD_SET_DEFAULT_CLOCKACT,
 222};
 223
 224/* timer8 */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 225static struct omap_hwmod omap3xxx_timer8_hwmod = {
 226	.name		= "timer8",
 
 227	.main_clk	= "gpt8_fck",
 228	.prcm		= {
 229		.omap2 = {
 
 
 230			.module_offs = OMAP3430_PER_MOD,
 231			.idlest_reg_id = 1,
 232			.idlest_idle_bit = OMAP3430_ST_GPT8_SHIFT,
 233		},
 234	},
 
 
 235	.class		= &omap3xxx_timer_hwmod_class,
 236	.flags		= HWMOD_SET_DEFAULT_CLOCKACT,
 237};
 238
 239/* timer9 */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 240static struct omap_hwmod omap3xxx_timer9_hwmod = {
 241	.name		= "timer9",
 
 242	.main_clk	= "gpt9_fck",
 243	.prcm		= {
 244		.omap2 = {
 
 
 245			.module_offs = OMAP3430_PER_MOD,
 246			.idlest_reg_id = 1,
 247			.idlest_idle_bit = OMAP3430_ST_GPT9_SHIFT,
 248		},
 249	},
 
 
 250	.class		= &omap3xxx_timer_hwmod_class,
 251	.flags		= HWMOD_SET_DEFAULT_CLOCKACT,
 252};
 253
 254/* timer10 */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 255static struct omap_hwmod omap3xxx_timer10_hwmod = {
 256	.name		= "timer10",
 
 257	.main_clk	= "gpt10_fck",
 258	.prcm		= {
 259		.omap2 = {
 
 
 260			.module_offs = CORE_MOD,
 261			.idlest_reg_id = 1,
 262			.idlest_idle_bit = OMAP3430_ST_GPT10_SHIFT,
 263		},
 264	},
 265	.class		= &omap3xxx_timer_hwmod_class,
 266	.flags		= HWMOD_SET_DEFAULT_CLOCKACT,
 
 
 267};
 268
 269/* timer11 */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 270static struct omap_hwmod omap3xxx_timer11_hwmod = {
 271	.name		= "timer11",
 
 272	.main_clk	= "gpt11_fck",
 273	.prcm		= {
 274		.omap2 = {
 
 
 275			.module_offs = CORE_MOD,
 276			.idlest_reg_id = 1,
 277			.idlest_idle_bit = OMAP3430_ST_GPT11_SHIFT,
 278		},
 279	},
 
 
 280	.class		= &omap3xxx_timer_hwmod_class,
 281	.flags		= HWMOD_SET_DEFAULT_CLOCKACT,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 282};
 283
 284/*
 285 * 'wd_timer' class
 286 * 32-bit watchdog upward counter that generates a pulse on the reset pin on
 287 * overflow condition
 288 */
 289
 290static struct omap_hwmod_class_sysconfig omap3xxx_wd_timer_sysc = {
 291	.rev_offs	= 0x0000,
 292	.sysc_offs	= 0x0010,
 293	.syss_offs	= 0x0014,
 294	.sysc_flags	= (SYSC_HAS_SIDLEMODE | SYSC_HAS_EMUFREE |
 295			   SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
 296			   SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
 297			   SYSS_HAS_RESET_STATUS),
 298	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
 299	.sysc_fields    = &omap_hwmod_sysc_type1,
 300};
 301
 302/* I2C common */
 303static struct omap_hwmod_class_sysconfig i2c_sysc = {
 304	.rev_offs	= 0x00,
 305	.sysc_offs	= 0x20,
 306	.syss_offs	= 0x10,
 307	.sysc_flags	= (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
 308			   SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
 309			   SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
 310	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
 311	.sysc_fields    = &omap_hwmod_sysc_type1,
 312};
 313
 314static struct omap_hwmod_class omap3xxx_wd_timer_hwmod_class = {
 315	.name		= "wd_timer",
 316	.sysc		= &omap3xxx_wd_timer_sysc,
 317	.pre_shutdown	= &omap2_wd_timer_disable,
 318	.reset		= &omap2_wd_timer_reset,
 
 
 
 
 319};
 320
 321static struct omap_hwmod omap3xxx_wd_timer2_hwmod = {
 322	.name		= "wd_timer2",
 323	.class		= &omap3xxx_wd_timer_hwmod_class,
 324	.main_clk	= "wdt2_fck",
 325	.prcm		= {
 326		.omap2 = {
 
 
 327			.module_offs = WKUP_MOD,
 328			.idlest_reg_id = 1,
 329			.idlest_idle_bit = OMAP3430_ST_WDT2_SHIFT,
 330		},
 331	},
 
 
 
 332	/*
 333	 * XXX: Use software supervised mode, HW supervised smartidle seems to
 334	 * block CORE power domain idle transitions. Maybe a HW bug in wdt2?
 335	 */
 336	.flags		= HWMOD_SWSUP_SIDLE,
 337};
 338
 339/* UART1 */
 
 
 
 
 
 340static struct omap_hwmod omap3xxx_uart1_hwmod = {
 341	.name		= "uart1",
 
 
 342	.main_clk	= "uart1_fck",
 343	.flags		= DEBUG_TI81XXUART1_FLAGS | HWMOD_SWSUP_SIDLE,
 344	.prcm		= {
 345		.omap2 = {
 346			.module_offs = CORE_MOD,
 
 
 347			.idlest_reg_id = 1,
 348			.idlest_idle_bit = OMAP3430_EN_UART1_SHIFT,
 349		},
 350	},
 
 
 351	.class		= &omap2_uart_class,
 
 352};
 353
 354/* UART2 */
 
 
 
 
 
 355static struct omap_hwmod omap3xxx_uart2_hwmod = {
 356	.name		= "uart2",
 
 
 357	.main_clk	= "uart2_fck",
 358	.flags		= DEBUG_TI81XXUART2_FLAGS | HWMOD_SWSUP_SIDLE,
 359	.prcm		= {
 360		.omap2 = {
 361			.module_offs = CORE_MOD,
 
 
 362			.idlest_reg_id = 1,
 363			.idlest_idle_bit = OMAP3430_EN_UART2_SHIFT,
 364		},
 365	},
 
 
 366	.class		= &omap2_uart_class,
 
 367};
 368
 369/* UART3 */
 
 
 
 
 
 370static struct omap_hwmod omap3xxx_uart3_hwmod = {
 371	.name		= "uart3",
 
 
 372	.main_clk	= "uart3_fck",
 373	.flags		= DEBUG_OMAP3UART3_FLAGS | DEBUG_TI81XXUART3_FLAGS |
 374				HWMOD_SWSUP_SIDLE,
 375	.prcm		= {
 376		.omap2 = {
 377			.module_offs = OMAP3430_PER_MOD,
 
 
 378			.idlest_reg_id = 1,
 379			.idlest_idle_bit = OMAP3430_EN_UART3_SHIFT,
 380		},
 381	},
 
 
 382	.class		= &omap2_uart_class,
 
 383};
 384
 385/* UART4 */
 386
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 387
 388static struct omap_hwmod omap36xx_uart4_hwmod = {
 389	.name		= "uart4",
 
 
 390	.main_clk	= "uart4_fck",
 391	.flags		= DEBUG_OMAP3UART4_FLAGS | HWMOD_SWSUP_SIDLE,
 392	.prcm		= {
 393		.omap2 = {
 394			.module_offs = OMAP3430_PER_MOD,
 
 
 395			.idlest_reg_id = 1,
 396			.idlest_idle_bit = OMAP3630_EN_UART4_SHIFT,
 397		},
 398	},
 
 
 399	.class		= &omap2_uart_class,
 
 400};
 401
 
 
 
 
 
 
 402
 
 
 
 
 
 403
 404/*
 405 * XXX AM35xx UART4 cannot complete its softreset without uart1_fck or
 406 * uart2_fck being enabled.  So we add uart1_fck as an optional clock,
 407 * below, and set the HWMOD_CONTROL_OPT_CLKS_IN_RESET.  This really
 408 * should not be needed.  The functional clock structure of the AM35xx
 409 * UART4 is extremely unclear and opaque; it is unclear what the role
 410 * of uart1/2_fck is for the UART4.  Any clarification from either
 411 * empirical testing or the AM3505/3517 hardware designers would be
 412 * most welcome.
 413 */
 414static struct omap_hwmod_opt_clk am35xx_uart4_opt_clks[] = {
 415	{ .role = "softreset_uart1_fck", .clk = "uart1_fck" },
 416};
 417
 418static struct omap_hwmod am35xx_uart4_hwmod = {
 419	.name		= "uart4",
 420	.main_clk	= "uart4_fck",
 421	.prcm		= {
 
 
 
 422		.omap2 = {
 423			.module_offs = CORE_MOD,
 424			.idlest_reg_id = 1,
 425			.idlest_idle_bit = AM35XX_ST_UART4_SHIFT,
 426		},
 427	},
 428	.opt_clks	= am35xx_uart4_opt_clks,
 429	.opt_clks_cnt	= ARRAY_SIZE(am35xx_uart4_opt_clks),
 430	.flags		= HWMOD_CONTROL_OPT_CLKS_IN_RESET,
 431	.class		= &omap2_uart_class,
 432};
 433
 434static struct omap_hwmod_class i2c_class = {
 435	.name	= "i2c",
 436	.sysc	= &i2c_sysc,
 437	.reset	= &omap_i2c_reset,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 438};
 439
 440/* dss */
 441static struct omap_hwmod_opt_clk dss_opt_clks[] = {
 442	/*
 443	 * The DSS HW needs all DSS clocks enabled during reset. The dss_core
 444	 * driver does not use these clocks.
 445	 */
 446	{ .role = "sys_clk", .clk = "dss2_alwon_fck" },
 447	{ .role = "tv_clk", .clk = "dss_tv_fck" },
 448	/* required only on OMAP3430 */
 449	{ .role = "tv_dac_clk", .clk = "dss_96m_fck" },
 450};
 451
 452static struct omap_hwmod omap3430es1_dss_core_hwmod = {
 453	.name		= "dss_core",
 454	.class		= &omap2_dss_hwmod_class,
 455	.main_clk	= "dss1_alwon_fck", /* instead of dss_fck */
 
 456	.prcm		= {
 457		.omap2 = {
 
 
 458			.module_offs = OMAP3430_DSS_MOD,
 459			.idlest_reg_id = 1,
 
 460		},
 461	},
 462	.opt_clks	= dss_opt_clks,
 463	.opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
 464	.flags		= HWMOD_NO_IDLEST | HWMOD_CONTROL_OPT_CLKS_IN_RESET,
 
 
 
 
 
 465};
 466
 467static struct omap_hwmod omap3xxx_dss_core_hwmod = {
 468	.name		= "dss_core",
 469	.flags		= HWMOD_CONTROL_OPT_CLKS_IN_RESET,
 470	.class		= &omap2_dss_hwmod_class,
 471	.main_clk	= "dss1_alwon_fck", /* instead of dss_fck */
 
 472	.prcm		= {
 473		.omap2 = {
 
 
 474			.module_offs = OMAP3430_DSS_MOD,
 475			.idlest_reg_id = 1,
 476			.idlest_idle_bit = OMAP3430ES2_ST_DSS_IDLE_SHIFT,
 
 477		},
 478	},
 479	.opt_clks	= dss_opt_clks,
 480	.opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
 
 
 
 
 
 
 481};
 482
 483/*
 484 * 'dispc' class
 485 * display controller
 486 */
 487
 488static struct omap_hwmod_class_sysconfig omap3_dispc_sysc = {
 489	.rev_offs	= 0x0000,
 490	.sysc_offs	= 0x0010,
 491	.syss_offs	= 0x0014,
 492	.sysc_flags	= (SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE |
 493			   SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
 494			   SYSC_HAS_ENAWAKEUP),
 495	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
 496			   MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
 497	.sysc_fields	= &omap_hwmod_sysc_type1,
 498};
 499
 500static struct omap_hwmod_class omap3_dispc_hwmod_class = {
 501	.name	= "dispc",
 502	.sysc	= &omap3_dispc_sysc,
 503};
 504
 505static struct omap_hwmod omap3xxx_dss_dispc_hwmod = {
 506	.name		= "dss_dispc",
 507	.class		= &omap3_dispc_hwmod_class,
 
 508	.main_clk	= "dss1_alwon_fck",
 509	.prcm		= {
 510		.omap2 = {
 
 
 511			.module_offs = OMAP3430_DSS_MOD,
 512		},
 513	},
 
 
 
 
 
 514	.flags		= HWMOD_NO_IDLEST,
 515	.dev_attr	= &omap2_3_dss_dispc_dev_attr,
 516};
 517
 518/*
 519 * 'dsi' class
 520 * display serial interface controller
 521 */
 522
 523static struct omap_hwmod_class_sysconfig omap3xxx_dsi_sysc = {
 524	.rev_offs	= 0x0000,
 525	.sysc_offs	= 0x0010,
 526	.syss_offs	= 0x0014,
 527	.sysc_flags	= (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
 528			   SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
 529			   SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
 530	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
 531	.sysc_fields	= &omap_hwmod_sysc_type1,
 532};
 533
 534static struct omap_hwmod_class omap3xxx_dsi_hwmod_class = {
 535	.name = "dsi",
 536	.sysc	= &omap3xxx_dsi_sysc,
 
 
 
 
 537};
 538
 539/* dss_dsi1 */
 540static struct omap_hwmod_opt_clk dss_dsi1_opt_clks[] = {
 541	{ .role = "sys_clk", .clk = "dss2_alwon_fck" },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 542};
 543
 544static struct omap_hwmod omap3xxx_dss_dsi1_hwmod = {
 545	.name		= "dss_dsi1",
 546	.class		= &omap3xxx_dsi_hwmod_class,
 
 547	.main_clk	= "dss1_alwon_fck",
 548	.prcm		= {
 549		.omap2 = {
 
 
 550			.module_offs = OMAP3430_DSS_MOD,
 551		},
 552	},
 553	.opt_clks	= dss_dsi1_opt_clks,
 554	.opt_clks_cnt	= ARRAY_SIZE(dss_dsi1_opt_clks),
 
 
 
 555	.flags		= HWMOD_NO_IDLEST,
 556};
 557
 558static struct omap_hwmod_opt_clk dss_rfbi_opt_clks[] = {
 559	{ .role = "ick", .clk = "dss_ick" },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 560};
 561
 562static struct omap_hwmod omap3xxx_dss_rfbi_hwmod = {
 563	.name		= "dss_rfbi",
 564	.class		= &omap2_rfbi_hwmod_class,
 565	.main_clk	= "dss1_alwon_fck",
 566	.prcm		= {
 567		.omap2 = {
 
 
 568			.module_offs = OMAP3430_DSS_MOD,
 569		},
 570	},
 571	.opt_clks	= dss_rfbi_opt_clks,
 572	.opt_clks_cnt	= ARRAY_SIZE(dss_rfbi_opt_clks),
 
 
 
 573	.flags		= HWMOD_NO_IDLEST,
 574};
 575
 576static struct omap_hwmod_opt_clk dss_venc_opt_clks[] = {
 577	/* required only on OMAP3430 */
 578	{ .role = "tv_dac_clk", .clk = "dss_96m_fck" },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 579};
 580
 581static struct omap_hwmod omap3xxx_dss_venc_hwmod = {
 582	.name		= "dss_venc",
 583	.class		= &omap2_venc_hwmod_class,
 584	.main_clk	= "dss_tv_fck",
 585	.prcm		= {
 586		.omap2 = {
 
 
 587			.module_offs = OMAP3430_DSS_MOD,
 588		},
 589	},
 590	.opt_clks	= dss_venc_opt_clks,
 591	.opt_clks_cnt	= ARRAY_SIZE(dss_venc_opt_clks),
 
 
 
 592	.flags		= HWMOD_NO_IDLEST,
 593};
 594
 595/* I2C1 */
 
 
 
 
 
 
 
 
 
 
 
 
 596static struct omap_hwmod omap3xxx_i2c1_hwmod = {
 597	.name		= "i2c1",
 598	.flags		= HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
 
 
 599	.main_clk	= "i2c1_fck",
 600	.prcm		= {
 601		.omap2 = {
 602			.module_offs = CORE_MOD,
 
 
 603			.idlest_reg_id = 1,
 604			.idlest_idle_bit = OMAP3430_ST_I2C1_SHIFT,
 605		},
 606	},
 
 
 607	.class		= &i2c_class,
 
 
 608};
 609
 610/* I2C2 */
 
 
 
 
 
 
 
 
 
 
 
 
 611static struct omap_hwmod omap3xxx_i2c2_hwmod = {
 612	.name		= "i2c2",
 613	.flags		= HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
 
 
 614	.main_clk	= "i2c2_fck",
 615	.prcm		= {
 616		.omap2 = {
 617			.module_offs = CORE_MOD,
 
 
 618			.idlest_reg_id = 1,
 619			.idlest_idle_bit = OMAP3430_ST_I2C2_SHIFT,
 620		},
 621	},
 
 
 622	.class		= &i2c_class,
 
 
 623};
 624
 625/* I2C3 */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 626static struct omap_hwmod omap3xxx_i2c3_hwmod = {
 627	.name		= "i2c3",
 628	.flags		= HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
 
 
 629	.main_clk	= "i2c3_fck",
 630	.prcm		= {
 631		.omap2 = {
 632			.module_offs = CORE_MOD,
 
 
 633			.idlest_reg_id = 1,
 634			.idlest_idle_bit = OMAP3430_ST_I2C3_SHIFT,
 635		},
 636	},
 
 
 637	.class		= &i2c_class,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 638};
 639
 640/*
 641 * 'gpio' class
 642 * general purpose io module
 643 */
 644
 645static struct omap_hwmod_class_sysconfig omap3xxx_gpio_sysc = {
 646	.rev_offs	= 0x0000,
 647	.sysc_offs	= 0x0010,
 648	.syss_offs	= 0x0014,
 649	.sysc_flags	= (SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
 650			   SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
 651			   SYSS_HAS_RESET_STATUS),
 652	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
 653	.sysc_fields    = &omap_hwmod_sysc_type1,
 654};
 655
 656static struct omap_hwmod_class omap3xxx_gpio_hwmod_class = {
 657	.name = "gpio",
 658	.sysc = &omap3xxx_gpio_sysc,
 
 
 
 
 
 
 
 659};
 660
 661/* gpio1 */
 662static struct omap_hwmod_opt_clk gpio1_opt_clks[] = {
 663	{ .role = "dbclk", .clk = "gpio1_dbck", },
 664};
 665
 
 
 
 
 666static struct omap_hwmod omap3xxx_gpio1_hwmod = {
 667	.name		= "gpio1",
 668	.flags		= HWMOD_CONTROL_OPT_CLKS_IN_RESET,
 
 669	.main_clk	= "gpio1_ick",
 670	.opt_clks	= gpio1_opt_clks,
 671	.opt_clks_cnt	= ARRAY_SIZE(gpio1_opt_clks),
 672	.prcm		= {
 673		.omap2 = {
 
 
 674			.module_offs = WKUP_MOD,
 675			.idlest_reg_id = 1,
 676			.idlest_idle_bit = OMAP3430_ST_GPIO1_SHIFT,
 677		},
 678	},
 
 
 679	.class		= &omap3xxx_gpio_hwmod_class,
 
 
 680};
 681
 682/* gpio2 */
 683static struct omap_hwmod_opt_clk gpio2_opt_clks[] = {
 684	{ .role = "dbclk", .clk = "gpio2_dbck", },
 685};
 686
 
 
 
 
 687static struct omap_hwmod omap3xxx_gpio2_hwmod = {
 688	.name		= "gpio2",
 689	.flags		= HWMOD_CONTROL_OPT_CLKS_IN_RESET,
 
 690	.main_clk	= "gpio2_ick",
 691	.opt_clks	= gpio2_opt_clks,
 692	.opt_clks_cnt	= ARRAY_SIZE(gpio2_opt_clks),
 693	.prcm		= {
 694		.omap2 = {
 
 
 695			.module_offs = OMAP3430_PER_MOD,
 696			.idlest_reg_id = 1,
 697			.idlest_idle_bit = OMAP3430_ST_GPIO2_SHIFT,
 698		},
 699	},
 
 
 700	.class		= &omap3xxx_gpio_hwmod_class,
 
 
 701};
 702
 703/* gpio3 */
 704static struct omap_hwmod_opt_clk gpio3_opt_clks[] = {
 705	{ .role = "dbclk", .clk = "gpio3_dbck", },
 706};
 707
 
 
 
 
 708static struct omap_hwmod omap3xxx_gpio3_hwmod = {
 709	.name		= "gpio3",
 710	.flags		= HWMOD_CONTROL_OPT_CLKS_IN_RESET,
 
 711	.main_clk	= "gpio3_ick",
 712	.opt_clks	= gpio3_opt_clks,
 713	.opt_clks_cnt	= ARRAY_SIZE(gpio3_opt_clks),
 714	.prcm		= {
 715		.omap2 = {
 
 
 716			.module_offs = OMAP3430_PER_MOD,
 717			.idlest_reg_id = 1,
 718			.idlest_idle_bit = OMAP3430_ST_GPIO3_SHIFT,
 719		},
 720	},
 
 
 721	.class		= &omap3xxx_gpio_hwmod_class,
 
 
 722};
 723
 724/* gpio4 */
 725static struct omap_hwmod_opt_clk gpio4_opt_clks[] = {
 726	{ .role = "dbclk", .clk = "gpio4_dbck", },
 727};
 728
 
 
 
 
 729static struct omap_hwmod omap3xxx_gpio4_hwmod = {
 730	.name		= "gpio4",
 731	.flags		= HWMOD_CONTROL_OPT_CLKS_IN_RESET,
 
 732	.main_clk	= "gpio4_ick",
 733	.opt_clks	= gpio4_opt_clks,
 734	.opt_clks_cnt	= ARRAY_SIZE(gpio4_opt_clks),
 735	.prcm		= {
 736		.omap2 = {
 
 
 737			.module_offs = OMAP3430_PER_MOD,
 738			.idlest_reg_id = 1,
 739			.idlest_idle_bit = OMAP3430_ST_GPIO4_SHIFT,
 740		},
 741	},
 
 
 742	.class		= &omap3xxx_gpio_hwmod_class,
 
 
 743};
 744
 745/* gpio5 */
 
 
 
 
 746
 747static struct omap_hwmod_opt_clk gpio5_opt_clks[] = {
 748	{ .role = "dbclk", .clk = "gpio5_dbck", },
 749};
 750
 
 
 
 
 751static struct omap_hwmod omap3xxx_gpio5_hwmod = {
 752	.name		= "gpio5",
 753	.flags		= HWMOD_CONTROL_OPT_CLKS_IN_RESET,
 
 754	.main_clk	= "gpio5_ick",
 755	.opt_clks	= gpio5_opt_clks,
 756	.opt_clks_cnt	= ARRAY_SIZE(gpio5_opt_clks),
 757	.prcm		= {
 758		.omap2 = {
 
 
 759			.module_offs = OMAP3430_PER_MOD,
 760			.idlest_reg_id = 1,
 761			.idlest_idle_bit = OMAP3430_ST_GPIO5_SHIFT,
 762		},
 763	},
 
 
 764	.class		= &omap3xxx_gpio_hwmod_class,
 
 
 765};
 766
 767/* gpio6 */
 
 
 
 
 768
 769static struct omap_hwmod_opt_clk gpio6_opt_clks[] = {
 770	{ .role = "dbclk", .clk = "gpio6_dbck", },
 771};
 772
 
 
 
 
 773static struct omap_hwmod omap3xxx_gpio6_hwmod = {
 774	.name		= "gpio6",
 775	.flags		= HWMOD_CONTROL_OPT_CLKS_IN_RESET,
 
 776	.main_clk	= "gpio6_ick",
 777	.opt_clks	= gpio6_opt_clks,
 778	.opt_clks_cnt	= ARRAY_SIZE(gpio6_opt_clks),
 779	.prcm		= {
 780		.omap2 = {
 
 
 781			.module_offs = OMAP3430_PER_MOD,
 782			.idlest_reg_id = 1,
 783			.idlest_idle_bit = OMAP3430_ST_GPIO6_SHIFT,
 784		},
 785	},
 
 
 786	.class		= &omap3xxx_gpio_hwmod_class,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 787};
 788
 789/*
 790 * 'mcbsp' class
 791 * multi channel buffered serial port controller
 792 */
 793
 794static struct omap_hwmod_class_sysconfig omap3xxx_mcbsp_sysc = {
 795	.rev_offs	= -ENODEV,
 796	.sysc_offs	= 0x008c,
 797	.sysc_flags	= (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_ENAWAKEUP |
 798			   SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
 799	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
 800	.sysc_fields	= &omap_hwmod_sysc_type1,
 
 801};
 802
 803static struct omap_hwmod_class omap3xxx_mcbsp_hwmod_class = {
 804	.name = "mcbsp",
 805	.sysc = &omap3xxx_mcbsp_sysc,
 
 806};
 807
 808/* McBSP functional clock mapping */
 809static struct omap_hwmod_opt_clk mcbsp15_opt_clks[] = {
 810	{ .role = "pad_fck", .clk = "mcbsp_clks" },
 811	{ .role = "prcm_fck", .clk = "core_96m_fck" },
 
 
 812};
 813
 814static struct omap_hwmod_opt_clk mcbsp234_opt_clks[] = {
 815	{ .role = "pad_fck", .clk = "mcbsp_clks" },
 816	{ .role = "prcm_fck", .clk = "per_96m_fck" },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 817};
 818
 819/* mcbsp1 */
 820static struct omap_hwmod omap3xxx_mcbsp1_hwmod = {
 821	.name		= "mcbsp1",
 822	.class		= &omap3xxx_mcbsp_hwmod_class,
 
 
 823	.main_clk	= "mcbsp1_fck",
 824	.prcm		= {
 825		.omap2 = {
 
 
 826			.module_offs = CORE_MOD,
 827			.idlest_reg_id = 1,
 828			.idlest_idle_bit = OMAP3430_ST_MCBSP1_SHIFT,
 829		},
 830	},
 831	.opt_clks	= mcbsp15_opt_clks,
 832	.opt_clks_cnt	= ARRAY_SIZE(mcbsp15_opt_clks),
 
 833};
 834
 835/* mcbsp2 */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 836static struct omap_hwmod omap3xxx_mcbsp2_hwmod = {
 837	.name		= "mcbsp2",
 838	.class		= &omap3xxx_mcbsp_hwmod_class,
 
 
 839	.main_clk	= "mcbsp2_fck",
 840	.prcm		= {
 841		.omap2 = {
 
 
 842			.module_offs = OMAP3430_PER_MOD,
 843			.idlest_reg_id = 1,
 844			.idlest_idle_bit = OMAP3430_ST_MCBSP2_SHIFT,
 845		},
 846	},
 847	.opt_clks	= mcbsp234_opt_clks,
 848	.opt_clks_cnt	= ARRAY_SIZE(mcbsp234_opt_clks),
 
 
 849};
 850
 851/* mcbsp3 */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 852static struct omap_hwmod omap3xxx_mcbsp3_hwmod = {
 853	.name		= "mcbsp3",
 854	.class		= &omap3xxx_mcbsp_hwmod_class,
 
 
 855	.main_clk	= "mcbsp3_fck",
 856	.prcm		= {
 857		.omap2 = {
 
 
 858			.module_offs = OMAP3430_PER_MOD,
 859			.idlest_reg_id = 1,
 860			.idlest_idle_bit = OMAP3430_ST_MCBSP3_SHIFT,
 861		},
 862	},
 863	.opt_clks	= mcbsp234_opt_clks,
 864	.opt_clks_cnt	= ARRAY_SIZE(mcbsp234_opt_clks),
 
 
 865};
 866
 867/* mcbsp4 */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 868static struct omap_hwmod omap3xxx_mcbsp4_hwmod = {
 869	.name		= "mcbsp4",
 870	.class		= &omap3xxx_mcbsp_hwmod_class,
 
 
 871	.main_clk	= "mcbsp4_fck",
 872	.prcm		= {
 873		.omap2 = {
 
 
 874			.module_offs = OMAP3430_PER_MOD,
 875			.idlest_reg_id = 1,
 876			.idlest_idle_bit = OMAP3430_ST_MCBSP4_SHIFT,
 877		},
 878	},
 879	.opt_clks	= mcbsp234_opt_clks,
 880	.opt_clks_cnt	= ARRAY_SIZE(mcbsp234_opt_clks),
 
 881};
 882
 883/* mcbsp5 */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 884static struct omap_hwmod omap3xxx_mcbsp5_hwmod = {
 885	.name		= "mcbsp5",
 886	.class		= &omap3xxx_mcbsp_hwmod_class,
 
 
 887	.main_clk	= "mcbsp5_fck",
 888	.prcm		= {
 889		.omap2 = {
 
 
 890			.module_offs = CORE_MOD,
 891			.idlest_reg_id = 1,
 892			.idlest_idle_bit = OMAP3430_ST_MCBSP5_SHIFT,
 893		},
 894	},
 895	.opt_clks	= mcbsp15_opt_clks,
 896	.opt_clks_cnt	= ARRAY_SIZE(mcbsp15_opt_clks),
 
 897};
 898
 899/* 'mcbsp sidetone' class */
 
 900static struct omap_hwmod_class_sysconfig omap3xxx_mcbsp_sidetone_sysc = {
 901	.rev_offs	= -ENODEV,
 902	.sysc_offs	= 0x0010,
 903	.sysc_flags	= SYSC_HAS_AUTOIDLE,
 904	.sysc_fields	= &omap_hwmod_sysc_type1,
 905};
 906
 907static struct omap_hwmod_class omap3xxx_mcbsp_sidetone_hwmod_class = {
 908	.name = "mcbsp_sidetone",
 909	.sysc = &omap3xxx_mcbsp_sidetone_sysc,
 910};
 911
 912/* mcbsp2_sidetone */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 913static struct omap_hwmod omap3xxx_mcbsp2_sidetone_hwmod = {
 914	.name		= "mcbsp2_sidetone",
 915	.class		= &omap3xxx_mcbsp_sidetone_hwmod_class,
 916	.main_clk	= "mcbsp2_ick",
 917	.flags		= HWMOD_NO_IDLEST,
 
 
 
 
 
 
 
 
 
 
 
 
 918};
 919
 920/* mcbsp3_sidetone */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 921static struct omap_hwmod omap3xxx_mcbsp3_sidetone_hwmod = {
 922	.name		= "mcbsp3_sidetone",
 923	.class		= &omap3xxx_mcbsp_sidetone_hwmod_class,
 924	.main_clk	= "mcbsp3_ick",
 925	.flags		= HWMOD_NO_IDLEST,
 
 
 
 
 
 
 
 
 
 
 
 
 926};
 927
 
 928/* SR common */
 
 
 
 
 929static struct omap_hwmod_class_sysconfig omap34xx_sr_sysc = {
 930	.rev_offs	= -ENODEV,
 931	.sysc_offs	= 0x24,
 932	.sysc_flags	= (SYSC_HAS_CLOCKACTIVITY | SYSC_NO_CACHE),
 
 933	.sysc_fields	= &omap34xx_sr_sysc_fields,
 934};
 935
 936static struct omap_hwmod_class omap34xx_smartreflex_hwmod_class = {
 937	.name = "smartreflex",
 938	.sysc = &omap34xx_sr_sysc,
 
 
 
 
 
 
 939};
 940
 941static struct omap_hwmod_class_sysconfig omap36xx_sr_sysc = {
 942	.rev_offs	= -ENODEV,
 943	.sysc_offs	= 0x38,
 944	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
 945	.sysc_flags	= (SYSC_HAS_SIDLEMODE | SYSC_HAS_ENAWAKEUP |
 946			SYSC_NO_CACHE),
 947	.sysc_fields	= &omap36xx_sr_sysc_fields,
 948};
 949
 950static struct omap_hwmod_class omap36xx_smartreflex_hwmod_class = {
 951	.name = "smartreflex",
 952	.sysc = &omap36xx_sr_sysc,
 
 953};
 954
 955/* SR1 */
 956static struct omap_smartreflex_dev_attr sr1_dev_attr = {
 957	.sensor_voltdm_name   = "mpu_iva",
 958};
 959
 960
 961static struct omap_hwmod omap34xx_sr1_hwmod = {
 962	.name		= "smartreflex_mpu_iva",
 963	.class		= &omap34xx_smartreflex_hwmod_class,
 964	.main_clk	= "sr1_fck",
 
 965	.prcm		= {
 966		.omap2 = {
 
 
 967			.module_offs = WKUP_MOD,
 968			.idlest_reg_id = 1,
 969			.idlest_idle_bit = OMAP3430_EN_SR1_SHIFT,
 970		},
 971	},
 972	.dev_attr	= &sr1_dev_attr,
 
 
 
 
 973	.flags		= HWMOD_SET_DEFAULT_CLOCKACT,
 974};
 975
 976static struct omap_hwmod omap36xx_sr1_hwmod = {
 977	.name		= "smartreflex_mpu_iva",
 978	.class		= &omap36xx_smartreflex_hwmod_class,
 979	.main_clk	= "sr1_fck",
 
 980	.prcm		= {
 981		.omap2 = {
 
 
 982			.module_offs = WKUP_MOD,
 983			.idlest_reg_id = 1,
 984			.idlest_idle_bit = OMAP3430_EN_SR1_SHIFT,
 985		},
 986	},
 987	.dev_attr	= &sr1_dev_attr,
 
 
 988};
 989
 990/* SR2 */
 991static struct omap_smartreflex_dev_attr sr2_dev_attr = {
 992	.sensor_voltdm_name	= "core",
 993};
 994
 995
 996static struct omap_hwmod omap34xx_sr2_hwmod = {
 997	.name		= "smartreflex_core",
 998	.class		= &omap34xx_smartreflex_hwmod_class,
 999	.main_clk	= "sr2_fck",
 
1000	.prcm		= {
1001		.omap2 = {
 
 
1002			.module_offs = WKUP_MOD,
1003			.idlest_reg_id = 1,
1004			.idlest_idle_bit = OMAP3430_EN_SR2_SHIFT,
1005		},
1006	},
1007	.dev_attr	= &sr2_dev_attr,
 
 
 
 
1008	.flags		= HWMOD_SET_DEFAULT_CLOCKACT,
1009};
1010
1011static struct omap_hwmod omap36xx_sr2_hwmod = {
1012	.name		= "smartreflex_core",
1013	.class		= &omap36xx_smartreflex_hwmod_class,
1014	.main_clk	= "sr2_fck",
 
1015	.prcm		= {
1016		.omap2 = {
 
 
1017			.module_offs = WKUP_MOD,
1018			.idlest_reg_id = 1,
1019			.idlest_idle_bit = OMAP3430_EN_SR2_SHIFT,
1020		},
1021	},
1022	.dev_attr	= &sr2_dev_attr,
 
 
1023};
1024
1025/*
1026 * 'mailbox' class
1027 * mailbox module allowing communication between the on-chip processors
1028 * using a queued mailbox-interrupt mechanism.
1029 */
1030
1031static struct omap_hwmod_class_sysconfig omap3xxx_mailbox_sysc = {
1032	.rev_offs	= 0x000,
1033	.sysc_offs	= 0x010,
1034	.syss_offs	= 0x014,
1035	.sysc_flags	= (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
1036				SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
1037	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1038	.sysc_fields	= &omap_hwmod_sysc_type1,
1039};
1040
1041static struct omap_hwmod_class omap3xxx_mailbox_hwmod_class = {
1042	.name = "mailbox",
1043	.sysc = &omap3xxx_mailbox_sysc,
1044};
1045
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1046static struct omap_hwmod omap3xxx_mailbox_hwmod = {
1047	.name		= "mailbox",
1048	.class		= &omap3xxx_mailbox_hwmod_class,
 
1049	.main_clk	= "mailboxes_ick",
1050	.prcm		= {
1051		.omap2 = {
 
 
1052			.module_offs = CORE_MOD,
1053			.idlest_reg_id = 1,
1054			.idlest_idle_bit = OMAP3430_ST_MAILBOXES_SHIFT,
1055		},
1056	},
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1057};
1058
1059/*
1060 * 'mcspi' class
1061 * multichannel serial port interface (mcspi) / master/slave synchronous serial
1062 * bus
1063 */
1064
1065static struct omap_hwmod_class_sysconfig omap34xx_mcspi_sysc = {
1066	.rev_offs	= 0x0000,
1067	.sysc_offs	= 0x0010,
1068	.syss_offs	= 0x0014,
1069	.sysc_flags	= (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
1070				SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
1071				SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
1072	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1073	.sysc_fields    = &omap_hwmod_sysc_type1,
1074};
1075
1076static struct omap_hwmod_class omap34xx_mcspi_class = {
1077	.name = "mcspi",
1078	.sysc = &omap34xx_mcspi_sysc,
 
1079};
1080
1081/* mcspi1 */
 
 
 
 
 
 
 
 
1082static struct omap_hwmod omap34xx_mcspi1 = {
1083	.name		= "mcspi1",
 
 
1084	.main_clk	= "mcspi1_fck",
1085	.prcm		= {
1086		.omap2 = {
1087			.module_offs = CORE_MOD,
 
 
1088			.idlest_reg_id = 1,
1089			.idlest_idle_bit = OMAP3430_ST_MCSPI1_SHIFT,
1090		},
1091	},
 
 
1092	.class		= &omap34xx_mcspi_class,
 
 
1093};
1094
1095/* mcspi2 */
 
 
 
 
 
 
 
 
1096static struct omap_hwmod omap34xx_mcspi2 = {
1097	.name		= "mcspi2",
 
 
1098	.main_clk	= "mcspi2_fck",
1099	.prcm		= {
1100		.omap2 = {
1101			.module_offs = CORE_MOD,
 
 
1102			.idlest_reg_id = 1,
1103			.idlest_idle_bit = OMAP3430_ST_MCSPI2_SHIFT,
1104		},
1105	},
 
 
1106	.class		= &omap34xx_mcspi_class,
 
 
1107};
1108
1109/* mcspi3 */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1110static struct omap_hwmod omap34xx_mcspi3 = {
1111	.name		= "mcspi3",
 
 
1112	.main_clk	= "mcspi3_fck",
1113	.prcm		= {
1114		.omap2 = {
1115			.module_offs = CORE_MOD,
 
 
1116			.idlest_reg_id = 1,
1117			.idlest_idle_bit = OMAP3430_ST_MCSPI3_SHIFT,
1118		},
1119	},
 
 
1120	.class		= &omap34xx_mcspi_class,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1121};
1122
1123/* mcspi4 */
1124static struct omap_hwmod omap34xx_mcspi4 = {
1125	.name		= "mcspi4",
 
 
1126	.main_clk	= "mcspi4_fck",
1127	.prcm		= {
1128		.omap2 = {
1129			.module_offs = CORE_MOD,
 
 
1130			.idlest_reg_id = 1,
1131			.idlest_idle_bit = OMAP3430_ST_MCSPI4_SHIFT,
1132		},
1133	},
 
 
1134	.class		= &omap34xx_mcspi_class,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1135};
1136
1137/* MMC/SD/SDIO common */
 
1138static struct omap_hwmod_class_sysconfig omap34xx_mmc_sysc = {
1139	.rev_offs	= 0x1fc,
1140	.sysc_offs	= 0x10,
1141	.syss_offs	= 0x14,
1142	.sysc_flags	= (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
1143			   SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
1144			   SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
1145	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1146	.sysc_fields    = &omap_hwmod_sysc_type1,
1147};
1148
1149static struct omap_hwmod_class omap34xx_mmc_class = {
1150	.name = "mmc",
1151	.sysc = &omap34xx_mmc_sysc,
1152};
1153
1154/* MMC/SD/SDIO1 */
1155
 
 
 
 
1156
 
 
 
 
 
1157
1158static struct omap_hwmod_opt_clk omap34xx_mmc1_opt_clks[] = {
1159	{ .role = "dbck", .clk = "omap_32k_fck", },
1160};
1161
1162static struct omap_hsmmc_dev_attr mmc1_dev_attr = {
1163	.flags = OMAP_HSMMC_SUPPORTS_DUAL_VOLT,
1164};
1165
1166/* See 35xx errata 2.1.1.128 in SPRZ278F */
1167static struct omap_hsmmc_dev_attr mmc1_pre_es3_dev_attr = {
1168	.flags = (OMAP_HSMMC_SUPPORTS_DUAL_VOLT |
1169		  OMAP_HSMMC_BROKEN_MULTIBLOCK_READ),
1170};
1171
1172static struct omap_hwmod omap3xxx_pre_es3_mmc1_hwmod = {
1173	.name		= "mmc1",
1174	.opt_clks	= omap34xx_mmc1_opt_clks,
1175	.opt_clks_cnt	= ARRAY_SIZE(omap34xx_mmc1_opt_clks),
1176	.main_clk	= "mmchs1_fck",
1177	.prcm		= {
1178		.omap2 = {
1179			.module_offs = CORE_MOD,
1180			.idlest_reg_id = 1,
1181			.idlest_idle_bit = OMAP3430_ST_MMC1_SHIFT,
1182		},
1183	},
1184	.dev_attr	= &mmc1_pre_es3_dev_attr,
1185	.class		= &omap34xx_mmc_class,
1186};
1187
1188static struct omap_hwmod omap3xxx_es3plus_mmc1_hwmod = {
1189	.name		= "mmc1",
 
 
1190	.opt_clks	= omap34xx_mmc1_opt_clks,
1191	.opt_clks_cnt	= ARRAY_SIZE(omap34xx_mmc1_opt_clks),
1192	.main_clk	= "mmchs1_fck",
1193	.prcm		= {
1194		.omap2 = {
1195			.module_offs = CORE_MOD,
 
 
1196			.idlest_reg_id = 1,
1197			.idlest_idle_bit = OMAP3430_ST_MMC1_SHIFT,
1198		},
1199	},
1200	.dev_attr	= &mmc1_dev_attr,
 
 
1201	.class		= &omap34xx_mmc_class,
 
1202};
1203
1204/* MMC/SD/SDIO2 */
1205
 
 
 
 
1206
 
 
 
 
 
1207
1208static struct omap_hwmod_opt_clk omap34xx_mmc2_opt_clks[] = {
1209	{ .role = "dbck", .clk = "omap_32k_fck", },
1210};
1211
1212/* See 35xx errata 2.1.1.128 in SPRZ278F */
1213static struct omap_hsmmc_dev_attr mmc2_pre_es3_dev_attr = {
1214	.flags = OMAP_HSMMC_BROKEN_MULTIBLOCK_READ,
1215};
1216
1217static struct omap_hwmod omap3xxx_pre_es3_mmc2_hwmod = {
1218	.name		= "mmc2",
1219	.opt_clks	= omap34xx_mmc2_opt_clks,
1220	.opt_clks_cnt	= ARRAY_SIZE(omap34xx_mmc2_opt_clks),
1221	.main_clk	= "mmchs2_fck",
1222	.prcm		= {
1223		.omap2 = {
1224			.module_offs = CORE_MOD,
1225			.idlest_reg_id = 1,
1226			.idlest_idle_bit = OMAP3430_ST_MMC2_SHIFT,
1227		},
1228	},
1229	.dev_attr	= &mmc2_pre_es3_dev_attr,
1230	.class		= &omap34xx_mmc_class,
1231};
1232
1233static struct omap_hwmod omap3xxx_es3plus_mmc2_hwmod = {
1234	.name		= "mmc2",
 
 
1235	.opt_clks	= omap34xx_mmc2_opt_clks,
1236	.opt_clks_cnt	= ARRAY_SIZE(omap34xx_mmc2_opt_clks),
1237	.main_clk	= "mmchs2_fck",
1238	.prcm		= {
1239		.omap2 = {
1240			.module_offs = CORE_MOD,
 
 
1241			.idlest_reg_id = 1,
1242			.idlest_idle_bit = OMAP3430_ST_MMC2_SHIFT,
1243		},
1244	},
 
 
1245	.class		= &omap34xx_mmc_class,
 
1246};
1247
1248/* MMC/SD/SDIO3 */
1249
 
 
 
 
1250
 
 
 
 
 
1251
1252static struct omap_hwmod_opt_clk omap34xx_mmc3_opt_clks[] = {
1253	{ .role = "dbck", .clk = "omap_32k_fck", },
1254};
1255
 
 
 
 
1256static struct omap_hwmod omap3xxx_mmc3_hwmod = {
1257	.name		= "mmc3",
 
 
1258	.opt_clks	= omap34xx_mmc3_opt_clks,
1259	.opt_clks_cnt	= ARRAY_SIZE(omap34xx_mmc3_opt_clks),
1260	.main_clk	= "mmchs3_fck",
1261	.prcm		= {
1262		.omap2 = {
1263			.module_offs = CORE_MOD,
 
1264			.idlest_reg_id = 1,
1265			.idlest_idle_bit = OMAP3430_ST_MMC3_SHIFT,
1266		},
1267	},
 
 
1268	.class		= &omap34xx_mmc_class,
 
1269};
1270
1271/*
1272 * 'usb_host_hs' class
1273 * high-speed multi-port usb host controller
1274 */
1275
1276static struct omap_hwmod_class_sysconfig omap3xxx_usb_host_hs_sysc = {
1277	.rev_offs	= 0x0000,
1278	.sysc_offs	= 0x0010,
1279	.syss_offs	= 0x0014,
1280	.sysc_flags	= (SYSC_HAS_MIDLEMODE | SYSC_HAS_CLOCKACTIVITY |
1281			   SYSC_HAS_SIDLEMODE | SYSC_HAS_ENAWAKEUP |
1282			   SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
1283			   SYSS_HAS_RESET_STATUS),
1284	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1285			   MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
1286	.sysc_fields	= &omap_hwmod_sysc_type1,
1287};
1288
1289static struct omap_hwmod_class omap3xxx_usb_host_hs_hwmod_class = {
1290	.name = "usb_host_hs",
1291	.sysc = &omap3xxx_usb_host_hs_sysc,
1292};
1293
1294
1295static struct omap_hwmod omap3xxx_usb_host_hs_hwmod = {
1296	.name		= "usb_host_hs",
1297	.class		= &omap3xxx_usb_host_hs_hwmod_class,
1298	.clkdm_name	= "usbhost_clkdm",
1299	.main_clk	= "usbhost_48m_fck",
1300	.prcm = {
1301		.omap2 = {
1302			.module_offs = OMAP3430ES2_USBHOST_MOD,
1303			.idlest_reg_id = 1,
1304			.idlest_idle_bit = OMAP3430ES2_ST_USBHOST_IDLE_SHIFT,
1305		},
1306	},
1307
1308	/*
1309	 * Errata: USBHOST Configured In Smart-Idle Can Lead To a Deadlock
1310	 * id: i660
1311	 *
1312	 * Description:
1313	 * In the following configuration :
1314	 * - USBHOST module is set to smart-idle mode
1315	 * - PRCM asserts idle_req to the USBHOST module ( This typically
1316	 *   happens when the system is going to a low power mode : all ports
1317	 *   have been suspended, the master part of the USBHOST module has
1318	 *   entered the standby state, and SW has cut the functional clocks)
1319	 * - an USBHOST interrupt occurs before the module is able to answer
1320	 *   idle_ack, typically a remote wakeup IRQ.
1321	 * Then the USB HOST module will enter a deadlock situation where it
1322	 * is no more accessible nor functional.
1323	 *
1324	 * Workaround:
1325	 * Don't use smart idle; use only force idle, hence HWMOD_SWSUP_SIDLE
1326	 */
1327
1328	/*
1329	 * Errata: USB host EHCI may stall when entering smart-standby mode
1330	 * Id: i571
1331	 *
1332	 * Description:
1333	 * When the USBHOST module is set to smart-standby mode, and when it is
1334	 * ready to enter the standby state (i.e. all ports are suspended and
1335	 * all attached devices are in suspend mode), then it can wrongly assert
1336	 * the Mstandby signal too early while there are still some residual OCP
1337	 * transactions ongoing. If this condition occurs, the internal state
1338	 * machine may go to an undefined state and the USB link may be stuck
1339	 * upon the next resume.
1340	 *
1341	 * Workaround:
1342	 * Don't use smart standby; use only force standby,
1343	 * hence HWMOD_SWSUP_MSTANDBY
1344	 */
1345
1346	.flags		= HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY,
1347};
1348
1349/*
1350 * 'usb_tll_hs' class
1351 * usb_tll_hs module is the adapter on the usb_host_hs ports
1352 */
1353static struct omap_hwmod_class_sysconfig omap3xxx_usb_tll_hs_sysc = {
1354	.rev_offs	= 0x0000,
1355	.sysc_offs	= 0x0010,
1356	.syss_offs	= 0x0014,
1357	.sysc_flags	= (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
1358			   SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
1359			   SYSC_HAS_AUTOIDLE),
1360	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1361	.sysc_fields	= &omap_hwmod_sysc_type1,
1362};
1363
1364static struct omap_hwmod_class omap3xxx_usb_tll_hs_hwmod_class = {
1365	.name = "usb_tll_hs",
1366	.sysc = &omap3xxx_usb_tll_hs_sysc,
1367};
1368
1369
1370static struct omap_hwmod omap3xxx_usb_tll_hs_hwmod = {
1371	.name		= "usb_tll_hs",
1372	.class		= &omap3xxx_usb_tll_hs_hwmod_class,
1373	.clkdm_name	= "core_l4_clkdm",
1374	.main_clk	= "usbtll_fck",
1375	.prcm = {
1376		.omap2 = {
1377			.module_offs = CORE_MOD,
1378			.idlest_reg_id = 3,
1379			.idlest_idle_bit = OMAP3430ES2_ST_USBTLL_SHIFT,
1380		},
1381	},
1382};
1383
1384static struct omap_hwmod omap3xxx_hdq1w_hwmod = {
1385	.name		= "hdq1w",
1386	.main_clk	= "hdq_fck",
1387	.prcm		= {
1388		.omap2 = {
1389			.module_offs = CORE_MOD,
1390			.idlest_reg_id = 1,
1391			.idlest_idle_bit = OMAP3430_ST_HDQ_SHIFT,
1392		},
1393	},
1394	.class		= &omap2_hdq1w_class,
1395};
1396
1397/* SAD2D */
1398static struct omap_hwmod_rst_info omap3xxx_sad2d_resets[] = {
1399	{ .name = "rst_modem_pwron_sw", .rst_shift = 0 },
1400	{ .name = "rst_modem_sw", .rst_shift = 1 },
1401};
1402
1403static struct omap_hwmod_class omap3xxx_sad2d_class = {
1404	.name			= "sad2d",
1405};
1406
1407static struct omap_hwmod omap3xxx_sad2d_hwmod = {
1408	.name		= "sad2d",
1409	.rst_lines	= omap3xxx_sad2d_resets,
1410	.rst_lines_cnt	= ARRAY_SIZE(omap3xxx_sad2d_resets),
1411	.main_clk	= "sad2d_ick",
1412	.prcm		= {
1413		.omap2 = {
1414			.module_offs = CORE_MOD,
1415			.idlest_reg_id = 1,
1416			.idlest_idle_bit = OMAP3430_ST_SAD2D_SHIFT,
1417		},
1418	},
1419	.class		= &omap3xxx_sad2d_class,
1420};
1421
1422/*
1423 * 'gpmc' class
1424 * general purpose memory controller
1425 */
1426
1427static struct omap_hwmod_class_sysconfig omap3xxx_gpmc_sysc = {
1428	.rev_offs	= 0x0000,
1429	.sysc_offs	= 0x0010,
1430	.syss_offs	= 0x0014,
1431	.sysc_flags	= (SYSC_HAS_AUTOIDLE | SYSC_HAS_SIDLEMODE |
1432			   SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
1433	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1434	.sysc_fields	= &omap_hwmod_sysc_type1,
1435};
1436
1437static struct omap_hwmod_class omap3xxx_gpmc_hwmod_class = {
1438	.name	= "gpmc",
1439	.sysc	= &omap3xxx_gpmc_sysc,
1440};
1441
1442static struct omap_hwmod omap3xxx_gpmc_hwmod = {
1443	.name		= "gpmc",
1444	.class		= &omap3xxx_gpmc_hwmod_class,
1445	.clkdm_name	= "core_l3_clkdm",
1446	.main_clk	= "gpmc_fck",
1447	/* Skip reset for CONFIG_OMAP_GPMC_DEBUG for bootloader timings */
1448	.flags		= HWMOD_NO_IDLEST | DEBUG_OMAP_GPMC_HWMOD_FLAGS,
1449};
1450
1451/*
1452 * interfaces
1453 */
1454
1455/* L3 -> L4_CORE interface */
1456static struct omap_hwmod_ocp_if omap3xxx_l3_main__l4_core = {
1457	.master	= &omap3xxx_l3_main_hwmod,
1458	.slave	= &omap3xxx_l4_core_hwmod,
1459	.user	= OCP_USER_MPU | OCP_USER_SDMA,
1460};
1461
1462/* L3 -> L4_PER interface */
1463static struct omap_hwmod_ocp_if omap3xxx_l3_main__l4_per = {
1464	.master = &omap3xxx_l3_main_hwmod,
1465	.slave	= &omap3xxx_l4_per_hwmod,
1466	.user	= OCP_USER_MPU | OCP_USER_SDMA,
1467};
1468
1469
1470/* MPU -> L3 interface */
1471static struct omap_hwmod_ocp_if omap3xxx_mpu__l3_main = {
1472	.master   = &omap3xxx_mpu_hwmod,
1473	.slave    = &omap3xxx_l3_main_hwmod,
1474	.user	= OCP_USER_MPU,
1475};
1476
1477
1478/* l3 -> debugss */
1479static struct omap_hwmod_ocp_if omap3xxx_l3_main__l4_debugss = {
1480	.master		= &omap3xxx_l3_main_hwmod,
1481	.slave		= &omap3xxx_debugss_hwmod,
1482	.user		= OCP_USER_MPU,
1483};
1484
1485/* DSS -> l3 */
1486static struct omap_hwmod_ocp_if omap3430es1_dss__l3 = {
1487	.master		= &omap3430es1_dss_core_hwmod,
1488	.slave		= &omap3xxx_l3_main_hwmod,
1489	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1490};
1491
1492static struct omap_hwmod_ocp_if omap3xxx_dss__l3 = {
1493	.master		= &omap3xxx_dss_core_hwmod,
1494	.slave		= &omap3xxx_l3_main_hwmod,
1495	.fw = {
1496		.omap2 = {
1497			.l3_perm_bit  = OMAP3_L3_CORE_FW_INIT_ID_DSS,
1498			.flags	= OMAP_FIREWALL_L3,
1499		},
1500	},
1501	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1502};
1503
1504/* l3_core -> sad2d interface */
1505static struct omap_hwmod_ocp_if omap3xxx_sad2d__l3 = {
1506	.master		= &omap3xxx_sad2d_hwmod,
1507	.slave		= &omap3xxx_l3_main_hwmod,
1508	.clk		= "core_l3_ick",
1509	.user		= OCP_USER_MPU,
1510};
1511
1512/* L4_CORE -> L4_WKUP interface */
1513static struct omap_hwmod_ocp_if omap3xxx_l4_core__l4_wkup = {
1514	.master	= &omap3xxx_l4_core_hwmod,
1515	.slave	= &omap3xxx_l4_wkup_hwmod,
1516	.user	= OCP_USER_MPU | OCP_USER_SDMA,
1517};
1518
1519/* L4 CORE -> MMC1 interface */
1520static struct omap_hwmod_ocp_if omap3xxx_l4_core__pre_es3_mmc1 = {
1521	.master		= &omap3xxx_l4_core_hwmod,
1522	.slave		= &omap3xxx_pre_es3_mmc1_hwmod,
1523	.clk		= "mmchs1_ick",
1524	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1525	.flags		= OMAP_FIREWALL_L4,
1526};
1527
1528static struct omap_hwmod_ocp_if omap3xxx_l4_core__es3plus_mmc1 = {
1529	.master		= &omap3xxx_l4_core_hwmod,
1530	.slave		= &omap3xxx_es3plus_mmc1_hwmod,
1531	.clk		= "mmchs1_ick",
1532	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1533	.flags		= OMAP_FIREWALL_L4,
1534};
1535
1536/* L4 CORE -> MMC2 interface */
1537static struct omap_hwmod_ocp_if omap3xxx_l4_core__pre_es3_mmc2 = {
1538	.master		= &omap3xxx_l4_core_hwmod,
1539	.slave		= &omap3xxx_pre_es3_mmc2_hwmod,
1540	.clk		= "mmchs2_ick",
1541	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1542	.flags		= OMAP_FIREWALL_L4,
1543};
1544
1545static struct omap_hwmod_ocp_if omap3xxx_l4_core__es3plus_mmc2 = {
1546	.master		= &omap3xxx_l4_core_hwmod,
1547	.slave		= &omap3xxx_es3plus_mmc2_hwmod,
1548	.clk		= "mmchs2_ick",
1549	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1550	.flags		= OMAP_FIREWALL_L4,
1551};
1552
1553/* L4 CORE -> MMC3 interface */
1554
1555static struct omap_hwmod_ocp_if omap3xxx_l4_core__mmc3 = {
1556	.master		= &omap3xxx_l4_core_hwmod,
1557	.slave		= &omap3xxx_mmc3_hwmod,
1558	.clk		= "mmchs3_ick",
1559	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1560	.flags		= OMAP_FIREWALL_L4,
1561};
1562
1563/* L4 CORE -> UART1 interface */
1564
1565static struct omap_hwmod_ocp_if omap3_l4_core__uart1 = {
1566	.master		= &omap3xxx_l4_core_hwmod,
1567	.slave		= &omap3xxx_uart1_hwmod,
1568	.clk		= "uart1_ick",
1569	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1570};
1571
1572/* L4 CORE -> UART2 interface */
1573
1574static struct omap_hwmod_ocp_if omap3_l4_core__uart2 = {
1575	.master		= &omap3xxx_l4_core_hwmod,
1576	.slave		= &omap3xxx_uart2_hwmod,
1577	.clk		= "uart2_ick",
1578	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1579};
1580
1581/* L4 PER -> UART3 interface */
1582
1583static struct omap_hwmod_ocp_if omap3_l4_per__uart3 = {
1584	.master		= &omap3xxx_l4_per_hwmod,
1585	.slave		= &omap3xxx_uart3_hwmod,
1586	.clk		= "uart3_ick",
1587	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1588};
1589
1590/* L4 PER -> UART4 interface */
1591
1592static struct omap_hwmod_ocp_if omap36xx_l4_per__uart4 = {
1593	.master		= &omap3xxx_l4_per_hwmod,
1594	.slave		= &omap36xx_uart4_hwmod,
1595	.clk		= "uart4_ick",
1596	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1597};
1598
1599/* AM35xx: L4 CORE -> UART4 interface */
1600
1601static struct omap_hwmod_ocp_if am35xx_l4_core__uart4 = {
1602	.master		= &omap3xxx_l4_core_hwmod,
1603	.slave		= &am35xx_uart4_hwmod,
1604	.clk		= "uart4_ick",
1605	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1606};
1607
1608/* L4 CORE -> I2C1 interface */
1609static struct omap_hwmod_ocp_if omap3_l4_core__i2c1 = {
1610	.master		= &omap3xxx_l4_core_hwmod,
1611	.slave		= &omap3xxx_i2c1_hwmod,
1612	.clk		= "i2c1_ick",
1613	.fw = {
1614		.omap2 = {
1615			.l4_fw_region  = OMAP3_L4_CORE_FW_I2C1_REGION,
1616			.l4_prot_group = 7,
1617			.flags	= OMAP_FIREWALL_L4,
1618		},
1619	},
1620	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1621};
1622
1623/* L4 CORE -> I2C2 interface */
1624static struct omap_hwmod_ocp_if omap3_l4_core__i2c2 = {
1625	.master		= &omap3xxx_l4_core_hwmod,
1626	.slave		= &omap3xxx_i2c2_hwmod,
1627	.clk		= "i2c2_ick",
1628	.fw = {
1629		.omap2 = {
1630			.l4_fw_region  = OMAP3_L4_CORE_FW_I2C2_REGION,
1631			.l4_prot_group = 7,
1632			.flags = OMAP_FIREWALL_L4,
1633		},
1634	},
1635	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1636};
1637
1638/* L4 CORE -> I2C3 interface */
1639
1640static struct omap_hwmod_ocp_if omap3_l4_core__i2c3 = {
1641	.master		= &omap3xxx_l4_core_hwmod,
1642	.slave		= &omap3xxx_i2c3_hwmod,
1643	.clk		= "i2c3_ick",
1644	.fw = {
1645		.omap2 = {
1646			.l4_fw_region  = OMAP3_L4_CORE_FW_I2C3_REGION,
1647			.l4_prot_group = 7,
1648			.flags = OMAP_FIREWALL_L4,
1649		},
1650	},
1651	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1652};
1653
1654/* L4 CORE -> SR1 interface */
1655static struct omap_hwmod_ocp_if omap34xx_l4_core__sr1 = {
1656	.master		= &omap3xxx_l4_core_hwmod,
1657	.slave		= &omap34xx_sr1_hwmod,
1658	.clk		= "sr_l4_ick",
1659	.user		= OCP_USER_MPU,
1660};
1661
1662static struct omap_hwmod_ocp_if omap36xx_l4_core__sr1 = {
1663	.master		= &omap3xxx_l4_core_hwmod,
1664	.slave		= &omap36xx_sr1_hwmod,
1665	.clk		= "sr_l4_ick",
1666	.user		= OCP_USER_MPU,
1667};
1668
1669/* L4 CORE -> SR2 interface */
1670
1671static struct omap_hwmod_ocp_if omap34xx_l4_core__sr2 = {
1672	.master		= &omap3xxx_l4_core_hwmod,
1673	.slave		= &omap34xx_sr2_hwmod,
1674	.clk		= "sr_l4_ick",
1675	.user		= OCP_USER_MPU,
1676};
1677
1678static struct omap_hwmod_ocp_if omap36xx_l4_core__sr2 = {
1679	.master		= &omap3xxx_l4_core_hwmod,
1680	.slave		= &omap36xx_sr2_hwmod,
1681	.clk		= "sr_l4_ick",
1682	.user		= OCP_USER_MPU,
1683};
1684
1685/* L4_WKUP -> L4_SEC interface */
1686static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__l4_sec = {
1687	.master = &omap3xxx_l4_wkup_hwmod,
1688	.slave	= &omap3xxx_l4_sec_hwmod,
1689	.user	= OCP_USER_MPU | OCP_USER_SDMA,
1690};
1691
1692/* IVA2 <- L3 interface */
1693static struct omap_hwmod_ocp_if omap3xxx_l3__iva = {
1694	.master		= &omap3xxx_l3_main_hwmod,
1695	.slave		= &omap3xxx_iva_hwmod,
1696	.clk		= "core_l3_ick",
1697	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1698};
1699
1700/* l4_per -> timer3 */
1701static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer3 = {
1702	.master		= &omap3xxx_l4_per_hwmod,
1703	.slave		= &omap3xxx_timer3_hwmod,
1704	.clk		= "gpt3_ick",
1705	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1706};
1707
1708
1709/* l4_per -> timer4 */
1710static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer4 = {
1711	.master		= &omap3xxx_l4_per_hwmod,
1712	.slave		= &omap3xxx_timer4_hwmod,
1713	.clk		= "gpt4_ick",
1714	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1715};
1716
1717
1718/* l4_per -> timer5 */
1719static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer5 = {
1720	.master		= &omap3xxx_l4_per_hwmod,
1721	.slave		= &omap3xxx_timer5_hwmod,
1722	.clk		= "gpt5_ick",
1723	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1724};
1725
1726
1727/* l4_per -> timer6 */
1728static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer6 = {
1729	.master		= &omap3xxx_l4_per_hwmod,
1730	.slave		= &omap3xxx_timer6_hwmod,
1731	.clk		= "gpt6_ick",
1732	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1733};
1734
1735
1736/* l4_per -> timer7 */
1737static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer7 = {
1738	.master		= &omap3xxx_l4_per_hwmod,
1739	.slave		= &omap3xxx_timer7_hwmod,
1740	.clk		= "gpt7_ick",
1741	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1742};
1743
1744
1745/* l4_per -> timer8 */
1746static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer8 = {
1747	.master		= &omap3xxx_l4_per_hwmod,
1748	.slave		= &omap3xxx_timer8_hwmod,
1749	.clk		= "gpt8_ick",
1750	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1751};
1752
1753
1754/* l4_per -> timer9 */
1755static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer9 = {
1756	.master		= &omap3xxx_l4_per_hwmod,
1757	.slave		= &omap3xxx_timer9_hwmod,
1758	.clk		= "gpt9_ick",
1759	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1760};
1761
1762/* l4_core -> timer10 */
1763static struct omap_hwmod_ocp_if omap3xxx_l4_core__timer10 = {
1764	.master		= &omap3xxx_l4_core_hwmod,
1765	.slave		= &omap3xxx_timer10_hwmod,
1766	.clk		= "gpt10_ick",
1767	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1768};
1769
1770/* l4_core -> timer11 */
1771static struct omap_hwmod_ocp_if omap3xxx_l4_core__timer11 = {
1772	.master		= &omap3xxx_l4_core_hwmod,
1773	.slave		= &omap3xxx_timer11_hwmod,
1774	.clk		= "gpt11_ick",
1775	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1776};
1777
1778/* l4_wkup -> wd_timer2 */
1779
1780static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__wd_timer2 = {
1781	.master		= &omap3xxx_l4_wkup_hwmod,
1782	.slave		= &omap3xxx_wd_timer2_hwmod,
1783	.clk		= "wdt2_ick",
1784	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1785};
1786
1787/* l4_core -> dss */
1788static struct omap_hwmod_ocp_if omap3430es1_l4_core__dss = {
1789	.master		= &omap3xxx_l4_core_hwmod,
1790	.slave		= &omap3430es1_dss_core_hwmod,
1791	.clk		= "dss_ick",
1792	.fw = {
1793		.omap2 = {
1794			.l4_fw_region  = OMAP3ES1_L4_CORE_FW_DSS_CORE_REGION,
1795			.l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
1796			.flags	= OMAP_FIREWALL_L4,
1797		},
1798	},
1799	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1800};
1801
1802static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss = {
1803	.master		= &omap3xxx_l4_core_hwmod,
1804	.slave		= &omap3xxx_dss_core_hwmod,
1805	.clk		= "dss_ick",
1806	.fw = {
1807		.omap2 = {
1808			.l4_fw_region  = OMAP3_L4_CORE_FW_DSS_CORE_REGION,
1809			.l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
1810			.flags	= OMAP_FIREWALL_L4,
1811		},
1812	},
1813	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1814};
1815
1816/* l4_core -> dss_dispc */
1817static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_dispc = {
1818	.master		= &omap3xxx_l4_core_hwmod,
1819	.slave		= &omap3xxx_dss_dispc_hwmod,
1820	.clk		= "dss_ick",
1821	.fw = {
1822		.omap2 = {
1823			.l4_fw_region  = OMAP3_L4_CORE_FW_DSS_DISPC_REGION,
1824			.l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
1825			.flags	= OMAP_FIREWALL_L4,
1826		},
1827	},
1828	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1829};
1830
1831/* l4_core -> dss_dsi1 */
1832static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_dsi1 = {
1833	.master		= &omap3xxx_l4_core_hwmod,
1834	.slave		= &omap3xxx_dss_dsi1_hwmod,
1835	.clk		= "dss_ick",
1836	.fw = {
1837		.omap2 = {
1838			.l4_fw_region  = OMAP3_L4_CORE_FW_DSS_DSI_REGION,
1839			.l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
1840			.flags	= OMAP_FIREWALL_L4,
1841		},
1842	},
1843	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1844};
1845
1846/* l4_core -> dss_rfbi */
1847static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_rfbi = {
1848	.master		= &omap3xxx_l4_core_hwmod,
1849	.slave		= &omap3xxx_dss_rfbi_hwmod,
1850	.clk		= "dss_ick",
1851	.fw = {
1852		.omap2 = {
1853			.l4_fw_region  = OMAP3_L4_CORE_FW_DSS_RFBI_REGION,
1854			.l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
1855			.flags	= OMAP_FIREWALL_L4,
1856		},
1857	},
1858	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1859};
1860
1861/* l4_core -> dss_venc */
1862static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_venc = {
1863	.master		= &omap3xxx_l4_core_hwmod,
1864	.slave		= &omap3xxx_dss_venc_hwmod,
1865	.clk		= "dss_ick",
1866	.fw = {
1867		.omap2 = {
1868			.l4_fw_region  = OMAP3_L4_CORE_FW_DSS_VENC_REGION,
1869			.l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
1870			.flags	= OMAP_FIREWALL_L4,
1871		},
1872	},
1873	.flags		= OCPIF_SWSUP_IDLE,
1874	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1875};
1876
1877/* l4_wkup -> gpio1 */
 
1878
1879static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__gpio1 = {
1880	.master		= &omap3xxx_l4_wkup_hwmod,
1881	.slave		= &omap3xxx_gpio1_hwmod,
1882	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1883};
1884
1885/* l4_per -> gpio2 */
1886
1887static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio2 = {
1888	.master		= &omap3xxx_l4_per_hwmod,
1889	.slave		= &omap3xxx_gpio2_hwmod,
1890	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1891};
1892
1893/* l4_per -> gpio3 */
1894
1895static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio3 = {
1896	.master		= &omap3xxx_l4_per_hwmod,
1897	.slave		= &omap3xxx_gpio3_hwmod,
1898	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1899};
1900
1901/*
1902 * 'mmu' class
1903 * The memory management unit performs virtual to physical address translation
1904 * for its requestors.
1905 */
1906
1907static struct omap_hwmod_class_sysconfig mmu_sysc = {
1908	.rev_offs	= 0x000,
1909	.sysc_offs	= 0x010,
1910	.syss_offs	= 0x014,
1911	.sysc_flags	= (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
1912			   SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
1913	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1914	.sysc_fields	= &omap_hwmod_sysc_type1,
1915};
1916
1917static struct omap_hwmod_class omap3xxx_mmu_hwmod_class = {
1918	.name = "mmu",
1919	.sysc = &mmu_sysc,
1920};
1921
1922/* mmu isp */
1923static struct omap_hwmod omap3xxx_mmu_isp_hwmod;
1924
1925/* l4_core -> mmu isp */
1926static struct omap_hwmod_ocp_if omap3xxx_l4_core__mmu_isp = {
1927	.master		= &omap3xxx_l4_core_hwmod,
1928	.slave		= &omap3xxx_mmu_isp_hwmod,
1929	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1930};
1931
1932static struct omap_hwmod omap3xxx_mmu_isp_hwmod = {
1933	.name		= "mmu_isp",
1934	.class		= &omap3xxx_mmu_hwmod_class,
1935	.main_clk	= "cam_ick",
1936	.flags		= HWMOD_NO_IDLEST,
1937};
1938
1939/* mmu iva */
1940
1941static struct omap_hwmod omap3xxx_mmu_iva_hwmod;
1942
1943static struct omap_hwmod_rst_info omap3xxx_mmu_iva_resets[] = {
1944	{ .name = "mmu", .rst_shift = 1, .st_shift = 9 },
1945};
1946
1947/* l3_main -> iva mmu */
1948static struct omap_hwmod_ocp_if omap3xxx_l3_main__mmu_iva = {
1949	.master		= &omap3xxx_l3_main_hwmod,
1950	.slave		= &omap3xxx_mmu_iva_hwmod,
1951	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1952};
1953
1954static struct omap_hwmod omap3xxx_mmu_iva_hwmod = {
1955	.name		= "mmu_iva",
1956	.class		= &omap3xxx_mmu_hwmod_class,
1957	.clkdm_name	= "iva2_clkdm",
1958	.rst_lines	= omap3xxx_mmu_iva_resets,
1959	.rst_lines_cnt	= ARRAY_SIZE(omap3xxx_mmu_iva_resets),
1960	.main_clk	= "iva2_ck",
1961	.prcm = {
1962		.omap2 = {
1963			.module_offs = OMAP3430_IVA2_MOD,
1964			.idlest_reg_id = 1,
1965			.idlest_idle_bit = OMAP3430_ST_IVA2_SHIFT,
1966		},
1967	},
1968	.flags		= HWMOD_NO_IDLEST,
1969};
1970
1971/* l4_per -> gpio4 */
1972
1973static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio4 = {
1974	.master		= &omap3xxx_l4_per_hwmod,
1975	.slave		= &omap3xxx_gpio4_hwmod,
1976	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1977};
1978
1979/* l4_per -> gpio5 */
1980
1981static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio5 = {
1982	.master		= &omap3xxx_l4_per_hwmod,
1983	.slave		= &omap3xxx_gpio5_hwmod,
1984	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1985};
1986
1987/* l4_per -> gpio6 */
1988
1989static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio6 = {
1990	.master		= &omap3xxx_l4_per_hwmod,
1991	.slave		= &omap3xxx_gpio6_hwmod,
1992	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1993};
1994
1995/* l4_core -> mcbsp1 */
1996static struct omap_hwmod_ocp_if omap3xxx_l4_core__mcbsp1 = {
1997	.master		= &omap3xxx_l4_core_hwmod,
1998	.slave		= &omap3xxx_mcbsp1_hwmod,
1999	.clk		= "mcbsp1_ick",
2000	.user		= OCP_USER_MPU | OCP_USER_SDMA,
2001};
2002
2003
2004/* l4_per -> mcbsp2 */
2005static struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp2 = {
2006	.master		= &omap3xxx_l4_per_hwmod,
2007	.slave		= &omap3xxx_mcbsp2_hwmod,
2008	.clk		= "mcbsp2_ick",
2009	.user		= OCP_USER_MPU | OCP_USER_SDMA,
2010};
2011
2012
2013/* l4_per -> mcbsp3 */
2014static struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp3 = {
2015	.master		= &omap3xxx_l4_per_hwmod,
2016	.slave		= &omap3xxx_mcbsp3_hwmod,
2017	.clk		= "mcbsp3_ick",
2018	.user		= OCP_USER_MPU | OCP_USER_SDMA,
2019};
2020
2021
2022/* l4_per -> mcbsp4 */
2023static struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp4 = {
2024	.master		= &omap3xxx_l4_per_hwmod,
2025	.slave		= &omap3xxx_mcbsp4_hwmod,
2026	.clk		= "mcbsp4_ick",
2027	.user		= OCP_USER_MPU | OCP_USER_SDMA,
2028};
2029
2030
2031/* l4_core -> mcbsp5 */
2032static struct omap_hwmod_ocp_if omap3xxx_l4_core__mcbsp5 = {
2033	.master		= &omap3xxx_l4_core_hwmod,
2034	.slave		= &omap3xxx_mcbsp5_hwmod,
2035	.clk		= "mcbsp5_ick",
2036	.user		= OCP_USER_MPU | OCP_USER_SDMA,
2037};
2038
2039
2040/* l4_per -> mcbsp2_sidetone */
2041static struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp2_sidetone = {
2042	.master		= &omap3xxx_l4_per_hwmod,
2043	.slave		= &omap3xxx_mcbsp2_sidetone_hwmod,
2044	.clk		= "mcbsp2_ick",
2045	.user		= OCP_USER_MPU,
2046};
2047
2048
2049/* l4_per -> mcbsp3_sidetone */
2050static struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp3_sidetone = {
2051	.master		= &omap3xxx_l4_per_hwmod,
2052	.slave		= &omap3xxx_mcbsp3_sidetone_hwmod,
2053	.clk		= "mcbsp3_ick",
2054	.user		= OCP_USER_MPU,
2055};
2056
2057/* l4_core -> mailbox */
2058static struct omap_hwmod_ocp_if omap3xxx_l4_core__mailbox = {
2059	.master		= &omap3xxx_l4_core_hwmod,
2060	.slave		= &omap3xxx_mailbox_hwmod,
2061	.user		= OCP_USER_MPU | OCP_USER_SDMA,
2062};
2063
2064/* l4 core -> mcspi1 interface */
2065static struct omap_hwmod_ocp_if omap34xx_l4_core__mcspi1 = {
2066	.master		= &omap3xxx_l4_core_hwmod,
2067	.slave		= &omap34xx_mcspi1,
2068	.clk		= "mcspi1_ick",
2069	.user		= OCP_USER_MPU | OCP_USER_SDMA,
2070};
2071
2072/* l4 core -> mcspi2 interface */
2073static struct omap_hwmod_ocp_if omap34xx_l4_core__mcspi2 = {
2074	.master		= &omap3xxx_l4_core_hwmod,
2075	.slave		= &omap34xx_mcspi2,
2076	.clk		= "mcspi2_ick",
2077	.user		= OCP_USER_MPU | OCP_USER_SDMA,
2078};
2079
2080/* l4 core -> mcspi3 interface */
2081static struct omap_hwmod_ocp_if omap34xx_l4_core__mcspi3 = {
2082	.master		= &omap3xxx_l4_core_hwmod,
2083	.slave		= &omap34xx_mcspi3,
2084	.clk		= "mcspi3_ick",
2085	.user		= OCP_USER_MPU | OCP_USER_SDMA,
2086};
2087
2088/* l4 core -> mcspi4 interface */
2089
2090static struct omap_hwmod_ocp_if omap34xx_l4_core__mcspi4 = {
2091	.master		= &omap3xxx_l4_core_hwmod,
2092	.slave		= &omap34xx_mcspi4,
2093	.clk		= "mcspi4_ick",
2094	.user		= OCP_USER_MPU | OCP_USER_SDMA,
2095};
2096
2097static struct omap_hwmod_ocp_if omap3xxx_usb_host_hs__l3_main_2 = {
2098	.master		= &omap3xxx_usb_host_hs_hwmod,
2099	.slave		= &omap3xxx_l3_main_hwmod,
2100	.clk		= "core_l3_ick",
2101	.user		= OCP_USER_MPU,
2102};
2103
2104
2105static struct omap_hwmod_ocp_if omap3xxx_l4_core__usb_host_hs = {
2106	.master		= &omap3xxx_l4_core_hwmod,
2107	.slave		= &omap3xxx_usb_host_hs_hwmod,
2108	.clk		= "usbhost_ick",
2109	.user		= OCP_USER_MPU | OCP_USER_SDMA,
2110};
2111
2112
2113static struct omap_hwmod_ocp_if omap3xxx_l4_core__usb_tll_hs = {
2114	.master		= &omap3xxx_l4_core_hwmod,
2115	.slave		= &omap3xxx_usb_tll_hs_hwmod,
2116	.clk		= "usbtll_ick",
2117	.user		= OCP_USER_MPU | OCP_USER_SDMA,
2118};
2119
2120/* l4_core -> hdq1w interface */
2121static struct omap_hwmod_ocp_if omap3xxx_l4_core__hdq1w = {
2122	.master		= &omap3xxx_l4_core_hwmod,
2123	.slave		= &omap3xxx_hdq1w_hwmod,
2124	.clk		= "hdq_ick",
2125	.user		= OCP_USER_MPU | OCP_USER_SDMA,
2126	.flags		= OMAP_FIREWALL_L4 | OCPIF_SWSUP_IDLE,
2127};
2128
2129/* am35xx has Davinci MDIO & EMAC */
2130static struct omap_hwmod_class am35xx_mdio_class = {
2131	.name = "davinci_mdio",
2132};
2133
2134static struct omap_hwmod am35xx_mdio_hwmod = {
2135	.name		= "davinci_mdio",
2136	.class		= &am35xx_mdio_class,
2137	.flags		= HWMOD_NO_IDLEST,
2138};
2139
2140/*
2141 * XXX Should be connected to an IPSS hwmod, not the L3 directly;
2142 * but this will probably require some additional hwmod core support,
2143 * so is left as a future to-do item.
2144 */
2145static struct omap_hwmod_ocp_if am35xx_mdio__l3 = {
2146	.master		= &am35xx_mdio_hwmod,
2147	.slave		= &omap3xxx_l3_main_hwmod,
2148	.clk		= "emac_fck",
2149	.user		= OCP_USER_MPU,
2150};
2151
2152/* l4_core -> davinci mdio  */
2153/*
2154 * XXX Should be connected to an IPSS hwmod, not the L4_CORE directly;
2155 * but this will probably require some additional hwmod core support,
2156 * so is left as a future to-do item.
2157 */
2158static struct omap_hwmod_ocp_if am35xx_l4_core__mdio = {
2159	.master		= &omap3xxx_l4_core_hwmod,
2160	.slave		= &am35xx_mdio_hwmod,
2161	.clk		= "emac_fck",
2162	.user		= OCP_USER_MPU,
2163};
2164
2165static struct omap_hwmod_class am35xx_emac_class = {
2166	.name = "davinci_emac",
2167};
2168
2169static struct omap_hwmod am35xx_emac_hwmod = {
2170	.name		= "davinci_emac",
2171	.class		= &am35xx_emac_class,
2172	/*
2173	 * According to Mark Greer, the MPU will not return from WFI
2174	 * when the EMAC signals an interrupt.
2175	 * https://lore.kernel.org/all/1336770778-23044-3-git-send-email-mgreer@animalcreek.com/
2176	 */
2177	.flags		= (HWMOD_NO_IDLEST | HWMOD_BLOCK_WFI),
2178};
2179
2180/* l3_core -> davinci emac interface */
2181/*
2182 * XXX Should be connected to an IPSS hwmod, not the L3 directly;
2183 * but this will probably require some additional hwmod core support,
2184 * so is left as a future to-do item.
2185 */
2186static struct omap_hwmod_ocp_if am35xx_emac__l3 = {
2187	.master		= &am35xx_emac_hwmod,
2188	.slave		= &omap3xxx_l3_main_hwmod,
2189	.clk		= "emac_ick",
2190	.user		= OCP_USER_MPU,
2191};
2192
2193/* l4_core -> davinci emac  */
2194/*
2195 * XXX Should be connected to an IPSS hwmod, not the L4_CORE directly;
2196 * but this will probably require some additional hwmod core support,
2197 * so is left as a future to-do item.
2198 */
2199static struct omap_hwmod_ocp_if am35xx_l4_core__emac = {
2200	.master		= &omap3xxx_l4_core_hwmod,
2201	.slave		= &am35xx_emac_hwmod,
2202	.clk		= "emac_ick",
2203	.user		= OCP_USER_MPU,
2204};
2205
2206static struct omap_hwmod_ocp_if omap3xxx_l3_main__gpmc = {
2207	.master		= &omap3xxx_l3_main_hwmod,
2208	.slave		= &omap3xxx_gpmc_hwmod,
2209	.clk		= "core_l3_ick",
2210	.user		= OCP_USER_MPU | OCP_USER_SDMA,
2211};
2212
2213/* l4_core -> SHAM2 (SHA1/MD5) (similar to omap24xx) */
2214static struct omap_hwmod_class_sysconfig omap3_sham_sysc = {
2215	.rev_offs	= 0x5c,
2216	.sysc_offs	= 0x60,
2217	.syss_offs	= 0x64,
2218	.sysc_flags	= (SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
2219			   SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
2220	.sysc_fields	= &omap3_sham_sysc_fields,
2221};
2222
2223static struct omap_hwmod_class omap3xxx_sham_class = {
2224	.name	= "sham",
2225	.sysc	= &omap3_sham_sysc,
2226};
2227
2228
2229
2230static struct omap_hwmod omap3xxx_sham_hwmod = {
2231	.name		= "sham",
2232	.main_clk	= "sha12_ick",
2233	.prcm		= {
2234		.omap2 = {
2235			.module_offs = CORE_MOD,
2236			.idlest_reg_id = 1,
2237			.idlest_idle_bit = OMAP3430_ST_SHA12_SHIFT,
2238		},
2239	},
2240	.class		= &omap3xxx_sham_class,
2241};
2242
2243
2244static struct omap_hwmod_ocp_if omap3xxx_l4_core__sham = {
2245	.master		= &omap3xxx_l4_core_hwmod,
2246	.slave		= &omap3xxx_sham_hwmod,
2247	.clk		= "sha12_ick",
2248	.user		= OCP_USER_MPU | OCP_USER_SDMA,
2249};
2250
2251/*
2252 * 'ssi' class
2253 * synchronous serial interface (multichannel and full-duplex serial if)
2254 */
2255
2256static struct omap_hwmod_class_sysconfig omap34xx_ssi_sysc = {
2257	.rev_offs	= 0x0000,
2258	.sysc_offs	= 0x0010,
2259	.syss_offs	= 0x0014,
2260	.sysc_flags	= (SYSC_HAS_AUTOIDLE | SYSC_HAS_MIDLEMODE |
2261			   SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
2262	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2263	.sysc_fields	= &omap_hwmod_sysc_type1,
2264};
2265
2266static struct omap_hwmod_class omap3xxx_ssi_hwmod_class = {
2267	.name	= "ssi",
2268	.sysc	= &omap34xx_ssi_sysc,
2269};
2270
2271static struct omap_hwmod omap3xxx_ssi_hwmod = {
2272	.name		= "ssi",
2273	.class		= &omap3xxx_ssi_hwmod_class,
2274	.clkdm_name	= "core_l4_clkdm",
2275	.main_clk	= "ssi_ssr_fck",
2276	.prcm		= {
2277		.omap2 = {
2278			.module_offs		= CORE_MOD,
2279			.idlest_reg_id		= 1,
2280			.idlest_idle_bit	= OMAP3430ES2_ST_SSI_IDLE_SHIFT,
2281		},
2282	},
2283};
2284
2285/* L4 CORE -> SSI */
2286static struct omap_hwmod_ocp_if omap3xxx_l4_core__ssi = {
2287	.master		= &omap3xxx_l4_core_hwmod,
2288	.slave		= &omap3xxx_ssi_hwmod,
2289	.clk		= "ssi_ick",
2290	.user		= OCP_USER_MPU | OCP_USER_SDMA,
2291};
2292
2293static struct omap_hwmod_ocp_if *omap3xxx_hwmod_ocp_ifs[] __initdata = {
2294	&omap3xxx_l3_main__l4_core,
2295	&omap3xxx_l3_main__l4_per,
2296	&omap3xxx_mpu__l3_main,
2297	&omap3xxx_l3_main__l4_debugss,
2298	&omap3xxx_l4_core__l4_wkup,
2299	&omap3xxx_l4_core__mmc3,
2300	&omap3_l4_core__uart1,
2301	&omap3_l4_core__uart2,
2302	&omap3_l4_per__uart3,
2303	&omap3_l4_core__i2c1,
2304	&omap3_l4_core__i2c2,
2305	&omap3_l4_core__i2c3,
2306	&omap3xxx_l4_wkup__l4_sec,
2307	&omap3xxx_l4_per__timer3,
2308	&omap3xxx_l4_per__timer4,
2309	&omap3xxx_l4_per__timer5,
2310	&omap3xxx_l4_per__timer6,
2311	&omap3xxx_l4_per__timer7,
2312	&omap3xxx_l4_per__timer8,
2313	&omap3xxx_l4_per__timer9,
2314	&omap3xxx_l4_core__timer10,
2315	&omap3xxx_l4_core__timer11,
2316	&omap3xxx_l4_wkup__wd_timer2,
2317	&omap3xxx_l4_wkup__gpio1,
2318	&omap3xxx_l4_per__gpio2,
2319	&omap3xxx_l4_per__gpio3,
2320	&omap3xxx_l4_per__gpio4,
2321	&omap3xxx_l4_per__gpio5,
2322	&omap3xxx_l4_per__gpio6,
2323	&omap3xxx_l4_core__mcbsp1,
2324	&omap3xxx_l4_per__mcbsp2,
2325	&omap3xxx_l4_per__mcbsp3,
2326	&omap3xxx_l4_per__mcbsp4,
2327	&omap3xxx_l4_core__mcbsp5,
2328	&omap3xxx_l4_per__mcbsp2_sidetone,
2329	&omap3xxx_l4_per__mcbsp3_sidetone,
2330	&omap34xx_l4_core__mcspi1,
2331	&omap34xx_l4_core__mcspi2,
2332	&omap34xx_l4_core__mcspi3,
2333	&omap34xx_l4_core__mcspi4,
2334	&omap3xxx_l3_main__gpmc,
2335	NULL,
2336};
2337
2338/* crypto hwmod links */
2339static struct omap_hwmod_ocp_if *omap34xx_sham_hwmod_ocp_ifs[] __initdata = {
2340	&omap3xxx_l4_core__sham,
2341	NULL,
2342};
2343
2344static struct omap_hwmod_ocp_if *omap36xx_sham_hwmod_ocp_ifs[] __initdata = {
2345	&omap3xxx_l4_core__sham,
2346	NULL
2347};
2348
2349/*
2350 * Apparently the SHA/MD5 and AES accelerator IP blocks are
2351 * only present on some AM35xx chips, and no one knows which
2352 * ones.
2353 * See https://lore.kernel.org/all/20130108203853.GB1876@animalcreek.com/
2354 * So if you need these IP blocks on an AM35xx, try uncommenting
2355 * the following lines.
2356 */
2357static struct omap_hwmod_ocp_if *am35xx_sham_hwmod_ocp_ifs[] __initdata = {
2358	/* &omap3xxx_l4_core__sham, */
2359	NULL
2360};
2361
2362/* 3430ES1-only hwmod links */
2363static struct omap_hwmod_ocp_if *omap3430es1_hwmod_ocp_ifs[] __initdata = {
2364	&omap3430es1_dss__l3,
2365	&omap3430es1_l4_core__dss,
2366	NULL,
2367};
2368
2369/* 3430ES2+-only hwmod links */
2370static struct omap_hwmod_ocp_if *omap3430es2plus_hwmod_ocp_ifs[] __initdata = {
2371	&omap3xxx_dss__l3,
2372	&omap3xxx_l4_core__dss,
2373	&omap3xxx_usb_host_hs__l3_main_2,
2374	&omap3xxx_l4_core__usb_host_hs,
2375	&omap3xxx_l4_core__usb_tll_hs,
2376	NULL,
2377};
2378
2379/* <= 3430ES3-only hwmod links */
2380static struct omap_hwmod_ocp_if *omap3430_pre_es3_hwmod_ocp_ifs[] __initdata = {
2381	&omap3xxx_l4_core__pre_es3_mmc1,
2382	&omap3xxx_l4_core__pre_es3_mmc2,
2383	NULL,
2384};
2385
2386/* 3430ES3+-only hwmod links */
2387static struct omap_hwmod_ocp_if *omap3430_es3plus_hwmod_ocp_ifs[] __initdata = {
2388	&omap3xxx_l4_core__es3plus_mmc1,
2389	&omap3xxx_l4_core__es3plus_mmc2,
2390	NULL,
2391};
2392
2393/* 34xx-only hwmod links (all ES revisions) */
2394static struct omap_hwmod_ocp_if *omap34xx_hwmod_ocp_ifs[] __initdata = {
2395	&omap3xxx_l3__iva,
2396	&omap34xx_l4_core__sr1,
2397	&omap34xx_l4_core__sr2,
2398	&omap3xxx_l4_core__mailbox,
2399	&omap3xxx_l4_core__hdq1w,
2400	&omap3xxx_sad2d__l3,
2401	&omap3xxx_l4_core__mmu_isp,
2402	&omap3xxx_l3_main__mmu_iva,
2403	&omap3xxx_l4_core__ssi,
2404	NULL,
2405};
2406
2407/* 36xx-only hwmod links (all ES revisions) */
2408static struct omap_hwmod_ocp_if *omap36xx_hwmod_ocp_ifs[] __initdata = {
2409	&omap3xxx_l3__iva,
2410	&omap36xx_l4_per__uart4,
2411	&omap3xxx_dss__l3,
2412	&omap3xxx_l4_core__dss,
2413	&omap36xx_l4_core__sr1,
2414	&omap36xx_l4_core__sr2,
2415	&omap3xxx_l4_core__mailbox,
2416	&omap3xxx_usb_host_hs__l3_main_2,
2417	&omap3xxx_l4_core__usb_host_hs,
2418	&omap3xxx_l4_core__usb_tll_hs,
2419	&omap3xxx_l4_core__es3plus_mmc1,
2420	&omap3xxx_l4_core__es3plus_mmc2,
2421	&omap3xxx_l4_core__hdq1w,
2422	&omap3xxx_sad2d__l3,
2423	&omap3xxx_l4_core__mmu_isp,
2424	&omap3xxx_l3_main__mmu_iva,
2425	&omap3xxx_l4_core__ssi,
2426	NULL,
2427};
2428
2429static struct omap_hwmod_ocp_if *am35xx_hwmod_ocp_ifs[] __initdata = {
2430	&omap3xxx_dss__l3,
2431	&omap3xxx_l4_core__dss,
2432	&am35xx_l4_core__uart4,
2433	&omap3xxx_usb_host_hs__l3_main_2,
2434	&omap3xxx_l4_core__usb_host_hs,
2435	&omap3xxx_l4_core__usb_tll_hs,
2436	&omap3xxx_l4_core__es3plus_mmc1,
2437	&omap3xxx_l4_core__es3plus_mmc2,
2438	&omap3xxx_l4_core__hdq1w,
2439	&am35xx_mdio__l3,
2440	&am35xx_l4_core__mdio,
2441	&am35xx_emac__l3,
2442	&am35xx_l4_core__emac,
2443	NULL,
2444};
2445
2446static struct omap_hwmod_ocp_if *omap3xxx_dss_hwmod_ocp_ifs[] __initdata = {
2447	&omap3xxx_l4_core__dss_dispc,
2448	&omap3xxx_l4_core__dss_dsi1,
2449	&omap3xxx_l4_core__dss_rfbi,
2450	&omap3xxx_l4_core__dss_venc,
2451	NULL,
2452};
2453
2454/**
2455 * omap3xxx_hwmod_is_hs_ip_block_usable - is a security IP block accessible?
2456 * @bus: struct device_node * for the top-level OMAP DT data
2457 * @dev_name: device name used in the DT file
2458 *
2459 * Determine whether a "secure" IP block @dev_name is usable by Linux.
2460 * There doesn't appear to be a 100% reliable way to determine this,
2461 * so we rely on heuristics.  If @bus is null, meaning there's no DT
2462 * data, then we only assume the IP block is accessible if the OMAP is
2463 * fused as a 'general-purpose' SoC.  If however DT data is present,
2464 * test to see if the IP block is described in the DT data and set to
2465 * 'status = "okay"'.  If so then we assume the ODM has configured the
2466 * OMAP firewalls to allow access to the IP block.
2467 *
2468 * Return: 0 if device named @dev_name is not likely to be accessible,
2469 * or 1 if it is likely to be accessible.
2470 */
2471static bool __init omap3xxx_hwmod_is_hs_ip_block_usable(struct device_node *bus,
2472							const char *dev_name)
2473{
2474	struct device_node *node;
2475	bool available;
2476
2477	if (!bus)
2478		return omap_type() == OMAP2_DEVICE_TYPE_GP;
2479
2480	node = of_get_child_by_name(bus, dev_name);
2481	available = of_device_is_available(node);
2482	of_node_put(node);
2483
2484	return available;
2485}
2486
2487int __init omap3xxx_hwmod_init(void)
2488{
2489	int r;
2490	struct omap_hwmod_ocp_if **h = NULL, **h_sham = NULL;
2491	struct device_node *bus;
2492	unsigned int rev;
2493
2494	omap_hwmod_init();
2495
2496	/* Register hwmod links common to all OMAP3 */
2497	r = omap_hwmod_register_links(omap3xxx_hwmod_ocp_ifs);
2498	if (r < 0)
2499		return r;
2500
2501	rev = omap_rev();
2502
2503	/*
2504	 * Register hwmod links common to individual OMAP3 families, all
2505	 * silicon revisions (e.g., 34xx, or AM3505/3517, or 36xx)
2506	 * All possible revisions should be included in this conditional.
2507	 */
2508	if (rev == OMAP3430_REV_ES1_0 || rev == OMAP3430_REV_ES2_0 ||
2509	    rev == OMAP3430_REV_ES2_1 || rev == OMAP3430_REV_ES3_0 ||
2510	    rev == OMAP3430_REV_ES3_1 || rev == OMAP3430_REV_ES3_1_2) {
2511		h = omap34xx_hwmod_ocp_ifs;
2512		h_sham = omap34xx_sham_hwmod_ocp_ifs;
2513	} else if (rev == AM35XX_REV_ES1_0 || rev == AM35XX_REV_ES1_1) {
2514		h = am35xx_hwmod_ocp_ifs;
2515		h_sham = am35xx_sham_hwmod_ocp_ifs;
2516	} else if (rev == OMAP3630_REV_ES1_0 || rev == OMAP3630_REV_ES1_1 ||
2517		   rev == OMAP3630_REV_ES1_2) {
2518		h = omap36xx_hwmod_ocp_ifs;
2519		h_sham = omap36xx_sham_hwmod_ocp_ifs;
2520	} else {
2521		WARN(1, "OMAP3 hwmod family init: unknown chip type\n");
2522		return -EINVAL;
2523	}
2524
2525	r = omap_hwmod_register_links(h);
2526	if (r < 0)
2527		return r;
2528
2529	/*
2530	 * Register crypto hwmod links only if they are not disabled in DT.
2531	 * If DT information is missing, enable them only for GP devices.
2532	 */
2533
2534	bus = of_find_node_by_name(NULL, "ocp");
2535
2536	if (h_sham && omap3xxx_hwmod_is_hs_ip_block_usable(bus, "sham")) {
2537		r = omap_hwmod_register_links(h_sham);
2538		if (r < 0)
2539			goto put_node;
2540	}
2541
2542	of_node_put(bus);
2543
2544	/*
2545	 * Register hwmod links specific to certain ES levels of a
2546	 * particular family of silicon (e.g., 34xx ES1.0)
2547	 */
2548	h = NULL;
2549	if (rev == OMAP3430_REV_ES1_0) {
2550		h = omap3430es1_hwmod_ocp_ifs;
2551	} else if (rev == OMAP3430_REV_ES2_0 || rev == OMAP3430_REV_ES2_1 ||
2552		   rev == OMAP3430_REV_ES3_0 || rev == OMAP3430_REV_ES3_1 ||
2553		   rev == OMAP3430_REV_ES3_1_2) {
2554		h = omap3430es2plus_hwmod_ocp_ifs;
2555	}
2556
2557	if (h) {
2558		r = omap_hwmod_register_links(h);
2559		if (r < 0)
2560			return r;
2561	}
2562
2563	h = NULL;
2564	if (rev == OMAP3430_REV_ES1_0 || rev == OMAP3430_REV_ES2_0 ||
2565	    rev == OMAP3430_REV_ES2_1) {
2566		h = omap3430_pre_es3_hwmod_ocp_ifs;
2567	} else if (rev == OMAP3430_REV_ES3_0 || rev == OMAP3430_REV_ES3_1 ||
2568		   rev == OMAP3430_REV_ES3_1_2) {
2569		h = omap3430_es3plus_hwmod_ocp_ifs;
2570	}
2571
2572	if (h)
2573		r = omap_hwmod_register_links(h);
2574	if (r < 0)
2575		return r;
2576
2577	/*
2578	 * DSS code presumes that dss_core hwmod is handled first,
2579	 * _before_ any other DSS related hwmods so register common
2580	 * DSS hwmod links last to ensure that dss_core is already
2581	 * registered.  Otherwise some change things may happen, for
2582	 * ex. if dispc is handled before dss_core and DSS is enabled
2583	 * in bootloader DISPC will be reset with outputs enabled
2584	 * which sometimes leads to unrecoverable L3 error.  XXX The
2585	 * long-term fix to this is to ensure hwmods are set up in
2586	 * dependency order in the hwmod core code.
2587	 */
2588	r = omap_hwmod_register_links(omap3xxx_dss_hwmod_ocp_ifs);
2589
2590	return r;
2591
2592put_node:
2593	of_node_put(bus);
2594	return r;
2595}
v3.1
 
   1/*
   2 * omap_hwmod_3xxx_data.c - hardware modules present on the OMAP3xxx chips
   3 *
   4 * Copyright (C) 2009-2011 Nokia Corporation
 
   5 * Paul Walmsley
   6 *
   7 * This program is free software; you can redistribute it and/or modify
   8 * it under the terms of the GNU General Public License version 2 as
   9 * published by the Free Software Foundation.
  10 *
  11 * The data in this file should be completely autogeneratable from
  12 * the TI hardware database or other technical documentation.
  13 *
  14 * XXX these should be marked initdata for multi-OMAP kernels
  15 */
  16#include <plat/omap_hwmod.h>
  17#include <mach/irqs.h>
  18#include <plat/cpu.h>
  19#include <plat/dma.h>
  20#include <plat/serial.h>
  21#include <plat/l3_3xxx.h>
  22#include <plat/l4_3xxx.h>
  23#include <plat/i2c.h>
  24#include <plat/gpio.h>
  25#include <plat/mmc.h>
  26#include <plat/mcbsp.h>
  27#include <plat/mcspi.h>
  28#include <plat/dmtimer.h>
  29
 
 
 
 
 
 
 
 
 
  30#include "omap_hwmod_common_data.h"
  31
  32#include "prm-regbits-34xx.h"
  33#include "cm-regbits-34xx.h"
 
 
  34#include "wd_timer.h"
  35#include <mach/am35xx.h>
  36
  37/*
  38 * OMAP3xxx hardware module integration data
  39 *
  40 * ALl of the data in this section should be autogeneratable from the
  41 * TI hardware database or other technical documentation.  Data that
  42 * is driver-specific or driver-kernel integration-specific belongs
  43 * elsewhere.
  44 */
  45
  46static struct omap_hwmod omap3xxx_mpu_hwmod;
  47static struct omap_hwmod omap3xxx_iva_hwmod;
  48static struct omap_hwmod omap3xxx_l3_main_hwmod;
  49static struct omap_hwmod omap3xxx_l4_core_hwmod;
  50static struct omap_hwmod omap3xxx_l4_per_hwmod;
  51static struct omap_hwmod omap3xxx_wd_timer2_hwmod;
  52static struct omap_hwmod omap3430es1_dss_core_hwmod;
  53static struct omap_hwmod omap3xxx_dss_core_hwmod;
  54static struct omap_hwmod omap3xxx_dss_dispc_hwmod;
  55static struct omap_hwmod omap3xxx_dss_dsi1_hwmod;
  56static struct omap_hwmod omap3xxx_dss_rfbi_hwmod;
  57static struct omap_hwmod omap3xxx_dss_venc_hwmod;
  58static struct omap_hwmod omap3xxx_i2c1_hwmod;
  59static struct omap_hwmod omap3xxx_i2c2_hwmod;
  60static struct omap_hwmod omap3xxx_i2c3_hwmod;
  61static struct omap_hwmod omap3xxx_gpio1_hwmod;
  62static struct omap_hwmod omap3xxx_gpio2_hwmod;
  63static struct omap_hwmod omap3xxx_gpio3_hwmod;
  64static struct omap_hwmod omap3xxx_gpio4_hwmod;
  65static struct omap_hwmod omap3xxx_gpio5_hwmod;
  66static struct omap_hwmod omap3xxx_gpio6_hwmod;
  67static struct omap_hwmod omap34xx_sr1_hwmod;
  68static struct omap_hwmod omap34xx_sr2_hwmod;
  69static struct omap_hwmod omap34xx_mcspi1;
  70static struct omap_hwmod omap34xx_mcspi2;
  71static struct omap_hwmod omap34xx_mcspi3;
  72static struct omap_hwmod omap34xx_mcspi4;
  73static struct omap_hwmod omap3xxx_mmc1_hwmod;
  74static struct omap_hwmod omap3xxx_mmc2_hwmod;
  75static struct omap_hwmod omap3xxx_mmc3_hwmod;
  76static struct omap_hwmod am35xx_usbhsotg_hwmod;
  77
  78static struct omap_hwmod omap3xxx_dma_system_hwmod;
  79
  80static struct omap_hwmod omap3xxx_mcbsp1_hwmod;
  81static struct omap_hwmod omap3xxx_mcbsp2_hwmod;
  82static struct omap_hwmod omap3xxx_mcbsp3_hwmod;
  83static struct omap_hwmod omap3xxx_mcbsp4_hwmod;
  84static struct omap_hwmod omap3xxx_mcbsp5_hwmod;
  85static struct omap_hwmod omap3xxx_mcbsp2_sidetone_hwmod;
  86static struct omap_hwmod omap3xxx_mcbsp3_sidetone_hwmod;
  87
  88/* L3 -> L4_CORE interface */
  89static struct omap_hwmod_ocp_if omap3xxx_l3_main__l4_core = {
  90	.master	= &omap3xxx_l3_main_hwmod,
  91	.slave	= &omap3xxx_l4_core_hwmod,
  92	.user	= OCP_USER_MPU | OCP_USER_SDMA,
  93};
  94
  95/* L3 -> L4_PER interface */
  96static struct omap_hwmod_ocp_if omap3xxx_l3_main__l4_per = {
  97	.master = &omap3xxx_l3_main_hwmod,
  98	.slave	= &omap3xxx_l4_per_hwmod,
  99	.user	= OCP_USER_MPU | OCP_USER_SDMA,
 100};
 101
 102/* L3 taret configuration and error log registers */
 103static struct omap_hwmod_irq_info omap3xxx_l3_main_irqs[] = {
 104	{ .irq = INT_34XX_L3_DBG_IRQ },
 105	{ .irq = INT_34XX_L3_APP_IRQ },
 106	{ .irq = -1 }
 107};
 108
 109static struct omap_hwmod_addr_space omap3xxx_l3_main_addrs[] = {
 110	{
 111		.pa_start       = 0x68000000,
 112		.pa_end         = 0x6800ffff,
 113		.flags          = ADDR_TYPE_RT,
 114	},
 115	{ }
 116};
 117
 118/* MPU -> L3 interface */
 119static struct omap_hwmod_ocp_if omap3xxx_mpu__l3_main = {
 120	.master   = &omap3xxx_mpu_hwmod,
 121	.slave    = &omap3xxx_l3_main_hwmod,
 122	.addr     = omap3xxx_l3_main_addrs,
 123	.user	= OCP_USER_MPU,
 124};
 125
 126/* Slave interfaces on the L3 interconnect */
 127static struct omap_hwmod_ocp_if *omap3xxx_l3_main_slaves[] = {
 128	&omap3xxx_mpu__l3_main,
 129};
 130
 131/* DSS -> l3 */
 132static struct omap_hwmod_ocp_if omap3xxx_dss__l3 = {
 133	.master		= &omap3xxx_dss_core_hwmod,
 134	.slave		= &omap3xxx_l3_main_hwmod,
 135	.fw = {
 136		.omap2 = {
 137			.l3_perm_bit  = OMAP3_L3_CORE_FW_INIT_ID_DSS,
 138			.flags	= OMAP_FIREWALL_L3,
 139		}
 140	},
 141	.user		= OCP_USER_MPU | OCP_USER_SDMA,
 142};
 143
 144/* Master interfaces on the L3 interconnect */
 145static struct omap_hwmod_ocp_if *omap3xxx_l3_main_masters[] = {
 146	&omap3xxx_l3_main__l4_core,
 147	&omap3xxx_l3_main__l4_per,
 148};
 149
 150/* L3 */
 151static struct omap_hwmod omap3xxx_l3_main_hwmod = {
 152	.name		= "l3_main",
 153	.class		= &l3_hwmod_class,
 154	.mpu_irqs	= omap3xxx_l3_main_irqs,
 155	.masters	= omap3xxx_l3_main_masters,
 156	.masters_cnt	= ARRAY_SIZE(omap3xxx_l3_main_masters),
 157	.slaves		= omap3xxx_l3_main_slaves,
 158	.slaves_cnt	= ARRAY_SIZE(omap3xxx_l3_main_slaves),
 159	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
 160	.flags		= HWMOD_NO_IDLEST,
 161};
 162
 163static struct omap_hwmod omap3xxx_l4_wkup_hwmod;
 164static struct omap_hwmod omap3xxx_uart1_hwmod;
 165static struct omap_hwmod omap3xxx_uart2_hwmod;
 166static struct omap_hwmod omap3xxx_uart3_hwmod;
 167static struct omap_hwmod omap3xxx_uart4_hwmod;
 168static struct omap_hwmod omap3xxx_usbhsotg_hwmod;
 169
 170/* l3_core -> usbhsotg interface */
 171static struct omap_hwmod_ocp_if omap3xxx_usbhsotg__l3 = {
 172	.master		= &omap3xxx_usbhsotg_hwmod,
 173	.slave		= &omap3xxx_l3_main_hwmod,
 174	.clk		= "core_l3_ick",
 175	.user		= OCP_USER_MPU,
 176};
 177
 178/* l3_core -> am35xx_usbhsotg interface */
 179static struct omap_hwmod_ocp_if am35xx_usbhsotg__l3 = {
 180	.master		= &am35xx_usbhsotg_hwmod,
 181	.slave		= &omap3xxx_l3_main_hwmod,
 182	.clk		= "core_l3_ick",
 183	.user		= OCP_USER_MPU,
 184};
 185/* L4_CORE -> L4_WKUP interface */
 186static struct omap_hwmod_ocp_if omap3xxx_l4_core__l4_wkup = {
 187	.master	= &omap3xxx_l4_core_hwmod,
 188	.slave	= &omap3xxx_l4_wkup_hwmod,
 189	.user	= OCP_USER_MPU | OCP_USER_SDMA,
 190};
 191
 192/* L4 CORE -> MMC1 interface */
 193static struct omap_hwmod_ocp_if omap3xxx_l4_core__mmc1 = {
 194	.master		= &omap3xxx_l4_core_hwmod,
 195	.slave		= &omap3xxx_mmc1_hwmod,
 196	.clk		= "mmchs1_ick",
 197	.addr		= omap2430_mmc1_addr_space,
 198	.user		= OCP_USER_MPU | OCP_USER_SDMA,
 199	.flags		= OMAP_FIREWALL_L4
 200};
 201
 202/* L4 CORE -> MMC2 interface */
 203static struct omap_hwmod_ocp_if omap3xxx_l4_core__mmc2 = {
 204	.master		= &omap3xxx_l4_core_hwmod,
 205	.slave		= &omap3xxx_mmc2_hwmod,
 206	.clk		= "mmchs2_ick",
 207	.addr		= omap2430_mmc2_addr_space,
 208	.user		= OCP_USER_MPU | OCP_USER_SDMA,
 209	.flags		= OMAP_FIREWALL_L4
 210};
 211
 212/* L4 CORE -> MMC3 interface */
 213static struct omap_hwmod_addr_space omap3xxx_mmc3_addr_space[] = {
 214	{
 215		.pa_start	= 0x480ad000,
 216		.pa_end		= 0x480ad1ff,
 217		.flags		= ADDR_TYPE_RT,
 218	},
 219	{ }
 220};
 221
 222static struct omap_hwmod_ocp_if omap3xxx_l4_core__mmc3 = {
 223	.master		= &omap3xxx_l4_core_hwmod,
 224	.slave		= &omap3xxx_mmc3_hwmod,
 225	.clk		= "mmchs3_ick",
 226	.addr		= omap3xxx_mmc3_addr_space,
 227	.user		= OCP_USER_MPU | OCP_USER_SDMA,
 228	.flags		= OMAP_FIREWALL_L4
 229};
 230
 231/* L4 CORE -> UART1 interface */
 232static struct omap_hwmod_addr_space omap3xxx_uart1_addr_space[] = {
 233	{
 234		.pa_start	= OMAP3_UART1_BASE,
 235		.pa_end		= OMAP3_UART1_BASE + SZ_8K - 1,
 236		.flags		= ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
 237	},
 238	{ }
 239};
 240
 241static struct omap_hwmod_ocp_if omap3_l4_core__uart1 = {
 242	.master		= &omap3xxx_l4_core_hwmod,
 243	.slave		= &omap3xxx_uart1_hwmod,
 244	.clk		= "uart1_ick",
 245	.addr		= omap3xxx_uart1_addr_space,
 246	.user		= OCP_USER_MPU | OCP_USER_SDMA,
 247};
 248
 249/* L4 CORE -> UART2 interface */
 250static struct omap_hwmod_addr_space omap3xxx_uart2_addr_space[] = {
 251	{
 252		.pa_start	= OMAP3_UART2_BASE,
 253		.pa_end		= OMAP3_UART2_BASE + SZ_1K - 1,
 254		.flags		= ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
 255	},
 256	{ }
 257};
 258
 259static struct omap_hwmod_ocp_if omap3_l4_core__uart2 = {
 260	.master		= &omap3xxx_l4_core_hwmod,
 261	.slave		= &omap3xxx_uart2_hwmod,
 262	.clk		= "uart2_ick",
 263	.addr		= omap3xxx_uart2_addr_space,
 264	.user		= OCP_USER_MPU | OCP_USER_SDMA,
 265};
 266
 267/* L4 PER -> UART3 interface */
 268static struct omap_hwmod_addr_space omap3xxx_uart3_addr_space[] = {
 269	{
 270		.pa_start	= OMAP3_UART3_BASE,
 271		.pa_end		= OMAP3_UART3_BASE + SZ_1K - 1,
 272		.flags		= ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
 273	},
 274	{ }
 275};
 276
 277static struct omap_hwmod_ocp_if omap3_l4_per__uart3 = {
 278	.master		= &omap3xxx_l4_per_hwmod,
 279	.slave		= &omap3xxx_uart3_hwmod,
 280	.clk		= "uart3_ick",
 281	.addr		= omap3xxx_uart3_addr_space,
 282	.user		= OCP_USER_MPU | OCP_USER_SDMA,
 283};
 284
 285/* L4 PER -> UART4 interface */
 286static struct omap_hwmod_addr_space omap3xxx_uart4_addr_space[] = {
 287	{
 288		.pa_start	= OMAP3_UART4_BASE,
 289		.pa_end		= OMAP3_UART4_BASE + SZ_1K - 1,
 290		.flags		= ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
 291	},
 292	{ }
 293};
 294
 295static struct omap_hwmod_ocp_if omap3_l4_per__uart4 = {
 296	.master		= &omap3xxx_l4_per_hwmod,
 297	.slave		= &omap3xxx_uart4_hwmod,
 298	.clk		= "uart4_ick",
 299	.addr		= omap3xxx_uart4_addr_space,
 300	.user		= OCP_USER_MPU | OCP_USER_SDMA,
 301};
 302
 303/* L4 CORE -> I2C1 interface */
 304static struct omap_hwmod_ocp_if omap3_l4_core__i2c1 = {
 305	.master		= &omap3xxx_l4_core_hwmod,
 306	.slave		= &omap3xxx_i2c1_hwmod,
 307	.clk		= "i2c1_ick",
 308	.addr		= omap2_i2c1_addr_space,
 309	.fw = {
 310		.omap2 = {
 311			.l4_fw_region  = OMAP3_L4_CORE_FW_I2C1_REGION,
 312			.l4_prot_group = 7,
 313			.flags	= OMAP_FIREWALL_L4,
 314		}
 315	},
 316	.user		= OCP_USER_MPU | OCP_USER_SDMA,
 317};
 318
 319/* L4 CORE -> I2C2 interface */
 320static struct omap_hwmod_ocp_if omap3_l4_core__i2c2 = {
 321	.master		= &omap3xxx_l4_core_hwmod,
 322	.slave		= &omap3xxx_i2c2_hwmod,
 323	.clk		= "i2c2_ick",
 324	.addr		= omap2_i2c2_addr_space,
 325	.fw = {
 326		.omap2 = {
 327			.l4_fw_region  = OMAP3_L4_CORE_FW_I2C2_REGION,
 328			.l4_prot_group = 7,
 329			.flags = OMAP_FIREWALL_L4,
 330		}
 331	},
 332	.user		= OCP_USER_MPU | OCP_USER_SDMA,
 333};
 334
 335/* L4 CORE -> I2C3 interface */
 336static struct omap_hwmod_addr_space omap3xxx_i2c3_addr_space[] = {
 337	{
 338		.pa_start	= 0x48060000,
 339		.pa_end		= 0x48060000 + SZ_128 - 1,
 340		.flags		= ADDR_TYPE_RT,
 341	},
 342	{ }
 343};
 344
 345static struct omap_hwmod_ocp_if omap3_l4_core__i2c3 = {
 346	.master		= &omap3xxx_l4_core_hwmod,
 347	.slave		= &omap3xxx_i2c3_hwmod,
 348	.clk		= "i2c3_ick",
 349	.addr		= omap3xxx_i2c3_addr_space,
 350	.fw = {
 351		.omap2 = {
 352			.l4_fw_region  = OMAP3_L4_CORE_FW_I2C3_REGION,
 353			.l4_prot_group = 7,
 354			.flags = OMAP_FIREWALL_L4,
 355		}
 356	},
 357	.user		= OCP_USER_MPU | OCP_USER_SDMA,
 358};
 359
 360/* L4 CORE -> SR1 interface */
 361static struct omap_hwmod_addr_space omap3_sr1_addr_space[] = {
 362	{
 363		.pa_start	= OMAP34XX_SR1_BASE,
 364		.pa_end		= OMAP34XX_SR1_BASE + SZ_1K - 1,
 365		.flags		= ADDR_TYPE_RT,
 366	},
 367	{ }
 368};
 369
 370static struct omap_hwmod_ocp_if omap3_l4_core__sr1 = {
 371	.master		= &omap3xxx_l4_core_hwmod,
 372	.slave		= &omap34xx_sr1_hwmod,
 373	.clk		= "sr_l4_ick",
 374	.addr		= omap3_sr1_addr_space,
 375	.user		= OCP_USER_MPU,
 376};
 377
 378/* L4 CORE -> SR1 interface */
 379static struct omap_hwmod_addr_space omap3_sr2_addr_space[] = {
 380	{
 381		.pa_start	= OMAP34XX_SR2_BASE,
 382		.pa_end		= OMAP34XX_SR2_BASE + SZ_1K - 1,
 383		.flags		= ADDR_TYPE_RT,
 384	},
 385	{ }
 386};
 387
 388static struct omap_hwmod_ocp_if omap3_l4_core__sr2 = {
 389	.master		= &omap3xxx_l4_core_hwmod,
 390	.slave		= &omap34xx_sr2_hwmod,
 391	.clk		= "sr_l4_ick",
 392	.addr		= omap3_sr2_addr_space,
 393	.user		= OCP_USER_MPU,
 394};
 395
 396/*
 397* usbhsotg interface data
 398*/
 399
 400static struct omap_hwmod_addr_space omap3xxx_usbhsotg_addrs[] = {
 401	{
 402		.pa_start	= OMAP34XX_HSUSB_OTG_BASE,
 403		.pa_end		= OMAP34XX_HSUSB_OTG_BASE + SZ_4K - 1,
 404		.flags		= ADDR_TYPE_RT
 405	},
 406	{ }
 407};
 408
 409/* l4_core -> usbhsotg  */
 410static struct omap_hwmod_ocp_if omap3xxx_l4_core__usbhsotg = {
 411	.master		= &omap3xxx_l4_core_hwmod,
 412	.slave		= &omap3xxx_usbhsotg_hwmod,
 413	.clk		= "l4_ick",
 414	.addr		= omap3xxx_usbhsotg_addrs,
 415	.user		= OCP_USER_MPU,
 416};
 417
 418static struct omap_hwmod_ocp_if *omap3xxx_usbhsotg_masters[] = {
 419	&omap3xxx_usbhsotg__l3,
 420};
 421
 422static struct omap_hwmod_ocp_if *omap3xxx_usbhsotg_slaves[] = {
 423	&omap3xxx_l4_core__usbhsotg,
 424};
 425
 426static struct omap_hwmod_addr_space am35xx_usbhsotg_addrs[] = {
 427	{
 428		.pa_start	= AM35XX_IPSS_USBOTGSS_BASE,
 429		.pa_end		= AM35XX_IPSS_USBOTGSS_BASE + SZ_4K - 1,
 430		.flags		= ADDR_TYPE_RT
 431	},
 432	{ }
 433};
 434
 435/* l4_core -> usbhsotg  */
 436static struct omap_hwmod_ocp_if am35xx_l4_core__usbhsotg = {
 437	.master		= &omap3xxx_l4_core_hwmod,
 438	.slave		= &am35xx_usbhsotg_hwmod,
 439	.clk		= "l4_ick",
 440	.addr		= am35xx_usbhsotg_addrs,
 441	.user		= OCP_USER_MPU,
 442};
 443
 444static struct omap_hwmod_ocp_if *am35xx_usbhsotg_masters[] = {
 445	&am35xx_usbhsotg__l3,
 446};
 447
 448static struct omap_hwmod_ocp_if *am35xx_usbhsotg_slaves[] = {
 449	&am35xx_l4_core__usbhsotg,
 450};
 451/* Slave interfaces on the L4_CORE interconnect */
 452static struct omap_hwmod_ocp_if *omap3xxx_l4_core_slaves[] = {
 453	&omap3xxx_l3_main__l4_core,
 454};
 455
 456/* L4 CORE */
 457static struct omap_hwmod omap3xxx_l4_core_hwmod = {
 458	.name		= "l4_core",
 459	.class		= &l4_hwmod_class,
 460	.slaves		= omap3xxx_l4_core_slaves,
 461	.slaves_cnt	= ARRAY_SIZE(omap3xxx_l4_core_slaves),
 462	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
 463	.flags		= HWMOD_NO_IDLEST,
 464};
 465
 466/* Slave interfaces on the L4_PER interconnect */
 467static struct omap_hwmod_ocp_if *omap3xxx_l4_per_slaves[] = {
 468	&omap3xxx_l3_main__l4_per,
 469};
 470
 471/* L4 PER */
 472static struct omap_hwmod omap3xxx_l4_per_hwmod = {
 473	.name		= "l4_per",
 474	.class		= &l4_hwmod_class,
 475	.slaves		= omap3xxx_l4_per_slaves,
 476	.slaves_cnt	= ARRAY_SIZE(omap3xxx_l4_per_slaves),
 477	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
 478	.flags		= HWMOD_NO_IDLEST,
 479};
 480
 481/* Slave interfaces on the L4_WKUP interconnect */
 482static struct omap_hwmod_ocp_if *omap3xxx_l4_wkup_slaves[] = {
 483	&omap3xxx_l4_core__l4_wkup,
 484};
 485
 486/* L4 WKUP */
 487static struct omap_hwmod omap3xxx_l4_wkup_hwmod = {
 488	.name		= "l4_wkup",
 489	.class		= &l4_hwmod_class,
 490	.slaves		= omap3xxx_l4_wkup_slaves,
 491	.slaves_cnt	= ARRAY_SIZE(omap3xxx_l4_wkup_slaves),
 492	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
 493	.flags		= HWMOD_NO_IDLEST,
 494};
 495
 496/* Master interfaces on the MPU device */
 497static struct omap_hwmod_ocp_if *omap3xxx_mpu_masters[] = {
 498	&omap3xxx_mpu__l3_main,
 
 
 499};
 500
 501/* MPU */
 
 502static struct omap_hwmod omap3xxx_mpu_hwmod = {
 503	.name		= "mpu",
 504	.class		= &mpu_hwmod_class,
 505	.main_clk	= "arm_fck",
 506	.masters	= omap3xxx_mpu_masters,
 507	.masters_cnt	= ARRAY_SIZE(omap3xxx_mpu_masters),
 508	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
 509};
 510
 511/*
 512 * IVA2_2 interface data
 513 */
 514
 515/* IVA2 <- L3 interface */
 516static struct omap_hwmod_ocp_if omap3xxx_l3__iva = {
 517	.master		= &omap3xxx_l3_main_hwmod,
 518	.slave		= &omap3xxx_iva_hwmod,
 519	.clk		= "iva2_ck",
 520	.user		= OCP_USER_MPU | OCP_USER_SDMA,
 521};
 522
 523static struct omap_hwmod_ocp_if *omap3xxx_iva_masters[] = {
 524	&omap3xxx_l3__iva,
 
 
 
 
 
 
 
 
 
 
 
 
 525};
 526
 527/*
 528 * IVA2 (IVA2)
 
 529 */
 530
 531static struct omap_hwmod omap3xxx_iva_hwmod = {
 532	.name		= "iva",
 533	.class		= &iva_hwmod_class,
 534	.masters	= omap3xxx_iva_masters,
 535	.masters_cnt	= ARRAY_SIZE(omap3xxx_iva_masters),
 536	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
 537};
 538
 539/* timer class */
 540static struct omap_hwmod_class_sysconfig omap3xxx_timer_1ms_sysc = {
 541	.rev_offs	= 0x0000,
 542	.sysc_offs	= 0x0010,
 543	.syss_offs	= 0x0014,
 544	.sysc_flags	= (SYSC_HAS_SIDLEMODE | SYSC_HAS_CLOCKACTIVITY |
 545				SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
 546				SYSC_HAS_EMUFREE | SYSC_HAS_AUTOIDLE),
 547	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
 548	.sysc_fields	= &omap_hwmod_sysc_type1,
 549};
 550
 551static struct omap_hwmod_class omap3xxx_timer_1ms_hwmod_class = {
 552	.name = "timer",
 553	.sysc = &omap3xxx_timer_1ms_sysc,
 554	.rev = OMAP_TIMER_IP_VERSION_1,
 555};
 556
 
 557static struct omap_hwmod_class_sysconfig omap3xxx_timer_sysc = {
 558	.rev_offs	= 0x0000,
 559	.sysc_offs	= 0x0010,
 560	.syss_offs	= 0x0014,
 561	.sysc_flags	= (SYSC_HAS_SIDLEMODE | SYSC_HAS_ENAWAKEUP |
 562			   SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
 
 
 563	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
 564	.sysc_fields	= &omap_hwmod_sysc_type1,
 565};
 566
 567static struct omap_hwmod_class omap3xxx_timer_hwmod_class = {
 568	.name = "timer",
 569	.sysc = &omap3xxx_timer_sysc,
 570	.rev =  OMAP_TIMER_IP_VERSION_1,
 571};
 572
 573/* timer1 */
 574static struct omap_hwmod omap3xxx_timer1_hwmod;
 575
 576static struct omap_hwmod_addr_space omap3xxx_timer1_addrs[] = {
 577	{
 578		.pa_start	= 0x48318000,
 579		.pa_end		= 0x48318000 + SZ_1K - 1,
 580		.flags		= ADDR_TYPE_RT
 581	},
 582	{ }
 583};
 584
 585/* l4_wkup -> timer1 */
 586static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__timer1 = {
 587	.master		= &omap3xxx_l4_wkup_hwmod,
 588	.slave		= &omap3xxx_timer1_hwmod,
 589	.clk		= "gpt1_ick",
 590	.addr		= omap3xxx_timer1_addrs,
 591	.user		= OCP_USER_MPU | OCP_USER_SDMA,
 592};
 593
 594/* timer1 slave port */
 595static struct omap_hwmod_ocp_if *omap3xxx_timer1_slaves[] = {
 596	&omap3xxx_l4_wkup__timer1,
 597};
 598
 599/* timer1 hwmod */
 600static struct omap_hwmod omap3xxx_timer1_hwmod = {
 601	.name		= "timer1",
 602	.mpu_irqs	= omap2_timer1_mpu_irqs,
 603	.main_clk	= "gpt1_fck",
 604	.prcm		= {
 605		.omap2 = {
 606			.prcm_reg_id = 1,
 607			.module_bit = OMAP3430_EN_GPT1_SHIFT,
 608			.module_offs = WKUP_MOD,
 609			.idlest_reg_id = 1,
 610			.idlest_idle_bit = OMAP3430_ST_GPT1_SHIFT,
 611		},
 612	},
 613	.slaves		= omap3xxx_timer1_slaves,
 614	.slaves_cnt	= ARRAY_SIZE(omap3xxx_timer1_slaves),
 615	.class		= &omap3xxx_timer_1ms_hwmod_class,
 616	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
 617};
 618
 619/* timer2 */
 620static struct omap_hwmod omap3xxx_timer2_hwmod;
 621
 622static struct omap_hwmod_addr_space omap3xxx_timer2_addrs[] = {
 623	{
 624		.pa_start	= 0x49032000,
 625		.pa_end		= 0x49032000 + SZ_1K - 1,
 626		.flags		= ADDR_TYPE_RT
 627	},
 628	{ }
 629};
 630
 631/* l4_per -> timer2 */
 632static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer2 = {
 633	.master		= &omap3xxx_l4_per_hwmod,
 634	.slave		= &omap3xxx_timer2_hwmod,
 635	.clk		= "gpt2_ick",
 636	.addr		= omap3xxx_timer2_addrs,
 637	.user		= OCP_USER_MPU | OCP_USER_SDMA,
 638};
 639
 640/* timer2 slave port */
 641static struct omap_hwmod_ocp_if *omap3xxx_timer2_slaves[] = {
 642	&omap3xxx_l4_per__timer2,
 643};
 644
 645/* timer2 hwmod */
 646static struct omap_hwmod omap3xxx_timer2_hwmod = {
 647	.name		= "timer2",
 648	.mpu_irqs	= omap2_timer2_mpu_irqs,
 649	.main_clk	= "gpt2_fck",
 650	.prcm		= {
 651		.omap2 = {
 652			.prcm_reg_id = 1,
 653			.module_bit = OMAP3430_EN_GPT2_SHIFT,
 654			.module_offs = OMAP3430_PER_MOD,
 655			.idlest_reg_id = 1,
 656			.idlest_idle_bit = OMAP3430_ST_GPT2_SHIFT,
 657		},
 658	},
 659	.slaves		= omap3xxx_timer2_slaves,
 660	.slaves_cnt	= ARRAY_SIZE(omap3xxx_timer2_slaves),
 661	.class		= &omap3xxx_timer_1ms_hwmod_class,
 662	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
 663};
 664
 665/* timer3 */
 666static struct omap_hwmod omap3xxx_timer3_hwmod;
 667
 668static struct omap_hwmod_addr_space omap3xxx_timer3_addrs[] = {
 669	{
 670		.pa_start	= 0x49034000,
 671		.pa_end		= 0x49034000 + SZ_1K - 1,
 672		.flags		= ADDR_TYPE_RT
 673	},
 674	{ }
 675};
 676
 677/* l4_per -> timer3 */
 678static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer3 = {
 679	.master		= &omap3xxx_l4_per_hwmod,
 680	.slave		= &omap3xxx_timer3_hwmod,
 681	.clk		= "gpt3_ick",
 682	.addr		= omap3xxx_timer3_addrs,
 683	.user		= OCP_USER_MPU | OCP_USER_SDMA,
 684};
 685
 686/* timer3 slave port */
 687static struct omap_hwmod_ocp_if *omap3xxx_timer3_slaves[] = {
 688	&omap3xxx_l4_per__timer3,
 689};
 690
 691/* timer3 hwmod */
 692static struct omap_hwmod omap3xxx_timer3_hwmod = {
 693	.name		= "timer3",
 694	.mpu_irqs	= omap2_timer3_mpu_irqs,
 695	.main_clk	= "gpt3_fck",
 696	.prcm		= {
 697		.omap2 = {
 698			.prcm_reg_id = 1,
 699			.module_bit = OMAP3430_EN_GPT3_SHIFT,
 700			.module_offs = OMAP3430_PER_MOD,
 701			.idlest_reg_id = 1,
 702			.idlest_idle_bit = OMAP3430_ST_GPT3_SHIFT,
 703		},
 704	},
 705	.slaves		= omap3xxx_timer3_slaves,
 706	.slaves_cnt	= ARRAY_SIZE(omap3xxx_timer3_slaves),
 707	.class		= &omap3xxx_timer_hwmod_class,
 708	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
 709};
 710
 711/* timer4 */
 712static struct omap_hwmod omap3xxx_timer4_hwmod;
 713
 714static struct omap_hwmod_addr_space omap3xxx_timer4_addrs[] = {
 715	{
 716		.pa_start	= 0x49036000,
 717		.pa_end		= 0x49036000 + SZ_1K - 1,
 718		.flags		= ADDR_TYPE_RT
 719	},
 720	{ }
 721};
 722
 723/* l4_per -> timer4 */
 724static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer4 = {
 725	.master		= &omap3xxx_l4_per_hwmod,
 726	.slave		= &omap3xxx_timer4_hwmod,
 727	.clk		= "gpt4_ick",
 728	.addr		= omap3xxx_timer4_addrs,
 729	.user		= OCP_USER_MPU | OCP_USER_SDMA,
 730};
 731
 732/* timer4 slave port */
 733static struct omap_hwmod_ocp_if *omap3xxx_timer4_slaves[] = {
 734	&omap3xxx_l4_per__timer4,
 735};
 736
 737/* timer4 hwmod */
 738static struct omap_hwmod omap3xxx_timer4_hwmod = {
 739	.name		= "timer4",
 740	.mpu_irqs	= omap2_timer4_mpu_irqs,
 741	.main_clk	= "gpt4_fck",
 742	.prcm		= {
 743		.omap2 = {
 744			.prcm_reg_id = 1,
 745			.module_bit = OMAP3430_EN_GPT4_SHIFT,
 746			.module_offs = OMAP3430_PER_MOD,
 747			.idlest_reg_id = 1,
 748			.idlest_idle_bit = OMAP3430_ST_GPT4_SHIFT,
 749		},
 750	},
 751	.slaves		= omap3xxx_timer4_slaves,
 752	.slaves_cnt	= ARRAY_SIZE(omap3xxx_timer4_slaves),
 753	.class		= &omap3xxx_timer_hwmod_class,
 754	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
 755};
 756
 757/* timer5 */
 758static struct omap_hwmod omap3xxx_timer5_hwmod;
 759
 760static struct omap_hwmod_addr_space omap3xxx_timer5_addrs[] = {
 761	{
 762		.pa_start	= 0x49038000,
 763		.pa_end		= 0x49038000 + SZ_1K - 1,
 764		.flags		= ADDR_TYPE_RT
 765	},
 766	{ }
 767};
 768
 769/* l4_per -> timer5 */
 770static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer5 = {
 771	.master		= &omap3xxx_l4_per_hwmod,
 772	.slave		= &omap3xxx_timer5_hwmod,
 773	.clk		= "gpt5_ick",
 774	.addr		= omap3xxx_timer5_addrs,
 775	.user		= OCP_USER_MPU | OCP_USER_SDMA,
 776};
 777
 778/* timer5 slave port */
 779static struct omap_hwmod_ocp_if *omap3xxx_timer5_slaves[] = {
 780	&omap3xxx_l4_per__timer5,
 781};
 782
 783/* timer5 hwmod */
 784static struct omap_hwmod omap3xxx_timer5_hwmod = {
 785	.name		= "timer5",
 786	.mpu_irqs	= omap2_timer5_mpu_irqs,
 787	.main_clk	= "gpt5_fck",
 788	.prcm		= {
 789		.omap2 = {
 790			.prcm_reg_id = 1,
 791			.module_bit = OMAP3430_EN_GPT5_SHIFT,
 792			.module_offs = OMAP3430_PER_MOD,
 793			.idlest_reg_id = 1,
 794			.idlest_idle_bit = OMAP3430_ST_GPT5_SHIFT,
 795		},
 796	},
 797	.slaves		= omap3xxx_timer5_slaves,
 798	.slaves_cnt	= ARRAY_SIZE(omap3xxx_timer5_slaves),
 799	.class		= &omap3xxx_timer_hwmod_class,
 800	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
 801};
 802
 803/* timer6 */
 804static struct omap_hwmod omap3xxx_timer6_hwmod;
 805
 806static struct omap_hwmod_addr_space omap3xxx_timer6_addrs[] = {
 807	{
 808		.pa_start	= 0x4903A000,
 809		.pa_end		= 0x4903A000 + SZ_1K - 1,
 810		.flags		= ADDR_TYPE_RT
 811	},
 812	{ }
 813};
 814
 815/* l4_per -> timer6 */
 816static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer6 = {
 817	.master		= &omap3xxx_l4_per_hwmod,
 818	.slave		= &omap3xxx_timer6_hwmod,
 819	.clk		= "gpt6_ick",
 820	.addr		= omap3xxx_timer6_addrs,
 821	.user		= OCP_USER_MPU | OCP_USER_SDMA,
 822};
 823
 824/* timer6 slave port */
 825static struct omap_hwmod_ocp_if *omap3xxx_timer6_slaves[] = {
 826	&omap3xxx_l4_per__timer6,
 827};
 828
 829/* timer6 hwmod */
 830static struct omap_hwmod omap3xxx_timer6_hwmod = {
 831	.name		= "timer6",
 832	.mpu_irqs	= omap2_timer6_mpu_irqs,
 833	.main_clk	= "gpt6_fck",
 834	.prcm		= {
 835		.omap2 = {
 836			.prcm_reg_id = 1,
 837			.module_bit = OMAP3430_EN_GPT6_SHIFT,
 838			.module_offs = OMAP3430_PER_MOD,
 839			.idlest_reg_id = 1,
 840			.idlest_idle_bit = OMAP3430_ST_GPT6_SHIFT,
 841		},
 842	},
 843	.slaves		= omap3xxx_timer6_slaves,
 844	.slaves_cnt	= ARRAY_SIZE(omap3xxx_timer6_slaves),
 845	.class		= &omap3xxx_timer_hwmod_class,
 846	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
 847};
 848
 849/* timer7 */
 850static struct omap_hwmod omap3xxx_timer7_hwmod;
 851
 852static struct omap_hwmod_addr_space omap3xxx_timer7_addrs[] = {
 853	{
 854		.pa_start	= 0x4903C000,
 855		.pa_end		= 0x4903C000 + SZ_1K - 1,
 856		.flags		= ADDR_TYPE_RT
 857	},
 858	{ }
 859};
 860
 861/* l4_per -> timer7 */
 862static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer7 = {
 863	.master		= &omap3xxx_l4_per_hwmod,
 864	.slave		= &omap3xxx_timer7_hwmod,
 865	.clk		= "gpt7_ick",
 866	.addr		= omap3xxx_timer7_addrs,
 867	.user		= OCP_USER_MPU | OCP_USER_SDMA,
 868};
 869
 870/* timer7 slave port */
 871static struct omap_hwmod_ocp_if *omap3xxx_timer7_slaves[] = {
 872	&omap3xxx_l4_per__timer7,
 873};
 874
 875/* timer7 hwmod */
 876static struct omap_hwmod omap3xxx_timer7_hwmod = {
 877	.name		= "timer7",
 878	.mpu_irqs	= omap2_timer7_mpu_irqs,
 879	.main_clk	= "gpt7_fck",
 880	.prcm		= {
 881		.omap2 = {
 882			.prcm_reg_id = 1,
 883			.module_bit = OMAP3430_EN_GPT7_SHIFT,
 884			.module_offs = OMAP3430_PER_MOD,
 885			.idlest_reg_id = 1,
 886			.idlest_idle_bit = OMAP3430_ST_GPT7_SHIFT,
 887		},
 888	},
 889	.slaves		= omap3xxx_timer7_slaves,
 890	.slaves_cnt	= ARRAY_SIZE(omap3xxx_timer7_slaves),
 891	.class		= &omap3xxx_timer_hwmod_class,
 892	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
 893};
 894
 895/* timer8 */
 896static struct omap_hwmod omap3xxx_timer8_hwmod;
 897
 898static struct omap_hwmod_addr_space omap3xxx_timer8_addrs[] = {
 899	{
 900		.pa_start	= 0x4903E000,
 901		.pa_end		= 0x4903E000 + SZ_1K - 1,
 902		.flags		= ADDR_TYPE_RT
 903	},
 904	{ }
 905};
 906
 907/* l4_per -> timer8 */
 908static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer8 = {
 909	.master		= &omap3xxx_l4_per_hwmod,
 910	.slave		= &omap3xxx_timer8_hwmod,
 911	.clk		= "gpt8_ick",
 912	.addr		= omap3xxx_timer8_addrs,
 913	.user		= OCP_USER_MPU | OCP_USER_SDMA,
 914};
 915
 916/* timer8 slave port */
 917static struct omap_hwmod_ocp_if *omap3xxx_timer8_slaves[] = {
 918	&omap3xxx_l4_per__timer8,
 919};
 920
 921/* timer8 hwmod */
 922static struct omap_hwmod omap3xxx_timer8_hwmod = {
 923	.name		= "timer8",
 924	.mpu_irqs	= omap2_timer8_mpu_irqs,
 925	.main_clk	= "gpt8_fck",
 926	.prcm		= {
 927		.omap2 = {
 928			.prcm_reg_id = 1,
 929			.module_bit = OMAP3430_EN_GPT8_SHIFT,
 930			.module_offs = OMAP3430_PER_MOD,
 931			.idlest_reg_id = 1,
 932			.idlest_idle_bit = OMAP3430_ST_GPT8_SHIFT,
 933		},
 934	},
 935	.slaves		= omap3xxx_timer8_slaves,
 936	.slaves_cnt	= ARRAY_SIZE(omap3xxx_timer8_slaves),
 937	.class		= &omap3xxx_timer_hwmod_class,
 938	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
 939};
 940
 941/* timer9 */
 942static struct omap_hwmod omap3xxx_timer9_hwmod;
 943
 944static struct omap_hwmod_addr_space omap3xxx_timer9_addrs[] = {
 945	{
 946		.pa_start	= 0x49040000,
 947		.pa_end		= 0x49040000 + SZ_1K - 1,
 948		.flags		= ADDR_TYPE_RT
 949	},
 950	{ }
 951};
 952
 953/* l4_per -> timer9 */
 954static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer9 = {
 955	.master		= &omap3xxx_l4_per_hwmod,
 956	.slave		= &omap3xxx_timer9_hwmod,
 957	.clk		= "gpt9_ick",
 958	.addr		= omap3xxx_timer9_addrs,
 959	.user		= OCP_USER_MPU | OCP_USER_SDMA,
 960};
 961
 962/* timer9 slave port */
 963static struct omap_hwmod_ocp_if *omap3xxx_timer9_slaves[] = {
 964	&omap3xxx_l4_per__timer9,
 965};
 966
 967/* timer9 hwmod */
 968static struct omap_hwmod omap3xxx_timer9_hwmod = {
 969	.name		= "timer9",
 970	.mpu_irqs	= omap2_timer9_mpu_irqs,
 971	.main_clk	= "gpt9_fck",
 972	.prcm		= {
 973		.omap2 = {
 974			.prcm_reg_id = 1,
 975			.module_bit = OMAP3430_EN_GPT9_SHIFT,
 976			.module_offs = OMAP3430_PER_MOD,
 977			.idlest_reg_id = 1,
 978			.idlest_idle_bit = OMAP3430_ST_GPT9_SHIFT,
 979		},
 980	},
 981	.slaves		= omap3xxx_timer9_slaves,
 982	.slaves_cnt	= ARRAY_SIZE(omap3xxx_timer9_slaves),
 983	.class		= &omap3xxx_timer_hwmod_class,
 984	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
 985};
 986
 987/* timer10 */
 988static struct omap_hwmod omap3xxx_timer10_hwmod;
 989
 990/* l4_core -> timer10 */
 991static struct omap_hwmod_ocp_if omap3xxx_l4_core__timer10 = {
 992	.master		= &omap3xxx_l4_core_hwmod,
 993	.slave		= &omap3xxx_timer10_hwmod,
 994	.clk		= "gpt10_ick",
 995	.addr		= omap2_timer10_addrs,
 996	.user		= OCP_USER_MPU | OCP_USER_SDMA,
 997};
 998
 999/* timer10 slave port */
1000static struct omap_hwmod_ocp_if *omap3xxx_timer10_slaves[] = {
1001	&omap3xxx_l4_core__timer10,
1002};
1003
1004/* timer10 hwmod */
1005static struct omap_hwmod omap3xxx_timer10_hwmod = {
1006	.name		= "timer10",
1007	.mpu_irqs	= omap2_timer10_mpu_irqs,
1008	.main_clk	= "gpt10_fck",
1009	.prcm		= {
1010		.omap2 = {
1011			.prcm_reg_id = 1,
1012			.module_bit = OMAP3430_EN_GPT10_SHIFT,
1013			.module_offs = CORE_MOD,
1014			.idlest_reg_id = 1,
1015			.idlest_idle_bit = OMAP3430_ST_GPT10_SHIFT,
1016		},
1017	},
1018	.slaves		= omap3xxx_timer10_slaves,
1019	.slaves_cnt	= ARRAY_SIZE(omap3xxx_timer10_slaves),
1020	.class		= &omap3xxx_timer_1ms_hwmod_class,
1021	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
1022};
1023
1024/* timer11 */
1025static struct omap_hwmod omap3xxx_timer11_hwmod;
1026
1027/* l4_core -> timer11 */
1028static struct omap_hwmod_ocp_if omap3xxx_l4_core__timer11 = {
1029	.master		= &omap3xxx_l4_core_hwmod,
1030	.slave		= &omap3xxx_timer11_hwmod,
1031	.clk		= "gpt11_ick",
1032	.addr		= omap2_timer11_addrs,
1033	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1034};
1035
1036/* timer11 slave port */
1037static struct omap_hwmod_ocp_if *omap3xxx_timer11_slaves[] = {
1038	&omap3xxx_l4_core__timer11,
1039};
1040
1041/* timer11 hwmod */
1042static struct omap_hwmod omap3xxx_timer11_hwmod = {
1043	.name		= "timer11",
1044	.mpu_irqs	= omap2_timer11_mpu_irqs,
1045	.main_clk	= "gpt11_fck",
1046	.prcm		= {
1047		.omap2 = {
1048			.prcm_reg_id = 1,
1049			.module_bit = OMAP3430_EN_GPT11_SHIFT,
1050			.module_offs = CORE_MOD,
1051			.idlest_reg_id = 1,
1052			.idlest_idle_bit = OMAP3430_ST_GPT11_SHIFT,
1053		},
1054	},
1055	.slaves		= omap3xxx_timer11_slaves,
1056	.slaves_cnt	= ARRAY_SIZE(omap3xxx_timer11_slaves),
1057	.class		= &omap3xxx_timer_hwmod_class,
1058	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
1059};
1060
1061/* timer12*/
1062static struct omap_hwmod omap3xxx_timer12_hwmod;
1063static struct omap_hwmod_irq_info omap3xxx_timer12_mpu_irqs[] = {
1064	{ .irq = 95, },
1065	{ .irq = -1 }
1066};
1067
1068static struct omap_hwmod_addr_space omap3xxx_timer12_addrs[] = {
1069	{
1070		.pa_start	= 0x48304000,
1071		.pa_end		= 0x48304000 + SZ_1K - 1,
1072		.flags		= ADDR_TYPE_RT
1073	},
1074	{ }
1075};
1076
1077/* l4_core -> timer12 */
1078static struct omap_hwmod_ocp_if omap3xxx_l4_core__timer12 = {
1079	.master		= &omap3xxx_l4_core_hwmod,
1080	.slave		= &omap3xxx_timer12_hwmod,
1081	.clk		= "gpt12_ick",
1082	.addr		= omap3xxx_timer12_addrs,
1083	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1084};
1085
1086/* timer12 slave port */
1087static struct omap_hwmod_ocp_if *omap3xxx_timer12_slaves[] = {
1088	&omap3xxx_l4_core__timer12,
1089};
1090
1091/* timer12 hwmod */
1092static struct omap_hwmod omap3xxx_timer12_hwmod = {
1093	.name		= "timer12",
1094	.mpu_irqs	= omap3xxx_timer12_mpu_irqs,
1095	.main_clk	= "gpt12_fck",
1096	.prcm		= {
1097		.omap2 = {
1098			.prcm_reg_id = 1,
1099			.module_bit = OMAP3430_EN_GPT12_SHIFT,
1100			.module_offs = WKUP_MOD,
1101			.idlest_reg_id = 1,
1102			.idlest_idle_bit = OMAP3430_ST_GPT12_SHIFT,
1103		},
1104	},
1105	.slaves		= omap3xxx_timer12_slaves,
1106	.slaves_cnt	= ARRAY_SIZE(omap3xxx_timer12_slaves),
1107	.class		= &omap3xxx_timer_hwmod_class,
1108	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
1109};
1110
1111/* l4_wkup -> wd_timer2 */
1112static struct omap_hwmod_addr_space omap3xxx_wd_timer2_addrs[] = {
1113	{
1114		.pa_start	= 0x48314000,
1115		.pa_end		= 0x4831407f,
1116		.flags		= ADDR_TYPE_RT
1117	},
1118	{ }
1119};
1120
1121static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__wd_timer2 = {
1122	.master		= &omap3xxx_l4_wkup_hwmod,
1123	.slave		= &omap3xxx_wd_timer2_hwmod,
1124	.clk		= "wdt2_ick",
1125	.addr		= omap3xxx_wd_timer2_addrs,
1126	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1127};
1128
1129/*
1130 * 'wd_timer' class
1131 * 32-bit watchdog upward counter that generates a pulse on the reset pin on
1132 * overflow condition
1133 */
1134
1135static struct omap_hwmod_class_sysconfig omap3xxx_wd_timer_sysc = {
1136	.rev_offs	= 0x0000,
1137	.sysc_offs	= 0x0010,
1138	.syss_offs	= 0x0014,
1139	.sysc_flags	= (SYSC_HAS_SIDLEMODE | SYSC_HAS_EMUFREE |
1140			   SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
1141			   SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
1142			   SYSS_HAS_RESET_STATUS),
1143	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1144	.sysc_fields    = &omap_hwmod_sysc_type1,
1145};
1146
1147/* I2C common */
1148static struct omap_hwmod_class_sysconfig i2c_sysc = {
1149	.rev_offs	= 0x00,
1150	.sysc_offs	= 0x20,
1151	.syss_offs	= 0x10,
1152	.sysc_flags	= (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
1153			   SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
1154			   SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
1155	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1156	.sysc_fields    = &omap_hwmod_sysc_type1,
1157};
1158
1159static struct omap_hwmod_class omap3xxx_wd_timer_hwmod_class = {
1160	.name		= "wd_timer",
1161	.sysc		= &omap3xxx_wd_timer_sysc,
1162	.pre_shutdown	= &omap2_wd_timer_disable
1163};
1164
1165/* wd_timer2 */
1166static struct omap_hwmod_ocp_if *omap3xxx_wd_timer2_slaves[] = {
1167	&omap3xxx_l4_wkup__wd_timer2,
1168};
1169
1170static struct omap_hwmod omap3xxx_wd_timer2_hwmod = {
1171	.name		= "wd_timer2",
1172	.class		= &omap3xxx_wd_timer_hwmod_class,
1173	.main_clk	= "wdt2_fck",
1174	.prcm		= {
1175		.omap2 = {
1176			.prcm_reg_id = 1,
1177			.module_bit = OMAP3430_EN_WDT2_SHIFT,
1178			.module_offs = WKUP_MOD,
1179			.idlest_reg_id = 1,
1180			.idlest_idle_bit = OMAP3430_ST_WDT2_SHIFT,
1181		},
1182	},
1183	.slaves		= omap3xxx_wd_timer2_slaves,
1184	.slaves_cnt	= ARRAY_SIZE(omap3xxx_wd_timer2_slaves),
1185	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
1186	/*
1187	 * XXX: Use software supervised mode, HW supervised smartidle seems to
1188	 * block CORE power domain idle transitions. Maybe a HW bug in wdt2?
1189	 */
1190	.flags		= HWMOD_SWSUP_SIDLE,
1191};
1192
1193/* UART1 */
1194
1195static struct omap_hwmod_ocp_if *omap3xxx_uart1_slaves[] = {
1196	&omap3_l4_core__uart1,
1197};
1198
1199static struct omap_hwmod omap3xxx_uart1_hwmod = {
1200	.name		= "uart1",
1201	.mpu_irqs	= omap2_uart1_mpu_irqs,
1202	.sdma_reqs	= omap2_uart1_sdma_reqs,
1203	.main_clk	= "uart1_fck",
 
1204	.prcm		= {
1205		.omap2 = {
1206			.module_offs = CORE_MOD,
1207			.prcm_reg_id = 1,
1208			.module_bit = OMAP3430_EN_UART1_SHIFT,
1209			.idlest_reg_id = 1,
1210			.idlest_idle_bit = OMAP3430_EN_UART1_SHIFT,
1211		},
1212	},
1213	.slaves		= omap3xxx_uart1_slaves,
1214	.slaves_cnt	= ARRAY_SIZE(omap3xxx_uart1_slaves),
1215	.class		= &omap2_uart_class,
1216	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
1217};
1218
1219/* UART2 */
1220
1221static struct omap_hwmod_ocp_if *omap3xxx_uart2_slaves[] = {
1222	&omap3_l4_core__uart2,
1223};
1224
1225static struct omap_hwmod omap3xxx_uart2_hwmod = {
1226	.name		= "uart2",
1227	.mpu_irqs	= omap2_uart2_mpu_irqs,
1228	.sdma_reqs	= omap2_uart2_sdma_reqs,
1229	.main_clk	= "uart2_fck",
 
1230	.prcm		= {
1231		.omap2 = {
1232			.module_offs = CORE_MOD,
1233			.prcm_reg_id = 1,
1234			.module_bit = OMAP3430_EN_UART2_SHIFT,
1235			.idlest_reg_id = 1,
1236			.idlest_idle_bit = OMAP3430_EN_UART2_SHIFT,
1237		},
1238	},
1239	.slaves		= omap3xxx_uart2_slaves,
1240	.slaves_cnt	= ARRAY_SIZE(omap3xxx_uart2_slaves),
1241	.class		= &omap2_uart_class,
1242	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
1243};
1244
1245/* UART3 */
1246
1247static struct omap_hwmod_ocp_if *omap3xxx_uart3_slaves[] = {
1248	&omap3_l4_per__uart3,
1249};
1250
1251static struct omap_hwmod omap3xxx_uart3_hwmod = {
1252	.name		= "uart3",
1253	.mpu_irqs	= omap2_uart3_mpu_irqs,
1254	.sdma_reqs	= omap2_uart3_sdma_reqs,
1255	.main_clk	= "uart3_fck",
 
 
1256	.prcm		= {
1257		.omap2 = {
1258			.module_offs = OMAP3430_PER_MOD,
1259			.prcm_reg_id = 1,
1260			.module_bit = OMAP3430_EN_UART3_SHIFT,
1261			.idlest_reg_id = 1,
1262			.idlest_idle_bit = OMAP3430_EN_UART3_SHIFT,
1263		},
1264	},
1265	.slaves		= omap3xxx_uart3_slaves,
1266	.slaves_cnt	= ARRAY_SIZE(omap3xxx_uart3_slaves),
1267	.class		= &omap2_uart_class,
1268	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
1269};
1270
1271/* UART4 */
1272
1273static struct omap_hwmod_irq_info uart4_mpu_irqs[] = {
1274	{ .irq = INT_36XX_UART4_IRQ, },
1275	{ .irq = -1 }
1276};
1277
1278static struct omap_hwmod_dma_info uart4_sdma_reqs[] = {
1279	{ .name = "rx",	.dma_req = OMAP36XX_DMA_UART4_RX, },
1280	{ .name = "tx",	.dma_req = OMAP36XX_DMA_UART4_TX, },
1281	{ .dma_req = -1 }
1282};
1283
1284static struct omap_hwmod_ocp_if *omap3xxx_uart4_slaves[] = {
1285	&omap3_l4_per__uart4,
1286};
1287
1288static struct omap_hwmod omap3xxx_uart4_hwmod = {
1289	.name		= "uart4",
1290	.mpu_irqs	= uart4_mpu_irqs,
1291	.sdma_reqs	= uart4_sdma_reqs,
1292	.main_clk	= "uart4_fck",
 
1293	.prcm		= {
1294		.omap2 = {
1295			.module_offs = OMAP3430_PER_MOD,
1296			.prcm_reg_id = 1,
1297			.module_bit = OMAP3630_EN_UART4_SHIFT,
1298			.idlest_reg_id = 1,
1299			.idlest_idle_bit = OMAP3630_EN_UART4_SHIFT,
1300		},
1301	},
1302	.slaves		= omap3xxx_uart4_slaves,
1303	.slaves_cnt	= ARRAY_SIZE(omap3xxx_uart4_slaves),
1304	.class		= &omap2_uart_class,
1305	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3630ES1),
1306};
1307
1308static struct omap_hwmod_class i2c_class = {
1309	.name	= "i2c",
1310	.sysc	= &i2c_sysc,
1311	.rev	= OMAP_I2C_IP_VERSION_1,
1312	.reset	= &omap_i2c_reset,
1313};
1314
1315static struct omap_hwmod_dma_info omap3xxx_dss_sdma_chs[] = {
1316	{ .name = "dispc", .dma_req = 5 },
1317	{ .name = "dsi1", .dma_req = 74 },
1318	{ .dma_req = -1 }
1319};
1320
1321/* dss */
1322/* dss master ports */
1323static struct omap_hwmod_ocp_if *omap3xxx_dss_masters[] = {
1324	&omap3xxx_dss__l3,
 
 
 
 
 
 
 
 
1325};
1326
1327/* l4_core -> dss */
1328static struct omap_hwmod_ocp_if omap3430es1_l4_core__dss = {
1329	.master		= &omap3xxx_l4_core_hwmod,
1330	.slave		= &omap3430es1_dss_core_hwmod,
1331	.clk		= "dss_ick",
1332	.addr		= omap2_dss_addrs,
1333	.fw = {
1334		.omap2 = {
1335			.l4_fw_region  = OMAP3ES1_L4_CORE_FW_DSS_CORE_REGION,
1336			.l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
1337			.flags	= OMAP_FIREWALL_L4,
1338		}
1339	},
1340	.user		= OCP_USER_MPU | OCP_USER_SDMA,
 
 
 
1341};
1342
1343static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss = {
1344	.master		= &omap3xxx_l4_core_hwmod,
1345	.slave		= &omap3xxx_dss_core_hwmod,
1346	.clk		= "dss_ick",
1347	.addr		= omap2_dss_addrs,
1348	.fw = {
1349		.omap2 = {
1350			.l4_fw_region  = OMAP3_L4_CORE_FW_DSS_CORE_REGION,
1351			.l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
1352			.flags	= OMAP_FIREWALL_L4,
1353		}
1354	},
1355	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1356};
1357
1358/* dss slave ports */
1359static struct omap_hwmod_ocp_if *omap3430es1_dss_slaves[] = {
1360	&omap3430es1_l4_core__dss,
1361};
1362
1363static struct omap_hwmod_ocp_if *omap3xxx_dss_slaves[] = {
1364	&omap3xxx_l4_core__dss,
1365};
1366
 
1367static struct omap_hwmod_opt_clk dss_opt_clks[] = {
 
 
 
 
 
1368	{ .role = "tv_clk", .clk = "dss_tv_fck" },
1369	{ .role = "video_clk", .clk = "dss_96m_fck" },
1370	{ .role = "sys_clk", .clk = "dss2_alwon_fck" },
1371};
1372
1373static struct omap_hwmod omap3430es1_dss_core_hwmod = {
1374	.name		= "dss_core",
1375	.class		= &omap2_dss_hwmod_class,
1376	.main_clk	= "dss1_alwon_fck", /* instead of dss_fck */
1377	.sdma_reqs	= omap3xxx_dss_sdma_chs,
1378	.prcm		= {
1379		.omap2 = {
1380			.prcm_reg_id = 1,
1381			.module_bit = OMAP3430_EN_DSS1_SHIFT,
1382			.module_offs = OMAP3430_DSS_MOD,
1383			.idlest_reg_id = 1,
1384			.idlest_stdby_bit = OMAP3430ES1_ST_DSS_SHIFT,
1385		},
1386	},
1387	.opt_clks	= dss_opt_clks,
1388	.opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
1389	.slaves		= omap3430es1_dss_slaves,
1390	.slaves_cnt	= ARRAY_SIZE(omap3430es1_dss_slaves),
1391	.masters	= omap3xxx_dss_masters,
1392	.masters_cnt	= ARRAY_SIZE(omap3xxx_dss_masters),
1393	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES1),
1394	.flags		= HWMOD_NO_IDLEST,
1395};
1396
1397static struct omap_hwmod omap3xxx_dss_core_hwmod = {
1398	.name		= "dss_core",
 
1399	.class		= &omap2_dss_hwmod_class,
1400	.main_clk	= "dss1_alwon_fck", /* instead of dss_fck */
1401	.sdma_reqs	= omap3xxx_dss_sdma_chs,
1402	.prcm		= {
1403		.omap2 = {
1404			.prcm_reg_id = 1,
1405			.module_bit = OMAP3430_EN_DSS1_SHIFT,
1406			.module_offs = OMAP3430_DSS_MOD,
1407			.idlest_reg_id = 1,
1408			.idlest_idle_bit = OMAP3430ES2_ST_DSS_IDLE_SHIFT,
1409			.idlest_stdby_bit = OMAP3430ES2_ST_DSS_STDBY_SHIFT,
1410		},
1411	},
1412	.opt_clks	= dss_opt_clks,
1413	.opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
1414	.slaves		= omap3xxx_dss_slaves,
1415	.slaves_cnt	= ARRAY_SIZE(omap3xxx_dss_slaves),
1416	.masters	= omap3xxx_dss_masters,
1417	.masters_cnt	= ARRAY_SIZE(omap3xxx_dss_masters),
1418	.omap_chip	= OMAP_CHIP_INIT(CHIP_GE_OMAP3430ES2 |
1419				CHIP_IS_OMAP3630ES1 | CHIP_GE_OMAP3630ES1_1),
1420};
1421
1422/* l4_core -> dss_dispc */
1423static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_dispc = {
1424	.master		= &omap3xxx_l4_core_hwmod,
1425	.slave		= &omap3xxx_dss_dispc_hwmod,
1426	.clk		= "dss_ick",
1427	.addr		= omap2_dss_dispc_addrs,
1428	.fw = {
1429		.omap2 = {
1430			.l4_fw_region  = OMAP3_L4_CORE_FW_DSS_DISPC_REGION,
1431			.l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
1432			.flags	= OMAP_FIREWALL_L4,
1433		}
1434	},
1435	.user		= OCP_USER_MPU | OCP_USER_SDMA,
 
1436};
1437
1438/* dss_dispc slave ports */
1439static struct omap_hwmod_ocp_if *omap3xxx_dss_dispc_slaves[] = {
1440	&omap3xxx_l4_core__dss_dispc,
1441};
1442
1443static struct omap_hwmod omap3xxx_dss_dispc_hwmod = {
1444	.name		= "dss_dispc",
1445	.class		= &omap2_dispc_hwmod_class,
1446	.mpu_irqs	= omap2_dispc_irqs,
1447	.main_clk	= "dss1_alwon_fck",
1448	.prcm		= {
1449		.omap2 = {
1450			.prcm_reg_id = 1,
1451			.module_bit = OMAP3430_EN_DSS1_SHIFT,
1452			.module_offs = OMAP3430_DSS_MOD,
1453		},
1454	},
1455	.slaves		= omap3xxx_dss_dispc_slaves,
1456	.slaves_cnt	= ARRAY_SIZE(omap3xxx_dss_dispc_slaves),
1457	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES1 |
1458				CHIP_GE_OMAP3430ES2 | CHIP_IS_OMAP3630ES1 |
1459				CHIP_GE_OMAP3630ES1_1),
1460	.flags		= HWMOD_NO_IDLEST,
 
1461};
1462
1463/*
1464 * 'dsi' class
1465 * display serial interface controller
1466 */
1467
 
 
 
 
 
 
 
 
 
 
 
1468static struct omap_hwmod_class omap3xxx_dsi_hwmod_class = {
1469	.name = "dsi",
1470};
1471
1472static struct omap_hwmod_irq_info omap3xxx_dsi1_irqs[] = {
1473	{ .irq = 25 },
1474	{ .irq = -1 }
1475};
1476
1477/* dss_dsi1 */
1478static struct omap_hwmod_addr_space omap3xxx_dss_dsi1_addrs[] = {
1479	{
1480		.pa_start	= 0x4804FC00,
1481		.pa_end		= 0x4804FFFF,
1482		.flags		= ADDR_TYPE_RT
1483	},
1484	{ }
1485};
1486
1487/* l4_core -> dss_dsi1 */
1488static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_dsi1 = {
1489	.master		= &omap3xxx_l4_core_hwmod,
1490	.slave		= &omap3xxx_dss_dsi1_hwmod,
1491	.addr		= omap3xxx_dss_dsi1_addrs,
1492	.fw = {
1493		.omap2 = {
1494			.l4_fw_region  = OMAP3_L4_CORE_FW_DSS_DSI_REGION,
1495			.l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
1496			.flags	= OMAP_FIREWALL_L4,
1497		}
1498	},
1499	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1500};
1501
1502/* dss_dsi1 slave ports */
1503static struct omap_hwmod_ocp_if *omap3xxx_dss_dsi1_slaves[] = {
1504	&omap3xxx_l4_core__dss_dsi1,
1505};
1506
1507static struct omap_hwmod omap3xxx_dss_dsi1_hwmod = {
1508	.name		= "dss_dsi1",
1509	.class		= &omap3xxx_dsi_hwmod_class,
1510	.mpu_irqs	= omap3xxx_dsi1_irqs,
1511	.main_clk	= "dss1_alwon_fck",
1512	.prcm		= {
1513		.omap2 = {
1514			.prcm_reg_id = 1,
1515			.module_bit = OMAP3430_EN_DSS1_SHIFT,
1516			.module_offs = OMAP3430_DSS_MOD,
1517		},
1518	},
1519	.slaves		= omap3xxx_dss_dsi1_slaves,
1520	.slaves_cnt	= ARRAY_SIZE(omap3xxx_dss_dsi1_slaves),
1521	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES1 |
1522				CHIP_GE_OMAP3430ES2 | CHIP_IS_OMAP3630ES1 |
1523				CHIP_GE_OMAP3630ES1_1),
1524	.flags		= HWMOD_NO_IDLEST,
1525};
1526
1527/* l4_core -> dss_rfbi */
1528static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_rfbi = {
1529	.master		= &omap3xxx_l4_core_hwmod,
1530	.slave		= &omap3xxx_dss_rfbi_hwmod,
1531	.clk		= "dss_ick",
1532	.addr		= omap2_dss_rfbi_addrs,
1533	.fw = {
1534		.omap2 = {
1535			.l4_fw_region  = OMAP3_L4_CORE_FW_DSS_RFBI_REGION,
1536			.l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP ,
1537			.flags	= OMAP_FIREWALL_L4,
1538		}
1539	},
1540	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1541};
1542
1543/* dss_rfbi slave ports */
1544static struct omap_hwmod_ocp_if *omap3xxx_dss_rfbi_slaves[] = {
1545	&omap3xxx_l4_core__dss_rfbi,
1546};
1547
1548static struct omap_hwmod omap3xxx_dss_rfbi_hwmod = {
1549	.name		= "dss_rfbi",
1550	.class		= &omap2_rfbi_hwmod_class,
1551	.main_clk	= "dss1_alwon_fck",
1552	.prcm		= {
1553		.omap2 = {
1554			.prcm_reg_id = 1,
1555			.module_bit = OMAP3430_EN_DSS1_SHIFT,
1556			.module_offs = OMAP3430_DSS_MOD,
1557		},
1558	},
1559	.slaves		= omap3xxx_dss_rfbi_slaves,
1560	.slaves_cnt	= ARRAY_SIZE(omap3xxx_dss_rfbi_slaves),
1561	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES1 |
1562				CHIP_GE_OMAP3430ES2 | CHIP_IS_OMAP3630ES1 |
1563				CHIP_GE_OMAP3630ES1_1),
1564	.flags		= HWMOD_NO_IDLEST,
1565};
1566
1567/* l4_core -> dss_venc */
1568static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_venc = {
1569	.master		= &omap3xxx_l4_core_hwmod,
1570	.slave		= &omap3xxx_dss_venc_hwmod,
1571	.clk		= "dss_tv_fck",
1572	.addr		= omap2_dss_venc_addrs,
1573	.fw = {
1574		.omap2 = {
1575			.l4_fw_region  = OMAP3_L4_CORE_FW_DSS_VENC_REGION,
1576			.l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
1577			.flags	= OMAP_FIREWALL_L4,
1578		}
1579	},
1580	.flags		= OCPIF_SWSUP_IDLE,
1581	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1582};
1583
1584/* dss_venc slave ports */
1585static struct omap_hwmod_ocp_if *omap3xxx_dss_venc_slaves[] = {
1586	&omap3xxx_l4_core__dss_venc,
1587};
1588
1589static struct omap_hwmod omap3xxx_dss_venc_hwmod = {
1590	.name		= "dss_venc",
1591	.class		= &omap2_venc_hwmod_class,
1592	.main_clk	= "dss1_alwon_fck",
1593	.prcm		= {
1594		.omap2 = {
1595			.prcm_reg_id = 1,
1596			.module_bit = OMAP3430_EN_DSS1_SHIFT,
1597			.module_offs = OMAP3430_DSS_MOD,
1598		},
1599	},
1600	.slaves		= omap3xxx_dss_venc_slaves,
1601	.slaves_cnt	= ARRAY_SIZE(omap3xxx_dss_venc_slaves),
1602	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES1 |
1603				CHIP_GE_OMAP3430ES2 | CHIP_IS_OMAP3630ES1 |
1604				CHIP_GE_OMAP3630ES1_1),
1605	.flags		= HWMOD_NO_IDLEST,
1606};
1607
1608/* I2C1 */
1609
1610static struct omap_i2c_dev_attr i2c1_dev_attr = {
1611	.fifo_depth	= 8, /* bytes */
1612	.flags		= OMAP_I2C_FLAG_APPLY_ERRATA_I207 |
1613			  OMAP_I2C_FLAG_RESET_REGS_POSTIDLE |
1614			  OMAP_I2C_FLAG_BUS_SHIFT_2,
1615};
1616
1617static struct omap_hwmod_ocp_if *omap3xxx_i2c1_slaves[] = {
1618	&omap3_l4_core__i2c1,
1619};
1620
1621static struct omap_hwmod omap3xxx_i2c1_hwmod = {
1622	.name		= "i2c1",
1623	.flags		= HWMOD_16BIT_REG,
1624	.mpu_irqs	= omap2_i2c1_mpu_irqs,
1625	.sdma_reqs	= omap2_i2c1_sdma_reqs,
1626	.main_clk	= "i2c1_fck",
1627	.prcm		= {
1628		.omap2 = {
1629			.module_offs = CORE_MOD,
1630			.prcm_reg_id = 1,
1631			.module_bit = OMAP3430_EN_I2C1_SHIFT,
1632			.idlest_reg_id = 1,
1633			.idlest_idle_bit = OMAP3430_ST_I2C1_SHIFT,
1634		},
1635	},
1636	.slaves		= omap3xxx_i2c1_slaves,
1637	.slaves_cnt	= ARRAY_SIZE(omap3xxx_i2c1_slaves),
1638	.class		= &i2c_class,
1639	.dev_attr	= &i2c1_dev_attr,
1640	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
1641};
1642
1643/* I2C2 */
1644
1645static struct omap_i2c_dev_attr i2c2_dev_attr = {
1646	.fifo_depth	= 8, /* bytes */
1647	.flags = OMAP_I2C_FLAG_APPLY_ERRATA_I207 |
1648		 OMAP_I2C_FLAG_RESET_REGS_POSTIDLE |
1649		 OMAP_I2C_FLAG_BUS_SHIFT_2,
1650};
1651
1652static struct omap_hwmod_ocp_if *omap3xxx_i2c2_slaves[] = {
1653	&omap3_l4_core__i2c2,
1654};
1655
1656static struct omap_hwmod omap3xxx_i2c2_hwmod = {
1657	.name		= "i2c2",
1658	.flags		= HWMOD_16BIT_REG,
1659	.mpu_irqs	= omap2_i2c2_mpu_irqs,
1660	.sdma_reqs	= omap2_i2c2_sdma_reqs,
1661	.main_clk	= "i2c2_fck",
1662	.prcm		= {
1663		.omap2 = {
1664			.module_offs = CORE_MOD,
1665			.prcm_reg_id = 1,
1666			.module_bit = OMAP3430_EN_I2C2_SHIFT,
1667			.idlest_reg_id = 1,
1668			.idlest_idle_bit = OMAP3430_ST_I2C2_SHIFT,
1669		},
1670	},
1671	.slaves		= omap3xxx_i2c2_slaves,
1672	.slaves_cnt	= ARRAY_SIZE(omap3xxx_i2c2_slaves),
1673	.class		= &i2c_class,
1674	.dev_attr	= &i2c2_dev_attr,
1675	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
1676};
1677
1678/* I2C3 */
1679
1680static struct omap_i2c_dev_attr i2c3_dev_attr = {
1681	.fifo_depth	= 64, /* bytes */
1682	.flags = OMAP_I2C_FLAG_APPLY_ERRATA_I207 |
1683		 OMAP_I2C_FLAG_RESET_REGS_POSTIDLE |
1684		 OMAP_I2C_FLAG_BUS_SHIFT_2,
1685};
1686
1687static struct omap_hwmod_irq_info i2c3_mpu_irqs[] = {
1688	{ .irq = INT_34XX_I2C3_IRQ, },
1689	{ .irq = -1 }
1690};
1691
1692static struct omap_hwmod_dma_info i2c3_sdma_reqs[] = {
1693	{ .name = "tx", .dma_req = OMAP34XX_DMA_I2C3_TX },
1694	{ .name = "rx", .dma_req = OMAP34XX_DMA_I2C3_RX },
1695	{ .dma_req = -1 }
1696};
1697
1698static struct omap_hwmod_ocp_if *omap3xxx_i2c3_slaves[] = {
1699	&omap3_l4_core__i2c3,
1700};
1701
1702static struct omap_hwmod omap3xxx_i2c3_hwmod = {
1703	.name		= "i2c3",
1704	.flags		= HWMOD_16BIT_REG,
1705	.mpu_irqs	= i2c3_mpu_irqs,
1706	.sdma_reqs	= i2c3_sdma_reqs,
1707	.main_clk	= "i2c3_fck",
1708	.prcm		= {
1709		.omap2 = {
1710			.module_offs = CORE_MOD,
1711			.prcm_reg_id = 1,
1712			.module_bit = OMAP3430_EN_I2C3_SHIFT,
1713			.idlest_reg_id = 1,
1714			.idlest_idle_bit = OMAP3430_ST_I2C3_SHIFT,
1715		},
1716	},
1717	.slaves		= omap3xxx_i2c3_slaves,
1718	.slaves_cnt	= ARRAY_SIZE(omap3xxx_i2c3_slaves),
1719	.class		= &i2c_class,
1720	.dev_attr	= &i2c3_dev_attr,
1721	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
1722};
1723
1724/* l4_wkup -> gpio1 */
1725static struct omap_hwmod_addr_space omap3xxx_gpio1_addrs[] = {
1726	{
1727		.pa_start	= 0x48310000,
1728		.pa_end		= 0x483101ff,
1729		.flags		= ADDR_TYPE_RT
1730	},
1731	{ }
1732};
1733
1734static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__gpio1 = {
1735	.master		= &omap3xxx_l4_wkup_hwmod,
1736	.slave		= &omap3xxx_gpio1_hwmod,
1737	.addr		= omap3xxx_gpio1_addrs,
1738	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1739};
1740
1741/* l4_per -> gpio2 */
1742static struct omap_hwmod_addr_space omap3xxx_gpio2_addrs[] = {
1743	{
1744		.pa_start	= 0x49050000,
1745		.pa_end		= 0x490501ff,
1746		.flags		= ADDR_TYPE_RT
1747	},
1748	{ }
1749};
1750
1751static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio2 = {
1752	.master		= &omap3xxx_l4_per_hwmod,
1753	.slave		= &omap3xxx_gpio2_hwmod,
1754	.addr		= omap3xxx_gpio2_addrs,
1755	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1756};
1757
1758/* l4_per -> gpio3 */
1759static struct omap_hwmod_addr_space omap3xxx_gpio3_addrs[] = {
1760	{
1761		.pa_start	= 0x49052000,
1762		.pa_end		= 0x490521ff,
1763		.flags		= ADDR_TYPE_RT
1764	},
1765	{ }
1766};
1767
1768static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio3 = {
1769	.master		= &omap3xxx_l4_per_hwmod,
1770	.slave		= &omap3xxx_gpio3_hwmod,
1771	.addr		= omap3xxx_gpio3_addrs,
1772	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1773};
1774
1775/* l4_per -> gpio4 */
1776static struct omap_hwmod_addr_space omap3xxx_gpio4_addrs[] = {
1777	{
1778		.pa_start	= 0x49054000,
1779		.pa_end		= 0x490541ff,
1780		.flags		= ADDR_TYPE_RT
1781	},
1782	{ }
1783};
1784
1785static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio4 = {
1786	.master		= &omap3xxx_l4_per_hwmod,
1787	.slave		= &omap3xxx_gpio4_hwmod,
1788	.addr		= omap3xxx_gpio4_addrs,
1789	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1790};
1791
1792/* l4_per -> gpio5 */
1793static struct omap_hwmod_addr_space omap3xxx_gpio5_addrs[] = {
1794	{
1795		.pa_start	= 0x49056000,
1796		.pa_end		= 0x490561ff,
1797		.flags		= ADDR_TYPE_RT
1798	},
1799	{ }
1800};
1801
1802static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio5 = {
1803	.master		= &omap3xxx_l4_per_hwmod,
1804	.slave		= &omap3xxx_gpio5_hwmod,
1805	.addr		= omap3xxx_gpio5_addrs,
1806	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1807};
1808
1809/* l4_per -> gpio6 */
1810static struct omap_hwmod_addr_space omap3xxx_gpio6_addrs[] = {
1811	{
1812		.pa_start	= 0x49058000,
1813		.pa_end		= 0x490581ff,
1814		.flags		= ADDR_TYPE_RT
1815	},
1816	{ }
1817};
1818
1819static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio6 = {
1820	.master		= &omap3xxx_l4_per_hwmod,
1821	.slave		= &omap3xxx_gpio6_hwmod,
1822	.addr		= omap3xxx_gpio6_addrs,
1823	.user		= OCP_USER_MPU | OCP_USER_SDMA,
1824};
1825
1826/*
1827 * 'gpio' class
1828 * general purpose io module
1829 */
1830
1831static struct omap_hwmod_class_sysconfig omap3xxx_gpio_sysc = {
1832	.rev_offs	= 0x0000,
1833	.sysc_offs	= 0x0010,
1834	.syss_offs	= 0x0014,
1835	.sysc_flags	= (SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
1836			   SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
1837			   SYSS_HAS_RESET_STATUS),
1838	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1839	.sysc_fields    = &omap_hwmod_sysc_type1,
1840};
1841
1842static struct omap_hwmod_class omap3xxx_gpio_hwmod_class = {
1843	.name = "gpio",
1844	.sysc = &omap3xxx_gpio_sysc,
1845	.rev = 1,
1846};
1847
1848/* gpio_dev_attr*/
1849static struct omap_gpio_dev_attr gpio_dev_attr = {
1850	.bank_width = 32,
1851	.dbck_flag = true,
1852};
1853
1854/* gpio1 */
1855static struct omap_hwmod_opt_clk gpio1_opt_clks[] = {
1856	{ .role = "dbclk", .clk = "gpio1_dbck", },
1857};
1858
1859static struct omap_hwmod_ocp_if *omap3xxx_gpio1_slaves[] = {
1860	&omap3xxx_l4_wkup__gpio1,
1861};
1862
1863static struct omap_hwmod omap3xxx_gpio1_hwmod = {
1864	.name		= "gpio1",
1865	.flags		= HWMOD_CONTROL_OPT_CLKS_IN_RESET,
1866	.mpu_irqs	= omap2_gpio1_irqs,
1867	.main_clk	= "gpio1_ick",
1868	.opt_clks	= gpio1_opt_clks,
1869	.opt_clks_cnt	= ARRAY_SIZE(gpio1_opt_clks),
1870	.prcm		= {
1871		.omap2 = {
1872			.prcm_reg_id = 1,
1873			.module_bit = OMAP3430_EN_GPIO1_SHIFT,
1874			.module_offs = WKUP_MOD,
1875			.idlest_reg_id = 1,
1876			.idlest_idle_bit = OMAP3430_ST_GPIO1_SHIFT,
1877		},
1878	},
1879	.slaves		= omap3xxx_gpio1_slaves,
1880	.slaves_cnt	= ARRAY_SIZE(omap3xxx_gpio1_slaves),
1881	.class		= &omap3xxx_gpio_hwmod_class,
1882	.dev_attr	= &gpio_dev_attr,
1883	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
1884};
1885
1886/* gpio2 */
1887static struct omap_hwmod_opt_clk gpio2_opt_clks[] = {
1888	{ .role = "dbclk", .clk = "gpio2_dbck", },
1889};
1890
1891static struct omap_hwmod_ocp_if *omap3xxx_gpio2_slaves[] = {
1892	&omap3xxx_l4_per__gpio2,
1893};
1894
1895static struct omap_hwmod omap3xxx_gpio2_hwmod = {
1896	.name		= "gpio2",
1897	.flags		= HWMOD_CONTROL_OPT_CLKS_IN_RESET,
1898	.mpu_irqs	= omap2_gpio2_irqs,
1899	.main_clk	= "gpio2_ick",
1900	.opt_clks	= gpio2_opt_clks,
1901	.opt_clks_cnt	= ARRAY_SIZE(gpio2_opt_clks),
1902	.prcm		= {
1903		.omap2 = {
1904			.prcm_reg_id = 1,
1905			.module_bit = OMAP3430_EN_GPIO2_SHIFT,
1906			.module_offs = OMAP3430_PER_MOD,
1907			.idlest_reg_id = 1,
1908			.idlest_idle_bit = OMAP3430_ST_GPIO2_SHIFT,
1909		},
1910	},
1911	.slaves		= omap3xxx_gpio2_slaves,
1912	.slaves_cnt	= ARRAY_SIZE(omap3xxx_gpio2_slaves),
1913	.class		= &omap3xxx_gpio_hwmod_class,
1914	.dev_attr	= &gpio_dev_attr,
1915	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
1916};
1917
1918/* gpio3 */
1919static struct omap_hwmod_opt_clk gpio3_opt_clks[] = {
1920	{ .role = "dbclk", .clk = "gpio3_dbck", },
1921};
1922
1923static struct omap_hwmod_ocp_if *omap3xxx_gpio3_slaves[] = {
1924	&omap3xxx_l4_per__gpio3,
1925};
1926
1927static struct omap_hwmod omap3xxx_gpio3_hwmod = {
1928	.name		= "gpio3",
1929	.flags		= HWMOD_CONTROL_OPT_CLKS_IN_RESET,
1930	.mpu_irqs	= omap2_gpio3_irqs,
1931	.main_clk	= "gpio3_ick",
1932	.opt_clks	= gpio3_opt_clks,
1933	.opt_clks_cnt	= ARRAY_SIZE(gpio3_opt_clks),
1934	.prcm		= {
1935		.omap2 = {
1936			.prcm_reg_id = 1,
1937			.module_bit = OMAP3430_EN_GPIO3_SHIFT,
1938			.module_offs = OMAP3430_PER_MOD,
1939			.idlest_reg_id = 1,
1940			.idlest_idle_bit = OMAP3430_ST_GPIO3_SHIFT,
1941		},
1942	},
1943	.slaves		= omap3xxx_gpio3_slaves,
1944	.slaves_cnt	= ARRAY_SIZE(omap3xxx_gpio3_slaves),
1945	.class		= &omap3xxx_gpio_hwmod_class,
1946	.dev_attr	= &gpio_dev_attr,
1947	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
1948};
1949
1950/* gpio4 */
1951static struct omap_hwmod_opt_clk gpio4_opt_clks[] = {
1952	{ .role = "dbclk", .clk = "gpio4_dbck", },
1953};
1954
1955static struct omap_hwmod_ocp_if *omap3xxx_gpio4_slaves[] = {
1956	&omap3xxx_l4_per__gpio4,
1957};
1958
1959static struct omap_hwmod omap3xxx_gpio4_hwmod = {
1960	.name		= "gpio4",
1961	.flags		= HWMOD_CONTROL_OPT_CLKS_IN_RESET,
1962	.mpu_irqs	= omap2_gpio4_irqs,
1963	.main_clk	= "gpio4_ick",
1964	.opt_clks	= gpio4_opt_clks,
1965	.opt_clks_cnt	= ARRAY_SIZE(gpio4_opt_clks),
1966	.prcm		= {
1967		.omap2 = {
1968			.prcm_reg_id = 1,
1969			.module_bit = OMAP3430_EN_GPIO4_SHIFT,
1970			.module_offs = OMAP3430_PER_MOD,
1971			.idlest_reg_id = 1,
1972			.idlest_idle_bit = OMAP3430_ST_GPIO4_SHIFT,
1973		},
1974	},
1975	.slaves		= omap3xxx_gpio4_slaves,
1976	.slaves_cnt	= ARRAY_SIZE(omap3xxx_gpio4_slaves),
1977	.class		= &omap3xxx_gpio_hwmod_class,
1978	.dev_attr	= &gpio_dev_attr,
1979	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
1980};
1981
1982/* gpio5 */
1983static struct omap_hwmod_irq_info omap3xxx_gpio5_irqs[] = {
1984	{ .irq = 33 }, /* INT_34XX_GPIO_BANK5 */
1985	{ .irq = -1 }
1986};
1987
1988static struct omap_hwmod_opt_clk gpio5_opt_clks[] = {
1989	{ .role = "dbclk", .clk = "gpio5_dbck", },
1990};
1991
1992static struct omap_hwmod_ocp_if *omap3xxx_gpio5_slaves[] = {
1993	&omap3xxx_l4_per__gpio5,
1994};
1995
1996static struct omap_hwmod omap3xxx_gpio5_hwmod = {
1997	.name		= "gpio5",
1998	.flags		= HWMOD_CONTROL_OPT_CLKS_IN_RESET,
1999	.mpu_irqs	= omap3xxx_gpio5_irqs,
2000	.main_clk	= "gpio5_ick",
2001	.opt_clks	= gpio5_opt_clks,
2002	.opt_clks_cnt	= ARRAY_SIZE(gpio5_opt_clks),
2003	.prcm		= {
2004		.omap2 = {
2005			.prcm_reg_id = 1,
2006			.module_bit = OMAP3430_EN_GPIO5_SHIFT,
2007			.module_offs = OMAP3430_PER_MOD,
2008			.idlest_reg_id = 1,
2009			.idlest_idle_bit = OMAP3430_ST_GPIO5_SHIFT,
2010		},
2011	},
2012	.slaves		= omap3xxx_gpio5_slaves,
2013	.slaves_cnt	= ARRAY_SIZE(omap3xxx_gpio5_slaves),
2014	.class		= &omap3xxx_gpio_hwmod_class,
2015	.dev_attr	= &gpio_dev_attr,
2016	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
2017};
2018
2019/* gpio6 */
2020static struct omap_hwmod_irq_info omap3xxx_gpio6_irqs[] = {
2021	{ .irq = 34 }, /* INT_34XX_GPIO_BANK6 */
2022	{ .irq = -1 }
2023};
2024
2025static struct omap_hwmod_opt_clk gpio6_opt_clks[] = {
2026	{ .role = "dbclk", .clk = "gpio6_dbck", },
2027};
2028
2029static struct omap_hwmod_ocp_if *omap3xxx_gpio6_slaves[] = {
2030	&omap3xxx_l4_per__gpio6,
2031};
2032
2033static struct omap_hwmod omap3xxx_gpio6_hwmod = {
2034	.name		= "gpio6",
2035	.flags		= HWMOD_CONTROL_OPT_CLKS_IN_RESET,
2036	.mpu_irqs	= omap3xxx_gpio6_irqs,
2037	.main_clk	= "gpio6_ick",
2038	.opt_clks	= gpio6_opt_clks,
2039	.opt_clks_cnt	= ARRAY_SIZE(gpio6_opt_clks),
2040	.prcm		= {
2041		.omap2 = {
2042			.prcm_reg_id = 1,
2043			.module_bit = OMAP3430_EN_GPIO6_SHIFT,
2044			.module_offs = OMAP3430_PER_MOD,
2045			.idlest_reg_id = 1,
2046			.idlest_idle_bit = OMAP3430_ST_GPIO6_SHIFT,
2047		},
2048	},
2049	.slaves		= omap3xxx_gpio6_slaves,
2050	.slaves_cnt	= ARRAY_SIZE(omap3xxx_gpio6_slaves),
2051	.class		= &omap3xxx_gpio_hwmod_class,
2052	.dev_attr	= &gpio_dev_attr,
2053	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
2054};
2055
2056/* dma_system -> L3 */
2057static struct omap_hwmod_ocp_if omap3xxx_dma_system__l3 = {
2058	.master		= &omap3xxx_dma_system_hwmod,
2059	.slave		= &omap3xxx_l3_main_hwmod,
2060	.clk		= "core_l3_ick",
2061	.user		= OCP_USER_MPU | OCP_USER_SDMA,
2062};
2063
2064/* dma attributes */
2065static struct omap_dma_dev_attr dma_dev_attr = {
2066	.dev_caps  = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY |
2067				IS_CSSA_32 | IS_CDSA_32 | IS_RW_PRIORITY,
2068	.lch_count = 32,
2069};
2070
2071static struct omap_hwmod_class_sysconfig omap3xxx_dma_sysc = {
2072	.rev_offs	= 0x0000,
2073	.sysc_offs	= 0x002c,
2074	.syss_offs	= 0x0028,
2075	.sysc_flags	= (SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
2076			   SYSC_HAS_MIDLEMODE | SYSC_HAS_CLOCKACTIVITY |
2077			   SYSC_HAS_EMUFREE | SYSC_HAS_AUTOIDLE |
2078			   SYSS_HAS_RESET_STATUS),
2079	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2080			   MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
2081	.sysc_fields	= &omap_hwmod_sysc_type1,
2082};
2083
2084static struct omap_hwmod_class omap3xxx_dma_hwmod_class = {
2085	.name = "dma",
2086	.sysc = &omap3xxx_dma_sysc,
2087};
2088
2089/* dma_system */
2090static struct omap_hwmod_addr_space omap3xxx_dma_system_addrs[] = {
2091	{
2092		.pa_start	= 0x48056000,
2093		.pa_end		= 0x48056fff,
2094		.flags		= ADDR_TYPE_RT
2095	},
2096	{ }
2097};
2098
2099/* dma_system master ports */
2100static struct omap_hwmod_ocp_if *omap3xxx_dma_system_masters[] = {
2101	&omap3xxx_dma_system__l3,
2102};
2103
2104/* l4_cfg -> dma_system */
2105static struct omap_hwmod_ocp_if omap3xxx_l4_core__dma_system = {
2106	.master		= &omap3xxx_l4_core_hwmod,
2107	.slave		= &omap3xxx_dma_system_hwmod,
2108	.clk		= "core_l4_ick",
2109	.addr		= omap3xxx_dma_system_addrs,
2110	.user		= OCP_USER_MPU | OCP_USER_SDMA,
2111};
2112
2113/* dma_system slave ports */
2114static struct omap_hwmod_ocp_if *omap3xxx_dma_system_slaves[] = {
2115	&omap3xxx_l4_core__dma_system,
2116};
2117
2118static struct omap_hwmod omap3xxx_dma_system_hwmod = {
2119	.name		= "dma",
2120	.class		= &omap3xxx_dma_hwmod_class,
2121	.mpu_irqs	= omap2_dma_system_irqs,
2122	.main_clk	= "core_l3_ick",
2123	.prcm = {
2124		.omap2 = {
2125			.module_offs		= CORE_MOD,
2126			.prcm_reg_id		= 1,
2127			.module_bit		= OMAP3430_ST_SDMA_SHIFT,
2128			.idlest_reg_id		= 1,
2129			.idlest_idle_bit	= OMAP3430_ST_SDMA_SHIFT,
2130		},
2131	},
2132	.slaves		= omap3xxx_dma_system_slaves,
2133	.slaves_cnt	= ARRAY_SIZE(omap3xxx_dma_system_slaves),
2134	.masters	= omap3xxx_dma_system_masters,
2135	.masters_cnt	= ARRAY_SIZE(omap3xxx_dma_system_masters),
2136	.dev_attr	= &dma_dev_attr,
2137	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
2138	.flags		= HWMOD_NO_IDLEST,
2139};
2140
2141/*
2142 * 'mcbsp' class
2143 * multi channel buffered serial port controller
2144 */
2145
2146static struct omap_hwmod_class_sysconfig omap3xxx_mcbsp_sysc = {
 
2147	.sysc_offs	= 0x008c,
2148	.sysc_flags	= (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_ENAWAKEUP |
2149			   SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
2150	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2151	.sysc_fields	= &omap_hwmod_sysc_type1,
2152	.clockact	= 0x2,
2153};
2154
2155static struct omap_hwmod_class omap3xxx_mcbsp_hwmod_class = {
2156	.name = "mcbsp",
2157	.sysc = &omap3xxx_mcbsp_sysc,
2158	.rev  = MCBSP_CONFIG_TYPE3,
2159};
2160
2161/* mcbsp1 */
2162static struct omap_hwmod_irq_info omap3xxx_mcbsp1_irqs[] = {
2163	{ .name = "irq", .irq = 16 },
2164	{ .name = "tx", .irq = 59 },
2165	{ .name = "rx", .irq = 60 },
2166	{ .irq = -1 }
2167};
2168
2169static struct omap_hwmod_addr_space omap3xxx_mcbsp1_addrs[] = {
2170	{
2171		.name		= "mpu",
2172		.pa_start	= 0x48074000,
2173		.pa_end		= 0x480740ff,
2174		.flags		= ADDR_TYPE_RT
2175	},
2176	{ }
2177};
2178
2179/* l4_core -> mcbsp1 */
2180static struct omap_hwmod_ocp_if omap3xxx_l4_core__mcbsp1 = {
2181	.master		= &omap3xxx_l4_core_hwmod,
2182	.slave		= &omap3xxx_mcbsp1_hwmod,
2183	.clk		= "mcbsp1_ick",
2184	.addr		= omap3xxx_mcbsp1_addrs,
2185	.user		= OCP_USER_MPU | OCP_USER_SDMA,
2186};
2187
2188/* mcbsp1 slave ports */
2189static struct omap_hwmod_ocp_if *omap3xxx_mcbsp1_slaves[] = {
2190	&omap3xxx_l4_core__mcbsp1,
2191};
2192
 
2193static struct omap_hwmod omap3xxx_mcbsp1_hwmod = {
2194	.name		= "mcbsp1",
2195	.class		= &omap3xxx_mcbsp_hwmod_class,
2196	.mpu_irqs	= omap3xxx_mcbsp1_irqs,
2197	.sdma_reqs	= omap2_mcbsp1_sdma_reqs,
2198	.main_clk	= "mcbsp1_fck",
2199	.prcm		= {
2200		.omap2 = {
2201			.prcm_reg_id = 1,
2202			.module_bit = OMAP3430_EN_MCBSP1_SHIFT,
2203			.module_offs = CORE_MOD,
2204			.idlest_reg_id = 1,
2205			.idlest_idle_bit = OMAP3430_ST_MCBSP1_SHIFT,
2206		},
2207	},
2208	.slaves		= omap3xxx_mcbsp1_slaves,
2209	.slaves_cnt	= ARRAY_SIZE(omap3xxx_mcbsp1_slaves),
2210	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
2211};
2212
2213/* mcbsp2 */
2214static struct omap_hwmod_irq_info omap3xxx_mcbsp2_irqs[] = {
2215	{ .name = "irq", .irq = 17 },
2216	{ .name = "tx", .irq = 62 },
2217	{ .name = "rx", .irq = 63 },
2218	{ .irq = -1 }
2219};
2220
2221static struct omap_hwmod_addr_space omap3xxx_mcbsp2_addrs[] = {
2222	{
2223		.name		= "mpu",
2224		.pa_start	= 0x49022000,
2225		.pa_end		= 0x490220ff,
2226		.flags		= ADDR_TYPE_RT
2227	},
2228	{ }
2229};
2230
2231/* l4_per -> mcbsp2 */
2232static struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp2 = {
2233	.master		= &omap3xxx_l4_per_hwmod,
2234	.slave		= &omap3xxx_mcbsp2_hwmod,
2235	.clk		= "mcbsp2_ick",
2236	.addr		= omap3xxx_mcbsp2_addrs,
2237	.user		= OCP_USER_MPU | OCP_USER_SDMA,
2238};
2239
2240/* mcbsp2 slave ports */
2241static struct omap_hwmod_ocp_if *omap3xxx_mcbsp2_slaves[] = {
2242	&omap3xxx_l4_per__mcbsp2,
2243};
2244
2245static struct omap_mcbsp_dev_attr omap34xx_mcbsp2_dev_attr = {
2246	.sidetone	= "mcbsp2_sidetone",
2247};
2248
2249static struct omap_hwmod omap3xxx_mcbsp2_hwmod = {
2250	.name		= "mcbsp2",
2251	.class		= &omap3xxx_mcbsp_hwmod_class,
2252	.mpu_irqs	= omap3xxx_mcbsp2_irqs,
2253	.sdma_reqs	= omap2_mcbsp2_sdma_reqs,
2254	.main_clk	= "mcbsp2_fck",
2255	.prcm		= {
2256		.omap2 = {
2257			.prcm_reg_id = 1,
2258			.module_bit = OMAP3430_EN_MCBSP2_SHIFT,
2259			.module_offs = OMAP3430_PER_MOD,
2260			.idlest_reg_id = 1,
2261			.idlest_idle_bit = OMAP3430_ST_MCBSP2_SHIFT,
2262		},
2263	},
2264	.slaves		= omap3xxx_mcbsp2_slaves,
2265	.slaves_cnt	= ARRAY_SIZE(omap3xxx_mcbsp2_slaves),
2266	.dev_attr	= &omap34xx_mcbsp2_dev_attr,
2267	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
2268};
2269
2270/* mcbsp3 */
2271static struct omap_hwmod_irq_info omap3xxx_mcbsp3_irqs[] = {
2272	{ .name = "irq", .irq = 22 },
2273	{ .name = "tx", .irq = 89 },
2274	{ .name = "rx", .irq = 90 },
2275	{ .irq = -1 }
2276};
2277
2278static struct omap_hwmod_addr_space omap3xxx_mcbsp3_addrs[] = {
2279	{
2280		.name		= "mpu",
2281		.pa_start	= 0x49024000,
2282		.pa_end		= 0x490240ff,
2283		.flags		= ADDR_TYPE_RT
2284	},
2285	{ }
2286};
2287
2288/* l4_per -> mcbsp3 */
2289static struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp3 = {
2290	.master		= &omap3xxx_l4_per_hwmod,
2291	.slave		= &omap3xxx_mcbsp3_hwmod,
2292	.clk		= "mcbsp3_ick",
2293	.addr		= omap3xxx_mcbsp3_addrs,
2294	.user		= OCP_USER_MPU | OCP_USER_SDMA,
2295};
2296
2297/* mcbsp3 slave ports */
2298static struct omap_hwmod_ocp_if *omap3xxx_mcbsp3_slaves[] = {
2299	&omap3xxx_l4_per__mcbsp3,
2300};
2301
2302static struct omap_mcbsp_dev_attr omap34xx_mcbsp3_dev_attr = {
2303	.sidetone       = "mcbsp3_sidetone",
2304};
2305
2306static struct omap_hwmod omap3xxx_mcbsp3_hwmod = {
2307	.name		= "mcbsp3",
2308	.class		= &omap3xxx_mcbsp_hwmod_class,
2309	.mpu_irqs	= omap3xxx_mcbsp3_irqs,
2310	.sdma_reqs	= omap2_mcbsp3_sdma_reqs,
2311	.main_clk	= "mcbsp3_fck",
2312	.prcm		= {
2313		.omap2 = {
2314			.prcm_reg_id = 1,
2315			.module_bit = OMAP3430_EN_MCBSP3_SHIFT,
2316			.module_offs = OMAP3430_PER_MOD,
2317			.idlest_reg_id = 1,
2318			.idlest_idle_bit = OMAP3430_ST_MCBSP3_SHIFT,
2319		},
2320	},
2321	.slaves		= omap3xxx_mcbsp3_slaves,
2322	.slaves_cnt	= ARRAY_SIZE(omap3xxx_mcbsp3_slaves),
2323	.dev_attr	= &omap34xx_mcbsp3_dev_attr,
2324	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
2325};
2326
2327/* mcbsp4 */
2328static struct omap_hwmod_irq_info omap3xxx_mcbsp4_irqs[] = {
2329	{ .name = "irq", .irq = 23 },
2330	{ .name = "tx", .irq = 54 },
2331	{ .name = "rx", .irq = 55 },
2332	{ .irq = -1 }
2333};
2334
2335static struct omap_hwmod_dma_info omap3xxx_mcbsp4_sdma_chs[] = {
2336	{ .name = "rx", .dma_req = 20 },
2337	{ .name = "tx", .dma_req = 19 },
2338	{ .dma_req = -1 }
2339};
2340
2341static struct omap_hwmod_addr_space omap3xxx_mcbsp4_addrs[] = {
2342	{
2343		.name		= "mpu",
2344		.pa_start	= 0x49026000,
2345		.pa_end		= 0x490260ff,
2346		.flags		= ADDR_TYPE_RT
2347	},
2348	{ }
2349};
2350
2351/* l4_per -> mcbsp4 */
2352static struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp4 = {
2353	.master		= &omap3xxx_l4_per_hwmod,
2354	.slave		= &omap3xxx_mcbsp4_hwmod,
2355	.clk		= "mcbsp4_ick",
2356	.addr		= omap3xxx_mcbsp4_addrs,
2357	.user		= OCP_USER_MPU | OCP_USER_SDMA,
2358};
2359
2360/* mcbsp4 slave ports */
2361static struct omap_hwmod_ocp_if *omap3xxx_mcbsp4_slaves[] = {
2362	&omap3xxx_l4_per__mcbsp4,
2363};
2364
2365static struct omap_hwmod omap3xxx_mcbsp4_hwmod = {
2366	.name		= "mcbsp4",
2367	.class		= &omap3xxx_mcbsp_hwmod_class,
2368	.mpu_irqs	= omap3xxx_mcbsp4_irqs,
2369	.sdma_reqs	= omap3xxx_mcbsp4_sdma_chs,
2370	.main_clk	= "mcbsp4_fck",
2371	.prcm		= {
2372		.omap2 = {
2373			.prcm_reg_id = 1,
2374			.module_bit = OMAP3430_EN_MCBSP4_SHIFT,
2375			.module_offs = OMAP3430_PER_MOD,
2376			.idlest_reg_id = 1,
2377			.idlest_idle_bit = OMAP3430_ST_MCBSP4_SHIFT,
2378		},
2379	},
2380	.slaves		= omap3xxx_mcbsp4_slaves,
2381	.slaves_cnt	= ARRAY_SIZE(omap3xxx_mcbsp4_slaves),
2382	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
2383};
2384
2385/* mcbsp5 */
2386static struct omap_hwmod_irq_info omap3xxx_mcbsp5_irqs[] = {
2387	{ .name = "irq", .irq = 27 },
2388	{ .name = "tx", .irq = 81 },
2389	{ .name = "rx", .irq = 82 },
2390	{ .irq = -1 }
2391};
2392
2393static struct omap_hwmod_dma_info omap3xxx_mcbsp5_sdma_chs[] = {
2394	{ .name = "rx", .dma_req = 22 },
2395	{ .name = "tx", .dma_req = 21 },
2396	{ .dma_req = -1 }
2397};
2398
2399static struct omap_hwmod_addr_space omap3xxx_mcbsp5_addrs[] = {
2400	{
2401		.name		= "mpu",
2402		.pa_start	= 0x48096000,
2403		.pa_end		= 0x480960ff,
2404		.flags		= ADDR_TYPE_RT
2405	},
2406	{ }
2407};
2408
2409/* l4_core -> mcbsp5 */
2410static struct omap_hwmod_ocp_if omap3xxx_l4_core__mcbsp5 = {
2411	.master		= &omap3xxx_l4_core_hwmod,
2412	.slave		= &omap3xxx_mcbsp5_hwmod,
2413	.clk		= "mcbsp5_ick",
2414	.addr		= omap3xxx_mcbsp5_addrs,
2415	.user		= OCP_USER_MPU | OCP_USER_SDMA,
2416};
2417
2418/* mcbsp5 slave ports */
2419static struct omap_hwmod_ocp_if *omap3xxx_mcbsp5_slaves[] = {
2420	&omap3xxx_l4_core__mcbsp5,
2421};
2422
2423static struct omap_hwmod omap3xxx_mcbsp5_hwmod = {
2424	.name		= "mcbsp5",
2425	.class		= &omap3xxx_mcbsp_hwmod_class,
2426	.mpu_irqs	= omap3xxx_mcbsp5_irqs,
2427	.sdma_reqs	= omap3xxx_mcbsp5_sdma_chs,
2428	.main_clk	= "mcbsp5_fck",
2429	.prcm		= {
2430		.omap2 = {
2431			.prcm_reg_id = 1,
2432			.module_bit = OMAP3430_EN_MCBSP5_SHIFT,
2433			.module_offs = CORE_MOD,
2434			.idlest_reg_id = 1,
2435			.idlest_idle_bit = OMAP3430_ST_MCBSP5_SHIFT,
2436		},
2437	},
2438	.slaves		= omap3xxx_mcbsp5_slaves,
2439	.slaves_cnt	= ARRAY_SIZE(omap3xxx_mcbsp5_slaves),
2440	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
2441};
 
2442/* 'mcbsp sidetone' class */
2443
2444static struct omap_hwmod_class_sysconfig omap3xxx_mcbsp_sidetone_sysc = {
 
2445	.sysc_offs	= 0x0010,
2446	.sysc_flags	= SYSC_HAS_AUTOIDLE,
2447	.sysc_fields	= &omap_hwmod_sysc_type1,
2448};
2449
2450static struct omap_hwmod_class omap3xxx_mcbsp_sidetone_hwmod_class = {
2451	.name = "mcbsp_sidetone",
2452	.sysc = &omap3xxx_mcbsp_sidetone_sysc,
2453};
2454
2455/* mcbsp2_sidetone */
2456static struct omap_hwmod_irq_info omap3xxx_mcbsp2_sidetone_irqs[] = {
2457	{ .name = "irq", .irq = 4 },
2458	{ .irq = -1 }
2459};
2460
2461static struct omap_hwmod_addr_space omap3xxx_mcbsp2_sidetone_addrs[] = {
2462	{
2463		.name		= "sidetone",
2464		.pa_start	= 0x49028000,
2465		.pa_end		= 0x490280ff,
2466		.flags		= ADDR_TYPE_RT
2467	},
2468	{ }
2469};
2470
2471/* l4_per -> mcbsp2_sidetone */
2472static struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp2_sidetone = {
2473	.master		= &omap3xxx_l4_per_hwmod,
2474	.slave		= &omap3xxx_mcbsp2_sidetone_hwmod,
2475	.clk		= "mcbsp2_ick",
2476	.addr		= omap3xxx_mcbsp2_sidetone_addrs,
2477	.user		= OCP_USER_MPU,
2478};
2479
2480/* mcbsp2_sidetone slave ports */
2481static struct omap_hwmod_ocp_if *omap3xxx_mcbsp2_sidetone_slaves[] = {
2482	&omap3xxx_l4_per__mcbsp2_sidetone,
2483};
2484
2485static struct omap_hwmod omap3xxx_mcbsp2_sidetone_hwmod = {
2486	.name		= "mcbsp2_sidetone",
2487	.class		= &omap3xxx_mcbsp_sidetone_hwmod_class,
2488	.mpu_irqs	= omap3xxx_mcbsp2_sidetone_irqs,
2489	.main_clk	= "mcbsp2_fck",
2490	.prcm		= {
2491		.omap2 = {
2492			.prcm_reg_id = 1,
2493			 .module_bit = OMAP3430_EN_MCBSP2_SHIFT,
2494			.module_offs = OMAP3430_PER_MOD,
2495			.idlest_reg_id = 1,
2496			.idlest_idle_bit = OMAP3430_ST_MCBSP2_SHIFT,
2497		},
2498	},
2499	.slaves		= omap3xxx_mcbsp2_sidetone_slaves,
2500	.slaves_cnt	= ARRAY_SIZE(omap3xxx_mcbsp2_sidetone_slaves),
2501	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
2502};
2503
2504/* mcbsp3_sidetone */
2505static struct omap_hwmod_irq_info omap3xxx_mcbsp3_sidetone_irqs[] = {
2506	{ .name = "irq", .irq = 5 },
2507	{ .irq = -1 }
2508};
2509
2510static struct omap_hwmod_addr_space omap3xxx_mcbsp3_sidetone_addrs[] = {
2511	{
2512		.name		= "sidetone",
2513		.pa_start	= 0x4902A000,
2514		.pa_end		= 0x4902A0ff,
2515		.flags		= ADDR_TYPE_RT
2516	},
2517	{ }
2518};
2519
2520/* l4_per -> mcbsp3_sidetone */
2521static struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp3_sidetone = {
2522	.master		= &omap3xxx_l4_per_hwmod,
2523	.slave		= &omap3xxx_mcbsp3_sidetone_hwmod,
2524	.clk		= "mcbsp3_ick",
2525	.addr		= omap3xxx_mcbsp3_sidetone_addrs,
2526	.user		= OCP_USER_MPU,
2527};
2528
2529/* mcbsp3_sidetone slave ports */
2530static struct omap_hwmod_ocp_if *omap3xxx_mcbsp3_sidetone_slaves[] = {
2531	&omap3xxx_l4_per__mcbsp3_sidetone,
2532};
2533
2534static struct omap_hwmod omap3xxx_mcbsp3_sidetone_hwmod = {
2535	.name		= "mcbsp3_sidetone",
2536	.class		= &omap3xxx_mcbsp_sidetone_hwmod_class,
2537	.mpu_irqs	= omap3xxx_mcbsp3_sidetone_irqs,
2538	.main_clk	= "mcbsp3_fck",
2539	.prcm		= {
2540		.omap2 = {
2541			.prcm_reg_id = 1,
2542			.module_bit = OMAP3430_EN_MCBSP3_SHIFT,
2543			.module_offs = OMAP3430_PER_MOD,
2544			.idlest_reg_id = 1,
2545			.idlest_idle_bit = OMAP3430_ST_MCBSP3_SHIFT,
2546		},
2547	},
2548	.slaves		= omap3xxx_mcbsp3_sidetone_slaves,
2549	.slaves_cnt	= ARRAY_SIZE(omap3xxx_mcbsp3_sidetone_slaves),
2550	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
2551};
2552
2553
2554/* SR common */
2555static struct omap_hwmod_sysc_fields omap34xx_sr_sysc_fields = {
2556	.clkact_shift	= 20,
2557};
2558
2559static struct omap_hwmod_class_sysconfig omap34xx_sr_sysc = {
 
2560	.sysc_offs	= 0x24,
2561	.sysc_flags	= (SYSC_HAS_CLOCKACTIVITY | SYSC_NO_CACHE),
2562	.clockact	= CLOCKACT_TEST_ICLK,
2563	.sysc_fields	= &omap34xx_sr_sysc_fields,
2564};
2565
2566static struct omap_hwmod_class omap34xx_smartreflex_hwmod_class = {
2567	.name = "smartreflex",
2568	.sysc = &omap34xx_sr_sysc,
2569	.rev  = 1,
2570};
2571
2572static struct omap_hwmod_sysc_fields omap36xx_sr_sysc_fields = {
2573	.sidle_shift	= 24,
2574	.enwkup_shift	= 26
2575};
2576
2577static struct omap_hwmod_class_sysconfig omap36xx_sr_sysc = {
 
2578	.sysc_offs	= 0x38,
2579	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2580	.sysc_flags	= (SYSC_HAS_SIDLEMODE | SYSC_HAS_ENAWAKEUP |
2581			SYSC_NO_CACHE),
2582	.sysc_fields	= &omap36xx_sr_sysc_fields,
2583};
2584
2585static struct omap_hwmod_class omap36xx_smartreflex_hwmod_class = {
2586	.name = "smartreflex",
2587	.sysc = &omap36xx_sr_sysc,
2588	.rev  = 2,
2589};
2590
2591/* SR1 */
2592static struct omap_hwmod_ocp_if *omap3_sr1_slaves[] = {
2593	&omap3_l4_core__sr1,
2594};
2595
 
2596static struct omap_hwmod omap34xx_sr1_hwmod = {
2597	.name		= "sr1_hwmod",
2598	.class		= &omap34xx_smartreflex_hwmod_class,
2599	.main_clk	= "sr1_fck",
2600	.vdd_name	= "mpu",
2601	.prcm		= {
2602		.omap2 = {
2603			.prcm_reg_id = 1,
2604			.module_bit = OMAP3430_EN_SR1_SHIFT,
2605			.module_offs = WKUP_MOD,
2606			.idlest_reg_id = 1,
2607			.idlest_idle_bit = OMAP3430_EN_SR1_SHIFT,
2608		},
2609	},
2610	.slaves		= omap3_sr1_slaves,
2611	.slaves_cnt	= ARRAY_SIZE(omap3_sr1_slaves),
2612	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES2 |
2613					CHIP_IS_OMAP3430ES3_0 |
2614					CHIP_IS_OMAP3430ES3_1),
2615	.flags		= HWMOD_SET_DEFAULT_CLOCKACT,
2616};
2617
2618static struct omap_hwmod omap36xx_sr1_hwmod = {
2619	.name		= "sr1_hwmod",
2620	.class		= &omap36xx_smartreflex_hwmod_class,
2621	.main_clk	= "sr1_fck",
2622	.vdd_name	= "mpu",
2623	.prcm		= {
2624		.omap2 = {
2625			.prcm_reg_id = 1,
2626			.module_bit = OMAP3430_EN_SR1_SHIFT,
2627			.module_offs = WKUP_MOD,
2628			.idlest_reg_id = 1,
2629			.idlest_idle_bit = OMAP3430_EN_SR1_SHIFT,
2630		},
2631	},
2632	.slaves		= omap3_sr1_slaves,
2633	.slaves_cnt	= ARRAY_SIZE(omap3_sr1_slaves),
2634	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3630ES1),
2635};
2636
2637/* SR2 */
2638static struct omap_hwmod_ocp_if *omap3_sr2_slaves[] = {
2639	&omap3_l4_core__sr2,
2640};
2641
 
2642static struct omap_hwmod omap34xx_sr2_hwmod = {
2643	.name		= "sr2_hwmod",
2644	.class		= &omap34xx_smartreflex_hwmod_class,
2645	.main_clk	= "sr2_fck",
2646	.vdd_name	= "core",
2647	.prcm		= {
2648		.omap2 = {
2649			.prcm_reg_id = 1,
2650			.module_bit = OMAP3430_EN_SR2_SHIFT,
2651			.module_offs = WKUP_MOD,
2652			.idlest_reg_id = 1,
2653			.idlest_idle_bit = OMAP3430_EN_SR2_SHIFT,
2654		},
2655	},
2656	.slaves		= omap3_sr2_slaves,
2657	.slaves_cnt	= ARRAY_SIZE(omap3_sr2_slaves),
2658	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES2 |
2659					CHIP_IS_OMAP3430ES3_0 |
2660					CHIP_IS_OMAP3430ES3_1),
2661	.flags		= HWMOD_SET_DEFAULT_CLOCKACT,
2662};
2663
2664static struct omap_hwmod omap36xx_sr2_hwmod = {
2665	.name		= "sr2_hwmod",
2666	.class		= &omap36xx_smartreflex_hwmod_class,
2667	.main_clk	= "sr2_fck",
2668	.vdd_name	= "core",
2669	.prcm		= {
2670		.omap2 = {
2671			.prcm_reg_id = 1,
2672			.module_bit = OMAP3430_EN_SR2_SHIFT,
2673			.module_offs = WKUP_MOD,
2674			.idlest_reg_id = 1,
2675			.idlest_idle_bit = OMAP3430_EN_SR2_SHIFT,
2676		},
2677	},
2678	.slaves		= omap3_sr2_slaves,
2679	.slaves_cnt	= ARRAY_SIZE(omap3_sr2_slaves),
2680	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3630ES1),
2681};
2682
2683/*
2684 * 'mailbox' class
2685 * mailbox module allowing communication between the on-chip processors
2686 * using a queued mailbox-interrupt mechanism.
2687 */
2688
2689static struct omap_hwmod_class_sysconfig omap3xxx_mailbox_sysc = {
2690	.rev_offs	= 0x000,
2691	.sysc_offs	= 0x010,
2692	.syss_offs	= 0x014,
2693	.sysc_flags	= (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
2694				SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
2695	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2696	.sysc_fields	= &omap_hwmod_sysc_type1,
2697};
2698
2699static struct omap_hwmod_class omap3xxx_mailbox_hwmod_class = {
2700	.name = "mailbox",
2701	.sysc = &omap3xxx_mailbox_sysc,
2702};
2703
2704static struct omap_hwmod omap3xxx_mailbox_hwmod;
2705static struct omap_hwmod_irq_info omap3xxx_mailbox_irqs[] = {
2706	{ .irq = 26 },
2707	{ .irq = -1 }
2708};
2709
2710static struct omap_hwmod_addr_space omap3xxx_mailbox_addrs[] = {
2711	{
2712		.pa_start	= 0x48094000,
2713		.pa_end		= 0x480941ff,
2714		.flags		= ADDR_TYPE_RT,
2715	},
2716	{ }
2717};
2718
2719/* l4_core -> mailbox */
2720static struct omap_hwmod_ocp_if omap3xxx_l4_core__mailbox = {
2721	.master		= &omap3xxx_l4_core_hwmod,
2722	.slave		= &omap3xxx_mailbox_hwmod,
2723	.addr		= omap3xxx_mailbox_addrs,
2724	.user		= OCP_USER_MPU | OCP_USER_SDMA,
2725};
2726
2727/* mailbox slave ports */
2728static struct omap_hwmod_ocp_if *omap3xxx_mailbox_slaves[] = {
2729	&omap3xxx_l4_core__mailbox,
2730};
2731
2732static struct omap_hwmod omap3xxx_mailbox_hwmod = {
2733	.name		= "mailbox",
2734	.class		= &omap3xxx_mailbox_hwmod_class,
2735	.mpu_irqs	= omap3xxx_mailbox_irqs,
2736	.main_clk	= "mailboxes_ick",
2737	.prcm		= {
2738		.omap2 = {
2739			.prcm_reg_id = 1,
2740			.module_bit = OMAP3430_EN_MAILBOXES_SHIFT,
2741			.module_offs = CORE_MOD,
2742			.idlest_reg_id = 1,
2743			.idlest_idle_bit = OMAP3430_ST_MAILBOXES_SHIFT,
2744		},
2745	},
2746	.slaves		= omap3xxx_mailbox_slaves,
2747	.slaves_cnt	= ARRAY_SIZE(omap3xxx_mailbox_slaves),
2748	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
2749};
2750
2751/* l4 core -> mcspi1 interface */
2752static struct omap_hwmod_ocp_if omap34xx_l4_core__mcspi1 = {
2753	.master		= &omap3xxx_l4_core_hwmod,
2754	.slave		= &omap34xx_mcspi1,
2755	.clk		= "mcspi1_ick",
2756	.addr		= omap2_mcspi1_addr_space,
2757	.user		= OCP_USER_MPU | OCP_USER_SDMA,
2758};
2759
2760/* l4 core -> mcspi2 interface */
2761static struct omap_hwmod_ocp_if omap34xx_l4_core__mcspi2 = {
2762	.master		= &omap3xxx_l4_core_hwmod,
2763	.slave		= &omap34xx_mcspi2,
2764	.clk		= "mcspi2_ick",
2765	.addr		= omap2_mcspi2_addr_space,
2766	.user		= OCP_USER_MPU | OCP_USER_SDMA,
2767};
2768
2769/* l4 core -> mcspi3 interface */
2770static struct omap_hwmod_ocp_if omap34xx_l4_core__mcspi3 = {
2771	.master		= &omap3xxx_l4_core_hwmod,
2772	.slave		= &omap34xx_mcspi3,
2773	.clk		= "mcspi3_ick",
2774	.addr		= omap2430_mcspi3_addr_space,
2775	.user		= OCP_USER_MPU | OCP_USER_SDMA,
2776};
2777
2778/* l4 core -> mcspi4 interface */
2779static struct omap_hwmod_addr_space omap34xx_mcspi4_addr_space[] = {
2780	{
2781		.pa_start	= 0x480ba000,
2782		.pa_end		= 0x480ba0ff,
2783		.flags		= ADDR_TYPE_RT,
2784	},
2785	{ }
2786};
2787
2788static struct omap_hwmod_ocp_if omap34xx_l4_core__mcspi4 = {
2789	.master		= &omap3xxx_l4_core_hwmod,
2790	.slave		= &omap34xx_mcspi4,
2791	.clk		= "mcspi4_ick",
2792	.addr		= omap34xx_mcspi4_addr_space,
2793	.user		= OCP_USER_MPU | OCP_USER_SDMA,
2794};
2795
2796/*
2797 * 'mcspi' class
2798 * multichannel serial port interface (mcspi) / master/slave synchronous serial
2799 * bus
2800 */
2801
2802static struct omap_hwmod_class_sysconfig omap34xx_mcspi_sysc = {
2803	.rev_offs	= 0x0000,
2804	.sysc_offs	= 0x0010,
2805	.syss_offs	= 0x0014,
2806	.sysc_flags	= (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
2807				SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
2808				SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
2809	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2810	.sysc_fields    = &omap_hwmod_sysc_type1,
2811};
2812
2813static struct omap_hwmod_class omap34xx_mcspi_class = {
2814	.name = "mcspi",
2815	.sysc = &omap34xx_mcspi_sysc,
2816	.rev = OMAP3_MCSPI_REV,
2817};
2818
2819/* mcspi1 */
2820static struct omap_hwmod_ocp_if *omap34xx_mcspi1_slaves[] = {
2821	&omap34xx_l4_core__mcspi1,
2822};
2823
2824static struct omap2_mcspi_dev_attr omap_mcspi1_dev_attr = {
2825	.num_chipselect = 4,
2826};
2827
2828static struct omap_hwmod omap34xx_mcspi1 = {
2829	.name		= "mcspi1",
2830	.mpu_irqs	= omap2_mcspi1_mpu_irqs,
2831	.sdma_reqs	= omap2_mcspi1_sdma_reqs,
2832	.main_clk	= "mcspi1_fck",
2833	.prcm		= {
2834		.omap2 = {
2835			.module_offs = CORE_MOD,
2836			.prcm_reg_id = 1,
2837			.module_bit = OMAP3430_EN_MCSPI1_SHIFT,
2838			.idlest_reg_id = 1,
2839			.idlest_idle_bit = OMAP3430_ST_MCSPI1_SHIFT,
2840		},
2841	},
2842	.slaves		= omap34xx_mcspi1_slaves,
2843	.slaves_cnt	= ARRAY_SIZE(omap34xx_mcspi1_slaves),
2844	.class		= &omap34xx_mcspi_class,
2845	.dev_attr       = &omap_mcspi1_dev_attr,
2846	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
2847};
2848
2849/* mcspi2 */
2850static struct omap_hwmod_ocp_if *omap34xx_mcspi2_slaves[] = {
2851	&omap34xx_l4_core__mcspi2,
2852};
2853
2854static struct omap2_mcspi_dev_attr omap_mcspi2_dev_attr = {
2855	.num_chipselect = 2,
2856};
2857
2858static struct omap_hwmod omap34xx_mcspi2 = {
2859	.name		= "mcspi2",
2860	.mpu_irqs	= omap2_mcspi2_mpu_irqs,
2861	.sdma_reqs	= omap2_mcspi2_sdma_reqs,
2862	.main_clk	= "mcspi2_fck",
2863	.prcm		= {
2864		.omap2 = {
2865			.module_offs = CORE_MOD,
2866			.prcm_reg_id = 1,
2867			.module_bit = OMAP3430_EN_MCSPI2_SHIFT,
2868			.idlest_reg_id = 1,
2869			.idlest_idle_bit = OMAP3430_ST_MCSPI2_SHIFT,
2870		},
2871	},
2872	.slaves		= omap34xx_mcspi2_slaves,
2873	.slaves_cnt	= ARRAY_SIZE(omap34xx_mcspi2_slaves),
2874	.class		= &omap34xx_mcspi_class,
2875	.dev_attr       = &omap_mcspi2_dev_attr,
2876	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
2877};
2878
2879/* mcspi3 */
2880static struct omap_hwmod_irq_info omap34xx_mcspi3_mpu_irqs[] = {
2881	{ .name = "irq", .irq = 91 }, /* 91 */
2882	{ .irq = -1 }
2883};
2884
2885static struct omap_hwmod_dma_info omap34xx_mcspi3_sdma_reqs[] = {
2886	{ .name = "tx0", .dma_req = 15 },
2887	{ .name = "rx0", .dma_req = 16 },
2888	{ .name = "tx1", .dma_req = 23 },
2889	{ .name = "rx1", .dma_req = 24 },
2890	{ .dma_req = -1 }
2891};
2892
2893static struct omap_hwmod_ocp_if *omap34xx_mcspi3_slaves[] = {
2894	&omap34xx_l4_core__mcspi3,
2895};
2896
2897static struct omap2_mcspi_dev_attr omap_mcspi3_dev_attr = {
2898	.num_chipselect = 2,
2899};
2900
2901static struct omap_hwmod omap34xx_mcspi3 = {
2902	.name		= "mcspi3",
2903	.mpu_irqs	= omap34xx_mcspi3_mpu_irqs,
2904	.sdma_reqs	= omap34xx_mcspi3_sdma_reqs,
2905	.main_clk	= "mcspi3_fck",
2906	.prcm		= {
2907		.omap2 = {
2908			.module_offs = CORE_MOD,
2909			.prcm_reg_id = 1,
2910			.module_bit = OMAP3430_EN_MCSPI3_SHIFT,
2911			.idlest_reg_id = 1,
2912			.idlest_idle_bit = OMAP3430_ST_MCSPI3_SHIFT,
2913		},
2914	},
2915	.slaves		= omap34xx_mcspi3_slaves,
2916	.slaves_cnt	= ARRAY_SIZE(omap34xx_mcspi3_slaves),
2917	.class		= &omap34xx_mcspi_class,
2918	.dev_attr       = &omap_mcspi3_dev_attr,
2919	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
2920};
2921
2922/* SPI4 */
2923static struct omap_hwmod_irq_info omap34xx_mcspi4_mpu_irqs[] = {
2924	{ .name = "irq", .irq = INT_34XX_SPI4_IRQ }, /* 48 */
2925	{ .irq = -1 }
2926};
2927
2928static struct omap_hwmod_dma_info omap34xx_mcspi4_sdma_reqs[] = {
2929	{ .name = "tx0", .dma_req = 70 }, /* DMA_SPI4_TX0 */
2930	{ .name = "rx0", .dma_req = 71 }, /* DMA_SPI4_RX0 */
2931	{ .dma_req = -1 }
2932};
2933
2934static struct omap_hwmod_ocp_if *omap34xx_mcspi4_slaves[] = {
2935	&omap34xx_l4_core__mcspi4,
2936};
2937
2938static struct omap2_mcspi_dev_attr omap_mcspi4_dev_attr = {
2939	.num_chipselect = 1,
2940};
2941
 
2942static struct omap_hwmod omap34xx_mcspi4 = {
2943	.name		= "mcspi4",
2944	.mpu_irqs	= omap34xx_mcspi4_mpu_irqs,
2945	.sdma_reqs	= omap34xx_mcspi4_sdma_reqs,
2946	.main_clk	= "mcspi4_fck",
2947	.prcm		= {
2948		.omap2 = {
2949			.module_offs = CORE_MOD,
2950			.prcm_reg_id = 1,
2951			.module_bit = OMAP3430_EN_MCSPI4_SHIFT,
2952			.idlest_reg_id = 1,
2953			.idlest_idle_bit = OMAP3430_ST_MCSPI4_SHIFT,
2954		},
2955	},
2956	.slaves		= omap34xx_mcspi4_slaves,
2957	.slaves_cnt	= ARRAY_SIZE(omap34xx_mcspi4_slaves),
2958	.class		= &omap34xx_mcspi_class,
2959	.dev_attr       = &omap_mcspi4_dev_attr,
2960	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
2961};
2962
2963/*
2964 * usbhsotg
2965 */
2966static struct omap_hwmod_class_sysconfig omap3xxx_usbhsotg_sysc = {
2967	.rev_offs	= 0x0400,
2968	.sysc_offs	= 0x0404,
2969	.syss_offs	= 0x0408,
2970	.sysc_flags	= (SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE|
2971			  SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
2972			  SYSC_HAS_AUTOIDLE),
2973	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2974			  MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
2975	.sysc_fields	= &omap_hwmod_sysc_type1,
2976};
2977
2978static struct omap_hwmod_class usbotg_class = {
2979	.name = "usbotg",
2980	.sysc = &omap3xxx_usbhsotg_sysc,
2981};
2982/* usb_otg_hs */
2983static struct omap_hwmod_irq_info omap3xxx_usbhsotg_mpu_irqs[] = {
2984
2985	{ .name = "mc", .irq = 92 },
2986	{ .name = "dma", .irq = 93 },
2987	{ .irq = -1 }
2988};
2989
2990static struct omap_hwmod omap3xxx_usbhsotg_hwmod = {
2991	.name		= "usb_otg_hs",
2992	.mpu_irqs	= omap3xxx_usbhsotg_mpu_irqs,
2993	.main_clk	= "hsotgusb_ick",
2994	.prcm		= {
2995		.omap2 = {
2996			.prcm_reg_id = 1,
2997			.module_bit = OMAP3430_EN_HSOTGUSB_SHIFT,
2998			.module_offs = CORE_MOD,
2999			.idlest_reg_id = 1,
3000			.idlest_idle_bit = OMAP3430ES2_ST_HSOTGUSB_IDLE_SHIFT,
3001			.idlest_stdby_bit = OMAP3430ES2_ST_HSOTGUSB_STDBY_SHIFT
3002		},
3003	},
3004	.masters	= omap3xxx_usbhsotg_masters,
3005	.masters_cnt	= ARRAY_SIZE(omap3xxx_usbhsotg_masters),
3006	.slaves		= omap3xxx_usbhsotg_slaves,
3007	.slaves_cnt	= ARRAY_SIZE(omap3xxx_usbhsotg_slaves),
3008	.class		= &usbotg_class,
3009
3010	/*
3011	 * Erratum ID: i479  idle_req / idle_ack mechanism potentially
3012	 * broken when autoidle is enabled
3013	 * workaround is to disable the autoidle bit at module level.
3014	 */
3015	.flags		= HWMOD_NO_OCP_AUTOIDLE | HWMOD_SWSUP_SIDLE
3016				| HWMOD_SWSUP_MSTANDBY,
3017	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
3018};
3019
3020/* usb_otg_hs */
3021static struct omap_hwmod_irq_info am35xx_usbhsotg_mpu_irqs[] = {
3022
3023	{ .name = "mc", .irq = 71 },
3024	{ .irq = -1 }
3025};
3026
3027static struct omap_hwmod_class am35xx_usbotg_class = {
3028	.name = "am35xx_usbotg",
3029	.sysc = NULL,
3030};
3031
3032static struct omap_hwmod am35xx_usbhsotg_hwmod = {
3033	.name		= "am35x_otg_hs",
3034	.mpu_irqs	= am35xx_usbhsotg_mpu_irqs,
3035	.main_clk	= NULL,
3036	.prcm = {
3037		.omap2 = {
3038		},
3039	},
3040	.masters	= am35xx_usbhsotg_masters,
3041	.masters_cnt	= ARRAY_SIZE(am35xx_usbhsotg_masters),
3042	.slaves		= am35xx_usbhsotg_slaves,
3043	.slaves_cnt	= ARRAY_SIZE(am35xx_usbhsotg_slaves),
3044	.class		= &am35xx_usbotg_class,
3045	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES3_1)
3046};
3047
3048/* MMC/SD/SDIO common */
3049
3050static struct omap_hwmod_class_sysconfig omap34xx_mmc_sysc = {
3051	.rev_offs	= 0x1fc,
3052	.sysc_offs	= 0x10,
3053	.syss_offs	= 0x14,
3054	.sysc_flags	= (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
3055			   SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
3056			   SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
3057	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
3058	.sysc_fields    = &omap_hwmod_sysc_type1,
3059};
3060
3061static struct omap_hwmod_class omap34xx_mmc_class = {
3062	.name = "mmc",
3063	.sysc = &omap34xx_mmc_sysc,
3064};
3065
3066/* MMC/SD/SDIO1 */
3067
3068static struct omap_hwmod_irq_info omap34xx_mmc1_mpu_irqs[] = {
3069	{ .irq = 83, },
3070	{ .irq = -1 }
3071};
3072
3073static struct omap_hwmod_dma_info omap34xx_mmc1_sdma_reqs[] = {
3074	{ .name = "tx",	.dma_req = 61, },
3075	{ .name = "rx",	.dma_req = 62, },
3076	{ .dma_req = -1 }
3077};
3078
3079static struct omap_hwmod_opt_clk omap34xx_mmc1_opt_clks[] = {
3080	{ .role = "dbck", .clk = "omap_32k_fck", },
3081};
3082
3083static struct omap_hwmod_ocp_if *omap3xxx_mmc1_slaves[] = {
3084	&omap3xxx_l4_core__mmc1,
3085};
3086
3087static struct omap_mmc_dev_attr mmc1_dev_attr = {
3088	.flags = OMAP_HSMMC_SUPPORTS_DUAL_VOLT,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3089};
3090
3091static struct omap_hwmod omap3xxx_mmc1_hwmod = {
3092	.name		= "mmc1",
3093	.mpu_irqs	= omap34xx_mmc1_mpu_irqs,
3094	.sdma_reqs	= omap34xx_mmc1_sdma_reqs,
3095	.opt_clks	= omap34xx_mmc1_opt_clks,
3096	.opt_clks_cnt	= ARRAY_SIZE(omap34xx_mmc1_opt_clks),
3097	.main_clk	= "mmchs1_fck",
3098	.prcm		= {
3099		.omap2 = {
3100			.module_offs = CORE_MOD,
3101			.prcm_reg_id = 1,
3102			.module_bit = OMAP3430_EN_MMC1_SHIFT,
3103			.idlest_reg_id = 1,
3104			.idlest_idle_bit = OMAP3430_ST_MMC1_SHIFT,
3105		},
3106	},
3107	.dev_attr	= &mmc1_dev_attr,
3108	.slaves		= omap3xxx_mmc1_slaves,
3109	.slaves_cnt	= ARRAY_SIZE(omap3xxx_mmc1_slaves),
3110	.class		= &omap34xx_mmc_class,
3111	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
3112};
3113
3114/* MMC/SD/SDIO2 */
3115
3116static struct omap_hwmod_irq_info omap34xx_mmc2_mpu_irqs[] = {
3117	{ .irq = INT_24XX_MMC2_IRQ, },
3118	{ .irq = -1 }
3119};
3120
3121static struct omap_hwmod_dma_info omap34xx_mmc2_sdma_reqs[] = {
3122	{ .name = "tx",	.dma_req = 47, },
3123	{ .name = "rx",	.dma_req = 48, },
3124	{ .dma_req = -1 }
3125};
3126
3127static struct omap_hwmod_opt_clk omap34xx_mmc2_opt_clks[] = {
3128	{ .role = "dbck", .clk = "omap_32k_fck", },
3129};
3130
3131static struct omap_hwmod_ocp_if *omap3xxx_mmc2_slaves[] = {
3132	&omap3xxx_l4_core__mmc2,
 
3133};
3134
3135static struct omap_hwmod omap3xxx_mmc2_hwmod = {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3136	.name		= "mmc2",
3137	.mpu_irqs	= omap34xx_mmc2_mpu_irqs,
3138	.sdma_reqs	= omap34xx_mmc2_sdma_reqs,
3139	.opt_clks	= omap34xx_mmc2_opt_clks,
3140	.opt_clks_cnt	= ARRAY_SIZE(omap34xx_mmc2_opt_clks),
3141	.main_clk	= "mmchs2_fck",
3142	.prcm		= {
3143		.omap2 = {
3144			.module_offs = CORE_MOD,
3145			.prcm_reg_id = 1,
3146			.module_bit = OMAP3430_EN_MMC2_SHIFT,
3147			.idlest_reg_id = 1,
3148			.idlest_idle_bit = OMAP3430_ST_MMC2_SHIFT,
3149		},
3150	},
3151	.slaves		= omap3xxx_mmc2_slaves,
3152	.slaves_cnt	= ARRAY_SIZE(omap3xxx_mmc2_slaves),
3153	.class		= &omap34xx_mmc_class,
3154	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
3155};
3156
3157/* MMC/SD/SDIO3 */
3158
3159static struct omap_hwmod_irq_info omap34xx_mmc3_mpu_irqs[] = {
3160	{ .irq = 94, },
3161	{ .irq = -1 }
3162};
3163
3164static struct omap_hwmod_dma_info omap34xx_mmc3_sdma_reqs[] = {
3165	{ .name = "tx",	.dma_req = 77, },
3166	{ .name = "rx",	.dma_req = 78, },
3167	{ .dma_req = -1 }
3168};
3169
3170static struct omap_hwmod_opt_clk omap34xx_mmc3_opt_clks[] = {
3171	{ .role = "dbck", .clk = "omap_32k_fck", },
3172};
3173
3174static struct omap_hwmod_ocp_if *omap3xxx_mmc3_slaves[] = {
3175	&omap3xxx_l4_core__mmc3,
3176};
3177
3178static struct omap_hwmod omap3xxx_mmc3_hwmod = {
3179	.name		= "mmc3",
3180	.mpu_irqs	= omap34xx_mmc3_mpu_irqs,
3181	.sdma_reqs	= omap34xx_mmc3_sdma_reqs,
3182	.opt_clks	= omap34xx_mmc3_opt_clks,
3183	.opt_clks_cnt	= ARRAY_SIZE(omap34xx_mmc3_opt_clks),
3184	.main_clk	= "mmchs3_fck",
3185	.prcm		= {
3186		.omap2 = {
3187			.prcm_reg_id = 1,
3188			.module_bit = OMAP3430_EN_MMC3_SHIFT,
3189			.idlest_reg_id = 1,
3190			.idlest_idle_bit = OMAP3430_ST_MMC3_SHIFT,
3191		},
3192	},
3193	.slaves		= omap3xxx_mmc3_slaves,
3194	.slaves_cnt	= ARRAY_SIZE(omap3xxx_mmc3_slaves),
3195	.class		= &omap34xx_mmc_class,
3196	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
3197};
3198
3199static __initdata struct omap_hwmod *omap3xxx_hwmods[] = {
3200	&omap3xxx_l3_main_hwmod,
3201	&omap3xxx_l4_core_hwmod,
3202	&omap3xxx_l4_per_hwmod,
3203	&omap3xxx_l4_wkup_hwmod,
3204	&omap3xxx_mmc1_hwmod,
3205	&omap3xxx_mmc2_hwmod,
3206	&omap3xxx_mmc3_hwmod,
3207	&omap3xxx_mpu_hwmod,
3208	&omap3xxx_iva_hwmod,
3209
3210	&omap3xxx_timer1_hwmod,
3211	&omap3xxx_timer2_hwmod,
3212	&omap3xxx_timer3_hwmod,
3213	&omap3xxx_timer4_hwmod,
3214	&omap3xxx_timer5_hwmod,
3215	&omap3xxx_timer6_hwmod,
3216	&omap3xxx_timer7_hwmod,
3217	&omap3xxx_timer8_hwmod,
3218	&omap3xxx_timer9_hwmod,
3219	&omap3xxx_timer10_hwmod,
3220	&omap3xxx_timer11_hwmod,
3221	&omap3xxx_timer12_hwmod,
3222
3223	&omap3xxx_wd_timer2_hwmod,
3224	&omap3xxx_uart1_hwmod,
3225	&omap3xxx_uart2_hwmod,
3226	&omap3xxx_uart3_hwmod,
3227	&omap3xxx_uart4_hwmod,
3228	/* dss class */
3229	&omap3430es1_dss_core_hwmod,
3230	&omap3xxx_dss_core_hwmod,
3231	&omap3xxx_dss_dispc_hwmod,
3232	&omap3xxx_dss_dsi1_hwmod,
3233	&omap3xxx_dss_rfbi_hwmod,
3234	&omap3xxx_dss_venc_hwmod,
3235
3236	/* i2c class */
3237	&omap3xxx_i2c1_hwmod,
3238	&omap3xxx_i2c2_hwmod,
3239	&omap3xxx_i2c3_hwmod,
3240	&omap34xx_sr1_hwmod,
3241	&omap34xx_sr2_hwmod,
3242	&omap36xx_sr1_hwmod,
3243	&omap36xx_sr2_hwmod,
3244
3245
3246	/* gpio class */
3247	&omap3xxx_gpio1_hwmod,
3248	&omap3xxx_gpio2_hwmod,
3249	&omap3xxx_gpio3_hwmod,
3250	&omap3xxx_gpio4_hwmod,
3251	&omap3xxx_gpio5_hwmod,
3252	&omap3xxx_gpio6_hwmod,
3253
3254	/* dma_system class*/
3255	&omap3xxx_dma_system_hwmod,
3256
3257	/* mcbsp class */
3258	&omap3xxx_mcbsp1_hwmod,
3259	&omap3xxx_mcbsp2_hwmod,
3260	&omap3xxx_mcbsp3_hwmod,
3261	&omap3xxx_mcbsp4_hwmod,
3262	&omap3xxx_mcbsp5_hwmod,
3263	&omap3xxx_mcbsp2_sidetone_hwmod,
3264	&omap3xxx_mcbsp3_sidetone_hwmod,
3265
3266	/* mailbox class */
3267	&omap3xxx_mailbox_hwmod,
3268
3269	/* mcspi class */
3270	&omap34xx_mcspi1,
3271	&omap34xx_mcspi2,
3272	&omap34xx_mcspi3,
3273	&omap34xx_mcspi4,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3274
3275	/* usbotg class */
3276	&omap3xxx_usbhsotg_hwmod,
3277
3278	/* usbotg for am35x */
3279	&am35xx_usbhsotg_hwmod,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3280
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3281	NULL,
3282};
3283
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3284int __init omap3xxx_hwmod_init(void)
3285{
3286	return omap_hwmod_register(omap3xxx_hwmods);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3287}