aboutsummaryrefslogtreecommitdiff
path: root/lib/sbi/sbi_hsm.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sbi/sbi_hsm.c')
-rw-r--r--lib/sbi/sbi_hsm.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/lib/sbi/sbi_hsm.c b/lib/sbi/sbi_hsm.c
index 67890f3..ecd2e45 100644
--- a/lib/sbi/sbi_hsm.c
+++ b/lib/sbi/sbi_hsm.c
@@ -358,12 +358,6 @@ static int __sbi_hsm_suspend_non_ret_default(struct sbi_scratch *scratch,
{
void (*jump_warmboot)(void) = (void (*)(void))scratch->warmboot_addr;
- /*
- * Save some of the M-mode CSRs which should be restored after
- * resuming from suspend state
- */
- __sbi_hsm_suspend_non_ret_save(scratch);
-
/* Wait for interrupt */
wfi();
@@ -463,6 +457,13 @@ int sbi_hsm_hart_suspend(struct sbi_scratch *scratch, u32 suspend_type,
/* Save the suspend type */
hdata->suspend_type = suspend_type;
+ /*
+ * Save context which will be restored after resuming from
+ * non-retentive suspend.
+ */
+ if (suspend_type & SBI_HSM_SUSP_NON_RET_BIT)
+ __sbi_hsm_suspend_non_ret_save(scratch);
+
/* Try platform specific suspend */
ret = hsm_device_hart_suspend(suspend_type, scratch->warmboot_addr);
if (ret == SBI_ENOTSUPP) {