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