diff options
author | Ralf Baechle <ralf@linux-mips.org> | 1997-07-20 14:56:40 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 1997-07-20 14:56:40 +0000 |
commit | e308faf24f68e262d92d294a01ddca7a17e76762 (patch) | |
tree | 22c47cb315811834861f013067878ff664e95abd /arch/m68k/mm | |
parent | 30c6397ce63178fcb3e7963ac247f0a03132aca9 (diff) |
Sync with Linux 2.1.46.
Diffstat (limited to 'arch/m68k/mm')
-rw-r--r-- | arch/m68k/mm/memory.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/arch/m68k/mm/memory.c b/arch/m68k/mm/memory.c index dea7695e8..a135143b2 100644 --- a/arch/m68k/mm/memory.c +++ b/arch/m68k/mm/memory.c @@ -555,16 +555,18 @@ void cache_clear (unsigned long paddr, int len) int tmp; /* - * cwe need special treatment for the first page, in case it - * is not page-aligned. + * We need special treatment for the first page, in case it + * is not page-aligned. Page align the addresses to work + * around bug I17 in the 68060. */ if ((tmp = -paddr & (PAGE_SIZE - 1))) { - pushcl040(paddr); + pushcl040(paddr & PAGE_MASK); if ((len -= tmp) <= 0) return; paddr += tmp; } tmp = PAGE_SIZE; + paddr &= PAGE_MASK; while ((len -= tmp) >= 0) { clear040(paddr); paddr += tmp; @@ -600,6 +602,13 @@ void cache_push (unsigned long paddr, int len) * the '060! */ len += paddr & (PAGE_SIZE - 1); + + /* + * Work around bug I17 in the 68060 affecting some instruction + * lines not being invalidated properly. + */ + paddr &= PAGE_MASK; + do { pushcli040(paddr); paddr += tmp; @@ -638,6 +647,13 @@ void cache_push_v (unsigned long vaddr, int len) /* on 68040, push cache lines for pages in the range */ len += vaddr & (PAGE_SIZE - 1); + + /* + * Work around bug I17 in the 68060 affecting some instruction + * lines not being invalidated properly. + */ + vaddr &= PAGE_MASK; + do { pushv040(vaddr); vaddr += tmp; |