Message ID | 1489405996-10718-3-git-send-email-rogerq@ti.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
* Roger Quadros <rogerq@ti.com> [170313 04:55]: > --- a/arch/arm/mach-omap2/omap_hwmod.c > +++ b/arch/arm/mach-omap2/omap_hwmod.c > @@ -2149,7 +2149,7 @@ static int _idle(struct omap_hwmod *oh) > _idle_sysc(oh); > _del_initiator_dep(oh, mpu_oh); > > - if (oh->clkdm) > + if (oh->clkdm && !(oh->flags & HWMOD_CLKDM_NOAUTO)) > clkdm_deny_idle(oh->clkdm); > > if (oh->flags & HWMOD_BLOCK_WFI) Is this change to _idle() really needed? It seems that the clkdm_deny_idle() there is paired with the clkdm_allow_idle() later on in the same function? Regards, Tony -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Tony, On 14/03/17 17:48, Tony Lindgren wrote: > * Roger Quadros <rogerq@ti.com> [170313 04:55]: > >> --- a/arch/arm/mach-omap2/omap_hwmod.c >> +++ b/arch/arm/mach-omap2/omap_hwmod.c >> @@ -2149,7 +2149,7 @@ static int _idle(struct omap_hwmod *oh) >> _idle_sysc(oh); >> _del_initiator_dep(oh, mpu_oh); >> >> - if (oh->clkdm) >> + if (oh->clkdm && !(oh->flags & HWMOD_CLKDM_NOAUTO)) >> clkdm_deny_idle(oh->clkdm); >> >> if (oh->flags & HWMOD_BLOCK_WFI) > > Is this change to _idle() really needed? It seems that the > clkdm_deny_idle() there is paired with the clkdm_allow_idle() > later on in the same function? > You are right. This change to _idle() is unnecessary. I'll send an update.
On 16/03/17 09:59, Roger Quadros wrote: > Tony, > > On 14/03/17 17:48, Tony Lindgren wrote: >> * Roger Quadros <rogerq@ti.com> [170313 04:55]: >> >>> --- a/arch/arm/mach-omap2/omap_hwmod.c >>> +++ b/arch/arm/mach-omap2/omap_hwmod.c >>> @@ -2149,7 +2149,7 @@ static int _idle(struct omap_hwmod *oh) >>> _idle_sysc(oh); >>> _del_initiator_dep(oh, mpu_oh); >>> >>> - if (oh->clkdm) >>> + if (oh->clkdm && !(oh->flags & HWMOD_CLKDM_NOAUTO)) >>> clkdm_deny_idle(oh->clkdm); >>> >>> if (oh->flags & HWMOD_BLOCK_WFI) >> >> Is this change to _idle() really needed? It seems that the >> clkdm_deny_idle() there is paired with the clkdm_allow_idle() >> later on in the same function? >> > > You are right. This change to _idle() is unnecessary. I'll send an update. > Now I remember why I put it there. When HWMOD_CLKDM_NOAUTO flag is set, _enable() does not call clkdm_allow_idle() so the call to clkdm_deny_idle() in _idle() would be redundant. I think we should keep the patch as it is. What do you say?
* Roger Quadros <rogerq@ti.com> [170316 01:06]: > On 16/03/17 09:59, Roger Quadros wrote: > > Tony, > > > > On 14/03/17 17:48, Tony Lindgren wrote: > >> * Roger Quadros <rogerq@ti.com> [170313 04:55]: > >> > >>> --- a/arch/arm/mach-omap2/omap_hwmod.c > >>> +++ b/arch/arm/mach-omap2/omap_hwmod.c > >>> @@ -2149,7 +2149,7 @@ static int _idle(struct omap_hwmod *oh) > >>> _idle_sysc(oh); > >>> _del_initiator_dep(oh, mpu_oh); > >>> > >>> - if (oh->clkdm) > >>> + if (oh->clkdm && !(oh->flags & HWMOD_CLKDM_NOAUTO)) > >>> clkdm_deny_idle(oh->clkdm); > >>> > >>> if (oh->flags & HWMOD_BLOCK_WFI) > >> > >> Is this change to _idle() really needed? It seems that the > >> clkdm_deny_idle() there is paired with the clkdm_allow_idle() > >> later on in the same function? > >> > > > > You are right. This change to _idle() is unnecessary. I'll send an update. > > > > Now I remember why I put it there. > > When HWMOD_CLKDM_NOAUTO flag is set, _enable() does not > call clkdm_allow_idle() so the call to clkdm_deny_idle() in _idle() would > be redundant. > > I think we should keep the patch as it is. What do you say? OK. Maybe add a comment there about that? Regards, Tony -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c index e8b9887..7a29f48 100644 --- a/arch/arm/mach-omap2/omap_hwmod.c +++ b/arch/arm/mach-omap2/omap_hwmod.c @@ -2092,7 +2092,7 @@ static int _enable(struct omap_hwmod *oh) r = (soc_ops.wait_target_ready) ? soc_ops.wait_target_ready(oh) : -EINVAL; - if (oh->clkdm) + if (oh->clkdm && !(oh->flags & HWMOD_CLKDM_NOAUTO)) clkdm_allow_idle(oh->clkdm); if (!r) { @@ -2149,7 +2149,7 @@ static int _idle(struct omap_hwmod *oh) _idle_sysc(oh); _del_initiator_dep(oh, mpu_oh); - if (oh->clkdm) + if (oh->clkdm && !(oh->flags & HWMOD_CLKDM_NOAUTO)) clkdm_deny_idle(oh->clkdm); if (oh->flags & HWMOD_BLOCK_WFI) diff --git a/arch/arm/mach-omap2/omap_hwmod.h b/arch/arm/mach-omap2/omap_hwmod.h index 9e1c4ed..cda553a 100644 --- a/arch/arm/mach-omap2/omap_hwmod.h +++ b/arch/arm/mach-omap2/omap_hwmod.h @@ -531,6 +531,10 @@ struct omap_hwmod_omap4_prcm { * operate and they need to be handled at the same time as the main_clk. * HWMOD_NO_IDLE: Do not idle the hwmod at all. Useful to handle certain * IPs like CPSW on DRA7, where clocks to this module cannot be disabled. + * HWMOD_CLKDM_NOAUTO: Allows the hwmod's clockdomain to be prevented from + * entering HW_AUTO while hwmod is active. This is needed to workaround + * some modules which don't function correctly with HW_AUTO. For example, + * DCAN on DRA7x SoC needs this to workaround errata i893. */ #define HWMOD_SWSUP_SIDLE (1 << 0) #define HWMOD_SWSUP_MSTANDBY (1 << 1) @@ -548,6 +552,7 @@ struct omap_hwmod_omap4_prcm { #define HWMOD_RECONFIG_IO_CHAIN (1 << 13) #define HWMOD_OPT_CLKS_NEEDED (1 << 14) #define HWMOD_NO_IDLE (1 << 15) +#define HWMOD_CLKDM_NOAUTO (1 << 16) /* * omap_hwmod._int_flags definitions