Index: sys/arm64/arm64/locore.S =================================================================== --- sys/arm64/arm64/locore.S +++ sys/arm64/arm64/locore.S @@ -722,7 +722,7 @@ MAIR_ATTR(MAIR_NORMAL_WB, VM_MEMATTR_WRITE_BACK) | \ MAIR_ATTR(MAIR_NORMAL_WT, VM_MEMATTR_WRITE_THROUGH) tcr: - .quad (TCR_TxSZ(64 - VIRT_BITS) | TCR_TG1_4K | \ + .quad (TCR_TxSZ(64 - VIRT_BITS) | TCR_TBI0 | TCR_TBI1 | TCR_TG1_4K | \ TCR_CACHE_ATTRS | TCR_SMP_ATTRS) sctlr_set: /* Bits to set */ Index: sys/arm64/arm64/trap.c =================================================================== --- sys/arm64/arm64/trap.c +++ sys/arm64/arm64/trap.c @@ -419,7 +419,7 @@ exception = ESR_ELx_EXCEPTION(esr); switch (exception) { case EXCP_INSN_ABORT_L: - far = READ_SPECIALREG(far_el1); + far = READ_SPECIALREG(far_el1) & 0xffffffffffff; /* * Userspace may be trying to train the branch predictor to @@ -435,7 +435,7 @@ case EXCP_UNKNOWN: case EXCP_DATA_ABORT_L: case EXCP_DATA_ABORT: - far = READ_SPECIALREG(far_el1); + far = READ_SPECIALREG(far_el1) & 0xffffffffffff; break; } intr_enable(); Index: sys/arm64/include/armreg.h =================================================================== --- sys/arm64/include/armreg.h +++ sys/arm64/include/armreg.h @@ -622,6 +622,8 @@ #define TCR_ASID_SHIFT 36 #define TCR_ASID_WIDTH 1 #define TCR_ASID_16 (0x1UL << TCR_ASID_SHIFT) +#define TCR_TBI0 (0x1UL << 37) +#define TCR_TBI1 (0x1UL << 38) #define TCR_IPS_SHIFT 32 #define TCR_IPS_WIDTH 3