From patchwork Thu Mar 30 12:10:04 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 745226 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [103.22.144.68]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3vv3qv2zkHz9ryr for ; Thu, 30 Mar 2017 23:30:19 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="C+uedEEc"; dkim-atps=neutral Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 3vv3qv1wRYzDrLd for ; Thu, 30 Mar 2017 23:30:19 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="C+uedEEc"; dkim-atps=neutral X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Received: from mail-pg0-x242.google.com (mail-pg0-x242.google.com [IPv6:2607:f8b0:400e:c05::242]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 3vv3Nq1YzMzDqml for ; Thu, 30 Mar 2017 23:10:19 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="C+uedEEc"; dkim-atps=neutral Received: by mail-pg0-x242.google.com with SMTP id 79so9594246pgf.0 for ; Thu, 30 Mar 2017 05:10:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=VRE1xWO0fDIfaaZD6F9pLAt1l72Hf8/Z0EJWzhTixio=; b=C+uedEEc5ty9d+tX/HCrqYgSwkMN4aSkRUKTKAzbKNgnkd/Kx/qNVfcRZGSBs/ikgs 7QwijMRdiS+LcygTxPvckRFnJPBqkakwIjNq6xAgPPSrIQQlinE9w4lLSskqTIfRfG6d llK38EMsxZBYP7nNPa+ikyEpV2tcvkdcDpxlrRZJlWrkZPT/0fDlVQE6I5rfnTuWQEUV XiOuxDgK5A/5blXXg1/fJdEmE+qNwA/4MsxMjt/q+RfXEC8x3MMxPZWBU25RpTG49mCX cy1dhgXXtGToNhRDpZtX/mWzbJOC7Ns0H6CZXNK+v7Fxklz2mKnegKGO5vD8NxpMoszo CypA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=VRE1xWO0fDIfaaZD6F9pLAt1l72Hf8/Z0EJWzhTixio=; b=CtmjUU7YPvPanKprjaJvCSEYRul0gyN5H8txEUZbCxhVr21SCTayCcfOX2gTcgTgxE LD5gI5L6RiLPSDXAbbsd/3wNZodZ0d+G9Z3CoaRatKCBXU+vhl9sEj+35jKiCDyaV6nE zPeoExE7i5j9P974D4CKYuOXfnK+bVuZ6AKZTVDcHw7Lfldq0G+cccf8nxcrbhgk1TJ+ oWLF+9fTg1vfaxl4cvG8KwYG1CXeYAAV4nkNZ/dlQg18noRrT6K4/eAkT3y9iSgxrQPJ RY8MQKSgkezIJystnZ8HhwA5mhT6OER/uxeWRCBMkuvRAUOsxw/IYRTIyCCXprvj/iMj ofAw== X-Gm-Message-State: AFeK/H3jk6mIpXUccSKLW7NI//VL6Zdwi4Jnl62ELmuU+saG2e0/jLNtBL9hTRBijWh98A== X-Received: by 10.98.13.16 with SMTP id v16mr5881222pfi.38.1490875816790; Thu, 30 Mar 2017 05:10:16 -0700 (PDT) Received: from roar.au.ibm.com ([203.221.48.234]) by smtp.gmail.com with ESMTPSA id x68sm4318512pfx.45.2017.03.30.05.10.13 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 30 Mar 2017 05:10:15 -0700 (PDT) From: Nicholas Piggin To: linuxppc-dev@lists.ozlabs.org Subject: [PATCH] powerpc/powernv: Fix opal entry/exit MSR_RI coverage Date: Thu, 30 Mar 2017 22:10:04 +1000 Message-Id: <20170330121004.11991-1-npiggin@gmail.com> X-Mailer: git-send-email 2.11.0 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Nicholas Piggin , Mahesh Salgaonkar Errors-To: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" There are some windows in opal entry/exit that can not recover from a re-entrant interrupt (e.g., machine check) due to using SRR registers, but they currently do not have MSR_RI clear. These were found by machine check injection coverage tests using the powerpc system simulator (Mambo). Signed-off-by: Nicholas Piggin --- arch/powerpc/boot/ppc_asm.h | 12 +++++++----- arch/powerpc/include/asm/ppc_asm.h | 10 ++++++---- arch/powerpc/platforms/powernv/opal-wrappers.S | 15 +++++++++------ 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/arch/powerpc/boot/ppc_asm.h b/arch/powerpc/boot/ppc_asm.h index b03373d8b386..68e388ee94fe 100644 --- a/arch/powerpc/boot/ppc_asm.h +++ b/arch/powerpc/boot/ppc_asm.h @@ -67,13 +67,15 @@ #define MSR_LE 0x0000000000000001 #define FIXUP_ENDIAN \ - tdi 0, 0, 0x48; /* Reverse endian of b . + 8 */ \ - b $+36; /* Skip trampoline if endian is good */ \ - .long 0x05009f42; /* bcl 20,31,$+4 */ \ - .long 0xa602487d; /* mflr r10 */ \ - .long 0x1c004a39; /* addi r10,r10,28 */ \ + tdi 0,0,0x48; /* Reverse endian of b . + 8 */ \ + b $+44; /* Skip trampoline if endian is good */ \ .long 0xa600607d; /* mfmsr r11 */ \ .long 0x01006b69; /* xori r11,r11,1 */ \ + .long 0x00004039; /* li r10,0 */ \ + .long 0x6401417d; /* mtmsrd r10,1 */ \ + .long 0x05009f42; /* bcl 20,31,$+4 */ \ + .long 0xa602487d; /* mflr r10 */ \ + .long 0x14004a39; /* addi r10,r10,20 */ \ .long 0xa6035a7d; /* mtsrr0 r10 */ \ .long 0xa6037b7d; /* mtsrr1 r11 */ \ .long 0x2400004c /* rfid */ diff --git a/arch/powerpc/include/asm/ppc_asm.h b/arch/powerpc/include/asm/ppc_asm.h index 359c44341761..9d47cba1da3f 100644 --- a/arch/powerpc/include/asm/ppc_asm.h +++ b/arch/powerpc/include/asm/ppc_asm.h @@ -770,12 +770,14 @@ END_FTR_SECTION_IFCLR(CPU_FTR_601) #else #define FIXUP_ENDIAN \ tdi 0,0,0x48; /* Reverse endian of b . + 8 */ \ - b $+36; /* Skip trampoline if endian is good */ \ - .long 0x05009f42; /* bcl 20,31,$+4 */ \ - .long 0xa602487d; /* mflr r10 */ \ - .long 0x1c004a39; /* addi r10,r10,28 */ \ + b $+44; /* Skip trampoline if endian is good */ \ .long 0xa600607d; /* mfmsr r11 */ \ .long 0x01006b69; /* xori r11,r11,1 */ \ + .long 0x00004039; /* li r10,0 */ \ + .long 0x6401417d; /* mtmsrd r10,1 */ \ + .long 0x05009f42; /* bcl 20,31,$+4 */ \ + .long 0xa602487d; /* mflr r10 */ \ + .long 0x14004a39; /* addi r10,r10,20 */ \ .long 0xa6035a7d; /* mtsrr0 r10 */ \ .long 0xa6037b7d; /* mtsrr1 r11 */ \ .long 0x2400004c /* rfid */ diff --git a/arch/powerpc/platforms/powernv/opal-wrappers.S b/arch/powerpc/platforms/powernv/opal-wrappers.S index da8a0f7a035c..458109b1c291 100644 --- a/arch/powerpc/platforms/powernv/opal-wrappers.S +++ b/arch/powerpc/platforms/powernv/opal-wrappers.S @@ -67,15 +67,14 @@ END_FTR_SECTION(0, 1); \ OPAL_BRANCH(opal_tracepoint_entry) \ mfcr r11; \ stw r11,8(r1); \ - li r11,0; \ - ori r11,r11,MSR_EE; \ std r12,PACASAVEDMSR(r13); \ - andc r12,r12,r11; \ - mtmsrd r12,1; \ LOAD_REG_ADDR(r11,opal_return); \ mtlr r11; \ - li r11,MSR_DR|MSR_IR|MSR_LE;\ + lis r11,MSR_EE@h; \ + ori r11,r11,MSR_DR|MSR_IR|MSR_LE;\ andc r12,r12,r11; \ + li r11,0; \ + mtmsrd r11,1; /* EE=0 RI=0 */ \ mtspr SPRN_HSRR1,r12; \ LOAD_REG_ADDR(r11,opal); \ ld r12,8(r11); \ @@ -95,9 +94,11 @@ opal_return: lwz r4,8(r1); ld r5,PPC_LR_STKOFF(r1); ld r6,PACASAVEDMSR(r13); + mtcr r4; + li r4,0; + mtmsrd r4,1; /* EE=0 RI=0 */ mtspr SPRN_SRR0,r5; mtspr SPRN_SRR1,r6; - mtcr r4; rfid opal_real_call: @@ -108,6 +109,8 @@ opal_real_call: mtlr r11 li r11,MSR_LE andc r12,r12,r11 + li r11,0; + mtmsrd r11,1; /* EE=0 RI=0 */ mtspr SPRN_HSRR1,r12 LOAD_REG_ADDR(r11,opal) ld r12,8(r11)