[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen master] xen/arm: Dummy implementation of multi-bank support



commit 4816f9a7d47f985dfa796dc632771201b10858e8
Author:     Julien Grall <julien.grall@xxxxxxxxxx>
AuthorDate: Mon Jul 15 15:40:55 2013 +0100
Commit:     Ian Campbell <ian.campbell@xxxxxxxxxx>
CommitDate: Wed Jul 17 10:53:23 2013 +0100

    xen/arm: Dummy implementation of multi-bank support
    
    U-boot for the arndale board splits the memory in 8 contiguous banks and
    rewrites the memory node. So most of the memory is lost.
    
    As the frametable is only able to handle contiguous memory, use the first
    contiguous banks and warn if some of the memory banks are not used.
    
    Signed-off-by: Julien Grall <julien.grall@xxxxxxxxxx>
    Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
    [ ijc -- "some banks" -> "some memory banks" ]
---
 xen/arch/arm/setup.c |   23 +++++++++++++++++------
 1 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c
index b192d15..c22972f 100644
--- a/xen/arch/arm/setup.c
+++ b/xen/arch/arm/setup.c
@@ -288,16 +288,27 @@ static void __init setup_mm(unsigned long dtb_paddr, 
size_t dtb_size)
     unsigned long heap_pages, xenheap_pages, domheap_pages;
     unsigned long dtb_pages;
     unsigned long boot_mfn_start, boot_mfn_end;
+    int i = 0;
 
-    /*
-     * TODO: only using the first RAM bank for now.  The heaps and the
-     * frame table assume RAM is physically contiguous.
-     */
-    if ( early_info.mem.nr_banks > 1 )
-        early_printk("WARNING: Only using first bank of memory\n");
+    /* TODO: Handle non-contiguous memory bank */
+    if ( !early_info.mem.nr_banks )
+        early_panic("No memory bank\n");
     ram_start = early_info.mem.bank[0].start;
     ram_size  = early_info.mem.bank[0].size;
     ram_end = ram_start + ram_size;
+
+    for ( i = 1; i < early_info.mem.nr_banks; i++ )
+    {
+        if ( ram_end != early_info.mem.bank[i].start )
+            break;
+
+        ram_size += early_info.mem.bank[i].size;
+        ram_end += early_info.mem.bank[i].size;
+    }
+
+    if ( i != early_info.mem.nr_banks )
+        early_printk("WARNING: some memory banks are not used\n");
+
     total_pages = ram_pages = ram_size >> PAGE_SHIFT;
 
     /*
--
generated by git-patchbot for /home/xen/git/xen.git#master

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.