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
14SYM_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
31SYM_FUNC_END(swsusp_asm_suspend)
32
33SYM_FUNC_START(swsusp_asm_resume)
34	la.pcrel	t0, restore_pblist
35	PTR_L		t0, t0, 0
360:
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
411:
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
66SYM_FUNC_END(swsusp_asm_resume)
67