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