Skip to content

Commit 4f3d385

Browse files
VynDragoncfriedt
authored andcommitted
soc: bflb: Enable xuantie arch support for bl61x
Enables the Xuantie support for bl61x Signed-off-by: Camille BAUD <[email protected]>
1 parent 1afca03 commit 4f3d385

File tree

3 files changed

+18
-94
lines changed

3 files changed

+18
-94
lines changed

soc/bflb/bl61x/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ zephyr_sources(soc.c)
77

88
set(SOC_LINKER_SCRIPT ${ZEPHYR_BASE}/include/zephyr/arch/riscv/common/linker.ld CACHE INTERNAL "")
99

10+
zephyr_code_relocate(
11+
FILES ${ZEPHYR_BASE}/arch/riscv/core/xuantie/cache_xtheadcmo.c LOCATION ITCM NOKEEP)
12+
1013
zephyr_code_relocate_ifdef(CONFIG_UART_BFLB LIBRARY drivers__serial LOCATION ITCM NOKEEP)
1114
zephyr_code_relocate_ifdef(CONFIG_RISCV_MACHINE_TIMER LIBRARY drivers__timer LOCATION ITCM NOKEEP)
1215
zephyr_code_relocate_ifdef(CONFIG_PINCTRL_BFLB LIBRARY drivers__pinctrl LOCATION ITCM NOKEEP)

soc/bflb/bl61x/Kconfig

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,13 @@ config SOC_SERIES_BL61X
66
select CLOCK_CONTROL
77
select CODE_DATA_RELOCATION
88
select CPU_HAS_FPU
9+
select DCACHE
910
select FLOAT_HARD
1011
select FPU
11-
select GEN_IRQ_VECTOR_TABLE
12-
select INCLUDE_RESET_VECTOR
12+
select ICACHE
1313
select RISCV
14-
select RISCV_HAS_CLIC
15-
select RISCV_MACHINE_TIMER
16-
select RISCV_PRIVILEGED
17-
select RISCV_ISA_RV32I
18-
select RISCV_ISA_EXT_M
19-
select RISCV_ISA_EXT_A
2014
select RISCV_ISA_EXT_F
21-
select RISCV_ISA_EXT_C
22-
select RISCV_ISA_EXT_ZICSR
23-
select RISCV_ISA_EXT_ZIFENCEI
24-
select RISCV_VECTORED_MODE
2515
select SOC_EARLY_INIT_HOOK
2616
select SYSCON
2717
select XIP
18+
select XUANTIE_E907

soc/bflb/bl61x/soc.c

Lines changed: 12 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include <zephyr/device.h>
1414
#include <zephyr/init.h>
1515
#include <zephyr/irq.h>
16+
#include <zephyr/cache.h>
1617

1718
#include <bflb_soc.h>
1819
#include <glb_reg.h>
@@ -107,76 +108,6 @@ void system_BOD_init(void)
107108
sys_write32(tmp, HBN_BASE + HBN_BOR_CFG_OFFSET);
108109
}
109110

110-
static void clean_dcache(void)
111-
{
112-
__asm__ volatile (
113-
"fence\n"
114-
/* th.dcache.call*/
115-
".insn 0x10000B\n"
116-
"fence\n"
117-
);
118-
}
119-
120-
static void clean_icache(void)
121-
{
122-
__asm__ volatile (
123-
"fence\n"
124-
"fence.i\n"
125-
/* th.icache.iall */
126-
".insn 0x100000B\n"
127-
"fence\n"
128-
"fence.i\n"
129-
);
130-
}
131-
132-
static void enable_icache(void)
133-
{
134-
uint32_t tmp;
135-
136-
__asm__ volatile (
137-
"fence\n"
138-
"fence.i\n"
139-
/* th.icache.iall */
140-
".insn 0x100000B\n"
141-
);
142-
__asm__ volatile(
143-
"csrr %0, 0x7C1"
144-
: "=r"(tmp));
145-
tmp |= (1 << 0);
146-
__asm__ volatile(
147-
"csrw 0x7C1, %0"
148-
:
149-
: "r"(tmp));
150-
__asm__ volatile (
151-
"fence\n"
152-
"fence.i\n"
153-
);
154-
}
155-
156-
static void enable_dcache(void)
157-
{
158-
uint32_t tmp;
159-
160-
__asm__ volatile (
161-
"fence\n"
162-
"fence.i\n"
163-
/* th.dcache.iall */
164-
".insn 0x20000B\n"
165-
);
166-
__asm__ volatile(
167-
"csrr %0, 0x7C1"
168-
: "=r"(tmp));
169-
tmp |= (1 << 1) | (1 << 2) | (1 << 3) | (1 << 4);
170-
__asm__ volatile(
171-
"csrw 0x7C1, %0"
172-
:
173-
: "r"(tmp));
174-
__asm__ volatile (
175-
"fence\n"
176-
"fence.i\n"
177-
);
178-
}
179-
180111
static void enable_branchpred(bool yes)
181112
{
182113
uint32_t tmp;
@@ -249,6 +180,17 @@ static void disable_interrupt_autostacking(void)
249180
: "r"(tmp));
250181
}
251182

183+
void arch_cache_init(void)
184+
{
185+
enable_thead_isa_ext();
186+
set_thead_enforce_aligned(false);
187+
sys_cache_data_enable();
188+
enable_branchpred(true);
189+
sys_cache_instr_enable();
190+
disable_interrupt_autostacking();
191+
sys_cache_data_flush_and_invd_all();
192+
sys_cache_instr_invd_all();
193+
}
252194

253195
void soc_early_init_hook(void)
254196
{
@@ -263,18 +205,6 @@ void soc_early_init_hook(void)
263205
sys_write32((1 << 5), PDS_BASE + PDS_USB_CTL_OFFSET);
264206
sys_write32(0, PDS_BASE + PDS_USB_PHY_CTRL_OFFSET);
265207

266-
enable_thead_isa_ext();
267-
set_thead_enforce_aligned(false);
268-
enable_dcache();
269-
/* branch prediction can cause major slowdowns (250ms -> 2 seconds)
270-
* in some applications
271-
*/
272-
enable_branchpred(true);
273-
enable_icache();
274-
disable_interrupt_autostacking();
275-
clean_dcache();
276-
clean_icache();
277-
278208
/* reset uart signals */
279209
sys_write32(0xffffffffU, GLB_BASE + GLB_UART_CFG1_OFFSET);
280210
sys_write32(0x0000ffffU, GLB_BASE + GLB_UART_CFG2_OFFSET);

0 commit comments

Comments
 (0)