1/* 2 * linux/arch/arm/mm/tlbv3.S 3 * 4 * Copyright (C) 1997-2002 Russell King 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License version 2 as 8 * published by the Free Software Foundation. 9 * 10 * ARM architecture version 3 TLB handling functions. 11 * 12 * Processors: ARM610, ARM710. 13 */ 14#include <linux/linkage.h> 15#include <linux/init.h> 16#include <asm/asm-offsets.h> 17#include <asm/tlbflush.h> 18#include "proc-macros.S" 19 20 .align 5 21/* 22 * v3_flush_user_tlb_range(start, end, mm) 23 * 24 * Invalidate a range of TLB entries in the specified address space. 25 * 26 * - start - range start address 27 * - end - range end address 28 * - mm - mm_struct describing address space 29 */ 30 .align 5 31ENTRY(v3_flush_user_tlb_range) 32 vma_vm_mm r2, r2 33 act_mm r3 @ get current->active_mm 34 teq r2, r3 @ == mm ? 35 movne pc, lr @ no, we dont do anything 36ENTRY(v3_flush_kern_tlb_range) 37 bic r0, r0, #0x0ff 38 bic r0, r0, #0xf00 391: mcr p15, 0, r0, c6, c0, 0 @ invalidate TLB entry 40 add r0, r0, #PAGE_SZ 41 cmp r0, r1 42 blo 1b 43 mov pc, lr 44 45 __INITDATA 46 47 .type v3_tlb_fns, #object 48ENTRY(v3_tlb_fns) 49 .long v3_flush_user_tlb_range 50 .long v3_flush_kern_tlb_range 51 .long v3_tlb_flags 52 .size v3_tlb_fns, . - v3_tlb_fns 53