linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: nm@ti.com (Nishanth Menon)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 03/15] ARM: OMAP4+: PM: Consolidate and use OMAP4 PM code for OMAP5
Date: Fri, 1 Mar 2013 11:43:00 -0600	[thread overview]
Message-ID: <20130301174300.GA22220@kahuna> (raw)
In-Reply-To: <1362139864-9233-4-git-send-email-santosh.shilimkar@ti.com>

On 17:40-20130301, Santosh Shilimkar wrote:
> diff --git a/arch/arm/mach-omap2/pm44xx.c b/arch/arm/mach-omap2/pm_omap4plus.c
> similarity index 74%
> rename from arch/arm/mach-omap2/pm44xx.c
> rename to arch/arm/mach-omap2/pm_omap4plus.c
> index 1d03110..95d2712 100644
> --- a/arch/arm/mach-omap2/pm44xx.c
> +++ b/arch/arm/mach-omap2/pm_omap4plus.c
> @@ -1,7 +1,7 @@
>  /*
> - * OMAP4 Power Management Routines
> + * OMAP4PLUS Power Management Routines
>   *
> - * Copyright (C) 2010-2011 Texas Instruments, Inc.
> + * Copyright (C) 2010-2013 Texas Instruments, Inc.
>   * Rajendra Nayak <rnayak@ti.com>
>   * Santosh Shilimkar <santosh.shilimkar@ti.com>
>   *
> @@ -125,55 +125,77 @@ static void omap_default_idle(void)
>  }
>  
>  /**
> - * omap4_pm_init - Init routine for OMAP4 PM
> + * omap4_init_static_deps - Init static clkdm dependencies on OMAP4
>   *
> - * Initializes all powerdomain and clockdomain target states
> - * and all PRCM settings.
> + * The dynamic dependency between MPUSS -> MEMIF and
> + * MPUSS -> L4_PER/L3_* and DUCATI -> L3_* doesn't work as
> + * expected. The hardware recommendation is to enable static
> + * dependencies for these to avoid system lock ups or random crashes.
> + * The L4 wakeup depedency is added to workaround the OCP sync hardware
> + * BUG with 32K synctimer which lead to incorrect timer value read
> + * from the 32K counter. The BUG applies for GPTIMER1 and WDT2 which
> + * are part of L4 wakeup clockdomain.
>   */
> -int __init omap4_pm_init(void)
> +static inline int omap4_init_static_deps(void)
>  {
>  	int ret;
> -	struct clockdomain *emif_clkdm, *mpuss_clkdm, *l3_1_clkdm;
> -	struct clockdomain *ducati_clkdm, *l3_2_clkdm;
> +	struct clockdomain *emif_clkdm, *mpuss_clkdm, *l3_1_clkdm, *l4wkup;
> +	struct clockdomain *ducati_clkdm, *l3_2_clkdm, *l4_per_clkdm;
>  
> -	if (omap_rev() == OMAP4430_REV_ES1_0) {
> -		WARN(1, "Power Management not supported on OMAP4430 ES1.0\n");
> -		return -ENODEV;
> -	}
> -
> -	pr_err("Power Management for TI OMAP4.\n");
> -
> -	ret = pwrdm_for_each(pwrdms_setup, NULL);
> -	if (ret) {
> -		pr_err("Failed to setup powerdomains\n");
> -		goto err2;
> -	}
> -
> -	/*
> -	 * The dynamic dependency between MPUSS -> MEMIF and
> -	 * MPUSS -> L4_PER/L3_* and DUCATI -> L3_* doesn't work as
> -	 * expected. The hardware recommendation is to enable static
> -	 * dependencies for these to avoid system lock ups or random crashes.
> -	 */
>  	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");
> +	l4_per_clkdm = clkdm_lookup("l4_per_clkdm");
> +	l4wkup = clkdm_lookup("l4_wkup_clkdm");
These static dependencies now seems added for OMAP4?
Sounds like a separate patch as it is not exactly what $subject claims.
>  	ducati_clkdm = clkdm_lookup("ducati_clkdm");
> -	if ((!mpuss_clkdm) || (!emif_clkdm) || (!l3_1_clkdm) ||
> -		(!l3_2_clkdm) || (!ducati_clkdm))
> -		goto err2;
> +	if ((!mpuss_clkdm) || (!emif_clkdm) || (!l3_1_clkdm) || (!l4wkup) ||
> +		(!l3_2_clkdm) || (!ducati_clkdm) || (!l4_per_clkdm))
> +		return -EINVAL;
>  
>  	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(mpuss_clkdm, l4_per_clkdm);
> +	ret |= clkdm_add_wkdep(mpuss_clkdm, l4wkup);
>  	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/L4PER, DUCATI -> L3 wakeup dependency\n");
> +	}
> +
> +	return ret;
> +}
> +
> +/**
> + * omap4_pm_init - Init routine for OMAP4+ devices
> + *
> + * Initializes all powerdomain and clockdomain target states
> + * and all PRCM settings.
> + */
> +int __init omap4_pm_init(void)
could we rename it as omap4plus_pm_init while we are at it?
This will help differentiate at least functions which are omap4 only and
ones which we reuse for omap4plus?
> +{
> +	int ret;
> +
> +	if (omap_rev() == OMAP4430_REV_ES1_0) {
we have ID detection for OMAP5430_REV_ES1_0 in arch/arm/mach-omap2/id.c
However, we do not support PM, so might as well use it to skip init?
> +		WARN(1, "Power Management not supported on OMAP4430 ES1.0\n");
> +		return -ENODEV;
> +	}
> +
> +	pr_info("Power Management for TI OMAP4PLUS devices.\n");
> +
> +	ret = pwrdm_for_each(pwrdms_setup, NULL);
> +	if (ret) {
> +		pr_err("Failed to setup powerdomains.\n");
>  		goto err2;
>  	}
>  
> +	if (cpu_is_omap44xx()) {
> +		ret = omap4_init_static_deps();
> +		if (ret)
> +			goto err2;
> +	}
> +
>  	ret = omap4_mpuss_init();
>  	if (ret) {
>  		pr_err("Failed to initialise OMAP4 MPUSS\n");
> @@ -186,10 +208,11 @@ int __init omap4_pm_init(void)
>  	omap_pm_suspend = omap4_pm_suspend;
>  #endif
>  
> -	/* Overwrite the default cpu_do_idle() */
> +	/* Overwrite the default arch_idle() */
>  	arm_pm_idle = omap_default_idle;
>  
> -	omap4_idle_init();
> +	if (cpu_is_omap44xx())
> +		omap4_idle_init();
>  
>  err2:
>  	return ret;
> diff --git a/arch/arm/mach-omap2/sleep44xx.S b/arch/arm/mach-omap2/sleep_omap4plus.S
> similarity index 100%
> rename from arch/arm/mach-omap2/sleep44xx.S
> rename to arch/arm/mach-omap2/sleep_omap4plus.S
> -- 
> 1.7.9.5

-- 
Regards,
Nishanth Menon

  reply	other threads:[~2013-03-01 17:43 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-03-01 12:10 [PATCH 00/15] ARM: OMAP5: PM: Add MPUSS suspend and CPUidle support Santosh Shilimkar
2013-03-01 12:10 ` [PATCH 01/15] ARM: OMAP4+: PM: Consolidate MPU subsystem PM code for re-use Santosh Shilimkar
2013-03-01 13:50   ` Nishanth Menon
2013-03-01 12:10 ` [PATCH 02/15] ARM: OMAP5: PM: Update CPU context register offset Santosh Shilimkar
2013-03-01 17:34   ` Nishanth Menon
2013-03-01 12:10 ` [PATCH 03/15] ARM: OMAP4+: PM: Consolidate and use OMAP4 PM code for OMAP5 Santosh Shilimkar
2013-03-01 17:43   ` Nishanth Menon [this message]
2013-03-02  5:43     ` Santosh Shilimkar
2013-03-04 18:21       ` Nishanth Menon
2013-03-01 12:10 ` [PATCH 04/15] ARM: OMAP5: PM: Set MPUSS-EMIF clock-domain static dependency Santosh Shilimkar
2013-03-01 12:10 ` [PATCH 05/15] ARM: OMAP5: PM: Enables ES2 PM mode by default Santosh Shilimkar
2013-03-01 19:37   ` Nishanth Menon
2013-03-02  5:47     ` Santosh Shilimkar
2013-03-04 18:29       ` Nishanth Menon
2013-03-10 18:07         ` Santosh Shilimkar
2013-03-01 12:10 ` [PATCH 06/15] ARM: OMAP5: PM: Enable Mercury retention mode on CPUx powerdomains Santosh Shilimkar
2013-03-01 19:42   ` Nishanth Menon
2013-03-02  5:52     ` Santosh Shilimkar
2013-03-04 18:33       ` Nishanth Menon
2013-03-01 12:10 ` [PATCH 07/15] ARM: OMAP5: Add init_late() hook to enable pm initialization Santosh Shilimkar
2013-03-01 20:12   ` Nishanth Menon
2013-03-02  6:00     ` Santosh Shilimkar
2013-03-04 18:35       ` Nishanth Menon
2013-03-01 12:10 ` [PATCH 08/15] ARM: OMAP5: PM: Add CPU power off mode support Santosh Shilimkar
2013-03-01 21:36   ` Nishanth Menon
2013-03-02  6:14     ` Santosh Shilimkar
2013-03-04 18:38       ` Nishanth Menon
2013-03-01 12:10 ` [PATCH 09/15] ARM: OMAP4+: PM: Restore CPU power state to ON with clockdomain force wakeup method Santosh Shilimkar
2013-03-01 21:53   ` Nishanth Menon
2013-03-02  6:16     ` Santosh Shilimkar
2013-03-01 12:10 ` [PATCH 10/15] ARM: OMAP5: PM: Add MPU Open Switch Retention support Santosh Shilimkar
2013-03-01 22:05   ` Nishanth Menon
2013-03-01 12:11 ` [PATCH 11/15] ARM: OMAP5: PM: Add L2 memory power down support Santosh Shilimkar
2013-03-01 23:43   ` Nishanth Menon
2013-03-02  6:24     ` Santosh Shilimkar
2013-03-04 18:41       ` Nishanth Menon
2013-03-01 12:11 ` [PATCH 12/15] ARM: OMAP4+: CPUidle: Cleanup idle driver for OMAP5 support Santosh Shilimkar
2013-03-01 23:56   ` Nishanth Menon
2013-03-02  6:25     ` Santosh Shilimkar
2013-03-01 12:11 ` [PATCH 13/15] ARM: OMAP4+: CPUidle: Deprecate use of omap4_mpuss_read_prev_context_state() Santosh Shilimkar
2013-03-02  0:03   ` Nishanth Menon
2013-03-01 12:11 ` [PATCH 14/15] ARM: OMAP4+: CPUidle: Add OMAP5 idle driver support Santosh Shilimkar
2013-03-02  0:25   ` Nishanth Menon
2013-03-02  6:47     ` Santosh Shilimkar
2013-03-04 18:48       ` Nishanth Menon
2013-03-01 12:11 ` [PATCH 15/15] ARM: OMAP5: PM: handle device instance for for coldreset Santosh Shilimkar
2013-03-01 13:04   ` Nishanth Menon
2013-03-01 13:09     ` Santosh Shilimkar
2013-03-01 13:13       ` Nishanth Menon
2013-03-01 13:16         ` Santosh Shilimkar

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20130301174300.GA22220@kahuna \
    --to=nm@ti.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).