|
@@ -1081,6 +1081,28 @@ static void cpu_enable_ssbs(const struct arm64_cpu_capabilities *__unused)
|
|
|
}
|
|
|
#endif /* CONFIG_ARM64_SSBD */
|
|
|
|
|
|
+#ifdef CONFIG_ARM64_PAN
|
|
|
+static void cpu_enable_pan(const struct arm64_cpu_capabilities *__unused)
|
|
|
+{
|
|
|
+ /*
|
|
|
+ * We modify PSTATE. This won't work from irq context as the PSTATE
|
|
|
+ * is discarded once we return from the exception.
|
|
|
+ */
|
|
|
+ WARN_ON_ONCE(in_interrupt());
|
|
|
+
|
|
|
+ sysreg_clear_set(sctlr_el1, SCTLR_EL1_SPAN, 0);
|
|
|
+ asm(SET_PSTATE_PAN(1));
|
|
|
+}
|
|
|
+#endif /* CONFIG_ARM64_PAN */
|
|
|
+
|
|
|
+#ifdef CONFIG_ARM64_RAS_EXTN
|
|
|
+static void cpu_clear_disr(const struct arm64_cpu_capabilities *__unused)
|
|
|
+{
|
|
|
+ /* Firmware may have left a deferred SError in this register. */
|
|
|
+ write_sysreg_s(0, SYS_DISR_EL1);
|
|
|
+}
|
|
|
+#endif /* CONFIG_ARM64_RAS_EXTN */
|
|
|
+
|
|
|
static const struct arm64_cpu_capabilities arm64_features[] = {
|
|
|
{
|
|
|
.desc = "GIC system register CPU interface",
|
|
@@ -1824,9 +1846,3 @@ static int __init enable_mrs_emulation(void)
|
|
|
}
|
|
|
|
|
|
core_initcall(enable_mrs_emulation);
|
|
|
-
|
|
|
-void cpu_clear_disr(const struct arm64_cpu_capabilities *__unused)
|
|
|
-{
|
|
|
- /* Firmware may have left a deferred SError in this register. */
|
|
|
- write_sysreg_s(0, SYS_DISR_EL1);
|
|
|
-}
|