riscv: Do some basic architecture level cpu initialization
In arch_cpu_init_dm() do some basic architecture level cpu initialization, like FPU enable, etc. Signed-off-by: Bin Meng <bmeng.cn@gmail.com> Reviewed-by: Lukas Auer <lukas.auer@aisec.fraunhofer.de> Reviewed-by: Anup Patel <anup@brainfault.org>
This commit is contained in:
parent
57fe5c64cb
commit
485e822346
1 changed files with 26 additions and 1 deletions
|
@ -8,6 +8,7 @@
|
|||
#include <dm.h>
|
||||
#include <log.h>
|
||||
#include <asm/csr.h>
|
||||
#include <asm/encoding.h>
|
||||
#include <dm/uclass-internal.h>
|
||||
|
||||
/*
|
||||
|
@ -61,7 +62,31 @@ static int riscv_cpu_probe(void)
|
|||
|
||||
int arch_cpu_init_dm(void)
|
||||
{
|
||||
return riscv_cpu_probe();
|
||||
int ret;
|
||||
|
||||
ret = riscv_cpu_probe();
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* Enable FPU */
|
||||
if (supports_extension('d') || supports_extension('f')) {
|
||||
csr_set(MODE_PREFIX(status), MSTATUS_FS);
|
||||
csr_write(fcsr, 0);
|
||||
}
|
||||
|
||||
if (CONFIG_IS_ENABLED(RISCV_MMODE)) {
|
||||
/*
|
||||
* Enable perf counters for cycle, time,
|
||||
* and instret counters only
|
||||
*/
|
||||
csr_write(mcounteren, GENMASK(2, 0));
|
||||
|
||||
/* Disable paging */
|
||||
if (supports_extension('s'))
|
||||
csr_write(satp, 0);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int arch_early_init_r(void)
|
||||
|
|
Loading…
Reference in a new issue