From adc4cefae9cfafc1c88b789021266d6f09a0ecef Mon Sep 17 00:00:00 2001 From: Appana Durga Kedareswara rao Date: Mon, 27 Jun 2022 12:10:24 +0530 Subject: microblaze: Add support for error injection To inject the error using the tmr inject IP reset vectors need to be placed in lmb(bram) due to the limitation in HW when this code runs out of DDR. Below code adds the error inject code to the .init.ivt section to copy it in machine_early_init to lmb/Bram location. C_BASE_VECTORS which allow moving reset vectors out of 0 location is not currently supported by Microblaze architecture, that's why all the time reset vectors with injection code is all the time copied to address 0. As of now getting this functionality working CPU switches to real mode and simply jumps to bram, which causes triggering of fault which continues to call_xmb_manager_break break handler which will at the end calls the error count callback function and performs recovery. Signed-off-by: Appana Durga Kedareswara rao Link: https://lore.kernel.org/r/20220627064024.771037-4-appana.durga.rao@xilinx.com Signed-off-by: Michal Simek --- arch/microblaze/include/asm/xilinx_mb_manager.h | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'arch/microblaze/include/asm') diff --git a/arch/microblaze/include/asm/xilinx_mb_manager.h b/arch/microblaze/include/asm/xilinx_mb_manager.h index 392c3aa278dc..7b6995722b0c 100644 --- a/arch/microblaze/include/asm/xilinx_mb_manager.h +++ b/arch/microblaze/include/asm/xilinx_mb_manager.h @@ -5,6 +5,8 @@ #ifndef _XILINX_MB_MANAGER_H #define _XILINX_MB_MANAGER_H +# ifndef __ASSEMBLY__ + #include /* @@ -17,5 +19,11 @@ void xmb_manager_register(uintptr_t phys_baseaddr, u32 cr_val, void (*callback)(void *data), void *priv, void (*reset_callback)(void *data)); +asmlinkage void xmb_inject_err(void); + +# endif /* __ASSEMBLY__ */ + +/* Error injection offset */ +#define XMB_INJECT_ERR_OFFSET 0x200 #endif /* _XILINX_MB_MANAGER_H */ -- cgit v1.3.1