diff options
-rw-r--r-- | xen/arch/arm/head.S | 9 | ||||
-rw-r--r-- | xen/arch/arm/mm.c | 5 | ||||
-rw-r--r-- | xen/include/asm-arm/config.h | 6 |
3 files changed, 18 insertions, 2 deletions
diff --git a/xen/arch/arm/head.S b/xen/arch/arm/head.S index ea557c21cf..8b2342465c 100644 --- a/xen/arch/arm/head.S +++ b/xen/arch/arm/head.S @@ -202,7 +202,16 @@ hyp: orr r2, r2, #0x071 /* r2:r3 := 2MB dev map including UART */ add r4, r4, #8 strd r2, r3, [r1, r4] /* Map it in the fixmap's slot */ +#else + add r4, r4, #8 /* Skip over unused fixmap slot */ #endif + mov r3, #0x0 + lsr r2, r8, #21 + lsl r2, r2, #21 /* 2MB-aligned paddr of DTB */ + orr r2, r2, #0xf00 + orr r2, r2, #0x07d /* r2:r3 := 2MB RAM incl. DTB */ + add r4, r4, #8 + strd r2, r3, [r1, r4] /* Map it in the early boot slot */ PRINT("- Turning on paging -\r\n") diff --git a/xen/arch/arm/mm.c b/xen/arch/arm/mm.c index c8635072d2..f1fe4ba4fd 100644 --- a/xen/arch/arm/mm.c +++ b/xen/arch/arm/mm.c @@ -161,10 +161,11 @@ void __init setup_pagetables(unsigned long boot_phys_offset) xen_paddr = XEN_PADDR; - /* Map the destination in the empty L2 above the fixmap */ - dest_va = FIXMAP_ADDR(0) + (1u << SECOND_SHIFT); + /* Map the destination in the boot misc area. */ + dest_va = BOOT_MISC_VIRT_START; pte = mfn_to_xen_entry(xen_paddr >> PAGE_SHIFT); write_pte(xen_second + second_table_offset(dest_va), pte); + flush_xen_data_tlb_va(dest_va); /* Calculate virt-to-phys offset for the new location */ phys_offset = xen_paddr - (unsigned long) _start; diff --git a/xen/include/asm-arm/config.h b/xen/include/asm-arm/config.h index 9294f8f71f..c2ab0a21a2 100644 --- a/xen/include/asm-arm/config.h +++ b/xen/include/asm-arm/config.h @@ -55,15 +55,21 @@ * 0 - 2M Unmapped * 2M - 4M Xen text, data, bss * 4M - 6M Fixmap: special-purpose 4K mapping slots + * 6M - 8M Early boot misc (see below) * * 32M - 128M Frametable: 24 bytes per page for 16GB of RAM * * 1G - 2G Xenheap: always-mapped memory * 2G - 4G Domheap: on-demand-mapped + * + * The early boot misc area is used: + * - in head.S for the DTB for device_tree_early_init(). + * - in setup_pagetables() when relocating Xen. */ #define XEN_VIRT_START 0x00200000 #define FIXMAP_ADDR(n) (0x00400000 + (n) * PAGE_SIZE) +#define BOOT_MISC_VIRT_START 0x00600000 #define FRAMETABLE_VIRT_START 0x02000000 #define XENHEAP_VIRT_START 0x40000000 #define DOMHEAP_VIRT_START 0x80000000 |