diff options
Diffstat (limited to 'extras/recipes-kernel/linux/linux-omap-2.6.39/mfd/0004-arm-omap-usb-ehci-and-ohci-hwmod-structures-for-omap.patch')
-rw-r--r-- | extras/recipes-kernel/linux/linux-omap-2.6.39/mfd/0004-arm-omap-usb-ehci-and-ohci-hwmod-structures-for-omap.patch | 406 |
1 files changed, 406 insertions, 0 deletions
diff --git a/extras/recipes-kernel/linux/linux-omap-2.6.39/mfd/0004-arm-omap-usb-ehci-and-ohci-hwmod-structures-for-omap.patch b/extras/recipes-kernel/linux/linux-omap-2.6.39/mfd/0004-arm-omap-usb-ehci-and-ohci-hwmod-structures-for-omap.patch new file mode 100644 index 00000000..3d4d8a2d --- /dev/null +++ b/extras/recipes-kernel/linux/linux-omap-2.6.39/mfd/0004-arm-omap-usb-ehci-and-ohci-hwmod-structures-for-omap.patch @@ -0,0 +1,406 @@ +From 339b167f6f76707a2d6ae3a7c0b921b8278564af Mon Sep 17 00:00:00 2001 +From: Keshava Munegowda <Keshava_mgowda@ti.com> +Date: Wed, 1 Jun 2011 11:02:49 -0700 +Subject: [PATCH 04/13] arm: omap: usb: ehci and ohci hwmod structures for omap3 and omap4 + +Following 2 hwmod strcuture are added: +UHH hwmod of usbhs with uhh base address and +EHCI , OHCI irq and base addresses. +TLL hwmod of usbhs with the TLL base address and irq. + +Signed-off-by: Keshava Munegowda <keshava_mgowda@ti.com> +--- + arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | 184 ++++++++++++++++++++++++++++ + arch/arm/mach-omap2/omap_hwmod_44xx_data.c | 153 +++++++++++++++++++++++ + 2 files changed, 337 insertions(+), 0 deletions(-) + +diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c +index 909a84d..fe9a176 100644 +--- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c ++++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c +@@ -84,6 +84,8 @@ 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; ++static struct omap_hwmod omap34xx_usb_host_hs_hwmod; ++static struct omap_hwmod omap34xx_usb_tll_hs_hwmod; + + /* L3 -> L4_CORE interface */ + static struct omap_hwmod_ocp_if omap3xxx_l3_main__l4_core = { +@@ -3574,6 +3576,185 @@ static struct omap_hwmod omap3xxx_mmc3_hwmod = { + .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430), + }; + ++/* ++ * 'usb_host_hs' class ++ * high-speed multi-port usb host controller ++ */ ++static struct omap_hwmod_ocp_if omap34xx_usb_host_hs__l3_main_2 = { ++ .master = &omap34xx_usb_host_hs_hwmod, ++ .slave = &omap3xxx_l3_main_hwmod, ++ .clk = "core_l3_ick", ++ .user = OCP_USER_MPU, ++}; ++ ++static struct omap_hwmod_class_sysconfig omap34xx_usb_host_hs_sysc = { ++ .rev_offs = 0x0000, ++ .sysc_offs = 0x0010, ++ .syss_offs = 0x0014, ++ .sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE), ++ .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART | ++ MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART), ++ .sysc_fields = &omap_hwmod_sysc_type1, ++}; ++ ++static struct omap_hwmod_class omap34xx_usb_host_hs_hwmod_class = { ++ .name = "usbhs_uhh", ++ .sysc = &omap34xx_usb_host_hs_sysc, ++}; ++ ++static struct omap_hwmod_ocp_if *omap34xx_usb_host_hs_masters[] = { ++ &omap34xx_usb_host_hs__l3_main_2, ++}; ++ ++static struct omap_hwmod_irq_info omap34xx_usb_host_hs_irqs[] = { ++ { .name = "ohci-irq", .irq = 76 }, ++ { .name = "ehci-irq", .irq = 77 }, ++}; ++ ++static struct omap_hwmod_addr_space omap34xx_usb_host_hs_addrs[] = { ++ { ++ .name = "uhh", ++ .pa_start = 0x48064000, ++ .pa_end = 0x480643ff, ++ .flags = ADDR_TYPE_RT ++ }, ++ { ++ .name = "ohci", ++ .pa_start = 0x48064400, ++ .pa_end = 0x480647FF, ++ .flags = ADDR_MAP_ON_INIT ++ }, ++ { ++ .name = "ehci", ++ .pa_start = 0x48064800, ++ .pa_end = 0x48064CFF, ++ .flags = ADDR_MAP_ON_INIT ++ } ++}; ++ ++static struct omap_hwmod_ocp_if omap34xx_l4_cfg__usb_host_hs = { ++ .master = &omap3xxx_l4_core_hwmod, ++ .slave = &omap34xx_usb_host_hs_hwmod, ++ .clk = "l4_ick", ++ .addr = omap34xx_usb_host_hs_addrs, ++ .addr_cnt = ARRAY_SIZE(omap34xx_usb_host_hs_addrs), ++ .user = OCP_USER_MPU | OCP_USER_SDMA, ++}; ++ ++static struct omap_hwmod_ocp_if omap34xx_f128m_cfg__usb_host_hs = { ++ .clk = "usbhost_120m_fck", ++ .user = OCP_USER_MPU, ++ .flags = OCPIF_SWSUP_IDLE, ++}; ++ ++static struct omap_hwmod_ocp_if omap34xx_f48m_cfg__usb_host_hs = { ++ .clk = "usbhost_48m_fck", ++ .user = OCP_USER_MPU, ++ .flags = OCPIF_SWSUP_IDLE, ++}; ++ ++static struct omap_hwmod_ocp_if *omap34xx_usb_host_hs_slaves[] = { ++ &omap34xx_l4_cfg__usb_host_hs, ++ &omap34xx_f128m_cfg__usb_host_hs, ++ &omap34xx_f48m_cfg__usb_host_hs, ++}; ++ ++static struct omap_hwmod omap34xx_usb_host_hs_hwmod = { ++ .name = "usbhs_uhh", ++ .class = &omap34xx_usb_host_hs_hwmod_class, ++ .mpu_irqs = omap34xx_usb_host_hs_irqs, ++ .mpu_irqs_cnt = ARRAY_SIZE(omap34xx_usb_host_hs_irqs), ++ .main_clk = "usbhost_ick", ++ .prcm = { ++ .omap2 = { ++ .module_offs = OMAP3430ES2_USBHOST_MOD, ++ .prcm_reg_id = 1, ++ .module_bit = 0, ++ .idlest_reg_id = 1, ++ .idlest_idle_bit = 1, ++ .idlest_stdby_bit = 0, ++ }, ++ }, ++ .slaves = omap34xx_usb_host_hs_slaves, ++ .slaves_cnt = ARRAY_SIZE(omap34xx_usb_host_hs_slaves), ++ .masters = omap34xx_usb_host_hs_masters, ++ .masters_cnt = ARRAY_SIZE(omap34xx_usb_host_hs_masters), ++ .flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY, ++ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430), ++}; ++ ++/* ++ * 'usb_tll_hs' class ++ * usb_tll_hs module is the adapter on the usb_host_hs ports ++ */ ++static struct omap_hwmod_class_sysconfig omap34xx_usb_tll_hs_sysc = { ++ .rev_offs = 0x0000, ++ .sysc_offs = 0x0010, ++ .syss_offs = 0x0014, ++ .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_SIDLEMODE), ++ .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART), ++ .sysc_fields = &omap_hwmod_sysc_type1, ++}; ++ ++static struct omap_hwmod_class omap34xx_usb_tll_hs_hwmod_class = { ++ .name = "usbhs_tll", ++ .sysc = &omap34xx_usb_tll_hs_sysc, ++}; ++ ++static struct omap_hwmod_irq_info omap34xx_usb_tll_hs_irqs[] = { ++ { .name = "tll-irq", .irq = 78 }, ++}; ++ ++static struct omap_hwmod_addr_space omap34xx_usb_tll_hs_addrs[] = { ++ { ++ .name = "tll", ++ .pa_start = 0x48062000, ++ .pa_end = 0x48062fff, ++ .flags = ADDR_TYPE_RT ++ }, ++}; ++ ++static struct omap_hwmod_ocp_if omap34xx_f_cfg__usb_tll_hs = { ++ .clk = "usbtll_fck", ++ .user = OCP_USER_MPU, ++ .flags = OCPIF_SWSUP_IDLE, ++}; ++ ++static struct omap_hwmod_ocp_if omap34xx_l4_cfg__usb_tll_hs = { ++ .master = &omap3xxx_l4_core_hwmod, ++ .slave = &omap34xx_usb_tll_hs_hwmod, ++ .clk = "l4_ick", ++ .addr = omap34xx_usb_tll_hs_addrs, ++ .addr_cnt = ARRAY_SIZE(omap34xx_usb_tll_hs_addrs), ++ .user = OCP_USER_MPU | OCP_USER_SDMA, ++}; ++ ++static struct omap_hwmod_ocp_if *omap34xx_usb_tll_hs_slaves[] = { ++ &omap34xx_l4_cfg__usb_tll_hs, ++ &omap34xx_f_cfg__usb_tll_hs, ++}; ++ ++static struct omap_hwmod omap34xx_usb_tll_hs_hwmod = { ++ .name = "usbhs_tll", ++ .class = &omap34xx_usb_tll_hs_hwmod_class, ++ .mpu_irqs = omap34xx_usb_tll_hs_irqs, ++ .mpu_irqs_cnt = ARRAY_SIZE(omap34xx_usb_tll_hs_irqs), ++ .main_clk = "usbtll_ick", ++ .prcm = { ++ .omap2 = { ++ .module_offs = CORE_MOD, ++ .prcm_reg_id = 3, ++ .module_bit = 2, ++ .idlest_reg_id = 3, ++ .idlest_idle_bit = 2, ++ }, ++ }, ++ .slaves = omap34xx_usb_tll_hs_slaves, ++ .slaves_cnt = ARRAY_SIZE(omap34xx_usb_tll_hs_slaves), ++ .flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY, ++ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430), ++}; ++ + static __initdata struct omap_hwmod *omap3xxx_hwmods[] = { + &omap3xxx_l3_main_hwmod, + &omap3xxx_l4_core_hwmod, +@@ -3656,6 +3837,9 @@ static __initdata struct omap_hwmod *omap3xxx_hwmods[] = { + /* usbotg for am35x */ + &am35xx_usbhsotg_hwmod, + ++ &omap34xx_usb_host_hs_hwmod, ++ &omap34xx_usb_tll_hs_hwmod, ++ + NULL, + }; + +diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c +index abc548a..d7112b0 100644 +--- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c ++++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c +@@ -66,6 +66,8 @@ static struct omap_hwmod omap44xx_mmc2_hwmod; + static struct omap_hwmod omap44xx_mpu_hwmod; + static struct omap_hwmod omap44xx_mpu_private_hwmod; + static struct omap_hwmod omap44xx_usb_otg_hs_hwmod; ++static struct omap_hwmod omap44xx_usb_host_hs_hwmod; ++static struct omap_hwmod omap44xx_usb_tll_hs_hwmod; + + /* + * Interconnects omap_hwmod structures +@@ -5027,6 +5029,155 @@ static struct omap_hwmod omap44xx_wd_timer3_hwmod = { + .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430), + }; + ++/* ++ * 'usb_host_hs' class ++ * high-speed multi-port usb host controller ++ */ ++static struct omap_hwmod_ocp_if omap44xx_usb_host_hs__l3_main_2 = { ++ .master = &omap44xx_usb_host_hs_hwmod, ++ .slave = &omap44xx_l3_main_2_hwmod, ++ .clk = "l3_div_ck", ++ .user = OCP_USER_MPU | OCP_USER_SDMA, ++}; ++ ++static struct omap_hwmod_class_sysconfig omap44xx_usb_host_hs_sysc = { ++ .rev_offs = 0x0000, ++ .sysc_offs = 0x0010, ++ .syss_offs = 0x0014, ++ .sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE), ++ .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART | ++ MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART), ++ .sysc_fields = &omap_hwmod_sysc_type2, ++}; ++ ++static struct omap_hwmod_class omap44xx_usb_host_hs_hwmod_class = { ++ .name = "usbhs_uhh", ++ .sysc = &omap44xx_usb_host_hs_sysc, ++}; ++ ++static struct omap_hwmod_ocp_if *omap44xx_usb_host_hs_masters[] = { ++ &omap44xx_usb_host_hs__l3_main_2, ++}; ++ ++static struct omap_hwmod_irq_info omap44xx_usb_host_hs_irqs[] = { ++ { .name = "ohci-irq", .irq = 76 + OMAP44XX_IRQ_GIC_START }, ++ { .name = "ehci-irq", .irq = 77 + OMAP44XX_IRQ_GIC_START }, ++}; ++ ++static struct omap_hwmod_addr_space omap44xx_usb_host_hs_addrs[] = { ++ { ++ .name = "uhh", ++ .pa_start = 0x4a064000, ++ .pa_end = 0x4a0647ff, ++ .flags = ADDR_TYPE_RT ++ }, ++ { ++ .name = "ohci", ++ .pa_start = 0x4A064800, ++ .pa_end = 0x4A064BFF, ++ .flags = ADDR_MAP_ON_INIT ++ }, ++ { ++ .name = "ehci", ++ .pa_start = 0x4A064C00, ++ .pa_end = 0x4A064FFF, ++ .flags = ADDR_MAP_ON_INIT ++ } ++}; ++ ++static struct omap_hwmod_ocp_if omap44xx_l4_cfg__usb_host_hs = { ++ .master = &omap44xx_l4_cfg_hwmod, ++ .slave = &omap44xx_usb_host_hs_hwmod, ++ .clk = "l4_div_ck", ++ .addr = omap44xx_usb_host_hs_addrs, ++ .addr_cnt = ARRAY_SIZE(omap44xx_usb_host_hs_addrs), ++ .user = OCP_USER_MPU | OCP_USER_SDMA, ++}; ++ ++static struct omap_hwmod_ocp_if *omap44xx_usb_host_hs_slaves[] = { ++ &omap44xx_l4_cfg__usb_host_hs, ++}; ++ ++static struct omap_hwmod omap44xx_usb_host_hs_hwmod = { ++ .name = "usbhs_uhh", ++ .class = &omap44xx_usb_host_hs_hwmod_class, ++ .mpu_irqs = omap44xx_usb_host_hs_irqs, ++ .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_usb_host_hs_irqs), ++ .main_clk = "usb_host_hs_fck", ++ .prcm = { ++ .omap4 = { ++ .clkctrl_reg = OMAP4430_CM_L3INIT_USB_HOST_CLKCTRL, ++ }, ++ }, ++ .slaves = omap44xx_usb_host_hs_slaves, ++ .slaves_cnt = ARRAY_SIZE(omap44xx_usb_host_hs_slaves), ++ .masters = omap44xx_usb_host_hs_masters, ++ .masters_cnt = ARRAY_SIZE(omap44xx_usb_host_hs_masters), ++ .flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY, ++ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430), ++}; ++ ++/* ++ * 'usb_tll_hs' class ++ * usb_tll_hs module is the adapter on the usb_host_hs ports ++ */ ++static struct omap_hwmod_class_sysconfig omap44xx_usb_tll_hs_sysc = { ++ .rev_offs = 0x0000, ++ .sysc_offs = 0x0010, ++ .syss_offs = 0x0014, ++ .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_SIDLEMODE), ++ .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART), ++ .sysc_fields = &omap_hwmod_sysc_type1, ++}; ++ ++static struct omap_hwmod_class omap44xx_usb_tll_hs_hwmod_class = { ++ .name = "usbhs_tll", ++ .sysc = &omap44xx_usb_tll_hs_sysc, ++}; ++ ++static struct omap_hwmod_irq_info omap44xx_usb_tll_hs_irqs[] = { ++ { .name = "tll-irq", .irq = 78 + OMAP44XX_IRQ_GIC_START }, ++}; ++ ++static struct omap_hwmod_addr_space omap44xx_usb_tll_hs_addrs[] = { ++ { ++ .name = "tll", ++ .pa_start = 0x4a062000, ++ .pa_end = 0x4a063fff, ++ .flags = ADDR_TYPE_RT ++ }, ++}; ++ ++static struct omap_hwmod_ocp_if omap44xx_l4_cfg__usb_tll_hs = { ++ .master = &omap44xx_l4_cfg_hwmod, ++ .slave = &omap44xx_usb_tll_hs_hwmod, ++ .clk = "l4_div_ck", ++ .addr = omap44xx_usb_tll_hs_addrs, ++ .addr_cnt = ARRAY_SIZE(omap44xx_usb_tll_hs_addrs), ++ .user = OCP_USER_MPU | OCP_USER_SDMA, ++}; ++ ++static struct omap_hwmod_ocp_if *omap44xx_usb_tll_hs_slaves[] = { ++ &omap44xx_l4_cfg__usb_tll_hs, ++}; ++ ++static struct omap_hwmod omap44xx_usb_tll_hs_hwmod = { ++ .name = "usbhs_tll", ++ .class = &omap44xx_usb_tll_hs_hwmod_class, ++ .mpu_irqs = omap44xx_usb_tll_hs_irqs, ++ .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_usb_tll_hs_irqs), ++ .main_clk = "usb_tll_hs_ick", ++ .prcm = { ++ .omap4 = { ++ .clkctrl_reg = OMAP4430_CM_L3INIT_USB_TLL_CLKCTRL, ++ }, ++ }, ++ .slaves = omap44xx_usb_tll_hs_slaves, ++ .slaves_cnt = ARRAY_SIZE(omap44xx_usb_tll_hs_slaves), ++ .flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY, ++ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430), ++}; ++ + static __initdata struct omap_hwmod *omap44xx_hwmods[] = { + + /* dmm class */ +@@ -5173,6 +5324,8 @@ static __initdata struct omap_hwmod *omap44xx_hwmods[] = { + &omap44xx_wd_timer2_hwmod, + &omap44xx_wd_timer3_hwmod, + ++ &omap44xx_usb_host_hs_hwmod, ++ &omap44xx_usb_tll_hs_hwmod, + NULL, + }; + +-- +1.6.6.1 + |