From 7d2660bf975bd028976fd4de3cbca235af5baa51 Mon Sep 17 00:00:00 2001 From: Simon Kuenzer Date: Thu, 1 Oct 2020 14:43:25 +0200 Subject: [PATCH] plat/xen: x86: Detect initrd entry from start_info Registers an init ramdisk as memory region. Signed-off-by: Simon Kuenzer Reviewed-by: Mocanu Gabriel --- plat/xen/x86/setup.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/plat/xen/x86/setup.c b/plat/xen/x86/setup.c index 486b46708..4c7f6f5e6 100644 --- a/plat/xen/x86/setup.c +++ b/plat/xen/x86/setup.c @@ -104,7 +104,7 @@ char _libxenplat_bootstack[2*__STACK_SIZE]; /* * Memory region description */ -#define UKPLAT_MEMRD_MAX_ENTRIES 2 +#define UKPLAT_MEMRD_MAX_ENTRIES 3 unsigned int _libxenplat_mrd_num; struct ukplat_memregion_desc _libxenplat_mrd[UKPLAT_MEMRD_MAX_ENTRIES]; @@ -163,6 +163,24 @@ static inline void _init_mem(void) DEMAND_MAP_PAGES); _libxenplat_mrd_num = 2; + + /* initrd */ + if (HYPERVISOR_start_info->mod_len) { + if (HYPERVISOR_start_info->flags & SIF_MOD_START_PFN) + _libxenplat_mrd[2].base = + to_virt(HYPERVISOR_start_info->mod_start); + else + _libxenplat_mrd[2].base = + (void *) HYPERVISOR_start_info->mod_start; + _libxenplat_mrd[2].len = + (size_t) HYPERVISOR_start_info->mod_len; + _libxenplat_mrd[2].flags = (UKPLAT_MEMRF_INITRD + | UKPLAT_MEMRF_WRITABLE); +#if CONFIG_UKPLAT_MEMRNAME + _libxenplat_mrd[2].name = "initrd"; +#endif + _libxenplat_mrd_num++; + } } void _libxenplat_x86entry(void *start_info) __noreturn; -- 2.39.5