From 5f8e87bf16d4b9520b95913e48910ffef4438dbf Mon Sep 17 00:00:00 2001 From: judehahh Date: Wed, 12 Jun 2024 17:06:19 +0800 Subject: [PATCH] boards: canaan: add initial support for canmv_k230 --- MAINTAINERS.yml | 11 ++ boards/canaan/canmv_k230/Kconfig.canmv_k230 | 5 + boards/canaan/canmv_k230/board.yml | 8 ++ boards/canaan/canmv_k230/canmv_k230.dts | 30 +++++ boards/canaan/canmv_k230/canmv_k230.yaml | 9 ++ boards/canaan/canmv_k230/canmv_k230_defconfig | 13 +++ boards/canaan/canmv_k230/doc/index.rst | 27 +++++ boards/canaan/index.rst | 10 ++ dts/bindings/cpu/thead,c908.yaml | 8 ++ dts/riscv/canaan/k230.dtsi | 103 ++++++++++++++++++ soc/canaan/CMakeLists.txt | 4 + soc/canaan/Kconfig | 8 ++ soc/canaan/Kconfig.defconfig | 8 ++ soc/canaan/Kconfig.soc | 10 ++ soc/canaan/k230/CMakeLists.txt | 5 + soc/canaan/k230/Kconfig | 14 +++ soc/canaan/k230/Kconfig.defconfig | 24 ++++ soc/canaan/k230/Kconfig.soc | 16 +++ soc/canaan/k230/soc.yml | 4 + soc/canaan/soc.yml | 6 + 20 files changed, 323 insertions(+) create mode 100644 boards/canaan/canmv_k230/Kconfig.canmv_k230 create mode 100644 boards/canaan/canmv_k230/board.yml create mode 100644 boards/canaan/canmv_k230/canmv_k230.dts create mode 100644 boards/canaan/canmv_k230/canmv_k230.yaml create mode 100644 boards/canaan/canmv_k230/canmv_k230_defconfig create mode 100644 boards/canaan/canmv_k230/doc/index.rst create mode 100644 boards/canaan/index.rst create mode 100644 dts/bindings/cpu/thead,c908.yaml create mode 100644 dts/riscv/canaan/k230.dtsi create mode 100644 soc/canaan/CMakeLists.txt create mode 100644 soc/canaan/Kconfig create mode 100644 soc/canaan/Kconfig.defconfig create mode 100644 soc/canaan/Kconfig.soc create mode 100644 soc/canaan/k230/CMakeLists.txt create mode 100644 soc/canaan/k230/Kconfig create mode 100644 soc/canaan/k230/Kconfig.defconfig create mode 100644 soc/canaan/k230/Kconfig.soc create mode 100644 soc/canaan/k230/soc.yml create mode 100644 soc/canaan/soc.yml diff --git a/MAINTAINERS.yml b/MAINTAINERS.yml index d0739efd55ca84..290aeed68ec23e 100644 --- a/MAINTAINERS.yml +++ b/MAINTAINERS.yml @@ -3142,6 +3142,17 @@ Broadcom Platforms: - soc/brcm/ - boards/brcm/ +Canaan Platforms: + status: maintained + maintainers: + - judehahh + files: + - boards/canaan/canmv_k230/ + - dts/riscv/canaan/ + - soc/canaan/ + labels: + - "platform: CANAAN" + GD32 Platforms: status: maintained maintainers: diff --git a/boards/canaan/canmv_k230/Kconfig.canmv_k230 b/boards/canaan/canmv_k230/Kconfig.canmv_k230 new file mode 100644 index 00000000000000..726d792be2f88d --- /dev/null +++ b/boards/canaan/canmv_k230/Kconfig.canmv_k230 @@ -0,0 +1,5 @@ +# Copyright (c) 2024 Junhui Liu +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_CANMV_K230 + select SOC_CANAAN_K230 diff --git a/boards/canaan/canmv_k230/board.yml b/boards/canaan/canmv_k230/board.yml new file mode 100644 index 00000000000000..f2d71e7fb978f2 --- /dev/null +++ b/boards/canaan/canmv_k230/board.yml @@ -0,0 +1,8 @@ +# Copyright (c) 2024 Junhui Liu +# SPDX-License-Identifier: Apache-2.0 + +board: + name: canmv_k230 + vendor: canaan + socs: + - name: k230 diff --git a/boards/canaan/canmv_k230/canmv_k230.dts b/boards/canaan/canmv_k230/canmv_k230.dts new file mode 100644 index 00000000000000..1e71b4ff7d8a02 --- /dev/null +++ b/boards/canaan/canmv_k230/canmv_k230.dts @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2024 Junhui Liu + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; + +#include "canaan/k230.dtsi" + +/ { + model = "Canaan CanMV-K230"; + compatible = "cannan,canmv-k230"; + + ddr: memory@0 { + device_type = "memory"; + reg = <0x0 0x0 0x0 0x20000000>; + }; + + chosen { + zephyr,console = &uart3; + zephyr,shell-uart = &uart3; + zephyr,sram = &ddr; + }; +}; + +&uart3 { + status = "okay"; + current-speed = <115200>; +}; diff --git a/boards/canaan/canmv_k230/canmv_k230.yaml b/boards/canaan/canmv_k230/canmv_k230.yaml new file mode 100644 index 00000000000000..2a64cb66ecaa1d --- /dev/null +++ b/boards/canaan/canmv_k230/canmv_k230.yaml @@ -0,0 +1,9 @@ +identifier: canmv_k230 +name: Canaan CanMV-K230 +type: mcu +arch: riscv +toolchain: + - zephyr + - cross-compile +supported: + - uart diff --git a/boards/canaan/canmv_k230/canmv_k230_defconfig b/boards/canaan/canmv_k230/canmv_k230_defconfig new file mode 100644 index 00000000000000..94a2970dc0b911 --- /dev/null +++ b/boards/canaan/canmv_k230/canmv_k230_defconfig @@ -0,0 +1,13 @@ +# SPDX-License-Identifier: Apache-2.0 + +# Zephyr Kernel Configuration +CONFIG_XIP=n + +# Serial Drivers +CONFIG_SERIAL=y +CONFIG_UART_INTERRUPT_DRIVEN=y +CONFIG_UART_NS16550_ACCESS_WORD_ONLY=y + +# Enable Console +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y diff --git a/boards/canaan/canmv_k230/doc/index.rst b/boards/canaan/canmv_k230/doc/index.rst new file mode 100644 index 00000000000000..bb3748f4488d28 --- /dev/null +++ b/boards/canaan/canmv_k230/doc/index.rst @@ -0,0 +1,27 @@ +.. _canmv_k230: + +Canaan CanMV-K230 +################# + +Overview +******** + +The Canaan CanMV-K230 is a development board with a Canaan Kendryte K230 +64bit RISC-V SoC. + +Programming and debugging +************************* + +Zephyr binary can be loaded by U-Boot command in machine mode. + +.. code-block:: console + + fatload mmc 1:1 0x0 zephyr.bin + go 0x0 + +Applications for the ``canmv_k230`` board configuration can be built as +usual (see :ref:`build_an_application`) using the corresponding board name: + +.. zephyr-app-commands:: + :board: canmv_k230 + :goals: build diff --git a/boards/canaan/index.rst b/boards/canaan/index.rst new file mode 100644 index 00000000000000..c7298721c11db2 --- /dev/null +++ b/boards/canaan/index.rst @@ -0,0 +1,10 @@ +.. _boards-canaan: + +Canaan +###### + +.. toctree:: + :maxdepth: 1 + :glob: + + **/* diff --git a/dts/bindings/cpu/thead,c908.yaml b/dts/bindings/cpu/thead,c908.yaml new file mode 100644 index 00000000000000..9a14d58422350d --- /dev/null +++ b/dts/bindings/cpu/thead,c908.yaml @@ -0,0 +1,8 @@ +# Copyright (c) 2024 Junhui Liu +# SPDX-License-Identifier: Apache-2.0 + +description: T-Head C908 RISC-V CPU + +compatible: "thead,c908" + +include: riscv,cpus.yaml diff --git a/dts/riscv/canaan/k230.dtsi b/dts/riscv/canaan/k230.dtsi new file mode 100644 index 00000000000000..4b4f1091b4462a --- /dev/null +++ b/dts/riscv/canaan/k230.dtsi @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2024 Junhui Liu + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/ { + #address-cells = <2>; + #size-cells = <2>; + compatible = "canaan,kendryte-k230"; + model = "canaan,k230"; + + cpus { + #address-cells = <1>; + #size-cells = <0>; + + cpu0: cpu@0 { + compatible = "thead,c908", "riscv"; + device_type = "cpu"; + mmu-type = "riscv,sv39"; + reg = <0>; + riscv,isa = "rv64imafdc_zicsr_zifencei"; + status = "okay"; + + cpu0_intc: interrupt-controller { + compatible = "riscv,cpu-intc"; + #address-cells = <0>; + #interrupt-cells = <1>; + interrupt-controller; + }; + }; + }; + + soc { + #address-cells = <2>; + #size-cells = <2>; + compatible = "canaan,k230-soc", "simple-bus"; + interrupt-parent = <&plic>; + ranges; + + plic: interrupt-controller@f00000000 { + compatible = "sifive,plic-1.0.0"; + reg = <0xf 0x00000000 0x0 0x04000000>; + interrupt-controller; + interrupts-extended = <&cpu0_intc 11>, <&cpu0_intc 9>; + #address-cells = <0>; + #interrupt-cells = <2>; + riscv,max-priority = <7>; + riscv,ndev = <208>; + }; + + clint: clint@f04000000 { + compatible = "thead,machine-timer"; + reg = <0xf 0x04000000 0x0 0x00010000>; + interrupts-extended = <&cpu0_intc 7>; + }; + + uart0: serial@91400000 { + compatible = "ns16550"; + reg = <0x0 0x91400000 0x0 0x1000>; + interrupts = <16 1>; + reg-shift = <2>; + clock-frequency = <50000000>; + status = "disabled"; + }; + + uart1: serial@91401000 { + compatible = "ns16550"; + reg = <0x0 0x91401000 0x0 0x1000>; + interrupts = <17 1>; + reg-shift = <2>; + clock-frequency = <50000000>; + status = "disabled"; + }; + + uart2: serial@91402000 { + compatible = "ns16550"; + reg = <0x0 0x91402000 0x0 0x1000>; + interrupts = <18 1>; + reg-shift = <2>; + clock-frequency = <50000000>; + status = "disabled"; + }; + + uart3: serial@91403000 { + compatible = "ns16550"; + reg = <0x0 0x91403000 0x0 0x1000>; + interrupts = <19 1>; + reg-shift = <2>; + clock-frequency = <50000000>; + status = "disabled"; + }; + + uart4: serial@91404000 { + compatible = "ns16550"; + reg = <0x0 0x91404000 0x0 0x1000>; + interrupts = <20 1>; + reg-shift = <2>; + clock-frequency = <50000000>; + status = "disabled"; + }; + }; +}; diff --git a/soc/canaan/CMakeLists.txt b/soc/canaan/CMakeLists.txt new file mode 100644 index 00000000000000..56b5c4e0b54cc6 --- /dev/null +++ b/soc/canaan/CMakeLists.txt @@ -0,0 +1,4 @@ +# Copyright (c) 2024 Junhui Liu +# SPDX-License-Identifier: Apache-2.0 + +add_subdirectory(${SOC_SERIES}) diff --git a/soc/canaan/Kconfig b/soc/canaan/Kconfig new file mode 100644 index 00000000000000..ca3e6e0267c798 --- /dev/null +++ b/soc/canaan/Kconfig @@ -0,0 +1,8 @@ +# Copyright (c) 2024 Junhui Liu +# SPDX-License-Identifier: Apache-2.0 + +if SOC_FAMILY_CANAAN + +rsource "*/Kconfig" + +endif # SOC_FAMILY_CANAAN diff --git a/soc/canaan/Kconfig.defconfig b/soc/canaan/Kconfig.defconfig new file mode 100644 index 00000000000000..74ff519b16cdb5 --- /dev/null +++ b/soc/canaan/Kconfig.defconfig @@ -0,0 +1,8 @@ +# Copyright (c) 2024 Junhui Liu +# SPDX-License-Identifier: Apache-2.0 + +if SOC_FAMILY_CANAAN + +rsource "*/Kconfig.defconfig" + +endif # SOC_FAMILY_CANAAN diff --git a/soc/canaan/Kconfig.soc b/soc/canaan/Kconfig.soc new file mode 100644 index 00000000000000..7049598b13f492 --- /dev/null +++ b/soc/canaan/Kconfig.soc @@ -0,0 +1,10 @@ +# Copyright (c) 2024 Junhui Liu +# SPDX-License-Identifier: Apache-2.0 + +config SOC_FAMILY_CANAAN + bool + +config SOC_FAMILY + default "canaan" if SOC_FAMILY_CANAAN + +rsource "*/Kconfig.soc" diff --git a/soc/canaan/k230/CMakeLists.txt b/soc/canaan/k230/CMakeLists.txt new file mode 100644 index 00000000000000..f79d0b3255d3da --- /dev/null +++ b/soc/canaan/k230/CMakeLists.txt @@ -0,0 +1,5 @@ +# SPDX-License-Identifier: Apache-2.0 + +zephyr_include_directories(.) + +set(SOC_LINKER_SCRIPT ${ZEPHYR_BASE}/include/zephyr/arch/riscv/common/linker.ld CACHE INTERNAL "") diff --git a/soc/canaan/k230/Kconfig b/soc/canaan/k230/Kconfig new file mode 100644 index 00000000000000..6a2e2ff21fffc8 --- /dev/null +++ b/soc/canaan/k230/Kconfig @@ -0,0 +1,14 @@ +# Copyright (c) 2024 Junhui Liu +# SPDX-License-Identifier: Apache-2.0 + +config SOC_SERIES_CANAAN_K230 + select RISCV + select RISCV_PRIVILEGED + select RISCV_HAS_PLIC + select RISCV_ISA_RV64I + select RISCV_ISA_EXT_G + select RISCV_ISA_EXT_C + + select INCLUDE_RESET_VECTOR + select ATOMIC_OPERATIONS_C + select 64BIT diff --git a/soc/canaan/k230/Kconfig.defconfig b/soc/canaan/k230/Kconfig.defconfig new file mode 100644 index 00000000000000..6630477a023c2e --- /dev/null +++ b/soc/canaan/k230/Kconfig.defconfig @@ -0,0 +1,24 @@ +# Copyright (c) 2024 Junhui Liu +# SPDX-License-Identifier: Apache-2.0 + +if SOC_SERIES_CANAAN_K230 + +config SYS_CLOCK_HW_CYCLES_PER_SEC + default 27000000 + +config RISCV_SOC_INTERRUPT_INIT + default y + +config RISCV_GP + default y + +config 2ND_LVL_ISR_TBL_OFFSET + default 12 + +config 2ND_LVL_INTR_00_OFFSET + default 11 + +config NUM_IRQS + default 208 + +endif diff --git a/soc/canaan/k230/Kconfig.soc b/soc/canaan/k230/Kconfig.soc new file mode 100644 index 00000000000000..c22c865a2b1bfd --- /dev/null +++ b/soc/canaan/k230/Kconfig.soc @@ -0,0 +1,16 @@ +# Copyright (c) 2024 Junhui Liu +# SPDX-License-Identifier: Apache-2.0 + +config SOC_SERIES_CANAAN_K230 + bool + select SOC_FAMILY_CANAAN + +config SOC_CANAAN_K230 + bool + select SOC_SERIES_CANAAN_K230 + +config SOC_SERIES + default "k230" if SOC_SERIES_CANAAN_K230 + +config SOC + default "k230" if SOC_CANAAN_K230 diff --git a/soc/canaan/k230/soc.yml b/soc/canaan/k230/soc.yml new file mode 100644 index 00000000000000..d2d1c4f2c1ce8f --- /dev/null +++ b/soc/canaan/k230/soc.yml @@ -0,0 +1,4 @@ +series: +- name: k230 + socs: + - name: k230 diff --git a/soc/canaan/soc.yml b/soc/canaan/soc.yml new file mode 100644 index 00000000000000..cf255ad9bffca1 --- /dev/null +++ b/soc/canaan/soc.yml @@ -0,0 +1,6 @@ +family: +- name: canaan + series: + - name: k230 + socs: + - name: k230