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