-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
RISC-V: Factor out common code of __cpu_resume_enter()
The cpu_resume() function is very similar for the suspend to disk and suspend to ram cases. Factor out the common code into suspend_restore_csrs macro and suspend_restore_regs macro. Signed-off-by: Sia Jee Heng <jeeheng.sia@starfivetech.com> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> Reviewed-by: Conor Dooley <conor.dooley@microchip.com> Link: https://lore.kernel.org/r/20230330064321.1008373-3-jeeheng.sia@starfivetech.com Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
- Loading branch information
Sia Jee Heng
authored and
Palmer Dabbelt
committed
Apr 29, 2023
1 parent
0def12f
commit fcb8986
Showing
2 changed files
with
65 additions
and
31 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
/* SPDX-License-Identifier: GPL-2.0-only */ | ||
/* | ||
* Copyright (C) 2023 StarFive Technology Co., Ltd. | ||
* | ||
* Author: Jee Heng Sia <jeeheng.sia@starfivetech.com> | ||
*/ | ||
|
||
#ifndef __ASSEMBLY__ | ||
#error "Only include this from assembly code" | ||
#endif | ||
|
||
#ifndef __ASM_ASSEMBLER_H | ||
#define __ASM_ASSEMBLER_H | ||
|
||
#include <asm/asm.h> | ||
#include <asm/asm-offsets.h> | ||
#include <asm/csr.h> | ||
|
||
/* | ||
* suspend_restore_csrs - restore CSRs | ||
*/ | ||
.macro suspend_restore_csrs | ||
REG_L t0, (SUSPEND_CONTEXT_REGS + PT_EPC)(a0) | ||
csrw CSR_EPC, t0 | ||
REG_L t0, (SUSPEND_CONTEXT_REGS + PT_STATUS)(a0) | ||
csrw CSR_STATUS, t0 | ||
REG_L t0, (SUSPEND_CONTEXT_REGS + PT_BADADDR)(a0) | ||
csrw CSR_TVAL, t0 | ||
REG_L t0, (SUSPEND_CONTEXT_REGS + PT_CAUSE)(a0) | ||
csrw CSR_CAUSE, t0 | ||
.endm | ||
|
||
/* | ||
* suspend_restore_regs - Restore registers (except A0 and T0-T6) | ||
*/ | ||
.macro suspend_restore_regs | ||
REG_L ra, (SUSPEND_CONTEXT_REGS + PT_RA)(a0) | ||
REG_L sp, (SUSPEND_CONTEXT_REGS + PT_SP)(a0) | ||
REG_L gp, (SUSPEND_CONTEXT_REGS + PT_GP)(a0) | ||
REG_L tp, (SUSPEND_CONTEXT_REGS + PT_TP)(a0) | ||
REG_L s0, (SUSPEND_CONTEXT_REGS + PT_S0)(a0) | ||
REG_L s1, (SUSPEND_CONTEXT_REGS + PT_S1)(a0) | ||
REG_L a1, (SUSPEND_CONTEXT_REGS + PT_A1)(a0) | ||
REG_L a2, (SUSPEND_CONTEXT_REGS + PT_A2)(a0) | ||
REG_L a3, (SUSPEND_CONTEXT_REGS + PT_A3)(a0) | ||
REG_L a4, (SUSPEND_CONTEXT_REGS + PT_A4)(a0) | ||
REG_L a5, (SUSPEND_CONTEXT_REGS + PT_A5)(a0) | ||
REG_L a6, (SUSPEND_CONTEXT_REGS + PT_A6)(a0) | ||
REG_L a7, (SUSPEND_CONTEXT_REGS + PT_A7)(a0) | ||
REG_L s2, (SUSPEND_CONTEXT_REGS + PT_S2)(a0) | ||
REG_L s3, (SUSPEND_CONTEXT_REGS + PT_S3)(a0) | ||
REG_L s4, (SUSPEND_CONTEXT_REGS + PT_S4)(a0) | ||
REG_L s5, (SUSPEND_CONTEXT_REGS + PT_S5)(a0) | ||
REG_L s6, (SUSPEND_CONTEXT_REGS + PT_S6)(a0) | ||
REG_L s7, (SUSPEND_CONTEXT_REGS + PT_S7)(a0) | ||
REG_L s8, (SUSPEND_CONTEXT_REGS + PT_S8)(a0) | ||
REG_L s9, (SUSPEND_CONTEXT_REGS + PT_S9)(a0) | ||
REG_L s10, (SUSPEND_CONTEXT_REGS + PT_S10)(a0) | ||
REG_L s11, (SUSPEND_CONTEXT_REGS + PT_S11)(a0) | ||
.endm | ||
|
||
#endif /* __ASM_ASSEMBLER_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters