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:
Ian Campbell committed 2012-10-11 15:56:58 +01:00
1 parent 874d8100fc
commit 2279dc2b5e
5 files changed
+36 -39

No files matched your search

+1 -4
View File
@@ -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
View File
@@ -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 */
-32
View File
@@ -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
+1 -1
View File
@@ -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.
-1
View File
@@ -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);
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.