arm64: drop sleep_idmap_phys and clean up cpu_resume()
authorArd Biesheuvel <ard.biesheuvel@linaro.org>
Mon, 1 Jun 2015 11:40:34 +0000 (13:40 +0200)
committerCatalin Marinas <catalin.marinas@arm.com>
Tue, 2 Jun 2015 16:45:07 +0000 (17:45 +0100)
Two cleanups of the asm function cpu_resume():
- The global variable sleep_idmap_phys always points to idmap_pg_dir,
  so we can just use that value directly in the CPU resume path.
- Unclutter the load of sleep_save_sp::save_ptr_stash_phys.

Acked-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Tested-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
arch/arm64/kernel/sleep.S
arch/arm64/kernel/suspend.c

index 811e61a2d8472e5de53e7081fb3261bd01c8ec49..803cfea41962f48c3b1649bbeeaa5d88c96596d9 100644 (file)
@@ -164,15 +164,12 @@ ENTRY(cpu_resume)
 #else
        mov     x7, xzr
 #endif
-       adrp    x0, sleep_save_sp
-       add     x0, x0, #:lo12:sleep_save_sp
-       ldr     x0, [x0, #SLEEP_SAVE_SP_PHYS]
+       ldr_l   x0, sleep_save_sp + SLEEP_SAVE_SP_PHYS
        ldr     x0, [x0, x7, lsl #3]
        /* load sp from context */
        ldr     x2, [x0, #CPU_CTX_SP]
-       adrp    x1, sleep_idmap_phys
        /* load physical address of identity map page table in x1 */
-       ldr     x1, [x1, #:lo12:sleep_idmap_phys]
+       adrp    x1, idmap_pg_dir
        mov     sp, x2
        /*
         * cpu_do_resume expects x0 to contain context physical address
index d7daf45ae7a25307f8c8007c7b8240d9405352fc..f6073c27d65f30cfe415c6a2ff3630f4868384ca 100644 (file)
@@ -118,7 +118,6 @@ int __cpu_suspend(unsigned long arg, int (*fn)(unsigned long))
 }
 
 struct sleep_save_sp sleep_save_sp;
-phys_addr_t sleep_idmap_phys;
 
 static int __init cpu_suspend_init(void)
 {
@@ -132,9 +131,7 @@ static int __init cpu_suspend_init(void)
 
        sleep_save_sp.save_ptr_stash = ctx_ptr;
        sleep_save_sp.save_ptr_stash_phys = virt_to_phys(ctx_ptr);
-       sleep_idmap_phys = virt_to_phys(idmap_pg_dir);
        __flush_dcache_area(&sleep_save_sp, sizeof(struct sleep_save_sp));
-       __flush_dcache_area(&sleep_idmap_phys, sizeof(sleep_idmap_phys));
 
        return 0;
 }