diff options
| author | Yu Chien Peter Lin <peterlin@andestech.com> | 2023-11-30 20:42:09 +0800 |
|---|---|---|
| committer | Anup Patel <anup@brainfault.org> | 2023-12-06 18:03:12 +0530 |
| commit | 009ae4e60221fd17858837460eb26a6a0a56d8f3 (patch) | |
| tree | 71f83411fb4f7b76b97f62f31b4bab3f7a86df76 | |
| parent | 0b3262efc6bcde391da84e49ec978804cc6eac37 (diff) | |
| download | opensbi-009ae4e60221fd17858837460eb26a6a0a56d8f3.tar.gz opensbi-009ae4e60221fd17858837460eb26a6a0a56d8f3.tar.bz2 opensbi-009ae4e60221fd17858837460eb26a6a0a56d8f3.zip | |
platform: andes: Factor out is_andes() helper
We will need is_andes(45) in the following patch,
so factor out the code that parses marchid to make
it reusable for checking any Andes CPU variants.
Also improves the comment in ae350_hart_start().
Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com>
Reviewed-by: Anup Patel <anup@brainfault.org>
| -rw-r--r-- | platform/generic/andes/ae350.c | 16 | ||||
| -rw-r--r-- | platform/generic/include/andes/andes45.h | 6 |
2 files changed, 13 insertions, 9 deletions
diff --git a/platform/generic/andes/ae350.c b/platform/generic/andes/ae350.c index dc769b72..088ec077 100644 --- a/platform/generic/andes/ae350.c +++ b/platform/generic/andes/ae350.c @@ -24,16 +24,14 @@ static struct smu_data smu = { 0 }; extern void __ae350_enable_coherency_warmboot(void); extern void __ae350_disable_coherency(void); -static __always_inline bool is_andes25(void) -{ - ulong marchid = csr_read(CSR_MARCHID); - return !!(EXTRACT_FIELD(marchid, CSR_MARCHID_MICROID) == 0xa25); -} - static int ae350_hart_start(u32 hartid, ulong saddr) { - /* Don't send wakeup command at boot-time */ - if (!sbi_init_count(hartid) || (is_andes25() && hartid == 0)) + /* + * Don't send wakeup command when: + * 1) boot-time + * 2) the target hart is non-sleepable 25-series hart0 + */ + if (!sbi_init_count(hartid) || (is_andes(25) && hartid == 0)) return sbi_ipi_raw_send(sbi_hartid_to_hartindex(hartid)); /* Write wakeup command to the sleep hart */ @@ -52,7 +50,7 @@ static int ae350_hart_stop(void) * L2-cache, instead of turning it off, it should fall * through and jump to warmboot_addr. */ - if (is_andes25() && hartid == 0) + if (is_andes(25) && hartid == 0) return SBI_ENOTSUPP; if (!smu_support_sleep_mode(&smu, DEEPSLEEP_MODE, hartid)) diff --git a/platform/generic/include/andes/andes45.h b/platform/generic/include/andes/andes45.h index ce31617c..01f63d44 100644 --- a/platform/generic/include/andes/andes45.h +++ b/platform/generic/include/andes/andes45.h @@ -43,6 +43,12 @@ #ifndef __ASSEMBLER__ +#define is_andes(series) \ +({ \ + char value = csr_read(CSR_MARCHID) & 0xff; \ + (series) == (value >> 4) * 10 + (value & 0x0f); \ +}) + #define has_andes_pmu() \ ({ \ (((csr_read(CSR_MMSC_CFG) & \ |
