Tom Rini
2021-05-07 08:57:32 -04:00
6 changed files with 51 additions and 2 deletions

View File

@@ -140,3 +140,14 @@ int arch_early_init_r(void)
{
return riscv_cpu_probe();
}
/**
* harts_early_init() - A callback function called by start.S to configure
* feature settings of each hart.
*
* In a multi-core system, memory access shall be careful here, it shall
* take care of race conditions.
*/
__weak void harts_early_init(void)
{
}

View File

@@ -6,6 +6,9 @@
#include <dm.h>
#include <log.h>
#include <asm/csr.h>
#define CSR_U74_FEATURE_DISABLE 0x7c1
int spl_soc_init(void)
{
@@ -21,3 +24,15 @@ int spl_soc_init(void)
return 0;
}
void harts_early_init(void)
{
/*
* Feature Disable CSR
*
* Clear feature disable CSR to '0' to turn on all features for
* each core. This operation must be in M-mode.
*/
if (CONFIG_IS_ENABLED(RISCV_MMODE))
csr_write(CSR_U74_FEATURE_DISABLE, 0);
}

View File

@@ -117,6 +117,10 @@ call_board_init_f_0:
mv sp, a0
#endif
/* Configure proprietary settings and customized CSRs of harts */
call_harts_early_init:
jal harts_early_init
#ifndef CONFIG_XIP
/*
* Pick hart to initialize global data and run U-Boot. The other harts