cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

cex-oct.S (1501B)


      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) 2006 Cavium Networks
      7 * Cache error handler
      8 */
      9
     10#include <asm/asm.h>
     11#include <asm/regdef.h>
     12#include <asm/mipsregs.h>
     13#include <asm/stackframe.h>
     14
     15/*
     16 * Handle cache error. Indicate to the second level handler whether
     17 * the exception is recoverable.
     18 */
     19	LEAF(except_vec2_octeon)
     20
     21	.set	push
     22	.set	mips64r2
     23	.set	noreorder
     24	.set	noat
     25
     26
     27	/* due to an errata we need to read the COP0 CacheErr (Dcache)
     28	 * before any cache/DRAM access	 */
     29
     30	rdhwr	k0, $0	      /* get core_id */
     31	PTR_LA	k1, cache_err_dcache
     32	sll	k0, k0, 3
     33	PTR_ADDU k1, k0, k1    /* k1 = &cache_err_dcache[core_id] */
     34
     35	dmfc0	k0, CP0_CACHEERR, 1
     36	sd	k0, (k1)
     37	dmtc0	$0, CP0_CACHEERR, 1
     38
     39	/* check whether this is a nested exception */
     40	mfc0	k1, CP0_STATUS
     41	andi	k1, k1, ST0_EXL
     42	beqz	k1, 1f
     43	 nop
     44	j	cache_parity_error_octeon_non_recoverable
     45	 nop
     46
     47	/* exception is recoverable */
     481:	j	handle_cache_err
     49	 nop
     50
     51	.set	pop
     52	END(except_vec2_octeon)
     53
     54 /* We need to jump to handle_cache_err so that the previous handler
     55  * can fit within 0x80 bytes. We also move from 0xFFFFFFFFAXXXXXXX
     56  * space (uncached) to the 0xFFFFFFFF8XXXXXXX space (cached).	*/
     57	LEAF(handle_cache_err)
     58	.set	push
     59	.set	noreorder
     60	.set	noat
     61
     62	SAVE_ALL
     63	KMODE
     64	jal	cache_parity_error_octeon_recoverable
     65	nop
     66	j	ret_from_exception
     67	nop
     68
     69	.set pop
     70	END(handle_cache_err)