瀏覽代碼

[BSP] Update Hifive1 BSP with unified RV porting.

Bernard Xiong 6 年之前
父節點
當前提交
36b194aeb6

+ 100 - 26
bsp/hifive1/.config

@@ -7,19 +7,30 @@
 # RT-Thread Kernel
 #
 CONFIG_RT_NAME_MAX=32
+# CONFIG_RT_USING_SMP is not set
 CONFIG_RT_ALIGN_SIZE=4
 # CONFIG_RT_THREAD_PRIORITY_8 is not set
 # CONFIG_RT_THREAD_PRIORITY_32 is not set
 CONFIG_RT_THREAD_PRIORITY_256=y
 CONFIG_RT_THREAD_PRIORITY_MAX=256
 CONFIG_RT_TICK_PER_SECOND=100
-CONFIG_RT_DEBUG=y
 CONFIG_RT_USING_OVERFLOW_CHECK=y
-CONFIG_RT_DEBUG_INIT=0
-CONFIG_RT_DEBUG_THREAD=0
 CONFIG_RT_USING_HOOK=y
+CONFIG_RT_USING_IDLE_HOOK=y
+CONFIG_RT_IDEL_HOOK_LIST_SIZE=4
 CONFIG_IDLE_THREAD_STACK_SIZE=1024
 # CONFIG_RT_USING_TIMER_SOFT is not set
+CONFIG_RT_DEBUG=y
+# CONFIG_RT_DEBUG_INIT_CONFIG is not set
+# CONFIG_RT_DEBUG_THREAD_CONFIG is not set
+# CONFIG_RT_DEBUG_SCHEDULER_CONFIG is not set
+# CONFIG_RT_DEBUG_IPC_CONFIG is not set
+# CONFIG_RT_DEBUG_TIMER_CONFIG is not set
+# CONFIG_RT_DEBUG_IRQ_CONFIG is not set
+# CONFIG_RT_DEBUG_MEM_CONFIG is not set
+# CONFIG_RT_DEBUG_SLAB_CONFIG is not set
+# CONFIG_RT_DEBUG_MEMHEAP_CONFIG is not set
+# CONFIG_RT_DEBUG_MODULE_CONFIG is not set
 
 #
 # Inter-Thread communication
@@ -46,11 +57,12 @@ CONFIG_RT_USING_HEAP=y
 # Kernel Device Object
 #
 CONFIG_RT_USING_DEVICE=y
+# CONFIG_RT_USING_DEVICE_OPS is not set
 # CONFIG_RT_USING_INTERRUPT_INFO is not set
 CONFIG_RT_USING_CONSOLE=y
 CONFIG_RT_CONSOLEBUF_SIZE=128
 CONFIG_RT_CONSOLE_DEVICE_NAME="dusart"
-# CONFIG_RT_USING_MODULE is not set
+# CONFIG_ARCH_CPU_STACK_GROWS_UPWARD is not set
 
 #
 # RT-Thread Components
@@ -58,6 +70,7 @@ CONFIG_RT_CONSOLE_DEVICE_NAME="dusart"
 CONFIG_RT_USING_COMPONENTS_INIT=y
 CONFIG_RT_USING_USER_MAIN=y
 CONFIG_RT_MAIN_THREAD_STACK_SIZE=2048
+CONFIG_RT_MAIN_THREAD_PRIORITY=85
 
 #
 # C++ features
@@ -81,6 +94,7 @@ CONFIG_FINSH_CMD_SIZE=80
 CONFIG_FINSH_USING_MSH=y
 CONFIG_FINSH_USING_MSH_DEFAULT=y
 CONFIG_FINSH_USING_MSH_ONLY=y
+CONFIG_FINSH_ARG_MAX=10
 
 #
 # Device virtual file system
@@ -91,21 +105,30 @@ CONFIG_FINSH_USING_MSH_ONLY=y
 # Device Drivers
 #
 CONFIG_RT_USING_DEVICE_IPC=y
+CONFIG_RT_PIPE_BUFSZ=512
 CONFIG_RT_USING_SERIAL=y
 # CONFIG_RT_USING_CAN is not set
 # CONFIG_RT_USING_HWTIMER is not set
 # CONFIG_RT_USING_CPUTIME is not set
 # CONFIG_RT_USING_I2C is not set
 # CONFIG_RT_USING_PIN is not set
+# CONFIG_RT_USING_ADC is not set
+# CONFIG_RT_USING_PWM is not set
 # CONFIG_RT_USING_MTD_NOR is not set
 # CONFIG_RT_USING_MTD_NAND is not set
+# CONFIG_RT_USING_MTD is not set
+# CONFIG_RT_USING_PM is not set
 # CONFIG_RT_USING_RTC is not set
 # CONFIG_RT_USING_SDIO is not set
 # CONFIG_RT_USING_SPI is not set
 # CONFIG_RT_USING_WDT is not set
-# CONFIG_RT_USING_WIFI is not set
 # CONFIG_RT_USING_AUDIO is not set
 
+#
+# Using WiFi
+#
+# CONFIG_RT_USING_WIFI is not set
+
 #
 # Using USB
 #
@@ -115,13 +138,18 @@ CONFIG_RT_USING_SERIAL=y
 #
 # POSIX layer and C standard library
 #
-CONFIG_RT_USING_LIBC=y
+# CONFIG_RT_USING_LIBC is not set
 # CONFIG_RT_USING_PTHREADS is not set
 
 #
-# Network stack
+# Network
 #
 
+#
+# Socket abstraction layer
+#
+# CONFIG_RT_USING_SAL is not set
+
 #
 # light weight TCP/IP stack
 #
@@ -132,6 +160,11 @@ CONFIG_RT_USING_LIBC=y
 #
 # CONFIG_RT_USING_MODBUS is not set
 
+#
+# AT commands
+#
+# CONFIG_RT_USING_AT is not set
+
 #
 # VBUS(Virtual Software BUS)
 #
@@ -142,25 +175,12 @@ CONFIG_RT_USING_LIBC=y
 #
 # CONFIG_RT_USING_LOGTRACE is not set
 # CONFIG_RT_USING_RYM is not set
+# CONFIG_RT_USING_ULOG is not set
 
 #
 # RT-Thread online packages
 #
 
-#
-# system packages
-#
-
-#
-# RT-Thread GUI Engine
-#
-# CONFIG_PKG_USING_GUIENGINE is not set
-# CONFIG_PKG_USING_LWEXT4 is not set
-# CONFIG_PKG_USING_PARTITION is not set
-# CONFIG_PKG_USING_SQLITE is not set
-# CONFIG_PKG_USING_RTI is not set
-# CONFIG_PKG_USING_LITTLEVGL2RTT is not set
-
 #
 # IoT - internet of things
 #
@@ -169,10 +189,10 @@ CONFIG_RT_USING_LIBC=y
 # CONFIG_PKG_USING_MONGOOSE is not set
 # CONFIG_PKG_USING_WEBTERMINAL is not set
 # CONFIG_PKG_USING_CJSON is not set
+# CONFIG_PKG_USING_JSMN is not set
 # CONFIG_PKG_USING_LJSON is not set
 # CONFIG_PKG_USING_EZXML is not set
 # CONFIG_PKG_USING_NANOPB is not set
-# CONFIG_PKG_USING_GAGENT_CLOUD is not set
 
 #
 # Wi-Fi
@@ -190,7 +210,16 @@ CONFIG_RT_USING_LIBC=y
 # CONFIG_PKG_USING_COAP is not set
 # CONFIG_PKG_USING_NOPOLL is not set
 # CONFIG_PKG_USING_NETUTILS is not set
+# CONFIG_PKG_USING_AT_DEVICE is not set
+# CONFIG_PKG_USING_WIZNET is not set
+
+#
+# IoT Cloud
+#
 # CONFIG_PKG_USING_ONENET is not set
+# CONFIG_PKG_USING_GAGENT_CLOUD is not set
+# CONFIG_PKG_USING_ALI_IOTKIT is not set
+# CONFIG_PKG_USING_AZURE is not set
 
 #
 # security packages
@@ -202,6 +231,7 @@ CONFIG_RT_USING_LIBC=y
 #
 # language packages
 #
+# CONFIG_PKG_USING_LUA is not set
 # CONFIG_PKG_USING_JERRYSCRIPT is not set
 # CONFIG_PKG_USING_MICROPYTHON is not set
 
@@ -209,6 +239,7 @@ CONFIG_RT_USING_LIBC=y
 # multimedia packages
 #
 # CONFIG_PKG_USING_OPENMV is not set
+# CONFIG_PKG_USING_MUPDF is not set
 
 #
 # tools packages
@@ -217,17 +248,58 @@ CONFIG_RT_USING_LIBC=y
 # CONFIG_PKG_USING_EASYFLASH is not set
 # CONFIG_PKG_USING_EASYLOGGER is not set
 # CONFIG_PKG_USING_SYSTEMVIEW is not set
-# CONFIG_PKG_USING_IPERF is not set
+# CONFIG_PKG_USING_RDB is not set
+
+#
+# system packages
+#
+# CONFIG_PKG_USING_GUIENGINE is not set
+# CONFIG_PKG_USING_CAIRO is not set
+# CONFIG_PKG_USING_PIXMAN is not set
+# CONFIG_PKG_USING_LWEXT4 is not set
+# CONFIG_PKG_USING_PARTITION is not set
+# CONFIG_PKG_USING_FAL is not set
+# CONFIG_PKG_USING_SQLITE is not set
+# CONFIG_PKG_USING_RTI is not set
+# CONFIG_PKG_USING_LITTLEVGL2RTT is not set
+# CONFIG_PKG_USING_CMSIS is not set
+# CONFIG_PKG_USING_DFS_YAFFS is not set
+
+#
+# peripheral libraries and drivers
+#
+# CONFIG_PKG_USING_REALTEK_AMEBA is not set
+# CONFIG_PKG_USING_SHT2X is not set
+# CONFIG_PKG_USING_AHT10 is not set
+# CONFIG_PKG_USING_AP3216C is not set
+# CONFIG_PKG_USING_STM32_SDIO is not set
+# CONFIG_PKG_USING_ICM20608 is not set
+# CONFIG_PKG_USING_U8G2 is not set
 
 #
 # miscellaneous packages
 #
+# CONFIG_PKG_USING_LIBCSV is not set
+# CONFIG_PKG_USING_OPTPARSE is not set
 # CONFIG_PKG_USING_FASTLZ is not set
 # CONFIG_PKG_USING_MINILZO is not set
 # CONFIG_PKG_USING_QUICKLZ is not set
 # CONFIG_PKG_USING_MULTIBUTTON is not set
-# CONFIG_PKG_USING_SAMPLES is not set
 # CONFIG_PKG_USING_CANFESTIVAL is not set
+# CONFIG_PKG_USING_ZLIB is not set
+# CONFIG_PKG_USING_DSTR is not set
+
+#
+# sample package
+#
+
+#
+# samples: kernel and components samples
+#
+# CONFIG_PKG_USING_KERNEL_SAMPLES is not set
+# CONFIG_PKG_USING_FILESYSTEM_SAMPLES is not set
+# CONFIG_PKG_USING_NETWORK_SAMPLES is not set
+# CONFIG_PKG_USING_PERIPHERAL_SAMPLES is not set
 
 #
 # example package: hello
@@ -244,9 +316,11 @@ CONFIG_RT_USING_LIBC=y
 #
 # Network Utilities
 #
-# CONFIG_PKG_USING_WLAN_WICED_SRC is not set
+# CONFIG_PKG_USING_WICED is not set
 # CONFIG_PKG_USING_CLOUDSDK is not set
 # CONFIG_PKG_USING_COREMARK is not set
 # CONFIG_PKG_USING_POWER_MANAGER is not set
 # CONFIG_PKG_USING_RT_OTA is not set
-# CONFIG_PKG_USING_RT_AT is not set
+# CONFIG_PKG_USING_RDBD_SRC is not set
+# CONFIG_PKG_USING_RTINSIGHT is not set
+# CONFIG_PKG_USING_SMARTCONFIG is not set

+ 1 - 0
bsp/hifive1/SConstruct

@@ -18,6 +18,7 @@ env = Environment(tools = ['mingw'],
 	AR = rtconfig.AR, ARFLAGS = '-rc',
 	LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS)
 env.PrependENVPath('PATH', rtconfig.EXEC_PATH)
+env['ASCOM'] = env['ASPPCOM']
 
 Export('RTT_ROOT')
 Export('rtconfig')

+ 0 - 102
bsp/hifive1/freedom-e-sdk/bsp/env/coreplexip-e31-arty/init.c.orig

@@ -1,102 +0,0 @@
-//See LICENSE for license details.
-#include <stdint.h>
-#include <stdio.h>
-#include <unistd.h>
-
-#include "platform.h"
-#include "encoding.h"
-
-#define CPU_FREQ 65000000
-#define XSTR(x) #x
-#define STR(x) XSTR(x)
-
-extern int main(int argc, char** argv);
-extern void trap_entry();
-
-static unsigned long get_cpu_freq()
-{
-  return CPU_FREQ;
-}
-
-unsigned long get_timer_freq()
-{
-  return get_cpu_freq();
-}
-
-uint64_t get_timer_value()
-{
-#if __riscv_xlen == 32
-  while (1) {
-    uint32_t hi = read_csr(mcycleh);
-    uint32_t lo = read_csr(mcycle);
-    if (hi == read_csr(mcycleh))
-      return ((uint64_t)hi << 32) | lo;
-  }
-#else
-  return read_csr(mcycle);
-#endif
-}
-
-static void uart_init(size_t baud_rate)
-{
-  UART0_REG(UART_REG_DIV) = (get_cpu_freq() / 2) / baud_rate - 1;
-  UART0_REG(UART_REG_TXCTRL) |= UART_TXEN;
-}
-
-
-#ifdef USE_PLIC
-extern void handle_m_ext_interrupt();
-#endif
-
-#ifdef USE_M_TIME
-extern void handle_m_time_interrupt();
-#endif
-
-#ifdef USE_LOCAL_ISR
-typedef void (*my_interrupt_function_ptr_t) (void);
-extern my_interrupt_function_ptr_t localISR[];
-#endif
-
-uintptr_t handle_trap(uintptr_t mcause, uintptr_t epc)
-{
-  if (0){
-#ifdef USE_PLIC
-    // External Machine-Level interrupt from PLIC
-  } else if ((mcause & MCAUSE_INT) && ((mcause & MCAUSE_CAUSE) == IRQ_M_EXT)) {
-    handle_m_ext_interrupt();
-#endif
-#ifdef USE_M_TIME
-    // External Machine-Level interrupt from PLIC
-  } else if ((mcause & MCAUSE_INT) && ((mcause & MCAUSE_CAUSE) == IRQ_M_TIMER)){
-    handle_m_time_interrupt();
-#endif
-#ifdef USE_LOCAL_ISR
-  } else if (mcause & MCAUSE_INT) {
-    localISR[mcause & MCAUSE_CAUSE] ();
-#endif
-  }
-  else {
-    write(1, "Unhandled Trap:\n", 16);
-    _exit(1 + mcause);
-  }
-  return epc;
-}
-
-void _init()
-{
-  #ifndef NO_INIT
-  uart_init(115200);
-
-<<<<<<< HEAD
-  puts("core freq at " STR(CPU_FREQ) " Hz\n");
-=======
-  printf("core freq at %ld Hz\n", get_cpu_freq());
->>>>>>> 120f19bbe91e5bda3c777de44618e58d5c8fc2c4
-
-  write_csr(mtvec, &trap_entry);
-  #endif
-}
-
-void _fini()
-{
-}

+ 3 - 4
bsp/hifive1/freedom-e-sdk/bsp/env/freedom-e300-hifive1/init.c

@@ -1,6 +1,6 @@
 #include <stdint.h>
 #include <stdio.h>
-#include <unistd.h>
+#include <string.h>
 
 #include "platform.h"
 #include "encoding.h"
@@ -208,8 +208,7 @@ uintptr_t handle_trap(uintptr_t mcause, uintptr_t epc)
 #endif
   }
   else {
-    write(1, "trap\n", 5);
-    _exit(1 + mcause);
+    rt_kprintf("Unhandled Trap.\n");
   }
   return epc;
 }
@@ -222,7 +221,7 @@ void _init()
   use_pll(0, 0, 1, 31, 1);
   uart_init(115200);
 
-  printf("core freq at %ld Hz\n", get_cpu_freq());
+  rt_kprintf("core freq at %ld Hz\n", get_cpu_freq());
 
   write_csr(mtvec, &trap_entry);
   if (read_csr(misa) & (1 << ('F' - 'A'))) { // if F extension is present

+ 2 - 1
bsp/hifive1/freedom-e-sdk/bsp/env/start.S

@@ -80,7 +80,8 @@ _start:
 	li a0, 0
 	li a1, 0
 	call entry
-	tail exit
+	/* tail exit */
+
 1:
 	j 1b
 

+ 30 - 10
bsp/hifive1/rtconfig.h

@@ -11,12 +11,12 @@
 #define RT_THREAD_PRIORITY_256
 #define RT_THREAD_PRIORITY_MAX 256
 #define RT_TICK_PER_SECOND 100
-#define RT_DEBUG
 #define RT_USING_OVERFLOW_CHECK
-#define RT_DEBUG_INIT 0
-#define RT_DEBUG_THREAD 0
 #define RT_USING_HOOK
+#define RT_USING_IDLE_HOOK
+#define RT_IDEL_HOOK_LIST_SIZE 4
 #define IDLE_THREAD_STACK_SIZE 1024
+#define RT_DEBUG
 
 /* Inter-Thread communication */
 
@@ -45,6 +45,7 @@
 #define RT_USING_COMPONENTS_INIT
 #define RT_USING_USER_MAIN
 #define RT_MAIN_THREAD_STACK_SIZE 2048
+#define RT_MAIN_THREAD_PRIORITY 85
 
 /* C++ features */
 
@@ -63,6 +64,7 @@
 #define FINSH_USING_MSH
 #define FINSH_USING_MSH_DEFAULT
 #define FINSH_USING_MSH_ONLY
+#define FINSH_ARG_MAX 10
 
 /* Device virtual file system */
 
@@ -70,16 +72,22 @@
 /* Device Drivers */
 
 #define RT_USING_DEVICE_IPC
+#define RT_PIPE_BUFSZ 512
 #define RT_USING_SERIAL
 
+/* Using WiFi */
+
+
 /* Using USB */
 
 
 /* POSIX layer and C standard library */
 
-#define RT_USING_LIBC
 
-/* Network stack */
+/* Network */
+
+/* Socket abstraction layer */
+
 
 /* light weight TCP/IP stack */
 
@@ -87,6 +95,9 @@
 /* Modbus master and slave stack */
 
 
+/* AT commands */
+
+
 /* VBUS(Virtual Software BUS) */
 
 
@@ -95,11 +106,6 @@
 
 /* RT-Thread online packages */
 
-/* system packages */
-
-/* RT-Thread GUI Engine */
-
-
 /* IoT - internet of things */
 
 
@@ -111,6 +117,9 @@
 /* Wiced WiFi */
 
 
+/* IoT Cloud */
+
+
 /* security packages */
 
 
@@ -123,9 +132,20 @@
 /* tools packages */
 
 
+/* system packages */
+
+
+/* peripheral libraries and drivers */
+
+
 /* miscellaneous packages */
 
 
+/* sample package */
+
+/* samples: kernel and components samples */
+
+
 /* example package: hello */
 
 

+ 6 - 3
bsp/hifive1/rtconfig.py

@@ -10,8 +10,10 @@ if os.getenv('RTT_CC'):
 
 if  CROSS_TOOL == 'gcc':
     PLATFORM    = 'gcc'
-    # EXEC_PATH   = '/home/tanek/risc-v/e300/riscv64-unknown-elf-gcc-20170612-x86_64-linux-centos6/bin'
-    EXEC_PATH   = '/home/tanek/risc-v/e300/riscv64-unknown-elf-gcc-20171231-x86_64-linux-centos6/bin'
+    EXEC_PATH   = r'/opt/unknown-gcc/bin'
+else:
+    print('Please make sure your toolchains is GNU GCC!')
+    exit(0)
 
 if os.getenv('RTT_EXEC_PATH'):
     EXEC_PATH = os.getenv('RTT_EXEC_PATH')
@@ -27,8 +29,9 @@ TARGET_NAME = 'rtthread.bin'
 #------- GCC settings ----------------------------------------------------------
 if PLATFORM == 'gcc':
     # toolchains
-    PREFIX = 'riscv64-unknown-elf-'
+    PREFIX = 'riscv-none-embed-'
     CC = PREFIX + 'gcc'
+    CXX= PREFIX + 'g++'
     AS = PREFIX + 'gcc'
     AR = PREFIX + 'ar'
     LINK = PREFIX + 'gcc'

+ 0 - 227
libcpu/risc-v/e310/context_gcc.S

@@ -1,227 +0,0 @@
-;/*
-; * File      : context_gcc.S
-; * This file is part of RT-Thread RTOS
-; * COPYRIGHT (C) 2018, RT-Thread Development Team
-; *
-; *  This program is free software; you can redistribute it and/or modify
-; *  it under the terms of the GNU General Public License as published by
-; *  the Free Software Foundation; either version 2 of the License, or
-; *  (at your option) any later version.
-; *
-; *  This program is distributed in the hope that it will be useful,
-; *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-; *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-; *  GNU General Public License for more details.
-; *
-; *  You should have received a copy of the GNU General Public License along
-; *  with this program; if not, write to the Free Software Foundation, Inc.,
-; *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-; *
-; * Change Logs:
-; * Date           Author       Notes
-; * 2017-07-16     zhangjun     for hifive1
-; * 2018-05-29     tanek        optimize  rt_hw_interrupt_*
-; * 2018-05-29     tanek        add mie register to context
-; */
-
-/*
- * rt_base_t rt_hw_interrupt_disable(void);
- */
-    .globl rt_hw_interrupt_disable
-rt_hw_interrupt_disable:
-    csrrci a0, mstatus, 8
-    ret
-
-/*
- * void rt_hw_interrupt_enable(rt_base_t level);
- */
-    .globl rt_hw_interrupt_enable
-rt_hw_interrupt_enable:
-    csrw mstatus, a0
-    ret
-
-/*
- * void rt_hw_context_switch(rt_uint32 from, rt_uint32 to);
- * a0 --> from
- * a1 --> to
- */
-    .globl rt_hw_context_switch
-rt_hw_context_switch:
-
-    /* saved from thread context
-     *     x1/ra       -> sp(0)
-     *     x1/ra       -> sp(1)
-     *     mstatus.mie -> sp(2)
-     *     x(i)        -> sp(i-4)
-     */
-    addi  sp,  sp, -32 * 4
-    sw sp,  (a0)
-
-    sw x1,   0 * 4(sp)
-    sw x1,   1 * 4(sp)
-
-    csrr a0, mstatus
-    andi a0, a0, 8
-    beqz a0, save_mpie
-    li   a0, 0x80
-save_mpie:
-    sw a0,   2 * 4(sp)
-
-    sw x4,   4 * 4(sp)
-    sw x5,   5 * 4(sp)
-    sw x6,   6 * 4(sp)
-    sw x7,   7 * 4(sp)
-    sw x8,   8 * 4(sp)
-    sw x9,   9 * 4(sp)
-    sw x10, 10 * 4(sp)
-    sw x11, 11 * 4(sp)
-    sw x12, 12 * 4(sp)
-    sw x13, 13 * 4(sp)
-    sw x14, 14 * 4(sp)
-    sw x15, 15 * 4(sp)
-    sw x16, 16 * 4(sp)
-    sw x17, 17 * 4(sp)
-    sw x18, 18 * 4(sp)
-    sw x19, 19 * 4(sp)
-    sw x20, 20 * 4(sp)
-    sw x21, 21 * 4(sp)
-    sw x22, 22 * 4(sp)
-    sw x23, 23 * 4(sp)
-    sw x24, 24 * 4(sp)
-    sw x25, 25 * 4(sp)
-    sw x26, 26 * 4(sp)
-    sw x27, 27 * 4(sp)
-    sw x28, 28 * 4(sp)
-    sw x29, 29 * 4(sp)
-    sw x30, 30 * 4(sp)
-    sw x31, 31 * 4(sp)
-
-    /* restore to thread context
-     * sp(0) -> epc;
-     * sp(1) -> ra;
-     * sp(i) -> x(i+2)
-     */
-    lw sp,  (a1)
-
-    /* resw ra to mepc */
-    lw a1,   0 * 4(sp)
-    csrw mepc, a1
-    lw x1,   1 * 4(sp)
-
-    /* force to machin mode(MPP=11) */
-    li a1, 0x00001800;
-    csrs mstatus, a1
-    lw a1,   2 * 4(sp)
-    csrs mstatus, a1
-
-    lw x4,   4 * 4(sp)
-    lw x5,   5 * 4(sp)
-    lw x6,   6 * 4(sp)
-    lw x7,   7 * 4(sp)
-    lw x8,   8 * 4(sp)
-    lw x9,   9 * 4(sp)
-    lw x10, 10 * 4(sp)
-    lw x11, 11 * 4(sp)
-    lw x12, 12 * 4(sp)
-    lw x13, 13 * 4(sp)
-    lw x14, 14 * 4(sp)
-    lw x15, 15 * 4(sp)
-    lw x16, 16 * 4(sp)
-    lw x17, 17 * 4(sp)
-    lw x18, 18 * 4(sp)
-    lw x19, 19 * 4(sp)
-    lw x20, 20 * 4(sp)
-    lw x21, 21 * 4(sp)
-    lw x22, 22 * 4(sp)
-    lw x23, 23 * 4(sp)
-    lw x24, 24 * 4(sp)
-    lw x25, 25 * 4(sp)
-    lw x26, 26 * 4(sp)
-    lw x27, 27 * 4(sp)
-    lw x28, 28 * 4(sp)
-    lw x29, 29 * 4(sp)
-    lw x30, 30 * 4(sp)
-    lw x31, 31 * 4(sp)
-
-    addi sp,  sp, 32 * 4
-    mret
-
-/*
- * void rt_hw_context_switch_to(rt_uint32 to);
- * a0 --> to
- */
-    .globl rt_hw_context_switch_to
-rt_hw_context_switch_to:
-    lw sp, (a0)
-
-    /* load epc from stack */
-    lw a0,   0 * 4(sp)
-    csrw mepc, a0
-    lw x1,   1 * 4(sp)
-    /* load mstatus from stack */
-    lw a0,   2 * 4(sp)
-    csrw mstatus, a0
-    lw x4,   4 * 4(sp)
-    lw x5,   5 * 4(sp)
-    lw x6,   6 * 4(sp)
-    lw x7,   7 * 4(sp)
-    lw x8,   8 * 4(sp)
-    lw x9,   9 * 4(sp)
-    lw x10, 10 * 4(sp)
-    lw x11, 11 * 4(sp)
-    lw x12, 12 * 4(sp)
-    lw x13, 13 * 4(sp)
-    lw x14, 14 * 4(sp)
-    lw x15, 15 * 4(sp)
-    lw x16, 16 * 4(sp)
-    lw x17, 17 * 4(sp)
-    lw x18, 18 * 4(sp)
-    lw x19, 19 * 4(sp)
-    lw x20, 20 * 4(sp)
-    lw x21, 21 * 4(sp)
-    lw x22, 22 * 4(sp)
-    lw x23, 23 * 4(sp)
-    lw x24, 24 * 4(sp)
-    lw x25, 25 * 4(sp)
-    lw x26, 26 * 4(sp)
-    lw x27, 27 * 4(sp)
-    lw x28, 28 * 4(sp)
-    lw x29, 29 * 4(sp)
-    lw x30, 30 * 4(sp)
-    lw x31, 31 * 4(sp)
-
-    addi sp,  sp, 32 * 4
-    mret
-
-/*
- * void rt_hw_context_switch_interrupt(rt_uint32 from, rt_uint32 to);
- */
-    .globl rt_thread_switch_interrupt_flag
-    .globl rt_interrupt_from_thread
-    .globl rt_interrupt_to_thread
-    .globl rt_hw_context_switch_interrupt
-rt_hw_context_switch_interrupt:
-    addi sp, sp, -16
-    sw   s0, 12(sp)
-    sw   a0, 8(sp)
-    sw   a5, 4(sp)
-
-    la   a0, rt_thread_switch_interrupt_flag
-    lw   a5, (a0)
-    bnez a5, _reswitch
-    li   a5, 1
-    sw   a5, (a0)
-
-    la   a5, rt_interrupt_from_thread
-    lw   a0, 8(sp)
-    sw   a0, (a5)
-
-_reswitch:
-    la   a5, rt_interrupt_to_thread
-    sw   a1, (a5)
-
-    lw   a5, 4(sp)
-    lw   a0, 8(sp)
-    lw   s0, 12(sp)
-    addi sp, sp, 16
-    ret

+ 0 - 145
libcpu/risc-v/e310/entry_gcc.S

@@ -1,145 +0,0 @@
-/*
- * File      : context_gcc.S
- * This file is part of RT-Thread RTOS
- * COPYRIGHT (C) 2018, RT-Thread Development Team
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with this program; if not, write to the Free Software Foundation, Inc.,
- *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Change Logs:
- * Date           Author       Notes
- * 2018-05-29     tanek        first implementation
- */
-
-  .section      .text.entry
-  .align 2
-  .global trap_entry
-trap_entry:
-
-    // save all from thread context
-    addi sp, sp, -32 * 4
-
-    sw x1,   1 * 4(sp)
-    li t0, 0x80
-    sw t0,   2 * 4(sp)
-
-    sw x4,   4 * 4(sp)
-    sw x5,   5 * 4(sp)
-    sw x6,   6 * 4(sp)
-    sw x7,   7 * 4(sp)
-    sw x8,   8 * 4(sp)
-    sw x9,   9 * 4(sp)
-    sw x10, 10 * 4(sp)
-    sw x11, 11 * 4(sp)
-    sw x12, 12 * 4(sp)
-    sw x13, 13 * 4(sp)
-    sw x14, 14 * 4(sp)
-    sw x15, 15 * 4(sp)
-    sw x16, 16 * 4(sp)
-    sw x17, 17 * 4(sp)
-    sw x18, 18 * 4(sp)
-    sw x19, 19 * 4(sp)
-    sw x20, 20 * 4(sp)
-    sw x21, 21 * 4(sp)
-    sw x22, 22 * 4(sp)
-    sw x23, 23 * 4(sp)
-    sw x24, 24 * 4(sp)
-    sw x25, 25 * 4(sp)
-    sw x26, 26 * 4(sp)
-    sw x27, 27 * 4(sp)
-    sw x28, 28 * 4(sp)
-    sw x29, 29 * 4(sp)
-    sw x30, 30 * 4(sp)
-    sw x31, 31 * 4(sp)
-
-    // switch to interrupt stack
-    move s0, sp
-    la   sp, _sp
-
-    // interrupt handle
-    call rt_interrupt_enter
-    csrr a0, mcause
-    csrr a1, mepc
-    mv a2, sp
-    call handle_trap
-    call rt_interrupt_leave
-
-    // switch to from thread stack
-    move sp, s0
-
-    // need to switch new thread
-    la   s0, rt_thread_switch_interrupt_flag
-    lw   s2, 0(s0)
-    beqz s2, spurious_interrupt
-    sw   zero, 0(s0)
-
-    csrr a0, mepc
-    sw a0,  0 * 4(sp)
-
-    la   s0, rt_interrupt_from_thread
-    lw   s1, 0(s0)
-    sw   sp, 0(s1)
-
-    la   s0, rt_interrupt_to_thread
-    lw   s1, 0(s0)
-    lw   sp, 0(s1)
-
-    lw  a0,  0 * 4(sp)
-    csrw mepc, a0
-
-spurious_interrupt:
-    lw x1,   1 * 4(sp)
-    
-    // Remain in M-mode after mret
-    li t0, 0x00001800
-    csrs mstatus, t0
-    lw t0,   2 * 4(sp)
-    csrs mstatus, t0 
-    
-    lw x4,   4 * 4(sp)
-    lw x5,   5 * 4(sp)
-    lw x6,   6 * 4(sp)
-    lw x7,   7 * 4(sp)
-    lw x8,   8 * 4(sp)
-    lw x9,   9 * 4(sp)
-    lw x10, 10 * 4(sp)
-    lw x11, 11 * 4(sp)
-    lw x12, 12 * 4(sp)
-    lw x13, 13 * 4(sp)
-    lw x14, 14 * 4(sp)
-    lw x15, 15 * 4(sp)
-    lw x16, 16 * 4(sp)
-    lw x17, 17 * 4(sp)
-    lw x18, 18 * 4(sp)
-    lw x19, 19 * 4(sp)
-    lw x20, 20 * 4(sp)
-    lw x21, 21 * 4(sp)
-    lw x22, 22 * 4(sp)
-    lw x23, 23 * 4(sp)
-    lw x24, 24 * 4(sp)
-    lw x25, 25 * 4(sp)
-    lw x26, 26 * 4(sp)
-    lw x27, 27 * 4(sp)
-    lw x28, 28 * 4(sp)
-    lw x29, 29 * 4(sp)
-    lw x30, 30 * 4(sp)
-    lw x31, 31 * 4(sp)
-
-    addi sp, sp, 32 * 4
-    mret
-
-.weak handle_trap
-handle_trap:
-1:
-    j 1b

+ 129 - 0
libcpu/risc-v/e310/interrupt_gcc.S

@@ -0,0 +1,129 @@
+/*
+ * Copyright (c) 2006-2018, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date           Author       Notes
+ * 2018/10/02     Bernard      The first version
+ */
+
+#include "port.h"
+
+  .section      .text.entry
+  .align 2
+  .global trap_entry
+trap_entry:
+
+    /* save all from thread context */
+    addi sp, sp, -32 * REGBYTES
+
+    STORE x1,   1 * REGBYTES(sp)
+    li    t0,   0x80
+    STORE t0,   2 * REGBYTES(sp)
+
+    STORE x4,   4 * REGBYTES(sp)
+    STORE x5,   5 * REGBYTES(sp)
+    STORE x6,   6 * REGBYTES(sp)
+    STORE x7,   7 * REGBYTES(sp)
+    STORE x8,   8 * REGBYTES(sp)
+    STORE x9,   9 * REGBYTES(sp)
+    STORE x10, 10 * REGBYTES(sp)
+    STORE x11, 11 * REGBYTES(sp)
+    STORE x12, 12 * REGBYTES(sp)
+    STORE x13, 13 * REGBYTES(sp)
+    STORE x14, 14 * REGBYTES(sp)
+    STORE x15, 15 * REGBYTES(sp)
+    STORE x16, 16 * REGBYTES(sp)
+    STORE x17, 17 * REGBYTES(sp)
+    STORE x18, 18 * REGBYTES(sp)
+    STORE x19, 19 * REGBYTES(sp)
+    STORE x20, 20 * REGBYTES(sp)
+    STORE x21, 21 * REGBYTES(sp)
+    STORE x22, 22 * REGBYTES(sp)
+    STORE x23, 23 * REGBYTES(sp)
+    STORE x24, 24 * REGBYTES(sp)
+    STORE x25, 25 * REGBYTES(sp)
+    STORE x26, 26 * REGBYTES(sp)
+    STORE x27, 27 * REGBYTES(sp)
+    STORE x28, 28 * REGBYTES(sp)
+    STORE x29, 29 * REGBYTES(sp)
+    STORE x30, 30 * REGBYTES(sp)
+    STORE x31, 31 * REGBYTES(sp)
+
+    /* save break thread stack to s0 */
+    move s0, sp
+    /* switch to interrupt stack */
+    la   sp, _sp
+
+    /* interrupt handle */
+    call  rt_interrupt_enter
+    csrr  a0, mcause
+    csrr  a1, mepc
+    mv    a2, sp
+    call  handle_trap
+    call  rt_interrupt_leave
+
+    /* switch to from_thread stack */
+    move  sp, s0
+
+    /* need to switch new thread */
+    la    s0, rt_thread_switch_interrupt_flag
+    LOAD  s2, 0(s0)
+    beqz  s2, spurious_interrupt
+    STORE zero, 0(s0)
+
+    csrr  a0, mepc
+    STORE a0, 0 * REGBYTES(sp)
+
+    la    s0, rt_interrupt_from_thread
+    LOAD  s1, 0(s0)
+    STORE sp, 0(s1)
+
+    la    s0, rt_interrupt_to_thread
+    LOAD  s1, 0(s0)
+    LOAD  sp, 0(s1)
+
+    LOAD  a0,  0 * REGBYTES(sp)
+    csrw  mepc, a0
+
+spurious_interrupt:
+    LOAD  x1,   1 * REGBYTES(sp)
+
+    /* Remain in M-mode after mret */
+    li    t0, 0x00001800
+    csrs  mstatus, t0
+    LOAD  t0,   2 * REGBYTES(sp)
+    csrs  mstatus, t0 
+
+    LOAD  x4,   4 * REGBYTES(sp)
+    LOAD  x5,   5 * REGBYTES(sp)
+    LOAD  x6,   6 * REGBYTES(sp)
+    LOAD  x7,   7 * REGBYTES(sp)
+    LOAD  x8,   8 * REGBYTES(sp)
+    LOAD  x9,   9 * REGBYTES(sp)
+    LOAD  x10, 10 * REGBYTES(sp)
+    LOAD  x11, 11 * REGBYTES(sp)
+    LOAD  x12, 12 * REGBYTES(sp)
+    LOAD  x13, 13 * REGBYTES(sp)
+    LOAD  x14, 14 * REGBYTES(sp)
+    LOAD  x15, 15 * REGBYTES(sp)
+    LOAD  x16, 16 * REGBYTES(sp)
+    LOAD  x17, 17 * REGBYTES(sp)
+    LOAD  x18, 18 * REGBYTES(sp)
+    LOAD  x19, 19 * REGBYTES(sp)
+    LOAD  x20, 20 * REGBYTES(sp)
+    LOAD  x21, 21 * REGBYTES(sp)
+    LOAD  x22, 22 * REGBYTES(sp)
+    LOAD  x23, 23 * REGBYTES(sp)
+    LOAD  x24, 24 * REGBYTES(sp)
+    LOAD  x25, 25 * REGBYTES(sp)
+    LOAD  x26, 26 * REGBYTES(sp)
+    LOAD  x27, 27 * REGBYTES(sp)
+    LOAD  x28, 28 * REGBYTES(sp)
+    LOAD  x29, 29 * REGBYTES(sp)
+    LOAD  x30, 30 * REGBYTES(sp)
+    LOAD  x31, 31 * REGBYTES(sp)
+
+    addi  sp, sp, 32 * REGBYTES
+    mret

+ 0 - 104
libcpu/risc-v/e310/stack.c

@@ -1,104 +0,0 @@
-/*
- * File      : stack.c
- * This file is part of RT-Thread RTOS
- * COPYRIGHT (C) 2006, RT-Thread Development Team
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with this program; if not, write to the Free Software Foundation, Inc.,
- *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Change Logs:
- * Date           Author       Notes
- * 2017-07-31     tanek        first implementation
- */
-
-#include <rtthread.h>
-
-/* flag in interrupt handling */
-rt_uint32_t rt_interrupt_from_thread;
-rt_uint32_t rt_interrupt_to_thread;
-rt_uint32_t rt_thread_switch_interrupt_flag;
-
-struct stack_frame
-{
-    rt_ubase_t epc;        /* epc - epc    - program counter                     */
-    rt_ubase_t ra;         /* x1  - ra     - return address for jumps            */
-    rt_ubase_t mstatus;    /*              - machine status register             */
-    rt_ubase_t gp;         /* x3  - gp     - global pointer                      */
-    rt_ubase_t tp;         /* x4  - tp     - thread pointer                      */
-    rt_ubase_t t0;         /* x5  - t0     - temporary register 0                */
-    rt_ubase_t t1;         /* x6  - t1     - temporary register 1                */
-    rt_ubase_t t2;         /* x7  - t2     - temporary register 2                */
-    rt_ubase_t s0_fp;      /* x8  - s0/fp  - saved register 0 or frame pointer   */
-    rt_ubase_t s1;         /* x9  - s1     - saved register 1                    */
-    rt_ubase_t a0;         /* x10 - a0     - return value or function argument 0 */
-    rt_ubase_t a1;         /* x11 - a1     - return value or function argument 1 */
-    rt_ubase_t a2;         /* x12 - a2     - function argument 2                 */
-    rt_ubase_t a3;         /* x13 - a3     - function argument 3                 */
-    rt_ubase_t a4;         /* x14 - a4     - function argument 4                 */
-    rt_ubase_t a5;         /* x15 - a5     - function argument 5                 */
-    rt_ubase_t a6;         /* x16 - a6     - function argument 6                 */
-    rt_ubase_t a7;         /* x17 - s7     - function argument 7                 */
-    rt_ubase_t s2;         /* x18 - s2     - saved register 2                    */
-    rt_ubase_t s3;         /* x19 - s3     - saved register 3                    */
-    rt_ubase_t s4;         /* x20 - s4     - saved register 4                    */
-    rt_ubase_t s5;         /* x21 - s5     - saved register 5                    */
-    rt_ubase_t s6;         /* x22 - s6     - saved register 6                    */
-    rt_ubase_t s7;         /* x23 - s7     - saved register 7                    */
-    rt_ubase_t s8;         /* x24 - s8     - saved register 8                    */
-    rt_ubase_t s9;         /* x25 - s9     - saved register 9                    */
-    rt_ubase_t s10;        /* x26 - s10    - saved register 10                   */
-    rt_ubase_t s11;        /* x27 - s11    - saved register 11                   */
-    rt_ubase_t t3;         /* x28 - t3     - temporary register 3                */
-    rt_ubase_t t4;         /* x29 - t4     - temporary register 4                */
-    rt_ubase_t t5;         /* x30 - t5     - temporary register 5                */
-    rt_ubase_t t6;         /* x31 - t6     - temporary register 6                */
-};
-
-/**
- * This function will initialize thread stack
- *
- * @param tentry the entry of thread
- * @param parameter the parameter of entry
- * @param stack_addr the beginning stack address
- * @param texit the function will be called when thread exit
- *
- * @return stack address
- */
-rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter,
-                             rt_uint8_t *stack_addr, void *texit)
-{
-    struct stack_frame *stack_frame;
-    rt_uint8_t         *stk;
-    int                i;
-
-    stk  = stack_addr + sizeof(rt_uint32_t);
-    stk  = (rt_uint8_t *)RT_ALIGN_DOWN((rt_uint32_t)stk, 8);
-    stk -= sizeof(struct stack_frame);
-
-    stack_frame = (struct stack_frame *)stk;
-
-    for (i = 0; i < sizeof(struct stack_frame) / sizeof(rt_ubase_t); i++)
-    {
-        ((rt_ubase_t *)stack_frame)[i] = 0xdeadbeef;
-    }
-
-    stack_frame->ra      = (rt_ubase_t)texit;
-    stack_frame->a0      = (rt_ubase_t)parameter;
-    stack_frame->epc     = (rt_ubase_t)tentry;
-
-    // force to machine mode(MPP=11) and set MPIE to 1
-    stack_frame->mstatus = 0x00001880;
-
-    return stk;
-}