public inbox for linux-arm-kernel@lists.infradead.org 
 help / color / mirror / Atom feed
From: t.figa@samsung•com (Tomasz Figa)
To: linux-arm-kernel@lists•infradead.org
Subject: [PATCH V4 10/20] ARM: exynos: cpuidle: Move clock setup to pm.c
Date: Thu, 10 Apr 2014 15:57:59 +0200	[thread overview]
Message-ID: <5346A367.2070107@samsung.com> (raw)
In-Reply-To: <1397123751-1957-11-git-send-email-daniel.lezcano@linaro.org>

Hi Daniel,

On 10.04.2014 11:55, Daniel Lezcano wrote:
> One more step is moving the clock ratio setting at idle time in pm.c
>
> The macro names have been changed to be consistent with the other macros
> name in the file.
>
> Note, the clock divider was working only when cpuidle was enabled because it
> was in its init routine. With this change, the clock divider is set in the pm's
> init routine, so it will also operate when the cpuidle driver is not set, which
> is good.
>
> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro•org>
> Reviewed-by: Viresh Kumar <viresh.kumar@linaro•org>
> Reviewed-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung•com>
> Reviewed-by: Tomasz Figa <t.figa@samsung•com>
> ---
>   arch/arm/mach-exynos/cpuidle.c  |   54 ---------------------------------------
>   arch/arm/mach-exynos/pm.c       |   35 +++++++++++++++++++++++++
>   arch/arm/mach-exynos/regs-pmu.h |   19 ++++++++++++++
>   3 files changed, 54 insertions(+), 54 deletions(-)

Sorry that I didn't mention that before, but now I recall that there was 
already a similar patch moving this code to Exynos5250 clock driver, 
which is the best place for setup of any CMU registers and a step 
towards removing one more static IO mapping.

Also one more thing below.

> diff --git a/arch/arm/mach-exynos/cpuidle.c b/arch/arm/mach-exynos/cpuidle.c
> index ce31004..97a441f 100644
> --- a/arch/arm/mach-exynos/cpuidle.c
> +++ b/arch/arm/mach-exynos/cpuidle.c
> @@ -39,25 +39,6 @@
>
>   #define S5P_CHECK_AFTR		0xFCBA0D10
>
> -#define EXYNOS5_PWR_CTRL1			(S5P_VA_CMU + 0x01020)
> -#define EXYNOS5_PWR_CTRL2			(S5P_VA_CMU + 0x01024)
> -
> -#define PWR_CTRL1_CORE2_DOWN_RATIO		(7 << 28)
> -#define PWR_CTRL1_CORE1_DOWN_RATIO		(7 << 16)
> -#define PWR_CTRL1_DIV2_DOWN_EN			(1 << 9)
> -#define PWR_CTRL1_DIV1_DOWN_EN			(1 << 8)
> -#define PWR_CTRL1_USE_CORE1_WFE			(1 << 5)
> -#define PWR_CTRL1_USE_CORE0_WFE			(1 << 4)
> -#define PWR_CTRL1_USE_CORE1_WFI			(1 << 1)
> -#define PWR_CTRL1_USE_CORE0_WFI			(1 << 0)
> -
> -#define PWR_CTRL2_DIV2_UP_EN			(1 << 25)
> -#define PWR_CTRL2_DIV1_UP_EN			(1 << 24)
> -#define PWR_CTRL2_DUR_STANDBY2_VAL		(1 << 16)
> -#define PWR_CTRL2_DUR_STANDBY1_VAL		(1 << 8)
> -#define PWR_CTRL2_CORE2_UP_RATIO		(1 << 4)
> -#define PWR_CTRL2_CORE1_UP_RATIO		(1 << 0)
> -
>   /* Ext-GIC nIRQ/nFIQ is the only wakeup source in AFTR */
>   static void exynos_set_wakeupmask(void)
>   {
> @@ -127,38 +108,6 @@ static int exynos_enter_lowpower(struct cpuidle_device *dev,
>   		return exynos_enter_core0_aftr(dev, drv, new_index);
>   }
>
> -static void __init exynos5_core_down_clk(void)
> -{
> -	unsigned int tmp;
> -
> -	/*
> -	 * Enable arm clock down (in idle) and set arm divider
> -	 * ratios in WFI/WFE state.
> -	 */
> -	tmp = PWR_CTRL1_CORE2_DOWN_RATIO | \
> -	      PWR_CTRL1_CORE1_DOWN_RATIO | \
> -	      PWR_CTRL1_DIV2_DOWN_EN	 | \
> -	      PWR_CTRL1_DIV1_DOWN_EN	 | \
> -	      PWR_CTRL1_USE_CORE1_WFE	 | \
> -	      PWR_CTRL1_USE_CORE0_WFE	 | \
> -	      PWR_CTRL1_USE_CORE1_WFI	 | \
> -	      PWR_CTRL1_USE_CORE0_WFI;
> -	__raw_writel(tmp, EXYNOS5_PWR_CTRL1);
> -
> -	/*
> -	 * Enable arm clock up (on exiting idle). Set arm divider
> -	 * ratios when not in idle along with the standby duration
> -	 * ratios.
> -	 */
> -	tmp = PWR_CTRL2_DIV2_UP_EN	 | \
> -	      PWR_CTRL2_DIV1_UP_EN	 | \
> -	      PWR_CTRL2_DUR_STANDBY2_VAL | \
> -	      PWR_CTRL2_DUR_STANDBY1_VAL | \
> -	      PWR_CTRL2_CORE2_UP_RATIO	 | \
> -	      PWR_CTRL2_CORE1_UP_RATIO;
> -	__raw_writel(tmp, EXYNOS5_PWR_CTRL2);
> -}
> -
>   static struct cpuidle_driver exynos_idle_driver = {
>   	.name			= "exynos_idle",
>   	.owner			= THIS_MODULE,
> @@ -181,9 +130,6 @@ static int exynos_cpuidle_probe(struct platform_device *pdev)
>   {
>   	int ret;
>
> -	if (soc_is_exynos5250())
> -		exynos5_core_down_clk();
> -
>   	if (soc_is_exynos5440())
>   		exynos_idle_driver.state_count = 1;
>
> diff --git a/arch/arm/mach-exynos/pm.c b/arch/arm/mach-exynos/pm.c
> index 9773a00..c4138bf 100644
> --- a/arch/arm/mach-exynos/pm.c
> +++ b/arch/arm/mach-exynos/pm.c
> @@ -140,6 +140,38 @@ static void exynos_cpu_restore_register(void)
>   		      : "cc");
>   }
>
> +static void __init exynos5_core_down_clk(void)
> +{
> +	unsigned int tmp;
> +
> +	/*
> +	 * Enable arm clock down (in idle) and set arm divider
> +	 * ratios in WFI/WFE state.
> +	 */
> +	tmp = EXYNOS5_PWR_CTRL1_CORE2_DOWN_RATIO | \
> +	      EXYNOS5_PWR_CTRL1_CORE1_DOWN_RATIO | \
> +	      EXYNOS5_PWR_CTRL1_DIV2_DOWN_EN	 | \
> +	      EXYNOS5_PWR_CTRL1_DIV1_DOWN_EN	 | \
> +	      EXYNOS5_PWR_CTRL1_USE_CORE1_WFE	 | \
> +	      EXYNOS5_PWR_CTRL1_USE_CORE0_WFE	 | \
> +	      EXYNOS5_PWR_CTRL1_USE_CORE1_WFI	 | \
> +	      EXYNOS5_PWR_CTRL1_USE_CORE0_WFI;
> +	__raw_writel(tmp, EXYNOS5_PWR_CTRL1);
> +
> +	/*
> +	 * Enable arm clock up (on exiting idle). Set arm divider
> +	 * ratios when not in idle along with the standby duration
> +	 * ratios.
> +	 */
> +	tmp = EXYNOS5_PWR_CTRL2_DIV2_UP_EN	 | \
> +	      EXYNOS5_PWR_CTRL2_DIV1_UP_EN	 | \
> +	      EXYNOS5_PWR_CTRL2_DUR_STANDBY2_VAL | \
> +	      EXYNOS5_PWR_CTRL2_DUR_STANDBY1_VAL | \
> +	      EXYNOS5_PWR_CTRL2_CORE2_UP_RATIO	 | \
> +	      EXYNOS5_PWR_CTRL2_CORE1_UP_RATIO;
> +	__raw_writel(tmp, EXYNOS5_PWR_CTRL2);
> +}
> +
>   static int exynos_cpu_suspend(unsigned long arg)
>   {
>   #ifdef CONFIG_CACHE_L2X0
> @@ -244,6 +276,9 @@ static void exynos_pm_resume(void)
>
>   	s3c_pm_do_restore_core(exynos_core_save, ARRAY_SIZE(exynos_core_save));
>
> +	if (soc_is_exynos5250())
> +		exynos5_core_down_clk();
> +

Originally this code was executed at system boot-up, but now it is 
happening on resume from sleep. Is this change desired?

Best regards,
Tomasz

  reply	other threads:[~2014-04-10 13:57 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-04-10  9:55 [PATCH V4 00/20] ARM: exynos: cpuidle: Move the driver to drivers/cpuidle Daniel Lezcano
2014-04-10  9:55 ` [PATCH V4 01/20] ARM: exynos: cpuidle: Prevent forward declaration Daniel Lezcano
2014-04-10  9:55 ` [PATCH V4 02/20] ARM: exynos: cpuidle: Use cpuidle_register Daniel Lezcano
2014-04-10  9:55 ` [PATCH V4 03/20] ARM: exynos: cpuidle: Change function name prefix Daniel Lezcano
2014-04-10  9:55 ` [PATCH V4 04/20] ARM: exynos: cpuidle: Encapsulate register access inside a function Daniel Lezcano
2014-04-10  9:55 ` [PATCH V4 05/20] ARM: exynos: cpuidle: Move some code inside the idle_finisher Daniel Lezcano
2014-04-10  9:55 ` [PATCH V4 06/20] ARM: exynos: cpuidle: Fix S5P_WAKEUP_STAT call Daniel Lezcano
2014-04-10  9:55 ` [PATCH V4 07/20] ARM: exynos: cpuidle: Use the cpu_pm notifier Daniel Lezcano
2014-04-10  9:55 ` [PATCH V4 08/20] ARM: exynos: cpuidle: Move scu_enable in " Daniel Lezcano
2014-04-10  9:55 ` [PATCH V4 09/20] ARM: exynos: cpuidle: Remove ifdef for scu_enable Daniel Lezcano
2014-04-10  9:55 ` [PATCH V4 10/20] ARM: exynos: cpuidle: Move clock setup to pm.c Daniel Lezcano
2014-04-10 13:57   ` Tomasz Figa [this message]
2014-04-10 14:23     ` Daniel Lezcano
2014-04-10 15:34       ` Tomasz Figa
2014-04-11  8:30         ` Daniel Lezcano
2014-04-11  8:49           ` Tomasz Figa
2014-04-11  8:55             ` Daniel Lezcano
2014-04-10  9:55 ` [PATCH V4 11/20] ARM: exynos: cpuidle: Pass wakeup mask parameter to function Daniel Lezcano
2014-04-10  9:55 ` [PATCH V4 12/20] ARM: exynos: cpuidle: Encapsulate boot vector code into a function Daniel Lezcano
2014-04-10  9:55 ` [PATCH V4 13/20] ARM: exynos: cpuidle: Disable cpuidle for 5440 Daniel Lezcano
2014-04-10  9:55 ` [PATCH V4 14/20] ARM: exynos: cpuidle: Encapsulate the AFTR code into a function Daniel Lezcano
2014-04-10  9:55 ` [PATCH V4 15/20] ARM: exynos: cpuidle: Move the AFTR state function into pm.c Daniel Lezcano
2014-04-10  9:55 ` [PATCH V4 16/20] ARM: exynos: cpuidle: Move the power sequence call in the cpu_pm notifier Daniel Lezcano
2014-04-10  9:55 ` [PATCH V4 17/20] ARM: exynos: cpuidle: Move S5P_CHECK_SLEEP into pm.c Daniel Lezcano
2014-04-10  9:55 ` [PATCH V4 18/20] ARM: exynos: cpuidle: Pass the AFTR callback to the platform_data Daniel Lezcano
2014-04-10  9:55 ` [PATCH V4 19/20] ARM: exynos: cpuidle: Cleanup all unneeded headers from cpuidle.c Daniel Lezcano
2014-04-10  9:55 ` [PATCH V4 20/20] ARM: exynos: cpuidle: Move the driver to drivers/cpuidle directory Daniel Lezcano

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=5346A367.2070107@samsung.com \
    --to=t.figa@samsung$(echo .)com \
    --cc=linux-arm-kernel@lists$(echo .)infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html
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