[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] arm: map device tree blob in initial page tables
# HG changeset patch # User David Vrabel <david.vrabel@xxxxxxxxxx> # Date 1329143089 0 # Node ID 62c701cc8715dc259a127ee42b3fa4da313e61ee # Parent 14a97085fbec0d3a87c584a1c2b268a4f61fc57c arm: map device tree blob in initial page tables Add a mapping for the device tree blob in the initial page tables. This will allow the DTB to be parsed for memory information prior to setting up the real page tables. It is mapped into the first L2 slot after the fixmap. When this slot is reused in setup_pagetables(), flush the TLB. Signed-off-by: David Vrabel <david.vrabel@xxxxxxxxxx> Acked-by: Tim Deegan <tim@xxxxxxx> Committed-by: Ian Campbell <ian.campbell@xxxxxxxxxx> --- diff -r 14a97085fbec -r 62c701cc8715 xen/arch/arm/head.S --- a/xen/arch/arm/head.S Mon Feb 13 14:24:48 2012 +0000 +++ b/xen/arch/arm/head.S Mon Feb 13 14:24:49 2012 +0000 @@ -202,7 +202,16 @@ 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 -r 14a97085fbec -r 62c701cc8715 xen/arch/arm/mm.c --- a/xen/arch/arm/mm.c Mon Feb 13 14:24:48 2012 +0000 +++ b/xen/arch/arm/mm.c Mon Feb 13 14:24:49 2012 +0000 @@ -161,10 +161,11 @@ 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 -r 14a97085fbec -r 62c701cc8715 xen/include/asm-arm/config.h --- a/xen/include/asm-arm/config.h Mon Feb 13 14:24:48 2012 +0000 +++ b/xen/include/asm-arm/config.h Mon Feb 13 14:24:49 2012 +0000 @@ -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 _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |