diff options
Diffstat (limited to 'arch/arm/mach-omap2/omap_hwmod_3xxx_data.c')
| -rw-r--r-- | arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | 1442 | 
1 files changed, 1411 insertions, 31 deletions
diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c index e9d00122856..2e275cbcd65 100644 --- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c @@ -22,8 +22,11 @@  #include <plat/l4_3xxx.h>  #include <plat/i2c.h>  #include <plat/gpio.h> +#include <plat/mmc.h>  #include <plat/smartreflex.h> +#include <plat/mcbsp.h>  #include <plat/mcspi.h> +#include <plat/dmtimer.h>  #include "omap_hwmod_common_data.h" @@ -68,10 +71,21 @@ static struct omap_hwmod omap34xx_mcspi1;  static struct omap_hwmod omap34xx_mcspi2;  static struct omap_hwmod omap34xx_mcspi3;  static struct omap_hwmod omap34xx_mcspi4; +static struct omap_hwmod omap3xxx_mmc1_hwmod; +static struct omap_hwmod omap3xxx_mmc2_hwmod; +static struct omap_hwmod omap3xxx_mmc3_hwmod;  static struct omap_hwmod am35xx_usbhsotg_hwmod;  static struct omap_hwmod omap3xxx_dma_system_hwmod; +static struct omap_hwmod omap3xxx_mcbsp1_hwmod; +static struct omap_hwmod omap3xxx_mcbsp2_hwmod; +static struct omap_hwmod omap3xxx_mcbsp3_hwmod; +static struct omap_hwmod omap3xxx_mcbsp4_hwmod; +static struct omap_hwmod omap3xxx_mcbsp5_hwmod; +static struct omap_hwmod omap3xxx_mcbsp2_sidetone_hwmod; +static struct omap_hwmod omap3xxx_mcbsp3_sidetone_hwmod; +  /* L3 -> L4_CORE interface */  static struct omap_hwmod_ocp_if omap3xxx_l3_main__l4_core = {  	.master	= &omap3xxx_l3_main_hwmod, @@ -86,10 +100,26 @@ static struct omap_hwmod_ocp_if omap3xxx_l3_main__l4_per = {  	.user	= OCP_USER_MPU | OCP_USER_SDMA,  }; +/* L3 taret configuration and error log registers */ +static struct omap_hwmod_irq_info omap3xxx_l3_main_irqs[] = { +	{ .irq = INT_34XX_L3_DBG_IRQ }, +	{ .irq = INT_34XX_L3_APP_IRQ }, +}; + +static struct omap_hwmod_addr_space omap3xxx_l3_main_addrs[] = { +	{ +		.pa_start       = 0x68000000, +		.pa_end         = 0x6800ffff, +		.flags          = ADDR_TYPE_RT, +	}, +}; +  /* MPU -> L3 interface */  static struct omap_hwmod_ocp_if omap3xxx_mpu__l3_main = { -	.master = &omap3xxx_mpu_hwmod, -	.slave	= &omap3xxx_l3_main_hwmod, +	.master   = &omap3xxx_mpu_hwmod, +	.slave    = &omap3xxx_l3_main_hwmod, +	.addr     = omap3xxx_l3_main_addrs, +	.addr_cnt = ARRAY_SIZE(omap3xxx_l3_main_addrs),  	.user	= OCP_USER_MPU,  }; @@ -121,6 +151,8 @@ static struct omap_hwmod_ocp_if *omap3xxx_l3_main_masters[] = {  static struct omap_hwmod omap3xxx_l3_main_hwmod = {  	.name		= "l3_main",  	.class		= &l3_hwmod_class, +	.mpu_irqs       = omap3xxx_l3_main_irqs, +	.mpu_irqs_cnt   = ARRAY_SIZE(omap3xxx_l3_main_irqs),  	.masters	= omap3xxx_l3_main_masters,  	.masters_cnt	= ARRAY_SIZE(omap3xxx_l3_main_masters),  	.slaves		= omap3xxx_l3_main_slaves, @@ -158,6 +190,63 @@ static struct omap_hwmod_ocp_if omap3xxx_l4_core__l4_wkup = {  	.user	= OCP_USER_MPU | OCP_USER_SDMA,  }; +/* L4 CORE -> MMC1 interface */ +static struct omap_hwmod_addr_space omap3xxx_mmc1_addr_space[] = { +	{ +		.pa_start	= 0x4809c000, +		.pa_end		= 0x4809c1ff, +		.flags		= ADDR_TYPE_RT, +	}, +}; + +static struct omap_hwmod_ocp_if omap3xxx_l4_core__mmc1 = { +	.master		= &omap3xxx_l4_core_hwmod, +	.slave		= &omap3xxx_mmc1_hwmod, +	.clk		= "mmchs1_ick", +	.addr		= omap3xxx_mmc1_addr_space, +	.addr_cnt	= ARRAY_SIZE(omap3xxx_mmc1_addr_space), +	.user		= OCP_USER_MPU | OCP_USER_SDMA, +	.flags		= OMAP_FIREWALL_L4 +}; + +/* L4 CORE -> MMC2 interface */ +static struct omap_hwmod_addr_space omap3xxx_mmc2_addr_space[] = { +	{ +		.pa_start	= 0x480b4000, +		.pa_end		= 0x480b41ff, +		.flags		= ADDR_TYPE_RT, +	}, +}; + +static struct omap_hwmod_ocp_if omap3xxx_l4_core__mmc2 = { +	.master		= &omap3xxx_l4_core_hwmod, +	.slave		= &omap3xxx_mmc2_hwmod, +	.clk		= "mmchs2_ick", +	.addr		= omap3xxx_mmc2_addr_space, +	.addr_cnt	= ARRAY_SIZE(omap3xxx_mmc2_addr_space), +	.user		= OCP_USER_MPU | OCP_USER_SDMA, +	.flags		= OMAP_FIREWALL_L4 +}; + +/* L4 CORE -> MMC3 interface */ +static struct omap_hwmod_addr_space omap3xxx_mmc3_addr_space[] = { +	{ +		.pa_start	= 0x480ad000, +		.pa_end		= 0x480ad1ff, +		.flags		= ADDR_TYPE_RT, +	}, +}; + +static struct omap_hwmod_ocp_if omap3xxx_l4_core__mmc3 = { +	.master		= &omap3xxx_l4_core_hwmod, +	.slave		= &omap3xxx_mmc3_hwmod, +	.clk		= "mmchs3_ick", +	.addr		= omap3xxx_mmc3_addr_space, +	.addr_cnt	= ARRAY_SIZE(omap3xxx_mmc3_addr_space), +	.user		= OCP_USER_MPU | OCP_USER_SDMA, +	.flags		= OMAP_FIREWALL_L4 +}; +  /* L4 CORE -> UART1 interface */  static struct omap_hwmod_addr_space omap3xxx_uart1_addr_space[] = {  	{ @@ -402,26 +491,12 @@ static struct omap_hwmod_ocp_if *am35xx_usbhsotg_slaves[] = {  /* Slave interfaces on the L4_CORE interconnect */  static struct omap_hwmod_ocp_if *omap3xxx_l4_core_slaves[] = {  	&omap3xxx_l3_main__l4_core, -	&omap3_l4_core__sr1, -	&omap3_l4_core__sr2, -}; - -/* Master interfaces on the L4_CORE interconnect */ -static struct omap_hwmod_ocp_if *omap3xxx_l4_core_masters[] = { -	&omap3xxx_l4_core__l4_wkup, -	&omap3_l4_core__uart1, -	&omap3_l4_core__uart2, -	&omap3_l4_core__i2c1, -	&omap3_l4_core__i2c2, -	&omap3_l4_core__i2c3,  };  /* L4 CORE */  static struct omap_hwmod omap3xxx_l4_core_hwmod = {  	.name		= "l4_core",  	.class		= &l4_hwmod_class, -	.masters	= omap3xxx_l4_core_masters, -	.masters_cnt	= ARRAY_SIZE(omap3xxx_l4_core_masters),  	.slaves		= omap3xxx_l4_core_slaves,  	.slaves_cnt	= ARRAY_SIZE(omap3xxx_l4_core_slaves),  	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430), @@ -433,18 +508,10 @@ static struct omap_hwmod_ocp_if *omap3xxx_l4_per_slaves[] = {  	&omap3xxx_l3_main__l4_per,  }; -/* Master interfaces on the L4_PER interconnect */ -static struct omap_hwmod_ocp_if *omap3xxx_l4_per_masters[] = { -	&omap3_l4_per__uart3, -	&omap3_l4_per__uart4, -}; -  /* L4 PER */  static struct omap_hwmod omap3xxx_l4_per_hwmod = {  	.name		= "l4_per",  	.class		= &l4_hwmod_class, -	.masters	= omap3xxx_l4_per_masters, -	.masters_cnt	= ARRAY_SIZE(omap3xxx_l4_per_masters),  	.slaves		= omap3xxx_l4_per_slaves,  	.slaves_cnt	= ARRAY_SIZE(omap3xxx_l4_per_slaves),  	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430), @@ -456,16 +523,10 @@ static struct omap_hwmod_ocp_if *omap3xxx_l4_wkup_slaves[] = {  	&omap3xxx_l4_core__l4_wkup,  }; -/* Master interfaces on the L4_WKUP interconnect */ -static struct omap_hwmod_ocp_if *omap3xxx_l4_wkup_masters[] = { -}; -  /* L4 WKUP */  static struct omap_hwmod omap3xxx_l4_wkup_hwmod = {  	.name		= "l4_wkup",  	.class		= &l4_hwmod_class, -	.masters	= omap3xxx_l4_wkup_masters, -	.masters_cnt	= ARRAY_SIZE(omap3xxx_l4_wkup_masters),  	.slaves		= omap3xxx_l4_wkup_slaves,  	.slaves_cnt	= ARRAY_SIZE(omap3xxx_l4_wkup_slaves),  	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430), @@ -515,6 +576,640 @@ static struct omap_hwmod omap3xxx_iva_hwmod = {  	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430)  }; +/* timer class */ +static struct omap_hwmod_class_sysconfig omap3xxx_timer_1ms_sysc = { +	.rev_offs	= 0x0000, +	.sysc_offs	= 0x0010, +	.syss_offs	= 0x0014, +	.sysc_flags	= (SYSC_HAS_SIDLEMODE | SYSC_HAS_CLOCKACTIVITY | +				SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET | +				SYSC_HAS_EMUFREE | SYSC_HAS_AUTOIDLE), +	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART), +	.sysc_fields	= &omap_hwmod_sysc_type1, +}; + +static struct omap_hwmod_class omap3xxx_timer_1ms_hwmod_class = { +	.name = "timer", +	.sysc = &omap3xxx_timer_1ms_sysc, +	.rev = OMAP_TIMER_IP_VERSION_1, +}; + +static struct omap_hwmod_class_sysconfig omap3xxx_timer_sysc = { +	.rev_offs	= 0x0000, +	.sysc_offs	= 0x0010, +	.syss_offs	= 0x0014, +	.sysc_flags	= (SYSC_HAS_SIDLEMODE | SYSC_HAS_ENAWAKEUP | +			   SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE), +	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART), +	.sysc_fields	= &omap_hwmod_sysc_type1, +}; + +static struct omap_hwmod_class omap3xxx_timer_hwmod_class = { +	.name = "timer", +	.sysc = &omap3xxx_timer_sysc, +	.rev =  OMAP_TIMER_IP_VERSION_1, +}; + +/* timer1 */ +static struct omap_hwmod omap3xxx_timer1_hwmod; +static struct omap_hwmod_irq_info omap3xxx_timer1_mpu_irqs[] = { +	{ .irq = 37, }, +}; + +static struct omap_hwmod_addr_space omap3xxx_timer1_addrs[] = { +	{ +		.pa_start	= 0x48318000, +		.pa_end		= 0x48318000 + SZ_1K - 1, +		.flags		= ADDR_TYPE_RT +	}, +}; + +/* l4_wkup -> timer1 */ +static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__timer1 = { +	.master		= &omap3xxx_l4_wkup_hwmod, +	.slave		= &omap3xxx_timer1_hwmod, +	.clk		= "gpt1_ick", +	.addr		= omap3xxx_timer1_addrs, +	.addr_cnt	= ARRAY_SIZE(omap3xxx_timer1_addrs), +	.user		= OCP_USER_MPU | OCP_USER_SDMA, +}; + +/* timer1 slave port */ +static struct omap_hwmod_ocp_if *omap3xxx_timer1_slaves[] = { +	&omap3xxx_l4_wkup__timer1, +}; + +/* timer1 hwmod */ +static struct omap_hwmod omap3xxx_timer1_hwmod = { +	.name		= "timer1", +	.mpu_irqs	= omap3xxx_timer1_mpu_irqs, +	.mpu_irqs_cnt	= ARRAY_SIZE(omap3xxx_timer1_mpu_irqs), +	.main_clk	= "gpt1_fck", +	.prcm		= { +		.omap2 = { +			.prcm_reg_id = 1, +			.module_bit = OMAP3430_EN_GPT1_SHIFT, +			.module_offs = WKUP_MOD, +			.idlest_reg_id = 1, +			.idlest_idle_bit = OMAP3430_ST_GPT1_SHIFT, +		}, +	}, +	.slaves		= omap3xxx_timer1_slaves, +	.slaves_cnt	= ARRAY_SIZE(omap3xxx_timer1_slaves), +	.class		= &omap3xxx_timer_1ms_hwmod_class, +	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430) +}; + +/* timer2 */ +static struct omap_hwmod omap3xxx_timer2_hwmod; +static struct omap_hwmod_irq_info omap3xxx_timer2_mpu_irqs[] = { +	{ .irq = 38, }, +}; + +static struct omap_hwmod_addr_space omap3xxx_timer2_addrs[] = { +	{ +		.pa_start	= 0x49032000, +		.pa_end		= 0x49032000 + SZ_1K - 1, +		.flags		= ADDR_TYPE_RT +	}, +}; + +/* l4_per -> timer2 */ +static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer2 = { +	.master		= &omap3xxx_l4_per_hwmod, +	.slave		= &omap3xxx_timer2_hwmod, +	.clk		= "gpt2_ick", +	.addr		= omap3xxx_timer2_addrs, +	.addr_cnt	= ARRAY_SIZE(omap3xxx_timer2_addrs), +	.user		= OCP_USER_MPU | OCP_USER_SDMA, +}; + +/* timer2 slave port */ +static struct omap_hwmod_ocp_if *omap3xxx_timer2_slaves[] = { +	&omap3xxx_l4_per__timer2, +}; + +/* timer2 hwmod */ +static struct omap_hwmod omap3xxx_timer2_hwmod = { +	.name		= "timer2", +	.mpu_irqs	= omap3xxx_timer2_mpu_irqs, +	.mpu_irqs_cnt	= ARRAY_SIZE(omap3xxx_timer2_mpu_irqs), +	.main_clk	= "gpt2_fck", +	.prcm		= { +		.omap2 = { +			.prcm_reg_id = 1, +			.module_bit = OMAP3430_EN_GPT2_SHIFT, +			.module_offs = OMAP3430_PER_MOD, +			.idlest_reg_id = 1, +			.idlest_idle_bit = OMAP3430_ST_GPT2_SHIFT, +		}, +	}, +	.slaves		= omap3xxx_timer2_slaves, +	.slaves_cnt	= ARRAY_SIZE(omap3xxx_timer2_slaves), +	.class		= &omap3xxx_timer_1ms_hwmod_class, +	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430) +}; + +/* timer3 */ +static struct omap_hwmod omap3xxx_timer3_hwmod; +static struct omap_hwmod_irq_info omap3xxx_timer3_mpu_irqs[] = { +	{ .irq = 39, }, +}; + +static struct omap_hwmod_addr_space omap3xxx_timer3_addrs[] = { +	{ +		.pa_start	= 0x49034000, +		.pa_end		= 0x49034000 + SZ_1K - 1, +		.flags		= ADDR_TYPE_RT +	}, +}; + +/* l4_per -> timer3 */ +static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer3 = { +	.master		= &omap3xxx_l4_per_hwmod, +	.slave		= &omap3xxx_timer3_hwmod, +	.clk		= "gpt3_ick", +	.addr		= omap3xxx_timer3_addrs, +	.addr_cnt	= ARRAY_SIZE(omap3xxx_timer3_addrs), +	.user		= OCP_USER_MPU | OCP_USER_SDMA, +}; + +/* timer3 slave port */ +static struct omap_hwmod_ocp_if *omap3xxx_timer3_slaves[] = { +	&omap3xxx_l4_per__timer3, +}; + +/* timer3 hwmod */ +static struct omap_hwmod omap3xxx_timer3_hwmod = { +	.name		= "timer3", +	.mpu_irqs	= omap3xxx_timer3_mpu_irqs, +	.mpu_irqs_cnt	= ARRAY_SIZE(omap3xxx_timer3_mpu_irqs), +	.main_clk	= "gpt3_fck", +	.prcm		= { +		.omap2 = { +			.prcm_reg_id = 1, +			.module_bit = OMAP3430_EN_GPT3_SHIFT, +			.module_offs = OMAP3430_PER_MOD, +			.idlest_reg_id = 1, +			.idlest_idle_bit = OMAP3430_ST_GPT3_SHIFT, +		}, +	}, +	.slaves		= omap3xxx_timer3_slaves, +	.slaves_cnt	= ARRAY_SIZE(omap3xxx_timer3_slaves), +	.class		= &omap3xxx_timer_hwmod_class, +	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430) +}; + +/* timer4 */ +static struct omap_hwmod omap3xxx_timer4_hwmod; +static struct omap_hwmod_irq_info omap3xxx_timer4_mpu_irqs[] = { +	{ .irq = 40, }, +}; + +static struct omap_hwmod_addr_space omap3xxx_timer4_addrs[] = { +	{ +		.pa_start	= 0x49036000, +		.pa_end		= 0x49036000 + SZ_1K - 1, +		.flags		= ADDR_TYPE_RT +	}, +}; + +/* l4_per -> timer4 */ +static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer4 = { +	.master		= &omap3xxx_l4_per_hwmod, +	.slave		= &omap3xxx_timer4_hwmod, +	.clk		= "gpt4_ick", +	.addr		= omap3xxx_timer4_addrs, +	.addr_cnt	= ARRAY_SIZE(omap3xxx_timer4_addrs), +	.user		= OCP_USER_MPU | OCP_USER_SDMA, +}; + +/* timer4 slave port */ +static struct omap_hwmod_ocp_if *omap3xxx_timer4_slaves[] = { +	&omap3xxx_l4_per__timer4, +}; + +/* timer4 hwmod */ +static struct omap_hwmod omap3xxx_timer4_hwmod = { +	.name		= "timer4", +	.mpu_irqs	= omap3xxx_timer4_mpu_irqs, +	.mpu_irqs_cnt	= ARRAY_SIZE(omap3xxx_timer4_mpu_irqs), +	.main_clk	= "gpt4_fck", +	.prcm		= { +		.omap2 = { +			.prcm_reg_id = 1, +			.module_bit = OMAP3430_EN_GPT4_SHIFT, +			.module_offs = OMAP3430_PER_MOD, +			.idlest_reg_id = 1, +			.idlest_idle_bit = OMAP3430_ST_GPT4_SHIFT, +		}, +	}, +	.slaves		= omap3xxx_timer4_slaves, +	.slaves_cnt	= ARRAY_SIZE(omap3xxx_timer4_slaves), +	.class		= &omap3xxx_timer_hwmod_class, +	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430) +}; + +/* timer5 */ +static struct omap_hwmod omap3xxx_timer5_hwmod; +static struct omap_hwmod_irq_info omap3xxx_timer5_mpu_irqs[] = { +	{ .irq = 41, }, +}; + +static struct omap_hwmod_addr_space omap3xxx_timer5_addrs[] = { +	{ +		.pa_start	= 0x49038000, +		.pa_end		= 0x49038000 + SZ_1K - 1, +		.flags		= ADDR_TYPE_RT +	}, +}; + +/* l4_per -> timer5 */ +static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer5 = { +	.master		= &omap3xxx_l4_per_hwmod, +	.slave		= &omap3xxx_timer5_hwmod, +	.clk		= "gpt5_ick", +	.addr		= omap3xxx_timer5_addrs, +	.addr_cnt	= ARRAY_SIZE(omap3xxx_timer5_addrs), +	.user		= OCP_USER_MPU | OCP_USER_SDMA, +}; + +/* timer5 slave port */ +static struct omap_hwmod_ocp_if *omap3xxx_timer5_slaves[] = { +	&omap3xxx_l4_per__timer5, +}; + +/* timer5 hwmod */ +static struct omap_hwmod omap3xxx_timer5_hwmod = { +	.name		= "timer5", +	.mpu_irqs	= omap3xxx_timer5_mpu_irqs, +	.mpu_irqs_cnt	= ARRAY_SIZE(omap3xxx_timer5_mpu_irqs), +	.main_clk	= "gpt5_fck", +	.prcm		= { +		.omap2 = { +			.prcm_reg_id = 1, +			.module_bit = OMAP3430_EN_GPT5_SHIFT, +			.module_offs = OMAP3430_PER_MOD, +			.idlest_reg_id = 1, +			.idlest_idle_bit = OMAP3430_ST_GPT5_SHIFT, +		}, +	}, +	.slaves		= omap3xxx_timer5_slaves, +	.slaves_cnt	= ARRAY_SIZE(omap3xxx_timer5_slaves), +	.class		= &omap3xxx_timer_hwmod_class, +	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430) +}; + +/* timer6 */ +static struct omap_hwmod omap3xxx_timer6_hwmod; +static struct omap_hwmod_irq_info omap3xxx_timer6_mpu_irqs[] = { +	{ .irq = 42, }, +}; + +static struct omap_hwmod_addr_space omap3xxx_timer6_addrs[] = { +	{ +		.pa_start	= 0x4903A000, +		.pa_end		= 0x4903A000 + SZ_1K - 1, +		.flags		= ADDR_TYPE_RT +	}, +}; + +/* l4_per -> timer6 */ +static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer6 = { +	.master		= &omap3xxx_l4_per_hwmod, +	.slave		= &omap3xxx_timer6_hwmod, +	.clk		= "gpt6_ick", +	.addr		= omap3xxx_timer6_addrs, +	.addr_cnt	= ARRAY_SIZE(omap3xxx_timer6_addrs), +	.user		= OCP_USER_MPU | OCP_USER_SDMA, +}; + +/* timer6 slave port */ +static struct omap_hwmod_ocp_if *omap3xxx_timer6_slaves[] = { +	&omap3xxx_l4_per__timer6, +}; + +/* timer6 hwmod */ +static struct omap_hwmod omap3xxx_timer6_hwmod = { +	.name		= "timer6", +	.mpu_irqs	= omap3xxx_timer6_mpu_irqs, +	.mpu_irqs_cnt	= ARRAY_SIZE(omap3xxx_timer6_mpu_irqs), +	.main_clk	= "gpt6_fck", +	.prcm		= { +		.omap2 = { +			.prcm_reg_id = 1, +			.module_bit = OMAP3430_EN_GPT6_SHIFT, +			.module_offs = OMAP3430_PER_MOD, +			.idlest_reg_id = 1, +			.idlest_idle_bit = OMAP3430_ST_GPT6_SHIFT, +		}, +	}, +	.slaves		= omap3xxx_timer6_slaves, +	.slaves_cnt	= ARRAY_SIZE(omap3xxx_timer6_slaves), +	.class		= &omap3xxx_timer_hwmod_class, +	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430) +}; + +/* timer7 */ +static struct omap_hwmod omap3xxx_timer7_hwmod; +static struct omap_hwmod_irq_info omap3xxx_timer7_mpu_irqs[] = { +	{ .irq = 43, }, +}; + +static struct omap_hwmod_addr_space omap3xxx_timer7_addrs[] = { +	{ +		.pa_start	= 0x4903C000, +		.pa_end		= 0x4903C000 + SZ_1K - 1, +		.flags		= ADDR_TYPE_RT +	}, +}; + +/* l4_per -> timer7 */ +static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer7 = { +	.master		= &omap3xxx_l4_per_hwmod, +	.slave		= &omap3xxx_timer7_hwmod, +	.clk		= "gpt7_ick", +	.addr		= omap3xxx_timer7_addrs, +	.addr_cnt	= ARRAY_SIZE(omap3xxx_timer7_addrs), +	.user		= OCP_USER_MPU | OCP_USER_SDMA, +}; + +/* timer7 slave port */ +static struct omap_hwmod_ocp_if *omap3xxx_timer7_slaves[] = { +	&omap3xxx_l4_per__timer7, +}; + +/* timer7 hwmod */ +static struct omap_hwmod omap3xxx_timer7_hwmod = { +	.name		= "timer7", +	.mpu_irqs	= omap3xxx_timer7_mpu_irqs, +	.mpu_irqs_cnt	= ARRAY_SIZE(omap3xxx_timer7_mpu_irqs), +	.main_clk	= "gpt7_fck", +	.prcm		= { +		.omap2 = { +			.prcm_reg_id = 1, +			.module_bit = OMAP3430_EN_GPT7_SHIFT, +			.module_offs = OMAP3430_PER_MOD, +			.idlest_reg_id = 1, +			.idlest_idle_bit = OMAP3430_ST_GPT7_SHIFT, +		}, +	}, +	.slaves		= omap3xxx_timer7_slaves, +	.slaves_cnt	= ARRAY_SIZE(omap3xxx_timer7_slaves), +	.class		= &omap3xxx_timer_hwmod_class, +	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430) +}; + +/* timer8 */ +static struct omap_hwmod omap3xxx_timer8_hwmod; +static struct omap_hwmod_irq_info omap3xxx_timer8_mpu_irqs[] = { +	{ .irq = 44, }, +}; + +static struct omap_hwmod_addr_space omap3xxx_timer8_addrs[] = { +	{ +		.pa_start	= 0x4903E000, +		.pa_end		= 0x4903E000 + SZ_1K - 1, +		.flags		= ADDR_TYPE_RT +	}, +}; + +/* l4_per -> timer8 */ +static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer8 = { +	.master		= &omap3xxx_l4_per_hwmod, +	.slave		= &omap3xxx_timer8_hwmod, +	.clk		= "gpt8_ick", +	.addr		= omap3xxx_timer8_addrs, +	.addr_cnt	= ARRAY_SIZE(omap3xxx_timer8_addrs), +	.user		= OCP_USER_MPU | OCP_USER_SDMA, +}; + +/* timer8 slave port */ +static struct omap_hwmod_ocp_if *omap3xxx_timer8_slaves[] = { +	&omap3xxx_l4_per__timer8, +}; + +/* timer8 hwmod */ +static struct omap_hwmod omap3xxx_timer8_hwmod = { +	.name		= "timer8", +	.mpu_irqs	= omap3xxx_timer8_mpu_irqs, +	.mpu_irqs_cnt	= ARRAY_SIZE(omap3xxx_timer8_mpu_irqs), +	.main_clk	= "gpt8_fck", +	.prcm		= { +		.omap2 = { +			.prcm_reg_id = 1, +			.module_bit = OMAP3430_EN_GPT8_SHIFT, +			.module_offs = OMAP3430_PER_MOD, +			.idlest_reg_id = 1, +			.idlest_idle_bit = OMAP3430_ST_GPT8_SHIFT, +		}, +	}, +	.slaves		= omap3xxx_timer8_slaves, +	.slaves_cnt	= ARRAY_SIZE(omap3xxx_timer8_slaves), +	.class		= &omap3xxx_timer_hwmod_class, +	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430) +}; + +/* timer9 */ +static struct omap_hwmod omap3xxx_timer9_hwmod; +static struct omap_hwmod_irq_info omap3xxx_timer9_mpu_irqs[] = { +	{ .irq = 45, }, +}; + +static struct omap_hwmod_addr_space omap3xxx_timer9_addrs[] = { +	{ +		.pa_start	= 0x49040000, +		.pa_end		= 0x49040000 + SZ_1K - 1, +		.flags		= ADDR_TYPE_RT +	}, +}; + +/* l4_per -> timer9 */ +static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer9 = { +	.master		= &omap3xxx_l4_per_hwmod, +	.slave		= &omap3xxx_timer9_hwmod, +	.clk		= "gpt9_ick", +	.addr		= omap3xxx_timer9_addrs, +	.addr_cnt	= ARRAY_SIZE(omap3xxx_timer9_addrs), +	.user		= OCP_USER_MPU | OCP_USER_SDMA, +}; + +/* timer9 slave port */ +static struct omap_hwmod_ocp_if *omap3xxx_timer9_slaves[] = { +	&omap3xxx_l4_per__timer9, +}; + +/* timer9 hwmod */ +static struct omap_hwmod omap3xxx_timer9_hwmod = { +	.name		= "timer9", +	.mpu_irqs	= omap3xxx_timer9_mpu_irqs, +	.mpu_irqs_cnt	= ARRAY_SIZE(omap3xxx_timer9_mpu_irqs), +	.main_clk	= "gpt9_fck", +	.prcm		= { +		.omap2 = { +			.prcm_reg_id = 1, +			.module_bit = OMAP3430_EN_GPT9_SHIFT, +			.module_offs = OMAP3430_PER_MOD, +			.idlest_reg_id = 1, +			.idlest_idle_bit = OMAP3430_ST_GPT9_SHIFT, +		}, +	}, +	.slaves		= omap3xxx_timer9_slaves, +	.slaves_cnt	= ARRAY_SIZE(omap3xxx_timer9_slaves), +	.class		= &omap3xxx_timer_hwmod_class, +	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430) +}; + +/* timer10 */ +static struct omap_hwmod omap3xxx_timer10_hwmod; +static struct omap_hwmod_irq_info omap3xxx_timer10_mpu_irqs[] = { +	{ .irq = 46, }, +}; + +static struct omap_hwmod_addr_space omap3xxx_timer10_addrs[] = { +	{ +		.pa_start	= 0x48086000, +		.pa_end		= 0x48086000 + SZ_1K - 1, +		.flags		= ADDR_TYPE_RT +	}, +}; + +/* l4_core -> timer10 */ +static struct omap_hwmod_ocp_if omap3xxx_l4_core__timer10 = { +	.master		= &omap3xxx_l4_core_hwmod, +	.slave		= &omap3xxx_timer10_hwmod, +	.clk		= "gpt10_ick", +	.addr		= omap3xxx_timer10_addrs, +	.addr_cnt	= ARRAY_SIZE(omap3xxx_timer10_addrs), +	.user		= OCP_USER_MPU | OCP_USER_SDMA, +}; + +/* timer10 slave port */ +static struct omap_hwmod_ocp_if *omap3xxx_timer10_slaves[] = { +	&omap3xxx_l4_core__timer10, +}; + +/* timer10 hwmod */ +static struct omap_hwmod omap3xxx_timer10_hwmod = { +	.name		= "timer10", +	.mpu_irqs	= omap3xxx_timer10_mpu_irqs, +	.mpu_irqs_cnt	= ARRAY_SIZE(omap3xxx_timer10_mpu_irqs), +	.main_clk	= "gpt10_fck", +	.prcm		= { +		.omap2 = { +			.prcm_reg_id = 1, +			.module_bit = OMAP3430_EN_GPT10_SHIFT, +			.module_offs = CORE_MOD, +			.idlest_reg_id = 1, +			.idlest_idle_bit = OMAP3430_ST_GPT10_SHIFT, +		}, +	}, +	.slaves		= omap3xxx_timer10_slaves, +	.slaves_cnt	= ARRAY_SIZE(omap3xxx_timer10_slaves), +	.class		= &omap3xxx_timer_1ms_hwmod_class, +	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430) +}; + +/* timer11 */ +static struct omap_hwmod omap3xxx_timer11_hwmod; +static struct omap_hwmod_irq_info omap3xxx_timer11_mpu_irqs[] = { +	{ .irq = 47, }, +}; + +static struct omap_hwmod_addr_space omap3xxx_timer11_addrs[] = { +	{ +		.pa_start	= 0x48088000, +		.pa_end		= 0x48088000 + SZ_1K - 1, +		.flags		= ADDR_TYPE_RT +	}, +}; + +/* l4_core -> timer11 */ +static struct omap_hwmod_ocp_if omap3xxx_l4_core__timer11 = { +	.master		= &omap3xxx_l4_core_hwmod, +	.slave		= &omap3xxx_timer11_hwmod, +	.clk		= "gpt11_ick", +	.addr		= omap3xxx_timer11_addrs, +	.addr_cnt	= ARRAY_SIZE(omap3xxx_timer11_addrs), +	.user		= OCP_USER_MPU | OCP_USER_SDMA, +}; + +/* timer11 slave port */ +static struct omap_hwmod_ocp_if *omap3xxx_timer11_slaves[] = { +	&omap3xxx_l4_core__timer11, +}; + +/* timer11 hwmod */ +static struct omap_hwmod omap3xxx_timer11_hwmod = { +	.name		= "timer11", +	.mpu_irqs	= omap3xxx_timer11_mpu_irqs, +	.mpu_irqs_cnt	= ARRAY_SIZE(omap3xxx_timer11_mpu_irqs), +	.main_clk	= "gpt11_fck", +	.prcm		= { +		.omap2 = { +			.prcm_reg_id = 1, +			.module_bit = OMAP3430_EN_GPT11_SHIFT, +			.module_offs = CORE_MOD, +			.idlest_reg_id = 1, +			.idlest_idle_bit = OMAP3430_ST_GPT11_SHIFT, +		}, +	}, +	.slaves		= omap3xxx_timer11_slaves, +	.slaves_cnt	= ARRAY_SIZE(omap3xxx_timer11_slaves), +	.class		= &omap3xxx_timer_hwmod_class, +	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430) +}; + +/* timer12*/ +static struct omap_hwmod omap3xxx_timer12_hwmod; +static struct omap_hwmod_irq_info omap3xxx_timer12_mpu_irqs[] = { +	{ .irq = 95, }, +}; + +static struct omap_hwmod_addr_space omap3xxx_timer12_addrs[] = { +	{ +		.pa_start	= 0x48304000, +		.pa_end		= 0x48304000 + SZ_1K - 1, +		.flags		= ADDR_TYPE_RT +	}, +}; + +/* l4_core -> timer12 */ +static struct omap_hwmod_ocp_if omap3xxx_l4_core__timer12 = { +	.master		= &omap3xxx_l4_core_hwmod, +	.slave		= &omap3xxx_timer12_hwmod, +	.clk		= "gpt12_ick", +	.addr		= omap3xxx_timer12_addrs, +	.addr_cnt	= ARRAY_SIZE(omap3xxx_timer12_addrs), +	.user		= OCP_USER_MPU | OCP_USER_SDMA, +}; + +/* timer12 slave port */ +static struct omap_hwmod_ocp_if *omap3xxx_timer12_slaves[] = { +	&omap3xxx_l4_core__timer12, +}; + +/* timer12 hwmod */ +static struct omap_hwmod omap3xxx_timer12_hwmod = { +	.name		= "timer12", +	.mpu_irqs	= omap3xxx_timer12_mpu_irqs, +	.mpu_irqs_cnt	= ARRAY_SIZE(omap3xxx_timer12_mpu_irqs), +	.main_clk	= "gpt12_fck", +	.prcm		= { +		.omap2 = { +			.prcm_reg_id = 1, +			.module_bit = OMAP3430_EN_GPT12_SHIFT, +			.module_offs = WKUP_MOD, +			.idlest_reg_id = 1, +			.idlest_idle_bit = OMAP3430_ST_GPT12_SHIFT, +		}, +	}, +	.slaves		= omap3xxx_timer12_slaves, +	.slaves_cnt	= ARRAY_SIZE(omap3xxx_timer12_slaves), +	.class		= &omap3xxx_timer_hwmod_class, +	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430) +}; +  /* l4_wkup -> wd_timer2 */  static struct omap_hwmod_addr_space omap3xxx_wd_timer2_addrs[] = {  	{ @@ -589,6 +1284,11 @@ static struct omap_hwmod omap3xxx_wd_timer2_hwmod = {  	.slaves		= omap3xxx_wd_timer2_slaves,  	.slaves_cnt	= ARRAY_SIZE(omap3xxx_wd_timer2_slaves),  	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430), +	/* +	 * XXX: Use software supervised mode, HW supervised smartidle seems to +	 * block CORE power domain idle transitions. Maybe a HW bug in wdt2? +	 */ +	.flags		= HWMOD_SWSUP_SIDLE,  };  /* UART common */ @@ -1139,6 +1839,7 @@ static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_venc = {  			.flags	= OMAP_FIREWALL_L4,  		}  	}, +	.flags		= OCPIF_SWSUP_IDLE,  	.user		= OCP_USER_MPU | OCP_USER_SDMA,  }; @@ -1729,6 +2430,437 @@ static struct omap_hwmod omap3xxx_dma_system_hwmod = {  	.flags		= HWMOD_NO_IDLEST,  }; +/* + * 'mcbsp' class + * multi channel buffered serial port controller + */ + +static struct omap_hwmod_class_sysconfig omap3xxx_mcbsp_sysc = { +	.sysc_offs	= 0x008c, +	.sysc_flags	= (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_ENAWAKEUP | +			   SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET), +	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART), +	.sysc_fields	= &omap_hwmod_sysc_type1, +	.clockact	= 0x2, +}; + +static struct omap_hwmod_class omap3xxx_mcbsp_hwmod_class = { +	.name = "mcbsp", +	.sysc = &omap3xxx_mcbsp_sysc, +	.rev  = MCBSP_CONFIG_TYPE3, +}; + +/* mcbsp1 */ +static struct omap_hwmod_irq_info omap3xxx_mcbsp1_irqs[] = { +	{ .name = "irq", .irq = 16 }, +	{ .name = "tx", .irq = 59 }, +	{ .name = "rx", .irq = 60 }, +}; + +static struct omap_hwmod_dma_info omap3xxx_mcbsp1_sdma_chs[] = { +	{ .name = "rx", .dma_req = 32 }, +	{ .name = "tx", .dma_req = 31 }, +}; + +static struct omap_hwmod_addr_space omap3xxx_mcbsp1_addrs[] = { +	{ +		.name		= "mpu", +		.pa_start	= 0x48074000, +		.pa_end		= 0x480740ff, +		.flags		= ADDR_TYPE_RT +	}, +}; + +/* l4_core -> mcbsp1 */ +static struct omap_hwmod_ocp_if omap3xxx_l4_core__mcbsp1 = { +	.master		= &omap3xxx_l4_core_hwmod, +	.slave		= &omap3xxx_mcbsp1_hwmod, +	.clk		= "mcbsp1_ick", +	.addr		= omap3xxx_mcbsp1_addrs, +	.addr_cnt	= ARRAY_SIZE(omap3xxx_mcbsp1_addrs), +	.user		= OCP_USER_MPU | OCP_USER_SDMA, +}; + +/* mcbsp1 slave ports */ +static struct omap_hwmod_ocp_if *omap3xxx_mcbsp1_slaves[] = { +	&omap3xxx_l4_core__mcbsp1, +}; + +static struct omap_hwmod omap3xxx_mcbsp1_hwmod = { +	.name		= "mcbsp1", +	.class		= &omap3xxx_mcbsp_hwmod_class, +	.mpu_irqs	= omap3xxx_mcbsp1_irqs, +	.mpu_irqs_cnt	= ARRAY_SIZE(omap3xxx_mcbsp1_irqs), +	.sdma_reqs	= omap3xxx_mcbsp1_sdma_chs, +	.sdma_reqs_cnt	= ARRAY_SIZE(omap3xxx_mcbsp1_sdma_chs), +	.main_clk	= "mcbsp1_fck", +	.prcm		= { +		.omap2 = { +			.prcm_reg_id = 1, +			.module_bit = OMAP3430_EN_MCBSP1_SHIFT, +			.module_offs = CORE_MOD, +			.idlest_reg_id = 1, +			.idlest_idle_bit = OMAP3430_ST_MCBSP1_SHIFT, +		}, +	}, +	.slaves		= omap3xxx_mcbsp1_slaves, +	.slaves_cnt	= ARRAY_SIZE(omap3xxx_mcbsp1_slaves), +	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430), +}; + +/* mcbsp2 */ +static struct omap_hwmod_irq_info omap3xxx_mcbsp2_irqs[] = { +	{ .name = "irq", .irq = 17 }, +	{ .name = "tx", .irq = 62 }, +	{ .name = "rx", .irq = 63 }, +}; + +static struct omap_hwmod_dma_info omap3xxx_mcbsp2_sdma_chs[] = { +	{ .name = "rx", .dma_req = 34 }, +	{ .name = "tx", .dma_req = 33 }, +}; + +static struct omap_hwmod_addr_space omap3xxx_mcbsp2_addrs[] = { +	{ +		.name		= "mpu", +		.pa_start	= 0x49022000, +		.pa_end		= 0x490220ff, +		.flags		= ADDR_TYPE_RT +	}, +}; + +/* l4_per -> mcbsp2 */ +static struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp2 = { +	.master		= &omap3xxx_l4_per_hwmod, +	.slave		= &omap3xxx_mcbsp2_hwmod, +	.clk		= "mcbsp2_ick", +	.addr		= omap3xxx_mcbsp2_addrs, +	.addr_cnt	= ARRAY_SIZE(omap3xxx_mcbsp2_addrs), +	.user		= OCP_USER_MPU | OCP_USER_SDMA, +}; + +/* mcbsp2 slave ports */ +static struct omap_hwmod_ocp_if *omap3xxx_mcbsp2_slaves[] = { +	&omap3xxx_l4_per__mcbsp2, +}; + +static struct omap_mcbsp_dev_attr omap34xx_mcbsp2_dev_attr = { +	.sidetone	= "mcbsp2_sidetone", +}; + +static struct omap_hwmod omap3xxx_mcbsp2_hwmod = { +	.name		= "mcbsp2", +	.class		= &omap3xxx_mcbsp_hwmod_class, +	.mpu_irqs	= omap3xxx_mcbsp2_irqs, +	.mpu_irqs_cnt	= ARRAY_SIZE(omap3xxx_mcbsp2_irqs), +	.sdma_reqs	= omap3xxx_mcbsp2_sdma_chs, +	.sdma_reqs_cnt	= ARRAY_SIZE(omap3xxx_mcbsp2_sdma_chs), +	.main_clk	= "mcbsp2_fck", +	.prcm		= { +		.omap2 = { +			.prcm_reg_id = 1, +			.module_bit = OMAP3430_EN_MCBSP2_SHIFT, +			.module_offs = OMAP3430_PER_MOD, +			.idlest_reg_id = 1, +			.idlest_idle_bit = OMAP3430_ST_MCBSP2_SHIFT, +		}, +	}, +	.slaves		= omap3xxx_mcbsp2_slaves, +	.slaves_cnt	= ARRAY_SIZE(omap3xxx_mcbsp2_slaves), +	.dev_attr	= &omap34xx_mcbsp2_dev_attr, +	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430), +}; + +/* mcbsp3 */ +static struct omap_hwmod_irq_info omap3xxx_mcbsp3_irqs[] = { +	{ .name = "irq", .irq = 22 }, +	{ .name = "tx", .irq = 89 }, +	{ .name = "rx", .irq = 90 }, +}; + +static struct omap_hwmod_dma_info omap3xxx_mcbsp3_sdma_chs[] = { +	{ .name = "rx", .dma_req = 18 }, +	{ .name = "tx", .dma_req = 17 }, +}; + +static struct omap_hwmod_addr_space omap3xxx_mcbsp3_addrs[] = { +	{ +		.name		= "mpu", +		.pa_start	= 0x49024000, +		.pa_end		= 0x490240ff, +		.flags		= ADDR_TYPE_RT +	}, +}; + +/* l4_per -> mcbsp3 */ +static struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp3 = { +	.master		= &omap3xxx_l4_per_hwmod, +	.slave		= &omap3xxx_mcbsp3_hwmod, +	.clk		= "mcbsp3_ick", +	.addr		= omap3xxx_mcbsp3_addrs, +	.addr_cnt	= ARRAY_SIZE(omap3xxx_mcbsp3_addrs), +	.user		= OCP_USER_MPU | OCP_USER_SDMA, +}; + +/* mcbsp3 slave ports */ +static struct omap_hwmod_ocp_if *omap3xxx_mcbsp3_slaves[] = { +	&omap3xxx_l4_per__mcbsp3, +}; + +static struct omap_mcbsp_dev_attr omap34xx_mcbsp3_dev_attr = { +	.sidetone       = "mcbsp3_sidetone", +}; + +static struct omap_hwmod omap3xxx_mcbsp3_hwmod = { +	.name		= "mcbsp3", +	.class		= &omap3xxx_mcbsp_hwmod_class, +	.mpu_irqs	= omap3xxx_mcbsp3_irqs, +	.mpu_irqs_cnt	= ARRAY_SIZE(omap3xxx_mcbsp3_irqs), +	.sdma_reqs	= omap3xxx_mcbsp3_sdma_chs, +	.sdma_reqs_cnt	= ARRAY_SIZE(omap3xxx_mcbsp3_sdma_chs), +	.main_clk	= "mcbsp3_fck", +	.prcm		= { +		.omap2 = { +			.prcm_reg_id = 1, +			.module_bit = OMAP3430_EN_MCBSP3_SHIFT, +			.module_offs = OMAP3430_PER_MOD, +			.idlest_reg_id = 1, +			.idlest_idle_bit = OMAP3430_ST_MCBSP3_SHIFT, +		}, +	}, +	.slaves		= omap3xxx_mcbsp3_slaves, +	.slaves_cnt	= ARRAY_SIZE(omap3xxx_mcbsp3_slaves), +	.dev_attr	= &omap34xx_mcbsp3_dev_attr, +	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430), +}; + +/* mcbsp4 */ +static struct omap_hwmod_irq_info omap3xxx_mcbsp4_irqs[] = { +	{ .name = "irq", .irq = 23 }, +	{ .name = "tx", .irq = 54 }, +	{ .name = "rx", .irq = 55 }, +}; + +static struct omap_hwmod_dma_info omap3xxx_mcbsp4_sdma_chs[] = { +	{ .name = "rx", .dma_req = 20 }, +	{ .name = "tx", .dma_req = 19 }, +}; + +static struct omap_hwmod_addr_space omap3xxx_mcbsp4_addrs[] = { +	{ +		.name		= "mpu", +		.pa_start	= 0x49026000, +		.pa_end		= 0x490260ff, +		.flags		= ADDR_TYPE_RT +	}, +}; + +/* l4_per -> mcbsp4 */ +static struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp4 = { +	.master		= &omap3xxx_l4_per_hwmod, +	.slave		= &omap3xxx_mcbsp4_hwmod, +	.clk		= "mcbsp4_ick", +	.addr		= omap3xxx_mcbsp4_addrs, +	.addr_cnt	= ARRAY_SIZE(omap3xxx_mcbsp4_addrs), +	.user		= OCP_USER_MPU | OCP_USER_SDMA, +}; + +/* mcbsp4 slave ports */ +static struct omap_hwmod_ocp_if *omap3xxx_mcbsp4_slaves[] = { +	&omap3xxx_l4_per__mcbsp4, +}; + +static struct omap_hwmod omap3xxx_mcbsp4_hwmod = { +	.name		= "mcbsp4", +	.class		= &omap3xxx_mcbsp_hwmod_class, +	.mpu_irqs	= omap3xxx_mcbsp4_irqs, +	.mpu_irqs_cnt	= ARRAY_SIZE(omap3xxx_mcbsp4_irqs), +	.sdma_reqs	= omap3xxx_mcbsp4_sdma_chs, +	.sdma_reqs_cnt	= ARRAY_SIZE(omap3xxx_mcbsp4_sdma_chs), +	.main_clk	= "mcbsp4_fck", +	.prcm		= { +		.omap2 = { +			.prcm_reg_id = 1, +			.module_bit = OMAP3430_EN_MCBSP4_SHIFT, +			.module_offs = OMAP3430_PER_MOD, +			.idlest_reg_id = 1, +			.idlest_idle_bit = OMAP3430_ST_MCBSP4_SHIFT, +		}, +	}, +	.slaves		= omap3xxx_mcbsp4_slaves, +	.slaves_cnt	= ARRAY_SIZE(omap3xxx_mcbsp4_slaves), +	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430), +}; + +/* mcbsp5 */ +static struct omap_hwmod_irq_info omap3xxx_mcbsp5_irqs[] = { +	{ .name = "irq", .irq = 27 }, +	{ .name = "tx", .irq = 81 }, +	{ .name = "rx", .irq = 82 }, +}; + +static struct omap_hwmod_dma_info omap3xxx_mcbsp5_sdma_chs[] = { +	{ .name = "rx", .dma_req = 22 }, +	{ .name = "tx", .dma_req = 21 }, +}; + +static struct omap_hwmod_addr_space omap3xxx_mcbsp5_addrs[] = { +	{ +		.name		= "mpu", +		.pa_start	= 0x48096000, +		.pa_end		= 0x480960ff, +		.flags		= ADDR_TYPE_RT +	}, +}; + +/* l4_core -> mcbsp5 */ +static struct omap_hwmod_ocp_if omap3xxx_l4_core__mcbsp5 = { +	.master		= &omap3xxx_l4_core_hwmod, +	.slave		= &omap3xxx_mcbsp5_hwmod, +	.clk		= "mcbsp5_ick", +	.addr		= omap3xxx_mcbsp5_addrs, +	.addr_cnt	= ARRAY_SIZE(omap3xxx_mcbsp5_addrs), +	.user		= OCP_USER_MPU | OCP_USER_SDMA, +}; + +/* mcbsp5 slave ports */ +static struct omap_hwmod_ocp_if *omap3xxx_mcbsp5_slaves[] = { +	&omap3xxx_l4_core__mcbsp5, +}; + +static struct omap_hwmod omap3xxx_mcbsp5_hwmod = { +	.name		= "mcbsp5", +	.class		= &omap3xxx_mcbsp_hwmod_class, +	.mpu_irqs	= omap3xxx_mcbsp5_irqs, +	.mpu_irqs_cnt	= ARRAY_SIZE(omap3xxx_mcbsp5_irqs), +	.sdma_reqs	= omap3xxx_mcbsp5_sdma_chs, +	.sdma_reqs_cnt	= ARRAY_SIZE(omap3xxx_mcbsp5_sdma_chs), +	.main_clk	= "mcbsp5_fck", +	.prcm		= { +		.omap2 = { +			.prcm_reg_id = 1, +			.module_bit = OMAP3430_EN_MCBSP5_SHIFT, +			.module_offs = CORE_MOD, +			.idlest_reg_id = 1, +			.idlest_idle_bit = OMAP3430_ST_MCBSP5_SHIFT, +		}, +	}, +	.slaves		= omap3xxx_mcbsp5_slaves, +	.slaves_cnt	= ARRAY_SIZE(omap3xxx_mcbsp5_slaves), +	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430), +}; +/* 'mcbsp sidetone' class */ + +static struct omap_hwmod_class_sysconfig omap3xxx_mcbsp_sidetone_sysc = { +	.sysc_offs	= 0x0010, +	.sysc_flags	= SYSC_HAS_AUTOIDLE, +	.sysc_fields	= &omap_hwmod_sysc_type1, +}; + +static struct omap_hwmod_class omap3xxx_mcbsp_sidetone_hwmod_class = { +	.name = "mcbsp_sidetone", +	.sysc = &omap3xxx_mcbsp_sidetone_sysc, +}; + +/* mcbsp2_sidetone */ +static struct omap_hwmod_irq_info omap3xxx_mcbsp2_sidetone_irqs[] = { +	{ .name = "irq", .irq = 4 }, +}; + +static struct omap_hwmod_addr_space omap3xxx_mcbsp2_sidetone_addrs[] = { +	{ +		.name		= "sidetone", +		.pa_start	= 0x49028000, +		.pa_end		= 0x490280ff, +		.flags		= ADDR_TYPE_RT +	}, +}; + +/* l4_per -> mcbsp2_sidetone */ +static struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp2_sidetone = { +	.master		= &omap3xxx_l4_per_hwmod, +	.slave		= &omap3xxx_mcbsp2_sidetone_hwmod, +	.clk		= "mcbsp2_ick", +	.addr		= omap3xxx_mcbsp2_sidetone_addrs, +	.addr_cnt	= ARRAY_SIZE(omap3xxx_mcbsp2_sidetone_addrs), +	.user		= OCP_USER_MPU, +}; + +/* mcbsp2_sidetone slave ports */ +static struct omap_hwmod_ocp_if *omap3xxx_mcbsp2_sidetone_slaves[] = { +	&omap3xxx_l4_per__mcbsp2_sidetone, +}; + +static struct omap_hwmod omap3xxx_mcbsp2_sidetone_hwmod = { +	.name		= "mcbsp2_sidetone", +	.class		= &omap3xxx_mcbsp_sidetone_hwmod_class, +	.mpu_irqs	= omap3xxx_mcbsp2_sidetone_irqs, +	.mpu_irqs_cnt	= ARRAY_SIZE(omap3xxx_mcbsp2_sidetone_irqs), +	.main_clk	= "mcbsp2_fck", +	.prcm		= { +		.omap2 = { +			.prcm_reg_id = 1, +			 .module_bit = OMAP3430_EN_MCBSP2_SHIFT, +			.module_offs = OMAP3430_PER_MOD, +			.idlest_reg_id = 1, +			.idlest_idle_bit = OMAP3430_ST_MCBSP2_SHIFT, +		}, +	}, +	.slaves		= omap3xxx_mcbsp2_sidetone_slaves, +	.slaves_cnt	= ARRAY_SIZE(omap3xxx_mcbsp2_sidetone_slaves), +	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430), +}; + +/* mcbsp3_sidetone */ +static struct omap_hwmod_irq_info omap3xxx_mcbsp3_sidetone_irqs[] = { +	{ .name = "irq", .irq = 5 }, +}; + +static struct omap_hwmod_addr_space omap3xxx_mcbsp3_sidetone_addrs[] = { +	{ +		.name		= "sidetone", +		.pa_start	= 0x4902A000, +		.pa_end		= 0x4902A0ff, +		.flags		= ADDR_TYPE_RT +	}, +}; + +/* l4_per -> mcbsp3_sidetone */ +static struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp3_sidetone = { +	.master		= &omap3xxx_l4_per_hwmod, +	.slave		= &omap3xxx_mcbsp3_sidetone_hwmod, +	.clk		= "mcbsp3_ick", +	.addr		= omap3xxx_mcbsp3_sidetone_addrs, +	.addr_cnt	= ARRAY_SIZE(omap3xxx_mcbsp3_sidetone_addrs), +	.user		= OCP_USER_MPU, +}; + +/* mcbsp3_sidetone slave ports */ +static struct omap_hwmod_ocp_if *omap3xxx_mcbsp3_sidetone_slaves[] = { +	&omap3xxx_l4_per__mcbsp3_sidetone, +}; + +static struct omap_hwmod omap3xxx_mcbsp3_sidetone_hwmod = { +	.name		= "mcbsp3_sidetone", +	.class		= &omap3xxx_mcbsp_sidetone_hwmod_class, +	.mpu_irqs	= omap3xxx_mcbsp3_sidetone_irqs, +	.mpu_irqs_cnt	= ARRAY_SIZE(omap3xxx_mcbsp3_sidetone_irqs), +	.main_clk	= "mcbsp3_fck", +	.prcm		= { +		.omap2 = { +			.prcm_reg_id = 1, +			.module_bit = OMAP3430_EN_MCBSP3_SHIFT, +			.module_offs = OMAP3430_PER_MOD, +			.idlest_reg_id = 1, +			.idlest_idle_bit = OMAP3430_ST_MCBSP3_SHIFT, +		}, +	}, +	.slaves		= omap3xxx_mcbsp3_sidetone_slaves, +	.slaves_cnt	= ARRAY_SIZE(omap3xxx_mcbsp3_sidetone_slaves), +	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430), +}; + +  /* SR common */  static struct omap_hwmod_sysc_fields omap34xx_sr_sysc_fields = {  	.clkact_shift	= 20, @@ -1858,6 +2990,74 @@ static struct omap_hwmod omap36xx_sr2_hwmod = {  	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3630ES1),  }; +/* + * 'mailbox' class + * mailbox module allowing communication between the on-chip processors + * using a queued mailbox-interrupt mechanism. + */ + +static struct omap_hwmod_class_sysconfig omap3xxx_mailbox_sysc = { +	.rev_offs	= 0x000, +	.sysc_offs	= 0x010, +	.syss_offs	= 0x014, +	.sysc_flags	= (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE | +				SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE), +	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART), +	.sysc_fields	= &omap_hwmod_sysc_type1, +}; + +static struct omap_hwmod_class omap3xxx_mailbox_hwmod_class = { +	.name = "mailbox", +	.sysc = &omap3xxx_mailbox_sysc, +}; + +static struct omap_hwmod omap3xxx_mailbox_hwmod; +static struct omap_hwmod_irq_info omap3xxx_mailbox_irqs[] = { +	{ .irq = 26 }, +}; + +static struct omap_hwmod_addr_space omap3xxx_mailbox_addrs[] = { +	{ +		.pa_start	= 0x48094000, +		.pa_end		= 0x480941ff, +		.flags		= ADDR_TYPE_RT, +	}, +}; + +/* l4_core -> mailbox */ +static struct omap_hwmod_ocp_if omap3xxx_l4_core__mailbox = { +	.master		= &omap3xxx_l4_core_hwmod, +	.slave		= &omap3xxx_mailbox_hwmod, +	.addr		= omap3xxx_mailbox_addrs, +	.addr_cnt	= ARRAY_SIZE(omap3xxx_mailbox_addrs), +	.user		= OCP_USER_MPU | OCP_USER_SDMA, +}; + +/* mailbox slave ports */ +static struct omap_hwmod_ocp_if *omap3xxx_mailbox_slaves[] = { +	&omap3xxx_l4_core__mailbox, +}; + +static struct omap_hwmod omap3xxx_mailbox_hwmod = { +	.name		= "mailbox", +	.class		= &omap3xxx_mailbox_hwmod_class, +	.mpu_irqs	= omap3xxx_mailbox_irqs, +	.mpu_irqs_cnt	= ARRAY_SIZE(omap3xxx_mailbox_irqs), +	.main_clk	= "mailboxes_ick", +	.prcm		= { +		.omap2 = { +			.prcm_reg_id = 1, +			.module_bit = OMAP3430_EN_MAILBOXES_SHIFT, +			.module_offs = CORE_MOD, +			.idlest_reg_id = 1, +			.idlest_idle_bit = OMAP3430_ST_MAILBOXES_SHIFT, +		}, +	}, +	.slaves		= omap3xxx_mailbox_slaves, +	.slaves_cnt	= ARRAY_SIZE(omap3xxx_mailbox_slaves), +	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430), +}; +  /* l4 core -> mcspi1 interface */  static struct omap_hwmod_addr_space omap34xx_mcspi1_addr_space[] = {  	{ @@ -2212,13 +3412,181 @@ static struct omap_hwmod am35xx_usbhsotg_hwmod = {  	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES3_1)  }; +/* MMC/SD/SDIO common */ + +static struct omap_hwmod_class_sysconfig omap34xx_mmc_sysc = { +	.rev_offs	= 0x1fc, +	.sysc_offs	= 0x10, +	.syss_offs	= 0x14, +	.sysc_flags	= (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE | +			   SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET | +			   SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS), +	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART), +	.sysc_fields    = &omap_hwmod_sysc_type1, +}; + +static struct omap_hwmod_class omap34xx_mmc_class = { +	.name = "mmc", +	.sysc = &omap34xx_mmc_sysc, +}; + +/* MMC/SD/SDIO1 */ + +static struct omap_hwmod_irq_info omap34xx_mmc1_mpu_irqs[] = { +	{ .irq = 83, }, +}; + +static struct omap_hwmod_dma_info omap34xx_mmc1_sdma_reqs[] = { +	{ .name = "tx",	.dma_req = 61, }, +	{ .name = "rx",	.dma_req = 62, }, +}; + +static struct omap_hwmod_opt_clk omap34xx_mmc1_opt_clks[] = { +	{ .role = "dbck", .clk = "omap_32k_fck", }, +}; + +static struct omap_hwmod_ocp_if *omap3xxx_mmc1_slaves[] = { +	&omap3xxx_l4_core__mmc1, +}; + +static struct omap_mmc_dev_attr mmc1_dev_attr = { +	.flags = OMAP_HSMMC_SUPPORTS_DUAL_VOLT, +}; + +static struct omap_hwmod omap3xxx_mmc1_hwmod = { +	.name		= "mmc1", +	.mpu_irqs	= omap34xx_mmc1_mpu_irqs, +	.mpu_irqs_cnt	= ARRAY_SIZE(omap34xx_mmc1_mpu_irqs), +	.sdma_reqs	= omap34xx_mmc1_sdma_reqs, +	.sdma_reqs_cnt	= ARRAY_SIZE(omap34xx_mmc1_sdma_reqs), +	.opt_clks	= omap34xx_mmc1_opt_clks, +	.opt_clks_cnt	= ARRAY_SIZE(omap34xx_mmc1_opt_clks), +	.main_clk	= "mmchs1_fck", +	.prcm		= { +		.omap2 = { +			.module_offs = CORE_MOD, +			.prcm_reg_id = 1, +			.module_bit = OMAP3430_EN_MMC1_SHIFT, +			.idlest_reg_id = 1, +			.idlest_idle_bit = OMAP3430_ST_MMC1_SHIFT, +		}, +	}, +	.dev_attr	= &mmc1_dev_attr, +	.slaves		= omap3xxx_mmc1_slaves, +	.slaves_cnt	= ARRAY_SIZE(omap3xxx_mmc1_slaves), +	.class		= &omap34xx_mmc_class, +	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430), +}; + +/* MMC/SD/SDIO2 */ + +static struct omap_hwmod_irq_info omap34xx_mmc2_mpu_irqs[] = { +	{ .irq = INT_24XX_MMC2_IRQ, }, +}; + +static struct omap_hwmod_dma_info omap34xx_mmc2_sdma_reqs[] = { +	{ .name = "tx",	.dma_req = 47, }, +	{ .name = "rx",	.dma_req = 48, }, +}; + +static struct omap_hwmod_opt_clk omap34xx_mmc2_opt_clks[] = { +	{ .role = "dbck", .clk = "omap_32k_fck", }, +}; + +static struct omap_hwmod_ocp_if *omap3xxx_mmc2_slaves[] = { +	&omap3xxx_l4_core__mmc2, +}; + +static struct omap_hwmod omap3xxx_mmc2_hwmod = { +	.name		= "mmc2", +	.mpu_irqs	= omap34xx_mmc2_mpu_irqs, +	.mpu_irqs_cnt	= ARRAY_SIZE(omap34xx_mmc2_mpu_irqs), +	.sdma_reqs	= omap34xx_mmc2_sdma_reqs, +	.sdma_reqs_cnt	= ARRAY_SIZE(omap34xx_mmc2_sdma_reqs), +	.opt_clks	= omap34xx_mmc2_opt_clks, +	.opt_clks_cnt	= ARRAY_SIZE(omap34xx_mmc2_opt_clks), +	.main_clk	= "mmchs2_fck", +	.prcm		= { +		.omap2 = { +			.module_offs = CORE_MOD, +			.prcm_reg_id = 1, +			.module_bit = OMAP3430_EN_MMC2_SHIFT, +			.idlest_reg_id = 1, +			.idlest_idle_bit = OMAP3430_ST_MMC2_SHIFT, +		}, +	}, +	.slaves		= omap3xxx_mmc2_slaves, +	.slaves_cnt	= ARRAY_SIZE(omap3xxx_mmc2_slaves), +	.class		= &omap34xx_mmc_class, +	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430), +}; + +/* MMC/SD/SDIO3 */ + +static struct omap_hwmod_irq_info omap34xx_mmc3_mpu_irqs[] = { +	{ .irq = 94, }, +}; + +static struct omap_hwmod_dma_info omap34xx_mmc3_sdma_reqs[] = { +	{ .name = "tx",	.dma_req = 77, }, +	{ .name = "rx",	.dma_req = 78, }, +}; + +static struct omap_hwmod_opt_clk omap34xx_mmc3_opt_clks[] = { +	{ .role = "dbck", .clk = "omap_32k_fck", }, +}; + +static struct omap_hwmod_ocp_if *omap3xxx_mmc3_slaves[] = { +	&omap3xxx_l4_core__mmc3, +}; + +static struct omap_hwmod omap3xxx_mmc3_hwmod = { +	.name		= "mmc3", +	.mpu_irqs	= omap34xx_mmc3_mpu_irqs, +	.mpu_irqs_cnt	= ARRAY_SIZE(omap34xx_mmc3_mpu_irqs), +	.sdma_reqs	= omap34xx_mmc3_sdma_reqs, +	.sdma_reqs_cnt	= ARRAY_SIZE(omap34xx_mmc3_sdma_reqs), +	.opt_clks	= omap34xx_mmc3_opt_clks, +	.opt_clks_cnt	= ARRAY_SIZE(omap34xx_mmc3_opt_clks), +	.main_clk	= "mmchs3_fck", +	.prcm		= { +		.omap2 = { +			.prcm_reg_id = 1, +			.module_bit = OMAP3430_EN_MMC3_SHIFT, +			.idlest_reg_id = 1, +			.idlest_idle_bit = OMAP3430_ST_MMC3_SHIFT, +		}, +	}, +	.slaves		= omap3xxx_mmc3_slaves, +	.slaves_cnt	= ARRAY_SIZE(omap3xxx_mmc3_slaves), +	.class		= &omap34xx_mmc_class, +	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430), +}; +  static __initdata struct omap_hwmod *omap3xxx_hwmods[] = {  	&omap3xxx_l3_main_hwmod,  	&omap3xxx_l4_core_hwmod,  	&omap3xxx_l4_per_hwmod,  	&omap3xxx_l4_wkup_hwmod, +	&omap3xxx_mmc1_hwmod, +	&omap3xxx_mmc2_hwmod, +	&omap3xxx_mmc3_hwmod,  	&omap3xxx_mpu_hwmod,  	&omap3xxx_iva_hwmod, + +	&omap3xxx_timer1_hwmod, +	&omap3xxx_timer2_hwmod, +	&omap3xxx_timer3_hwmod, +	&omap3xxx_timer4_hwmod, +	&omap3xxx_timer5_hwmod, +	&omap3xxx_timer6_hwmod, +	&omap3xxx_timer7_hwmod, +	&omap3xxx_timer8_hwmod, +	&omap3xxx_timer9_hwmod, +	&omap3xxx_timer10_hwmod, +	&omap3xxx_timer11_hwmod, +	&omap3xxx_timer12_hwmod, +  	&omap3xxx_wd_timer2_hwmod,  	&omap3xxx_uart1_hwmod,  	&omap3xxx_uart2_hwmod, @@ -2253,6 +3621,18 @@ static __initdata struct omap_hwmod *omap3xxx_hwmods[] = {  	/* dma_system class*/  	&omap3xxx_dma_system_hwmod, +	/* mcbsp class */ +	&omap3xxx_mcbsp1_hwmod, +	&omap3xxx_mcbsp2_hwmod, +	&omap3xxx_mcbsp3_hwmod, +	&omap3xxx_mcbsp4_hwmod, +	&omap3xxx_mcbsp5_hwmod, +	&omap3xxx_mcbsp2_sidetone_hwmod, +	&omap3xxx_mcbsp3_sidetone_hwmod, + +	/* mailbox class */ +	&omap3xxx_mailbox_hwmod, +  	/* mcspi class */  	&omap34xx_mcspi1,  	&omap34xx_mcspi2, @@ -2270,5 +3650,5 @@ static __initdata struct omap_hwmod *omap3xxx_hwmods[] = {  int __init omap3xxx_hwmod_init(void)  { -	return omap_hwmod_init(omap3xxx_hwmods); +	return omap_hwmod_register(omap3xxx_hwmods);  }  |