Hi Luca,
On 04/04/2025 10:06, Luca Fancellu wrote:
Hi Ayan,
On 3 Apr 2025, at 18:12, Ayan Kumar Halder <ayan.kumar.hal...@amd.com> wrote:
Added a new file prepare_xen_region.inc to hold the common earlyboot MPU regions
configurations across arm64 and arm32.
prepare_xen_region, fail_insufficient_regions() will be used by both arm32 and
arm64. Thus, they have been moved to prepare_xen_region.inc.
enable_secondary_cpu_mm() is a stub which is moved to prepare_xen_region.inc as
SMP is currently not supported for MPU.
*_PRBAR are moved to arm64/sysregs.h.
*_PRLAR are moved to prepare_xen_region.inc as they are common between arm32
and arm64.
Introduce WRITE_SYSREG_ASM to write to the system registers from the common asm
file.
Signed-off-by: Ayan Kumar Halder <ayan.kumar.hal...@amd.com>
---
The split for the common code seems ok to me, but this patch is introducing an
issue for the arm64 compilation,
Sorry, I moved something at the last moment without testing. :(
I’ve done an experiment and with these changes I’m able to compile both, but
feel free to ignore if it’s no what you
had in mind.
The change looks good. However, ...
diff --git a/xen/arch/arm/include/asm/arm32/sysregs.h
b/xen/arch/arm/include/asm/arm32/sysregs.h
index 22871999afb3..a90d1610a155 100644
--- a/xen/arch/arm/include/asm/arm32/sysregs.h
+++ b/xen/arch/arm/include/asm/arm32/sysregs.h
@@ -20,6 +20,13 @@
* uses r0 as a placeholder register. */
#define CMD_CP32(name...) "mcr " __stringify(CP32(r0, name)) ";"
+#define REGION_TEXT_PRBAR 0x18 /* SH=11 AP=10 XN=0 */
+#define REGION_RO_PRBAR 0x1D /* SH=11 AP=10 XN=1 */
+#define REGION_DATA_PRBAR 0x19 /* SH=11 AP=00 XN=1 */
+#define REGION_DEVICE_PRBAR 0x11 /* SH=10 AP=00 XN=1 */
+
+#define WRITE_SYSREG_ASM(v, name) mcr CP32(v, name)
+
#ifndef __ASSEMBLY__
/* C wrappers */
diff --git a/xen/arch/arm/include/asm/cpregs.h
b/xen/arch/arm/include/asm/cpregs.h
index 6019a2cbdd89..b909adc102a5 100644
--- a/xen/arch/arm/include/asm/cpregs.h
+++ b/xen/arch/arm/include/asm/cpregs.h
@@ -1,10 +1,6 @@
#ifndef __ASM_ARM_CPREGS_H
#define __ASM_ARM_CPREGS_H
-#ifdef CONFIG_MPU
-#include <asm/mpu/cpregs.h>
-#endif
-
/*
* AArch32 Co-processor registers.
*
@@ -502,6 +498,12 @@
#define MVFR0_EL1 MVFR0
#define MVFR1_EL1 MVFR1
#define MVFR2_EL1 MVFR2
+#define HMPUIR p15,4,c0,c0,4
+#define HPRSELR p15,4,c6,c2,1
+#define PRBAR_EL2 p15,4,c6,c3,0
+#define PRLAR_EL2 p15,4,c6,c8,1
+#define MPUIR_EL2 HMPUIR
+#define PRSELR_EL2 HPRSELR
Considering that there will be lots of arm32 MPU specific registers, do
you want to move them to mpu/cpregs.h ?
That would be my style preference.
This issue does not occur with arm64 as compiler provides most of them.
Michal or Julien - thoughts ?
Rest look ok.
- Ayan
#endif
#endif
diff --git a/xen/arch/arm/include/asm/mpu/cpregs.h
b/xen/arch/arm/include/asm/mpu/cpregs.h
deleted file mode 100644
index 66871379a53b..000000000000
--- a/xen/arch/arm/include/asm/mpu/cpregs.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-
-#ifndef __ASM_ARM_MPU_CPREGS_H
-#define __ASM_ARM_MPU_CPREGS_H
-
-#define REGION_TEXT_PRBAR 0x18 /* SH=11 AP=10 XN=0 */
-#define REGION_RO_PRBAR 0x1D /* SH=11 AP=10 XN=1 */
-#define REGION_DATA_PRBAR 0x19 /* SH=11 AP=00 XN=1 */
-#define REGION_DEVICE_PRBAR 0x11 /* SH=10 AP=00 XN=1 */
-
-#define HMPUIR p15,4,c0,c0,4
-
-/* CP15 CR6: MPU Protection Region Base/Limit/Select Address Register */
-#define HPRSELR p15,4,c6,c2,1
-#define PRBAR_EL2 p15,4,c6,c3,0
-#define PRLAR_EL2 p15,4,c6,c8,1
-
-#define MPUIR_EL2 HMPUIR
-#define PRSELR_EL2 HPRSELR
-
-#define WRITE_SYSREG_ASM(v, name) mcr CP32(v, name)
-
-#endif /* __ASM_ARM_MPU_CPREGS_H */
-
-/*
- * Local variables:
- * mode: ASM
- * indent-tabs-mode: nil
- * End:
- */