From patchwork Tue May 19 14:49:12 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tomeu Vizoso X-Patchwork-Id: 6438721 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id E36EF9F38D for ; Tue, 19 May 2015 14:52:49 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 1C92120602 for ; Tue, 19 May 2015 14:52:49 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.9]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 1F956205F9 for ; Tue, 19 May 2015 14:52:48 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1Yuiqd-0003qi-Aa; Tue, 19 May 2015 14:50:23 +0000 Received: from mail-wi0-x235.google.com ([2a00:1450:400c:c05::235]) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1YuiqU-0002MR-75 for linux-arm-kernel@lists.infradead.org; Tue, 19 May 2015 14:50:15 +0000 Received: by wicmx19 with SMTP id mx19so120810180wic.0 for ; Tue, 19 May 2015 07:49:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id; bh=FkhqYj4zyttMGKOiMVBshxlWzPZ23qWchvor2i1h4pI=; b=s1CFruZUReVbRT1EUg3j2ib0OlOLwb8DrzXNYbxCqKr8bisPA1qEmBQ8GgawCT3BEb xpopOSWX66yUGb26fJTPajLXQiGvw1USLt3tMgO4cyDmr7s4Q0o33uDWmQkuEkJOzyNE 48NTfIvYpS/9JLTk8UFWWsvcoR1OdZSmP/3rVWw6DCOPVL/Q90L4gep+x3bHiN3igk3g fCKnDQ9LCfsjarSQDnnCZH5pyCerNV4Q5BuIly210Ue6mBw6VpSDJ/OXD6XVqdV1J30d dij+sDczpy5lVQahYFBi/YVFLId2t0eKv+HHDpJmqKCjJhc/5/8Nkyz18fgdwt5zfx8G DcIA== X-Received: by 10.194.239.99 with SMTP id vr3mr55961180wjc.151.1432046991783; Tue, 19 May 2015 07:49:51 -0700 (PDT) Received: from cizrna.lan ([109.72.12.94]) by mx.google.com with ESMTPSA id be3sm17677201wib.21.2015.05.19.07.49.48 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 19 May 2015 07:49:49 -0700 (PDT) From: Tomeu Vizoso To: linux-pm@vger.kernel.org Subject: [PATCH v3] ARM: tegra: cpuidle: implement cpuidle_state.enter_freeze() Date: Tue, 19 May 2015 16:49:12 +0200 Message-Id: <1432046953-12945-1-git-send-email-tomeu.vizoso@collabora.com> X-Mailer: git-send-email 2.4.1 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20150519_075014_473123_392E5D52 X-CRM114-Status: GOOD ( 14.16 ) X-Spam-Score: -0.7 (/) Cc: Alexandre Courbot , Lorenzo Pieralisi , Russell King , Daniel Lezcano , Tomeu Vizoso , Stephen Warren , "Rafael J. Wysocki" , linux-kernel@vger.kernel.org, Bartlomiej Zolnierkiewicz , Thierry Reding , linux-tegra@vger.kernel.org, Kukjin Kim , Thomas Gleixner , Ingo Molnar , linux-arm-kernel@lists.infradead.org X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Spam-Status: No, score=-4.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED, T_DKIM_INVALID, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable 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 This callback is expected to do the same as enter() but it has to guarantee that interrupts aren't enabled at any point in its execution, as the tick is frozen. It will be called when the system goes to suspend-to-idle and will reduce power usage because CPUs won't be awaken for unnecessary IRQs. By setting the CPUIDLE_FLAG_TIMER_STOP flag, we can reuse the same code for both the enter() and enter_freeze() callbacks. Signed-off-by: Tomeu Vizoso Cc: Rafael J. Wysocki --- v3: * Set CPUIDLE_FLAG_TIMER_STOP to simplify things as suggested by Lorenzo Pieralisi v2: * Disable FIQs also when suspending-to-idle --- arch/arm/mach-tegra/cpuidle-tegra114.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/arch/arm/mach-tegra/cpuidle-tegra114.c b/arch/arm/mach-tegra/cpuidle-tegra114.c index 155807f..7e59ac0 100644 --- a/arch/arm/mach-tegra/cpuidle-tegra114.c +++ b/arch/arm/mach-tegra/cpuidle-tegra114.c @@ -44,16 +44,12 @@ static int tegra114_idle_power_down(struct cpuidle_device *dev, tegra_set_cpu_in_lp2(); cpu_pm_enter(); - tick_broadcast_enter(); - call_firmware_op(prepare_idle); /* Do suspend by ourselves if the firmware does not implement it */ if (call_firmware_op(do_idle, 0) == -ENOSYS) cpu_suspend(0, tegra30_sleep_cpu_secondary_finish); - tick_broadcast_exit(); - cpu_pm_exit(); tegra_clear_cpu_in_lp2(); @@ -61,6 +57,13 @@ static int tegra114_idle_power_down(struct cpuidle_device *dev, return index; } + +static void tegra114_idle_enter_freeze(struct cpuidle_device *dev, + struct cpuidle_driver *drv, + int index) +{ + tegra114_idle_power_down(dev, drv, index); +} #endif static struct cpuidle_driver tegra_idle_driver = { @@ -72,8 +75,10 @@ static struct cpuidle_driver tegra_idle_driver = { #ifdef CONFIG_PM_SLEEP [1] = { .enter = tegra114_idle_power_down, + .enter_freeze = tegra114_idle_enter_freeze, .exit_latency = 500, .target_residency = 1000, + .flags = CPUIDLE_FLAG_TIMER_STOP, .power_usage = 0, .name = "powered-down", .desc = "CPU power gated",