[PATCH] platform: Remove kendryte/k210 platform

Anup Patel anup.patel at oss.qualcomm.com
Wed Apr 8 21:53:10 PDT 2026


The kendryte/k210 platform does not have MMU support in S-mode hence
only NOMMU kernel which runs in M-mode can be used on this platform.

As of now, there is no clear use-case of supporting OpenSBI for
kendryte/k210 platform.

Signed-off-by: Anup Patel <anup.patel at oss.qualcomm.com>
---
 README.md                                |   1 -
 docs/platform/platform.md                |   3 -
 platform/kendryte/k210/Kconfig           |  10 --
 platform/kendryte/k210/configs/defconfig |   0
 platform/kendryte/k210/k210.dts          |  70 ---------
 platform/kendryte/k210/objects.mk        |  25 ----
 platform/kendryte/k210/platform.c        | 176 -----------------------
 platform/kendryte/k210/platform.h        |  50 -------
 scripts/create-binary-archive.sh         |   1 -
 9 files changed, 336 deletions(-)
 delete mode 100644 platform/kendryte/k210/Kconfig
 delete mode 100644 platform/kendryte/k210/configs/defconfig
 delete mode 100644 platform/kendryte/k210/k210.dts
 delete mode 100644 platform/kendryte/k210/objects.mk
 delete mode 100644 platform/kendryte/k210/platform.c
 delete mode 100644 platform/kendryte/k210/platform.h

diff --git a/README.md b/README.md
index fd40be0b..c19bfdde 100644
--- a/README.md
+++ b/README.md
@@ -402,6 +402,5 @@ make I=<install_directory> install_docs
 [Firmware Documentation]: docs/firmware/fw.md
 [Domain Support]: docs/domain_support.md
 [Doxygen manual]: http://www.doxygen.nl/manual/index.html
-[Kendryte standalone SDK]: https://github.com/kendryte/kendryte-standalone-sdk
 [third party notices]: ThirdPartyNotices.md
 [reproducible builds]: https://reproducible-builds.org
diff --git a/docs/platform/platform.md b/docs/platform/platform.md
index b77112ff..9e78dac2 100644
--- a/docs/platform/platform.md
+++ b/docs/platform/platform.md
@@ -18,9 +18,6 @@ OpenSBI currently supports the following virtual and hardware platforms:
   machine. More details on this platform can be found in the file
   *[sifive_fu540.md]*.
 
-* **Kendryte K210 SoC**: Platform support for the Kendryte K210 SoC used on
-  boards such as the Kendryte KD233 or the Sipeed MAIX Dock.
-
 * **Andes AE350 SoC**: Platform support for the Andes's SoC (AE350). More
   details on this platform can be found in the file *[andes-ae350.md]*.
 
diff --git a/platform/kendryte/k210/Kconfig b/platform/kendryte/k210/Kconfig
deleted file mode 100644
index 5bf59731..00000000
--- a/platform/kendryte/k210/Kconfig
+++ /dev/null
@@ -1,10 +0,0 @@
-# SPDX-License-Identifier: BSD-2-Clause
-
-config PLATFORM_KENDRYTE_K210
-	bool
-	select FDT
-	select IPI_MSWI
-	select IRQCHIP_PLIC
-	select SERIAL_SIFIVE
-	select TIMER_MTIMER
-	default y
diff --git a/platform/kendryte/k210/configs/defconfig b/platform/kendryte/k210/configs/defconfig
deleted file mode 100644
index e69de29b..00000000
diff --git a/platform/kendryte/k210/k210.dts b/platform/kendryte/k210/k210.dts
deleted file mode 100644
index bcd075bf..00000000
--- a/platform/kendryte/k210/k210.dts
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * SPDX-License-Identifier: BSD-2-Clause
- *
- * Copyright (c) 2019 Western Digital Corporation or its affiliates.
- *
- * Authors:
- *   Damien Le Moal <damien.lemoal at wdc.com>
- */
-
-/dts-v1/;
-/ {
-	#address-cells = <2>;
-	#size-cells = <2>;
-	compatible = "kendryte,k210";
-
-	chosen {
-                bootargs = "console=hvc0 earlycon=sbi";
-	};
-
-	cpus {
-		#address-cells = <1>;
-		#size-cells = <0>;
-		cpu0: cpu at 0 {
-			device_type = "cpu";
-			clock-frequency = <390000000>;
-			i-cache-size = <32768>;
-			d-cache-size = <32768>;
-			mmu-type = "none";
-			reg = <0>;
-			riscv,isa = "rv64imafdc";
-			status = "okay";
-			cpu0_intc: interrupt-controller {
-				#interrupt-cells = <1>;
-				compatible = "riscv,cpu-intc";
-				interrupt-controller;
-			};
-		};
-		cpu1: cpu at 1 {
-			device_type = "cpu";
-			clock-frequency = <390000000>;
-			d-cache-size = <32768>;
-			i-cache-size = <32768>;
-			mmu-type = "none";
-			reg = <1>;
-			riscv,isa = "rv64imafdc";
-			status = "okay";
-			cpu1_intc: interrupt-controller {
-				#interrupt-cells = <1>;
-				compatible = "riscv,cpu-intc";
-				interrupt-controller;
-			};
-		};
-	};
-
-	memory at 80000000 {
-		/* Bank 0: 4 MB, Bank 1: 2 MB, AI chip SRAM: 2MB */
-		device_type = "memory";
-		reg = <0x00000000 0x80000000 0x00000000 0x00800000>;
-	};
-
-	plic0: interrupt-controller at C000000 {
-		#interrupt-cells = <1>;
-		compatible = "riscv,plic0";
-		interrupt-controller;
-		interrupts-extended =
-			<&cpu0_intc 11 &cpu0_intc 9
-			 &cpu1_intc 11 &cpu1_intc 9>;
-		reg = <0x0 0xc000000 0x0 0x4000000>;
-	};
-};
diff --git a/platform/kendryte/k210/objects.mk b/platform/kendryte/k210/objects.mk
deleted file mode 100644
index efac3d2f..00000000
--- a/platform/kendryte/k210/objects.mk
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-# SPDX-License-Identifier: BSD-2-Clause
-#
-# Copyright (c) 2019 Western Digital Corporation or its affiliates.
-#
-# Authors:
-#   Damien Le Moal <damien.lemoal at wdc.com>
-#
-
-# Compiler flags
-platform-cppflags-y =
-platform-cflags-y =
-platform-asflags-y =
-platform-ldflags-y =
-
-# Objects to build
-platform-objs-y += platform.o
-
-platform-objs-y += k210.o
-platform-varprefix-k210.o = dt_k210
-platform-padding-k210.o = 2048
-
-# Blobs to build
-FW_PAYLOAD=y
-FW_PAYLOAD_ALIGN=0x1000
diff --git a/platform/kendryte/k210/platform.c b/platform/kendryte/k210/platform.c
deleted file mode 100644
index 0b76104c..00000000
--- a/platform/kendryte/k210/platform.c
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * SPDX-License-Identifier: BSD-2-Clause
- *
- * Copyright (c) 2019 Western Digital Corporation or its affiliates.
- *
- * Authors:
- *   Damien Le Moal <damien.lemoal at wdc.com>
- */
-
-#include <sbi/riscv_asm.h>
-#include <sbi/riscv_encoding.h>
-#include <sbi/sbi_const.h>
-#include <sbi/sbi_platform.h>
-#include <sbi/sbi_system.h>
-#include <sbi_utils/fdt/fdt_helper.h>
-#include <sbi_utils/fdt/fdt_fixup.h>
-#include <sbi_utils/ipi/aclint_mswi.h>
-#include <sbi_utils/irqchip/plic.h>
-#include <sbi_utils/serial/sifive-uart.h>
-#include <sbi_utils/timer/aclint_mtimer.h>
-#include "platform.h"
-
-extern const char dt_k210_start[];
-
-unsigned long fw_platform_init(unsigned long arg0, unsigned long arg1,
-				unsigned long arg2, unsigned long arg3,
-				unsigned long arg4)
-{
-	return (unsigned long)&dt_k210_start[0];
-}
-
-static struct plic_data plic = {
-	.unique_id = 0,
-	.addr = K210_PLIC_BASE_ADDR,
-	.size = K210_PLIC_BASE_SIZE,
-	.num_src = K210_PLIC_NUM_SOURCES,
-	.context_map = {
-		[0] = { 0, 1 },
-		[1] = { 2, 3 },
-	},
-};
-
-static struct aclint_mswi_data mswi = {
-	.addr = K210_ACLINT_MSWI_ADDR,
-	.size = ACLINT_MSWI_SIZE,
-	.first_hartid = 0,
-	.hart_count = K210_HART_COUNT,
-};
-
-static struct aclint_mtimer_data mtimer = {
-	.mtime_freq = K210_ACLINT_MTIMER_FREQ,
-	.mtime_addr = K210_ACLINT_MTIMER_ADDR +
-		      ACLINT_DEFAULT_MTIME_OFFSET,
-	.mtime_size = ACLINT_DEFAULT_MTIME_SIZE,
-	.mtimecmp_addr = K210_ACLINT_MTIMER_ADDR +
-			 ACLINT_DEFAULT_MTIMECMP_OFFSET,
-	.mtimecmp_size = ACLINT_DEFAULT_MTIMECMP_SIZE,
-	.first_hartid = 0,
-	.hart_count = K210_HART_COUNT,
-	.has_64bit_mmio = true,
-};
-
-static u32 k210_get_clk_freq(void)
-{
-	u32 clksel0, pll0;
-	u64 pll0_freq, clkr0, clkf0, clkod0, div;
-
-	/*
-	 * If the clock selector is not set, use the base frequency.
-	 * Otherwise, use PLL0 frequency with a frequency divisor.
-	 */
-	clksel0 = k210_read_sysreg(K210_CLKSEL0);
-	if (!(clksel0 & 0x1))
-		return K210_CLK0_FREQ;
-
-	/*
-	 * Get PLL0 frequency:
-	 * freq = base frequency * clkf0 / (clkr0 * clkod0)
-	 */
-	pll0 = k210_read_sysreg(K210_PLL0);
-	clkr0 = 1 + (pll0 & 0x0000000f);
-	clkf0 = 1 + ((pll0 & 0x000003f0) >> 4);
-	clkod0 = 1 + ((pll0 & 0x00003c00) >> 10);
-	pll0_freq = clkf0 * K210_CLK0_FREQ / (clkr0 * clkod0);
-
-	/* Get the frequency divisor from the clock selector */
-	div = 2ULL << ((clksel0 & 0x00000006) >> 1);
-
-	return pll0_freq / div;
-}
-
-static int k210_system_reset_check(u32 type, u32 reason)
-{
-	return 1;
-}
-
-static void k210_system_reset(u32 type, u32 reason)
-{
-	u32 val;
-
-	val = k210_read_sysreg(K210_RESET);
-	val |= K210_RESET_MASK;
-	k210_write_sysreg(val, K210_RESET);
-
-	while (1);
-}
-
-static struct sbi_system_reset_device k210_reset = {
-	.name = "kendryte_k210_reset",
-	.system_reset_check = k210_system_reset_check,
-	.system_reset = k210_system_reset
-};
-
-static int k210_early_init(bool cold_boot)
-{
-	int rc;
-
-	if (!cold_boot)
-		return 0;
-
-	sbi_system_reset_add_device(&k210_reset);
-
-	rc = sifive_uart_init(K210_UART_BASE_ADDR, k210_get_clk_freq(),
-			      K210_UART_BAUDRATE);
-	if (rc)
-		return rc;
-
-	return aclint_mswi_cold_init(&mswi);
-}
-
-static int k210_final_init(bool cold_boot)
-{
-	void *fdt;
-
-	if (!cold_boot)
-		return 0;
-
-	fdt = fdt_get_address_rw();
-
-	fdt_cpu_fixup(fdt);
-	fdt_fixups(fdt);
-
-	return 0;
-}
-
-static int k210_irqchip_init(void)
-{
-	return plic_cold_irqchip_init(&plic);
-}
-
-static int k210_timer_init(void)
-{
-	return aclint_mtimer_cold_init(&mtimer, NULL);
-}
-
-const struct sbi_platform_operations platform_ops = {
-	.early_init	= k210_early_init,
-
-	.final_init	= k210_final_init,
-
-	.irqchip_init = k210_irqchip_init,
-
-	.timer_init	   = k210_timer_init,
-};
-
-const struct sbi_platform platform = {
-	.opensbi_version	= OPENSBI_VERSION,
-	.platform_version   	= SBI_PLATFORM_VERSION(0x0, 0x01),
-	.name			= "Kendryte K210",
-	.features		= 0,
-	.hart_count		= K210_HART_COUNT,
-	.hart_stack_size	= SBI_PLATFORM_DEFAULT_HART_STACK_SIZE,
-	.heap_size		=
-			SBI_PLATFORM_DEFAULT_HEAP_SIZE(K210_HART_COUNT),
-	.platform_ops_addr	= (unsigned long)&platform_ops
-};
diff --git a/platform/kendryte/k210/platform.h b/platform/kendryte/k210/platform.h
deleted file mode 100644
index 9417403d..00000000
--- a/platform/kendryte/k210/platform.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * SPDX-License-Identifier: BSD-2-Clause
- *
- * Copyright (c) 2019 Western Digital Corporation or its affiliates.
- *
- * Authors:
- *   Damien Le Moal <damien.lemoal at wdc.com>
- */
-#ifndef _K210_PLATFORM_H_
-#define _K210_PLATFORM_H_
-
-#include <sbi/riscv_io.h>
-
-#define K210_HART_COUNT		2
-
-#define K210_UART_BAUDRATE	115200
-#define K210_ACLINT_MTIMER_FREQ	7800000
-#define K210_CLK0_FREQ		26000000UL
-#define K210_PLIC_NUM_SOURCES	65
-
-/* Registers base address */
-#define K210_SYSCTL_BASE_ADDR	0x50440000ULL
-#define K210_UART_BASE_ADDR	0x38000000ULL
-#define K210_CLINT_BASE_ADDR	0x02000000ULL
-#define K210_ACLINT_MSWI_ADDR	\
-		(K210_CLINT_BASE_ADDR + CLINT_MSWI_OFFSET)
-#define K210_ACLINT_MTIMER_ADDR \
-		(K210_CLINT_BASE_ADDR + CLINT_MTIMER_OFFSET)
-#define K210_PLIC_BASE_ADDR	0x0C000000ULL
-#define K210_PLIC_BASE_SIZE	(0x200000ULL + (K210_HART_COUNT * 0x1000))
-
-/* Registers */
-#define K210_PLL0		0x08
-#define K210_CLKSEL0		0x20
-#define K210_RESET		0x30
-
-/* Register bit masks */
-#define K210_RESET_MASK		0x01
-
-static inline u32 k210_read_sysreg(u32 reg)
-{
-	return readl((volatile void *)(K210_SYSCTL_BASE_ADDR + reg));
-}
-
-static inline void k210_write_sysreg(u32 val, u32 reg)
-{
-	writel(val, (volatile void *)(K210_SYSCTL_BASE_ADDR + reg));
-}
-
-#endif /* _K210_PLATFORM_H_ */
diff --git a/scripts/create-binary-archive.sh b/scripts/create-binary-archive.sh
index 6ea4c9c5..7f211788 100755
--- a/scripts/create-binary-archive.sh
+++ b/scripts/create-binary-archive.sh
@@ -100,7 +100,6 @@ build_opensbi() {
 	64)
 		# Setup 64-bit platform list
 		BUILD_PLATFORM_SUBDIR+=("nuclei/ux600")
-		BUILD_PLATFORM_SUBDIR+=("kendryte/k210")
 		BUILD_PLATFORM_SUBDIR+=("generic")
 		;;
 	*)
-- 
2.43.0




More information about the opensbi mailing list