diff -Nur linux-5.4.36/arch/riscv/boot/dts/thead/Makefile kernel/arch/riscv/boot/dts/thead/Makefile
--- /dev/null
+++ kernel/arch/riscv/boot/dts/thead/Makefile
@@ -0,0 +1,2 @@
+# SPDX-License-Identifier: GPL-2.0
+dtb-$(CONFIG_SOC_LIGHT) += k210.dtb
diff -Nur linux-5.4.36/arch/riscv/boot/dts/thead/light-c910.dts kernel/arch/riscv/boot/dts/thead/light-c910.dts
--- /dev/null
+++ kernel/arch/riscv/boot/dts/thead/light-c910.dts
@@ -0,0 +1,401 @@
+/dts-v1/;
+/ {
+	model = "T-HEAD ICE soc";
+	compatible = "thead,ice_c910";
+	#address-cells = <2>;
+	#size-cells = <2>;
+
+	memory@0 {
+		device_type = "memory";
+		/*
+		 * Total memory size: 2GB (0x00000000 0x80000000)
+		 * 0x00200000 - 0x40000000: 1022MB for Linux system
+		 * 0x40000000 - 0x60000000:  512MB for NPU: IAS0
+		 * 0x60000000 - 0x80000000:  512MB for GPU
+		 */
+		reg = <0x0 0x200000 0x0 0x3fe00000>;
+	};
+
+	cpus {
+		#address-cells = <1>;
+		#size-cells = <0>;
+		timebase-frequency = <3000000>;
+		cpu@0 {
+			device_type = "cpu";
+			reg = <0>;
+			status = "okay";
+			compatible = "riscv";
+			riscv,isa = "rv64imafdcsu";
+			mmu-type = "riscv,sv39";
+			cpu0_intc: interrupt-controller {
+				#interrupt-cells = <1>;
+				compatible = "riscv,cpu-intc";
+				interrupt-controller;
+			};
+		};
+		cpu@1 {
+			device_type = "cpu";
+			reg = <1>;
+			status = "okay";
+			compatible = "riscv";
+			riscv,isa = "rv64imafdcsu";
+			mmu-type = "riscv,sv39";
+			cpu1_intc: interrupt-controller {
+				#interrupt-cells = <1>;
+				compatible = "riscv,cpu-intc";
+				interrupt-controller;
+			};
+		};
+		cpu@2 {
+			device_type = "cpu";
+			reg = <2>;
+			status = "fail";
+			compatible = "riscv";
+			riscv,isa = "rv64imafdcsu";
+			mmu-type = "riscv,sv39";
+			cpu2_intc: interrupt-controller {
+				#interrupt-cells = <1>;
+				compatible = "riscv,cpu-intc";
+				interrupt-controller;
+			};
+		};
+	};
+
+	aliases {
+		ethernet0 = &gmac;
+	};
+
+	soc {
+		#address-cells = <2>;
+		#size-cells = <2>;
+		compatible = "simple-bus";
+		ranges;
+
+		intc: interrupt-controller@3f0000000 {
+			#interrupt-cells = <1>;
+			compatible = "riscv,plic0";
+			interrupt-controller;
+			interrupts-extended = <
+				&cpu0_intc  0xffffffff &cpu0_intc  9
+				&cpu1_intc  0xffffffff &cpu1_intc  9
+				&cpu2_intc  0xffffffff &cpu2_intc  9
+				>;
+			reg = <0x3 0xf0000000 0x0 0x04000000>;
+			reg-names = "control";
+			riscv,max-priority = <7>;
+			riscv,ndev = <80>;
+		};
+
+		dummy_apb: apb-clock {
+			compatible = "fixed-clock";
+			clock-frequency = <62500000>;
+			clock-output-names = "dummy_apb";
+			#clock-cells = <0>;
+		};
+
+		dummy_ahb: ahb-clock {
+			compatible = "fixed-clock";
+			clock-frequency = <250000000>;
+			clock-output-names = "dummy_ahb";
+			#clock-cells = <0>;
+		};
+
+		dummy_axi: axi-clock {
+			compatible = "fixed-clock";
+			clock-frequency = <500000000>;
+			clock-output-names = "dummy_axi";
+			#clock-cells = <0>;
+		};
+
+		dummy_gmac: gmac-clock {
+			compatible = "fixed-clock";
+			clock-frequency = <1000000000>;
+			clock-output-names = "dummy_gmac";
+			#clock-cells = <0>;
+		};
+
+		dummy_clk_sdio: dummy-clk-sdio {
+			compatible = "fixed-clock";
+			clock-frequency = <150000000>;
+			clock-output-names = "dummy_sdio";
+			#clock-cells = <0>;
+		};
+
+		dummy_clk_dpu: dummy-clk-dpu {
+			compatible = "fixed-clock";
+			clock-frequency = <297000000>;
+			clock-output-names = "dummy_dpu";
+			#clock-cells = <0>;
+		};
+
+		gpio0: gpio@3fff71000 {
+			compatible = "snps,dw-apb-gpio";
+			reg = <0x3 0xfff71000 0x0 0x1000>;
+			#address-cells = <2>;
+			#size-cells = <2>;
+
+			/* GPIO0[0-31] */
+			gpio0_porta: gpio0-controller@0 {
+				compatible = "snps,dw-apb-gpio-port";
+				gpio-controller;
+				#gpio-cells = <2>;
+				snps,nr-gpios = <32>;
+				reg = <0>;
+
+				interrupt-controller;
+				#interrupt-cells = <2>;
+				interrupt-parent = <&intc>;
+				interrupts = <27>;
+			};
+
+			/* GPIO0[32-63] */
+			gpio0_portb: gpio0-controller@1 {
+				compatible = "snps,dw-apb-gpio-port";
+				gpio-controller;
+				#gpio-cells = <2>;
+				snps,nr-gpios = <32>;
+				reg = <1>;
+			};
+		};
+
+		gpio1: gpio@3fff72000 {
+			compatible = "snps,dw-apb-gpio";
+			reg = <0x3 0xfff72000 0x0 0x1000>;
+			#address-cells = <2>;
+			#size-cells = <2>;
+
+			/* GPIO1[0-31] */
+			gpio1_porta: gpio1-controller@0 {
+				compatible = "snps,dw-apb-gpio-port";
+				gpio-controller;
+				#gpio-cells = <2>;
+				snps,nr-gpios = <32>;
+				reg = <0>;
+			};
+
+			/* GPIO1[32-63] */
+			gpio1_portb: gpio1-controller@1 {
+				compatible = "snps,dw-apb-gpio-port";
+				gpio-controller;
+				#gpio-cells = <2>;
+				snps,nr-gpios = <32>;
+				reg = <1>;
+			};
+
+			/* GPIO1[64-95] */
+			gpio1_portc: gpio1-controller@2 {
+				compatible = "snps,dw-apb-gpio-port";
+				gpio-controller;
+				#gpio-cells = <2>;
+				snps,nr-gpios = <32>;
+				reg = <2>;
+			};
+		};
+
+		gpio-leds {
+			compatible = "gpio-leds";
+
+			led0 { /* GPIO0[11] - UART2_TXD */
+				label = "led0";
+				gpios = <&gpio0_porta 11 1>;
+				default-state = "off";
+			};
+		};
+
+		gpio-keys {
+			compatible = "gpio-keys";
+			/* autorepeat; */
+
+			key_0 { /* GPIO0[10] - UART2_RXD */
+				gpios = <&gpio0_porta 10 1>;
+				linux,code = <59>;
+				label = "key_0";
+			};
+		};
+
+		serial0@3fff73000 {
+			compatible = "snps,dw-apb-uart";
+			reg = <0x3 0xfff73000 0x0 0x400>;
+			interrupt-parent = <&intc>;
+			interrupts = <23>;
+			clocks = <&dummy_apb>;
+			clock-names = "baudclk";
+			reg-shift = <2>;
+			reg-io-width = <4>;
+			fifo-size = <16>;
+			/*
+			 * rx-trigger-level:
+			 *     0 - 1 character
+			 *     1 - 1/4 full
+			 *     2 - 1/2 full
+			 *     3 - (fifo size - 2)
+			 */
+			rx-trigger-level = <2>;
+		};
+
+		/* serial1@3fff73400, interrupt=24 is occupied by CK810 system */
+
+		serial2@3fff73800 {
+			compatible = "snps,dw-apb-uart";
+			reg = <0x3 0xfff73800 0x0 0x400>;
+			interrupt-parent = <&intc>;
+			interrupts = <25>;
+			clocks = <&dummy_apb>;
+			clock-names = "baudclk";
+			reg-shift = <2>;
+			reg-io-width = <4>;
+			fifo-size = <16>;
+			/*
+			 * rx-trigger-level:
+			 *     0 - 1 character
+			 *     1 - 1/4 full
+			 *     2 - 1/2 full
+			 *     3 - (fifo size - 2)
+			 */
+			rx-trigger-level = <2>;
+		};
+
+		i2c@3fff74000 {
+			#address-cells = <2>;
+			#size-cells = <2>;
+			compatible = "dahua,i2c-dw201a";
+			reg = <0x3 0xfff74000 0x0 0x1000>;
+			interrupts = <21>;
+			interrupt-parent = <&intc>;
+			clocks = <&dummy_apb>;
+			clock-frequency = <400000>;
+
+			eeprom@50 {
+				compatible = "atmel,24c64";
+				reg = <0x50>;
+				pagesize = <32>;
+			};
+		};
+
+		pmu: pmu {
+			compatible = "riscv,c910_pmu";
+		};
+
+		dmac0: dmac@3fffd0000 {
+			compatible = "snps,axi-dma-1.01a";
+			reg = <0x3 0xfffd0000 0x0 0x1000>;
+			interrupt-parent = <&intc>;
+			interrupts = <65>;
+			clocks = <&dummy_axi>, <&dummy_ahb>;
+			clock-names = "core-clk", "cfgr-clk";
+
+			dma-channels = <8>;
+			snps,block-size = <65536 65536 65536 65536 65536 65536 65536 65536>;
+			snps,priority = <0 1 2 3 4 5 6 7>;
+			snps,dma-masters = <1>;
+			snps,data-width = <4>;
+			snps,axi-max-burst-len = <16>;
+
+			/* status = "disabled"; */
+		};
+
+		sdhc0: sdhc0@3fffb0000 {
+			#address-cells = <1>;
+			#size-cells = <0>;
+			compatible = "snps,dw-mshc";
+			reg = <0x3 0xfffb0000 0x0 0x1000>;
+			interrupt-parent = <&intc>;
+			interrupts = <37>;
+			clocks = <&dummy_clk_sdio>, <&dummy_clk_sdio>;
+			clock-names = "ciu", "biu";
+			num-slots = <1>;
+			card-detect-delay = <200>;
+			cap-mmc-highspeed;
+			cap-cmd23;
+			non-removable;
+			bus-width = <8>;
+		};
+
+		sdhc1: sdhc1@3fffa0000 {
+			compatible = "snps,dw-mshc";
+			reg = <0x3 0xfffa0000 0x0 0x1000>;
+			interrupt-parent = <&intc>;
+			interrupts = <38>;
+			clocks = <&dummy_clk_sdio>, <&dummy_clk_sdio>;
+			clock-names = "ciu", "biu";
+			num-slots = <1>;
+			card-detect-delay = <200>;
+			cap-sd-highspeed;
+			bus-width = <4>;
+		};
+
+		stmmac_axi_setup: stmmac-axi-config {
+			snps,wr_osr_lmt = <3>;
+			snps,rd_osr_lmt = <3>;
+			snps,blen = <16 8 4 0 0 0 0>;
+		};
+
+		gmac: ethernet@3fffc0000 {
+			compatible = "thead,dwmac";
+			reg = < 0x3 0xfffc0000 0x0 0x2000
+				0x3 0xfe83025c 0x0 0x4
+				0x3 0xfe83031c 0x0 0x4
+				0x3 0xfff770c0 0x0 0x1c>;
+			reg-names = "gmac", "phy_if_reg", "txclk_dir_reg", "clk_mgr_reg";
+			interrupt-parent = <&intc>;
+			interrupts = <40>;
+			interrupt-names = "macirq";
+			clocks = <&dummy_ahb>, <&dummy_gmac>;
+			clock-names = "stmmaceth", "gmac_pll_clk";
+			snps,pbl = <32>;
+			snps,fixed-burst;
+			snps,axi-config = <&stmmac_axi_setup>;
+
+			phy-mode = "rgmii-txid";
+			rx-clk-delay = <0x1f>; /* for RGMII */
+			tx-clk-delay = <0x1f>; /* for RGMII */
+
+			phy-handle = <&eth_phy_0>;
+			mdio0 {
+				#address-cells = <1>;
+				#size-cells = <0>;
+				compatible = "snps,dwmac-mdio";
+
+				eth_phy_0: ethernet-phy@0 {
+					reg = <0>;
+				};
+			};
+		};
+
+		npu0: npu@3fff20000 {
+			compatible = "verisilicon,vip8000";
+			core-id = <0>;
+			reg = <0x3 0xfff20000 0x0 0x1000>;
+			interrupt-parent = <&intc>;
+			interrupts = <66>;
+			contiguous-base = <0x0 0x40000000>;
+			contiguous-size = <0x0 0x20000000>;
+			extsram-base = <0x3 0xfe400000>;
+			extsram-size = <0x0 0x40000>;
+		};
+
+		gpu: gpu@3fff27000 {
+			compatible = "verisilicon,gc8000ul";
+			reg = <0x3 0xfff27000 0x0 0x1000>;
+			interrupt-parent = <&intc>;
+			interrupts = <63>;
+			contiguous-base = <0x0 0x60000000>;
+			contiguous-size = <0x0 0x10000000>;
+		};
+
+		dpu: dpu@3fff28000 {
+			compatible = "verisilicon,dc8000-fb";
+			reg = <0x3 0xfff28000 0x0 0x8000>;
+			interrupt-parent = <&intc>;
+			interrupts = <64>;
+		};
+
+	};
+
+	chosen {
+		bootargs = "console=ttyS0,115200 crashkernel=256M-:128M c910_mmu_v1";
+		linux,initrd-start = <0x2000000>;
+		linux,initrd-end = <0x17000000>;
+		stdout-path = "serial0@3fff73000:115200";
+	};
+};
