mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
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@citrix.com> Acked-by: Tim Deegan <tim@xen.org> Committed-by: Ian Campbell <ian.campbell@citrix.com>
This commit is contained in:
1 parent
874d8100fc
commit
2279dc2b5e
5 files changed
+36
-39
No files matched your search
+1
-4
@@ -205,15 +205,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);
|
||||
|
||||
+34
-1
@@ -38,6 +38,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)
|
||||
@@ -67,6 +68,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;
|
||||
@@ -156,7 +189,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 */
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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);
|
||||
|
||||