From patchwork Fri Apr 4 07:47:57 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Lezcano X-Patchwork-Id: 3936871 Return-Path: X-Original-To: patchwork-linux-samsung-soc@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 6331C9F357 for ; Fri, 4 Apr 2014 07:48:07 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 809B1203E1 for ; Fri, 4 Apr 2014 07:48:06 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 87A5C203E3 for ; Fri, 4 Apr 2014 07:48:05 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751892AbaDDHsE (ORCPT ); Fri, 4 Apr 2014 03:48:04 -0400 Received: from mail-wi0-f176.google.com ([209.85.212.176]:61004 "EHLO mail-wi0-f176.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752138AbaDDHsD (ORCPT ); Fri, 4 Apr 2014 03:48:03 -0400 Received: by mail-wi0-f176.google.com with SMTP id r20so683928wiv.15 for ; Fri, 04 Apr 2014 00:48:01 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=U0MJRGSLruAV0dNMiwTP1NUJ5jSTOPuk8y3FxBvJ6+Y=; b=fvs66m+yRhncEOQeX3tABAk+2rN7uqHrxHd+zpjN5hcXsR27BxFYUIcIjk13NX9wgE y2DEQg/bATLLrV8T5kJDq2IWdbaRK8zmxbyWeTCUnEO5A/yyfoKwliBsm9hqdQE6BL8i kDpUOB5qyG1LCo+BZfAu8sj2Vj5M7JqBHNz1jjdyunfOhu1GOkB3EsY24PeRgEkJ7aqb 7VvNGPa4xnWBIqlaKXYmPqiqtFM2iwJydms+51EoAntQerCDoQMMnFgHTtuB1ATkFB3K uN9DRAApepXaJgV9/Glh3SU60N590/SSB/Y0hPa4Q7VZMeNAogVZ8oPag5P+pOrIsoX7 g/Tw== X-Gm-Message-State: ALoCoQl+AGnmRY3koVvzZc8MsCYPENzd43ZeWRBvvf5r5EmDc79eAGyGxVIhqEcsJQKbObm7gt18 X-Received: by 10.180.39.173 with SMTP id q13mr2278547wik.26.1396597681845; Fri, 04 Apr 2014 00:48:01 -0700 (PDT) Received: from localhost.localdomain (AToulouse-654-1-451-172.w83-205.abo.wanadoo.fr. [83.205.74.172]) by mx.google.com with ESMTPSA id t1sm3028163wia.1.2014.04.04.00.48.00 for (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Fri, 04 Apr 2014 00:48:01 -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, rjw@rjwysocki.net Subject: [PATCH 11/17] ARM: exynos: cpuidle: Move the power sequence call in the cpu_pm notifier Date: Fri, 4 Apr 2014 09:47:57 +0200 Message-Id: <1396597683-6969-12-git-send-email-daniel.lezcano@linaro.org> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1396597683-6969-1-git-send-email-daniel.lezcano@linaro.org> References: <1396597683-6969-1-git-send-email-daniel.lezcano@linaro.org> Sender: linux-samsung-soc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-samsung-soc@vger.kernel.org X-Spam-Status: No, score=-7.5 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The code to initiate and exit the powerdown sequence is the same in pm.c and cpuidle.c. Let's split the common part in the pm.c and reuse it from the cpu_pm notifier. That is one more step forward to make the cpuidle driver arch indenpendant. Signed-off-by: Daniel Lezcano Reviewed-by: Viresh Kumar --- arch/arm/mach-exynos/cpuidle.c | 21 --------------------- arch/arm/mach-exynos/pm.c | 22 ++++++++++++++++++---- 2 files changed, 18 insertions(+), 25 deletions(-) diff --git a/arch/arm/mach-exynos/cpuidle.c b/arch/arm/mach-exynos/cpuidle.c index 7014654..635b09c 100644 --- a/arch/arm/mach-exynos/cpuidle.c +++ b/arch/arm/mach-exynos/cpuidle.c @@ -77,31 +77,10 @@ static int exynos_enter_core0_aftr(struct cpuidle_device *dev, struct cpuidle_driver *drv, int index) { - unsigned long tmp; - - /* Setting Central Sequence Register for power down mode */ - tmp = __raw_readl(S5P_CENTRAL_SEQ_CONFIGURATION); - tmp &= ~S5P_CENTRAL_LOWPWR_CFG; - __raw_writel(tmp, S5P_CENTRAL_SEQ_CONFIGURATION); - cpu_pm_enter(); cpu_suspend(0, idle_finisher); cpu_pm_exit(); - /* - * If PMU failed while entering sleep mode, WFI will be - * ignored by PMU and then exiting cpu_do_idle(). - * S5P_CENTRAL_LOWPWR_CFG bit will not be set automatically - * in this situation. - */ - tmp = __raw_readl(S5P_CENTRAL_SEQ_CONFIGURATION); - if (!(tmp & S5P_CENTRAL_LOWPWR_CFG)) { - tmp |= S5P_CENTRAL_LOWPWR_CFG; - __raw_writel(tmp, S5P_CENTRAL_SEQ_CONFIGURATION); - /* Clear wakeup state register */ - __raw_writel(0x0, S5P_WAKEUP_STAT); - } - return index; } diff --git a/arch/arm/mach-exynos/pm.c b/arch/arm/mach-exynos/pm.c index 3f2ddef..b364212 100644 --- a/arch/arm/mach-exynos/pm.c +++ b/arch/arm/mach-exynos/pm.c @@ -301,15 +301,19 @@ static __init int exynos_pm_drvinit(void) } arch_initcall(exynos_pm_drvinit); -static int exynos_pm_suspend(void) +static void exynos_pm_central_suspend(void) { unsigned long tmp; /* Setting Central Sequence Register for power down mode */ - tmp = __raw_readl(S5P_CENTRAL_SEQ_CONFIGURATION); tmp &= ~S5P_CENTRAL_LOWPWR_CFG; __raw_writel(tmp, S5P_CENTRAL_SEQ_CONFIGURATION); +} + +static int exynos_pm_suspend(void) +{ + unsigned long tmp; /* Setting SEQ_OPTION register */ @@ -322,7 +326,7 @@ static int exynos_pm_suspend(void) return 0; } -static void exynos_pm_resume(void) +static int exynos_pm_central_resume(void) { unsigned long tmp; @@ -339,9 +343,17 @@ static void exynos_pm_resume(void) /* clear the wakeup state register */ __raw_writel(0x0, S5P_WAKEUP_STAT); /* No need to perform below restore code */ - goto early_wakeup; + return -1; } + return 0; +} + +static void exynos_pm_resume(void) +{ + if (exynos_pm_central_resume()) + goto early_wakeup; + if (!soc_is_exynos5250()) exynos_cpu_restore_register(); @@ -385,6 +397,7 @@ static int exynos_cpu_pm_notifier(struct notifier_block *self, { switch (cmd) { case CPU_PM_ENTER: + exynos_pm_central_suspend(); exynos_cpu_save_register(); exynos_set_wakeupmask(); break; @@ -392,6 +405,7 @@ static int exynos_cpu_pm_notifier(struct notifier_block *self, case CPU_PM_EXIT: scu_enable(S5P_VA_SCU); exynos_cpu_restore_register(); + exynos_pm_central_resume(); break; }