[Skiboot] [RFC PATCH v5 03/16] Disable protected execution facility

Ryan Grimm grimm at linux.ibm.com
Fri Feb 28 07:40:10 AEDT 2020


This patch disables Protected Execution Faciltiy (PEF).

This software procedure is needed for the lab because Cronus will be
configured to bring the machine up with PEF on.  Hostboot has a similar
procedure for running with PEF off.

Skiboot can run with PEF on but the kernel cannot; the kernel will take
a machine check when trying to write a protected resource, such as the
PTCR.

So, use this until we have an ultravisor, or if we want to use BML with
Cronus without UV = 1.

Signed-off-by: Ryan Grimm <grimm at linux.ibm.com>
---
 asm/misc.S          | 39 +++++++++++++++++++++++++++++++++++++++
 include/processor.h |  3 +++
 2 files changed, 42 insertions(+)

diff --git a/asm/misc.S b/asm/misc.S
index f9dea492..9d2f3b6e 100644
--- a/asm/misc.S
+++ b/asm/misc.S
@@ -277,3 +277,42 @@ start_uv:
 	ld      %r0,16(%r1)
 	mtlr    %r0
 	blr
+
+/*
+ * Exit UV mode and disable Protected Execution Facility
+ * For each core, this should be run on all secondary threads first to bring
+ * them out of UV mode.  Then, it is called by the primary thread to disable
+ * PEF and bring it out of UV mode.  All threads will then be running in HV
+ * mode.  The only way to reenable UV mode is with a reboot.
+ *
+ * Power9 hardware requires [h]srr1 to be set explicitly.
+ *
+ * r3 = 1 if primary thread
+ *      0 if secondary thread
+ */
+.global exit_uv_mode
+exit_uv_mode:
+        mfmsr   %r4
+        LOAD_IMM64(%r5, ~MSR_S)
+        and     %r4,%r4,%r5
+        mtspr   SPR_USRR1,%r4
+
+        mfspr   %r4,SPR_HSRR1
+        and     %r4,%r4,%r5
+        mtspr   SPR_HSRR1,%r3
+
+        mfspr   %r4,SPR_SRR1
+        and     %r4,%r4,%r5
+        mtspr   SPR_SRR1,%r4
+
+        cmpdi   %r3,1
+        bne     1f
+        mfspr   %r4, SPR_SMFCTRL
+        LOAD_IMM64(%r5, ~PPC_BIT(0))
+        and     %r4,%r4,%r5
+        mtspr   SPR_SMFCTRL,%r4
+1:
+        isync
+        mflr    %r4
+        mtspr   SPR_USRR0,%r4
+        urfid
diff --git a/include/processor.h b/include/processor.h
index f1a88d32..65e4a07b 100644
--- a/include/processor.h
+++ b/include/processor.h
@@ -66,6 +66,9 @@
 #define SPR_HMEER	0x151	/* HMER interrupt enable mask */
 #define SPR_PCR		0x152
 #define SPR_AMOR	0x15d
+#define SPR_USRR0	0x1fa   /* RW: Ultravisor Save/Restore Register 0 */
+#define SPR_USRR1	0x1fb   /* RW: Ultravisor Save/Restore Register 1 */
+#define SPR_SMFCTRL	0x1ff   /* RW: Secure Memory Facility Control */
 #define SPR_PSSCR	0x357   /* RW: Stop status and control (ISA 3) */
 #define SPR_TSCR	0x399
 #define SPR_HID0	0x3f0
-- 
2.21.0



More information about the Skiboot mailing list