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>
This commit is contained in:
Yu Chien Peter Lin 2023-11-30 20:42:09 +08:00 committed by Anup Patel
parent 0b3262efc6
commit 009ae4e602
2 changed files with 13 additions and 9 deletions

View file

@ -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))

View file

@ -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) & \