| /* |
| * cache.S - PowerPC version |
| * |
| * Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org) |
| * |
| * Copyright (C) 1996 Paul Mackerras |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License as published by |
| * the Free Software Foundation; either version 2 of the License, or |
| * (at your option) any later version. |
| * |
| * This program is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| * GNU General Public License for more details. |
| * |
| * You should have received a copy of the GNU General Public License |
| * along with this program; if not, write to the Free Software |
| * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
| */ |
| |
| #include "asm/ppc_asm.tmpl" |
| #include "asm/processor.h" |
| |
| /* |
| * Write any modified data cache blocks out to memory |
| * and invalidate the corresponding instruction cache blocks. |
| * This is a no-op on the 601. |
| * |
| * flush_icache_range(unsigned long start, unsigned long stop) |
| */ |
| |
| CACHE_LINE_SIZE = 32 |
| LG_CACHE_LINE_SIZE = 5 |
| |
| .text |
| .globl flush_icache_range |
| .type flush_icache_range,@function |
| flush_icache_range: |
| mfspr r5,PVR |
| rlwinm r5,r5,16,16,31 |
| cmpi 0,r5,1 |
| beqlr /* for 601, do nothing */ |
| li r5,CACHE_LINE_SIZE-1 |
| andc r3,r3,r5 |
| subf r4,r3,r4 |
| add r4,r4,r5 |
| srwi. r4,r4,LG_CACHE_LINE_SIZE |
| beqlr |
| mtctr r4 |
| mr r6,r3 |
| 1: dcbst 0,r3 |
| addi r3,r3,CACHE_LINE_SIZE |
| bdnz 1b |
| sync /* wait for dcbst's to get to ram */ |
| mtctr r4 |
| 2: icbi 0,r6 |
| addi r6,r6,CACHE_LINE_SIZE |
| bdnz 2b |
| sync |
| isync |
| blr |
| |
| .text |
| .globl turn_off_mmu |
| .type turn_off_mmu,@function |
| turn_off_mmu: |
| lis r0,1f@h |
| ori r0,r0,1f@l |
| mtspr SRR0,r0 |
| mfmsr r0 |
| lis r2,(~(MSR_DR|MSR_IR))@h |
| ori r2,r2,(~(MSR_DR|MSR_IR))@l |
| and r0,r0,r2 |
| mtspr SRR1,r0 |
| rfi |
| 1: |
| blr |