diff options
Diffstat (limited to 'arch/arm/mach-omap2/omap_hwmod_54xx_data.c')
| -rw-r--r-- | arch/arm/mach-omap2/omap_hwmod_54xx_data.c | 664 | 
1 files changed, 660 insertions, 4 deletions
diff --git a/arch/arm/mach-omap2/omap_hwmod_54xx_data.c b/arch/arm/mach-omap2/omap_hwmod_54xx_data.c index cde415570e0..1103aa0e0d2 100644 --- a/arch/arm/mach-omap2/omap_hwmod_54xx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_54xx_data.c @@ -334,6 +334,235 @@ static struct omap_hwmod omap54xx_dmic_hwmod = {  };  /* + * 'dss' class + * display sub-system + */ +static struct omap_hwmod_class_sysconfig omap54xx_dss_sysc = { +	.rev_offs	= 0x0000, +	.syss_offs	= 0x0014, +	.sysc_flags	= SYSS_HAS_RESET_STATUS, +}; + +static struct omap_hwmod_class omap54xx_dss_hwmod_class = { +	.name	= "dss", +	.sysc	= &omap54xx_dss_sysc, +	.reset	= omap_dss_reset, +}; + +/* dss */ +static struct omap_hwmod_opt_clk dss_opt_clks[] = { +	{ .role = "32khz_clk", .clk = "dss_32khz_clk" }, +	{ .role = "sys_clk", .clk = "dss_sys_clk" }, +	{ .role = "hdmi_clk", .clk = "dss_48mhz_clk" }, +}; + +static struct omap_hwmod omap54xx_dss_hwmod = { +	.name		= "dss_core", +	.class		= &omap54xx_dss_hwmod_class, +	.clkdm_name	= "dss_clkdm", +	.flags		= HWMOD_CONTROL_OPT_CLKS_IN_RESET, +	.main_clk	= "dss_dss_clk", +	.prcm = { +		.omap4 = { +			.clkctrl_offs = OMAP54XX_CM_DSS_DSS_CLKCTRL_OFFSET, +			.context_offs = OMAP54XX_RM_DSS_DSS_CONTEXT_OFFSET, +			.modulemode   = MODULEMODE_SWCTRL, +		}, +	}, +	.opt_clks	= dss_opt_clks, +	.opt_clks_cnt	= ARRAY_SIZE(dss_opt_clks), +}; + +/* + * 'dispc' class + * display controller + */ + +static struct omap_hwmod_class_sysconfig omap54xx_dispc_sysc = { +	.rev_offs	= 0x0000, +	.sysc_offs	= 0x0010, +	.syss_offs	= 0x0014, +	.sysc_flags	= (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY | +			   SYSC_HAS_ENAWAKEUP | SYSC_HAS_MIDLEMODE | +			   SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET | +			   SYSS_HAS_RESET_STATUS), +	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART | +			   MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART), +	.sysc_fields	= &omap_hwmod_sysc_type1, +}; + +static struct omap_hwmod_class omap54xx_dispc_hwmod_class = { +	.name	= "dispc", +	.sysc	= &omap54xx_dispc_sysc, +}; + +/* dss_dispc */ +static struct omap_hwmod_opt_clk dss_dispc_opt_clks[] = { +	{ .role = "sys_clk", .clk = "dss_sys_clk" }, +}; + +/* dss_dispc dev_attr */ +static struct omap_dss_dispc_dev_attr dss_dispc_dev_attr = { +	.has_framedonetv_irq	= 1, +	.manager_count		= 4, +}; + +static struct omap_hwmod omap54xx_dss_dispc_hwmod = { +	.name		= "dss_dispc", +	.class		= &omap54xx_dispc_hwmod_class, +	.clkdm_name	= "dss_clkdm", +	.main_clk	= "dss_dss_clk", +	.prcm = { +		.omap4 = { +			.clkctrl_offs = OMAP54XX_CM_DSS_DSS_CLKCTRL_OFFSET, +			.flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT, +		}, +	}, +	.opt_clks	= dss_dispc_opt_clks, +	.opt_clks_cnt	= ARRAY_SIZE(dss_dispc_opt_clks), +	.dev_attr	= &dss_dispc_dev_attr, +}; + +/* + * 'dsi1' class + * display serial interface controller + */ + +static struct omap_hwmod_class_sysconfig omap54xx_dsi1_sysc = { +	.rev_offs	= 0x0000, +	.sysc_offs	= 0x0010, +	.syss_offs	= 0x0014, +	.sysc_flags	= (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY | +			   SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE | +			   SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS), +	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART), +	.sysc_fields	= &omap_hwmod_sysc_type1, +}; + +static struct omap_hwmod_class omap54xx_dsi1_hwmod_class = { +	.name	= "dsi1", +	.sysc	= &omap54xx_dsi1_sysc, +}; + +/* dss_dsi1_a */ +static struct omap_hwmod_opt_clk dss_dsi1_a_opt_clks[] = { +	{ .role = "sys_clk", .clk = "dss_sys_clk" }, +}; + +static struct omap_hwmod omap54xx_dss_dsi1_a_hwmod = { +	.name		= "dss_dsi1", +	.class		= &omap54xx_dsi1_hwmod_class, +	.clkdm_name	= "dss_clkdm", +	.main_clk	= "dss_dss_clk", +	.prcm = { +		.omap4 = { +			.clkctrl_offs = OMAP54XX_CM_DSS_DSS_CLKCTRL_OFFSET, +			.flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT, +		}, +	}, +	.opt_clks	= dss_dsi1_a_opt_clks, +	.opt_clks_cnt	= ARRAY_SIZE(dss_dsi1_a_opt_clks), +}; + +/* dss_dsi1_c */ +static struct omap_hwmod_opt_clk dss_dsi1_c_opt_clks[] = { +	{ .role = "sys_clk", .clk = "dss_sys_clk" }, +}; + +static struct omap_hwmod omap54xx_dss_dsi1_c_hwmod = { +	.name		= "dss_dsi2", +	.class		= &omap54xx_dsi1_hwmod_class, +	.clkdm_name	= "dss_clkdm", +	.main_clk	= "dss_dss_clk", +	.prcm = { +		.omap4 = { +			.clkctrl_offs = OMAP54XX_CM_DSS_DSS_CLKCTRL_OFFSET, +			.flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT, +		}, +	}, +	.opt_clks	= dss_dsi1_c_opt_clks, +	.opt_clks_cnt	= ARRAY_SIZE(dss_dsi1_c_opt_clks), +}; + +/* + * 'hdmi' class + * hdmi controller + */ + +static struct omap_hwmod_class_sysconfig omap54xx_hdmi_sysc = { +	.rev_offs	= 0x0000, +	.sysc_offs	= 0x0010, +	.sysc_flags	= (SYSC_HAS_RESET_STATUS | SYSC_HAS_SIDLEMODE | +			   SYSC_HAS_SOFTRESET), +	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART | +			   SIDLE_SMART_WKUP), +	.sysc_fields	= &omap_hwmod_sysc_type2, +}; + +static struct omap_hwmod_class omap54xx_hdmi_hwmod_class = { +	.name	= "hdmi", +	.sysc	= &omap54xx_hdmi_sysc, +}; + +static struct omap_hwmod_opt_clk dss_hdmi_opt_clks[] = { +	{ .role = "sys_clk", .clk = "dss_sys_clk" }, +}; + +static struct omap_hwmod omap54xx_dss_hdmi_hwmod = { +	.name		= "dss_hdmi", +	.class		= &omap54xx_hdmi_hwmod_class, +	.clkdm_name	= "dss_clkdm", +	.main_clk	= "dss_48mhz_clk", +	.prcm = { +		.omap4 = { +			.clkctrl_offs = OMAP54XX_CM_DSS_DSS_CLKCTRL_OFFSET, +			.flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT, +		}, +	}, +	.opt_clks	= dss_hdmi_opt_clks, +	.opt_clks_cnt	= ARRAY_SIZE(dss_hdmi_opt_clks), +}; + +/* + * 'rfbi' class + * remote frame buffer interface + */ + +static struct omap_hwmod_class_sysconfig omap54xx_rfbi_sysc = { +	.rev_offs	= 0x0000, +	.sysc_offs	= 0x0010, +	.syss_offs	= 0x0014, +	.sysc_flags	= (SYSC_HAS_AUTOIDLE | SYSC_HAS_SIDLEMODE | +			   SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS), +	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART), +	.sysc_fields	= &omap_hwmod_sysc_type1, +}; + +static struct omap_hwmod_class omap54xx_rfbi_hwmod_class = { +	.name	= "rfbi", +	.sysc	= &omap54xx_rfbi_sysc, +}; + +/* dss_rfbi */ +static struct omap_hwmod_opt_clk dss_rfbi_opt_clks[] = { +	{ .role = "ick", .clk = "l3_iclk_div" }, +}; + +static struct omap_hwmod omap54xx_dss_rfbi_hwmod = { +	.name		= "dss_rfbi", +	.class		= &omap54xx_rfbi_hwmod_class, +	.clkdm_name	= "dss_clkdm", +	.prcm = { +		.omap4 = { +			.clkctrl_offs = OMAP54XX_CM_DSS_DSS_CLKCTRL_OFFSET, +			.flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT, +		}, +	}, +	.opt_clks	= dss_rfbi_opt_clks, +	.opt_clks_cnt	= ARRAY_SIZE(dss_rfbi_opt_clks), +}; + +/*   * 'emif' class   * external memory interface no1 (wrapper)   */ @@ -352,7 +581,7 @@ static struct omap_hwmod omap54xx_emif1_hwmod = {  	.name		= "emif1",  	.class		= &omap54xx_emif_hwmod_class,  	.clkdm_name	= "emif_clkdm", -	.flags		= HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET, +	.flags		= HWMOD_INIT_NO_IDLE,  	.main_clk	= "dpll_core_h11x2_ck",  	.prcm = {  		.omap4 = { @@ -368,7 +597,7 @@ static struct omap_hwmod omap54xx_emif2_hwmod = {  	.name		= "emif2",  	.class		= &omap54xx_emif_hwmod_class,  	.clkdm_name	= "emif_clkdm", -	.flags		= HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET, +	.flags		= HWMOD_INIT_NO_IDLE,  	.main_clk	= "dpll_core_h11x2_ck",  	.prcm = {  		.omap4 = { @@ -895,7 +1124,7 @@ static struct omap_hwmod omap54xx_mcpdm_hwmod = {  	 * current exception.  	 */ -	.flags		= HWMOD_EXT_OPT_MAIN_CLK, +	.flags		= HWMOD_EXT_OPT_MAIN_CLK | HWMOD_SWSUP_SIDLE,  	.main_clk	= "pad_clks_ck",  	.prcm = {  		.omap4 = { @@ -1122,6 +1351,71 @@ static struct omap_hwmod omap54xx_mmc5_hwmod = {  };  /* + * 'mmu' class + * The memory management unit performs virtual to physical address translation + * for its requestors. + */ + +static struct omap_hwmod_class_sysconfig omap54xx_mmu_sysc = { +	.rev_offs	= 0x0000, +	.sysc_offs	= 0x0010, +	.syss_offs	= 0x0014, +	.sysc_flags	= (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY | +			   SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET | +			   SYSS_HAS_RESET_STATUS), +	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART), +	.sysc_fields	= &omap_hwmod_sysc_type1, +}; + +static struct omap_hwmod_class omap54xx_mmu_hwmod_class = { +	.name = "mmu", +	.sysc = &omap54xx_mmu_sysc, +}; + +static struct omap_hwmod_rst_info omap54xx_mmu_dsp_resets[] = { +	{ .name = "mmu_cache", .rst_shift = 1 }, +}; + +static struct omap_hwmod omap54xx_mmu_dsp_hwmod = { +	.name		= "mmu_dsp", +	.class		= &omap54xx_mmu_hwmod_class, +	.clkdm_name	= "dsp_clkdm", +	.rst_lines	= omap54xx_mmu_dsp_resets, +	.rst_lines_cnt	= ARRAY_SIZE(omap54xx_mmu_dsp_resets), +	.main_clk	= "dpll_iva_h11x2_ck", +	.prcm = { +		.omap4 = { +			.clkctrl_offs = OMAP54XX_CM_DSP_DSP_CLKCTRL_OFFSET, +			.rstctrl_offs = OMAP54XX_RM_DSP_RSTCTRL_OFFSET, +			.context_offs = OMAP54XX_RM_DSP_DSP_CONTEXT_OFFSET, +			.modulemode   = MODULEMODE_HWCTRL, +		}, +	}, +}; + +/* mmu ipu */ +static struct omap_hwmod_rst_info omap54xx_mmu_ipu_resets[] = { +	{ .name = "mmu_cache", .rst_shift = 2 }, +}; + +static struct omap_hwmod omap54xx_mmu_ipu_hwmod = { +	.name		= "mmu_ipu", +	.class		= &omap54xx_mmu_hwmod_class, +	.clkdm_name	= "ipu_clkdm", +	.rst_lines	= omap54xx_mmu_ipu_resets, +	.rst_lines_cnt	= ARRAY_SIZE(omap54xx_mmu_ipu_resets), +	.main_clk	= "dpll_core_h22x2_ck", +	.prcm = { +		.omap4 = { +			.clkctrl_offs = OMAP54XX_CM_IPU_IPU_CLKCTRL_OFFSET, +			.rstctrl_offs = OMAP54XX_RM_IPU_RSTCTRL_OFFSET, +			.context_offs = OMAP54XX_RM_IPU_IPU_CONTEXT_OFFSET, +			.modulemode   = MODULEMODE_HWCTRL, +		}, +	}, +}; + +/*   * 'mpu' class   * mpu sub-system   */ @@ -1135,7 +1429,7 @@ static struct omap_hwmod omap54xx_mpu_hwmod = {  	.name		= "mpu",  	.class		= &omap54xx_mpu_hwmod_class,  	.clkdm_name	= "mpu_clkdm", -	.flags		= HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET, +	.flags		= HWMOD_INIT_NO_IDLE,  	.main_clk	= "dpll_mpu_m2_ck",  	.prcm = {  		.omap4 = { @@ -1146,6 +1440,77 @@ static struct omap_hwmod omap54xx_mpu_hwmod = {  };  /* + * 'spinlock' class + * spinlock provides hardware assistance for synchronizing the processes + * running on multiple processors + */ + +static struct omap_hwmod_class_sysconfig omap54xx_spinlock_sysc = { +	.rev_offs	= 0x0000, +	.sysc_offs	= 0x0010, +	.syss_offs	= 0x0014, +	.sysc_flags	= (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY | +			   SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE | +			   SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS), +	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART), +	.sysc_fields	= &omap_hwmod_sysc_type1, +}; + +static struct omap_hwmod_class omap54xx_spinlock_hwmod_class = { +	.name	= "spinlock", +	.sysc	= &omap54xx_spinlock_sysc, +}; + +/* spinlock */ +static struct omap_hwmod omap54xx_spinlock_hwmod = { +	.name		= "spinlock", +	.class		= &omap54xx_spinlock_hwmod_class, +	.clkdm_name	= "l4cfg_clkdm", +	.prcm = { +		.omap4 = { +			.clkctrl_offs = OMAP54XX_CM_L4CFG_SPINLOCK_CLKCTRL_OFFSET, +			.context_offs = OMAP54XX_RM_L4CFG_SPINLOCK_CONTEXT_OFFSET, +		}, +	}, +}; + +/* + * 'ocp2scp' class + * bridge to transform ocp interface protocol to scp (serial control port) + * protocol + */ + +static struct omap_hwmod_class_sysconfig omap54xx_ocp2scp_sysc = { +	.rev_offs	= 0x0000, +	.sysc_offs	= 0x0010, +	.syss_offs	= 0x0014, +	.sysc_flags	= (SYSC_HAS_AUTOIDLE | SYSC_HAS_SIDLEMODE | +			SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS), +	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART), +	.sysc_fields	= &omap_hwmod_sysc_type1, +}; + +static struct omap_hwmod_class omap54xx_ocp2scp_hwmod_class = { +	.name	= "ocp2scp", +	.sysc	= &omap54xx_ocp2scp_sysc, +}; + +/* ocp2scp1 */ +static struct omap_hwmod omap54xx_ocp2scp1_hwmod = { +	.name		= "ocp2scp1", +	.class		= &omap54xx_ocp2scp_hwmod_class, +	.clkdm_name	= "l3init_clkdm", +	.main_clk	= "l4_root_clk_div", +	.prcm = { +		.omap4 = { +			.clkctrl_offs = OMAP54XX_CM_L3INIT_OCP2SCP1_CLKCTRL_OFFSET, +			.context_offs = OMAP54XX_RM_L3INIT_OCP2SCP1_CONTEXT_OFFSET, +			.modulemode   = MODULEMODE_HWCTRL, +		}, +	}, +}; + +/*   * 'timer' class   * general purpose timer module with accurate 1ms tick   * This class contains several variants: ['timer_1ms', 'timer'] @@ -1465,6 +1830,116 @@ static struct omap_hwmod omap54xx_uart6_hwmod = {  };  /* + * 'usb_host_hs' class + * high-speed multi-port usb host controller + */ + +static struct omap_hwmod_class_sysconfig omap54xx_usb_host_hs_sysc = { +	.rev_offs	= 0x0000, +	.sysc_offs	= 0x0010, +	.sysc_flags	= (SYSC_HAS_MIDLEMODE | SYSC_HAS_RESET_STATUS | +			   SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET | +			   SYSC_HAS_RESET_STATUS), +	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART | +			   SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO | +			   MSTANDBY_SMART | MSTANDBY_SMART_WKUP), +	.sysc_fields	= &omap_hwmod_sysc_type2, +}; + +static struct omap_hwmod_class omap54xx_usb_host_hs_hwmod_class = { +	.name	= "usb_host_hs", +	.sysc	= &omap54xx_usb_host_hs_sysc, +}; + +static struct omap_hwmod omap54xx_usb_host_hs_hwmod = { +	.name		= "usb_host_hs", +	.class		= &omap54xx_usb_host_hs_hwmod_class, +	.clkdm_name	= "l3init_clkdm", +	/* +	 * Errata: USBHOST Configured In Smart-Idle Can Lead To a Deadlock +	 * id: i660 +	 * +	 * Description: +	 * In the following configuration : +	 * - USBHOST module is set to smart-idle mode +	 * - PRCM asserts idle_req to the USBHOST module ( This typically +	 *   happens when the system is going to a low power mode : all ports +	 *   have been suspended, the master part of the USBHOST module has +	 *   entered the standby state, and SW has cut the functional clocks) +	 * - an USBHOST interrupt occurs before the module is able to answer +	 *   idle_ack, typically a remote wakeup IRQ. +	 * Then the USB HOST module will enter a deadlock situation where it +	 * is no more accessible nor functional. +	 * +	 * Workaround: +	 * Don't use smart idle; use only force idle, hence HWMOD_SWSUP_SIDLE +	 */ + +	/* +	 * Errata: USB host EHCI may stall when entering smart-standby mode +	 * Id: i571 +	 * +	 * Description: +	 * When the USBHOST module is set to smart-standby mode, and when it is +	 * ready to enter the standby state (i.e. all ports are suspended and +	 * all attached devices are in suspend mode), then it can wrongly assert +	 * the Mstandby signal too early while there are still some residual OCP +	 * transactions ongoing. If this condition occurs, the internal state +	 * machine may go to an undefined state and the USB link may be stuck +	 * upon the next resume. +	 * +	 * Workaround: +	 * Don't use smart standby; use only force standby, +	 * hence HWMOD_SWSUP_MSTANDBY +	 */ + +	.flags		= HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY, +	.main_clk	= "l3init_60m_fclk", +	.prcm = { +		.omap4 = { +			.clkctrl_offs = OMAP54XX_CM_L3INIT_USB_HOST_HS_CLKCTRL_OFFSET, +			.context_offs = OMAP54XX_RM_L3INIT_USB_HOST_HS_CONTEXT_OFFSET, +			.modulemode   = MODULEMODE_SWCTRL, +		}, +	}, +}; + +/* + * 'usb_tll_hs' class + * usb_tll_hs module is the adapter on the usb_host_hs ports + */ + +static struct omap_hwmod_class_sysconfig omap54xx_usb_tll_hs_sysc = { +	.rev_offs	= 0x0000, +	.sysc_offs	= 0x0010, +	.syss_offs	= 0x0014, +	.sysc_flags	= (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY | +			   SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE | +			   SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS), +	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART), +	.sysc_fields	= &omap_hwmod_sysc_type1, +}; + +static struct omap_hwmod_class omap54xx_usb_tll_hs_hwmod_class = { +	.name	= "usb_tll_hs", +	.sysc	= &omap54xx_usb_tll_hs_sysc, +}; + +static struct omap_hwmod omap54xx_usb_tll_hs_hwmod = { +	.name		= "usb_tll_hs", +	.class		= &omap54xx_usb_tll_hs_hwmod_class, +	.clkdm_name	= "l3init_clkdm", +	.main_clk	= "l4_root_clk_div", +	.prcm = { +		.omap4 = { +			.clkctrl_offs = OMAP54XX_CM_L3INIT_USB_TLL_HS_CLKCTRL_OFFSET, +			.context_offs = OMAP54XX_RM_L3INIT_USB_TLL_HS_CONTEXT_OFFSET, +			.modulemode   = MODULEMODE_HWCTRL, +		}, +	}, +}; + +/*   * 'usb_otg_ss' class   * 2.0 super speed (usb_otg_ss) controller   */ @@ -1545,6 +2020,77 @@ static struct omap_hwmod omap54xx_wd_timer2_hwmod = {  	},  }; +/* + * 'ocp2scp' class + * bridge to transform ocp interface protocol to scp (serial control port) + * protocol + */ +/* ocp2scp3 */ +static struct omap_hwmod omap54xx_ocp2scp3_hwmod; +/* l4_cfg -> ocp2scp3 */ +static struct omap_hwmod_ocp_if omap54xx_l4_cfg__ocp2scp3 = { +	.master		= &omap54xx_l4_cfg_hwmod, +	.slave		= &omap54xx_ocp2scp3_hwmod, +	.clk		= "l4_root_clk_div", +	.user		= OCP_USER_MPU | OCP_USER_SDMA, +}; + +static struct omap_hwmod omap54xx_ocp2scp3_hwmod = { +	.name		= "ocp2scp3", +	.class		= &omap54xx_ocp2scp_hwmod_class, +	.clkdm_name	= "l3init_clkdm", +	.prcm = { +		.omap4 = { +			.clkctrl_offs = OMAP54XX_CM_L3INIT_OCP2SCP3_CLKCTRL_OFFSET, +			.context_offs = OMAP54XX_RM_L3INIT_OCP2SCP3_CONTEXT_OFFSET, +			.modulemode   = MODULEMODE_HWCTRL, +		}, +	}, +}; + +/* + * 'sata' class + * sata:  serial ata interface  gen2 compliant   ( 1 rx/ 1 tx) + */ + +static struct omap_hwmod_class_sysconfig omap54xx_sata_sysc = { +	.sysc_offs	= 0x0000, +	.sysc_flags	= (SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE), +	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART | +			   SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO | +			   MSTANDBY_SMART | MSTANDBY_SMART_WKUP), +	.sysc_fields	= &omap_hwmod_sysc_type2, +}; + +static struct omap_hwmod_class omap54xx_sata_hwmod_class = { +	.name	= "sata", +	.sysc	= &omap54xx_sata_sysc, +}; + +/* sata */ +static struct omap_hwmod omap54xx_sata_hwmod = { +	.name		= "sata", +	.class		= &omap54xx_sata_hwmod_class, +	.clkdm_name	= "l3init_clkdm", +	.flags		= HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY, +	.main_clk	= "func_48m_fclk", +	.mpu_rt_idx	= 1, +	.prcm = { +		.omap4 = { +			.clkctrl_offs = OMAP54XX_CM_L3INIT_SATA_CLKCTRL_OFFSET, +			.context_offs = OMAP54XX_RM_L3INIT_SATA_CONTEXT_OFFSET, +			.modulemode   = MODULEMODE_SWCTRL, +		}, +	}, +}; + +/* l4_cfg -> sata */ +static struct omap_hwmod_ocp_if omap54xx_l4_cfg__sata = { +	.master		= &omap54xx_l4_cfg_hwmod, +	.slave		= &omap54xx_sata_hwmod, +	.clk		= "l3_iclk_div", +	.user		= OCP_USER_MPU | OCP_USER_SDMA, +};  /*   * Interfaces @@ -1582,6 +2128,14 @@ static struct omap_hwmod_ocp_if omap54xx_l4_cfg__l3_main_1 = {  	.user		= OCP_USER_MPU | OCP_USER_SDMA,  }; +/* l4_cfg -> mmu_dsp */ +static struct omap_hwmod_ocp_if omap54xx_l4_cfg__mmu_dsp = { +	.master		= &omap54xx_l4_cfg_hwmod, +	.slave		= &omap54xx_mmu_dsp_hwmod, +	.clk		= "l4_root_clk_div", +	.user		= OCP_USER_MPU | OCP_USER_SDMA, +}; +  /* mpu -> l3_main_1 */  static struct omap_hwmod_ocp_if omap54xx_mpu__l3_main_1 = {  	.master		= &omap54xx_mpu_hwmod, @@ -1606,6 +2160,14 @@ static struct omap_hwmod_ocp_if omap54xx_l4_cfg__l3_main_2 = {  	.user		= OCP_USER_MPU | OCP_USER_SDMA,  }; +/* l3_main_2 -> mmu_ipu */ +static struct omap_hwmod_ocp_if omap54xx_l3_main_2__mmu_ipu = { +	.master		= &omap54xx_l3_main_2_hwmod, +	.slave		= &omap54xx_mmu_ipu_hwmod, +	.clk		= "l3_iclk_div", +	.user		= OCP_USER_MPU | OCP_USER_SDMA, +}; +  /* l3_main_1 -> l3_main_3 */  static struct omap_hwmod_ocp_if omap54xx_l3_main_1__l3_main_3 = {  	.master		= &omap54xx_l3_main_1_hwmod, @@ -1712,6 +2274,54 @@ static struct omap_hwmod_ocp_if omap54xx_l4_abe__dmic = {  	.user		= OCP_USER_MPU,  }; +/* l3_main_2 -> dss */ +static struct omap_hwmod_ocp_if omap54xx_l3_main_2__dss = { +	.master		= &omap54xx_l3_main_2_hwmod, +	.slave		= &omap54xx_dss_hwmod, +	.clk		= "l3_iclk_div", +	.user		= OCP_USER_MPU | OCP_USER_SDMA, +}; + +/* l3_main_2 -> dss_dispc */ +static struct omap_hwmod_ocp_if omap54xx_l3_main_2__dss_dispc = { +	.master		= &omap54xx_l3_main_2_hwmod, +	.slave		= &omap54xx_dss_dispc_hwmod, +	.clk		= "l3_iclk_div", +	.user		= OCP_USER_MPU | OCP_USER_SDMA, +}; + +/* l3_main_2 -> dss_dsi1_a */ +static struct omap_hwmod_ocp_if omap54xx_l3_main_2__dss_dsi1_a = { +	.master		= &omap54xx_l3_main_2_hwmod, +	.slave		= &omap54xx_dss_dsi1_a_hwmod, +	.clk		= "l3_iclk_div", +	.user		= OCP_USER_MPU | OCP_USER_SDMA, +}; + +/* l3_main_2 -> dss_dsi1_c */ +static struct omap_hwmod_ocp_if omap54xx_l3_main_2__dss_dsi1_c = { +	.master		= &omap54xx_l3_main_2_hwmod, +	.slave		= &omap54xx_dss_dsi1_c_hwmod, +	.clk		= "l3_iclk_div", +	.user		= OCP_USER_MPU | OCP_USER_SDMA, +}; + +/* l3_main_2 -> dss_hdmi */ +static struct omap_hwmod_ocp_if omap54xx_l3_main_2__dss_hdmi = { +	.master		= &omap54xx_l3_main_2_hwmod, +	.slave		= &omap54xx_dss_hdmi_hwmod, +	.clk		= "l3_iclk_div", +	.user		= OCP_USER_MPU | OCP_USER_SDMA, +}; + +/* l3_main_2 -> dss_rfbi */ +static struct omap_hwmod_ocp_if omap54xx_l3_main_2__dss_rfbi = { +	.master		= &omap54xx_l3_main_2_hwmod, +	.slave		= &omap54xx_dss_rfbi_hwmod, +	.clk		= "l3_iclk_div", +	.user		= OCP_USER_MPU | OCP_USER_SDMA, +}; +  /* mpu -> emif1 */  static struct omap_hwmod_ocp_if omap54xx_mpu__emif1 = {  	.master		= &omap54xx_mpu_hwmod, @@ -1960,6 +2570,22 @@ static struct omap_hwmod_ocp_if omap54xx_l4_cfg__mpu = {  	.user		= OCP_USER_MPU | OCP_USER_SDMA,  }; +/* l4_cfg -> spinlock */ +static struct omap_hwmod_ocp_if omap54xx_l4_cfg__spinlock = { +	.master		= &omap54xx_l4_cfg_hwmod, +	.slave		= &omap54xx_spinlock_hwmod, +	.clk		= "l4_root_clk_div", +	.user		= OCP_USER_MPU | OCP_USER_SDMA, +}; + +/* l4_cfg -> ocp2scp1 */ +static struct omap_hwmod_ocp_if omap54xx_l4_cfg__ocp2scp1 = { +	.master		= &omap54xx_l4_cfg_hwmod, +	.slave		= &omap54xx_ocp2scp1_hwmod, +	.clk		= "l4_root_clk_div", +	.user		= OCP_USER_MPU | OCP_USER_SDMA, +}; +  /* l4_wkup -> timer1 */  static struct omap_hwmod_ocp_if omap54xx_l4_wkup__timer1 = {  	.master		= &omap54xx_l4_wkup_hwmod, @@ -2096,6 +2722,22 @@ static struct omap_hwmod_ocp_if omap54xx_l4_per__uart6 = {  	.user		= OCP_USER_MPU | OCP_USER_SDMA,  }; +/* l4_cfg -> usb_host_hs */ +static struct omap_hwmod_ocp_if omap54xx_l4_cfg__usb_host_hs = { +	.master		= &omap54xx_l4_cfg_hwmod, +	.slave		= &omap54xx_usb_host_hs_hwmod, +	.clk		= "l3_iclk_div", +	.user		= OCP_USER_MPU | OCP_USER_SDMA, +}; + +/* l4_cfg -> usb_tll_hs */ +static struct omap_hwmod_ocp_if omap54xx_l4_cfg__usb_tll_hs = { +	.master		= &omap54xx_l4_cfg_hwmod, +	.slave		= &omap54xx_usb_tll_hs_hwmod, +	.clk		= "l4_root_clk_div", +	.user		= OCP_USER_MPU | OCP_USER_SDMA, +}; +  /* l4_cfg -> usb_otg_ss */  static struct omap_hwmod_ocp_if omap54xx_l4_cfg__usb_otg_ss = {  	.master		= &omap54xx_l4_cfg_hwmod, @@ -2132,6 +2774,13 @@ static struct omap_hwmod_ocp_if *omap54xx_hwmod_ocp_ifs[] __initdata = {  	&omap54xx_l4_wkup__counter_32k,  	&omap54xx_l4_cfg__dma_system,  	&omap54xx_l4_abe__dmic, +	&omap54xx_l4_cfg__mmu_dsp, +	&omap54xx_l3_main_2__dss, +	&omap54xx_l3_main_2__dss_dispc, +	&omap54xx_l3_main_2__dss_dsi1_a, +	&omap54xx_l3_main_2__dss_dsi1_c, +	&omap54xx_l3_main_2__dss_hdmi, +	&omap54xx_l3_main_2__dss_rfbi,  	&omap54xx_mpu__emif1,  	&omap54xx_mpu__emif2,  	&omap54xx_l4_wkup__gpio1, @@ -2147,6 +2796,7 @@ static struct omap_hwmod_ocp_if *omap54xx_hwmod_ocp_ifs[] __initdata = {  	&omap54xx_l4_per__i2c3,  	&omap54xx_l4_per__i2c4,  	&omap54xx_l4_per__i2c5, +	&omap54xx_l3_main_2__mmu_ipu,  	&omap54xx_l4_wkup__kbd,  	&omap54xx_l4_cfg__mailbox,  	&omap54xx_l4_abe__mcbsp1, @@ -2163,6 +2813,8 @@ static struct omap_hwmod_ocp_if *omap54xx_hwmod_ocp_ifs[] __initdata = {  	&omap54xx_l4_per__mmc4,  	&omap54xx_l4_per__mmc5,  	&omap54xx_l4_cfg__mpu, +	&omap54xx_l4_cfg__spinlock, +	&omap54xx_l4_cfg__ocp2scp1,  	&omap54xx_l4_wkup__timer1,  	&omap54xx_l4_per__timer2,  	&omap54xx_l4_per__timer3, @@ -2180,8 +2832,12 @@ static struct omap_hwmod_ocp_if *omap54xx_hwmod_ocp_ifs[] __initdata = {  	&omap54xx_l4_per__uart4,  	&omap54xx_l4_per__uart5,  	&omap54xx_l4_per__uart6, +	&omap54xx_l4_cfg__usb_host_hs, +	&omap54xx_l4_cfg__usb_tll_hs,  	&omap54xx_l4_cfg__usb_otg_ss,  	&omap54xx_l4_wkup__wd_timer2, +	&omap54xx_l4_cfg__ocp2scp3, +	&omap54xx_l4_cfg__sata,  	NULL,  };  | 
