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 062d61a1f87d..77458548e031 100644 --- a/arch/arm/mm/flush.c +++ b/arch/arm/mm/flush.c | |||
@@ -22,15 +22,12 @@ | |||
22 | 22 | ||
23 | #ifdef CONFIG_CPU_CACHE_VIPT | 23 | #ifdef CONFIG_CPU_CACHE_VIPT |
24 | 24 | ||
25 | #define ALIAS_FLUSH_START 0xffff4000 | ||
26 | |||
27 | static void flush_pfn_alias(unsigned long pfn, unsigned long vaddr) | 25 | static void flush_pfn_alias(unsigned long pfn, unsigned long vaddr) |
28 | { | 26 | { |
29 | unsigned long to = ALIAS_FLUSH_START + (CACHE_COLOUR(vaddr) << PAGE_SHIFT); | 27 | unsigned long to = FLUSH_ALIAS_START + (CACHE_COLOUR(vaddr) << PAGE_SHIFT); |
30 | const int zero = 0; | 28 | const int zero = 0; |
31 | 29 | ||
32 | set_pte_ext(TOP_PTE(to), pfn_pte(pfn, PAGE_KERNEL), 0); | 30 | set_top_pte(to, pfn_pte(pfn, PAGE_KERNEL)); |
33 | flush_tlb_kernel_page(to); | ||
34 | 31 | ||
35 | asm( "mcrr p15, 0, %1, %0, c14\n" | 32 | asm( "mcrr p15, 0, %1, %0, c14\n" |
36 | " mcr p15, 0, %2, c7, c10, 4" | 33 | " mcr p15, 0, %2, c7, c10, 4" |
@@ -41,13 +38,12 @@ static void flush_pfn_alias(unsigned long pfn, unsigned long vaddr) | |||
41 | 38 | ||
42 | static void flush_icache_alias(unsigned long pfn, unsigned long vaddr, unsigned long len) | 39 | static void flush_icache_alias(unsigned long pfn, unsigned long vaddr, unsigned long len) |
43 | { | 40 | { |
44 | unsigned long colour = CACHE_COLOUR(vaddr); | 41 | unsigned long va = FLUSH_ALIAS_START + (CACHE_COLOUR(vaddr) << PAGE_SHIFT); |
45 | unsigned long offset = vaddr & (PAGE_SIZE - 1); | 42 | unsigned long offset = vaddr & (PAGE_SIZE - 1); |
46 | unsigned long to; | 43 | unsigned long to; |
47 | 44 | ||
48 | set_pte_ext(TOP_PTE(ALIAS_FLUSH_START) + colour, pfn_pte(pfn, PAGE_KERNEL), 0); | 45 | set_top_pte(va, pfn_pte(pfn, PAGE_KERNEL)); |
49 | to = ALIAS_FLUSH_START + (colour << PAGE_SHIFT) + offset; | 46 | to = va + offset; |
50 | flush_tlb_kernel_page(to); | ||
51 | flush_icache_range(to, to + len); | 47 | flush_icache_range(to, to + len); |
52 | } | 48 | } |
53 | 49 | ||