Received: by 2002:a89:2c3:0:b0:1ed:23cc:44d1 with SMTP id d3csp636703lqs; Tue, 5 Mar 2024 11:39:47 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCVxmYWH0ZxyD8AQROBWx+qzdjGbg5N2TCy6BH1SrGYIe6Tlkhr+5iPIioq87+PbhQXjVCOIpCpmp5q61Jn3jYQGQ2abcxmrg+Rsy0ZW5A== X-Google-Smtp-Source: AGHT+IGMJthGNBVhYifi8r+w/Ta3Zs3pdZzjkwKxnLlPU2l7FI5GwrS0h7WEVXH+d+DWXNGrYuVh X-Received: by 2002:ac2:5108:0:b0:512:f17f:2b31 with SMTP id q8-20020ac25108000000b00512f17f2b31mr1744010lfb.43.1709667587643; Tue, 05 Mar 2024 11:39:47 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1709667587; cv=pass; d=google.com; s=arc-20160816; b=cR318+V61xpCEP6HuPnl5oINWh7PylnxR9knZYCOxDwEqAfpfPnjcYP8u2fvyFOSnG p38XlMQKpHu+gvAbO5nE7ToX4CY7K+WpEROogl1aHIj0f9QilFmn8MpiAarq3ohLXICy 4OqH4slbESU77+XsZCDD+IjCx0qsuaKyBd9IFjNBC3EHSDtr9pyzcrZAEnPueFVyPwfz vrGb6iH+Egh99FWTcgLwZf7XlD1UL3Va+4chef8O3NgEo3lHTTeHc9hx3J28A9n+vhrU Qkcj+XCrZOEfg6cV8JGlWV4JdcuTWovtzPFty5MouLKBtjMabSVekrp/6JlEgxla2Xo7 zA1Q== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:date :subject:cc:to:from:message-id:dkim-signature; bh=3+o+qOqa4ECeqhCHfZg9SR6TJ5m+x/B/e8JCKSuZTr4=; fh=TFpRczVpCj1VKrdi5nTgmifufla0PMfzaqJ5jtnWufY=; b=bkPa9IQpAXYJChABPGc+cWZcF7dgx/ezqfByeHVfB8jokXoNoz7F7ymbYBIkYtGAzo KINmcbuIli/hLSl24NquGN5SWgCf+3dHUpfmIsh7hYmMqyaWnv2VV68FkDv/IrUiTUe0 7DaAAepnVDTDsUK8GZ2UOTlvCOEXOZAjnVhZpO5JB54+HU8Xeqmj06DKSjQzsiV3yrqs xM1u4g4zs18slOJcaanOHcR5FmLZ4F5vlg527RD7xGcQDbCNx49ytuJx9SPO+VR9Umhf 7rj1VZ8DHGGwIcl46Kx3K9n+FsX6ZsqYk7wUue2GqNZ5XyEi1UxW0znr3GuF0ssHVvr5 UrTg==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@qq.com header.s=s201512 header.b=Kq0nlJRa; arc=pass (i=1 dkim=pass dkdomain=qq.com); spf=pass (google.com: domain of linux-kernel+bounces-92896-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-92896-linux.lists.archive=gmail.com@vger.kernel.org" Return-Path: Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [147.75.80.249]) by mx.google.com with ESMTPS id g10-20020aa7d1ca000000b0056668d8f367si5474491edp.676.2024.03.05.11.39.47 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Mar 2024 11:39:47 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-92896-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) client-ip=147.75.80.249; Authentication-Results: mx.google.com; dkim=pass header.i=@qq.com header.s=s201512 header.b=Kq0nlJRa; arc=pass (i=1 dkim=pass dkdomain=qq.com); spf=pass (google.com: domain of linux-kernel+bounces-92896-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-92896-linux.lists.archive=gmail.com@vger.kernel.org" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 0828C1F28665 for ; Tue, 5 Mar 2024 19:39:47 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 35F4F12882E; Tue, 5 Mar 2024 19:39:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=qq.com header.i=@qq.com header.b="Kq0nlJRa" Received: from out203-205-221-164.mail.qq.com (out203-205-221-164.mail.qq.com [203.205.221.164]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E83785C5FD for ; Tue, 5 Mar 2024 19:39:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=203.205.221.164 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709667553; cv=none; b=o+ZS0w4RimqzVxdb72s4DHDWQoBaeHM51eKWMMiXHrSbkwRHOlmfR89VkJwNVZSDJKGCcCIjMT4USm4aXN1AxHyup8lkQunte5NpApHMOSVYtWh/FIh9xCepAbQnF9Yne2DYtuly2Wi00sLl/hVOb4TGwd3dHFw1fW4cO/+2xWE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709667553; c=relaxed/simple; bh=fcw4yTyEGAZNdW2emHkFKDJWKK6Esf3ajLbYpjSFdws=; h=Message-ID:From:To:Cc:Subject:Date:In-Reply-To:References: MIME-Version; b=T8ccdeIXMr9gGhHa8+If0KeQ9CDza30B/Y8JRm7X+kAOlg+5OxjPrVCFJxIP4aoq0DFvttbDhRLxax/YNfaHkVPSnQslnJLuaHnZC/P7kdEP78QVIM9oO1rX9E59fJ0isq2cVvJLcu++LxEjJTk5nn9ntuULLhVYlVQ9Z39hfvk= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=cyyself.name; spf=none smtp.mailfrom=cyyself.name; dkim=pass (1024-bit key) header.d=qq.com header.i=@qq.com header.b=Kq0nlJRa; arc=none smtp.client-ip=203.205.221.164 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=cyyself.name Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=cyyself.name DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qq.com; s=s201512; t=1709667548; bh=3+o+qOqa4ECeqhCHfZg9SR6TJ5m+x/B/e8JCKSuZTr4=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=Kq0nlJRaoXYEvvjNrYiWoHwY9uWZO/Kuu9DB3oV99JmYTQmzEFblzS2QLk0ZTmKEg CSg8qr5AmebAoQoqKjgE/hViiJyogjY2vEkzk8RQ/2QGaW5hU2UrsJfIviMefOh7Rk cd+UpPvU5hUEeBaNxGyljvHW+SMAfq1yeyyqb4Lo= Received: from cyy-pc.lan ([240e:379:2267:e200:bd8:e8f9:fb59:de48]) by newxmesmtplogicsvrszc5-1.qq.com (NewEsmtp) with SMTP id 9B6B9246; Wed, 06 Mar 2024 03:38:54 +0800 X-QQ-mid: xmsmtpt1709667546t0heo45xo Message-ID: X-QQ-XMAILINFO: ODStV5VJRLb1xNuCUoV6x0/7Jtm759jbaIDhaDVjiNtPlPbBFpbgA6Bs4Vggin sTQ2WULTEbfGcgv7TS/QSh+a1hvLr/kXX9m/m630LxXh8yAOT5HKgpbd8p24m+z3DOTAOcGVTMtV /nosC/3uXbK0HH+dDN9tSRBarn4Qs6FMJqUWjvcEHswGary0xFktb0oXK94O34GBOTSnJtUKKfxk zm9dHvYAUbClK9u8ngM9RRdtccucoJ0s8P2OJAnjpgXHn2H0++8pSRScFQ//CnmLCviHBirZtCb/ TAplsTKzuYDHpyEoAj0HaQBo8ptx5j8K7w3TlXvvkqbuu7IYyyD1lhfxHQOb793hr3X4dJ+GrY9u NU64XEbcH/2EVtr9lehvInUDbQ1SDK4chCFWgBbsaL0r5+NxdTvkTAk2Ui0T9JOE8t2HISzOuP6u CsbsfwCcnShAD0/imuPU9dKHKAMR3Je5yKWRnVJgL+0b98l7vjlMBbLazfPuuLe1YH+2blHONlCJ 5otPdKgUGgCR6d+1aqbo1Vlx7fPt9WUJJccx5XAdjLxOuKWCgJyZvopD04HhT7LBBuCZaLtqOoQ2 1pY7W1y17crut4wLe6n4Xu/5zfFExtFNba1oqRwHmcBMf6eDGOSYBZwRuLkQYPcrI9Atf1aVDa4g Vx2EVU8VHV/KGA6uoTBRA+TQjXohNnZaZz5Z1zg92jmyg10JCK9DUolfGfn6SlO9YXLxlEDSEhvD B60EuwOYIDyDBXcnJcd/yI5m78+ANfdb13b7iIWSF8BHwL7uSrEzPqYyFJ0hdCqhCIOlSlhCPkJA GY6Drx6zBkknINSHzrab4fUi/MgnZpM9yymozwOEvvNQnY1PF03aW0w4UCzHfOoDAR49qUm6/14g d6MA6E2RyuwhQ7vW5FIPd2vGTvLlg0WvWRJTH0DMwJIey2VJoThKmato3j9G6hNYpqDLfxMOLDze xvDuGYwtTHqCGlZL9qsr8GnxislFPE2Y00yAEAgsPiw+4zvLs8noR/5yCQilWUyDy+3ArwvYJfke uCeUaR7j09eghj5nIJuSj0vqTXEmPLdalCODjwX4kjghM6ojvOIqNSrm9ERk4= X-QQ-XMRINFO: MSVp+SPm3vtS1Vd6Y4Mggwc= From: Yangyu Chen To: linux-riscv@lists.infradead.org Cc: Conor Dooley , Damien Le Moal , Rob Herring , Krzysztof Kozlowski , Paul Walmsley , Palmer Dabbelt , Albert Ou , Guo Ren , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Yangyu Chen Subject: [PATCH v4 6/7] riscv: dts: add initial canmv-k230 and k230-evb dts Date: Wed, 6 Mar 2024 03:38:30 +0800 X-OQ-MSGID: <20240305193831.1084556-6-cyy@cyyself.name> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Add initial dts for CanMV-K230 and K230-EVB powered by Canaan Kendryte K230 SoC [1]. Some key consideration: - Only place BigCore which is 1.6GHz RV64GCBV The existence of cache coherence between the two cores remains unknown since they have dedicated L2 caches. And the factory SDK uses it for other OS by default. I don't know whether the two CPUs on K230 SoC can be used in one system. So only place BigCore here. Meanwhile, although docs from Canaan said 1.6GHz Core with Vector is CPU1, the csr.mhartid of this core is 0. - Support for "zba" "zbb" "zbc" "zbs" are tested by hand The user manual of C908 from T-Head does not document it specifically. It just said it supports B extension V1.0-rc1. [2] I have tested it by using this [3] which attempts to execute "add.uw", "andn", "clmulr", "bclr" and they doesn't traps on K230. But on JH7110, "clmulr" and "bclr" will trap. - Support for "zicbom" is tested by hand Have tested with some out-of-tree drivers from [4] that need DMA and they do not come to the dts currently. - Cache parameters are inferred from T-Head docs [2] and Canaan docs [1] L1i: 32KB, VIPT 4-Way set-associative, 64B Cacheline L1d: 32KB, VIPT 4-Way set-associative, 64B Cacheline L2: 256KB, PIPT 16-way set-associative, 64B Cacheline The numbers of cache sets are calculated from these parameters. - MMU only supports Sv39 Since T-Head docs [2] say C908 should support Sv48. However, it will fail during the kernel probe when running Linux on K230. I also tested it by hand on M-Mode software, writing Sv48 to satp.mode will not trap but will leave the csr unchanged. While writing Sv39 it will take effect. It shows that this CPU does not support Sv48. - Svpbmt and T-Head MAEE both supported T-Head C908 does support both Svpbmt and T-Head MAEE for page-based memory attributes and is controlled by csr.mxstatus. If the kernel wants to use svpbmt, the m-mode software should set BIT(21) of csr.mxstatus to zero before entering the s-mode kernel. Otherwise, the kernel will not boot as 0 on T-Head MAEE represent to NonCachable Memory and it will lose dirty cache lines modification that haven't been written back to the memory. [1] https://developer.canaan-creative.com/k230/dev/zh/00_hardware/K230_datasheet.html#chapter-1-introduction [2] https://occ-intl-prod.oss-ap-southeast-1.aliyuncs.com/resource//1699268369347/XuanTie-C908-UserManual.pdf [3] https://github.com/cyyself/rvb_test [4] https://github.com/cyyself/linux/tree/k230-mainline Signed-off-by: Yangyu Chen --- arch/riscv/boot/dts/canaan/Makefile | 2 + arch/riscv/boot/dts/canaan/k230-canmv.dts | 24 ++++ arch/riscv/boot/dts/canaan/k230-evb.dts | 24 ++++ arch/riscv/boot/dts/canaan/k230.dtsi | 140 ++++++++++++++++++++++ 4 files changed, 190 insertions(+) create mode 100644 arch/riscv/boot/dts/canaan/k230-canmv.dts create mode 100644 arch/riscv/boot/dts/canaan/k230-evb.dts create mode 100644 arch/riscv/boot/dts/canaan/k230.dtsi 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..3ab5c8de11a8 --- /dev/null +++ b/arch/riscv/boot/dts/canaan/k230-canmv.dts @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: GPL-2.0 OR MIT +/* + * Copyright (C) 2024 Yangyu Chen + */ + +#include "k230.dtsi" + +/ { + model = "Canaan CanMV-K230"; + compatible = "canaan,canmv-k230", "canaan,kendryte-k230"; + + chosen { + stdout-path = "serial0:115200n8"; + }; + + ddr: memory@0 { + device_type = "memory"; + reg = <0x0 0x0 0x0 0x1fdff000>; + }; +}; + +&uart0 { + status = "okay"; +}; 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..42720113c566 --- /dev/null +++ b/arch/riscv/boot/dts/canaan/k230-evb.dts @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: GPL-2.0 OR MIT +/* + * Copyright (C) 2024 Yangyu Chen + */ + +#include "k230.dtsi" + +/ { + model = "Kendryte K230 EVB"; + compatible = "canaan,k230-usip-lp3-evb", "canaan,kendryte-k230"; + + chosen { + stdout-path = "serial0:115200n8"; + }; + + ddr: memory@0 { + device_type = "memory"; + reg = <0x0 0x0 0x0 0x1fdff000>; + }; +}; + +&uart0 { + status = "okay"; +}; diff --git a/arch/riscv/boot/dts/canaan/k230.dtsi b/arch/riscv/boot/dts/canaan/k230.dtsi new file mode 100644 index 000000000000..0bcff67b78a8 --- /dev/null +++ b/arch/riscv/boot/dts/canaan/k230.dtsi @@ -0,0 +1,140 @@ +// SPDX-License-Identifier: GPL-2.0 OR MIT +/* + * Copyright (C) 2024 Yangyu Chen + */ + +#include + +/dts-v1/; +/ { + #address-cells = <2>; + #size-cells = <2>; + compatible = "canaan,kendryte-k230"; + + aliases { + serial0 = &uart0; + }; + + cpus { + #address-cells = <1>; + #size-cells = <0>; + timebase-frequency = <27000000>; + + cpu@0 { + compatible = "thead,c908", "riscv"; + device_type = "cpu"; + reg = <0>; + riscv,isa = "rv64imafdcv_zba_zbb_zbc_zbs_zicbom_svpbmt"; + riscv,isa-base = "rv64i"; + riscv,isa-extensions = "i", "m", "a", "f", "d", "c", "v", "zba", "zbb", + "zbc", "zbs", "zicbom", "zicntr", "zicsr", + "zifencei", "zihpm", "svpbmt"; + riscv,cbom-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; + }; + }; + + apb_clk: apb-clk-clock { + compatible = "fixed-clock"; + clock-frequency = <50000000>; + clock-output-names = "apb_clk"; + #clock-cells = <0>; + }; + + 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 0x04000000>; + interrupts-extended = <&cpu0_intc 3>, <&cpu0_intc 7>; + }; + + uart0: serial@91400000 { + compatible = "snps,dw-apb-uart"; + reg = <0x0 0x91400000 0x0 0x1000>; + clocks = <&apb_clk>; + interrupts = <16 IRQ_TYPE_LEVEL_HIGH>; + reg-io-width = <4>; + reg-shift = <2>; + status = "disabled"; + }; + + uart1: serial@91401000 { + compatible = "snps,dw-apb-uart"; + reg = <0x0 0x91401000 0x0 0x1000>; + clocks = <&apb_clk>; + interrupts = <17 IRQ_TYPE_LEVEL_HIGH>; + reg-io-width = <4>; + reg-shift = <2>; + status = "disabled"; + }; + + uart2: serial@91402000 { + compatible = "snps,dw-apb-uart"; + reg = <0x0 0x91402000 0x0 0x1000>; + clocks = <&apb_clk>; + interrupts = <18 IRQ_TYPE_LEVEL_HIGH>; + reg-io-width = <4>; + reg-shift = <2>; + status = "disabled"; + }; + + uart3: serial@91403000 { + compatible = "snps,dw-apb-uart"; + reg = <0x0 0x91403000 0x0 0x1000>; + clocks = <&apb_clk>; + interrupts = <19 IRQ_TYPE_LEVEL_HIGH>; + reg-io-width = <4>; + reg-shift = <2>; + status = "disabled"; + }; + + uart4: serial@91404000 { + compatible = "snps,dw-apb-uart"; + reg = <0x0 0x91404000 0x0 0x1000>; + clocks = <&apb_clk>; + interrupts = <20 IRQ_TYPE_LEVEL_HIGH>; + reg-io-width = <4>; + reg-shift = <2>; + status = "disabled"; + }; + }; +}; -- 2.43.0