/*
 * This file is subject to the terms and conditions of the GNU General Public
 * License.  See the file "COPYING" in the main directory of this archive
 * for more details.
 *
 * Copyright (C) 2006 Cavium Networks
 * Cache error handler
 */

#include <asm/asm.h>
#include <asm/regdef.h>
#include <asm/mipsregs.h>
#include <asm/stackframe.h>

/*
 * Handle cache error. Indicate to the second level handler whether
 * the exception is recoverable.
 */
	LEAF(except_vec2_octeon)

	.set	push
	.set	mips64r2
	.set	noreorder
	.set	noat


	/* due to an errata we need to read the COP0 CacheErr (Dcache)
	 * before any cache/DRAM access	 */

	rdhwr	k0, $0	      /* get core_id */
	PTR_LA	k1, cache_err_dcache
	sll	k0, k0, 3
	PTR_ADDU k1, k0, k1    /* k1 = &cache_err_dcache[core_id] */

	dmfc0	k0, CP0_CACHEERR, 1
	sd	k0, (k1)
	dmtc0	$0, CP0_CACHEERR, 1

	/* check whether this is a nested exception */
	mfc0	k1, CP0_STATUS
	andi	k1, k1, ST0_EXL
	beqz	k1, 1f
	 nop
	j	cache_parity_error_octeon_non_recoverable
	 nop

	/* exception is recoverable */
1:	j	handle_cache_err
	 nop

	.set	pop
	END(except_vec2_octeon)

 /* We need to jump to handle_cache_err so that the previous handler
  * can fit within 0x80 bytes. We also move from 0xFFFFFFFFAXXXXXXX
  * space (uncached) to the 0xFFFFFFFF8XXXXXXX space (cached).	*/
	LEAF(handle_cache_err)
	.set	push
	.set	noreorder
	.set	noat

	SAVE_ALL
	KMODE
	jal	cache_parity_error_octeon_recoverable
	nop
	j	ret_from_exception
	nop

	.set pop
	END(handle_cache_err)
