Skip to content

Commit

Permalink
arm64: Add CPTR_TRAP_ALL and use it in vmm
Browse files Browse the repository at this point in the history
Add a new macro that enables all CPTR_EL2 traps. This helps ensure we
trap all extensions we don't support.

Sponsored by:	Arm Ltd
Differential Revision:	https://reviews.freebsd.org/D46516
  • Loading branch information
zxombie committed Sep 11, 2024
1 parent b6b004e commit b30d555
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 2 deletions.
2 changes: 2 additions & 0 deletions sys/arm64/include/hypervisor.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,11 +53,13 @@

/* CPTR_EL2 - Architecture feature trap register */
/* Valid if HCR_EL2.E2H == 0 */
#define CPTR_TRAP_ALL 0xc01037ff /* Enable all traps */
#define CPTR_RES0 0x7fefc800
#define CPTR_RES1 0x000033ff
#define CPTR_TFP 0x00000400
#define CPTR_TTA 0x00100000
/* Valid if HCR_EL2.E2H == 1 */
#define CPTR_E2H_TRAP_ALL 0xd0000000
#define CPTR_E2H_FPEN 0x00300000
#define CPTR_E2H_TTA 0x10000000
/* Unconditionally valid */
Expand Down
5 changes: 3 additions & 2 deletions sys/arm64/vmm/vmm_reset.c
Original file line number Diff line number Diff line change
Expand Up @@ -170,9 +170,10 @@ reset_vm_el2_regs(void *vcpu)
* and floating point functionality to EL2.
*/
if (in_vhe())
el2ctx->cptr_el2 = CPACR_FPEN_TRAP_NONE;
el2ctx->cptr_el2 = CPTR_E2H_TRAP_ALL | CPTR_E2H_FPEN;
else
el2ctx->cptr_el2 = CPTR_RES1;
el2ctx->cptr_el2 = CPTR_TRAP_ALL & ~CPTR_TFP;
el2ctx->cptr_el2 &= ~CPTR_TCPAC;
/*
* Disable interrupts in the guest. The guest OS will re-enable
* them.
Expand Down

0 comments on commit b30d555

Please sign in to comment.