"Gadiyar, Anand" <gadi...@ti.com> writes: > Kevin Hilman wrote: >> Tero Kristo <tero.kri...@nokia.com> writes: >> >> > From: Tero Kristo <tero.kri...@nokia.com> >> > >> > OMAP3 sleep can be prevented in some cases where OTG autoidle is enabled. >> > This patch force disables autoidle during wakeup from off-mode. See omap >> > errata 1.164. >> > >> > Signed-off-by: Tero Kristo <tero.kri...@nokia.com> >> >> This one needs a refresh against current PM branch. >> >> > --- >> > arch/arm/mach-omap2/pm34xx.c | 6 ++++++ >> > arch/arm/mach-omap2/usb-musb.c | 14 ++++++++------ >> > arch/arm/plat-omap/include/mach/usb.h | 3 +++ >> >> mach/usb.h moved to plat/usb.h >> >> > 3 files changed, 17 insertions(+), 6 deletions(-) >> > >> > diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c >> > index 5eb7321..070a0a2 100644 >> > --- a/arch/arm/mach-omap2/pm34xx.c >> > +++ b/arch/arm/mach-omap2/pm34xx.c >> > @@ -39,6 +39,7 @@ >> > #include <mach/gpmc.h> >> > #include <mach/dma.h> >> > #include <mach/dmtimer.h> >> > +#include <mach/usb.h> >> > >> > #include <asm/tlbflush.h> >> > >> > @@ -496,6 +497,11 @@ void omap_sram_idle(void) >> > omap3_prcm_restore_context(); >> > omap3_sram_restore_context(); >> > omap2_sms_restore_context(); >> > + /* >> > + * Errata 1.164 fix : OTG autoidle can prevent >> > + * sleep >> > + */ >> > + usb_musb_disable_autoidle(); >> >> NAK. This belongs in the MUSB driver, not in the idle path. >> > > Kevin, > > When we exit off-mode, the autoidle will get enabled, and needs > an explicit disable. If the MUSB driver is not loaded, there will > be no one to do this. >
OK, thanks for the clarification. The changelog should be updated to describe this problem in more detail. Kevin > >> Kevin >> >> > } >> > omap_uart_resume_idle(0); >> > omap_uart_resume_idle(1); >> > diff --git a/arch/arm/mach-omap2/usb-musb.c >> > b/arch/arm/mach-omap2/usb-musb.c >> > index 8dde0b7..f4b86c0 100644 >> > --- a/arch/arm/mach-omap2/usb-musb.c >> > +++ b/arch/arm/mach-omap2/usb-musb.c >> > @@ -44,10 +44,11 @@ static struct platform_device dummy_pdev = { >> > }, >> > }; >> > >> > +static void __iomem *otg_base; >> > +static struct clk *otg_clk; >> > + >> > static void __init usb_musb_pm_init(void) >> > { >> > - void __iomem *otg_base; >> > - struct clk *otg_clk; >> > struct device *dev = &dummy_pdev.dev; >> > >> > if (!cpu_is_omap34xx()) >> > @@ -74,12 +75,13 @@ static void __init usb_musb_pm_init(void) >> > cpu_relax(); >> > } >> > >> > - if (otg_clk) { >> > + if (otg_clk) >> > clk_disable(otg_clk); >> > - clk_put(otg_clk); >> > - } >> > +} >> > >> > >> > - iounmap(otg_base); >> > +void usb_musb_disable_autoidle(void) >> > +{ >> > + __raw_writel(0, otg_base + OTG_SYSCONFIG); >> > } >> > >> > #ifdef CONFIG_USB_MUSB_SOC >> > diff --git a/arch/arm/plat-omap/include/mach/usb.h >> > b/arch/arm/plat-omap/include/mach/usb.h >> > index a4068a4..310ee17 100644 >> > --- a/arch/arm/plat-omap/include/mach/usb.h >> > +++ b/arch/arm/plat-omap/include/mach/usb.h >> > @@ -46,6 +46,9 @@ extern void usb_musb_init(void); >> > >> > extern void usb_ehci_init(struct ehci_hcd_omap_platform_data *pdata); >> > >> > +/* This is needed for OMAP3 errata 1.164: enabled autoidle can prevent >> > sleep */ >> > +extern void usb_musb_disable_autoidle(void); >> > + >> > #endif >> > >> > void omap_usb_init(struct omap_usb_config *pdata); -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html