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:
@@ -8,6 +8,7 @@
|
|||||||
#include <dm.h>
|
#include <dm.h>
|
||||||
#include <log.h>
|
#include <log.h>
|
||||||
#include <asm/csr.h>
|
#include <asm/csr.h>
|
||||||
|
#include <asm/encoding.h>
|
||||||
#include <dm/uclass-internal.h>
|
#include <dm/uclass-internal.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -61,7 +62,31 @@ static int riscv_cpu_probe(void)
|
|||||||
|
|
||||||
int arch_cpu_init_dm(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)
|
int arch_early_init_r(void)
|
||||||
|
|||||||
Reference in New Issue
Block a user