diff --git a/bsp/k230/.config b/bsp/k230/.config index 3e1126a375b3..f3408e2a827c 100644 --- a/bsp/k230/.config +++ b/bsp/k230/.config @@ -116,7 +116,7 @@ CONFIG_RT_KLIBC_USING_VSNPRINTF_LOG10_TAYLOR_TERMS=4 # end of rt_strnlen options # end of klibc options -CONFIG_RT_NAME_MAX=16 +CONFIG_RT_NAME_MAX=32 # CONFIG_RT_USING_ARCH_DATA_TYPE is not set # CONFIG_RT_USING_NANO is not set CONFIG_RT_USING_SMART=y @@ -193,7 +193,7 @@ CONFIG_RT_USING_CONSOLE=y CONFIG_RT_CONSOLEBUF_SIZE=256 CONFIG_RT_CONSOLE_DEVICE_NAME="uart0" CONFIG_RT_USING_CONSOLE_OUTPUT_CTL=y -CONFIG_RT_VER_NUM=0x50300 +CONFIG_RT_VER_NUM=0x50400 CONFIG_RT_USING_STDC_ATOMIC=y CONFIG_RT_BACKTRACE_LEVEL_MAX_NR=32 # end of RT-Thread Kernel @@ -204,16 +204,16 @@ CONFIG_ARCH_MM_MMU=y CONFIG_KERNEL_VADDR_START=0xffffffc000000000 CONFIG_ARCH_RISCV=y CONFIG_ARCH_RISCV_FPU=y -CONFIG_ARCH_RISCV_VECTOR=y -CONFIG_ARCH_VECTOR_VLEN_128=y -# CONFIG_ARCH_VECTOR_VLEN_256 is not set -# CONFIG_ARCH_VECTOR_VLEN_512 is not set -# CONFIG_ARCH_VECTOR_VLEN_1024 is not set -# CONFIG_ARCH_VECTOR_VLEN_2048 is not set -# CONFIG_ARCH_VECTOR_VLEN_4096 is not set -CONFIG_ARCH_RISCV_FPU_D=y CONFIG_ARCH_RISCV64=y +CONFIG_ARCH_RISCV_XUANTIE=y + +# +# RISC-V Architecture Configuration +# +# end of RISC-V Architecture Configuration + CONFIG_ARCH_USING_NEW_CTX_SWITCH=y +CONFIG_CONFIG_XUANTIE_SVPBMT=1 CONFIG_ARCH_REMAP_KERNEL=y # @@ -251,36 +251,11 @@ CONFIG_DFS_USING_POSIX=y CONFIG_DFS_USING_WORKDIR=y CONFIG_DFS_FD_MAX=16 CONFIG_RT_USING_DFS_V2=y -CONFIG_RT_USING_DFS_ELMFAT=y - -# -# elm-chan's FatFs, Generic FAT Filesystem Module -# -CONFIG_RT_DFS_ELM_CODE_PAGE=437 -CONFIG_RT_DFS_ELM_WORD_ACCESS=y -# CONFIG_RT_DFS_ELM_USE_LFN_0 is not set -# CONFIG_RT_DFS_ELM_USE_LFN_1 is not set -# CONFIG_RT_DFS_ELM_USE_LFN_2 is not set -CONFIG_RT_DFS_ELM_USE_LFN_3=y -CONFIG_RT_DFS_ELM_USE_LFN=3 -CONFIG_RT_DFS_ELM_LFN_UNICODE_0=y -# CONFIG_RT_DFS_ELM_LFN_UNICODE_1 is not set -# CONFIG_RT_DFS_ELM_LFN_UNICODE_2 is not set -# CONFIG_RT_DFS_ELM_LFN_UNICODE_3 is not set -CONFIG_RT_DFS_ELM_LFN_UNICODE=0 -CONFIG_RT_DFS_ELM_MAX_LFN=255 -CONFIG_RT_DFS_ELM_DRIVES=2 -CONFIG_RT_DFS_ELM_MAX_SECTOR_SIZE=512 -# CONFIG_RT_DFS_ELM_USE_ERASE is not set -CONFIG_RT_DFS_ELM_REENTRANT=y -CONFIG_RT_DFS_ELM_MUTEX_TIMEOUT=3000 -# CONFIG_RT_DFS_ELM_USE_EXFAT is not set -# end of elm-chan's FatFs, Generic FAT Filesystem Module - +# CONFIG_RT_USING_DFS_ELMFAT is not set CONFIG_RT_USING_DFS_DEVFS=y # CONFIG_RT_USING_DFS_ROMFS is not set CONFIG_RT_USING_DFS_PTYFS=y -# CONFIG_RT_USING_DFS_PROCFS is not set +CONFIG_RT_USING_DFS_PROCFS=y CONFIG_RT_USING_DFS_CROMFS=y CONFIG_RT_USING_DFS_TMPFS=y # CONFIG_RT_USING_DFS_MQUEUE is not set @@ -317,12 +292,13 @@ CONFIG_RT_SERIAL_USING_DMA=y CONFIG_RT_SERIAL_RB_BUFSZ=64 CONFIG_RT_USING_SERIAL_BYPASS=y # CONFIG_RT_USING_CAN is not set +# CONFIG_RT_USING_ADC is not set CONFIG_RT_USING_CLOCK_TIME=y -CONFIG_CLOCK_TIMER_FREQ=0 +# CONFIG_RT_USING_CLOCK_TIMER_TRIGGER is not set +CONFIG_CLOCK_TIMER_FREQ=25000000 # CONFIG_RT_USING_I2C is not set # CONFIG_RT_USING_PHY is not set # CONFIG_RT_USING_PHY_V2 is not set -# CONFIG_RT_USING_ADC is not set # CONFIG_RT_USING_DAC is not set CONFIG_RT_USING_NULL=y CONFIG_RT_USING_ZERO=y @@ -335,7 +311,7 @@ CONFIG_RT_USING_RANDOM=y # CONFIG_RT_USING_PM is not set CONFIG_RT_USING_RTC=y # CONFIG_RT_USING_ALARM is not set -# CONFIG_RT_USING_SOFT_RTC is not set +CONFIG_RT_USING_SOFT_RTC=y CONFIG_RT_USING_SDIO=y CONFIG_RT_SDIO_STACK_SIZE=8192 CONFIG_RT_SDIO_THREAD_PRIORITY=15 @@ -352,6 +328,7 @@ CONFIG_RT_MMCSD_MAX_PARTITION=16 # CONFIG_RT_USING_LCD is not set # CONFIG_RT_USING_HWCRYPTO is not set # CONFIG_RT_USING_WIFI is not set +# CONFIG_RT_USING_RPMSG is not set CONFIG_RT_USING_BLK=y # @@ -363,7 +340,6 @@ CONFIG_RT_BLK_PARTITION_EFI=y # CONFIG_RT_USING_REGULATOR is not set # CONFIG_RT_USING_POWER_SUPPLY is not set -# CONFIG_RT_USING_VIRTIO is not set CONFIG_RT_USING_PIN=y # CONFIG_RT_USING_CHERRYUSB is not set # end of Device Drivers @@ -413,7 +389,8 @@ CONFIG_RT_USING_POSIX_TIMER=y # # Interprocess Communication (IPC) # -# CONFIG_RT_USING_POSIX_PIPE is not set +CONFIG_RT_USING_POSIX_PIPE=y +CONFIG_RT_USING_POSIX_PIPE_SIZE=2048 # CONFIG_RT_USING_POSIX_MESSAGE_QUEUE is not set # CONFIG_RT_USING_POSIX_MESSAGE_SEMAPHORE is not set @@ -442,6 +419,12 @@ CONFIG_SAL_USING_LWIP=y # end of Docking with protocol stacks CONFIG_SAL_USING_POSIX=y +CONFIG_RT_USING_AF_UNIX=y +CONFIG_AF_UNIX_DGRAM_MAX_SIZE=4096 +CONFIG_AF_UNIX_DGRAM_QUEUE_LEN=16 +CONFIG_AF_UNIX_STREAM_BUFFER_SIZE=4096 +CONFIG_AF_UNIX_LISTEN_BACKLOG_MAX=16 +CONFIG_AF_UNIX_RIGHTS_MAX=16 CONFIG_RT_USING_NETDEV=y CONFIG_NETDEV_USING_IFCONFIG=y CONFIG_NETDEV_USING_PING=y @@ -456,6 +439,7 @@ CONFIG_RT_USING_LWIP=y # CONFIG_RT_USING_LWIP141 is not set # CONFIG_RT_USING_LWIP203 is not set CONFIG_RT_USING_LWIP212=y +# CONFIG_RT_USING_LWIP221 is not set # CONFIG_RT_USING_LWIP_LATEST is not set CONFIG_RT_USING_LWIP_VER_NUM=0x20102 # CONFIG_RT_USING_LWIP_IPV6 is not set @@ -505,8 +489,9 @@ CONFIG_LWIP_SO_RCVTIMEO=1 CONFIG_LWIP_SO_SNDTIMEO=1 CONFIG_LWIP_SO_RCVBUF=1 CONFIG_LWIP_SO_LINGER=0 -# CONFIG_RT_LWIP_NETIF_LOOPBACK is not set -CONFIG_LWIP_NETIF_LOOPBACK=0 +CONFIG_RT_LWIP_NETIF_LOOPBACK=y +CONFIG_RT_LWIP_USING_LOOPBACK=y +CONFIG_LWIP_NETIF_LOOPBACK=1 # CONFIG_RT_LWIP_STATS is not set # CONFIG_RT_LWIP_USING_HW_CHECKSUM is not set CONFIG_RT_LWIP_USING_PING=y @@ -558,7 +543,7 @@ CONFIG_RT_PAGE_MAX_ORDER=11 CONFIG_RT_USING_LWP=y CONFIG_LWP_DEBUG=y -CONFIG_LWP_DEBUG_INIT=y +# CONFIG_LWP_DEBUG_INIT is not set CONFIG_LWP_USING_RUNTIME=y CONFIG_RT_LWP_MAX_NR=30 CONFIG_LWP_TASK_STACK_SIZE=16384 @@ -580,6 +565,7 @@ CONFIG_RT_USING_VDSO=y # end of Using USB legacy version # CONFIG_RT_USING_FDT is not set +# CONFIG_RT_USING_LEGACY_VIRTIO is not set # CONFIG_RT_USING_RUST is not set # end of RT-Thread Components @@ -921,7 +907,13 @@ CONFIG_RT_USING_VDSO=y # CONFIG_PKG_USING_LITTLEFS is not set # CONFIG_PKG_USING_DFS_JFFS2 is not set # CONFIG_PKG_USING_DFS_UFFS is not set -# CONFIG_PKG_USING_LWEXT4 is not set +CONFIG_PKG_USING_LWEXT4=y +CONFIG_PKG_LWEXT4_PATH="/packages/system/lwext4" +CONFIG_RT_USING_DFS_LWEXT4=y +# CONFIG_PKG_USING_LWEXT4_V200 is not set +CONFIG_PKG_USING_LWEXT4_LATEST_VERSION=y +# CONFIG_PKG_USING_LWEXT4_V110 is not set +CONFIG_PKG_LWEXT4_VER="latest" # CONFIG_PKG_USING_THREAD_POOL is not set # CONFIG_PKG_USING_ROBOTS is not set # CONFIG_PKG_USING_EV is not set @@ -1042,7 +1034,21 @@ CONFIG_RT_USING_VDSO=y # CONFIG_PKG_USING_NUCLEI_SDK is not set # CONFIG_PKG_USING_RASPBERRYPI_PICO_RP2350_SDK is not set # CONFIG_PKG_USING_RASPBERRYPI_PICO_SDK is not set -# CONFIG_PKG_USING_MM32 is not set + +# +# MM32 HAL & SDK Drivers +# +# CONFIG_PKG_USING_MM32F103XX_CMSIS is not set +# CONFIG_PKG_USING_MM32F3270X_CMSIS is not set +# CONFIG_PKG_USING_MM32F5260X_CMSIS is not set +# CONFIG_PKG_USING_MM32L0XX_CMSIS is not set +# CONFIG_PKG_USING_MM32L3XX_CMSIS is not set +# CONFIG_PKG_USING_MM32F103XX_HAL_DRIVER is not set +# CONFIG_PKG_USING_MM32F3270X_HAL_DRIVER is not set +# CONFIG_PKG_USING_MM32F5260X_HAL_DRIVER is not set +# CONFIG_PKG_USING_MM32L0XX_HAL_DRIVER is not set +# CONFIG_PKG_USING_MM32L3XX_HAL_DRIVER is not set +# end of MM32 HAL & SDK Drivers # # WCH HAL & SDK Drivers @@ -1130,6 +1136,12 @@ CONFIG_RT_USING_VDSO=y # CONFIG_PKG_USING_FT32F4_STD_DRIVER is not set # CONFIG_PKG_USING_FT32F4_CMSIS_DRIVER is not set # end of FT32 HAL & SDK Drivers + +# +# NOVOSNS Drivers +# +# CONFIG_PKG_USING_NOVOSNS_SERIES_DRIVER is not set +# end of NOVOSNS Drivers # end of HAL & SDK Drivers # @@ -1661,6 +1673,7 @@ CONFIG_PKG_ZLIB_VER="latest" # Drivers Configuration # # CONFIG_BSP_USING_GNNE is not set +# CONFIG_BSP_USING_GPIO is not set # CONFIG_BSP_USING_SPI is not set # CONFIG_BSP_USING_I2C is not set # CONFIG_BSP_USING_RTC is not set @@ -1680,16 +1693,19 @@ CONFIG_BSP_USING_SDIO0=y # CONFIG_BSP_SDIO0_EMMC is not set # CONFIG_BSP_SDIO0_1V8 is not set # CONFIG_BSP_USING_SDIO1 is not set -CONFIG_BSP_SD_MNT_DEVNAME="sd0p1" +CONFIG_BSP_SD_MNT_DEVNAME="sd0p0" # CONFIG_BSP_USING_TIMERS is not set # CONFIG_BSP_USING_WDT is not set # CONFIG_BSP_USING_PDMA is not set # CONFIG_BSP_UTEST_DRIVERS is not set # end of Drivers Configuration +# CONFIG_SOC_K230 is not set +CONFIG_SOC_K230D=y CONFIG_BOARD_C908=y CONFIG___STACKSIZE__=65536 -CONFIG_BSP_ROOTFS_TYPE_ELMFAT=y +# CONFIG_BSP_ROOTFS_TYPE_ELMFAT is not set +CONFIG_BSP_ROOTFS_TYPE_EXT4=y # CONFIG_BSP_ROOTFS_TYPE_CROMFS is not set -# CONFIG_BSP_RISCV_FPU_SOFT is not set -CONFIG_BSP_RISCV_FPU_D=y +CONFIG_BSP_RISCV_FPU_SOFT=y +# CONFIG_BSP_RISCV_FPU_D is not set diff --git a/bsp/k230/Kconfig b/bsp/k230/Kconfig index 3ddee1c468c4..643432f1947e 100644 --- a/bsp/k230/Kconfig +++ b/bsp/k230/Kconfig @@ -10,14 +10,26 @@ source "$RTT_DIR/Kconfig" source "$PKGS_DIR/Kconfig" rsource "board/Kconfig" +choice + prompt "SoC variant" + default SOC_K230 + +config SOC_K230 + bool "K230" + +config SOC_K230D + bool "K230D (128MB DDR)" +endchoice + config BOARD_C908 bool select ARCH_RISCV64 select RT_USING_COMPONENTS_INIT select RT_USING_USER_MAIN select RT_USING_CACHE - select ARCH_MM_MMU + select ARCH_MM_MMU select ARCH_RISCV_FPU + select ARCH_RISCV_XUANTIE select ARCH_REMAP_KERNEL if RT_USING_SMART default y @@ -33,6 +45,10 @@ choice BSP_ROOTFS_TYPE bool "Use Elm-chan FAT File-System" select RT_USING_DFS_ELMFAT + config BSP_ROOTFS_TYPE_EXT4 + bool "Use Ext4 File-System" + select PKG_USING_LWEXT4 + config BSP_ROOTFS_TYPE_CROMFS bool "Use Compressed ROM File-System (ReadOnly)" select RT_USING_DFS_CROMFS diff --git a/bsp/k230/SConstruct b/bsp/k230/SConstruct index d12a8ff8e1be..ac689ea33a60 100644 --- a/bsp/k230/SConstruct +++ b/bsp/k230/SConstruct @@ -38,10 +38,8 @@ TARGET = 'rtthread.' + rtconfig.TARGET_EXT options = LocalOptions("rtconfig.h") soft_fpu = GetLocalDepend(options, 'BSP_RISCV_FPU_SOFT') if soft_fpu: - rtconfig.DEVICE = rtconfig.DEVICE.replace('-march=rv64imafdcv -mabi=lp64d', '-march=rv64imafdc -mabi=lp64') - rtconfig.CFLAGS = rtconfig.CFLAGS.replace('-march=rv64imafdcv -mabi=lp64d', '-march=rv64imafdc -mabi=lp64') - rtconfig.LFLAGS = rtconfig.LFLAGS.replace('-march=rv64imafdcv -mabi=lp64d', '-march=rv64imafdc -mabi=lp64') - rtconfig.AFLAGS = rtconfig.AFLAGS.replace('-march=rv64imafdcv -mabi=lp64d', '-march=rv64imafdc -mabi=lp64') + for name in ('DEVICE', 'CFLAGS', 'LFLAGS', 'AFLAGS'): + setattr(rtconfig, name, getattr(rtconfig, name).replace('-march=rv64imafdcv', '-march=rv64imafdc')) DefaultEnvironment(tools=[]) env = Environment(tools = ['mingw'], diff --git a/bsp/k230/applications/mnt.c b/bsp/k230/applications/mnt.c index 3e86c2db0356..93df25006a66 100644 --- a/bsp/k230/applications/mnt.c +++ b/bsp/k230/applications/mnt.c @@ -24,25 +24,51 @@ static int mnt_cromfs(void) } #endif +#ifdef RT_USING_DFS_PTYFS +static int mnt_ptyfs(void) +{ + mkdir("/dev/pts", 0755); + + if (dfs_mount(RT_NULL, "/dev/pts", "ptyfs", 0, RT_NULL) != RT_EOK) + { + rt_kprintf("ptyfs mounted on /dev/pts failed!\n"); + return -RT_ERROR; + } + + rt_kprintf("ptyfs mounted on /dev/pts success!\n"); + return RT_EOK; +} +#endif + int mnt_init(void) { -#if defined(BSP_USING_SDIO) && defined(BSP_ROOTFS_TYPE_ELMFAT) - int timeout = 50; // Timeout after 50 iterations (5 seconds if each iteration waits 100ms) +#if defined(BSP_USING_SDIO) && \ + (defined(BSP_ROOTFS_TYPE_ELMFAT) || defined(BSP_ROOTFS_TYPE_EXT4)) + int timeout = 50; + const char *filesystem; + +#ifdef BSP_ROOTFS_TYPE_EXT4 + filesystem = "ext"; +#else + filesystem = "elm"; +#endif + while (mmcsd_wait_cd_changed(100) != MMCSD_HOST_PLUGED) { if (--timeout <= 0) { rt_kprintf("Timeout waiting for MMCSD host to be plugged!\n"); - return -1; // Return an error code to indicate failure + return -1; } - rt_thread_mdelay(100); // Yield to the scheduler + rt_thread_mdelay(100); } - if (dfs_mount(BSP_SD_MNT_DEVNAME, "/", "elm", 0, 0) != 0) + if (dfs_mount(BSP_SD_MNT_DEVNAME, "/", filesystem, 0, 0) != 0) { rt_kprintf("%s mounted on / failed!\n", BSP_SD_MNT_DEVNAME); } - else { + else + { rt_kprintf("%s mounted on / success!\n", BSP_SD_MNT_DEVNAME); } #endif @@ -62,15 +88,9 @@ int mnt_init(void) } #endif - mkdir("/dev/shm", 0x777); - - if (dfs_mount(RT_NULL, "/dev/shm", "tmp", 0, 0) != 0) - { - rt_kprintf("tmpfs mounted on /dev/shm failed!\n"); - } - else { - rt_kprintf("tmpfs mounted on /dev/shm success!\n"); - } +#ifdef RT_USING_DFS_PTYFS + (void)mnt_ptyfs(); +#endif rt_kprintf("file system initialization done!\n"); @@ -78,4 +98,21 @@ int mnt_init(void) } INIT_ENV_EXPORT(mnt_init); +#if defined(RT_USING_DFS_PROCFS) && !defined(RT_USING_DM) +static int mnt_procfs(void) +{ + mkdir("/proc", 0755); + + if (dfs_mount(RT_NULL, "/proc", "procfs", 0, RT_NULL) != RT_EOK) + { + rt_kprintf("procfs mounted on /proc failed!\n"); + return -RT_ERROR; + } + + rt_kprintf("procfs mounted on /proc success!\n"); + return RT_EOK; +} +INIT_FS_EXPORT(mnt_procfs); +#endif + #endif /* RT_USING_DFS */ diff --git a/bsp/k230/board/Kconfig b/bsp/k230/board/Kconfig index 97af85242068..89f31bfea44b 100644 --- a/bsp/k230/board/Kconfig +++ b/bsp/k230/board/Kconfig @@ -4,6 +4,11 @@ menu "Drivers Configuration" bool "Enable KPU and AI2D" default n + config BSP_USING_GPIO + bool "Enable GPIO" + select RT_USING_PIN + default n + menuconfig BSP_USING_SPI bool "Enable SPI" select RT_USING_SPI @@ -160,7 +165,7 @@ menu "Drivers Configuration" config BSP_SD_MNT_DEVNAME string "The name of the SD-BlkDev to be mounted" - default "sd0p1" + default "sd0p0" endif menuconfig BSP_USING_TIMERS diff --git a/bsp/k230/board/board.c b/bsp/k230/board/board.c index 8e4eb675d588..e74ae35802c4 100644 --- a/bsp/k230/board/board.c +++ b/bsp/k230/board/board.c @@ -39,7 +39,6 @@ extern unsigned int __bss_end; #define RT_HW_PAGE_END ((void *)(RAM_END)) #ifdef RT_USING_SMART - rt_region_t init_page_region = {(rt_size_t)RT_HW_PAGE_START, (rt_size_t)RT_HW_PAGE_END}; extern size_t MMUTable[]; @@ -47,9 +46,7 @@ extern size_t MMUTable[]; struct mem_desc platform_mem_desc[] = { {KERNEL_VADDR_START, (rt_size_t)(KERNEL_VADDR_START + CONFIG_MEM_MMZ_BASE + CONFIG_MEM_MMZ_SIZE - 1), (rt_size_t)ARCH_MAP_FAILED, NORMAL_MEM}, }; - #define NUM_MEM_DESC (sizeof(platform_mem_desc) / sizeof(platform_mem_desc[0])) - #endif /* RT_USING_SMART */ #ifndef ARCH_REMAP_KERNEL @@ -76,34 +73,35 @@ static void __rt_assert_handler(const char *ex_string, const char *func, rt_size asm volatile("ebreak":::"memory"); } -//BSP的C入口 +/* C entry point, this gets called on primary CPU after stack setup. */ void primary_cpu_entry(void) { - //关中断 rt_hw_interrupt_disable(); + +#ifdef RT_DEBUGING_ASSERT rt_assert_set_hook(__rt_assert_handler); - //启动RT-Thread Smart内核 +#endif + entry(); } #define IOREMAP_SIZE (1ul << 30) -//这个初始化程序由内核主动调用,此时调度器还未启动,因此在此不能使用依赖线程上下文的函数 +/* + * This function is called by the kernel during initialization. At this point, + * the scheduler has not started, so functions that depend on thread context + * cannot be used. + */ void rt_hw_board_init(void) { #ifdef RT_USING_SMART - /* init data structure */ rt_hw_mmu_map_init(&rt_kernel_space, (void *)(IOREMAP_VEND - IOREMAP_SIZE), IOREMAP_SIZE, (rt_size_t *)MMUTable, PV_OFFSET); - - /* init page allocator */ rt_page_init(init_page_region); - /* setup region, and enable MMU */ rt_hw_mmu_setup(&rt_kernel_space, platform_mem_desc, NUM_MEM_DESC); #endif #ifdef RT_USING_HEAP - /* initialize memory system */ rt_system_heap_init(RT_HW_HEAP_BEGIN, RT_HW_HEAP_END); #endif /* initalize interrupt */ diff --git a/bsp/k230/board/board.h b/bsp/k230/board/board.h index 5b06bda30fb8..47eafaee3705 100644 --- a/bsp/k230/board/board.h +++ b/bsp/k230/board/board.h @@ -20,9 +20,6 @@ * * See K230 Technical Reference Manual, chapter 1.5 Address Space mapping */ -#define SRAM_BASE_ADDR (0x80200000UL) -#define SRAM_IO_SIZE (0x00200000UL) - #define KPU_BASE_ADDR (0x80400000UL) #define KPU_IO_SIZE (0x00000800UL) @@ -32,43 +29,15 @@ #define AI2D_BASE_ADDR (0x80400C00UL) #define AI2D_IO_SIZE (0x00000400UL) -#define GSDMA_BASE_ADDR (0x80800000UL) -#define GSDMA_IO_SIZE (0x00004000UL) - #define DMA_BASE_ADDR (0x80804000UL) #define DMA_IO_SIZE (0x00004000UL) -#define DECOMP_BASE_ADDR (0x80808000UL) -#define DECOMP_IO_SIZE (0x00004000UL) - -#define NON_AI2D_BASE_ADDR (0x8080C000UL) -#define NON_AI2D_IO_SIZE (0x00004000UL) - -#define ISP_BASE_ADDR (0x90000000UL) -#define ISP_IO_SIZE (0x00008000UL) - -#define DEWARP_BASE_ADDR (0x90008000UL) -#define DEWARP_IO_SIZE (0x00001000UL) - -#define CSI_BASE_ADDR (0x90009000UL) -#define CSI_IO_SIZE (0x00002000UL) - -#define VPU_BASE_ADDR (0x90400000UL) -#define VPU_IO_SIZE (0x00010000UL) - -/*2.5D*/ -#define TAAH_GPU_BASE_ADDR (0x90800000UL) -#define TAAH_GPU_IO_SIZE (0x00040000UL) - #define VO_BASE_ADDR (0x90840000UL) #define VO_IO_SIZE (0x00010000UL) #define DSI_BASE_ADDR (0x90850000UL) #define DSI_IO_SIZE (0x00001000UL) -#define GPU_ENGINE_BASE_ADDR (0x90A00000UL) -#define GPU_ENGINE_IO_SIZE (0x00000800UL) - #define PMU_BASE_ADDR (0x91000000UL) #define PMU_IO_SIZE (0x00000C00UL) @@ -105,18 +74,9 @@ #define TS_BASE_ADDR (0x91107000UL) #define TS_IO_SIZE (0x00000800UL) -#define HDI_BASE_ADDR (0x91107800UL) -#define HDI_IO_SIZE (0x00000800UL) - #define STC_BASE_ADDR (0x91108000UL) #define STC_IO_SIZE (0x00001000UL) -#define BOOTROM_BASE_ADDR (0x91200000UL) -#define BOOTROM_IO_SIZE (0x00010000UL) - -#define SECURITY_BASE_ADDR (0x91210000UL) -#define SECURITY_IO_SIZE (0x00008000UL) - #define UART0_BASE_ADDR (0x91400000UL) #define UART0_IO_SIZE (0x00001000UL) @@ -159,35 +119,10 @@ #define ADC_BASE_ADDR (0x9140D000UL) #define ADC_IO_SIZE (0x00001000UL) -#define CODEC_BASE_ADDR (0x9140E000UL) -#define CODEC_IO_SIZE (0x00001000UL) - -#define AUDIO_BASE_ADDR (0x9140F000UL) -#define AUDIO_IO_SIZE (0x00001000UL) - -#define USB2_BASE_ADDR (0x91500000UL) -#define USB2_IO_SIZE (0x00080000UL) - -#define SD_HC_BASE_ADDR (0x91580000UL) -#define SD_HC_IO_SIZE (0x00002000UL) - #define SPI_QOPI_BASE_ADDR (0x91582000UL) #define SPI_QOPI_IO_SIZE (0x00002000UL) #define SPI_OPI_BASE_ADDR (0x91584000UL) #define SPI_OPI_IO_SIZE (0x00001000UL) -#define HI_SYS_CONFIG_BASE_ADDR (0x91585000UL) -#define HI_SYS_CONFIG_IO_SIZE (0x00000400UL) - -#define DDRC_CONF_BASE_ADDR (0x98000000UL) -#define DDRC_CONF_IO_SIZE (0x02000000UL) - -#define SPI_XIP_FLASH_BASE_ADDR (0xC0000000UL) -#define SPI_XIP_FLASH_IO_SIZE (0x08000000UL) - -#define IO_SPACE_BASE_ADDR (KPU_BASE_ADDR) - -#define TIMER_CLK_FREQ (27000000) - #endif // BOARD_H__ diff --git a/bsp/k230/board/mem_layout.h b/bsp/k230/board/mem_layout.h index cca1e0f7d998..fec1e7f76771 100644 --- a/bsp/k230/board/mem_layout.h +++ b/bsp/k230/board/mem_layout.h @@ -26,7 +26,7 @@ * | ...... | maybe zero * +---------+ <- CONFIG_MEM_RTSMART_SIZE * | guard | MEM_GUARD_SIZE - * +---------+ <- End of Kerenl + * +---------+ <- End of Kernel * | | * | | * +---------+ @@ -47,30 +47,35 @@ * the SDK configuration. * * If CONFIG_XXX is defined, it means that the value comes from the SDK - * configuration, otherwise the default configuration of bsp/k230 in RT-Thead - * is used. The default configuration of bsp/k230 is for the 01Studio CanMV - * development board that supports 512MB of memory. + * configuration, otherwise the default configuration defined in this file + * is used. */ + +#if !defined(SOC_K230) && !defined(SOC_K230D) +#error "Either SOC_K230 or SOC_K230D must be defined" +#endif + +/* Standalone defaults for K230 and K230D boards with 128MB DDR. */ #ifndef CONFIG_MEM_TOTAL_SIZE -#define CONFIG_MEM_TOTAL_SIZE 0x20000000 // 512M +#define CONFIG_MEM_TOTAL_SIZE 0x8000000 // 128M #endif #ifndef CONFIG_MEM_RTSMART_SIZE -#define CONFIG_MEM_RTSMART_SIZE 0x10000000 // 256M +#define CONFIG_MEM_RTSMART_SIZE 0x3A00000 // 58M #endif #ifndef CONFIG_MEM_RTSMART_HEAP_SIZE -#define CONFIG_MEM_RTSMART_HEAP_SIZE 0x2000000 // 32M +#define CONFIG_MEM_RTSMART_HEAP_SIZE 0x800000 // 8M #endif #ifndef CONFIG_MEM_MMZ_BASE -#define CONFIG_MEM_MMZ_BASE 0x10000000 // 512M +#define CONFIG_MEM_MMZ_BASE 0x3A00000 // 58M #endif #ifndef CONFIG_MEM_MMZ_SIZE -#define CONFIG_MEM_MMZ_SIZE 0x10000000 // 256M +#define CONFIG_MEM_MMZ_SIZE 0x4600000 // 70M #endif #define MEM_KERNEL_SIZE (CONFIG_MEM_RTSMART_SIZE - MEM_OPENSBI_SIZE - MEM_GUARD_SIZE) -#endif // MEMORY_LAYOUT_H__ \ No newline at end of file +#endif // MEMORY_LAYOUT_H__ diff --git a/bsp/k230/drivers/interdrv/gpio/drv_gpio.c b/bsp/k230/drivers/interdrv/gpio/drv_gpio.c index 2185418aea08..62db48ede521 100644 --- a/bsp/k230/drivers/interdrv/gpio/drv_gpio.c +++ b/bsp/k230/drivers/interdrv/gpio/drv_gpio.c @@ -32,6 +32,7 @@ #include #include #include +#include #include #include #include "ioremap.h" @@ -52,7 +53,6 @@ #define DBG_COLOR struct kd_gpio_device { - struct rt_device dev; void* base[2]; int hardlock; }; @@ -92,7 +92,7 @@ static rt_uint32_t kd_gpio_reg_readl(void* reg, rt_size_t offset) static int check_pin_valid(rt_base_t pin) { - if ((rt_uint16_t)pin < 0 || (rt_uint16_t)pin > GPIO_MAX_NUM) + if (pin < 0 || pin >= GPIO_MAX_NUM) { LOG_E("pin %d is not valid\n", pin); return -RT_EINVAL; @@ -379,6 +379,74 @@ rt_err_t kd_pin_irq_enable(rt_base_t pin, rt_uint32_t enabled) return RT_EOK; } +static void k230_pin_mode(struct rt_device *device, rt_base_t pin, rt_uint8_t mode) +{ + (void)device; + + switch (mode) + { + case PIN_MODE_OUTPUT: + case PIN_MODE_OUTPUT_OD: + (void)kd_pin_mode(pin, GPIO_DM_OUTPUT); + break; + case PIN_MODE_INPUT: + case PIN_MODE_INPUT_PULLUP: + case PIN_MODE_INPUT_PULLDOWN: + (void)kd_pin_mode(pin, GPIO_DM_INPUT); + break; + default: + LOG_E("pin mode %u is not supported", mode); + break; + } +} + +static void k230_pin_write(struct rt_device *device, rt_base_t pin, rt_uint8_t value) +{ + (void)device; + + (void)kd_pin_write(pin, value ? GPIO_PV_HIGH : GPIO_PV_LOW); +} + +static rt_ssize_t k230_pin_read(struct rt_device *device, rt_base_t pin) +{ + (void)device; + + return kd_pin_read(pin); +} + +static rt_err_t k230_pin_attach_irq(struct rt_device *device, rt_base_t pin, + rt_uint8_t mode, void (*hdr)(void *args), + void *args) +{ + (void)device; + + return kd_pin_attach_irq(pin, mode, hdr, args); +} + +static rt_err_t k230_pin_detach_irq(struct rt_device *device, rt_base_t pin) +{ + (void)device; + + return kd_pin_detach_irq(pin); +} + +static rt_err_t k230_pin_irq_enable(struct rt_device *device, rt_base_t pin, + rt_uint8_t enabled) +{ + (void)device; + + return kd_pin_irq_enable(pin, enabled); +} + +static const struct rt_pin_ops k230_pin_ops = { + .pin_mode = k230_pin_mode, + .pin_write = k230_pin_write, + .pin_read = k230_pin_read, + .pin_attach_irq = k230_pin_attach_irq, + .pin_detach_irq = k230_pin_detach_irq, + .pin_irq_enable = k230_pin_irq_enable, +}; + int rt_hw_gpio_init(void) { rt_err_t ret; @@ -393,8 +461,8 @@ int rt_hw_gpio_init(void) } gpio_dev.hardlock = HARDLOCK_GPIO; - ret = rt_device_register(&gpio_dev.dev, "gpio", RT_DEVICE_FLAG_RDWR); + ret = rt_device_pin_register("gpio", &k230_pin_ops, RT_NULL); return ret; } -INIT_BOARD_EXPORT(rt_hw_gpio_init); \ No newline at end of file +INIT_BOARD_EXPORT(rt_hw_gpio_init); diff --git a/bsp/k230/drivers/interdrv/rtc/drv_rtc.c b/bsp/k230/drivers/interdrv/rtc/drv_rtc.c index b4820dc79a13..f64db7826253 100644 --- a/bsp/k230/drivers/interdrv/rtc/drv_rtc.c +++ b/bsp/k230/drivers/interdrv/rtc/drv_rtc.c @@ -230,8 +230,8 @@ static void rtc_irq(int vector, void *param) static void rtc_date_time_set(struct k230_rtc_dev *dev, int year, int month, int day, \ int hour, int minute, int second, int week) { - rtc_date_t date; - rtc_time_t time; + rtc_date_t date = { 0 }; + rtc_time_t time = { 0 }; rtc_count_t count; volatile rtc_t *rtc = (rtc_t *)dev->base; @@ -318,8 +318,8 @@ static void rtc_alarm_set(struct k230_rtc_dev *dev, void *args) time_t t; struct tm p_tm; volatile rtc_t *rtc = (rtc_t *)dev->base; - rtc_alarm_time_t alarm_time; - rtc_alarm_date_t alarm_date; + rtc_alarm_time_t alarm_time = { 0 }; + rtc_alarm_date_t alarm_date = { 0 }; rtc_date_t date = rtc->date; int year, year_l, year_h, val; @@ -477,7 +477,7 @@ static int rt_hw_rtc_init(void) ret = rt_device_register(&rtc_dev.device, "rtc", RT_DEVICE_FLAG_RDWR); RT_ASSERT(ret == RT_EOK); - LOG_I("rtc driver register OK\n"); + LOG_D("rtc driver register OK"); rtc_alarm_stop(&rtc_dev); rtc_tick_stop(&rtc_dev); diff --git a/bsp/k230/rtconfig.h b/bsp/k230/rtconfig.h index 56556cfb936f..dafee5193470 100644 --- a/bsp/k230/rtconfig.h +++ b/bsp/k230/rtconfig.h @@ -72,7 +72,7 @@ /* end of rt_strnlen options */ /* end of klibc options */ -#define RT_NAME_MAX 16 +#define RT_NAME_MAX 32 #define RT_USING_SMART #define RT_CPUS_NR 1 #define RT_ALIGN_SIZE 8 @@ -122,7 +122,7 @@ #define RT_CONSOLEBUF_SIZE 256 #define RT_CONSOLE_DEVICE_NAME "uart0" #define RT_USING_CONSOLE_OUTPUT_CTL -#define RT_VER_NUM 0x50300 +#define RT_VER_NUM 0x50400 #define RT_USING_STDC_ATOMIC #define RT_BACKTRACE_LEVEL_MAX_NR 32 /* end of RT-Thread Kernel */ @@ -132,11 +132,14 @@ #define KERNEL_VADDR_START 0xffffffc000000000 #define ARCH_RISCV #define ARCH_RISCV_FPU -#define ARCH_RISCV_VECTOR -#define ARCH_VECTOR_VLEN_128 -#define ARCH_RISCV_FPU_D #define ARCH_RISCV64 +#define ARCH_RISCV_XUANTIE + +/* RISC-V Architecture Configuration */ + +/* end of RISC-V Architecture Configuration */ #define ARCH_USING_NEW_CTX_SWITCH +#define CONFIG_XUANTIE_SVPBMT 1 #define ARCH_REMAP_KERNEL /* RT-Thread Components */ @@ -167,24 +170,9 @@ #define DFS_USING_WORKDIR #define DFS_FD_MAX 16 #define RT_USING_DFS_V2 -#define RT_USING_DFS_ELMFAT - -/* elm-chan's FatFs, Generic FAT Filesystem Module */ - -#define RT_DFS_ELM_CODE_PAGE 437 -#define RT_DFS_ELM_WORD_ACCESS -#define RT_DFS_ELM_USE_LFN_3 -#define RT_DFS_ELM_USE_LFN 3 -#define RT_DFS_ELM_LFN_UNICODE_0 -#define RT_DFS_ELM_LFN_UNICODE 0 -#define RT_DFS_ELM_MAX_LFN 255 -#define RT_DFS_ELM_DRIVES 2 -#define RT_DFS_ELM_MAX_SECTOR_SIZE 512 -#define RT_DFS_ELM_REENTRANT -#define RT_DFS_ELM_MUTEX_TIMEOUT 3000 -/* end of elm-chan's FatFs, Generic FAT Filesystem Module */ #define RT_USING_DFS_DEVFS #define RT_USING_DFS_PTYFS +#define RT_USING_DFS_PROCFS #define RT_USING_DFS_CROMFS #define RT_USING_DFS_TMPFS #define RT_USING_PAGECACHE @@ -213,11 +201,12 @@ #define RT_SERIAL_RB_BUFSZ 64 #define RT_USING_SERIAL_BYPASS #define RT_USING_CLOCK_TIME -#define CLOCK_TIMER_FREQ 0 +#define CLOCK_TIMER_FREQ 25000000 #define RT_USING_NULL #define RT_USING_ZERO #define RT_USING_RANDOM #define RT_USING_RTC +#define RT_USING_SOFT_RTC #define RT_USING_SDIO #define RT_SDIO_STACK_SIZE 8192 #define RT_SDIO_THREAD_PRIORITY 15 @@ -265,6 +254,8 @@ /* Interprocess Communication (IPC) */ +#define RT_USING_POSIX_PIPE +#define RT_USING_POSIX_PIPE_SIZE 2048 /* Socket is in the 'Network' category */ @@ -283,6 +274,12 @@ #define SAL_USING_LWIP /* end of Docking with protocol stacks */ #define SAL_USING_POSIX +#define RT_USING_AF_UNIX +#define AF_UNIX_DGRAM_MAX_SIZE 4096 +#define AF_UNIX_DGRAM_QUEUE_LEN 16 +#define AF_UNIX_STREAM_BUFFER_SIZE 4096 +#define AF_UNIX_LISTEN_BACKLOG_MAX 16 +#define AF_UNIX_RIGHTS_MAX 16 #define RT_USING_NETDEV #define NETDEV_USING_IFCONFIG #define NETDEV_USING_PING @@ -332,7 +329,9 @@ #define LWIP_SO_SNDTIMEO 1 #define LWIP_SO_RCVBUF 1 #define LWIP_SO_LINGER 0 -#define LWIP_NETIF_LOOPBACK 0 +#define RT_LWIP_NETIF_LOOPBACK +#define RT_LWIP_USING_LOOPBACK +#define LWIP_NETIF_LOOPBACK 1 #define RT_LWIP_USING_PING /* end of Network */ @@ -361,7 +360,6 @@ /* end of Memory management */ #define RT_USING_LWP #define LWP_DEBUG -#define LWP_DEBUG_INIT #define LWP_USING_RUNTIME #define RT_LWP_MAX_NR 30 #define LWP_TASK_STACK_SIZE 16384 @@ -462,6 +460,9 @@ /* Micrium: Micrium software products porting for RT-Thread */ /* end of Micrium: Micrium software products porting for RT-Thread */ +#define PKG_USING_LWEXT4 +#define RT_USING_DFS_LWEXT4 +#define PKG_USING_LWEXT4_LATEST_VERSION /* end of system packages */ /* peripheral libraries and drivers */ @@ -480,6 +481,10 @@ /* end of Kendryte SDK */ +/* MM32 HAL & SDK Drivers */ + +/* end of MM32 HAL & SDK Drivers */ + /* WCH HAL & SDK Drivers */ /* end of WCH HAL & SDK Drivers */ @@ -511,6 +516,10 @@ /* FT32 HAL & SDK Drivers */ /* end of FT32 HAL & SDK Drivers */ + +/* NOVOSNS Drivers */ + +/* end of NOVOSNS Drivers */ /* end of HAL & SDK Drivers */ /* sensors drivers */ @@ -601,11 +610,12 @@ #define BSP_USING_HARDLOCK #define BSP_USING_SDIO #define BSP_USING_SDIO0 -#define BSP_SD_MNT_DEVNAME "sd0p1" +#define BSP_SD_MNT_DEVNAME "sd0p0" /* end of Drivers Configuration */ +#define SOC_K230D #define BOARD_C908 #define __STACKSIZE__ 65536 -#define BSP_ROOTFS_TYPE_ELMFAT -#define BSP_RISCV_FPU_D +#define BSP_ROOTFS_TYPE_EXT4 +#define BSP_RISCV_FPU_SOFT #endif