summaryrefslogtreecommitdiff
path: root/platform
diff options
context:
space:
mode:
authorBen Zong-You Xie <[email protected]>2026-07-28 16:10:41 +0800
committerAnup Patel <[email protected]>2026-09-01 10:46:23 +0530
commit06af8bd61b37bbf0db93adfa9902b176d0158ea1 (patch)
treefad2b34e37d574f5da78b7ba7967ccaf0cc6028c /platform
parent0fb479930775cf86efdfd5c50ad21b4cf8353c76 (diff)
lib: utils/andes: arm the SMU sleep command last
Once the sleep command is written, the next WFI puts the core to sleep, so everything that can fail has to run before it. Also, use writel() so the command store cannot still be in flight at the WFI. Signed-off-by: Ben Zong-You Xie <[email protected]> Reviewed-by: Anup Patel <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Anup Patel <[email protected]>
Diffstat (limited to 'platform')
-rw-r--r--platform/generic/andes/ae350.c8
-rw-r--r--platform/generic/include/andes/andes.h1
2 files changed, 9 insertions, 0 deletions
diff --git a/platform/generic/andes/ae350.c b/platform/generic/andes/ae350.c
index 4a053f43..7aafe545 100644
--- a/platform/generic/andes/ae350.c
+++ b/platform/generic/andes/ae350.c
@@ -38,6 +38,14 @@ void ae350_non_ret_save(struct sbi_scratch *scratch)
andes_hdata->saved = true;
}
+void ae350_non_ret_discard(struct sbi_scratch *scratch)
+{
+ struct andes_hart_data *andes_hdata = sbi_scratch_offset_ptr(scratch,
+ andes_hart_data_offset);
+
+ andes_hdata->saved = false;
+}
+
void ae350_non_ret_restore(struct sbi_scratch *scratch)
{
struct andes_hart_data *andes_hdata = sbi_scratch_offset_ptr(scratch,
diff --git a/platform/generic/include/andes/andes.h b/platform/generic/include/andes/andes.h
index dae112ce..dfa9f3c1 100644
--- a/platform/generic/include/andes/andes.h
+++ b/platform/generic/include/andes/andes.h
@@ -102,6 +102,7 @@ struct andes_hart_data {
};
void ae350_non_ret_save(struct sbi_scratch *scratch);
+void ae350_non_ret_discard(struct sbi_scratch *scratch);
void ae350_non_ret_restore(struct sbi_scratch *scratch);
void ae350_enable_coherency_warmboot(void);