The current patch series introduces the relocation of the host device tree file to free up low memory and also it is expected that discard_initial_modules() will be called sooner or later, it will discard the FDT boot module, and remove_early_mappings() will destroy the early mappings.
In addition to relocation, unflattening is introduced to create the tree of struct device_node for the host device tree. To implement this, several things have been introduced: - destroy_xen_mappings() function, which removes page mappings from Xen's page tables. This is necessary for clear_fixmap(). - {set,clear}_fixmap() functions to manage mappings in the fixmap region, which are expected to be used in copy_from_paddr() to copy the FDT to Xen's heap. - A new config HAS_CMO is introduced (in anticipation of future use). This is despite the fact that hardware ( "available" to me ) with the hypervisor extension is generally I/O-coherent ( and it is preferred way mentioned in the RISC-V spec ) and should not be an issue in QEMU as it doesn't emulate caches. This config introduces stubs for clean_and_invalidate_dcache_va_range() and clean_dcache_va_range(), which are expected to be used in copy_from_paddr() and flush_page_to_ram(), which in turn are expected to be used during the call to xmalloc_bytes() in relocate_fdt(). - The introduction of copy_from_paddr() to copy the FDT to an address allocated in Xen's heap. Oleksii Kurochko (6): xen/riscv: add destroy_xen_mappings() to remove mappings in Xen page tables xen/riscv: reorder includes in asm/page.h alphabetically xen/riscv: add {set,clear}_fixmap() functions for managing fixmap entries xen/riscv: introduce cache management operations (CMO) xen/riscv: implement relocate_fdt() xen/riscv: relocating and unflattening host device tree xen/arch/riscv/Kconfig | 3 ++ xen/arch/riscv/include/asm/fixmap.h | 5 +++ xen/arch/riscv/include/asm/mm.h | 10 ++++- xen/arch/riscv/include/asm/page.h | 30 +++++++++++++-- xen/arch/riscv/mm.c | 9 ++--- xen/arch/riscv/pt.c | 27 ++++++++++++++ xen/arch/riscv/setup.c | 57 ++++++++++++++++++++++++++++- 7 files changed, 128 insertions(+), 13 deletions(-) -- 2.47.0