From patchwork Thu Apr 10 09:55:41 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Lezcano X-Patchwork-Id: 28142 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-qa0-f72.google.com (mail-qa0-f72.google.com [209.85.216.72]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id AB28F20671 for ; Thu, 10 Apr 2014 09:56:04 +0000 (UTC) Received: by mail-qa0-f72.google.com with SMTP id hw13sf9366141qab.3 for ; Thu, 10 Apr 2014 02:56:04 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:delivered-to:from:to:cc:subject :date:message-id:in-reply-to:references:sender:precedence:list-id :x-original-sender:x-original-authentication-results:mailing-list :list-post:list-help:list-archive:list-unsubscribe; bh=7PEpmloJbb/hZx9abwDhR8Hg6C/hUpPBt68j6lINd5o=; b=Fm1PJ4Wx9bTPkbAtE3f3II+jmSyZpSV14PQj8796wqU77dJcgUe89rJJxAIXdfTEFa K/MhmsyHHK0joPgKhYOd0754KWH48NhJPXxB0RfX/+x3vzgbkH558gC0/rDUVYHs3WLw dBiKUnwPPAF3C5P3zlF/4MFUiq4fcsBUPNdoCu22LBiFE9FxvjLEvDoAeB9SIgTyQNut NjscoEfSbHBSzwi8PScR/jnF+scZruI77T8oPoOX2yfnTJZzFI6T7nvmvPcCwgswRTU6 yZRp0hqF9lDGfMy9uizp+xafoeU0MYmxIAUjd4a3zi0mribqlvAa0XmPDSBKnjp4UYpn brig== X-Gm-Message-State: ALoCoQkgooZbgt1WSzfQa3T/iSnqdJcWF9XfX/QAAeriNKdvKLCBQY1jKy7bIw1nXkgRwb4qvXlT X-Received: by 10.224.6.198 with SMTP id a6mr7617509qaa.6.1397123764439; Thu, 10 Apr 2014 02:56:04 -0700 (PDT) MIME-Version: 1.0 X-BeenThere: patchwork-forward@linaro.org Received: by 10.140.40.200 with SMTP id x66ls1064811qgx.46.gmail; Thu, 10 Apr 2014 02:56:04 -0700 (PDT) X-Received: by 10.220.103.141 with SMTP id k13mr278059vco.25.1397123764304; Thu, 10 Apr 2014 02:56:04 -0700 (PDT) Received: from mail-vc0-f172.google.com (mail-vc0-f172.google.com [209.85.220.172]) by mx.google.com with ESMTPS id i3si604354vca.185.2014.04.10.02.56.04 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Thu, 10 Apr 2014 02:56:04 -0700 (PDT) Received-SPF: neutral (google.com: 209.85.220.172 is neither permitted nor denied by best guess record for domain of patch+caf_=patchwork-forward=linaro.org@linaro.org) client-ip=209.85.220.172; Received: by mail-vc0-f172.google.com with SMTP id la4so3258986vcb.3 for ; Thu, 10 Apr 2014 02:56:04 -0700 (PDT) X-Received: by 10.52.161.168 with SMTP id xt8mr11468915vdb.23.1397123764218; Thu, 10 Apr 2014 02:56:04 -0700 (PDT) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patch@linaro.org Received: by 10.220.221.72 with SMTP id ib8csp45041vcb; Thu, 10 Apr 2014 02:56:03 -0700 (PDT) X-Received: by 10.68.174.225 with SMTP id bv1mr18713102pbc.12.1397123763353; Thu, 10 Apr 2014 02:56:03 -0700 (PDT) Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id xe4si1873677pbc.456.2014.04.10.02.56.02; Thu, 10 Apr 2014 02:56:02 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-samsung-soc-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965625AbaDJJ4B (ORCPT + 9 others); Thu, 10 Apr 2014 05:56:01 -0400 Received: from mail-wi0-f171.google.com ([209.85.212.171]:34694 "EHLO mail-wi0-f171.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S965611AbaDJJzs (ORCPT ); Thu, 10 Apr 2014 05:55:48 -0400 Received: by mail-wi0-f171.google.com with SMTP id q5so10360214wiv.10 for ; Thu, 10 Apr 2014 02:55:47 -0700 (PDT) X-Received: by 10.194.174.42 with SMTP id bp10mr1375956wjc.57.1397123747437; Thu, 10 Apr 2014 02:55:47 -0700 (PDT) Received: from localhost.localdomain (AToulouse-654-1-377-242.w86-199.abo.wanadoo.fr. [86.199.232.242]) by mx.google.com with ESMTPSA id hu7sm15690125wib.10.2014.04.10.02.55.46 for (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Thu, 10 Apr 2014 02:55:46 -0700 (PDT) From: Daniel Lezcano To: kgene.kim@samsung.com Cc: linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, t.figa@samsung.com, linaro-kernel@lists.linaro.org, b.zolnierkie@samsung.com, sachin.kamat@linaro.org, viresh.kumar@linaro.org, rjw@rjwysocki.net Subject: [PATCH V4 10/20] ARM: exynos: cpuidle: Move clock setup to pm.c Date: Thu, 10 Apr 2014 11:55:41 +0200 Message-Id: <1397123751-1957-11-git-send-email-daniel.lezcano@linaro.org> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1397123751-1957-1-git-send-email-daniel.lezcano@linaro.org> References: <1397123751-1957-1-git-send-email-daniel.lezcano@linaro.org> Sender: linux-samsung-soc-owner@vger.kernel.org Precedence: list List-ID: X-Mailing-List: linux-samsung-soc@vger.kernel.org X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: daniel.lezcano@linaro.org X-Original-Authentication-Results: mx.google.com; spf=neutral (google.com: 209.85.220.172 is neither permitted nor denied by best guess record for domain of patch+caf_=patchwork-forward=linaro.org@linaro.org) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org X-Google-Group-Id: 836684582541 List-Post: , List-Help: , List-Archive: List-Unsubscribe: , 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 Reviewed-by: Viresh Kumar Reviewed-by: Bartlomiej Zolnierkiewicz Reviewed-by: Tomasz Figa --- 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(-) 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(); + if (!soc_is_exynos5250()) scu_enable(S5P_VA_SCU); diff --git a/arch/arm/mach-exynos/regs-pmu.h b/arch/arm/mach-exynos/regs-pmu.h index 4f6a256..35c4eb3 100644 --- a/arch/arm/mach-exynos/regs-pmu.h +++ b/arch/arm/mach-exynos/regs-pmu.h @@ -313,4 +313,23 @@ #define EXYNOS5_OPTION_USE_RETENTION (1 << 4) +#define EXYNOS5_PWR_CTRL1 (S5P_VA_CMU + 0x01020) +#define EXYNOS5_PWR_CTRL2 (S5P_VA_CMU + 0x01024) + +#define EXYNOS5_PWR_CTRL1_CORE2_DOWN_RATIO (7 << 28) +#define EXYNOS5_PWR_CTRL1_CORE1_DOWN_RATIO (7 << 16) +#define EXYNOS5_PWR_CTRL1_DIV2_DOWN_EN (1 << 9) +#define EXYNOS5_PWR_CTRL1_DIV1_DOWN_EN (1 << 8) +#define EXYNOS5_PWR_CTRL1_USE_CORE1_WFE (1 << 5) +#define EXYNOS5_PWR_CTRL1_USE_CORE0_WFE (1 << 4) +#define EXYNOS5_PWR_CTRL1_USE_CORE1_WFI (1 << 1) +#define EXYNOS5_PWR_CTRL1_USE_CORE0_WFI (1 << 0) + +#define EXYNOS5_PWR_CTRL2_DIV2_UP_EN (1 << 25) +#define EXYNOS5_PWR_CTRL2_DIV1_UP_EN (1 << 24) +#define EXYNOS5_PWR_CTRL2_DUR_STANDBY2_VAL (1 << 16) +#define EXYNOS5_PWR_CTRL2_DUR_STANDBY1_VAL (1 << 8) +#define EXYNOS5_PWR_CTRL2_CORE2_UP_RATIO (1 << 4) +#define EXYNOS5_PWR_CTRL2_CORE1_UP_RATIO (1 << 0) + #endif /* __ASM_ARCH_REGS_PMU_H */