1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * Copyright (c) 2021 Western Digital Corporat 4 * Copyright (c) 2022 Ventana Micro Systems In 5 */ 6 7 #include <linux/linkage.h> 8 #include <linux/cfi_types.h> 9 #include <asm/asm.h> 10 #include <asm/asm-offsets.h> 11 #include <asm/assembler.h> 12 #include <asm/csr.h> 13 #include <asm/xip_fixup.h> 14 15 .text 16 .altmacro 17 .option norelax 18 19 SYM_FUNC_START(__cpu_suspend_enter) 20 /* Save registers (except A0 and T0-T6 21 REG_S ra, (SUSPEND_CONTEXT_REGS + PT 22 REG_S sp, (SUSPEND_CONTEXT_REGS + PT 23 REG_S gp, (SUSPEND_CONTEXT_REGS + PT 24 REG_S tp, (SUSPEND_CONTEXT_REGS + PT 25 REG_S s0, (SUSPEND_CONTEXT_REGS + PT 26 REG_S s1, (SUSPEND_CONTEXT_REGS + PT 27 REG_S a1, (SUSPEND_CONTEXT_REGS + PT 28 REG_S a2, (SUSPEND_CONTEXT_REGS + PT 29 REG_S a3, (SUSPEND_CONTEXT_REGS + PT 30 REG_S a4, (SUSPEND_CONTEXT_REGS + PT 31 REG_S a5, (SUSPEND_CONTEXT_REGS + PT 32 REG_S a6, (SUSPEND_CONTEXT_REGS + PT 33 REG_S a7, (SUSPEND_CONTEXT_REGS + PT 34 REG_S s2, (SUSPEND_CONTEXT_REGS + PT 35 REG_S s3, (SUSPEND_CONTEXT_REGS + PT 36 REG_S s4, (SUSPEND_CONTEXT_REGS + PT 37 REG_S s5, (SUSPEND_CONTEXT_REGS + PT 38 REG_S s6, (SUSPEND_CONTEXT_REGS + PT 39 REG_S s7, (SUSPEND_CONTEXT_REGS + PT 40 REG_S s8, (SUSPEND_CONTEXT_REGS + PT 41 REG_S s9, (SUSPEND_CONTEXT_REGS + PT 42 REG_S s10, (SUSPEND_CONTEXT_REGS + P 43 REG_S s11, (SUSPEND_CONTEXT_REGS + P 44 45 /* Save CSRs */ 46 csrr t0, CSR_EPC 47 REG_S t0, (SUSPEND_CONTEXT_REGS + PT 48 csrr t0, CSR_STATUS 49 REG_S t0, (SUSPEND_CONTEXT_REGS + PT 50 csrr t0, CSR_TVAL 51 REG_S t0, (SUSPEND_CONTEXT_REGS + PT 52 csrr t0, CSR_CAUSE 53 REG_S t0, (SUSPEND_CONTEXT_REGS + PT 54 55 /* Return non-zero value */ 56 li a0, 1 57 58 /* Return to C code */ 59 ret 60 SYM_FUNC_END(__cpu_suspend_enter) 61 62 SYM_TYPED_FUNC_START(__cpu_resume_enter) 63 /* Load the global pointer */ 64 load_global_pointer 65 66 #ifdef CONFIG_MMU 67 /* Save A0 and A1 */ 68 add t0, a0, zero 69 add t1, a1, zero 70 71 /* Enable MMU */ 72 la a0, swapper_pg_dir 73 XIP_FIXUP_OFFSET a0 74 call relocate_enable_mmu 75 76 /* Restore A0 and A1 */ 77 add a0, t0, zero 78 add a1, t1, zero 79 #endif 80 81 /* Make A0 point to suspend context */ 82 add a0, a1, zero 83 84 /* Restore CSRs */ 85 suspend_restore_csrs 86 87 /* Restore registers (except A0 and T0 88 suspend_restore_regs 89 90 /* Return zero value */ 91 add a0, zero, zero 92 93 /* Return to C code */ 94 ret 95 SYM_FUNC_END(__cpu_resume_enter)
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.