[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 05/16] arm: move get_paddr_function to arch setup.c from device_tree.c
It's not realy got any DT functionality in it and its only caller is setup_pagetables. Put it here because future patches want to incorporate of the module layout in memory and I'd like to confine that to setup.c Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx> --- xen/arch/arm/mm.c | 5 +---- xen/arch/arm/setup.c | 35 ++++++++++++++++++++++++++++++++++- xen/common/device_tree.c | 32 -------------------------------- xen/include/asm-arm/mm.h | 2 +- xen/include/xen/device_tree.h | 1 - 5 files changed, 36 insertions(+), 39 deletions(-) diff --git a/xen/arch/arm/mm.c b/xen/arch/arm/mm.c index 08bc55b..52bb5c7 100644 --- a/xen/arch/arm/mm.c +++ b/xen/arch/arm/mm.c @@ -206,15 +206,12 @@ void unmap_domain_page(const void *va) /* Boot-time pagetable setup. * Changes here may need matching changes in head.S */ -void __init setup_pagetables(unsigned long boot_phys_offset) +void __init setup_pagetables(unsigned long boot_phys_offset, paddr_t xen_paddr) { - paddr_t xen_paddr; unsigned long dest_va; lpae_t pte, *p; int i; - xen_paddr = device_tree_get_xen_paddr(); - /* Map the destination in the boot misc area. */ dest_va = BOOT_MISC_VIRT_START; pte = mfn_to_xen_entry(xen_paddr >> PAGE_SHIFT); diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c index c4ca270..b466875 100644 --- a/xen/arch/arm/setup.c +++ b/xen/arch/arm/setup.c @@ -37,6 +37,7 @@ #include <asm/current.h> #include <asm/setup.h> #include <asm/vfp.h> +#include <asm/early_printk.h> #include "gic.h" static __attribute_used__ void init_done(void) @@ -66,6 +67,38 @@ static void __init processor_id(void) READ_CP32(ID_ISAR3), READ_CP32(ID_ISAR4), READ_CP32(ID_ISAR5)); } +/** + * get_xen_paddr - get physical address to relocate Xen to + * + * Xen is relocated to the top of RAM and aligned to a XEN_PADDR_ALIGN + * boundary. + */ +static paddr_t __init get_xen_paddr(void) +{ + struct dt_mem_info *mi = &early_info.mem; + paddr_t min_size; + paddr_t paddr = 0, t; + int i; + + min_size = (_end - _start + (XEN_PADDR_ALIGN-1)) & ~(XEN_PADDR_ALIGN-1); + + /* Find the highest bank with enough space. */ + for ( i = 0; i < mi->nr_banks; i++ ) + { + if ( mi->bank[i].size >= min_size ) + { + t = mi->bank[i].start + mi->bank[i].size - min_size; + if ( t > paddr ) + paddr = t; + } + } + + if ( !paddr ) + early_panic("Not enough memory to relocate Xen\n"); + + return paddr; +} + static void __init setup_mm(unsigned long dtb_paddr, size_t dtb_size) { paddr_t ram_start; @@ -155,7 +188,7 @@ void __init start_xen(unsigned long boot_phys_offset, cmdline_parse(device_tree_bootargs(fdt)); - setup_pagetables(boot_phys_offset); + setup_pagetables(boot_phys_offset, get_xen_paddr()); #ifdef EARLY_UART_ADDRESS /* Map the UART */ diff --git a/xen/common/device_tree.c b/xen/common/device_tree.c index 04619f4..3d1f0f4 100644 --- a/xen/common/device_tree.c +++ b/xen/common/device_tree.c @@ -273,38 +273,6 @@ size_t __init device_tree_early_init(const void *fdt) return fdt_totalsize(fdt); } -/** - * device_tree_get_xen_paddr - get physical address to relocate Xen to - * - * Xen is relocated to the top of RAM and aligned to a XEN_PADDR_ALIGN - * boundary. - */ -paddr_t __init device_tree_get_xen_paddr(void) -{ - struct dt_mem_info *mi = &early_info.mem; - paddr_t min_size; - paddr_t paddr = 0, t; - int i; - - min_size = (_end - _start + (XEN_PADDR_ALIGN-1)) & ~(XEN_PADDR_ALIGN-1); - - /* Find the highest bank with enough space. */ - for ( i = 0; i < mi->nr_banks; i++ ) - { - if ( mi->bank[i].size >= min_size ) - { - t = mi->bank[i].start + mi->bank[i].size - min_size; - if ( t > paddr ) - paddr = t; - } - } - - if ( !paddr ) - early_panic("Not enough memory to relocate Xen\n"); - - return paddr; -} - /* * Local variables: * mode: C diff --git a/xen/include/asm-arm/mm.h b/xen/include/asm-arm/mm.h index 6498322..b0e5a67 100644 --- a/xen/include/asm-arm/mm.h +++ b/xen/include/asm-arm/mm.h @@ -138,7 +138,7 @@ extern unsigned long max_page; extern unsigned long total_pages; /* Boot-time pagetable setup */ -extern void setup_pagetables(unsigned long boot_phys_offset); +extern void setup_pagetables(unsigned long boot_phys_offset, paddr_t xen_paddr); /* MMU setup for seccondary CPUS (which already have paging enabled) */ extern void __cpuinit mmu_init_secondary_cpu(void); /* Set up the xenheap: up to 1GB of contiguous, always-mapped memory. diff --git a/xen/include/xen/device_tree.h b/xen/include/xen/device_tree.h index 8e1626c..4d010c0 100644 --- a/xen/include/xen/device_tree.h +++ b/xen/include/xen/device_tree.h @@ -39,7 +39,6 @@ extern struct dt_early_info early_info; extern void *device_tree_flattened; size_t device_tree_early_init(const void *fdt); -paddr_t device_tree_get_xen_paddr(void); void device_tree_get_reg(const u32 **cell, u32 address_cells, u32 size_cells, u64 *start, u64 *size); -- 1.7.9.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |