Introduce PMSAv8 memory protection unit
cover Introduce PMSAv8 memory protection unit
Hi,
This series is an attempt to add support for PMSAv8 MPU defined by ARMv8R/M architecture.
I'm have a doubt about adding dedicated config option, so both v7 and v8 versions of PMSA are covered with CONFIG_MPU, but I'd glad to hear what people think of it.
Thanks!
Vladimir Murzin (5):
ARM: NOMMU: Move PMSAv7 MPU under it's own namespace
ARM: NOMMU: Reorganise __setup_mpu
ARM: NOMMU: Postpone MPU activation till __after_proc_init
ARM: NOMMU: Make _stext and _end meet PMSAv8 alignment restrictions
ARM: NOMMU: Support PMSAv8 MPU
arch/arm/include/asm/mpu.h | 112 ++++++++++----- arch/arm/include/asm/v7m.h | 14 +- arch/arm/kernel/asm-offsets.c | 8 +- arch/arm/kernel/head-nommu.S | 260 +++++++++++++++++++++++++++-------- arch/arm/kernel/vmlinux.lds.S | 8 ++ arch/arm/mm/Makefile | 2 +- arch/arm/mm/nommu.c | 32 +++++ arch/arm/mm/pmsa-v7.c | 59 ++++---- arch/arm/mm/pmsa-v8.c | 307 ++++++++++++++++++++++++++++++++++++++++++ 9 files changed, 668 insertions(+), 134 deletions(-) create mode 100644 arch/arm/mm/pmsa-v8.c
Signature · 1 line
2.0.0
RFC PATCH 1/5 ARM: NOMMU: Move PMSAv7 MPU under it's own namespace
We are going to support different MPU which programming model is not compatible to PMSAv7, so move PMSAv7 MPU under it's own namespace.
--- arch/arm/include/asm/mpu.h | 62 +++++++++++++++----------------- arch/arm/include/asm/v7m.h | 6 ++-- arch/arm/kernel/asm-offsets.c | 6 ++-- arch/arm/kernel/head-nommu.S | 84 ++++++++++++++++++++++++------------------- arch/arm/mm/nommu.c | 26 ++++++++++++++ arch/arm/mm/pmsa-v7.c | 59 +++++++++++++----------------- 6 files changed, 133 insertions(+), 110 deletions(-)
arch/arm/include/asm/mpu.h +29 -33
@@ -14,50 +14,50 @@#define MMFR0_PMSAv7 (3 << 4)/* MPU D/I Size Register fields */ -#define MPU_RSR_SZ 1 -#define MPU_RSR_EN 0 -#define MPU_RSR_SD 8 +#define PMSAv7_RSR_SZ 1 +#define PMSAv7_RSR_EN 0 +#define PMSAv7_RSR_SD 8/* Number of subregions (SD) */ -#define MPU_NR_SUBREGS 8 -#define MPU_MIN_SUBREG_SIZE 256 +#define PMSAv7_NR_SUBREGS 8 +#define PMSAv7_MIN_SUBREG_SIZE 256/* The D/I RSR value for an enabled region spanning the whole of memory */ -#define MPU_RSR_ALL_MEM 63 +#define PMSAv7_RSR_ALL_MEM 63/* Individual bits in the DR/IR ACR */ -#define MPU_ACR_XN (1 << 12) -#define MPU_ACR_SHARED (1 << 2) +#define PMSAv7_ACR_XN (1 << 12) +#define PMSAv7_ACR_SHARED (1 << 2)/* C, B and TEX[2:0] bits only have semantic meanings when grouped */ -#define MPU_RGN_CACHEABLE 0xB -#define MPU_RGN_SHARED_CACHEABLE (MPU_RGN_CACHEABLE | MPU_ACR_SHARED) -#define MPU_RGN_STRONGLY_ORDERED 0 +#define PMSAv7_RGN_CACHEABLE 0xB +#define PMSAv7_RGN_SHARED_CACHEABLE (PMSAv7_RGN_CACHEABLE | PMSAv7_ACR_SHARED) +#define PMSAv7_RGN_STRONGLY_ORDERED 0/* Main region should only be shared for SMP */ #ifdef CONFIG_SMP -#define MPU_RGN_NORMAL (MPU_RGN_CACHEABLE | MPU_ACR_SHARED) +#define PMSAv7_RGN_NORMAL (PMSAv7_RGN_CACHEABLE | PMSAv7_ACR_SHARED)#else -#define MPU_RGN_NORMAL MPU_RGN_CACHEABLE +#define PMSAv7_RGN_NORMAL PMSAv7_RGN_CACHEABLE#endif /* Access permission bits of ACR (only define those that we use)*/ -#define MPU_AP_PL1RO_PL0NA (0x5 << 8) -#define MPU_AP_PL1RW_PL0RW (0x3 << 8) -#define MPU_AP_PL1RW_PL0R0 (0x2 << 8) -#define MPU_AP_PL1RW_PL0NA (0x1 << 8) +#define PMSAv7_AP_PL1RO_PL0NA (0x5 << 8) +#define PMSAv7_AP_PL1RW_PL0RW (0x3 << 8) +#define PMSAv7_AP_PL1RW_PL0R0 (0x2 << 8) +#define PMSAv7_AP_PL1RW_PL0NA (0x1 << 8)/* For minimal static MPU region configurations */ -#define MPU_PROBE_REGION 0 -#define MPU_BG_REGION 1 -#define MPU_RAM_REGION 2 -#define MPU_ROM_REGION 3 +#define PMSAv7_PROBE_REGION 0 +#define PMSAv7_BG_REGION 1 +#define PMSAv7_RAM_REGION 2 +#define PMSAv7_ROM_REGION 3/* Maximum number of regions Linux is interested in */ -#define MPU_MAX_REGIONS 16 +#define MPU_MAX_REGIONS 16 -#define MPU_DATA_SIDE 0 -#define MPU_INSTR_SIDE 1 +#define PMSAv7_DATA_SIDE 0 +#define PMSAv7_INSTR_SIDE 1#ifndef __ASSEMBLY__
@@ -75,16 +75,12 @@ struct mpu_rgn_info {extern struct mpu_rgn_info mpu_rgn_info;#ifdef CONFIG_ARM_MPU - -extern void __init adjust_lowmem_bounds_mpu (void ); -extern void __init mpu_setup (void ); - +extern void __init pmsav7_adjust_lowmem_bounds (void ); +extern void __init pmsav7_setup (void );#else - -static inline void adjust_lowmem_bounds_mpu (void ) {} -static inline void mpu_setup (void ) {} - -#endif /* !CONFIG_ARM_MPU */ +static inline void pmsav7_adjust_lowmem_bounds (void ) {}; +static inline void pmsav7_setup (void ) {}; +#endif #endif /* __ASSEMBLY__ */
arch/arm/include/asm/v7m.h +3 -3
@@ -64,9 +64,9 @@#define MPU_CTRL_ENABLE 1#define MPU_CTRL_PRIVDEFENA (1 << 2) -#define MPU_RNR 0x98 -#define MPU_RBAR 0x9c -#define MPU_RASR 0xa0 +#define PMSAv7_RNR 0x98 +#define PMSAv7_RBAR 0x9c +#define PMSAv7_RASR 0xa0/* Cache opeartions */ #define V7M_SCB_ICIALLU 0x250/* I-cache invalidate all to PoU */
arch/arm/kernel/asm-offsets.c +3 -3
@@ -194,9 +194,9 @@ int main(void)DEFINE (MPU_RNG_INFO_USED , offsetof(struct mpu_rgn_info , used));DEFINE (MPU_RNG_SIZE ,sizeof (struct mpu_rgn )); -DEFINE (MPU_RGN_DRBAR , offsetof(struct mpu_rgn , drbar)); -DEFINE (MPU_RGN_DRSR , offsetof(struct mpu_rgn , drsr)); -DEFINE (MPU_RGN_DRACR , offsetof(struct mpu_rgn , dracr)); +DEFINE (MPU_RGN_DRBAR , offsetof(struct mpu_rgn , drbar)); +DEFINE (MPU_RGN_DRSR , offsetof(struct mpu_rgn , drsr)); +DEFINE (MPU_RGN_DRACR , offsetof(struct mpu_rgn , dracr));#endif return 0 ; }
arch/arm/kernel/head-nommu.S +48 -36
187 lines not on this page · raw message
arch/arm/mm/nommu.c +26 -0
@@ -100,6 +100,32 @@ void __init arm_mm_memblock_reserve(void)memblock_reserve (0 ,1 ); } +static void __init adjust_lowmem_bounds_mpu (void ) +{ +unsigned long pmsa =read_cpuid_ext (CPUID_EXT_MMFR0 ) &MMFR0_PMSA ; + +switch (pmsa) { +case MMFR0_PMSAv7: +pmsav7_adjust_lowmem_bounds (); +break ; +default : +break ; + } +} + +static void __init mpu_setup (void ) +{ +unsigned long pmsa =read_cpuid_ext (CPUID_EXT_MMFR0 ) &MMFR0_PMSA ; + +switch (pmsa) { +case MMFR0_PMSAv7: +pmsav7_setup (); +break ; +default : +break ; + } +} +void __init adjust_lowmem_bounds (void ) {phys_addr_t end;
arch/arm/mm/pmsa-v7.c +24 -35
183 lines not on this page · raw message
Signature · 1 line
2.0.0
RFC PATCH 2/5 ARM: NOMMU: Reorganise __setup_mpu
In reply to Vladimir MurzinCurrently, we have mixed code placement between .head.text and .text depends on configuration we are building:
_text M R(UP) R(SMP)
======================================================
__setup_mpu __HEAD __HEAD text __after_proc_init __HEAD __HEAD text __mmap_switched text text text
We are going to support another variant of MPU which is different to PMSAv7 in sense overlapping MPU regions are not allowed, so this patch makes boundaries between these sections precise and consistent:
_text M R(UP) R(SMP)
======================================================
__setup_mpu __HEAD __HEAD __HEAD __after_proc_init text text text __mmap_switched text text text
Additionally, it paves a path to postpone MPU activation till __after_proc_init where we do set SCTLR anyway and can return directly to __mmap_switched.
--- arch/arm/kernel/head-nommu.S | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
arch/arm/kernel/head-nommu.S +5 -2
@@ -75,8 +75,8 @@ ENTRY(stext) ldr r12, [r10, #PROCINFO_INITFUNC] add r12, r12, r10 ret r12 -1: bl __after_proc_init - b __mmap_switched +1: ldr lr, =__mmap_switched + b __after_proc_init ENDPROC(stext) #ifdef CONFIG_SMP
@@ -123,6 +123,7 @@ __secondary_data: /* * Set the Control Register and Read the process ID. */ + .text __after_proc_init: #ifdef CONFIG_CPU_CP15 /*
@@ -202,6 +203,7 @@ ENDPROC(__after_proc_init) * * r6: Value to be written to DRSR (and IRSR if required) for PMSAv7_RAM_REGION */ + __HEAD ENTRY(__setup_mpu)
@@ -301,6 +303,7 @@ ENDPROC(__setup_pmsa_v7) * r6: pointer at mpu_rgn_info */ + .text ENTRY(__secondary_setup_mpu) /* Use MPU region info supplied by __cpu_up */ ldr r6, [r7] @ get secondary_data.mpu_rgn_info
Signature · 1 line
2.0.0
RFC PATCH 3/5 ARM: NOMMU: Postpone MPU activation till __after_proc_init
In reply to Vladimir MurzinThis patch postpone MPU activation till __after_proc_init (which is placed in .text section) rather than doing it in __setup_mpu. It allows us ignore used-only-once .head.text section while programming PMSAv8 MPU (for PMSAv7 it stays covered anyway).
--- arch/arm/kernel/head-nommu.S | 45 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 23 deletions(-)
arch/arm/kernel/head-nommu.S +22 -23
@@ -125,11 +125,24 @@ __secondary_data: */ .text __after_proc_init: +#ifdef CONFIG_ARM_MPU +M_CLASS(movw r12, #:lower16:BASEADDR_V7M_SCB) +M_CLASS(movt r12, #:upper16:BASEADDR_V7M_SCB) +M_CLASS(ldr r3, [r12, 0x50]) +AR_CLASS(mrc p15, 0, r3, c0, c1, 4) @ Read ID_MMFR0 + and r3, r3, #(MMFR0_PMSA) @ PMSA field + teq r3, #(MMFR0_PMSAv7) @ PMSA v7 +#endif #ifdef CONFIG_CPU_CP15 /* * CP15 system control register value returned in r0 from * the CPU init function. */ + +#ifdef CONFIG_ARM_MPU + biceq r0, r0, #CR_BR @ Disable the 'default mem-map' + orreq r0, r0, #CR_M @ Set SCTRL.M (MPU on) +#endif #if defined(CONFIG_ALIGNMENT_TRAP) && __LINUX_ARM_ARCH__ < 6 orr r0, r0, #CR_A #else
@@ -145,7 +158,15 @@ __after_proc_init: bic r0, r0, #CR_I #endif mcr p15, 0, r0, c1, c0, 0 @ write control reg + isb #elif defined (CONFIG_CPU_V7M) +#ifdef CONFIG_ARM_MPU + ldreq r3, [r12, MPU_CTRL] + biceq r3, #MPU_CTRL_PRIVDEFENA + orreq r3, #MPU_CTRL_ENABLE + streq r3, [r12, MPU_CTRL] + isb +#endif /* For V7M systems we want to modify the CCR similarly to the SCTLR */ #ifdef CONFIG_CPU_DCACHE_DISABLE bic r0, r0, #V7M_SCB_CCR_DC
@@ -156,9 +177,7 @@ __after_proc_init: #ifdef CONFIG_CPU_ICACHE_DISABLE bic r0, r0, #V7M_SCB_CCR_IC #endif - movw r3, #:lower16:(BASEADDR_V7M_SCB + V7M_SCB_CCR) - movt r3, #:upper16:(BASEADDR_V7M_SCB + V7M_SCB_CCR) - str r0, [r3] + str r0, [r12, V7M_SCB_CCR] #endif /* CONFIG_CPU_CP15 elif CONFIG_CPU_V7M */ ret lr ENDPROC(__after_proc_init)
@@ -282,19 +301,6 @@ M_CLASS(ldr r0, [r12, #MPU_TYPE]) setup_region r0, r5, r6, PMSAv7_INSTR_SIDE, r12 @ XIP_PHYS_ADDR, shared, enabled 3: isb #endif - - /* Enable the MPU */ -AR_CLASS(mrc p15, 0, r0, c1, c0, 0) @ Read SCTLR -AR_CLASS(bic r0, r0, #CR_BR) @ Disable the 'default mem-map' -AR_CLASS(orr r0, r0, #CR_M) @ Set SCTRL.M (MPU on) -AR_CLASS(mcr p15, 0, r0, c1, c0, 0) @ Enable MPU - -M_CLASS(ldr r0, [r12, #MPU_CTRL]) -M_CLASS(bic r0, #MPU_CTRL_PRIVDEFENA) -M_CLASS(orr r0, #MPU_CTRL_ENABLE) -M_CLASS(str r0, [r12, #MPU_CTRL]) - isb - ret lr ENDPROC(__setup_pmsa_v7)
@@ -352,13 +358,6 @@ ENTRY(__secondary_setup_pmsa_v7) cmp r4, #0 bgt 1b - /* Enable the MPU */ - mrc p15, 0, r0, c1, c0, 0 @ Read SCTLR - bic r0, r0, #CR_BR @ Disable the 'default mem-map' - orr r0, r0, #CR_M @ Set SCTRL.M (MPU on) - mcr p15, 0, r0, c1, c0, 0 @ Enable MPU - isb - ret lr ENDPROC(__secondary_setup_pmsa_v7)
Signature · 1 line
2.0.0
RFC PATCH 4/5 ARM: NOMMU: Make _stext and _end meet PMSAv8 alignment restrictions
In reply to Vladimir MurzinPMSAv8 requires addresses to be either 32 (for M-class) or 64 bytes (for R-class) aligned. To keep it simple align to 64 bytes always.
For XIP we already have alignment restrictions in place from PMSAv7, but they can be potentially relaxed for PMSAv8.
--- arch/arm/kernel/vmlinux.lds.S | 8 ++++++++ 1 file changed, 8 insertions(+)
arch/arm/kernel/vmlinux.lds.S +8 -0
@@ -8,6 +8,8 @@ #include "vmlinux-xip.lds.S" #else +#include <linux/sizes.h> + #include <asm-generic/vmlinux.lds.h> #include <asm/cache.h> #include <asm/thread_info.h>
@@ -102,6 +104,9 @@ SECTIONS . = ALIGN(1<<SECTION_SHIFT); #endif +#ifdef CONFIG_ARM_MPU + . = ALIGN(SZ_64); +#endif .text : { /* Real text segment */ _stext = .; /* Text and read-only data */ IDMAP_TEXT
@@ -295,6 +300,9 @@ SECTIONS #endif BSS_SECTION(0, 0, 0) +#ifdef CONFIG_ARM_MPU + . = ALIGN(SZ_64); +#endif _end = .; STABS_DEBUG
Signature · 1 line
2.0.0
RFC PATCH 5/5 ARM: NOMMU: Support PMSAv8 MPU
In reply to Vladimir MurzinARMv8R/M architecture defines new memory protection scheme - PMSAv8 which is not compatible with PMSAv7.
Key differences to PMSAv7 are:
- Region geometry is defined by base and limit addresses
- Addresses need to be either 32 or 64 byte aligned
- No region priority due to overlapping regions are not allowed
- It is unified, i.e. no distinction between data/instruction regions
- Memory attributes are controlled via MAIR
This patch implements support for PMSAv8 MPU defined by ARMv8R/M architecture.
--- arch/arm/include/asm/mpu.h | 52 ++++++- arch/arm/include/asm/v7m.h | 8 ++ arch/arm/kernel/asm-offsets.c | 2 + arch/arm/kernel/head-nommu.S | 132 ++++++++++++++++++ arch/arm/mm/Makefile | 2 +- arch/arm/mm/nommu.c | 6 + arch/arm/mm/pmsa-v8.c | 307 ++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 505 insertions(+), 4 deletions(-) create mode 100644 arch/arm/mm/pmsa-v8.c
arch/arm/include/asm/mpu.h +49 -3
@@ -12,6 +12,7 @@/* ID_MMFR0 data relevant to MPU */ #define MMFR0_PMSA (0xF << 4)#define MMFR0_PMSAv7 (3 << 4) +#define MMFR0_PMSAv8 (4 << 4)/* MPU D/I Size Register fields */ #define PMSAv7_RSR_SZ 1
@@ -47,12 +48,43 @@#define PMSAv7_AP_PL1RW_PL0R0 (0x2 << 8)#define PMSAv7_AP_PL1RW_PL0NA (0x1 << 8) +#define PMSAv8_BAR_XN 1 + +#define PMSAv8_LAR_EN 1 +#define PMSAv8_LAR_IDX (n) (((n) & 0x7) << 1) + + +#define PMSAv8_AP_PL1RW_PL0NA (0 << 1) +#define PMSAv8_AP_PL1RW_PL0RW (1 << 1) +#define PMSAv8_AP_PL1RO_PL0RO (3 << 1) + +#ifdef CONFIG_SMP +#define PMSAv8_RGN_SHARED (3 << 3) // inner sharable +#else +#define PMSAv8_RGN_SHARED (0 << 3) +#endif + +#define PMSAv8_RGN_DEVICE_nGnRnE 0 +#define PMSAv8_RGN_NORMAL 1 + +#define PMSAv8_MAIR (attr, mt) ((attr) << ((mt) * 8)) + +#ifdef CONFIG_CPU_V7M +#define PMSAv8_MINALIGN 32 +#else +#define PMSAv8_MINALIGN 64 +#endif +/* For minimal static MPU region configurations */ #define PMSAv7_PROBE_REGION 0#define PMSAv7_BG_REGION 1#define PMSAv7_RAM_REGION 2#define PMSAv7_ROM_REGION 3 +/* Fixed for PMSAv8 only */ +#define PMSAv8_XIP_REGION 0 +#define PMSAv8_KERNEL_REGION 1 +/* Maximum number of regions Linux is interested in */ #define MPU_MAX_REGIONS 16
@@ -63,9 +95,18 @@struct mpu_rgn {/* Assume same attributes for d/i-side */ -u32 drbar; -u32 drsr; -u32 dracr; +union { +u32 drbar;/* PMSAv7 */ +u32 prbar;/* PMSAv8 */ + }; +union { +u32 drsr;/* PMSAv7 */ +u32 prlar;/* PMSAv8 */ + }; +union { +u32 dracr;/* PMSAv7 */ +u32 unused;/* not used in PMSAv8 */ + }; };struct mpu_rgn_info {
@@ -76,10 +117,15 @@ extern struct mpu_rgn_info mpu_rgn_info;#ifdef CONFIG_ARM_MPU extern void __init pmsav7_adjust_lowmem_bounds (void ); +extern void __init pmsav8_adjust_lowmem_bounds (void ); +extern void __init pmsav7_setup (void ); +extern void __init pmsav8_setup (void );#else static inline void pmsav7_adjust_lowmem_bounds (void ) {}; +static inline void pmsav8_adjust_lowmem_bounds (void ) {};static inline void pmsav7_setup (void ) {}; +static inline void pmsav8_setup (void ) {};#endif #endif /* __ASSEMBLY__ */
arch/arm/include/asm/v7m.h +8 -0
@@ -68,6 +68,14 @@#define PMSAv7_RBAR 0x9c#define PMSAv7_RASR 0xa0 +#define PMSAv8_RNR 0x98 +#define PMSAv8_RBAR 0x9c +#define PMSAv8_RLAR 0xa0 +#define PMSAv8_RBAR_A (n) (PMSAv8_RBAR + 8*(n)) +#define PMSAv8_RLAR_A (n) (PMSAv8_RLAR + 8*(n)) +#define PMSAv8_MAIR0 0xc0 +#define PMSAv8_MAIR1 0xc4 +/* Cache opeartions */ #define V7M_SCB_ICIALLU 0x250/* I-cache invalidate all to PoU */ #define V7M_SCB_ICIMVAU 0x258/* I-cache invalidate by MVA to PoU */
arch/arm/kernel/asm-offsets.c +2 -0
@@ -197,6 +197,8 @@ int main(void)DEFINE (MPU_RGN_DRBAR , offsetof(struct mpu_rgn , drbar));DEFINE (MPU_RGN_DRSR , offsetof(struct mpu_rgn , drsr));DEFINE (MPU_RGN_DRACR , offsetof(struct mpu_rgn , dracr)); +DEFINE (MPU_RGN_PRBAR , offsetof(struct mpu_rgn , prbar)); +DEFINE (MPU_RGN_PRLAR , offsetof(struct mpu_rgn , prlar));#endif return 0 ; }
arch/arm/kernel/head-nommu.S +132 -0
162 lines not on this page · raw message
arch/arm/mm/Makefile +1 -1
@@ -10,7 +10,7 @@ obj-$(CONFIG_MMU) += fault-armv.o flush.o idmap.o ioremap.o \ ifneq ($(CONFIG_MMU),y) obj-y += nommu.o -obj-$(CONFIG_ARM_MPU) += pmsa-v7.o +obj-$(CONFIG_ARM_MPU) += pmsa-v7.o pmsa-v8.o endif obj-$(CONFIG_ARM_PTDUMP) += dump.o
arch/arm/mm/nommu.c +6 -0
@@ -108,6 +108,9 @@ static void __init adjust_lowmem_bounds_mpu(void)case MMFR0_PMSAv7:pmsav7_adjust_lowmem_bounds ();break ; +case MMFR0_PMSAv8: +pmsav8_adjust_lowmem_bounds (); +break ;default :break ; }
@@ -121,6 +124,9 @@ static void __init mpu_setup(void)case MMFR0_PMSAv7:pmsav7_setup ();break ; +case MMFR0_PMSAv8: +pmsav8_setup (); +break ;default :break ; }
arch/arm/mm/pmsa-v8.c new file +307 -0
307 lines not on this page · raw message
Signature · 1 line
2.0.0
RFC PATCH 5/5 ARM: NOMMU: Support PMSAv8 MPU
Hi,
Quoted 1 line · Vladimir Murzin
ARMv8R/M architecture defines new memory protection scheme - PMSAv8
Is there a public ARMv8-R architecture reference manual available ?, seems only ARMv8-A and ARMv8-M ARM's are publically available.
afzal
RFC PATCH 5/5 ARM: NOMMU: Support PMSAv8 MPU
Hi,
Quoted 8 lines · afzal mohammed
Hi,
Quoted 1 line · Vladimir Murzin
ARMv8R/M architecture defines new memory protection scheme - PMSAv8
Is there a public ARMv8-R architecture reference manual available ?, seems only ARMv8-A and ARMv8-M ARM's are publically available.
Not sure why it is not there yet, but with respect to the patch set you might get PMSA-v8 related information from Cortex-R52 TRM [1].
[1] https://developer.arm.com/docs/100026/latest/preface
Vladimir
Quoted 3 lines
afzal
RFC PATCH 5/5 ARM: NOMMU: Support PMSAv8 MPU
Hi,
Quoted 5 lines · Vladimir Murzin
Quoted 1 line
Is there a public ARMv8-R architecture reference manual available ?,
you might get PMSA-v8 related information from Cortex-R52 TRM [1].
Thanks Vladimir.
Got a ARMv8-R ARM supplement to ARMv8-A ARM,
https://static.docs.arm.com/ddi0568/a/DDI0568A_b_armv8_r_supplement.pdf
Quoted 1 line
Not sure why it is not there yet
Cortex-R mafia again ;)
afzal
cover Introduce PMSAv8 memory protection unit
In reply to Vladimir MurzinHi,
Quoted 11 lines · Vladimir Murzin
Hi,
This series is an attempt to add support for PMSAv8 MPU defined by ARMv8R/M architecture.
I'm have a doubt about adding dedicated config option, so both v7 and v8 versions of PMSA are covered with
CONFIG_MPU, but I'd glad to hear what people think of it.
Quoted 9 lines
Thanks!
Vladimir Murzin (5):
ARM: NOMMU: Move PMSAv7 MPU under it's own namespace
ARM: NOMMU: Reorganise__setup_mpu
ARM: NOMMU: Postpone MPU activation till__after_proc_init
ARM: NOMMU: Make_stextand_endmeet PMSAv8 alignment restrictions
ARM: NOMMU: Support PMSAv8 MPU
I?ve tested this series on my Atmel armv7m board, and it doesn?t break anything on my side. (My test setup is running kernel from SDRAM, with rootfs on SDcard, so no XIP was tested)
FWIW, you can add my Tested-by for patches 1-4.
Thanks!
Regards,
Andras
cover Introduce PMSAv8 memory protection unit
Hi,
Quoted 23 lines · Szemz? Andr?s
Hi,
Quoted 11 lines · Vladimir Murzin
Hi,
This series is an attempt to add support for PMSAv8 MPU defined by ARMv8R/M architecture.
I'm have a doubt about adding dedicated config option, so both v7 and v8 versions of PMSA are covered with
CONFIG_MPU, but I'd glad to hear what people think of it.Quoted 9 lines
Thanks!
Vladimir Murzin (5):
ARM: NOMMU: Move PMSAv7 MPU under it's own namespace
ARM: NOMMU: Reorganise__setup_mpu
ARM: NOMMU: Postpone MPU activation till__after_proc_init
ARM: NOMMU: Make_stextand_endmeet PMSAv8 alignment restrictions
ARM: NOMMU: Support PMSAv8 MPU
Quoted 4 lines
I?ve tested this series on my Atmel armv7m board, and it doesn?t break anything on my side. (My test setup is running kernel from SDRAM, with rootfs on SDcard, so no XIP was tested)
FWIW, you can add my Tested-by for patches 1-4.
Mach appreciated!
Cheers
Vladimir
Quoted 9 lines
Thanks!
Regards,
Andras