summaryrefslogtreecommitdiff
path: root/bsp
diff options
context:
space:
mode:
authorShicheng Chu <[email protected]>2024-08-27 10:17:21 +0800
committerMeco Man <[email protected]>2024-08-27 00:53:15 -0400
commit66738d71daf8fbe126d71eda55cfd269b0b88d12 (patch)
treed3c12798f6d7cee477243b3fd0315c75cc8b7d34 /bsp
parent669a6822e7ac3c1cc2c977faf1f7bfd2ca1d56d2 (diff)
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 <[email protected]>
Diffstat (limited to 'bsp')
-rwxr-xr-xbsp/cvitek/README.md4
-rwxr-xr-xbsp/cvitek/board_env.sh6
-rwxr-xr-xbsp/cvitek/c906_little/Kconfig8
-rwxr-xr-xbsp/cvitek/c906_little/SConstruct2
-rwxr-xr-xbsp/cvitek/cv18xx_risc-v/Kconfig8
-rwxr-xr-xbsp/cvitek/cv18xx_risc-v/applications/main.c2
-rw-r--r--bsp/cvitek/cv18xx_risc-v/dtb/milkv-duos-sd/cv1813h_milkv_duos_sd.dtbbin0 -> 20656 bytes
-rw-r--r--bsp/cvitek/cv18xx_risc-v/dtb/milkv-duos-sd/multi.its56
-rwxr-xr-xbsp/cvitek/drivers/SConscript2
-rw-r--r--bsp/cvitek/drivers/drv_pinmux.c2
-rw-r--r--bsp/cvitek/drivers/drv_uart.c65
11 files changed, 148 insertions, 7 deletions
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 0000000000..35f375a773
--- /dev/null
+++ b/bsp/cvitek/cv18xx_risc-v/dtb/milkv-duos-sd/cv1813h_milkv_duos_sd.dtb
Binary files differ
diff --git a/bsp/cvitek/cv18xx_risc-v/dtb/milkv-duos-sd/multi.its b/bsp/cvitek/cv18xx_risc-v/dtb/milkv-duos-sd/multi.its
new file mode 100644
index 0000000000..4eb14f3ea2
--- /dev/null
+++ b/bsp/cvitek/cv18xx_risc-v/dtb/milkv-duos-sd/multi.its
@@ -0,0 +1,56 @@
+/*
+ * U-Boot uImage source file with multiple kernels, ramdisks and FDT blobs
+ */
+
+/dts-v1/;
+
+/ {
+ description = "Various kernels, ramdisks and FDT blobs";
+ #address-cells = <2>;
+
+ 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