xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: David Vrabel <david.vrabel@citrix.com>
To: xen-devel@lists.xensource.com
Cc: David Vrabel <david.vrabel@citrix.com>
Subject: [PATCH 5/8] arm: map device tree blob in initial page tables
Date: Fri, 10 Feb 2012 13:03:41 +0000	[thread overview]
Message-ID: <1328879024-5621-6-git-send-email-david.vrabel@citrix.com> (raw)
In-Reply-To: <1328879024-5621-1-git-send-email-david.vrabel@citrix.com>

From: David Vrabel <david.vrabel@citrix.com>

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@citrix.com>
---
 xen/arch/arm/head.S          |    9 +++++++++
 xen/arch/arm/mm.c            |    5 +++--
 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 22ac512..51c26f6 100644
--- a/xen/arch/arm/head.S
+++ b/xen/arch/arm/head.S
@@ -200,7 +200,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 c863507..f1fe4ba 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 9294f8f..c2ab0a2 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
-- 
1.7.2.5

  parent reply	other threads:[~2012-02-10 13:03 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-10 13:03 [PATCH 0/8] arm: initial device tree support (#2) David Vrabel
2012-02-10 13:03 ` [PATCH 1/8] libfdt: add version 1.3.0 David Vrabel
2012-02-10 13:38   ` Ian Campbell
2012-02-10 13:03 ` [PATCH 2/8] libfdt: fixup libfdt_env.h for xen David Vrabel
2012-02-10 13:03 ` [PATCH 3/8] libfdt: add to build David Vrabel
2012-02-10 13:03 ` [PATCH 4/8] arm: link a device tree blob into the xen image David Vrabel
2012-02-10 13:35   ` Ian Campbell
2012-02-10 13:40     ` David Vrabel
2012-02-10 13:52       ` Ian Campbell
2012-02-10 16:50         ` Tim Deegan
2012-02-10 17:38           ` David Vrabel
2012-02-10 17:46             ` Ian Campbell
2012-02-10 13:03 ` David Vrabel [this message]
2012-02-10 13:03 ` [PATCH 6/8] arm: add early_printk() David Vrabel
2012-02-10 13:03 ` [PATCH 7/8] arm, device tree: parse the DTB for RAM location and size David Vrabel
2012-02-10 13:25   ` Tim Deegan
2012-02-10 13:03 ` [PATCH 8/8] arm: setup MM using information from the device tree David Vrabel
  -- strict thread matches above, loose matches on Subject: below --
2012-02-13 13:18 [PATCH 0/8] arm: initial device tree support (#3) David Vrabel
2012-02-13 13:18 ` [PATCH 5/8] arm: map device tree blob in initial page tables David Vrabel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1328879024-5621-6-git-send-email-david.vrabel@citrix.com \
    --to=david.vrabel@citrix.com \
    --cc=xen-devel@lists.xensource.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).