162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (C) 2021 SiFive 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci#include <linux/linkage.h> 762306a36Sopenharmony_ci#include <asm/asm.h> 862306a36Sopenharmony_ci#include <asm/asm-offsets.h> 962306a36Sopenharmony_ci#include <asm/alternative.h> 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci.macro ADD_SIGN_EXT pt_reg badaddr tmp_reg 1262306a36Sopenharmony_ci REG_L \badaddr, PT_BADADDR(\pt_reg) 1362306a36Sopenharmony_ci li \tmp_reg,1 1462306a36Sopenharmony_ci slli \tmp_reg,\tmp_reg,0x26 1562306a36Sopenharmony_ci and \tmp_reg,\tmp_reg,\badaddr 1662306a36Sopenharmony_ci beqz \tmp_reg, 1f 1762306a36Sopenharmony_ci li \tmp_reg,-1 1862306a36Sopenharmony_ci slli \tmp_reg,\tmp_reg,0x27 1962306a36Sopenharmony_ci or \badaddr,\tmp_reg,\badaddr 2062306a36Sopenharmony_ci REG_S \badaddr, PT_BADADDR(\pt_reg) 2162306a36Sopenharmony_ci1: 2262306a36Sopenharmony_ci.endm 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ciENTRY(sifive_cip_453_page_fault_trp) 2562306a36Sopenharmony_ci ADD_SIGN_EXT a0, t0, t1 2662306a36Sopenharmony_ci#ifdef CONFIG_MMU 2762306a36Sopenharmony_ci la t0, do_page_fault 2862306a36Sopenharmony_ci#else 2962306a36Sopenharmony_ci la t0, do_trap_unknown 3062306a36Sopenharmony_ci#endif 3162306a36Sopenharmony_ci jr t0 3262306a36Sopenharmony_ciEND(sifive_cip_453_page_fault_trp) 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ciENTRY(sifive_cip_453_insn_fault_trp) 3562306a36Sopenharmony_ci ADD_SIGN_EXT a0, t0, t1 3662306a36Sopenharmony_ci la t0, do_trap_insn_fault 3762306a36Sopenharmony_ci jr t0 3862306a36Sopenharmony_ciEND(sifive_cip_453_insn_fault_trp) 39