Page MenuHomeFreeBSD

D1810.id4285.diff
No OneTemporary

D1810.id4285.diff

Index: sys/arm/arm/locore-v6.S
===================================================================
--- sys/arm/arm/locore-v6.S
+++ sys/arm/arm/locore-v6.S
@@ -45,6 +45,11 @@
#define PTE1_SIZE L1_S_SIZE
#endif
+#if __ARM_ARCH >= 7
+ /* For HYP instructions */
+ .arch_extension virt
+#endif
+
/* A small statically-allocated stack used only during initarm() and AP startup. */
#define INIT_ARM_STACK_SIZE 2048
@@ -76,6 +81,18 @@
mov r10, r2 /* Save meta data */
mov r11, r3 /* Future expansion */
+#if __ARM_ARCH >= 7
+ /* Leave HYP mode */
+ mrs r0, cpsr
+ and r0, r0, #(PSR_MODE) /* Mode is in the low 5 bits of CPSR */
+ teq r0, #(PSR_HYP32_MODE) /* Hyp Mode? */
+ bne no_hyp
+ adr lr, no_hyp
+ msr elr_hyp, lr
+ eret
+no_hyp:
+#endif
+
/*
* Check whether data cache is enabled. If it is, then we know
* current tags are valid (not power-on garbage values) and there
@@ -398,6 +415,19 @@
#if defined(SMP)
ASENTRY_NP(mpentry)
+
+#if __ARM_ARCH >= 7
+ /* Leave HYP mode */
+ mrs r0, cpsr
+ and r0, r0, #(PSR_MODE) /* Mode is in the low 5 bits of CPSR */
+ teq r0, #(PSR_HYP32_MODE) /* Hyp Mode? */
+ bne no_hyp_mp
+ adr lr, no_hyp_mp
+ msr elr_hyp, lr
+ eret
+no_hyp_mp:
+#endif
+
/* Make sure interrupts are disabled. */
cpsid ifa

File Metadata

Mime Type
text/plain
Expires
Wed, Jan 21, 8:30 AM (20 h, 17 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
27797977
Default Alt Text
D1810.id4285.diff (1 KB)

Event Timeline