ARM: LPAE: use phys_addr_t for initrd location
authorVitaly Andrianov <vitalya@ti.com>
Fri, 22 Jun 2012 18:26:04 +0000 (14:26 -0400)
committerWill Deacon <will.deacon@arm.com>
Thu, 30 May 2013 15:01:59 +0000 (16:01 +0100)
This patch fixes the initrd setup code to use phys_addr_t instead of assuming
32-bit addressing.  Without this we cannot boot on systems where initrd is
located above the 4G physical address limit.

Signed-off-by: Vitaly Andrianov <vitalya@ti.com>
Signed-off-by: Cyril Chemparathy <cyril@ti.com>
Acked-by: Nicolas Pitre <nico@linaro.org>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Tested-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
Tested-by: Subash Patel <subash.rp@samsung.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
arch/arm/mm/init.c

index 68c914e8544e7d8a5065f7d8405492efb8297501..2ffee02d1d5cddd57ee3f0d4cb58862b98f79570 100644 (file)
 
 #include "mm.h"
 
-static unsigned long phys_initrd_start __initdata = 0;
+static phys_addr_t phys_initrd_start __initdata = 0;
 static unsigned long phys_initrd_size __initdata = 0;
 
 static int __init early_initrd(char *p)
 {
-       unsigned long start, size;
+       phys_addr_t start;
+       unsigned long size;
        char *endp;
 
        start = memparse(p, &endp);
@@ -350,14 +351,14 @@ void __init arm_memblock_init(struct meminfo *mi, struct machine_desc *mdesc)
 #ifdef CONFIG_BLK_DEV_INITRD
        if (phys_initrd_size &&
            !memblock_is_region_memory(phys_initrd_start, phys_initrd_size)) {
-               pr_err("INITRD: 0x%08lx+0x%08lx is not a memory region - disabling initrd\n",
-                      phys_initrd_start, phys_initrd_size);
+               pr_err("INITRD: 0x%08llx+0x%08lx is not a memory region - disabling initrd\n",
+                      (u64)phys_initrd_start, phys_initrd_size);
                phys_initrd_start = phys_initrd_size = 0;
        }
        if (phys_initrd_size &&
            memblock_is_region_reserved(phys_initrd_start, phys_initrd_size)) {
-               pr_err("INITRD: 0x%08lx+0x%08lx overlaps in-use memory region - disabling initrd\n",
-                      phys_initrd_start, phys_initrd_size);
+               pr_err("INITRD: 0x%08llx+0x%08lx overlaps in-use memory region - disabling initrd\n",
+                      (u64)phys_initrd_start, phys_initrd_size);
                phys_initrd_start = phys_initrd_size = 0;
        }
        if (phys_initrd_size) {