From patchwork Fri Mar 10 13:15:45 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tim Gardner X-Patchwork-Id: 737410 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) by ozlabs.org (Postfix) with ESMTP id 3vfnp61bKHz9s7p; Sat, 11 Mar 2017 00:16:14 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=canonical-com.20150623.gappssmtp.com header.i=@canonical-com.20150623.gappssmtp.com header.b="G5H/RVtj"; dkim-atps=neutral Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.76) (envelope-from ) id 1cmKOu-0000Fn-ME; Fri, 10 Mar 2017 13:16:08 +0000 Received: from mail-io0-f174.google.com ([209.85.223.174]) by huckleberry.canonical.com with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.76) (envelope-from ) id 1cmKOl-0000Bv-TJ for kernel-team@lists.ubuntu.com; Fri, 10 Mar 2017 13:16:00 +0000 Received: by mail-io0-f174.google.com with SMTP id l7so47967158ioe.3 for ; Fri, 10 Mar 2017 05:15:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical-com.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id:in-reply-to:references; bh=Qo2hoO/XfSGAGRSx7bS/yKUK95BO/2L4r8pKZ8tawPM=; b=G5H/RVtjxeCwpeKeIbYXpCQv1yYQM4zk4qlBlv2VVgu+N8+eNrJNtDprGIvwnfcmSa y4r66+K4oAeHPN7sVntdh5wp/1kf8Qhh8m/V1dH2O5FCN8czm5bJn5SfeT4wosYSun+W oKHYx7ah7tTNX3XcyH4TJ4dz4msgvvpvSimWySgb9b8hMvZbhHdq2ZJHFSTj2PxgwINk bgsdISI6tzb29iN6BsHG4pDZxqATM8ZRNrb+R5UrYohR3Owkz/4RPUH0D9QfRlvIKffF owpAimRqvTOLFA2BuZMkuhz8iLqUZL/qmS3qnhqiPmy/Mb1X+L7MCWkXueN0CONAfssf 3NAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=Qo2hoO/XfSGAGRSx7bS/yKUK95BO/2L4r8pKZ8tawPM=; b=cEDaD4Om6J6/+W2xzrX+DuqkcknqodM/pfK5WbFtJQW+z7JGPp5c90af26iyXsL/6y wiuMD1ZcOtqJbNY4+Nn6axLHCBZAxnXqw2nWTQza0r6hhRZP4cwxPegqOIcxt4XVYspF 6iBZBmuefhWR3HFJZW3o9KkRuMnb9eJy8QP6NAAyXyoV8vD8zltH4OubyCJ7JQ6Av3ru pLMlhBPk2vRRQVSKux7yhmQflIGqaXn7XLU4N8GDOWPSMD/Bd1nxodX7UtCzWTcluL1a /8pyae62z/h5PSxJtTk9/D37B4YHdgCfFgxV1/lg1WH+4IG85F5tpv6NstZtotQ7Ndqq WPWg== X-Gm-Message-State: AMke39kzTTiLgKGxURlxL/6fa1JhFehQog2NvjiknvRamkPCmBD5XZ2gK9sLoUpgJPTYD0mN X-Received: by 10.107.8.90 with SMTP id 87mr18175675ioi.111.1489151758555; Fri, 10 Mar 2017 05:15:58 -0800 (PST) Received: from localhost.localdomain (host-98-127-250-84.bln-mt.client.bresnan.net. [98.127.250.84]) by smtp.gmail.com with ESMTPSA id h12sm4348476iod.57.2017.03.10.05.15.57 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 10 Mar 2017 05:15:58 -0800 (PST) From: Tim Gardner To: kernel-team@lists.ubuntu.com Subject: [PATCH 1/6] powernv:idle: Add IDLE_STATE_ENTER_SEQ_NORET macro Date: Fri, 10 Mar 2017 06:15:45 -0700 Message-Id: <1489151750-6289-2-git-send-email-tim.gardner@canonical.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1489151750-6289-1-git-send-email-tim.gardner@canonical.com> References: <1489151750-6289-1-git-send-email-tim.gardner@canonical.com> X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.14 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: kernel-team-bounces@lists.ubuntu.com From: "Gautham R. Shenoy" BugLink: http://bugs.launchpad.net/bugs/1666197 Currently all the low-power idle states are expected to wake up at reset vector 0x100. Which is why the macro IDLE_STATE_ENTER_SEQ that puts the CPU to an idle state and never returns. On ISA v3.0, when the ESL and EC bits in the PSSCR are zero, the CPU is expected to wake up at the next instruction of the idle instruction. This patch adds a new macro named IDLE_STATE_ENTER_SEQ_NORET for the no-return variant and reuses the name IDLE_STATE_ENTER_SEQ for a variant that allows resuming operation at the instruction next to the idle-instruction. Backport of commit 823b7bd5156a ("powernv:idle: Add IDLE_STATE_ENTER_SEQ_NORET macro") Signed-off-by: Gautham R. Shenoy Signed-off-by: Tim Gardner --- arch/powerpc/include/asm/cpuidle.h | 3 +++ arch/powerpc/kernel/exceptions-64s.S | 6 +++--- arch/powerpc/kernel/idle_book3s.S | 10 +++++----- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/arch/powerpc/include/asm/cpuidle.h b/arch/powerpc/include/asm/cpuidle.h index 3919332..c91163c 100644 --- a/arch/powerpc/include/asm/cpuidle.h +++ b/arch/powerpc/include/asm/cpuidle.h @@ -29,6 +29,9 @@ extern u64 pnv_first_deep_stop_state; 1: cmpd cr0,r0,r0; \ bne 1b; \ IDLE_INST; \ + +#define IDLE_STATE_ENTER_SEQ_NORET(IDLE_INST) \ + IDLE_STATE_ENTER_SEQ(IDLE_INST) \ b . #endif /* CONFIG_PPC_P7_NAP */ diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S index bffec73..238307d 100644 --- a/arch/powerpc/kernel/exceptions-64s.S +++ b/arch/powerpc/kernel/exceptions-64s.S @@ -1301,12 +1301,12 @@ machine_check_handle_early: lbz r3,PACA_THREAD_IDLE_STATE(r13) cmpwi r3,PNV_THREAD_NAP bgt 10f - IDLE_STATE_ENTER_SEQ(PPC_NAP) + IDLE_STATE_ENTER_SEQ_NORET(PPC_NAP) /* No return */ 10: cmpwi r3,PNV_THREAD_SLEEP bgt 2f - IDLE_STATE_ENTER_SEQ(PPC_SLEEP) + IDLE_STATE_ENTER_SEQ_NORET(PPC_SLEEP) /* No return */ 2: @@ -1320,7 +1320,7 @@ machine_check_handle_early: */ ori r13,r13,1 SET_PACA(r13) - IDLE_STATE_ENTER_SEQ(PPC_WINKLE) + IDLE_STATE_ENTER_SEQ_NORET(PPC_WINKLE) /* No return */ 4: #endif diff --git a/arch/powerpc/kernel/idle_book3s.S b/arch/powerpc/kernel/idle_book3s.S index 72dac0b..be90e2f 100644 --- a/arch/powerpc/kernel/idle_book3s.S +++ b/arch/powerpc/kernel/idle_book3s.S @@ -205,7 +205,7 @@ pnv_enter_arch207_idle_mode: stb r3,PACA_THREAD_IDLE_STATE(r13) cmpwi cr3,r3,PNV_THREAD_SLEEP bge cr3,2f - IDLE_STATE_ENTER_SEQ(PPC_NAP) + IDLE_STATE_ENTER_SEQ_NORET(PPC_NAP) /* No return */ 2: /* Sleep or winkle */ @@ -239,7 +239,7 @@ pnv_fastsleep_workaround_at_entry: common_enter: /* common code for all the threads entering sleep or winkle */ bgt cr3,enter_winkle - IDLE_STATE_ENTER_SEQ(PPC_SLEEP) + IDLE_STATE_ENTER_SEQ_NORET(PPC_SLEEP) fastsleep_workaround_at_entry: ori r15,r15,PNV_CORE_IDLE_LOCK_BIT @@ -261,7 +261,7 @@ fastsleep_workaround_at_entry: enter_winkle: bl save_sprs_to_stack - IDLE_STATE_ENTER_SEQ(PPC_WINKLE) + IDLE_STATE_ENTER_SEQ_NORET(PPC_WINKLE) /* * r3 - requested stop state @@ -280,7 +280,7 @@ power_enter_stop: ld r4,ADDROFF(pnv_first_deep_stop_state)(r5) cmpd r3,r4 bge 2f - IDLE_STATE_ENTER_SEQ(PPC_STOP) + IDLE_STATE_ENTER_SEQ_NORET(PPC_STOP) 2: /* * Entering deep idle state. @@ -302,7 +302,7 @@ lwarx_loop_stop: bl save_sprs_to_stack - IDLE_STATE_ENTER_SEQ(PPC_STOP) + IDLE_STATE_ENTER_SEQ_NORET(PPC_STOP) _GLOBAL(power7_idle) /* Now check if user or arch enabled NAP mode */