xref: /openbmc/linux/arch/riscv/kernel/crash_save_regs.S (revision e53d28180d4d0fd12b6d2bde49cb87aa775b6ba8)
1*e53d2818SNick Kossifidis/* SPDX-License-Identifier: GPL-2.0 */
2*e53d2818SNick Kossifidis/*
3*e53d2818SNick Kossifidis * Copyright (C) 2020 FORTH-ICS/CARV
4*e53d2818SNick Kossifidis *  Nick Kossifidis <mick@ics.forth.gr>
5*e53d2818SNick Kossifidis */
6*e53d2818SNick Kossifidis
7*e53d2818SNick Kossifidis#include <asm/asm.h>    	/* For RISCV_* and REG_* macros */
8*e53d2818SNick Kossifidis#include <asm/csr.h>		/* For CSR_* macros */
9*e53d2818SNick Kossifidis#include <asm/asm-offsets.h>	/* For offsets on pt_regs */
10*e53d2818SNick Kossifidis#include <linux/linkage.h>	/* For SYM_* macros */
11*e53d2818SNick Kossifidis
12*e53d2818SNick Kossifidis.section ".text"
13*e53d2818SNick KossifidisSYM_CODE_START(riscv_crash_save_regs)
14*e53d2818SNick Kossifidis	REG_S ra,  PT_RA(a0)	/* x1 */
15*e53d2818SNick Kossifidis	REG_S sp,  PT_SP(a0)	/* x2 */
16*e53d2818SNick Kossifidis	REG_S gp,  PT_GP(a0)	/* x3 */
17*e53d2818SNick Kossifidis	REG_S tp,  PT_TP(a0)	/* x4 */
18*e53d2818SNick Kossifidis	REG_S t0,  PT_T0(a0)	/* x5 */
19*e53d2818SNick Kossifidis	REG_S t1,  PT_T1(a0)	/* x6 */
20*e53d2818SNick Kossifidis	REG_S t2,  PT_T2(a0)	/* x7 */
21*e53d2818SNick Kossifidis	REG_S s0,  PT_S0(a0)	/* x8/fp */
22*e53d2818SNick Kossifidis	REG_S s1,  PT_S1(a0)	/* x9 */
23*e53d2818SNick Kossifidis	REG_S a0,  PT_A0(a0)	/* x10 */
24*e53d2818SNick Kossifidis	REG_S a1,  PT_A1(a0)	/* x11 */
25*e53d2818SNick Kossifidis	REG_S a2,  PT_A2(a0)	/* x12 */
26*e53d2818SNick Kossifidis	REG_S a3,  PT_A3(a0)	/* x13 */
27*e53d2818SNick Kossifidis	REG_S a4,  PT_A4(a0)	/* x14 */
28*e53d2818SNick Kossifidis	REG_S a5,  PT_A5(a0)	/* x15 */
29*e53d2818SNick Kossifidis	REG_S a6,  PT_A6(a0)	/* x16 */
30*e53d2818SNick Kossifidis	REG_S a7,  PT_A7(a0)	/* x17 */
31*e53d2818SNick Kossifidis	REG_S s2,  PT_S2(a0)	/* x18 */
32*e53d2818SNick Kossifidis	REG_S s3,  PT_S3(a0)	/* x19 */
33*e53d2818SNick Kossifidis	REG_S s4,  PT_S4(a0)	/* x20 */
34*e53d2818SNick Kossifidis	REG_S s5,  PT_S5(a0)	/* x21 */
35*e53d2818SNick Kossifidis	REG_S s6,  PT_S6(a0)	/* x22 */
36*e53d2818SNick Kossifidis	REG_S s7,  PT_S7(a0)	/* x23 */
37*e53d2818SNick Kossifidis	REG_S s8,  PT_S8(a0)	/* x24 */
38*e53d2818SNick Kossifidis	REG_S s9,  PT_S9(a0)	/* x25 */
39*e53d2818SNick Kossifidis	REG_S s10, PT_S10(a0)	/* x26 */
40*e53d2818SNick Kossifidis	REG_S s11, PT_S11(a0)	/* x27 */
41*e53d2818SNick Kossifidis	REG_S t3,  PT_T3(a0)	/* x28 */
42*e53d2818SNick Kossifidis	REG_S t4,  PT_T4(a0)	/* x29 */
43*e53d2818SNick Kossifidis	REG_S t5,  PT_T5(a0)	/* x30 */
44*e53d2818SNick Kossifidis	REG_S t6,  PT_T6(a0)	/* x31 */
45*e53d2818SNick Kossifidis
46*e53d2818SNick Kossifidis	csrr t1, CSR_STATUS
47*e53d2818SNick Kossifidis	csrr t2, CSR_EPC
48*e53d2818SNick Kossifidis	csrr t3, CSR_TVAL
49*e53d2818SNick Kossifidis	csrr t4, CSR_CAUSE
50*e53d2818SNick Kossifidis
51*e53d2818SNick Kossifidis	REG_S t1, PT_STATUS(a0)
52*e53d2818SNick Kossifidis	REG_S t2, PT_EPC(a0)
53*e53d2818SNick Kossifidis	REG_S t3, PT_BADADDR(a0)
54*e53d2818SNick Kossifidis	REG_S t4, PT_CAUSE(a0)
55*e53d2818SNick Kossifidis	ret
56*e53d2818SNick KossifidisSYM_CODE_END(riscv_crash_save_regs)
57