@@ -1 +1,3 @@
obj-y += head.o
+obj-y += p2m.o
+obj-y += smpboot.o
new file mode 100644
@@ -0,0 +1,18 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <xen/init.h>
+#include <asm/p2m.h>
+
+void __init setup_virt_paging(void)
+{
+ BUG_ON("unimplemented");
+}
+
+/*
+ * Local variables:
+ * mode: C
+ * c-file-style: "BSD"
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
new file mode 100644
@@ -0,0 +1,23 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <xen/mm.h>
+
+int prepare_secondary_mm(int cpu)
+{
+ BUG_ON("unimplemented");
+ return -EINVAL;
+}
+
+void update_boot_mapping(bool enable)
+{
+ BUG_ON("unimplemented");
+}
+
+/*
+ * Local variables:
+ * mode: C
+ * c-file-style: "BSD"
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
new file mode 100644
@@ -0,0 +1,20 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+#ifndef __ARM_MPU_P2M_H__
+#define __ARM_MPU_P2M_H__
+
+/* Not used on MPU system */
+static inline void p2m_clear_root_pages(struct p2m_domain *p2m) {}
+
+/* Not used on MPU system */
+static inline void p2m_tlb_flush_sync(struct p2m_domain *p2m) {}
+
+#endif /* __ARM_MPU_P2M_H__ */
+
+/*
+ * Local variables:
+ * mode: C
+ * c-file-style: "BSD"
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
@@ -168,7 +168,7 @@ typedef enum {
#if defined(CONFIG_MMU)
# include <asm/mmu/p2m.h>
#else
-# error "Unknown memory management layout"
+# include <asm/mpu/p2m.h>
#endif
static inline bool arch_acquire_resource_check(struct domain *d)
@@ -1,3 +1,4 @@
obj-y += mm.o
obj-y += p2m.o
obj-y += setup.init.o
+obj-y += vmap-mpu.o
@@ -18,6 +18,28 @@ static void __init __maybe_unused build_assertions(void)
BUILD_BUG_ON(PAGE_SIZE != SZ_4K);
}
+void __init setup_mm(void)
+{
+ BUG_ON("unimplemented");
+}
+
+int modify_xen_mappings(unsigned long s, unsigned long e, unsigned int nf)
+{
+ BUG_ON("unimplemented");
+ return -EINVAL;
+}
+
+void dump_hyp_walk(vaddr_t addr)
+{
+ BUG_ON("unimplemented");
+}
+
+/* Release all __init and __initdata ranges to be reused */
+void free_init_memory(void)
+{
+ BUG_ON("unimplemented");
+}
+
void __iomem *ioremap_attr(paddr_t start, size_t len, unsigned int flags)
{
BUG_ON("unimplemented");
@@ -4,6 +4,64 @@
#include <xen/domain.h>
#include <asm/p2m.h>
+int p2m_set_entry(struct p2m_domain *p2m, gfn_t sgfn, unsigned long nr,
+ mfn_t smfn, p2m_type_t t, p2m_access_t a)
+{
+ BUG_ON("unimplemented");
+ return -EINVAL;
+}
+
+mfn_t p2m_get_entry(struct p2m_domain *p2m, gfn_t gfn, p2m_type_t *t,
+ p2m_access_t *a, unsigned int *page_order, bool *valid)
+{
+ BUG_ON("unimplemented");
+ return INVALID_MFN;
+}
+
+void p2m_dump_info(struct domain *d)
+{
+ BUG_ON("unimplemented");
+}
+
+int p2m_init(struct domain *d)
+{
+ BUG_ON("unimplemented");
+ return -EINVAL;
+}
+
+void p2m_save_state(struct vcpu *p)
+{
+ BUG_ON("unimplemented");
+}
+
+void p2m_restore_state(struct vcpu *n)
+{
+ BUG_ON("unimplemented");
+}
+
+void p2m_final_teardown(struct domain *d)
+{
+ BUG_ON("unimplemented");
+}
+
+/* Not used on MPU system */
+void p2m_flush_vm(struct vcpu *v) {}
+
+bool p2m_resolve_translation_fault(struct domain *d, gfn_t gfn)
+{
+ BUG_ON("unimplemented");
+ return false;
+}
+
+/* Not used on MPU system */
+int relinquish_p2m_mapping(struct domain *d)
+{
+ return 0;
+}
+
+/* Not used on MPU system */
+void p2m_domain_creation_finished(struct domain *d) {}
+
/* Not used on MPU system */
int p2m_teardown(struct domain *d)
{
@@ -2,12 +2,36 @@
#include <xen/bug.h>
#include <xen/init.h>
+#include <xen/types.h>
+#include <asm/setup.h>
void __init setup_mappings(void)
{
BUG_ON("unimplemented");
}
+void * __init early_fdt_map(paddr_t fdt_paddr)
+{
+ BUG_ON("unimplemented");
+ return NULL;
+}
+
+/*
+ * copy_from_paddr - copy data from a physical address
+ * @dst: destination virtual address
+ * @paddr: source physical address
+ * @len: length to copy
+ */
+void __init copy_from_paddr(void *dst, paddr_t paddr, unsigned long len)
+{
+ BUG_ON("unimplemented");
+}
+
+void __init remove_early_mappings(void)
+{
+ BUG_ON("unimplemented");
+}
+
/*
* Local variables:
* mode: C
new file mode 100644
@@ -0,0 +1,24 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <xen/mm.h>
+#include <xen/vmap.h>
+
+void *vmap_contig(mfn_t mfn, unsigned int nr)
+{
+ BUG_ON("unimplemented");
+ return NULL;
+}
+
+void vunmap(const void *va)
+{
+ BUG_ON("unimplemented");
+}
+
+/*
+ * Local variables:
+ * mode: C
+ * c-file-style: "BSD"
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
This commit introduces the skeleton for the MPU memory management subsystem that allows the compilation. Signed-off-by: Luca Fancellu <luca.fancellu@arm.com> --- The implementation of setup_virt_paging() is under arm64/mpu because it will have a different implementation from arm32. --- --- xen/arch/arm/arm64/mpu/Makefile | 2 ++ xen/arch/arm/arm64/mpu/p2m.c | 18 ++++++++++ xen/arch/arm/arm64/mpu/smpboot.c | 23 ++++++++++++ xen/arch/arm/include/asm/mpu/p2m.h | 20 +++++++++++ xen/arch/arm/include/asm/p2m.h | 2 +- xen/arch/arm/mpu/Makefile | 1 + xen/arch/arm/mpu/mm.c | 22 ++++++++++++ xen/arch/arm/mpu/p2m.c | 58 ++++++++++++++++++++++++++++++ xen/arch/arm/mpu/setup.c | 24 +++++++++++++ xen/arch/arm/mpu/vmap-mpu.c | 24 +++++++++++++ 10 files changed, 193 insertions(+), 1 deletion(-) create mode 100644 xen/arch/arm/arm64/mpu/p2m.c create mode 100644 xen/arch/arm/arm64/mpu/smpboot.c create mode 100644 xen/arch/arm/include/asm/mpu/p2m.h create mode 100644 xen/arch/arm/mpu/vmap-mpu.c