1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Hibernation support specific for LoongArch
4  *
5  * Author: Huacai Chen <chenhuacai@loongson.cn>
6  * Copyright (C) 2020-2022 Loongson Technology Corporation Limited
7  */
8 #include <linux/linkage.h>
9 #include <asm/asm.h>
10 #include <asm/asm-offsets.h>
11 #include <asm/regdef.h>
12 
13 .text
14 SYM_FUNC_START(swsusp_asm_suspend)
15 	la.pcrel	t0, saved_regs
16 	PTR_S		ra, t0, PT_R1
17 	PTR_S		tp, t0, PT_R2
18 	PTR_S		sp, t0, PT_R3
19 	PTR_S		u0, t0, PT_R21
20 	PTR_S		fp, t0, PT_R22
21 	PTR_S		s0, t0, PT_R23
22 	PTR_S		s1, t0, PT_R24
23 	PTR_S		s2, t0, PT_R25
24 	PTR_S		s3, t0, PT_R26
25 	PTR_S		s4, t0, PT_R27
26 	PTR_S		s5, t0, PT_R28
27 	PTR_S		s6, t0, PT_R29
28 	PTR_S		s7, t0, PT_R30
29 	PTR_S		s8, t0, PT_R31
30 	b		swsusp_save
31 SYM_FUNC_END(swsusp_asm_suspend)
32 
33 SYM_FUNC_START(swsusp_asm_resume)
34 	la.pcrel	t0, restore_pblist
35 	PTR_L		t0, t0, 0
36 0:
37 	PTR_L		t1, t0, PBE_ADDRESS  /* source */
38 	PTR_L		t2, t0, PBE_ORIG_ADDRESS /* destination */
39 	PTR_LI		t3, _PAGE_SIZE
40 	PTR_ADD		t3, t3, t1
41 1:
42 	REG_L		t8, t1, 0
43 	REG_S		t8, t2, 0
44 	PTR_ADDI	t1, t1, SZREG
45 	PTR_ADDI	t2, t2, SZREG
46 	bne		t1, t3, 1b
47 	PTR_L		t0, t0, PBE_NEXT
48 	bnez		t0, 0b
49 	la.pcrel	t0, saved_regs
50 	PTR_L		ra, t0, PT_R1
51 	PTR_L		tp, t0, PT_R2
52 	PTR_L		sp, t0, PT_R3
53 	PTR_L		u0, t0, PT_R21
54 	PTR_L		fp, t0, PT_R22
55 	PTR_L		s0, t0, PT_R23
56 	PTR_L		s1, t0, PT_R24
57 	PTR_L		s2, t0, PT_R25
58 	PTR_L		s3, t0, PT_R26
59 	PTR_L		s4, t0, PT_R27
60 	PTR_L		s5, t0, PT_R28
61 	PTR_L		s6, t0, PT_R29
62 	PTR_L		s7, t0, PT_R30
63 	PTR_L		s8, t0, PT_R31
64 	PTR_LI		a0, 0x0
65 	jirl		zero, ra, 0
66 SYM_FUNC_END(swsusp_asm_resume)
67