Merge kernel.org/pub/scm/linux/kernel/git/aegl/linux-2.6.git
[linux-2.6] / arch / mips / mm / cex-gen.S
1 /*
2  * This file is subject to the terms and conditions of the GNU General Public
3  * License.  See the file "COPYING" in the main directory of this archive
4  * for more details.
5  *
6  * Copyright (C) 1995 - 1999 Ralf Baechle
7  * Copyright (C) 1999 Silicon Graphics, Inc.
8  *
9  * Cache error handler
10  */
11 #include <asm/asm.h>
12 #include <asm/regdef.h>
13 #include <asm/mipsregs.h>
14 #include <asm/stackframe.h>
15
16 /*
17  * Game over.  Go to the button.  Press gently.  Swear where allowed by
18  * legislation.
19  */
20         LEAF(except_vec2_generic)
21         .set    noreorder
22         .set    noat
23         .set    mips0
24         /*
25          * This is a very bad place to be.  Our cache error
26          * detection has triggered.  If we have write-back data
27          * in the cache, we may not be able to recover.  As a
28          * first-order desperate measure, turn off KSEG0 cacheing.
29          */
30         mfc0    k0,CP0_CONFIG
31         li      k1,~CONF_CM_CMASK
32         and     k0,k0,k1
33         ori     k0,k0,CONF_CM_UNCACHED
34         mtc0    k0,CP0_CONFIG
35         /* Give it a few cycles to sink in... */
36         nop
37         nop
38         nop
39
40         j       cache_parity_error
41         nop
42         END(except_vec2_generic)