@@ -60,7 +60,7 @@ extern struct processor {
/*
* Set the page table
*/
- void (*switch_mm)(unsigned long pgd_phys, struct mm_struct *mm);
+ void (*switch_mm)(u64 pgd_phys, struct mm_struct *mm);
/*
* Set a possibly extended PTE. Non-extended PTEs should
* ignore 'ext'.
@@ -82,7 +82,7 @@ extern void cpu_proc_init(void);
extern void cpu_proc_fin(void);
extern int cpu_do_idle(void);
extern void cpu_dcache_clean_area(void *, int);
-extern void cpu_do_switch_mm(unsigned long pgd_phys, struct mm_struct *mm);
+extern void cpu_do_switch_mm(u64 pgd_phys, struct mm_struct *mm);
#ifdef CONFIG_ARM_LPAE
extern void cpu_set_pte_ext(pte_t *ptep, pte_t pte);
#else
@@ -100,8 +100,8 @@ ENTRY(cpu_v6_dcache_clean_area)
*/
ENTRY(cpu_v6_switch_mm)
#ifdef CONFIG_MMU
+ ldr r1, [r2, #MM_CONTEXT_ID] @ get mm->context.id
mov r2, #0
- ldr r1, [r1, #MM_CONTEXT_ID] @ get mm->context.id
ALT_SMP(orr r0, r0, #TTB_FLAGS_SMP)
ALT_UP(orr r0, r0, #TTB_FLAGS_UP)
mcr p15, 0, r2, c7, c5, 6 @ flush BTAC/BTB
@@ -39,8 +39,8 @@
*/
ENTRY(cpu_v7_switch_mm)
#ifdef CONFIG_MMU
+ ldr r1, [r2, #MM_CONTEXT_ID] @ get mm->context.id
mov r2, #0
- ldr r1, [r1, #MM_CONTEXT_ID] @ get mm->context.id
ALT_SMP(orr r0, r0, #TTB_FLAGS_SMP)
ALT_UP(orr r0, r0, #TTB_FLAGS_UP)
#ifdef CONFIG_ARM_ERRATA_430973
@@ -47,9 +47,10 @@
*/
ENTRY(cpu_v7_switch_mm)
#ifdef CONFIG_MMU
- ldr r1, [r1, #MM_CONTEXT_ID] @ get mm->context.id
- and r3, r1, #0xff
+ ldr r2, [r2, #MM_CONTEXT_ID] @ get mm->context.id
+ and r3, r2, #0xff
mov r3, r3, lsl #(48 - 32) @ ASID
+ orr r3, r3, r1 @ upper 32-bits of pgd phys
mcrr p15, 0, r0, r3, c2 @ set TTB 0
isb
#endif