diff options
Diffstat (limited to 'arch/arm/mm/flush.c')
-rw-r--r-- | arch/arm/mm/flush.c | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/arch/arm/mm/flush.c b/arch/arm/mm/flush.c index 1a8d4aa821be..4d0b70f035eb 100644 --- a/arch/arm/mm/flush.c +++ b/arch/arm/mm/flush.c | |||
@@ -23,15 +23,12 @@ | |||
23 | 23 | ||
24 | #ifdef CONFIG_CPU_CACHE_VIPT | 24 | #ifdef CONFIG_CPU_CACHE_VIPT |
25 | 25 | ||
26 | #define ALIAS_FLUSH_START 0xffff4000 | ||
27 | |||
28 | static void flush_pfn_alias(unsigned long pfn, unsigned long vaddr) | 26 | static void flush_pfn_alias(unsigned long pfn, unsigned long vaddr) |
29 | { | 27 | { |
30 | unsigned long to = ALIAS_FLUSH_START + (CACHE_COLOUR(vaddr) << PAGE_SHIFT); | 28 | unsigned long to = FLUSH_ALIAS_START + (CACHE_COLOUR(vaddr) << PAGE_SHIFT); |
31 | const int zero = 0; | 29 | const int zero = 0; |
32 | 30 | ||
33 | set_pte_ext(TOP_PTE(to), pfn_pte(pfn, PAGE_KERNEL), 0); | 31 | set_top_pte(to, pfn_pte(pfn, PAGE_KERNEL)); |
34 | flush_tlb_kernel_page(to); | ||
35 | 32 | ||
36 | asm( "mcrr p15, 0, %1, %0, c14\n" | 33 | asm( "mcrr p15, 0, %1, %0, c14\n" |
37 | " mcr p15, 0, %2, c7, c10, 4" | 34 | " mcr p15, 0, %2, c7, c10, 4" |
@@ -42,13 +39,12 @@ static void flush_pfn_alias(unsigned long pfn, unsigned long vaddr) | |||
42 | 39 | ||
43 | static void flush_icache_alias(unsigned long pfn, unsigned long vaddr, unsigned long len) | 40 | static void flush_icache_alias(unsigned long pfn, unsigned long vaddr, unsigned long len) |
44 | { | 41 | { |
45 | unsigned long colour = CACHE_COLOUR(vaddr); | 42 | unsigned long va = FLUSH_ALIAS_START + (CACHE_COLOUR(vaddr) << PAGE_SHIFT); |
46 | unsigned long offset = vaddr & (PAGE_SIZE - 1); | 43 | unsigned long offset = vaddr & (PAGE_SIZE - 1); |
47 | unsigned long to; | 44 | unsigned long to; |
48 | 45 | ||
49 | set_pte_ext(TOP_PTE(ALIAS_FLUSH_START) + colour, pfn_pte(pfn, PAGE_KERNEL), 0); | 46 | set_top_pte(va, pfn_pte(pfn, PAGE_KERNEL)); |
50 | to = ALIAS_FLUSH_START + (colour << PAGE_SHIFT) + offset; | 47 | to = va + offset; |
51 | flush_tlb_kernel_page(to); | ||
52 | flush_icache_range(to, to + len); | 48 | flush_icache_range(to, to + len); |
53 | } | 49 | } |
54 | 50 | ||