Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754424AbcKUSiw (ORCPT ); Mon, 21 Nov 2016 13:38:52 -0500 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:58199 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753144AbcKUSiv (ORCPT ); Mon, 21 Nov 2016 13:38:51 -0500 From: "Gautham R. Shenoy" To: Michael Ellerman , Benjamin Herrenschmidt , Paul Mackerras , Michael Neuling , Vaidyanathan Srinivasan , "Shreyas B. Prabhu" Cc: "linuxppc-dev@lists.ozlabs.org>, linux-kernel@vger.kernel.org>, skiboot"@lists.ozlabs.org, "Gautham R. Shenoy" Subject: [RFC/PATCH] powernv: Handle wakeup from stop due to SRESET Date: Tue, 22 Nov 2016 00:07:49 +0530 X-Mailer: git-send-email 1.8.3.1 X-TM-AS-GCONF: 00 X-Content-Scanned: Fidelis XPS MAILER x-cbid: 16112118-8235-0000-0000-000009A72F93 X-IBM-SpamModules-Scores: X-IBM-SpamModules-Versions: BY=3.00006118; HX=3.00000240; KW=3.00000007; PH=3.00000004; SC=3.00000189; SDB=6.00783523; UDB=6.00378388; IPR=6.00561142; BA=6.00004898; NDR=6.00000001; ZLA=6.00000005; ZF=6.00000009; ZB=6.00000000; ZP=6.00000000; ZH=6.00000000; ZU=6.00000002; MB=3.00013396; XFM=3.00000011; UTC=2016-11-21 18:38:48 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 16112118-8236-0000-0000-000036A3D4A3 Message-Id: <1479753469-10625-1-git-send-email-ego@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2016-11-21_13:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=0 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1609300000 definitions=main-1611210314 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1839 Lines: 56 From: "Gautham R. Shenoy" The existing code doesn't handle the case when CPU which was in a hardware-idle state (nap,sleep,winkle on POWER8 and various stop states on POWER9) gets woken up due to a System Reset interrupt. This patch checks if the CPU was woken up due to System Reset, in which case, after restoring the required hardware state, it jumps to the system reset handler. Signed-off-by: Gautham R. Shenoy --- arch/powerpc/kernel/idle_book3s.S | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/arch/powerpc/kernel/idle_book3s.S b/arch/powerpc/kernel/idle_book3s.S index 72dac0b..0098879 100644 --- a/arch/powerpc/kernel/idle_book3s.S +++ b/arch/powerpc/kernel/idle_book3s.S @@ -353,6 +353,18 @@ ALT_FTR_SECTION_END_NESTED_IFSET(CPU_FTR_ARCH_207S, 66); \ ld r3,ORIG_GPR3(r1); /* Restore original r3 */ \ 20: nop; +#define CHECK_SRESET_INTERRUPT \ +BEGIN_FTR_SECTION_NESTED(67); \ + mfspr r0,SPRN_SRR1; \ + rlwinm r0,r0,45-31,0xf; /* Extract wake reason field (P8,9) */ \ + cmpwi r0,0x4; /* System Reset ? */ \ + bne 21f; \ + b system_reset_common; \ + b .; /* We shouldn't return here */ \ +FTR_SECTION_ELSE_NESTED(67); \ + nop ; \ +ALT_FTR_SECTION_END_NESTED_IFSET(CPU_FTR_ARCH_207S, 67); \ +21: nop; /* * r3 - requested stop state @@ -644,6 +656,7 @@ _GLOBAL(pnv_wakeup_loss) ld r1,PACAR1(r13) BEGIN_FTR_SECTION CHECK_HMI_INTERRUPT + CHECK_SRESET_INTERRUPT END_FTR_SECTION_IFSET(CPU_FTR_HVMODE) REST_NVGPRS(r1) REST_GPR(2, r1) @@ -666,6 +679,7 @@ _GLOBAL(pnv_wakeup_noloss) bne pnv_wakeup_loss BEGIN_FTR_SECTION CHECK_HMI_INTERRUPT + CHECK_SRESET_INTERRUPT END_FTR_SECTION_IFSET(CPU_FTR_HVMODE) ld r1,PACAR1(r13) ld r6,_CCR(r1) -- 1.8.3.1