summaryrefslogtreecommitdiff
path: root/arch/powerpc/include/asm/ultravisor.h
diff options
context:
space:
mode:
authorClaudio Carvalho <cclaudio@linux.ibm.com>2019-08-22 00:48:36 -0300
committerMichael Ellerman <mpe@ellerman.id.au>2019-08-30 09:40:16 +1000
commit5223134029a87db925ecc9449f9501bad391a52e (patch)
tree7dcd197f295a1ed6f08a824ed5144d91ca7f8f6b /arch/powerpc/include/asm/ultravisor.h
parent139a1d2842ec181cf017502a46bb8d947682a960 (diff)
powerpc/mm: Write to PTCR only if ultravisor disabled
In ultravisor enabled systems, PTCR becomes ultravisor privileged only for writing and an attempt to write to it will cause a Hypervisor Emulation Assitance interrupt. This patch uses the set_ptcr_when_no_uv() function to restrict PTCR writing to only when ultravisor is disabled. Signed-off-by: Claudio Carvalho <cclaudio@linux.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/20190822034838.27876-6-cclaudio@linux.ibm.com
Diffstat (limited to 'arch/powerpc/include/asm/ultravisor.h')
-rw-r--r--arch/powerpc/include/asm/ultravisor.h12
1 files changed, 12 insertions, 0 deletions
diff --git a/arch/powerpc/include/asm/ultravisor.h b/arch/powerpc/include/asm/ultravisor.h
index 6fe1f365dec8..d7aa97aa7834 100644
--- a/arch/powerpc/include/asm/ultravisor.h
+++ b/arch/powerpc/include/asm/ultravisor.h
@@ -10,10 +10,22 @@
#include <asm/asm-prototypes.h>
#include <asm/ultravisor-api.h>
+#include <asm/firmware.h>
int early_init_dt_scan_ultravisor(unsigned long node, const char *uname,
int depth, void *data);
+/*
+ * In ultravisor enabled systems, PTCR becomes ultravisor privileged only for
+ * writing and an attempt to write to it will cause a Hypervisor Emulation
+ * Assistance interrupt.
+ */
+static inline void set_ptcr_when_no_uv(u64 val)
+{
+ if (!firmware_has_feature(FW_FEATURE_ULTRAVISOR))
+ mtspr(SPRN_PTCR, val);
+}
+
static inline int uv_register_pate(u64 lpid, u64 dw0, u64 dw1)
{
return ucall_norets(UV_WRITE_PATE, lpid, dw0, dw1);