Skip to content

Commit

Permalink
[ARM] 3352/1: DSB required for the completion of a TLB maintenance op…
Browse files Browse the repository at this point in the history
…eration

Patch from Catalin Marinas

Chapter B2.7.3 in the latest ARM ARM (with v6 information) states that
the completion of a TLB maintenance operation is only guaranteed by
the execution of a DSB (Data Syncronization Barrier, formerly Data
Write Barrier or Drain Write Buffer).

Note that a DSB is only needed in the flush_tlb_kernel_* functions
since the completion is guaranteed by a mode change (i.e. switching
back to user mode) for the flush_tlb_user_* functions.

Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
  • Loading branch information
Catalin Marinas authored and Russell King committed Mar 7, 2006
1 parent d11d9b2 commit 6a0e243
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 1 deletion.
2 changes: 1 addition & 1 deletion arch/arm/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ menu "System Type"

choice
prompt "ARM system type"
default ARCH_RPC
default ARCH_VERSATILE

config ARCH_CLPS7500
bool "Cirrus-CL-PS7500FE"
Expand Down
1 change: 1 addition & 0 deletions arch/arm/mm/tlb-v6.S
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ ENTRY(v6wbi_flush_kern_tlb_range)
add r0, r0, #PAGE_SZ
cmp r0, r1
blo 1b
mcr p15, 0, r2, c7, c10, 4 @ data synchronization barrier
mov pc, lr

.section ".text.init", #alloc, #execinstr
Expand Down
6 changes: 6 additions & 0 deletions include/asm-arm/tlbflush.h
Original file line number Diff line number Diff line change
Expand Up @@ -340,6 +340,12 @@ static inline void local_flush_tlb_kernel_page(unsigned long kaddr)
asm("mcr%? p15, 0, %0, c8, c6, 1" : : "r" (kaddr));
if (tlb_flag(TLB_V6_I_PAGE))
asm("mcr%? p15, 0, %0, c8, c5, 1" : : "r" (kaddr));

/* The ARM ARM states that the completion of a TLB maintenance
* operation is only guaranteed by a DSB instruction
*/
if (tlb_flag(TLB_V6_U_PAGE | TLB_V6_D_PAGE | TLB_V6_I_PAGE))
asm("mcr%? p15, 0, %0, c7, c10, 4" : : "r" (zero));
}

/*
Expand Down

0 comments on commit 6a0e243

Please sign in to comment.