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

exceptions.h (1928B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 * Preliminary support for HW exception handing for Microblaze
      4 *
      5 * Copyright (C) 2008-2009 Michal Simek <monstr@monstr.eu>
      6 * Copyright (C) 2008-2009 PetaLogix
      7 * Copyright (C) 2005 John Williams <jwilliams@itee.uq.edu.au>
      8 */
      9
     10#ifndef _ASM_MICROBLAZE_EXCEPTIONS_H
     11#define _ASM_MICROBLAZE_EXCEPTIONS_H
     12
     13#ifdef __KERNEL__
     14#ifndef __ASSEMBLY__
     15
     16/* Macros to enable and disable HW exceptions in the MSR */
     17/* Define MSR enable bit for HW exceptions */
     18#define HWEX_MSR_BIT (1 << 8)
     19
     20#if CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR
     21#define __enable_hw_exceptions()					\
     22	__asm__ __volatile__ ("	msrset	r0, %0;				\
     23				nop;"					\
     24				:					\
     25				: "i" (HWEX_MSR_BIT)			\
     26				: "memory")
     27
     28#define __disable_hw_exceptions()					\
     29	__asm__ __volatile__ ("	msrclr r0, %0;				\
     30				nop;"					\
     31				:					\
     32				: "i" (HWEX_MSR_BIT)			\
     33				: "memory")
     34#else /* !CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR */
     35#define __enable_hw_exceptions()					\
     36	__asm__ __volatile__ ("						\
     37				mfs	r12, rmsr;			\
     38				nop;					\
     39				ori	r12, r12, %0;			\
     40				mts	rmsr, r12;			\
     41				nop;"					\
     42				:					\
     43				: "i" (HWEX_MSR_BIT)			\
     44				: "memory", "r12")
     45
     46#define __disable_hw_exceptions()					\
     47	__asm__ __volatile__ ("						\
     48				mfs	r12, rmsr;			\
     49				nop;					\
     50				andi	r12, r12, ~%0;			\
     51				mts	rmsr, r12;			\
     52				nop;"					\
     53				:					\
     54				: "i" (HWEX_MSR_BIT)			\
     55				: "memory", "r12")
     56#endif /* CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR */
     57
     58asmlinkage void full_exception(struct pt_regs *regs, unsigned int type,
     59							int fsr, int addr);
     60
     61asmlinkage void sw_exception(struct pt_regs *regs);
     62void bad_page_fault(struct pt_regs *regs, unsigned long address, int sig);
     63
     64void die(const char *str, struct pt_regs *fp, long err);
     65void _exception(int signr, struct pt_regs *regs, int code, unsigned long addr);
     66
     67#endif /*__ASSEMBLY__ */
     68#endif /* __KERNEL__ */
     69#endif /* _ASM_MICROBLAZE_EXCEPTIONS_H */