Hi, >-----Original Message----- >From: Cousson, Benoit >Sent: Monday, August 09, 2010 5:42 PM >To: Kalliguddi, Hema >Cc: linux-usb@xxxxxxxxxxxxxxx; linux-omap@xxxxxxxxxxxxxxx; >Basak, Partha; Felipe Balbi; Tony Lindgren; Kevin Hilman >Subject: Re: [PATCH 7/8] : Hwmod api changes > >On 8/6/2010 7:28 PM, Kalliguddi, Hema wrote: >> From: Hema HK<hemahk@xxxxxx> >> >> Omap USBOTG modules has a requirement to set the auto idle >bit only after >> setting smart idle bit. > >Is it a requirement or an errata? Could you provide more information >(i.e. TRM page or errata number / description)? > This is a requirement as per the TRM section 24.1.5.4.4 http://focus.ti.com/pdfs/wtbu/SWPU223D_Final_EPDF_06_07_2010.pdf There is note on this. >> Modified the _sys_enable api to set the smart idle >> first and then the autoidle bit. Setting this will not have >any impact on the >> other modules. >> >> Added 2 wrapper APIs in the omap device layer for wakeup >enable/disable >> and sidle/mstandby settings. >> >> Signed-off-by: Hema HK<hemahk@xxxxxx> >> Signed-off-by: Basak, Partha<p-basak2@xxxxxx> >> >> Cc: Felipe Balbi<felipe.balbi@xxxxxxxxx> >> Cc: Tony Lindgren<tony@xxxxxxxxxxx> >> Cc: Kevin Hilman<khilman@xxxxxxxxxxxxxxxxxxx> >> >> --- >> arch/arm/mach-omap2/omap_hwmod.c | 18 +++++++---- >> arch/arm/plat-omap/include/plat/omap_device.h | 2 + >> arch/arm/plat-omap/omap_device.c | 42 >++++++++++++++++++++++++++ >> 3 files changed, 56 insertions(+), 6 deletions(-) >> >> Index: linux-omap-pm/arch/arm/mach-omap2/omap_hwmod.c >> =================================================================== >> --- linux-omap-pm.orig/arch/arm/mach-omap2/omap_hwmod.c >2010-08-06 08:59:03.641863815 -0400 >> +++ linux-omap-pm/arch/arm/mach-omap2/omap_hwmod.c >2010-08-06 09:02:00.021864999 -0400 >> @@ -653,12 +653,6 @@ >> _set_master_standbymode(oh, idlemode,&v); >> } >> >> - if (sf& SYSC_HAS_AUTOIDLE) { >> - idlemode = (oh->flags& HWMOD_NO_OCP_AUTOIDLE) ? >> - 0 : 1; >> - _set_module_autoidle(oh, idlemode,&v); >> - } >> - >> /* XXX OCP ENAWAKEUP bit? */ >> >> /* >> @@ -671,6 +665,18 @@ >> _set_clockactivity(oh, oh->class->sysc->clockact,&v); >> >> _write_sysconfig(v, oh); >> + >> + /* Set the auto idle bit only after setting the smartidle bit >> + * as this is requirement for some modules like USBOTG >> + * setting this will not have any impact on the other modues. >> + */ > >Except that you are adding an extra access to a quite slow L4 slave >interface. I'm not sure if write posted will help in that case. > I agree that it will add an extra access on L4 but this required for USBOTG. I did not quite understood your Next Comment can elaborate please? >> + >> + if (sf& SYSC_HAS_AUTOIDLE) { >> + idlemode = (oh->flags& HWMOD_NO_OCP_AUTOIDLE) ? >> + 0 : 1; >> + _set_module_autoidle(oh, idlemode,&v); >> + } >> + _write_sysconfig(v, oh); >> } >> >> /** >> Index: linux-omap-pm/arch/arm/plat-omap/include/plat/omap_device.h >> =================================================================== >> --- >linux-omap-pm.orig/arch/arm/plat-omap/include/plat/omap_d >evice.h 2010-08-06 08:59:03.661863725 -0400 >> +++ >linux-omap-pm/arch/arm/plat-omap/include/plat/omap_device.h >2010-08-06 09:02:00.021864999 -0400 >> @@ -116,6 +116,8 @@ >> int omap_device_disable_clocks(struct omap_device *od); >> int omap_device_enable_clocks(struct omap_device *od); >> >> +int omap_device_enable_wakeup(struct omap_device *od); >> +int omap_device_disable_wakeup(struct omap_device *od); >> >> /* >> * Entries should be kept in latency order ascending >> Index: linux-omap-pm/arch/arm/plat-omap/omap_device.c >> =================================================================== >> --- linux-omap-pm.orig/arch/arm/plat-omap/omap_device.c >2010-08-06 08:59:03.661863725 -0400 >> +++ linux-omap-pm/arch/arm/plat-omap/omap_device.c >2010-08-06 09:02:00.021864999 -0400 >> @@ -757,3 +757,45 @@ >> /* XXX pass along return value here? */ >> return 0; >> } >> + >> +/** >> + * omap_device_enable_wakeup - Enable the wakeup bit >> + * @od: struct omap_device *od >> + * >> + * Enable the wakup bit for omap_hwmods associated >> + * with the omap_device. Returns 0. >> + */ >> + >> +int omap_device_enable_wakeup(struct omap_device *od) > >Why do you need that? Could you elaborate? > This required o set the wakeup enable bit in the sysconfig register for swakeup generation To enable the OCP clock When module is in smart-idle-mode and there is a asyncronous events like resume signalling. >Benoit > >-- 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