162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * omap_hwmod_3xxx_data.c - hardware modules present on the OMAP3xxx chips
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (C) 2009-2011 Nokia Corporation
662306a36Sopenharmony_ci * Copyright (C) 2012 Texas Instruments, Inc.
762306a36Sopenharmony_ci * Paul Walmsley
862306a36Sopenharmony_ci *
962306a36Sopenharmony_ci * The data in this file should be completely autogeneratable from
1062306a36Sopenharmony_ci * the TI hardware database or other technical documentation.
1162306a36Sopenharmony_ci *
1262306a36Sopenharmony_ci * XXX these should be marked initdata for multi-OMAP kernels
1362306a36Sopenharmony_ci */
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci#include <linux/platform_data/i2c-omap.h>
1662306a36Sopenharmony_ci#include <linux/power/smartreflex.h>
1762306a36Sopenharmony_ci#include <linux/platform_data/hsmmc-omap.h>
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci#include "l3_3xxx.h"
2062306a36Sopenharmony_ci#include "l4_3xxx.h"
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci#include "soc.h"
2362306a36Sopenharmony_ci#include "omap_hwmod.h"
2462306a36Sopenharmony_ci#include "omap_hwmod_common_data.h"
2562306a36Sopenharmony_ci#include "prm-regbits-34xx.h"
2662306a36Sopenharmony_ci#include "cm-regbits-34xx.h"
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci#include "i2c.h"
2962306a36Sopenharmony_ci#include "wd_timer.h"
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ci/*
3262306a36Sopenharmony_ci * OMAP3xxx hardware module integration data
3362306a36Sopenharmony_ci *
3462306a36Sopenharmony_ci * All of the data in this section should be autogeneratable from the
3562306a36Sopenharmony_ci * TI hardware database or other technical documentation.  Data that
3662306a36Sopenharmony_ci * is driver-specific or driver-kernel integration-specific belongs
3762306a36Sopenharmony_ci * elsewhere.
3862306a36Sopenharmony_ci */
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ci#define AM35XX_IPSS_USBOTGSS_BASE      0x5C040000
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ci/*
4362306a36Sopenharmony_ci * IP blocks
4462306a36Sopenharmony_ci */
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ci/* L3 */
4762306a36Sopenharmony_ci
4862306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_l3_main_hwmod = {
4962306a36Sopenharmony_ci	.name		= "l3_main",
5062306a36Sopenharmony_ci	.class		= &l3_hwmod_class,
5162306a36Sopenharmony_ci	.flags		= HWMOD_NO_IDLEST,
5262306a36Sopenharmony_ci};
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_ci/* L4 CORE */
5562306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_l4_core_hwmod = {
5662306a36Sopenharmony_ci	.name		= "l4_core",
5762306a36Sopenharmony_ci	.class		= &l4_hwmod_class,
5862306a36Sopenharmony_ci	.flags		= HWMOD_NO_IDLEST,
5962306a36Sopenharmony_ci};
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_ci/* L4 PER */
6262306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_l4_per_hwmod = {
6362306a36Sopenharmony_ci	.name		= "l4_per",
6462306a36Sopenharmony_ci	.class		= &l4_hwmod_class,
6562306a36Sopenharmony_ci	.flags		= HWMOD_NO_IDLEST,
6662306a36Sopenharmony_ci};
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_ci/* L4 WKUP */
6962306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_l4_wkup_hwmod = {
7062306a36Sopenharmony_ci	.name		= "l4_wkup",
7162306a36Sopenharmony_ci	.class		= &l4_hwmod_class,
7262306a36Sopenharmony_ci	.flags		= HWMOD_NO_IDLEST,
7362306a36Sopenharmony_ci};
7462306a36Sopenharmony_ci
7562306a36Sopenharmony_ci/* L4 SEC */
7662306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_l4_sec_hwmod = {
7762306a36Sopenharmony_ci	.name		= "l4_sec",
7862306a36Sopenharmony_ci	.class		= &l4_hwmod_class,
7962306a36Sopenharmony_ci	.flags		= HWMOD_NO_IDLEST,
8062306a36Sopenharmony_ci};
8162306a36Sopenharmony_ci
8262306a36Sopenharmony_ci/* MPU */
8362306a36Sopenharmony_ci
8462306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_mpu_hwmod = {
8562306a36Sopenharmony_ci	.name		= "mpu",
8662306a36Sopenharmony_ci	.class		= &mpu_hwmod_class,
8762306a36Sopenharmony_ci	.main_clk	= "arm_fck",
8862306a36Sopenharmony_ci};
8962306a36Sopenharmony_ci
9062306a36Sopenharmony_ci/* IVA2 (IVA2) */
9162306a36Sopenharmony_cistatic struct omap_hwmod_rst_info omap3xxx_iva_resets[] = {
9262306a36Sopenharmony_ci	{ .name = "logic", .rst_shift = 0, .st_shift = 8 },
9362306a36Sopenharmony_ci	{ .name = "seq0", .rst_shift = 1, .st_shift = 9 },
9462306a36Sopenharmony_ci	{ .name = "seq1", .rst_shift = 2, .st_shift = 10 },
9562306a36Sopenharmony_ci};
9662306a36Sopenharmony_ci
9762306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_iva_hwmod = {
9862306a36Sopenharmony_ci	.name		= "iva",
9962306a36Sopenharmony_ci	.class		= &iva_hwmod_class,
10062306a36Sopenharmony_ci	.clkdm_name	= "iva2_clkdm",
10162306a36Sopenharmony_ci	.rst_lines	= omap3xxx_iva_resets,
10262306a36Sopenharmony_ci	.rst_lines_cnt	= ARRAY_SIZE(omap3xxx_iva_resets),
10362306a36Sopenharmony_ci	.main_clk	= "iva2_ck",
10462306a36Sopenharmony_ci	.prcm = {
10562306a36Sopenharmony_ci		.omap2 = {
10662306a36Sopenharmony_ci			.module_offs = OMAP3430_IVA2_MOD,
10762306a36Sopenharmony_ci			.idlest_reg_id = 1,
10862306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_ST_IVA2_SHIFT,
10962306a36Sopenharmony_ci		},
11062306a36Sopenharmony_ci	},
11162306a36Sopenharmony_ci};
11262306a36Sopenharmony_ci
11362306a36Sopenharmony_ci/*
11462306a36Sopenharmony_ci * 'debugss' class
11562306a36Sopenharmony_ci * debug and emulation sub system
11662306a36Sopenharmony_ci */
11762306a36Sopenharmony_ci
11862306a36Sopenharmony_cistatic struct omap_hwmod_class omap3xxx_debugss_hwmod_class = {
11962306a36Sopenharmony_ci	.name	= "debugss",
12062306a36Sopenharmony_ci};
12162306a36Sopenharmony_ci
12262306a36Sopenharmony_ci/* debugss */
12362306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_debugss_hwmod = {
12462306a36Sopenharmony_ci	.name		= "debugss",
12562306a36Sopenharmony_ci	.class		= &omap3xxx_debugss_hwmod_class,
12662306a36Sopenharmony_ci	.clkdm_name	= "emu_clkdm",
12762306a36Sopenharmony_ci	.main_clk	= "emu_src_ck",
12862306a36Sopenharmony_ci	.flags		= HWMOD_NO_IDLEST,
12962306a36Sopenharmony_ci};
13062306a36Sopenharmony_ci
13162306a36Sopenharmony_ci/* timer class */
13262306a36Sopenharmony_cistatic struct omap_hwmod_class_sysconfig omap3xxx_timer_sysc = {
13362306a36Sopenharmony_ci	.rev_offs	= 0x0000,
13462306a36Sopenharmony_ci	.sysc_offs	= 0x0010,
13562306a36Sopenharmony_ci	.syss_offs	= 0x0014,
13662306a36Sopenharmony_ci	.sysc_flags	= (SYSC_HAS_SIDLEMODE | SYSC_HAS_CLOCKACTIVITY |
13762306a36Sopenharmony_ci			   SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
13862306a36Sopenharmony_ci			   SYSC_HAS_EMUFREE | SYSC_HAS_AUTOIDLE |
13962306a36Sopenharmony_ci			   SYSS_HAS_RESET_STATUS),
14062306a36Sopenharmony_ci	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
14162306a36Sopenharmony_ci	.sysc_fields	= &omap_hwmod_sysc_type1,
14262306a36Sopenharmony_ci};
14362306a36Sopenharmony_ci
14462306a36Sopenharmony_cistatic struct omap_hwmod_class omap3xxx_timer_hwmod_class = {
14562306a36Sopenharmony_ci	.name = "timer",
14662306a36Sopenharmony_ci	.sysc = &omap3xxx_timer_sysc,
14762306a36Sopenharmony_ci};
14862306a36Sopenharmony_ci
14962306a36Sopenharmony_ci/* timer3 */
15062306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_timer3_hwmod = {
15162306a36Sopenharmony_ci	.name		= "timer3",
15262306a36Sopenharmony_ci	.main_clk	= "gpt3_fck",
15362306a36Sopenharmony_ci	.prcm		= {
15462306a36Sopenharmony_ci		.omap2 = {
15562306a36Sopenharmony_ci			.module_offs = OMAP3430_PER_MOD,
15662306a36Sopenharmony_ci			.idlest_reg_id = 1,
15762306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_ST_GPT3_SHIFT,
15862306a36Sopenharmony_ci		},
15962306a36Sopenharmony_ci	},
16062306a36Sopenharmony_ci	.class		= &omap3xxx_timer_hwmod_class,
16162306a36Sopenharmony_ci	.flags		= HWMOD_SET_DEFAULT_CLOCKACT,
16262306a36Sopenharmony_ci};
16362306a36Sopenharmony_ci
16462306a36Sopenharmony_ci/* timer4 */
16562306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_timer4_hwmod = {
16662306a36Sopenharmony_ci	.name		= "timer4",
16762306a36Sopenharmony_ci	.main_clk	= "gpt4_fck",
16862306a36Sopenharmony_ci	.prcm		= {
16962306a36Sopenharmony_ci		.omap2 = {
17062306a36Sopenharmony_ci			.module_offs = OMAP3430_PER_MOD,
17162306a36Sopenharmony_ci			.idlest_reg_id = 1,
17262306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_ST_GPT4_SHIFT,
17362306a36Sopenharmony_ci		},
17462306a36Sopenharmony_ci	},
17562306a36Sopenharmony_ci	.class		= &omap3xxx_timer_hwmod_class,
17662306a36Sopenharmony_ci	.flags		= HWMOD_SET_DEFAULT_CLOCKACT,
17762306a36Sopenharmony_ci};
17862306a36Sopenharmony_ci
17962306a36Sopenharmony_ci/* timer5 */
18062306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_timer5_hwmod = {
18162306a36Sopenharmony_ci	.name		= "timer5",
18262306a36Sopenharmony_ci	.main_clk	= "gpt5_fck",
18362306a36Sopenharmony_ci	.prcm		= {
18462306a36Sopenharmony_ci		.omap2 = {
18562306a36Sopenharmony_ci			.module_offs = OMAP3430_PER_MOD,
18662306a36Sopenharmony_ci			.idlest_reg_id = 1,
18762306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_ST_GPT5_SHIFT,
18862306a36Sopenharmony_ci		},
18962306a36Sopenharmony_ci	},
19062306a36Sopenharmony_ci	.class		= &omap3xxx_timer_hwmod_class,
19162306a36Sopenharmony_ci	.flags		= HWMOD_SET_DEFAULT_CLOCKACT,
19262306a36Sopenharmony_ci};
19362306a36Sopenharmony_ci
19462306a36Sopenharmony_ci/* timer6 */
19562306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_timer6_hwmod = {
19662306a36Sopenharmony_ci	.name		= "timer6",
19762306a36Sopenharmony_ci	.main_clk	= "gpt6_fck",
19862306a36Sopenharmony_ci	.prcm		= {
19962306a36Sopenharmony_ci		.omap2 = {
20062306a36Sopenharmony_ci			.module_offs = OMAP3430_PER_MOD,
20162306a36Sopenharmony_ci			.idlest_reg_id = 1,
20262306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_ST_GPT6_SHIFT,
20362306a36Sopenharmony_ci		},
20462306a36Sopenharmony_ci	},
20562306a36Sopenharmony_ci	.class		= &omap3xxx_timer_hwmod_class,
20662306a36Sopenharmony_ci	.flags		= HWMOD_SET_DEFAULT_CLOCKACT,
20762306a36Sopenharmony_ci};
20862306a36Sopenharmony_ci
20962306a36Sopenharmony_ci/* timer7 */
21062306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_timer7_hwmod = {
21162306a36Sopenharmony_ci	.name		= "timer7",
21262306a36Sopenharmony_ci	.main_clk	= "gpt7_fck",
21362306a36Sopenharmony_ci	.prcm		= {
21462306a36Sopenharmony_ci		.omap2 = {
21562306a36Sopenharmony_ci			.module_offs = OMAP3430_PER_MOD,
21662306a36Sopenharmony_ci			.idlest_reg_id = 1,
21762306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_ST_GPT7_SHIFT,
21862306a36Sopenharmony_ci		},
21962306a36Sopenharmony_ci	},
22062306a36Sopenharmony_ci	.class		= &omap3xxx_timer_hwmod_class,
22162306a36Sopenharmony_ci	.flags		= HWMOD_SET_DEFAULT_CLOCKACT,
22262306a36Sopenharmony_ci};
22362306a36Sopenharmony_ci
22462306a36Sopenharmony_ci/* timer8 */
22562306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_timer8_hwmod = {
22662306a36Sopenharmony_ci	.name		= "timer8",
22762306a36Sopenharmony_ci	.main_clk	= "gpt8_fck",
22862306a36Sopenharmony_ci	.prcm		= {
22962306a36Sopenharmony_ci		.omap2 = {
23062306a36Sopenharmony_ci			.module_offs = OMAP3430_PER_MOD,
23162306a36Sopenharmony_ci			.idlest_reg_id = 1,
23262306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_ST_GPT8_SHIFT,
23362306a36Sopenharmony_ci		},
23462306a36Sopenharmony_ci	},
23562306a36Sopenharmony_ci	.class		= &omap3xxx_timer_hwmod_class,
23662306a36Sopenharmony_ci	.flags		= HWMOD_SET_DEFAULT_CLOCKACT,
23762306a36Sopenharmony_ci};
23862306a36Sopenharmony_ci
23962306a36Sopenharmony_ci/* timer9 */
24062306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_timer9_hwmod = {
24162306a36Sopenharmony_ci	.name		= "timer9",
24262306a36Sopenharmony_ci	.main_clk	= "gpt9_fck",
24362306a36Sopenharmony_ci	.prcm		= {
24462306a36Sopenharmony_ci		.omap2 = {
24562306a36Sopenharmony_ci			.module_offs = OMAP3430_PER_MOD,
24662306a36Sopenharmony_ci			.idlest_reg_id = 1,
24762306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_ST_GPT9_SHIFT,
24862306a36Sopenharmony_ci		},
24962306a36Sopenharmony_ci	},
25062306a36Sopenharmony_ci	.class		= &omap3xxx_timer_hwmod_class,
25162306a36Sopenharmony_ci	.flags		= HWMOD_SET_DEFAULT_CLOCKACT,
25262306a36Sopenharmony_ci};
25362306a36Sopenharmony_ci
25462306a36Sopenharmony_ci/* timer10 */
25562306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_timer10_hwmod = {
25662306a36Sopenharmony_ci	.name		= "timer10",
25762306a36Sopenharmony_ci	.main_clk	= "gpt10_fck",
25862306a36Sopenharmony_ci	.prcm		= {
25962306a36Sopenharmony_ci		.omap2 = {
26062306a36Sopenharmony_ci			.module_offs = CORE_MOD,
26162306a36Sopenharmony_ci			.idlest_reg_id = 1,
26262306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_ST_GPT10_SHIFT,
26362306a36Sopenharmony_ci		},
26462306a36Sopenharmony_ci	},
26562306a36Sopenharmony_ci	.class		= &omap3xxx_timer_hwmod_class,
26662306a36Sopenharmony_ci	.flags		= HWMOD_SET_DEFAULT_CLOCKACT,
26762306a36Sopenharmony_ci};
26862306a36Sopenharmony_ci
26962306a36Sopenharmony_ci/* timer11 */
27062306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_timer11_hwmod = {
27162306a36Sopenharmony_ci	.name		= "timer11",
27262306a36Sopenharmony_ci	.main_clk	= "gpt11_fck",
27362306a36Sopenharmony_ci	.prcm		= {
27462306a36Sopenharmony_ci		.omap2 = {
27562306a36Sopenharmony_ci			.module_offs = CORE_MOD,
27662306a36Sopenharmony_ci			.idlest_reg_id = 1,
27762306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_ST_GPT11_SHIFT,
27862306a36Sopenharmony_ci		},
27962306a36Sopenharmony_ci	},
28062306a36Sopenharmony_ci	.class		= &omap3xxx_timer_hwmod_class,
28162306a36Sopenharmony_ci	.flags		= HWMOD_SET_DEFAULT_CLOCKACT,
28262306a36Sopenharmony_ci};
28362306a36Sopenharmony_ci
28462306a36Sopenharmony_ci/*
28562306a36Sopenharmony_ci * 'wd_timer' class
28662306a36Sopenharmony_ci * 32-bit watchdog upward counter that generates a pulse on the reset pin on
28762306a36Sopenharmony_ci * overflow condition
28862306a36Sopenharmony_ci */
28962306a36Sopenharmony_ci
29062306a36Sopenharmony_cistatic struct omap_hwmod_class_sysconfig omap3xxx_wd_timer_sysc = {
29162306a36Sopenharmony_ci	.rev_offs	= 0x0000,
29262306a36Sopenharmony_ci	.sysc_offs	= 0x0010,
29362306a36Sopenharmony_ci	.syss_offs	= 0x0014,
29462306a36Sopenharmony_ci	.sysc_flags	= (SYSC_HAS_SIDLEMODE | SYSC_HAS_EMUFREE |
29562306a36Sopenharmony_ci			   SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
29662306a36Sopenharmony_ci			   SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
29762306a36Sopenharmony_ci			   SYSS_HAS_RESET_STATUS),
29862306a36Sopenharmony_ci	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
29962306a36Sopenharmony_ci	.sysc_fields    = &omap_hwmod_sysc_type1,
30062306a36Sopenharmony_ci};
30162306a36Sopenharmony_ci
30262306a36Sopenharmony_ci/* I2C common */
30362306a36Sopenharmony_cistatic struct omap_hwmod_class_sysconfig i2c_sysc = {
30462306a36Sopenharmony_ci	.rev_offs	= 0x00,
30562306a36Sopenharmony_ci	.sysc_offs	= 0x20,
30662306a36Sopenharmony_ci	.syss_offs	= 0x10,
30762306a36Sopenharmony_ci	.sysc_flags	= (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
30862306a36Sopenharmony_ci			   SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
30962306a36Sopenharmony_ci			   SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
31062306a36Sopenharmony_ci	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
31162306a36Sopenharmony_ci	.sysc_fields    = &omap_hwmod_sysc_type1,
31262306a36Sopenharmony_ci};
31362306a36Sopenharmony_ci
31462306a36Sopenharmony_cistatic struct omap_hwmod_class omap3xxx_wd_timer_hwmod_class = {
31562306a36Sopenharmony_ci	.name		= "wd_timer",
31662306a36Sopenharmony_ci	.sysc		= &omap3xxx_wd_timer_sysc,
31762306a36Sopenharmony_ci	.pre_shutdown	= &omap2_wd_timer_disable,
31862306a36Sopenharmony_ci	.reset		= &omap2_wd_timer_reset,
31962306a36Sopenharmony_ci};
32062306a36Sopenharmony_ci
32162306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_wd_timer2_hwmod = {
32262306a36Sopenharmony_ci	.name		= "wd_timer2",
32362306a36Sopenharmony_ci	.class		= &omap3xxx_wd_timer_hwmod_class,
32462306a36Sopenharmony_ci	.main_clk	= "wdt2_fck",
32562306a36Sopenharmony_ci	.prcm		= {
32662306a36Sopenharmony_ci		.omap2 = {
32762306a36Sopenharmony_ci			.module_offs = WKUP_MOD,
32862306a36Sopenharmony_ci			.idlest_reg_id = 1,
32962306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_ST_WDT2_SHIFT,
33062306a36Sopenharmony_ci		},
33162306a36Sopenharmony_ci	},
33262306a36Sopenharmony_ci	/*
33362306a36Sopenharmony_ci	 * XXX: Use software supervised mode, HW supervised smartidle seems to
33462306a36Sopenharmony_ci	 * block CORE power domain idle transitions. Maybe a HW bug in wdt2?
33562306a36Sopenharmony_ci	 */
33662306a36Sopenharmony_ci	.flags		= HWMOD_SWSUP_SIDLE,
33762306a36Sopenharmony_ci};
33862306a36Sopenharmony_ci
33962306a36Sopenharmony_ci/* UART1 */
34062306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_uart1_hwmod = {
34162306a36Sopenharmony_ci	.name		= "uart1",
34262306a36Sopenharmony_ci	.main_clk	= "uart1_fck",
34362306a36Sopenharmony_ci	.flags		= DEBUG_TI81XXUART1_FLAGS | HWMOD_SWSUP_SIDLE,
34462306a36Sopenharmony_ci	.prcm		= {
34562306a36Sopenharmony_ci		.omap2 = {
34662306a36Sopenharmony_ci			.module_offs = CORE_MOD,
34762306a36Sopenharmony_ci			.idlest_reg_id = 1,
34862306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_EN_UART1_SHIFT,
34962306a36Sopenharmony_ci		},
35062306a36Sopenharmony_ci	},
35162306a36Sopenharmony_ci	.class		= &omap2_uart_class,
35262306a36Sopenharmony_ci};
35362306a36Sopenharmony_ci
35462306a36Sopenharmony_ci/* UART2 */
35562306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_uart2_hwmod = {
35662306a36Sopenharmony_ci	.name		= "uart2",
35762306a36Sopenharmony_ci	.main_clk	= "uart2_fck",
35862306a36Sopenharmony_ci	.flags		= DEBUG_TI81XXUART2_FLAGS | HWMOD_SWSUP_SIDLE,
35962306a36Sopenharmony_ci	.prcm		= {
36062306a36Sopenharmony_ci		.omap2 = {
36162306a36Sopenharmony_ci			.module_offs = CORE_MOD,
36262306a36Sopenharmony_ci			.idlest_reg_id = 1,
36362306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_EN_UART2_SHIFT,
36462306a36Sopenharmony_ci		},
36562306a36Sopenharmony_ci	},
36662306a36Sopenharmony_ci	.class		= &omap2_uart_class,
36762306a36Sopenharmony_ci};
36862306a36Sopenharmony_ci
36962306a36Sopenharmony_ci/* UART3 */
37062306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_uart3_hwmod = {
37162306a36Sopenharmony_ci	.name		= "uart3",
37262306a36Sopenharmony_ci	.main_clk	= "uart3_fck",
37362306a36Sopenharmony_ci	.flags		= DEBUG_OMAP3UART3_FLAGS | DEBUG_TI81XXUART3_FLAGS |
37462306a36Sopenharmony_ci				HWMOD_SWSUP_SIDLE,
37562306a36Sopenharmony_ci	.prcm		= {
37662306a36Sopenharmony_ci		.omap2 = {
37762306a36Sopenharmony_ci			.module_offs = OMAP3430_PER_MOD,
37862306a36Sopenharmony_ci			.idlest_reg_id = 1,
37962306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_EN_UART3_SHIFT,
38062306a36Sopenharmony_ci		},
38162306a36Sopenharmony_ci	},
38262306a36Sopenharmony_ci	.class		= &omap2_uart_class,
38362306a36Sopenharmony_ci};
38462306a36Sopenharmony_ci
38562306a36Sopenharmony_ci/* UART4 */
38662306a36Sopenharmony_ci
38762306a36Sopenharmony_ci
38862306a36Sopenharmony_cistatic struct omap_hwmod omap36xx_uart4_hwmod = {
38962306a36Sopenharmony_ci	.name		= "uart4",
39062306a36Sopenharmony_ci	.main_clk	= "uart4_fck",
39162306a36Sopenharmony_ci	.flags		= DEBUG_OMAP3UART4_FLAGS | HWMOD_SWSUP_SIDLE,
39262306a36Sopenharmony_ci	.prcm		= {
39362306a36Sopenharmony_ci		.omap2 = {
39462306a36Sopenharmony_ci			.module_offs = OMAP3430_PER_MOD,
39562306a36Sopenharmony_ci			.idlest_reg_id = 1,
39662306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3630_EN_UART4_SHIFT,
39762306a36Sopenharmony_ci		},
39862306a36Sopenharmony_ci	},
39962306a36Sopenharmony_ci	.class		= &omap2_uart_class,
40062306a36Sopenharmony_ci};
40162306a36Sopenharmony_ci
40262306a36Sopenharmony_ci
40362306a36Sopenharmony_ci
40462306a36Sopenharmony_ci/*
40562306a36Sopenharmony_ci * XXX AM35xx UART4 cannot complete its softreset without uart1_fck or
40662306a36Sopenharmony_ci * uart2_fck being enabled.  So we add uart1_fck as an optional clock,
40762306a36Sopenharmony_ci * below, and set the HWMOD_CONTROL_OPT_CLKS_IN_RESET.  This really
40862306a36Sopenharmony_ci * should not be needed.  The functional clock structure of the AM35xx
40962306a36Sopenharmony_ci * UART4 is extremely unclear and opaque; it is unclear what the role
41062306a36Sopenharmony_ci * of uart1/2_fck is for the UART4.  Any clarification from either
41162306a36Sopenharmony_ci * empirical testing or the AM3505/3517 hardware designers would be
41262306a36Sopenharmony_ci * most welcome.
41362306a36Sopenharmony_ci */
41462306a36Sopenharmony_cistatic struct omap_hwmod_opt_clk am35xx_uart4_opt_clks[] = {
41562306a36Sopenharmony_ci	{ .role = "softreset_uart1_fck", .clk = "uart1_fck" },
41662306a36Sopenharmony_ci};
41762306a36Sopenharmony_ci
41862306a36Sopenharmony_cistatic struct omap_hwmod am35xx_uart4_hwmod = {
41962306a36Sopenharmony_ci	.name		= "uart4",
42062306a36Sopenharmony_ci	.main_clk	= "uart4_fck",
42162306a36Sopenharmony_ci	.prcm		= {
42262306a36Sopenharmony_ci		.omap2 = {
42362306a36Sopenharmony_ci			.module_offs = CORE_MOD,
42462306a36Sopenharmony_ci			.idlest_reg_id = 1,
42562306a36Sopenharmony_ci			.idlest_idle_bit = AM35XX_ST_UART4_SHIFT,
42662306a36Sopenharmony_ci		},
42762306a36Sopenharmony_ci	},
42862306a36Sopenharmony_ci	.opt_clks	= am35xx_uart4_opt_clks,
42962306a36Sopenharmony_ci	.opt_clks_cnt	= ARRAY_SIZE(am35xx_uart4_opt_clks),
43062306a36Sopenharmony_ci	.flags		= HWMOD_CONTROL_OPT_CLKS_IN_RESET,
43162306a36Sopenharmony_ci	.class		= &omap2_uart_class,
43262306a36Sopenharmony_ci};
43362306a36Sopenharmony_ci
43462306a36Sopenharmony_cistatic struct omap_hwmod_class i2c_class = {
43562306a36Sopenharmony_ci	.name	= "i2c",
43662306a36Sopenharmony_ci	.sysc	= &i2c_sysc,
43762306a36Sopenharmony_ci	.reset	= &omap_i2c_reset,
43862306a36Sopenharmony_ci};
43962306a36Sopenharmony_ci
44062306a36Sopenharmony_ci/* dss */
44162306a36Sopenharmony_cistatic struct omap_hwmod_opt_clk dss_opt_clks[] = {
44262306a36Sopenharmony_ci	/*
44362306a36Sopenharmony_ci	 * The DSS HW needs all DSS clocks enabled during reset. The dss_core
44462306a36Sopenharmony_ci	 * driver does not use these clocks.
44562306a36Sopenharmony_ci	 */
44662306a36Sopenharmony_ci	{ .role = "sys_clk", .clk = "dss2_alwon_fck" },
44762306a36Sopenharmony_ci	{ .role = "tv_clk", .clk = "dss_tv_fck" },
44862306a36Sopenharmony_ci	/* required only on OMAP3430 */
44962306a36Sopenharmony_ci	{ .role = "tv_dac_clk", .clk = "dss_96m_fck" },
45062306a36Sopenharmony_ci};
45162306a36Sopenharmony_ci
45262306a36Sopenharmony_cistatic struct omap_hwmod omap3430es1_dss_core_hwmod = {
45362306a36Sopenharmony_ci	.name		= "dss_core",
45462306a36Sopenharmony_ci	.class		= &omap2_dss_hwmod_class,
45562306a36Sopenharmony_ci	.main_clk	= "dss1_alwon_fck", /* instead of dss_fck */
45662306a36Sopenharmony_ci	.prcm		= {
45762306a36Sopenharmony_ci		.omap2 = {
45862306a36Sopenharmony_ci			.module_offs = OMAP3430_DSS_MOD,
45962306a36Sopenharmony_ci			.idlest_reg_id = 1,
46062306a36Sopenharmony_ci		},
46162306a36Sopenharmony_ci	},
46262306a36Sopenharmony_ci	.opt_clks	= dss_opt_clks,
46362306a36Sopenharmony_ci	.opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
46462306a36Sopenharmony_ci	.flags		= HWMOD_NO_IDLEST | HWMOD_CONTROL_OPT_CLKS_IN_RESET,
46562306a36Sopenharmony_ci};
46662306a36Sopenharmony_ci
46762306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_dss_core_hwmod = {
46862306a36Sopenharmony_ci	.name		= "dss_core",
46962306a36Sopenharmony_ci	.flags		= HWMOD_CONTROL_OPT_CLKS_IN_RESET,
47062306a36Sopenharmony_ci	.class		= &omap2_dss_hwmod_class,
47162306a36Sopenharmony_ci	.main_clk	= "dss1_alwon_fck", /* instead of dss_fck */
47262306a36Sopenharmony_ci	.prcm		= {
47362306a36Sopenharmony_ci		.omap2 = {
47462306a36Sopenharmony_ci			.module_offs = OMAP3430_DSS_MOD,
47562306a36Sopenharmony_ci			.idlest_reg_id = 1,
47662306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430ES2_ST_DSS_IDLE_SHIFT,
47762306a36Sopenharmony_ci		},
47862306a36Sopenharmony_ci	},
47962306a36Sopenharmony_ci	.opt_clks	= dss_opt_clks,
48062306a36Sopenharmony_ci	.opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
48162306a36Sopenharmony_ci};
48262306a36Sopenharmony_ci
48362306a36Sopenharmony_ci/*
48462306a36Sopenharmony_ci * 'dispc' class
48562306a36Sopenharmony_ci * display controller
48662306a36Sopenharmony_ci */
48762306a36Sopenharmony_ci
48862306a36Sopenharmony_cistatic struct omap_hwmod_class_sysconfig omap3_dispc_sysc = {
48962306a36Sopenharmony_ci	.rev_offs	= 0x0000,
49062306a36Sopenharmony_ci	.sysc_offs	= 0x0010,
49162306a36Sopenharmony_ci	.syss_offs	= 0x0014,
49262306a36Sopenharmony_ci	.sysc_flags	= (SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE |
49362306a36Sopenharmony_ci			   SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
49462306a36Sopenharmony_ci			   SYSC_HAS_ENAWAKEUP),
49562306a36Sopenharmony_ci	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
49662306a36Sopenharmony_ci			   MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
49762306a36Sopenharmony_ci	.sysc_fields	= &omap_hwmod_sysc_type1,
49862306a36Sopenharmony_ci};
49962306a36Sopenharmony_ci
50062306a36Sopenharmony_cistatic struct omap_hwmod_class omap3_dispc_hwmod_class = {
50162306a36Sopenharmony_ci	.name	= "dispc",
50262306a36Sopenharmony_ci	.sysc	= &omap3_dispc_sysc,
50362306a36Sopenharmony_ci};
50462306a36Sopenharmony_ci
50562306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_dss_dispc_hwmod = {
50662306a36Sopenharmony_ci	.name		= "dss_dispc",
50762306a36Sopenharmony_ci	.class		= &omap3_dispc_hwmod_class,
50862306a36Sopenharmony_ci	.main_clk	= "dss1_alwon_fck",
50962306a36Sopenharmony_ci	.prcm		= {
51062306a36Sopenharmony_ci		.omap2 = {
51162306a36Sopenharmony_ci			.module_offs = OMAP3430_DSS_MOD,
51262306a36Sopenharmony_ci		},
51362306a36Sopenharmony_ci	},
51462306a36Sopenharmony_ci	.flags		= HWMOD_NO_IDLEST,
51562306a36Sopenharmony_ci	.dev_attr	= &omap2_3_dss_dispc_dev_attr,
51662306a36Sopenharmony_ci};
51762306a36Sopenharmony_ci
51862306a36Sopenharmony_ci/*
51962306a36Sopenharmony_ci * 'dsi' class
52062306a36Sopenharmony_ci * display serial interface controller
52162306a36Sopenharmony_ci */
52262306a36Sopenharmony_ci
52362306a36Sopenharmony_cistatic struct omap_hwmod_class_sysconfig omap3xxx_dsi_sysc = {
52462306a36Sopenharmony_ci	.rev_offs	= 0x0000,
52562306a36Sopenharmony_ci	.sysc_offs	= 0x0010,
52662306a36Sopenharmony_ci	.syss_offs	= 0x0014,
52762306a36Sopenharmony_ci	.sysc_flags	= (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
52862306a36Sopenharmony_ci			   SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
52962306a36Sopenharmony_ci			   SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
53062306a36Sopenharmony_ci	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
53162306a36Sopenharmony_ci	.sysc_fields	= &omap_hwmod_sysc_type1,
53262306a36Sopenharmony_ci};
53362306a36Sopenharmony_ci
53462306a36Sopenharmony_cistatic struct omap_hwmod_class omap3xxx_dsi_hwmod_class = {
53562306a36Sopenharmony_ci	.name = "dsi",
53662306a36Sopenharmony_ci	.sysc	= &omap3xxx_dsi_sysc,
53762306a36Sopenharmony_ci};
53862306a36Sopenharmony_ci
53962306a36Sopenharmony_ci/* dss_dsi1 */
54062306a36Sopenharmony_cistatic struct omap_hwmod_opt_clk dss_dsi1_opt_clks[] = {
54162306a36Sopenharmony_ci	{ .role = "sys_clk", .clk = "dss2_alwon_fck" },
54262306a36Sopenharmony_ci};
54362306a36Sopenharmony_ci
54462306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_dss_dsi1_hwmod = {
54562306a36Sopenharmony_ci	.name		= "dss_dsi1",
54662306a36Sopenharmony_ci	.class		= &omap3xxx_dsi_hwmod_class,
54762306a36Sopenharmony_ci	.main_clk	= "dss1_alwon_fck",
54862306a36Sopenharmony_ci	.prcm		= {
54962306a36Sopenharmony_ci		.omap2 = {
55062306a36Sopenharmony_ci			.module_offs = OMAP3430_DSS_MOD,
55162306a36Sopenharmony_ci		},
55262306a36Sopenharmony_ci	},
55362306a36Sopenharmony_ci	.opt_clks	= dss_dsi1_opt_clks,
55462306a36Sopenharmony_ci	.opt_clks_cnt	= ARRAY_SIZE(dss_dsi1_opt_clks),
55562306a36Sopenharmony_ci	.flags		= HWMOD_NO_IDLEST,
55662306a36Sopenharmony_ci};
55762306a36Sopenharmony_ci
55862306a36Sopenharmony_cistatic struct omap_hwmod_opt_clk dss_rfbi_opt_clks[] = {
55962306a36Sopenharmony_ci	{ .role = "ick", .clk = "dss_ick" },
56062306a36Sopenharmony_ci};
56162306a36Sopenharmony_ci
56262306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_dss_rfbi_hwmod = {
56362306a36Sopenharmony_ci	.name		= "dss_rfbi",
56462306a36Sopenharmony_ci	.class		= &omap2_rfbi_hwmod_class,
56562306a36Sopenharmony_ci	.main_clk	= "dss1_alwon_fck",
56662306a36Sopenharmony_ci	.prcm		= {
56762306a36Sopenharmony_ci		.omap2 = {
56862306a36Sopenharmony_ci			.module_offs = OMAP3430_DSS_MOD,
56962306a36Sopenharmony_ci		},
57062306a36Sopenharmony_ci	},
57162306a36Sopenharmony_ci	.opt_clks	= dss_rfbi_opt_clks,
57262306a36Sopenharmony_ci	.opt_clks_cnt	= ARRAY_SIZE(dss_rfbi_opt_clks),
57362306a36Sopenharmony_ci	.flags		= HWMOD_NO_IDLEST,
57462306a36Sopenharmony_ci};
57562306a36Sopenharmony_ci
57662306a36Sopenharmony_cistatic struct omap_hwmod_opt_clk dss_venc_opt_clks[] = {
57762306a36Sopenharmony_ci	/* required only on OMAP3430 */
57862306a36Sopenharmony_ci	{ .role = "tv_dac_clk", .clk = "dss_96m_fck" },
57962306a36Sopenharmony_ci};
58062306a36Sopenharmony_ci
58162306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_dss_venc_hwmod = {
58262306a36Sopenharmony_ci	.name		= "dss_venc",
58362306a36Sopenharmony_ci	.class		= &omap2_venc_hwmod_class,
58462306a36Sopenharmony_ci	.main_clk	= "dss_tv_fck",
58562306a36Sopenharmony_ci	.prcm		= {
58662306a36Sopenharmony_ci		.omap2 = {
58762306a36Sopenharmony_ci			.module_offs = OMAP3430_DSS_MOD,
58862306a36Sopenharmony_ci		},
58962306a36Sopenharmony_ci	},
59062306a36Sopenharmony_ci	.opt_clks	= dss_venc_opt_clks,
59162306a36Sopenharmony_ci	.opt_clks_cnt	= ARRAY_SIZE(dss_venc_opt_clks),
59262306a36Sopenharmony_ci	.flags		= HWMOD_NO_IDLEST,
59362306a36Sopenharmony_ci};
59462306a36Sopenharmony_ci
59562306a36Sopenharmony_ci/* I2C1 */
59662306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_i2c1_hwmod = {
59762306a36Sopenharmony_ci	.name		= "i2c1",
59862306a36Sopenharmony_ci	.flags		= HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
59962306a36Sopenharmony_ci	.main_clk	= "i2c1_fck",
60062306a36Sopenharmony_ci	.prcm		= {
60162306a36Sopenharmony_ci		.omap2 = {
60262306a36Sopenharmony_ci			.module_offs = CORE_MOD,
60362306a36Sopenharmony_ci			.idlest_reg_id = 1,
60462306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_ST_I2C1_SHIFT,
60562306a36Sopenharmony_ci		},
60662306a36Sopenharmony_ci	},
60762306a36Sopenharmony_ci	.class		= &i2c_class,
60862306a36Sopenharmony_ci};
60962306a36Sopenharmony_ci
61062306a36Sopenharmony_ci/* I2C2 */
61162306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_i2c2_hwmod = {
61262306a36Sopenharmony_ci	.name		= "i2c2",
61362306a36Sopenharmony_ci	.flags		= HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
61462306a36Sopenharmony_ci	.main_clk	= "i2c2_fck",
61562306a36Sopenharmony_ci	.prcm		= {
61662306a36Sopenharmony_ci		.omap2 = {
61762306a36Sopenharmony_ci			.module_offs = CORE_MOD,
61862306a36Sopenharmony_ci			.idlest_reg_id = 1,
61962306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_ST_I2C2_SHIFT,
62062306a36Sopenharmony_ci		},
62162306a36Sopenharmony_ci	},
62262306a36Sopenharmony_ci	.class		= &i2c_class,
62362306a36Sopenharmony_ci};
62462306a36Sopenharmony_ci
62562306a36Sopenharmony_ci/* I2C3 */
62662306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_i2c3_hwmod = {
62762306a36Sopenharmony_ci	.name		= "i2c3",
62862306a36Sopenharmony_ci	.flags		= HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
62962306a36Sopenharmony_ci	.main_clk	= "i2c3_fck",
63062306a36Sopenharmony_ci	.prcm		= {
63162306a36Sopenharmony_ci		.omap2 = {
63262306a36Sopenharmony_ci			.module_offs = CORE_MOD,
63362306a36Sopenharmony_ci			.idlest_reg_id = 1,
63462306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_ST_I2C3_SHIFT,
63562306a36Sopenharmony_ci		},
63662306a36Sopenharmony_ci	},
63762306a36Sopenharmony_ci	.class		= &i2c_class,
63862306a36Sopenharmony_ci};
63962306a36Sopenharmony_ci
64062306a36Sopenharmony_ci/*
64162306a36Sopenharmony_ci * 'gpio' class
64262306a36Sopenharmony_ci * general purpose io module
64362306a36Sopenharmony_ci */
64462306a36Sopenharmony_ci
64562306a36Sopenharmony_cistatic struct omap_hwmod_class_sysconfig omap3xxx_gpio_sysc = {
64662306a36Sopenharmony_ci	.rev_offs	= 0x0000,
64762306a36Sopenharmony_ci	.sysc_offs	= 0x0010,
64862306a36Sopenharmony_ci	.syss_offs	= 0x0014,
64962306a36Sopenharmony_ci	.sysc_flags	= (SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
65062306a36Sopenharmony_ci			   SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
65162306a36Sopenharmony_ci			   SYSS_HAS_RESET_STATUS),
65262306a36Sopenharmony_ci	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
65362306a36Sopenharmony_ci	.sysc_fields    = &omap_hwmod_sysc_type1,
65462306a36Sopenharmony_ci};
65562306a36Sopenharmony_ci
65662306a36Sopenharmony_cistatic struct omap_hwmod_class omap3xxx_gpio_hwmod_class = {
65762306a36Sopenharmony_ci	.name = "gpio",
65862306a36Sopenharmony_ci	.sysc = &omap3xxx_gpio_sysc,
65962306a36Sopenharmony_ci};
66062306a36Sopenharmony_ci
66162306a36Sopenharmony_ci/* gpio1 */
66262306a36Sopenharmony_cistatic struct omap_hwmod_opt_clk gpio1_opt_clks[] = {
66362306a36Sopenharmony_ci	{ .role = "dbclk", .clk = "gpio1_dbck", },
66462306a36Sopenharmony_ci};
66562306a36Sopenharmony_ci
66662306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_gpio1_hwmod = {
66762306a36Sopenharmony_ci	.name		= "gpio1",
66862306a36Sopenharmony_ci	.flags		= HWMOD_CONTROL_OPT_CLKS_IN_RESET,
66962306a36Sopenharmony_ci	.main_clk	= "gpio1_ick",
67062306a36Sopenharmony_ci	.opt_clks	= gpio1_opt_clks,
67162306a36Sopenharmony_ci	.opt_clks_cnt	= ARRAY_SIZE(gpio1_opt_clks),
67262306a36Sopenharmony_ci	.prcm		= {
67362306a36Sopenharmony_ci		.omap2 = {
67462306a36Sopenharmony_ci			.module_offs = WKUP_MOD,
67562306a36Sopenharmony_ci			.idlest_reg_id = 1,
67662306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_ST_GPIO1_SHIFT,
67762306a36Sopenharmony_ci		},
67862306a36Sopenharmony_ci	},
67962306a36Sopenharmony_ci	.class		= &omap3xxx_gpio_hwmod_class,
68062306a36Sopenharmony_ci};
68162306a36Sopenharmony_ci
68262306a36Sopenharmony_ci/* gpio2 */
68362306a36Sopenharmony_cistatic struct omap_hwmod_opt_clk gpio2_opt_clks[] = {
68462306a36Sopenharmony_ci	{ .role = "dbclk", .clk = "gpio2_dbck", },
68562306a36Sopenharmony_ci};
68662306a36Sopenharmony_ci
68762306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_gpio2_hwmod = {
68862306a36Sopenharmony_ci	.name		= "gpio2",
68962306a36Sopenharmony_ci	.flags		= HWMOD_CONTROL_OPT_CLKS_IN_RESET,
69062306a36Sopenharmony_ci	.main_clk	= "gpio2_ick",
69162306a36Sopenharmony_ci	.opt_clks	= gpio2_opt_clks,
69262306a36Sopenharmony_ci	.opt_clks_cnt	= ARRAY_SIZE(gpio2_opt_clks),
69362306a36Sopenharmony_ci	.prcm		= {
69462306a36Sopenharmony_ci		.omap2 = {
69562306a36Sopenharmony_ci			.module_offs = OMAP3430_PER_MOD,
69662306a36Sopenharmony_ci			.idlest_reg_id = 1,
69762306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_ST_GPIO2_SHIFT,
69862306a36Sopenharmony_ci		},
69962306a36Sopenharmony_ci	},
70062306a36Sopenharmony_ci	.class		= &omap3xxx_gpio_hwmod_class,
70162306a36Sopenharmony_ci};
70262306a36Sopenharmony_ci
70362306a36Sopenharmony_ci/* gpio3 */
70462306a36Sopenharmony_cistatic struct omap_hwmod_opt_clk gpio3_opt_clks[] = {
70562306a36Sopenharmony_ci	{ .role = "dbclk", .clk = "gpio3_dbck", },
70662306a36Sopenharmony_ci};
70762306a36Sopenharmony_ci
70862306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_gpio3_hwmod = {
70962306a36Sopenharmony_ci	.name		= "gpio3",
71062306a36Sopenharmony_ci	.flags		= HWMOD_CONTROL_OPT_CLKS_IN_RESET,
71162306a36Sopenharmony_ci	.main_clk	= "gpio3_ick",
71262306a36Sopenharmony_ci	.opt_clks	= gpio3_opt_clks,
71362306a36Sopenharmony_ci	.opt_clks_cnt	= ARRAY_SIZE(gpio3_opt_clks),
71462306a36Sopenharmony_ci	.prcm		= {
71562306a36Sopenharmony_ci		.omap2 = {
71662306a36Sopenharmony_ci			.module_offs = OMAP3430_PER_MOD,
71762306a36Sopenharmony_ci			.idlest_reg_id = 1,
71862306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_ST_GPIO3_SHIFT,
71962306a36Sopenharmony_ci		},
72062306a36Sopenharmony_ci	},
72162306a36Sopenharmony_ci	.class		= &omap3xxx_gpio_hwmod_class,
72262306a36Sopenharmony_ci};
72362306a36Sopenharmony_ci
72462306a36Sopenharmony_ci/* gpio4 */
72562306a36Sopenharmony_cistatic struct omap_hwmod_opt_clk gpio4_opt_clks[] = {
72662306a36Sopenharmony_ci	{ .role = "dbclk", .clk = "gpio4_dbck", },
72762306a36Sopenharmony_ci};
72862306a36Sopenharmony_ci
72962306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_gpio4_hwmod = {
73062306a36Sopenharmony_ci	.name		= "gpio4",
73162306a36Sopenharmony_ci	.flags		= HWMOD_CONTROL_OPT_CLKS_IN_RESET,
73262306a36Sopenharmony_ci	.main_clk	= "gpio4_ick",
73362306a36Sopenharmony_ci	.opt_clks	= gpio4_opt_clks,
73462306a36Sopenharmony_ci	.opt_clks_cnt	= ARRAY_SIZE(gpio4_opt_clks),
73562306a36Sopenharmony_ci	.prcm		= {
73662306a36Sopenharmony_ci		.omap2 = {
73762306a36Sopenharmony_ci			.module_offs = OMAP3430_PER_MOD,
73862306a36Sopenharmony_ci			.idlest_reg_id = 1,
73962306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_ST_GPIO4_SHIFT,
74062306a36Sopenharmony_ci		},
74162306a36Sopenharmony_ci	},
74262306a36Sopenharmony_ci	.class		= &omap3xxx_gpio_hwmod_class,
74362306a36Sopenharmony_ci};
74462306a36Sopenharmony_ci
74562306a36Sopenharmony_ci/* gpio5 */
74662306a36Sopenharmony_ci
74762306a36Sopenharmony_cistatic struct omap_hwmod_opt_clk gpio5_opt_clks[] = {
74862306a36Sopenharmony_ci	{ .role = "dbclk", .clk = "gpio5_dbck", },
74962306a36Sopenharmony_ci};
75062306a36Sopenharmony_ci
75162306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_gpio5_hwmod = {
75262306a36Sopenharmony_ci	.name		= "gpio5",
75362306a36Sopenharmony_ci	.flags		= HWMOD_CONTROL_OPT_CLKS_IN_RESET,
75462306a36Sopenharmony_ci	.main_clk	= "gpio5_ick",
75562306a36Sopenharmony_ci	.opt_clks	= gpio5_opt_clks,
75662306a36Sopenharmony_ci	.opt_clks_cnt	= ARRAY_SIZE(gpio5_opt_clks),
75762306a36Sopenharmony_ci	.prcm		= {
75862306a36Sopenharmony_ci		.omap2 = {
75962306a36Sopenharmony_ci			.module_offs = OMAP3430_PER_MOD,
76062306a36Sopenharmony_ci			.idlest_reg_id = 1,
76162306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_ST_GPIO5_SHIFT,
76262306a36Sopenharmony_ci		},
76362306a36Sopenharmony_ci	},
76462306a36Sopenharmony_ci	.class		= &omap3xxx_gpio_hwmod_class,
76562306a36Sopenharmony_ci};
76662306a36Sopenharmony_ci
76762306a36Sopenharmony_ci/* gpio6 */
76862306a36Sopenharmony_ci
76962306a36Sopenharmony_cistatic struct omap_hwmod_opt_clk gpio6_opt_clks[] = {
77062306a36Sopenharmony_ci	{ .role = "dbclk", .clk = "gpio6_dbck", },
77162306a36Sopenharmony_ci};
77262306a36Sopenharmony_ci
77362306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_gpio6_hwmod = {
77462306a36Sopenharmony_ci	.name		= "gpio6",
77562306a36Sopenharmony_ci	.flags		= HWMOD_CONTROL_OPT_CLKS_IN_RESET,
77662306a36Sopenharmony_ci	.main_clk	= "gpio6_ick",
77762306a36Sopenharmony_ci	.opt_clks	= gpio6_opt_clks,
77862306a36Sopenharmony_ci	.opt_clks_cnt	= ARRAY_SIZE(gpio6_opt_clks),
77962306a36Sopenharmony_ci	.prcm		= {
78062306a36Sopenharmony_ci		.omap2 = {
78162306a36Sopenharmony_ci			.module_offs = OMAP3430_PER_MOD,
78262306a36Sopenharmony_ci			.idlest_reg_id = 1,
78362306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_ST_GPIO6_SHIFT,
78462306a36Sopenharmony_ci		},
78562306a36Sopenharmony_ci	},
78662306a36Sopenharmony_ci	.class		= &omap3xxx_gpio_hwmod_class,
78762306a36Sopenharmony_ci};
78862306a36Sopenharmony_ci
78962306a36Sopenharmony_ci/*
79062306a36Sopenharmony_ci * 'mcbsp' class
79162306a36Sopenharmony_ci * multi channel buffered serial port controller
79262306a36Sopenharmony_ci */
79362306a36Sopenharmony_ci
79462306a36Sopenharmony_cistatic struct omap_hwmod_class_sysconfig omap3xxx_mcbsp_sysc = {
79562306a36Sopenharmony_ci	.rev_offs	= -ENODEV,
79662306a36Sopenharmony_ci	.sysc_offs	= 0x008c,
79762306a36Sopenharmony_ci	.sysc_flags	= (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_ENAWAKEUP |
79862306a36Sopenharmony_ci			   SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
79962306a36Sopenharmony_ci	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
80062306a36Sopenharmony_ci	.sysc_fields	= &omap_hwmod_sysc_type1,
80162306a36Sopenharmony_ci};
80262306a36Sopenharmony_ci
80362306a36Sopenharmony_cistatic struct omap_hwmod_class omap3xxx_mcbsp_hwmod_class = {
80462306a36Sopenharmony_ci	.name = "mcbsp",
80562306a36Sopenharmony_ci	.sysc = &omap3xxx_mcbsp_sysc,
80662306a36Sopenharmony_ci};
80762306a36Sopenharmony_ci
80862306a36Sopenharmony_ci/* McBSP functional clock mapping */
80962306a36Sopenharmony_cistatic struct omap_hwmod_opt_clk mcbsp15_opt_clks[] = {
81062306a36Sopenharmony_ci	{ .role = "pad_fck", .clk = "mcbsp_clks" },
81162306a36Sopenharmony_ci	{ .role = "prcm_fck", .clk = "core_96m_fck" },
81262306a36Sopenharmony_ci};
81362306a36Sopenharmony_ci
81462306a36Sopenharmony_cistatic struct omap_hwmod_opt_clk mcbsp234_opt_clks[] = {
81562306a36Sopenharmony_ci	{ .role = "pad_fck", .clk = "mcbsp_clks" },
81662306a36Sopenharmony_ci	{ .role = "prcm_fck", .clk = "per_96m_fck" },
81762306a36Sopenharmony_ci};
81862306a36Sopenharmony_ci
81962306a36Sopenharmony_ci/* mcbsp1 */
82062306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_mcbsp1_hwmod = {
82162306a36Sopenharmony_ci	.name		= "mcbsp1",
82262306a36Sopenharmony_ci	.class		= &omap3xxx_mcbsp_hwmod_class,
82362306a36Sopenharmony_ci	.main_clk	= "mcbsp1_fck",
82462306a36Sopenharmony_ci	.prcm		= {
82562306a36Sopenharmony_ci		.omap2 = {
82662306a36Sopenharmony_ci			.module_offs = CORE_MOD,
82762306a36Sopenharmony_ci			.idlest_reg_id = 1,
82862306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_ST_MCBSP1_SHIFT,
82962306a36Sopenharmony_ci		},
83062306a36Sopenharmony_ci	},
83162306a36Sopenharmony_ci	.opt_clks	= mcbsp15_opt_clks,
83262306a36Sopenharmony_ci	.opt_clks_cnt	= ARRAY_SIZE(mcbsp15_opt_clks),
83362306a36Sopenharmony_ci};
83462306a36Sopenharmony_ci
83562306a36Sopenharmony_ci/* mcbsp2 */
83662306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_mcbsp2_hwmod = {
83762306a36Sopenharmony_ci	.name		= "mcbsp2",
83862306a36Sopenharmony_ci	.class		= &omap3xxx_mcbsp_hwmod_class,
83962306a36Sopenharmony_ci	.main_clk	= "mcbsp2_fck",
84062306a36Sopenharmony_ci	.prcm		= {
84162306a36Sopenharmony_ci		.omap2 = {
84262306a36Sopenharmony_ci			.module_offs = OMAP3430_PER_MOD,
84362306a36Sopenharmony_ci			.idlest_reg_id = 1,
84462306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_ST_MCBSP2_SHIFT,
84562306a36Sopenharmony_ci		},
84662306a36Sopenharmony_ci	},
84762306a36Sopenharmony_ci	.opt_clks	= mcbsp234_opt_clks,
84862306a36Sopenharmony_ci	.opt_clks_cnt	= ARRAY_SIZE(mcbsp234_opt_clks),
84962306a36Sopenharmony_ci};
85062306a36Sopenharmony_ci
85162306a36Sopenharmony_ci/* mcbsp3 */
85262306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_mcbsp3_hwmod = {
85362306a36Sopenharmony_ci	.name		= "mcbsp3",
85462306a36Sopenharmony_ci	.class		= &omap3xxx_mcbsp_hwmod_class,
85562306a36Sopenharmony_ci	.main_clk	= "mcbsp3_fck",
85662306a36Sopenharmony_ci	.prcm		= {
85762306a36Sopenharmony_ci		.omap2 = {
85862306a36Sopenharmony_ci			.module_offs = OMAP3430_PER_MOD,
85962306a36Sopenharmony_ci			.idlest_reg_id = 1,
86062306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_ST_MCBSP3_SHIFT,
86162306a36Sopenharmony_ci		},
86262306a36Sopenharmony_ci	},
86362306a36Sopenharmony_ci	.opt_clks	= mcbsp234_opt_clks,
86462306a36Sopenharmony_ci	.opt_clks_cnt	= ARRAY_SIZE(mcbsp234_opt_clks),
86562306a36Sopenharmony_ci};
86662306a36Sopenharmony_ci
86762306a36Sopenharmony_ci/* mcbsp4 */
86862306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_mcbsp4_hwmod = {
86962306a36Sopenharmony_ci	.name		= "mcbsp4",
87062306a36Sopenharmony_ci	.class		= &omap3xxx_mcbsp_hwmod_class,
87162306a36Sopenharmony_ci	.main_clk	= "mcbsp4_fck",
87262306a36Sopenharmony_ci	.prcm		= {
87362306a36Sopenharmony_ci		.omap2 = {
87462306a36Sopenharmony_ci			.module_offs = OMAP3430_PER_MOD,
87562306a36Sopenharmony_ci			.idlest_reg_id = 1,
87662306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_ST_MCBSP4_SHIFT,
87762306a36Sopenharmony_ci		},
87862306a36Sopenharmony_ci	},
87962306a36Sopenharmony_ci	.opt_clks	= mcbsp234_opt_clks,
88062306a36Sopenharmony_ci	.opt_clks_cnt	= ARRAY_SIZE(mcbsp234_opt_clks),
88162306a36Sopenharmony_ci};
88262306a36Sopenharmony_ci
88362306a36Sopenharmony_ci/* mcbsp5 */
88462306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_mcbsp5_hwmod = {
88562306a36Sopenharmony_ci	.name		= "mcbsp5",
88662306a36Sopenharmony_ci	.class		= &omap3xxx_mcbsp_hwmod_class,
88762306a36Sopenharmony_ci	.main_clk	= "mcbsp5_fck",
88862306a36Sopenharmony_ci	.prcm		= {
88962306a36Sopenharmony_ci		.omap2 = {
89062306a36Sopenharmony_ci			.module_offs = CORE_MOD,
89162306a36Sopenharmony_ci			.idlest_reg_id = 1,
89262306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_ST_MCBSP5_SHIFT,
89362306a36Sopenharmony_ci		},
89462306a36Sopenharmony_ci	},
89562306a36Sopenharmony_ci	.opt_clks	= mcbsp15_opt_clks,
89662306a36Sopenharmony_ci	.opt_clks_cnt	= ARRAY_SIZE(mcbsp15_opt_clks),
89762306a36Sopenharmony_ci};
89862306a36Sopenharmony_ci
89962306a36Sopenharmony_ci/* 'mcbsp sidetone' class */
90062306a36Sopenharmony_cistatic struct omap_hwmod_class_sysconfig omap3xxx_mcbsp_sidetone_sysc = {
90162306a36Sopenharmony_ci	.rev_offs	= -ENODEV,
90262306a36Sopenharmony_ci	.sysc_offs	= 0x0010,
90362306a36Sopenharmony_ci	.sysc_flags	= SYSC_HAS_AUTOIDLE,
90462306a36Sopenharmony_ci	.sysc_fields	= &omap_hwmod_sysc_type1,
90562306a36Sopenharmony_ci};
90662306a36Sopenharmony_ci
90762306a36Sopenharmony_cistatic struct omap_hwmod_class omap3xxx_mcbsp_sidetone_hwmod_class = {
90862306a36Sopenharmony_ci	.name = "mcbsp_sidetone",
90962306a36Sopenharmony_ci	.sysc = &omap3xxx_mcbsp_sidetone_sysc,
91062306a36Sopenharmony_ci};
91162306a36Sopenharmony_ci
91262306a36Sopenharmony_ci/* mcbsp2_sidetone */
91362306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_mcbsp2_sidetone_hwmod = {
91462306a36Sopenharmony_ci	.name		= "mcbsp2_sidetone",
91562306a36Sopenharmony_ci	.class		= &omap3xxx_mcbsp_sidetone_hwmod_class,
91662306a36Sopenharmony_ci	.main_clk	= "mcbsp2_ick",
91762306a36Sopenharmony_ci	.flags		= HWMOD_NO_IDLEST,
91862306a36Sopenharmony_ci};
91962306a36Sopenharmony_ci
92062306a36Sopenharmony_ci/* mcbsp3_sidetone */
92162306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_mcbsp3_sidetone_hwmod = {
92262306a36Sopenharmony_ci	.name		= "mcbsp3_sidetone",
92362306a36Sopenharmony_ci	.class		= &omap3xxx_mcbsp_sidetone_hwmod_class,
92462306a36Sopenharmony_ci	.main_clk	= "mcbsp3_ick",
92562306a36Sopenharmony_ci	.flags		= HWMOD_NO_IDLEST,
92662306a36Sopenharmony_ci};
92762306a36Sopenharmony_ci
92862306a36Sopenharmony_ci/* SR common */
92962306a36Sopenharmony_cistatic struct omap_hwmod_class_sysconfig omap34xx_sr_sysc = {
93062306a36Sopenharmony_ci	.rev_offs	= -ENODEV,
93162306a36Sopenharmony_ci	.sysc_offs	= 0x24,
93262306a36Sopenharmony_ci	.sysc_flags	= (SYSC_HAS_CLOCKACTIVITY | SYSC_NO_CACHE),
93362306a36Sopenharmony_ci	.sysc_fields	= &omap34xx_sr_sysc_fields,
93462306a36Sopenharmony_ci};
93562306a36Sopenharmony_ci
93662306a36Sopenharmony_cistatic struct omap_hwmod_class omap34xx_smartreflex_hwmod_class = {
93762306a36Sopenharmony_ci	.name = "smartreflex",
93862306a36Sopenharmony_ci	.sysc = &omap34xx_sr_sysc,
93962306a36Sopenharmony_ci};
94062306a36Sopenharmony_ci
94162306a36Sopenharmony_cistatic struct omap_hwmod_class_sysconfig omap36xx_sr_sysc = {
94262306a36Sopenharmony_ci	.rev_offs	= -ENODEV,
94362306a36Sopenharmony_ci	.sysc_offs	= 0x38,
94462306a36Sopenharmony_ci	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
94562306a36Sopenharmony_ci	.sysc_flags	= (SYSC_HAS_SIDLEMODE | SYSC_HAS_ENAWAKEUP |
94662306a36Sopenharmony_ci			SYSC_NO_CACHE),
94762306a36Sopenharmony_ci	.sysc_fields	= &omap36xx_sr_sysc_fields,
94862306a36Sopenharmony_ci};
94962306a36Sopenharmony_ci
95062306a36Sopenharmony_cistatic struct omap_hwmod_class omap36xx_smartreflex_hwmod_class = {
95162306a36Sopenharmony_ci	.name = "smartreflex",
95262306a36Sopenharmony_ci	.sysc = &omap36xx_sr_sysc,
95362306a36Sopenharmony_ci};
95462306a36Sopenharmony_ci
95562306a36Sopenharmony_ci/* SR1 */
95662306a36Sopenharmony_cistatic struct omap_smartreflex_dev_attr sr1_dev_attr = {
95762306a36Sopenharmony_ci	.sensor_voltdm_name   = "mpu_iva",
95862306a36Sopenharmony_ci};
95962306a36Sopenharmony_ci
96062306a36Sopenharmony_ci
96162306a36Sopenharmony_cistatic struct omap_hwmod omap34xx_sr1_hwmod = {
96262306a36Sopenharmony_ci	.name		= "smartreflex_mpu_iva",
96362306a36Sopenharmony_ci	.class		= &omap34xx_smartreflex_hwmod_class,
96462306a36Sopenharmony_ci	.main_clk	= "sr1_fck",
96562306a36Sopenharmony_ci	.prcm		= {
96662306a36Sopenharmony_ci		.omap2 = {
96762306a36Sopenharmony_ci			.module_offs = WKUP_MOD,
96862306a36Sopenharmony_ci			.idlest_reg_id = 1,
96962306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_EN_SR1_SHIFT,
97062306a36Sopenharmony_ci		},
97162306a36Sopenharmony_ci	},
97262306a36Sopenharmony_ci	.dev_attr	= &sr1_dev_attr,
97362306a36Sopenharmony_ci	.flags		= HWMOD_SET_DEFAULT_CLOCKACT,
97462306a36Sopenharmony_ci};
97562306a36Sopenharmony_ci
97662306a36Sopenharmony_cistatic struct omap_hwmod omap36xx_sr1_hwmod = {
97762306a36Sopenharmony_ci	.name		= "smartreflex_mpu_iva",
97862306a36Sopenharmony_ci	.class		= &omap36xx_smartreflex_hwmod_class,
97962306a36Sopenharmony_ci	.main_clk	= "sr1_fck",
98062306a36Sopenharmony_ci	.prcm		= {
98162306a36Sopenharmony_ci		.omap2 = {
98262306a36Sopenharmony_ci			.module_offs = WKUP_MOD,
98362306a36Sopenharmony_ci			.idlest_reg_id = 1,
98462306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_EN_SR1_SHIFT,
98562306a36Sopenharmony_ci		},
98662306a36Sopenharmony_ci	},
98762306a36Sopenharmony_ci	.dev_attr	= &sr1_dev_attr,
98862306a36Sopenharmony_ci};
98962306a36Sopenharmony_ci
99062306a36Sopenharmony_ci/* SR2 */
99162306a36Sopenharmony_cistatic struct omap_smartreflex_dev_attr sr2_dev_attr = {
99262306a36Sopenharmony_ci	.sensor_voltdm_name	= "core",
99362306a36Sopenharmony_ci};
99462306a36Sopenharmony_ci
99562306a36Sopenharmony_ci
99662306a36Sopenharmony_cistatic struct omap_hwmod omap34xx_sr2_hwmod = {
99762306a36Sopenharmony_ci	.name		= "smartreflex_core",
99862306a36Sopenharmony_ci	.class		= &omap34xx_smartreflex_hwmod_class,
99962306a36Sopenharmony_ci	.main_clk	= "sr2_fck",
100062306a36Sopenharmony_ci	.prcm		= {
100162306a36Sopenharmony_ci		.omap2 = {
100262306a36Sopenharmony_ci			.module_offs = WKUP_MOD,
100362306a36Sopenharmony_ci			.idlest_reg_id = 1,
100462306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_EN_SR2_SHIFT,
100562306a36Sopenharmony_ci		},
100662306a36Sopenharmony_ci	},
100762306a36Sopenharmony_ci	.dev_attr	= &sr2_dev_attr,
100862306a36Sopenharmony_ci	.flags		= HWMOD_SET_DEFAULT_CLOCKACT,
100962306a36Sopenharmony_ci};
101062306a36Sopenharmony_ci
101162306a36Sopenharmony_cistatic struct omap_hwmod omap36xx_sr2_hwmod = {
101262306a36Sopenharmony_ci	.name		= "smartreflex_core",
101362306a36Sopenharmony_ci	.class		= &omap36xx_smartreflex_hwmod_class,
101462306a36Sopenharmony_ci	.main_clk	= "sr2_fck",
101562306a36Sopenharmony_ci	.prcm		= {
101662306a36Sopenharmony_ci		.omap2 = {
101762306a36Sopenharmony_ci			.module_offs = WKUP_MOD,
101862306a36Sopenharmony_ci			.idlest_reg_id = 1,
101962306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_EN_SR2_SHIFT,
102062306a36Sopenharmony_ci		},
102162306a36Sopenharmony_ci	},
102262306a36Sopenharmony_ci	.dev_attr	= &sr2_dev_attr,
102362306a36Sopenharmony_ci};
102462306a36Sopenharmony_ci
102562306a36Sopenharmony_ci/*
102662306a36Sopenharmony_ci * 'mailbox' class
102762306a36Sopenharmony_ci * mailbox module allowing communication between the on-chip processors
102862306a36Sopenharmony_ci * using a queued mailbox-interrupt mechanism.
102962306a36Sopenharmony_ci */
103062306a36Sopenharmony_ci
103162306a36Sopenharmony_cistatic struct omap_hwmod_class_sysconfig omap3xxx_mailbox_sysc = {
103262306a36Sopenharmony_ci	.rev_offs	= 0x000,
103362306a36Sopenharmony_ci	.sysc_offs	= 0x010,
103462306a36Sopenharmony_ci	.syss_offs	= 0x014,
103562306a36Sopenharmony_ci	.sysc_flags	= (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
103662306a36Sopenharmony_ci				SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
103762306a36Sopenharmony_ci	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
103862306a36Sopenharmony_ci	.sysc_fields	= &omap_hwmod_sysc_type1,
103962306a36Sopenharmony_ci};
104062306a36Sopenharmony_ci
104162306a36Sopenharmony_cistatic struct omap_hwmod_class omap3xxx_mailbox_hwmod_class = {
104262306a36Sopenharmony_ci	.name = "mailbox",
104362306a36Sopenharmony_ci	.sysc = &omap3xxx_mailbox_sysc,
104462306a36Sopenharmony_ci};
104562306a36Sopenharmony_ci
104662306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_mailbox_hwmod = {
104762306a36Sopenharmony_ci	.name		= "mailbox",
104862306a36Sopenharmony_ci	.class		= &omap3xxx_mailbox_hwmod_class,
104962306a36Sopenharmony_ci	.main_clk	= "mailboxes_ick",
105062306a36Sopenharmony_ci	.prcm		= {
105162306a36Sopenharmony_ci		.omap2 = {
105262306a36Sopenharmony_ci			.module_offs = CORE_MOD,
105362306a36Sopenharmony_ci			.idlest_reg_id = 1,
105462306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_ST_MAILBOXES_SHIFT,
105562306a36Sopenharmony_ci		},
105662306a36Sopenharmony_ci	},
105762306a36Sopenharmony_ci};
105862306a36Sopenharmony_ci
105962306a36Sopenharmony_ci/*
106062306a36Sopenharmony_ci * 'mcspi' class
106162306a36Sopenharmony_ci * multichannel serial port interface (mcspi) / master/slave synchronous serial
106262306a36Sopenharmony_ci * bus
106362306a36Sopenharmony_ci */
106462306a36Sopenharmony_ci
106562306a36Sopenharmony_cistatic struct omap_hwmod_class_sysconfig omap34xx_mcspi_sysc = {
106662306a36Sopenharmony_ci	.rev_offs	= 0x0000,
106762306a36Sopenharmony_ci	.sysc_offs	= 0x0010,
106862306a36Sopenharmony_ci	.syss_offs	= 0x0014,
106962306a36Sopenharmony_ci	.sysc_flags	= (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
107062306a36Sopenharmony_ci				SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
107162306a36Sopenharmony_ci				SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
107262306a36Sopenharmony_ci	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
107362306a36Sopenharmony_ci	.sysc_fields    = &omap_hwmod_sysc_type1,
107462306a36Sopenharmony_ci};
107562306a36Sopenharmony_ci
107662306a36Sopenharmony_cistatic struct omap_hwmod_class omap34xx_mcspi_class = {
107762306a36Sopenharmony_ci	.name = "mcspi",
107862306a36Sopenharmony_ci	.sysc = &omap34xx_mcspi_sysc,
107962306a36Sopenharmony_ci};
108062306a36Sopenharmony_ci
108162306a36Sopenharmony_ci/* mcspi1 */
108262306a36Sopenharmony_cistatic struct omap_hwmod omap34xx_mcspi1 = {
108362306a36Sopenharmony_ci	.name		= "mcspi1",
108462306a36Sopenharmony_ci	.main_clk	= "mcspi1_fck",
108562306a36Sopenharmony_ci	.prcm		= {
108662306a36Sopenharmony_ci		.omap2 = {
108762306a36Sopenharmony_ci			.module_offs = CORE_MOD,
108862306a36Sopenharmony_ci			.idlest_reg_id = 1,
108962306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_ST_MCSPI1_SHIFT,
109062306a36Sopenharmony_ci		},
109162306a36Sopenharmony_ci	},
109262306a36Sopenharmony_ci	.class		= &omap34xx_mcspi_class,
109362306a36Sopenharmony_ci};
109462306a36Sopenharmony_ci
109562306a36Sopenharmony_ci/* mcspi2 */
109662306a36Sopenharmony_cistatic struct omap_hwmod omap34xx_mcspi2 = {
109762306a36Sopenharmony_ci	.name		= "mcspi2",
109862306a36Sopenharmony_ci	.main_clk	= "mcspi2_fck",
109962306a36Sopenharmony_ci	.prcm		= {
110062306a36Sopenharmony_ci		.omap2 = {
110162306a36Sopenharmony_ci			.module_offs = CORE_MOD,
110262306a36Sopenharmony_ci			.idlest_reg_id = 1,
110362306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_ST_MCSPI2_SHIFT,
110462306a36Sopenharmony_ci		},
110562306a36Sopenharmony_ci	},
110662306a36Sopenharmony_ci	.class		= &omap34xx_mcspi_class,
110762306a36Sopenharmony_ci};
110862306a36Sopenharmony_ci
110962306a36Sopenharmony_ci/* mcspi3 */
111062306a36Sopenharmony_cistatic struct omap_hwmod omap34xx_mcspi3 = {
111162306a36Sopenharmony_ci	.name		= "mcspi3",
111262306a36Sopenharmony_ci	.main_clk	= "mcspi3_fck",
111362306a36Sopenharmony_ci	.prcm		= {
111462306a36Sopenharmony_ci		.omap2 = {
111562306a36Sopenharmony_ci			.module_offs = CORE_MOD,
111662306a36Sopenharmony_ci			.idlest_reg_id = 1,
111762306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_ST_MCSPI3_SHIFT,
111862306a36Sopenharmony_ci		},
111962306a36Sopenharmony_ci	},
112062306a36Sopenharmony_ci	.class		= &omap34xx_mcspi_class,
112162306a36Sopenharmony_ci};
112262306a36Sopenharmony_ci
112362306a36Sopenharmony_ci/* mcspi4 */
112462306a36Sopenharmony_cistatic struct omap_hwmod omap34xx_mcspi4 = {
112562306a36Sopenharmony_ci	.name		= "mcspi4",
112662306a36Sopenharmony_ci	.main_clk	= "mcspi4_fck",
112762306a36Sopenharmony_ci	.prcm		= {
112862306a36Sopenharmony_ci		.omap2 = {
112962306a36Sopenharmony_ci			.module_offs = CORE_MOD,
113062306a36Sopenharmony_ci			.idlest_reg_id = 1,
113162306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_ST_MCSPI4_SHIFT,
113262306a36Sopenharmony_ci		},
113362306a36Sopenharmony_ci	},
113462306a36Sopenharmony_ci	.class		= &omap34xx_mcspi_class,
113562306a36Sopenharmony_ci};
113662306a36Sopenharmony_ci
113762306a36Sopenharmony_ci/* MMC/SD/SDIO common */
113862306a36Sopenharmony_cistatic struct omap_hwmod_class_sysconfig omap34xx_mmc_sysc = {
113962306a36Sopenharmony_ci	.rev_offs	= 0x1fc,
114062306a36Sopenharmony_ci	.sysc_offs	= 0x10,
114162306a36Sopenharmony_ci	.syss_offs	= 0x14,
114262306a36Sopenharmony_ci	.sysc_flags	= (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
114362306a36Sopenharmony_ci			   SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
114462306a36Sopenharmony_ci			   SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
114562306a36Sopenharmony_ci	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
114662306a36Sopenharmony_ci	.sysc_fields    = &omap_hwmod_sysc_type1,
114762306a36Sopenharmony_ci};
114862306a36Sopenharmony_ci
114962306a36Sopenharmony_cistatic struct omap_hwmod_class omap34xx_mmc_class = {
115062306a36Sopenharmony_ci	.name = "mmc",
115162306a36Sopenharmony_ci	.sysc = &omap34xx_mmc_sysc,
115262306a36Sopenharmony_ci};
115362306a36Sopenharmony_ci
115462306a36Sopenharmony_ci/* MMC/SD/SDIO1 */
115562306a36Sopenharmony_ci
115662306a36Sopenharmony_ci
115762306a36Sopenharmony_ci
115862306a36Sopenharmony_cistatic struct omap_hwmod_opt_clk omap34xx_mmc1_opt_clks[] = {
115962306a36Sopenharmony_ci	{ .role = "dbck", .clk = "omap_32k_fck", },
116062306a36Sopenharmony_ci};
116162306a36Sopenharmony_ci
116262306a36Sopenharmony_cistatic struct omap_hsmmc_dev_attr mmc1_dev_attr = {
116362306a36Sopenharmony_ci	.flags = OMAP_HSMMC_SUPPORTS_DUAL_VOLT,
116462306a36Sopenharmony_ci};
116562306a36Sopenharmony_ci
116662306a36Sopenharmony_ci/* See 35xx errata 2.1.1.128 in SPRZ278F */
116762306a36Sopenharmony_cistatic struct omap_hsmmc_dev_attr mmc1_pre_es3_dev_attr = {
116862306a36Sopenharmony_ci	.flags = (OMAP_HSMMC_SUPPORTS_DUAL_VOLT |
116962306a36Sopenharmony_ci		  OMAP_HSMMC_BROKEN_MULTIBLOCK_READ),
117062306a36Sopenharmony_ci};
117162306a36Sopenharmony_ci
117262306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_pre_es3_mmc1_hwmod = {
117362306a36Sopenharmony_ci	.name		= "mmc1",
117462306a36Sopenharmony_ci	.opt_clks	= omap34xx_mmc1_opt_clks,
117562306a36Sopenharmony_ci	.opt_clks_cnt	= ARRAY_SIZE(omap34xx_mmc1_opt_clks),
117662306a36Sopenharmony_ci	.main_clk	= "mmchs1_fck",
117762306a36Sopenharmony_ci	.prcm		= {
117862306a36Sopenharmony_ci		.omap2 = {
117962306a36Sopenharmony_ci			.module_offs = CORE_MOD,
118062306a36Sopenharmony_ci			.idlest_reg_id = 1,
118162306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_ST_MMC1_SHIFT,
118262306a36Sopenharmony_ci		},
118362306a36Sopenharmony_ci	},
118462306a36Sopenharmony_ci	.dev_attr	= &mmc1_pre_es3_dev_attr,
118562306a36Sopenharmony_ci	.class		= &omap34xx_mmc_class,
118662306a36Sopenharmony_ci};
118762306a36Sopenharmony_ci
118862306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_es3plus_mmc1_hwmod = {
118962306a36Sopenharmony_ci	.name		= "mmc1",
119062306a36Sopenharmony_ci	.opt_clks	= omap34xx_mmc1_opt_clks,
119162306a36Sopenharmony_ci	.opt_clks_cnt	= ARRAY_SIZE(omap34xx_mmc1_opt_clks),
119262306a36Sopenharmony_ci	.main_clk	= "mmchs1_fck",
119362306a36Sopenharmony_ci	.prcm		= {
119462306a36Sopenharmony_ci		.omap2 = {
119562306a36Sopenharmony_ci			.module_offs = CORE_MOD,
119662306a36Sopenharmony_ci			.idlest_reg_id = 1,
119762306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_ST_MMC1_SHIFT,
119862306a36Sopenharmony_ci		},
119962306a36Sopenharmony_ci	},
120062306a36Sopenharmony_ci	.dev_attr	= &mmc1_dev_attr,
120162306a36Sopenharmony_ci	.class		= &omap34xx_mmc_class,
120262306a36Sopenharmony_ci};
120362306a36Sopenharmony_ci
120462306a36Sopenharmony_ci/* MMC/SD/SDIO2 */
120562306a36Sopenharmony_ci
120662306a36Sopenharmony_ci
120762306a36Sopenharmony_ci
120862306a36Sopenharmony_cistatic struct omap_hwmod_opt_clk omap34xx_mmc2_opt_clks[] = {
120962306a36Sopenharmony_ci	{ .role = "dbck", .clk = "omap_32k_fck", },
121062306a36Sopenharmony_ci};
121162306a36Sopenharmony_ci
121262306a36Sopenharmony_ci/* See 35xx errata 2.1.1.128 in SPRZ278F */
121362306a36Sopenharmony_cistatic struct omap_hsmmc_dev_attr mmc2_pre_es3_dev_attr = {
121462306a36Sopenharmony_ci	.flags = OMAP_HSMMC_BROKEN_MULTIBLOCK_READ,
121562306a36Sopenharmony_ci};
121662306a36Sopenharmony_ci
121762306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_pre_es3_mmc2_hwmod = {
121862306a36Sopenharmony_ci	.name		= "mmc2",
121962306a36Sopenharmony_ci	.opt_clks	= omap34xx_mmc2_opt_clks,
122062306a36Sopenharmony_ci	.opt_clks_cnt	= ARRAY_SIZE(omap34xx_mmc2_opt_clks),
122162306a36Sopenharmony_ci	.main_clk	= "mmchs2_fck",
122262306a36Sopenharmony_ci	.prcm		= {
122362306a36Sopenharmony_ci		.omap2 = {
122462306a36Sopenharmony_ci			.module_offs = CORE_MOD,
122562306a36Sopenharmony_ci			.idlest_reg_id = 1,
122662306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_ST_MMC2_SHIFT,
122762306a36Sopenharmony_ci		},
122862306a36Sopenharmony_ci	},
122962306a36Sopenharmony_ci	.dev_attr	= &mmc2_pre_es3_dev_attr,
123062306a36Sopenharmony_ci	.class		= &omap34xx_mmc_class,
123162306a36Sopenharmony_ci};
123262306a36Sopenharmony_ci
123362306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_es3plus_mmc2_hwmod = {
123462306a36Sopenharmony_ci	.name		= "mmc2",
123562306a36Sopenharmony_ci	.opt_clks	= omap34xx_mmc2_opt_clks,
123662306a36Sopenharmony_ci	.opt_clks_cnt	= ARRAY_SIZE(omap34xx_mmc2_opt_clks),
123762306a36Sopenharmony_ci	.main_clk	= "mmchs2_fck",
123862306a36Sopenharmony_ci	.prcm		= {
123962306a36Sopenharmony_ci		.omap2 = {
124062306a36Sopenharmony_ci			.module_offs = CORE_MOD,
124162306a36Sopenharmony_ci			.idlest_reg_id = 1,
124262306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_ST_MMC2_SHIFT,
124362306a36Sopenharmony_ci		},
124462306a36Sopenharmony_ci	},
124562306a36Sopenharmony_ci	.class		= &omap34xx_mmc_class,
124662306a36Sopenharmony_ci};
124762306a36Sopenharmony_ci
124862306a36Sopenharmony_ci/* MMC/SD/SDIO3 */
124962306a36Sopenharmony_ci
125062306a36Sopenharmony_ci
125162306a36Sopenharmony_ci
125262306a36Sopenharmony_cistatic struct omap_hwmod_opt_clk omap34xx_mmc3_opt_clks[] = {
125362306a36Sopenharmony_ci	{ .role = "dbck", .clk = "omap_32k_fck", },
125462306a36Sopenharmony_ci};
125562306a36Sopenharmony_ci
125662306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_mmc3_hwmod = {
125762306a36Sopenharmony_ci	.name		= "mmc3",
125862306a36Sopenharmony_ci	.opt_clks	= omap34xx_mmc3_opt_clks,
125962306a36Sopenharmony_ci	.opt_clks_cnt	= ARRAY_SIZE(omap34xx_mmc3_opt_clks),
126062306a36Sopenharmony_ci	.main_clk	= "mmchs3_fck",
126162306a36Sopenharmony_ci	.prcm		= {
126262306a36Sopenharmony_ci		.omap2 = {
126362306a36Sopenharmony_ci			.module_offs = CORE_MOD,
126462306a36Sopenharmony_ci			.idlest_reg_id = 1,
126562306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_ST_MMC3_SHIFT,
126662306a36Sopenharmony_ci		},
126762306a36Sopenharmony_ci	},
126862306a36Sopenharmony_ci	.class		= &omap34xx_mmc_class,
126962306a36Sopenharmony_ci};
127062306a36Sopenharmony_ci
127162306a36Sopenharmony_ci/*
127262306a36Sopenharmony_ci * 'usb_host_hs' class
127362306a36Sopenharmony_ci * high-speed multi-port usb host controller
127462306a36Sopenharmony_ci */
127562306a36Sopenharmony_ci
127662306a36Sopenharmony_cistatic struct omap_hwmod_class_sysconfig omap3xxx_usb_host_hs_sysc = {
127762306a36Sopenharmony_ci	.rev_offs	= 0x0000,
127862306a36Sopenharmony_ci	.sysc_offs	= 0x0010,
127962306a36Sopenharmony_ci	.syss_offs	= 0x0014,
128062306a36Sopenharmony_ci	.sysc_flags	= (SYSC_HAS_MIDLEMODE | SYSC_HAS_CLOCKACTIVITY |
128162306a36Sopenharmony_ci			   SYSC_HAS_SIDLEMODE | SYSC_HAS_ENAWAKEUP |
128262306a36Sopenharmony_ci			   SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
128362306a36Sopenharmony_ci			   SYSS_HAS_RESET_STATUS),
128462306a36Sopenharmony_ci	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
128562306a36Sopenharmony_ci			   MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
128662306a36Sopenharmony_ci	.sysc_fields	= &omap_hwmod_sysc_type1,
128762306a36Sopenharmony_ci};
128862306a36Sopenharmony_ci
128962306a36Sopenharmony_cistatic struct omap_hwmod_class omap3xxx_usb_host_hs_hwmod_class = {
129062306a36Sopenharmony_ci	.name = "usb_host_hs",
129162306a36Sopenharmony_ci	.sysc = &omap3xxx_usb_host_hs_sysc,
129262306a36Sopenharmony_ci};
129362306a36Sopenharmony_ci
129462306a36Sopenharmony_ci
129562306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_usb_host_hs_hwmod = {
129662306a36Sopenharmony_ci	.name		= "usb_host_hs",
129762306a36Sopenharmony_ci	.class		= &omap3xxx_usb_host_hs_hwmod_class,
129862306a36Sopenharmony_ci	.clkdm_name	= "usbhost_clkdm",
129962306a36Sopenharmony_ci	.main_clk	= "usbhost_48m_fck",
130062306a36Sopenharmony_ci	.prcm = {
130162306a36Sopenharmony_ci		.omap2 = {
130262306a36Sopenharmony_ci			.module_offs = OMAP3430ES2_USBHOST_MOD,
130362306a36Sopenharmony_ci			.idlest_reg_id = 1,
130462306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430ES2_ST_USBHOST_IDLE_SHIFT,
130562306a36Sopenharmony_ci		},
130662306a36Sopenharmony_ci	},
130762306a36Sopenharmony_ci
130862306a36Sopenharmony_ci	/*
130962306a36Sopenharmony_ci	 * Errata: USBHOST Configured In Smart-Idle Can Lead To a Deadlock
131062306a36Sopenharmony_ci	 * id: i660
131162306a36Sopenharmony_ci	 *
131262306a36Sopenharmony_ci	 * Description:
131362306a36Sopenharmony_ci	 * In the following configuration :
131462306a36Sopenharmony_ci	 * - USBHOST module is set to smart-idle mode
131562306a36Sopenharmony_ci	 * - PRCM asserts idle_req to the USBHOST module ( This typically
131662306a36Sopenharmony_ci	 *   happens when the system is going to a low power mode : all ports
131762306a36Sopenharmony_ci	 *   have been suspended, the master part of the USBHOST module has
131862306a36Sopenharmony_ci	 *   entered the standby state, and SW has cut the functional clocks)
131962306a36Sopenharmony_ci	 * - an USBHOST interrupt occurs before the module is able to answer
132062306a36Sopenharmony_ci	 *   idle_ack, typically a remote wakeup IRQ.
132162306a36Sopenharmony_ci	 * Then the USB HOST module will enter a deadlock situation where it
132262306a36Sopenharmony_ci	 * is no more accessible nor functional.
132362306a36Sopenharmony_ci	 *
132462306a36Sopenharmony_ci	 * Workaround:
132562306a36Sopenharmony_ci	 * Don't use smart idle; use only force idle, hence HWMOD_SWSUP_SIDLE
132662306a36Sopenharmony_ci	 */
132762306a36Sopenharmony_ci
132862306a36Sopenharmony_ci	/*
132962306a36Sopenharmony_ci	 * Errata: USB host EHCI may stall when entering smart-standby mode
133062306a36Sopenharmony_ci	 * Id: i571
133162306a36Sopenharmony_ci	 *
133262306a36Sopenharmony_ci	 * Description:
133362306a36Sopenharmony_ci	 * When the USBHOST module is set to smart-standby mode, and when it is
133462306a36Sopenharmony_ci	 * ready to enter the standby state (i.e. all ports are suspended and
133562306a36Sopenharmony_ci	 * all attached devices are in suspend mode), then it can wrongly assert
133662306a36Sopenharmony_ci	 * the Mstandby signal too early while there are still some residual OCP
133762306a36Sopenharmony_ci	 * transactions ongoing. If this condition occurs, the internal state
133862306a36Sopenharmony_ci	 * machine may go to an undefined state and the USB link may be stuck
133962306a36Sopenharmony_ci	 * upon the next resume.
134062306a36Sopenharmony_ci	 *
134162306a36Sopenharmony_ci	 * Workaround:
134262306a36Sopenharmony_ci	 * Don't use smart standby; use only force standby,
134362306a36Sopenharmony_ci	 * hence HWMOD_SWSUP_MSTANDBY
134462306a36Sopenharmony_ci	 */
134562306a36Sopenharmony_ci
134662306a36Sopenharmony_ci	.flags		= HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY,
134762306a36Sopenharmony_ci};
134862306a36Sopenharmony_ci
134962306a36Sopenharmony_ci/*
135062306a36Sopenharmony_ci * 'usb_tll_hs' class
135162306a36Sopenharmony_ci * usb_tll_hs module is the adapter on the usb_host_hs ports
135262306a36Sopenharmony_ci */
135362306a36Sopenharmony_cistatic struct omap_hwmod_class_sysconfig omap3xxx_usb_tll_hs_sysc = {
135462306a36Sopenharmony_ci	.rev_offs	= 0x0000,
135562306a36Sopenharmony_ci	.sysc_offs	= 0x0010,
135662306a36Sopenharmony_ci	.syss_offs	= 0x0014,
135762306a36Sopenharmony_ci	.sysc_flags	= (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
135862306a36Sopenharmony_ci			   SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
135962306a36Sopenharmony_ci			   SYSC_HAS_AUTOIDLE),
136062306a36Sopenharmony_ci	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
136162306a36Sopenharmony_ci	.sysc_fields	= &omap_hwmod_sysc_type1,
136262306a36Sopenharmony_ci};
136362306a36Sopenharmony_ci
136462306a36Sopenharmony_cistatic struct omap_hwmod_class omap3xxx_usb_tll_hs_hwmod_class = {
136562306a36Sopenharmony_ci	.name = "usb_tll_hs",
136662306a36Sopenharmony_ci	.sysc = &omap3xxx_usb_tll_hs_sysc,
136762306a36Sopenharmony_ci};
136862306a36Sopenharmony_ci
136962306a36Sopenharmony_ci
137062306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_usb_tll_hs_hwmod = {
137162306a36Sopenharmony_ci	.name		= "usb_tll_hs",
137262306a36Sopenharmony_ci	.class		= &omap3xxx_usb_tll_hs_hwmod_class,
137362306a36Sopenharmony_ci	.clkdm_name	= "core_l4_clkdm",
137462306a36Sopenharmony_ci	.main_clk	= "usbtll_fck",
137562306a36Sopenharmony_ci	.prcm = {
137662306a36Sopenharmony_ci		.omap2 = {
137762306a36Sopenharmony_ci			.module_offs = CORE_MOD,
137862306a36Sopenharmony_ci			.idlest_reg_id = 3,
137962306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430ES2_ST_USBTLL_SHIFT,
138062306a36Sopenharmony_ci		},
138162306a36Sopenharmony_ci	},
138262306a36Sopenharmony_ci};
138362306a36Sopenharmony_ci
138462306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_hdq1w_hwmod = {
138562306a36Sopenharmony_ci	.name		= "hdq1w",
138662306a36Sopenharmony_ci	.main_clk	= "hdq_fck",
138762306a36Sopenharmony_ci	.prcm		= {
138862306a36Sopenharmony_ci		.omap2 = {
138962306a36Sopenharmony_ci			.module_offs = CORE_MOD,
139062306a36Sopenharmony_ci			.idlest_reg_id = 1,
139162306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_ST_HDQ_SHIFT,
139262306a36Sopenharmony_ci		},
139362306a36Sopenharmony_ci	},
139462306a36Sopenharmony_ci	.class		= &omap2_hdq1w_class,
139562306a36Sopenharmony_ci};
139662306a36Sopenharmony_ci
139762306a36Sopenharmony_ci/* SAD2D */
139862306a36Sopenharmony_cistatic struct omap_hwmod_rst_info omap3xxx_sad2d_resets[] = {
139962306a36Sopenharmony_ci	{ .name = "rst_modem_pwron_sw", .rst_shift = 0 },
140062306a36Sopenharmony_ci	{ .name = "rst_modem_sw", .rst_shift = 1 },
140162306a36Sopenharmony_ci};
140262306a36Sopenharmony_ci
140362306a36Sopenharmony_cistatic struct omap_hwmod_class omap3xxx_sad2d_class = {
140462306a36Sopenharmony_ci	.name			= "sad2d",
140562306a36Sopenharmony_ci};
140662306a36Sopenharmony_ci
140762306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_sad2d_hwmod = {
140862306a36Sopenharmony_ci	.name		= "sad2d",
140962306a36Sopenharmony_ci	.rst_lines	= omap3xxx_sad2d_resets,
141062306a36Sopenharmony_ci	.rst_lines_cnt	= ARRAY_SIZE(omap3xxx_sad2d_resets),
141162306a36Sopenharmony_ci	.main_clk	= "sad2d_ick",
141262306a36Sopenharmony_ci	.prcm		= {
141362306a36Sopenharmony_ci		.omap2 = {
141462306a36Sopenharmony_ci			.module_offs = CORE_MOD,
141562306a36Sopenharmony_ci			.idlest_reg_id = 1,
141662306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_ST_SAD2D_SHIFT,
141762306a36Sopenharmony_ci		},
141862306a36Sopenharmony_ci	},
141962306a36Sopenharmony_ci	.class		= &omap3xxx_sad2d_class,
142062306a36Sopenharmony_ci};
142162306a36Sopenharmony_ci
142262306a36Sopenharmony_ci/*
142362306a36Sopenharmony_ci * 'gpmc' class
142462306a36Sopenharmony_ci * general purpose memory controller
142562306a36Sopenharmony_ci */
142662306a36Sopenharmony_ci
142762306a36Sopenharmony_cistatic struct omap_hwmod_class_sysconfig omap3xxx_gpmc_sysc = {
142862306a36Sopenharmony_ci	.rev_offs	= 0x0000,
142962306a36Sopenharmony_ci	.sysc_offs	= 0x0010,
143062306a36Sopenharmony_ci	.syss_offs	= 0x0014,
143162306a36Sopenharmony_ci	.sysc_flags	= (SYSC_HAS_AUTOIDLE | SYSC_HAS_SIDLEMODE |
143262306a36Sopenharmony_ci			   SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
143362306a36Sopenharmony_ci	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
143462306a36Sopenharmony_ci	.sysc_fields	= &omap_hwmod_sysc_type1,
143562306a36Sopenharmony_ci};
143662306a36Sopenharmony_ci
143762306a36Sopenharmony_cistatic struct omap_hwmod_class omap3xxx_gpmc_hwmod_class = {
143862306a36Sopenharmony_ci	.name	= "gpmc",
143962306a36Sopenharmony_ci	.sysc	= &omap3xxx_gpmc_sysc,
144062306a36Sopenharmony_ci};
144162306a36Sopenharmony_ci
144262306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_gpmc_hwmod = {
144362306a36Sopenharmony_ci	.name		= "gpmc",
144462306a36Sopenharmony_ci	.class		= &omap3xxx_gpmc_hwmod_class,
144562306a36Sopenharmony_ci	.clkdm_name	= "core_l3_clkdm",
144662306a36Sopenharmony_ci	.main_clk	= "gpmc_fck",
144762306a36Sopenharmony_ci	/* Skip reset for CONFIG_OMAP_GPMC_DEBUG for bootloader timings */
144862306a36Sopenharmony_ci	.flags		= HWMOD_NO_IDLEST | DEBUG_OMAP_GPMC_HWMOD_FLAGS,
144962306a36Sopenharmony_ci};
145062306a36Sopenharmony_ci
145162306a36Sopenharmony_ci/*
145262306a36Sopenharmony_ci * interfaces
145362306a36Sopenharmony_ci */
145462306a36Sopenharmony_ci
145562306a36Sopenharmony_ci/* L3 -> L4_CORE interface */
145662306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l3_main__l4_core = {
145762306a36Sopenharmony_ci	.master	= &omap3xxx_l3_main_hwmod,
145862306a36Sopenharmony_ci	.slave	= &omap3xxx_l4_core_hwmod,
145962306a36Sopenharmony_ci	.user	= OCP_USER_MPU | OCP_USER_SDMA,
146062306a36Sopenharmony_ci};
146162306a36Sopenharmony_ci
146262306a36Sopenharmony_ci/* L3 -> L4_PER interface */
146362306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l3_main__l4_per = {
146462306a36Sopenharmony_ci	.master = &omap3xxx_l3_main_hwmod,
146562306a36Sopenharmony_ci	.slave	= &omap3xxx_l4_per_hwmod,
146662306a36Sopenharmony_ci	.user	= OCP_USER_MPU | OCP_USER_SDMA,
146762306a36Sopenharmony_ci};
146862306a36Sopenharmony_ci
146962306a36Sopenharmony_ci
147062306a36Sopenharmony_ci/* MPU -> L3 interface */
147162306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_mpu__l3_main = {
147262306a36Sopenharmony_ci	.master   = &omap3xxx_mpu_hwmod,
147362306a36Sopenharmony_ci	.slave    = &omap3xxx_l3_main_hwmod,
147462306a36Sopenharmony_ci	.user	= OCP_USER_MPU,
147562306a36Sopenharmony_ci};
147662306a36Sopenharmony_ci
147762306a36Sopenharmony_ci
147862306a36Sopenharmony_ci/* l3 -> debugss */
147962306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l3_main__l4_debugss = {
148062306a36Sopenharmony_ci	.master		= &omap3xxx_l3_main_hwmod,
148162306a36Sopenharmony_ci	.slave		= &omap3xxx_debugss_hwmod,
148262306a36Sopenharmony_ci	.user		= OCP_USER_MPU,
148362306a36Sopenharmony_ci};
148462306a36Sopenharmony_ci
148562306a36Sopenharmony_ci/* DSS -> l3 */
148662306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3430es1_dss__l3 = {
148762306a36Sopenharmony_ci	.master		= &omap3430es1_dss_core_hwmod,
148862306a36Sopenharmony_ci	.slave		= &omap3xxx_l3_main_hwmod,
148962306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
149062306a36Sopenharmony_ci};
149162306a36Sopenharmony_ci
149262306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_dss__l3 = {
149362306a36Sopenharmony_ci	.master		= &omap3xxx_dss_core_hwmod,
149462306a36Sopenharmony_ci	.slave		= &omap3xxx_l3_main_hwmod,
149562306a36Sopenharmony_ci	.fw = {
149662306a36Sopenharmony_ci		.omap2 = {
149762306a36Sopenharmony_ci			.l3_perm_bit  = OMAP3_L3_CORE_FW_INIT_ID_DSS,
149862306a36Sopenharmony_ci			.flags	= OMAP_FIREWALL_L3,
149962306a36Sopenharmony_ci		},
150062306a36Sopenharmony_ci	},
150162306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
150262306a36Sopenharmony_ci};
150362306a36Sopenharmony_ci
150462306a36Sopenharmony_ci/* l3_core -> sad2d interface */
150562306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_sad2d__l3 = {
150662306a36Sopenharmony_ci	.master		= &omap3xxx_sad2d_hwmod,
150762306a36Sopenharmony_ci	.slave		= &omap3xxx_l3_main_hwmod,
150862306a36Sopenharmony_ci	.clk		= "core_l3_ick",
150962306a36Sopenharmony_ci	.user		= OCP_USER_MPU,
151062306a36Sopenharmony_ci};
151162306a36Sopenharmony_ci
151262306a36Sopenharmony_ci/* L4_CORE -> L4_WKUP interface */
151362306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_core__l4_wkup = {
151462306a36Sopenharmony_ci	.master	= &omap3xxx_l4_core_hwmod,
151562306a36Sopenharmony_ci	.slave	= &omap3xxx_l4_wkup_hwmod,
151662306a36Sopenharmony_ci	.user	= OCP_USER_MPU | OCP_USER_SDMA,
151762306a36Sopenharmony_ci};
151862306a36Sopenharmony_ci
151962306a36Sopenharmony_ci/* L4 CORE -> MMC1 interface */
152062306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_core__pre_es3_mmc1 = {
152162306a36Sopenharmony_ci	.master		= &omap3xxx_l4_core_hwmod,
152262306a36Sopenharmony_ci	.slave		= &omap3xxx_pre_es3_mmc1_hwmod,
152362306a36Sopenharmony_ci	.clk		= "mmchs1_ick",
152462306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
152562306a36Sopenharmony_ci	.flags		= OMAP_FIREWALL_L4,
152662306a36Sopenharmony_ci};
152762306a36Sopenharmony_ci
152862306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_core__es3plus_mmc1 = {
152962306a36Sopenharmony_ci	.master		= &omap3xxx_l4_core_hwmod,
153062306a36Sopenharmony_ci	.slave		= &omap3xxx_es3plus_mmc1_hwmod,
153162306a36Sopenharmony_ci	.clk		= "mmchs1_ick",
153262306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
153362306a36Sopenharmony_ci	.flags		= OMAP_FIREWALL_L4,
153462306a36Sopenharmony_ci};
153562306a36Sopenharmony_ci
153662306a36Sopenharmony_ci/* L4 CORE -> MMC2 interface */
153762306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_core__pre_es3_mmc2 = {
153862306a36Sopenharmony_ci	.master		= &omap3xxx_l4_core_hwmod,
153962306a36Sopenharmony_ci	.slave		= &omap3xxx_pre_es3_mmc2_hwmod,
154062306a36Sopenharmony_ci	.clk		= "mmchs2_ick",
154162306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
154262306a36Sopenharmony_ci	.flags		= OMAP_FIREWALL_L4,
154362306a36Sopenharmony_ci};
154462306a36Sopenharmony_ci
154562306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_core__es3plus_mmc2 = {
154662306a36Sopenharmony_ci	.master		= &omap3xxx_l4_core_hwmod,
154762306a36Sopenharmony_ci	.slave		= &omap3xxx_es3plus_mmc2_hwmod,
154862306a36Sopenharmony_ci	.clk		= "mmchs2_ick",
154962306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
155062306a36Sopenharmony_ci	.flags		= OMAP_FIREWALL_L4,
155162306a36Sopenharmony_ci};
155262306a36Sopenharmony_ci
155362306a36Sopenharmony_ci/* L4 CORE -> MMC3 interface */
155462306a36Sopenharmony_ci
155562306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_core__mmc3 = {
155662306a36Sopenharmony_ci	.master		= &omap3xxx_l4_core_hwmod,
155762306a36Sopenharmony_ci	.slave		= &omap3xxx_mmc3_hwmod,
155862306a36Sopenharmony_ci	.clk		= "mmchs3_ick",
155962306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
156062306a36Sopenharmony_ci	.flags		= OMAP_FIREWALL_L4,
156162306a36Sopenharmony_ci};
156262306a36Sopenharmony_ci
156362306a36Sopenharmony_ci/* L4 CORE -> UART1 interface */
156462306a36Sopenharmony_ci
156562306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3_l4_core__uart1 = {
156662306a36Sopenharmony_ci	.master		= &omap3xxx_l4_core_hwmod,
156762306a36Sopenharmony_ci	.slave		= &omap3xxx_uart1_hwmod,
156862306a36Sopenharmony_ci	.clk		= "uart1_ick",
156962306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
157062306a36Sopenharmony_ci};
157162306a36Sopenharmony_ci
157262306a36Sopenharmony_ci/* L4 CORE -> UART2 interface */
157362306a36Sopenharmony_ci
157462306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3_l4_core__uart2 = {
157562306a36Sopenharmony_ci	.master		= &omap3xxx_l4_core_hwmod,
157662306a36Sopenharmony_ci	.slave		= &omap3xxx_uart2_hwmod,
157762306a36Sopenharmony_ci	.clk		= "uart2_ick",
157862306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
157962306a36Sopenharmony_ci};
158062306a36Sopenharmony_ci
158162306a36Sopenharmony_ci/* L4 PER -> UART3 interface */
158262306a36Sopenharmony_ci
158362306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3_l4_per__uart3 = {
158462306a36Sopenharmony_ci	.master		= &omap3xxx_l4_per_hwmod,
158562306a36Sopenharmony_ci	.slave		= &omap3xxx_uart3_hwmod,
158662306a36Sopenharmony_ci	.clk		= "uart3_ick",
158762306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
158862306a36Sopenharmony_ci};
158962306a36Sopenharmony_ci
159062306a36Sopenharmony_ci/* L4 PER -> UART4 interface */
159162306a36Sopenharmony_ci
159262306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap36xx_l4_per__uart4 = {
159362306a36Sopenharmony_ci	.master		= &omap3xxx_l4_per_hwmod,
159462306a36Sopenharmony_ci	.slave		= &omap36xx_uart4_hwmod,
159562306a36Sopenharmony_ci	.clk		= "uart4_ick",
159662306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
159762306a36Sopenharmony_ci};
159862306a36Sopenharmony_ci
159962306a36Sopenharmony_ci/* AM35xx: L4 CORE -> UART4 interface */
160062306a36Sopenharmony_ci
160162306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if am35xx_l4_core__uart4 = {
160262306a36Sopenharmony_ci	.master		= &omap3xxx_l4_core_hwmod,
160362306a36Sopenharmony_ci	.slave		= &am35xx_uart4_hwmod,
160462306a36Sopenharmony_ci	.clk		= "uart4_ick",
160562306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
160662306a36Sopenharmony_ci};
160762306a36Sopenharmony_ci
160862306a36Sopenharmony_ci/* L4 CORE -> I2C1 interface */
160962306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3_l4_core__i2c1 = {
161062306a36Sopenharmony_ci	.master		= &omap3xxx_l4_core_hwmod,
161162306a36Sopenharmony_ci	.slave		= &omap3xxx_i2c1_hwmod,
161262306a36Sopenharmony_ci	.clk		= "i2c1_ick",
161362306a36Sopenharmony_ci	.fw = {
161462306a36Sopenharmony_ci		.omap2 = {
161562306a36Sopenharmony_ci			.l4_fw_region  = OMAP3_L4_CORE_FW_I2C1_REGION,
161662306a36Sopenharmony_ci			.l4_prot_group = 7,
161762306a36Sopenharmony_ci			.flags	= OMAP_FIREWALL_L4,
161862306a36Sopenharmony_ci		},
161962306a36Sopenharmony_ci	},
162062306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
162162306a36Sopenharmony_ci};
162262306a36Sopenharmony_ci
162362306a36Sopenharmony_ci/* L4 CORE -> I2C2 interface */
162462306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3_l4_core__i2c2 = {
162562306a36Sopenharmony_ci	.master		= &omap3xxx_l4_core_hwmod,
162662306a36Sopenharmony_ci	.slave		= &omap3xxx_i2c2_hwmod,
162762306a36Sopenharmony_ci	.clk		= "i2c2_ick",
162862306a36Sopenharmony_ci	.fw = {
162962306a36Sopenharmony_ci		.omap2 = {
163062306a36Sopenharmony_ci			.l4_fw_region  = OMAP3_L4_CORE_FW_I2C2_REGION,
163162306a36Sopenharmony_ci			.l4_prot_group = 7,
163262306a36Sopenharmony_ci			.flags = OMAP_FIREWALL_L4,
163362306a36Sopenharmony_ci		},
163462306a36Sopenharmony_ci	},
163562306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
163662306a36Sopenharmony_ci};
163762306a36Sopenharmony_ci
163862306a36Sopenharmony_ci/* L4 CORE -> I2C3 interface */
163962306a36Sopenharmony_ci
164062306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3_l4_core__i2c3 = {
164162306a36Sopenharmony_ci	.master		= &omap3xxx_l4_core_hwmod,
164262306a36Sopenharmony_ci	.slave		= &omap3xxx_i2c3_hwmod,
164362306a36Sopenharmony_ci	.clk		= "i2c3_ick",
164462306a36Sopenharmony_ci	.fw = {
164562306a36Sopenharmony_ci		.omap2 = {
164662306a36Sopenharmony_ci			.l4_fw_region  = OMAP3_L4_CORE_FW_I2C3_REGION,
164762306a36Sopenharmony_ci			.l4_prot_group = 7,
164862306a36Sopenharmony_ci			.flags = OMAP_FIREWALL_L4,
164962306a36Sopenharmony_ci		},
165062306a36Sopenharmony_ci	},
165162306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
165262306a36Sopenharmony_ci};
165362306a36Sopenharmony_ci
165462306a36Sopenharmony_ci/* L4 CORE -> SR1 interface */
165562306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap34xx_l4_core__sr1 = {
165662306a36Sopenharmony_ci	.master		= &omap3xxx_l4_core_hwmod,
165762306a36Sopenharmony_ci	.slave		= &omap34xx_sr1_hwmod,
165862306a36Sopenharmony_ci	.clk		= "sr_l4_ick",
165962306a36Sopenharmony_ci	.user		= OCP_USER_MPU,
166062306a36Sopenharmony_ci};
166162306a36Sopenharmony_ci
166262306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap36xx_l4_core__sr1 = {
166362306a36Sopenharmony_ci	.master		= &omap3xxx_l4_core_hwmod,
166462306a36Sopenharmony_ci	.slave		= &omap36xx_sr1_hwmod,
166562306a36Sopenharmony_ci	.clk		= "sr_l4_ick",
166662306a36Sopenharmony_ci	.user		= OCP_USER_MPU,
166762306a36Sopenharmony_ci};
166862306a36Sopenharmony_ci
166962306a36Sopenharmony_ci/* L4 CORE -> SR2 interface */
167062306a36Sopenharmony_ci
167162306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap34xx_l4_core__sr2 = {
167262306a36Sopenharmony_ci	.master		= &omap3xxx_l4_core_hwmod,
167362306a36Sopenharmony_ci	.slave		= &omap34xx_sr2_hwmod,
167462306a36Sopenharmony_ci	.clk		= "sr_l4_ick",
167562306a36Sopenharmony_ci	.user		= OCP_USER_MPU,
167662306a36Sopenharmony_ci};
167762306a36Sopenharmony_ci
167862306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap36xx_l4_core__sr2 = {
167962306a36Sopenharmony_ci	.master		= &omap3xxx_l4_core_hwmod,
168062306a36Sopenharmony_ci	.slave		= &omap36xx_sr2_hwmod,
168162306a36Sopenharmony_ci	.clk		= "sr_l4_ick",
168262306a36Sopenharmony_ci	.user		= OCP_USER_MPU,
168362306a36Sopenharmony_ci};
168462306a36Sopenharmony_ci
168562306a36Sopenharmony_ci/* L4_WKUP -> L4_SEC interface */
168662306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_wkup__l4_sec = {
168762306a36Sopenharmony_ci	.master = &omap3xxx_l4_wkup_hwmod,
168862306a36Sopenharmony_ci	.slave	= &omap3xxx_l4_sec_hwmod,
168962306a36Sopenharmony_ci	.user	= OCP_USER_MPU | OCP_USER_SDMA,
169062306a36Sopenharmony_ci};
169162306a36Sopenharmony_ci
169262306a36Sopenharmony_ci/* IVA2 <- L3 interface */
169362306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l3__iva = {
169462306a36Sopenharmony_ci	.master		= &omap3xxx_l3_main_hwmod,
169562306a36Sopenharmony_ci	.slave		= &omap3xxx_iva_hwmod,
169662306a36Sopenharmony_ci	.clk		= "core_l3_ick",
169762306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
169862306a36Sopenharmony_ci};
169962306a36Sopenharmony_ci
170062306a36Sopenharmony_ci/* l4_per -> timer3 */
170162306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_per__timer3 = {
170262306a36Sopenharmony_ci	.master		= &omap3xxx_l4_per_hwmod,
170362306a36Sopenharmony_ci	.slave		= &omap3xxx_timer3_hwmod,
170462306a36Sopenharmony_ci	.clk		= "gpt3_ick",
170562306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
170662306a36Sopenharmony_ci};
170762306a36Sopenharmony_ci
170862306a36Sopenharmony_ci
170962306a36Sopenharmony_ci/* l4_per -> timer4 */
171062306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_per__timer4 = {
171162306a36Sopenharmony_ci	.master		= &omap3xxx_l4_per_hwmod,
171262306a36Sopenharmony_ci	.slave		= &omap3xxx_timer4_hwmod,
171362306a36Sopenharmony_ci	.clk		= "gpt4_ick",
171462306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
171562306a36Sopenharmony_ci};
171662306a36Sopenharmony_ci
171762306a36Sopenharmony_ci
171862306a36Sopenharmony_ci/* l4_per -> timer5 */
171962306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_per__timer5 = {
172062306a36Sopenharmony_ci	.master		= &omap3xxx_l4_per_hwmod,
172162306a36Sopenharmony_ci	.slave		= &omap3xxx_timer5_hwmod,
172262306a36Sopenharmony_ci	.clk		= "gpt5_ick",
172362306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
172462306a36Sopenharmony_ci};
172562306a36Sopenharmony_ci
172662306a36Sopenharmony_ci
172762306a36Sopenharmony_ci/* l4_per -> timer6 */
172862306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_per__timer6 = {
172962306a36Sopenharmony_ci	.master		= &omap3xxx_l4_per_hwmod,
173062306a36Sopenharmony_ci	.slave		= &omap3xxx_timer6_hwmod,
173162306a36Sopenharmony_ci	.clk		= "gpt6_ick",
173262306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
173362306a36Sopenharmony_ci};
173462306a36Sopenharmony_ci
173562306a36Sopenharmony_ci
173662306a36Sopenharmony_ci/* l4_per -> timer7 */
173762306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_per__timer7 = {
173862306a36Sopenharmony_ci	.master		= &omap3xxx_l4_per_hwmod,
173962306a36Sopenharmony_ci	.slave		= &omap3xxx_timer7_hwmod,
174062306a36Sopenharmony_ci	.clk		= "gpt7_ick",
174162306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
174262306a36Sopenharmony_ci};
174362306a36Sopenharmony_ci
174462306a36Sopenharmony_ci
174562306a36Sopenharmony_ci/* l4_per -> timer8 */
174662306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_per__timer8 = {
174762306a36Sopenharmony_ci	.master		= &omap3xxx_l4_per_hwmod,
174862306a36Sopenharmony_ci	.slave		= &omap3xxx_timer8_hwmod,
174962306a36Sopenharmony_ci	.clk		= "gpt8_ick",
175062306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
175162306a36Sopenharmony_ci};
175262306a36Sopenharmony_ci
175362306a36Sopenharmony_ci
175462306a36Sopenharmony_ci/* l4_per -> timer9 */
175562306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_per__timer9 = {
175662306a36Sopenharmony_ci	.master		= &omap3xxx_l4_per_hwmod,
175762306a36Sopenharmony_ci	.slave		= &omap3xxx_timer9_hwmod,
175862306a36Sopenharmony_ci	.clk		= "gpt9_ick",
175962306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
176062306a36Sopenharmony_ci};
176162306a36Sopenharmony_ci
176262306a36Sopenharmony_ci/* l4_core -> timer10 */
176362306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_core__timer10 = {
176462306a36Sopenharmony_ci	.master		= &omap3xxx_l4_core_hwmod,
176562306a36Sopenharmony_ci	.slave		= &omap3xxx_timer10_hwmod,
176662306a36Sopenharmony_ci	.clk		= "gpt10_ick",
176762306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
176862306a36Sopenharmony_ci};
176962306a36Sopenharmony_ci
177062306a36Sopenharmony_ci/* l4_core -> timer11 */
177162306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_core__timer11 = {
177262306a36Sopenharmony_ci	.master		= &omap3xxx_l4_core_hwmod,
177362306a36Sopenharmony_ci	.slave		= &omap3xxx_timer11_hwmod,
177462306a36Sopenharmony_ci	.clk		= "gpt11_ick",
177562306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
177662306a36Sopenharmony_ci};
177762306a36Sopenharmony_ci
177862306a36Sopenharmony_ci/* l4_wkup -> wd_timer2 */
177962306a36Sopenharmony_ci
178062306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_wkup__wd_timer2 = {
178162306a36Sopenharmony_ci	.master		= &omap3xxx_l4_wkup_hwmod,
178262306a36Sopenharmony_ci	.slave		= &omap3xxx_wd_timer2_hwmod,
178362306a36Sopenharmony_ci	.clk		= "wdt2_ick",
178462306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
178562306a36Sopenharmony_ci};
178662306a36Sopenharmony_ci
178762306a36Sopenharmony_ci/* l4_core -> dss */
178862306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3430es1_l4_core__dss = {
178962306a36Sopenharmony_ci	.master		= &omap3xxx_l4_core_hwmod,
179062306a36Sopenharmony_ci	.slave		= &omap3430es1_dss_core_hwmod,
179162306a36Sopenharmony_ci	.clk		= "dss_ick",
179262306a36Sopenharmony_ci	.fw = {
179362306a36Sopenharmony_ci		.omap2 = {
179462306a36Sopenharmony_ci			.l4_fw_region  = OMAP3ES1_L4_CORE_FW_DSS_CORE_REGION,
179562306a36Sopenharmony_ci			.l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
179662306a36Sopenharmony_ci			.flags	= OMAP_FIREWALL_L4,
179762306a36Sopenharmony_ci		},
179862306a36Sopenharmony_ci	},
179962306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
180062306a36Sopenharmony_ci};
180162306a36Sopenharmony_ci
180262306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_core__dss = {
180362306a36Sopenharmony_ci	.master		= &omap3xxx_l4_core_hwmod,
180462306a36Sopenharmony_ci	.slave		= &omap3xxx_dss_core_hwmod,
180562306a36Sopenharmony_ci	.clk		= "dss_ick",
180662306a36Sopenharmony_ci	.fw = {
180762306a36Sopenharmony_ci		.omap2 = {
180862306a36Sopenharmony_ci			.l4_fw_region  = OMAP3_L4_CORE_FW_DSS_CORE_REGION,
180962306a36Sopenharmony_ci			.l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
181062306a36Sopenharmony_ci			.flags	= OMAP_FIREWALL_L4,
181162306a36Sopenharmony_ci		},
181262306a36Sopenharmony_ci	},
181362306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
181462306a36Sopenharmony_ci};
181562306a36Sopenharmony_ci
181662306a36Sopenharmony_ci/* l4_core -> dss_dispc */
181762306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_dispc = {
181862306a36Sopenharmony_ci	.master		= &omap3xxx_l4_core_hwmod,
181962306a36Sopenharmony_ci	.slave		= &omap3xxx_dss_dispc_hwmod,
182062306a36Sopenharmony_ci	.clk		= "dss_ick",
182162306a36Sopenharmony_ci	.fw = {
182262306a36Sopenharmony_ci		.omap2 = {
182362306a36Sopenharmony_ci			.l4_fw_region  = OMAP3_L4_CORE_FW_DSS_DISPC_REGION,
182462306a36Sopenharmony_ci			.l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
182562306a36Sopenharmony_ci			.flags	= OMAP_FIREWALL_L4,
182662306a36Sopenharmony_ci		},
182762306a36Sopenharmony_ci	},
182862306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
182962306a36Sopenharmony_ci};
183062306a36Sopenharmony_ci
183162306a36Sopenharmony_ci/* l4_core -> dss_dsi1 */
183262306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_dsi1 = {
183362306a36Sopenharmony_ci	.master		= &omap3xxx_l4_core_hwmod,
183462306a36Sopenharmony_ci	.slave		= &omap3xxx_dss_dsi1_hwmod,
183562306a36Sopenharmony_ci	.clk		= "dss_ick",
183662306a36Sopenharmony_ci	.fw = {
183762306a36Sopenharmony_ci		.omap2 = {
183862306a36Sopenharmony_ci			.l4_fw_region  = OMAP3_L4_CORE_FW_DSS_DSI_REGION,
183962306a36Sopenharmony_ci			.l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
184062306a36Sopenharmony_ci			.flags	= OMAP_FIREWALL_L4,
184162306a36Sopenharmony_ci		},
184262306a36Sopenharmony_ci	},
184362306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
184462306a36Sopenharmony_ci};
184562306a36Sopenharmony_ci
184662306a36Sopenharmony_ci/* l4_core -> dss_rfbi */
184762306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_rfbi = {
184862306a36Sopenharmony_ci	.master		= &omap3xxx_l4_core_hwmod,
184962306a36Sopenharmony_ci	.slave		= &omap3xxx_dss_rfbi_hwmod,
185062306a36Sopenharmony_ci	.clk		= "dss_ick",
185162306a36Sopenharmony_ci	.fw = {
185262306a36Sopenharmony_ci		.omap2 = {
185362306a36Sopenharmony_ci			.l4_fw_region  = OMAP3_L4_CORE_FW_DSS_RFBI_REGION,
185462306a36Sopenharmony_ci			.l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
185562306a36Sopenharmony_ci			.flags	= OMAP_FIREWALL_L4,
185662306a36Sopenharmony_ci		},
185762306a36Sopenharmony_ci	},
185862306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
185962306a36Sopenharmony_ci};
186062306a36Sopenharmony_ci
186162306a36Sopenharmony_ci/* l4_core -> dss_venc */
186262306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_venc = {
186362306a36Sopenharmony_ci	.master		= &omap3xxx_l4_core_hwmod,
186462306a36Sopenharmony_ci	.slave		= &omap3xxx_dss_venc_hwmod,
186562306a36Sopenharmony_ci	.clk		= "dss_ick",
186662306a36Sopenharmony_ci	.fw = {
186762306a36Sopenharmony_ci		.omap2 = {
186862306a36Sopenharmony_ci			.l4_fw_region  = OMAP3_L4_CORE_FW_DSS_VENC_REGION,
186962306a36Sopenharmony_ci			.l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
187062306a36Sopenharmony_ci			.flags	= OMAP_FIREWALL_L4,
187162306a36Sopenharmony_ci		},
187262306a36Sopenharmony_ci	},
187362306a36Sopenharmony_ci	.flags		= OCPIF_SWSUP_IDLE,
187462306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
187562306a36Sopenharmony_ci};
187662306a36Sopenharmony_ci
187762306a36Sopenharmony_ci/* l4_wkup -> gpio1 */
187862306a36Sopenharmony_ci
187962306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_wkup__gpio1 = {
188062306a36Sopenharmony_ci	.master		= &omap3xxx_l4_wkup_hwmod,
188162306a36Sopenharmony_ci	.slave		= &omap3xxx_gpio1_hwmod,
188262306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
188362306a36Sopenharmony_ci};
188462306a36Sopenharmony_ci
188562306a36Sopenharmony_ci/* l4_per -> gpio2 */
188662306a36Sopenharmony_ci
188762306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio2 = {
188862306a36Sopenharmony_ci	.master		= &omap3xxx_l4_per_hwmod,
188962306a36Sopenharmony_ci	.slave		= &omap3xxx_gpio2_hwmod,
189062306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
189162306a36Sopenharmony_ci};
189262306a36Sopenharmony_ci
189362306a36Sopenharmony_ci/* l4_per -> gpio3 */
189462306a36Sopenharmony_ci
189562306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio3 = {
189662306a36Sopenharmony_ci	.master		= &omap3xxx_l4_per_hwmod,
189762306a36Sopenharmony_ci	.slave		= &omap3xxx_gpio3_hwmod,
189862306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
189962306a36Sopenharmony_ci};
190062306a36Sopenharmony_ci
190162306a36Sopenharmony_ci/*
190262306a36Sopenharmony_ci * 'mmu' class
190362306a36Sopenharmony_ci * The memory management unit performs virtual to physical address translation
190462306a36Sopenharmony_ci * for its requestors.
190562306a36Sopenharmony_ci */
190662306a36Sopenharmony_ci
190762306a36Sopenharmony_cistatic struct omap_hwmod_class_sysconfig mmu_sysc = {
190862306a36Sopenharmony_ci	.rev_offs	= 0x000,
190962306a36Sopenharmony_ci	.sysc_offs	= 0x010,
191062306a36Sopenharmony_ci	.syss_offs	= 0x014,
191162306a36Sopenharmony_ci	.sysc_flags	= (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
191262306a36Sopenharmony_ci			   SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
191362306a36Sopenharmony_ci	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
191462306a36Sopenharmony_ci	.sysc_fields	= &omap_hwmod_sysc_type1,
191562306a36Sopenharmony_ci};
191662306a36Sopenharmony_ci
191762306a36Sopenharmony_cistatic struct omap_hwmod_class omap3xxx_mmu_hwmod_class = {
191862306a36Sopenharmony_ci	.name = "mmu",
191962306a36Sopenharmony_ci	.sysc = &mmu_sysc,
192062306a36Sopenharmony_ci};
192162306a36Sopenharmony_ci
192262306a36Sopenharmony_ci/* mmu isp */
192362306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_mmu_isp_hwmod;
192462306a36Sopenharmony_ci
192562306a36Sopenharmony_ci/* l4_core -> mmu isp */
192662306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_core__mmu_isp = {
192762306a36Sopenharmony_ci	.master		= &omap3xxx_l4_core_hwmod,
192862306a36Sopenharmony_ci	.slave		= &omap3xxx_mmu_isp_hwmod,
192962306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
193062306a36Sopenharmony_ci};
193162306a36Sopenharmony_ci
193262306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_mmu_isp_hwmod = {
193362306a36Sopenharmony_ci	.name		= "mmu_isp",
193462306a36Sopenharmony_ci	.class		= &omap3xxx_mmu_hwmod_class,
193562306a36Sopenharmony_ci	.main_clk	= "cam_ick",
193662306a36Sopenharmony_ci	.flags		= HWMOD_NO_IDLEST,
193762306a36Sopenharmony_ci};
193862306a36Sopenharmony_ci
193962306a36Sopenharmony_ci/* mmu iva */
194062306a36Sopenharmony_ci
194162306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_mmu_iva_hwmod;
194262306a36Sopenharmony_ci
194362306a36Sopenharmony_cistatic struct omap_hwmod_rst_info omap3xxx_mmu_iva_resets[] = {
194462306a36Sopenharmony_ci	{ .name = "mmu", .rst_shift = 1, .st_shift = 9 },
194562306a36Sopenharmony_ci};
194662306a36Sopenharmony_ci
194762306a36Sopenharmony_ci/* l3_main -> iva mmu */
194862306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l3_main__mmu_iva = {
194962306a36Sopenharmony_ci	.master		= &omap3xxx_l3_main_hwmod,
195062306a36Sopenharmony_ci	.slave		= &omap3xxx_mmu_iva_hwmod,
195162306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
195262306a36Sopenharmony_ci};
195362306a36Sopenharmony_ci
195462306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_mmu_iva_hwmod = {
195562306a36Sopenharmony_ci	.name		= "mmu_iva",
195662306a36Sopenharmony_ci	.class		= &omap3xxx_mmu_hwmod_class,
195762306a36Sopenharmony_ci	.clkdm_name	= "iva2_clkdm",
195862306a36Sopenharmony_ci	.rst_lines	= omap3xxx_mmu_iva_resets,
195962306a36Sopenharmony_ci	.rst_lines_cnt	= ARRAY_SIZE(omap3xxx_mmu_iva_resets),
196062306a36Sopenharmony_ci	.main_clk	= "iva2_ck",
196162306a36Sopenharmony_ci	.prcm = {
196262306a36Sopenharmony_ci		.omap2 = {
196362306a36Sopenharmony_ci			.module_offs = OMAP3430_IVA2_MOD,
196462306a36Sopenharmony_ci			.idlest_reg_id = 1,
196562306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_ST_IVA2_SHIFT,
196662306a36Sopenharmony_ci		},
196762306a36Sopenharmony_ci	},
196862306a36Sopenharmony_ci	.flags		= HWMOD_NO_IDLEST,
196962306a36Sopenharmony_ci};
197062306a36Sopenharmony_ci
197162306a36Sopenharmony_ci/* l4_per -> gpio4 */
197262306a36Sopenharmony_ci
197362306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio4 = {
197462306a36Sopenharmony_ci	.master		= &omap3xxx_l4_per_hwmod,
197562306a36Sopenharmony_ci	.slave		= &omap3xxx_gpio4_hwmod,
197662306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
197762306a36Sopenharmony_ci};
197862306a36Sopenharmony_ci
197962306a36Sopenharmony_ci/* l4_per -> gpio5 */
198062306a36Sopenharmony_ci
198162306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio5 = {
198262306a36Sopenharmony_ci	.master		= &omap3xxx_l4_per_hwmod,
198362306a36Sopenharmony_ci	.slave		= &omap3xxx_gpio5_hwmod,
198462306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
198562306a36Sopenharmony_ci};
198662306a36Sopenharmony_ci
198762306a36Sopenharmony_ci/* l4_per -> gpio6 */
198862306a36Sopenharmony_ci
198962306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio6 = {
199062306a36Sopenharmony_ci	.master		= &omap3xxx_l4_per_hwmod,
199162306a36Sopenharmony_ci	.slave		= &omap3xxx_gpio6_hwmod,
199262306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
199362306a36Sopenharmony_ci};
199462306a36Sopenharmony_ci
199562306a36Sopenharmony_ci/* l4_core -> mcbsp1 */
199662306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_core__mcbsp1 = {
199762306a36Sopenharmony_ci	.master		= &omap3xxx_l4_core_hwmod,
199862306a36Sopenharmony_ci	.slave		= &omap3xxx_mcbsp1_hwmod,
199962306a36Sopenharmony_ci	.clk		= "mcbsp1_ick",
200062306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
200162306a36Sopenharmony_ci};
200262306a36Sopenharmony_ci
200362306a36Sopenharmony_ci
200462306a36Sopenharmony_ci/* l4_per -> mcbsp2 */
200562306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp2 = {
200662306a36Sopenharmony_ci	.master		= &omap3xxx_l4_per_hwmod,
200762306a36Sopenharmony_ci	.slave		= &omap3xxx_mcbsp2_hwmod,
200862306a36Sopenharmony_ci	.clk		= "mcbsp2_ick",
200962306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
201062306a36Sopenharmony_ci};
201162306a36Sopenharmony_ci
201262306a36Sopenharmony_ci
201362306a36Sopenharmony_ci/* l4_per -> mcbsp3 */
201462306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp3 = {
201562306a36Sopenharmony_ci	.master		= &omap3xxx_l4_per_hwmod,
201662306a36Sopenharmony_ci	.slave		= &omap3xxx_mcbsp3_hwmod,
201762306a36Sopenharmony_ci	.clk		= "mcbsp3_ick",
201862306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
201962306a36Sopenharmony_ci};
202062306a36Sopenharmony_ci
202162306a36Sopenharmony_ci
202262306a36Sopenharmony_ci/* l4_per -> mcbsp4 */
202362306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp4 = {
202462306a36Sopenharmony_ci	.master		= &omap3xxx_l4_per_hwmod,
202562306a36Sopenharmony_ci	.slave		= &omap3xxx_mcbsp4_hwmod,
202662306a36Sopenharmony_ci	.clk		= "mcbsp4_ick",
202762306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
202862306a36Sopenharmony_ci};
202962306a36Sopenharmony_ci
203062306a36Sopenharmony_ci
203162306a36Sopenharmony_ci/* l4_core -> mcbsp5 */
203262306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_core__mcbsp5 = {
203362306a36Sopenharmony_ci	.master		= &omap3xxx_l4_core_hwmod,
203462306a36Sopenharmony_ci	.slave		= &omap3xxx_mcbsp5_hwmod,
203562306a36Sopenharmony_ci	.clk		= "mcbsp5_ick",
203662306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
203762306a36Sopenharmony_ci};
203862306a36Sopenharmony_ci
203962306a36Sopenharmony_ci
204062306a36Sopenharmony_ci/* l4_per -> mcbsp2_sidetone */
204162306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp2_sidetone = {
204262306a36Sopenharmony_ci	.master		= &omap3xxx_l4_per_hwmod,
204362306a36Sopenharmony_ci	.slave		= &omap3xxx_mcbsp2_sidetone_hwmod,
204462306a36Sopenharmony_ci	.clk		= "mcbsp2_ick",
204562306a36Sopenharmony_ci	.user		= OCP_USER_MPU,
204662306a36Sopenharmony_ci};
204762306a36Sopenharmony_ci
204862306a36Sopenharmony_ci
204962306a36Sopenharmony_ci/* l4_per -> mcbsp3_sidetone */
205062306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp3_sidetone = {
205162306a36Sopenharmony_ci	.master		= &omap3xxx_l4_per_hwmod,
205262306a36Sopenharmony_ci	.slave		= &omap3xxx_mcbsp3_sidetone_hwmod,
205362306a36Sopenharmony_ci	.clk		= "mcbsp3_ick",
205462306a36Sopenharmony_ci	.user		= OCP_USER_MPU,
205562306a36Sopenharmony_ci};
205662306a36Sopenharmony_ci
205762306a36Sopenharmony_ci/* l4_core -> mailbox */
205862306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_core__mailbox = {
205962306a36Sopenharmony_ci	.master		= &omap3xxx_l4_core_hwmod,
206062306a36Sopenharmony_ci	.slave		= &omap3xxx_mailbox_hwmod,
206162306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
206262306a36Sopenharmony_ci};
206362306a36Sopenharmony_ci
206462306a36Sopenharmony_ci/* l4 core -> mcspi1 interface */
206562306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap34xx_l4_core__mcspi1 = {
206662306a36Sopenharmony_ci	.master		= &omap3xxx_l4_core_hwmod,
206762306a36Sopenharmony_ci	.slave		= &omap34xx_mcspi1,
206862306a36Sopenharmony_ci	.clk		= "mcspi1_ick",
206962306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
207062306a36Sopenharmony_ci};
207162306a36Sopenharmony_ci
207262306a36Sopenharmony_ci/* l4 core -> mcspi2 interface */
207362306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap34xx_l4_core__mcspi2 = {
207462306a36Sopenharmony_ci	.master		= &omap3xxx_l4_core_hwmod,
207562306a36Sopenharmony_ci	.slave		= &omap34xx_mcspi2,
207662306a36Sopenharmony_ci	.clk		= "mcspi2_ick",
207762306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
207862306a36Sopenharmony_ci};
207962306a36Sopenharmony_ci
208062306a36Sopenharmony_ci/* l4 core -> mcspi3 interface */
208162306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap34xx_l4_core__mcspi3 = {
208262306a36Sopenharmony_ci	.master		= &omap3xxx_l4_core_hwmod,
208362306a36Sopenharmony_ci	.slave		= &omap34xx_mcspi3,
208462306a36Sopenharmony_ci	.clk		= "mcspi3_ick",
208562306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
208662306a36Sopenharmony_ci};
208762306a36Sopenharmony_ci
208862306a36Sopenharmony_ci/* l4 core -> mcspi4 interface */
208962306a36Sopenharmony_ci
209062306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap34xx_l4_core__mcspi4 = {
209162306a36Sopenharmony_ci	.master		= &omap3xxx_l4_core_hwmod,
209262306a36Sopenharmony_ci	.slave		= &omap34xx_mcspi4,
209362306a36Sopenharmony_ci	.clk		= "mcspi4_ick",
209462306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
209562306a36Sopenharmony_ci};
209662306a36Sopenharmony_ci
209762306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_usb_host_hs__l3_main_2 = {
209862306a36Sopenharmony_ci	.master		= &omap3xxx_usb_host_hs_hwmod,
209962306a36Sopenharmony_ci	.slave		= &omap3xxx_l3_main_hwmod,
210062306a36Sopenharmony_ci	.clk		= "core_l3_ick",
210162306a36Sopenharmony_ci	.user		= OCP_USER_MPU,
210262306a36Sopenharmony_ci};
210362306a36Sopenharmony_ci
210462306a36Sopenharmony_ci
210562306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_core__usb_host_hs = {
210662306a36Sopenharmony_ci	.master		= &omap3xxx_l4_core_hwmod,
210762306a36Sopenharmony_ci	.slave		= &omap3xxx_usb_host_hs_hwmod,
210862306a36Sopenharmony_ci	.clk		= "usbhost_ick",
210962306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
211062306a36Sopenharmony_ci};
211162306a36Sopenharmony_ci
211262306a36Sopenharmony_ci
211362306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_core__usb_tll_hs = {
211462306a36Sopenharmony_ci	.master		= &omap3xxx_l4_core_hwmod,
211562306a36Sopenharmony_ci	.slave		= &omap3xxx_usb_tll_hs_hwmod,
211662306a36Sopenharmony_ci	.clk		= "usbtll_ick",
211762306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
211862306a36Sopenharmony_ci};
211962306a36Sopenharmony_ci
212062306a36Sopenharmony_ci/* l4_core -> hdq1w interface */
212162306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_core__hdq1w = {
212262306a36Sopenharmony_ci	.master		= &omap3xxx_l4_core_hwmod,
212362306a36Sopenharmony_ci	.slave		= &omap3xxx_hdq1w_hwmod,
212462306a36Sopenharmony_ci	.clk		= "hdq_ick",
212562306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
212662306a36Sopenharmony_ci	.flags		= OMAP_FIREWALL_L4 | OCPIF_SWSUP_IDLE,
212762306a36Sopenharmony_ci};
212862306a36Sopenharmony_ci
212962306a36Sopenharmony_ci/* am35xx has Davinci MDIO & EMAC */
213062306a36Sopenharmony_cistatic struct omap_hwmod_class am35xx_mdio_class = {
213162306a36Sopenharmony_ci	.name = "davinci_mdio",
213262306a36Sopenharmony_ci};
213362306a36Sopenharmony_ci
213462306a36Sopenharmony_cistatic struct omap_hwmod am35xx_mdio_hwmod = {
213562306a36Sopenharmony_ci	.name		= "davinci_mdio",
213662306a36Sopenharmony_ci	.class		= &am35xx_mdio_class,
213762306a36Sopenharmony_ci	.flags		= HWMOD_NO_IDLEST,
213862306a36Sopenharmony_ci};
213962306a36Sopenharmony_ci
214062306a36Sopenharmony_ci/*
214162306a36Sopenharmony_ci * XXX Should be connected to an IPSS hwmod, not the L3 directly;
214262306a36Sopenharmony_ci * but this will probably require some additional hwmod core support,
214362306a36Sopenharmony_ci * so is left as a future to-do item.
214462306a36Sopenharmony_ci */
214562306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if am35xx_mdio__l3 = {
214662306a36Sopenharmony_ci	.master		= &am35xx_mdio_hwmod,
214762306a36Sopenharmony_ci	.slave		= &omap3xxx_l3_main_hwmod,
214862306a36Sopenharmony_ci	.clk		= "emac_fck",
214962306a36Sopenharmony_ci	.user		= OCP_USER_MPU,
215062306a36Sopenharmony_ci};
215162306a36Sopenharmony_ci
215262306a36Sopenharmony_ci/* l4_core -> davinci mdio  */
215362306a36Sopenharmony_ci/*
215462306a36Sopenharmony_ci * XXX Should be connected to an IPSS hwmod, not the L4_CORE directly;
215562306a36Sopenharmony_ci * but this will probably require some additional hwmod core support,
215662306a36Sopenharmony_ci * so is left as a future to-do item.
215762306a36Sopenharmony_ci */
215862306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if am35xx_l4_core__mdio = {
215962306a36Sopenharmony_ci	.master		= &omap3xxx_l4_core_hwmod,
216062306a36Sopenharmony_ci	.slave		= &am35xx_mdio_hwmod,
216162306a36Sopenharmony_ci	.clk		= "emac_fck",
216262306a36Sopenharmony_ci	.user		= OCP_USER_MPU,
216362306a36Sopenharmony_ci};
216462306a36Sopenharmony_ci
216562306a36Sopenharmony_cistatic struct omap_hwmod_class am35xx_emac_class = {
216662306a36Sopenharmony_ci	.name = "davinci_emac",
216762306a36Sopenharmony_ci};
216862306a36Sopenharmony_ci
216962306a36Sopenharmony_cistatic struct omap_hwmod am35xx_emac_hwmod = {
217062306a36Sopenharmony_ci	.name		= "davinci_emac",
217162306a36Sopenharmony_ci	.class		= &am35xx_emac_class,
217262306a36Sopenharmony_ci	/*
217362306a36Sopenharmony_ci	 * According to Mark Greer, the MPU will not return from WFI
217462306a36Sopenharmony_ci	 * when the EMAC signals an interrupt.
217562306a36Sopenharmony_ci	 * https://lore.kernel.org/all/1336770778-23044-3-git-send-email-mgreer@animalcreek.com/
217662306a36Sopenharmony_ci	 */
217762306a36Sopenharmony_ci	.flags		= (HWMOD_NO_IDLEST | HWMOD_BLOCK_WFI),
217862306a36Sopenharmony_ci};
217962306a36Sopenharmony_ci
218062306a36Sopenharmony_ci/* l3_core -> davinci emac interface */
218162306a36Sopenharmony_ci/*
218262306a36Sopenharmony_ci * XXX Should be connected to an IPSS hwmod, not the L3 directly;
218362306a36Sopenharmony_ci * but this will probably require some additional hwmod core support,
218462306a36Sopenharmony_ci * so is left as a future to-do item.
218562306a36Sopenharmony_ci */
218662306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if am35xx_emac__l3 = {
218762306a36Sopenharmony_ci	.master		= &am35xx_emac_hwmod,
218862306a36Sopenharmony_ci	.slave		= &omap3xxx_l3_main_hwmod,
218962306a36Sopenharmony_ci	.clk		= "emac_ick",
219062306a36Sopenharmony_ci	.user		= OCP_USER_MPU,
219162306a36Sopenharmony_ci};
219262306a36Sopenharmony_ci
219362306a36Sopenharmony_ci/* l4_core -> davinci emac  */
219462306a36Sopenharmony_ci/*
219562306a36Sopenharmony_ci * XXX Should be connected to an IPSS hwmod, not the L4_CORE directly;
219662306a36Sopenharmony_ci * but this will probably require some additional hwmod core support,
219762306a36Sopenharmony_ci * so is left as a future to-do item.
219862306a36Sopenharmony_ci */
219962306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if am35xx_l4_core__emac = {
220062306a36Sopenharmony_ci	.master		= &omap3xxx_l4_core_hwmod,
220162306a36Sopenharmony_ci	.slave		= &am35xx_emac_hwmod,
220262306a36Sopenharmony_ci	.clk		= "emac_ick",
220362306a36Sopenharmony_ci	.user		= OCP_USER_MPU,
220462306a36Sopenharmony_ci};
220562306a36Sopenharmony_ci
220662306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l3_main__gpmc = {
220762306a36Sopenharmony_ci	.master		= &omap3xxx_l3_main_hwmod,
220862306a36Sopenharmony_ci	.slave		= &omap3xxx_gpmc_hwmod,
220962306a36Sopenharmony_ci	.clk		= "core_l3_ick",
221062306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
221162306a36Sopenharmony_ci};
221262306a36Sopenharmony_ci
221362306a36Sopenharmony_ci/* l4_core -> SHAM2 (SHA1/MD5) (similar to omap24xx) */
221462306a36Sopenharmony_cistatic struct omap_hwmod_class_sysconfig omap3_sham_sysc = {
221562306a36Sopenharmony_ci	.rev_offs	= 0x5c,
221662306a36Sopenharmony_ci	.sysc_offs	= 0x60,
221762306a36Sopenharmony_ci	.syss_offs	= 0x64,
221862306a36Sopenharmony_ci	.sysc_flags	= (SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
221962306a36Sopenharmony_ci			   SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
222062306a36Sopenharmony_ci	.sysc_fields	= &omap3_sham_sysc_fields,
222162306a36Sopenharmony_ci};
222262306a36Sopenharmony_ci
222362306a36Sopenharmony_cistatic struct omap_hwmod_class omap3xxx_sham_class = {
222462306a36Sopenharmony_ci	.name	= "sham",
222562306a36Sopenharmony_ci	.sysc	= &omap3_sham_sysc,
222662306a36Sopenharmony_ci};
222762306a36Sopenharmony_ci
222862306a36Sopenharmony_ci
222962306a36Sopenharmony_ci
223062306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_sham_hwmod = {
223162306a36Sopenharmony_ci	.name		= "sham",
223262306a36Sopenharmony_ci	.main_clk	= "sha12_ick",
223362306a36Sopenharmony_ci	.prcm		= {
223462306a36Sopenharmony_ci		.omap2 = {
223562306a36Sopenharmony_ci			.module_offs = CORE_MOD,
223662306a36Sopenharmony_ci			.idlest_reg_id = 1,
223762306a36Sopenharmony_ci			.idlest_idle_bit = OMAP3430_ST_SHA12_SHIFT,
223862306a36Sopenharmony_ci		},
223962306a36Sopenharmony_ci	},
224062306a36Sopenharmony_ci	.class		= &omap3xxx_sham_class,
224162306a36Sopenharmony_ci};
224262306a36Sopenharmony_ci
224362306a36Sopenharmony_ci
224462306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_core__sham = {
224562306a36Sopenharmony_ci	.master		= &omap3xxx_l4_core_hwmod,
224662306a36Sopenharmony_ci	.slave		= &omap3xxx_sham_hwmod,
224762306a36Sopenharmony_ci	.clk		= "sha12_ick",
224862306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
224962306a36Sopenharmony_ci};
225062306a36Sopenharmony_ci
225162306a36Sopenharmony_ci/*
225262306a36Sopenharmony_ci * 'ssi' class
225362306a36Sopenharmony_ci * synchronous serial interface (multichannel and full-duplex serial if)
225462306a36Sopenharmony_ci */
225562306a36Sopenharmony_ci
225662306a36Sopenharmony_cistatic struct omap_hwmod_class_sysconfig omap34xx_ssi_sysc = {
225762306a36Sopenharmony_ci	.rev_offs	= 0x0000,
225862306a36Sopenharmony_ci	.sysc_offs	= 0x0010,
225962306a36Sopenharmony_ci	.syss_offs	= 0x0014,
226062306a36Sopenharmony_ci	.sysc_flags	= (SYSC_HAS_AUTOIDLE | SYSC_HAS_MIDLEMODE |
226162306a36Sopenharmony_ci			   SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
226262306a36Sopenharmony_ci	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
226362306a36Sopenharmony_ci	.sysc_fields	= &omap_hwmod_sysc_type1,
226462306a36Sopenharmony_ci};
226562306a36Sopenharmony_ci
226662306a36Sopenharmony_cistatic struct omap_hwmod_class omap3xxx_ssi_hwmod_class = {
226762306a36Sopenharmony_ci	.name	= "ssi",
226862306a36Sopenharmony_ci	.sysc	= &omap34xx_ssi_sysc,
226962306a36Sopenharmony_ci};
227062306a36Sopenharmony_ci
227162306a36Sopenharmony_cistatic struct omap_hwmod omap3xxx_ssi_hwmod = {
227262306a36Sopenharmony_ci	.name		= "ssi",
227362306a36Sopenharmony_ci	.class		= &omap3xxx_ssi_hwmod_class,
227462306a36Sopenharmony_ci	.clkdm_name	= "core_l4_clkdm",
227562306a36Sopenharmony_ci	.main_clk	= "ssi_ssr_fck",
227662306a36Sopenharmony_ci	.prcm		= {
227762306a36Sopenharmony_ci		.omap2 = {
227862306a36Sopenharmony_ci			.module_offs		= CORE_MOD,
227962306a36Sopenharmony_ci			.idlest_reg_id		= 1,
228062306a36Sopenharmony_ci			.idlest_idle_bit	= OMAP3430ES2_ST_SSI_IDLE_SHIFT,
228162306a36Sopenharmony_ci		},
228262306a36Sopenharmony_ci	},
228362306a36Sopenharmony_ci};
228462306a36Sopenharmony_ci
228562306a36Sopenharmony_ci/* L4 CORE -> SSI */
228662306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if omap3xxx_l4_core__ssi = {
228762306a36Sopenharmony_ci	.master		= &omap3xxx_l4_core_hwmod,
228862306a36Sopenharmony_ci	.slave		= &omap3xxx_ssi_hwmod,
228962306a36Sopenharmony_ci	.clk		= "ssi_ick",
229062306a36Sopenharmony_ci	.user		= OCP_USER_MPU | OCP_USER_SDMA,
229162306a36Sopenharmony_ci};
229262306a36Sopenharmony_ci
229362306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if *omap3xxx_hwmod_ocp_ifs[] __initdata = {
229462306a36Sopenharmony_ci	&omap3xxx_l3_main__l4_core,
229562306a36Sopenharmony_ci	&omap3xxx_l3_main__l4_per,
229662306a36Sopenharmony_ci	&omap3xxx_mpu__l3_main,
229762306a36Sopenharmony_ci	&omap3xxx_l3_main__l4_debugss,
229862306a36Sopenharmony_ci	&omap3xxx_l4_core__l4_wkup,
229962306a36Sopenharmony_ci	&omap3xxx_l4_core__mmc3,
230062306a36Sopenharmony_ci	&omap3_l4_core__uart1,
230162306a36Sopenharmony_ci	&omap3_l4_core__uart2,
230262306a36Sopenharmony_ci	&omap3_l4_per__uart3,
230362306a36Sopenharmony_ci	&omap3_l4_core__i2c1,
230462306a36Sopenharmony_ci	&omap3_l4_core__i2c2,
230562306a36Sopenharmony_ci	&omap3_l4_core__i2c3,
230662306a36Sopenharmony_ci	&omap3xxx_l4_wkup__l4_sec,
230762306a36Sopenharmony_ci	&omap3xxx_l4_per__timer3,
230862306a36Sopenharmony_ci	&omap3xxx_l4_per__timer4,
230962306a36Sopenharmony_ci	&omap3xxx_l4_per__timer5,
231062306a36Sopenharmony_ci	&omap3xxx_l4_per__timer6,
231162306a36Sopenharmony_ci	&omap3xxx_l4_per__timer7,
231262306a36Sopenharmony_ci	&omap3xxx_l4_per__timer8,
231362306a36Sopenharmony_ci	&omap3xxx_l4_per__timer9,
231462306a36Sopenharmony_ci	&omap3xxx_l4_core__timer10,
231562306a36Sopenharmony_ci	&omap3xxx_l4_core__timer11,
231662306a36Sopenharmony_ci	&omap3xxx_l4_wkup__wd_timer2,
231762306a36Sopenharmony_ci	&omap3xxx_l4_wkup__gpio1,
231862306a36Sopenharmony_ci	&omap3xxx_l4_per__gpio2,
231962306a36Sopenharmony_ci	&omap3xxx_l4_per__gpio3,
232062306a36Sopenharmony_ci	&omap3xxx_l4_per__gpio4,
232162306a36Sopenharmony_ci	&omap3xxx_l4_per__gpio5,
232262306a36Sopenharmony_ci	&omap3xxx_l4_per__gpio6,
232362306a36Sopenharmony_ci	&omap3xxx_l4_core__mcbsp1,
232462306a36Sopenharmony_ci	&omap3xxx_l4_per__mcbsp2,
232562306a36Sopenharmony_ci	&omap3xxx_l4_per__mcbsp3,
232662306a36Sopenharmony_ci	&omap3xxx_l4_per__mcbsp4,
232762306a36Sopenharmony_ci	&omap3xxx_l4_core__mcbsp5,
232862306a36Sopenharmony_ci	&omap3xxx_l4_per__mcbsp2_sidetone,
232962306a36Sopenharmony_ci	&omap3xxx_l4_per__mcbsp3_sidetone,
233062306a36Sopenharmony_ci	&omap34xx_l4_core__mcspi1,
233162306a36Sopenharmony_ci	&omap34xx_l4_core__mcspi2,
233262306a36Sopenharmony_ci	&omap34xx_l4_core__mcspi3,
233362306a36Sopenharmony_ci	&omap34xx_l4_core__mcspi4,
233462306a36Sopenharmony_ci	&omap3xxx_l3_main__gpmc,
233562306a36Sopenharmony_ci	NULL,
233662306a36Sopenharmony_ci};
233762306a36Sopenharmony_ci
233862306a36Sopenharmony_ci/* crypto hwmod links */
233962306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if *omap34xx_sham_hwmod_ocp_ifs[] __initdata = {
234062306a36Sopenharmony_ci	&omap3xxx_l4_core__sham,
234162306a36Sopenharmony_ci	NULL,
234262306a36Sopenharmony_ci};
234362306a36Sopenharmony_ci
234462306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if *omap36xx_sham_hwmod_ocp_ifs[] __initdata = {
234562306a36Sopenharmony_ci	&omap3xxx_l4_core__sham,
234662306a36Sopenharmony_ci	NULL
234762306a36Sopenharmony_ci};
234862306a36Sopenharmony_ci
234962306a36Sopenharmony_ci/*
235062306a36Sopenharmony_ci * Apparently the SHA/MD5 and AES accelerator IP blocks are
235162306a36Sopenharmony_ci * only present on some AM35xx chips, and no one knows which
235262306a36Sopenharmony_ci * ones.
235362306a36Sopenharmony_ci * See https://lore.kernel.org/all/20130108203853.GB1876@animalcreek.com/
235462306a36Sopenharmony_ci * So if you need these IP blocks on an AM35xx, try uncommenting
235562306a36Sopenharmony_ci * the following lines.
235662306a36Sopenharmony_ci */
235762306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if *am35xx_sham_hwmod_ocp_ifs[] __initdata = {
235862306a36Sopenharmony_ci	/* &omap3xxx_l4_core__sham, */
235962306a36Sopenharmony_ci	NULL
236062306a36Sopenharmony_ci};
236162306a36Sopenharmony_ci
236262306a36Sopenharmony_ci/* 3430ES1-only hwmod links */
236362306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if *omap3430es1_hwmod_ocp_ifs[] __initdata = {
236462306a36Sopenharmony_ci	&omap3430es1_dss__l3,
236562306a36Sopenharmony_ci	&omap3430es1_l4_core__dss,
236662306a36Sopenharmony_ci	NULL,
236762306a36Sopenharmony_ci};
236862306a36Sopenharmony_ci
236962306a36Sopenharmony_ci/* 3430ES2+-only hwmod links */
237062306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if *omap3430es2plus_hwmod_ocp_ifs[] __initdata = {
237162306a36Sopenharmony_ci	&omap3xxx_dss__l3,
237262306a36Sopenharmony_ci	&omap3xxx_l4_core__dss,
237362306a36Sopenharmony_ci	&omap3xxx_usb_host_hs__l3_main_2,
237462306a36Sopenharmony_ci	&omap3xxx_l4_core__usb_host_hs,
237562306a36Sopenharmony_ci	&omap3xxx_l4_core__usb_tll_hs,
237662306a36Sopenharmony_ci	NULL,
237762306a36Sopenharmony_ci};
237862306a36Sopenharmony_ci
237962306a36Sopenharmony_ci/* <= 3430ES3-only hwmod links */
238062306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if *omap3430_pre_es3_hwmod_ocp_ifs[] __initdata = {
238162306a36Sopenharmony_ci	&omap3xxx_l4_core__pre_es3_mmc1,
238262306a36Sopenharmony_ci	&omap3xxx_l4_core__pre_es3_mmc2,
238362306a36Sopenharmony_ci	NULL,
238462306a36Sopenharmony_ci};
238562306a36Sopenharmony_ci
238662306a36Sopenharmony_ci/* 3430ES3+-only hwmod links */
238762306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if *omap3430_es3plus_hwmod_ocp_ifs[] __initdata = {
238862306a36Sopenharmony_ci	&omap3xxx_l4_core__es3plus_mmc1,
238962306a36Sopenharmony_ci	&omap3xxx_l4_core__es3plus_mmc2,
239062306a36Sopenharmony_ci	NULL,
239162306a36Sopenharmony_ci};
239262306a36Sopenharmony_ci
239362306a36Sopenharmony_ci/* 34xx-only hwmod links (all ES revisions) */
239462306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if *omap34xx_hwmod_ocp_ifs[] __initdata = {
239562306a36Sopenharmony_ci	&omap3xxx_l3__iva,
239662306a36Sopenharmony_ci	&omap34xx_l4_core__sr1,
239762306a36Sopenharmony_ci	&omap34xx_l4_core__sr2,
239862306a36Sopenharmony_ci	&omap3xxx_l4_core__mailbox,
239962306a36Sopenharmony_ci	&omap3xxx_l4_core__hdq1w,
240062306a36Sopenharmony_ci	&omap3xxx_sad2d__l3,
240162306a36Sopenharmony_ci	&omap3xxx_l4_core__mmu_isp,
240262306a36Sopenharmony_ci	&omap3xxx_l3_main__mmu_iva,
240362306a36Sopenharmony_ci	&omap3xxx_l4_core__ssi,
240462306a36Sopenharmony_ci	NULL,
240562306a36Sopenharmony_ci};
240662306a36Sopenharmony_ci
240762306a36Sopenharmony_ci/* 36xx-only hwmod links (all ES revisions) */
240862306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if *omap36xx_hwmod_ocp_ifs[] __initdata = {
240962306a36Sopenharmony_ci	&omap3xxx_l3__iva,
241062306a36Sopenharmony_ci	&omap36xx_l4_per__uart4,
241162306a36Sopenharmony_ci	&omap3xxx_dss__l3,
241262306a36Sopenharmony_ci	&omap3xxx_l4_core__dss,
241362306a36Sopenharmony_ci	&omap36xx_l4_core__sr1,
241462306a36Sopenharmony_ci	&omap36xx_l4_core__sr2,
241562306a36Sopenharmony_ci	&omap3xxx_l4_core__mailbox,
241662306a36Sopenharmony_ci	&omap3xxx_usb_host_hs__l3_main_2,
241762306a36Sopenharmony_ci	&omap3xxx_l4_core__usb_host_hs,
241862306a36Sopenharmony_ci	&omap3xxx_l4_core__usb_tll_hs,
241962306a36Sopenharmony_ci	&omap3xxx_l4_core__es3plus_mmc1,
242062306a36Sopenharmony_ci	&omap3xxx_l4_core__es3plus_mmc2,
242162306a36Sopenharmony_ci	&omap3xxx_l4_core__hdq1w,
242262306a36Sopenharmony_ci	&omap3xxx_sad2d__l3,
242362306a36Sopenharmony_ci	&omap3xxx_l4_core__mmu_isp,
242462306a36Sopenharmony_ci	&omap3xxx_l3_main__mmu_iva,
242562306a36Sopenharmony_ci	&omap3xxx_l4_core__ssi,
242662306a36Sopenharmony_ci	NULL,
242762306a36Sopenharmony_ci};
242862306a36Sopenharmony_ci
242962306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if *am35xx_hwmod_ocp_ifs[] __initdata = {
243062306a36Sopenharmony_ci	&omap3xxx_dss__l3,
243162306a36Sopenharmony_ci	&omap3xxx_l4_core__dss,
243262306a36Sopenharmony_ci	&am35xx_l4_core__uart4,
243362306a36Sopenharmony_ci	&omap3xxx_usb_host_hs__l3_main_2,
243462306a36Sopenharmony_ci	&omap3xxx_l4_core__usb_host_hs,
243562306a36Sopenharmony_ci	&omap3xxx_l4_core__usb_tll_hs,
243662306a36Sopenharmony_ci	&omap3xxx_l4_core__es3plus_mmc1,
243762306a36Sopenharmony_ci	&omap3xxx_l4_core__es3plus_mmc2,
243862306a36Sopenharmony_ci	&omap3xxx_l4_core__hdq1w,
243962306a36Sopenharmony_ci	&am35xx_mdio__l3,
244062306a36Sopenharmony_ci	&am35xx_l4_core__mdio,
244162306a36Sopenharmony_ci	&am35xx_emac__l3,
244262306a36Sopenharmony_ci	&am35xx_l4_core__emac,
244362306a36Sopenharmony_ci	NULL,
244462306a36Sopenharmony_ci};
244562306a36Sopenharmony_ci
244662306a36Sopenharmony_cistatic struct omap_hwmod_ocp_if *omap3xxx_dss_hwmod_ocp_ifs[] __initdata = {
244762306a36Sopenharmony_ci	&omap3xxx_l4_core__dss_dispc,
244862306a36Sopenharmony_ci	&omap3xxx_l4_core__dss_dsi1,
244962306a36Sopenharmony_ci	&omap3xxx_l4_core__dss_rfbi,
245062306a36Sopenharmony_ci	&omap3xxx_l4_core__dss_venc,
245162306a36Sopenharmony_ci	NULL,
245262306a36Sopenharmony_ci};
245362306a36Sopenharmony_ci
245462306a36Sopenharmony_ci/**
245562306a36Sopenharmony_ci * omap3xxx_hwmod_is_hs_ip_block_usable - is a security IP block accessible?
245662306a36Sopenharmony_ci * @bus: struct device_node * for the top-level OMAP DT data
245762306a36Sopenharmony_ci * @dev_name: device name used in the DT file
245862306a36Sopenharmony_ci *
245962306a36Sopenharmony_ci * Determine whether a "secure" IP block @dev_name is usable by Linux.
246062306a36Sopenharmony_ci * There doesn't appear to be a 100% reliable way to determine this,
246162306a36Sopenharmony_ci * so we rely on heuristics.  If @bus is null, meaning there's no DT
246262306a36Sopenharmony_ci * data, then we only assume the IP block is accessible if the OMAP is
246362306a36Sopenharmony_ci * fused as a 'general-purpose' SoC.  If however DT data is present,
246462306a36Sopenharmony_ci * test to see if the IP block is described in the DT data and set to
246562306a36Sopenharmony_ci * 'status = "okay"'.  If so then we assume the ODM has configured the
246662306a36Sopenharmony_ci * OMAP firewalls to allow access to the IP block.
246762306a36Sopenharmony_ci *
246862306a36Sopenharmony_ci * Return: 0 if device named @dev_name is not likely to be accessible,
246962306a36Sopenharmony_ci * or 1 if it is likely to be accessible.
247062306a36Sopenharmony_ci */
247162306a36Sopenharmony_cistatic bool __init omap3xxx_hwmod_is_hs_ip_block_usable(struct device_node *bus,
247262306a36Sopenharmony_ci							const char *dev_name)
247362306a36Sopenharmony_ci{
247462306a36Sopenharmony_ci	struct device_node *node;
247562306a36Sopenharmony_ci	bool available;
247662306a36Sopenharmony_ci
247762306a36Sopenharmony_ci	if (!bus)
247862306a36Sopenharmony_ci		return omap_type() == OMAP2_DEVICE_TYPE_GP;
247962306a36Sopenharmony_ci
248062306a36Sopenharmony_ci	node = of_get_child_by_name(bus, dev_name);
248162306a36Sopenharmony_ci	available = of_device_is_available(node);
248262306a36Sopenharmony_ci	of_node_put(node);
248362306a36Sopenharmony_ci
248462306a36Sopenharmony_ci	return available;
248562306a36Sopenharmony_ci}
248662306a36Sopenharmony_ci
248762306a36Sopenharmony_ciint __init omap3xxx_hwmod_init(void)
248862306a36Sopenharmony_ci{
248962306a36Sopenharmony_ci	int r;
249062306a36Sopenharmony_ci	struct omap_hwmod_ocp_if **h = NULL, **h_sham = NULL;
249162306a36Sopenharmony_ci	struct device_node *bus;
249262306a36Sopenharmony_ci	unsigned int rev;
249362306a36Sopenharmony_ci
249462306a36Sopenharmony_ci	omap_hwmod_init();
249562306a36Sopenharmony_ci
249662306a36Sopenharmony_ci	/* Register hwmod links common to all OMAP3 */
249762306a36Sopenharmony_ci	r = omap_hwmod_register_links(omap3xxx_hwmod_ocp_ifs);
249862306a36Sopenharmony_ci	if (r < 0)
249962306a36Sopenharmony_ci		return r;
250062306a36Sopenharmony_ci
250162306a36Sopenharmony_ci	rev = omap_rev();
250262306a36Sopenharmony_ci
250362306a36Sopenharmony_ci	/*
250462306a36Sopenharmony_ci	 * Register hwmod links common to individual OMAP3 families, all
250562306a36Sopenharmony_ci	 * silicon revisions (e.g., 34xx, or AM3505/3517, or 36xx)
250662306a36Sopenharmony_ci	 * All possible revisions should be included in this conditional.
250762306a36Sopenharmony_ci	 */
250862306a36Sopenharmony_ci	if (rev == OMAP3430_REV_ES1_0 || rev == OMAP3430_REV_ES2_0 ||
250962306a36Sopenharmony_ci	    rev == OMAP3430_REV_ES2_1 || rev == OMAP3430_REV_ES3_0 ||
251062306a36Sopenharmony_ci	    rev == OMAP3430_REV_ES3_1 || rev == OMAP3430_REV_ES3_1_2) {
251162306a36Sopenharmony_ci		h = omap34xx_hwmod_ocp_ifs;
251262306a36Sopenharmony_ci		h_sham = omap34xx_sham_hwmod_ocp_ifs;
251362306a36Sopenharmony_ci	} else if (rev == AM35XX_REV_ES1_0 || rev == AM35XX_REV_ES1_1) {
251462306a36Sopenharmony_ci		h = am35xx_hwmod_ocp_ifs;
251562306a36Sopenharmony_ci		h_sham = am35xx_sham_hwmod_ocp_ifs;
251662306a36Sopenharmony_ci	} else if (rev == OMAP3630_REV_ES1_0 || rev == OMAP3630_REV_ES1_1 ||
251762306a36Sopenharmony_ci		   rev == OMAP3630_REV_ES1_2) {
251862306a36Sopenharmony_ci		h = omap36xx_hwmod_ocp_ifs;
251962306a36Sopenharmony_ci		h_sham = omap36xx_sham_hwmod_ocp_ifs;
252062306a36Sopenharmony_ci	} else {
252162306a36Sopenharmony_ci		WARN(1, "OMAP3 hwmod family init: unknown chip type\n");
252262306a36Sopenharmony_ci		return -EINVAL;
252362306a36Sopenharmony_ci	}
252462306a36Sopenharmony_ci
252562306a36Sopenharmony_ci	r = omap_hwmod_register_links(h);
252662306a36Sopenharmony_ci	if (r < 0)
252762306a36Sopenharmony_ci		return r;
252862306a36Sopenharmony_ci
252962306a36Sopenharmony_ci	/*
253062306a36Sopenharmony_ci	 * Register crypto hwmod links only if they are not disabled in DT.
253162306a36Sopenharmony_ci	 * If DT information is missing, enable them only for GP devices.
253262306a36Sopenharmony_ci	 */
253362306a36Sopenharmony_ci
253462306a36Sopenharmony_ci	bus = of_find_node_by_name(NULL, "ocp");
253562306a36Sopenharmony_ci
253662306a36Sopenharmony_ci	if (h_sham && omap3xxx_hwmod_is_hs_ip_block_usable(bus, "sham")) {
253762306a36Sopenharmony_ci		r = omap_hwmod_register_links(h_sham);
253862306a36Sopenharmony_ci		if (r < 0)
253962306a36Sopenharmony_ci			goto put_node;
254062306a36Sopenharmony_ci	}
254162306a36Sopenharmony_ci
254262306a36Sopenharmony_ci	of_node_put(bus);
254362306a36Sopenharmony_ci
254462306a36Sopenharmony_ci	/*
254562306a36Sopenharmony_ci	 * Register hwmod links specific to certain ES levels of a
254662306a36Sopenharmony_ci	 * particular family of silicon (e.g., 34xx ES1.0)
254762306a36Sopenharmony_ci	 */
254862306a36Sopenharmony_ci	h = NULL;
254962306a36Sopenharmony_ci	if (rev == OMAP3430_REV_ES1_0) {
255062306a36Sopenharmony_ci		h = omap3430es1_hwmod_ocp_ifs;
255162306a36Sopenharmony_ci	} else if (rev == OMAP3430_REV_ES2_0 || rev == OMAP3430_REV_ES2_1 ||
255262306a36Sopenharmony_ci		   rev == OMAP3430_REV_ES3_0 || rev == OMAP3430_REV_ES3_1 ||
255362306a36Sopenharmony_ci		   rev == OMAP3430_REV_ES3_1_2) {
255462306a36Sopenharmony_ci		h = omap3430es2plus_hwmod_ocp_ifs;
255562306a36Sopenharmony_ci	}
255662306a36Sopenharmony_ci
255762306a36Sopenharmony_ci	if (h) {
255862306a36Sopenharmony_ci		r = omap_hwmod_register_links(h);
255962306a36Sopenharmony_ci		if (r < 0)
256062306a36Sopenharmony_ci			return r;
256162306a36Sopenharmony_ci	}
256262306a36Sopenharmony_ci
256362306a36Sopenharmony_ci	h = NULL;
256462306a36Sopenharmony_ci	if (rev == OMAP3430_REV_ES1_0 || rev == OMAP3430_REV_ES2_0 ||
256562306a36Sopenharmony_ci	    rev == OMAP3430_REV_ES2_1) {
256662306a36Sopenharmony_ci		h = omap3430_pre_es3_hwmod_ocp_ifs;
256762306a36Sopenharmony_ci	} else if (rev == OMAP3430_REV_ES3_0 || rev == OMAP3430_REV_ES3_1 ||
256862306a36Sopenharmony_ci		   rev == OMAP3430_REV_ES3_1_2) {
256962306a36Sopenharmony_ci		h = omap3430_es3plus_hwmod_ocp_ifs;
257062306a36Sopenharmony_ci	}
257162306a36Sopenharmony_ci
257262306a36Sopenharmony_ci	if (h)
257362306a36Sopenharmony_ci		r = omap_hwmod_register_links(h);
257462306a36Sopenharmony_ci	if (r < 0)
257562306a36Sopenharmony_ci		return r;
257662306a36Sopenharmony_ci
257762306a36Sopenharmony_ci	/*
257862306a36Sopenharmony_ci	 * DSS code presumes that dss_core hwmod is handled first,
257962306a36Sopenharmony_ci	 * _before_ any other DSS related hwmods so register common
258062306a36Sopenharmony_ci	 * DSS hwmod links last to ensure that dss_core is already
258162306a36Sopenharmony_ci	 * registered.  Otherwise some change things may happen, for
258262306a36Sopenharmony_ci	 * ex. if dispc is handled before dss_core and DSS is enabled
258362306a36Sopenharmony_ci	 * in bootloader DISPC will be reset with outputs enabled
258462306a36Sopenharmony_ci	 * which sometimes leads to unrecoverable L3 error.  XXX The
258562306a36Sopenharmony_ci	 * long-term fix to this is to ensure hwmods are set up in
258662306a36Sopenharmony_ci	 * dependency order in the hwmod core code.
258762306a36Sopenharmony_ci	 */
258862306a36Sopenharmony_ci	r = omap_hwmod_register_links(omap3xxx_dss_hwmod_ocp_ifs);
258962306a36Sopenharmony_ci
259062306a36Sopenharmony_ci	return r;
259162306a36Sopenharmony_ci
259262306a36Sopenharmony_ciput_node:
259362306a36Sopenharmony_ci	of_node_put(bus);
259462306a36Sopenharmony_ci	return r;
259562306a36Sopenharmony_ci}
2596