diff options
| author | Tom Rini <[email protected]> | 2021-05-07 08:57:32 -0400 |
|---|---|---|
| committer | Tom Rini <[email protected]> | 2021-05-07 08:57:32 -0400 |
| commit | 07b53103b7a6c228ae8b74ae720b9c5d219ee7fd (patch) | |
| tree | ab78b271289deb21d345c92e1e3ecc8d46d2e085 /arch | |
| parent | 1b8ad819cead7020d35f6251ef0cf3f393c61e51 (diff) | |
| parent | 91e4b7516d84cefab7324765b3c8d6a909185ce2 (diff) | |
Merge https://source.denx.de/u-boot/custodians/u-boot-riscv
Diffstat (limited to 'arch')
| -rw-r--r-- | arch/riscv/cpu/cpu.c | 11 | ||||
| -rw-r--r-- | arch/riscv/cpu/fu540/spl.c | 15 | ||||
| -rw-r--r-- | arch/riscv/cpu/start.S | 4 |
3 files changed, 30 insertions, 0 deletions
diff --git a/arch/riscv/cpu/cpu.c b/arch/riscv/cpu/cpu.c index 85592f5bee2..296e458db4f 100644 --- a/arch/riscv/cpu/cpu.c +++ b/arch/riscv/cpu/cpu.c @@ -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) +{ +} diff --git a/arch/riscv/cpu/fu540/spl.c b/arch/riscv/cpu/fu540/spl.c index 45657b79096..1740ef98b6b 100644 --- a/arch/riscv/cpu/fu540/spl.c +++ b/arch/riscv/cpu/fu540/spl.c @@ -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); +} diff --git a/arch/riscv/cpu/start.S b/arch/riscv/cpu/start.S index 8589509e012..308b0a97a58 100644 --- a/arch/riscv/cpu/start.S +++ b/arch/riscv/cpu/start.S @@ -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 |
