]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blobdiff - arch/arm64/mm/proc.S
arm64: mm: Move ASID from TTBR0 to TTBR1
[mirror_ubuntu-artful-kernel.git] / arch / arm64 / mm / proc.S
index 32682be978e017b0d594122f71f6efa26e420f1b..0bd7550b72301d4bb6d4ba071bd5ab899c0f7baa 100644 (file)
@@ -138,9 +138,13 @@ ENDPROC(cpu_do_resume)
  *     - pgd_phys - physical address of new TTB
  */
 ENTRY(cpu_do_switch_mm)
+       pre_ttbr0_update_workaround x0, x2, x3
+       mrs     x2, ttbr1_el1
        mmid    x1, x1                          // get mm->context.id
-       bfi     x0, x1, #48, #16                // set the ASID
-       msr     ttbr0_el1, x0                   // set TTBR0
+       bfi     x2, x1, #48, #16                // set the ASID
+       msr     ttbr1_el1, x2                   // in TTBR1 (since TCR.A1 is set)
+       isb
+       msr     ttbr0_el1, x0                   // now update TTBR0
        isb
        post_ttbr0_update_workaround
        ret
@@ -224,7 +228,7 @@ ENTRY(__cpu_setup)
         * both user and kernel.
         */
        ldr     x10, =TCR_TxSZ(VA_BITS) | TCR_CACHE_FLAGS | TCR_SMP_FLAGS | \
-                       TCR_TG_FLAGS | TCR_ASID16 | TCR_TBI0
+                       TCR_TG_FLAGS | TCR_ASID16 | TCR_TBI0 | TCR_A1
        tcr_set_idmap_t0sz      x10, x9
 
        /*