memory reserved: size align: 1M
authorkfx <kfx@rock-chips.com>
Fri, 5 Jul 2013 01:15:55 +0000 (09:15 +0800)
committerkfx <kfx@rock-chips.com>
Fri, 5 Jul 2013 01:15:55 +0000 (09:15 +0800)
arch/arm/plat-rk/mem_reserve.c

index c022ae6afca5dbea0971b91784b91135cc5d0d9f..4806d7954e654bcc1e60eb23475555d6c5e921a3 100644 (file)
@@ -1,6 +1,9 @@
 #include <plat/board.h>
 #include <linux/memblock.h>
 #include <asm/setup.h>
+/* Macros for Data Alignment : size */
+#define ALIGN_SZ(p, a)  \
+               (((p) + ((a) - 1)) & ~((a) - 1))
 
 static size_t reserved_size = 0;
 static phys_addr_t reserved_base_end = 0;
@@ -8,14 +11,15 @@ static phys_addr_t reserved_base_end = 0;
 phys_addr_t __init board_mem_reserve_add(char *name, size_t size)
 {
     phys_addr_t base = 0;
+    size_t align_size = ALIGN_SZ(size, SZ_1M);
 
     if(reserved_base_end == 0)
         reserved_base_end  = meminfo.bank[0].start + meminfo.bank[0].size;
 
-    reserved_size += size;
+    reserved_size += align_size;
     base  = reserved_base_end - reserved_size;
     pr_info("memory reserve: Memory(base:0x%x size:%dM) reserved for <%s>\n", 
-                    base, size/SZ_1M, name);
+                    base, align_size/SZ_1M, name);
     return base;
 }