From 66738d71daf8fbe126d71eda55cfd269b0b88d12 Mon Sep 17 00:00:00 2001 From: Shicheng Chu <1468559561@qq.com> Date: Tue, 27 Aug 2024 10:17:21 +0800 Subject: [PATCH] bsp: cvitek: Add support for duos_sd Supports both big and little cores of RISC-V C906, but does not support ARM cores. Currently, only UART drivers are supported on the peripherals. Signed-off-by: Shicheng Chu <1468559561@qq.com> --- bsp/cvitek/README.md | 4 +- bsp/cvitek/board_env.sh | 6 +- bsp/cvitek/c906_little/Kconfig | 8 +++ bsp/cvitek/c906_little/SConstruct | 2 +- bsp/cvitek/cv18xx_risc-v/Kconfig | 8 +++ bsp/cvitek/cv18xx_risc-v/applications/main.c | 2 + .../milkv-duos-sd/cv1813h_milkv_duos_sd.dtb | Bin 0 -> 20656 bytes .../cv18xx_risc-v/dtb/milkv-duos-sd/multi.its | 56 +++++++++++++++ bsp/cvitek/drivers/SConscript | 2 +- bsp/cvitek/drivers/drv_pinmux.c | 2 +- bsp/cvitek/drivers/drv_uart.c | 65 ++++++++++++++++++ 11 files changed, 148 insertions(+), 7 deletions(-) create mode 100644 bsp/cvitek/cv18xx_risc-v/dtb/milkv-duos-sd/cv1813h_milkv_duos_sd.dtb create mode 100644 bsp/cvitek/cv18xx_risc-v/dtb/milkv-duos-sd/multi.its diff --git a/bsp/cvitek/README.md b/bsp/cvitek/README.md index 40253a2226..d5c4a0f95e 100755 --- a/bsp/cvitek/README.md +++ b/bsp/cvitek/README.md @@ -24,7 +24,8 @@ 支持开发板以及集成 SoC 芯片信息如下 - milk-v duo: [https://milkv.io/duo](https://milkv.io/duo),SoC 采用 CV1800B。 -- milk-v duo256m: [https://milkv.io/duo256m](https://milkv.io/docs/duo/getting-started/duo256m),SoC 采用 SG2002。 +- milk-v duo256m: [https://milkv.io/duo256m](https://milkv.io/docs/duo/getting-started/duo256m),SoC 采用 SG2002(原 CV181xC)。 +- milk-v duos: [https://milkv.io/duos](https://milkv.io/docs/duo/getting-started/duos),SoC 采用 SG2000(原 CV181xH)。 Duo 家族开发板采用 CV18xx 系列芯片。芯片的工作模式总结如下: @@ -109,6 +110,7 @@ Board Type (milkv-duo) ---> ( ) milkv-duo-spinor (X) milkv-duo256m ( ) milkv-duo256m-spinor + ( ) milkv-duos ``` 2. 编译 diff --git a/bsp/cvitek/board_env.sh b/bsp/cvitek/board_env.sh index 748fc2c46a..dd25229af8 100755 --- a/bsp/cvitek/board_env.sh +++ b/bsp/cvitek/board_env.sh @@ -2,9 +2,9 @@ function get_board_type() { - BOARD_CONFIG=("CONFIG_BOARD_TYPE_MILKV_DUO" "CONFIG_BOARD_TYPE_MILKV_DUO_SPINOR" "CONFIG_BOARD_TYPE_MILKV_DUO_SPINAND" "CONFIG_BOARD_TYPE_MILKV_DUO256M" "CONFIG_BOARD_TYPE_MILKV_DUO256M_SPINOR" "CONFIG_BOARD_TYPE_MILKV_DUO256M_SPINAND") - BOARD_VALUE=("milkv-duo" "milkv-duo-spinor" "milkv-duo-spinand" "milkv-duo256m" "milkv-duo256m-spinor" "milkv-duo256m-spinand") - STORAGE_VAUE=("sd" "spinor" "spinand" "sd" "spinor" "spinand") + BOARD_CONFIG=("CONFIG_BOARD_TYPE_MILKV_DUO" "CONFIG_BOARD_TYPE_MILKV_DUO_SPINOR" "CONFIG_BOARD_TYPE_MILKV_DUO_SPINAND" "CONFIG_BOARD_TYPE_MILKV_DUO256M" "CONFIG_BOARD_TYPE_MILKV_DUO256M_SPINOR" "CONFIG_BOARD_TYPE_MILKV_DUO256M_SPINAND" "CONFIG_BOARD_TYPE_MILKV_DUOS") + BOARD_VALUE=("milkv-duo" "milkv-duo-spinor" "milkv-duo-spinand" "milkv-duo256m" "milkv-duo256m-spinor" "milkv-duo256m-spinand" "milkv-duos-sd") + STORAGE_VAUE=("sd" "spinor" "spinand" "sd" "spinor" "spinand" "sd") for ((i=0;i<${#BOARD_CONFIG[@]};i++)) do diff --git a/bsp/cvitek/c906_little/Kconfig b/bsp/cvitek/c906_little/Kconfig index f2b62507fd..6e007eb2b8 100755 --- a/bsp/cvitek/c906_little/Kconfig +++ b/bsp/cvitek/c906_little/Kconfig @@ -42,6 +42,10 @@ config SOC_TYPE_CV180X bool default n +config SOC_TYPE_SG2000 + bool + default n + config SOC_TYPE_SG2002 bool default n @@ -66,4 +70,8 @@ choice select SOC_TYPE_SG2002 bool "milkv-duo256m-spinor" + config BOARD_TYPE_MILKV_DUOS + select SOC_TYPE_SG2000 + bool "milkv-duos" + endchoice diff --git a/bsp/cvitek/c906_little/SConstruct b/bsp/cvitek/c906_little/SConstruct index 6d07b7f5a7..816412eb48 100755 --- a/bsp/cvitek/c906_little/SConstruct +++ b/bsp/cvitek/c906_little/SConstruct @@ -34,7 +34,7 @@ objs = PrepareBuilding(env, RTT_ROOT, has_libcpu = False) # include libraries objs.extend(SConscript(drivers_path_prefix + '/SConscript', variant_dir='build/drivers', duplicate=0)) -if GetDepend('BOARD_TYPE_MILKV_DUO256M'): +if GetDepend('BOARD_TYPE_MILKV_DUO256M') or GetDepend('BOARD_TYPE_MILKV_DUOS'): env['LINKFLAGS'] = env['LINKFLAGS'].replace('cv180x_lscript.ld', 'cv181x_lscript.ld') env['LINKFLAGS'] = env['LINKFLAGS'].replace('-L board/script/cv180x', '-L board/script/cv181x') diff --git a/bsp/cvitek/cv18xx_risc-v/Kconfig b/bsp/cvitek/cv18xx_risc-v/Kconfig index c643459014..ba6b0889d2 100755 --- a/bsp/cvitek/cv18xx_risc-v/Kconfig +++ b/bsp/cvitek/cv18xx_risc-v/Kconfig @@ -48,6 +48,10 @@ config SOC_TYPE_CV180X bool default n +config SOC_TYPE_SG2000 + bool + default n + config SOC_TYPE_SG2002 bool default n @@ -72,6 +76,10 @@ choice select SOC_TYPE_SG2002 bool "milkv-duo256m-spinor" + config BOARD_TYPE_MILKV_DUOS + select SOC_TYPE_SG2000 + bool "milkv-duos" + endchoice choice BSP_ROOTFS_TYPE diff --git a/bsp/cvitek/cv18xx_risc-v/applications/main.c b/bsp/cvitek/cv18xx_risc-v/applications/main.c index eb689ece32..e5e10d121e 100755 --- a/bsp/cvitek/cv18xx_risc-v/applications/main.c +++ b/bsp/cvitek/cv18xx_risc-v/applications/main.c @@ -16,6 +16,8 @@ #define LED_PIN "E02" /* Onboard LED pins */ #elif defined(BOARD_TYPE_MILKV_DUO) || defined(BOARD_TYPE_MILKV_DUO_SPINOR) #define LED_PIN "C24" /* Onboard LED pins */ +#elif defined(BOARD_TYPE_MILKV_DUOS) +#define LED_PIN "A29" /* Onboard LED pins */ #endif int main(void) diff --git a/bsp/cvitek/cv18xx_risc-v/dtb/milkv-duos-sd/cv1813h_milkv_duos_sd.dtb b/bsp/cvitek/cv18xx_risc-v/dtb/milkv-duos-sd/cv1813h_milkv_duos_sd.dtb new file mode 100644 index 0000000000000000000000000000000000000000..35f375a773e9ea38b80d0862f3e2efc1ec813257 GIT binary patch literal 20656 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 + + images { + kernel-1 { + description = "cvitek kernel"; + data = /incbin/("./Image.lzma"); + type = "kernel"; + arch = "riscv"; + os = "linux"; + compression = "lzma"; + load = <0x0 0x80200000>; + entry = <0x0 0x80200000>; + hash-2 { + algo = "crc32"; + }; + }; + + + /*FDT*/ + + fdt-cv1813h_milkv_duos_sd { + description = "cvitek device tree - cv1813h_milkv_duos_sd"; + data = /incbin/("./cv1813h_milkv_duos_sd.dtb"); + type = "flat_dt"; + arch = "riscv"; + compression = "none"; + hash-1 { + algo = "sha256"; + }; + }; + + + + }; + + /*CFG*/ + configurations { + + config-cv1813h_milkv_duos_sd { + description = "boot cvitek system with board cv1813h_milkv_duos_sd"; + kernel = "kernel-1"; + fdt = "fdt-cv1813h_milkv_duos_sd"; + }; + + }; + + +}; diff --git a/bsp/cvitek/drivers/SConscript b/bsp/cvitek/drivers/SConscript index 61d65b7697..e6333eadde 100755 --- a/bsp/cvitek/drivers/SConscript +++ b/bsp/cvitek/drivers/SConscript @@ -12,7 +12,7 @@ CPPDEFINES = [] CPPPATH = [cwd] CHIP_TYPE = 'cv180x' -if GetDepend('BOARD_TYPE_MILKV_DUO256M') or GetDepend('BOARD_TYPE_MILKV_DUO256M_SPINOR') or GetDepend('BOARD_TYPE_MILKV_DUO256M_SPINAND'): +if GetDepend('BOARD_TYPE_MILKV_DUO256M') or GetDepend('BOARD_TYPE_MILKV_DUO256M_SPINOR') or GetDepend('BOARD_TYPE_MILKV_DUO256M_SPINAND') or GetDepend('BOARD_TYPE_MILKV_DUOS'): CHIP_TYPE = 'cv181x' elif GetDepend('BOARD_TYPE_MILKV_DUO') or GetDepend('BOARD_TYPE_MILKV_DUO_SPINOR') or GetDepend('BOARD_TYPE_MILKV_DUO_SPINAND'): CHIP_TYPE = 'cv180x' diff --git a/bsp/cvitek/drivers/drv_pinmux.c b/bsp/cvitek/drivers/drv_pinmux.c index 17e7857944..9d9fb49246 100644 --- a/bsp/cvitek/drivers/drv_pinmux.c +++ b/bsp/cvitek/drivers/drv_pinmux.c @@ -230,7 +230,7 @@ const struct fselect pin_selects_array[][8] = { /* PAD_AUD_AOUTR */ {FS_NONE, FS_NONE, FS_NONE, {XGPIOC_24, 3}, {IIS1_DI, 4}, {IIS2_DO, 5}, {IIS1_DO, 6}, FS_NONE}, }; -#elif defined(SOC_TYPE_SG2002) +#elif defined(SOC_TYPE_SG2002) || defined(SOC_TYPE_SG2000) struct fmux pinmux_array[] = { FS_PINMUX(CAM_MCLK0), diff --git a/bsp/cvitek/drivers/drv_uart.c b/bsp/cvitek/drivers/drv_uart.c index 7da298452f..d540117b3f 100644 --- a/bsp/cvitek/drivers/drv_uart.c +++ b/bsp/cvitek/drivers/drv_uart.c @@ -357,6 +357,71 @@ static const char *pinname_whitelist_uart4_tx[] = { }; #endif +#elif defined(BOARD_TYPE_MILKV_DUOS) + +#ifdef BSP_USING_UART0 +static const char *pinname_whitelist_uart0_rx[] = { + "UART0_RX", + NULL, +}; +static const char *pinname_whitelist_uart0_tx[] = { + "UART0_TX", + NULL, +}; +#endif + +#ifdef BSP_USING_UART1 +static const char *pinname_whitelist_uart1_rx[] = { + "JTAG_CPU_TCK", + "UART0_RX", + NULL, +}; +static const char *pinname_whitelist_uart1_tx[] = { + "JTAG_CPU_TMS", + "UART0_TX", + "IIC0_SCL", + NULL, +}; +#endif + +#ifdef BSP_USING_UART2 +static const char *pinname_whitelist_uart2_rx[] = { + "VIVO_D9", + "VIVO_D5", + "VIVO_CLK", + "PWR_GPIO1", + NULL, +}; +static const char *pinname_whitelist_uart2_tx[] = { + "VIVO_D10", + "VIVO_D6", + "VIVO_D2", + "IIC0_SCL", + "PWR_GPIO0", + NULL, +}; +#endif + +#ifdef BSP_USING_UART3 +static const char *pinname_whitelist_uart3_rx[] = { + "ADC2", + NULL, +}; +static const char *pinname_whitelist_uart3_tx[] = { + "ADC3", + NULL, +}; +#endif + +#ifdef BSP_USING_UART4 +static const char *pinname_whitelist_uart4_rx[] = { + NULL, +}; +static const char *pinname_whitelist_uart4_tx[] = { + NULL, +}; +#endif + #else #error "Unsupported board type!" #endif