On Wed, Sep 14, 2011 at 10:20 PM, Cousson, Benoit <b-cousson@xxxxxx> wrote: > Hi Keshava, > > On 8/25/2011 9:01 AM, Munegowda, Keshava wrote: >> From: Benoit Cousson<b-cousson@xxxxxx> >> >> Following 4 hwmod structures are added: >> UHH hwmod of usbhs with uhh base address and functional clock, >> EHCI hwmod with irq and base address, >> OHCI hwmod with irq and base address, >> TLL hwmod of usbhs with the TLL base address and irq. >> >> Signed-off-by: Benoit Cousson<b-cousson@xxxxxx> > > That version is really different compared to my original patch, so you should highlight the diff you introduced. > >> Signed-off-by: Keshava Munegowda<keshava_mgowda@xxxxxx> >> --- >> arch/arm/mach-omap2/omap_hwmod_44xx_data.c | 247 ++++++++++++++++++++++++++++ >> 1 files changed, 247 insertions(+), 0 deletions(-) >> >> diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c >> index 6201422..0bc01dd 100644 >> --- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c >> +++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c >> @@ -68,6 +68,10 @@ 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_usbhs_ohci_hwmod; >> +static struct omap_hwmod omap44xx_usbhs_ehci_hwmod; >> +static struct omap_hwmod omap44xx_usb_tll_hs_hwmod; > > None of the 3 last entries are master, and thus should not need any backward declaration. > >> /* >> * Interconnects omap_hwmod structures >> @@ -5336,6 +5340,245 @@ 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 | >> + SIDLE_SMART_WKUP | MSTANDBY_FORCE | >> + MSTANDBY_NO | MSTANDBY_SMART | >> + MSTANDBY_SMART_WKUP), > > Minor, but it should be: > + .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 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_addr_space omap44xx_usb_host_hs_addrs[] = { >> + { >> + .name = "uhh", > > In general, there is no name for unique entry. And if you need a name, you should find something relevant considering this is local to the hwmod. > >> + .pa_start = 0x4a064000, >> + .pa_end = 0x4a0647ff, >> + .flags = ADDR_TYPE_RT >> + }, >> + {} /* Terminating Entry */ > > That comment is useless. Paul added one space inside the terminator as well. > >> +}; >> + >> +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, >> + .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, >> + .clkdm_name = "l3_init_clkdm", >> + .main_clk = "usb_host_hs_fck", >> + .prcm = { >> + .omap4 = { >> + .clkctrl_offs = OMAP4_CM_L3INIT_USB_HOST_CLKCTRL_OFFSET, >> + .context_offs = OMAP4_RM_L3INIT_USB_HOST_CONTEXT_OFFSET, >> + .modulemode = MODULEMODE_SWCTRL, >> + }, >> + }, >> + .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), >> +}; >> + >> +/* 'usbhs_ohci' class */ >> +static struct omap_hwmod_class omap44xx_usbhs_ohci_hwmod_class = { >> + .name = "usbhs_ohci", > > In the context of devicetree and considering what Felipe did for the USB3, I'm wondering if you should define hwmods for ohci and ehci. > I'm not 100% sure it will apply here, but cannot you add the register entries inside the usb_host_hs hwmod and create the devices using that? > > There is no PRCM entry for them so they do not need to be omap_device. > >> +}; >> + >> +static struct omap_hwmod_irq_info omap44xx_usbhs_ohci_irqs[] = { >> + { .name = "ohci-irq", .irq = 76 + OMAP44XX_IRQ_GIC_START }, > > Same comment that before about address space name. > >> + { .irq = -1 } /* Terminating IRQ */ >> +}; >> + >> +static struct omap_hwmod_addr_space omap44xx_usbhs_ohci_addrs[] = { >> + { >> + .name = "ohci", > > Same comment than before. > >> + .pa_start = 0x4A064800, >> + .pa_end = 0x4A064BFF, >> + .flags = ADDR_MAP_ON_INIT > > Why do you need that flag? > >> + }, >> + {} >> +}; >> + >> +static struct omap_hwmod_ocp_if omap44xx_l4_cfg__usbhs_ohci = { >> + .master =&omap44xx_l4_cfg_hwmod, >> + .slave =&omap44xx_usbhs_ohci_hwmod, >> + .clk = "l4_div_ck", >> + .addr = omap44xx_usbhs_ohci_addrs, >> + .user = OCP_USER_MPU | OCP_USER_SDMA, >> +}; >> + >> +static struct omap_hwmod_ocp_if *omap44xx_usbhs_ohci_slaves[] = { >> + &omap44xx_l4_cfg__usbhs_ohci, >> +}; >> + >> +static struct omap_hwmod_ocp_if *omap44xx_usbhs_ohci_masters[] = { >> + &omap44xx_usb_host_hs__l3_main_2, >> +}; >> + >> +static struct omap_hwmod omap44xx_usbhs_ohci_hwmod = { >> + .name = "usbhs_ohci", >> + .class =&omap44xx_usbhs_ohci_hwmod_class, >> + .clkdm_name = "l3_init_clkdm", >> + .mpu_irqs = omap44xx_usbhs_ohci_irqs, >> + .slaves = omap44xx_usbhs_ohci_slaves, >> + .slaves_cnt = ARRAY_SIZE(omap44xx_usbhs_ohci_slaves), >> + .masters = omap44xx_usbhs_ohci_masters, >> + .masters_cnt = ARRAY_SIZE(omap44xx_usbhs_ohci_masters), > > Assuming you need hwmod entries for that, these master entries are useless and probably wrong. > The TRM just documents 2 ports for usb_host_hs and 1 port for usb_tll_hs. > > You will still need the slave for the address space. > >> + .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430), >> + .flags = HWMOD_INIT_NO_RESET | HWMOD_NO_IDLEST, >> +}; >> + >> +/* 'usbhs_ehci' class */ >> +static struct omap_hwmod_class omap44xx_usbhs_ehci_hwmod_class = { >> + .name = "usbhs_ehci", >> +}; >> + >> +static struct omap_hwmod_irq_info omap44xx_usbhs_ehci_irqs[] = { >> + { .name = "ehci-irq", .irq = 77 + OMAP44XX_IRQ_GIC_START }, >> + { .irq = -1 } /* Terminating IRQ */ >> +}; >> + >> +static struct omap_hwmod_addr_space omap44xx_usbhs_ehci_addrs[] = { >> + { >> + .name = "ehci", >> + .pa_start = 0x4A064C00, >> + .pa_end = 0x4A064FFF, >> + .flags = ADDR_MAP_ON_INIT >> + }, >> + {} /* Terminating Entry */ >> +}; >> + >> +static struct omap_hwmod_ocp_if omap44xx_l4_cfg__usbhs_ehci = { >> + .master =&omap44xx_l4_cfg_hwmod, >> + .slave =&omap44xx_usbhs_ehci_hwmod, >> + .clk = "l4_div_ck", >> + .addr = omap44xx_usbhs_ehci_addrs, >> + .user = OCP_USER_MPU | OCP_USER_SDMA, >> +}; >> + >> +static struct omap_hwmod_ocp_if *omap44xx_usbhs_ehci_slaves[] = { >> + &omap44xx_l4_cfg__usbhs_ehci, >> +}; >> + >> +static struct omap_hwmod_ocp_if *omap44xx_usbhs_ehci_masters[] = { >> + &omap44xx_usb_host_hs__l3_main_2, >> +}; >> + >> + >> +static struct omap_hwmod omap44xx_usbhs_ehci_hwmod = { >> + .name = "usbhs_ehci", >> + .class =&omap44xx_usbhs_ehci_hwmod_class, >> + .clkdm_name = "l3_init_clkdm", >> + .mpu_irqs = omap44xx_usbhs_ehci_irqs, >> + .slaves = omap44xx_usbhs_ehci_slaves, >> + .slaves_cnt = ARRAY_SIZE(omap44xx_usbhs_ehci_slaves), >> + .masters = omap44xx_usbhs_ehci_masters, >> + .masters_cnt = ARRAY_SIZE(omap44xx_usbhs_ehci_masters), >> + .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430), >> + .flags = HWMOD_INIT_NO_RESET | HWMOD_NO_IDLEST, >> +}; >> + >> +/* >> + * '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 | >> + SYSC_HAS_SOFTRESET | SYSC_HAS_ENAWAKEUP | >> + SYSC_HAS_CLOCKACTIVITY), >> + .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 }, >> + { .irq = -1 } /* Terminating IRQ */ >> +}; >> + >> +static struct omap_hwmod_addr_space omap44xx_usb_tll_hs_addrs[] = { >> + { >> + .name = "tll", >> + .pa_start = 0x4a062000, >> + .pa_end = 0x4a063fff, >> + .flags = ADDR_TYPE_RT >> + }, >> + {} /* Terminating Entry */ >> +}; >> + >> +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, >> + .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, >> + .clkdm_name = "l3_init_clkdm", >> + .mpu_irqs = omap44xx_usb_tll_hs_irqs, >> + .main_clk = "usb_tll_hs_ick", >> + .prcm = { >> + .omap4 = { >> + .clkctrl_offs = OMAP4_CM_L3INIT_USB_TLL_CLKCTRL_OFFSET, >> + .context_offs = OMAP4_RM_L3INIT_USB_TLL_CONTEXT_OFFSET, >> + .modulemode = MODULEMODE_HWCTRL, >> + }, >> + }, >> + .slaves = omap44xx_usb_tll_hs_slaves, >> + .slaves_cnt = ARRAY_SIZE(omap44xx_usb_tll_hs_slaves), >> + .flags = HWMOD_SWSUP_SIDLE, >> + .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430), >> +}; >> + >> static __initdata struct omap_hwmod *omap44xx_hwmods[] = { >> >> /* dmm class */ >> @@ -5482,6 +5725,10 @@ static __initdata struct omap_hwmod *omap44xx_hwmods[] = { >> &omap44xx_wd_timer2_hwmod, >> &omap44xx_wd_timer3_hwmod, >> >> + &omap44xx_usb_host_hs_hwmod, >> + &omap44xx_usbhs_ohci_hwmod, >> + &omap44xx_usbhs_ehci_hwmod, >> + &omap44xx_usb_tll_hs_hwmod, > > This list is ordered, so it should be something like that: > > &omap44xx_uart3_hwmod, > &omap44xx_uart4_hwmod, > > + /* usb_host_hs class */ > + &omap44xx_usb_host_hs_hwmod, > + > /* usb_otg_hs class */ > &omap44xx_usb_otg_hs_hwmod, > > + /* usb_tll_hs class */ > + &omap44xx_usb_tll_hs_hwmod, > + > /* wd_timer class */ > &omap44xx_wd_timer2_hwmod, > &omap44xx_wd_timer3_hwmod, > > Regards, > Benoit Thanks benoit, I make the changes as per your comments ! I will send the new set of patches today only. regards keshava -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html