Skip to content

Commit

Permalink
m68k: add TLB flush support for the ColdFire V4e MMU hardware
Browse files Browse the repository at this point in the history
The ColdFire V4e MMU is unlike any of the other m68k MMU hardware.
It needs its own TLB flush support code.

Signed-off-by: Greg Ungerer <gerg@uclinux.org>
Acked-by: Geert Uytterhoeven <geert@linux-m68k.org>
Acked-by: Matt Waddel <mwaddel@yahoo.com>
Acked-by: Kurt Mahan <kmahan@xmission.com>
  • Loading branch information
Greg Ungerer committed Dec 30, 2011
1 parent 0b0b808 commit b852de4
Showing 1 changed file with 17 additions and 6 deletions.
23 changes: 17 additions & 6 deletions arch/m68k/include/asm/tlbflush.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,13 @@
#ifndef CONFIG_SUN3

#include <asm/current.h>
#include <asm/mcfmmu.h>

static inline void flush_tlb_kernel_page(void *addr)
{
if (CPU_IS_040_OR_060) {
if (CPU_IS_COLDFIRE) {
mmu_write(MMUOR, MMUOR_CNL);
} else if (CPU_IS_040_OR_060) {
mm_segment_t old_fs = get_fs();
set_fs(KERNEL_DS);
__asm__ __volatile__(".chip 68040\n\t"
Expand All @@ -25,12 +28,15 @@ static inline void flush_tlb_kernel_page(void *addr)
*/
static inline void __flush_tlb(void)
{
if (CPU_IS_040_OR_060)
if (CPU_IS_COLDFIRE) {
mmu_write(MMUOR, MMUOR_CNL);
} else if (CPU_IS_040_OR_060) {
__asm__ __volatile__(".chip 68040\n\t"
"pflushan\n\t"
".chip 68k");
else if (CPU_IS_020_OR_030)
} else if (CPU_IS_020_OR_030) {
__asm__ __volatile__("pflush #0,#4");
}
}

static inline void __flush_tlb040_one(unsigned long addr)
Expand All @@ -43,7 +49,9 @@ static inline void __flush_tlb040_one(unsigned long addr)

static inline void __flush_tlb_one(unsigned long addr)
{
if (CPU_IS_040_OR_060)
if (CPU_IS_COLDFIRE)
mmu_write(MMUOR, MMUOR_CNL);
else if (CPU_IS_040_OR_060)
__flush_tlb040_one(addr);
else if (CPU_IS_020_OR_030)
__asm__ __volatile__("pflush #0,#4,(%0)" : : "a" (addr));
Expand All @@ -56,12 +64,15 @@ static inline void __flush_tlb_one(unsigned long addr)
*/
static inline void flush_tlb_all(void)
{
if (CPU_IS_040_OR_060)
if (CPU_IS_COLDFIRE) {
mmu_write(MMUOR, MMUOR_CNL);
} else if (CPU_IS_040_OR_060) {
__asm__ __volatile__(".chip 68040\n\t"
"pflusha\n\t"
".chip 68k");
else if (CPU_IS_020_OR_030)
} else if (CPU_IS_020_OR_030) {
__asm__ __volatile__("pflusha");
}
}

static inline void flush_tlb_mm(struct mm_struct *mm)
Expand Down

0 comments on commit b852de4

Please sign in to comment.