From b1b2d1eabcec52402b0d87647ecc6ccaf43ccf23 Mon Sep 17 00:00:00 2001 From: acevest Date: Wed, 25 Sep 2019 21:53:27 +0800 Subject: [PATCH] organize risc-v code for spike and bumblebee --- arch/risc-v/bumblebee/gcc/riscv_port.h | 29 +++++++++++++++++++ arch/risc-v/bumblebee/gcc/riscv_port_c.c | 5 ++++ arch/risc-v/common/tos_cpu.c | 6 ++-- arch/risc-v/rv32i/gcc/port_c.c | 16 ++-------- arch/risc-v/spike/gcc/riscv_port.h | 28 ++++++++++++++++++ arch/risc-v/spike/gcc/riscv_port_c.c | 3 ++ .../eclipse/hello_world/.cproject | 6 ++-- .../eclipse/hello_world/.project | 23 ++++++++++++++- .../.settings/language.settings.xml | 2 +- .../eclipse/hello_world/main.c | 1 - board/QEMU_Spike/GCC/demo/Makefile | 2 ++ board/QEMU_Spike/GCC/demo/start.S | 3 -- board/QEMU_Spike/eclipse/demo/.cproject | 10 ++++--- board/QEMU_Spike/eclipse/demo/.project | 23 ++++++++++++++- .../demo/.settings/language.settings.xml | 2 +- 15 files changed, 129 insertions(+), 30 deletions(-) create mode 100644 arch/risc-v/bumblebee/gcc/riscv_port.h create mode 100644 arch/risc-v/bumblebee/gcc/riscv_port_c.c create mode 100644 arch/risc-v/spike/gcc/riscv_port.h create mode 100644 arch/risc-v/spike/gcc/riscv_port_c.c diff --git a/arch/risc-v/bumblebee/gcc/riscv_port.h b/arch/risc-v/bumblebee/gcc/riscv_port.h new file mode 100644 index 00000000..2f974cbb --- /dev/null +++ b/arch/risc-v/bumblebee/gcc/riscv_port.h @@ -0,0 +1,29 @@ +/*---------------------------------------------------------------------------- + * Tencent is pleased to support the open source community by making TencentOS + * available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * If you have downloaded a copy of the TencentOS binary from Tencent, please + * note that the TencentOS binary is licensed under the BSD 3-Clause License. + * + * If you have downloaded a copy of the TencentOS source code from Tencent, + * please note that TencentOS source code is licensed under the BSD 3-Clause + * License, except for the third-party components listed below which are + * subject to different license terms. Your integration of TencentOS into your + * own projects may require compliance with the BSD 3-Clause License, as well + * as the other licenses applicable to the third-party components included + * within TencentOS. + *---------------------------------------------------------------------------*/ + +#ifndef _RISCV_PORT_H_ +#define _RISCV_PORT_H_ + + +#define CLINT_CTRL_ADDR 0xD1000000 +#define CLINT_MSIP 0x0FFC +#define CLINT_MTIMECMP 0x0008 +#define CLINT_MTIME 0x0000 + +void riscv_cpu_init(); + +#endif // _RISCV_PORT_H_ diff --git a/arch/risc-v/bumblebee/gcc/riscv_port_c.c b/arch/risc-v/bumblebee/gcc/riscv_port_c.c new file mode 100644 index 00000000..27d711f8 --- /dev/null +++ b/arch/risc-v/bumblebee/gcc/riscv_port_c.c @@ -0,0 +1,5 @@ +#include "gd32vf103.h" + +void riscv_cpu_init() { + eclic_irq_enable(CLIC_INT_TMR, 0, 0); +} diff --git a/arch/risc-v/common/tos_cpu.c b/arch/risc-v/common/tos_cpu.c index 311396f2..083dd66d 100644 --- a/arch/risc-v/common/tos_cpu.c +++ b/arch/risc-v/common/tos_cpu.c @@ -1,6 +1,6 @@ #include #include - +#include __KERNEL__ void cpu_systick_init(k_cycle_t cycle_per_tick) { @@ -11,6 +11,8 @@ __KERNEL__ void cpu_systick_init(k_cycle_t cycle_per_tick) __KERNEL__ void cpu_init(void) { k_cpu_cycle_per_tick = TOS_CFG_CPU_CLOCK / k_cpu_tick_per_second; cpu_systick_init(k_cpu_cycle_per_tick); + + riscv_cpu_init(); } __API__ cpu_cpsr_t tos_cpu_cpsr_save(void) @@ -99,7 +101,7 @@ __KERNEL__ k_stack_t *cpu_task_stk_init(void *entry, #undef _V } - cpu_data_t gp; + cpu_data_t gp = regs->gp; asm("mv %0, gp"::"r"(gp)); regs->gp = (cpu_data_t)gp; // gp: global pointer diff --git a/arch/risc-v/rv32i/gcc/port_c.c b/arch/risc-v/rv32i/gcc/port_c.c index e551c13a..0a2aa0e8 100644 --- a/arch/risc-v/rv32i/gcc/port_c.c +++ b/arch/risc-v/rv32i/gcc/port_c.c @@ -1,18 +1,8 @@ #include "riscv_encoding.h" +#include "riscv_port.h" #include -#if 0 -#define CLINT_CTRL_ADDR 0x2000000 -#define CLINT_MSIP 0x0000 -#define CLINT_MTIMECMP 0x4000 -#define CLINT_MTIME 0xBFF8 -#else -#include "gd32vf103.h" -#define CLINT_CTRL_ADDR 0xD1000000 -#define CLINT_MSIP 0x0FFC -#define CLINT_MTIMECMP 0x0008 -#define CLINT_MTIME 0x0000 -#endif +//#include "gd32vf103.h" __PORT__ void port_systick_config(uint32_t cycle_per_tick) { @@ -43,8 +33,6 @@ __PORT__ void port_systick_config(uint32_t cycle_per_tick) *(volatile uint32_t *)(CLINT_CTRL_ADDR + CLINT_MTIMECMP + 0) = 0xFFFFFFFF; *(volatile uint32_t *)(CLINT_CTRL_ADDR + CLINT_MTIMECMP + 4) = 0xFFFFFFFF & (mtimecmp >> 32); *(volatile uint32_t *)(CLINT_CTRL_ADDR + CLINT_MTIMECMP + 0) = 0xFFFFFFFF & (mtimecmp >> 0); - - } __PORT__ void port_systick_priority_set(uint32_t prio) diff --git a/arch/risc-v/spike/gcc/riscv_port.h b/arch/risc-v/spike/gcc/riscv_port.h new file mode 100644 index 00000000..b279275c --- /dev/null +++ b/arch/risc-v/spike/gcc/riscv_port.h @@ -0,0 +1,28 @@ +/*---------------------------------------------------------------------------- + * Tencent is pleased to support the open source community by making TencentOS + * available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * If you have downloaded a copy of the TencentOS binary from Tencent, please + * note that the TencentOS binary is licensed under the BSD 3-Clause License. + * + * If you have downloaded a copy of the TencentOS source code from Tencent, + * please note that TencentOS source code is licensed under the BSD 3-Clause + * License, except for the third-party components listed below which are + * subject to different license terms. Your integration of TencentOS into your + * own projects may require compliance with the BSD 3-Clause License, as well + * as the other licenses applicable to the third-party components included + * within TencentOS. + *---------------------------------------------------------------------------*/ + +#ifndef _RISCV_PORT_H_ +#define _RISCV_PORT_H_ + +#define CLINT_CTRL_ADDR 0x2000000 +#define CLINT_MSIP 0x0000 +#define CLINT_MTIMECMP 0x4000 +#define CLINT_MTIME 0xBFF8 + +void riscv_cpu_init(); + +#endif // _RISCV_PORT_H_ diff --git a/arch/risc-v/spike/gcc/riscv_port_c.c b/arch/risc-v/spike/gcc/riscv_port_c.c new file mode 100644 index 00000000..1a9231db --- /dev/null +++ b/arch/risc-v/spike/gcc/riscv_port_c.c @@ -0,0 +1,3 @@ +void riscv_cpu_init() { + // DO NOTHING +} diff --git a/board/GD32VF103C_START/eclipse/hello_world/.cproject b/board/GD32VF103C_START/eclipse/hello_world/.cproject index c4535ca2..0da076c8 100644 --- a/board/GD32VF103C_START/eclipse/hello_world/.cproject +++ b/board/GD32VF103C_START/eclipse/hello_world/.cproject @@ -127,8 +127,6 @@ - - @@ -140,6 +138,10 @@ + + + + diff --git a/board/GD32VF103C_START/eclipse/hello_world/.project b/board/GD32VF103C_START/eclipse/hello_world/.project index 345bb056..646d74fd 100644 --- a/board/GD32VF103C_START/eclipse/hello_world/.project +++ b/board/GD32VF103C_START/eclipse/hello_world/.project @@ -57,7 +57,28 @@ TencentOS_tiny/arch/risc-v 2 - $%7BPARENT-4-PROJECT_LOC%7D/arch/risc-v + virtual:/virtual + + + TencentOS_tiny/arch/risc-v/bumblebee + 2 + TOP_DIR/arch/risc-v/bumblebee/gcc + + + TencentOS_tiny/arch/risc-v/common + 2 + $%7BPARENT-4-PROJECT_LOC%7D/arch/risc-v/common + + + TencentOS_tiny/arch/risc-v/rv32i + 2 + TOP_DIR/arch/risc-v/rv32i/gcc + + + TOP_DIR + $%7BPARENT-4-PROJECT_LOC%7D + + diff --git a/board/GD32VF103C_START/eclipse/hello_world/.settings/language.settings.xml b/board/GD32VF103C_START/eclipse/hello_world/.settings/language.settings.xml index 17a290e7..23927be1 100644 --- a/board/GD32VF103C_START/eclipse/hello_world/.settings/language.settings.xml +++ b/board/GD32VF103C_START/eclipse/hello_world/.settings/language.settings.xml @@ -11,7 +11,7 @@ - + diff --git a/board/GD32VF103C_START/eclipse/hello_world/main.c b/board/GD32VF103C_START/eclipse/hello_world/main.c index afba9061..4bf757aa 100644 --- a/board/GD32VF103C_START/eclipse/hello_world/main.c +++ b/board/GD32VF103C_START/eclipse/hello_world/main.c @@ -61,7 +61,6 @@ void main(void) { gpio_bit_reset(GPIOA, GPIO_PIN_7); tos_knl_init(); - eclic_irq_enable(CLIC_INT_TMR, 0, 0); tos_task_create(&k_task_task1, "task1", task1, NULL, 3, k_task1_stk, TASK_SIZE, 0); //tos_task_create(&k_task_task2, "task2", task2, NULL, 3, k_task2_stk, TASK_SIZE, 0); diff --git a/board/QEMU_Spike/GCC/demo/Makefile b/board/QEMU_Spike/GCC/demo/Makefile index 9544c0e5..bd74800b 100644 --- a/board/QEMU_Spike/GCC/demo/Makefile +++ b/board/QEMU_Spike/GCC/demo/Makefile @@ -41,6 +41,7 @@ KERNEL_SRC = \ ARCH_SRC = \ ${wildcard $(TOP_DIR)/arch/risc-v/rv32i/gcc/*.c} \ + ${wildcard $(TOP_DIR)/arch/risc-v/spike/gcc/*.c} \ ${wildcard $(TOP_DIR)/arch/risc-v/common/*.c} C_SOURCES += $(ARCH_SRC) @@ -108,6 +109,7 @@ KERNEL_INC = \ -I $(TOP_DIR)/kernel/hal/include \ -I $(TOP_DIR)/arch/risc-v/common/include \ -I $(TOP_DIR)/arch/risc-v/rv32i/gcc \ + -I $(TOP_DIR)/arch/risc-v/spike/gcc \ -I $(TOP_DIR)/platform/vendor_bsp/gd/GD32VF103_Firmware_Library/RISCV/drivers \ -I $(TOP_DIR)/board/QEMU_Spike/TOS-CONFIG C_INCLUDES += $(KERNEL_INC) diff --git a/board/QEMU_Spike/GCC/demo/start.S b/board/QEMU_Spike/GCC/demo/start.S index 229f15bb..727ce1d1 100644 --- a/board/QEMU_Spike/GCC/demo/start.S +++ b/board/QEMU_Spike/GCC/demo/start.S @@ -6,9 +6,6 @@ .globl _start .type _start,@function _start: - lui s0, 0x20000 - lw a0, 148(s0) - csrc mstatus, MSTATUS_MIE csrw mie, 0 diff --git a/board/QEMU_Spike/eclipse/demo/.cproject b/board/QEMU_Spike/eclipse/demo/.cproject index a601a3e3..54255d94 100644 --- a/board/QEMU_Spike/eclipse/demo/.cproject +++ b/board/QEMU_Spike/eclipse/demo/.cproject @@ -109,9 +109,9 @@ - - + + @@ -133,11 +133,13 @@ - - + + + + diff --git a/board/QEMU_Spike/eclipse/demo/.project b/board/QEMU_Spike/eclipse/demo/.project index 8135d99f..4a407d3f 100644 --- a/board/QEMU_Spike/eclipse/demo/.project +++ b/board/QEMU_Spike/eclipse/demo/.project @@ -52,7 +52,28 @@ TencentOS_tiny/arch/risc-v 2 - $%7BPARENT-4-PROJECT_LOC%7D/arch/risc-v + virtual:/virtual + + + TencentOS_tiny/arch/risc-v/common + 2 + TOP_DIR/arch/risc-v/common + + + TencentOS_tiny/arch/risc-v/rv32i + 2 + TOP_DIR/arch/risc-v/rv32i/gcc + + + TencentOS_tiny/arch/risc-v/spike + 2 + TOP_DIR/arch/risc-v/spike/gcc + + + TOP_DIR + $%7BPARENT-4-PROJECT_LOC%7D + + diff --git a/board/QEMU_Spike/eclipse/demo/.settings/language.settings.xml b/board/QEMU_Spike/eclipse/demo/.settings/language.settings.xml index 9201e03a..63169288 100644 --- a/board/QEMU_Spike/eclipse/demo/.settings/language.settings.xml +++ b/board/QEMU_Spike/eclipse/demo/.settings/language.settings.xml @@ -11,7 +11,7 @@ - +