[PATCH 08/25] OMAP4: PM: Keep static dep between MPUSS-EMIF and MPUSS-L3 and DUCATI-L3
Kevin Hilman
khilman at ti.com
Thu Sep 8 14:06:35 EDT 2011
Santosh Shilimkar <santosh.shilimkar at ti.com> writes:
> As per OMAP4430 TRM, the dynamic dependency between MPUSS -> EMIF
> and MPUSS -> L3* and DUCATI -> L3 *clockdomains is enable by default.
> Refer register CM_MPU_DYNAMICDEP description for details.
>
> But these dynamic dependencies doesn't work as expected. The hardware
> recommendation is to keep above dependencies.
Minor nit on changelog wording...
The use of "above dependencies" here is a bit confusing, since the only
thing refered to above are dynamic dependencies.
I think this should be worked to be clear that what is being kept are
the *static* dependencies (assuming I understand it correctly.)
> Without this system locks up or randomly crashesh.
Is 'crashesh' a particular kind of crash. maybe a silent one? ;)
> Signed-off-by: Rajendra Nayak <rnayak at ti.com>
> Signed-off-by: Santosh Shilimkar <santosh.shilimkar at ti.com>
> Acked-by: Paul Walmsley <paul at pwsan.com>
> Cc: Kevin Hilman <khilman at ti.com>
> ---
> arch/arm/mach-omap2/pm44xx.c | 28 ++++++++++++++++++++++++++++
> 1 files changed, 28 insertions(+), 0 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/pm44xx.c b/arch/arm/mach-omap2/pm44xx.c
> index 4bbc6fe..35ba028 100644
> --- a/arch/arm/mach-omap2/pm44xx.c
> +++ b/arch/arm/mach-omap2/pm44xx.c
> @@ -116,6 +116,8 @@ static void omap_default_idle(void)
> static int __init omap4_pm_init(void)
> {
> int ret;
> + struct clockdomain *emif_clkdm, *mpuss_clkdm, *l3_1_clkdm;
> + struct clockdomain *ducati_clkdm, *l3_2_clkdm;
>
> if (!cpu_is_omap44xx())
> return -ENODEV;
> @@ -128,6 +130,32 @@ static int __init omap4_pm_init(void)
> goto err2;
> }
>
> + /*
> + * The dynamic dependency between MPUSS -> MEMIF and
> + * MPUSS -> L3_* and DUCATI -> doesn't work as expected.
> + * The hardware recommendation is to keep above dependencies.
same here... "The hardware recommendation is to use static dependencies."
> + * Without this system locks up or randomly crashesh.
> + */
> + mpuss_clkdm = clkdm_lookup("mpuss_clkdm");
> + emif_clkdm = clkdm_lookup("l3_emif_clkdm");
> + l3_1_clkdm = clkdm_lookup("l3_1_clkdm");
> + l3_2_clkdm = clkdm_lookup("l3_2_clkdm");
> + ducati_clkdm = clkdm_lookup("ducati_clkdm");
> + if ((!mpuss_clkdm) || (!emif_clkdm) || (!l3_1_clkdm) ||
> + (!l3_2_clkdm) || (!ducati_clkdm))
> + goto err2;
> +
> + ret = clkdm_add_wkdep(mpuss_clkdm, emif_clkdm);
> + ret |= clkdm_add_wkdep(mpuss_clkdm, l3_1_clkdm);
> + ret |= clkdm_add_wkdep(mpuss_clkdm, l3_2_clkdm);
> + ret |= clkdm_add_wkdep(ducati_clkdm, l3_1_clkdm);
> + ret |= clkdm_add_wkdep(ducati_clkdm, l3_2_clkdm);
> + if (ret) {
> + pr_err("Failed to add MPUSS -> L3/EMIF, DUCATI -> L3 "
> + "wakeup dependency\n");
> + goto err2;
> + }
> +
> #ifdef CONFIG_SUSPEND
> suspend_set_ops(&omap_pm_ops);
> #endif /* CONFIG_SUSPEND */
Kevin
More information about the linux-arm-kernel
mailing list