diff options
| author | Arnd Bergmann <arnd@arndb.de> | 2026-07-24 18:28:35 +0200 |
|---|---|---|
| committer | Arnd Bergmann <arnd@arndb.de> | 2026-07-24 18:28:46 +0200 |
| commit | 0bcfbb1f786d43372319bae28ea44b5657931029 (patch) | |
| tree | c27ecb8ddba781ebe621957263e1338f2c20c9fb | |
| parent | 8a78168e98a93a6f4f2617347a83286f519ac247 (diff) | |
| parent | 82ab962ef6c2a3571e3d590b30c023118c92b776 (diff) | |
| download | linux-next-0bcfbb1f786d43372319bae28ea44b5657931029.tar.gz linux-next-0bcfbb1f786d43372319bae28ea44b5657931029.zip | |
Merge tag 'riscv-dt-for-v7.3-early-k230' of https://git.kernel.org/pub/scm/linux/kernel/git/conor/linux into soc/dt
RISC-V devicetrees for v7.3 - early k230 material
Canaan:
Support for the k230 SoC that was too late for the 7.2 window.
Consists of some bindings not taken by the various subsystem
maintainers, the original dts patches from Yangyu back in 2024
and the more recent clock, reset and pinctrl additions from various
contributors.
Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
* tag 'riscv-dt-for-v7.3-early-k230' of https://git.kernel.org/pub/scm/linux/kernel/git/conor/linux:
riscv: dts: canaan: Add clock definition for K230
riscv: dts: canaan: add reset controller for K230
riscv: dts: canaan: k230: Add "b" ISA extension
riscv: dts: canaan: Add k230's pinctrl node
riscv: dts: canaan: Correct the formatting issues about k230 dts
riscv: dts: add initial canmv-k230 and k230-evb dts
dt-bindings: interrupt-controller: Add Canaan K230 PLIC
dt-bindings: timer: Add Canaan K230 CLINT
dt-bindings: add Canaan K230 boards compatible strings
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
| -rw-r--r-- | Documentation/devicetree/bindings/interrupt-controller/sifive,plic-1.0.0.yaml | 1 | ||||
| -rw-r--r-- | Documentation/devicetree/bindings/riscv/canaan.yaml | 8 | ||||
| -rw-r--r-- | Documentation/devicetree/bindings/timer/sifive,clint.yaml | 1 | ||||
| -rw-r--r-- | arch/riscv/boot/dts/canaan/Makefile | 2 | ||||
| -rw-r--r-- | arch/riscv/boot/dts/canaan/k230-canmv.dts | 343 | ||||
| -rw-r--r-- | arch/riscv/boot/dts/canaan/k230-evb.dts | 39 | ||||
| -rw-r--r-- | arch/riscv/boot/dts/canaan/k230-pinctrl.h | 18 | ||||
| -rw-r--r-- | arch/riscv/boot/dts/canaan/k230.dtsi | 167 |
8 files changed, 578 insertions, 1 deletions
diff --git a/Documentation/devicetree/bindings/interrupt-controller/sifive,plic-1.0.0.yaml b/Documentation/devicetree/bindings/interrupt-controller/sifive,plic-1.0.0.yaml index decc43df3c83..78d8cd77b4ec 100644 --- a/Documentation/devicetree/bindings/interrupt-controller/sifive,plic-1.0.0.yaml +++ b/Documentation/devicetree/bindings/interrupt-controller/sifive,plic-1.0.0.yaml @@ -71,6 +71,7 @@ properties: - items: - enum: - allwinner,sun20i-d1-plic + - canaan,k230-plic - sophgo,cv1800b-plic - sophgo,cv1812h-plic - sophgo,sg2000-plic diff --git a/Documentation/devicetree/bindings/riscv/canaan.yaml b/Documentation/devicetree/bindings/riscv/canaan.yaml index 41fd11f70a49..f9854ff43ac6 100644 --- a/Documentation/devicetree/bindings/riscv/canaan.yaml +++ b/Documentation/devicetree/bindings/riscv/canaan.yaml @@ -10,7 +10,7 @@ maintainers: - Damien Le Moal <dlemoal@kernel.org> description: - Canaan Kendryte K210 SoC-based boards + Canaan Kendryte SoC-based boards properties: $nodename: @@ -42,6 +42,12 @@ properties: - items: - const: canaan,kendryte-k210 + - items: + - enum: + - canaan,canmv-k230 + - canaan,k230-usip-lp3-evb + - const: canaan,kendryte-k230 + additionalProperties: true ... diff --git a/Documentation/devicetree/bindings/timer/sifive,clint.yaml b/Documentation/devicetree/bindings/timer/sifive,clint.yaml index 105e3ef539e6..3673836e14de 100644 --- a/Documentation/devicetree/bindings/timer/sifive,clint.yaml +++ b/Documentation/devicetree/bindings/timer/sifive,clint.yaml @@ -50,6 +50,7 @@ properties: - items: - enum: - allwinner,sun20i-d1-clint + - canaan,k230-clint - sophgo,cv1800b-clint - sophgo,cv1812h-clint - sophgo,sg2000-clint diff --git a/arch/riscv/boot/dts/canaan/Makefile b/arch/riscv/boot/dts/canaan/Makefile index 987d1f0c41f0..7d54ea5c6f3d 100644 --- a/arch/riscv/boot/dts/canaan/Makefile +++ b/arch/riscv/boot/dts/canaan/Makefile @@ -1,6 +1,8 @@ # SPDX-License-Identifier: GPL-2.0 dtb-$(CONFIG_ARCH_CANAAN) += canaan_kd233.dtb dtb-$(CONFIG_ARCH_CANAAN) += k210_generic.dtb +dtb-$(CONFIG_ARCH_CANAAN) += k230-canmv.dtb +dtb-$(CONFIG_ARCH_CANAAN) += k230-evb.dtb dtb-$(CONFIG_ARCH_CANAAN) += sipeed_maix_bit.dtb dtb-$(CONFIG_ARCH_CANAAN) += sipeed_maix_dock.dtb dtb-$(CONFIG_ARCH_CANAAN) += sipeed_maix_go.dtb diff --git a/arch/riscv/boot/dts/canaan/k230-canmv.dts b/arch/riscv/boot/dts/canaan/k230-canmv.dts new file mode 100644 index 000000000000..2ba555f6de13 --- /dev/null +++ b/arch/riscv/boot/dts/canaan/k230-canmv.dts @@ -0,0 +1,343 @@ +// SPDX-License-Identifier: GPL-2.0 OR MIT +/* + * Copyright (C) 2024 Yangyu Chen <cyy@cyyself.name> + */ + +#include "k230.dtsi" + +/ { + model = "Canaan CanMV-K230"; + compatible = "canaan,canmv-k230", "canaan,kendryte-k230"; + + aliases { + serial0 = &uart0; + }; + + chosen { + stdout-path = "serial0:115200n8"; + }; + + ddr: memory@0 { + device_type = "memory"; + reg = <0x0 0x0 0x0 0x20000000>; + }; + + timerx_pulse_in: clock-50000000 { + compatible = "fixed-clock"; + #clock-cells = <0>; + clock-frequency = <50000000>; + }; +}; + +&uart0 { + status = "okay"; +}; + +&pinctrl { + jtag_pins: jtag-pins { + jtag-tck-cfg { + pinmux = <K230_PINMUX(2, 1)>; + slew-rate = <0>; + drive-strength = <4>; + power-source = <K230_MSC_1V8>; + input-enable; + bias-pull-down; + input-schmitt-enable; + }; + + jtag-tdi-cfg { + pinmux = <K230_PINMUX(3, 1)>; + slew-rate = <0>; + drive-strength = <4>; + power-source = <K230_MSC_1V8>; + input-enable; + bias-disable; + }; + + jtag-tdo-cfg { + pinmux = <K230_PINMUX(4, 1)>; + slew-rate = <0>; + drive-strength = <4>; + power-source = <K230_MSC_1V8>; + output-enable; + bias-disable; + }; + + jtag-tms-cfg { + pinmux = <K230_PINMUX(5, 1)>; + slew-rate = <0>; + drive-strength = <4>; + power-source = <K230_MSC_1V8>; + input-enable; + bias-pull-up; + }; + }; + + uart2_pins: uart2-pins { + uart2-pins-cfg { + pinmux = <K230_PINMUX(5, 3)>, /* uart2 txd */ + <K230_PINMUX(6, 3)>; /* uart2 rxd */ + slew-rate = <0>; + drive-strength = <4>; + power-source = <K230_MSC_1V8>; + input-enable; + output-enable; + bias-disable; + }; + }; + + pwm2_pins: pwm2-pins { + pwm2-pin-cfg { + pinmux = <K230_PINMUX(7, 1)>; + slew-rate = <0>; + drive-strength = <7>; + power-source = <K230_MSC_1V8>; + input-enable; + output-enable; + bias-disable; + input-schmitt-enable; + }; + }; + + pwm3_pins: pwm3-pins { + pwm3-pin-cfg { + pinmux = <K230_PINMUX(8, 1)>; + slew-rate = <0>; + drive-strength = <7>; + power-source = <K230_MSC_1V8>; + input-enable; + output-enable; + bias-disable; + input-schmitt-enable; + }; + }; + + pwm4_pins: pwm4-pins { + pwm4-pin-cfg { + pinmux = <K230_PINMUX(9, 1)>; + slew-rate = <0>; + drive-strength = <7>; + power-source = <K230_MSC_1V8>; + input-enable; + output-enable; + bias-disable; + input-schmitt-enable; + }; + }; + + iis_pins: iis-pins { + iis-clk-cfg { + pinmux = <K230_PINMUX(32, 2)>; + slew-rate = <0>; + drive-strength = <4>; + power-source = <K230_MSC_1V8>; + output-enable; + bias-disable; + }; + + iis-ws-cfg { + pinmux = <K230_PINMUX(33, 2)>; + slew-rate = <0>; + drive-strength = <4>; + power-source = <K230_MSC_1V8>; + output-enable; + bias-disable; + }; + + iis-din0-cfg { + pinmux = <K230_PINMUX(34, 2)>; + slew-rate = <0>; + drive-strength = <4>; + power-source = <K230_MSC_1V8>; + input-enable; + bias-disable; + }; + + iis-dout0-cfg { + pinmux = <K230_PINMUX(35, 2)>; + slew-rate = <0>; + drive-strength = <4>; + power-source = <K230_MSC_1V8>; + output-enable; + bias-disable; + }; + }; + + uart4_pins: uart4-pins { + uart4-txd-cfg { + pinmux = <K230_PINMUX(36, 4)>; + slew-rate = <0>; + drive-strength = <7>; + power-source = <K230_MSC_1V8>; + output-enable; + bias-disable; + input-schmitt-enable; + }; + + uart4-rxd-cfg { + pinmux = <K230_PINMUX(37, 4)>; + slew-rate = <0>; + drive-strength = <7>; + power-source = <K230_MSC_1V8>; + input-enable; + bias-disable; + input-schmitt-enable; + }; + }; + + uart0_pins: uart0-pins { + uart0-txd-cfg { + pinmux = <K230_PINMUX(38, 1)>; + slew-rate = <0>; + drive-strength = <7>; + power-source = <K230_MSC_1V8>; + output-enable; + bias-disable; + input-schmitt-enable; + }; + + uart0-rxd-cfg { + pinmux = <K230_PINMUX(39, 1)>; + slew-rate = <0>; + drive-strength = <7>; + power-source = <K230_MSC_1V8>; + input-enable; + bias-disable; + input-schmitt-enable; + }; + }; + + iic1_pins: iic1-pins { + iic1-pins-cfg { + pinmux = <K230_PINMUX(40, 2)>, /* iic1 scl */ + <K230_PINMUX(41, 2)>; /* iic1 sda */ + slew-rate = <0>; + drive-strength = <7>; + power-source = <K230_MSC_1V8>; + input-enable; + output-enable; + bias-pull-up; + input-schmitt-enable; + }; + }; + + iic3_pins: iic3-pins { + iic3-pins-cfg { + pinmux = <K230_PINMUX(44, 2)>, /* iic3 scl */ + <K230_PINMUX(45, 2)>; /* iic3 sda */ + slew-rate = <0>; + drive-strength = <7>; + power-source = <K230_MSC_1V8>; + input-enable; + output-enable; + bias-pull-up; + input-schmitt-enable; + }; + }; + + iic4_pins: iic4-pins { + iic4-pins-cfg { + pinmux = <K230_PINMUX(46, 3)>, /* iic4 scl */ + <K230_PINMUX(47, 3)>; /* iic4 sda */ + slew-rate = <0>; + drive-strength = <7>; + power-source = <K230_MSC_1V8>; + input-enable; + output-enable; + bias-pull-up; + input-schmitt-enable; + }; + }; + + iic0_pins: iic0-pins { + iic0-pins-cfg { + pinmux = <K230_PINMUX(48, 3)>, /* iic0 scl */ + <K230_PINMUX(49, 3)>; /* iic0 sda */ + slew-rate = <0>; + drive-strength = <7>; + power-source = <K230_MSC_1V8>; + input-enable; + output-enable; + bias-pull-up; + input-schmitt-enable; + }; + }; + + uart3_pins: uart3-pins { + uart3-txd-cfg { + pinmux = <K230_PINMUX(50, 1)>; + slew-rate = <0>; + drive-strength = <7>; + power-source = <K230_MSC_3V3>; + output-enable; + bias-disable; + input-schmitt-enable; + }; + + uart3-rxd-cfg { + pinmux = <K230_PINMUX(51, 1)>; + slew-rate = <0>; + drive-strength = <7>; + power-source = <K230_MSC_3V3>; + input-enable; + bias-disable; + input-schmitt-enable; + }; + }; + + key_pins: key-pins { + key-pins-cfg { + pinmux = <K230_PINMUX(52, 0)>, /* key0 */ + <K230_PINMUX(53, 0)>; /* key1 */ + slew-rate = <0>; + drive-strength = <7>; + power-source = <K230_MSC_3V3>; + input-enable; + output-enable; + bias-disable; + input-schmitt-enable; + }; + }; + + mmc1_pins: mmc1-pins { + mmc1-cmd-cfg { + pinmux = <K230_PINMUX(54, 2)>; + slew-rate = <0>; + drive-strength = <7>; + power-source = <K230_MSC_3V3>; + input-enable; + output-enable; + bias-pull-up; + input-schmitt-enable; + }; + + mmc1-clk-cfg { + pinmux = <K230_PINMUX(55, 2)>; + slew-rate = <0>; + drive-strength = <7>; + power-source = <K230_MSC_3V3>; + output-enable; + bias-disable; + input-schmitt-enable; + }; + + mmc1-data-cfg { + pinmux = <K230_PINMUX(56, 2)>, /* mmc1 data0 */ + <K230_PINMUX(57, 2)>, /* mmc1 data1 */ + <K230_PINMUX(58, 2)>, /* mmc1 data2 */ + <K230_PINMUX(59, 2)>; /* mmc1 data3 */ + slew-rate = <0>; + drive-strength = <7>; + power-source = <K230_MSC_3V3>; + input-enable; + output-enable; + bias-pull-up; + input-schmitt-enable; + }; + }; +}; + +&sysclk { + clocks = <&osc24m>, <&timerx_pulse_in>; + clock-names = "osc24m", "timer-pulse-in"; +}; diff --git a/arch/riscv/boot/dts/canaan/k230-evb.dts b/arch/riscv/boot/dts/canaan/k230-evb.dts new file mode 100644 index 000000000000..4246e4bba6cc --- /dev/null +++ b/arch/riscv/boot/dts/canaan/k230-evb.dts @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: GPL-2.0 OR MIT +/* + * Copyright (C) 2024 Yangyu Chen <cyy@cyyself.name> + */ + +#include "k230.dtsi" + +/ { + model = "Kendryte K230 EVB"; + compatible = "canaan,k230-usip-lp3-evb", "canaan,kendryte-k230"; + + aliases { + serial0 = &uart0; + }; + + chosen { + stdout-path = "serial0:115200n8"; + }; + + ddr: memory@0 { + device_type = "memory"; + reg = <0x0 0x0 0x0 0x20000000>; + }; + + timerx_pulse_in: clock-50000000 { + compatible = "fixed-clock"; + #clock-cells = <0>; + clock-frequency = <50000000>; + }; +}; + +&uart0 { + status = "okay"; +}; + +&sysclk { + clocks = <&osc24m>, <&timerx_pulse_in>; + clock-names = "osc24m", "timer-pulse-in"; +}; diff --git a/arch/riscv/boot/dts/canaan/k230-pinctrl.h b/arch/riscv/boot/dts/canaan/k230-pinctrl.h new file mode 100644 index 000000000000..63dd999ca55b --- /dev/null +++ b/arch/riscv/boot/dts/canaan/k230-pinctrl.h @@ -0,0 +1,18 @@ +/* SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause */ +/* + * Copyright (C) 2024 Canaan Bright Sight Co. Ltd + * Copyright (C) 2024 Ze Huang <18771902331@163.com> + */ + +#ifndef _K230_PINCTRL_H +#define _K230_PINCTRL_H + +#define K230_MSC_3V3 0 +#define K230_MSC_1V8 1 + +#define BANK_VOLTAGE_DEFAULT K230_MSC_1V8 +#define BANK_VOLTAGE_IO50_IO61 K230_MSC_3V3 + +#define K230_PINMUX(pin, mode) (((pin) << 8) | (mode)) + +#endif /* _K230_PINCTRL_H */ diff --git a/arch/riscv/boot/dts/canaan/k230.dtsi b/arch/riscv/boot/dts/canaan/k230.dtsi new file mode 100644 index 000000000000..6dcb628a960b --- /dev/null +++ b/arch/riscv/boot/dts/canaan/k230.dtsi @@ -0,0 +1,167 @@ +// SPDX-License-Identifier: GPL-2.0 OR MIT +/* + * Copyright (C) 2024 Yangyu Chen <cyy@cyyself.name> + */ + +#include <dt-bindings/clock/canaan,k230-clk.h> +#include <dt-bindings/interrupt-controller/irq.h> +#include <dt-bindings/reset/canaan,k230-rst.h> +#include "k230-pinctrl.h" + +/dts-v1/; +/ { + #address-cells = <2>; + #size-cells = <2>; + compatible = "canaan,kendryte-k230"; + + cpus { + #address-cells = <1>; + #size-cells = <0>; + timebase-frequency = <27000000>; + + cpu@0 { + compatible = "thead,c908", "riscv"; + device_type = "cpu"; + reg = <0>; + riscv,isa = "rv64imafdcbv_zicbom_zicbop_zicboz_zicntr_zicsr_zifencei_zihpm_zfh_zba_zbb_zbc_zbs_zvfh_svpbmt"; + riscv,isa-base = "rv64i"; + riscv,isa-extensions = "i", "m", "a", "f", "d", "c", "b", "v", "zicbom", + "zicbop", "zicboz", "zicntr", "zicsr", "zifencei", + "zihpm", "zfh", "zba", "zbb", "zbc", "zbs", "zvfh", + "svpbmt"; + riscv,cbom-block-size = <64>; + riscv,cbop-block-size = <64>; + riscv,cboz-block-size = <64>; + d-cache-block-size = <64>; + d-cache-sets = <128>; + d-cache-size = <32768>; + i-cache-block-size = <64>; + i-cache-sets = <128>; + i-cache-size = <32768>; + next-level-cache = <&l2_cache>; + mmu-type = "riscv,sv39"; + + cpu0_intc: interrupt-controller { + compatible = "riscv,cpu-intc"; + interrupt-controller; + #interrupt-cells = <1>; + }; + }; + + l2_cache: l2-cache { + compatible = "cache"; + cache-block-size = <64>; + cache-level = <2>; + cache-size = <262144>; + cache-sets = <256>; + cache-unified; + }; + }; + + osc24m: clock-24000000 { + compatible = "fixed-clock"; + #clock-cells = <0>; + clock-frequency = <24000000>; + clock-output-names = "osc24m"; + }; + + soc { + compatible = "simple-bus"; + interrupt-parent = <&plic>; + #address-cells = <2>; + #size-cells = <2>; + dma-noncoherent; + ranges; + + plic: interrupt-controller@f00000000 { + compatible = "canaan,k230-plic", "thead,c900-plic"; + reg = <0xf 0x00000000 0x0 0x04000000>; + interrupts-extended = <&cpu0_intc 11>, <&cpu0_intc 9>; + interrupt-controller; + #address-cells = <0>; + #interrupt-cells = <2>; + riscv,ndev = <208>; + }; + + clint: timer@f04000000 { + compatible = "canaan,k230-clint", "thead,c900-clint"; + reg = <0xf 0x04000000 0x0 0x00010000>; + interrupts-extended = <&cpu0_intc 3>, <&cpu0_intc 7>; + }; + + rst: reset-controller@91101000 { + compatible = "canaan,k230-rst"; + reg = <0x0 0x91101000 0x0 0x1000>; + #reset-cells = <1>; + }; + + pinctrl: pinctrl@91105000 { + compatible = "canaan,k230-pinctrl"; + reg = <0x0 0x91105000 0x0 0x100>; + }; + + sysclk: clock-controller@91102000 { + compatible = "canaan,k230-clk"; + reg = <0x0 0x91102000 0x0 0x40>, + <0x0 0x91100000 0x0 0x108>; + clocks = <&osc24m>; + clock-names = "osc24m"; + #clock-cells = <1>; + }; + + uart0: serial@91400000 { + compatible = "snps,dw-apb-uart"; + reg = <0x0 0x91400000 0x0 0x1000>; + clocks = <&sysclk K230_LS_UART0_RATE>; + interrupts = <16 IRQ_TYPE_LEVEL_HIGH>; + reg-io-width = <4>; + reg-shift = <2>; + resets = <&rst RST_UART0>; + status = "disabled"; + }; + + uart1: serial@91401000 { + compatible = "snps,dw-apb-uart"; + reg = <0x0 0x91401000 0x0 0x1000>; + clocks = <&sysclk K230_LS_UART1_RATE>; + interrupts = <17 IRQ_TYPE_LEVEL_HIGH>; + reg-io-width = <4>; + reg-shift = <2>; + resets = <&rst RST_UART1>; + status = "disabled"; + }; + + uart2: serial@91402000 { + compatible = "snps,dw-apb-uart"; + reg = <0x0 0x91402000 0x0 0x1000>; + clocks = <&sysclk K230_LS_UART2_RATE>; + interrupts = <18 IRQ_TYPE_LEVEL_HIGH>; + reg-io-width = <4>; + reg-shift = <2>; + resets = <&rst RST_UART2>; + status = "disabled"; + }; + + uart3: serial@91403000 { + compatible = "snps,dw-apb-uart"; + reg = <0x0 0x91403000 0x0 0x1000>; + clocks = <&sysclk K230_LS_UART3_RATE>; + interrupts = <19 IRQ_TYPE_LEVEL_HIGH>; + reg-io-width = <4>; + reg-shift = <2>; + resets = <&rst RST_UART3>; + status = "disabled"; + }; + + uart4: serial@91404000 { + compatible = "snps,dw-apb-uart"; + reg = <0x0 0x91404000 0x0 0x1000>; + clocks = <&sysclk K230_LS_UART4_RATE>; + interrupts = <20 IRQ_TYPE_LEVEL_HIGH>; + reg-io-width = <4>; + reg-shift = <2>; + resets = <&rst RST_UART4>; + status = "disabled"; + }; + }; +}; |
