tlb-fa.S 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /*
  2. * linux/arch/arm/mm/tlb-fa.S
  3. *
  4. * Copyright (C) 2005 Faraday Corp.
  5. * Copyright (C) 2008-2009 Paulius Zaleckas <paulius.zaleckas@teltonika.lt>
  6. *
  7. * Based on tlb-v4wbi.S:
  8. * Copyright (C) 1997-2002 Russell King
  9. *
  10. * This program is free software; you can redistribute it and/or modify
  11. * it under the terms of the GNU General Public License version 2 as
  12. * published by the Free Software Foundation.
  13. *
  14. * ARM architecture version 4, Faraday variation.
  15. * This assume an unified TLBs, with a write buffer, and branch target buffer (BTB)
  16. *
  17. * Processors: FA520 FA526 FA626
  18. */
  19. #include <linux/linkage.h>
  20. #include <linux/init.h>
  21. #include <asm/assembler.h>
  22. #include <asm/asm-offsets.h>
  23. #include <asm/tlbflush.h>
  24. #include "proc-macros.S"
  25. /*
  26. * flush_user_tlb_range(start, end, mm)
  27. *
  28. * Invalidate a range of TLB entries in the specified address space.
  29. *
  30. * - start - range start address
  31. * - end - range end address
  32. * - mm - mm_struct describing address space
  33. */
  34. .align 4
  35. ENTRY(fa_flush_user_tlb_range)
  36. vma_vm_mm ip, r2
  37. act_mm r3 @ get current->active_mm
  38. eors r3, ip, r3 @ == mm ?
  39. retne lr @ no, we dont do anything
  40. mov r3, #0
  41. mcr p15, 0, r3, c7, c10, 4 @ drain WB
  42. bic r0, r0, #0x0ff
  43. bic r0, r0, #0xf00
  44. 1: mcr p15, 0, r0, c8, c7, 1 @ invalidate UTLB entry
  45. add r0, r0, #PAGE_SZ
  46. cmp r0, r1
  47. blo 1b
  48. mcr p15, 0, r3, c7, c10, 4 @ data write barrier
  49. ret lr
  50. ENTRY(fa_flush_kern_tlb_range)
  51. mov r3, #0
  52. mcr p15, 0, r3, c7, c10, 4 @ drain WB
  53. bic r0, r0, #0x0ff
  54. bic r0, r0, #0xf00
  55. 1: mcr p15, 0, r0, c8, c7, 1 @ invalidate UTLB entry
  56. add r0, r0, #PAGE_SZ
  57. cmp r0, r1
  58. blo 1b
  59. mcr p15, 0, r3, c7, c10, 4 @ data write barrier
  60. mcr p15, 0, r3, c7, c5, 4 @ prefetch flush (isb)
  61. ret lr
  62. __INITDATA
  63. /* define struct cpu_tlb_fns (see <asm/tlbflush.h> and proc-macros.S) */
  64. define_tlb_functions fa, fa_tlb_flags