[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH v2 1/3] arm/mpu: Introduce MPU memory region map structure
Introduce pr_t typedef which is a structure having the prbar and prlar members, each being structured as the registers of the AArch32 Armv8-R architecture. Also, define MPU_REGION_RES0 to 0 as there are no reserved 0 bits beyond the BASE or LIMIT bitfields in prbar or prlar respectively. Signed-off-by: Ayan Kumar Halder <ayan.kumar.halder@xxxxxxx> --- Changes from v1 :- 1. Preserve pr_t typedef in arch specific files. 2. Fix typo. xen/arch/arm/include/asm/arm32/mpu.h | 34 ++++++++++++++++++++++++++-- xen/arch/arm/mpu/mm.c | 2 ++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/xen/arch/arm/include/asm/arm32/mpu.h b/xen/arch/arm/include/asm/arm32/mpu.h index f0d4d4055c..fe139a2abe 100644 --- a/xen/arch/arm/include/asm/arm32/mpu.h +++ b/xen/arch/arm/include/asm/arm32/mpu.h @@ -5,10 +5,40 @@ #ifndef __ASSEMBLY__ +/* + * Unlike arm64, there are no reserved 0 bits beyond base and limit bitfield in + * prbar and prlar registers respectively. + */ +#define MPU_REGION_RES0 0x0 + +/* Hypervisor Protection Region Base Address Register */ +typedef union { + struct { + unsigned int xn:1; /* Execute-Never */ + unsigned int ap_0:1; /* Access Permission AP[0] */ + unsigned long ro:1; /* Access Permission AP[1] */ + unsigned int sh:2; /* Shareability */ + unsigned int res0:1; + unsigned int base:26; /* Base Address */ + } reg; + uint32_t bits; +} prbar_t; + +/* Hypervisor Protection Region Limit Address Register */ +typedef union { + struct { + unsigned int en:1; /* Region enable */ + unsigned int ai:3; /* Memory Attribute Index */ + unsigned int res0:2; + unsigned int limit:26; /* Limit Address */ + } reg; + uint32_t bits; +} prlar_t; + /* MPU Protection Region */ typedef struct { - uint32_t prbar; - uint32_t prlar; + prbar_t prbar; + prlar_t prlar; } pr_t; #endif /* __ASSEMBLY__ */ diff --git a/xen/arch/arm/mpu/mm.c b/xen/arch/arm/mpu/mm.c index 86fbe105af..2fb6b822c6 100644 --- a/xen/arch/arm/mpu/mm.c +++ b/xen/arch/arm/mpu/mm.c @@ -167,7 +167,9 @@ pr_t pr_of_addr(paddr_t base, paddr_t limit, unsigned int flags) /* Build up value for PRBAR_EL2. */ prbar = (prbar_t) { .reg = { +#ifdef CONFIG_ARM64 .xn_0 = 0, +#endif .xn = PAGE_XN_MASK(flags), .ap_0 = 0, .ro = PAGE_RO_MASK(flags) -- 2.25.1
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |