linux-loongson/arch/microblaze/include/asm/xilinx_mb_manager.h
Appana Durga Kedareswara rao adc4cefae9 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 <appana.durga.rao@xilinx.com>
Link: https://lore.kernel.org/r/20220627064024.771037-4-appana.durga.rao@xilinx.com
Signed-off-by: Michal Simek <michal.simek@amd.com>
2022-09-26 14:13:29 +02:00

30 lines
859 B
C

/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright (C) 2022 Xilinx, Inc.
*/
#ifndef _XILINX_MB_MANAGER_H
#define _XILINX_MB_MANAGER_H
# ifndef __ASSEMBLY__
#include <linux/of_address.h>
/*
* When the break vector gets asserted because of error injection, the break
* signal must be blocked before exiting from the break handler, Below api
* updates the manager address and control register and error counter callback
* arguments, which will be used by the break handler to block the break and
* call the callback function.
*/
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 */