aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--xen/arch/arm/setup.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c
index b192d15d51..c22972f0de 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;
/*